From cfde07678a4086b724c6333f8607df92c7fbf92b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 9 Nov 2020 11:26:29 +0100 Subject: [PATCH 001/203] Adds integration test based on adder collator (#1928) * Adds integration test based on adder collator This adds an integration test for parachains that uses the adder collator. The test will start two relay chain nodes and one collator and waits until 4 blocks are build and enacted by the parachain. * Make sure the integration test is run in CI * Fix wasm compilation * Update parachain/test-parachains/adder/collator/src/lib.rs Co-authored-by: Sergei Shulepov * Update cli/src/command.rs Co-authored-by: Sergei Shulepov --- Cargo.lock | 321 +++++++++--------- cli/Cargo.toml | 14 +- cli/src/command.rs | 6 +- node/core/candidate-validation/src/lib.rs | 113 +++--- node/service/src/chain_spec.rs | 4 +- node/service/src/lib.rs | 11 +- node/subsystem-util/src/lib.rs | 1 + node/test/client/Cargo.toml | 1 + node/test/client/src/block_builder.rs | 9 +- node/test/service/Cargo.toml | 5 +- node/test/service/src/chain_spec.rs | 49 ++- node/test/service/src/lib.rs | 130 +++++-- node/test/service/tests/build-blocks.rs | 4 +- node/test/service/tests/call-function.rs | 4 +- parachain/src/wasm_executor/mod.rs | 46 +-- .../test-parachains/adder/collator/Cargo.toml | 8 + .../test-parachains/adder/collator/src/lib.rs | 37 +- .../adder/collator/src/main.rs | 11 +- .../adder/collator/tests/integration.rs | 73 ++++ rpc/Cargo.toml | 2 +- runtime/rococo/src/lib.rs | 4 +- runtime/test-runtime/src/constants.rs | 6 +- runtime/test-runtime/src/lib.rs | 18 +- scripts/gitlab/test_linux_stable.sh | 2 +- 24 files changed, 546 insertions(+), 333 deletions(-) create mode 100644 parachain/test-parachains/adder/collator/tests/integration.rs diff --git a/Cargo.lock b/Cargo.lock index ca21ba2cea..d571ac2fd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1494,7 +1494,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", ] @@ -1502,7 +1502,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -1520,7 +1520,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "chrono", "frame-benchmarking", @@ -1542,7 +1542,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -1558,7 +1558,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "serde", @@ -1569,7 +1569,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "bitflags", "frame-metadata", @@ -1594,7 +1594,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1617,7 +1617,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1627,7 +1627,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -1643,7 +1643,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -1657,7 +1657,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-api", @@ -2502,9 +2502,9 @@ dependencies = [ [[package]] name = "jsonrpc-client-transports" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f7b1cdf66312002e15682a24430728bd13036c641163c016bc53fb686a7c2d" +checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7" dependencies = [ "failure", "futures 0.1.29", @@ -2518,9 +2518,9 @@ dependencies = [ [[package]] name = "jsonrpc-core" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b12567a31d48588a65b6cf870081e6ba1d7b2ae353977cb9820d512e69c70" +checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa" dependencies = [ "futures 0.1.29", "log 0.4.11", @@ -2531,18 +2531,18 @@ dependencies = [ [[package]] name = "jsonrpc-core-client" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d175ca0cf77439b5495612bf216c650807d252d665b4b70ab2eebd895a88fac1" +checksum = "6f764902d7b891344a0acb65625f32f6f7c6db006952143bd650209fbe7d94db" dependencies = [ "jsonrpc-client-transports", ] [[package]] name = "jsonrpc-derive" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2cc6ea7f785232d9ca8786a44e9fa698f92149dcdc1acc4aa1fc69c4993d79e" +checksum = "99a847f9ec7bb52149b2786a17c9cb260d6effc6b8eeb8c16b343a487a7563a3" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -2552,9 +2552,9 @@ dependencies = [ [[package]] name = "jsonrpc-http-server" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9996b26c0c7a59626d0ed6c5ec8bf06218e62ce1474bd2849f9b9fd38a0158c0" +checksum = "4fb5c4513b7b542f42da107942b7b759f27120b5cc894729f88254b28dff44b7" dependencies = [ "hyper 0.12.35", "jsonrpc-core", @@ -2567,9 +2567,9 @@ dependencies = [ [[package]] name = "jsonrpc-ipc-server" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e8f2278fb2b277175b6e21b23e7ecf30e78daff5ee301d0a2a411d9a821a0a" +checksum = "cf50e53e4eea8f421a7316c5f63e395f7bc7c4e786a6dc54d76fab6ff7aa7ce7" dependencies = [ "jsonrpc-core", "jsonrpc-server-utils", @@ -2581,9 +2581,9 @@ dependencies = [ [[package]] name = "jsonrpc-pubsub" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f389c5cd1f3db258a99296892c21047e21ae73ff4c0e2d39650ea86fe994b4c7" +checksum = "639558e0604013be9787ae52f798506ae42bf4220fe587bdc5625871cc8b9c77" dependencies = [ "jsonrpc-core", "log 0.4.11", @@ -2594,9 +2594,9 @@ dependencies = [ [[package]] name = "jsonrpc-server-utils" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c623e1895d0d9110cb0ea7736cfff13191ff52335ad33b21bd5c775ea98b27af" +checksum = "72f1f3990650c033bd8f6bd46deac76d990f9bbfb5f8dc8c4767bf0a00392176" dependencies = [ "bytes 0.4.12", "globset", @@ -2610,9 +2610,9 @@ dependencies = [ [[package]] name = "jsonrpc-ws-server" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436a92034d0137ab3e3c64a7a6350b428f31cb4d7d1a89f284bcdbcd98a7bc56" +checksum = "6596fe75209b73a2a75ebe1dce4e60e03b88a2b25e8807b667597f6315150d22" dependencies = [ "jsonrpc-core", "jsonrpc-server-utils", @@ -3847,7 +3847,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -3863,7 +3863,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -3878,7 +3878,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3903,7 +3903,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3917,7 +3917,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3933,7 +3933,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3948,7 +3948,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3963,7 +3963,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3984,7 +3984,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4000,7 +4000,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4020,7 +4020,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4037,7 +4037,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4051,7 +4051,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4067,7 +4067,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4081,7 +4081,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4096,7 +4096,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4117,7 +4117,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4133,7 +4133,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4146,7 +4146,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "enumflags2", "frame-support", @@ -4161,7 +4161,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4176,7 +4176,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4212,7 +4212,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4226,7 +4226,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4248,7 +4248,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4273,7 +4273,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4291,7 +4291,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "frame-system", @@ -4308,7 +4308,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4326,7 +4326,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-support", "parity-scale-codec", @@ -4339,7 +4339,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4370,7 +4370,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4861,6 +4861,7 @@ version = "0.8.26" dependencies = [ "frame-benchmarking-cli", "log 0.4.11", + "polkadot-parachain", "polkadot-service", "sc-cli", "sc-service", @@ -5604,6 +5605,7 @@ name = "polkadot-test-client" version = "0.8.26" dependencies = [ "parity-scale-codec", + "polkadot-node-subsystem", "polkadot-primitives", "polkadot-test-runtime", "polkadot-test-service", @@ -5694,7 +5696,10 @@ dependencies = [ "pallet-balances", "pallet-staking", "pallet-transaction-payment", + "polkadot-node-primitives", + "polkadot-node-subsystem", "polkadot-overseer", + "polkadot-parachain", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime-common", @@ -5710,12 +5715,12 @@ dependencies = [ "sc-consensus-babe", "sc-executor", "sc-finality-grandpa", - "sc-informant", "sc-network", "sc-service", "sc-transaction-pool", "serde_json", "sp-arithmetic", + "sp-authority-discovery", "sp-blockchain", "sp-consensus", "sp-consensus-babe", @@ -6581,7 +6586,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "async-trait", "bytes 0.5.6", @@ -6611,7 +6616,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -6635,7 +6640,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6652,7 +6657,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -6673,7 +6678,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6684,7 +6689,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6728,7 +6733,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6739,7 +6744,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "fnv", @@ -6776,7 +6781,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "blake2-rfc", "hash-db", @@ -6806,7 +6811,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6817,7 +6822,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "fork-tree", @@ -6862,7 +6867,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "futures 0.3.5", @@ -6886,7 +6891,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6899,7 +6904,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -6923,7 +6928,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "sc-client-api", @@ -6937,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "lazy_static", @@ -6966,7 +6971,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "log 0.4.11", @@ -6983,7 +6988,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -6998,7 +7003,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -7016,7 +7021,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "finality-grandpa", @@ -7053,7 +7058,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "finality-grandpa", @@ -7077,7 +7082,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "ansi_term 0.12.1", "futures 0.3.5", @@ -7095,7 +7100,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "async-trait", "derive_more", @@ -7115,7 +7120,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "hash-db", "lazy_static", @@ -7134,7 +7139,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "async-std", "async-trait", @@ -7188,7 +7193,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -7203,7 +7208,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "bytes 0.5.6", "fnv", @@ -7230,7 +7235,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "libp2p", @@ -7243,7 +7248,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "substrate-prometheus-endpoint", @@ -7252,7 +7257,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "hash-db", @@ -7285,7 +7290,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "futures 0.3.5", @@ -7309,7 +7314,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7327,7 +7332,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "directories", @@ -7391,7 +7396,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -7405,7 +7410,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7424,7 +7429,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -7445,7 +7450,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "erased-serde", "log 0.4.11", @@ -7464,7 +7469,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "futures 0.3.5", @@ -7485,7 +7490,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "futures 0.3.5", @@ -7923,7 +7928,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "log 0.4.11", @@ -7935,7 +7940,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "hash-db", "parity-scale-codec", @@ -7950,7 +7955,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7962,7 +7967,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "serde", @@ -7974,7 +7979,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7987,7 +7992,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-api", @@ -7999,7 +8004,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8010,7 +8015,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8022,7 +8027,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "lru 0.4.3", @@ -8039,7 +8044,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "serde", "serde_json", @@ -8048,7 +8053,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -8074,7 +8079,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "merlin", "parity-scale-codec", @@ -8094,7 +8099,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8103,7 +8108,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8115,7 +8120,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "base58", "blake2-rfc", @@ -8159,7 +8164,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8168,7 +8173,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8178,7 +8183,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "environmental", "parity-scale-codec", @@ -8189,7 +8194,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "finality-grandpa", "log 0.4.11", @@ -8206,7 +8211,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8218,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "hash-db", @@ -8242,7 +8247,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "lazy_static", "sp-core", @@ -8253,7 +8258,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "async-trait", "derive_more", @@ -8269,7 +8274,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "serde", @@ -8281,7 +8286,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8292,7 +8297,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "sp-api", "sp-core", @@ -8302,7 +8307,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "backtrace", "log 0.4.11", @@ -8311,7 +8316,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "serde", "sp-core", @@ -8320,7 +8325,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "either", "hash256-std-hasher", @@ -8342,7 +8347,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8358,7 +8363,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "Inflector", "proc-macro-crate", @@ -8370,7 +8375,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "serde", "serde_json", @@ -8379,7 +8384,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8392,7 +8397,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8402,7 +8407,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "hash-db", "log 0.4.11", @@ -8424,12 +8429,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8442,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "sp-core", @@ -8455,7 +8460,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8469,7 +8474,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -8482,7 +8487,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "derive_more", "futures 0.3.5", @@ -8497,7 +8502,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "hash-db", "memory-db", @@ -8511,7 +8516,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "futures-core", @@ -8523,7 +8528,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8535,7 +8540,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8677,7 +8682,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "chrono", "console_error_panic_hook", @@ -8703,7 +8708,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "platforms", ] @@ -8711,7 +8716,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.5", @@ -8734,7 +8739,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "async-std", "derive_more", @@ -8748,7 +8753,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.1.29", "futures 0.3.5", @@ -8775,7 +8780,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "futures 0.3.5", "substrate-test-utils-derive", @@ -8785,7 +8790,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#b7712fed2c58a898f7706e16861d7109c8f585a5" +source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -8908,6 +8913,7 @@ name = "test-parachain-adder-collator" version = "0.7.26" dependencies = [ "futures 0.3.5", + "futures-timer 3.0.2", "log 0.4.11", "parity-scale-codec", "polkadot-cli", @@ -8916,11 +8922,16 @@ dependencies = [ "polkadot-parachain", "polkadot-primitives", "polkadot-service", + "polkadot-test-service", "sc-authority-discovery", "sc-cli", + "sc-service", "sp-core", + "sp-keyring", "structopt", + "substrate-test-utils", "test-parachain-adder", + "tokio 0.2.21", ] [[package]] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index b1c366a3ab..df5375af33 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -17,17 +17,19 @@ crate-type = ["cdylib", "rlib"] log = "0.4.11" thiserror = "1.0.21" structopt = { version = "0.3.8", optional = true } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } +wasm-bindgen = { version = "0.2.57", optional = true } +wasm-bindgen-futures = { version = "0.4.7", optional = true } + service = { package = "polkadot-service", path = "../node/service", default-features = false, optional = true } +polkadot-parachain = { path = "../parachain", optional = true } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } - -wasm-bindgen = { version = "0.2.57", optional = true } -wasm-bindgen-futures = { version = "0.4.7", optional = true } browser-utils = { package = "substrate-browser-utils", git = "https://github.com/paritytech/substrate", branch = "master", optional = true } + # this crate is used only to enable `trie-memory-tracker` feature # see https://github.com/paritytech/substrate/pull/6745 sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -36,7 +38,7 @@ sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master", substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } [features] -default = [ "wasmtime", "db", "cli", "full-node", "trie-memory-tracker" ] +default = [ "wasmtime", "db", "cli", "full-node", "trie-memory-tracker", "polkadot-parachain" ] wasmtime = [ "sc-cli/wasmtime" ] db = [ "service/db" ] cli = [ diff --git a/cli/src/command.rs b/cli/src/command.rs index 2177afdd7b..6d2aa1acd6 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -219,11 +219,11 @@ pub fn run() -> Result<()> { Some(Subcommand::ValidationWorker(cmd)) => { let _ = sc_cli::init_logger("", sc_tracing::TracingReceiver::Log, None); - if cfg!(feature = "browser") { + if cfg!(feature = "browser") || cfg!(target_os = "android") { Err(sc_cli::Error::Input("Cannot run validation worker in browser".into())) } else { - #[cfg(all(not(feature = "browser"), not(feature = "service-rewr")))] - service::run_validation_worker(&cmd.mem_id)?; + #[cfg(not(any(target_os = "android", feature = "browser")))] + polkadot_parachain::wasm_executor::run_worker(&cmd.mem_id)?; Ok(()) } }, diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 29ceb0d33a..dbcd1eab4b 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -31,19 +31,14 @@ use polkadot_subsystem::{ ValidationFailed, RuntimeApiRequest, }, }; -use polkadot_node_subsystem_util::{ - metrics::{self, prometheus}, -}; +use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_subsystem::errors::RuntimeApiError; use polkadot_node_primitives::{ValidationResult, InvalidCandidate}; use polkadot_primitives::v1::{ ValidationCode, PoV, CandidateDescriptor, PersistedValidationData, OccupiedCoreAssumption, Hash, ValidationOutputs, }; -use polkadot_parachain::wasm_executor::{ - self, ValidationPool, ExecutionMode, ValidationError, - InvalidCandidate as WasmInvalidCandidate, -}; +use polkadot_parachain::wasm_executor::{self, ExecutionMode, ValidationError, InvalidCandidate as WasmInvalidCandidate}; use polkadot_parachain::primitives::{ValidationResult as WasmValidationResult, ValidationParams}; use parity_scale_codec::Encode; @@ -60,57 +55,13 @@ const LOG_TARGET: &'static str = "candidate_validation"; pub struct CandidateValidationSubsystem { spawn: S, metrics: Metrics, -} - -#[derive(Clone)] -struct MetricsInner { - validation_requests: prometheus::CounterVec, -} - -/// Candidate validation metrics. -#[derive(Default, Clone)] -pub struct Metrics(Option); - -impl Metrics { - fn on_validation_event(&self, event: &Result) { - if let Some(metrics) = &self.0 { - match event { - Ok(ValidationResult::Valid(_, _)) => { - metrics.validation_requests.with_label_values(&["valid"]).inc(); - }, - Ok(ValidationResult::Invalid(_)) => { - metrics.validation_requests.with_label_values(&["invalid"]).inc(); - }, - Err(_) => { - metrics.validation_requests.with_label_values(&["validation failure"]).inc(); - }, - } - } - } -} - -impl metrics::Metrics for Metrics { - fn try_register(registry: &prometheus::Registry) -> Result { - let metrics = MetricsInner { - validation_requests: prometheus::register( - prometheus::CounterVec::new( - prometheus::Opts::new( - "parachain_validation_requests_total", - "Number of validation requests served.", - ), - &["validity"], - )?, - registry, - )?, - }; - Ok(Metrics(Some(metrics))) - } + execution_mode: ExecutionMode, } impl CandidateValidationSubsystem { /// Create a new `CandidateValidationSubsystem` with the given task spawner. - pub fn new(spawn: S, metrics: Metrics) -> Self { - CandidateValidationSubsystem { spawn, metrics } + pub fn new(spawn: S, metrics: Metrics, execution_mode: ExecutionMode) -> Self { + CandidateValidationSubsystem { spawn, metrics, execution_mode } } } @@ -119,7 +70,7 @@ impl Subsystem for CandidateValidationSubsystem where S: SpawnNamed + Clone + 'static, { fn start(self, ctx: C) -> SpawnedSubsystem { - let future = run(ctx, self.spawn, self.metrics) + let future = run(ctx, self.spawn, self.metrics, self.execution_mode) .map_err(|e| SubsystemError::with_origin("candidate-validation", e)) .boxed(); SpawnedSubsystem { @@ -133,11 +84,8 @@ async fn run( mut ctx: impl SubsystemContext, spawn: impl SpawnNamed + Clone + 'static, metrics: Metrics, -) - -> SubsystemResult<()> -{ - let execution_mode = ExecutionMode::ExternalProcessSelfHost(ValidationPool::new()); - + execution_mode: ExecutionMode, +) -> SubsystemResult<()> { loop { match ctx.recv().await? { FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {} @@ -499,6 +447,51 @@ fn validate_candidate_exhaustive( } } +#[derive(Clone)] +struct MetricsInner { + validation_requests: prometheus::CounterVec, +} + +/// Candidate validation metrics. +#[derive(Default, Clone)] +pub struct Metrics(Option); + +impl Metrics { + fn on_validation_event(&self, event: &Result) { + if let Some(metrics) = &self.0 { + match event { + Ok(ValidationResult::Valid(_, _)) => { + metrics.validation_requests.with_label_values(&["valid"]).inc(); + }, + Ok(ValidationResult::Invalid(_)) => { + metrics.validation_requests.with_label_values(&["invalid"]).inc(); + }, + Err(_) => { + metrics.validation_requests.with_label_values(&["validation failure"]).inc(); + }, + } + } + } +} + +impl metrics::Metrics for Metrics { + fn try_register(registry: &prometheus::Registry) -> Result { + let metrics = MetricsInner { + validation_requests: prometheus::register( + prometheus::CounterVec::new( + prometheus::Opts::new( + "parachain_validation_requests_total", + "Number of validation requests served.", + ), + &["validity"], + )?, + registry, + )?, + }; + Ok(Metrics(Some(metrics))) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index e51b011c3d..dc417ec16a 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -771,7 +771,7 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: pallet_sudo: Some(rococo_runtime::SudoConfig { key: endowed_accounts[0].clone(), }), - parachains_configuration: Some(rococo_runtime::ParachainConfigConfig { + parachains_configuration: Some(rococo_runtime::ParachainsConfigurationConfig { config: polkadot_runtime_parachains::configuration::HostConfiguration { validation_upgrade_frequency: 600u32, validation_upgrade_delay: 300, @@ -1223,7 +1223,7 @@ pub fn rococo_testnet_genesis( }), pallet_staking: Some(Default::default()), pallet_sudo: Some(rococo_runtime::SudoConfig { key: root_key }), - parachains_configuration: Some(rococo_runtime::ParachainConfigConfig { + parachains_configuration: Some(rococo_runtime::ParachainsConfigurationConfig { config: polkadot_runtime_parachains::configuration::HostConfiguration { validation_upgrade_frequency: 600u32, validation_upgrade_delay: 300, diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 6fd2b8a432..450dcb2acf 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -50,7 +50,7 @@ use service::RpcHandlers; pub use self::client::{AbstractClient, Client, ClientHandle, ExecuteWithClient, RuntimeApiCollection}; pub use chain_spec::{PolkadotChainSpec, KusamaChainSpec, WestendChainSpec, RococoChainSpec}; pub use consensus_common::{Proposal, SelectChain, BlockImport, RecordProof, block_validation::Chain}; -pub use polkadot_parachain::wasm_executor::run_worker as run_validation_worker; +pub use polkadot_parachain::wasm_executor::ExecutionMode; pub use polkadot_primitives::v1::{Block, BlockId, CollatorId, Hash, Id as ParaId}; pub use sc_client_api::{Backend, ExecutionStrategy, CallExecutor}; pub use sc_consensus::LongestChain; @@ -296,6 +296,7 @@ fn real_overseer( registry: Option<&Registry>, spawner: Spawner, _: IsCollator, + _: ExecutionMode, ) -> Result<(Overseer, OverseerHandler), Error> where RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend, @@ -321,6 +322,7 @@ fn real_overseer( registry: Option<&Registry>, spawner: Spawner, is_collator: IsCollator, + execution_mode: ExecutionMode, ) -> Result<(Overseer, OverseerHandler), Error> where RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend, @@ -375,6 +377,7 @@ where candidate_validation: CandidateValidationSubsystem::new( spawner.clone(), Metrics::register(registry)?, + execution_mode, ), chain_api: ChainApiSubsystem::new( runtime_client.clone(), @@ -476,6 +479,7 @@ pub fn new_full( is_collator: IsCollator, grandpa_pause: Option<(u32, u32)>, authority_discovery_config: Option, + execution_mode: ExecutionMode, ) -> Result>>, Error> where RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, @@ -611,6 +615,7 @@ pub fn new_full( prometheus_registry.as_ref(), spawner, is_collator, + execution_mode, )?; let overseer_handler_clone = overseer_handler.clone(); @@ -910,6 +915,7 @@ pub fn build_full( is_collator, grandpa_pause, authority_discovery_config, + Default::default(), ).map(|full| full.with_client(Client::Rococo)) } else if config.chain_spec.is_kusama() { new_full::( @@ -917,6 +923,7 @@ pub fn build_full( is_collator, grandpa_pause, authority_discovery_config, + Default::default(), ).map(|full| full.with_client(Client::Kusama)) } else if config.chain_spec.is_westend() { new_full::( @@ -924,6 +931,7 @@ pub fn build_full( is_collator, grandpa_pause, authority_discovery_config, + Default::default(), ).map(|full| full.with_client(Client::Westend)) } else { new_full::( @@ -931,6 +939,7 @@ pub fn build_full( is_collator, grandpa_pause, authority_discovery_config, + Default::default(), ).map(|full| full.with_client(Client::Polkadot)) } } diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 08fde2ff3e..bb84ef1171 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -292,6 +292,7 @@ pub async fn signing_key(validators: &[ValidatorId], keystore: SyncCryptoStorePt /// /// It can be created if the local node is a validator in the context of a particular /// relay chain block. +#[derive(Debug)] pub struct Validator { signing_context: SigningContext, key: ValidatorId, diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index 794dc2ea08..2b0d6dd91f 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -11,6 +11,7 @@ codec = { package = "parity-scale-codec", version = "1.3.4", default-features = polkadot-test-runtime = { path = "../../../runtime/test-runtime" } polkadot-test-service = { path = "../service" } polkadot-primitives = { path = "../../../primitives" } +polkadot-node-subsystem = { path = "../../subsystem" } # Substrate dependencies substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/test/client/src/block_builder.rs b/node/test/client/src/block_builder.rs index f377bf6c16..5d17b8a766 100644 --- a/node/test/client/src/block_builder.rs +++ b/node/test/client/src/block_builder.rs @@ -69,7 +69,14 @@ impl InitPolkadotBlockBuilder for Client { inherent_data .put_data(sp_timestamp::INHERENT_IDENTIFIER, ×tamp) - .expect("Put timestamp failed"); + .expect("Put timestamp inherent data"); + + inherent_data + .put_data( + polkadot_primitives::v1::INCLUSION_INHERENT_IDENTIFIER, + &polkadot_node_subsystem::messages::ProvisionerInherentData::default(), + ) + .expect("Put inclusion inherent data"); let inherents = block_builder.create_inherents(inherent_data).expect("Creates inherents"); diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 6e8ba29648..0dbffe78e1 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -15,13 +15,17 @@ tempfile = "3.1.0" # Polkadot dependencies polkadot-overseer = { path = "../../overseer" } polkadot-primitives = { path = "../../../primitives" } +polkadot-parachain = { path = "../../../parachain" } polkadot-rpc = { path = "../../../rpc" } polkadot-runtime-common = { path = "../../../runtime/common" } polkadot-service = { path = "../../service" } +polkadot-node-subsystem = { path = "../../subsystem" } +polkadot-node-primitives = { path = "../../primitives" } polkadot-test-runtime = { path = "../../../runtime/test-runtime" } polkadot-runtime-parachains = { path = "../../../runtime/parachains" } # Substrate dependencies +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } babe = { package = "sc-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master" } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master" } @@ -39,7 +43,6 @@ sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-informant = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } service = { package = "sc-service", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/node/test/service/src/chain_spec.rs b/node/test/service/src/chain_spec.rs index e677d0b9ac..35d610a972 100644 --- a/node/test/service/src/chain_spec.rs +++ b/node/test/service/src/chain_spec.rs @@ -16,10 +16,11 @@ //! Chain specifications for the test runtime. +use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use babe_primitives::AuthorityId as BabeId; use grandpa::AuthorityId as GrandpaId; use pallet_staking::Forcing; -use polkadot_primitives::v0::{ValidatorId, AccountId}; +use polkadot_primitives::v1::{ValidatorId, AccountId}; use polkadot_service::chain_spec::{get_account_id_from_seed, get_from_seed, Extensions}; use polkadot_test_runtime::constants::currency::DOTS; use sc_chain_spec::{ChainSpec, ChainType}; @@ -53,7 +54,6 @@ pub fn polkadot_local_testnet_genesis() -> polkadot_test_runtime::GenesisConfig vec![ get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob"), - get_authority_keys_from_seed("Charlie"), ], get_account_id_from_seed::("Alice"), None, @@ -63,13 +63,14 @@ pub fn polkadot_local_testnet_genesis() -> polkadot_test_runtime::GenesisConfig /// Helper function to generate stash, controller and session key from seed fn get_authority_keys_from_seed( seed: &str, -) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId) { +) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AuthorityDiscoveryId) { ( get_account_id_from_seed::(&format!("{}//stash", seed)), get_account_id_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), + get_from_seed::(seed), ) } @@ -92,46 +93,47 @@ fn testnet_accounts() -> Vec { /// Helper function to create polkadot GenesisConfig for testing fn polkadot_testnet_genesis( - initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ValidatorId)>, + initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AuthorityDiscoveryId)>, root_key: AccountId, endowed_accounts: Option>, ) -> polkadot_test_runtime::GenesisConfig { - use polkadot_test_runtime as polkadot; + use polkadot_test_runtime as runtime; let endowed_accounts: Vec = endowed_accounts.unwrap_or_else(testnet_accounts); const ENDOWMENT: u128 = 1_000_000 * DOTS; const STASH: u128 = 100 * DOTS; - polkadot::GenesisConfig { - frame_system: Some(polkadot::SystemConfig { - code: polkadot::WASM_BINARY.expect("Wasm binary must be built for testing").to_vec(), + runtime::GenesisConfig { + frame_system: Some(runtime::SystemConfig { + code: runtime::WASM_BINARY.expect("Wasm binary must be built for testing").to_vec(), ..Default::default() }), - pallet_indices: Some(polkadot::IndicesConfig { indices: vec![] }), - pallet_balances: Some(polkadot::BalancesConfig { + pallet_indices: Some(runtime::IndicesConfig { indices: vec![] }), + pallet_balances: Some(runtime::BalancesConfig { balances: endowed_accounts .iter() .map(|k| (k.clone(), ENDOWMENT)) .collect(), }), - pallet_session: Some(polkadot::SessionConfig { + pallet_session: Some(runtime::SessionConfig { keys: initial_authorities .iter() .map(|x| { ( x.0.clone(), x.0.clone(), - polkadot_test_runtime::SessionKeys { + runtime::SessionKeys { babe: x.2.clone(), grandpa: x.3.clone(), parachain_validator: x.4.clone(), + authority_discovery: x.5.clone(), }, ) }) .collect::>(), }), - pallet_staking: Some(polkadot::StakingConfig { + pallet_staking: Some(runtime::StakingConfig { minimum_validator_count: 1, validator_count: 2, stakers: initial_authorities @@ -141,7 +143,7 @@ fn polkadot_testnet_genesis( x.0.clone(), x.1.clone(), STASH, - polkadot::StakerStatus::Validator, + runtime::StakerStatus::Validator, ) }) .collect(), @@ -152,13 +154,24 @@ fn polkadot_testnet_genesis( }), pallet_babe: Some(Default::default()), pallet_grandpa: Some(Default::default()), - pallet_authority_discovery: Some(polkadot::AuthorityDiscoveryConfig { keys: vec![] }), - claims: Some(polkadot::ClaimsConfig { + pallet_authority_discovery: Some(runtime::AuthorityDiscoveryConfig { keys: vec![] }), + claims: Some(runtime::ClaimsConfig { claims: vec![], vesting: vec![], }), - pallet_vesting: Some(polkadot::VestingConfig { vesting: vec![] }), - pallet_sudo: Some(polkadot::SudoConfig { key: root_key }), + pallet_vesting: Some(runtime::VestingConfig { vesting: vec![] }), + pallet_sudo: Some(runtime::SudoConfig { key: root_key }), + parachains_configuration: Some(runtime::ParachainsConfigurationConfig { + config: polkadot_runtime_parachains::configuration::HostConfiguration { + validation_upgrade_frequency: 10u32, + validation_upgrade_delay: 5, + acceptance_period: 1200, + max_code_size: 5 * 1024 * 1024, + max_head_data_size: 32 * 1024, + group_rotation_frequency: 10, + ..Default::default() + }, + }), } } diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 5fed8153b8..37877e257a 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -23,17 +23,22 @@ pub mod chain_spec; pub use chain_spec::*; use futures::future::Future; use polkadot_overseer::OverseerHandler; -use polkadot_primitives::v1::{Id as ParaId, HeadData, ValidationCode, Balance}; +use polkadot_primitives::v1::{ + Id as ParaId, HeadData, ValidationCode, Balance, CollatorPair, CollatorId, ValidationData, Hash, +}; use polkadot_runtime_common::BlockHashCount; use polkadot_service::{ - new_full, NewFull, FullClient, ClientHandle, ExecuteWithClient, IsCollator, + NewFull, FullClient, ClientHandle, ExecuteWithClient, IsCollator, +}; +use polkadot_node_subsystem::messages::{CollatorProtocolMessage, CollationGenerationMessage}; +use polkadot_test_runtime::{ + Runtime, SignedExtra, SignedPayload, VERSION, ParasSudoWrapperCall, SudoCall, UncheckedExtrinsic, }; -use polkadot_test_runtime::{Runtime, SignedExtra, SignedPayload, VERSION, ParasSudoWrapperCall, UncheckedExtrinsic}; +use polkadot_node_primitives::{Collation, CollationGenerationConfig}; use polkadot_runtime_parachains::paras::ParaGenesisArgs; use sc_chain_spec::ChainSpec; use sc_client_api::execution_extensions::ExecutionStrategies; use sc_executor::native_executor_instance; -use sc_informant::OutputFormat; use sc_network::{ config::{NetworkConfiguration, TransportConfig}, multiaddr, @@ -49,7 +54,7 @@ use sp_blockchain::HeaderBackend; use sp_keyring::Sr25519Keyring; use sp_runtime::{codec::Encode, generic, traits::IdentifyAccount, MultiSigner}; use sp_state_machine::BasicExternalities; -use std::{sync::Arc, time::Duration}; +use std::{sync::Arc, time::Duration, pin::Pin}; use substrate_test_client::{BlockchainEventsExt, RpcHandlersExt, RpcTransactionOutput, RpcTransactionError}; native_executor_instance!( @@ -64,23 +69,25 @@ pub type Client = FullClient Result< NewFull>, ServiceError, > { - new_full::( + polkadot_service::new_full::( config, - IsCollator::No, + is_collator, None, Some(sc_authority_discovery::WorkerConfig { query_interval: Duration::from_secs(1), query_start_delay: Duration::from_secs(0), ..Default::default() }), + polkadot_parachain::wasm_executor::ExecutionMode::InProcess, ).map_err(Into::into) } @@ -105,11 +112,14 @@ pub fn node_config( task_executor: TaskExecutor, key: Sr25519Keyring, boot_nodes: Vec, + is_validator: bool, ) -> Configuration { let base_path = BasePath::new_temp_dir().expect("could not create temporary directory"); let root = base_path.path(); - let role = Role::Authority { - sentry_nodes: Vec::new(), + let role = if is_validator { + Role::Authority { sentry_nodes: Vec::new() } + } else { + Role::Full }; let key_seed = key.to_seed(); let mut spec = polkadot_local_testnet_config(); @@ -127,17 +137,19 @@ pub fn node_config( Default::default(), None, ); - let informant_output_format = OutputFormat { - enable_color: false, - }; network_config.boot_nodes = boot_nodes; network_config.allow_non_globals_in_dht = true; + let addr: multiaddr::Multiaddr = multiaddr::Protocol::Memory(rand::random()).into(); network_config .listen_addresses - .push(multiaddr::Protocol::Memory(rand::random()).into()); + .push(addr.clone()); + + network_config + .public_addresses + .push(addr); network_config.transport = TransportConfig::MemoryOnly; @@ -148,10 +160,7 @@ pub fn node_config( task_executor, transaction_pool: Default::default(), network: network_config, - keystore: KeystoreConfig::Path { - path: root.join("key"), - password: None, - }, + keystore: KeystoreConfig::InMemory, database: DatabaseConfig::RocksDb { path: root.join("db"), cache_size: 128, @@ -189,28 +198,64 @@ pub fn node_config( max_runtime_instances: 8, announce_block: true, base_path: Some(base_path), - informant_output_format, + informant_output_format: Default::default(), + } +} + +/// Run a test validator node that uses the test runtime. +/// +/// The node will be using an in-memory socket, therefore you need to provide boot nodes if you +/// want it to be connected to other nodes. +/// +/// The `storage_update_func` function will be executed in an externalities provided environment +/// and can be used to make adjustements to the runtime genesis storage. +pub fn run_validator_node( + task_executor: TaskExecutor, + key: Sr25519Keyring, + storage_update_func: impl Fn(), + boot_nodes: Vec, +) -> PolkadotTestNode { + let config = node_config(storage_update_func, task_executor, key, boot_nodes, true); + let multiaddr = config.network.listen_addresses[0].clone(); + let NewFull { task_manager, client, network, rpc_handlers, overseer_handler, .. } = + new_full(config, IsCollator::No).expect("could not create Polkadot test service"); + + let overseer_handler = overseer_handler.expect("test node must have an overseer handler"); + let peer_id = network.local_peer_id().clone(); + let addr = MultiaddrWithPeerId { multiaddr, peer_id }; + + PolkadotTestNode { + task_manager, + client, + overseer_handler, + addr, + rpc_handlers, } } -/// Run a Polkadot test node using the Polkadot test runtime. +/// Run a test collator node that uses the test runtime. /// /// The node will be using an in-memory socket, therefore you need to provide boot nodes if you /// want it to be connected to other nodes. /// /// The `storage_update_func` function will be executed in an externalities provided environment /// and can be used to make adjustements to the runtime genesis storage. -pub fn run_test_node( +/// +/// # Note +/// +/// The collator functionionality still needs to be registered at the node! This can be done using +/// [`PolkadotTestNode::register_collator`]. +pub fn run_collator_node( task_executor: TaskExecutor, key: Sr25519Keyring, storage_update_func: impl Fn(), boot_nodes: Vec, + collator_id: CollatorId, ) -> PolkadotTestNode { - let config = node_config(storage_update_func, task_executor, key, boot_nodes); + let config = node_config(storage_update_func, task_executor, key, boot_nodes, false); let multiaddr = config.network.listen_addresses[0].clone(); - let NewFull {task_manager, client, network, rpc_handlers, overseer_handler, ..} = - polkadot_test_new_full(config) - .expect("could not create Polkadot test service"); + let NewFull { task_manager, client, network, rpc_handlers, overseer_handler, .. } = + new_full(config, IsCollator::Yes(collator_id)).expect("could not create Polkadot test service"); let overseer_handler = overseer_handler.expect("test node must have an overseer handler"); let peer_id = network.local_peer_id().clone(); @@ -255,19 +300,19 @@ impl PolkadotTestNode { pub async fn register_parachain( &self, id: ParaId, - validation_code: ValidationCode, - genesis_head: HeadData, + validation_code: impl Into, + genesis_head: impl Into, ) -> Result<(), RpcTransactionError> { let call = ParasSudoWrapperCall::sudo_schedule_para_initialize( id, ParaGenesisArgs { - genesis_head, - validation_code, + genesis_head: genesis_head.into(), + validation_code: validation_code.into(), parachain: true, }, ); - self.send_extrinsic(call, Sr25519Keyring::Alice).await.map(drop) + self.send_extrinsic(SudoCall::sudo(Box::new(call.into())), Sr25519Keyring::Alice).await.map(drop) } /// Wait for `count` blocks to be imported in the node and then exit. This function will not return if no blocks @@ -275,6 +320,29 @@ impl PolkadotTestNode { pub fn wait_for_blocks(&self, count: usize) -> impl Future { self.client.wait_for_blocks(count) } + + /// Register the collator functionality in the overseer of this node. + pub async fn register_collator( + &mut self, + collator_key: CollatorPair, + para_id: ParaId, + collator: Box Pin> + Send>> + Send + Sync>, + ) { + let config = CollationGenerationConfig { + key: collator_key, + collator, + para_id + }; + + self.overseer_handler.send_msg( + CollationGenerationMessage::Initialize(config), + ).await.expect("Registers the collator"); + + self.overseer_handler + .send_msg(CollatorProtocolMessage::CollateOn(para_id)) + .await + .expect("Sends CollateOn"); + } } /// Construct an extrinsic that can be applied to the test runtime. diff --git a/node/test/service/tests/build-blocks.rs b/node/test/service/tests/build-blocks.rs index b809f188aa..fa03e04228 100644 --- a/node/test/service/tests/build-blocks.rs +++ b/node/test/service/tests/build-blocks.rs @@ -21,13 +21,13 @@ use sp_keyring::Sr25519Keyring; #[substrate_test_utils::test] async fn ensure_test_service_build_blocks(task_executor: TaskExecutor) { - let mut alice = run_test_node( + let mut alice = run_validator_node( task_executor.clone(), Sr25519Keyring::Alice, || {}, Vec::new(), ); - let mut bob = run_test_node( + let mut bob = run_validator_node( task_executor.clone(), Sr25519Keyring::Bob, || {}, diff --git a/node/test/service/tests/call-function.rs b/node/test/service/tests/call-function.rs index 184755627f..c6802234c9 100644 --- a/node/test/service/tests/call-function.rs +++ b/node/test/service/tests/call-function.rs @@ -20,7 +20,7 @@ use sp_keyring::Sr25519Keyring::{Alice, Bob}; #[substrate_test_utils::test] async fn call_function_actually_work(task_executor: TaskExecutor) { - let alice = run_test_node(task_executor, Alice, || {}, Vec::new()); + let alice = run_validator_node(task_executor, Alice, || {}, Vec::new()); let function = polkadot_test_runtime::Call::Balances(pallet_balances::Call::transfer( Default::default(), @@ -37,7 +37,7 @@ async fn call_function_actually_work(task_executor: TaskExecutor) { assert_eq!( result.as_str().map(|x| x.starts_with("0x")), Some(true), - "result starts with 0x" + "result starts with 0x", ); alice.task_manager.clean_shutdown().await; diff --git a/parachain/src/wasm_executor/mod.rs b/parachain/src/wasm_executor/mod.rs index 4608de4310..735ec7f072 100644 --- a/parachain/src/wasm_executor/mod.rs +++ b/parachain/src/wasm_executor/mod.rs @@ -37,38 +37,18 @@ const MAX_RUNTIME_MEM: usize = 1024 * 1024 * 1024; // 1 GiB const MAX_CODE_MEM: usize = 16 * 1024 * 1024; // 16 MiB const MAX_VALIDATION_RESULT_HEADER_MEM: usize = MAX_CODE_MEM + 1024; // 16.001 MiB -/// A stub validation-pool defined when compiling for Android or WASM. -#[cfg(any(target_os = "android", target_os = "unknown"))] -#[derive(Clone)] -pub struct ValidationPool { - _inner: (), // private field means not publicly-instantiable -} - -#[cfg(any(target_os = "android", target_os = "unknown"))] -impl ValidationPool { - /// Create a new `ValidationPool`. - pub fn new() -> Self { - ValidationPool { _inner: () } - } -} - -/// A stub function defined when compiling for Android or WASM. -#[cfg(any(target_os = "android", target_os = "unknown"))] -pub fn run_worker(_: &str) -> Result<(), String> { - Err("Cannot run validation worker on this platform".to_string()) -} - /// The execution mode for the `ValidationPool`. -#[derive(Clone)] -#[cfg_attr(not(any(target_os = "android", target_os = "unknown")), derive(Debug))] +#[derive(Clone, Debug)] pub enum ExecutionMode { /// The validation worker is ran in a thread inside the same process. InProcess, /// The validation worker is ran using the process' executable and the subcommand `validation-worker` is passed /// following by the address of the shared memory. + #[cfg(not(any(target_os = "android", target_os = "unknown")))] ExternalProcessSelfHost(ValidationPool), /// The validation worker is ran using the command provided and the argument provided. The address of the shared /// memory is added at the end of the arguments. + #[cfg(not(any(target_os = "android", target_os = "unknown")))] ExternalProcessCustomHost { /// Validation pool. pool: ValidationPool, @@ -80,6 +60,19 @@ pub enum ExecutionMode { }, } +impl Default for ExecutionMode { + fn default() -> Self { + #[cfg(not(any(target_os = "android", target_os = "unknown")))] + { + Self::ExternalProcessSelfHost(ValidationPool::new()) + } + + #[cfg(any(target_os = "android", target_os = "unknown"))] + { + Self::InProcess + } + } +} #[derive(Debug, thiserror::Error)] /// Candidate validation error. @@ -159,13 +152,6 @@ pub fn validate_candidate( let args: Vec<&str> = args.iter().map(|x| x.as_str()).collect(); pool.validate_candidate_custom(validation_code, params, binary, &args) }, - #[cfg(any(target_os = "android", target_os = "unknown"))] - ExecutionMode::ExternalProcessSelfHost(_) | ExecutionMode::ExternalProcessCustomHost { .. } => - Err(ValidationError::Internal(InternalError::System( - Box::::from( - "Remote validator not available".to_string() - ) as Box<_> - ))), } } diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 882c3d72f8..9a066279e8 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -12,6 +12,7 @@ path = "src/main.rs" [dependencies] codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } futures = "0.3.4" +futures-timer = "3.0.2" log = "0.4.8" structopt = "0.3.8" @@ -28,6 +29,13 @@ sc-authority-discovery = { git = "https://github.com/paritytech/substrate", bran [dev-dependencies] polkadot-parachain = { path = "../../.." } +polkadot-test-service = { path = "../../../../node/test/service" } + +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } + +tokio = { version = "0.2", features = ["macros"] } [features] real-overseer = [ "polkadot-service/real-overseer" ] diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index ba2923a752..3e24db1fc8 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -16,12 +16,14 @@ //! Collator for the adder test parachain. -use std::{pin::Pin, sync::{Arc, Mutex}, collections::HashMap}; +use std::{pin::Pin, sync::{Arc, Mutex}, collections::HashMap, time::Duration}; use test_parachain_adder::{hash_state, BlockData, HeadData, execute}; use futures::{Future, FutureExt}; -use polkadot_primitives::v1::{ValidationData, PoV, Hash}; +use futures_timer::Delay; +use polkadot_primitives::v1::{ValidationData, PoV, Hash, CollatorId, CollatorPair}; use polkadot_node_primitives::Collation; use codec::{Encode, Decode}; +use sp_core::Pair; /// The amount we add when producing a new block. /// @@ -32,6 +34,8 @@ const ADD: u64 = 2; struct State { head_to_state: HashMap, u64>, number_to_head: HashMap>, + /// Block number of the best block. + best_block: u64, } impl State { @@ -46,6 +50,7 @@ impl State { Self { head_to_state: vec![(genesis_state.clone(), 0)].into_iter().collect(), number_to_head: vec![(0, genesis_state)].into_iter().collect(), + best_block: 0, } } @@ -53,6 +58,8 @@ impl State { /// /// Returns the new [`BlockData`] and the new [`HeadData`]. fn advance(&mut self, parent_head: HeadData) -> (BlockData, HeadData) { + self.best_block = parent_head.number; + let block = BlockData { state: *self.head_to_state.get(&parent_head).expect("Getting state using parent head"), add: ADD, @@ -72,6 +79,7 @@ impl State { /// The collator of the adder parachain. pub struct Collator { state: Arc>, + key: CollatorPair, } impl Collator { @@ -79,6 +87,7 @@ impl Collator { pub fn new() -> Self { Self { state: Arc::new(Mutex::new(State::genesis())), + key: CollatorPair::generate().0, } } @@ -92,6 +101,16 @@ impl Collator { test_parachain_adder::wasm_binary_unwrap() } + /// Get the collator key. + pub fn collator_key(&self) -> CollatorPair { + self.key.clone() + } + + /// Get the collator id. + pub fn collator_id(&self) -> CollatorId { + self.key.public() + } + /// Create the collation function. /// /// This collation function can be plugged into the overseer to generate collations for the adder parachain. @@ -125,6 +144,20 @@ impl Collator { async move { Some(collation) }.boxed() }) } + + /// Wait until `blocks` are built and enacted. + pub async fn wait_for_blocks(&self, blocks: u64) { + let start_block = self.state.lock().unwrap().best_block; + loop { + Delay::new(Duration::from_secs(1)).await; + + let current_block = self.state.lock().unwrap().best_block; + + if start_block + blocks <= current_block { + return + } + } + } } #[cfg(test)] diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 1a699df7fb..0bc93821a2 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -20,9 +20,9 @@ use sc_cli::{Result, Role, SubstrateCli}; use polkadot_cli::Cli; use polkadot_node_subsystem::messages::{CollatorProtocolMessage, CollationGenerationMessage}; use polkadot_node_primitives::CollationGenerationConfig; -use polkadot_primitives::v1::{CollatorPair, Id as ParaId}; +use polkadot_primitives::v1::Id as ParaId; use test_parachain_adder_collator::Collator; -use sp_core::{Pair, hexdisplay::HexDisplay}; +use sp_core::hexdisplay::HexDisplay; use std::time::Duration; const PARA_ID: ParaId = ParaId::new(100); @@ -42,11 +42,11 @@ fn main() -> Result<()> { match role { Role::Light => Err("Light client not supported".into()), _ => { - let collator_key = CollatorPair::generate().0; + let collator = Collator::new(); let full_node = polkadot_service::build_full( config, - polkadot_service::IsCollator::Yes(collator_key.public()), + polkadot_service::IsCollator::Yes(collator.collator_id()), None, Some(sc_authority_discovery::WorkerConfig { query_interval: Duration::from_secs(1), @@ -57,7 +57,6 @@ fn main() -> Result<()> { let mut overseer_handler = full_node.overseer_handler .expect("Overseer handler should be initialized for collators"); - let collator = Collator::new(); let genesis_head_hex = format!("0x{:?}", HexDisplay::from(&collator.genesis_head())); let validation_code_hex = format!("0x{:?}", HexDisplay::from(&collator.validation_code())); @@ -66,7 +65,7 @@ fn main() -> Result<()> { log::info!("Validation code: {}", validation_code_hex); let config = CollationGenerationConfig { - key: collator_key, + key: collator.collator_key(), collator: collator.create_collation_function(), para_id: PARA_ID, }; diff --git a/parachain/test-parachains/adder/collator/tests/integration.rs b/parachain/test-parachains/adder/collator/tests/integration.rs new file mode 100644 index 0000000000..a7d9a92559 --- /dev/null +++ b/parachain/test-parachains/adder/collator/tests/integration.rs @@ -0,0 +1,73 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Integration test that ensures that we can build and include parachain +//! blocks of the adder parachain. + +// If this test is failing, make sure to run all tests with the `real-overseer` feature being enabled. +#[substrate_test_utils::test] +async fn collating_using_adder_collator(task_executor: sc_service::TaskExecutor) { + use sp_keyring::AccountKeyring::*; + use futures::join; + use polkadot_primitives::v1::Id as ParaId; + + sc_cli::init_logger("", Default::default(), None).expect("Sets up logger"); + + let para_id = ParaId::from(100); + + // start alice + let alice = polkadot_test_service::run_validator_node(task_executor.clone(), Alice, || {}, vec![]); + + // start bob + let bob = polkadot_test_service::run_validator_node( + task_executor.clone(), + Bob, + || {}, + vec![alice.addr.clone()], + ); + + let collator = test_parachain_adder_collator::Collator::new(); + + // register parachain + alice + .register_parachain( + para_id, + collator.validation_code().to_vec(), + collator.genesis_head(), + ) + .await + .unwrap(); + + // run the collator node + let mut charlie = polkadot_test_service::run_collator_node( + task_executor.clone(), + Charlie, + || {}, + vec![alice.addr.clone(), bob.addr.clone()], + collator.collator_id(), + ); + + charlie.register_collator(collator.collator_key(), para_id, collator.create_collation_function()).await; + + // Wait until the parachain has 4 blocks produced. + collator.wait_for_blocks(4).await; + + join!( + alice.task_manager.clean_shutdown(), + bob.task_manager.clean_shutdown(), + charlie.task_manager.clean_shutdown(), + ); +} diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 08445cd7ba..0c50b52fce 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -jsonrpc-core = "15.0.0" +jsonrpc-core = "15.1.0" polkadot-primitives = { path = "../primitives" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index d9c2a839c4..7b5fcfabff 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -177,8 +177,8 @@ construct_runtime! { AuthorityDiscovery: pallet_authority_discovery::{Module, Call, Config}, // Parachains modules. - ParachainOrigin: parachains_origin::{Module, Origin}, - ParachainConfig: parachains_configuration::{Module, Call, Storage, Config}, + ParachainsOrigin: parachains_origin::{Module, Origin}, + ParachainsConfiguration: parachains_configuration::{Module, Call, Storage, Config}, Inclusion: parachains_inclusion::{Module, Call, Storage, Event}, InclusionInherent: parachains_inclusion_inherent::{Module, Call, Storage, Inherent}, Scheduler: parachains_scheduler::{Module, Call, Storage}, diff --git a/runtime/test-runtime/src/constants.rs b/runtime/test-runtime/src/constants.rs index b18501b714..4c00475f4b 100644 --- a/runtime/test-runtime/src/constants.rs +++ b/runtime/test-runtime/src/constants.rs @@ -28,10 +28,10 @@ pub mod currency { pub mod time { use primitives::v0::{Moment, BlockNumber}; // Testnet - pub const MILLISECS_PER_BLOCK: Moment = 1000; + pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; - // Testnet - pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = 10 * MINUTES; + // 30 seconds for now + pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = MINUTES / 2; // These time units are defined in number of blocks. pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index c597710a73..183ceb6e6e 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -25,8 +25,9 @@ use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; use codec::Encode; use polkadot_runtime_parachains::{ - configuration, + configuration as parachains_configuration, inclusion, + inclusion_inherent, initializer, paras, router, @@ -42,7 +43,7 @@ use primitives::v1::{ use runtime_common::{ claims, SlowAdjustingFeeUpdate, paras_sudo_wrapper, BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, - MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, ParachainSessionKeyPlaceholder, + MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, @@ -78,6 +79,7 @@ pub use sp_runtime::BuildStorage; pub use pallet_timestamp::Call as TimestampCall; pub use pallet_balances::Call as BalancesCall; pub use paras_sudo_wrapper::Call as ParasSudoWrapperCall; +pub use pallet_sudo::Call as SudoCall; /// Constant values used within the runtime. pub mod constants; @@ -252,7 +254,8 @@ impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, - pub parachain_validator: ParachainSessionKeyPlaceholder, + pub parachain_validator: Initializer, + pub authority_discovery: AuthorityDiscovery, } } @@ -440,12 +443,14 @@ impl pallet_sudo::Trait for Runtime { type Call = Call; } -impl configuration::Trait for Runtime {} +impl parachains_configuration::Trait for Runtime {} impl inclusion::Trait for Runtime { type Event = Event; } +impl inclusion_inherent::Trait for Runtime {} + impl initializer::Trait for Runtime { type Randomness = RandomnessCollectiveFlip; } @@ -497,8 +502,9 @@ construct_runtime! { Vesting: pallet_vesting::{Module, Call, Storage, Event, Config}, // Parachains runtime modules - Configuration: configuration::{Module, Call, Storage}, + ParachainsConfiguration: parachains_configuration::{Module, Call, Storage, Config}, Inclusion: inclusion::{Module, Call, Storage, Event}, + InclusionInherent: inclusion_inherent::{Module, Call, Storage, Inherent}, Initializer: initializer::{Module, Call, Storage}, Paras: paras::{Module, Call, Storage, Origin}, Scheduler: scheduler::{Module, Call, Storage}, @@ -603,7 +609,7 @@ sp_api::impl_runtime_apis! { impl authority_discovery_primitives::AuthorityDiscoveryApi for Runtime { fn authorities() -> Vec { - Vec::new() + AuthorityDiscovery::authorities() } } diff --git a/scripts/gitlab/test_linux_stable.sh b/scripts/gitlab/test_linux_stable.sh index a18ff43874..98ace6b542 100755 --- a/scripts/gitlab/test_linux_stable.sh +++ b/scripts/gitlab/test_linux_stable.sh @@ -3,4 +3,4 @@ #shellcheck source=lib.sh source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh" -time cargo test --all --release --verbose --locked --features runtime-benchmarks +time cargo test --all --release --verbose --locked --features=runtime-benchmarks --features=real-overseer -- GitLab From 353277d033b62db80c20a7d2d049942cea0310cc Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Mon, 9 Nov 2020 15:21:05 +0100 Subject: [PATCH 002/203] Cleanups (#1933) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Introduce CollatorFn type alias * Make test-runtime imports consistent with rococo-runtime * Update node/primitives/src/lib.rs Co-authored-by: Bastian Köcher * fix warnings Co-authored-by: Bastian Köcher --- node/primitives/src/lib.rs | 19 ++++++--- node/test/service/src/lib.rs | 17 ++++---- .../test-parachains/adder/collator/src/lib.rs | 13 +++--- .../node/collators/collation-generation.md | 8 +++- runtime/test-runtime/src/lib.rs | 42 +++++++++---------- 5 files changed, 56 insertions(+), 43 deletions(-) diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index 9368e5ad8e..0b2262da93 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -269,16 +269,23 @@ pub struct Collation { pub hrmp_watermark: BlockNumber, } +/// Collation function. +/// +/// Will be called with the hash of the relay chain block the parachain +/// block should be build on and the [`ValidationData`] that provides +/// information about the state of the parachain on the relay chain. +pub type CollatorFn = Box< + dyn Fn(Hash, &ValidationData) -> Pin> + Send>> + + Send + + Sync, +>; + /// Configuration for the collation generator pub struct CollationGenerationConfig { /// Collator's authentication key, so it can sign things. pub key: CollatorPair, - /// Collation function. - /// - /// Will be called with the hash of the relay chain block the parachain - /// block should be build on and the [`ValidationData`] that provides - /// information about the state of the parachain on the relay chain. - pub collator: Box Pin> + Send>> + Send + Sync>, + /// Collation function. See [`CollatorFn`] for more details. + pub collator: CollatorFn, /// The parachain that this collator collates for pub para_id: ParaId, } diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 37877e257a..794df3779e 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -24,7 +24,7 @@ pub use chain_spec::*; use futures::future::Future; use polkadot_overseer::OverseerHandler; use polkadot_primitives::v1::{ - Id as ParaId, HeadData, ValidationCode, Balance, CollatorPair, CollatorId, ValidationData, Hash, + Id as ParaId, HeadData, ValidationCode, Balance, CollatorPair, CollatorId, }; use polkadot_runtime_common::BlockHashCount; use polkadot_service::{ @@ -34,7 +34,7 @@ use polkadot_node_subsystem::messages::{CollatorProtocolMessage, CollationGenera use polkadot_test_runtime::{ Runtime, SignedExtra, SignedPayload, VERSION, ParasSudoWrapperCall, SudoCall, UncheckedExtrinsic, }; -use polkadot_node_primitives::{Collation, CollationGenerationConfig}; +use polkadot_node_primitives::{CollatorFn, CollationGenerationConfig}; use polkadot_runtime_parachains::paras::ParaGenesisArgs; use sc_chain_spec::ChainSpec; use sc_client_api::execution_extensions::ExecutionStrategies; @@ -54,7 +54,7 @@ use sp_blockchain::HeaderBackend; use sp_keyring::Sr25519Keyring; use sp_runtime::{codec::Encode, generic, traits::IdentifyAccount, MultiSigner}; use sp_state_machine::BasicExternalities; -use std::{sync::Arc, time::Duration, pin::Pin}; +use std::{sync::Arc, time::Duration}; use substrate_test_client::{BlockchainEventsExt, RpcHandlersExt, RpcTransactionOutput, RpcTransactionError}; native_executor_instance!( @@ -326,17 +326,18 @@ impl PolkadotTestNode { &mut self, collator_key: CollatorPair, para_id: ParaId, - collator: Box Pin> + Send>> + Send + Sync>, + collator: CollatorFn, ) { let config = CollationGenerationConfig { key: collator_key, collator, - para_id + para_id, }; - self.overseer_handler.send_msg( - CollationGenerationMessage::Initialize(config), - ).await.expect("Registers the collator"); + self.overseer_handler + .send_msg(CollationGenerationMessage::Initialize(config)) + .await + .expect("Registers the collator"); self.overseer_handler .send_msg(CollatorProtocolMessage::CollateOn(para_id)) diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index 3e24db1fc8..4ed2d5fe52 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -16,12 +16,11 @@ //! Collator for the adder test parachain. -use std::{pin::Pin, sync::{Arc, Mutex}, collections::HashMap, time::Duration}; +use std::{sync::{Arc, Mutex}, collections::HashMap, time::Duration}; use test_parachain_adder::{hash_state, BlockData, HeadData, execute}; -use futures::{Future, FutureExt}; use futures_timer::Delay; -use polkadot_primitives::v1::{ValidationData, PoV, Hash, CollatorId, CollatorPair}; -use polkadot_node_primitives::Collation; +use polkadot_primitives::v1::{PoV, CollatorId, CollatorPair}; +use polkadot_node_primitives::{Collation, CollatorFn}; use codec::{Encode, Decode}; use sp_core::Pair; @@ -116,7 +115,9 @@ impl Collator { /// This collation function can be plugged into the overseer to generate collations for the adder parachain. pub fn create_collation_function( &self, - ) -> Box Pin> + Send>> + Send + Sync> { + ) -> CollatorFn { + use futures::FutureExt as _; + let state = self.state.clone(); Box::new(move |relay_parent, validation_data| { @@ -166,7 +167,7 @@ mod tests { use futures::executor::block_on; use polkadot_parachain::{primitives::ValidationParams, wasm_executor::ExecutionMode}; - use polkadot_primitives::v1::PersistedValidationData; + use polkadot_primitives::v1::{ValidationData, PersistedValidationData}; use codec::Decode; #[test] diff --git a/roadmap/implementers-guide/src/node/collators/collation-generation.md b/roadmap/implementers-guide/src/node/collators/collation-generation.md index 15b510baea..5640182359 100644 --- a/roadmap/implementers-guide/src/node/collators/collation-generation.md +++ b/roadmap/implementers-guide/src/node/collators/collation-generation.md @@ -32,12 +32,16 @@ pub struct Collation { pub proof_of_validity: PoV, } +type CollatorFn = Box< + dyn Fn(Hash, &ValidationData) -> Pin>>> +>; + struct CollationGenerationConfig { key: CollatorPair, - /// Collate will be called with the relay chain hash the parachain should build + /// Collate will be called with the relay chain hash the parachain should build /// a block on and the `ValidationData` that provides information about the state /// of the parachain on the relay chain. - collator: Box Pin>>>> + collator: CollatorFn, para_id: ParaId, } ``` diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 183ceb6e6e..e54f4118fa 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -24,16 +24,16 @@ use pallet_transaction_payment::CurrencyAdapter; use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; use codec::Encode; -use polkadot_runtime_parachains::{ - configuration as parachains_configuration, - inclusion, - inclusion_inherent, - initializer, - paras, - router, - runtime_api_impl::v1 as runtime_impl, - scheduler, -}; + +use polkadot_runtime_parachains::configuration as parachains_configuration; +use polkadot_runtime_parachains::inclusion as parachains_inclusion; +use polkadot_runtime_parachains::inclusion_inherent as parachains_inclusion_inherent; +use polkadot_runtime_parachains::initializer as parachains_initializer; +use polkadot_runtime_parachains::paras as parachains_paras; +use polkadot_runtime_parachains::router as parachains_router; +use polkadot_runtime_parachains::scheduler as parachains_scheduler; +use polkadot_runtime_parachains::runtime_api_impl::v1 as runtime_impl; + use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash as HashT, Id as ParaId, Moment, Nonce, OccupiedCoreAssumption, @@ -445,26 +445,26 @@ impl pallet_sudo::Trait for Runtime { impl parachains_configuration::Trait for Runtime {} -impl inclusion::Trait for Runtime { +impl parachains_inclusion::Trait for Runtime { type Event = Event; } -impl inclusion_inherent::Trait for Runtime {} +impl parachains_inclusion_inherent::Trait for Runtime {} -impl initializer::Trait for Runtime { +impl parachains_initializer::Trait for Runtime { type Randomness = RandomnessCollectiveFlip; } -impl paras::Trait for Runtime { +impl parachains_paras::Trait for Runtime { type Origin = Origin; } -impl router::Trait for Runtime { +impl parachains_router::Trait for Runtime { type Origin = Origin; type UmpSink = (); } -impl scheduler::Trait for Runtime {} +impl parachains_scheduler::Trait for Runtime {} impl paras_sudo_wrapper::Trait for Runtime {} @@ -503,11 +503,11 @@ construct_runtime! { // Parachains runtime modules ParachainsConfiguration: parachains_configuration::{Module, Call, Storage, Config}, - Inclusion: inclusion::{Module, Call, Storage, Event}, - InclusionInherent: inclusion_inherent::{Module, Call, Storage, Inherent}, - Initializer: initializer::{Module, Call, Storage}, - Paras: paras::{Module, Call, Storage, Origin}, - Scheduler: scheduler::{Module, Call, Storage}, + Inclusion: parachains_inclusion::{Module, Call, Storage, Event}, + InclusionInherent: parachains_inclusion_inherent::{Module, Call, Storage, Inherent}, + Initializer: parachains_initializer::{Module, Call, Storage}, + Paras: parachains_paras::{Module, Call, Storage, Origin}, + Scheduler: parachains_scheduler::{Module, Call, Storage}, ParasSudoWrapper: paras_sudo_wrapper::{Module, Call}, Sudo: pallet_sudo::{Module, Call, Storage, Config, Event}, -- GitLab From abc8c09aa18ee69a53c7910240e9cf8fac8cf6e1 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Mon, 9 Nov 2020 16:39:37 +0100 Subject: [PATCH 003/203] Rename ExecutionMode to IsolationStrategy (#1932) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Rename ExecutionMode to IsolationStrategy Execution mode is too generic name and can imply a lot of different aspects of execution. The notion of isolation better describes the meant aspect. And while I am at it, I also renamed mode -> strategy cause it seems a bit more appropriate, although that is way more subjective. * Fix compilation in wasm_executor tests. * Add a comment to IsolationStrategy * Update comments on IsolationStrategy * Update node/core/candidate-validation/src/lib.rs Co-authored-by: Bastian Köcher * Accomodate the point on interruption * Update parachain/src/wasm_executor/mod.rs Co-authored-by: Andronik Ordian * Naming nits Co-authored-by: Bastian Köcher Co-authored-by: Andronik Ordian --- node/core/candidate-validation/src/lib.rs | 37 ++++++++------- node/service/src/lib.rs | 12 ++--- node/test/service/src/lib.rs | 2 +- parachain/src/wasm_executor/mod.rs | 47 +++++++++++++++---- .../test-parachains/adder/collator/src/lib.rs | 4 +- parachain/test-parachains/tests/adder/mod.rs | 26 +++++----- .../tests/wasm_executor/mod.rs | 19 ++++---- 7 files changed, 91 insertions(+), 56 deletions(-) diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index dbcd1eab4b..2a03a0facf 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -38,7 +38,9 @@ use polkadot_primitives::v1::{ ValidationCode, PoV, CandidateDescriptor, PersistedValidationData, OccupiedCoreAssumption, Hash, ValidationOutputs, }; -use polkadot_parachain::wasm_executor::{self, ExecutionMode, ValidationError, InvalidCandidate as WasmInvalidCandidate}; +use polkadot_parachain::wasm_executor::{ + self, IsolationStrategy, ValidationError, InvalidCandidate as WasmInvalidCandidate +}; use polkadot_parachain::primitives::{ValidationResult as WasmValidationResult, ValidationParams}; use parity_scale_codec::Encode; @@ -55,13 +57,16 @@ const LOG_TARGET: &'static str = "candidate_validation"; pub struct CandidateValidationSubsystem { spawn: S, metrics: Metrics, - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, } impl CandidateValidationSubsystem { - /// Create a new `CandidateValidationSubsystem` with the given task spawner. - pub fn new(spawn: S, metrics: Metrics, execution_mode: ExecutionMode) -> Self { - CandidateValidationSubsystem { spawn, metrics, execution_mode } + /// Create a new `CandidateValidationSubsystem` with the given task spawner and isolation + /// strategy. + /// + /// Check out [`IsolationStrategy`] to get more details. + pub fn new(spawn: S, metrics: Metrics, isolation_strategy: IsolationStrategy) -> Self { + CandidateValidationSubsystem { spawn, metrics, isolation_strategy } } } @@ -70,7 +75,7 @@ impl Subsystem for CandidateValidationSubsystem where S: SpawnNamed + Clone + 'static, { fn start(self, ctx: C) -> SpawnedSubsystem { - let future = run(ctx, self.spawn, self.metrics, self.execution_mode) + let future = run(ctx, self.spawn, self.metrics, self.isolation_strategy) .map_err(|e| SubsystemError::with_origin("candidate-validation", e)) .boxed(); SpawnedSubsystem { @@ -84,7 +89,7 @@ async fn run( mut ctx: impl SubsystemContext, spawn: impl SpawnNamed + Clone + 'static, metrics: Metrics, - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, ) -> SubsystemResult<()> { loop { match ctx.recv().await? { @@ -99,7 +104,7 @@ async fn run( ) => { let res = spawn_validate_from_chain_state( &mut ctx, - execution_mode.clone(), + isolation_strategy.clone(), descriptor, pov, spawn.clone(), @@ -122,7 +127,7 @@ async fn run( ) => { let res = spawn_validate_exhaustive( &mut ctx, - execution_mode.clone(), + isolation_strategy.clone(), persisted_validation_data, validation_code, descriptor, @@ -254,7 +259,7 @@ async fn find_assumed_validation_data( async fn spawn_validate_from_chain_state( ctx: &mut impl SubsystemContext, - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, descriptor: CandidateDescriptor, pov: Arc, spawn: impl SpawnNamed + 'static, @@ -277,7 +282,7 @@ async fn spawn_validate_from_chain_state( let validation_result = spawn_validate_exhaustive( ctx, - execution_mode, + isolation_strategy, validation_data, validation_code, descriptor.clone(), @@ -313,7 +318,7 @@ async fn spawn_validate_from_chain_state( async fn spawn_validate_exhaustive( ctx: &mut impl SubsystemContext, - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, persisted_validation_data: PersistedValidationData, validation_code: ValidationCode, descriptor: CandidateDescriptor, @@ -323,7 +328,7 @@ async fn spawn_validate_exhaustive( let (tx, rx) = oneshot::channel(); let fut = async move { let res = validate_candidate_exhaustive::( - execution_mode, + isolation_strategy, persisted_validation_data, validation_code, descriptor, @@ -379,10 +384,10 @@ trait ValidationBackend { struct RealValidationBackend; impl ValidationBackend for RealValidationBackend { - type Arg = ExecutionMode; + type Arg = IsolationStrategy; fn validate( - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, validation_code: &ValidationCode, params: ValidationParams, spawn: S, @@ -390,7 +395,7 @@ impl ValidationBackend for RealValidationBackend { wasm_executor::validate_candidate( &validation_code.0, params, - &execution_mode, + &isolation_strategy, spawn, ) } diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 450dcb2acf..0c351d1aab 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -50,7 +50,7 @@ use service::RpcHandlers; pub use self::client::{AbstractClient, Client, ClientHandle, ExecuteWithClient, RuntimeApiCollection}; pub use chain_spec::{PolkadotChainSpec, KusamaChainSpec, WestendChainSpec, RococoChainSpec}; pub use consensus_common::{Proposal, SelectChain, BlockImport, RecordProof, block_validation::Chain}; -pub use polkadot_parachain::wasm_executor::ExecutionMode; +pub use polkadot_parachain::wasm_executor::IsolationStrategy; pub use polkadot_primitives::v1::{Block, BlockId, CollatorId, Hash, Id as ParaId}; pub use sc_client_api::{Backend, ExecutionStrategy, CallExecutor}; pub use sc_consensus::LongestChain; @@ -296,7 +296,7 @@ fn real_overseer( registry: Option<&Registry>, spawner: Spawner, _: IsCollator, - _: ExecutionMode, + _: IsolationStrategy, ) -> Result<(Overseer, OverseerHandler), Error> where RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend, @@ -322,7 +322,7 @@ fn real_overseer( registry: Option<&Registry>, spawner: Spawner, is_collator: IsCollator, - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, ) -> Result<(Overseer, OverseerHandler), Error> where RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend, @@ -377,7 +377,7 @@ where candidate_validation: CandidateValidationSubsystem::new( spawner.clone(), Metrics::register(registry)?, - execution_mode, + isolation_strategy, ), chain_api: ChainApiSubsystem::new( runtime_client.clone(), @@ -479,7 +479,7 @@ pub fn new_full( is_collator: IsCollator, grandpa_pause: Option<(u32, u32)>, authority_discovery_config: Option, - execution_mode: ExecutionMode, + isolation_strategy: IsolationStrategy, ) -> Result>>, Error> where RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, @@ -615,7 +615,7 @@ pub fn new_full( prometheus_registry.as_ref(), spawner, is_collator, - execution_mode, + isolation_strategy, )?; let overseer_handler_clone = overseer_handler.clone(); diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 794df3779e..efd68cd3a8 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -87,7 +87,7 @@ pub fn new_full( query_start_delay: Duration::from_secs(0), ..Default::default() }), - polkadot_parachain::wasm_executor::ExecutionMode::InProcess, + polkadot_parachain::wasm_executor::IsolationStrategy::InProcess, ).map_err(Into::into) } diff --git a/parachain/src/wasm_executor/mod.rs b/parachain/src/wasm_executor/mod.rs index 735ec7f072..677501e6ef 100644 --- a/parachain/src/wasm_executor/mod.rs +++ b/parachain/src/wasm_executor/mod.rs @@ -37,9 +37,40 @@ const MAX_RUNTIME_MEM: usize = 1024 * 1024 * 1024; // 1 GiB const MAX_CODE_MEM: usize = 16 * 1024 * 1024; // 16 MiB const MAX_VALIDATION_RESULT_HEADER_MEM: usize = MAX_CODE_MEM + 1024; // 16.001 MiB -/// The execution mode for the `ValidationPool`. +/// The strategy we employ for isolating execution of wasm parachain validation function (PVF). +/// +/// For a typical validator an external process is the default way to run PVF. The rationale is based +/// on the following observations: +/// +/// (a) PVF is completely under control of parachain developers who may or may not be malicious. +/// (b) Collators are in charge of providing PoV who also may or may not be malicious. +/// (c) PVF is executed by a wasm engine based on optimizing compiler which is a very complex piece +/// of machinery. +/// +/// (a) and (b) may lead to a situation where due to a combination of PVF and PoV the validation work +/// can stuck in an infinite loop, which can open up resource exhaustion or DoS attack vectors. +/// +/// While some execution engines provide functionality to interrupt execution of wasm module from +/// another thread, there are also some caveats to that: there is no clean way to interrupt execution +/// if the control flow is in the host side and at the moment we haven't rigoriously vetted that all +/// host functions terminate or, at least, return in a short amount of time. Additionally, we want +/// some freedom on choosing wasm execution environment. +/// +/// On top of that, execution in a separate process helps to minimize impact of (c) if exploited. +/// It's not only the risk of miscompilation, but it also includes risk of JIT-bombs, i.e. cases +/// of specially crafted code that take enourmous amounts of time and memory to compile. +/// +/// At the same time, since PVF validates self-contained candidates, validation workers don't require +/// extensive communication with polkadot host, therefore there should be no observable performance penalty +/// coming from inter process communication. +/// +/// All of the above should give a sense why isolation is crucial for a typical use-case. +/// +/// However, in some cases, e.g. when running PVF validation on android (for whatever reason), we +/// cannot afford the luxury of process isolation and thus there is an option to run validation in +/// process. Also, running in process is convenient for testing. #[derive(Clone, Debug)] -pub enum ExecutionMode { +pub enum IsolationStrategy { /// The validation worker is ran in a thread inside the same process. InProcess, /// The validation worker is ran using the process' executable and the subcommand `validation-worker` is passed @@ -60,7 +91,7 @@ pub enum ExecutionMode { }, } -impl Default for ExecutionMode { +impl Default for IsolationStrategy { fn default() -> Self { #[cfg(not(any(target_os = "android", target_os = "unknown")))] { @@ -136,19 +167,19 @@ pub enum InternalError { pub fn validate_candidate( validation_code: &[u8], params: ValidationParams, - execution_mode: &ExecutionMode, + isolation_strategy: &IsolationStrategy, spawner: impl SpawnNamed + 'static, ) -> Result { - match execution_mode { - ExecutionMode::InProcess => { + match isolation_strategy { + IsolationStrategy::InProcess => { validate_candidate_internal(validation_code, ¶ms.encode(), spawner) }, #[cfg(not(any(target_os = "android", target_os = "unknown")))] - ExecutionMode::ExternalProcessSelfHost(pool) => { + IsolationStrategy::ExternalProcessSelfHost(pool) => { pool.validate_candidate(validation_code, params) }, #[cfg(not(any(target_os = "android", target_os = "unknown")))] - ExecutionMode::ExternalProcessCustomHost { pool, binary, args } => { + IsolationStrategy::ExternalProcessCustomHost { pool, binary, args } => { let args: Vec<&str> = args.iter().map(|x| x.as_str()).collect(); pool.validate_candidate_custom(validation_code, params, binary, &args) }, diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index 4ed2d5fe52..ca2375b2d8 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -166,7 +166,7 @@ mod tests { use super::*; use futures::executor::block_on; - use polkadot_parachain::{primitives::ValidationParams, wasm_executor::ExecutionMode}; + use polkadot_parachain::{primitives::ValidationParams, wasm_executor::IsolationStrategy}; use polkadot_primitives::v1::{ValidationData, PersistedValidationData}; use codec::Decode; @@ -201,7 +201,7 @@ mod tests { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &ExecutionMode::InProcess, + &IsolationStrategy::InProcess, sp_core::testing::TaskExecutor::new(), ).unwrap(); diff --git a/parachain/test-parachains/tests/adder/mod.rs b/parachain/test-parachains/tests/adder/mod.rs index 8e581d187a..c9d15d53d7 100644 --- a/parachain/test-parachains/tests/adder/mod.rs +++ b/parachain/test-parachains/tests/adder/mod.rs @@ -25,13 +25,13 @@ use parachain::{ HeadData as GenericHeadData, ValidationParams, }, - wasm_executor::{ValidationPool, ExecutionMode} + wasm_executor::{ValidationPool, IsolationStrategy} }; use codec::{Decode, Encode}; use adder::{HeadData, BlockData, hash_state}; -fn execution_mode() -> ExecutionMode { - ExecutionMode::ExternalProcessCustomHost { +fn isolation_strategy() -> IsolationStrategy { + IsolationStrategy::ExternalProcessCustomHost { pool: ValidationPool::new(), binary: std::env::current_exe().unwrap(), args: WORKER_ARGS_TEST.iter().map(|x| x.to_string()).collect(), @@ -40,17 +40,17 @@ fn execution_mode() -> ExecutionMode { #[test] fn execute_good_on_parent_with_inprocess_validation() { - let execution_mode = ExecutionMode::InProcess; - execute_good_on_parent(execution_mode); + let isolation_strategy = IsolationStrategy::InProcess; + execute_good_on_parent(isolation_strategy); } #[test] pub fn execute_good_on_parent_with_external_process_validation() { - let execution_mode = execution_mode(); - execute_good_on_parent(execution_mode); + let isolation_strategy = isolation_strategy(); + execute_good_on_parent(isolation_strategy); } -fn execute_good_on_parent(execution_mode: ExecutionMode) { +fn execute_good_on_parent(isolation_strategy: IsolationStrategy) { let parent_head = HeadData { number: 0, parent_hash: [0; 32], @@ -71,7 +71,7 @@ fn execute_good_on_parent(execution_mode: ExecutionMode) { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &execution_mode, + &isolation_strategy, sp_core::testing::TaskExecutor::new(), ).unwrap(); @@ -87,7 +87,7 @@ fn execute_good_chain_on_parent() { let mut number = 0; let mut parent_hash = [0; 32]; let mut last_state = 0; - let execution_mode = execution_mode(); + let isolation_strategy = isolation_strategy(); for add in 0..10 { let parent_head = HeadData { @@ -110,7 +110,7 @@ fn execute_good_chain_on_parent() { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &execution_mode, + &isolation_strategy, sp_core::testing::TaskExecutor::new(), ).unwrap(); @@ -128,7 +128,7 @@ fn execute_good_chain_on_parent() { #[test] fn execute_bad_on_parent() { - let execution_mode = execution_mode(); + let isolation_strategy = isolation_strategy(); let parent_head = HeadData { number: 0, @@ -150,7 +150,7 @@ fn execute_bad_on_parent() { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &execution_mode, + &isolation_strategy, sp_core::testing::TaskExecutor::new(), ).unwrap_err(); } diff --git a/parachain/test-parachains/tests/wasm_executor/mod.rs b/parachain/test-parachains/tests/wasm_executor/mod.rs index ad60e4e04e..e092adc2f4 100644 --- a/parachain/test-parachains/tests/wasm_executor/mod.rs +++ b/parachain/test-parachains/tests/wasm_executor/mod.rs @@ -21,11 +21,11 @@ const WORKER_ARGS_TEST: &[&'static str] = &["--nocapture", "validation_worker"]; use crate::adder; use parachain::{ primitives::{BlockData, ValidationParams}, - wasm_executor::{ValidationError, InvalidCandidate, EXECUTION_TIMEOUT_SEC, ExecutionMode, ValidationPool}, + wasm_executor::{ValidationError, InvalidCandidate, EXECUTION_TIMEOUT_SEC, IsolationStrategy, ValidationPool}, }; -fn execution_mode() -> ExecutionMode { - ExecutionMode::ExternalProcessCustomHost { +fn isolation_strategy() -> IsolationStrategy { + IsolationStrategy::ExternalProcessCustomHost { pool: ValidationPool::new(), binary: std::env::current_exe().unwrap(), args: WORKER_ARGS_TEST.iter().map(|x| x.to_string()).collect(), @@ -34,7 +34,7 @@ fn execution_mode() -> ExecutionMode { #[test] fn terminates_on_timeout() { - let execution_mode = execution_mode(); + let isolation_strategy = isolation_strategy(); let result = parachain::wasm_executor::validate_candidate( halt::wasm_binary_unwrap(), @@ -45,7 +45,7 @@ fn terminates_on_timeout() { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &execution_mode, + &isolation_strategy, sp_core::testing::TaskExecutor::new(), ); match result { @@ -59,11 +59,10 @@ fn terminates_on_timeout() { #[test] fn parallel_execution() { - let execution_mode = execution_mode(); + let isolation_strategy = isolation_strategy(); + let isolation_strategy_clone = isolation_strategy.clone(); let start = std::time::Instant::now(); - - let execution_mode2 = execution_mode.clone(); let thread = std::thread::spawn(move || parachain::wasm_executor::validate_candidate( halt::wasm_binary_unwrap(), @@ -74,7 +73,7 @@ fn parallel_execution() { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &execution_mode, + &isolation_strategy, sp_core::testing::TaskExecutor::new(), ).ok()); let _ = parachain::wasm_executor::validate_candidate( @@ -86,7 +85,7 @@ fn parallel_execution() { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, - &execution_mode2, + &isolation_strategy_clone, sp_core::testing::TaskExecutor::new(), ); thread.join().unwrap(); -- GitLab From 94b7ff0fd8555d46a0a7648c72ffba1f36013736 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Tue, 10 Nov 2020 12:17:27 +0100 Subject: [PATCH 004/203] Don't just swallow message in dummy-subsystem, but log (#1935) * Don't just swallow error in dummy-subsystem, but log * Add target to log. --- node/subsystem/src/lib.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index 2eda9c381b..b348ac3f97 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -228,14 +228,24 @@ pub trait Subsystem { /// types of messages. Used for tests or as a placeholder. pub struct DummySubsystem; -impl Subsystem for DummySubsystem { +impl Subsystem for DummySubsystem +where + C::Message: std::fmt::Debug +{ fn start(self, mut ctx: C) -> SpawnedSubsystem { let future = Box::pin(async move { loop { match ctx.recv().await { - Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => return Ok(()), Err(_) => return Ok(()), - _ => continue, + Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => return Ok(()), + Ok(overseer_msg) => { + log::debug!( + target: "dummy-subsystem", + "Discarding a message sent from overseer {:?}", + overseer_msg + ); + continue; + } } } }); -- GitLab From aa07c3df3f71c3c2fc4b70b0566501df1ec974ab Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Wed, 11 Nov 2020 11:34:52 +0100 Subject: [PATCH 005/203] Improve diagnostics for the ValidationOutputs checker / inclusion (#1926) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve diagnostics for acceptance criteria failures during inclusion * Initialize the runtime logger just before logging during inclusion * Formatting suggestions Co-authored-by: Bastian Köcher * Missed one suggestion Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- Cargo.lock | 1 + runtime/parachains/Cargo.toml | 1 + runtime/parachains/src/inclusion.rs | 135 +++++---- runtime/parachains/src/router.rs | 5 +- runtime/parachains/src/router/dmp.rs | 64 +++-- runtime/parachains/src/router/hrmp.rs | 271 ++++++++++++------ runtime/parachains/src/router/ump.rs | 115 +++++--- runtime/parachains/src/runtime_api_impl/v1.rs | 16 +- 8 files changed, 402 insertions(+), 206 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d571ac2fd0..d121c5811b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5445,6 +5445,7 @@ name = "polkadot-runtime-parachains" version = "0.8.0" dependencies = [ "bitvec", + "derive_more", "frame-benchmarking", "frame-support", "frame-system", diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index fac83aa381..98c047d1e9 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -10,6 +10,7 @@ codec = { package = "parity-scale-codec", version = "1.3.4", default-features = log = "0.4.11" rustc-hex = { version = "2.0.1", default-features = false } serde = { version = "1.0.102", features = [ "derive" ], optional = true } +derive_more = { version = "0.99.11" } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index b685be1bf3..572a426e3a 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -186,8 +186,9 @@ decl_module! { } } -impl Module { +const LOG_TARGET: &str = "parachains_runtime_inclusion"; +impl Module { /// Block initialization logic, called by initializer. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { 0 } @@ -400,7 +401,7 @@ impl Module { // In the meantime, we do certain sanity checks on the candidates and on the scheduled // list. 'a: - for candidate in &candidates { + for (candidate_idx, candidate) in candidates.iter().enumerate() { let para_id = candidate.descriptor().para_id; // we require that the candidate is in the context of the parent block. @@ -413,15 +414,27 @@ impl Module { Error::::NotCollatorSigned, ); - check_cx.check_validation_outputs( - para_id, - &candidate.candidate.commitments.head_data, - &candidate.candidate.commitments.new_validation_code, - candidate.candidate.commitments.processed_downward_messages, - &candidate.candidate.commitments.upward_messages, - T::BlockNumber::from(candidate.candidate.commitments.hrmp_watermark), - &candidate.candidate.commitments.horizontal_messages, - )?; + if let Err(err) = check_cx + .check_validation_outputs( + para_id, + &candidate.candidate.commitments.head_data, + &candidate.candidate.commitments.new_validation_code, + candidate.candidate.commitments.processed_downward_messages, + &candidate.candidate.commitments.upward_messages, + T::BlockNumber::from(candidate.candidate.commitments.hrmp_watermark), + &candidate.candidate.commitments.horizontal_messages, + ) + { + frame_support::debug::RuntimeLogger::init(); + log::debug!( + target: LOG_TARGET, + "Validation outputs checking during inclusion of a candidate {} for parachain `{}` failed: {:?}", + candidate_idx, + u32::from(para_id), + err, + ); + Err(err.strip_into_dispatch_err::())?; + }; for (i, assignment) in scheduled[skip..].iter().enumerate() { check_assignment_in_order(assignment)?; @@ -542,13 +555,11 @@ impl Module { } /// Run the acceptance criteria checks on the given candidate commitments. - /// - /// Returns an 'Err` if any of the checks doesn't pass. pub(crate) fn check_validation_outputs( para_id: ParaId, validation_outputs: primitives::v1::ValidationOutputs, - ) -> Result<(), DispatchError> { - CandidateCheckContext::::new().check_validation_outputs( + ) -> bool { + if let Err(err) = CandidateCheckContext::::new().check_validation_outputs( para_id, &validation_outputs.head_data, &validation_outputs.new_validation_code, @@ -556,7 +567,18 @@ impl Module { &validation_outputs.upward_messages, T::BlockNumber::from(validation_outputs.hrmp_watermark), &validation_outputs.horizontal_messages, - ) + ) { + frame_support::debug::RuntimeLogger::init(); + log::debug!( + target: LOG_TARGET, + "Validation outputs checking for parachain `{}` failed: {:?}", + u32::from(para_id), + err, + ); + false + } else { + true + } } fn enact_candidate( @@ -692,6 +714,34 @@ const fn availability_threshold(n_validators: usize) -> usize { threshold } +#[derive(derive_more::From, Debug)] +enum AcceptanceCheckErr { + HeadDataTooLarge, + PrematureCodeUpgrade, + NewCodeTooLarge, + ProcessedDownwardMessages(router::ProcessedDownwardMessagesAcceptanceErr), + UpwardMessages(router::UpwardMessagesAcceptanceCheckErr), + HrmpWatermark(router::HrmpWatermarkAcceptanceErr), + OutboundHrmp(router::OutboundHrmpAcceptanceErr), +} + +impl AcceptanceCheckErr { + /// Returns the same error so that it can be threaded through a needle of `DispatchError` and + /// ultimately returned from a `Dispatchable`. + fn strip_into_dispatch_err(self) -> Error { + use AcceptanceCheckErr::*; + match self { + HeadDataTooLarge => Error::::HeadDataTooLarge, + PrematureCodeUpgrade => Error::::PrematureCodeUpgrade, + NewCodeTooLarge => Error::::NewCodeTooLarge, + ProcessedDownwardMessages(_) => Error::::IncorrectDownwardMessageHandling, + UpwardMessages(_) => Error::::InvalidUpwardMessages, + HrmpWatermark(_) => Error::::HrmpWatermarkMishandling, + OutboundHrmp(_) => Error::::InvalidOutboundHrmp, + } + } +} + /// A collection of data required for checking a candidate. struct CandidateCheckContext { config: configuration::HostConfiguration, @@ -720,10 +770,10 @@ impl CandidateCheckContext { upward_messages: &[primitives::v1::UpwardMessage], hrmp_watermark: T::BlockNumber, horizontal_messages: &[primitives::v1::OutboundHrmpMessage], - ) -> Result<(), DispatchError> { + ) -> Result<(), AcceptanceCheckErr> { ensure!( head_data.0.len() <= self.config.max_head_data_size as _, - Error::::HeadDataTooLarge + AcceptanceCheckErr::HeadDataTooLarge, ); // if any, the code upgrade attempt is allowed. @@ -734,45 +784,28 @@ impl CandidateCheckContext { && self.relay_parent_number.saturating_sub(last) >= self.config.validation_upgrade_frequency }); - ensure!(valid_upgrade_attempt, Error::::PrematureCodeUpgrade); + ensure!( + valid_upgrade_attempt, + AcceptanceCheckErr::PrematureCodeUpgrade, + ); ensure!( new_validation_code.0.len() <= self.config.max_code_size as _, - Error::::NewCodeTooLarge + AcceptanceCheckErr::NewCodeTooLarge, ); } // check if the candidate passes the messaging acceptance criteria - ensure!( - >::check_processed_downward_messages( - para_id, - processed_downward_messages, - ), - Error::::IncorrectDownwardMessageHandling, - ); - ensure!( - >::check_upward_messages( - &self.config, - para_id, - upward_messages, - ), - Error::::InvalidUpwardMessages, - ); - ensure!( - >::check_hrmp_watermark( - para_id, - self.relay_parent_number, - hrmp_watermark, - ), - Error::::HrmpWatermarkMishandling, - ); - ensure!( - >::check_outbound_hrmp( - &self.config, - para_id, - horizontal_messages, - ), - Error::::InvalidOutboundHrmp, - ); + >::check_processed_downward_messages( + para_id, + processed_downward_messages, + )?; + >::check_upward_messages(&self.config, para_id, upward_messages)?; + >::check_hrmp_watermark( + para_id, + self.relay_parent_number, + hrmp_watermark, + )?; + >::check_outbound_hrmp(&self.config, para_id, horizontal_messages)?; Ok(()) } diff --git a/runtime/parachains/src/router.rs b/runtime/parachains/src/router.rs index 508e4da590..eefc6900b8 100644 --- a/runtime/parachains/src/router.rs +++ b/runtime/parachains/src/router.rs @@ -33,8 +33,9 @@ mod hrmp; mod ump; use hrmp::{HrmpOpenChannelRequest, HrmpChannel}; -pub use dmp::QueueDownwardMessageError; -pub use ump::UmpSink; +pub use dmp::{QueueDownwardMessageError, ProcessedDownwardMessagesAcceptanceErr}; +pub use ump::{UmpSink, AcceptanceCheckErr as UpwardMessagesAcceptanceCheckErr}; +pub use hrmp::{HrmpWatermarkAcceptanceErr, OutboundHrmpAcceptanceErr}; #[cfg(test)] pub use ump::mock_sink::MockUmpSink; diff --git a/runtime/parachains/src/router/dmp.rs b/runtime/parachains/src/router/dmp.rs index fa0d057c01..cc3163e543 100644 --- a/runtime/parachains/src/router/dmp.rs +++ b/runtime/parachains/src/router/dmp.rs @@ -17,7 +17,7 @@ use super::{Trait, Module, Store}; use crate::configuration::HostConfiguration; use frame_support::{StorageMap, weights::Weight, traits::Get}; -use sp_std::prelude::*; +use sp_std::{fmt, prelude::*}; use sp_runtime::traits::{BlakeTwo256, Hash as HashT, SaturatedConversion}; use primitives::v1::{Id as ParaId, DownwardMessage, InboundDownwardMessage, Hash}; @@ -28,6 +28,38 @@ pub enum QueueDownwardMessageError { ExceedsMaxMessageSize, } +/// An error returned by [`check_processed_downward_messages`] that indicates an acceptance check +/// didn't pass. +pub enum ProcessedDownwardMessagesAcceptanceErr { + /// If there are pending messages then `processed_downward_messages` should be at least 1, + AdvancementRule, + /// `processed_downward_messages` should not be greater than the number of pending messages. + Underflow { + processed_downward_messages: u32, + dmq_length: u32, + }, +} + +impl fmt::Debug for ProcessedDownwardMessagesAcceptanceErr { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + use ProcessedDownwardMessagesAcceptanceErr::*; + match *self { + AdvancementRule => write!( + fmt, + "DMQ is not empty, but processed_downward_messages is 0", + ), + Underflow { + processed_downward_messages, + dmq_length, + } => write!( + fmt, + "processed_downward_messages = {}, but dmq_length is only {}", + processed_downward_messages, dmq_length, + ), + } + } +} + /// Routines and getters related to downward message passing. impl Module { pub(crate) fn clean_dmp_after_outgoing(outgoing_para: ParaId) { @@ -72,26 +104,24 @@ impl Module { Ok(()) } - /// Checks if the number of processed downward messages is valid, i.e.: - /// - /// - if there are pending messages then `processed_downward_messages` should be at least 1, - /// - `processed_downward_messages` should not be greater than the number of pending messages. - /// - /// Returns true if all checks have been passed. + /// Checks if the number of processed downward messages is valid. pub(crate) fn check_processed_downward_messages( para: ParaId, processed_downward_messages: u32, - ) -> bool { + ) -> Result<(), ProcessedDownwardMessagesAcceptanceErr> { let dmq_length = Self::dmq_length(para); if dmq_length > 0 && processed_downward_messages == 0 { - return false; + return Err(ProcessedDownwardMessagesAcceptanceErr::AdvancementRule); } if dmq_length < processed_downward_messages { - return false; + return Err(ProcessedDownwardMessagesAcceptanceErr::Underflow { + processed_downward_messages, + dmq_length, + }); } - true + Ok(()) } /// Prunes the specified number of messages from the downward message queue of the given para. @@ -211,20 +241,20 @@ mod tests { new_test_ext(default_genesis_config()).execute_with(|| { // processed_downward_messages=0 is allowed when the DMQ is empty. - assert!(Router::check_processed_downward_messages(a, 0)); + assert!(Router::check_processed_downward_messages(a, 0).is_ok()); queue_downward_message(a, vec![1, 2, 3]).unwrap(); queue_downward_message(a, vec![4, 5, 6]).unwrap(); queue_downward_message(a, vec![7, 8, 9]).unwrap(); // 0 doesn't pass if the DMQ has msgs. - assert!(!Router::check_processed_downward_messages(a, 0)); + assert!(!Router::check_processed_downward_messages(a, 0).is_ok()); // a candidate can consume up to 3 messages - assert!(Router::check_processed_downward_messages(a, 1)); - assert!(Router::check_processed_downward_messages(a, 2)); - assert!(Router::check_processed_downward_messages(a, 3)); + assert!(Router::check_processed_downward_messages(a, 1).is_ok()); + assert!(Router::check_processed_downward_messages(a, 2).is_ok()); + assert!(Router::check_processed_downward_messages(a, 3).is_ok()); // there is no 4 messages in the queue - assert!(!Router::check_processed_downward_messages(a, 4)); + assert!(!Router::check_processed_downward_messages(a, 4).is_ok()); }); } diff --git a/runtime/parachains/src/router/hrmp.rs b/runtime/parachains/src/router/hrmp.rs index 4b56af297f..3bdd895cea 100644 --- a/runtime/parachains/src/router/hrmp.rs +++ b/runtime/parachains/src/router/hrmp.rs @@ -14,23 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use super::{Module, Store, Trait, Error as DispatchError, dmp}; +use super::{dmp, Error as DispatchError, Module, Store, Trait}; use crate::{ configuration::{self, HostConfiguration}, paras, }; use codec::{Decode, Encode}; -use frame_support::{ - traits::Get, weights::Weight, StorageMap, StorageValue, ensure, debug::native as log, -}; +use frame_support::{ensure, traits::Get, weights::Weight, StorageMap, StorageValue}; use primitives::v1::{ Balance, Hash, HrmpChannelId, Id as ParaId, InboundHrmpMessage, OutboundHrmpMessage, SessionIndex, }; use sp_runtime::traits::{BlakeTwo256, Hash as HashT}; -use sp_std::collections::{btree_set::BTreeSet, btree_map::BTreeMap}; -use sp_std::mem; -use sp_std::prelude::*; +use sp_std::{mem, fmt, collections::{btree_map::BTreeMap, btree_set::BTreeSet}, prelude::*}; /// A description of a request to open an HRMP channel. #[derive(Encode, Decode)] @@ -79,7 +75,141 @@ pub struct HrmpChannel { pub mqc_head: Option, } -const LOG_TARGET: &str = "runtime-parachains::hrmp"; +/// An error returned by [`check_hrmp_watermark`] that indicates an acceptance criteria check +/// didn't pass. +pub enum HrmpWatermarkAcceptanceErr { + AdvancementRule { + new_watermark: BlockNumber, + last_watermark: BlockNumber, + }, + AheadRelayParent { + new_watermark: BlockNumber, + relay_chain_parent_number: BlockNumber, + }, + LandsOnBlockWithNoMessages { + new_watermark: BlockNumber, + }, +} + +/// An error returned by [`check_outbound_hrmp`] that indicates an acceptance criteria check +/// didn't pass. +pub enum OutboundHrmpAcceptanceErr { + MoreMessagesThanPermitted { + sent: u32, + permitted: u32, + }, + NotSorted { + idx: u32, + }, + NoSuchChannel { + idx: u32, + channel_id: HrmpChannelId, + }, + MaxMessageSizeExceeded { + idx: u32, + msg_size: u32, + max_size: u32, + }, + TotalSizeExceeded { + idx: u32, + total_size: u32, + limit: u32, + }, + CapacityExceeded { + idx: u32, + count: u32, + limit: u32, + }, +} + +impl fmt::Debug for HrmpWatermarkAcceptanceErr +where + BlockNumber: fmt::Debug, +{ + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + use HrmpWatermarkAcceptanceErr::*; + match self { + AdvancementRule { + new_watermark, + last_watermark, + } => write!( + fmt, + "the HRMP watermark is not advanced relative to the last watermark ({:?} > {:?})", + new_watermark, + last_watermark, + ), + AheadRelayParent { + new_watermark, + relay_chain_parent_number, + } => write!( + fmt, + "the HRMP watermark is ahead the relay-parent ({:?} > {:?})", + new_watermark, + relay_chain_parent_number, + ), + LandsOnBlockWithNoMessages { new_watermark } => write!( + fmt, + "the HRMP watermark ({:?}) doesn't land on a block with messages received", + new_watermark, + ), + } + } +} + +impl fmt::Debug for OutboundHrmpAcceptanceErr { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + use OutboundHrmpAcceptanceErr::*; + match self { + MoreMessagesThanPermitted { sent, permitted } => write!( + fmt, + "more HRMP messages than permitted by config ({} > {})", + sent, + permitted, + ), + NotSorted { idx } => write!( + fmt, + "the HRMP messages are not sorted (first unsorted is at index {})", + idx, + ), + NoSuchChannel { idx, channel_id } => write!( + fmt, + "the HRMP message at index {} is sent to a non existent channel {:?}->{:?}", + idx, + channel_id.sender, + channel_id.recipient, + ), + MaxMessageSizeExceeded { + idx, + msg_size, + max_size, + } => write!( + fmt, + "the HRMP message at index {} exceeds the negotiated channel maximum message size ({} > {})", + idx, + msg_size, + max_size, + ), + TotalSizeExceeded { + idx, + total_size, + limit, + } => write!( + fmt, + "sending the HRMP message at index {} would exceed the neogitiated channel total size ({} > {})", + idx, + total_size, + limit, + ), + CapacityExceeded { idx, count, limit } => write!( + fmt, + "sending the HRMP message at index {} would exceed the neogitiated channel capacity ({} > {})", + idx, + count, + limit, + ), + } + } +} /// Routines and getters related to HRMP. impl Module { @@ -125,10 +255,9 @@ impl Module { idx -= 1; let channel_id = open_req_channels[idx].clone(); - let mut request = ::HrmpOpenChannelRequests::get(&channel_id) - .expect( - "can't be `None` due to the invariant that the list contains the same items as the set; qed" - ); + let mut request = ::HrmpOpenChannelRequests::get(&channel_id).expect( + "can't be `None` due to the invariant that the list contains the same items as the set; qed", + ); if request.confirmed { if >::is_valid_para(channel_id.sender) @@ -243,7 +372,7 @@ impl Module { recipient: ParaId, relay_chain_parent_number: T::BlockNumber, new_hrmp_watermark: T::BlockNumber, - ) -> bool { + ) -> Result<(), HrmpWatermarkAcceptanceErr> { // First, check where the watermark CANNOT legally land. // // (a) For ensuring that messages are eventually, a rule requires each parablock new @@ -253,23 +382,17 @@ impl Module { // not be greater than the relay-chain context block which the parablock refers to. if let Some(last_watermark) = ::HrmpWatermarks::get(&recipient) { if new_hrmp_watermark <= last_watermark { - log::warn!( - target: LOG_TARGET, - "the HRMP watermark is not advanced relative to the last watermark ({} > {})", - new_hrmp_watermark, + return Err(HrmpWatermarkAcceptanceErr::AdvancementRule { + new_watermark: new_hrmp_watermark, last_watermark, - ); - return false; + }); } } if new_hrmp_watermark > relay_chain_parent_number { - log::warn!( - target: LOG_TARGET, - "the HRMP watermark is ahead the relay-parent ({} > {})", - new_hrmp_watermark, + return Err(HrmpWatermarkAcceptanceErr::AheadRelayParent { + new_watermark: new_hrmp_watermark, relay_chain_parent_number, - ); - return false; + }); } // Second, check where the watermark CAN land. It's one of the following: @@ -277,21 +400,18 @@ impl Module { // (a) The relay parent block number. // (b) A relay-chain block in which this para received at least one message. if new_hrmp_watermark == relay_chain_parent_number { - true + Ok(()) } else { let digest = ::HrmpChannelDigests::get(&recipient); if !digest .binary_search_by_key(&new_hrmp_watermark, |(block_no, _)| *block_no) .is_ok() { - log::warn!( - target: LOG_TARGET, - "the HRMP watermark ({}) doesn't land on a block with messages received", - new_hrmp_watermark, - ); - return false; + return Err(HrmpWatermarkAcceptanceErr::LandsOnBlockWithNoMessages { + new_watermark: new_hrmp_watermark, + }); } - true + Ok(()) } } @@ -299,31 +419,27 @@ impl Module { config: &HostConfiguration, sender: ParaId, out_hrmp_msgs: &[OutboundHrmpMessage], - ) -> bool { + ) -> Result<(), OutboundHrmpAcceptanceErr> { if out_hrmp_msgs.len() as u32 > config.hrmp_max_message_num_per_candidate { - log::warn!( - target: LOG_TARGET, - "more HRMP messages than permitted by config ({} > {})", - out_hrmp_msgs.len(), - config.hrmp_max_message_num_per_candidate, - ); - return false; + return Err(OutboundHrmpAcceptanceErr::MoreMessagesThanPermitted { + sent: out_hrmp_msgs.len() as u32, + permitted: config.hrmp_max_message_num_per_candidate, + }); } let mut last_recipient = None::; - for (idx, out_msg) in out_hrmp_msgs.iter().enumerate() { + for (idx, out_msg) in out_hrmp_msgs + .iter() + .enumerate() + .map(|(idx, out_msg)| (idx as u32, out_msg)) + { match last_recipient { // the messages must be sorted in ascending order and there must be no two messages sent // to the same recipient. Thus we can check that every recipient is strictly greater than // the previous one. Some(last_recipient) if out_msg.recipient <= last_recipient => { - log::warn!( - target: LOG_TARGET, - "the HRMP messages are not sorted (at index {})", - idx, - ); - return false; + return Err(OutboundHrmpAcceptanceErr::NotSorted { idx }); } _ => last_recipient = Some(out_msg.recipient), } @@ -336,54 +452,39 @@ impl Module { let channel = match ::HrmpChannels::get(&channel_id) { Some(channel) => channel, None => { - log::warn!( - target: LOG_TARGET, - "the HRMP message at index {} is sent to a non existent channel {}->{}", - idx, - channel_id.sender, - channel_id.recipient, - ); - return false; + return Err(OutboundHrmpAcceptanceErr::NoSuchChannel { channel_id, idx }); } }; - if out_msg.data.len() as u32 > channel.max_message_size { - log::warn!( - target: LOG_TARGET, - "the HRMP message at index {} exceeds the negotiated channel maximum message size ({} > {})", + let msg_size = out_msg.data.len() as u32; + if msg_size > channel.max_message_size { + return Err(OutboundHrmpAcceptanceErr::MaxMessageSizeExceeded { idx, - out_msg.data.len(), - channel.max_message_size, - ); - return false; + msg_size, + max_size: channel.max_message_size, + }); } let new_total_size = channel.total_size + out_msg.data.len() as u32; if new_total_size > channel.max_total_size { - log::warn!( - target: LOG_TARGET, - "sending the HRMP message at index {} would exceed the neogitiated channel total size ({} > {})", + return Err(OutboundHrmpAcceptanceErr::TotalSizeExceeded { idx, - new_total_size, - channel.max_total_size, - ); - return false; + total_size: new_total_size, + limit: channel.max_total_size, + }); } let new_msg_count = channel.msg_count + 1; if new_msg_count > channel.max_capacity { - log::warn!( - target: LOG_TARGET, - "sending the HRMP message at index {} would exceed the neogitiated channel capacity ({} > {})", + return Err(OutboundHrmpAcceptanceErr::CapacityExceeded { idx, - new_msg_count, - channel.max_capacity, - ); - return false; + count: new_msg_count, + limit: channel.max_capacity, + }); } } - true + Ok(()) } pub(crate) fn prune_hrmp(recipient: ParaId, new_hrmp_watermark: T::BlockNumber) -> Weight { @@ -662,8 +763,8 @@ impl Module { ::HrmpAcceptedChannelRequestCount::insert(&origin, accepted_cnt + 1); let notification_bytes = { - use xcm::v0::Xcm; use codec::Encode as _; + use xcm::v0::Xcm; Xcm::HrmpChannelAccepted { recipient: u32::from(origin), @@ -708,8 +809,8 @@ impl Module { let config = >::config(); let notification_bytes = { - use xcm::v0::Xcm; use codec::Encode as _; + use xcm::v0::Xcm; Xcm::HrmpChannelClosing { initiator: u32::from(origin), @@ -775,8 +876,8 @@ impl Module { #[cfg(test)] mod tests { use super::*; + use crate::mock::{new_test_ext, Configuration, Paras, Router, System}; use crate::router::tests::default_genesis_config; - use crate::mock::{Configuration, System, Paras, Router, new_test_ext}; use primitives::v1::BlockNumber; use std::collections::{BTreeMap, HashSet}; @@ -1139,14 +1240,14 @@ mod tests { data: b"this is an emergency".to_vec(), }]; let config = Configuration::config(); - assert!(Router::check_outbound_hrmp(&config, para_a, &msgs)); + assert!(Router::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); let _ = Router::queue_outbound_hrmp(para_a, msgs); assert_storage_consistency_exhaustive(); // On Block 7: // B receives the message sent by A. B sets the watermark to 6. run_to_block(7, None); - assert!(Router::check_hrmp_watermark(para_b, 7, 6)); + assert!(Router::check_hrmp_watermark(para_b, 7, 6).is_ok()); let _ = Router::prune_hrmp(para_b, 6); assert_storage_consistency_exhaustive(); }); @@ -1203,7 +1304,7 @@ mod tests { data: b"knock".to_vec(), }]; let config = Configuration::config(); - assert!(Router::check_outbound_hrmp(&config, para_a, &msgs)); + assert!(Router::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); let _ = Router::queue_outbound_hrmp(para_a, msgs.clone()); // Verify that the sent messages are there and that also the empty channels are present. diff --git a/runtime/parachains/src/router/ump.rs b/runtime/parachains/src/router/ump.rs index 63d0726175..2bfdafbb6c 100644 --- a/runtime/parachains/src/router/ump.rs +++ b/runtime/parachains/src/router/ump.rs @@ -16,9 +16,9 @@ use super::{Trait, Module, Store}; use crate::configuration::{self, HostConfiguration}; -use sp_std::prelude::*; +use sp_std::{fmt, prelude::*}; use sp_std::collections::{btree_map::BTreeMap, vec_deque::VecDeque}; -use frame_support::{StorageMap, StorageValue, weights::Weight, traits::Get, debug::native as log}; +use frame_support::{StorageMap, StorageValue, weights::Weight, traits::Get}; use primitives::v1::{Id as ParaId, UpwardMessage}; /// All upward messages coming from parachains will be funneled into an implementation of this trait. @@ -50,7 +50,63 @@ impl UmpSink for () { } } -const LOG_TARGET: &str = "runtime-parachains::upward-messages"; +/// An error returned by [`check_upward_messages`] that indicates a violation of one of acceptance +/// criteria rules. +pub enum AcceptanceCheckErr { + MoreMessagesThanPermitted { + sent: u32, + permitted: u32, + }, + MessageSize { + idx: u32, + msg_size: u32, + max_size: u32, + }, + CapacityExceeded { + count: u32, + limit: u32, + }, + TotalSizeExceeded { + total_size: u32, + limit: u32, + }, +} + +impl fmt::Debug for AcceptanceCheckErr { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match *self { + AcceptanceCheckErr::MoreMessagesThanPermitted { sent, permitted } => write!( + fmt, + "more upward messages than permitted by config ({} > {})", + sent, + permitted, + ), + AcceptanceCheckErr::MessageSize { + idx, + msg_size, + max_size, + } => write!( + fmt, + "upward message idx {} larger than permitted by config ({} > {})", + idx, + msg_size, + max_size, + ), + AcceptanceCheckErr::CapacityExceeded { count, limit } => write!( + fmt, + "the ump queue would have more items than permitted by config ({} > {})", + count, + limit, + ), + AcceptanceCheckErr::TotalSizeExceeded { total_size, limit } => write!( + fmt, + "the ump queue would have grown past the max size permitted by config ({} > {})", + total_size, + limit, + ), + } + } +} /// Routines related to the upward message passing. impl Module { @@ -79,15 +135,12 @@ impl Module { config: &HostConfiguration, para: ParaId, upward_messages: &[UpwardMessage], - ) -> bool { + ) -> Result<(), AcceptanceCheckErr> { if upward_messages.len() as u32 > config.max_upward_message_num_per_candidate { - log::warn!( - target: LOG_TARGET, - "more upward messages than permitted by config ({} > {})", - upward_messages.len(), - config.max_upward_message_num_per_candidate, - ); - return false; + return Err(AcceptanceCheckErr::MoreMessagesThanPermitted { + sent: upward_messages.len() as u32, + permitted: config.max_upward_message_num_per_candidate, + }); } let (mut para_queue_count, mut para_queue_size) = @@ -96,14 +149,11 @@ impl Module { for (idx, msg) in upward_messages.into_iter().enumerate() { let msg_size = msg.len() as u32; if msg_size > config.max_upward_message_size { - log::warn!( - target: LOG_TARGET, - "upward message idx {} larger than permitted by config ({} > {})", - idx, + return Err(AcceptanceCheckErr::MessageSize { + idx: idx as u32, msg_size, - config.max_upward_message_size, - ); - return false; + max_size: config.max_upward_message_size, + }); } para_queue_count += 1; para_queue_size += msg_size; @@ -112,21 +162,19 @@ impl Module { // make sure that the queue is not overfilled. // we do it here only once since returning false invalidates the whole relay-chain block. if para_queue_count > config.max_upward_queue_count { - log::warn!( - target: LOG_TARGET, - "the ump queue would have more items than permitted by config ({} > {})", - para_queue_count, config.max_upward_queue_count, - ); + return Err(AcceptanceCheckErr::CapacityExceeded { + count: para_queue_count, + limit: config.max_upward_queue_count, + }); } if para_queue_size > config.max_upward_queue_size { - log::warn!( - target: LOG_TARGET, - "the ump queue would have grown past the max size permitted by config ({} > {})", - para_queue_size, config.max_upward_queue_size, - ); + return Err(AcceptanceCheckErr::TotalSizeExceeded { + total_size: para_queue_size, + limit: config.max_upward_queue_size, + }); } - para_queue_count <= config.max_upward_queue_count - && para_queue_size <= config.max_upward_queue_size + + Ok(()) } /// Enacts all the upward messages sent by a candidate. @@ -539,11 +587,7 @@ mod tests { fn queue_upward_msg(para: ParaId, msg: UpwardMessage) { let msgs = vec![msg]; - assert!(Router::check_upward_messages( - &Configuration::config(), - para, - &msgs, - )); + assert!(Router::check_upward_messages(&Configuration::config(), para, &msgs).is_ok()); let _ = Router::enact_upward_messages(para, msgs); } @@ -737,5 +781,4 @@ mod tests { } }); } - } diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index 1f7050661f..48e21bf2bf 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -223,21 +223,7 @@ pub fn check_validation_outputs( para_id: ParaId, outputs: primitives::v1::ValidationOutputs, ) -> bool { - match >::check_validation_outputs(para_id, outputs) { - Ok(()) => true, - Err(e) => { - frame_support::debug::RuntimeLogger::init(); - let err: &'static str = e.into(); - log::debug!( - target: "candidate_validation", - "Validation outputs checking for parachain `{}` failed: {}", - u32::from(para_id), - err, - ); - - false - } - } + >::check_validation_outputs(para_id, outputs) } /// Implementation for the `session_index_for_child` function of the runtime API. -- GitLab From cd45bbc5319098be41d3a7f611f2ff48f75818aa Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Wed, 11 Nov 2020 13:44:31 +0100 Subject: [PATCH 006/203] [CI] Fix release Docker github action (#1942) --- .github/workflows/publish-docker-release.yml | 8 ++++++-- scripts/docker/release.Dockerfile | 11 ++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish-docker-release.yml b/.github/workflows/publish-docker-release.yml index 8ccc605d9a..811849c561 100644 --- a/.github/workflows/publish-docker-release.yml +++ b/.github/workflows/publish-docker-release.yml @@ -14,12 +14,12 @@ jobs: uses: docker/setup-buildx-action@v1 - name: Cache Docker layers uses: actions/cache@v2 - - name: Login to Dockerhub with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx- + - name: Login to Dockerhub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} @@ -29,10 +29,14 @@ jobs: uses: docker/build-push-action@v2 with: push: true - file: scripts/docker/Dockerfile.release + file: scripts/docker/release.Dockerfile tags: | parity/polkadot:latest parity/polkadot:${{ github.event.release.tag_name }} + build-args: | + POLKADOT_VERSION=${{ github.event.release.tag_name }} + VCS_REF=${{ github.ref }} + BUILD_DATE=${{ github.event.release.published_at }} cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache - name: Image digest diff --git a/scripts/docker/release.Dockerfile b/scripts/docker/release.Dockerfile index 517368ce2a..b4d3a786ec 100644 --- a/scripts/docker/release.Dockerfile +++ b/scripts/docker/release.Dockerfile @@ -3,6 +3,7 @@ FROM debian:buster-slim # metadata ARG VCS_REF ARG BUILD_DATE +ARG POLKADOT_VERSION LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ @@ -18,21 +19,21 @@ ENV RUST_BACKTRACE 1 # install tools and dependencies RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ libssl1.1 \ ca-certificates \ curl \ gnupg && \ + useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ gpg --recv-keys --keyserver hkps://keys.mailvelope.com 9D4B2B6EB8F97156D19669A9FF0812D491B96798 && \ gpg --export 9D4B2B6EB8F97156D19669A9FF0812D491B96798 > /usr/share/keyrings/parity.gpg && \ echo 'deb [signed-by=/usr/share/keyrings/parity.gpg] https://releases.parity.io/deb release main' > /etc/apt/sources.list.d/parity.list && \ - apt update && \ - apt install polkadot && \ + apt-get update && \ + apt-get install -y --no-install-recommends polkadot=${POLKADOT_VERSION#?} && \ # apt cleanup apt-get autoremove -y && \ apt-get clean && \ - find /var/lib/apt/lists/ -type f -not -name lock -delete + rm -rf /var/lib/apt/lists/* USER polkadot -- GitLab From f4eeacc9c345eef8158c16ed914ca6f59fb68e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Wed, 11 Nov 2020 14:49:15 +0100 Subject: [PATCH 007/203] Companion PR for Substrate #7186 (#1816) * babe: backoff authoring blocks when finality lags * service: use default constructor for backoff authoring strat * slots: update to use renamed backoff strategy name * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 274 ++++++++++++++++++++-------------------- node/service/Cargo.toml | 1 + node/service/src/lib.rs | 3 + 3 files changed, 142 insertions(+), 136 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d121c5811b..3b7a68ebfa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1494,7 +1494,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", ] @@ -1502,7 +1502,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -1520,7 +1520,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "chrono", "frame-benchmarking", @@ -1542,7 +1542,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -1558,7 +1558,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "serde", @@ -1569,7 +1569,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "bitflags", "frame-metadata", @@ -1594,7 +1594,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1617,7 +1617,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1627,7 +1627,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -1643,7 +1643,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -1657,7 +1657,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-api", @@ -3847,7 +3847,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -3863,7 +3863,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -3878,7 +3878,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3903,7 +3903,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3917,7 +3917,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3933,7 +3933,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3948,7 +3948,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3963,7 +3963,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -3984,7 +3984,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4000,7 +4000,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4020,7 +4020,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4037,7 +4037,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4051,7 +4051,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4067,7 +4067,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4081,7 +4081,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4096,7 +4096,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4117,7 +4117,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4133,7 +4133,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4146,7 +4146,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "enumflags2", "frame-support", @@ -4161,7 +4161,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4176,7 +4176,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4212,7 +4212,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4226,7 +4226,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4248,7 +4248,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4273,7 +4273,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4291,7 +4291,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "frame-system", @@ -4308,7 +4308,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4326,7 +4326,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-support", "parity-scale-codec", @@ -4339,7 +4339,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4370,7 +4370,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5540,6 +5540,7 @@ dependencies = [ "sc-client-db", "sc-consensus", "sc-consensus-babe", + "sc-consensus-slots", "sc-executor", "sc-finality-grandpa", "sc-network", @@ -6587,7 +6588,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "async-trait", "bytes 0.5.6", @@ -6617,7 +6618,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -6641,7 +6642,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6658,7 +6659,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -6679,7 +6680,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6690,7 +6691,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6734,7 +6735,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6745,7 +6746,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "fnv", @@ -6782,7 +6783,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "blake2-rfc", "hash-db", @@ -6812,7 +6813,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6823,7 +6824,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "fork-tree", @@ -6868,7 +6869,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "futures 0.3.5", @@ -6892,7 +6893,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6905,7 +6906,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -6916,6 +6917,7 @@ dependencies = [ "sc-telemetry", "sp-api", "sp-application-crypto", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-slots", @@ -6929,7 +6931,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "sc-client-api", @@ -6943,7 +6945,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "lazy_static", @@ -6972,7 +6974,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "log 0.4.11", @@ -6989,7 +6991,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -7004,7 +7006,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -7022,7 +7024,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "finality-grandpa", @@ -7059,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "finality-grandpa", @@ -7083,7 +7085,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "ansi_term 0.12.1", "futures 0.3.5", @@ -7101,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "async-trait", "derive_more", @@ -7121,7 +7123,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "hash-db", "lazy_static", @@ -7140,7 +7142,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "async-std", "async-trait", @@ -7194,7 +7196,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -7209,7 +7211,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "bytes 0.5.6", "fnv", @@ -7236,7 +7238,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "libp2p", @@ -7249,7 +7251,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "substrate-prometheus-endpoint", @@ -7258,7 +7260,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "hash-db", @@ -7291,7 +7293,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "futures 0.3.5", @@ -7315,7 +7317,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7333,7 +7335,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "directories", @@ -7397,7 +7399,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -7411,7 +7413,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7430,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -7451,7 +7453,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "erased-serde", "log 0.4.11", @@ -7470,7 +7472,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "futures 0.3.5", @@ -7491,7 +7493,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "futures 0.3.5", @@ -7929,7 +7931,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "log 0.4.11", @@ -7941,7 +7943,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "hash-db", "parity-scale-codec", @@ -7956,7 +7958,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7968,7 +7970,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "serde", @@ -7980,7 +7982,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7993,7 +7995,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-api", @@ -8005,7 +8007,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8016,7 +8018,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-api", @@ -8028,7 +8030,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "lru 0.4.3", @@ -8045,7 +8047,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "serde", "serde_json", @@ -8054,7 +8056,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "futures-timer 3.0.2", @@ -8080,7 +8082,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "merlin", "parity-scale-codec", @@ -8100,7 +8102,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8109,7 +8111,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8121,7 +8123,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "base58", "blake2-rfc", @@ -8165,7 +8167,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8174,7 +8176,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8184,7 +8186,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "environmental", "parity-scale-codec", @@ -8195,7 +8197,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "finality-grandpa", "log 0.4.11", @@ -8212,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8224,7 +8226,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "hash-db", @@ -8248,7 +8250,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "lazy_static", "sp-core", @@ -8259,7 +8261,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "async-trait", "derive_more", @@ -8275,7 +8277,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "serde", @@ -8287,7 +8289,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8298,7 +8300,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "sp-api", "sp-core", @@ -8308,7 +8310,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "backtrace", "log 0.4.11", @@ -8317,7 +8319,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "serde", "sp-core", @@ -8326,7 +8328,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "either", "hash256-std-hasher", @@ -8348,7 +8350,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8364,7 +8366,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "Inflector", "proc-macro-crate", @@ -8376,7 +8378,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "serde", "serde_json", @@ -8385,7 +8387,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-api", @@ -8398,7 +8400,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8408,7 +8410,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "hash-db", "log 0.4.11", @@ -8430,12 +8432,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8448,7 +8450,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "sp-core", @@ -8461,7 +8463,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8475,7 +8477,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "log 0.4.11", "parity-scale-codec", @@ -8488,7 +8490,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "derive_more", "futures 0.3.5", @@ -8503,7 +8505,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "hash-db", "memory-db", @@ -8517,7 +8519,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "futures-core", @@ -8529,7 +8531,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8541,7 +8543,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8683,7 +8685,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "chrono", "console_error_panic_hook", @@ -8709,7 +8711,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "platforms", ] @@ -8717,7 +8719,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.5", @@ -8740,7 +8742,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "async-std", "derive_more", @@ -8754,7 +8756,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.1.29", "futures 0.3.5", @@ -8781,7 +8783,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "futures 0.3.5", "substrate-test-utils-derive", @@ -8791,7 +8793,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#2e7292cd84121db8bcd2317c1ad70e348ee52f7a" +source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index c7ac6fe2da..5ea9e38bb7 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -14,6 +14,7 @@ sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "mas sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 0c351d1aab..6cc1e61d20 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -489,6 +489,8 @@ pub fn new_full( { let role = config.role.clone(); let force_authoring = config.force_authoring; + let backoff_authoring_blocks = + Some(sc_consensus_slots::BackoffAuthoringOnFinalizedHeadLagging::default()); let disable_grandpa = config.disable_grandpa; let name = config.network.node_name.clone(); @@ -661,6 +663,7 @@ pub fn new_full( sync_oracle: network.clone(), inherent_data_providers: inherent_data_providers.clone(), force_authoring, + backoff_authoring_blocks, babe_link, can_author_with, }; -- GitLab From 355558ae880b6f2d256550f02fc41f680b0f752b Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Thu, 12 Nov 2020 16:16:57 +0100 Subject: [PATCH 008/203] Restrict collating_using_adder_collator test on feature real-overseer (#1947) This test can only pass given that feature, and runs forever otherwise. This change ensure that a careless `cargo test --all` doesn't run forever. --- parachain/test-parachains/adder/collator/tests/integration.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/parachain/test-parachains/adder/collator/tests/integration.rs b/parachain/test-parachains/adder/collator/tests/integration.rs index a7d9a92559..2a59e5a33c 100644 --- a/parachain/test-parachains/adder/collator/tests/integration.rs +++ b/parachain/test-parachains/adder/collator/tests/integration.rs @@ -19,6 +19,7 @@ // If this test is failing, make sure to run all tests with the `real-overseer` feature being enabled. #[substrate_test_utils::test] +#[cfg(feature = "real-overseer")] async fn collating_using_adder_collator(task_executor: sc_service::TaskExecutor) { use sp_keyring::AccountKeyring::*; use futures::join; -- GitLab From b19f3e1ddc4864f0983fd0531a42550db57d98e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 12 Nov 2020 19:48:34 +0100 Subject: [PATCH 009/203] Make sure adder collator test is executed in CI (#1949) * Revert "Restrict collating_using_adder_collator test on feature real-overseer (#1947)" This reverts commit 355558ae880b6f2d256550f02fc41f680b0f752b. * Revert "Revert "Restrict collating_using_adder_collator test on feature real-overseer (#1947)"" This reverts commit 4e92cdfb1046b0e3da7627297050ae71ae3dd6e3. * Test something --- scripts/gitlab/test_linux_stable.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/gitlab/test_linux_stable.sh b/scripts/gitlab/test_linux_stable.sh index 98ace6b542..17f5c80a72 100755 --- a/scripts/gitlab/test_linux_stable.sh +++ b/scripts/gitlab/test_linux_stable.sh @@ -4,3 +4,6 @@ source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh" time cargo test --all --release --verbose --locked --features=runtime-benchmarks --features=real-overseer + +cd parachain/test-parachains/adder/collator/ +time cargo test --release --verbose --locked --features=real-overseer -- GitLab From a5b75278f95f61805d2fd70d3efe0072ba13667f Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Mon, 16 Nov 2020 14:41:57 +0100 Subject: [PATCH 010/203] Add CI job to verify extrinsic ordering (#1950) * WIP: add initial check_extrinsics_ordering.sh script * iterate through runtimes, add gitlab job * move job to publish * temp force build-linux-release to run * update check_extrinsics_ordering.sh * maybe we have to fetch release * use node docker image * revert before opening pr: force bad extrinsic ordering * revert commits to prepare for PR * move job to build stage, use bin from test-linux-release * remove FIXME * fix PR nags --- .gitlab-ci.yml | 13 +++++ scripts/gitlab/check_extrinsics_ordering.sh | 59 +++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100755 scripts/gitlab/check_extrinsics_ordering.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 913c9e43c8..07438a8c8f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -116,6 +116,9 @@ test-linux-stable: &test # but still want to have debug assertions. RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" TARGET: native + artifacts: + paths: + - ./target/release/polkadot script: - ./scripts/gitlab/test_linux_stable.sh - sccache -s @@ -141,6 +144,16 @@ check-runtime-benchmarks: &test - ./scripts/gitlab/check_runtime_benchmarks.sh - sccache -s +check-transaction-versions: + image: node:15 + stage: build + needs: + - job: test-linux-stable + before_script: + - npm install -g @polkadot/metadata-cmp + - git fetch origin release + script: "scripts/gitlab/check_extrinsics_ordering.sh" + build-wasm-release: stage: build <<: *collect-artifacts diff --git a/scripts/gitlab/check_extrinsics_ordering.sh b/scripts/gitlab/check_extrinsics_ordering.sh new file mode 100755 index 0000000000..cfdad63691 --- /dev/null +++ b/scripts/gitlab/check_extrinsics_ordering.sh @@ -0,0 +1,59 @@ +#!/bin/bash +BIN=./target/release/polkadot +LIVE_WS=wss://rpc.polkadot.io +LOCAL_WS=ws://localhost:9944 + +# Kill the polkadot client before exiting +trap 'kill "$(jobs -p)"' EXIT + +runtimes=( + "westend" + "kusama" + "polkadot" +) + +for RUNTIME in "${runtimes[@]}"; do + echo "[+] Checking runtime: ${RUNTIME}" + + release_transaction_version=$( + git show "origin/release:runtime/${RUNTIME}/src/lib.rs" | \ + grep 'transaction_version' + ) + + current_transaction_version=$( + grep 'transaction_version' "./runtime/${RUNTIME}/src/lib.rs" + ) + + echo "[+] Release: ${release_transaction_version}" + echo "[+] Ours: ${current_transaction_version}" + + if [ ! "$release_transaction_version" = "$current_transaction_version" ]; then + echo "[+] Transaction version for ${RUNTIME} has been bumped since last release." + exit 0 + fi + + if [ "$RUNTIME" = 'polkadot' ]; then + LIVE_WS="wss://rpc.polkadot.io" + else + LIVE_WS="wss://${RUNTIME}-rpc.polkadot.io" + fi + + # Start running the local polkadot node in the background + $BIN --chain="$RUNTIME-local" & + jobs + + changed_extrinsics=$( + polkadot-js-metadata-cmp "$LIVE_WS" "$LOCAL_WS" \ + | sed 's/^ \+//g' | grep -e 'idx: [0-9]\+ -> [0-9]\+' + ) + + if [ -n "$changed_extrinsics" ]; then + echo "[!] Extrinsics indexing/ordering has changed in the ${RUNTIME} runtime! If this change is intentional, please bump transaction_version in lib.rs. Changed extrinsics:" + echo "$changed_extrinsics" + exit 1 + fi + + echo "[+] No change in extrinsics ordering for the ${RUNTIME} runtime" + kill "$(jobs -p)"; sleep 5 +done + -- GitLab From c7708818a98376f4c9f19c80ce1cc63e9754ed9c Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Mon, 16 Nov 2020 15:02:01 +0100 Subject: [PATCH 011/203] Breakdown the Router module on Dmp, Ump, Hrmp modules (#1939) * Guide: Split router module in guide. Now we have: DMP, UMP and Router module. * Add a glossary entry for what used to be called Router * Extract DMP * Extract UMP * Extract HRMP * Switch over to new modules * Router: goodbye sweet prince * Link to messaging overview for details. * Update missed rococo and test runtimes. * Commit destroyed by rebase changes * Don't deprecate Router but rather make it a meta-project Co-authored-by: Bernhard Schuster * Fix typos suggestion Co-authored-by: Bernhard Schuster * Fix repetition in the impl guide * Clarify that processed_downward_messages has the u32 type * Remove the router subdir. * Deabbreviate DMP,UMP,HRMP Co-authored-by: Bernhard Schuster --- roadmap/implementers-guide/src/SUMMARY.md | 4 +- roadmap/implementers-guide/src/glossary.md | 1 + roadmap/implementers-guide/src/runtime/dmp.md | 59 +++ .../src/runtime/{router.md => hrmp.md} | 103 +---- .../src/runtime/inclusion.md | 16 +- .../src/runtime/inclusioninherent.md | 2 +- .../src/runtime/initializer.md | 6 +- roadmap/implementers-guide/src/runtime/ump.md | 100 +++++ runtime/common/src/paras_registrar.rs | 23 +- runtime/common/src/paras_sudo_wrapper.rs | 10 +- runtime/parachains/src/{router => }/dmp.rs | 159 +++++-- runtime/parachains/src/{router => }/hrmp.rs | 394 +++++++++++++----- runtime/parachains/src/inclusion.rs | 33 +- runtime/parachains/src/inclusion_inherent.rs | 4 +- runtime/parachains/src/initializer.rs | 22 +- runtime/parachains/src/lib.rs | 26 +- runtime/parachains/src/mock.rs | 19 +- runtime/parachains/src/paras.rs | 4 +- runtime/parachains/src/router.rs | 331 --------------- runtime/parachains/src/runtime_api_impl/v1.rs | 10 +- runtime/parachains/src/{router => }/ump.rs | 174 ++++++-- runtime/parachains/src/util.rs | 12 +- runtime/rococo/src/lib.rs | 17 +- runtime/test-runtime/src/lib.rs | 13 +- 24 files changed, 853 insertions(+), 689 deletions(-) create mode 100644 roadmap/implementers-guide/src/runtime/dmp.md rename roadmap/implementers-guide/src/runtime/{router.md => hrmp.md} (73%) create mode 100644 roadmap/implementers-guide/src/runtime/ump.md rename runtime/parachains/src/{router => }/dmp.rs (64%) rename runtime/parachains/src/{router => }/hrmp.rs (75%) delete mode 100644 runtime/parachains/src/router.rs rename runtime/parachains/src/{router => }/ump.rs (81%) diff --git a/roadmap/implementers-guide/src/SUMMARY.md b/roadmap/implementers-guide/src/SUMMARY.md index f37fc08f96..f90f149f25 100644 --- a/roadmap/implementers-guide/src/SUMMARY.md +++ b/roadmap/implementers-guide/src/SUMMARY.md @@ -16,7 +16,9 @@ - [Scheduler Module](runtime/scheduler.md) - [Inclusion Module](runtime/inclusion.md) - [InclusionInherent Module](runtime/inclusioninherent.md) - - [Router Module](runtime/router.md) + - [DMP Module](runtime/dmp.md) + - [UMP Module](runtime/ump.md) + - [HRMP Module](runtime/hrmp.md) - [Session Info Module](runtime/session_info.md) - [Runtime APIs](runtime-api/README.md) - [Validators](runtime-api/validators.md) diff --git a/roadmap/implementers-guide/src/glossary.md b/roadmap/implementers-guide/src/glossary.md index 63294d1d77..2dbe2ab14a 100644 --- a/roadmap/implementers-guide/src/glossary.md +++ b/roadmap/implementers-guide/src/glossary.md @@ -24,6 +24,7 @@ Here you can find definitions of a bunch of jargon, usually specific to the Polk - Parathread: A parachain which is scheduled on a pay-as-you-go basis. - Proof-of-Validity (PoV): A stateless-client proof that a parachain candidate is valid, with respect to some validation function. - Relay Parent: A block in the relay chain, referred to in a context where work is being done in the context of the state at this block. +- Router: The router module is a meta module that consists of three runtime modules responsible for routing messages between paras and the relay chain. The three separate runtime modules are: Dmp, Ump, Hrmp, each responsible for the respective part of message routing. - Runtime: The relay-chain state machine. - Runtime Module: See Module. - Runtime API: A means for the node-side behavior to access structured information based on the state of a fork of the blockchain. diff --git a/roadmap/implementers-guide/src/runtime/dmp.md b/roadmap/implementers-guide/src/runtime/dmp.md new file mode 100644 index 0000000000..6f125ca46b --- /dev/null +++ b/roadmap/implementers-guide/src/runtime/dmp.md @@ -0,0 +1,59 @@ +# DMP Module + +A module responsible for Downward Message Processing (DMP). See [Messaging Overview](../messaging.md) for more details. + +## Storage + +General storage entries + +```rust +/// Paras that are to be cleaned up at the end of the session. +/// The entries are sorted ascending by the para id. +OutgoingParas: Vec; +``` + +Storage layout required for implementation of DMP. + +```rust +/// The downward messages addressed for a certain para. +DownwardMessageQueues: map ParaId => Vec; +/// A mapping that stores the downward message queue MQC head for each para. +/// +/// Each link in this chain has a form: +/// `(prev_head, B, H(M))`, where +/// - `prev_head`: is the previous head hash or zero if none. +/// - `B`: is the relay-chain block number in which a message was appended. +/// - `H(M)`: is the hash of the message being appended. +DownwardMessageQueueHeads: map ParaId => Hash; +``` + +## Initialization + +No initialization routine runs for this module. + +## Routines + +Candidate Acceptance Function: + +* `check_processed_downward_messages(P: ParaId, processed_downward_messages: u32)`: + 1. Checks that `DownwardMessageQueues` for `P` is at least `processed_downward_messages` long. + 1. Checks that `processed_downward_messages` is at least 1 if `DownwardMessageQueues` for `P` is not empty. + +Candidate Enactment: + +* `prune_dmq(P: ParaId, processed_downward_messages: u32)`: + 1. Remove the first `processed_downward_messages` from the `DownwardMessageQueues` of `P`. + +Utility routines. + +`queue_downward_message(P: ParaId, M: DownwardMessage)`: + 1. Check if the size of `M` exceeds the `config.max_downward_message_size`. If so, return an error. + 1. Wrap `M` into `InboundDownwardMessage` using the current block number for `sent_at`. + 1. Obtain a new MQC link for the resulting `InboundDownwardMessage` and replace `DownwardMessageQueueHeads` for `P` with the resulting hash. + 1. Add the resulting `InboundDownwardMessage` into `DownwardMessageQueues` for `P`. + +## Session Change + +1. Drain `OutgoingParas`. For each `P` happened to be in the list: + 1. Remove all `DownwardMessageQueues` of `P`. + 1. Remove `DownwardMessageQueueHeads` for `P`. diff --git a/roadmap/implementers-guide/src/runtime/router.md b/roadmap/implementers-guide/src/runtime/hrmp.md similarity index 73% rename from roadmap/implementers-guide/src/runtime/router.md rename to roadmap/implementers-guide/src/runtime/hrmp.md index ef7ce8ceb7..145a2f2845 100644 --- a/roadmap/implementers-guide/src/runtime/router.md +++ b/roadmap/implementers-guide/src/runtime/hrmp.md @@ -1,6 +1,6 @@ -# Router Module +# HRMP Module -The Router module is responsible for all messaging mechanisms supported between paras and the relay chain, specifically: UMP, DMP, HRMP and later XCMP. +A module responsible for Horizontally Relay-routed Message Passing (HRMP). See [Messaging Overview](../messaging.md) for more details. ## Storage @@ -12,61 +12,6 @@ General storage entries OutgoingParas: Vec; ``` -### Upward Message Passing (UMP) - -```rust -/// The messages waiting to be handled by the relay-chain originating from a certain parachain. -/// -/// Note that some upward messages might have been already processed by the inclusion logic. E.g. -/// channel management messages. -/// -/// The messages are processed in FIFO order. -RelayDispatchQueues: map ParaId => Vec; -/// Size of the dispatch queues. Caches sizes of the queues in `RelayDispatchQueue`. -/// -/// First item in the tuple is the count of messages and second -/// is the total length (in bytes) of the message payloads. -/// -/// Note that this is an auxilary mapping: it's possible to tell the byte size and the number of -/// messages only looking at `RelayDispatchQueues`. This mapping is separate to avoid the cost of -/// loading the whole message queue if only the total size and count are required. -/// -/// Invariant: -/// - The set of keys should exactly match the set of keys of `RelayDispatchQueues`. -RelayDispatchQueueSize: map ParaId => (u32, u32); // (num_messages, total_bytes) -/// The ordered list of `ParaId`s that have a `RelayDispatchQueue` entry. -/// -/// Invariant: -/// - The set of items from this vector should be exactly the set of the keys in -/// `RelayDispatchQueues` and `RelayDispatchQueueSize`. -NeedsDispatch: Vec; -/// This is the para that gets dispatched first during the next upward dispatchable queue -/// execution round. -/// -/// Invariant: -/// - If `Some(para)`, then `para` must be present in `NeedsDispatch`. -NextDispatchRoundStartWith: Option; -``` - -### Downward Message Passing (DMP) - -Storage layout required for implementation of DMP. - -```rust -/// The downward messages addressed for a certain para. -DownwardMessageQueues: map ParaId => Vec; -/// A mapping that stores the downward message queue MQC head for each para. -/// -/// Each link in this chain has a form: -/// `(prev_head, B, H(M))`, where -/// - `prev_head`: is the previous head hash or zero if none. -/// - `B`: is the relay-chain block number in which a message was appended. -/// - `H(M)`: is the hash of the message being appended. -DownwardMessageQueueHeads: map ParaId => Hash; -``` - -### HRMP - HRMP related structs: ```rust @@ -189,13 +134,6 @@ No initialization routine runs for this module. Candidate Acceptance Function: -* `check_upward_messages(P: ParaId, Vec`): - 1. Checks that there are at most `config.max_upward_message_num_per_candidate` messages. - 1. Checks that no message exceeds `config.max_upward_message_size`. - 1. Verify that `RelayDispatchQueueSize` for `P` has enough capacity for the messages -* `check_processed_downward_messages(P: ParaId, processed_downward_messages)`: - 1. Checks that `DownwardMessageQueues` for `P` is at least `processed_downward_messages` long. - 1. Checks that `processed_downward_messages` is at least 1 if `DownwardMessageQueues` for `P` is not empty. * `check_hrmp_watermark(P: ParaId, new_hrmp_watermark)`: 1. `new_hrmp_watermark` should be strictly greater than the value of `HrmpWatermarks` for `P` (if any). 1. `new_hrmp_watermark` must not be greater than the context's block number. @@ -232,42 +170,12 @@ Candidate Enactment: > parametrization this shouldn't be a big of a deal. > If that becomes a problem consider introducing an extra dictionary which says at what block the given sender > sent a message to the recipient. -* `prune_dmq(P: ParaId, processed_downward_messages)`: - 1. Remove the first `processed_downward_messages` from the `DownwardMessageQueues` of `P`. -* `enact_upward_messages(P: ParaId, Vec)`: - 1. Process each upward message `M` in order: - 1. Append the message to `RelayDispatchQueues` for `P` - 1. Increment the size and the count in `RelayDispatchQueueSize` for `P`. - 1. Ensure that `P` is present in `NeedsDispatch`. The following routine is intended to be called in the same time when `Paras::schedule_para_cleanup` is called. `schedule_para_cleanup(ParaId)`: 1. Add the para into the `OutgoingParas` vector maintaining the sorted order. -The following routine is meant to execute pending entries in upward message queues. This function doesn't fail, even if -dispatcing any of individual upward messages returns an error. - -`process_pending_upward_messages()`: - 1. Initialize a cumulative weight counter `T` to 0 - 1. Iterate over items in `NeedsDispatch` cyclically, starting with `NextDispatchRoundStartWith`. If the item specified is `None` start from the beginning. For each `P` encountered: - 1. Dequeue the first upward message `D` from `RelayDispatchQueues` for `P` - 1. Decrement the size of the message from `RelayDispatchQueueSize` for `P` - 1. Delegate processing of the message to the runtime. The weight consumed is added to `T`. - 1. If `T >= config.preferred_dispatchable_upward_messages_step_weight`, set `NextDispatchRoundStartWith` to `P` and finish processing. - 1. If `RelayDispatchQueues` for `P` became empty, remove `P` from `NeedsDispatch`. - 1. If `NeedsDispatch` became empty then finish processing and set `NextDispatchRoundStartWith` to `None`. - > NOTE that in practice we would need to approach the weight calculation more thoroughly, i.e. incorporate all operations - > that could take place on the course of handling these upward messages. - -Utility routines. - -`queue_downward_message(P: ParaId, M: DownwardMessage)`: - 1. Check if the size of `M` exceeds the `config.max_downward_message_size`. If so, return an error. - 1. Wrap `M` into `InboundDownwardMessage` using the current block number for `sent_at`. - 1. Obtain a new MQC link for the resulting `InboundDownwardMessage` and replace `DownwardMessageQueueHeads` for `P` with the resulting hash. - 1. Add the resulting `InboundDownwardMessage` into `DownwardMessageQueues` for `P`. - ## Entry-points The following entry-points are meant to be used for HRMP channel management. @@ -336,15 +244,8 @@ the parachain executed the message. 1. Drain `OutgoingParas`. For each `P` happened to be in the list: 1. Remove all inbound channels of `P`, i.e. `(_, P)`, 1. Remove all outbound channels of `P`, i.e. `(P, _)`, - 1. Remove all `DownwardMessageQueues` of `P`. - 1. Remove `DownwardMessageQueueHeads` for `P`. - 1. Remove `RelayDispatchQueueSize` of `P`. - 1. Remove `RelayDispatchQueues` of `P`. 1. Remove `HrmpOpenChannelRequestCount` for `P` 1. Remove `HrmpAcceptedChannelRequestCount` for `P`. - 1. Remove `P` if it exists in `NeedsDispatch`. - 1. If `P` is in `NextDispatchRoundStartWith`, then reset it to `None` - - Note that if we don't remove the open/close requests since they are going to die out naturally at the end of the session. 1. For each channel designator `D` in `HrmpOpenChannelRequestsList` we query the request `R` from `HrmpOpenChannelRequests`: 1. if `R.confirmed = false`: 1. increment `R.age` by 1. diff --git a/roadmap/implementers-guide/src/runtime/inclusion.md b/roadmap/implementers-guide/src/runtime/inclusion.md index 46f3e52116..f2d9f21422 100644 --- a/roadmap/implementers-guide/src/runtime/inclusion.md +++ b/roadmap/implementers-guide/src/runtime/inclusion.md @@ -67,20 +67,20 @@ All failed checks should lead to an unrecoverable error making the block invalid 1. Ensure that any code upgrade scheduled by the candidate does not happen within `config.validation_upgrade_frequency` of `Paras::last_code_upgrade(para_id, true)`, if any, comparing against the value of `Paras::FutureCodeUpgrades` for the given para ID. 1. Check the collator's signature on the candidate data. 1. check the backing of the candidate using the signatures and the bitfields, comparing against the validators assigned to the groups, fetched with the `group_validators` lookup. - 1. call `Router::check_upward_messages(para, commitments.upward_messages)` to check that the upward messages are valid. - 1. call `Router::check_processed_downward_messages(para, commitments.processed_downward_messages)` to check that the DMQ is properly drained. - 1. call `Router::check_hrmp_watermark(para, commitments.hrmp_watermark)` for each candidate to check rules of processing the HRMP watermark. - 1. using `Router::check_outbound_hrmp(sender, commitments.horizontal_messages)` ensure that the each candidate sent a valid set of horizontal messages + 1. call `Ump::check_upward_messages(para, commitments.upward_messages)` to check that the upward messages are valid. + 1. call `Dmp::check_processed_downward_messages(para, commitments.processed_downward_messages)` to check that the DMQ is properly drained. + 1. call `Hrmp::check_hrmp_watermark(para, commitments.hrmp_watermark)` for each candidate to check rules of processing the HRMP watermark. + 1. using `Hrmp::check_outbound_hrmp(sender, commitments.horizontal_messages)` ensure that the each candidate sent a valid set of horizontal messages 1. create an entry in the `PendingAvailability` map for each backed candidate with a blank `availability_votes` bitfield. 1. create a corresponding entry in the `PendingAvailabilityCommitments` with the commitments. 1. Return a `Vec` of all scheduled cores of the list of passed assignments that a candidate was successfully backed for, sorted ascending by CoreIndex. * `enact_candidate(relay_parent_number: BlockNumber, CommittedCandidateReceipt)`: 1. If the receipt contains a code upgrade, Call `Paras::schedule_code_upgrade(para_id, code, relay_parent_number + config.validationl_upgrade_delay)`. > TODO: Note that this is safe as long as we never enact candidates where the relay parent is across a session boundary. In that case, which we should be careful to avoid with contextual execution, the configuration might have changed and the para may de-sync from the host's understanding of it. - 1. call `Router::enact_upward_messages` for each backed candidate, using the [`UpwardMessage`s](../types/messages.md#upward-message) from the [`CandidateCommitments`](../types/candidate.md#candidate-commitments). - 1. call `Router::prune_dmq` with the para id of the candidate and the candidate's `processed_downward_messages`. - 1. call `Router::prune_hrmp` with the para id of the candiate and the candidate's `hrmp_watermark`. - 1. call `Router::queue_outbound_hrmp` with the para id of the candidate and the list of horizontal messages taken from the commitment, + 1. call `Ump::enact_upward_messages` for each backed candidate, using the [`UpwardMessage`s](../types/messages.md#upward-message) from the [`CandidateCommitments`](../types/candidate.md#candidate-commitments). + 1. call `Dmp::prune_dmq` with the para id of the candidate and the candidate's `processed_downward_messages`. + 1. call `Hrmp::prune_hrmp` with the para id of the candiate and the candidate's `hrmp_watermark`. + 1. call `Hrmp::queue_outbound_hrmp` with the para id of the candidate and the list of horizontal messages taken from the commitment, 1. Call `Paras::note_new_head` using the `HeadData` from the receipt and `relay_parent_number`. * `collect_pending`: diff --git a/roadmap/implementers-guide/src/runtime/inclusioninherent.md b/roadmap/implementers-guide/src/runtime/inclusioninherent.md index 9290025e2d..54ebf3af7b 100644 --- a/roadmap/implementers-guide/src/runtime/inclusioninherent.md +++ b/roadmap/implementers-guide/src/runtime/inclusioninherent.md @@ -22,5 +22,5 @@ Included: Option<()>, 1. Invoke `Scheduler::schedule(freed)` 1. Invoke the `Inclusion::process_candidates` routine with the parameters `(backed_candidates, Scheduler::scheduled(), Scheduler::group_validators)`. 1. Call `Scheduler::occupied` using the return value of the `Inclusion::process_candidates` call above, first sorting the list of assigned core indices. - 1. Call the `Router::process_pending_upward_messages` routine to execute all messages in upward dispatch queues. + 1. Call the `Ump::process_pending_upward_messages` routine to execute all messages in upward dispatch queues. 1. If all of the above succeeds, set `Included` to `Some(())`. diff --git a/roadmap/implementers-guide/src/runtime/initializer.md b/roadmap/implementers-guide/src/runtime/initializer.md index 5fd2bc3bd6..fd7324b219 100644 --- a/roadmap/implementers-guide/src/runtime/initializer.md +++ b/roadmap/implementers-guide/src/runtime/initializer.md @@ -23,8 +23,10 @@ The other parachains modules are initialized in this order: 1. Paras 1. Scheduler 1. Inclusion -1. Validity. -1. Router. +1. Validity +1. DMP +1. UMP +1. HRMP The [Configuration Module](configuration.md) is first, since all other modules need to operate under the same configuration as each other. It would lead to inconsistency if, for example, the scheduler ran first and then the configuration was updated before the Inclusion module. diff --git a/roadmap/implementers-guide/src/runtime/ump.md b/roadmap/implementers-guide/src/runtime/ump.md new file mode 100644 index 0000000000..ff2e9e09b9 --- /dev/null +++ b/roadmap/implementers-guide/src/runtime/ump.md @@ -0,0 +1,100 @@ +# UMP Module + +A module responsible for Upward Message Passing (UMP). See [Messaging Overview](../messaging.md) for more details. + +## Storage + +General storage entries + +```rust +/// Paras that are to be cleaned up at the end of the session. +/// The entries are sorted ascending by the para id. +OutgoingParas: Vec; +``` + +Storage related to UMP + +```rust +/// The messages waiting to be handled by the relay-chain originating from a certain parachain. +/// +/// Note that some upward messages might have been already processed by the inclusion logic. E.g. +/// channel management messages. +/// +/// The messages are processed in FIFO order. +RelayDispatchQueues: map ParaId => Vec; +/// Size of the dispatch queues. Caches sizes of the queues in `RelayDispatchQueue`. +/// +/// First item in the tuple is the count of messages and second +/// is the total length (in bytes) of the message payloads. +/// +/// Note that this is an auxilary mapping: it's possible to tell the byte size and the number of +/// messages only looking at `RelayDispatchQueues`. This mapping is separate to avoid the cost of +/// loading the whole message queue if only the total size and count are required. +/// +/// Invariant: +/// - The set of keys should exactly match the set of keys of `RelayDispatchQueues`. +RelayDispatchQueueSize: map ParaId => (u32, u32); // (num_messages, total_bytes) +/// The ordered list of `ParaId`s that have a `RelayDispatchQueue` entry. +/// +/// Invariant: +/// - The set of items from this vector should be exactly the set of the keys in +/// `RelayDispatchQueues` and `RelayDispatchQueueSize`. +NeedsDispatch: Vec; +/// This is the para that gets dispatched first during the next upward dispatchable queue +/// execution round. +/// +/// Invariant: +/// - If `Some(para)`, then `para` must be present in `NeedsDispatch`. +NextDispatchRoundStartWith: Option; +``` + + +## Initialization + +No initialization routine runs for this module. + +## Routines + +Candidate Acceptance Function: + +* `check_upward_messages(P: ParaId, Vec`): + 1. Checks that there are at most `config.max_upward_message_num_per_candidate` messages. + 1. Checks that no message exceeds `config.max_upward_message_size`. + 1. Verify that `RelayDispatchQueueSize` for `P` has enough capacity for the messages + +Candidate Enactment: + +* `enact_upward_messages(P: ParaId, Vec)`: + 1. Process each upward message `M` in order: + 1. Append the message to `RelayDispatchQueues` for `P` + 1. Increment the size and the count in `RelayDispatchQueueSize` for `P`. + 1. Ensure that `P` is present in `NeedsDispatch`. + +The following routine is intended to be called in the same time when `Paras::schedule_para_cleanup` is called. + +`schedule_para_cleanup(ParaId)`: + 1. Add the para into the `OutgoingParas` vector maintaining the sorted order. + +The following routine is meant to execute pending entries in upward message queues. This function doesn't fail, even if +dispatcing any of individual upward messages returns an error. + +`process_pending_upward_messages()`: + 1. Initialize a cumulative weight counter `T` to 0 + 1. Iterate over items in `NeedsDispatch` cyclically, starting with `NextDispatchRoundStartWith`. If the item specified is `None` start from the beginning. For each `P` encountered: + 1. Dequeue the first upward message `D` from `RelayDispatchQueues` for `P` + 1. Decrement the size of the message from `RelayDispatchQueueSize` for `P` + 1. Delegate processing of the message to the runtime. The weight consumed is added to `T`. + 1. If `T >= config.preferred_dispatchable_upward_messages_step_weight`, set `NextDispatchRoundStartWith` to `P` and finish processing. + 1. If `RelayDispatchQueues` for `P` became empty, remove `P` from `NeedsDispatch`. + 1. If `NeedsDispatch` became empty then finish processing and set `NextDispatchRoundStartWith` to `None`. + > NOTE that in practice we would need to approach the weight calculation more thoroughly, i.e. incorporate all operations + > that could take place on the course of handling these upward messages. + +## Session Change + +1. Drain `OutgoingParas`. For each `P` happened to be in the list:. + 1. Remove `RelayDispatchQueueSize` of `P`. + 1. Remove `RelayDispatchQueues` of `P`. + 1. Remove `P` if it exists in `NeedsDispatch`. + 1. If `P` is in `NextDispatchRoundStartWith`, then reset it to `None` + - Note that if we don't remove the open/close requests since they are going to die out naturally at the end of the session. diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index dab0bb02e2..6ecd99aee9 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -33,7 +33,7 @@ use runtime_parachains::{ self, ParaGenesisArgs, }, - router, + dmp, ump, hrmp, ensure_parachain, Origin, }; @@ -41,7 +41,7 @@ use runtime_parachains::{ type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; -pub trait Trait: paras::Trait + router::Trait { +pub trait Trait: paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait { /// The aggregated origin type must support the `parachains` origin. We require that we can /// infallibly convert between this origin and the system origin, but in reality, they're the /// same type, we just can't express that to the Rust type system without writing a `where` @@ -125,7 +125,7 @@ decl_module! { parachain: false, }; - >::schedule_para_initialize(id, genesis); + runtime_parachains::schedule_para_initialize::(id, genesis); Ok(()) } @@ -150,8 +150,7 @@ decl_module! { let debtor = >::take(id); let _ = ::Currency::unreserve(&debtor, T::ParathreadDeposit::get()); - >::schedule_para_cleanup(id); - >::schedule_para_cleanup(id); + runtime_parachains::schedule_para_cleanup::(id); Ok(()) } @@ -231,7 +230,7 @@ impl Module { parachain: true, }; - >::schedule_para_initialize(id, genesis); + runtime_parachains::schedule_para_initialize::(id, genesis); Ok(()) } @@ -242,8 +241,7 @@ impl Module { ensure!(is_parachain, Error::::InvalidChainId); - >::schedule_para_cleanup(id); - >::schedule_para_cleanup(id); + runtime_parachains::schedule_para_cleanup::(id); Ok(()) } @@ -267,7 +265,7 @@ mod tests { impl_outer_origin, impl_outer_dispatch, assert_ok, parameter_types, }; use keyring::Sr25519Keyring; - use runtime_parachains::{initializer, configuration, inclusion, router, scheduler}; + use runtime_parachains::{initializer, configuration, inclusion, scheduler, dmp, ump, hrmp}; use pallet_session::OneSessionHandler; impl_outer_origin! { @@ -425,8 +423,13 @@ mod tests { type WeightInfo = (); } - impl router::Trait for Test { + impl dmp::Trait for Test {} + + impl ump::Trait for Test { type UmpSink = (); + } + + impl hrmp::Trait for Test { type Origin = Origin; } diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index 80f64bf171..19245ac873 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -23,13 +23,12 @@ use frame_support::{ }; use frame_system::ensure_root; use runtime_parachains::{ - router, - paras::{self, ParaGenesisArgs}, + dmp, ump, hrmp, paras::{self, ParaGenesisArgs}, }; use primitives::v1::Id as ParaId; /// The module's configuration trait. -pub trait Trait: paras::Trait + router::Trait { } +pub trait Trait: paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait { } decl_error! { pub enum Error for Module { } @@ -48,7 +47,7 @@ decl_module! { genesis: ParaGenesisArgs, ) -> DispatchResult { ensure_root(origin)?; - paras::Module::::schedule_para_initialize(id, genesis); + runtime_parachains::schedule_para_initialize::(id, genesis); Ok(()) } @@ -56,8 +55,7 @@ decl_module! { #[weight = (1_000, DispatchClass::Operational)] pub fn sudo_schedule_para_cleanup(origin, id: ParaId) -> DispatchResult { ensure_root(origin)?; - paras::Module::::schedule_para_cleanup(id); - router::Module::::schedule_para_cleanup(id); + runtime_parachains::schedule_para_cleanup::(id); Ok(()) } } diff --git a/runtime/parachains/src/router/dmp.rs b/runtime/parachains/src/dmp.rs similarity index 64% rename from runtime/parachains/src/router/dmp.rs rename to runtime/parachains/src/dmp.rs index cc3163e543..5b49479c4b 100644 --- a/runtime/parachains/src/router/dmp.rs +++ b/runtime/parachains/src/dmp.rs @@ -14,9 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use super::{Trait, Module, Store}; -use crate::configuration::HostConfiguration; -use frame_support::{StorageMap, weights::Weight, traits::Get}; +use crate::{ + configuration::{self, HostConfiguration}, + initializer, +}; +use frame_support::{decl_module, decl_storage, StorageMap, weights::Weight, traits::Get}; use sp_std::{fmt, prelude::*}; use sp_runtime::traits::{BlakeTwo256, Hash as HashT, SaturatedConversion}; use primitives::v1::{Id as ParaId, DownwardMessage, InboundDownwardMessage, Hash}; @@ -60,13 +62,72 @@ impl fmt::Debug for ProcessedDownwardMessagesAcceptanceErr { } } +pub trait Trait: frame_system::Trait + configuration::Trait {} + +decl_storage! { + trait Store for Module as Dmp { + /// Paras that are to be cleaned up at the end of the session. + /// The entries are sorted ascending by the para id. + OutgoingParas: Vec; + + /// The downward messages addressed for a certain para. + DownwardMessageQueues: map hasher(twox_64_concat) ParaId => Vec>; + /// A mapping that stores the downward message queue MQC head for each para. + /// + /// Each link in this chain has a form: + /// `(prev_head, B, H(M))`, where + /// - `prev_head`: is the previous head hash or zero if none. + /// - `B`: is the relay-chain block number in which a message was appended. + /// - `H(M)`: is the hash of the message being appended. + DownwardMessageQueueHeads: map hasher(twox_64_concat) ParaId => Hash; + } +} + +decl_module! { + /// The DMP module. + pub struct Module for enum Call where origin: ::Origin { } +} + /// Routines and getters related to downward message passing. impl Module { - pub(crate) fn clean_dmp_after_outgoing(outgoing_para: ParaId) { + /// Block initialization logic, called by initializer. + pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { + 0 + } + + /// Block finalization logic, called by initializer. + pub(crate) fn initializer_finalize() {} + + /// Called by the initializer to note that a new session has started. + pub(crate) fn initializer_on_new_session( + _notification: &initializer::SessionChangeNotification, + ) { + Self::perform_outgoing_para_cleanup(); + } + + /// Iterate over all paras that were registered for offboarding and remove all the data + /// associated with them. + fn perform_outgoing_para_cleanup() { + let outgoing = OutgoingParas::take(); + for outgoing_para in outgoing { + Self::clean_dmp_after_outgoing(outgoing_para); + } + } + + fn clean_dmp_after_outgoing(outgoing_para: ParaId) { ::DownwardMessageQueues::remove(&outgoing_para); ::DownwardMessageQueueHeads::remove(&outgoing_para); } + /// Schedule a para to be cleaned up at the start of the next session. + pub(crate) fn schedule_para_cleanup(id: ParaId) { + OutgoingParas::mutate(|v| { + if let Err(i) = v.binary_search(&id) { + v.insert(i, id); + } + }); + } + /// Enqueue a downward message to a specific recipient para. /// /// When encoded, the message should not exceed the `config.max_downward_message_size`. @@ -165,19 +226,45 @@ impl Module { #[cfg(test)] mod tests { use super::*; - use crate::mock::{Configuration, Router, new_test_ext}; - use crate::router::{ - OutgoingParas, - tests::{default_genesis_config, run_to_block}, - }; + use primitives::v1::BlockNumber; use frame_support::StorageValue; + use frame_support::traits::{OnFinalize, OnInitialize}; use codec::Encode; + use crate::mock::{Configuration, new_test_ext, System, Dmp, GenesisConfig as MockGenesisConfig}; + + pub(crate) fn run_to_block(to: BlockNumber, new_session: Option>) { + while System::block_number() < to { + let b = System::block_number(); + Dmp::initializer_finalize(); + System::on_finalize(b); + + System::on_initialize(b + 1); + System::set_block_number(b + 1); + + if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { + Dmp::initializer_on_new_session(&Default::default()); + } + Dmp::initializer_initialize(b + 1); + } + } + + fn default_genesis_config() -> MockGenesisConfig { + MockGenesisConfig { + configuration: crate::configuration::GenesisConfig { + config: crate::configuration::HostConfiguration { + max_downward_message_size: 1024, + ..Default::default() + }, + }, + ..Default::default() + } + } fn queue_downward_message( para_id: ParaId, msg: DownwardMessage, ) -> Result<(), QueueDownwardMessageError> { - Router::queue_downward_message(&Configuration::config(), para_id, msg) + Dmp::queue_downward_message(&Configuration::config(), para_id, msg) } #[test] @@ -194,23 +281,23 @@ mod tests { queue_downward_message(b, vec![4, 5, 6]).unwrap(); queue_downward_message(c, vec![7, 8, 9]).unwrap(); - Router::schedule_para_cleanup(a); + Dmp::schedule_para_cleanup(a); // run to block without session change. run_to_block(2, None); - assert!(!::DownwardMessageQueues::get(&a).is_empty()); - assert!(!::DownwardMessageQueues::get(&b).is_empty()); - assert!(!::DownwardMessageQueues::get(&c).is_empty()); + assert!(!::DownwardMessageQueues::get(&a).is_empty()); + assert!(!::DownwardMessageQueues::get(&b).is_empty()); + assert!(!::DownwardMessageQueues::get(&c).is_empty()); - Router::schedule_para_cleanup(b); + Dmp::schedule_para_cleanup(b); // run to block changing the session. run_to_block(3, Some(vec![3])); - assert!(::DownwardMessageQueues::get(&a).is_empty()); - assert!(::DownwardMessageQueues::get(&b).is_empty()); - assert!(!::DownwardMessageQueues::get(&c).is_empty()); + assert!(::DownwardMessageQueues::get(&a).is_empty()); + assert!(::DownwardMessageQueues::get(&b).is_empty()); + assert!(!::DownwardMessageQueues::get(&c).is_empty()); // verify that the outgoing paras are emptied. assert!(OutgoingParas::get().is_empty()) @@ -223,15 +310,15 @@ mod tests { let b = ParaId::from(228); new_test_ext(default_genesis_config()).execute_with(|| { - assert_eq!(Router::dmq_length(a), 0); - assert_eq!(Router::dmq_length(b), 0); + assert_eq!(Dmp::dmq_length(a), 0); + assert_eq!(Dmp::dmq_length(b), 0); queue_downward_message(a, vec![1, 2, 3]).unwrap(); - assert_eq!(Router::dmq_length(a), 1); - assert_eq!(Router::dmq_length(b), 0); - assert!(!Router::dmq_mqc_head(a).is_zero()); - assert!(Router::dmq_mqc_head(b).is_zero()); + assert_eq!(Dmp::dmq_length(a), 1); + assert_eq!(Dmp::dmq_length(b), 0); + assert!(!Dmp::dmq_mqc_head(a).is_zero()); + assert!(Dmp::dmq_mqc_head(b).is_zero()); }); } @@ -241,20 +328,20 @@ mod tests { new_test_ext(default_genesis_config()).execute_with(|| { // processed_downward_messages=0 is allowed when the DMQ is empty. - assert!(Router::check_processed_downward_messages(a, 0).is_ok()); + assert!(Dmp::check_processed_downward_messages(a, 0).is_ok()); queue_downward_message(a, vec![1, 2, 3]).unwrap(); queue_downward_message(a, vec![4, 5, 6]).unwrap(); queue_downward_message(a, vec![7, 8, 9]).unwrap(); // 0 doesn't pass if the DMQ has msgs. - assert!(!Router::check_processed_downward_messages(a, 0).is_ok()); + assert!(!Dmp::check_processed_downward_messages(a, 0).is_ok()); // a candidate can consume up to 3 messages - assert!(Router::check_processed_downward_messages(a, 1).is_ok()); - assert!(Router::check_processed_downward_messages(a, 2).is_ok()); - assert!(Router::check_processed_downward_messages(a, 3).is_ok()); + assert!(Dmp::check_processed_downward_messages(a, 1).is_ok()); + assert!(Dmp::check_processed_downward_messages(a, 2).is_ok()); + assert!(Dmp::check_processed_downward_messages(a, 3).is_ok()); // there is no 4 messages in the queue - assert!(!Router::check_processed_downward_messages(a, 4).is_ok()); + assert!(!Dmp::check_processed_downward_messages(a, 4).is_ok()); }); } @@ -263,19 +350,19 @@ mod tests { let a = ParaId::from(1312); new_test_ext(default_genesis_config()).execute_with(|| { - assert_eq!(Router::dmq_length(a), 0); + assert_eq!(Dmp::dmq_length(a), 0); queue_downward_message(a, vec![1, 2, 3]).unwrap(); queue_downward_message(a, vec![4, 5, 6]).unwrap(); queue_downward_message(a, vec![7, 8, 9]).unwrap(); - assert_eq!(Router::dmq_length(a), 3); + assert_eq!(Dmp::dmq_length(a), 3); // pruning 0 elements shouldn't change anything. - Router::prune_dmq(a, 0); - assert_eq!(Router::dmq_length(a), 3); + Dmp::prune_dmq(a, 0); + assert_eq!(Dmp::dmq_length(a), 3); - Router::prune_dmq(a, 2); - assert_eq!(Router::dmq_length(a), 1); + Dmp::prune_dmq(a, 2); + assert_eq!(Dmp::dmq_length(a), 1); }); } diff --git a/runtime/parachains/src/router/hrmp.rs b/runtime/parachains/src/hrmp.rs similarity index 75% rename from runtime/parachains/src/router/hrmp.rs rename to runtime/parachains/src/hrmp.rs index 3bdd895cea..af8ae8eb13 100644 --- a/runtime/parachains/src/router/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -14,19 +14,26 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use super::{dmp, Error as DispatchError, Module, Store, Trait}; use crate::{ + ensure_parachain, configuration::{self, HostConfiguration}, - paras, + initializer, paras, dmp, }; use codec::{Decode, Encode}; -use frame_support::{ensure, traits::Get, weights::Weight, StorageMap, StorageValue}; +use frame_support::{ + decl_storage, decl_module, decl_error, ensure, traits::Get, weights::Weight, StorageMap, + StorageValue, dispatch::DispatchResult, +}; use primitives::v1::{ Balance, Hash, HrmpChannelId, Id as ParaId, InboundHrmpMessage, OutboundHrmpMessage, SessionIndex, }; use sp_runtime::traits::{BlakeTwo256, Hash as HashT}; -use sp_std::{mem, fmt, collections::{btree_map::BTreeMap, btree_set::BTreeSet}, prelude::*}; +use sp_std::{ + mem, fmt, + collections::{btree_map::BTreeMap, btree_set::BTreeSet}, + prelude::*, +}; /// A description of a request to open an HRMP channel. #[derive(Encode, Decode)] @@ -135,8 +142,7 @@ where } => write!( fmt, "the HRMP watermark is not advanced relative to the last watermark ({:?} > {:?})", - new_watermark, - last_watermark, + new_watermark, last_watermark, ), AheadRelayParent { new_watermark, @@ -144,13 +150,12 @@ where } => write!( fmt, "the HRMP watermark is ahead the relay-parent ({:?} > {:?})", - new_watermark, - relay_chain_parent_number, + new_watermark, relay_chain_parent_number ), LandsOnBlockWithNoMessages { new_watermark } => write!( fmt, "the HRMP watermark ({:?}) doesn't land on a block with messages received", - new_watermark, + new_watermark ), } } @@ -163,8 +168,7 @@ impl fmt::Debug for OutboundHrmpAcceptanceErr { MoreMessagesThanPermitted { sent, permitted } => write!( fmt, "more HRMP messages than permitted by config ({} > {})", - sent, - permitted, + sent, permitted, ), NotSorted { idx } => write!( fmt, @@ -174,9 +178,7 @@ impl fmt::Debug for OutboundHrmpAcceptanceErr { NoSuchChannel { idx, channel_id } => write!( fmt, "the HRMP message at index {} is sent to a non existent channel {:?}->{:?}", - idx, - channel_id.sender, - channel_id.recipient, + idx, channel_id.sender, channel_id.recipient, ), MaxMessageSizeExceeded { idx, @@ -185,9 +187,7 @@ impl fmt::Debug for OutboundHrmpAcceptanceErr { } => write!( fmt, "the HRMP message at index {} exceeds the negotiated channel maximum message size ({} > {})", - idx, - msg_size, - max_size, + idx, msg_size, max_size, ), TotalSizeExceeded { idx, @@ -196,23 +196,205 @@ impl fmt::Debug for OutboundHrmpAcceptanceErr { } => write!( fmt, "sending the HRMP message at index {} would exceed the neogitiated channel total size ({} > {})", - idx, - total_size, - limit, + idx, total_size, limit, ), CapacityExceeded { idx, count, limit } => write!( fmt, "sending the HRMP message at index {} would exceed the neogitiated channel capacity ({} > {})", - idx, - count, - limit, + idx, count, limit, ), } } } +pub trait Trait: frame_system::Trait + configuration::Trait + paras::Trait + dmp::Trait { + type Origin: From + + From<::Origin> + + Into::Origin>>; +} + +decl_storage! { + trait Store for Module as Hrmp { + /// Paras that are to be cleaned up at the end of the session. + /// The entries are sorted ascending by the para id. + OutgoingParas: Vec; + + + /// The set of pending HRMP open channel requests. + /// + /// The set is accompanied by a list for iteration. + /// + /// Invariant: + /// - There are no channels that exists in list but not in the set and vice versa. + HrmpOpenChannelRequests: map hasher(twox_64_concat) HrmpChannelId => Option; + HrmpOpenChannelRequestsList: Vec; + + /// This mapping tracks how many open channel requests are inititated by a given sender para. + /// Invariant: `HrmpOpenChannelRequests` should contain the same number of items that has `(X, _)` + /// as the number of `HrmpOpenChannelRequestCount` for `X`. + HrmpOpenChannelRequestCount: map hasher(twox_64_concat) ParaId => u32; + /// This mapping tracks how many open channel requests were accepted by a given recipient para. + /// Invariant: `HrmpOpenChannelRequests` should contain the same number of items `(_, X)` with + /// `confirmed` set to true, as the number of `HrmpAcceptedChannelRequestCount` for `X`. + HrmpAcceptedChannelRequestCount: map hasher(twox_64_concat) ParaId => u32; + + /// A set of pending HRMP close channel requests that are going to be closed during the session change. + /// Used for checking if a given channel is registered for closure. + /// + /// The set is accompanied by a list for iteration. + /// + /// Invariant: + /// - There are no channels that exists in list but not in the set and vice versa. + HrmpCloseChannelRequests: map hasher(twox_64_concat) HrmpChannelId => Option<()>; + HrmpCloseChannelRequestsList: Vec; + + /// The HRMP watermark associated with each para. + /// Invariant: + /// - each para `P` used here as a key should satisfy `Paras::is_valid_para(P)` within a session. + HrmpWatermarks: map hasher(twox_64_concat) ParaId => Option; + /// HRMP channel data associated with each para. + /// Invariant: + /// - each participant in the channel should satisfy `Paras::is_valid_para(P)` within a session. + HrmpChannels: map hasher(twox_64_concat) HrmpChannelId => Option; + /// Ingress/egress indexes allow to find all the senders and receivers given the opposite + /// side. I.e. + /// + /// (a) ingress index allows to find all the senders for a given recipient. + /// (b) egress index allows to find all the recipients for a given sender. + /// + /// Invariants: + /// - for each ingress index entry for `P` each item `I` in the index should present in `HrmpChannels` + /// as `(I, P)`. + /// - for each egress index entry for `P` each item `E` in the index should present in `HrmpChannels` + /// as `(P, E)`. + /// - there should be no other dangling channels in `HrmpChannels`. + /// - the vectors are sorted. + HrmpIngressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; + HrmpEgressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; + /// Storage for the messages for each channel. + /// Invariant: cannot be non-empty if the corresponding channel in `HrmpChannels` is `None`. + HrmpChannelContents: map hasher(twox_64_concat) HrmpChannelId => Vec>; + /// Maintains a mapping that can be used to answer the question: + /// What paras sent a message at the given block number for a given reciever. + /// Invariants: + /// - The inner `Vec` is never empty. + /// - The inner `Vec` cannot store two same `ParaId`. + /// - The outer vector is sorted ascending by block number and cannot store two items with the same + /// block number. + HrmpChannelDigests: map hasher(twox_64_concat) ParaId => Vec<(T::BlockNumber, Vec)>; + } +} + +decl_error! { + pub enum Error for Module { + /// The sender tried to open a channel to themselves. + OpenHrmpChannelToSelf, + /// The recipient is not a valid para. + OpenHrmpChannelInvalidRecipient, + /// The requested capacity is zero. + OpenHrmpChannelZeroCapacity, + /// The requested capacity exceeds the global limit. + OpenHrmpChannelCapacityExceedsLimit, + /// The requested maximum message size is 0. + OpenHrmpChannelZeroMessageSize, + /// The open request requested the message size that exceeds the global limit. + OpenHrmpChannelMessageSizeExceedsLimit, + /// The channel already exists + OpenHrmpChannelAlreadyExists, + /// There is already a request to open the same channel. + OpenHrmpChannelAlreadyRequested, + /// The sender already has the maximum number of allowed outbound channels. + OpenHrmpChannelLimitExceeded, + /// The channel from the sender to the origin doesn't exist. + AcceptHrmpChannelDoesntExist, + /// The channel is already confirmed. + AcceptHrmpChannelAlreadyConfirmed, + /// The recipient already has the maximum number of allowed inbound channels. + AcceptHrmpChannelLimitExceeded, + /// The origin tries to close a channel where it is neither the sender nor the recipient. + CloseHrmpChannelUnauthorized, + /// The channel to be closed doesn't exist. + CloseHrmpChannelDoesntExist, + /// The channel close request is already requested. + CloseHrmpChannelAlreadyUnderway, + } +} + +decl_module! { + /// The HRMP module. + pub struct Module for enum Call where origin: ::Origin { + type Error = Error; + + #[weight = 0] + fn hrmp_init_open_channel( + origin, + recipient: ParaId, + proposed_max_capacity: u32, + proposed_max_message_size: u32, + ) -> DispatchResult { + let origin = ensure_parachain(::Origin::from(origin))?; + Self::init_open_channel( + origin, + recipient, + proposed_max_capacity, + proposed_max_message_size + )?; + Ok(()) + } + + #[weight = 0] + fn hrmp_accept_open_channel(origin, sender: ParaId) -> DispatchResult { + let origin = ensure_parachain(::Origin::from(origin))?; + Self::accept_open_channel(origin, sender)?; + Ok(()) + } + + #[weight = 0] + fn hrmp_close_channel(origin, channel_id: HrmpChannelId) -> DispatchResult { + let origin = ensure_parachain(::Origin::from(origin))?; + Self::close_channel(origin, channel_id)?; + Ok(()) + } + } +} + /// Routines and getters related to HRMP. impl Module { + /// Block initialization logic, called by initializer. + pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { + 0 + } + + /// Block finalization logic, called by initializer. + pub(crate) fn initializer_finalize() {} + + /// Called by the initializer to note that a new session has started. + pub(crate) fn initializer_on_new_session( + notification: &initializer::SessionChangeNotification, + ) { + Self::perform_outgoing_para_cleanup(); + Self::process_hrmp_open_channel_requests(¬ification.prev_config); + Self::process_hrmp_close_channel_requests(); + } + + /// Iterate over all paras that were registered for offboarding and remove all the data + /// associated with them. + fn perform_outgoing_para_cleanup() { + let outgoing = OutgoingParas::take(); + for outgoing_para in outgoing { + Self::clean_hrmp_after_outgoing(outgoing_para); + } + } + + /// Schedule a para to be cleaned up at the start of the next session. + pub(crate) fn schedule_para_cleanup(id: ParaId) { + OutgoingParas::mutate(|v| { + if let Err(i) = v.binary_search(&id) { + v.insert(i, id); + } + }); + } + /// Remove all storage entries associated with the given para. pub(super) fn clean_hrmp_after_outgoing(outgoing_para: ParaId) { ::HrmpOpenChannelRequestCount::remove(&outgoing_para); @@ -631,32 +813,29 @@ impl Module { recipient: ParaId, proposed_max_capacity: u32, proposed_max_message_size: u32, - ) -> Result<(), DispatchError> { - ensure!( - origin != recipient, - DispatchError::::OpenHrmpChannelToSelf - ); + ) -> Result<(), Error> { + ensure!(origin != recipient, Error::::OpenHrmpChannelToSelf); ensure!( >::is_valid_para(recipient), - DispatchError::::OpenHrmpChannelInvalidRecipient, + Error::::OpenHrmpChannelInvalidRecipient, ); let config = >::config(); ensure!( proposed_max_capacity > 0, - DispatchError::::OpenHrmpChannelZeroCapacity, + Error::::OpenHrmpChannelZeroCapacity, ); ensure!( proposed_max_capacity <= config.hrmp_channel_max_capacity, - DispatchError::::OpenHrmpChannelCapacityExceedsLimit, + Error::::OpenHrmpChannelCapacityExceedsLimit, ); ensure!( proposed_max_message_size > 0, - DispatchError::::OpenHrmpChannelZeroMessageSize, + Error::::OpenHrmpChannelZeroMessageSize, ); ensure!( proposed_max_message_size <= config.hrmp_channel_max_message_size, - DispatchError::::OpenHrmpChannelMessageSizeExceedsLimit, + Error::::OpenHrmpChannelMessageSizeExceedsLimit, ); let channel_id = HrmpChannelId { @@ -665,11 +844,11 @@ impl Module { }; ensure!( ::HrmpOpenChannelRequests::get(&channel_id).is_none(), - DispatchError::::OpenHrmpChannelAlreadyExists, + Error::::OpenHrmpChannelAlreadyExists, ); ensure!( ::HrmpChannels::get(&channel_id).is_none(), - DispatchError::::OpenHrmpChannelAlreadyRequested, + Error::::OpenHrmpChannelAlreadyRequested, ); let egress_cnt = @@ -682,7 +861,7 @@ impl Module { }; ensure!( egress_cnt + open_req_cnt < channel_num_limit, - DispatchError::::OpenHrmpChannelLimitExceeded, + Error::::OpenHrmpChannelLimitExceeded, ); // TODO: Deposit https://github.com/paritytech/polkadot/issues/1907 @@ -713,7 +892,7 @@ impl Module { .encode() }; if let Err(dmp::QueueDownwardMessageError::ExceedsMaxMessageSize) = - Self::queue_downward_message(&config, recipient, notification_bytes) + >::queue_downward_message(&config, recipient, notification_bytes) { // this should never happen unless the max downward message size is configured to an // jokingly small number. @@ -723,19 +902,16 @@ impl Module { Ok(()) } - pub(super) fn accept_open_channel( - origin: ParaId, - sender: ParaId, - ) -> Result<(), DispatchError> { + pub(super) fn accept_open_channel(origin: ParaId, sender: ParaId) -> Result<(), Error> { let channel_id = HrmpChannelId { sender, recipient: origin, }; let mut channel_req = ::HrmpOpenChannelRequests::get(&channel_id) - .ok_or(DispatchError::::AcceptHrmpChannelDoesntExist)?; + .ok_or(Error::::AcceptHrmpChannelDoesntExist)?; ensure!( !channel_req.confirmed, - DispatchError::::AcceptHrmpChannelAlreadyConfirmed, + Error::::AcceptHrmpChannelAlreadyConfirmed, ); // check if by accepting this open channel request, this parachain would exceed the @@ -751,7 +927,7 @@ impl Module { let accepted_cnt = ::HrmpAcceptedChannelRequestCount::get(&origin); ensure!( ingress_cnt + accepted_cnt < channel_num_limit, - DispatchError::::AcceptHrmpChannelLimitExceeded, + Error::::AcceptHrmpChannelLimitExceeded, ); // TODO: Deposit https://github.com/paritytech/polkadot/issues/1907 @@ -772,7 +948,7 @@ impl Module { .encode() }; if let Err(dmp::QueueDownwardMessageError::ExceedsMaxMessageSize) = - Self::queue_downward_message(&config, sender, notification_bytes) + >::queue_downward_message(&config, sender, notification_bytes) { // this should never happen unless the max downward message size is configured to an // jokingly small number. @@ -782,26 +958,23 @@ impl Module { Ok(()) } - pub(super) fn close_channel( - origin: ParaId, - channel_id: HrmpChannelId, - ) -> Result<(), DispatchError> { + pub(super) fn close_channel(origin: ParaId, channel_id: HrmpChannelId) -> Result<(), Error> { // check if the origin is allowed to close the channel. ensure!( origin == channel_id.sender || origin == channel_id.recipient, - DispatchError::::CloseHrmpChannelUnauthorized, + Error::::CloseHrmpChannelUnauthorized, ); // check if the channel requested to close does exist. ensure!( ::HrmpChannels::get(&channel_id).is_some(), - DispatchError::::CloseHrmpChannelDoesntExist, + Error::::CloseHrmpChannelDoesntExist, ); // check that there is no outstanding close request for this channel ensure!( ::HrmpCloseChannelRequests::get(&channel_id).is_none(), - DispatchError::::CloseHrmpChannelAlreadyUnderway, + Error::::CloseHrmpChannelAlreadyUnderway, ); ::HrmpCloseChannelRequests::insert(&channel_id, ()); @@ -825,7 +998,7 @@ impl Module { channel_id.sender }; if let Err(dmp::QueueDownwardMessageError::ExceedsMaxMessageSize) = - Self::queue_downward_message(&config, opposite_party, notification_bytes) + >::queue_downward_message(&config, opposite_party, notification_bytes) { // this should never happen unless the max downward message size is configured to an // jokingly small number. @@ -876,19 +1049,20 @@ impl Module { #[cfg(test)] mod tests { use super::*; - use crate::mock::{new_test_ext, Configuration, Paras, Router, System}; - use crate::router::tests::default_genesis_config; + use crate::mock::{ + new_test_ext, Configuration, Paras, Hrmp, System, GenesisConfig as MockGenesisConfig, + }; use primitives::v1::BlockNumber; use std::collections::{BTreeMap, HashSet}; - pub(crate) fn run_to_block(to: BlockNumber, new_session: Option>) { + fn run_to_block(to: BlockNumber, new_session: Option>) { use frame_support::traits::{OnFinalize as _, OnInitialize as _}; while System::block_number() < to { let b = System::block_number(); // NOTE: this is in reverse initialization order. - Router::initializer_finalize(); + Hrmp::initializer_finalize(); Paras::initializer_finalize(); System::on_finalize(b); @@ -899,12 +1073,12 @@ mod tests { if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { // NOTE: this is in initialization order. Paras::initializer_on_new_session(&Default::default()); - Router::initializer_on_new_session(&Default::default()); + Hrmp::initializer_on_new_session(&Default::default()); } // NOTE: this is in initialization order. Paras::initializer_initialize(b + 1); - Router::initializer_initialize(b + 1); + Hrmp::initializer_initialize(b + 1); } } @@ -951,6 +1125,18 @@ mod tests { } } + fn default_genesis_config() -> MockGenesisConfig { + MockGenesisConfig { + configuration: crate::configuration::GenesisConfig { + config: crate::configuration::HostConfiguration { + max_downward_message_size: 1024, + ..Default::default() + }, + }, + ..Default::default() + } + } + fn register_parachain(id: ParaId) { Paras::schedule_para_initialize( id, @@ -967,17 +1153,17 @@ mod tests { } fn channel_exists(sender: ParaId, recipient: ParaId) -> bool { - ::HrmpChannels::get(&HrmpChannelId { sender, recipient }).is_some() + ::HrmpChannels::get(&HrmpChannelId { sender, recipient }).is_some() } fn assert_storage_consistency_exhaustive() { use frame_support::IterableStorageMap; assert_eq!( - ::HrmpOpenChannelRequests::iter() + ::HrmpOpenChannelRequests::iter() .map(|(k, _)| k) .collect::>(), - ::HrmpOpenChannelRequestsList::get() + ::HrmpOpenChannelRequestsList::get() .into_iter() .collect::>(), ); @@ -987,17 +1173,17 @@ mod tests { // // having ensured that, we can go ahead and go over all counts and verify that they match. assert_eq!( - ::HrmpOpenChannelRequestCount::iter() + ::HrmpOpenChannelRequestCount::iter() .map(|(k, _)| k) .collect::>(), - ::HrmpOpenChannelRequests::iter() + ::HrmpOpenChannelRequests::iter() .map(|(k, _)| k.sender) .collect::>(), ); for (open_channel_initiator, expected_num) in - ::HrmpOpenChannelRequestCount::iter() + ::HrmpOpenChannelRequestCount::iter() { - let actual_num = ::HrmpOpenChannelRequests::iter() + let actual_num = ::HrmpOpenChannelRequests::iter() .filter(|(ch, _)| ch.sender == open_channel_initiator) .count() as u32; assert_eq!(expected_num, actual_num); @@ -1006,28 +1192,28 @@ mod tests { // The same as above, but for accepted channel request count. Note that we are interested // only in confirmed open requests. assert_eq!( - ::HrmpAcceptedChannelRequestCount::iter() + ::HrmpAcceptedChannelRequestCount::iter() .map(|(k, _)| k) .collect::>(), - ::HrmpOpenChannelRequests::iter() + ::HrmpOpenChannelRequests::iter() .filter(|(_, v)| v.confirmed) .map(|(k, _)| k.recipient) .collect::>(), ); for (channel_recipient, expected_num) in - ::HrmpAcceptedChannelRequestCount::iter() + ::HrmpAcceptedChannelRequestCount::iter() { - let actual_num = ::HrmpOpenChannelRequests::iter() + let actual_num = ::HrmpOpenChannelRequests::iter() .filter(|(ch, v)| ch.recipient == channel_recipient && v.confirmed) .count() as u32; assert_eq!(expected_num, actual_num); } assert_eq!( - ::HrmpCloseChannelRequests::iter() + ::HrmpCloseChannelRequests::iter() .map(|(k, _)| k) .collect::>(), - ::HrmpCloseChannelRequestsList::get() + ::HrmpCloseChannelRequestsList::get() .into_iter() .collect::>(), ); @@ -1035,14 +1221,14 @@ mod tests { // A HRMP watermark can be None for an onboarded parachain. However, an offboarded parachain // cannot have an HRMP watermark: it should've been cleanup. assert_contains_only_onboarded( - ::HrmpWatermarks::iter().map(|(k, _)| k), + ::HrmpWatermarks::iter().map(|(k, _)| k), "HRMP watermarks should contain only onboarded paras", ); // An entry in `HrmpChannels` indicates that the channel is open. Only open channels can // have contents. - for (non_empty_channel, contents) in ::HrmpChannelContents::iter() { - assert!(::HrmpChannels::contains_key( + for (non_empty_channel, contents) in ::HrmpChannelContents::iter() { + assert!(::HrmpChannels::contains_key( &non_empty_channel )); @@ -1054,7 +1240,7 @@ mod tests { // Senders and recipients must be onboarded. Otherwise, all channels associated with them // are removed. assert_contains_only_onboarded( - ::HrmpChannels::iter().flat_map(|(k, _)| vec![k.sender, k.recipient]), + ::HrmpChannels::iter().flat_map(|(k, _)| vec![k.sender, k.recipient]), "senders and recipients in all channels should be onboarded", ); @@ -1077,13 +1263,13 @@ mod tests { // (b, z) (b, z) // // and then that we compare that to the channel list in the `HrmpChannels`. - let channel_set_derived_from_ingress = ::HrmpIngressChannelsIndex::iter() + let channel_set_derived_from_ingress = ::HrmpIngressChannelsIndex::iter() .flat_map(|(p, v)| v.into_iter().map(|i| (i, p)).collect::>()) .collect::>(); - let channel_set_derived_from_egress = ::HrmpEgressChannelsIndex::iter() + let channel_set_derived_from_egress = ::HrmpEgressChannelsIndex::iter() .flat_map(|(p, v)| v.into_iter().map(|e| (p, e)).collect::>()) .collect::>(); - let channel_set_ground_truth = ::HrmpChannels::iter() + let channel_set_ground_truth = ::HrmpChannels::iter() .map(|(k, _)| (k.sender, k.recipient)) .collect::>(); assert_eq!( @@ -1092,18 +1278,18 @@ mod tests { ); assert_eq!(channel_set_derived_from_egress, channel_set_ground_truth); - ::HrmpIngressChannelsIndex::iter() + ::HrmpIngressChannelsIndex::iter() .map(|(_, v)| v) .for_each(|v| assert_is_sorted(&v, "HrmpIngressChannelsIndex")); - ::HrmpEgressChannelsIndex::iter() + ::HrmpEgressChannelsIndex::iter() .map(|(_, v)| v) .for_each(|v| assert_is_sorted(&v, "HrmpIngressChannelsIndex")); assert_contains_only_onboarded( - ::HrmpChannelDigests::iter().map(|(k, _)| k), + ::HrmpChannelDigests::iter().map(|(k, _)| k), "HRMP channel digests should contain only onboarded paras", ); - for (_digest_for_para, digest) in ::HrmpChannelDigests::iter() { + for (_digest_for_para, digest) in ::HrmpChannelDigests::iter() { // Assert that items are in **strictly** ascending order. The strictness also implies // there are no duplicates. assert!(digest.windows(2).all(|xs| xs[0].0 < xs[1].0)); @@ -1161,10 +1347,10 @@ mod tests { register_parachain(para_b); run_to_block(5, Some(vec![5])); - Router::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); assert_storage_consistency_exhaustive(); - Router::accept_open_channel(para_b, para_a).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); assert_storage_consistency_exhaustive(); // Advance to a block 6, but without session change. That means that the channel has @@ -1189,15 +1375,15 @@ mod tests { register_parachain(para_b); run_to_block(5, Some(vec![5])); - Router::init_open_channel(para_a, para_b, 2, 8).unwrap(); - Router::accept_open_channel(para_b, para_a).unwrap(); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); run_to_block(6, Some(vec![6])); assert!(channel_exists(para_a, para_b)); // Close the channel. The effect is not immediate, but rather deferred to the next // session change. - Router::close_channel( + Hrmp::close_channel( para_b, HrmpChannelId { sender: para_a, @@ -1228,8 +1414,8 @@ mod tests { register_parachain(para_b); run_to_block(5, Some(vec![5])); - Router::init_open_channel(para_a, para_b, 2, 20).unwrap(); - Router::accept_open_channel(para_b, para_a).unwrap(); + Hrmp::init_open_channel(para_a, para_b, 2, 20).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); // On Block 6: // A sends a message to B @@ -1240,15 +1426,15 @@ mod tests { data: b"this is an emergency".to_vec(), }]; let config = Configuration::config(); - assert!(Router::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); - let _ = Router::queue_outbound_hrmp(para_a, msgs); + assert!(Hrmp::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); + let _ = Hrmp::queue_outbound_hrmp(para_a, msgs); assert_storage_consistency_exhaustive(); // On Block 7: // B receives the message sent by A. B sets the watermark to 6. run_to_block(7, None); - assert!(Router::check_hrmp_watermark(para_b, 7, 6).is_ok()); - let _ = Router::prune_hrmp(para_b, 6); + assert!(Hrmp::check_hrmp_watermark(para_b, 7, 6).is_ok()); + let _ = Hrmp::prune_hrmp(para_b, 6); assert_storage_consistency_exhaustive(); }); } @@ -1263,8 +1449,8 @@ mod tests { register_parachain(para_b); run_to_block(5, Some(vec![5])); - Router::init_open_channel(para_a, para_b, 2, 8).unwrap(); - Router::accept_open_channel(para_b, para_a).unwrap(); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); deregister_parachain(para_a); // On Block 6: session change. The channel should not be created. @@ -1290,10 +1476,10 @@ mod tests { // Open two channels to the same receiver, b: // a -> b, c -> b - Router::init_open_channel(para_a, para_b, 2, 8).unwrap(); - Router::accept_open_channel(para_b, para_a).unwrap(); - Router::init_open_channel(para_c, para_b, 2, 8).unwrap(); - Router::accept_open_channel(para_b, para_c).unwrap(); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); + Hrmp::init_open_channel(para_c, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_c).unwrap(); // On Block 6: session change. run_to_block(6, Some(vec![6])); @@ -1304,12 +1490,12 @@ mod tests { data: b"knock".to_vec(), }]; let config = Configuration::config(); - assert!(Router::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); - let _ = Router::queue_outbound_hrmp(para_a, msgs.clone()); + assert!(Hrmp::check_outbound_hrmp(&config, para_a, &msgs).is_ok()); + let _ = Hrmp::queue_outbound_hrmp(para_a, msgs.clone()); // Verify that the sent messages are there and that also the empty channels are present. - let mqc_heads = Router::hrmp_mqc_heads(para_b); - let contents = Router::inbound_hrmp_channels_contents(para_b); + let mqc_heads = Hrmp::hrmp_mqc_heads(para_b); + let contents = Hrmp::inbound_hrmp_channels_contents(para_b); assert_eq!( contents, vec![ diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 572a426e3a..1509b88408 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -36,7 +36,7 @@ use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec}; use sp_staking::SessionIndex; use sp_runtime::{DispatchError, traits::{One, Saturating}}; -use crate::{configuration, paras, router, scheduler::CoreAssignment}; +use crate::{configuration, paras, dmp, ump, hrmp, scheduler::CoreAssignment}; /// A bitfield signed by a validator indicating that it is keeping its piece of the erasure-coding /// for any backed candidates referred to by a `1` bit available. @@ -86,7 +86,12 @@ impl CandidatePendingAvailability { } pub trait Trait: - frame_system::Trait + paras::Trait + router::Trait + configuration::Trait + frame_system::Trait + + paras::Trait + + dmp::Trait + + ump::Trait + + hrmp::Trait + + configuration::Trait { type Event: From> + Into<::Event>; } @@ -600,19 +605,19 @@ impl Module { } // enact the messaging facet of the candidate. - weight += >::prune_dmq( + weight += >::prune_dmq( receipt.descriptor.para_id, commitments.processed_downward_messages, ); - weight += >::enact_upward_messages( + weight += >::enact_upward_messages( receipt.descriptor.para_id, commitments.upward_messages, ); - weight += >::prune_hrmp( + weight += >::prune_hrmp( receipt.descriptor.para_id, T::BlockNumber::from(commitments.hrmp_watermark), ); - weight += >::queue_outbound_hrmp( + weight += >::queue_outbound_hrmp( receipt.descriptor.para_id, commitments.horizontal_messages, ); @@ -719,10 +724,10 @@ enum AcceptanceCheckErr { HeadDataTooLarge, PrematureCodeUpgrade, NewCodeTooLarge, - ProcessedDownwardMessages(router::ProcessedDownwardMessagesAcceptanceErr), - UpwardMessages(router::UpwardMessagesAcceptanceCheckErr), - HrmpWatermark(router::HrmpWatermarkAcceptanceErr), - OutboundHrmp(router::OutboundHrmpAcceptanceErr), + ProcessedDownwardMessages(dmp::ProcessedDownwardMessagesAcceptanceErr), + UpwardMessages(ump::AcceptanceCheckErr), + HrmpWatermark(hrmp::HrmpWatermarkAcceptanceErr), + OutboundHrmp(hrmp::OutboundHrmpAcceptanceErr), } impl AcceptanceCheckErr { @@ -795,17 +800,17 @@ impl CandidateCheckContext { } // check if the candidate passes the messaging acceptance criteria - >::check_processed_downward_messages( + >::check_processed_downward_messages( para_id, processed_downward_messages, )?; - >::check_upward_messages(&self.config, para_id, upward_messages)?; - >::check_hrmp_watermark( + >::check_upward_messages(&self.config, para_id, upward_messages)?; + >::check_hrmp_watermark( para_id, self.relay_parent_number, hrmp_watermark, )?; - >::check_outbound_hrmp(&self.config, para_id, horizontal_messages)?; + >::check_outbound_hrmp(&self.config, para_id, horizontal_messages)?; Ok(()) } diff --git a/runtime/parachains/src/inclusion_inherent.rs b/runtime/parachains/src/inclusion_inherent.rs index 14f63c9dbb..b6cbf94133 100644 --- a/runtime/parachains/src/inclusion_inherent.rs +++ b/runtime/parachains/src/inclusion_inherent.rs @@ -35,7 +35,7 @@ use frame_system::ensure_none; use crate::{ inclusion, scheduler::{self, FreedReason}, - router, + ump, }; use inherents::{InherentIdentifier, InherentData, MakeFatalError, ProvideInherent}; @@ -117,7 +117,7 @@ decl_module! { >::occupied(&occupied); // Give some time slice to dispatch pending upward messages. - >::process_pending_upward_messages(); + >::process_pending_upward_messages(); // And track that we've finished processing the inherent for this block. Included::set(Some(())); diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index 8e2e88ff59..d32b8dd0eb 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -29,7 +29,7 @@ use sp_runtime::traits::One; use codec::{Encode, Decode}; use crate::{ configuration::{self, HostConfiguration}, - paras, router, scheduler, inclusion, + paras, scheduler, inclusion, dmp, ump, hrmp, }; /// Information about a session change that has just occurred. @@ -63,7 +63,9 @@ pub trait Trait: + paras::Trait + scheduler::Trait + inclusion::Trait - + router::Trait + + dmp::Trait + + ump::Trait + + hrmp::Trait { /// A randomness beacon. type Randomness: Randomness; @@ -122,12 +124,16 @@ decl_module! { // - Scheduler // - Inclusion // - Validity - // - Router + // - DMP + // - UMP + // - HRMP let total_weight = configuration::Module::::initializer_initialize(now) + paras::Module::::initializer_initialize(now) + scheduler::Module::::initializer_initialize(now) + inclusion::Module::::initializer_initialize(now) + - router::Module::::initializer_initialize(now); + dmp::Module::::initializer_initialize(now) + + ump::Module::::initializer_initialize(now) + + hrmp::Module::::initializer_initialize(now); HasInitialized::set(Some(())); @@ -137,7 +143,9 @@ decl_module! { fn on_finalize() { // reverse initialization order. - router::Module::::initializer_finalize(); + hrmp::Module::::initializer_finalize(); + ump::Module::::initializer_finalize(); + dmp::Module::::initializer_finalize(); inclusion::Module::::initializer_finalize(); scheduler::Module::::initializer_finalize(); paras::Module::::initializer_finalize(); @@ -181,7 +189,9 @@ impl Module { paras::Module::::initializer_on_new_session(¬ification); scheduler::Module::::initializer_on_new_session(¬ification); inclusion::Module::::initializer_on_new_session(¬ification); - router::Module::::initializer_on_new_session(¬ification); + dmp::Module::::initializer_on_new_session(¬ification); + ump::Module::::initializer_on_new_session(¬ification); + hrmp::Module::::initializer_on_new_session(¬ification); } /// Should be called when a new session occurs. Buffers the session notification to be applied diff --git a/runtime/parachains/src/lib.rs b/runtime/parachains/src/lib.rs index 833ff6ae47..3691b41c36 100644 --- a/runtime/parachains/src/lib.rs +++ b/runtime/parachains/src/lib.rs @@ -27,10 +27,12 @@ pub mod inclusion; pub mod inclusion_inherent; pub mod initializer; pub mod paras; -pub mod router; pub mod scheduler; pub mod validity; pub mod origin; +pub mod dmp; +pub mod ump; +pub mod hrmp; pub mod runtime_api_impl; @@ -40,3 +42,25 @@ mod util; mod mock; pub use origin::{Origin, ensure_parachain}; + +/// Schedule a para to be initialized at the start of the next session with the given genesis data. +pub fn schedule_para_initialize( + id: primitives::v1::Id, + genesis: paras::ParaGenesisArgs, +) { + >::schedule_para_initialize(id, genesis); +} + +/// Schedule a para to be cleaned up at the start of the next session. +pub fn schedule_para_cleanup(id: primitives::v1::Id) +where + T: paras::Trait + + dmp::Trait + + ump::Trait + + hrmp::Trait, +{ + >::schedule_para_cleanup(id); + >::schedule_para_cleanup(id); + >::schedule_para_cleanup(id); + >::schedule_para_cleanup(id); +} diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 3da3a64481..edb84e2a12 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -108,9 +108,14 @@ impl crate::paras::Trait for Test { type Origin = Origin; } -impl crate::router::Trait for Test { +impl crate::dmp::Trait for Test { } + +impl crate::ump::Trait for Test { + type UmpSink = crate::ump::mock_sink::MockUmpSink; +} + +impl crate::hrmp::Trait for Test { type Origin = Origin; - type UmpSink = crate::router::MockUmpSink; } impl crate::scheduler::Trait for Test { } @@ -130,8 +135,14 @@ pub type Configuration = crate::configuration::Module; /// Mocked paras. pub type Paras = crate::paras::Module; -/// Mocked router. -pub type Router = crate::router::Module; +/// Mocked DMP +pub type Dmp = crate::dmp::Module; + +/// Mocked UMP +pub type Ump = crate::ump::Module; + +/// Mocked HRMP +pub type Hrmp = crate::hrmp::Module; /// Mocked scheduler. pub type Scheduler = crate::scheduler::Module; diff --git a/runtime/parachains/src/paras.rs b/runtime/parachains/src/paras.rs index 84bdf6cf73..ab811f0f7d 100644 --- a/runtime/parachains/src/paras.rs +++ b/runtime/parachains/src/paras.rs @@ -396,7 +396,7 @@ impl Module { } /// Schedule a para to be initialized at the start of the next session. - pub fn schedule_para_initialize(id: ParaId, genesis: ParaGenesisArgs) -> Weight { + pub(crate) fn schedule_para_initialize(id: ParaId, genesis: ParaGenesisArgs) -> Weight { let dup = UpcomingParas::mutate(|v| { match v.binary_search(&id) { Ok(_) => true, @@ -418,7 +418,7 @@ impl Module { } /// Schedule a para to be cleaned up at the start of the next session. - pub fn schedule_para_cleanup(id: ParaId) -> Weight { + pub(crate) fn schedule_para_cleanup(id: ParaId) -> Weight { let upcoming_weight = UpcomingParas::mutate(|v| { match v.binary_search(&id) { Ok(i) => { diff --git a/runtime/parachains/src/router.rs b/runtime/parachains/src/router.rs deleted file mode 100644 index eefc6900b8..0000000000 --- a/runtime/parachains/src/router.rs +++ /dev/null @@ -1,331 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Polkadot. If not, see . - -//! The router module is responsible for handling messaging. -//! -//! The core of the messaging is checking and processing messages sent out by the candidates, -//! routing the messages at their destinations and informing the parachains about the incoming -//! messages. - -use crate::{configuration, paras, initializer, ensure_parachain}; -use sp_std::prelude::*; -use frame_support::{decl_error, decl_module, decl_storage, dispatch::DispatchResult, weights::Weight}; -use sp_std::collections::vec_deque::VecDeque; -use primitives::v1::{ - Id as ParaId, InboundDownwardMessage, Hash, UpwardMessage, HrmpChannelId, InboundHrmpMessage, -}; - -mod dmp; -mod hrmp; -mod ump; - -use hrmp::{HrmpOpenChannelRequest, HrmpChannel}; -pub use dmp::{QueueDownwardMessageError, ProcessedDownwardMessagesAcceptanceErr}; -pub use ump::{UmpSink, AcceptanceCheckErr as UpwardMessagesAcceptanceCheckErr}; -pub use hrmp::{HrmpWatermarkAcceptanceErr, OutboundHrmpAcceptanceErr}; - -#[cfg(test)] -pub use ump::mock_sink::MockUmpSink; - -pub trait Trait: frame_system::Trait + configuration::Trait + paras::Trait { - type Origin: From - + From<::Origin> - + Into::Origin>>; - - /// A place where all received upward messages are funneled. - type UmpSink: UmpSink; -} - -decl_storage! { - trait Store for Module as Router { - /// Paras that are to be cleaned up at the end of the session. - /// The entries are sorted ascending by the para id. - OutgoingParas: Vec; - - /* - * Downward Message Passing (DMP) - * - * Storage layout required for implementation of DMP. - */ - - /// The downward messages addressed for a certain para. - DownwardMessageQueues: map hasher(twox_64_concat) ParaId => Vec>; - /// A mapping that stores the downward message queue MQC head for each para. - /// - /// Each link in this chain has a form: - /// `(prev_head, B, H(M))`, where - /// - `prev_head`: is the previous head hash or zero if none. - /// - `B`: is the relay-chain block number in which a message was appended. - /// - `H(M)`: is the hash of the message being appended. - DownwardMessageQueueHeads: map hasher(twox_64_concat) ParaId => Hash; - - /* - * Upward Message Passing (UMP) - * - * Storage layout required for UMP, specifically dispatchable upward messages. - */ - - /// The messages waiting to be handled by the relay-chain originating from a certain parachain. - /// - /// Note that some upward messages might have been already processed by the inclusion logic. E.g. - /// channel management messages. - /// - /// The messages are processed in FIFO order. - RelayDispatchQueues: map hasher(twox_64_concat) ParaId => VecDeque; - /// Size of the dispatch queues. Caches sizes of the queues in `RelayDispatchQueue`. - /// - /// First item in the tuple is the count of messages and second - /// is the total length (in bytes) of the message payloads. - /// - /// Note that this is an auxilary mapping: it's possible to tell the byte size and the number of - /// messages only looking at `RelayDispatchQueues`. This mapping is separate to avoid the cost of - /// loading the whole message queue if only the total size and count are required. - /// - /// Invariant: - /// - The set of keys should exactly match the set of keys of `RelayDispatchQueues`. - RelayDispatchQueueSize: map hasher(twox_64_concat) ParaId => (u32, u32); - /// The ordered list of `ParaId`s that have a `RelayDispatchQueue` entry. - /// - /// Invariant: - /// - The set of items from this vector should be exactly the set of the keys in - /// `RelayDispatchQueues` and `RelayDispatchQueueSize`. - NeedsDispatch: Vec; - /// This is the para that gets will get dispatched first during the next upward dispatchable queue - /// execution round. - /// - /// Invariant: - /// - If `Some(para)`, then `para` must be present in `NeedsDispatch`. - NextDispatchRoundStartWith: Option; - - /* - * Horizontally Relay-routed Message Passing (HRMP) - * - * HRMP related storage layout - */ - - /// The set of pending HRMP open channel requests. - /// - /// The set is accompanied by a list for iteration. - /// - /// Invariant: - /// - There are no channels that exists in list but not in the set and vice versa. - HrmpOpenChannelRequests: map hasher(twox_64_concat) HrmpChannelId => Option; - HrmpOpenChannelRequestsList: Vec; - - /// This mapping tracks how many open channel requests are inititated by a given sender para. - /// Invariant: `HrmpOpenChannelRequests` should contain the same number of items that has `(X, _)` - /// as the number of `HrmpOpenChannelRequestCount` for `X`. - HrmpOpenChannelRequestCount: map hasher(twox_64_concat) ParaId => u32; - /// This mapping tracks how many open channel requests were accepted by a given recipient para. - /// Invariant: `HrmpOpenChannelRequests` should contain the same number of items `(_, X)` with - /// `confirmed` set to true, as the number of `HrmpAcceptedChannelRequestCount` for `X`. - HrmpAcceptedChannelRequestCount: map hasher(twox_64_concat) ParaId => u32; - - /// A set of pending HRMP close channel requests that are going to be closed during the session change. - /// Used for checking if a given channel is registered for closure. - /// - /// The set is accompanied by a list for iteration. - /// - /// Invariant: - /// - There are no channels that exists in list but not in the set and vice versa. - HrmpCloseChannelRequests: map hasher(twox_64_concat) HrmpChannelId => Option<()>; - HrmpCloseChannelRequestsList: Vec; - - /// The HRMP watermark associated with each para. - /// Invariant: - /// - each para `P` used here as a key should satisfy `Paras::is_valid_para(P)` within a session. - HrmpWatermarks: map hasher(twox_64_concat) ParaId => Option; - /// HRMP channel data associated with each para. - /// Invariant: - /// - each participant in the channel should satisfy `Paras::is_valid_para(P)` within a session. - HrmpChannels: map hasher(twox_64_concat) HrmpChannelId => Option; - /// Ingress/egress indexes allow to find all the senders and receivers given the opposite - /// side. I.e. - /// - /// (a) ingress index allows to find all the senders for a given recipient. - /// (b) egress index allows to find all the recipients for a given sender. - /// - /// Invariants: - /// - for each ingress index entry for `P` each item `I` in the index should present in `HrmpChannels` - /// as `(I, P)`. - /// - for each egress index entry for `P` each item `E` in the index should present in `HrmpChannels` - /// as `(P, E)`. - /// - there should be no other dangling channels in `HrmpChannels`. - /// - the vectors are sorted. - HrmpIngressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; - HrmpEgressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; - /// Storage for the messages for each channel. - /// Invariant: cannot be non-empty if the corresponding channel in `HrmpChannels` is `None`. - HrmpChannelContents: map hasher(twox_64_concat) HrmpChannelId => Vec>; - /// Maintains a mapping that can be used to answer the question: - /// What paras sent a message at the given block number for a given reciever. - /// Invariants: - /// - The inner `Vec` is never empty. - /// - The inner `Vec` cannot store two same `ParaId`. - /// - The outer vector is sorted ascending by block number and cannot store two items with the same - /// block number. - HrmpChannelDigests: map hasher(twox_64_concat) ParaId => Vec<(T::BlockNumber, Vec)>; - } -} - -decl_error! { - pub enum Error for Module { - /// The sender tried to open a channel to themselves. - OpenHrmpChannelToSelf, - /// The recipient is not a valid para. - OpenHrmpChannelInvalidRecipient, - /// The requested capacity is zero. - OpenHrmpChannelZeroCapacity, - /// The requested capacity exceeds the global limit. - OpenHrmpChannelCapacityExceedsLimit, - /// The requested maximum message size is 0. - OpenHrmpChannelZeroMessageSize, - /// The open request requested the message size that exceeds the global limit. - OpenHrmpChannelMessageSizeExceedsLimit, - /// The channel already exists - OpenHrmpChannelAlreadyExists, - /// There is already a request to open the same channel. - OpenHrmpChannelAlreadyRequested, - /// The sender already has the maximum number of allowed outbound channels. - OpenHrmpChannelLimitExceeded, - /// The channel from the sender to the origin doesn't exist. - AcceptHrmpChannelDoesntExist, - /// The channel is already confirmed. - AcceptHrmpChannelAlreadyConfirmed, - /// The recipient already has the maximum number of allowed inbound channels. - AcceptHrmpChannelLimitExceeded, - /// The origin tries to close a channel where it is neither the sender nor the recipient. - CloseHrmpChannelUnauthorized, - /// The channel to be closed doesn't exist. - CloseHrmpChannelDoesntExist, - /// The channel close request is already requested. - CloseHrmpChannelAlreadyUnderway, - } -} - -decl_module! { - /// The router module. - pub struct Module for enum Call where origin: ::Origin { - type Error = Error; - - #[weight = 0] - fn hrmp_init_open_channel( - origin, - recipient: ParaId, - proposed_max_capacity: u32, - proposed_max_message_size: u32, - ) -> DispatchResult { - let origin = ensure_parachain(::Origin::from(origin))?; - Self::init_open_channel( - origin, - recipient, - proposed_max_capacity, - proposed_max_message_size - )?; - Ok(()) - } - - #[weight = 0] - fn hrmp_accept_open_channel(origin, sender: ParaId) -> DispatchResult { - let origin = ensure_parachain(::Origin::from(origin))?; - Self::accept_open_channel(origin, sender)?; - Ok(()) - } - - #[weight = 0] - fn hrmp_close_channel(origin, channel_id: HrmpChannelId) -> DispatchResult { - let origin = ensure_parachain(::Origin::from(origin))?; - Self::close_channel(origin, channel_id)?; - Ok(()) - } - } -} - -impl Module { - /// Block initialization logic, called by initializer. - pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { - 0 - } - - /// Block finalization logic, called by initializer. - pub(crate) fn initializer_finalize() {} - - /// Called by the initializer to note that a new session has started. - pub(crate) fn initializer_on_new_session( - notification: &initializer::SessionChangeNotification, - ) { - Self::perform_outgoing_para_cleanup(); - Self::process_hrmp_open_channel_requests(¬ification.prev_config); - Self::process_hrmp_close_channel_requests(); - } - - /// Iterate over all paras that were registered for offboarding and remove all the data - /// associated with them. - fn perform_outgoing_para_cleanup() { - let outgoing = OutgoingParas::take(); - for outgoing_para in outgoing { - Self::clean_dmp_after_outgoing(outgoing_para); - Self::clean_ump_after_outgoing(outgoing_para); - Self::clean_hrmp_after_outgoing(outgoing_para); - } - } - - /// Schedule a para to be cleaned up at the start of the next session. - pub fn schedule_para_cleanup(id: ParaId) { - OutgoingParas::mutate(|v| { - if let Err(i) = v.binary_search(&id) { - v.insert(i, id); - } - }); - } -} - -#[cfg(test)] -mod tests { - use super::*; - use primitives::v1::BlockNumber; - use frame_support::traits::{OnFinalize, OnInitialize}; - - use crate::mock::{System, Router, GenesisConfig as MockGenesisConfig}; - - pub(crate) fn run_to_block(to: BlockNumber, new_session: Option>) { - while System::block_number() < to { - let b = System::block_number(); - Router::initializer_finalize(); - System::on_finalize(b); - - System::on_initialize(b + 1); - System::set_block_number(b + 1); - - if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { - Router::initializer_on_new_session(&Default::default()); - } - Router::initializer_initialize(b + 1); - } - } - - pub(crate) fn default_genesis_config() -> MockGenesisConfig { - MockGenesisConfig { - configuration: crate::configuration::GenesisConfig { - config: crate::configuration::HostConfiguration { - max_downward_message_size: 1024, - ..Default::default() - }, - }, - ..Default::default() - } - } -} diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index 48e21bf2bf..2f49f4af8c 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -28,7 +28,7 @@ use primitives::v1::{ }; use sp_runtime::traits::Zero; use frame_support::debug; -use crate::{initializer, inclusion, scheduler, configuration, paras, router}; +use crate::{initializer, inclusion, scheduler, configuration, paras, dmp, hrmp}; /// Implementation for the `validators` function of the runtime API. pub fn validators() -> Vec { @@ -310,15 +310,15 @@ where } /// Implementation for the `dmq_contents` function of the runtime API. -pub fn dmq_contents( +pub fn dmq_contents( recipient: ParaId, ) -> Vec> { - >::dmq_contents(recipient) + >::dmq_contents(recipient) } /// Implementation for the `inbound_hrmp_channels_contents` function of the runtime API. -pub fn inbound_hrmp_channels_contents( +pub fn inbound_hrmp_channels_contents( recipient: ParaId, ) -> BTreeMap>> { - >::inbound_hrmp_channels_contents(recipient) + >::inbound_hrmp_channels_contents(recipient) } diff --git a/runtime/parachains/src/router/ump.rs b/runtime/parachains/src/ump.rs similarity index 81% rename from runtime/parachains/src/router/ump.rs rename to runtime/parachains/src/ump.rs index 2bfdafbb6c..03d52ebb2c 100644 --- a/runtime/parachains/src/router/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -14,11 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use super::{Trait, Module, Store}; -use crate::configuration::{self, HostConfiguration}; +use crate::{ + configuration::{self, HostConfiguration}, + initializer, +}; use sp_std::{fmt, prelude::*}; use sp_std::collections::{btree_map::BTreeMap, vec_deque::VecDeque}; -use frame_support::{StorageMap, StorageValue, weights::Weight, traits::Get}; +use frame_support::{decl_module, decl_storage, StorageMap, StorageValue, weights::Weight, traits::Get}; use primitives::v1::{Id as ParaId, UpwardMessage}; /// All upward messages coming from parachains will be funneled into an implementation of this trait. @@ -78,8 +80,7 @@ impl fmt::Debug for AcceptanceCheckErr { AcceptanceCheckErr::MoreMessagesThanPermitted { sent, permitted } => write!( fmt, "more upward messages than permitted by config ({} > {})", - sent, - permitted, + sent, permitted, ), AcceptanceCheckErr::MessageSize { idx, @@ -88,29 +89,109 @@ impl fmt::Debug for AcceptanceCheckErr { } => write!( fmt, "upward message idx {} larger than permitted by config ({} > {})", - idx, - msg_size, - max_size, + idx, msg_size, max_size, ), AcceptanceCheckErr::CapacityExceeded { count, limit } => write!( fmt, "the ump queue would have more items than permitted by config ({} > {})", - count, - limit, + count, limit, ), AcceptanceCheckErr::TotalSizeExceeded { total_size, limit } => write!( fmt, "the ump queue would have grown past the max size permitted by config ({} > {})", - total_size, - limit, + total_size, limit, ), } } } +pub trait Trait: frame_system::Trait + configuration::Trait { + /// A place where all received upward messages are funneled. + type UmpSink: UmpSink; +} + +decl_storage! { + trait Store for Module as Ump { + /// Paras that are to be cleaned up at the end of the session. + /// The entries are sorted ascending by the para id. + OutgoingParas: Vec; + + /// The messages waiting to be handled by the relay-chain originating from a certain parachain. + /// + /// Note that some upward messages might have been already processed by the inclusion logic. E.g. + /// channel management messages. + /// + /// The messages are processed in FIFO order. + RelayDispatchQueues: map hasher(twox_64_concat) ParaId => VecDeque; + /// Size of the dispatch queues. Caches sizes of the queues in `RelayDispatchQueue`. + /// + /// First item in the tuple is the count of messages and second + /// is the total length (in bytes) of the message payloads. + /// + /// Note that this is an auxilary mapping: it's possible to tell the byte size and the number of + /// messages only looking at `RelayDispatchQueues`. This mapping is separate to avoid the cost of + /// loading the whole message queue if only the total size and count are required. + /// + /// Invariant: + /// - The set of keys should exactly match the set of keys of `RelayDispatchQueues`. + RelayDispatchQueueSize: map hasher(twox_64_concat) ParaId => (u32, u32); + /// The ordered list of `ParaId`s that have a `RelayDispatchQueue` entry. + /// + /// Invariant: + /// - The set of items from this vector should be exactly the set of the keys in + /// `RelayDispatchQueues` and `RelayDispatchQueueSize`. + NeedsDispatch: Vec; + /// This is the para that gets will get dispatched first during the next upward dispatchable queue + /// execution round. + /// + /// Invariant: + /// - If `Some(para)`, then `para` must be present in `NeedsDispatch`. + NextDispatchRoundStartWith: Option; + } +} + +decl_module! { + /// The UMP module. + pub struct Module for enum Call where origin: ::Origin { + } +} + /// Routines related to the upward message passing. impl Module { - pub(super) fn clean_ump_after_outgoing(outgoing_para: ParaId) { + /// Block initialization logic, called by initializer. + pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { + 0 + } + + /// Block finalization logic, called by initializer. + pub(crate) fn initializer_finalize() {} + + /// Called by the initializer to note that a new session has started. + pub(crate) fn initializer_on_new_session( + _notification: &initializer::SessionChangeNotification, + ) { + Self::perform_outgoing_para_cleanup(); + } + + /// Iterate over all paras that were registered for offboarding and remove all the data + /// associated with them. + fn perform_outgoing_para_cleanup() { + let outgoing = OutgoingParas::take(); + for outgoing_para in outgoing { + Self::clean_ump_after_outgoing(outgoing_para); + } + } + + /// Schedule a para to be cleaned up at the start of the next session. + pub(crate) fn schedule_para_cleanup(id: ParaId) { + OutgoingParas::mutate(|v| { + if let Err(i) = v.binary_search(&id) { + v.insert(i, id); + } + }); + } + + fn clean_ump_after_outgoing(outgoing_para: ParaId) { ::RelayDispatchQueueSize::remove(&outgoing_para); ::RelayDispatchQueues::remove(&outgoing_para); @@ -193,13 +274,10 @@ impl Module { v.extend(upward_messages.into_iter()) }); - ::RelayDispatchQueueSize::mutate( - ¶, - |(ref mut cnt, ref mut size)| { - *cnt += extra_cnt; - *size += extra_size; - }, - ); + ::RelayDispatchQueueSize::mutate(¶, |(ref mut cnt, ref mut size)| { + *cnt += extra_cnt; + *size += extra_size; + }); ::NeedsDispatch::mutate(|v| { if let Err(i) = v.binary_search(¶) { @@ -545,8 +623,7 @@ pub(crate) mod mock_sink { mod tests { use super::*; use super::mock_sink::Probe; - use crate::router::tests::default_genesis_config; - use crate::mock::{Configuration, Router, new_test_ext}; + use crate::mock::{Configuration, Ump, new_test_ext, GenesisConfig as MockGenesisConfig}; use frame_support::IterableStorageMap; use std::collections::HashSet; @@ -585,22 +662,33 @@ mod tests { } } + fn default_genesis_config() -> MockGenesisConfig { + MockGenesisConfig { + configuration: crate::configuration::GenesisConfig { + config: crate::configuration::HostConfiguration { + max_downward_message_size: 1024, + ..Default::default() + }, + }, + ..Default::default() + } + } + fn queue_upward_msg(para: ParaId, msg: UpwardMessage) { let msgs = vec![msg]; - assert!(Router::check_upward_messages(&Configuration::config(), para, &msgs).is_ok()); - let _ = Router::enact_upward_messages(para, msgs); + assert!(Ump::check_upward_messages(&Configuration::config(), para, &msgs).is_ok()); + let _ = Ump::enact_upward_messages(para, msgs); } fn assert_storage_consistency_exhaustive() { // check that empty queues don't clutter the storage. - for (_para, queue) in ::RelayDispatchQueues::iter() { + for (_para, queue) in ::RelayDispatchQueues::iter() { assert!(!queue.is_empty()); } // actually count the counts and sizes in queues and compare them to the bookkeeped version. - for (para, queue) in ::RelayDispatchQueues::iter() { - let (expected_count, expected_size) = - ::RelayDispatchQueueSize::get(para); + for (para, queue) in ::RelayDispatchQueues::iter() { + let (expected_count, expected_size) = ::RelayDispatchQueueSize::get(para); let (actual_count, actual_size) = queue.into_iter().fold((0, 0), |(acc_count, acc_size), x| { (acc_count + 1, acc_size + x.len() as u32) @@ -612,27 +700,29 @@ mod tests { // since we wipe the empty queues the sets of paras in queue contents, queue sizes and // need dispatch set should all be equal. - let queue_contents_set = ::RelayDispatchQueues::iter() + let queue_contents_set = ::RelayDispatchQueues::iter() .map(|(k, _)| k) .collect::>(); - let queue_sizes_set = ::RelayDispatchQueueSize::iter() + let queue_sizes_set = ::RelayDispatchQueueSize::iter() .map(|(k, _)| k) .collect::>(); - let needs_dispatch_set = ::NeedsDispatch::get() + let needs_dispatch_set = ::NeedsDispatch::get() .into_iter() .collect::>(); assert_eq!(queue_contents_set, queue_sizes_set); assert_eq!(queue_contents_set, needs_dispatch_set); // `NextDispatchRoundStartWith` should point into a para that is tracked. - if let Some(para) = ::NextDispatchRoundStartWith::get() { + if let Some(para) = ::NextDispatchRoundStartWith::get() { assert!(queue_contents_set.contains(¶)); } // `NeedsDispatch` is always sorted. - assert!(::NeedsDispatch::get() - .windows(2) - .all(|xs| xs[0] <= xs[1])); + assert!( + ::NeedsDispatch::get() + .windows(2) + .all(|xs| xs[0] <= xs[1]) + ); } #[test] @@ -641,7 +731,7 @@ mod tests { assert_storage_consistency_exhaustive(); // make sure that the case with empty queues is handled properly - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); assert_storage_consistency_exhaustive(); }); @@ -658,7 +748,7 @@ mod tests { probe.assert_msg(a, msg.clone(), 0); queue_upward_msg(a, msg); - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); assert_storage_consistency_exhaustive(); }); @@ -697,7 +787,7 @@ mod tests { probe.assert_msg(a, a_msg_1.clone(), 300); probe.assert_msg(c, c_msg_1.clone(), 300); - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); assert_storage_consistency_exhaustive(); drop(probe); @@ -711,7 +801,7 @@ mod tests { let mut probe = Probe::new(); probe.assert_msg(q, q_msg.clone(), 500); - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); assert_storage_consistency_exhaustive(); drop(probe); @@ -723,7 +813,7 @@ mod tests { probe.assert_msg(a, a_msg_2.clone(), 100); probe.assert_msg(c, c_msg_2.clone(), 100); - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); assert_storage_consistency_exhaustive(); drop(probe); @@ -733,7 +823,7 @@ mod tests { { let probe = Probe::new(); - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); assert_storage_consistency_exhaustive(); drop(probe); @@ -775,7 +865,7 @@ mod tests { probe.assert_msg(b, b_msg_1.clone(), 300); probe.assert_msg(a, a_msg_2.clone(), 300); - Router::process_pending_upward_messages(); + Ump::process_pending_upward_messages(); drop(probe); } diff --git a/runtime/parachains/src/util.rs b/runtime/parachains/src/util.rs index 34946de3e3..c827a86d65 100644 --- a/runtime/parachains/src/util.rs +++ b/runtime/parachains/src/util.rs @@ -20,12 +20,12 @@ use sp_runtime::traits::{One, Saturating}; use primitives::v1::{Id as ParaId, PersistedValidationData, TransientValidationData}; -use crate::{configuration, paras, router}; +use crate::{configuration, paras, dmp, hrmp}; /// Make the persisted validation data for a particular parachain. /// /// This ties together the storage of several modules. -pub fn make_persisted_validation_data( +pub fn make_persisted_validation_data( para_id: ParaId, ) -> Option> { let relay_parent_number = >::block_number() - One::one(); @@ -33,15 +33,15 @@ pub fn make_persisted_validation_data( Some(PersistedValidationData { parent_head: >::para_head(¶_id)?, block_number: relay_parent_number, - hrmp_mqc_heads: >::hrmp_mqc_heads(para_id), - dmq_mqc_head: >::dmq_mqc_head(para_id), + hrmp_mqc_heads: >::hrmp_mqc_heads(para_id), + dmq_mqc_head: >::dmq_mqc_head(para_id), }) } /// Make the transient validation data for a particular parachain. /// /// This ties together the storage of several modules. -pub fn make_transient_validation_data( +pub fn make_transient_validation_data( para_id: ParaId, ) -> Option> { let config = >::config(); @@ -67,6 +67,6 @@ pub fn make_transient_validation_data( max_head_data_size: config.max_head_data_size, balance: 0, code_upgrade_allowed, - dmq_length: >::dmq_length(para_id), + dmq_length: >::dmq_length(para_id), }) } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 7b5fcfabff..aa6fb87e98 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -73,7 +73,9 @@ use runtime_parachains::inclusion as parachains_inclusion; use runtime_parachains::inclusion_inherent as parachains_inclusion_inherent; use runtime_parachains::initializer as parachains_initializer; use runtime_parachains::paras as parachains_paras; -use runtime_parachains::router as parachains_router; +use runtime_parachains::dmp as parachains_dmp; +use runtime_parachains::ump as parachains_ump; +use runtime_parachains::hrmp as parachains_hrmp; use runtime_parachains::scheduler as parachains_scheduler; pub use pallet_balances::Call as BalancesCall; @@ -184,7 +186,9 @@ construct_runtime! { Scheduler: parachains_scheduler::{Module, Call, Storage}, Paras: parachains_paras::{Module, Call, Storage}, Initializer: parachains_initializer::{Module, Call, Storage}, - Router: parachains_router::{Module, Call, Storage}, + Dmp: parachains_dmp::{Module, Call, Storage}, + Ump: parachains_ump::{Module, Call, Storage}, + Hrmp: parachains_hrmp::{Module, Call, Storage}, Registrar: paras_registrar::{Module, Call, Storage}, ParasSudoWrapper: paras_sudo_wrapper::{Module, Call}, @@ -532,11 +536,16 @@ impl parachains_paras::Trait for Runtime { type Origin = Origin; } -impl parachains_router::Trait for Runtime { - type Origin = Origin; +impl parachains_ump::Trait for Runtime { type UmpSink = (); // TODO: #1873 To be handled by the XCM receiver. } +impl parachains_dmp::Trait for Runtime {} + +impl parachains_hrmp::Trait for Runtime { + type Origin = Origin; +} + impl parachains_inclusion_inherent::Trait for Runtime {} impl parachains_scheduler::Trait for Runtime {} diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index e54f4118fa..43a5d186b3 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -30,7 +30,9 @@ use polkadot_runtime_parachains::inclusion as parachains_inclusion; use polkadot_runtime_parachains::inclusion_inherent as parachains_inclusion_inherent; use polkadot_runtime_parachains::initializer as parachains_initializer; use polkadot_runtime_parachains::paras as parachains_paras; -use polkadot_runtime_parachains::router as parachains_router; +use polkadot_runtime_parachains::dmp as parachains_dmp; +use polkadot_runtime_parachains::ump as parachains_ump; +use polkadot_runtime_parachains::hrmp as parachains_hrmp; use polkadot_runtime_parachains::scheduler as parachains_scheduler; use polkadot_runtime_parachains::runtime_api_impl::v1 as runtime_impl; @@ -459,11 +461,16 @@ impl parachains_paras::Trait for Runtime { type Origin = Origin; } -impl parachains_router::Trait for Runtime { - type Origin = Origin; +impl parachains_dmp::Trait for Runtime {} + +impl parachains_ump::Trait for Runtime { type UmpSink = (); } +impl parachains_hrmp::Trait for Runtime { + type Origin = Origin; +} + impl parachains_scheduler::Trait for Runtime {} impl paras_sudo_wrapper::Trait for Runtime {} -- GitLab From 120d5dde1d8c3ebe6edefa07c4c5f87b5c218c84 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Mon, 16 Nov 2020 16:36:38 +0100 Subject: [PATCH 012/203] sudo_queue_downward_message (#1941) * Add a sudo wrapper for Dmp::queue_downward_message * Apply suggestions from code review Co-authored-by: Peter Goodspeed-Niklaus * Stylistic changes * Remove trailing whitespaces Co-authored-by: Peter Goodspeed-Niklaus --- runtime/common/src/paras_sudo_wrapper.rs | 34 +++++++++++++++++++++--- runtime/parachains/src/paras.rs | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index 19245ac873..c6b1817f0a 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -16,22 +16,32 @@ //! A simple wrapper allowing `Sudo` to call into `paras` routines. +use sp_std::prelude::*; use frame_support::{ - decl_error, decl_module, + decl_error, decl_module, ensure, dispatch::DispatchResult, weights::DispatchClass, }; use frame_system::ensure_root; use runtime_parachains::{ - dmp, ump, hrmp, paras::{self, ParaGenesisArgs}, + configuration, dmp, ump, hrmp, paras::{self, ParaGenesisArgs}, }; use primitives::v1::Id as ParaId; /// The module's configuration trait. -pub trait Trait: paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait { } +pub trait Trait: + configuration::Trait + paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait +{ +} decl_error! { - pub enum Error for Module { } + pub enum Error for Module { + /// The specified parachain or parathread is not registered. + ParaDoesntExist, + /// A DMP message couldn't be sent because it exceeds the maximum size allowed for a downward + /// message. + ExceedsMaxMessageSize, + } } decl_module! { @@ -58,5 +68,21 @@ decl_module! { runtime_parachains::schedule_para_cleanup::(id); Ok(()) } + + /// Send a downward message to the given para. + /// + /// The given parachain should exist and the payload should not exceed the preconfigured size + /// `config.max_downward_message_size`. + #[weight = (1_000, DispatchClass::Operational)] + pub fn sudo_queue_downward_message(origin, id: ParaId, payload: Vec) -> DispatchResult { + ensure_root(origin)?; + ensure!(>::is_valid_para(id), Error::::ParaDoesntExist); + let config = >::config(); + >::queue_downward_message(&config, id, payload) + .map_err(|e| match e { + dmp::QueueDownwardMessageError::ExceedsMaxMessageSize => + Error::::ExceedsMaxMessageSize.into(), + }) + } } } diff --git a/runtime/parachains/src/paras.rs b/runtime/parachains/src/paras.rs index ab811f0f7d..869a7cff74 100644 --- a/runtime/parachains/src/paras.rs +++ b/runtime/parachains/src/paras.rs @@ -542,7 +542,7 @@ impl Module { } /// Returns whether the given ID refers to a valid para. - pub(crate) fn is_valid_para(id: ParaId) -> bool { + pub fn is_valid_para(id: ParaId) -> bool { Self::parachains().binary_search(&id).is_ok() || Self::is_parathread(id) } -- GitLab From 31fb8fed01ce1ade288d8d4f626a940072435c03 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Tue, 17 Nov 2020 11:16:31 +0100 Subject: [PATCH 013/203] update most of the dependencies (#1946) * update tiny-keccak to 0.2 * update deps except bitvec and shared_memory * fix some warning after futures upgrade * remove useless package rename caused by bug in cargo-upgrade * revert parity-util-mem * * remove unused import * cargo update * remove all renames on parity-scale-codec * remove the leftovers * remove unused dep --- Cargo.lock | 2104 +++++++++-------- Cargo.toml | 10 +- cli/Cargo.toml | 8 +- core-primitives/Cargo.toml | 4 +- core-primitives/src/lib.rs | 9 +- erasure-coding/Cargo.toml | 6 +- erasure-coding/src/lib.rs | 8 +- node/collation-generation/Cargo.toml | 6 +- node/core/av-store/Cargo.toml | 10 +- node/core/av-store/src/lib.rs | 6 +- node/core/backing/Cargo.toml | 8 +- node/core/bitfield-signing/Cargo.toml | 6 +- node/core/candidate-selection/Cargo.toml | 4 +- node/core/candidate-validation/Cargo.toml | 8 +- node/core/chain-api/Cargo.toml | 4 +- node/core/proposer/Cargo.toml | 4 +- node/core/provisioner/Cargo.toml | 4 +- node/core/runtime-api/Cargo.toml | 4 +- .../availability-distribution/Cargo.toml | 12 +- .../availability-distribution/src/lib.rs | 2 +- node/network/bitfield-distribution/Cargo.toml | 8 +- node/network/bitfield-distribution/src/lib.rs | 4 +- node/network/bridge/Cargo.toml | 10 +- node/network/collator-protocol/Cargo.toml | 8 +- node/network/pov-distribution/Cargo.toml | 4 +- node/network/protocol/Cargo.toml | 2 +- .../network/statement-distribution/Cargo.toml | 8 +- node/overseer/Cargo.toml | 6 +- node/overseer/src/lib.rs | 6 +- node/primitives/Cargo.toml | 4 +- node/service/Cargo.toml | 11 +- node/subsystem-test-helpers/Cargo.toml | 14 +- node/subsystem-util/Cargo.toml | 22 +- node/subsystem/Cargo.toml | 24 +- node/test/client/Cargo.toml | 2 +- node/test/client/src/block_builder.rs | 2 +- node/test/service/Cargo.toml | 8 +- parachain/Cargo.toml | 16 +- parachain/src/primitives.rs | 8 +- parachain/src/wasm_api.rs | 2 +- parachain/src/wasm_executor/mod.rs | 2 +- .../src/wasm_executor/validation_host.rs | 2 +- parachain/test-parachains/Cargo.toml | 4 +- parachain/test-parachains/adder/Cargo.toml | 4 +- .../test-parachains/adder/collator/Cargo.toml | 8 +- .../test-parachains/adder/collator/src/lib.rs | 4 +- parachain/test-parachains/adder/src/lib.rs | 15 +- .../adder/src/wasm_validation.rs | 4 +- parachain/test-parachains/tests/adder/mod.rs | 2 +- primitives/Cargo.toml | 6 +- rpc/Cargo.toml | 2 +- runtime/common/Cargo.toml | 22 +- runtime/common/src/claims.rs | 4 +- runtime/common/src/crowdfund.rs | 2 +- runtime/common/src/purchase.rs | 2 +- runtime/common/src/slot_range.rs | 2 +- runtime/common/src/slots.rs | 2 +- runtime/kusama/Cargo.toml | 24 +- runtime/kusama/src/lib.rs | 8 +- runtime/parachains/Cargo.toml | 22 +- runtime/parachains/src/configuration.rs | 2 +- runtime/parachains/src/dmp.rs | 2 +- runtime/parachains/src/hrmp.rs | 8 +- runtime/parachains/src/inclusion.rs | 2 +- runtime/parachains/src/initializer.rs | 2 +- runtime/parachains/src/origin.rs | 2 +- runtime/parachains/src/paras.rs | 2 +- runtime/parachains/src/scheduler.rs | 2 +- runtime/polkadot/Cargo.toml | 26 +- runtime/polkadot/src/lib.rs | 6 +- runtime/rococo/Cargo.toml | 10 +- runtime/rococo/src/lib.rs | 6 +- runtime/test-runtime/Cargo.toml | 22 +- runtime/test-runtime/src/lib.rs | 2 +- runtime/westend/Cargo.toml | 24 +- runtime/westend/src/lib.rs | 6 +- statement-table/Cargo.toml | 2 +- statement-table/src/generic.rs | 2 +- validation/Cargo.toml | 8 +- xcm/Cargo.toml | 4 +- xcm/src/lib.rs | 2 +- xcm/src/v0/junction.rs | 2 +- xcm/src/v0/mod.rs | 2 +- xcm/src/v0/multi_asset.rs | 2 +- xcm/src/v0/multi_location.rs | 2 +- xcm/src/v0/order.rs | 2 +- xcm/src/v0/traits.rs | 2 +- xcm/xcm-builder/Cargo.toml | 4 +- xcm/xcm-builder/src/location_conversion.rs | 2 +- xcm/xcm-executor/Cargo.toml | 6 +- xcm/xcm-executor/src/lib.rs | 2 +- 91 files changed, 1404 insertions(+), 1301 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3b7a68ebfa..47e8f95db8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,18 +12,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" +checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" dependencies = [ - "gimli 0.22.0", + "gimli 0.23.0", ] [[package]] name = "adler" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc9a9dd069569f212bc4330af9f17c4afb5e8ce185e83dbb14f1349dda18b10" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" [[package]] name = "aead" @@ -31,59 +31,59 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] name = "aes" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7001367fde4c768a19d1029f0a8be5abd9308e1119846d5bd9ad26297b8faf5" +checksum = "dd2bc6d3f370b5666245ff421e231cba4353df936e26986d2918e61a8fd6aef6" dependencies = [ "aes-soft", "aesni", - "block-cipher 0.7.1", + "block-cipher", ] [[package]] name = "aes-gcm" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f5007801316299f922a6198d1d09a0bae95786815d066d5880d13f7c45ead1" +checksum = "0301c9e9c443494d970a07885e8cf3e587bae8356a1d5abd0999068413f7205f" dependencies = [ "aead", "aes", - "block-cipher 0.7.1", + "block-cipher", "ghash", - "subtle 2.2.3", + "subtle 2.3.0", ] [[package]] name = "aes-soft" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4925647ee64e5056cf231608957ce7c81e12d6d6e316b9ce1404778cc1d35fa7" +checksum = "63dd91889c49327ad7ef3b500fd1109dbd3c509a03db0d4a9ce413b79f575cb6" dependencies = [ - "block-cipher 0.7.1", + "block-cipher", "byteorder", - "opaque-debug 0.2.3", + "opaque-debug 0.3.0", ] [[package]] name = "aesni" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050d39b0b7688b3a3254394c3e30a9d66c41dcf9b05b0e2dbdc623f6505d264" +checksum = "0a6fe808308bb07d393e2ea47780043ec47683fcf19cf5efc8ca51c50cc8c68a" dependencies = [ - "block-cipher 0.7.1", - "opaque-debug 0.2.3", + "block-cipher", + "opaque-debug 0.3.0", ] [[package]] name = "ahash" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f33b5018f120946c1dcf279194f238a9f146725593ead1c08fa47ff22b0b5d3" +checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb" dependencies = [ "const-random", ] @@ -94,11 +94,17 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" +[[package]] +name = "ahash" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6789e291be47ace86a60303502173d84af8327e3627ecf334356ee0f87a164c" + [[package]] name = "aho-corasick" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" dependencies = [ "memchr", ] @@ -111,7 +117,7 @@ checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" dependencies = [ "approx", "num-complex", - "num-traits 0.2.12", + "num-traits 0.2.14", ] [[package]] @@ -134,9 +140,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.31" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bb70cc08ec97ca5450e6eba421deeea5f172c0fc61f78b5357b2a8e8be195f" +checksum = "bf8dcb5b4bbaa28653b647d8c77bd4ed40183b48882e130c1f1ffb73de069fd7" [[package]] name = "approx" @@ -144,7 +150,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" dependencies = [ - "num-traits 0.2.12", + "num-traits 0.2.14", ] [[package]] @@ -170,9 +176,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "asn1_der" @@ -195,12 +201,11 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "0.12.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936fcf2c692b37c696cd0002c57752b2d9478402450c9ca4a463f6afae16d6f5" +checksum = "c88b9ca26f9c16ec830350d309397e74ee9abdfd8eb1f71cb6ecc71a3fc818da" dependencies = [ "doc-comment", - "escargot", "predicates", "predicates-core", "predicates-tree", @@ -209,9 +214,9 @@ dependencies = [ [[package]] name = "assert_matches" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7deb0a829ca7bcfaf5da70b073a8d128619259a7be8216a355e23f00763059e5" +checksum = "695579f0f2520f3774bb40461e5adb066459d4e0af4d59d20175484fb8e9edf1" [[package]] name = "async-channel" @@ -226,50 +231,48 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d373d78ded7d0b3fa8039375718cde0aace493f2e34fb60f51cbf567562ca801" +checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", - "once_cell 1.4.1", + "once_cell 1.5.1", "vec-arena", ] [[package]] name = "async-global-executor" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "124ac8c265e407641c3362b8f4d39cdb4e243885b71eef087be27199790f5a3a" +checksum = "73079b49cd26b8fd5a15f68fc7707fc78698dc2a3d61430f2a7a9430230dfa04" dependencies = [ "async-executor", "async-io", "futures-lite", "num_cpus", - "once_cell 1.4.1", + "once_cell 1.5.1", ] [[package]] name = "async-io" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38628c78a34f111c5a6b98fc87dfc056cd1590b61afe748b145be4623c56d194" +checksum = "40a0b2bb8ae20fede194e779150fe283f65a4a08461b496de546ec366b174ad9" dependencies = [ - "cfg-if 0.1.10", "concurrent-queue", "fastrand", "futures-lite", "libc", - "log 0.4.11", - "once_cell 1.4.1", + "log", + "nb-connect", + "once_cell 1.5.1", "parking", "polling", - "socket2", "vec-arena", "waker-fn", - "wepoll-sys-stjepang", "winapi 0.3.9", ] @@ -284,25 +287,25 @@ dependencies = [ [[package]] name = "async-std" -version = "1.6.5" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9fa76751505e8df1c7a77762f60486f60c71bbd9b8557f4da6ad47d083732ed" +checksum = "a7e82538bc65a25dbdff70e4c5439d52f068048ab97cdea0acd73f131594caa1" dependencies = [ "async-global-executor", "async-io", "async-mutex", "blocking", - "crossbeam-utils", + "crossbeam-utils 0.8.0", "futures-channel", "futures-core", "futures-io", "futures-lite", "gloo-timers", "kv-log-macro", - "log 0.4.11", + "log", "memchr", "num_cpus", - "once_cell 1.4.1", + "once_cell 1.5.1", "pin-project-lite", "pin-utils", "slab", @@ -330,9 +333,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.36" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a265e3abeffdce30b2e26b7a11b222fe37c6067404001b434101457d0385eb92" +checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -345,7 +348,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", ] [[package]] @@ -373,21 +376,21 @@ checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" [[package]] name = "autocfg" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" +checksum = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28" dependencies = [ "addr2line", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "miniz_oxide", - "object 0.20.0", + "object 0.22.0", "rustc-demangle", ] @@ -397,12 +400,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - [[package]] name = "base64" version = "0.12.3" @@ -439,7 +436,7 @@ dependencies = [ "env_logger 0.7.1", "lazy_static", "lazycell", - "log 0.4.11", + "log", "peeking_take_while", "proc-macro2 1.0.24", "quote 1.0.7", @@ -482,15 +479,13 @@ dependencies = [ [[package]] name = "blake2" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84ce5b6108f8e154604bd4eb76a2f726066c3464d5a552a4229262a18c9bb471" +checksum = "10a5720225ef5daecf08657f23791354e1685a8c91a4c60c7f3d3b2892f978f4" dependencies = [ - "byte-tools", - "byteorder", "crypto-mac 0.8.0", "digest 0.9.0", - "opaque-debug 0.2.3", + "opaque-debug 0.3.0", ] [[package]] @@ -505,23 +500,23 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" dependencies = [ "arrayref", - "arrayvec 0.5.1", + "arrayvec 0.5.2", "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9e07352b829279624ceb7c64adb4f585dacdb81d35cafae81139ccd617cf44" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" dependencies = [ "arrayref", - "arrayvec 0.5.1", + "arrayvec 0.5.2", "constant_time_eq", ] @@ -544,16 +539,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding 0.2.1", - "generic-array 0.14.2", -] - -[[package]] -name = "block-cipher" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" -dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -562,7 +548,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f337a3e6da609650eb74e02bc9fac7b735049f7623ab12f2e4c719316fcc7e80" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -591,7 +577,7 @@ dependencies = [ "atomic-waker", "fastrand", "futures-lite", - "once_cell 1.4.1", + "once_cell 1.5.1", ] [[package]] @@ -600,11 +586,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + [[package]] name = "bstr" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" +checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" dependencies = [ "memchr", ] @@ -658,9 +650,9 @@ checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" [[package]] name = "cc" -version = "1.0.58" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" +checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40" dependencies = [ "jobserver", ] @@ -688,38 +680,40 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chacha20" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086c0f07ac275808b7bf9a39f2fd013aae1498be83632814c8c4e0bd53f2dc58" +checksum = "244fbce0d47e97e8ef2f63b81d5e05882cb518c68531eb33194990d7b7e85845" dependencies = [ - "stream-cipher 0.4.1", + "stream-cipher", "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18b0c90556d8e3fec7cf18d84a2f53d27b21288f2fe481b830fadcf809e48205" +checksum = "9bf18d374d66df0c05cdddd528a7db98f78c28e2519b120855c4f84c5027b1f5" dependencies = [ "aead", "chacha20", "poly1305", - "stream-cipher 0.4.1", + "stream-cipher", "zeroize", ] [[package]] name = "chrono" -version = "0.4.13" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" dependencies = [ "js-sys", + "libc", "num-integer", - "num-traits 0.2.12", + "num-traits 0.2.14", "time", "wasm-bindgen", + "winapi 0.3.9", ] [[package]] @@ -735,9 +729,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.1" +version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ "ansi_term 0.11.0", "atty", @@ -768,15 +762,15 @@ dependencies = [ [[package]] name = "color-eyre" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2a5123db5af8349c41c43ed0e5dca1cd56c911ea0c4ce6e6ff30f159fa5d27e" +checksum = "86bc0bb03923141924d5b713a4acd7607c790f3fbc769abe63fe3f38bb268112" dependencies = [ "backtrace", "color-spantrace", "eyre", "indenter", - "once_cell 1.4.1", + "once_cell 1.5.1", "owo-colors", "tracing-error", ] @@ -817,15 +811,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7871d2947441b0fdd8e2bd1ce2a2f75304f896582c0d572162d48290683c48" dependencies = [ - "log 0.4.11", + "log", "web-sys", ] [[package]] name = "const-random" -version = "0.1.8" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" +checksum = "02dc82c12dc2ee6e1ded861cf7d582b46f66f796d1b6c93fa28b911ead95da02" dependencies = [ "const-random-macro", "proc-macro-hack", @@ -833,14 +827,20 @@ dependencies = [ [[package]] name = "const-random-macro" -version = "0.1.8" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" +checksum = "fc757bbb9544aa296c2ae00c679e81f886b37e28e59097defe0cf524306f6685" dependencies = [ - "getrandom", + "getrandom 0.2.0", "proc-macro-hack", ] +[[package]] +name = "const_fn" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab" + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -865,9 +865,9 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cpuid-bool" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d375c433320f6c5057ae04a04376eef4d04ce2801448cf8863a78da99107be4" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" [[package]] name = "cranelift-bforest" @@ -890,7 +890,7 @@ dependencies = [ "cranelift-codegen-shared", "cranelift-entity", "gimli 0.21.0", - "log 0.4.11", + "log", "regalloc", "serde", "smallvec 1.4.2", @@ -930,7 +930,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ef419efb4f94ecc02e5d9fbcc910d2bb7f0040e2de570e63a454f883bc891d6" dependencies = [ "cranelift-codegen", - "log 0.4.11", + "log", "smallvec 1.4.2", "target-lexicon", ] @@ -955,7 +955,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "log 0.4.11", + "log", "serde", "thiserror", "wasmparser 0.59.0", @@ -963,11 +963,21 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils 0.8.0", ] [[package]] @@ -976,26 +986,51 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "crossbeam-epoch 0.8.2", + "crossbeam-utils 0.7.2", "maybe-uninit", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch 0.9.0", + "crossbeam-utils 0.8.0", +] + [[package]] name = "crossbeam-epoch" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", "cfg-if 0.1.10", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "lazy_static", "maybe-uninit", "memoffset", "scopeguard 1.1.0", ] +[[package]] +name = "crossbeam-epoch" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0f606a85340376eef0d6d8fec399e6d4a544d648386c6645eb6d0653b27d9f" +dependencies = [ + "cfg-if 1.0.0", + "const_fn", + "crossbeam-utils 0.8.0", + "lazy_static", + "memoffset", + "scopeguard 1.1.0", +] + [[package]] name = "crossbeam-queue" version = "0.2.3" @@ -1003,7 +1038,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" dependencies = [ "cfg-if 0.1.10", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "maybe-uninit", ] @@ -1013,11 +1048,23 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", "cfg-if 0.1.10", "lazy_static", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5" +dependencies = [ + "autocfg 1.0.1", + "cfg-if 1.0.0", + "const_fn", + "lazy_static", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -1040,8 +1087,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.2", - "subtle 2.2.3", + "generic-array 0.14.4", + "subtle 2.3.0", ] [[package]] @@ -1053,6 +1100,16 @@ dependencies = [ "sct", ] +[[package]] +name = "ctor" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbaabec2c953050352311293be5c6aba8e141ba19d6811862b232d6fd020484" +dependencies = [ + "quote 1.0.7", + "syn 1.0.48", +] + [[package]] name = "cuckoofilter" version = "0.5.0" @@ -1073,7 +1130,7 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.2.3", + "subtle 2.3.0", "zeroize", ] @@ -1086,15 +1143,15 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.2.3", + "subtle 2.3.0", "zeroize", ] [[package]] name = "data-encoding" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" +checksum = "993a608597367c6377b258c25d7120740f00ed23a2252b729b1932dd7866f908" [[package]] name = "derive_more" @@ -1128,7 +1185,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -1200,15 +1257,15 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c53dc3a653e0f64081026e4bf048d48fec9fce90c66e8326ca7292df0ff2d82" +checksum = "d55796afa1b20c2945ca8eabfc421839f2b766619209f1ede813cf2484f31804" [[package]] name = "ed25519" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf038a7b6fd7ef78ad3348b63f3a17550877b0e28f8d68bcc94894d1412158bc" +checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" dependencies = [ "signature", ] @@ -1223,15 +1280,15 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.1", + "sha2 0.9.2", "zeroize", ] [[package]] name = "either" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "enum_primitive" @@ -1270,7 +1327,7 @@ checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" dependencies = [ "atty", "humantime 1.3.0", - "log 0.4.11", + "log", "regex", "termcolor", ] @@ -1283,7 +1340,7 @@ checksum = "54532e3223c5af90a6a757c90b5c5521564b07e5e7a958681bcd2afad421cdcd" dependencies = [ "atty", "humantime 2.0.1", - "log 0.4.11", + "log", "regex", "termcolor", ] @@ -1305,9 +1362,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b480f641ccf0faf324e20c1d3e53d81b7484c698b42ea677f6907ae4db195371" +checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe" dependencies = [ "errno-dragonfly", "libc", @@ -1324,18 +1381,6 @@ dependencies = [ "libc", ] -[[package]] -name = "escargot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74cf96bec282dcdb07099f7e31d9fed323bca9435a09aba7b6d99b7617bca96d" -dependencies = [ - "lazy_static", - "log 0.4.11", - "serde", - "serde_json", -] - [[package]] name = "event-listener" version = "2.5.1" @@ -1348,17 +1393,17 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", ] [[package]] name = "eyre" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534ce924bff9118be8b28b24ede6bf7e96a00b53e4ded25050aa7b526e051e1a" +checksum = "5f29abf4740a4778632fe27a4f681ef5b7a6f659aeba3330ac66f48e20cfa3b7" dependencies = [ "indenter", - "once_cell 1.4.1", + "once_cell 1.5.1", ] [[package]] @@ -1421,7 +1466,7 @@ checksum = "2af1a24f391a5a94d756db5092c6576aad494b88a71a5a36b20c67b63e0df034" dependencies = [ "cfg-if 0.1.10", "js-sys", - "log 0.4.11", + "log", "serde", "serde_derive", "serde_json", @@ -1431,12 +1476,12 @@ dependencies = [ [[package]] name = "file-per-thread-logger" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3937f028664bd0e13df401ba49a4567ccda587420365823242977f06609ed1" +checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126" dependencies = [ "env_logger 0.7.1", - "log 0.4.11", + "log", ] [[package]] @@ -1446,10 +1491,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b" dependencies = [ "either", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 2.0.2", - "log 0.4.11", - "num-traits 0.2.12", + "log", + "num-traits 0.2.14", "parity-scale-codec", "parking_lot 0.9.0", ] @@ -1474,11 +1519,11 @@ checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" [[package]] name = "flate2" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c90b0fc46cf89d227cc78b40e494ff81287a92dd07631e5af0d06fe3cf885e" +checksum = "7411863d55df97a419aa64cb4d2f167103ea9d767e2c54a1868b7ac3f6b47129" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "crc32fast", "libc", "libz-sys", @@ -1494,15 +1539,25 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", ] +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding 2.1.0", +] + [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -1520,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "chrono", "frame-benchmarking", @@ -1542,7 +1597,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -1558,7 +1613,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "serde", @@ -1569,14 +1624,14 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "bitflags", "frame-metadata", "frame-support-procedural", - "impl-trait-for-tuples", - "log 0.4.11", - "once_cell 1.4.1", + "impl-trait-for-tuples 0.1.3", + "log", + "once_cell 1.5.1", "parity-scale-codec", "paste", "serde", @@ -1594,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1605,7 +1660,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1617,7 +1672,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1627,10 +1682,10 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "serde", "sp-core", @@ -1643,7 +1698,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -1657,7 +1712,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-api", @@ -1677,9 +1732,9 @@ dependencies = [ [[package]] name = "fs_extra" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" +checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" [[package]] name = "fuchsia-cprng" @@ -1705,15 +1760,15 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" +checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" [[package]] name = "futures" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613" +checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" dependencies = [ "futures-channel", "futures-core", @@ -1726,9 +1781,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5" +checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" dependencies = [ "futures-core", "futures-sink", @@ -1745,9 +1800,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399" +checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" [[package]] name = "futures-core-preview" @@ -1761,7 +1816,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" dependencies = [ - "futures 0.1.29", + "futures 0.1.30", "num_cpus", ] @@ -1771,21 +1826,21 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9" dependencies = [ - "futures 0.1.29", - "futures 0.3.5", + "futures 0.1.30", + "futures 0.3.8", "lazy_static", - "log 0.4.11", + "log", "parking_lot 0.9.0", - "pin-project 0.4.23", + "pin-project 0.4.27", "serde", "serde_json", ] [[package]] name = "futures-executor" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314" +checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" dependencies = [ "futures-core", "futures-task", @@ -1795,9 +1850,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789" +checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" [[package]] name = "futures-lite" @@ -1816,9 +1871,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" +checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", @@ -1828,17 +1883,17 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc" +checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" [[package]] name = "futures-task" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626" +checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" dependencies = [ - "once_cell 1.4.1", + "once_cell 1.5.1", ] [[package]] @@ -1859,11 +1914,11 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6" +checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" dependencies = [ - "futures 0.1.29", + "futures 0.1.30", "futures-channel", "futures-core", "futures-io", @@ -1871,7 +1926,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 0.4.23", + "pin-project 1.0.1", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -1897,9 +1952,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b" dependencies = [ "bytes 0.5.6", - "futures 0.3.5", + "futures 0.3.8", "memchr", - "pin-project 0.4.23", + "pin-project 0.4.27", ] [[package]] @@ -1908,6 +1963,19 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +[[package]] +name = "generator" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cdc09201b2e8ca1b19290cf7e65de2246b8e91fb6874279722189c4de7b94dc" +dependencies = [ + "cc", + "libc", + "log", + "rustc_version", + "winapi 0.3.9", +] + [[package]] name = "generic-array" version = "0.12.3" @@ -1919,9 +1987,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", "version_check", @@ -1929,16 +1997,27 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" dependencies = [ "cfg-if 0.1.10", "libc", - "wasi", + "wasi 0.9.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "ghash" version = "0.3.0" @@ -1961,9 +2040,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" [[package]] name = "glob" @@ -1973,14 +2052,14 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120" +checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a" dependencies = [ "aho-corasick", "bstr", "fnv", - "log 0.4.11", + "log", "regex", ] @@ -2006,10 +2085,10 @@ dependencies = [ "byteorder", "bytes 0.4.12", "fnv", - "futures 0.1.29", + "futures 0.1.30", "http 0.1.21", "indexmap", - "log 0.4.11", + "log", "slab", "string", "tokio-io", @@ -2017,9 +2096,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" +checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" dependencies = [ "bytes 0.5.6", "fnv", @@ -2028,10 +2107,11 @@ dependencies = [ "futures-util", "http 0.2.1", "indexmap", - "log 0.4.11", "slab", - "tokio 0.2.21", + "tokio 0.2.22", "tokio-util", + "tracing", + "tracing-futures", ] [[package]] @@ -2040,7 +2120,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2764f9796c0ddca4b82c07f25dd2cb3db30b9a8f47940e78e1c883d9e95c3db9" dependencies = [ - "log 0.4.11", + "log", "pest", "pest_derive", "quick-error 2.0.0", @@ -2079,18 +2159,27 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" dependencies = [ - "ahash 0.2.18", + "ahash 0.2.19", "autocfg 0.1.7", ] [[package]] name = "hashbrown" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9b7860757ce258c89fd48d28b68c41713e597a7b09e793f6c6a6e2ea37c827" +checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" dependencies = [ "ahash 0.3.8", - "autocfg 1.0.0", + "autocfg 1.0.1", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash 0.4.6", ] [[package]] @@ -2104,9 +2193,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" dependencies = [ "libc", ] @@ -2117,31 +2206,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" -[[package]] -name = "hex-literal" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "961de220ec9a91af2e1e5bd80d02109155695e516771762381ef8581317066e0" -dependencies = [ - "hex-literal-impl", - "proc-macro-hack", -] - [[package]] name = "hex-literal" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5af1f635ef1bc545d78392b136bfe1c9809e029023c84a3638a864a10b8819c8" -[[package]] -name = "hex-literal-impl" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f769599eb31de176303197b7ba4973299c38c7a7604a6bc88c3eef05b9b46" -dependencies = [ - "proc-macro-hack", -] - [[package]] name = "hex_fmt" version = "0.3.0" @@ -2198,7 +2268,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "http 0.1.21", "tokio-buf", ] @@ -2219,6 +2289,12 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +[[package]] +name = "httpdate" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" + [[package]] name = "humantime" version = "1.3.0" @@ -2241,7 +2317,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "futures-cpupool", "h2 0.1.26", "http 0.1.21", @@ -2249,7 +2325,7 @@ dependencies = [ "httparse", "iovec", "itoa", - "log 0.4.11", + "log", "net2", "rustc_version", "time", @@ -2266,25 +2342,25 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.6" +version = "0.13.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e7655b9594024ad0ee439f3b5a7299369dc2a3f459b47c696f9ff676f9aa1f" +checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" dependencies = [ "bytes 0.5.6", "futures-channel", "futures-core", "futures-util", - "h2 0.2.5", + "h2 0.2.7", "http 0.2.1", "http-body 0.3.1", "httparse", + "httpdate", "itoa", - "log 0.4.11", - "pin-project 0.4.23", + "pin-project 1.0.1", "socket2", - "time", - "tokio 0.2.21", + "tokio 0.2.22", "tower-service", + "tracing", "want 0.3.0", ] @@ -2297,11 +2373,11 @@ dependencies = [ "bytes 0.5.6", "ct-logs", "futures-util", - "hyper 0.13.6", - "log 0.4.11", + "hyper 0.13.9", + "log", "rustls", "rustls-native-certs", - "tokio 0.2.21", + "tokio 0.2.22", "tokio-rustls", "webpki", ] @@ -2378,6 +2454,17 @@ dependencies = [ "syn 1.0.48", ] +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f65a8ecf74feeacdab8d38cb129e550ca871cccaa7d1921d8636ecd75534903" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.48", +] + [[package]] name = "indenter" version = "0.3.0" @@ -2386,25 +2473,32 @@ checksum = "e0bd112d44d9d870a6819eb505d04dd92b5e4d94bb8c304924a0872ae7016fb5" [[package]] name = "indexmap" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c398b2b113b55809ceb9ee3e753fcbac793f1956663f3c36549c1346015c2afe" +checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", + "hashbrown 0.9.1", "serde", ] [[package]] name = "instant" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" +checksum = "cb1fc4429a33e1f80d41dc9fea4d108a88bec1de8053878898ae448a0b52f613" +dependencies = [ + "cfg-if 1.0.0", +] [[package]] name = "integer-sqrt" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65877bf7d44897a473350b1046277941cee20b263397e90869c50b6e766088b" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits 0.2.14", +] [[package]] name = "intervalier" @@ -2412,7 +2506,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 2.0.2", ] @@ -2493,9 +2587,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.41" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b9172132a62451e56142bff9afc91c8e4a4500aa5b847da36815b63bfda916" +checksum = "ca059e81d9486668f12d455a4ea6daa600bd408134cd17e3d3fb5a32d1f016f8" dependencies = [ "wasm-bindgen", ] @@ -2507,10 +2601,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7" dependencies = [ "failure", - "futures 0.1.29", + "futures 0.1.30", "jsonrpc-core", "jsonrpc-pubsub", - "log 0.4.11", + "log", "serde", "serde_json", "url 1.7.2", @@ -2522,8 +2616,8 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa" dependencies = [ - "futures 0.1.29", - "log 0.4.11", + "futures 0.1.30", + "log", "serde", "serde_derive", "serde_json", @@ -2559,7 +2653,7 @@ dependencies = [ "hyper 0.12.35", "jsonrpc-core", "jsonrpc-server-utils", - "log 0.4.11", + "log", "net2", "parking_lot 0.10.2", "unicase", @@ -2573,7 +2667,7 @@ checksum = "cf50e53e4eea8f421a7316c5f63e395f7bc7c4e786a6dc54d76fab6ff7aa7ce7" dependencies = [ "jsonrpc-core", "jsonrpc-server-utils", - "log 0.4.11", + "log", "parity-tokio-ipc", "parking_lot 0.10.2", "tokio-service", @@ -2586,7 +2680,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "639558e0604013be9787ae52f798506ae42bf4220fe587bdc5625871cc8b9c77" dependencies = [ "jsonrpc-core", - "log 0.4.11", + "log", "parking_lot 0.10.2", "rand 0.7.3", "serde", @@ -2602,7 +2696,7 @@ dependencies = [ "globset", "jsonrpc-core", "lazy_static", - "log 0.4.11", + "log", "tokio 0.1.22", "tokio-codec", "unicase", @@ -2616,7 +2710,7 @@ checksum = "6596fe75209b73a2a75ebe1dce4e60e03b88a2b25e8807b667597f6315150d22" dependencies = [ "jsonrpc-core", "jsonrpc-server-utils", - "log 0.4.11", + "log", "parity-ws", "parking_lot 0.10.2", "slab", @@ -2649,9 +2743,9 @@ dependencies = [ "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "hex-literal 0.2.1", + "hex-literal", "libsecp256k1", - "log 0.3.9", + "log", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -2710,7 +2804,7 @@ dependencies = [ "sp-version", "static_assertions", "substrate-wasm-builder-runner", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -2719,7 +2813,7 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" dependencies = [ - "log 0.4.11", + "log", ] [[package]] @@ -2751,7 +2845,7 @@ checksum = "44947dd392f09475af614d740fe0320b66d01cb5b977f664bbbb5e45a70ea4c1" dependencies = [ "fs-swap", "kvdb", - "log 0.4.11", + "log", "num_cpus", "owning_ref", "parity-util-mem", @@ -2767,11 +2861,11 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2701a1369d6ea4f1b9f606db46e5e2a4a8e47f22530a07823d653f85ab1f6c34" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "js-sys", "kvdb", "kvdb-memorydb", - "log 0.4.11", + "log", "parity-util-mem", "send_wrapper 0.3.0", "wasm-bindgen", @@ -2786,9 +2880,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "leb128" @@ -2798,9 +2892,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "libloading" @@ -2826,7 +2920,7 @@ checksum = "021f703bfef6e3da78ef9828c8a244d639b8d57eedf58360922aca5ff69dfdcd" dependencies = [ "atomic", "bytes 0.5.6", - "futures 0.3.5", + "futures 0.3.8", "lazy_static", "libp2p-core", "libp2p-core-derive", @@ -2864,15 +2958,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3960524389409633550567e8a9e0684d25a33f4f8408887ff897dd9fdfbdb771" dependencies = [ "asn1_der", - "bs58", + "bs58 0.3.1", "ed25519-dalek", "either", "fnv", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "lazy_static", "libsecp256k1", - "log 0.4.11", + "log", "multihash", "multistream-select", "parity-multiaddr", @@ -2883,7 +2977,7 @@ dependencies = [ "rand 0.7.3", "ring", "rw-stream-sink", - "sha2 0.9.1", + "sha2 0.9.2", "smallvec 1.4.2", "thiserror", "unsigned-varint 0.5.1", @@ -2908,7 +3002,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567962c5c5f8a1282979441300e1739ba939024010757c3dbfab4d462189df77" dependencies = [ "flate2", - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", ] @@ -2918,9 +3012,9 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436280f5fe21a58fcaff82c2606945579241f32bc0eaf2d39321aa4624a66e7f" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", - "log 0.4.11", + "log", ] [[package]] @@ -2931,10 +3025,10 @@ checksum = "ecc175613c5915332fd6458895407ec242ea055ae3b107a586626d5e3349350a" dependencies = [ "cuckoofilter", "fnv", - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", "libp2p-swarm", - "log 0.4.11", + "log", "prost", "prost-build", "rand 0.7.3", @@ -2951,17 +3045,17 @@ dependencies = [ "byteorder", "bytes 0.5.6", "fnv", - "futures 0.3.5", + "futures 0.3.8", "futures_codec", "hex_fmt", "libp2p-core", "libp2p-swarm", - "log 0.4.11", + "log", "lru_time_cache", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.1", + "sha2 0.9.2", "smallvec 1.4.2", "unsigned-varint 0.5.1", "wasm-timer", @@ -2973,10 +3067,10 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03b90b350e37f398b73d778bd94422f4e6a3afa2c1582742ce2446b8a0dba787" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", "libp2p-swarm", - "log 0.4.11", + "log", "prost", "prost-build", "smallvec 1.4.2", @@ -2989,20 +3083,20 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb78341f114bf686d5fe50b33ff1a804d88fb326c0d39ee1c22db4346b21fc27" dependencies = [ - "arrayvec 0.5.1", + "arrayvec 0.5.2", "bytes 0.5.6", "either", "fnv", - "futures 0.3.5", + "futures 0.3.8", "futures_codec", "libp2p-core", "libp2p-swarm", - "log 0.4.11", + "log", "multihash", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.1", + "sha2 0.9.2", "smallvec 1.4.2", "uint", "unsigned-varint 0.5.1", @@ -3020,11 +3114,11 @@ dependencies = [ "data-encoding", "dns-parser", "either", - "futures 0.3.5", + "futures 0.3.8", "lazy_static", "libp2p-core", "libp2p-swarm", - "log 0.4.11", + "log", "net2", "rand 0.7.3", "smallvec 1.4.2", @@ -3039,10 +3133,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92b538238c80067c6417a58a07e41002b69d129355b60ec147d6337fdff0eb0" dependencies = [ "bytes 0.5.6", - "futures 0.3.5", + "futures 0.3.8", "futures_codec", "libp2p-core", - "log 0.4.11", + "log", "nohash-hasher", "parking_lot 0.11.0", "rand 0.7.3", @@ -3058,17 +3152,17 @@ checksum = "93c77142e3e5b18fefa7d267305c777c9cbe9b2232ec489979390100bebcc1e6" dependencies = [ "bytes 0.5.6", "curve25519-dalek 3.0.0", - "futures 0.3.5", + "futures 0.3.8", "lazy_static", "libp2p-core", - "log 0.4.11", + "log", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.1", + "sha2 0.9.2", "snow", "static_assertions", - "x25519-dalek 1.1.0", + "x25519-dalek", "zeroize", ] @@ -3078,10 +3172,10 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7257135609e8877f4d286935cbe1e572b2018946881c3e7f63054577074a7ee7" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", "libp2p-swarm", - "log 0.4.11", + "log", "rand 0.7.3", "void", "wasm-timer", @@ -3094,10 +3188,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c88d59ba3e710a8c8e0535cb4a52e9e46534924cbbea4691f8c3aaad17b58c61" dependencies = [ "bytes 0.5.6", - "futures 0.3.5", + "futures 0.3.8", "futures_codec", "libp2p-core", - "log 0.4.11", + "log", "prost", "prost-build", "unsigned-varint 0.5.1", @@ -3110,9 +3204,9 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96b3c2d5d26a9500e959a0e19743897239a6c4be78dadf99b70414301a70c006" dependencies = [ - "futures 0.3.5", - "log 0.4.11", - "pin-project 0.4.23", + "futures 0.3.8", + "log", + "pin-project 0.4.27", "rand 0.7.3", "salsa20", "sha3", @@ -3126,11 +3220,11 @@ checksum = "02ba1aa5727ccc118c09ba5111480873f2fe5608cb304e258fd12c173ecf27c9" dependencies = [ "async-trait", "bytes 0.5.6", - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", "libp2p-swarm", - "log 0.4.11", - "lru 0.6.0", + "log", + "lru 0.6.1", "minicbor", "rand 0.7.3", "smallvec 1.4.2", @@ -3145,9 +3239,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffa6fa33b16956b8a58afbfebe1406866011a1ab8960765bd36868952d7be6a1" dependencies = [ "either", - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", - "log 0.4.11", + "log", "rand 0.7.3", "smallvec 1.4.2", "void", @@ -3161,12 +3255,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d0b6f4ef48d9493607fae069deecce0579320a1f3de6cb056770b151018a9a5" dependencies = [ "async-std", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "if-addrs", "ipnet", "libp2p-core", - "log 0.4.11", + "log", "socket2", ] @@ -3177,9 +3271,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945bed3c989a1b290b5a0d4e8fa6e44e01840efb9a5ab3f0d3d174f0e451ac0e" dependencies = [ "async-std", - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", - "log 0.4.11", + "log", ] [[package]] @@ -3188,7 +3282,7 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66518a4455e15c283637b4d7b579aef928b75a3fc6c50a41e7e6b9fa86672ca0" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "js-sys", "libp2p-core", "parity-send-wrapper", @@ -3204,14 +3298,14 @@ checksum = "edc561870477523245efaaea1b6b743c70115f10c670e62bcbbe4d3153be5f0c" dependencies = [ "async-tls", "either", - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", - "log 0.4.11", + "log", "quicksink", "rustls", "rw-stream-sink", "soketto", - "url 2.1.1", + "url 2.2.0", "webpki", "webpki-roots", ] @@ -3222,7 +3316,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07c0c9b6ef7a168c2ae854170b0b6b77550599afe06cc3ac390eb45c5d9c7110" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "libp2p-core", "parking_lot 0.11.0", "thiserror", @@ -3253,18 +3347,17 @@ dependencies = [ "hmac-drbg", "rand 0.7.3", "sha2 0.8.2", - "subtle 2.2.3", + "subtle 2.3.0", "typenum", ] [[package]] name = "libz-sys" -version = "1.0.25" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" +checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" dependencies = [ "cc", - "libc", "pkg-config", "vcpkg", ] @@ -3277,9 +3370,9 @@ checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "linked_hash_set" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7c91c4c7bbeb4f2f7c4e5be11e6a05bd6830bc37249c47ce1ad86ad453ff9c" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" dependencies = [ "linked-hash-map", ] @@ -3324,20 +3417,24 @@ dependencies = [ [[package]] name = "log" -version = "0.3.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" dependencies = [ - "log 0.4.11", + "cfg-if 0.1.10", ] [[package]] -name = "log" -version = "0.4.11" +name = "loom" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" dependencies = [ "cfg-if 0.1.10", + "generator", + "scoped-tls", + "serde", + "serde_json", ] [[package]] @@ -3351,11 +3448,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111b945ac72ec09eb7bc62a0fbdc3cc6e80555a7245f52a69d3921a75b53b153" +checksum = "be716eb6878ca2263eb5d00a781aa13264a794f519fe6af4fbb2668b2d5441c0" dependencies = [ - "hashbrown 0.8.0", + "hashbrown 0.9.1", ] [[package]] @@ -3411,9 +3508,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.3.3" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] name = "memmap" @@ -3427,21 +3524,21 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", ] [[package]] name = "memory-db" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0777fbb396f666701d939e9b3876c18ada6b3581257d88631f2590bc366d8ebe" +checksum = "36f36ddb0b2cdc25d38babba472108798e3477f02be5165f038c5e393e50c57a" dependencies = [ "hash-db", - "hashbrown 0.8.0", + "hashbrown 0.8.2", "parity-util-mem", ] @@ -3494,11 +3591,12 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f" +checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" dependencies = [ "adler", + "autocfg 1.0.1", ] [[package]] @@ -3513,7 +3611,7 @@ dependencies = [ "iovec", "kernel32-sys", "libc", - "log 0.4.11", + "log", "miow 0.2.1", "net2", "slab", @@ -3527,7 +3625,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" dependencies = [ "lazycell", - "log 0.4.11", + "log", "mio", "slab", ] @@ -3538,7 +3636,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" dependencies = [ - "log 0.4.11", + "log", "mio", "miow 0.3.5", "winapi 0.3.9", @@ -3593,26 +3691,26 @@ dependencies = [ "blake2s_simd", "digest 0.9.0", "sha-1 0.9.2", - "sha2 0.9.1", + "sha2 0.9.2", "sha3", "unsigned-varint 0.5.1", ] [[package]] name = "multimap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce" +checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" [[package]] name = "multistream-select" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a6aa6e32fbaf16795142335967214b8564a7a4661eb6dc846ef343a6e00ac1" +checksum = "93faf2e41f9ee62fb01680ed48f3cc26652352327aa2e59869070358f6b7dd75" dependencies = [ "bytes 0.5.6", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "pin-project 1.0.1", "smallvec 1.4.2", "unsigned-varint 0.5.1", @@ -3630,7 +3728,7 @@ dependencies = [ "matrixmultiply", "num-complex", "num-rational", - "num-traits 0.2.12", + "num-traits 0.2.14", "rand 0.6.5", "typenum", ] @@ -3644,11 +3742,21 @@ dependencies = [ "rand 0.3.23", ] +[[package]] +name = "nb-connect" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "net2" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" +checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853" dependencies = [ "cfg-if 0.1.10", "libc", @@ -3671,15 +3779,14 @@ dependencies = [ [[package]] name = "nix" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" +checksum = "85db2feff6bf70ebc3a4793191517d5f0331100a2f10f9bf93b5e5214f32b7b7" dependencies = [ "bitflags", "cc", "cfg-if 0.1.10", "libc", - "void", ] [[package]] @@ -3710,9 +3817,9 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", "num-integer", - "num-traits 0.2.12", + "num-traits 0.2.14", ] [[package]] @@ -3721,18 +3828,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ - "autocfg 1.0.0", - "num-traits 0.2.12", + "autocfg 1.0.1", + "num-traits 0.2.14", ] [[package]] name = "num-integer" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "autocfg 1.0.0", - "num-traits 0.2.12", + "autocfg 1.0.1", + "num-traits 0.2.14", ] [[package]] @@ -3741,10 +3848,10 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", "num-bigint", "num-integer", - "num-traits 0.2.12", + "num-traits 0.2.14", ] [[package]] @@ -3753,16 +3860,16 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" dependencies = [ - "num-traits 0.2.12", + "num-traits 0.2.14", ] [[package]] name = "num-traits" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.0.0", + "autocfg 1.0.1", "libm", ] @@ -3793,6 +3900,12 @@ dependencies = [ "wasmparser 0.57.0", ] +[[package]] +name = "object" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" + [[package]] name = "once_cell" version = "0.1.8" @@ -3804,9 +3917,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.4.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad" +checksum = "f53cef67919d7d247eb9a2f128ca9e522789967ef1eb4ccd8c71a95a8aedf596" dependencies = [ "parking_lot 0.11.0", ] @@ -3829,6 +3942,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +[[package]] +name = "output_vt100" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "owning_ref" version = "0.4.1" @@ -3847,7 +3969,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -3863,11 +3985,11 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "sp-authorship", "sp-inherents", @@ -3878,7 +4000,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3903,7 +4025,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3917,7 +4039,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3933,7 +4055,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3948,7 +4070,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3963,7 +4085,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3984,7 +4106,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4000,7 +4122,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4020,7 +4142,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4037,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4051,7 +4173,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4067,7 +4189,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4081,7 +4203,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4096,7 +4218,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4117,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4133,7 +4255,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4146,7 +4268,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "enumflags2", "frame-support", @@ -4161,7 +4283,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4176,11 +4298,11 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "pallet-timestamp", "parity-scale-codec", "serde", @@ -4196,7 +4318,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4212,7 +4334,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4226,7 +4348,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4248,7 +4370,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4259,7 +4381,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4273,12 +4395,12 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "serde", "sp-inherents", @@ -4291,7 +4413,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "frame-system", @@ -4308,7 +4430,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4326,7 +4448,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-support", "parity-scale-codec", @@ -4339,7 +4461,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4476,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4370,7 +4492,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4391,19 +4513,19 @@ dependencies = [ "blake2-rfc", "crc32fast", "libc", - "log 0.4.11", + "log", "memmap", "parking_lot 0.10.2", ] [[package]] name = "parity-multiaddr" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7ad66970bbab360c97179b60906e2dc4aef1f7fca8ab4e5c5db8c97b16814a" +checksum = "22fe99b938abd57507e37f8d4ef30cd74b33c71face2809b37b8beb71bab15ab" dependencies = [ "arrayref", - "bs58", + "bs58 0.4.0", "byteorder", "data-encoding", "multihash", @@ -4411,7 +4533,7 @@ dependencies = [ "serde", "static_assertions", "unsigned-varint 0.5.1", - "url 2.1.1", + "url 2.2.0", ] [[package]] @@ -4420,7 +4542,7 @@ version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c740e5fbcb6847058b40ac7e5574766c6388f585e184d769910fe0d3a2ca861" dependencies = [ - "arrayvec 0.5.1", + "arrayvec 0.5.2", "bitvec", "byte-slice-cast", "parity-scale-codec-derive", @@ -4452,9 +4574,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "libc", - "log 0.4.11", + "log", "mio-named-pipes", "miow 0.3.5", "rand 0.7.3", @@ -4471,8 +4593,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297ff91fa36aec49ce183484b102f6b75b46776822bd81525bfc4cc9b0dd0f5c" dependencies = [ "cfg-if 0.1.10", - "hashbrown 0.8.0", - "impl-trait-for-tuples", + "hashbrown 0.8.2", + "impl-trait-for-tuples 0.1.3", "jemallocator", "parity-util-mem-derive", "parking_lot 0.10.2", @@ -4507,13 +4629,13 @@ dependencies = [ "byteorder", "bytes 0.4.12", "httparse", - "log 0.4.11", + "log", "mio", "mio-extras", "rand 0.7.3", "sha-1 0.8.2", "slab", - "url 2.1.1", + "url 2.2.0", ] [[package]] @@ -4730,11 +4852,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.23" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca4433fff2ae79342e497d9f8ee990d174071408f28f726d6d83af93e58e48aa" +checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" dependencies = [ - "pin-project-internal 0.4.23", + "pin-project-internal 0.4.27", ] [[package]] @@ -4748,9 +4870,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "0.4.23" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" +checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -4770,9 +4892,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.1.7" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715" +checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-utils" @@ -4782,9 +4904,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" [[package]] name = "platforms" @@ -4798,8 +4920,8 @@ version = "0.8.26" dependencies = [ "assert_cmd", "color-eyre", - "futures 0.3.5", - "nix 0.17.0", + "futures 0.3.8", + "nix 0.19.0", "parity-util-mem", "polkadot-cli", "polkadot-service", @@ -4813,9 +4935,9 @@ version = "0.1.0" dependencies = [ "assert_matches", "bitvec", - "env_logger 0.7.1", - "futures 0.3.5", - "log 0.4.11", + "env_logger 0.8.1", + "futures 0.3.8", + "log", "maplit", "parity-scale-codec", "polkadot-node-network-protocol", @@ -4835,10 +4957,10 @@ name = "polkadot-availability-distribution" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.7.1", - "futures 0.3.5", + "env_logger 0.8.1", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -4860,7 +4982,7 @@ name = "polkadot-cli" version = "0.8.26" dependencies = [ "frame-benchmarking-cli", - "log 0.4.11", + "log", "polkadot-parachain", "polkadot-service", "sc-cli", @@ -4881,10 +5003,10 @@ name = "polkadot-collator-protocol" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.7.1", - "futures 0.3.5", + "env_logger 0.8.1", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -4924,10 +5046,10 @@ version = "0.1.0" dependencies = [ "assert_matches", "async-trait", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.0", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -4943,8 +5065,8 @@ dependencies = [ name = "polkadot-node-collation-generation" version = "0.1.0" dependencies = [ - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -4960,13 +5082,13 @@ name = "polkadot-node-core-av-store" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.7.1", - "futures 0.3.5", + "env_logger 0.8.1", + "futures 0.3.8", "futures-timer 3.0.2", "kvdb", "kvdb-memorydb", "kvdb-rocksdb", - "log 0.4.11", + "log", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-subsystem", @@ -4986,8 +5108,8 @@ version = "0.1.0" dependencies = [ "assert_matches", "bitvec", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5008,8 +5130,8 @@ name = "polkadot-node-core-bitfield-signing" version = "0.1.0" dependencies = [ "derive_more", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", @@ -5022,8 +5144,8 @@ dependencies = [ name = "polkadot-node-core-candidate-selection" version = "0.1.0" dependencies = [ - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", @@ -5036,8 +5158,8 @@ name = "polkadot-node-core-candidate-validation" version = "0.1.0" dependencies = [ "assert_matches", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5053,7 +5175,7 @@ dependencies = [ name = "polkadot-node-core-chain-api" version = "0.1.0" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "maplit", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5067,9 +5189,9 @@ dependencies = [ name = "polkadot-node-core-proposer" version = "0.1.0" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", @@ -5091,9 +5213,9 @@ name = "polkadot-node-core-provisioner" version = "0.1.0" dependencies = [ "bitvec", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", @@ -5106,7 +5228,7 @@ dependencies = [ name = "polkadot-node-core-runtime-api" version = "0.1.0" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", @@ -5129,7 +5251,7 @@ dependencies = [ name = "polkadot-node-primitives" version = "0.1.0" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "parity-scale-codec", "polkadot-primitives", "polkadot-statement-table", @@ -5144,12 +5266,12 @@ dependencies = [ "assert_matches", "async-trait", "derive_more", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", - "parking_lot 0.10.2", - "pin-project 0.4.23", + "parking_lot 0.11.0", + "pin-project 1.0.1", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem-test-helpers", @@ -5167,12 +5289,12 @@ name = "polkadot-node-subsystem-test-helpers" version = "0.1.0" dependencies = [ "async-trait", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", - "parking_lot 0.10.2", - "pin-project 0.4.23", + "parking_lot 0.11.0", + "pin-project 1.0.1", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -5190,13 +5312,13 @@ version = "0.1.0" dependencies = [ "assert_matches", "async-trait", - "env_logger 0.7.1", - "futures 0.3.5", + "env_logger 0.8.1", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", - "parking_lot 0.10.2", - "pin-project 0.4.23", + "parking_lot 0.11.0", + "pin-project 1.0.1", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5216,10 +5338,10 @@ version = "0.1.0" dependencies = [ "async-trait", "femme", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "kv-log-macro", - "log 0.4.11", + "log", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5235,10 +5357,10 @@ name = "polkadot-parachain" version = "0.8.26" dependencies = [ "derive_more", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.0", "polkadot-core-primitives", "sc-executor", "serde", @@ -5257,8 +5379,8 @@ name = "polkadot-pov-distribution" version = "0.1.0" dependencies = [ "assert_matches", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5333,9 +5455,9 @@ dependencies = [ "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "hex-literal 0.2.1", + "hex-literal", "libsecp256k1", - "log 0.3.9", + "log", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -5391,7 +5513,7 @@ dependencies = [ "sp-version", "static_assertions", "substrate-wasm-builder-runner", - "tiny-keccak 1.5.0", + "tiny-keccak", "trie-db", ] @@ -5403,9 +5525,9 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "hex-literal 0.2.1", + "hex-literal", "libsecp256k1", - "log 0.3.9", + "log", "pallet-authorship", "pallet-babe", "pallet-balances", @@ -5449,10 +5571,10 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "futures 0.3.5", - "hex-literal 0.2.1", + "futures 0.3.8", + "hex-literal", "libsecp256k1", - "log 0.4.11", + "log", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -5496,17 +5618,16 @@ dependencies = [ "env_logger 0.8.1", "frame-benchmarking", "frame-system-rpc-runtime-api", - "futures 0.3.5", - "hex-literal 0.2.1", + "futures 0.3.8", + "hex-literal", "kusama-runtime", "lazy_static", - "log 0.4.11", + "log", "pallet-babe", "pallet-im-online", "pallet-staking", "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "parking_lot 0.9.0", + "parking_lot 0.11.0", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", "polkadot-collator-protocol", @@ -5574,11 +5695,11 @@ dependencies = [ name = "polkadot-statement-distribution" version = "0.1.0" dependencies = [ - "arrayvec 0.5.1", + "arrayvec 0.5.2", "assert_matches", - "futures 0.3.5", + "futures 0.3.8", "indexmap", - "log 0.4.11", + "log", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5635,9 +5756,9 @@ dependencies = [ "frame-support", "frame-system", "frame-system-rpc-runtime-api", - "hex-literal 0.2.1", + "hex-literal", "libsecp256k1", - "log 0.3.9", + "log", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -5682,7 +5803,7 @@ dependencies = [ "sp-trie", "sp-version", "substrate-wasm-builder-runner", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -5691,10 +5812,10 @@ version = "0.8.26" dependencies = [ "frame-benchmarking", "frame-system", - "futures 0.1.29", - "futures 0.3.5", + "futures 0.1.30", + "futures 0.3.8", "hex", - "log 0.4.11", + "log", "pallet-balances", "pallet-staking", "pallet-transaction-payment", @@ -5735,15 +5856,15 @@ dependencies = [ "substrate-test-client", "substrate-test-utils", "tempfile", - "tokio 0.2.21", + "tokio 0.2.22", ] [[package]] name = "polkadot-validation" version = "0.8.26" dependencies = [ - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "parity-scale-codec", "polkadot-parachain", "polkadot-primitives", @@ -5768,31 +5889,31 @@ dependencies = [ [[package]] name = "polling" -version = "1.1.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0720e0b9ea9d52451cf29d3413ba8a9303f8815d9d9653ef70e03ff73e65566" +checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" dependencies = [ "cfg-if 0.1.10", "libc", - "log 0.4.11", - "wepoll-sys-stjepang", + "log", + "wepoll-sys", "winapi 0.3.9", ] [[package]] name = "poly1305" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b42192ab143ed7619bf888a7f9c6733a9a2153b218e2cd557cfdb52fbf9bb1" +checksum = "22ce46de8e53ee414ca4d02bfefac75d8c12fba948b76622a40b4be34dfce980" dependencies = [ "universal-hash", ] [[package]] name = "polyval" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a50142b55ab3ed0e9f68dfb3709f1d90d29da24e91033f28b96330643107dc" +checksum = "a5884790f1ce3553ad55fec37b5aaac5882e0e845a2612df744d6c85c9bf046c" dependencies = [ "cfg-if 0.1.10", "universal-hash", @@ -5800,15 +5921,15 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "predicates" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030" +checksum = "96bfead12e90dccead362d62bb2c90a5f6fc4584963645bc7f71a735e0b0735a" dependencies = [ "difference", "predicates-core", @@ -5832,12 +5953,14 @@ dependencies = [ [[package]] name = "pretty_assertions" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a029430f0d744bc3d15dd474d591bed2402b645d024583082b9f63bb936dac6" +checksum = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427" dependencies = [ "ansi_term 0.11.0", + "ctor", "difference", + "output_vt100", ] [[package]] @@ -5854,18 +5977,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10d4b51f154c8a7fb96fd6dad097cb74b863943ec010ac94b9fd1be8861fe1e" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ "toml", ] [[package]] name = "proc-macro-error" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", @@ -5876,22 +5999,20 @@ dependencies = [ [[package]] name = "proc-macro-error-attr" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", - "syn-mid", "version_check", ] [[package]] name = "proc-macro-hack" -version = "0.5.16" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro-nested" @@ -5950,7 +6071,7 @@ dependencies = [ "bytes 0.5.6", "heck", "itertools 0.8.2", - "log 0.4.11", + "log", "multimap", "petgraph", "prost", @@ -5989,7 +6110,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f53bc2558e8376358ebdc28301546471d67336584f6438ed4b7c7457a055fd7" dependencies = [ "byteorder", - "log 0.4.11", + "log", "parity-wasm", ] @@ -6101,7 +6222,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.15", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", @@ -6150,7 +6271,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.15", ] [[package]] @@ -6253,25 +6374,25 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" +checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" dependencies = [ - "autocfg 1.0.0", - "crossbeam-deque", + "autocfg 1.0.1", + "crossbeam-deque 0.8.0", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.7.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" +checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" dependencies = [ - "crossbeam-deque", - "crossbeam-queue", - "crossbeam-utils", + "crossbeam-channel", + "crossbeam-deque 0.8.0", + "crossbeam-utils 0.8.0", "lazy_static", "num_cpus", ] @@ -6287,17 +6408,17 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_users" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" dependencies = [ - "getrandom", + "getrandom 0.1.15", "redox_syscall", "rust-argon2", ] @@ -6313,18 +6434,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745c1787167ddae5569661d5ffb8b25ae5fedbf46717eaa92d652221cec72623" +checksum = "e17626b2f4bcf35b84bf379072a66e28cfe5c3c6ae58b38e4914bb8891dabece" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d21b475ab879ef0e315ad99067fa25778c3b0377f57f1b00207448dac1a3144" +checksum = "0c523ccaed8ac4b0288948849a350b37d3035827413c458b6a40ddb614bb4f72" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -6337,16 +6458,16 @@ version = "0.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ba8aaf5fe7cf307c6dbdaeed85478961d29e25e3bee5169e11b92fa9f027a8" dependencies = [ - "log 0.4.11", + "log", "rustc-hash", "smallvec 1.4.2", ] [[package]] name = "regex" -version = "1.3.9" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" dependencies = [ "aho-corasick", "memchr", @@ -6366,9 +6487,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.18" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" [[package]] name = "region" @@ -6405,7 +6526,7 @@ checksum = "952cd6b98c85bbc30efa1ba5783b8abf12fec8b3287ffa52605b9432313e34e4" dependencies = [ "cc", "libc", - "once_cell 1.4.1", + "once_cell 1.5.1", "spin", "untrusted", "web-sys", @@ -6482,21 +6603,21 @@ dependencies = [ [[package]] name = "rust-argon2" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" +checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19" dependencies = [ - "base64 0.11.0", + "base64 0.12.3", "blake2b_simd", "constant_time_eq", - "crossbeam-utils", + "crossbeam-utils 0.7.2", ] [[package]] name = "rustc-demangle" -version = "0.1.16" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" [[package]] name = "rustc-hash" @@ -6527,12 +6648,12 @@ dependencies = [ [[package]] name = "rustls" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac94b333ee2aac3284c5b8a1b7fb4dd11cba88c244e3fe33cdbd047af0eb693" +checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81" dependencies = [ "base64 0.12.3", - "log 0.4.11", + "log", "ring", "sct", "webpki", @@ -6556,8 +6677,8 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" dependencies = [ - "futures 0.3.5", - "pin-project 0.4.23", + "futures 0.3.8", + "pin-project 0.4.27", "static_assertions", ] @@ -6582,22 +6703,22 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f47b10fa80f6969bbbd9c8e7cc998f082979d402a9e10579e2303a87955395" dependencies = [ - "stream-cipher 0.7.1", + "stream-cipher", ] [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "async-trait", "bytes 0.5.6", "derive_more", "either", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "libp2p", - "log 0.4.11", + "log", "parity-scale-codec", "prost", "prost-build", @@ -6618,11 +6739,11 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", "sc-block-builder", "sc-client-api", @@ -6642,7 +6763,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6659,9 +6780,9 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "sc-chain-spec-derive", "sc-consensus-babe", @@ -6680,7 +6801,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6691,17 +6812,17 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "ansi_term 0.12.1", "atty", "bip39", "chrono", "fdlimit", - "futures 0.3.5", + "futures 0.3.8", "hex", "libp2p", - "log 0.4.11", + "log", "names", "parity-scale-codec", "rand 0.7.3", @@ -6726,7 +6847,7 @@ dependencies = [ "sp-version", "structopt", "thiserror", - "tokio 0.2.21", + "tokio 0.2.22", "tracing", "tracing-log", "tracing-subscriber", @@ -6735,7 +6856,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6746,16 +6867,16 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", "fnv", - "futures 0.3.5", + "futures 0.3.8", "hash-db", - "hex-literal 0.3.1", + "hex-literal", "kvdb", "lazy_static", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", "sc-executor", @@ -6783,7 +6904,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "blake2-rfc", "hash-db", @@ -6791,7 +6912,7 @@ dependencies = [ "kvdb-memorydb", "kvdb-rocksdb", "linked-hash-map", - "log 0.4.11", + "log", "parity-db", "parity-scale-codec", "parity-util-mem", @@ -6813,7 +6934,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6824,17 +6945,17 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", "fork-tree", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "merlin", "num-bigint", "num-rational", - "num-traits 0.2.12", + "num-traits 0.2.14", "parity-scale-codec", "parking_lot 0.10.2", "pdqselect", @@ -6869,10 +6990,10 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "futures 0.3.5", + "futures 0.3.8", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", @@ -6893,7 +7014,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6906,11 +7027,11 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", "sc-client-api", @@ -6931,9 +7052,9 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "sc-client-api", "sp-authorship", "sp-consensus", @@ -6945,12 +7066,12 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", "lazy_static", "libsecp256k1", - "log 0.4.11", + "log", "parity-scale-codec", "parity-wasm", "parking_lot 0.10.2", @@ -6974,10 +7095,10 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "log 0.4.11", + "log", "parity-scale-codec", "parity-wasm", "sp-allocator", @@ -6991,9 +7112,9 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "parity-scale-codec", "sc-executor-common", "sp-allocator", @@ -7006,9 +7127,9 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "parity-scale-codec", "parity-wasm", "pwasm-utils", @@ -7024,17 +7145,17 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", "finality-grandpa", "fork-tree", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", - "pin-project 0.4.23", + "pin-project 0.4.27", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -7061,16 +7182,16 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", "finality-grandpa", - "futures 0.3.5", + "futures 0.3.8", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", "jsonrpc-pubsub", - "log 0.4.11", + "log", "parity-scale-codec", "sc-client-api", "sc-finality-grandpa", @@ -7085,11 +7206,11 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "ansi_term 0.12.1", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "parity-util-mem", "sc-client-api", "sc-network", @@ -7103,11 +7224,11 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "async-trait", "derive_more", - "futures 0.3.5", + "futures 0.3.8", "futures-util", "hex", "merlin", @@ -7117,13 +7238,13 @@ dependencies = [ "sp-application-crypto", "sp-core", "sp-keystore", - "subtle 2.2.3", + "subtle 2.3.0", ] [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "hash-db", "lazy_static", @@ -7142,19 +7263,19 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "async-std", "async-trait", "bitflags", - "bs58", + "bs58 0.3.1", "bytes 0.5.6", "derive_more", "either", "erased-serde", "fnv", "fork-tree", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "futures_codec", "hex", @@ -7162,12 +7283,12 @@ dependencies = [ "libp2p", "linked-hash-map", "linked_hash_set", - "log 0.4.11", + "log", "lru 0.4.3", "nohash-hasher", "parity-scale-codec", "parking_lot 0.10.2", - "pin-project 0.4.23", + "pin-project 0.4.27", "prost", "prost-build", "rand 0.7.3", @@ -7196,12 +7317,12 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "libp2p", - "log 0.4.11", + "log", "lru 0.4.3", "sc-network", "sp-runtime", @@ -7211,15 +7332,15 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "bytes 0.5.6", "fnv", - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "hyper 0.13.6", + "hyper 0.13.9", "hyper-rustls", - "log 0.4.11", + "log", "num_cpus", "parity-scale-codec", "parking_lot 0.10.2", @@ -7238,11 +7359,11 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "libp2p", - "log 0.4.11", + "log", "serde_json", "sp-utils", "wasm-timer", @@ -7251,22 +7372,22 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "substrate-prometheus-endpoint", ] [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "hash-db", "jsonrpc-core", "jsonrpc-pubsub", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", "sc-block-builder", @@ -7293,15 +7414,15 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "futures 0.3.5", + "futures 0.3.8", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", "jsonrpc-pubsub", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", "serde", @@ -7317,15 +7438,15 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.1.29", + "futures 0.1.30", "jsonrpc-core", "jsonrpc-http-server", "jsonrpc-ipc-server", "jsonrpc-pubsub", "jsonrpc-ws-server", - "log 0.4.11", + "log", "serde", "serde_json", "sp-runtime", @@ -7335,23 +7456,23 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", "directories", "exit-future", - "futures 0.1.29", - "futures 0.3.5", + "futures 0.1.30", + "futures 0.3.8", "futures-timer 3.0.2", "hash-db", "jsonrpc-core", "jsonrpc-pubsub", "lazy_static", - "log 0.4.11", + "log", "parity-scale-codec", "parity-util-mem", "parking_lot 0.10.2", - "pin-project 0.4.23", + "pin-project 0.4.27", "rand 0.7.3", "sc-block-builder", "sc-chain-spec", @@ -7399,9 +7520,9 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "parity-scale-codec", "parity-util-mem", "parity-util-mem-derive", @@ -7413,7 +7534,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7432,14 +7553,14 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "libp2p", - "log 0.4.11", + "log", "parking_lot 0.10.2", - "pin-project 0.4.23", + "pin-project 0.4.27", "rand 0.7.3", "serde", "slog", @@ -7453,10 +7574,10 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "erased-serde", - "log 0.4.11", + "log", "parking_lot 0.10.2", "rustc-hash", "sc-telemetry", @@ -7472,12 +7593,12 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "futures 0.3.5", + "futures 0.3.8", "linked-hash-map", - "log 0.4.11", + "log", "parity-util-mem", "parking_lot 0.10.2", "retain_mut", @@ -7493,13 +7614,13 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "futures 0.3.5", + "futures 0.3.8", "futures-diagnose", "intervalier", - "log 0.4.11", + "log", "parity-scale-codec", "parity-util-mem", "parking_lot 0.10.2", @@ -7533,14 +7654,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" dependencies = [ "arrayref", - "arrayvec 0.5.1", + "arrayvec 0.5.2", "curve25519-dalek 2.1.0", - "getrandom", + "getrandom 0.1.15", "merlin", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", - "subtle 2.2.3", + "subtle 2.3.0", "zeroize", ] @@ -7564,18 +7685,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scroll" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb2332cb595d33f7edd5700f4cbf94892e680c7f0ae56adab58a35190b66cb1" +checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" dependencies = [ "scroll_derive", ] [[package]] name = "scroll_derive" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e367622f934864ffa1c704ba2b82280aab856e3d8213c84c5720257eb34b15b9" +checksum = "b12bd20b94c7cdfda8c7ba9b92ad0d9a56e3fa018c25fca83b51aa664c9b4c0d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -7639,12 +7760,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[package]] -name = "send_wrapper" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4" - [[package]] name = "send_wrapper" version = "0.3.0" @@ -7733,12 +7848,12 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1" +checksum = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8" dependencies = [ "block-buffer 0.9.0", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "cpuid-bool", "digest 0.9.0", "opaque-debug 0.3.0", @@ -7758,11 +7873,12 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.0.9" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06d5a3f5166fb5b42a5439f2eee8b9de149e235961e3eb21c5808fc3ea17ff3e" +checksum = "7b4921be914e16899a80adefb821f8ddb7974e3f1250223575a44ed994882127" dependencies = [ "lazy_static", + "loom", ] [[package]] @@ -7774,7 +7890,7 @@ dependencies = [ "cfg-if 0.1.10", "enum_primitive", "libc", - "log 0.4.11", + "log", "memrange", "nix 0.10.0", "quick-error 1.2.3", @@ -7803,19 +7919,18 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "signal-hook-registry" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" +checksum = "ce32ea0c6c56d5eacaeb814fbed9960547021d3edd010ded1425f180536b20ab" dependencies = [ - "arc-swap", "libc", ] [[package]] name = "signature" -version = "1.1.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65211b7b6fc3f14ff9fc7a2011a434e3e6880585bd2e9e9396315ae24cbf7852" +checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210" [[package]] name = "slab" @@ -7884,9 +7999,9 @@ checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252" [[package]] name = "snow" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32bf8474159a95551661246cda4976e89356999e3cbfef36f493dacc3fae1e8e" +checksum = "795dd7aeeee24468e5a32661f6d27f7b5cbed802031b2d7640c7b10f8fb2dd50" dependencies = [ "aes-gcm", "blake2", @@ -7895,16 +8010,16 @@ dependencies = [ "rand_core 0.5.1", "ring", "rustc_version", - "sha2 0.9.1", - "subtle 2.2.3", - "x25519-dalek 0.6.0", + "sha2 0.9.2", + "subtle 2.3.0", + "x25519-dalek", ] [[package]] name = "socket2" -version = "0.3.12" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918" +checksum = "7fd8b795c389288baa5f355489c65e71fd48a02104600d15c4cfbc561e9e429d" dependencies = [ "cfg-if 0.1.10", "libc", @@ -7914,27 +8029,27 @@ dependencies = [ [[package]] name = "soketto" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85457366ae0c6ce56bf05a958aef14cd38513c236568618edbcd9a8c52cb80b0" +checksum = "b5c71ed3d54db0a699f4948e1bb3e45b450fa31fe602621dee6680361d569c88" dependencies = [ "base64 0.12.3", "bytes 0.5.6", "flate2", - "futures 0.3.5", + "futures 0.3.8", "httparse", - "log 0.4.11", + "log", "rand 0.7.3", - "sha-1 0.8.2", + "sha-1 0.9.2", ] [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "log 0.4.11", + "log", "sp-core", "sp-std", "sp-wasm-interface", @@ -7943,7 +8058,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "hash-db", "parity-scale-codec", @@ -7958,7 +8073,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7970,7 +8085,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "serde", @@ -7982,10 +8097,10 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "integer-sqrt", - "num-traits 0.2.12", + "num-traits 0.2.14", "parity-scale-codec", "serde", "sp-debug-derive", @@ -7995,7 +8110,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8007,7 +8122,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8018,7 +8133,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8030,9 +8145,9 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "lru 0.4.3", "parity-scale-codec", "parking_lot 0.10.2", @@ -8047,7 +8162,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "serde", "serde_json", @@ -8056,12 +8171,12 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", "libp2p", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", "serde", @@ -8082,7 +8197,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "merlin", "parity-scale-codec", @@ -8102,7 +8217,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8111,7 +8226,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8123,23 +8238,23 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "base58", "blake2-rfc", "byteorder", "dyn-clonable", "ed25519-dalek", - "futures 0.3.5", + "futures 0.3.8", "hash-db", "hash256-std-hasher", "hex", "impl-serde", "lazy_static", "libsecp256k1", - "log 0.4.11", + "log", "merlin", - "num-traits 0.2.12", + "num-traits 0.2.14", "parity-scale-codec", "parity-util-mem", "parking_lot 0.10.2", @@ -8158,7 +8273,7 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "tiny-keccak 2.0.2", + "tiny-keccak", "twox-hash", "wasmi", "zeroize", @@ -8167,7 +8282,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8176,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8186,7 +8301,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "environmental", "parity-scale-codec", @@ -8197,10 +8312,10 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "finality-grandpa", - "log 0.4.11", + "log", "parity-scale-codec", "serde", "sp-api", @@ -8214,7 +8329,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8226,12 +8341,12 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "hash-db", "libsecp256k1", - "log 0.4.11", + "log", "parity-scale-codec", "parking_lot 0.10.2", "sp-core", @@ -8250,7 +8365,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "lazy_static", "sp-core", @@ -8261,11 +8376,11 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "async-trait", "derive_more", - "futures 0.3.5", + "futures 0.3.8", "merlin", "parity-scale-codec", "parking_lot 0.10.2", @@ -8277,7 +8392,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "serde", @@ -8289,7 +8404,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8300,7 +8415,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "sp-api", "sp-core", @@ -8310,16 +8425,16 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "backtrace", - "log 0.4.11", + "log", ] [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "serde", "sp-core", @@ -8328,12 +8443,12 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "either", "hash256-std-hasher", - "impl-trait-for-tuples", - "log 0.4.11", + "impl-trait-for-tuples 0.1.3", + "log", "parity-scale-codec", "parity-util-mem", "paste", @@ -8350,7 +8465,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8366,7 +8481,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "Inflector", "proc-macro-crate", @@ -8378,7 +8493,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "serde", "serde_json", @@ -8387,7 +8502,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8400,7 +8515,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8410,11 +8525,11 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "hash-db", - "log 0.4.11", - "num-traits 0.2.12", + "log", + "num-traits 0.2.14", "parity-scale-codec", "parking_lot 0.10.2", "rand 0.7.3", @@ -8432,12 +8547,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8450,9 +8565,9 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "sp-core", "sp-externalities", "sp-io", @@ -8463,9 +8578,9 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "sp-api", "sp-inherents", @@ -8477,9 +8592,9 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "log 0.4.11", + "log", "parity-scale-codec", "sp-std", "tracing", @@ -8490,11 +8605,11 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "derive_more", - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "parity-scale-codec", "serde", "sp-api", @@ -8505,7 +8620,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "hash-db", "memory-db", @@ -8519,9 +8634,9 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-core", "futures-timer 3.0.2", "lazy_static", @@ -8531,7 +8646,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8543,9 +8658,9 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "sp-std", "wasmi", @@ -8559,9 +8674,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "stable_deref_trait" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "static_assertions" @@ -8578,23 +8693,14 @@ dependencies = [ "rand 0.5.6", ] -[[package]] -name = "stream-cipher" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f8ed9974042b8c3672ff3030a69fcc03b74c47c3d1ecb7755e8a3626011e88" -dependencies = [ - "generic-array 0.14.2", -] - [[package]] name = "stream-cipher" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c80e15f898d8d8f25db24c253ea615cc14acf418ff307822995814e7d42cfa89" dependencies = [ - "block-cipher 0.8.0", - "generic-array 0.14.2", + "block-cipher", + "generic-array 0.14.4", ] [[package]] @@ -8626,9 +8732,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.15" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de2f5e239ee807089b62adce73e48c625e0ed80df02c7ab3f068f5db5281065c" +checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8" dependencies = [ "clap", "lazy_static", @@ -8637,9 +8743,9 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.8" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510413f9de616762a4fbeab62509bf15c729603b72d7cd71280fbca431b1c118" +checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8" dependencies = [ "heck", "proc-macro-error", @@ -8685,18 +8791,18 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "chrono", "console_error_panic_hook", "console_log", - "futures 0.1.29", - "futures 0.3.5", + "futures 0.1.30", + "futures 0.3.8", "futures-timer 3.0.2", "js-sys", "kvdb-web", "libp2p-wasm-ext", - "log 0.4.11", + "log", "rand 0.6.5", "rand 0.7.3", "sc-chain-spec", @@ -8711,7 +8817,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "platforms", ] @@ -8719,14 +8825,14 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "frame-system-rpc-runtime-api", - "futures 0.3.5", + "futures 0.3.8", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", - "log 0.4.11", + "log", "parity-scale-codec", "sc-client-api", "sc-rpc-api", @@ -8742,24 +8848,24 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.6", - "log 0.4.11", + "hyper 0.13.9", + "log", "prometheus", - "tokio 0.2.21", + "tokio 0.2.22", ] [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.1.29", - "futures 0.3.5", + "futures 0.1.30", + "futures 0.3.8", "hash-db", "hex", "parity-scale-codec", @@ -8783,17 +8889,17 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "substrate-test-utils-derive", - "tokio 0.2.21", + "tokio 0.2.22", ] [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#095d0f06a42b66a92f28d097499a69e3f170d59d" +source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -8814,9 +8920,9 @@ checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" [[package]] name = "subtle" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1" +checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" [[package]] name = "syn" @@ -8840,17 +8946,6 @@ dependencies = [ "unicode-xid 0.2.1", ] -[[package]] -name = "syn-mid" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" -dependencies = [ - "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", -] - [[package]] name = "synstructure" version = "0.12.4" @@ -8908,16 +9003,16 @@ dependencies = [ "sp-io", "sp-std", "substrate-wasm-builder-runner", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] name = "test-parachain-adder-collator" version = "0.7.26" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "futures-timer 3.0.2", - "log 0.4.11", + "log", "parity-scale-codec", "polkadot-cli", "polkadot-node-primitives", @@ -8934,7 +9029,7 @@ dependencies = [ "structopt", "substrate-test-utils", "test-parachain-adder", - "tokio 0.2.21", + "tokio 0.2.22", ] [[package]] @@ -8953,7 +9048,7 @@ dependencies = [ "sp-core", "test-parachain-adder", "test-parachain-halt", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -8978,18 +9073,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "318234ffa22e0920fe9a40d7b8369b5f649d490980cf7aadcf1eb91594869b42" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae2447b6282786c3493999f40a9be2a6ad20cb8bd268b0a0dbf5a065535c0ab" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -9016,11 +9111,12 @@ dependencies = [ [[package]] name = "time" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi 0.3.9", ] @@ -9032,7 +9128,7 @@ checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2" dependencies = [ "failure", "hmac", - "once_cell 1.4.1", + "once_cell 1.5.1", "pbkdf2", "rand 0.7.3", "rustc-hash", @@ -9042,27 +9138,27 @@ dependencies = [ [[package]] name = "tiny-keccak" -version = "1.5.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ "crunchy", ] [[package]] -name = "tiny-keccak" -version = "2.0.2" +name = "tinyvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +checksum = "b78a366903f506d2ad52ca8dc552102ffdd3e937ba8a227f024dc1d1eae28575" dependencies = [ - "crunchy", + "tinyvec_macros", ] [[package]] -name = "tinyvec" -version = "0.3.3" +name = "tinyvec_macros" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" @@ -9071,7 +9167,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "mio", "num_cpus", "tokio-codec", @@ -9090,9 +9186,9 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58" +checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd" dependencies = [ "bytes 0.5.6", "fnv", @@ -9119,7 +9215,7 @@ checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ "bytes 0.4.12", "either", - "futures 0.1.29", + "futures 0.1.30", ] [[package]] @@ -9129,7 +9225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "tokio-io", ] @@ -9139,7 +9235,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ - "futures 0.1.29", + "futures 0.1.30", "tokio-executor 0.1.10", ] @@ -9149,8 +9245,8 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ - "crossbeam-utils", - "futures 0.1.29", + "crossbeam-utils 0.7.2", + "futures 0.1.30", ] [[package]] @@ -9170,7 +9266,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" dependencies = [ - "futures 0.1.29", + "futures 0.1.30", "tokio-io", "tokio-threadpool", ] @@ -9182,8 +9278,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", - "log 0.4.11", + "futures 0.1.30", + "log", ] [[package]] @@ -9204,7 +9300,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "mio", "mio-named-pipes", "tokio 0.1.22", @@ -9216,10 +9312,10 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ - "crossbeam-utils", - "futures 0.1.29", + "crossbeam-utils 0.7.2", + "futures 0.1.30", "lazy_static", - "log 0.4.11", + "log", "mio", "num_cpus", "parking_lot 0.9.0", @@ -9231,13 +9327,13 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228139ddd4fea3fa345a29233009635235833e52807af7ea6448ead03890d6a9" +checksum = "e12831b255bcfa39dc0436b01e19fea231a37db570686c06ee72c423479f889a" dependencies = [ "futures-core", "rustls", - "tokio 0.2.21", + "tokio 0.2.22", "webpki", ] @@ -9247,7 +9343,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" dependencies = [ - "futures 0.1.29", + "futures 0.1.30", ] [[package]] @@ -9257,7 +9353,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" dependencies = [ "fnv", - "futures 0.1.29", + "futures 0.1.30", ] [[package]] @@ -9278,7 +9374,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "iovec", "mio", "tokio-io", @@ -9291,12 +9387,12 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" dependencies = [ - "crossbeam-deque", + "crossbeam-deque 0.7.3", "crossbeam-queue", - "crossbeam-utils", - "futures 0.1.29", + "crossbeam-utils 0.7.2", + "futures 0.1.30", "lazy_static", - "log 0.4.11", + "log", "num_cpus", "slab", "tokio-executor 0.1.10", @@ -9308,8 +9404,8 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ - "crossbeam-utils", - "futures 0.1.29", + "crossbeam-utils 0.7.2", + "futures 0.1.30", "slab", "tokio-executor 0.1.10", ] @@ -9321,8 +9417,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", - "log 0.4.11", + "futures 0.1.30", + "log", "mio", "tokio-codec", "tokio-io", @@ -9336,10 +9432,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ "bytes 0.4.12", - "futures 0.1.29", + "futures 0.1.30", "iovec", "libc", - "log 0.4.11", + "log", "mio", "mio-uds", "tokio-codec", @@ -9356,16 +9452,16 @@ dependencies = [ "bytes 0.5.6", "futures-core", "futures-sink", - "log 0.4.11", + "log", "pin-project-lite", - "tokio 0.2.21", + "tokio 0.2.22", ] [[package]] name = "toml" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" +checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" dependencies = [ "serde", ] @@ -9383,6 +9479,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" dependencies = [ "cfg-if 0.1.10", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -9424,7 +9521,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" dependencies = [ - "pin-project 0.4.23", + "pin-project 0.4.27", "tracing", ] @@ -9435,7 +9532,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" dependencies = [ "lazy_static", - "log 0.4.11", + "log", "tracing-core", ] @@ -9451,9 +9548,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef0a5e15477aa303afbfac3a44cba9b6430fdaad52423b1e6c0dbbe28c3eedd" +checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" dependencies = [ "ansi_term 0.12.1", "chrono", @@ -9479,13 +9576,13 @@ checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" [[package]] name = "trie-db" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f1a9a9252d38c5337cf0c5392988821a5cf1b2103245016968f2ab41de9e38" +checksum = "9e55f7ace33d6237e14137e386f4e1672e2a5c6bbc97fef9f438581a143971f0" dependencies = [ "hash-db", - "hashbrown 0.8.0", - "log 0.4.11", + "hashbrown 0.8.2", + "log", "rustc-hex", "smallvec 1.4.2", ] @@ -9501,17 +9598,19 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "twox-hash" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bfd5b7557925ce778ff9b9ef90e3ade34c524b5ff10e239c69a42d546d2af56" +checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" dependencies = [ + "cfg-if 0.1.10", "rand 0.7.3", + "static_assertions", ] [[package]] @@ -9528,9 +9627,9 @@ checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" [[package]] name = "uint" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173cd16430c206dc1a430af8a89a0e9c076cf15cb42b4aedb10e8cc8fee73681" +checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177" dependencies = [ "byteorder", "crunchy", @@ -9558,9 +9657,9 @@ dependencies = [ [[package]] name = "unicode-normalization" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" +checksum = "b7f98e67a4d84f730d343392f9bfff7d21e3fca562b9cb7a43b768350beeddc6" dependencies = [ "tinyvec", ] @@ -9595,8 +9694,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" dependencies = [ - "generic-array 0.14.2", - "subtle 2.2.3", + "generic-array 0.14.4", + "subtle 2.3.0", ] [[package]] @@ -9642,10 +9741,11 @@ dependencies = [ [[package]] name = "url" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" dependencies = [ + "form_urlencoded", "idna 0.2.0", "matches", "percent-encoding 2.1.0", @@ -9692,9 +9792,9 @@ dependencies = [ [[package]] name = "waker-fn" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9571542c2ce85ce642e6b58b3364da2fb53526360dfb7c211add4f5c23105ff7" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "want" @@ -9702,8 +9802,8 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ - "futures 0.1.29", - "log 0.4.11", + "futures 0.1.30", + "log", "try-lock", ] @@ -9713,7 +9813,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "log 0.4.11", + "log", "try-lock", ] @@ -9723,11 +9823,17 @@ 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 = "wasm-bindgen" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a634620115e4a229108b71bde263bb4220c483b3f07f5ba514ee8d15064c4c2" +checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42" dependencies = [ "cfg-if 0.1.10", "serde", @@ -9737,13 +9843,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e53963b583d18a5aa3aaae4b4c1cb535218246131ba22a71f05b518098571df" +checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" dependencies = [ "bumpalo", "lazy_static", - "log 0.4.11", + "log", "proc-macro2 1.0.24", "quote 1.0.7", "syn 1.0.48", @@ -9752,9 +9858,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba48d66049d2a6cc8488702e7259ab7afc9043ad0dc5448444f46f2a453b362" +checksum = "b7866cab0aa01de1edf8b5d7936938a7e397ee50ce24119aef3e1eaa3b6171da" dependencies = [ "cfg-if 0.1.10", "js-sys", @@ -9764,9 +9870,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcfd5ef6eec85623b4c6e844293d4516470d8f19cd72d0d12246017eb9060b8" +checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038" dependencies = [ "quote 1.0.7", "wasm-bindgen-macro-support", @@ -9774,9 +9880,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9adff9ee0e94b926ca81b57f57f86d5545cdcb1d259e21ec9bdd95b901754c75" +checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -9787,21 +9893,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.64" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7b90ea6c632dd06fd765d44542e234d5e63d9bb917ecd64d79778a13bd79ae" +checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" [[package]] name = "wasm-timer" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324c5e65a08699c9c4334ba136597ab22b85dccd4b65dd1e36ccf8f723a95b54" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "futures 0.3.5", + "futures 0.3.8", "js-sys", - "parking_lot 0.9.0", + "parking_lot 0.11.0", "pin-utils", - "send_wrapper 0.2.0", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -9816,7 +9921,7 @@ dependencies = [ "libc", "memory_units", "num-rational", - "num-traits 0.2.12", + "num-traits 0.2.14", "parity-wasm", "wasmi-validation", ] @@ -9853,7 +9958,7 @@ dependencies = [ "cfg-if 0.1.10", "lazy_static", "libc", - "log 0.4.11", + "log", "region", "rustc-demangle", "smallvec 1.4.2", @@ -9902,7 +10007,7 @@ dependencies = [ "file-per-thread-logger", "indexmap", "libc", - "log 0.4.11", + "log", "more-asserts", "rayon", "serde", @@ -9928,7 +10033,7 @@ dependencies = [ "cranelift-native", "cranelift-wasm", "gimli 0.21.0", - "log 0.4.11", + "log", "more-asserts", "object 0.20.0", "region", @@ -9988,7 +10093,7 @@ dependencies = [ "indexmap", "lazy_static", "libc", - "log 0.4.11", + "log", "memoffset", "more-asserts", "region", @@ -9999,27 +10104,27 @@ dependencies = [ [[package]] name = "wast" -version = "21.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5" +checksum = "c2c3ef5f6a72dffa44c24d5811123f704e18a1dbc83637d347b1852b41d3835c" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.22" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce85d72b74242c340e9e3492cfb602652d7bb324c3172dd441b5577e39a2e18c" +checksum = "835cf59c907f67e2bbc20f50157e08f35006fe2a8444d8ec9f5683e22f937045" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.41" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863539788676619aac1a23e2df3655e96b32b0e05eb72ca34ba045ad573c625d" +checksum = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d" dependencies = [ "js-sys", "wasm-bindgen", @@ -10045,10 +10150,10 @@ dependencies = [ ] [[package]] -name = "wepoll-sys-stjepang" -version = "1.0.6" +name = "wepoll-sys" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd319e971980166b53e17b1026812ad66c6b54063be879eb182342b55284694" +checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff" dependencies = [ "cc", ] @@ -10064,9 +10169,9 @@ dependencies = [ "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "hex-literal 0.2.1", + "hex-literal", "libsecp256k1", - "log 0.3.9", + "log", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", @@ -10126,7 +10231,7 @@ dependencies = [ "sp-version", "static_assertions", "substrate-wasm-builder-runner", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -10191,17 +10296,6 @@ dependencies = [ "winapi-build", ] -[[package]] -name = "x25519-dalek" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637ff90c9540fa3073bb577e65033069e4bae7c79d49d74aa3ffdf5342a53217" -dependencies = [ - "curve25519-dalek 2.1.0", - "rand_core 0.5.1", - "zeroize", -] - [[package]] name = "x25519-dalek" version = "1.1.0" @@ -10240,7 +10334,7 @@ name = "xcm-executor" version = "0.8.22" dependencies = [ "frame-support", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "sp-arithmetic", "sp-core", @@ -10256,8 +10350,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c" dependencies = [ - "futures 0.3.5", - "log 0.4.11", + "futures 0.3.8", + "log", "nohash-hasher", "parking_lot 0.11.0", "rand 0.7.3", @@ -10266,18 +10360,18 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbac2ed2ba24cc90f5e06485ac8c7c1e5449fe8911aef4d8877218af021a5b8" +checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2" +checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", diff --git a/Cargo.toml b/Cargo.toml index 991d96a17e..7cdb487805 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,15 +13,15 @@ readme = "README.md" [dependencies] cli = { package = "polkadot-cli", path = "cli" } -color-eyre = "0.5.6" -thiserror = "1" -futures = "0.3.4" +color-eyre = "0.5.7" +thiserror = "1.0.22" +futures = "0.3.8" service = { package = "polkadot-service", path = "node/service" } parity-util-mem = { version = "*", default-features = false, features = ["jemalloc-global"] } [dev-dependencies] -assert_cmd = "0.12" -nix = "0.17" +assert_cmd = "1.0.1" +nix = "0.19.0" tempfile = "3.1.0" [workspace] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index df5375af33..ae8313889e 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -15,10 +15,10 @@ crate-type = ["cdylib", "rlib"] [dependencies] log = "0.4.11" -thiserror = "1.0.21" -structopt = { version = "0.3.8", optional = true } -wasm-bindgen = { version = "0.2.57", optional = true } -wasm-bindgen-futures = { version = "0.4.7", optional = true } +thiserror = "1.0.22" +structopt = { version = "0.3.20", optional = true } +wasm-bindgen = { version = "0.2.68", optional = true } +wasm-bindgen-futures = { version = "0.4.18", optional = true } service = { package = "polkadot-service", path = "../node/service", default-features = false, optional = true } polkadot-parachain = { path = "../parachain", optional = true } diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index cd4dac0f18..6c45bad3c2 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = [ "derive" ] } [features] default = [ "std" ] @@ -16,5 +16,5 @@ std = [ "sp-core/std", "sp-runtime/std", "sp-std/std", - "codec/std", + "parity-scale-codec/std", ] diff --git a/core-primitives/src/lib.rs b/core-primitives/src/lib.rs index fc325985e0..20f6339ab4 100644 --- a/core-primitives/src/lib.rs +++ b/core-primitives/src/lib.rs @@ -21,6 +21,7 @@ //! These core Polkadot types are used by the relay chain and the Parachains. use sp_runtime::{generic, MultiSignature, traits::{Verify, BlakeTwo256, IdentifyAccount}}; +use parity_scale_codec::{Encode, Decode}; /// The block number type used by Polkadot. /// 32-bits will allow for 136 years of blocks assuming 1 block per second. @@ -55,7 +56,7 @@ pub type Hash = sp_core::H256; /// This type is produced by [`CandidateReceipt::hash`]. /// /// This type makes it easy to enforce that a hash is a candidate hash on the type level. -#[derive(Clone, Copy, codec::Encode, codec::Decode, Hash, Eq, PartialEq, Debug, Default)] +#[derive(Clone, Copy, Encode, Decode, Hash, Eq, PartialEq, Debug, Default)] pub struct CandidateHash(pub Hash); /// Index of a transaction in the relay chain. 32-bit should be plenty. @@ -94,7 +95,7 @@ pub type DownwardMessage = sp_std::vec::Vec; /// A wrapped version of `DownwardMessage`. The difference is that it has attached the block number when /// the message was sent. -#[derive(codec::Encode, codec::Decode, Clone, sp_runtime::RuntimeDebug, PartialEq)] +#[derive(Encode, Decode, Clone, sp_runtime::RuntimeDebug, PartialEq)] pub struct InboundDownwardMessage { /// The block number at which this messages was put into the downward message queue. pub sent_at: BlockNumber, @@ -103,7 +104,7 @@ pub struct InboundDownwardMessage { } /// An HRMP message seen from the perspective of a recipient. -#[derive(codec::Encode, codec::Decode, Clone, sp_runtime::RuntimeDebug, PartialEq)] +#[derive(Encode, Decode, Clone, sp_runtime::RuntimeDebug, PartialEq)] pub struct InboundHrmpMessage { /// The block number at which this message was sent. /// Specifically, it is the block number at which the candidate that sends this message was @@ -114,7 +115,7 @@ pub struct InboundHrmpMessage { } /// An HRMP message seen from the perspective of a sender. -#[derive(codec::Encode, codec::Decode, Clone, sp_runtime::RuntimeDebug, PartialEq, Eq, Hash)] +#[derive(Encode, Decode, Clone, sp_runtime::RuntimeDebug, PartialEq, Eq, Hash)] pub struct OutboundHrmpMessage { /// The para that will get this message in its downward message queue. pub recipient: Id, diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index 0983db3c1d..baab8b4088 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -6,8 +6,8 @@ edition = "2018" [dependencies] primitives = { package = "polkadot-primitives", path = "../primitives" } -reed_solomon = { package = "reed-solomon-erasure", version = "4.0.2"} -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +reed_solomon = { package = "reed-solomon-erasure", version = "4.0.2" } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.21" +thiserror = "1.0.22" diff --git a/erasure-coding/src/lib.rs b/erasure-coding/src/lib.rs index e20e36c259..199a7436a5 100644 --- a/erasure-coding/src/lib.rs +++ b/erasure-coding/src/lib.rs @@ -24,7 +24,7 @@ //! f is the maximum number of faulty validators in the system. //! The data is coded so any f+1 chunks can be used to reconstruct the full data. -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use reed_solomon::galois_16::{self, ReedSolomon}; use primitives::v0::{self, Hash as H256, BlakeTwo256, HashT}; use primitives::v1; @@ -352,12 +352,12 @@ struct ShardInput<'a, I> { cur_shard: Option<(&'a [u8], usize)>, } -impl<'a, I: Iterator> codec::Input for ShardInput<'a, I> { - fn remaining_len(&mut self) -> Result, codec::Error> { +impl<'a, I: Iterator> parity_scale_codec::Input for ShardInput<'a, I> { + fn remaining_len(&mut self) -> Result, parity_scale_codec::Error> { Ok(Some(self.remaining_len)) } - fn read(&mut self, into: &mut [u8]) -> Result<(), codec::Error> { + fn read(&mut self, into: &mut [u8]) -> Result<(), parity_scale_codec::Error> { let mut read_bytes = 0; loop { diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 0e302ae688..daea11bf98 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -5,15 +5,15 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" -log = "0.4.8" +futures = "0.3.8" +log = "0.4.11" polkadot-erasure-coding = { path = "../../erasure-coding" } polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.21" +thiserror = "1.0.22" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 8c22eab5a7..d37df8b945 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -5,14 +5,14 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" futures-timer = "3.0.2" kvdb = "0.7.0" kvdb-rocksdb = "0.9.1" log = "0.4.11" -thiserror = "1.0.21" +thiserror = "1.0.22" -codec = { package = "parity-scale-codec", version = "1.3.1", features = ["derive"] } +parity-scale-codec = { version = "1.3.5", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } @@ -22,8 +22,8 @@ polkadot-primitives = { path = "../../../primitives" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } [dev-dependencies] -env_logger = "0.7.1" -assert_matches = "1.3.0" +env_logger = "0.8.1" +assert_matches = "1.4.0" smallvec = "1.4.2" kvdb-memorydb = "0.7.0" diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 57bd6d804c..0dc9e4ed60 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -26,7 +26,7 @@ use std::path::PathBuf; use std::sync::Arc; use std::time::{Duration, SystemTime, SystemTimeError, UNIX_EPOCH}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use futures::{select, channel::oneshot, future::{self, Either}, Future, FutureExt}; use futures_timer::Delay; use kvdb_rocksdb::{Database, DatabaseConfig}; @@ -527,10 +527,10 @@ where } } } - pov_pruning_time = pov_pruning_time => { + _ = pov_pruning_time => { subsystem.prune_povs()?; } - chunk_pruning_time = chunk_pruning_time => { + _ = chunk_pruning_time => { subsystem.prune_chunks()?; } complete => return Ok(true), diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index 8892e20150..59042927f8 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } @@ -15,13 +15,13 @@ erasure-coding = { package = "polkadot-erasure-coding", path = "../../../erasure statement-table = { package = "polkadot-statement-table", path = "../../../statement-table" } bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } log = "0.4.11" -thiserror = "1.0.21" +thiserror = "1.0.22" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -futures = { version = "0.3.5", features = ["thread-pool"] } -assert_matches = "1.3.0" +futures = { version = "0.3.8", features = ["thread-pool"] } +assert_matches = "1.4.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index ef778186a4..be24be2dc2 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -5,12 +5,12 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -wasm-timer = "0.2.4" -thiserror = "1.0.21" +wasm-timer = "0.2.5" +thiserror = "1.0.22" derive_more = "0.99.11" diff --git a/node/core/candidate-selection/Cargo.toml b/node/core/candidate-selection/Cargo.toml index 5a15550ddb..dfa685b670 100644 --- a/node/core/candidate-selection/Cargo.toml +++ b/node/core/candidate-selection/Cargo.toml @@ -5,9 +5,9 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" -thiserror = "1.0.21" +thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 87cb639a36..5ba8055e9f 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -5,11 +5,11 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" sp-core = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "1.3.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["bit-vec", "derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-parachain = { path = "../../../parachain" } @@ -19,6 +19,6 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } [dev-dependencies] sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -futures = { version = "0.3.5", features = ["thread-pool"] } -assert_matches = "1.3.0" +futures = { version = "0.3.8", features = ["thread-pool"] } +assert_matches = "1.4.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index 23f6ed4ded..a63914541e 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -5,14 +5,14 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = { version = "0.3.5" } +futures = "0.3.8" sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } [dev-dependencies] -futures = { version = "0.3.5", features = ["thread-pool"] } +futures = { version = "0.3.8", features = ["thread-pool"] } maplit = "1.0.2" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/proposer/Cargo.toml b/node/core/proposer/Cargo.toml index 6028d931c1..827208cedf 100644 --- a/node/core/proposer/Cargo.toml +++ b/node/core/proposer/Cargo.toml @@ -5,9 +5,9 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.4" +futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.8" +log = "0.4.11" polkadot-node-subsystem = { path = "../../subsystem" } polkadot-overseer = { path = "../../overseer" } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index 0260b0c438..db2de62b49 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -6,9 +6,9 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" -thiserror = "1.0.21" +thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index 81cf954109..116fa92a3c 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } @@ -14,5 +14,5 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -futures = { version = "0.3.5", features = ["thread-pool"] } +futures = { version = "0.3.8", features = ["thread-pool"] } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index 1f032b7f05..4a8f2de880 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -5,9 +5,9 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" -codec = { package="parity-scale-codec", version = "1.3.4", features = ["std"] } +parity-scale-codec = { version = "1.3.5", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } @@ -15,7 +15,7 @@ polkadot-node-network-protocol = { path = "../../network/protocol" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.21" +thiserror = "1.0.22" [dev-dependencies] polkadot-subsystem-testhelpers = { package = "polkadot-node-subsystem-test-helpers", path = "../../subsystem-test-helpers" } @@ -24,6 +24,6 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } futures-timer = "3.0.2" -env_logger = "0.7.1" -assert_matches = "1.3.0" -smallvec = "1" +env_logger = "0.8.1" +assert_matches = "1.4.0" +smallvec = "1.4.2" diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 3c86911b25..d2703f471b 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -24,7 +24,7 @@ #![deny(unused_crate_dependencies, unused_qualifications)] -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; use futures::{channel::oneshot, FutureExt, TryFutureExt}; use sp_core::crypto::Public; diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index 41e34cb2f7..1238894e4c 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -5,9 +5,9 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" -codec = { package="parity-scale-codec", version = "1.3.4" } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } @@ -21,6 +21,6 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } maplit = "1.0.2" -env_logger = "0.7.1" -assert_matches = "1.3.0" +env_logger = "0.8.1" +assert_matches = "1.4.0" tempfile = "3.1.0" diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 7e94adee2b..d6ebc26bea 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -22,7 +22,7 @@ #![deny(unused_crate_dependencies)] -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; use futures::{channel::oneshot, FutureExt}; use log::{debug, trace, warn}; @@ -167,7 +167,7 @@ impl BitfieldDistribution { &mut ctx, &mut state, &self.metrics, - hash, + hash, signed_availability, ).await { warn!(target: LOG_TARGET, "Failed to reply to `DistributeBitfield` message: {}", err); diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 32b4113357..339016be0d 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -5,11 +5,11 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -async-trait = "0.1" -futures = "0.3.5" +async-trait = "0.1.41" +futures = "0.3.8" log = "0.4.11" polkadot-primitives = { path = "../../../primitives" } -parity-scale-codec = "1.3.4" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -17,8 +17,8 @@ polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsys polkadot-node-network-protocol = { path = "../protocol" } [dev-dependencies] -assert_matches = "1.3.0" -parking_lot = "0.10.0" +assert_matches = "1.4.0" +parking_lot = "0.11.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 3b10015e15..da19fe442c 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -5,9 +5,9 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" -thiserror = "1.0.21" +thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } @@ -16,8 +16,8 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } [dev-dependencies] -env_logger = "0.7.1" -assert_matches = "1.3.0" +env_logger = "0.8.1" +assert_matches = "1.4.0" smallvec = "1.4.2" futures-timer = "3.0.2" diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 2449a63016..1c85e39ac0 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } @@ -13,6 +13,6 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } [dev-dependencies] -assert_matches = "1.3.0" +assert_matches = "1.4.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index 11e1cc4180..273727d5b7 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -8,5 +8,5 @@ description = "Primitives types for the Node-side" [dependencies] polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } -parity-scale-codec = { version = "1.3.4", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index fa0b3786d0..7e953e0ad9 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -6,7 +6,7 @@ description = "Statement Distribution Subsystem" edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" polkadot-primitives = { path = "../../../primitives" } node-primitives = { package = "polkadot-node-primitives", path = "../../primitives" } @@ -14,12 +14,12 @@ sp-staking = { git = "https://github.com/paritytech/substrate", branch = "master polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } -arrayvec = "0.5.1" -indexmap = "1.4.0" +arrayvec = "0.5.2" +indexmap = "1.6.0" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -assert_matches = "1.3.0" +assert_matches = "1.4.0" sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index 5341cb42e0..b1f32723b8 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.5" +futures = "0.3.8" log = "0.4.11" futures-timer = "3.0.2" streamunordered = "0.5.1" @@ -14,12 +14,12 @@ client = { package = "sc-client-api", git = "https://github.com/paritytech/subst polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../primitives" } -async-trait = "0.1" +async-trait = "0.1.41" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-network-protocol = { path = "../network/protocol" } -futures = { version = "0.3.5", features = ["thread-pool"] } +futures = { version = "0.3.8", features = ["thread-pool"] } futures-timer = "3.0.2" femme = "2.1.1" log = "0.4.11" diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 01e19bc65b..b01e4fb055 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -1275,7 +1275,7 @@ where loop { select! { - x = self.running_subsystems.next() => { + _ = self.running_subsystems.next() => { if self.running_subsystems.is_empty() { break; } @@ -1765,7 +1765,7 @@ mod tests { loop { select! { - a = overseer_fut => break, + _ = overseer_fut => break, s1_next = s1_rx.next() => { match s1_next { Some(msg) => { @@ -1779,7 +1779,7 @@ mod tests { }, s2_next = s2_rx.next() => { match s2_next { - Some(msg) => s2_results.push(s2_next), + Some(_) => s2_results.push(s2_next), None => break, } }, diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index 81e2467b37..b391623703 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -6,9 +6,9 @@ edition = "2018" description = "Primitives types for the Node-side" [dependencies] -futures = "0.3.5" +futures = "0.3.8" polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } -parity-scale-codec = { version = "1.3.4", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 5ea9e38bb7..9734c2571d 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -52,13 +52,12 @@ frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate" prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/paritytech/substrate", branch = "master" } # External Crates -codec = { package = "parity-scale-codec", version = "1.3.4" } -futures = "0.3.4" -hex-literal = "0.2.1" +futures = "0.3.8" +hex-literal = "0.3.1" lazy_static = "1.4.0" -log = "0.4.8" -parking_lot = "0.9.0" -serde = { version = "1.0.102", features = ["derive"] } +log = "0.4.11" +parking_lot = "0.11.0" +serde = { version = "1.0.117", features = ["derive"] } slog = "2.5.2" # Polkadot diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 24f49ec3a1..23d5c29f40 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -6,20 +6,20 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] -async-trait = "0.1" -futures = "0.3.5" +async-trait = "0.1.41" +futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.8" -parity-scale-codec = "1.3.4" -parking_lot = "0.10.0" -pin-project = "0.4.23" +log = "0.4.11" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parking_lot = "0.11.0" +pin-project = "1.0.1" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.4.1" +smallvec = "1.4.2" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index f03cea1348..ecfa33a13b 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -6,14 +6,14 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] -async-trait = "0.1" -futures = "0.3.5" +async-trait = "0.1.41" +futures = "0.3.8" futures-timer = "3.0.2" log = "0.4.11" -thiserror = "1.0.21" -parity-scale-codec = "1.3.4" -parking_lot = { version = "0.10.0", optional = true } -pin-project = "0.4.22" +thiserror = "1.0.22" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parking_lot = { version = "0.11.0", optional = true } +pin-project = "1.0.1" streamunordered = "0.5.1" polkadot-node-primitives = { path = "../primitives" } @@ -27,9 +27,9 @@ sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "maste substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] -assert_matches = "1.3.0" -async-trait = "0.1" -futures = { version = "0.3.5", features = ["thread-pool"] } -parking_lot = "0.10.0" +assert_matches = "1.4.0" +async-trait = "0.1.41" +futures = { version = "0.3.8", features = ["thread-pool"] } +parking_lot = "0.11.0" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } -env_logger = "0.7.1" +env_logger = "0.8.1" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index f578d98633..00df8228f2 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -6,27 +6,27 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] -async-trait = "0.1" +async-trait = "0.1.41" derive_more = "0.99.11" -futures = "0.3.5" +futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.8" -parity-scale-codec = "1.3.4" -parking_lot = { version = "0.10.0", optional = true } -pin-project = "0.4.22" +log = "0.4.11" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parking_lot = { version = "0.11.0", optional = true } +pin-project = "1.0.1" polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.4.1" +smallvec = "1.4.2" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.21" +thiserror = "1.0.22" [dev-dependencies] -assert_matches = "1.3.0" -async-trait = "0.1" -futures = { version = "0.3.5", features = ["thread-pool"] } -parking_lot = "0.10.0" +assert_matches = "1.4.0" +async-trait = "0.1.41" +futures = { version = "0.3.8", features = ["thread-pool"] } +parking_lot = "0.11.0" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index 2b0d6dd91f..40d1dedb8c 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } # Polkadot dependencies polkadot-test-runtime = { path = "../../../runtime/test-runtime" } diff --git a/node/test/client/src/block_builder.rs b/node/test/client/src/block_builder.rs index 5d17b8a766..de49ae4886 100644 --- a/node/test/client/src/block_builder.rs +++ b/node/test/client/src/block_builder.rs @@ -21,7 +21,7 @@ use sp_runtime::generic::BlockId; use sp_api::ProvideRuntimeApi; use sc_block_builder::{BlockBuilderProvider, BlockBuilder}; use sp_state_machine::BasicExternalities; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; /// An extension for the test client to init a Polkadot specific block builder. pub trait InitPolkadotBlockBuilder { diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 0dbffe78e1..54f5b70798 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -5,10 +5,10 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -futures = "0.3.4" +futures = "0.3.8" futures01 = { package = "futures", version = "0.1.29" } -hex = "0.4" -log = "0.4.8" +hex = "0.4.2" +log = "0.4.11" rand = "0.7.3" tempfile = "3.1.0" @@ -56,6 +56,6 @@ substrate-test-client = { git = "https://github.com/paritytech/substrate", branc [dev-dependencies] pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -serde_json = "1.0" +serde_json = "1.0.59" substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } tokio = { version = "0.2", features = ["macros"] } diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index e3a01c31cd..3635962ea7 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -9,23 +9,23 @@ edition = "2018" # note: special care is taken to avoid inclusion of `sp-io` externals when compiling # this crate for WASM. This is critical to avoid forcing all parachain WASM into implementing # various unnecessary Substrate-specific endpoints. -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = [ "derive" ] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-wasm-interface = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } polkadot-core-primitives = { path = "../core-primitives", default-features = false } -derive_more = { version = "0.99.11" } +derive_more = "0.99.11" # all optional crates. -thiserror = { version = "1.0.21", optional = true } -serde = { version = "1.0.102", default-features = false, features = [ "derive" ], optional = true } +thiserror = { version = "1.0.22", optional = true } +serde = { version = "1.0.117", default-features = false, features = [ "derive" ], optional = true } sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } -parking_lot = { version = "0.10.0", optional = true } -log = { version = "0.4.8", optional = true } -futures = { version = "0.3.4", optional = true } +parking_lot = { version = "0.11.0", optional = true } +log = { version = "0.4.11", optional = true } +futures = { version = "0.3.8", optional = true } [target.'cfg(not(any(target_os = "android", target_os = "unknown")))'.dependencies] shared_memory = { version = "0.10.0", optional = true } @@ -34,7 +34,7 @@ shared_memory = { version = "0.10.0", optional = true } default = ["std"] wasm-api = [] std = [ - "codec/std", + "parity-scale-codec/std", "thiserror", "serde/std", "sp-std/std", diff --git a/parachain/src/primitives.rs b/parachain/src/primitives.rs index da49f26d30..f90dfaa5d6 100644 --- a/parachain/src/primitives.rs +++ b/parachain/src/primitives.rs @@ -19,7 +19,7 @@ use sp_std::vec::Vec; -use codec::{Encode, Decode, CompactAs}; +use parity_scale_codec::{Encode, Decode, CompactAs}; use sp_core::{RuntimeDebug, TypeId}; #[cfg(feature = "std")] @@ -147,12 +147,12 @@ pub trait AccountIdConversion: Sized { // TODO: Remove all of this, move sp-runtime::AccountIdConversion to own crate and and use that. // #360 struct TrailingZeroInput<'a>(&'a [u8]); -impl<'a> codec::Input for TrailingZeroInput<'a> { - fn remaining_len(&mut self) -> Result, codec::Error> { +impl<'a> parity_scale_codec::Input for TrailingZeroInput<'a> { + fn remaining_len(&mut self) -> Result, parity_scale_codec::Error> { Ok(None) } - fn read(&mut self, into: &mut [u8]) -> Result<(), codec::Error> { + fn read(&mut self, into: &mut [u8]) -> Result<(), parity_scale_codec::Error> { let len = into.len().min(self.0.len()); into[..len].copy_from_slice(&self.0[..len]); for i in &mut into[len..] { diff --git a/parachain/src/wasm_api.rs b/parachain/src/wasm_api.rs index 9c7eac25f1..99bed55414 100644 --- a/parachain/src/wasm_api.rs +++ b/parachain/src/wasm_api.rs @@ -26,7 +26,7 @@ pub unsafe fn load_params(params: *const u8, len: usize) { let mut slice = sp_std::slice::from_raw_parts(params, len); - codec::Decode::decode(&mut slice).expect("Invalid input data") + parity_scale_codec::Decode::decode(&mut slice).expect("Invalid input data") } /// Allocate the validation result in memory, getting the return-pointer back. diff --git a/parachain/src/wasm_executor/mod.rs b/parachain/src/wasm_executor/mod.rs index 677501e6ef..b384ceb6d3 100644 --- a/parachain/src/wasm_executor/mod.rs +++ b/parachain/src/wasm_executor/mod.rs @@ -22,7 +22,7 @@ use std::{any::{TypeId, Any}, path::PathBuf}; use crate::primitives::{ValidationParams, ValidationResult}; -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; use sp_core::{storage::{ChildInfo, TrackedStorageKey}, traits::{CallInWasm, SpawnNamed}}; use sp_externalities::Extensions; use sp_wasm_interface::HostFunctions as _; diff --git a/parachain/src/wasm_executor/validation_host.rs b/parachain/src/wasm_executor/validation_host.rs index 07367d3318..d49f82b6bd 100644 --- a/parachain/src/wasm_executor/validation_host.rs +++ b/parachain/src/wasm_executor/validation_host.rs @@ -17,7 +17,7 @@ #![cfg(not(any(target_os = "android", target_os = "unknown")))] use std::{process, env, sync::Arc, sync::atomic, path::PathBuf}; -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; use crate::primitives::{ValidationParams, ValidationResult}; use super::{ validate_candidate_internal, ValidationError, InvalidCandidate, InternalError, diff --git a/parachain/test-parachains/Cargo.toml b/parachain/test-parachains/Cargo.toml index d391c1b231..d8cc77b178 100644 --- a/parachain/test-parachains/Cargo.toml +++ b/parachain/test-parachains/Cargo.toml @@ -6,8 +6,8 @@ description = "Integration tests using the test-parachains" edition = "2018" [dependencies] -tiny-keccak = "1.5.0" -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +tiny-keccak = "2.0.2" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parachain = { package = "polkadot-parachain", path = ".." } adder = { package = "test-parachain-adder", path = "adder" } diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 1364ef6b2b..9808d5188d 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -8,9 +8,9 @@ build = "build.rs" [dependencies] parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -tiny-keccak = "1.5.0" +tiny-keccak = { version = "2.0.2", features = ["keccak"] } dlmalloc = { version = "0.1.3", features = [ "global" ] } # We need to make sure the global allocator is disabled until we have support of full substrate externalities diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 9a066279e8..864149f707 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -10,11 +10,11 @@ name = "adder-collator" path = "src/main.rs" [dependencies] -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -futures = "0.3.4" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.8" -structopt = "0.3.8" +log = "0.4.11" +structopt = "0.3.20" test-parachain-adder = { path = ".." } polkadot-primitives = { path = "../../../../primitives" } diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index ca2375b2d8..d3afbc1483 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -21,7 +21,7 @@ use test_parachain_adder::{hash_state, BlockData, HeadData, execute}; use futures_timer::Delay; use polkadot_primitives::v1::{PoV, CollatorId, CollatorPair}; use polkadot_node_primitives::{Collation, CollatorFn}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use sp_core::Pair; /// The amount we add when producing a new block. @@ -168,7 +168,7 @@ mod tests { use futures::executor::block_on; use polkadot_parachain::{primitives::ValidationParams, wasm_executor::IsolationStrategy}; use polkadot_primitives::v1::{ValidationData, PersistedValidationData}; - use codec::Decode; + use parity_scale_codec::Decode; #[test] fn collator_works() { diff --git a/parachain/test-parachains/adder/src/lib.rs b/parachain/test-parachains/adder/src/lib.rs index 7cec2b8237..37208efbca 100644 --- a/parachain/test-parachains/adder/src/lib.rs +++ b/parachain/test-parachains/adder/src/lib.rs @@ -20,7 +20,8 @@ #![cfg_attr(not(feature = "std"), feature(core_intrinsics, lang_items, core_panic_info, alloc_error_handler))] -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; +use tiny_keccak::{Hasher as _, Keccak}; #[cfg(not(feature = "std"))] mod wasm_validation; @@ -33,6 +34,14 @@ static ALLOC: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc; #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); +fn keccak256(input: &[u8]) -> [u8; 32] { + let mut out = [0u8; 32]; + let mut keccak256 = Keccak::v256(); + keccak256.update(input); + keccak256.finalize(&mut out); + out +} + /// Wasm binary unwrapped. If built with `BUILD_DUMMY_WASM_BINARY`, the function panics. #[cfg(feature = "std")] pub fn wasm_binary_unwrap() -> &'static [u8] { @@ -53,7 +62,7 @@ pub struct HeadData { impl HeadData { pub fn hash(&self) -> [u8; 32] { - tiny_keccak::keccak256(&self.encode()) + keccak256(&self.encode()) } } @@ -67,7 +76,7 @@ pub struct BlockData { } pub fn hash_state(state: u64) -> [u8; 32] { - tiny_keccak::keccak256(state.encode().as_slice()) + keccak256(state.encode().as_slice()) } /// Start state mismatched with parent header's state hash. diff --git a/parachain/test-parachains/adder/src/wasm_validation.rs b/parachain/test-parachains/adder/src/wasm_validation.rs index 3de7c2311e..f7e46cad39 100644 --- a/parachain/test-parachains/adder/src/wasm_validation.rs +++ b/parachain/test-parachains/adder/src/wasm_validation.rs @@ -20,7 +20,7 @@ use crate::{HeadData, BlockData}; use core::panic; use sp_std::vec::Vec; use parachain::primitives::{ValidationResult, HeadData as GenericHeadData}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; #[no_mangle] pub extern "C" fn validate_block(params: *const u8, len: usize) -> u64 { @@ -31,7 +31,7 @@ pub extern "C" fn validate_block(params: *const u8, len: usize) -> u64 { let block_data = BlockData::decode(&mut ¶ms.block_data.0[..]) .expect("invalid block data format."); - let parent_hash = tiny_keccak::keccak256(¶ms.parent_head.0[..]); + let parent_hash = crate::keccak256(¶ms.parent_head.0[..]); let new_head = crate::execute(parent_hash, parent_head, &block_data).expect("Executes block"); parachain::write_result( diff --git a/parachain/test-parachains/tests/adder/mod.rs b/parachain/test-parachains/tests/adder/mod.rs index c9d15d53d7..8666cf365a 100644 --- a/parachain/test-parachains/tests/adder/mod.rs +++ b/parachain/test-parachains/tests/adder/mod.rs @@ -27,7 +27,7 @@ use parachain::{ }, wasm_executor::{ValidationPool, IsolationStrategy} }; -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; use adder::{HeadData, BlockData, hash_state}; fn isolation_strategy() -> IsolationStrategy { diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index ca0f630216..7d00140054 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -5,8 +5,8 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -serde = { version = "1.0.102", optional = true, features = ["derive"] } -parity-scale-codec = { version = "1.3.4", default-features = false, features = ["bit-vec", "derive"] } +serde = { version = "1.0.117", optional = true, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["bit-vec", "derive"] } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -26,7 +26,7 @@ frame-system = { git = "https://github.com/paritytech/substrate", branch = "mast [dev-dependencies] sp-serializer = { git = "https://github.com/paritytech/substrate", branch = "master" } -pretty_assertions = "0.5.1" +pretty_assertions = "0.6.1" [features] default = ["std"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 0c50b52fce..c697220ea9 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -26,5 +26,5 @@ sc-sync-state-rpc = { git = "https://github.com/paritytech/substrate", branch = txpool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", branch = "master" } frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "master" } pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false } +parity-scale-codec = { version = "1.3.5", default-features = false } sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index b3ac78e904..232829f8a0 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -6,11 +6,11 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -log = { version = "0.3.9", optional = true } -rustc-hex = { version = "2.0.1", default-features = false } -serde = { version = "1.0.102", default-features = false } -serde_derive = { version = "1.0.102", optional = true } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +log = { version = "0.4.11", optional = true } +rustc-hex = { version = "2.1.0", default-features = false } +serde = { version = "1.0.117", default-features = false } +serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -36,11 +36,11 @@ pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "m frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } -libsecp256k1 = { version = "0.3.2", default-features = false, optional = true } +libsecp256k1 = { version = "0.3.5", default-features = false, optional = true } runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parachains", default-features = false } [dev-dependencies] -hex-literal = "0.2.1" +hex-literal = "0.3.1" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -48,16 +48,16 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } -trie-db = "0.22.0" -serde_json = "1.0.41" -libsecp256k1 = "0.3.2" +trie-db = "0.22.1" +serde_json = "1.0.59" +libsecp256k1 = "0.3.5" [features] default = ["std"] no_std = [] std = [ "bitvec/std", - "codec/std", + "parity-scale-codec/std", "log", "rustc-hex/std", "serde_derive", diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index b01babaa64..fbcd7a3af2 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -23,7 +23,7 @@ use frame_support::{ traits::{Currency, Get, VestingSchedule, EnsureOrigin, IsSubType}, weights::{Pays, DispatchClass} }; use frame_system::{ensure_signed, ensure_root, ensure_none}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; #[cfg(feature = "std")] use serde::{self, Serialize, Deserialize, Serializer, Deserializer}; #[cfg(feature = "std")] @@ -633,7 +633,7 @@ mod tests { use secp_utils::*; use sp_core::H256; - use codec::Encode; + use parity_scale_codec::Encode; // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are required. use sp_runtime::{Perbill, traits::{BlakeTwo256, IdentityLookup, Identity}, testing::Header}; diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdfund.rs index 083fa5c5fb..6e8985b1af 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdfund.rs @@ -77,7 +77,7 @@ use sp_runtime::{ModuleId, traits::{AccountIdConversion, Hash, Saturating, Zero, CheckedAdd} }; use crate::slots; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use sp_std::vec::Vec; use primitives::v1::{Id as ParaId, HeadData}; diff --git a/runtime/common/src/purchase.rs b/runtime/common/src/purchase.rs index 876ac695ac..5969bc8b0f 100644 --- a/runtime/common/src/purchase.rs +++ b/runtime/common/src/purchase.rs @@ -16,7 +16,7 @@ //! Module to process purchase of DOTs. -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use sp_runtime::{Permill, RuntimeDebug, DispatchResult, DispatchError, AnySignature}; use sp_runtime::traits::{Zero, CheckedAdd, Verify, Saturating}; use frame_support::{decl_event, decl_storage, decl_module, decl_error, ensure}; diff --git a/runtime/common/src/slot_range.rs b/runtime/common/src/slot_range.rs index 23855c4acc..b9751e18ef 100644 --- a/runtime/common/src/slot_range.rs +++ b/runtime/common/src/slot_range.rs @@ -19,7 +19,7 @@ use sp_std::{result, ops::Add, convert::{TryFrom, TryInto}}; use sp_runtime::traits::CheckedSub; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; /// Total number of possible sub ranges of slots. pub const SLOT_RANGE_COUNT: usize = 10; diff --git a/runtime/common/src/slots.rs b/runtime/common/src/slots.rs index f8018d67fc..16dfb04aa7 100644 --- a/runtime/common/src/slots.rs +++ b/runtime/common/src/slots.rs @@ -22,7 +22,7 @@ use sp_std::{prelude::*, mem::swap, convert::TryInto}; use sp_runtime::traits::{ CheckedSub, StaticLookup, Zero, One, CheckedConversion, Hash, AccountIdConversion, }; -use codec::{Encode, Decode, Codec}; +use parity_scale_codec::{Encode, Decode, Codec}; use frame_support::{ decl_module, decl_storage, decl_event, decl_error, ensure, dispatch::DispatchResult, traits::{Currency, ReservableCurrency, WithdrawReasons, ExistenceRequirement, Get, Randomness}, diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index ccc77ca925..de1048d31a 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -7,13 +7,13 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -log = { version = "0.3.9", optional = true } -rustc-hex = { version = "2.0.1", default-features = false } -serde = { version = "1.0.102", default-features = false } -serde_derive = { version = "1.0.102", optional = true } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +log = { version = "0.4.11", optional = true } +rustc-hex = { version = "2.1.0", default-features = false } +serde = { version = "1.0.117", default-features = false } +serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.4.1" +smallvec = "1.4.2" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -68,19 +68,19 @@ frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } -hex-literal = { version = "0.2.1", optional = true } +hex-literal = { version = "0.3.1", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } [dev-dependencies] -hex-literal = "0.2.1" -libsecp256k1 = "0.3.2" -tiny-keccak = "1.5.0" +hex-literal = "0.3.1" +libsecp256k1 = "0.3.5" +tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } separator = "0.4.1" -serde_json = "1.0.41" +serde_json = "1.0.59" [build-dependencies] wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } @@ -95,7 +95,7 @@ std = [ "bitvec/std", "primitives/std", "rustc-hex/std", - "codec/std", + "parity-scale-codec/std", "inherents/std", "sp-core/std", "sp-api/std", diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 39193d0dc7..c30bf59a6a 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -24,7 +24,7 @@ use pallet_transaction_payment::CurrencyAdapter; use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; use sp_core::u32_trait::{_1, _2, _3, _5}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, @@ -1149,7 +1149,7 @@ sp_api::impl_runtime_apis! { _set_id: fg_primitives::SetId, authority_id: fg_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((fg_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) @@ -1182,7 +1182,7 @@ sp_api::impl_runtime_apis! { _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((babe_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) @@ -1304,7 +1304,7 @@ mod test_fees { use frame_support::storage::StorageValue; use sp_runtime::FixedPointNumber; use frame_support::weights::GetDispatchInfo; - use codec::Encode; + use parity_scale_codec::Encode; use pallet_transaction_payment::Multiplier; use separator::Separatable; diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 98c047d1e9..5200a897e6 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -6,11 +6,11 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = "0.4.11" -rustc-hex = { version = "2.0.1", default-features = false } -serde = { version = "1.0.102", features = [ "derive" ], optional = true } -derive_more = { version = "0.99.11" } +rustc-hex = { version = "2.1.0", default-features = false } +serde = { version = "1.0.117", features = [ "derive" ], optional = true } +derive_more = "0.99.11" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -36,14 +36,14 @@ frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = xcm = { package = "xcm", path = "../../xcm", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } -libsecp256k1 = { version = "0.3.2", default-features = false, optional = true } +libsecp256k1 = { version = "0.3.5", default-features = false, optional = true } -rand = { version = "0.7", default-features = false } +rand = { version = "0.7.3", default-features = false } rand_chacha = { version = "0.2.2", default-features = false } [dev-dependencies] -futures = "0.3.4" -hex-literal = "0.2.1" +futures = "0.3.8" +hex-literal = "0.3.1" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -51,8 +51,8 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.41" -libsecp256k1 = "0.3.2" +serde_json = "1.0.59" +libsecp256k1 = "0.3.5" sp-version = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master"} @@ -62,7 +62,7 @@ default = ["std"] no_std = [] std = [ "bitvec/std", - "codec/std", + "parity-scale-codec/std", "rustc-hex/std", "serde", "primitives/std", diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 716005cdad..3da61a5b43 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -25,7 +25,7 @@ use frame_support::{ dispatch::DispatchResult, weights::{DispatchClass, Weight}, }; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use frame_system::ensure_root; /// All configuration of the runtime with respect to parachains and parathreads. diff --git a/runtime/parachains/src/dmp.rs b/runtime/parachains/src/dmp.rs index 5b49479c4b..004308c0d7 100644 --- a/runtime/parachains/src/dmp.rs +++ b/runtime/parachains/src/dmp.rs @@ -229,7 +229,7 @@ mod tests { use primitives::v1::BlockNumber; use frame_support::StorageValue; use frame_support::traits::{OnFinalize, OnInitialize}; - use codec::Encode; + use parity_scale_codec::Encode; use crate::mock::{Configuration, new_test_ext, System, Dmp, GenesisConfig as MockGenesisConfig}; pub(crate) fn run_to_block(to: BlockNumber, new_session: Option>) { diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index af8ae8eb13..3361470466 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -19,7 +19,7 @@ use crate::{ configuration::{self, HostConfiguration}, initializer, paras, dmp, }; -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; use frame_support::{ decl_storage, decl_module, decl_error, ensure, traits::Get, weights::Weight, StorageMap, StorageValue, dispatch::DispatchResult, @@ -882,7 +882,7 @@ impl Module { let notification_bytes = { use xcm::v0::Xcm; - use codec::Encode as _; + use parity_scale_codec::Encode as _; Xcm::HrmpNewChannelOpenRequest { sender: u32::from(origin), @@ -939,7 +939,7 @@ impl Module { ::HrmpAcceptedChannelRequestCount::insert(&origin, accepted_cnt + 1); let notification_bytes = { - use codec::Encode as _; + use parity_scale_codec::Encode as _; use xcm::v0::Xcm; Xcm::HrmpChannelAccepted { @@ -982,7 +982,7 @@ impl Module { let config = >::config(); let notification_bytes = { - use codec::Encode as _; + use parity_scale_codec::Encode as _; use xcm::v0::Xcm; Xcm::HrmpChannelClosing { diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 1509b88408..8bca04f4f4 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -31,7 +31,7 @@ use frame_support::{ decl_storage, decl_module, decl_error, decl_event, ensure, debug, dispatch::DispatchResult, IterableStorageMap, weights::Weight, traits::Get, }; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use bitvec::{order::Lsb0 as BitOrderLsb0, vec::BitVec}; use sp_staking::SessionIndex; use sp_runtime::{DispatchError, traits::{One, Saturating}}; diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index d32b8dd0eb..ea9348d79f 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -26,7 +26,7 @@ use frame_support::{ decl_storage, decl_module, decl_error, traits::Randomness, }; use sp_runtime::traits::One; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use crate::{ configuration::{self, HostConfiguration}, paras, scheduler, inclusion, dmp, ump, hrmp, diff --git a/runtime/parachains/src/origin.rs b/runtime/parachains/src/origin.rs index 3537b26a13..95204e40a7 100644 --- a/runtime/parachains/src/origin.rs +++ b/runtime/parachains/src/origin.rs @@ -19,7 +19,7 @@ use sp_std::result; use sp_runtime::traits::BadOrigin; use primitives::v1::Id as ParaId; -use codec::{Decode, Encode}; +use parity_scale_codec::{Decode, Encode}; /// Origin for the parachains. #[derive(PartialEq, Eq, Clone, Encode, Decode, sp_core::RuntimeDebug)] diff --git a/runtime/parachains/src/paras.rs b/runtime/parachains/src/paras.rs index 869a7cff74..66782d7c12 100644 --- a/runtime/parachains/src/paras.rs +++ b/runtime/parachains/src/paras.rs @@ -36,7 +36,7 @@ use frame_support::{ traits::Get, weights::Weight, }; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use crate::{configuration, initializer::SessionChangeNotification}; use sp_core::RuntimeDebug; diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index a40526aa09..5d06f179fe 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -45,7 +45,7 @@ use frame_support::{ decl_storage, decl_module, decl_error, weights::Weight, }; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use sp_runtime::traits::{Saturating, Zero}; use rand::{SeedableRng, seq::SliceRandom}; diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index f99ddca6f0..5f3460426e 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -7,13 +7,13 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -log = { version = "0.3.9", optional = true } -rustc-hex = { version = "2.0.1", default-features = false } -serde = { version = "1.0.102", default-features = false } -serde_derive = { version = "1.0.102", optional = true } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +log = { version = "0.4.11", optional = true } +rustc-hex = { version = "2.1.0", default-features = false } +serde = { version = "1.0.117", default-features = false } +serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.4.1" +smallvec = "1.4.2" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -66,19 +66,19 @@ frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } -hex-literal = { version = "0.2.1", optional = true } +hex-literal = { version = "0.3.1", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } [dev-dependencies] -hex-literal = "0.2.1" -libsecp256k1 = "0.3.2" -tiny-keccak = "1.5.0" +hex-literal = "0.3.1" +libsecp256k1 = "0.3.5" +tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -trie-db = "0.22.0" -serde_json = "1.0.41" +trie-db = "0.22.1" +serde_json = "1.0.59" [build-dependencies] wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } @@ -93,7 +93,7 @@ std = [ "bitvec/std", "primitives/std", "rustc-hex/std", - "codec/std", + "parity-scale-codec/std", "inherents/std", "sp-core/std", "sp-api/std", diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index a18a63b147..8d9e9897a6 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -32,7 +32,7 @@ use runtime_common::{ use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; use sp_core::u32_trait::{_1, _2, _3, _4, _5}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, @@ -1144,7 +1144,7 @@ sp_api::impl_runtime_apis! { _set_id: fg_primitives::SetId, authority_id: fg_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((fg_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) @@ -1177,7 +1177,7 @@ sp_api::impl_runtime_apis! { _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((babe_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 6877a3c12b..d6d75d5fc1 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -6,10 +6,10 @@ edition = "2018" build = "build.rs" [dependencies] -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -serde = { version = "1.0.102", default-features = false } -serde_derive = { version = "1.0.102", optional = true } -smallvec = "1.4.1" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +serde = { version = "1.0.117", default-features = false } +serde_derive = { version = "1.0.117", optional = true } +smallvec = "1.4.2" frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -66,7 +66,7 @@ std = [ "pallet-babe/std", "babe-primitives/std", "pallet-balances/std", - "codec/std", + "parity-scale-codec/std", "frame-executive/std", "pallet-grandpa/std", "pallet-sudo/std", diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index aa6fb87e98..07e3e0c433 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -23,7 +23,7 @@ use pallet_transaction_payment::CurrencyAdapter; use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; -use codec::Encode; +use parity_scale_codec::Encode; use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, Hash, Nonce, Signature, Moment, GroupRotationInfo, CoreState, Id, ValidationData, ValidationCode, CandidateEvent, @@ -727,7 +727,7 @@ sp_api::impl_runtime_apis! { _set_id: fg_primitives::SetId, authority_id: fg_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((fg_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) @@ -760,7 +760,7 @@ sp_api::impl_runtime_apis! { _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((babe_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index be646dd63d..d4d651c31f 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -7,12 +7,12 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -log = { version = "0.3.9", optional = true } -rustc-hex = { version = "2.0.1", default-features = false } -serde = { version = "1.0.102", default-features = false } -serde_derive = { version = "1.0.102", optional = true } -smallvec = "1.4.1" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +log = { version = "0.4.11", optional = true } +rustc-hex = { version = "2.1.0", default-features = false } +serde = { version = "1.0.117", default-features = false } +serde_derive = { version = "1.0.117", optional = true } +smallvec = "1.4.2" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -57,12 +57,12 @@ polkadot-parachain = { path = "../../parachain", default-features = false } polkadot-runtime-parachains = { path = "../parachains", default-features = false } [dev-dependencies] -hex-literal = "0.2.1" -libsecp256k1 = "0.3.2" -tiny-keccak = "1.5.0" +hex-literal = "0.3.1" +libsecp256k1 = "0.3.5" +tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.41" +serde_json = "1.0.59" [build-dependencies] wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } @@ -77,7 +77,7 @@ std = [ "bitvec/std", "primitives/std", "rustc-hex/std", - "codec/std", + "parity-scale-codec/std", "inherents/std", "sp-core/std", "polkadot-parachain/std", diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 43a5d186b3..fffcd892e6 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -23,7 +23,7 @@ use pallet_transaction_payment::CurrencyAdapter; use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; -use codec::Encode; +use parity_scale_codec::Encode; use polkadot_runtime_parachains::configuration as parachains_configuration; use polkadot_runtime_parachains::inclusion as parachains_inclusion; diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index d9408830fc..12b20015c6 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -7,12 +7,12 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } -log = { version = "0.3.9", optional = true } -rustc-hex = { version = "2.0.1", default-features = false } -serde = { version = "1.0.102", default-features = false } -serde_derive = { version = "1.0.102", optional = true } -smallvec = "1.4.1" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +log = { version = "0.4.11", optional = true } +rustc-hex = { version = "2.1.0", default-features = false } +serde = { version = "1.0.117", default-features = false } +serde_derive = { version = "1.0.117", optional = true } +smallvec = "1.4.2" static_assertions = "1.1.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -69,19 +69,19 @@ frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } pallet-offences-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } -hex-literal = { version = "0.2.1", optional = true } +hex-literal = { version = "0.3.1", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } polkadot-parachain = { path = "../../parachain", default-features = false } [dev-dependencies] -hex-literal = "0.2.1" -libsecp256k1 = "0.3.2" -tiny-keccak = "1.5.0" +hex-literal = "0.3.1" +libsecp256k1 = "0.3.5" +tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.41" +serde_json = "1.0.59" [build-dependencies] wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } @@ -96,7 +96,7 @@ std = [ "bitvec/std", "primitives/std", "rustc-hex/std", - "codec/std", + "parity-scale-codec/std", "inherents/std", "sp-core/std", "polkadot-parachain/std", diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 42df9f7ba3..08e0ab6a28 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -23,7 +23,7 @@ use pallet_transaction_payment::CurrencyAdapter; use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, @@ -893,7 +893,7 @@ sp_api::impl_runtime_apis! { _set_id: fg_primitives::SetId, authority_id: fg_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((fg_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) @@ -926,7 +926,7 @@ sp_api::impl_runtime_apis! { _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, ) -> Option { - use codec::Encode; + use parity_scale_codec::Encode; Historical::prove((babe_primitives::KEY_TYPE, authority_id)) .map(|p| p.encode()) diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index 3b3e8bd841..e8eb705f4a 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -5,6 +5,6 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } primitives = { package = "polkadot-primitives", path = "../primitives" } diff --git a/statement-table/src/generic.rs b/statement-table/src/generic.rs index 8ab267c7b7..fe51965a23 100644 --- a/statement-table/src/generic.rs +++ b/statement-table/src/generic.rs @@ -30,7 +30,7 @@ use std::fmt::Debug; use primitives::v1::{ValidityAttestation as PrimitiveValidityAttestation, ValidatorSignature}; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; /// Context for the statement table. pub trait Context { diff --git a/validation/Cargo.toml b/validation/Cargo.toml index 1519227b77..c1e53b684d 100644 --- a/validation/Cargo.toml +++ b/validation/Cargo.toml @@ -13,9 +13,9 @@ sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } consensus = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "master" } runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", branch = "master" } -futures = "0.3.4" -log = "0.4.8" -codec = { package = "parity-scale-codec", version = "1.3.4", default-features = false, features = ["derive"] } +futures = "0.3.8" +log = "0.4.11" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } grandpa = { package = "sc-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "master" } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master" } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master" } @@ -25,7 +25,7 @@ block-builder = { package = "sc-block-builder", git = "https://github.com/parity trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master" } prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.21" +thiserror = "1.0.22" [dev-dependencies] sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index 0587613be6..27151453a7 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -6,11 +6,11 @@ description = "The basic XCM datastructures." edition = "2018" [dependencies] -codec = { package = "parity-scale-codec", version = "1.3.5", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = [ "derive" ] } [features] default = ["std"] wasm-api = [] std = [ - "codec/std", + "parity-scale-codec/std", ] diff --git a/xcm/src/lib.rs b/xcm/src/lib.rs index 1356c12e17..3dc99e07c7 100644 --- a/xcm/src/lib.rs +++ b/xcm/src/lib.rs @@ -23,7 +23,7 @@ #![no_std] extern crate alloc; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; pub mod v0; diff --git a/xcm/src/v0/junction.rs b/xcm/src/v0/junction.rs index 1ea9bff2e4..df11ab3fde 100644 --- a/xcm/src/v0/junction.rs +++ b/xcm/src/v0/junction.rs @@ -17,7 +17,7 @@ //! Support datastructures for `MultiLocation`, primarily the `Junction` datatype. use alloc::vec::Vec; -use codec::{self, Encode, Decode}; +use parity_scale_codec::{self, Encode, Decode}; /// A global identifier of an account-bearing consensus system. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug)] diff --git a/xcm/src/v0/mod.rs b/xcm/src/v0/mod.rs index 67b6e4026c..c69093d4f8 100644 --- a/xcm/src/v0/mod.rs +++ b/xcm/src/v0/mod.rs @@ -19,7 +19,7 @@ use core::{result, convert::TryFrom}; use alloc::{boxed::Box, vec::Vec}; -use codec::{self, Encode, Decode}; +use parity_scale_codec::{self, Encode, Decode}; use super::{VersionedXcm, VersionedMultiAsset}; mod junction; diff --git a/xcm/src/v0/multi_asset.rs b/xcm/src/v0/multi_asset.rs index 22bcf0cf74..700bc78d60 100644 --- a/xcm/src/v0/multi_asset.rs +++ b/xcm/src/v0/multi_asset.rs @@ -19,7 +19,7 @@ use core::{result, convert::TryFrom}; use alloc::vec::Vec; -use codec::{self, Encode, Decode}; +use parity_scale_codec::{self, Encode, Decode}; use super::{MultiLocation, VersionedMultiAsset}; /// A general identifier for an instance of a non-fungible asset class. diff --git a/xcm/src/v0/multi_location.rs b/xcm/src/v0/multi_location.rs index 0ff0776cea..ba3ef8c827 100644 --- a/xcm/src/v0/multi_location.rs +++ b/xcm/src/v0/multi_location.rs @@ -18,7 +18,7 @@ use core::{result, mem, convert::TryFrom}; -use codec::{self, Encode, Decode}; +use parity_scale_codec::{self, Encode, Decode}; use super::Junction; use crate::VersionedMultiLocation; diff --git a/xcm/src/v0/order.rs b/xcm/src/v0/order.rs index 5f2d9da072..df7a215015 100644 --- a/xcm/src/v0/order.rs +++ b/xcm/src/v0/order.rs @@ -17,7 +17,7 @@ //! Version 0 of the Cross-Consensus Message format data structures. use alloc::vec::Vec; -use codec::{self, Encode, Decode}; +use parity_scale_codec::{self, Encode, Decode}; use super::{MultiAsset, MultiLocation}; /// An instruction to be executed on some or all of the assets in holding, used by asset-related XCM messages. diff --git a/xcm/src/v0/traits.rs b/xcm/src/v0/traits.rs index f88b1af53a..661e71fe08 100644 --- a/xcm/src/v0/traits.rs +++ b/xcm/src/v0/traits.rs @@ -17,7 +17,7 @@ //! Cross-Consensus Message format data structures. use core::result; -use codec::{Encode, Decode}; +use parity_scale_codec::{Encode, Decode}; use super::{MultiLocation, Xcm}; diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index 512cb5e411..ec9fa17ceb 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -6,7 +6,7 @@ description = "Tools & types for building with XCM and its executor." version = "0.8.22" [dependencies] -codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } xcm-executor = { path = "../xcm-executor", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -21,7 +21,7 @@ polkadot-parachain = { path = "../../parachain", default-features = false } [features] default = ["std"] std = [ - "codec/std", + "parity-scale-codec/std", "xcm/std", "xcm-executor/std", "sp-std/std", diff --git a/xcm/xcm-builder/src/location_conversion.rs b/xcm/xcm-builder/src/location_conversion.rs index 54d27dad8e..88575b6df6 100644 --- a/xcm/xcm-builder/src/location_conversion.rs +++ b/xcm/xcm-builder/src/location_conversion.rs @@ -18,7 +18,7 @@ use sp_std::marker::PhantomData; use sp_io::hashing::blake2_256; use sp_runtime::traits::AccountIdConversion; use frame_support::traits::Get; -use codec::Encode; +use parity_scale_codec::Encode; use xcm::v0::{MultiLocation, NetworkId, Junction}; use xcm_executor::traits::LocationConversion; diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index 4eaa4833b2..a3637bb008 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -6,8 +6,8 @@ description = "An abstract and configurable XCM message executor." version = "0.8.22" [dependencies] -impl-trait-for-tuples = "0.1.3" -codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } +impl-trait-for-tuples = "0.2.0" +parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -19,7 +19,7 @@ frame-support = { git = "https://github.com/paritytech/substrate", branch = "mas [features] default = ["std"] std = [ - "codec/std", + "parity-scale-codec/std", "xcm/std", "sp-std/std", "sp-io/std", diff --git a/xcm/xcm-executor/src/lib.rs b/xcm/xcm-executor/src/lib.rs index 15cabd5088..5bef32bf1e 100644 --- a/xcm/xcm-executor/src/lib.rs +++ b/xcm/xcm-executor/src/lib.rs @@ -18,7 +18,7 @@ use sp_std::{prelude::*, marker::PhantomData, convert::TryInto}; use frame_support::{ensure, dispatch::Dispatchable}; -use codec::Decode; +use parity_scale_codec::Decode; use xcm::v0::{ Xcm, Order, ExecuteXcm, SendXcm, Error as XcmError, Result as XcmResult, MultiLocation, MultiAsset, Junction, -- GitLab From 4cb50254ba30f5a81ae40b205bb0e7a3f4d0d817 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Tue, 17 Nov 2020 11:20:46 +0100 Subject: [PATCH 014/203] .github: Add dependabot config and thus enable dependabot (#1937) * .github: Add dependabot config and thus enable dependabot * Update .github/dependabot.yml Co-authored-by: Pierre Krieger Co-authored-by: Pierre Krieger --- .github/dependabot.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..d782bb80f7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "cargo" + directory: "/" + labels: ["A2-insubstantial", "B0-silent", "C1-low"] + schedule: + interval: "daily" -- GitLab From 2b1151b76bc6c01e502c1ed31115ce32bfb2331a Mon Sep 17 00:00:00 2001 From: Max Inden Date: Tue, 17 Nov 2020 12:34:54 +0100 Subject: [PATCH 015/203] .github/dependabot: Handle Substrate crates manually (#1961) * .github/dependabot: Handle Substrate crates manually Handle updates for crates from github.com/paritytech/substrate manually. * .github/dependabot: Additional prefixes Co-authored-by: Andronik Ordian Co-authored-by: Andronik Ordian --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d782bb80f7..f2b6dfc4f0 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,5 +3,13 @@ updates: - package-ecosystem: "cargo" directory: "/" labels: ["A2-insubstantial", "B0-silent", "C1-low"] + # Handle updates for crates from github.com/paritytech/substrate manually. + ignore: + - dependency-name: "substrate-*" + - dependency-name: "sc-*" + - dependency-name: "sp-*" + - dependency-name: "frame-*" + - dependency-name: "fork-tree" + - dependency-name: "pallet-*" schedule: interval: "daily" -- GitLab From 568e94f4786d840315e8838c7796861804eefc7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Nov 2020 12:00:06 +0000 Subject: [PATCH 016/203] Bump dlmalloc from 0.1.4 to 0.2.1 (#1962) Bumps [dlmalloc](https://github.com/alexcrichton/dlmalloc-rs) from 0.1.4 to 0.2.1. - [Release notes](https://github.com/alexcrichton/dlmalloc-rs/releases) - [Commits](https://github.com/alexcrichton/dlmalloc-rs/compare/0.1.4...0.2.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- parachain/test-parachains/adder/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 47e8f95db8..08d106bc0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1211,9 +1211,9 @@ dependencies = [ [[package]] name = "dlmalloc" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35055b1021724f4eb5262eb49130eebff23fc59fc5a14160e05faad8eeb36673" +checksum = "332570860c2edf2d57914987bf9e24835425f75825086b6ba7d1e6a3e4f1f254" dependencies = [ "libc", ] diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 9808d5188d..4b22425bea 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -11,7 +11,7 @@ parachain = { package = "polkadot-parachain", path = "../../", default-features parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } tiny-keccak = { version = "2.0.2", features = ["keccak"] } -dlmalloc = { version = "0.1.3", features = [ "global" ] } +dlmalloc = { version = "0.2.1", features = [ "global" ] } # We need to make sure the global allocator is disabled until we have support of full substrate externalities sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, features = [ "disable_allocator" ] } -- GitLab From 48849be57087f99a160d60c7bbb8c7cefe591af3 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Tue, 17 Nov 2020 16:26:19 +0100 Subject: [PATCH 017/203] patches (#1965) --- parachain/src/primitives.rs | 39 +++++++++++++++++++++++++ runtime/parachains/src/origin.rs | 6 ++++ xcm/xcm-builder/src/currency_adapter.rs | 4 +-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/parachain/src/primitives.rs b/parachain/src/primitives.rs index f90dfaa5d6..e3c97620bf 100644 --- a/parachain/src/primitives.rs +++ b/parachain/src/primitives.rs @@ -135,6 +135,45 @@ impl sp_std::ops::Add for Id { } } +#[derive(Clone, Copy, Default, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug)] +pub struct Sibling(pub Id); + +impl From for Sibling { + fn from(i: Id) -> Self { + Self(i) + } +} + +impl From for Id { + fn from(i: Sibling) -> Self { + i.0 + } +} + +impl AsRef for Sibling { + fn as_ref(&self) -> &Id { + &self.0 + } +} + +impl TypeId for Sibling { + const TYPE_ID: [u8; 4] = *b"sibl"; +} + +impl From for u32 { + fn from(x: Sibling) -> Self { x.0.into() } +} + +impl From for Sibling { + fn from(x: u32) -> Self { Sibling(x.into()) } +} + +impl IsSystem for Sibling { + fn is_system(&self) -> bool { + IsSystem::is_system(&self.0) + } +} + /// This type can be converted into and possibly from an AccountId (which itself is generic). pub trait AccountIdConversion: Sized { /// Convert into an account ID. This is infallible. diff --git a/runtime/parachains/src/origin.rs b/runtime/parachains/src/origin.rs index 95204e40a7..b8444181de 100644 --- a/runtime/parachains/src/origin.rs +++ b/runtime/parachains/src/origin.rs @@ -51,3 +51,9 @@ frame_support::decl_module! { // ideally, though, the `construct_runtime` should support a free-standing origin. pub struct Module for enum Call where origin: ::Origin {} } + +impl From for Origin { + fn from(id: u32) -> Origin { + Origin::Parachain(id.into()) + } +} diff --git a/xcm/xcm-builder/src/currency_adapter.rs b/xcm/xcm-builder/src/currency_adapter.rs index d7f6b4d4c2..09b61ab6bb 100644 --- a/xcm/xcm-builder/src/currency_adapter.rs +++ b/xcm/xcm-builder/src/currency_adapter.rs @@ -36,7 +36,7 @@ impl< fn deposit_asset(what: &MultiAsset, who: &MultiLocation) -> Result { // Check we handle this asset. - let amount = Matcher::matches_fungible(&what).ok_or(())?.saturated_into(); + let amount: u128 = Matcher::matches_fungible(&what).ok_or(())?.saturated_into(); let who = AccountIdConverter::from_location(who).ok_or(())?; let balance_amount = amount.try_into().map_err(|_| ())?; let _imbalance = Currency::deposit_creating(&who, balance_amount); @@ -45,7 +45,7 @@ impl< fn withdraw_asset(what: &MultiAsset, who: &MultiLocation) -> result::Result { // Check we handle this asset. - let amount = Matcher::matches_fungible(&what).ok_or(())?.saturated_into(); + let amount: u128 = Matcher::matches_fungible(&what).ok_or(())?.saturated_into(); let who = AccountIdConverter::from_location(who).ok_or(())?; let balance_amount = amount.try_into().map_err(|_| ())?; Currency::withdraw(&who, balance_amount, WithdrawReasons::TRANSFER, AllowDeath).map_err(|_| ())?; -- GitLab From e2b10164da3370db9189575e0e31ab5c2eaae0b7 Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Wed, 18 Nov 2020 13:39:26 +0300 Subject: [PATCH 018/203] Connect to different validators on different leaves (#1966) * Connect to different validators on different leaves * Implement ConnectionRequests * Replace existing connection request * Do not terminate if there are no ongoing requests * Adds tests * Remove the loop * Add replacement test * Use find * Update node/subsystem-util/src/validator_discovery.rs Co-authored-by: Andronik Ordian * Add requests revocation to cleanup * Revert "Add requests revocation to cleanup" This reverts commit d0ac1d7a0672f0ba803c923a32ca6ca84538f549. Co-authored-by: Andronik Ordian --- .../subsystem-util/src/validator_discovery.rs | 253 ++++++++++++++++++ 1 file changed, 253 insertions(+) diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index ac5bf1d470..fb0cf1539b 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -24,6 +24,7 @@ use futures::{ task::{Poll, self}, stream, }; +use streamunordered::{StreamUnordered, StreamYield}; use thiserror::Error; use polkadot_node_subsystem::{ @@ -104,6 +105,73 @@ async fn connect_to_authorities( Ok((connected_rx, revoke_tx)) } +/// A struct that assists performing multiple concurrent connection requests. +/// +/// This allows concurrent connections to validator sets at different `relay_parents` +/// and multiplexes their results into a single `Stream`. +#[derive(Default)] +pub struct ConnectionRequests { + // added connection requests relay_parent -> StreamUnordered token + id_map: HashMap, + + // Connection requests themselves. + requests: StreamUnordered, +} + +impl ConnectionRequests { + /// Insert a new connection request. + /// + /// If a `ConnectionRequest` under a given `relay_parent` already exists it will + /// be revoked and substituted with a new one. + pub fn put(&mut self, relay_parent: Hash, request: ConnectionRequest) { + self.remove(&relay_parent); + let token = self.requests.push(request); + + self.id_map.insert(relay_parent, token); + } + + /// Remove a connection request by a given `relay_parent`. + pub fn remove(&mut self, relay_parent: &Hash) { + if let Some(token) = self.id_map.remove(relay_parent) { + Pin::new(&mut self.requests).remove(token); + } + } +} + +impl stream::Stream for ConnectionRequests { + /// (relay_parent, validator_id, peer_id). + type Item = (Hash, ValidatorId, PeerId); + + fn poll_next(mut self: Pin<&mut Self>, cx: &mut task::Context) -> Poll> { + // If there are currently no requests going on, pend instead of + // polling `StreamUnordered` which would lead to it terminating + // and returning `Poll::Ready(None)`. + if self.requests.is_empty() { + return Poll::Pending; + } + + match Pin::new(&mut self.requests).poll_next(cx) { + Poll::Ready(Some((yielded, token))) => { + match yielded { + StreamYield::Item(item) => { + if let Some((relay_parent, _)) = self.id_map.iter() + .find(|(_, &val)| val == token) + { + return Poll::Ready(Some((*relay_parent, item.0, item.1))); + } + } + StreamYield::Finished(_) => { + // `ConnectionRequest` is fullfilled, but not revoked + } + } + }, + _ => {}, + } + + Poll::Pending + } +} + /// A pending connection request to validators. /// This struct implements `Stream` to allow for asynchronous /// discovery of validator addresses. @@ -156,3 +224,188 @@ impl ConnectionRequest { } } } + +#[cfg(test)] +mod tests { + use super::*; + use polkadot_primitives::v1::ValidatorPair; + use sp_core::{Pair, Public}; + + use futures::{executor, poll, channel::{mpsc, oneshot}, StreamExt, SinkExt}; + + #[test] + fn adding_a_connection_request_works() { + let mut connection_requests = ConnectionRequests::default(); + + executor::block_on(async move { + assert_eq!(poll!(Pin::new(&mut connection_requests).next()), Poll::Pending); + + let validator_1 = ValidatorPair::generate().0.public(); + let validator_2 = ValidatorPair::generate().0.public(); + + let auth_1 = AuthorityDiscoveryId::from_slice(&[1; 32]); + let auth_2 = AuthorityDiscoveryId::from_slice(&[2; 32]); + + let mut validator_map = HashMap::new(); + validator_map.insert(auth_1.clone(), validator_1.clone()); + validator_map.insert(auth_2.clone(), validator_2.clone()); + + let (mut rq1_tx, rq1_rx) = mpsc::channel(8); + let (revoke_1_tx, _revoke_1_rx) = oneshot::channel(); + + let peer_id_1 = PeerId::random(); + let peer_id_2 = PeerId::random(); + + let connection_request_1 = ConnectionRequest { + validator_map, + connections: rq1_rx, + revoke: revoke_1_tx, + }; + + let relay_parent_1 = Hash::repeat_byte(1); + + connection_requests.put(relay_parent_1.clone(), connection_request_1); + + rq1_tx.send((auth_1, peer_id_1.clone())).await.unwrap(); + rq1_tx.send((auth_2, peer_id_2.clone())).await.unwrap(); + + let res = Pin::new(&mut connection_requests).next().await.unwrap(); + assert_eq!(res, (relay_parent_1, validator_1, peer_id_1)); + + let res = Pin::new(&mut connection_requests).next().await.unwrap(); + assert_eq!(res, (relay_parent_1, validator_2, peer_id_2)); + + assert_eq!( + poll!(Pin::new(&mut connection_requests).next()), + Poll::Pending, + ); + }); + } + + #[test] + fn adding_two_connection_requests_works() { + let mut connection_requests = ConnectionRequests::default(); + + executor::block_on(async move { + assert_eq!(poll!(Pin::new(&mut connection_requests).next()), Poll::Pending); + + let validator_1 = ValidatorPair::generate().0.public(); + let validator_2 = ValidatorPair::generate().0.public(); + + let auth_1 = AuthorityDiscoveryId::from_slice(&[1; 32]); + let auth_2 = AuthorityDiscoveryId::from_slice(&[2; 32]); + + let mut validator_map_1 = HashMap::new(); + let mut validator_map_2 = HashMap::new(); + + validator_map_1.insert(auth_1.clone(), validator_1.clone()); + validator_map_2.insert(auth_2.clone(), validator_2.clone()); + + let (mut rq1_tx, rq1_rx) = mpsc::channel(8); + let (revoke_1_tx, _revoke_1_rx) = oneshot::channel(); + + let (mut rq2_tx, rq2_rx) = mpsc::channel(8); + let (revoke_2_tx, _revoke_2_rx) = oneshot::channel(); + + let peer_id_1 = PeerId::random(); + let peer_id_2 = PeerId::random(); + + let connection_request_1 = ConnectionRequest { + validator_map: validator_map_1, + connections: rq1_rx, + revoke: revoke_1_tx, + }; + + let connection_request_2 = ConnectionRequest { + validator_map: validator_map_2, + connections: rq2_rx, + revoke: revoke_2_tx, + }; + + let relay_parent_1 = Hash::repeat_byte(1); + let relay_parent_2 = Hash::repeat_byte(2); + + connection_requests.put(relay_parent_1.clone(), connection_request_1); + connection_requests.put(relay_parent_2.clone(), connection_request_2); + + rq1_tx.send((auth_1, peer_id_1.clone())).await.unwrap(); + rq2_tx.send((auth_2, peer_id_2.clone())).await.unwrap(); + + let res = Pin::new(&mut connection_requests).next().await.unwrap(); + assert_eq!(res, (relay_parent_1, validator_1, peer_id_1)); + + let res = Pin::new(&mut connection_requests).next().await.unwrap(); + assert_eq!(res, (relay_parent_2, validator_2, peer_id_2)); + + assert_eq!( + poll!(Pin::new(&mut connection_requests).next()), + Poll::Pending, + ); + }); + } + + #[test] + fn replacing_a_connection_request_works() { + let mut connection_requests = ConnectionRequests::default(); + + executor::block_on(async move { + assert_eq!(poll!(Pin::new(&mut connection_requests).next()), Poll::Pending); + + let validator_1 = ValidatorPair::generate().0.public(); + let validator_2 = ValidatorPair::generate().0.public(); + + let auth_1 = AuthorityDiscoveryId::from_slice(&[1; 32]); + let auth_2 = AuthorityDiscoveryId::from_slice(&[2; 32]); + + let mut validator_map_1 = HashMap::new(); + let mut validator_map_2 = HashMap::new(); + + validator_map_1.insert(auth_1.clone(), validator_1.clone()); + validator_map_2.insert(auth_2.clone(), validator_2.clone()); + + let (mut rq1_tx, rq1_rx) = mpsc::channel(8); + let (revoke_1_tx, _revoke_1_rx) = oneshot::channel(); + + let (mut rq2_tx, rq2_rx) = mpsc::channel(8); + let (revoke_2_tx, _revoke_2_rx) = oneshot::channel(); + + let peer_id_1 = PeerId::random(); + let peer_id_2 = PeerId::random(); + + let connection_request_1 = ConnectionRequest { + validator_map: validator_map_1, + connections: rq1_rx, + revoke: revoke_1_tx, + }; + + let connection_request_2 = ConnectionRequest { + validator_map: validator_map_2, + connections: rq2_rx, + revoke: revoke_2_tx, + }; + + let relay_parent = Hash::repeat_byte(3); + + connection_requests.put(relay_parent.clone(), connection_request_1); + + rq1_tx.send((auth_1.clone(), peer_id_1.clone())).await.unwrap(); + + let res = Pin::new(&mut connection_requests).next().await.unwrap(); + assert_eq!(res, (relay_parent, validator_1, peer_id_1.clone())); + + connection_requests.put(relay_parent.clone(), connection_request_2); + + assert!(rq1_tx.send((auth_1, peer_id_1.clone())).await.is_err()); + + rq2_tx.send((auth_2, peer_id_2.clone())).await.unwrap(); + + let res = Pin::new(&mut connection_requests).next().await.unwrap(); + assert_eq!(res, (relay_parent, validator_2, peer_id_2)); + + assert_eq!( + poll!(Pin::new(&mut connection_requests).next()), + Poll::Pending, + ); + }); + } +} -- GitLab From 60e82cbf786f97d66111c4857e054ed0c95ead05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Nov 2020 14:15:05 +0100 Subject: [PATCH 019/203] Bump parking_lot from 0.11.0 to 0.11.1 (#1970) Bumps [parking_lot](https://github.com/Amanieu/parking_lot) from 0.11.0 to 0.11.1. - [Release notes](https://github.com/Amanieu/parking_lot/releases) - [Changelog](https://github.com/Amanieu/parking_lot/blob/master/CHANGELOG.md) - [Commits](https://github.com/Amanieu/parking_lot/compare/0.11.0...0.11.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 32 +++++++++++++------------- node/network/bridge/Cargo.toml | 2 +- node/service/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 4 ++-- node/subsystem/Cargo.toml | 4 ++-- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 08d106bc0f..b826f45e25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2945,7 +2945,7 @@ dependencies = [ "libp2p-yamux", "multihash", "parity-multiaddr", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "pin-project 1.0.1", "smallvec 1.4.2", "wasm-timer", @@ -2970,7 +2970,7 @@ dependencies = [ "multihash", "multistream-select", "parity-multiaddr", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "pin-project 1.0.1", "prost", "prost-build", @@ -3138,7 +3138,7 @@ dependencies = [ "libp2p-core", "log", "nohash-hasher", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.4.2", "unsigned-varint 0.5.1", @@ -3318,7 +3318,7 @@ checksum = "07c0c9b6ef7a168c2ae854170b0b6b77550599afe06cc3ac390eb45c5d9c7110" dependencies = [ "futures 0.3.8", "libp2p-core", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "thiserror", "yamux", ] @@ -3921,7 +3921,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f53cef67919d7d247eb9a2f128ca9e522789967ef1eb4ccd8c71a95a8aedf596" dependencies = [ - "parking_lot 0.11.0", + "parking_lot 0.11.1", ] [[package]] @@ -4677,9 +4677,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", "lock_api 0.4.1", @@ -5049,7 +5049,7 @@ dependencies = [ "futures 0.3.8", "log", "parity-scale-codec", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5270,7 +5270,7 @@ dependencies = [ "futures-timer 3.0.2", "log", "parity-scale-codec", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "pin-project 1.0.1", "polkadot-node-network-protocol", "polkadot-node-primitives", @@ -5293,7 +5293,7 @@ dependencies = [ "futures-timer 3.0.2", "log", "parity-scale-codec", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "pin-project 1.0.1", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5317,7 +5317,7 @@ dependencies = [ "futures-timer 3.0.2", "log", "parity-scale-codec", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "pin-project 1.0.1", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5360,7 +5360,7 @@ dependencies = [ "futures 0.3.8", "log", "parity-scale-codec", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "polkadot-core-primitives", "sc-executor", "serde", @@ -5627,7 +5627,7 @@ dependencies = [ "pallet-im-online", "pallet-staking", "pallet-transaction-payment-rpc-runtime-api", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", "polkadot-collator-protocol", @@ -6047,7 +6047,7 @@ dependencies = [ "cfg-if 0.1.10", "fnv", "lazy_static", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "regex", "thiserror", ] @@ -9905,7 +9905,7 @@ checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ "futures 0.3.8", "js-sys", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "pin-utils", "wasm-bindgen", "wasm-bindgen-futures", @@ -10353,7 +10353,7 @@ dependencies = [ "futures 0.3.8", "log", "nohash-hasher", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "rand 0.7.3", "static_assertions", ] diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 339016be0d..72aba4323d 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -18,7 +18,7 @@ polkadot-node-network-protocol = { path = "../protocol" } [dev-dependencies] assert_matches = "1.4.0" -parking_lot = "0.11.0" +parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 9734c2571d..58560825b4 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -56,7 +56,7 @@ futures = "0.3.8" hex-literal = "0.3.1" lazy_static = "1.4.0" log = "0.4.11" -parking_lot = "0.11.0" +parking_lot = "0.11.1" serde = { version = "1.0.117", features = ["derive"] } slog = "2.5.2" diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 23d5c29f40..6b819c0269 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -11,7 +11,7 @@ futures = "0.3.8" futures-timer = "3.0.2" log = "0.4.11" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } -parking_lot = "0.11.0" +parking_lot = "0.11.1" pin-project = "1.0.1" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index ecfa33a13b..36dfea98f8 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -12,7 +12,7 @@ futures-timer = "3.0.2" log = "0.4.11" thiserror = "1.0.22" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } -parking_lot = { version = "0.11.0", optional = true } +parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.1" streamunordered = "0.5.1" @@ -30,6 +30,6 @@ substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate assert_matches = "1.4.0" async-trait = "0.1.41" futures = { version = "0.3.8", features = ["thread-pool"] } -parking_lot = "0.11.0" +parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } env_logger = "0.8.1" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 00df8228f2..2fef9f4c6a 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -12,7 +12,7 @@ futures = "0.3.8" futures-timer = "3.0.2" log = "0.4.11" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } -parking_lot = { version = "0.11.0", optional = true } +parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.1" polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } @@ -28,5 +28,5 @@ thiserror = "1.0.22" assert_matches = "1.4.0" async-trait = "0.1.41" futures = { version = "0.3.8", features = ["thread-pool"] } -parking_lot = "0.11.0" +parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } -- GitLab From 0fc08a2c105aabf1ebbaa7897b84e3dfc5429015 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 18 Nov 2020 16:36:38 +0100 Subject: [PATCH 020/203] Companion PR for substrate#7549 (#1967) * Companion PR for substrate#7549 * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 473 ++++++++++++++++----------------- node/network/bridge/Cargo.toml | 1 - node/network/bridge/src/lib.rs | 51 ++-- 3 files changed, 245 insertions(+), 280 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b826f45e25..ef7fed2486 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -454,9 +454,9 @@ checksum = "7059804e226b3ac116519a252d7f5fb985a5ccc0e93255e036a5f7e7283323f4" dependencies = [ "failure", "hashbrown 0.1.8", - "hmac", + "hmac 0.7.1", "once_cell 0.1.8", - "pbkdf2", + "pbkdf2 0.3.0", "rand 0.6.5", "sha2 0.8.2", ] @@ -1539,7 +1539,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", ] @@ -1557,7 +1557,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "chrono", "frame-benchmarking", @@ -1597,7 +1597,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -1613,7 +1613,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "serde", @@ -1624,7 +1624,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "bitflags", "frame-metadata", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1660,7 +1660,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1672,7 +1672,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1682,7 +1682,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1698,7 +1698,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -1712,7 +1712,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-api", @@ -1789,27 +1789,12 @@ dependencies = [ "futures-sink", ] -[[package]] -name = "futures-channel-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e5f4df964fa9c1c2f8bddeb5c3611631cacd93baf810fc8bb2fb4b495c263a" -dependencies = [ - "futures-core-preview", -] - [[package]] name = "futures-core" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" -[[package]] -name = "futures-core-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35b6263fb1ef523c3056565fa67b1d16f0a8604ff12b11b08c25f28a734c60a" - [[package]] name = "futures-cpupool" version = "0.1.8" @@ -1933,18 +1918,6 @@ dependencies = [ "slab", ] -[[package]] -name = "futures-util-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce968633c17e5f97936bd2797b6e38fb56cf16a7422319f7ec2e30d3c470e8d" -dependencies = [ - "futures-channel-preview", - "futures-core-preview", - "pin-utils", - "slab", -] - [[package]] name = "futures_codec" version = "0.4.1" @@ -2228,6 +2201,16 @@ dependencies = [ "digest 0.8.1", ] +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + [[package]] name = "hmac-drbg" version = "0.2.0" @@ -2236,7 +2219,7 @@ checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" dependencies = [ "digest 0.8.1", "generic-array 0.12.3", - "hmac", + "hmac 0.7.1", ] [[package]] @@ -2331,7 +2314,7 @@ dependencies = [ "time", "tokio 0.1.22", "tokio-buf", - "tokio-executor 0.1.10", + "tokio-executor", "tokio-io", "tokio-reactor", "tokio-tcp", @@ -2914,9 +2897,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.29.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021f703bfef6e3da78ef9828c8a244d639b8d57eedf58360922aca5ff69dfdcd" +checksum = "e3c2b4c99f8798be90746fc226acf95d3e6cff0655883634cc30dab1f64f438b" dependencies = [ "atomic", "bytes 0.5.6", @@ -2953,12 +2936,12 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3960524389409633550567e8a9e0684d25a33f4f8408887ff897dd9fdfbdb771" +checksum = "1b8186060d6bd415e4e928e6cb44c4fe7e7a7dd53437bd936ce7e5f421e45a51" dependencies = [ "asn1_der", - "bs58 0.3.1", + "bs58 0.4.0", "ed25519-dalek", "either", "fnv", @@ -2997,9 +2980,9 @@ dependencies = [ [[package]] name = "libp2p-deflate" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567962c5c5f8a1282979441300e1739ba939024010757c3dbfab4d462189df77" +checksum = "34aea69349e70a58ef9ecd21ac12c5eaa36255ac6986828079d26393f9e618cb" dependencies = [ "flate2", "futures 0.3.8", @@ -3008,9 +2991,9 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436280f5fe21a58fcaff82c2606945579241f32bc0eaf2d39321aa4624a66e7f" +checksum = "0baeff71fb5cb1fe1604f74a712a44b66a8c5900f4022411a1d550f09d6bb776" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3019,9 +3002,9 @@ dependencies = [ [[package]] name = "libp2p-floodsub" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc175613c5915332fd6458895407ec242ea055ae3b107a586626d5e3349350a" +checksum = "db0f925a45f310b678e70faf71a10023b829d02eb9cc2628a63de928936f3ade" dependencies = [ "cuckoofilter", "fnv", @@ -3037,9 +3020,9 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d500ad89ba14de4d18bebdff61a0ce3e769f1c5c5a95026c5da90187e5fff5c9" +checksum = "efeb65567174974f551a91f9f5719445b6695cad56f6a7a47a27111f37efb6b8" dependencies = [ "base64 0.13.0", "byteorder", @@ -3063,9 +3046,9 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b90b350e37f398b73d778bd94422f4e6a3afa2c1582742ce2446b8a0dba787" +checksum = "e074124669840484de564901d47f2d0892e73f6d8ee7c37e9c2644af1b217bf4" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3079,9 +3062,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb78341f114bf686d5fe50b33ff1a804d88fb326c0d39ee1c22db4346b21fc27" +checksum = "78a2653b2e3254a3bbeb66bfc3f0dca7d6cba6aa2a96791db114003dec1b5394" dependencies = [ "arrayvec 0.5.2", "bytes 0.5.6", @@ -3106,9 +3089,9 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b575514fce0a3ccbd065d6aa377bd4d5102001b05c1a22a5eee49c450254ef0f" +checksum = "786b068098794322239f8f04df88a52daeb7863b2e77501c4d85d32e0a8f2d26" dependencies = [ "async-std", "data-encoding", @@ -3128,9 +3111,9 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92b538238c80067c6417a58a07e41002b69d129355b60ec147d6337fdff0eb0" +checksum = "ed764eab613a8fb6b7dcf6c796f55a06fef2270e528329903e25cd3311b99663" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -3146,9 +3129,9 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93c77142e3e5b18fefa7d267305c777c9cbe9b2232ec489979390100bebcc1e6" +checksum = "fb441fb015ec16690099c5d910fcba271d357763b3dcb784db7b27bbb0b68372" dependencies = [ "bytes 0.5.6", "curve25519-dalek 3.0.0", @@ -3168,9 +3151,9 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7257135609e8877f4d286935cbe1e572b2018946881c3e7f63054577074a7ee7" +checksum = "82e5c50936cfdbe96a514e8992f304fa44cd3a681b6f779505f1ae62b3474705" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3183,9 +3166,9 @@ dependencies = [ [[package]] name = "libp2p-plaintext" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c88d59ba3e710a8c8e0535cb4a52e9e46534924cbbea4691f8c3aaad17b58c61" +checksum = "21026557c335d3639591f247b19b7536195772034ec7e9c463137227f95eaaa1" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -3214,9 +3197,9 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02ba1aa5727ccc118c09ba5111480873f2fe5608cb304e258fd12c173ecf27c9" +checksum = "2dd9a1e0e6563dec1c9e702f7e68bdaa43da62a84536aa06372d3fed3e25d4ca" dependencies = [ "async-trait", "bytes 0.5.6", @@ -3234,9 +3217,9 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa6fa33b16956b8a58afbfebe1406866011a1ab8960765bd36868952d7be6a1" +checksum = "565f0e06674b4033c978471e4083d5aaa8e03cef0719a0ec0905aaeaad39a919" dependencies = [ "either", "futures 0.3.8", @@ -3250,9 +3233,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0b6f4ef48d9493607fae069deecce0579320a1f3de6cb056770b151018a9a5" +checksum = "33f3dce259c0d3127af5167f45c275b6c047320efdd0e40fde947482487af0a3" dependencies = [ "async-std", "futures 0.3.8", @@ -3266,9 +3249,9 @@ dependencies = [ [[package]] name = "libp2p-uds" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945bed3c989a1b290b5a0d4e8fa6e44e01840efb9a5ab3f0d3d174f0e451ac0e" +checksum = "5e0aba04370a00d8d0236e350bc862926c1b42542a169aa6a481e660e5b990fe" dependencies = [ "async-std", "futures 0.3.8", @@ -3278,9 +3261,9 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66518a4455e15c283637b4d7b579aef928b75a3fc6c50a41e7e6b9fa86672ca0" +checksum = "6c703816f4170477a375b49c56d349e535ce68388f81ba1d9a3c8e2517effa82" dependencies = [ "futures 0.3.8", "js-sys", @@ -3292,9 +3275,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc561870477523245efaaea1b6b743c70115f10c670e62bcbbe4d3153be5f0c" +checksum = "8d5e7268a959748040a0cf7456ad655be55b87f0ceda03bdb5b53674726b28f7" dependencies = [ "async-tls", "either", @@ -3312,9 +3295,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c0c9b6ef7a168c2ae854170b0b6b77550599afe06cc3ac390eb45c5d9c7110" +checksum = "1a0798cbb58535162c40858493d09af06eac42a26e4966e58de0df701f559348" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3571,18 +3554,18 @@ dependencies = [ [[package]] name = "minicbor" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2ef6aa869726518c5d8206fa5d1337bda8a0442807611be617891c018fa781" +checksum = "0164190d1771b1458c3742075b057ed55d25cd9dfb930aade99315a1eb1fe12d" dependencies = [ "minicbor-derive", ] [[package]] name = "minicbor-derive" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b3569c0dbfff1b8d5f1434c642b67f5bf81c0f354a3f5f8f180b549dba3c07c" +checksum = "2e071b3159835ee91df62dbdbfdd7ec366b7ea77c838f43aff4acda6b61bcfb9" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -3969,7 +3952,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -3985,7 +3968,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4000,7 +3983,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4025,7 +4008,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4039,7 +4022,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4055,7 +4038,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4070,7 +4053,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4085,7 +4068,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4106,7 +4089,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4122,7 +4105,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4142,7 +4125,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4159,7 +4142,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4173,7 +4156,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4189,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4203,7 +4186,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4218,7 +4201,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4222,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4255,7 +4238,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4268,7 +4251,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "enumflags2", "frame-support", @@ -4283,7 +4266,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4298,7 +4281,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4318,7 +4301,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4334,7 +4317,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4348,7 +4331,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4370,7 +4353,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4381,7 +4364,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4395,7 +4378,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4413,7 +4396,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "frame-system", @@ -4430,7 +4413,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4448,7 +4431,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-support", "parity-scale-codec", @@ -4461,7 +4444,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4476,7 +4459,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-benchmarking", "frame-support", @@ -4492,7 +4475,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4773,6 +4756,15 @@ dependencies = [ "rayon", ] +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac 0.8.0", +] + [[package]] name = "pdqselect" version = "0.1.0" @@ -5058,7 +5050,6 @@ dependencies = [ "sc-network", "sp-core", "sp-keyring", - "sp-runtime", ] [[package]] @@ -6709,7 +6700,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "async-trait", "bytes 0.5.6", @@ -6739,7 +6730,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6757,13 +6748,12 @@ dependencies = [ "sp-runtime", "sp-transaction-pool", "substrate-prometheus-endpoint", - "tokio-executor 0.2.0-alpha.6", ] [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6780,7 +6770,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6801,7 +6791,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6812,7 +6802,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6821,6 +6811,7 @@ dependencies = [ "fdlimit", "futures 0.3.8", "hex", + "lazy_static", "libp2p", "log", "names", @@ -6856,7 +6847,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6867,7 +6858,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "fnv", @@ -6904,7 +6895,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "blake2-rfc", "hash-db", @@ -6934,7 +6925,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6945,7 +6936,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "fork-tree", @@ -6990,7 +6981,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "futures 0.3.8", @@ -7014,7 +7005,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7027,7 +7018,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7052,7 +7043,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "sc-client-api", @@ -7066,7 +7057,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "lazy_static", @@ -7095,7 +7086,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "log", @@ -7112,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "parity-scale-codec", @@ -7127,7 +7118,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "parity-scale-codec", @@ -7145,7 +7136,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "finality-grandpa", @@ -7182,7 +7173,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "finality-grandpa", @@ -7206,7 +7197,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7224,7 +7215,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "async-trait", "derive_more", @@ -7244,7 +7235,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "hash-db", "lazy_static", @@ -7263,7 +7254,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "async-std", "async-trait", @@ -7317,7 +7308,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7332,7 +7323,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "bytes 0.5.6", "fnv", @@ -7359,7 +7350,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "libp2p", @@ -7372,7 +7363,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7381,7 +7372,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "hash-db", @@ -7414,7 +7405,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "futures 0.3.8", @@ -7438,7 +7429,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.1.30", "jsonrpc-core", @@ -7456,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "directories", @@ -7520,7 +7511,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "parity-scale-codec", @@ -7534,7 +7525,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7553,7 +7544,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7574,7 +7565,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "erased-serde", "log", @@ -7593,7 +7584,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "futures 0.3.8", @@ -7614,7 +7605,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "futures 0.3.8", @@ -8046,7 +8037,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "log", @@ -8058,7 +8049,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "hash-db", "parity-scale-codec", @@ -8073,7 +8064,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8085,7 +8076,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "serde", @@ -8097,7 +8088,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "integer-sqrt", "num-traits 0.2.14", @@ -8110,7 +8101,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-api", @@ -8122,7 +8113,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8133,7 +8124,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-api", @@ -8145,7 +8136,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "lru 0.4.3", @@ -8162,7 +8153,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "serde", "serde_json", @@ -8171,7 +8162,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8197,7 +8188,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "merlin", "parity-scale-codec", @@ -8217,7 +8208,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8226,7 +8217,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8238,7 +8229,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "base58", "blake2-rfc", @@ -8282,7 +8273,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8291,7 +8282,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8301,7 +8292,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "environmental", "parity-scale-codec", @@ -8312,7 +8303,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "finality-grandpa", "log", @@ -8329,7 +8320,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8341,7 +8332,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "hash-db", @@ -8365,7 +8356,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "lazy_static", "sp-core", @@ -8376,7 +8367,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "async-trait", "derive_more", @@ -8392,7 +8383,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "serde", @@ -8404,7 +8395,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8415,7 +8406,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "sp-api", "sp-core", @@ -8425,7 +8416,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "backtrace", "log", @@ -8434,7 +8425,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "serde", "sp-core", @@ -8443,7 +8434,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "either", "hash256-std-hasher", @@ -8465,7 +8456,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8481,7 +8472,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "Inflector", "proc-macro-crate", @@ -8493,7 +8484,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "serde", "serde_json", @@ -8502,7 +8493,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-api", @@ -8515,7 +8506,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8525,7 +8516,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "hash-db", "log", @@ -8547,12 +8538,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8565,7 +8556,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "sp-core", @@ -8578,7 +8569,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8592,7 +8583,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "log", "parity-scale-codec", @@ -8605,7 +8596,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "derive_more", "futures 0.3.8", @@ -8620,7 +8611,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "hash-db", "memory-db", @@ -8634,7 +8625,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "futures-core", @@ -8646,7 +8637,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8658,7 +8649,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8781,8 +8772,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236" dependencies = [ - "hmac", - "pbkdf2", + "hmac 0.7.1", + "pbkdf2 0.3.0", "schnorrkel", "sha2 0.8.2", "zeroize", @@ -8791,7 +8782,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "chrono", "console_error_panic_hook", @@ -8817,7 +8808,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "platforms", ] @@ -8825,7 +8816,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8848,7 +8839,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "async-std", "derive_more", @@ -8862,7 +8853,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.1.30", "futures 0.3.8", @@ -8889,7 +8880,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8899,7 +8890,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#71d027841a57a6bfa0549218923e78477cf96a0a" +source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -9122,18 +9113,20 @@ dependencies = [ [[package]] name = "tiny-bip39" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2" +checksum = "d9e44c4759bae7f1032e286a7ef990bd9ed23fe831b7eeba0beb97484c2e59b8" dependencies = [ - "failure", - "hmac", + "anyhow", + "hmac 0.8.1", "once_cell 1.5.1", - "pbkdf2", + "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.8.2", + "sha2 0.9.2", + "thiserror", "unicode-normalization", + "zeroize", ] [[package]] @@ -9172,11 +9165,11 @@ dependencies = [ "num_cpus", "tokio-codec", "tokio-current-thread", - "tokio-executor 0.1.10", + "tokio-executor", "tokio-fs", "tokio-io", "tokio-reactor", - "tokio-sync 0.1.8", + "tokio-sync", "tokio-tcp", "tokio-threadpool", "tokio-timer", @@ -9236,7 +9229,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ "futures 0.1.30", - "tokio-executor 0.1.10", + "tokio-executor", ] [[package]] @@ -9249,17 +9242,6 @@ dependencies = [ "futures 0.1.30", ] -[[package]] -name = "tokio-executor" -version = "0.2.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee9ceecf69145923834ea73f32ba40c790fd877b74a7817dd0b089f1eb9c7c8" -dependencies = [ - "futures-util-preview", - "lazy_static", - "tokio-sync 0.2.0-alpha.6", -] - [[package]] name = "tokio-fs" version = "0.1.7" @@ -9320,9 +9302,9 @@ dependencies = [ "num_cpus", "parking_lot 0.9.0", "slab", - "tokio-executor 0.1.10", + "tokio-executor", "tokio-io", - "tokio-sync 0.1.8", + "tokio-sync", ] [[package]] @@ -9356,17 +9338,6 @@ dependencies = [ "futures 0.1.30", ] -[[package]] -name = "tokio-sync" -version = "0.2.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1aaeb685540f7407ea0e27f1c9757d258c7c6bf4e3eb19da6fc59b747239d2" -dependencies = [ - "fnv", - "futures-core-preview", - "futures-util-preview", -] - [[package]] name = "tokio-tcp" version = "0.1.4" @@ -9395,7 +9366,7 @@ dependencies = [ "log", "num_cpus", "slab", - "tokio-executor 0.1.10", + "tokio-executor", ] [[package]] @@ -9407,7 +9378,7 @@ dependencies = [ "crossbeam-utils 0.7.2", "futures 0.1.30", "slab", - "tokio-executor 0.1.10", + "tokio-executor", ] [[package]] diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 72aba4323d..3e89edae2b 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -12,7 +12,6 @@ polkadot-primitives = { path = "../../../primitives" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-network-protocol = { path = "../protocol" } diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 9ce841f083..1ea5f47b78 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -27,7 +27,6 @@ use futures::stream::BoxStream; use futures::channel::{mpsc, oneshot}; use sc_network::Event as NetworkEvent; -use sp_runtime::ConsensusEngineId; use polkadot_subsystem::{ ActiveLeavesUpdate, FromOverseer, OverseerSignal, Subsystem, SubsystemContext, SpawnedSubsystem, SubsystemError, @@ -56,12 +55,8 @@ mod validator_discovery; /// We use the same limit to compute the view sent to peers locally. const MAX_VIEW_HEADS: usize = 5; -/// The engine ID of the validation protocol. -pub const VALIDATION_PROTOCOL_ID: ConsensusEngineId = *b"pvn1"; /// The protocol name for the validation peer-set. pub const VALIDATION_PROTOCOL_NAME: &'static str = "/polkadot/validation/1"; -/// The engine ID of the collation protocol. -pub const COLLATION_PROTOCOL_ID: ConsensusEngineId = *b"pcn1"; /// The protocol name for the collation peer-set. pub const COLLATION_PROTOCOL_NAME: &'static str = "/polkadot/collation/1"; @@ -88,10 +83,10 @@ pub enum WireMessage { /// Information about the notifications protocol. Should be used during network configuration /// or shortly after startup to register the protocol with the network service. -pub fn notifications_protocol_info() -> Vec<(ConsensusEngineId, std::borrow::Cow<'static, str>)> { +pub fn notifications_protocol_info() -> Vec> { vec![ - (VALIDATION_PROTOCOL_ID, VALIDATION_PROTOCOL_NAME.into()), - (COLLATION_PROTOCOL_ID, COLLATION_PROTOCOL_NAME.into()), + VALIDATION_PROTOCOL_NAME.into(), + COLLATION_PROTOCOL_NAME.into(), ] } @@ -108,8 +103,8 @@ pub enum NetworkAction { pub trait Network: Send + 'static { /// Get a stream of all events occurring on the network. This may include events unrelated /// to the Polkadot protocol - the user of this function should filter only for events related - /// to the [`VALIDATION_PROTOCOL_ID`](VALIDATION_PROTOCOL_ID) - /// or [`COLLATION_PROTOCOL_ID`](COLLATION_PROTOCOL_ID) + /// to the [`VALIDATION_PROTOCOL_NAME`](VALIDATION_PROTOCOL_NAME) + /// or [`COLLATION_PROTOCOL_NAME`](COLLATION_PROTOCOL_NAME) fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent>; /// Get access to an underlying sink for all network actions. @@ -166,12 +161,12 @@ impl Network for Arc> { match peer_set { PeerSet::Validation => self.0.write_notification( peer, - VALIDATION_PROTOCOL_ID, + VALIDATION_PROTOCOL_NAME.into(), message, ), PeerSet::Collation => self.0.write_notification( peer, - COLLATION_PROTOCOL_ID, + COLLATION_PROTOCOL_NAME.into(), message, ), } @@ -304,28 +299,28 @@ fn action_from_network_message(event: Option) -> Action { Action::Abort } Some(NetworkEvent::Dht(_)) => Action::Nop, - Some(NetworkEvent::NotificationStreamOpened { remote, engine_id, role }) => { + Some(NetworkEvent::NotificationStreamOpened { remote, protocol, role }) => { let role = role.into(); - match engine_id { - x if x == VALIDATION_PROTOCOL_ID + match protocol { + x if x == VALIDATION_PROTOCOL_NAME => Action::PeerConnected(PeerSet::Validation, remote, role), - x if x == COLLATION_PROTOCOL_ID + x if x == COLLATION_PROTOCOL_NAME => Action::PeerConnected(PeerSet::Collation, remote, role), _ => Action::Nop, } } - Some(NetworkEvent::NotificationStreamClosed { remote, engine_id }) => { - match engine_id { - x if x == VALIDATION_PROTOCOL_ID + Some(NetworkEvent::NotificationStreamClosed { remote, protocol }) => { + match protocol { + x if x == VALIDATION_PROTOCOL_NAME => Action::PeerDisconnected(PeerSet::Validation, remote), - x if x == COLLATION_PROTOCOL_ID + x if x == COLLATION_PROTOCOL_NAME => Action::PeerDisconnected(PeerSet::Collation, remote), _ => Action::Nop, } } Some(NetworkEvent::NotificationsReceived { remote, messages }) => { let v_messages: Result, _> = messages.iter() - .filter(|(engine_id, _)| engine_id == &VALIDATION_PROTOCOL_ID) + .filter(|(protocol, _)| protocol == &VALIDATION_PROTOCOL_NAME) .map(|(_, msg_bytes)| WireMessage::decode(&mut msg_bytes.as_ref())) .collect(); @@ -335,7 +330,7 @@ fn action_from_network_message(event: Option) -> Action { }; let c_messages: Result, _> = messages.iter() - .filter(|(engine_id, _)| engine_id == &COLLATION_PROTOCOL_ID) + .filter(|(protocol, _)| protocol == &COLLATION_PROTOCOL_NAME) .map(|(_, msg_bytes)| WireMessage::decode(&mut msg_bytes.as_ref())) .collect(); @@ -827,10 +822,10 @@ mod tests { ) } - fn peer_set_engine_id(peer_set: PeerSet) -> ConsensusEngineId { + fn peer_set_protocol(peer_set: PeerSet) -> std::borrow::Cow<'static, str> { match peer_set { - PeerSet::Validation => VALIDATION_PROTOCOL_ID, - PeerSet::Collation => COLLATION_PROTOCOL_ID, + PeerSet::Validation => VALIDATION_PROTOCOL_NAME.into(), + PeerSet::Collation => COLLATION_PROTOCOL_NAME.into(), } } @@ -890,7 +885,7 @@ mod tests { async fn connect_peer(&mut self, peer: PeerId, peer_set: PeerSet, role: ObservedRole) { self.send_network_event(NetworkEvent::NotificationStreamOpened { remote: peer, - engine_id: peer_set_engine_id(peer_set), + protocol: peer_set_protocol(peer_set), role: role.into(), }).await; } @@ -898,14 +893,14 @@ mod tests { async fn disconnect_peer(&mut self, peer: PeerId, peer_set: PeerSet) { self.send_network_event(NetworkEvent::NotificationStreamClosed { remote: peer, - engine_id: peer_set_engine_id(peer_set), + protocol: peer_set_protocol(peer_set), }).await; } async fn peer_message(&mut self, peer: PeerId, peer_set: PeerSet, message: Vec) { self.send_network_event(NetworkEvent::NotificationsReceived { remote: peer, - messages: vec![(peer_set_engine_id(peer_set), message.into())], + messages: vec![(peer_set_protocol(peer_set), message.into())], }).await; } -- GitLab From 6c16b424d17873d725b56bb0d8ee6f9e229b7a59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Nov 2020 16:00:33 +0000 Subject: [PATCH 021/203] Bump smallvec from 1.4.2 to 1.5.0 (#1971) Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.4.2 to 1.5.0. - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.4.2...v1.5.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 76 +++++++++---------- node/core/av-store/Cargo.toml | 2 +- .../availability-distribution/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 11 files changed, 48 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ef7fed2486..c03a77d1db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -893,7 +893,7 @@ dependencies = [ "log", "regalloc", "serde", - "smallvec 1.4.2", + "smallvec 1.5.0", "target-lexicon", "thiserror", ] @@ -931,7 +931,7 @@ checksum = "2ef419efb4f94ecc02e5d9fbcc910d2bb7f0040e2de570e63a454f883bc891d6" dependencies = [ "cranelift-codegen", "log", - "smallvec 1.4.2", + "smallvec 1.5.0", "target-lexicon", ] @@ -1635,7 +1635,7 @@ dependencies = [ "parity-scale-codec", "paste", "serde", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-arithmetic", "sp-core", "sp-inherents", @@ -2768,7 +2768,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -2806,7 +2806,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0315ef2f688e33844400b31f11c263f2b3dc21d8b9355c6891c5f185fae43f9a" dependencies = [ "parity-util-mem", - "smallvec 1.4.2", + "smallvec 1.5.0", ] [[package]] @@ -2835,7 +2835,7 @@ dependencies = [ "parking_lot 0.10.2", "regex", "rocksdb", - "smallvec 1.4.2", + "smallvec 1.5.0", ] [[package]] @@ -2930,7 +2930,7 @@ dependencies = [ "parity-multiaddr", "parking_lot 0.11.1", "pin-project 1.0.1", - "smallvec 1.4.2", + "smallvec 1.5.0", "wasm-timer", ] @@ -2961,7 +2961,7 @@ dependencies = [ "ring", "rw-stream-sink", "sha2 0.9.2", - "smallvec 1.4.2", + "smallvec 1.5.0", "thiserror", "unsigned-varint 0.5.1", "void", @@ -3015,7 +3015,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "smallvec 1.4.2", + "smallvec 1.5.0", ] [[package]] @@ -3039,7 +3039,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.2", - "smallvec 1.4.2", + "smallvec 1.5.0", "unsigned-varint 0.5.1", "wasm-timer", ] @@ -3056,7 +3056,7 @@ dependencies = [ "log", "prost", "prost-build", - "smallvec 1.4.2", + "smallvec 1.5.0", "wasm-timer", ] @@ -3080,7 +3080,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.2", - "smallvec 1.4.2", + "smallvec 1.5.0", "uint", "unsigned-varint 0.5.1", "void", @@ -3104,7 +3104,7 @@ dependencies = [ "log", "net2", "rand 0.7.3", - "smallvec 1.4.2", + "smallvec 1.5.0", "void", "wasm-timer", ] @@ -3123,7 +3123,7 @@ dependencies = [ "nohash-hasher", "parking_lot 0.11.1", "rand 0.7.3", - "smallvec 1.4.2", + "smallvec 1.5.0", "unsigned-varint 0.5.1", ] @@ -3210,7 +3210,7 @@ dependencies = [ "lru 0.6.1", "minicbor", "rand 0.7.3", - "smallvec 1.4.2", + "smallvec 1.5.0", "unsigned-varint 0.5.1", "wasm-timer", ] @@ -3226,7 +3226,7 @@ dependencies = [ "libp2p-core", "log", "rand 0.7.3", - "smallvec 1.4.2", + "smallvec 1.5.0", "void", "wasm-timer", ] @@ -3695,7 +3695,7 @@ dependencies = [ "futures 0.3.8", "log", "pin-project 1.0.1", - "smallvec 1.4.2", + "smallvec 1.5.0", "unsigned-varint 0.5.1", ] @@ -4403,7 +4403,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "serde", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-core", "sp-io", "sp-runtime", @@ -4582,7 +4582,7 @@ dependencies = [ "parity-util-mem-derive", "parking_lot 0.10.2", "primitive-types", - "smallvec 1.4.2", + "smallvec 1.5.0", "winapi 0.3.9", ] @@ -4707,7 +4707,7 @@ dependencies = [ "cloudabi 0.0.3", "libc", "redox_syscall", - "smallvec 1.4.2", + "smallvec 1.5.0", "winapi 0.3.9", ] @@ -4722,7 +4722,7 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec 1.4.2", + "smallvec 1.5.0", "winapi 0.3.9", ] @@ -4961,7 +4961,7 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "sc-keystore", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-application-crypto", "sp-core", "sp-keyring", @@ -5004,7 +5004,7 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-core", "sp-keyring", "thiserror", @@ -5088,7 +5088,7 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "sc-service", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-core", "thiserror", ] @@ -5269,7 +5269,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-core", "substrate-prometheus-endpoint", "thiserror", @@ -5293,7 +5293,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-core", ] @@ -5485,7 +5485,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -5776,7 +5776,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -6420,7 +6420,7 @@ version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" dependencies = [ - "smallvec 1.4.2", + "smallvec 1.5.0", ] [[package]] @@ -6451,7 +6451,7 @@ checksum = "b9ba8aaf5fe7cf307c6dbdaeed85478961d29e25e3bee5169e11b92fa9f027a8" dependencies = [ "log", "rustc-hash", - "smallvec 1.4.2", + "smallvec 1.5.0", ] [[package]] @@ -6564,7 +6564,7 @@ dependencies = [ "polkadot-runtime-parachains", "serde", "serde_derive", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -7984,9 +7984,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252" +checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" [[package]] name = "snow" @@ -8524,7 +8524,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", "rand 0.7.3", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-core", "sp-externalities", "sp-panic-handler", @@ -9531,7 +9531,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec 1.4.2", + "smallvec 1.5.0", "thread_local", "tracing", "tracing-core", @@ -9555,7 +9555,7 @@ dependencies = [ "hashbrown 0.8.2", "log", "rustc-hex", - "smallvec 1.4.2", + "smallvec 1.5.0", ] [[package]] @@ -9932,7 +9932,7 @@ dependencies = [ "log", "region", "rustc-demangle", - "smallvec 1.4.2", + "smallvec 1.5.0", "target-lexicon", "wasmparser 0.59.0", "wasmtime-environ", @@ -10183,7 +10183,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.4.2", + "smallvec 1.5.0", "sp-api", "sp-authority-discovery", "sp-block-builder", diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index d37df8b945..b8b964c4a4 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -24,7 +24,7 @@ sc-service = { git = "https://github.com/paritytech/substrate", branch = "master [dev-dependencies] env_logger = "0.8.1" assert_matches = "1.4.0" -smallvec = "1.4.2" +smallvec = "1.5.0" kvdb-memorydb = "0.7.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index 4a8f2de880..accb59c043 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -26,4 +26,4 @@ sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "maste futures-timer = "3.0.2" env_logger = "0.8.1" assert_matches = "1.4.0" -smallvec = "1.4.2" +smallvec = "1.5.0" diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index da19fe442c..dade9a649e 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -18,7 +18,7 @@ polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsys [dev-dependencies] env_logger = "0.8.1" assert_matches = "1.4.0" -smallvec = "1.4.2" +smallvec = "1.5.0" futures-timer = "3.0.2" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 6b819c0269..20326cf077 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -19,7 +19,7 @@ polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.4.2" +smallvec = "1.5.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 2fef9f4c6a..372c641e6e 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -19,7 +19,7 @@ polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.4.2" +smallvec = "1.5.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.22" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index de1048d31a..3d89cdbc87 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.4.2" +smallvec = "1.5.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 5f3460426e..d26ad528bf 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.4.2" +smallvec = "1.5.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index d6d75d5fc1..309608c641 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -9,7 +9,7 @@ build = "build.rs" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.4.2" +smallvec = "1.5.0" frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index d4d651c31f..9f23f5d400 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.4.2" +smallvec = "1.5.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 12b20015c6..7544eecc99 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.4.2" +smallvec = "1.5.0" static_assertions = "1.1.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -- GitLab From 68be404682f71a9220f3e29037d075d3cbe4e3d4 Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Wed, 18 Nov 2020 22:06:45 +0100 Subject: [PATCH 022/203] base priority on client changes only (#1969) --- scripts/github/generate_release_text.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/github/generate_release_text.rb b/scripts/github/generate_release_text.rb index caca24d77a..3b2a885eed 100644 --- a/scripts/github/generate_release_text.rb +++ b/scripts/github/generate_release_text.rb @@ -24,7 +24,7 @@ renderer = ERB.new( ) # get ref of last polkadot release -last_ref = "refs/tags/" + github_client.latest_release(ENV['GITHUB_REPOSITORY']).tag_name +last_ref = 'refs/tags/' + github_client.latest_release(ENV['GITHUB_REPOSITORY']).tag_name polkadot_cl = Changelog.new( 'paritytech/polkadot', last_ref, current_ref, token: token @@ -37,7 +37,7 @@ def get_substrate_commit(client, ref) client.contents( ENV['GITHUB_REPOSITORY'], path: 'Cargo.lock', - query: { ref: "#{ref}"} + query: { ref: ref.to_s } ).content ) ).parsed @@ -81,7 +81,9 @@ runtime_changes.each do |c| c[:pretty_title] = "✅ `trivial` #{c[:pretty_title]}" end -release_priority = Changelog.highest_priority_for_changes(all_changes) +# The priority of users upgraded is determined by the highest-priority +# *Client* change +release_priority = Changelog.highest_priority_for_changes(client_changes) # Pulled from the previous Github step rustc_stable = ENV['RUSTC_STABLE'] -- GitLab From 48fcbef6ad67f246032e00a6cfebeef1556cf2f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 14:18:03 +0100 Subject: [PATCH 023/203] Bump pin-project from 1.0.1 to 1.0.2 (#1982) Bumps [pin-project](https://github.com/taiki-e/pin-project) from 1.0.1 to 1.0.2. - [Release notes](https://github.com/taiki-e/pin-project/releases) - [Changelog](https://github.com/taiki-e/pin-project/blob/master/CHANGELOG.md) - [Commits](https://github.com/taiki-e/pin-project/compare/v1.0.1...v1.0.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 26 +++++++++++++------------- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c03a77d1db..9a71ee8ba5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1911,7 +1911,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.1", + "pin-project 1.0.2", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -2339,7 +2339,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project 1.0.1", + "pin-project 1.0.2", "socket2", "tokio 0.2.22", "tower-service", @@ -2929,7 +2929,7 @@ dependencies = [ "multihash", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.1", + "pin-project 1.0.2", "smallvec 1.5.0", "wasm-timer", ] @@ -2954,7 +2954,7 @@ dependencies = [ "multistream-select", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.1", + "pin-project 1.0.2", "prost", "prost-build", "rand 0.7.3", @@ -3694,7 +3694,7 @@ dependencies = [ "bytes 0.5.6", "futures 0.3.8", "log", - "pin-project 1.0.1", + "pin-project 1.0.2", "smallvec 1.5.0", "unsigned-varint 0.5.1", ] @@ -4853,11 +4853,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee41d838744f60d959d7074e3afb6b35c7456d0f61cad38a24e35e6553f73841" +checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" dependencies = [ - "pin-project-internal 1.0.1", + "pin-project-internal 1.0.2", ] [[package]] @@ -4873,9 +4873,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a4ffa594b66bff340084d4081df649a7dc049ac8d7fc458d8e628bfbbb2f86" +checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -5262,7 +5262,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.1", + "pin-project 1.0.2", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem-test-helpers", @@ -5285,7 +5285,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.1", + "pin-project 1.0.2", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -5309,7 +5309,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.1", + "pin-project 1.0.2", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 20326cf077..21f7bb9675 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -12,7 +12,7 @@ futures-timer = "3.0.2" log = "0.4.11" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" -pin-project = "1.0.1" +pin-project = "1.0.2" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 36dfea98f8..2125ff8aa4 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -13,7 +13,7 @@ log = "0.4.11" thiserror = "1.0.22" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } -pin-project = "1.0.1" +pin-project = "1.0.2" streamunordered = "0.5.1" polkadot-node-primitives = { path = "../primitives" } diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 372c641e6e..b826e79e5e 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -13,7 +13,7 @@ futures-timer = "3.0.2" log = "0.4.11" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } -pin-project = "1.0.1" +pin-project = "1.0.2" polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } -- GitLab From 93fb774e4f54e5223a45b1b6d7d3257492614db0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Nov 2020 14:18:18 +0100 Subject: [PATCH 024/203] Bump env_logger from 0.8.1 to 0.8.2 (#1981) Bumps [env_logger](https://github.com/env-logger-rs/env_logger) from 0.8.1 to 0.8.2. - [Release notes](https://github.com/env-logger-rs/env_logger/releases) - [Changelog](https://github.com/env-logger-rs/env_logger/blob/master/CHANGELOG.md) - [Commits](https://github.com/env-logger-rs/env_logger/compare/v0.8.1...v0.8.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 16 ++++++++-------- node/core/av-store/Cargo.toml | 2 +- .../network/availability-distribution/Cargo.toml | 2 +- node/network/bitfield-distribution/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/service/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a71ee8ba5..9fe2e669c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1334,9 +1334,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54532e3223c5af90a6a757c90b5c5521564b07e5e7a958681bcd2afad421cdcd" +checksum = "f26ecb66b4bdca6c1409b40fb255eefc2bd4f6d135dab3c3124f80ffa2a9661e" dependencies = [ "atty", "humantime 2.0.1", @@ -4927,7 +4927,7 @@ version = "0.1.0" dependencies = [ "assert_matches", "bitvec", - "env_logger 0.8.1", + "env_logger 0.8.2", "futures 0.3.8", "log", "maplit", @@ -4949,7 +4949,7 @@ name = "polkadot-availability-distribution" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.8.1", + "env_logger 0.8.2", "futures 0.3.8", "futures-timer 3.0.2", "log", @@ -4995,7 +4995,7 @@ name = "polkadot-collator-protocol" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.8.1", + "env_logger 0.8.2", "futures 0.3.8", "futures-timer 3.0.2", "log", @@ -5073,7 +5073,7 @@ name = "polkadot-node-core-av-store" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.8.1", + "env_logger 0.8.2", "futures 0.3.8", "futures-timer 3.0.2", "kvdb", @@ -5303,7 +5303,7 @@ version = "0.1.0" dependencies = [ "assert_matches", "async-trait", - "env_logger 0.8.1", + "env_logger 0.8.2", "futures 0.3.8", "futures-timer 3.0.2", "log", @@ -5606,7 +5606,7 @@ dependencies = [ name = "polkadot-service" version = "0.8.3" dependencies = [ - "env_logger 0.8.1", + "env_logger 0.8.2", "frame-benchmarking", "frame-system-rpc-runtime-api", "futures 0.3.8", diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index b8b964c4a4..92463270f4 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -22,7 +22,7 @@ polkadot-primitives = { path = "../../../primitives" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } [dev-dependencies] -env_logger = "0.8.1" +env_logger = "0.8.2" assert_matches = "1.4.0" smallvec = "1.5.0" kvdb-memorydb = "0.7.0" diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index accb59c043..f69e35741b 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -24,6 +24,6 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } futures-timer = "3.0.2" -env_logger = "0.8.1" +env_logger = "0.8.2" assert_matches = "1.4.0" smallvec = "1.5.0" diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index 1238894e4c..f5a6a2f130 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -21,6 +21,6 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } maplit = "1.0.2" -env_logger = "0.8.1" +env_logger = "0.8.2" assert_matches = "1.4.0" tempfile = "3.1.0" diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index dade9a649e..740b8e1435 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -16,7 +16,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } [dev-dependencies] -env_logger = "0.8.1" +env_logger = "0.8.2" assert_matches = "1.4.0" smallvec = "1.5.0" futures-timer = "3.0.2" diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 58560825b4..a3a5680474 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -95,7 +95,7 @@ polkadot-statement-distribution = { path = "../network/statement-distribution", [dev-dependencies] polkadot-test-client = { path = "../test/client" } -env_logger = "0.8.1" +env_logger = "0.8.2" [features] default = ["db", "full-node"] diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 2125ff8aa4..3b18d3c481 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -32,4 +32,4 @@ async-trait = "0.1.41" futures = { version = "0.3.8", features = ["thread-pool"] } parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } -env_logger = "0.8.1" +env_logger = "0.8.2" -- GitLab From 6376b57b7aafda534a9fc3b3a66d4852a93a9cb4 Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Thu, 19 Nov 2020 17:52:21 +0100 Subject: [PATCH 025/203] add max_pov_size to runtime config and PersistedValidationData (#1984) * add max_pov_size to runtime config and PersistedValidationData Closes #1572. * set default genesis max_pov_size * apply suggestions from code review * add default max_pov_size to polkadot_testnet_genesis --- node/core/av-store/src/tests.rs | 1 + node/core/backing/src/lib.rs | 1 + node/core/candidate-validation/src/lib.rs | 22 +++++++++---------- .../availability-distribution/src/tests.rs | 1 + node/service/src/chain_spec.rs | 2 ++ node/test/service/src/chain_spec.rs | 1 + primitives/src/v1.rs | 2 ++ runtime/parachains/src/configuration.rs | 16 ++++++++++++++ runtime/parachains/src/util.rs | 2 ++ 9 files changed, 36 insertions(+), 12 deletions(-) diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 9493e910db..7cad86d43b 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -73,6 +73,7 @@ impl Default for TestState { block_number: 5, hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), + max_pov_size: 1024, }; let pruning_config = PruningConfig { diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index c3ab45c980..99104cb958 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -1031,6 +1031,7 @@ mod tests { block_number: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), + max_pov_size: 1024, }, transient: TransientValidationData { max_code_size: 1000, diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 2a03a0facf..121508e3c1 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -347,16 +347,14 @@ async fn spawn_validate_exhaustive( /// are passed, `Err` otherwise. fn perform_basic_checks( candidate: &CandidateDescriptor, - max_block_data_size: Option, + max_pov_size: u32, pov: &PoV, ) -> Result<(), InvalidCandidate> { let encoded_pov = pov.encode(); let hash = pov.hash(); - if let Some(max_size) = max_block_data_size { - if encoded_pov.len() as u64 > max_size { - return Err(InvalidCandidate::ParamsTooLarge(encoded_pov.len() as u64)); - } + if encoded_pov.len() > max_pov_size as usize { + return Err(InvalidCandidate::ParamsTooLarge(encoded_pov.len() as u64)); } if hash != candidate.pov_hash { @@ -412,7 +410,7 @@ fn validate_candidate_exhaustive( pov: Arc, spawn: S, ) -> Result { - if let Err(e) = perform_basic_checks(&descriptor, None, &*pov) { + if let Err(e) = perform_basic_checks(&descriptor, persisted_validation_data.max_pov_size, &*pov) { return Ok(ValidationResult::Invalid(e)) } @@ -819,7 +817,7 @@ mod tests { #[test] fn candidate_validation_ok_is_ok() { - let validation_data: PersistedValidationData = Default::default(); + let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; let pov = PoV { block_data: BlockData(vec![1; 32]) }; @@ -827,7 +825,7 @@ mod tests { descriptor.pov_hash = pov.hash(); collator_sign(&mut descriptor, Sr25519Keyring::Alice); - assert!(perform_basic_checks(&descriptor, Some(1024), &pov).is_ok()); + assert!(perform_basic_checks(&descriptor, validation_data.max_pov_size, &pov).is_ok()); let validation_result = WasmValidationResult { head_data: HeadData(vec![1, 1, 1]), @@ -859,7 +857,7 @@ mod tests { #[test] fn candidate_validation_bad_return_is_invalid() { - let validation_data: PersistedValidationData = Default::default(); + let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; let pov = PoV { block_data: BlockData(vec![1; 32]) }; @@ -867,7 +865,7 @@ mod tests { descriptor.pov_hash = pov.hash(); collator_sign(&mut descriptor, Sr25519Keyring::Alice); - assert!(perform_basic_checks(&descriptor, Some(1024), &pov).is_ok()); + assert!(perform_basic_checks(&descriptor, validation_data.max_pov_size, &pov).is_ok()); let v = validate_candidate_exhaustive::( MockValidationArg { @@ -887,7 +885,7 @@ mod tests { #[test] fn candidate_validation_timeout_is_internal_error() { - let validation_data: PersistedValidationData = Default::default(); + let validation_data = PersistedValidationData { max_pov_size: 1024, ..Default::default() }; let pov = PoV { block_data: BlockData(vec![1; 32]) }; @@ -895,7 +893,7 @@ mod tests { descriptor.pov_hash = pov.hash(); collator_sign(&mut descriptor, Sr25519Keyring::Alice); - assert!(perform_basic_checks(&descriptor, Some(1024), &pov).is_ok()); + assert!(perform_basic_checks(&descriptor, validation_data.max_pov_size, &pov).is_ok()); let v = validate_candidate_exhaustive::( MockValidationArg { diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index ba3988d583..5cc0ae91f6 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -218,6 +218,7 @@ impl Default for TestState { block_number: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), + max_pov_size: 1024, }; let validator_index = Some((validators.len() - 1) as ValidatorIndex); diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index dc417ec16a..92ef30928c 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -777,6 +777,7 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: validation_upgrade_delay: 300, acceptance_period: 1200, max_code_size: 5 * 1024 * 1024, + max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, group_rotation_frequency: 10, ..Default::default() @@ -1229,6 +1230,7 @@ pub fn rococo_testnet_genesis( validation_upgrade_delay: 300, acceptance_period: 1200, max_code_size: 5 * 1024 * 1024, + max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, group_rotation_frequency: 10, ..Default::default() diff --git a/node/test/service/src/chain_spec.rs b/node/test/service/src/chain_spec.rs index 35d610a972..da0b4d844e 100644 --- a/node/test/service/src/chain_spec.rs +++ b/node/test/service/src/chain_spec.rs @@ -167,6 +167,7 @@ fn polkadot_testnet_genesis( validation_upgrade_delay: 5, acceptance_period: 1200, max_code_size: 5 * 1024 * 1024, + max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, group_rotation_frequency: 10, ..Default::default() diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index b8190dff04..1314d140ae 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -271,6 +271,8 @@ pub struct PersistedValidationData { /// The DMQ MQC head will be used by the validation function to authorize the downward messages /// passed by the collator. pub dmq_mqc_head: Hash, + /// The maximum legal size of a POV block, in bytes. + pub max_pov_size: u32, } impl PersistedValidationData { diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 3da61a5b43..98cb403c9a 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -43,6 +43,8 @@ pub struct HostConfiguration { pub max_code_size: u32, /// The maximum head-data size, in bytes. pub max_head_data_size: u32, + /// THe maximum POV block size, in bytes. + pub max_pov_size: u32, /// The amount of execution cores to dedicate to parathread execution. pub parathread_cores: u32, /// The number of retries that a parathread author has to submit their block. @@ -172,6 +174,16 @@ decl_module! { Ok(()) } + /// Set the max POV block size for incoming upgrades. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_max_pov_size(origin, new: u32) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.max_pov_size, new) != new + }); + Ok(()) + } + /// Set the max head data size for paras. #[weight = (1_000, DispatchClass::Operational)] pub fn set_max_head_data_size(origin, new: u32) -> DispatchResult { @@ -484,6 +496,7 @@ mod tests { validation_upgrade_delay: 10, acceptance_period: 5, max_code_size: 100_000, + max_pov_size: 1024, max_head_data_size: 1_000, parathread_cores: 2, parathread_retries: 5, @@ -524,6 +537,9 @@ mod tests { Configuration::set_max_code_size( Origin::root(), new_config.max_code_size, ).unwrap(); + Configuration::set_max_pov_size( + Origin::root(), new_config.max_pov_size, + ).unwrap(); Configuration::set_max_head_data_size( Origin::root(), new_config.max_head_data_size, ).unwrap(); diff --git a/runtime/parachains/src/util.rs b/runtime/parachains/src/util.rs index c827a86d65..d73f824c45 100644 --- a/runtime/parachains/src/util.rs +++ b/runtime/parachains/src/util.rs @@ -28,6 +28,7 @@ use crate::{configuration, paras, dmp, hrmp}; pub fn make_persisted_validation_data( para_id: ParaId, ) -> Option> { + let config = >::config(); let relay_parent_number = >::block_number() - One::one(); Some(PersistedValidationData { @@ -35,6 +36,7 @@ pub fn make_persisted_validation_data( block_number: relay_parent_number, hrmp_mqc_heads: >::hrmp_mqc_heads(para_id), dmq_mqc_head: >::dmq_mqc_head(para_id), + max_pov_size: config.max_pov_size, }) } -- GitLab From 4a491d3429020f81e184bfd09621bcec5ee8901f Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 19 Nov 2020 12:35:59 -0500 Subject: [PATCH 026/203] fix approval keytypes doc (#1988) --- roadmap/implementers-guide/src/types/approval.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roadmap/implementers-guide/src/types/approval.md b/roadmap/implementers-guide/src/types/approval.md index 1f44dc43ff..07266e718a 100644 --- a/roadmap/implementers-guide/src/types/approval.md +++ b/roadmap/implementers-guide/src/types/approval.md @@ -2,11 +2,11 @@ ## ApprovalId -The public key of a keypair used by a validator for approval voting. +The public key of a keypair used by a validator for approval voting on included parachain candidates. ## AssignmentId -The private key of a keypair used by a validator for approval voting. +The public key of a keypair used by a validator for determining assignments to approve included parachain candidates. ## AssignmentCert -- GitLab From de70336f0d0b120ce450c86a3e8806b5ff479785 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Thu, 19 Nov 2020 20:22:17 +0100 Subject: [PATCH 027/203] A simple check to reject obviously wrong validation code binaries (#1989) * A simple check to reject obviously wrong validation code binaries * Use wasm-magic constants in the tests. * tabs not spaces * move WASM_MAGIC into lib.rs --- runtime/common/src/lib.rs | 4 ++++ runtime/common/src/paras_registrar.rs | 22 +++++++++++++--------- runtime/common/src/paras_sudo_wrapper.rs | 4 ++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 9569412b7c..ed0aad5950 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -49,6 +49,10 @@ pub use impls::ToAuthor; pub type NegativeImbalance = as Currency<::AccountId>>::NegativeImbalance; +/// The sequence of bytes a valid wasm module binary always starts with. Apart from that it's also a +/// valid wasm module. +const WASM_MAGIC: &[u8] = &[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]; + /// We assume that an on-initialize consumes 2.5% of the weight on average, hence a single extrinsic /// will not be allowed to consume more than `AvailableBlockRatio - 2.5%`. pub const AVERAGE_ON_INITIALIZE_WEIGHT: Perbill = Perbill::from_perthousand(25); diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index 6ecd99aee9..474402d61f 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -17,8 +17,8 @@ //! Module to handle parathread/parachain registration and related fund management. //! In essence this is a simple wrapper around `paras`. +use crate::WASM_MAGIC; use sp_std::{prelude::*, result}; - use frame_support::{ decl_storage, decl_module, decl_error, ensure, dispatch::DispatchResult, @@ -86,6 +86,8 @@ decl_error! { HeadDataTooLarge, /// Parathreads registration is disabled. ParathreadsRegistrationDisabled, + /// The validation code provided doesn't start with the Wasm file magic string. + DefinitelyNotWasm, } } @@ -96,7 +98,7 @@ decl_module! { /// Register a parathread with given code for immediate use. /// /// Must be sent from a Signed origin that is able to have `ParathreadDeposit` reserved. - /// `gensis_head` and `validation_code` are used to initalize the parathread's state. + /// `genesis_head` and `validation_code` are used to initalize the parathread's state. #[weight = 0] fn register_parathread( origin, @@ -107,6 +109,7 @@ decl_module! { let who = ensure_signed(origin)?; ensure!(ParathreadsRegistrationEnabled::get(), Error::::ParathreadsRegistrationDisabled); + ensure!(validation_code.0.starts_with(WASM_MAGIC), Error::::DefinitelyNotWasm); ensure!(!Paras::contains_key(id), Error::::ParaAlreadyExists); @@ -217,6 +220,7 @@ impl Module { validation_code: ValidationCode, ) -> DispatchResult { ensure!(!Paras::contains_key(id), Error::::ParaAlreadyExists); + ensure!(validation_code.0.starts_with(WASM_MAGIC), Error::::DefinitelyNotWasm); let outgoing = >::outgoing_paras(); @@ -609,7 +613,7 @@ mod tests { assert_ok!(Registrar::register_parachain( 2u32.into(), vec![3; 3].into(), - vec![3; 3].into(), + WASM_MAGIC.to_vec().into(), )); let orig_bal = Balances::free_balance(&3u64); @@ -619,7 +623,7 @@ mod tests { Origin::signed(3u64), 8u32.into(), vec![3; 3].into(), - vec![3; 3].into(), + WASM_MAGIC.to_vec().into(), )); // deposit should be taken (reserved) @@ -658,13 +662,13 @@ mod tests { Origin::signed(1), 8u32.into(), vec![1; 3].into(), - vec![1; 3].into(), + WASM_MAGIC.to_vec().into(), )); assert_ok!(Registrar::register_parachain( 2u32.into(), vec![1; 3].into(), - vec![1; 3].into(), + WASM_MAGIC.to_vec().into(), )); run_to_block(9); @@ -692,7 +696,7 @@ mod tests { assert_ok!(Registrar::register_parachain( 1u32.into(), vec![1; 3].into(), - vec![1; 3].into(), + WASM_MAGIC.to_vec().into(), )); run_to_block(4); @@ -703,7 +707,7 @@ mod tests { assert!(Registrar::register_parachain( 1u32.into(), vec![1; 3].into(), - vec![1; 3].into(), + WASM_MAGIC.to_vec().into(), ).is_err()); run_to_block(6); @@ -711,7 +715,7 @@ mod tests { assert_ok!(Registrar::register_parachain( 1u32.into(), vec![1; 3].into(), - vec![1; 3].into(), + WASM_MAGIC.to_vec().into(), )); }); } diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index c6b1817f0a..fcaf598d64 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -16,6 +16,7 @@ //! A simple wrapper allowing `Sudo` to call into `paras` routines. +use crate::WASM_MAGIC; use sp_std::prelude::*; use frame_support::{ decl_error, decl_module, ensure, @@ -41,6 +42,8 @@ decl_error! { /// A DMP message couldn't be sent because it exceeds the maximum size allowed for a downward /// message. ExceedsMaxMessageSize, + /// The validation code provided doesn't start with the Wasm file magic string. + DefinitelyNotWasm, } } @@ -57,6 +60,7 @@ decl_module! { genesis: ParaGenesisArgs, ) -> DispatchResult { ensure_root(origin)?; + ensure!(genesis.validation_code.0.starts_with(WASM_MAGIC), Error::::DefinitelyNotWasm); runtime_parachains::schedule_para_initialize::(id, genesis); Ok(()) } -- GitLab From f7ea3d073c520b96caf0d0362f9b02c33c865f87 Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Fri, 20 Nov 2020 12:02:04 +0100 Subject: [PATCH 028/203] Add tracing support to node (#1940) * drop in tracing to replace log * add structured logging to trace messages * add structured logging to debug messages * add structured logging to info messages * add structured logging to warn messages * add structured logging to error messages * normalize spacing and Display vs Debug * add instrumentation to the various 'fn run' * use explicit tracing module throughout * fix availability distribution test * don't double-print errors * remove further redundancy from logs * fix test errors * fix more test errors * remove unused kv_log_macro * fix unused variable * add tracing spans to collation generation * add tracing spans to av-store * add tracing spans to backing * add tracing spans to bitfield-signing * add tracing spans to candidate-selection * add tracing spans to candidate-validation * add tracing spans to chain-api * add tracing spans to provisioner * add tracing spans to runtime-api * add tracing spans to availability-distribution * add tracing spans to bitfield-distribution * add tracing spans to network-bridge * add tracing spans to collator-protocol * add tracing spans to pov-distribution * add tracing spans to statement-distribution * add tracing spans to overseer * cleanup --- Cargo.lock | 59 +++++++++--- cli/Cargo.toml | 1 + core-primitives/src/lib.rs | 7 ++ node/collation-generation/Cargo.toml | 3 +- node/collation-generation/src/lib.rs | 35 ++++--- node/core/av-store/Cargo.toml | 4 +- node/core/av-store/src/lib.rs | 58 ++++++++---- node/core/av-store/src/tests.rs | 6 +- node/core/backing/Cargo.toml | 3 +- node/core/backing/src/lib.rs | 24 +++-- node/core/bitfield-signing/Cargo.toml | 3 +- node/core/bitfield-signing/src/lib.rs | 7 +- node/core/candidate-selection/Cargo.toml | 3 +- node/core/candidate-selection/src/lib.rs | 38 ++++---- node/core/candidate-validation/Cargo.toml | 3 +- node/core/candidate-validation/src/lib.rs | 9 +- node/core/chain-api/Cargo.toml | 2 + node/core/chain-api/src/lib.rs | 4 + node/core/proposer/Cargo.toml | 2 +- node/core/proposer/src/lib.rs | 2 +- node/core/provisioner/Cargo.toml | 3 +- node/core/provisioner/src/lib.rs | 13 ++- node/core/runtime-api/Cargo.toml | 2 + node/core/runtime-api/src/lib.rs | 4 + .../availability-distribution/Cargo.toml | 6 +- .../availability-distribution/src/lib.rs | 46 +++++++--- .../availability-distribution/src/tests.rs | 20 ++-- node/network/bitfield-distribution/Cargo.toml | 4 +- node/network/bitfield-distribution/src/lib.rs | 70 ++++++++------ node/network/bridge/Cargo.toml | 3 +- node/network/bridge/src/lib.rs | 36 +++++--- .../network/bridge/src/validator_discovery.rs | 6 +- node/network/collator-protocol/Cargo.toml | 4 +- .../collator-protocol/src/collator_side.rs | 91 +++++++++++-------- node/network/collator-protocol/src/lib.rs | 9 +- .../collator-protocol/src/validator_side.rs | 60 ++++++++---- node/network/pov-distribution/Cargo.toml | 3 +- node/network/pov-distribution/src/lib.rs | 25 +++-- .../network/statement-distribution/Cargo.toml | 3 +- .../network/statement-distribution/src/lib.rs | 35 +++++-- node/overseer/Cargo.toml | 4 +- node/overseer/examples/minimal-example.rs | 13 ++- node/overseer/src/lib.rs | 23 ++++- node/service/Cargo.toml | 3 +- node/service/src/lib.rs | 7 +- node/subsystem-test-helpers/Cargo.toml | 3 +- node/subsystem-util/Cargo.toml | 8 +- node/subsystem-util/src/lib.rs | 41 ++++++--- .../subsystem-util/src/validator_discovery.rs | 2 +- node/subsystem/Cargo.toml | 3 +- node/subsystem/src/lib.rs | 2 +- node/test/service/Cargo.toml | 3 +- primitives/src/v1.rs | 16 ++-- 53 files changed, 564 insertions(+), 280 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9fe2e669c2..b30158b0b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4942,6 +4942,8 @@ dependencies = [ "sp-core", "sp-keystore", "tempfile", + "tracing", + "tracing-futures", ] [[package]] @@ -4967,6 +4969,8 @@ dependencies = [ "sp-keyring", "sp-keystore", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -4986,6 +4990,7 @@ dependencies = [ "substrate-browser-utils", "substrate-build-script-utils", "thiserror", + "tracing-futures", "wasm-bindgen", "wasm-bindgen-futures", ] @@ -5008,6 +5013,8 @@ dependencies = [ "sp-core", "sp-keyring", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5039,7 +5046,6 @@ dependencies = [ "assert_matches", "async-trait", "futures 0.3.8", - "log", "parity-scale-codec", "parking_lot 0.11.1", "polkadot-node-network-protocol", @@ -5050,6 +5056,8 @@ dependencies = [ "sc-network", "sp-core", "sp-keyring", + "tracing", + "tracing-futures", ] [[package]] @@ -5057,7 +5065,6 @@ name = "polkadot-node-collation-generation" version = "0.1.0" dependencies = [ "futures 0.3.8", - "log", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5066,6 +5073,8 @@ dependencies = [ "polkadot-primitives", "sp-core", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5091,6 +5100,8 @@ dependencies = [ "smallvec 1.5.0", "sp-core", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5100,7 +5111,6 @@ dependencies = [ "assert_matches", "bitvec", "futures 0.3.8", - "log", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5114,6 +5124,8 @@ dependencies = [ "sp-keyring", "sp-keystore", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5122,12 +5134,13 @@ version = "0.1.0" dependencies = [ "derive_more", "futures 0.3.8", - "log", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", "sp-keystore", "thiserror", + "tracing", + "tracing-futures", "wasm-timer", ] @@ -5136,12 +5149,13 @@ name = "polkadot-node-core-candidate-selection" version = "0.1.0" dependencies = [ "futures 0.3.8", - "log", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", "sp-core", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5150,7 +5164,6 @@ version = "0.1.0" dependencies = [ "assert_matches", "futures 0.3.8", - "log", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5160,6 +5173,8 @@ dependencies = [ "polkadot-primitives", "sp-core", "sp-keyring", + "tracing", + "tracing-futures", ] [[package]] @@ -5174,6 +5189,8 @@ dependencies = [ "polkadot-primitives", "sp-blockchain", "sp-core", + "tracing", + "tracing-futures", ] [[package]] @@ -5182,7 +5199,6 @@ version = "0.1.0" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", - "log", "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", @@ -5197,6 +5213,7 @@ dependencies = [ "sp-runtime", "sp-transaction-pool", "substrate-prometheus-endpoint", + "tracing", ] [[package]] @@ -5206,13 +5223,14 @@ dependencies = [ "bitvec", "futures 0.3.8", "futures-timer 3.0.2", - "log", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", "sp-application-crypto", "sp-keystore", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5226,6 +5244,8 @@ dependencies = [ "polkadot-primitives", "sp-api", "sp-core", + "tracing", + "tracing-futures", ] [[package]] @@ -5259,7 +5279,6 @@ dependencies = [ "derive_more", "futures 0.3.8", "futures-timer 3.0.2", - "log", "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.2", @@ -5273,6 +5292,8 @@ dependencies = [ "sp-core", "substrate-prometheus-endpoint", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5282,7 +5303,6 @@ dependencies = [ "async-trait", "futures 0.3.8", "futures-timer 3.0.2", - "log", "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.2", @@ -5295,6 +5315,8 @@ dependencies = [ "sc-network", "smallvec 1.5.0", "sp-core", + "tracing", + "tracing-futures", ] [[package]] @@ -5321,6 +5343,8 @@ dependencies = [ "streamunordered", "substrate-prometheus-endpoint", "thiserror", + "tracing", + "tracing-futures", ] [[package]] @@ -5332,7 +5356,6 @@ dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "kv-log-macro", - "log", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5341,6 +5364,8 @@ dependencies = [ "sc-client-api", "sp-core", "streamunordered", + "tracing", + "tracing-futures", ] [[package]] @@ -5371,13 +5396,14 @@ version = "0.1.0" dependencies = [ "assert_matches", "futures 0.3.8", - "log", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", "sp-core", + "tracing", + "tracing-futures", ] [[package]] @@ -5613,7 +5639,6 @@ dependencies = [ "hex-literal", "kusama-runtime", "lazy_static", - "log", "pallet-babe", "pallet-im-online", "pallet-staking", @@ -5679,6 +5704,8 @@ dependencies = [ "sp-transaction-pool", "sp-trie", "substrate-prometheus-endpoint", + "tracing", + "tracing-futures", "westend-runtime", ] @@ -5690,7 +5717,6 @@ dependencies = [ "assert_matches", "futures 0.3.8", "indexmap", - "log", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5703,6 +5729,8 @@ dependencies = [ "sp-keyring", "sp-keystore", "sp-staking", + "tracing", + "tracing-futures", ] [[package]] @@ -5806,7 +5834,6 @@ dependencies = [ "futures 0.1.30", "futures 0.3.8", "hex", - "log", "pallet-balances", "pallet-staking", "pallet-transaction-payment", @@ -5848,6 +5875,8 @@ dependencies = [ "substrate-test-utils", "tempfile", "tokio 0.2.22", + "tracing", + "tracing-futures", ] [[package]] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index ae8313889e..fae390df70 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -25,6 +25,7 @@ polkadot-parachain = { path = "../parachain", optional = true } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } +tracing-futures = "0.2.4" frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } diff --git a/core-primitives/src/lib.rs b/core-primitives/src/lib.rs index 20f6339ab4..e96d0b4a5f 100644 --- a/core-primitives/src/lib.rs +++ b/core-primitives/src/lib.rs @@ -59,6 +59,13 @@ pub type Hash = sp_core::H256; #[derive(Clone, Copy, Encode, Decode, Hash, Eq, PartialEq, Debug, Default)] pub struct CandidateHash(pub Hash); +#[cfg(feature="std")] +impl std::fmt::Display for CandidateHash { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.fmt(f) + } +} + /// Index of a transaction in the relay chain. 32-bit should be plenty. pub type Nonce = u32; diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index daea11bf98..68a23947f5 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" polkadot-erasure-coding = { path = "../../erasure-coding" } polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index 9fe91b140f..6d37a157dd 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -74,6 +74,7 @@ impl CollationGenerationSubsystem { /// /// If `err_tx` is not `None`, errors are forwarded onto that channel as they occur. /// Otherwise, most are logged and then discarded. + #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] async fn run(mut self, mut ctx: Context) where Context: SubsystemContext, @@ -95,7 +96,7 @@ impl CollationGenerationSubsystem { msg = receiver.next().fuse() => { if let Some(msg) = msg { if let Err(err) = ctx.send_message(msg).await { - log::warn!(target: LOG_TARGET, "failed to forward message to overseer: {:?}", err); + tracing::warn!(target: LOG_TARGET, err = ?err, "failed to forward message to overseer"); break; } } @@ -108,6 +109,7 @@ impl CollationGenerationSubsystem { // note: this doesn't strictly need to be a separate function; it's more an administrative function // so that we don't clutter the run loop. It could in principle be inlined directly into there. // it should hopefully therefore be ok that it's an async function mutably borrowing self. + #[tracing::instrument(level = "trace", skip(self, ctx, sender), fields(subsystem = LOG_TARGET))] async fn handle_incoming( &mut self, incoming: SubsystemResult>, @@ -129,7 +131,7 @@ impl CollationGenerationSubsystem { if let Err(err) = handle_new_activations(config.clone(), &activated, ctx, metrics, sender).await { - log::warn!(target: LOG_TARGET, "failed to handle new activations: {}", err); + tracing::warn!(target: LOG_TARGET, err = ?err, "failed to handle new activations"); }; } false @@ -139,7 +141,7 @@ impl CollationGenerationSubsystem { msg: CollationGenerationMessage::Initialize(config), }) => { if self.config.is_some() { - log::error!(target: LOG_TARGET, "double initialization"); + tracing::error!(target: LOG_TARGET, "double initialization"); } else { self.config = Some(Arc::new(config)); } @@ -147,8 +149,9 @@ impl CollationGenerationSubsystem { } Ok(Signal(BlockFinalized(_))) => false, Err(err) => { - log::error!( + tracing::error!( target: LOG_TARGET, + err = ?err, "error receiving message from subsystem context: {:?}", err ); @@ -175,6 +178,7 @@ where } } +#[tracing::instrument(level = "trace", skip(ctx, metrics, sender), fields(subsystem = LOG_TARGET))] async fn handle_new_activations( config: Arc, activated: &[Hash], @@ -237,10 +241,10 @@ async fn handle_new_activations( let collation = match (task_config.collator)(relay_parent, &validation_data).await { Some(collation) => collation, None => { - log::debug!( + tracing::debug!( target: LOG_TARGET, - "collator returned no collation on collate for para_id {}.", - scheduled_core.para_id, + para_id = %scheduled_core.para_id, + "collator returned no collation on collate", ); return } @@ -262,11 +266,11 @@ async fn handle_new_activations( ) { Ok(erasure_root) => erasure_root, Err(err) => { - log::error!( + tracing::error!( target: LOG_TARGET, - "failed to calculate erasure root for para_id {}: {:?}", - scheduled_core.para_id, - err + para_id = %scheduled_core.para_id, + err = ?err, + "failed to calculate erasure root", ); return } @@ -299,11 +303,11 @@ async fn handle_new_activations( if let Err(err) = task_sender.send(AllMessages::CollatorProtocol( CollatorProtocolMessage::DistributeCollation(ccr, collation.proof_of_validity) )).await { - log::warn!( + tracing::warn!( target: LOG_TARGET, - "failed to send collation result for para_id {}: {:?}", - scheduled_core.para_id, - err + para_id = %scheduled_core.para_id, + err = ?err, + "failed to send collation result", ); } })).await?; @@ -313,6 +317,7 @@ async fn handle_new_activations( Ok(()) } +#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] fn erasure_root( n_validators: usize, persisted_validation: PersistedValidationData, diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 92463270f4..4e20f81171 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -9,8 +9,9 @@ futures = "0.3.8" futures-timer = "3.0.2" kvdb = "0.7.0" kvdb-rocksdb = "0.9.1" -log = "0.4.11" thiserror = "1.0.22" +tracing = "0.1.21" +tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } @@ -22,6 +23,7 @@ polkadot-primitives = { path = "../../../primitives" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } [dev-dependencies] +log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" smallvec = "1.5.0" diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 0dc9e4ed60..8fe0e6c5e9 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -73,13 +73,13 @@ enum Error { } impl Error { - fn severity(&self) -> log::Level { + fn trace(&self) { match self { // don't spam the log with spurious errors Self::RuntimeApi(_) | - Self::Oneshot(_) => log::Level::Debug, + Self::Oneshot(_) => tracing::debug!(target: LOG_TARGET, err = ?self), // it's worth reporting otherwise - _ => log::Level::Warn, + _ => tracing::warn!(target: LOG_TARGET, err = ?self), } } } @@ -311,18 +311,19 @@ pub struct AvailabilityStoreSubsystem { impl AvailabilityStoreSubsystem { // Perform pruning of PoVs + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn prune_povs(&self) -> Result<(), Error> { let mut tx = DBTransaction::new(); let mut pov_pruning = pov_pruning(&self.inner).unwrap_or_default(); let now = PruningDelay::now()?; - log::trace!(target: LOG_TARGET, "Pruning PoVs"); + tracing::trace!(target: LOG_TARGET, "Pruning PoVs"); let outdated_records_count = pov_pruning.iter() .take_while(|r| r.prune_at <= now) .count(); for record in pov_pruning.drain(..outdated_records_count) { - log::trace!(target: LOG_TARGET, "Removing record {:?}", record); + tracing::trace!(target: LOG_TARGET, record = ?record, "Removing record"); tx.delete( columns::DATA, available_data_key(&record.candidate_hash).as_slice(), @@ -335,18 +336,19 @@ impl AvailabilityStoreSubsystem { } // Perform pruning of chunks. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn prune_chunks(&self) -> Result<(), Error> { let mut tx = DBTransaction::new(); let mut chunk_pruning = chunk_pruning(&self.inner).unwrap_or_default(); let now = PruningDelay::now()?; - log::trace!(target: LOG_TARGET, "Pruning Chunks"); + tracing::trace!(target: LOG_TARGET, "Pruning Chunks"); let outdated_records_count = chunk_pruning.iter() .take_while(|r| r.prune_at <= now) .count(); for record in chunk_pruning.drain(..outdated_records_count) { - log::trace!(target: LOG_TARGET, "Removing record {:?}", record); + tracing::trace!(target: LOG_TARGET, record = ?record, "Removing record"); tx.delete( columns::DATA, erasure_chunk_key(&record.candidate_hash, record.chunk_index).as_slice(), @@ -361,6 +363,7 @@ impl AvailabilityStoreSubsystem { // Return a `Future` that either resolves when another PoV pruning has to happen // or is indefinitely `pending` in case no pruning has to be done. // Just a helper to `select` over multiple things at once. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn maybe_prune_povs(&self) -> Result, Error> { let future = match get_next_pov_pruning_time(&self.inner) { Some(pruning) => { @@ -375,6 +378,7 @@ impl AvailabilityStoreSubsystem { // Return a `Future` that either resolves when another chunk pruning has to happen // or is indefinitely `pending` in case no pruning has to be done. // Just a helper to `select` over multiple things at once. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn maybe_prune_chunks(&self) -> Result, Error> { let future = match get_next_chunk_pruning_time(&self.inner) { Some(pruning) => { @@ -473,6 +477,7 @@ fn get_next_chunk_pruning_time(db: &Arc) -> Option(mut subsystem: AvailabilityStoreSubsystem, mut ctx: Context) where Context: SubsystemContext, @@ -481,10 +486,10 @@ where let res = run_iteration(&mut subsystem, &mut ctx).await; match res { Err(e) => { - log::log!(target: LOG_TARGET, e.severity(), "{}", e); + e.trace(); } Ok(true) => { - log::info!(target: LOG_TARGET, "received `Conclude` signal, exiting"); + tracing::info!(target: LOG_TARGET, "received `Conclude` signal, exiting"); break; }, Ok(false) => continue, @@ -492,6 +497,7 @@ where } } +#[tracing::instrument(level = "trace", skip(subsystem, ctx), fields(subsystem = LOG_TARGET))] async fn run_iteration(subsystem: &mut AvailabilityStoreSubsystem, ctx: &mut Context) -> Result where @@ -545,6 +551,7 @@ where /// The state of data has to be changed from /// `CandidateState::Included` to `CandidateState::Finalized` and their pruning times have /// to be updated to `now` + keep_finalized_{block, chunk}_for`. +#[tracing::instrument(level = "trace", skip(subsystem, ctx, db), fields(subsystem = LOG_TARGET))] async fn process_block_finalized( subsystem: &AvailabilityStoreSubsystem, ctx: &mut Context, @@ -561,10 +568,10 @@ where // numbers we have to iterate through the whole collection here. for record in pov_pruning.iter_mut() { if record.block_number <= block_number { - log::trace!( + tracing::trace!( target: LOG_TARGET, - "Updating pruning record for finalized block {}", - record.block_number, + block_number = %record.block_number, + "Updating pruning record for finalized block", ); record.prune_at = PruningDelay::into_the_future( @@ -580,10 +587,10 @@ where if let Some(mut chunk_pruning) = chunk_pruning(db) { for record in chunk_pruning.iter_mut() { if record.block_number <= block_number { - log::trace!( + tracing::trace!( target: LOG_TARGET, - "Updating chunk pruning record for finalized block {}", - record.block_number, + block_number = %record.block_number, + "Updating chunk pruning record for finalized block", ); record.prune_at = PruningDelay::into_the_future( @@ -599,6 +606,7 @@ where Ok(()) } +#[tracing::instrument(level = "trace", skip(ctx, db), fields(subsystem = LOG_TARGET))] async fn process_block_activated( ctx: &mut Context, db: &Arc, @@ -610,17 +618,21 @@ where let events = match request_candidate_events(ctx, hash).await { Ok(events) => events, Err(err) => { - log::debug!(target: LOG_TARGET, "requesting candidate events failed due to {}", err); + tracing::debug!(target: LOG_TARGET, err = ?err, "requesting candidate events failed"); return Ok(()); } }; - log::trace!(target: LOG_TARGET, "block activated {}", hash); + tracing::trace!(target: LOG_TARGET, hash = %hash, "block activated"); let mut included = HashSet::new(); for event in events.into_iter() { if let CandidateEvent::CandidateIncluded(receipt, _) = event { - log::trace!(target: LOG_TARGET, "Candidate {:?} was included", receipt.hash()); + tracing::trace!( + target: LOG_TARGET, + hash = %receipt.hash(), + "Candidate {:?} was included", receipt.hash(), + ); included.insert(receipt.hash()); } } @@ -654,6 +666,7 @@ where Ok(()) } +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn request_candidate_events( ctx: &mut Context, hash: Hash, @@ -673,6 +686,7 @@ where Ok(rx.await??) } +#[tracing::instrument(level = "trace", skip(subsystem, ctx), fields(subsystem = LOG_TARGET))] async fn process_message( subsystem: &mut AvailabilityStoreSubsystem, ctx: &mut Context, @@ -744,6 +758,7 @@ fn chunk_pruning(db: &Arc) -> Option> { query_inner(db, columns::META, &CHUNK_PRUNING_KEY) } +#[tracing::instrument(level = "trace", skip(db, tx), fields(subsystem = LOG_TARGET))] fn put_pov_pruning( db: &Arc, tx: Option, @@ -784,6 +799,7 @@ fn put_pov_pruning( Ok(()) } +#[tracing::instrument(level = "trace", skip(db, tx), fields(subsystem = LOG_TARGET))] fn put_chunk_pruning( db: &Arc, tx: Option, @@ -836,6 +852,7 @@ where Ok(rx.await??.map(|number| number).unwrap_or_default()) } +#[tracing::instrument(level = "trace", skip(subsystem, available_data), fields(subsystem = LOG_TARGET))] fn store_available_data( subsystem: &mut AvailabilityStoreSubsystem, candidate_hash: &CandidateHash, @@ -902,6 +919,7 @@ fn store_available_data( Ok(()) } +#[tracing::instrument(level = "trace", skip(subsystem), fields(subsystem = LOG_TARGET))] fn store_chunk( subsystem: &mut AvailabilityStoreSubsystem, candidate_hash: &CandidateHash, @@ -953,6 +971,7 @@ fn store_chunk( Ok(()) } +#[tracing::instrument(level = "trace", skip(subsystem), fields(subsystem = LOG_TARGET))] fn get_chunk( subsystem: &mut AvailabilityStoreSubsystem, candidate_hash: &CandidateHash, @@ -996,7 +1015,7 @@ fn query_inner( } Ok(None) => None, Err(e) => { - log::warn!(target: LOG_TARGET, "Error reading from the availability store: {:?}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "Error reading from the availability store"); None } } @@ -1018,6 +1037,7 @@ where } } +#[tracing::instrument(level = "trace", skip(metrics), fields(subsystem = LOG_TARGET))] fn get_chunks(data: &AvailableData, n_validators: usize, metrics: &Metrics) -> Result, Error> { let chunks = erasure::obtain_chunks_v1(n_validators, data)?; metrics.on_chunks_received(chunks.len()); diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 7cad86d43b..f35809a4a7 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -128,7 +128,7 @@ async fn overseer_send( overseer: &mut test_helpers::TestSubsystemContextHandle, msg: AvailabilityStoreMessage, ) { - log::trace!("Sending message:\n{:?}", &msg); + tracing::trace!(meg = ?msg, "sending message"); overseer .send(FromOverseer::Communication { msg }) .timeout(TIMEOUT) @@ -143,7 +143,7 @@ async fn overseer_recv( .await .expect(&format!("{:?} is more than enough to receive messages", TIMEOUT)); - log::trace!("Received message:\n{:?}", &msg); + tracing::trace!(msg = ?msg, "received message"); msg } @@ -152,7 +152,7 @@ async fn overseer_recv_with_timeout( overseer: &mut test_helpers::TestSubsystemContextHandle, timeout: Duration, ) -> Option { - log::trace!("Waiting for message..."); + tracing::trace!("waiting for message..."); overseer .recv() .timeout(timeout) diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index 59042927f8..9368ee0633 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -14,7 +14,8 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } erasure-coding = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } statement-table = { package = "polkadot-statement-table", path = "../../../statement-table" } bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" thiserror = "1.0.22" [dev-dependencies] diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 99104cb958..7c7b248a74 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -244,6 +244,7 @@ fn primitive_statement_to_table(s: &SignedFullStatement) -> TableSignedStatement } } +#[tracing::instrument(level = "trace", skip(attested, table_context), fields(subsystem = LOG_TARGET))] fn table_attested_to_backed( attested: TableAttestedCandidate< ParaId, @@ -308,6 +309,7 @@ impl CandidateBackingJob { /// Validate the candidate that is requested to be `Second`ed and distribute validation result. /// /// Returns `Ok(true)` if we issued a `Seconded` statement about this candidate. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn validate_and_second( &mut self, candidate: &CandidateReceipt, @@ -390,6 +392,7 @@ impl CandidateBackingJob { Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn get_backed(&self) -> Vec { let proposed = self.table.proposed_candidates(&self.table_context); let mut res = Vec::with_capacity(proposed.len()); @@ -407,6 +410,7 @@ impl CandidateBackingJob { /// Check if there have happened any new misbehaviors and issue necessary messages. /// /// TODO: Report multiple misbehaviors (https://github.com/paritytech/polkadot/issues/1387) + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn issue_new_misbehaviors(&mut self) -> Result<(), Error> { let mut reports = Vec::new(); @@ -440,6 +444,7 @@ impl CandidateBackingJob { } /// Import a statement into the statement table and return the summary of the import. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn import_statement( &mut self, statement: &SignedFullStatement, @@ -474,6 +479,7 @@ impl CandidateBackingJob { Ok(summary) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn process_msg(&mut self, msg: CandidateBackingMessage) -> Result<(), Error> { match msg { CandidateBackingMessage::Second(_, candidate, pov) => { @@ -521,6 +527,7 @@ impl CandidateBackingJob { } /// Kick off validation work and distribute the result as a signed statement. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn kick_off_validation_work( &mut self, summary: TableSummary, @@ -585,6 +592,7 @@ impl CandidateBackingJob { } /// Import the statement and kick off validation work if it is a part of our assignment. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn maybe_validate_and_import( &mut self, statement: SignedFullStatement, @@ -600,6 +608,7 @@ impl CandidateBackingJob { Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn sign_statement(&self, statement: Statement) -> Option { let signed = self.table_context .validator @@ -611,6 +620,7 @@ impl CandidateBackingJob { Some(signed) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn check_statement_signature(&self, statement: &SignedFullStatement) -> Result<(), Error> { let idx = statement.validator_index() as usize; @@ -703,6 +713,7 @@ impl CandidateBackingJob { // This calls an inspection function before making the PoV available for any last checks // that need to be done. If the inspection function returns an error, this function returns // early without making the PoV available. + #[tracing::instrument(level = "trace", skip(self, pov, with_commitments), fields(subsystem = LOG_TARGET))] async fn make_pov_available( &mut self, pov: Arc, @@ -767,6 +778,7 @@ impl util::JobTrait for CandidateBackingJob { const NAME: &'static str = "CandidateBackingJob"; + #[tracing::instrument(skip(keystore, metrics, rx_to, tx_from), fields(subsystem = LOG_TARGET))] fn run( parent: Hash, keystore: SyncCryptoStorePtr, @@ -780,10 +792,10 @@ impl util::JobTrait for CandidateBackingJob { match $x { Ok(x) => x, Err(e) => { - log::warn!( + tracing::warn!( target: LOG_TARGET, - "Failed to fetch runtime API data for job: {:?}", - e, + err = ?e, + "Failed to fetch runtime API data for job", ); // We can't do candidate validation work if we don't have the @@ -820,10 +832,10 @@ impl util::JobTrait for CandidateBackingJob { Ok(v) => v, Err(util::Error::NotAValidator) => { return Ok(()) }, Err(e) => { - log::warn!( + tracing::warn!( target: LOG_TARGET, - "Cannot participate in candidate backing: {:?}", - e + err = ?e, + "Cannot participate in candidate backing", ); return Ok(()) diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index be24be2dc2..9763bc2b88 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index c43915b748..a0d3f938ae 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -140,6 +140,7 @@ pub enum Error { /// If there is a candidate pending availability, query the Availability Store /// for whether we have the availability chunk for our validator index. +#[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] async fn get_core_availability( relay_parent: Hash, core: CoreState, @@ -164,7 +165,7 @@ async fn get_core_availability( Ok(None) => return Ok(false), Err(e) => { // Don't take down the node on runtime API errors. - log::warn!(target: LOG_TARGET, "Encountered a runtime API error: {:?}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "Encountered a runtime API error"); return Ok(false); } }; @@ -201,6 +202,7 @@ async fn get_availability_cores(relay_parent: Hash, sender: &mut mpsc::Sender { // Don't take down the node on runtime API errors. - log::warn!(target: LOG_TARGET, "Encountered a runtime API error: {:?}", runtime_err); + tracing::warn!(target: LOG_TARGET, err = ?runtime_err, "Encountered a runtime API error"); return Ok(()); } Err(err) => return Err(err), diff --git a/node/core/candidate-selection/Cargo.toml b/node/core/candidate-selection/Cargo.toml index dfa685b670..642a38d728 100644 --- a/node/core/candidate-selection/Cargo.toml +++ b/node/core/candidate-selection/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index f35478ba9c..b4654d121b 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_primitives::v1::{CandidateReceipt, CollatorId, Hash, Id as ParaId, use std::{convert::TryFrom, pin::Pin}; use thiserror::Error; -const TARGET: &'static str = "candidate_selection"; +const LOG_TARGET: &'static str = "candidate_selection"; struct CandidateSelectionJob { sender: mpsc::Sender, @@ -134,6 +134,7 @@ impl JobTrait for CandidateSelectionJob { /// Run a job for the parent block indicated // // this function is in charge of creating and executing the job's main loop + #[tracing::instrument(skip(_relay_parent, _run_args, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] fn run( _relay_parent: Hash, _run_args: Self::RunArgs, @@ -196,6 +197,7 @@ impl CandidateSelectionJob { Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn handle_collation( &mut self, relay_parent: Hash, @@ -212,10 +214,10 @@ impl CandidateSelectionJob { ).await { Ok(response) => response, Err(err) => { - log::warn!( - target: TARGET, - "failed to get collation from collator protocol subsystem: {:?}", - err + tracing::warn!( + target: LOG_TARGET, + err = ?err, + "failed to get collation from collator protocol subsystem", ); return; } @@ -230,35 +232,36 @@ impl CandidateSelectionJob { ) .await { - Err(err) => log::warn!(target: TARGET, "failed to second a candidate: {:?}", err), + Err(err) => tracing::warn!(target: LOG_TARGET, err = ?err, "failed to second a candidate"), Ok(()) => self.seconded_candidate = Some(collator_id), } } } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn handle_invalid(&mut self, candidate_receipt: CandidateReceipt) { let received_from = match &self.seconded_candidate { Some(peer) => peer, None => { - log::warn!( - target: TARGET, + tracing::warn!( + target: LOG_TARGET, "received invalidity notice for a candidate we don't remember seconding" ); return; } }; - log::info!( - target: TARGET, - "received invalidity note for candidate {:?}", - candidate_receipt + tracing::info!( + target: LOG_TARGET, + candidate_receipt = ?candidate_receipt, + "received invalidity note for candidate", ); let result = if let Err(err) = forward_invalidity_note(received_from, &mut self.sender).await { - log::warn!( - target: TARGET, - "failed to forward invalidity note: {:?}", - err + tracing::warn!( + target: LOG_TARGET, + err = ?err, + "failed to forward invalidity note", ); Err(()) } else { @@ -271,6 +274,7 @@ impl CandidateSelectionJob { // get a collation from the Collator Protocol subsystem // // note that this gets an owned clone of the sender; that's becuase unlike `forward_invalidity_note`, it's expected to take a while longer +#[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] async fn get_collation( relay_parent: Hash, para_id: ParaId, @@ -305,7 +309,7 @@ async fn second_candidate( .await { Err(err) => { - log::warn!(target: TARGET, "failed to send a seconding message"); + tracing::warn!(target: LOG_TARGET, err = ?err, "failed to send a seconding message"); metrics.on_second(Err(())); Err(err.into()) } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 5ba8055e9f..4965e3b573 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" sp-core = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["bit-vec", "derive"] } diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 121508e3c1..b2382f59e3 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -85,6 +85,7 @@ impl Subsystem for CandidateValidationSubsystem where } } +#[tracing::instrument(skip(ctx, spawn, metrics), fields(subsystem = LOG_TARGET))] async fn run( mut ctx: impl SubsystemContext, spawn: impl SpawnNamed + Clone + 'static, @@ -139,7 +140,7 @@ async fn run( Ok(x) => { metrics.on_validation_event(&x); if let Err(_e) = response_sender.send(x) { - log::warn!( + tracing::warn!( target: LOG_TARGET, "Requester of candidate validation dropped", ) @@ -176,6 +177,7 @@ enum AssumptionCheckOutcome { BadRequest, } +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn check_assumption_validation_data( ctx: &mut impl SubsystemContext, descriptor: &CandidateDescriptor, @@ -226,6 +228,7 @@ async fn check_assumption_validation_data( }) } +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn find_assumed_validation_data( ctx: &mut impl SubsystemContext, descriptor: &CandidateDescriptor, @@ -257,6 +260,7 @@ async fn find_assumed_validation_data( Ok(AssumptionCheckOutcome::DoesNotMatch) } +#[tracing::instrument(level = "trace", skip(ctx, pov, spawn), fields(subsystem = LOG_TARGET))] async fn spawn_validate_from_chain_state( ctx: &mut impl SubsystemContext, isolation_strategy: IsolationStrategy, @@ -316,6 +320,7 @@ async fn spawn_validate_from_chain_state( validation_result } +#[tracing::instrument(level = "trace", skip(ctx, validation_code, pov, spawn), fields(subsystem = LOG_TARGET))] async fn spawn_validate_exhaustive( ctx: &mut impl SubsystemContext, isolation_strategy: IsolationStrategy, @@ -345,6 +350,7 @@ async fn spawn_validate_exhaustive( /// Does basic checks of a candidate. Provide the encoded PoV-block. Returns `Ok` if basic checks /// are passed, `Err` otherwise. +#[tracing::instrument(level = "trace", skip(pov), fields(subsystem = LOG_TARGET))] fn perform_basic_checks( candidate: &CandidateDescriptor, max_pov_size: u32, @@ -402,6 +408,7 @@ impl ValidationBackend for RealValidationBackend { /// Validates the candidate from exhaustive parameters. /// /// Sends the result of validation on the channel once complete. +#[tracing::instrument(level = "trace", skip(backend_arg, validation_code, pov, spawn), fields(subsystem = LOG_TARGET))] fn validate_candidate_exhaustive( backend_arg: B::Arg, persisted_validation_data: PersistedValidationData, diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index a63914541e..fda7dd17f2 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -6,6 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" +tracing = "0.1.21" +tracing-futures = "0.2.4" sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/core/chain-api/src/lib.rs b/node/core/chain-api/src/lib.rs index bed158dbe6..9868ead623 100644 --- a/node/core/chain-api/src/lib.rs +++ b/node/core/chain-api/src/lib.rs @@ -44,6 +44,8 @@ use std::sync::Arc; use futures::prelude::*; +const LOG_TARGET: &str = "ChainApiSubsystem"; + /// The Chain API Subsystem implementation. pub struct ChainApiSubsystem { client: Arc, @@ -75,6 +77,7 @@ impl Subsystem for ChainApiSubsystem where } } +#[tracing::instrument(skip(ctx, subsystem), fields(subsystem = LOG_TARGET))] async fn run( mut ctx: impl SubsystemContext, subsystem: ChainApiSubsystem, @@ -113,6 +116,7 @@ where let _ = response_channel.send(Ok(result)); }, ChainApiMessage::Ancestors { hash, k, response_channel } => { + tracing::span!(tracing::Level::TRACE, "ChainApiMessage::Ancestors", subsystem=LOG_TARGET, hash=%hash, k=k); let mut hash = hash; let next_parent = core::iter::from_fn(|| { diff --git a/node/core/proposer/Cargo.toml b/node/core/proposer/Cargo.toml index 827208cedf..68b0c1ca80 100644 --- a/node/core/proposer/Cargo.toml +++ b/node/core/proposer/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.11" +tracing = "0.1.21" polkadot-node-subsystem = { path = "../../subsystem" } polkadot-overseer = { path = "../../overseer" } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index a4cd2eb5c0..82507bdbf8 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -193,7 +193,7 @@ where let provisioner_data = match self.get_provisioner_data().await { Ok(pd) => pd, Err(err) => { - log::warn!("could not get provisioner inherent data; injecting default data: {}", err); + tracing::warn!(err = ?err, "could not get provisioner inherent data; injecting default data"); Default::default() } }; diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index db2de62b49..6ab65ff65b 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -7,7 +7,8 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 58695d61d9..18913613c6 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -152,6 +152,7 @@ impl JobTrait for ProvisioningJob { /// Run a job for the parent block indicated // // this function is in charge of creating and executing the job's main loop + #[tracing::instrument(skip(_run_args, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] fn run( relay_parent: Hash, _run_args: Self::RunArgs, @@ -205,7 +206,7 @@ impl ProvisioningJob { ) .await { - log::warn!(target: LOG_TARGET, "failed to assemble or send inherent data: {:?}", err); + tracing::warn!(target: LOG_TARGET, err = ?err, "failed to assemble or send inherent data"); self.metrics.on_inherent_data_request(Err(())); } else { self.metrics.on_inherent_data_request(Ok(())); @@ -254,6 +255,7 @@ impl ProvisioningJob { Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn note_provisionable_data(&mut self, provisionable_data: ProvisionableData) { match provisionable_data { ProvisionableData::Bitfield(_, signed_bitfield) => { @@ -286,6 +288,7 @@ type CoreAvailability = BitVec; /// When we're choosing bitfields to include, the rule should be simple: /// maximize availability. So basically, include all bitfields. And then /// choose a coherent set of candidates along with that. +#[tracing::instrument(level = "trace", skip(return_sender, from_job), fields(subsystem = LOG_TARGET))] async fn send_inherent_data( relay_parent: Hash, bitfields: &[SignedAvailabilityBitfield], @@ -323,6 +326,7 @@ async fn send_inherent_data( /// /// Note: This does not enforce any sorting precondition on the output; the ordering there will be unrelated /// to the sorting of the input. +#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] fn select_availability_bitfields( cores: &[CoreState], bitfields: &[SignedAvailabilityBitfield], @@ -354,6 +358,7 @@ fn select_availability_bitfields( } /// Determine which cores are free, and then to the degree possible, pick a candidate appropriate to each free core. +#[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] async fn select_candidates( availability_cores: &[CoreState], bitfields: &[SignedAvailabilityBitfield], @@ -420,6 +425,7 @@ async fn select_candidates( /// Produces a block number 1 higher than that of the relay parent /// in the event of an invalid `relay_parent`, returns `Ok(0)` +#[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] async fn get_block_number_under_construction( relay_parent: Hash, sender: &mut mpsc::Sender, @@ -445,6 +451,7 @@ async fn get_block_number_under_construction( /// - construct a transverse slice along `core_idx` /// - bitwise-or it with the availability slice /// - count the 1 bits, compare to the total length; true on 2/3+ +#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] fn bitfields_indicate_availability( core_idx: usize, bitfields: &[SignedAvailabilityBitfield], @@ -460,8 +467,10 @@ fn bitfields_indicate_availability( // in principle, this function might return a `Result` so that we can more clearly express this error condition // however, in practice, that would just push off an error-handling routine which would look a whole lot like this one. // simpler to just handle the error internally here. - log::warn!( + tracing::warn!( target: LOG_TARGET, + validator_idx = %validator_idx, + availability_len = %availability_len, "attempted to set a transverse bit at idx {} which is greater than bitfield size {}", validator_idx, availability_len, diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index 116fa92a3c..393c8aff1b 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -6,6 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" +tracing = "0.1.21" +tracing-futures = "0.2.4" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index cf266e578d..255965815a 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -40,6 +40,8 @@ use sp_api::{ProvideRuntimeApi}; use futures::prelude::*; +const LOG_TARGET: &str = "RuntimeApi"; + /// The `RuntimeApiSubsystem`. See module docs for more details. pub struct RuntimeApiSubsystem { client: Arc, @@ -66,6 +68,7 @@ impl Subsystem for RuntimeApiSubsystem where } } +#[tracing::instrument(skip(ctx, subsystem), fields(subsystem = LOG_TARGET))] async fn run( mut ctx: impl SubsystemContext, subsystem: RuntimeApiSubsystem, @@ -90,6 +93,7 @@ async fn run( } } +#[tracing::instrument(level = "trace", skip(client, metrics), fields(subsystem = LOG_TARGET))] fn make_runtime_api_request( client: &Client, metrics: &Metrics, diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index f69e35741b..e43768e637 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -6,8 +6,9 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" -parity-scale-codec = { version = "1.3.5", features = ["std"] } +tracing = "0.1.21" +tracing-futures = "0.2.4" +parity-scale-codec = { version = "1.3.5", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } @@ -27,3 +28,4 @@ futures-timer = "3.0.2" env_logger = "0.8.2" assert_matches = "1.4.0" smallvec = "1.5.0" +log = "0.4.11" diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index d2703f471b..9f390e4cab 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -30,7 +30,6 @@ use futures::{channel::oneshot, FutureExt, TryFutureExt}; use sp_core::crypto::Public; use sp_keystore::{CryptoStore, SyncCryptoStorePtr}; -use log::{trace, warn}; use polkadot_erasure_coding::branch_hash; use polkadot_node_network_protocol::{ v1 as protocol_v1, NetworkBridgeEvent, PeerId, ReputationChange as Rep, View, @@ -53,7 +52,7 @@ use std::collections::{HashMap, HashSet}; use std::iter; use thiserror::Error; -const TARGET: &'static str = "avad"; +const LOG_TARGET: &'static str = "AvailabilityDistribution"; #[derive(Debug, Error)] enum Error { @@ -197,6 +196,7 @@ struct PerRelayParent { impl ProtocolState { /// Collects the relay_parents ancestors including the relay parents themselfes. + #[tracing::instrument(level = "trace", skip(relay_parents), fields(subsystem = LOG_TARGET))] fn extend_with_ancestors<'a>( &'a self, relay_parents: impl IntoIterator + 'a, @@ -218,6 +218,7 @@ impl ProtocolState { /// Unionize all cached entries for the given relay parents and its ancestors. /// Ignores all non existent relay parents, so this can be used directly with a peers view. /// Returns a map from candidate hash -> receipt + #[tracing::instrument(level = "trace", skip(relay_parents), fields(subsystem = LOG_TARGET))] fn cached_live_candidates_unioned<'a>( &'a self, relay_parents: impl IntoIterator + 'a, @@ -232,6 +233,7 @@ impl ProtocolState { .collect() } + #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn add_relay_parent( &mut self, ctx: &mut Context, @@ -287,6 +289,7 @@ impl ProtocolState { Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn remove_relay_parent(&mut self, relay_parent: &Hash) -> Result<()> { // we might be ancestor of some other relay_parent if let Some(ref mut descendants) = self.ancestry.get_mut(relay_parent) { @@ -327,6 +330,7 @@ impl ProtocolState { /// Deal with network bridge updates and track what needs to be tracked /// which depends on the message type received. +#[tracing::instrument(level = "trace", skip(ctx, keystore, metrics), fields(subsystem = LOG_TARGET))] async fn handle_network_msg( ctx: &mut Context, keystore: &SyncCryptoStorePtr, @@ -370,6 +374,7 @@ where } /// Handle the changes necessary when our view changes. +#[tracing::instrument(level = "trace", skip(ctx, keystore, metrics), fields(subsystem = LOG_TARGET))] async fn handle_our_view_change( ctx: &mut Context, keystore: &SyncCryptoStorePtr, @@ -507,6 +512,7 @@ where .await } +#[tracing::instrument(level = "trace", skip(ctx, metrics, message_iter), fields(subsystem = LOG_TARGET))] async fn send_tracked_gossip_messages_to_peers( ctx: &mut Context, per_candidate: &mut PerCandidate, @@ -556,6 +562,7 @@ where // Send the difference between two views which were not sent // to that particular peer. +#[tracing::instrument(level = "trace", skip(ctx, metrics), fields(subsystem = LOG_TARGET))] async fn handle_peer_view_change( ctx: &mut Context, state: &mut ProtocolState, @@ -633,6 +640,7 @@ async fn obtain_our_validator_index( } /// Handle an incoming message from a peer. +#[tracing::instrument(level = "trace", skip(ctx, metrics), fields(subsystem = LOG_TARGET))] async fn process_incoming_peer_message( ctx: &mut Context, state: &mut ProtocolState, @@ -711,8 +719,8 @@ where ) .await? { - warn!( - target: TARGET, + tracing::warn!( + target: LOG_TARGET, "Failed to store erasure chunk to availability store" ); } @@ -771,6 +779,7 @@ impl AvailabilityDistributionSubsystem { } /// Start processing work as passed on from the Overseer. + #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] async fn run(self, mut ctx: Context) -> Result<()> where Context: SubsystemContext, @@ -795,9 +804,10 @@ impl AvailabilityDistributionSubsystem { ) .await { - warn!( - target: TARGET, - "Failed to handle incoming network messages: {:?}", e + tracing::warn!( + target: LOG_TARGET, + err = ?e, + "Failed to handle incoming network messages", ); } } @@ -834,6 +844,7 @@ where } /// Obtain all live candidates based on an iterator of relay heads. +#[tracing::instrument(level = "trace", skip(ctx, relay_parents), fields(subsystem = LOG_TARGET))] async fn query_live_candidates_without_ancestors( ctx: &mut Context, relay_parents: impl IntoIterator, @@ -859,6 +870,7 @@ where /// Obtain all live candidates based on an iterator or relay heads including `k` ancestors. /// /// Relay parent. +#[tracing::instrument(level = "trace", skip(ctx, relay_parents), fields(subsystem = LOG_TARGET))] async fn query_live_candidates( ctx: &mut Context, state: &mut ProtocolState, @@ -921,6 +933,7 @@ where } /// Query all para IDs. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_para_ids(ctx: &mut Context, relay_parent: Hash) -> Result> where Context: SubsystemContext, @@ -952,15 +965,16 @@ where } /// Modify the reputation of a peer based on its behavior. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn modify_reputation(ctx: &mut Context, peer: PeerId, rep: Rep) -> Result<()> where Context: SubsystemContext, { - trace!( - target: TARGET, - "Reputation change of {:?} for peer {:?}", - rep, - peer + tracing::trace!( + target: LOG_TARGET, + rep = ?rep, + peer_id = ?peer, + "Reputation change for peer", ); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ReportPeer(peer, rep), @@ -970,6 +984,7 @@ where } /// Query the proof of validity for a particular candidate hash. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_data_availability(ctx: &mut Context, candidate_hash: CandidateHash) -> Result where Context: SubsystemContext, @@ -984,6 +999,7 @@ where .map_err(|e| Error::QueryAvailabilityResponseChannel(e)) } +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_chunk( ctx: &mut Context, candidate_hash: CandidateHash, @@ -1001,6 +1017,7 @@ where rx.await.map_err(|e| Error::QueryChunkResponseChannel(e)) } +#[tracing::instrument(level = "trace", skip(ctx, erasure_chunk), fields(subsystem = LOG_TARGET))] async fn store_chunk( ctx: &mut Context, candidate_hash: CandidateHash, @@ -1028,6 +1045,7 @@ where } /// Request the head data for a particular para. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_pending_availability( ctx: &mut Context, relay_parent: Hash, @@ -1050,6 +1068,7 @@ where } /// Query the validator set. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_validators( ctx: &mut Context, relay_parent: Hash, @@ -1072,6 +1091,7 @@ where } /// Query the hash of the `K` ancestors +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_k_ancestors( ctx: &mut Context, relay_parent: Hash, @@ -1096,6 +1116,7 @@ where } /// Query the session index of a relay parent +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_session_index_for_child( ctx: &mut Context, relay_parent: Hash, @@ -1118,6 +1139,7 @@ where } /// Queries up to k ancestors with the constraints of equiv session +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_up_to_k_ancestors_in_same_session( ctx: &mut Context, relay_parent: Hash, diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index 5cc0ae91f6..c4212521a6 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -103,7 +103,7 @@ async fn overseer_send( overseer: &mut test_helpers::TestSubsystemContextHandle, msg: AvailabilityDistributionMessage, ) { - log::trace!("Sending message:\n{:?}", &msg); + tracing::trace!(msg = ?msg, "sending message"); overseer .send(FromOverseer::Communication { msg }) .timeout(TIMEOUT) @@ -114,13 +114,13 @@ async fn overseer_send( async fn overseer_recv( overseer: &mut test_helpers::TestSubsystemContextHandle, ) -> AllMessages { - log::trace!("Waiting for message ..."); + tracing::trace!("waiting for message ..."); let msg = overseer .recv() .timeout(TIMEOUT) .await .expect("TIMEOUT is enough to recv."); - log::trace!("Received message:\n{:?}", &msg); + tracing::trace!(msg = ?msg, "received message"); msg } @@ -439,11 +439,11 @@ fn reputation_verification() { let peer_b = PeerId::random(); assert_ne!(&peer_a, &peer_b); - log::trace!("peer A: {:?}", peer_a); - log::trace!("peer B: {:?}", peer_b); + tracing::trace!("peer A: {:?}", peer_a); + tracing::trace!("peer B: {:?}", peer_b); - log::trace!("candidate A: {:?}", candidates[0].hash()); - log::trace!("candidate B: {:?}", candidates[1].hash()); + tracing::trace!("candidate A: {:?}", candidates[0].hash()); + tracing::trace!("candidate B: {:?}", candidates[1].hash()); overseer_signal( &mut virtual_overseer, @@ -627,7 +627,7 @@ fn reputation_verification() { let mut candidates2 = candidates.clone(); // check if the availability store can provide the desired erasure chunks for i in 0usize..2 { - log::trace!("0000"); + tracing::trace!("0000"); let avail_data = make_available_data(&test_state, pov_block_a.clone()); let chunks = derive_erasure_chunks_with_proofs(test_state.validators.len(), &avail_data); @@ -652,10 +652,10 @@ fn reputation_verification() { assert_eq!(chunks.len(), test_state.validators.len()); - log::trace!("xxxx"); + tracing::trace!("xxxx"); // retrieve a stored chunk for (j, chunk) in chunks.into_iter().enumerate() { - log::trace!("yyyy i={}, j={}", i, j); + tracing::trace!("yyyy i={}, j={}", i, j); if i != 0 { // not a validator, so this never happens break; diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index f5a6a2f130..bfa48f6c26 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } @@ -21,6 +22,7 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } maplit = "1.0.2" +log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" tempfile = "3.1.0" diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index d6ebc26bea..7b2348eee6 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -25,7 +25,6 @@ use parity_scale_codec::{Decode, Encode}; use futures::{channel::oneshot, FutureExt}; -use log::{debug, trace, warn}; use polkadot_subsystem::messages::*; use polkadot_subsystem::{ ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemResult, @@ -79,7 +78,7 @@ impl BitfieldGossipMessage { /// Data used to track information of peers and relay parents the /// overseer ordered us to work on. -#[derive(Default, Clone)] +#[derive(Default, Clone, Debug)] struct ProtocolState { /// track all active peers and their views /// to determine what is relevant to them. @@ -144,6 +143,7 @@ impl BitfieldDistribution { } /// Start processing work as passed on from the Overseer. + #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] async fn run(self, mut ctx: Context) where Context: SubsystemContext, @@ -154,7 +154,7 @@ impl BitfieldDistribution { let message = match ctx.recv().await { Ok(message) => message, Err(e) => { - debug!(target: LOG_TARGET, "Failed to receive a message from Overseer: {}, exiting", e); + tracing::debug!(target: LOG_TARGET, err = ?e, "Failed to receive a message from Overseer, exiting"); return; }, }; @@ -162,7 +162,7 @@ impl BitfieldDistribution { FromOverseer::Communication { msg: BitfieldDistributionMessage::DistributeBitfield(hash, signed_availability), } => { - trace!(target: LOG_TARGET, "Processing DistributeBitfield"); + tracing::trace!(target: LOG_TARGET, "Processing DistributeBitfield"); if let Err(err) = handle_bitfield_distribution( &mut ctx, &mut state, @@ -170,21 +170,21 @@ impl BitfieldDistribution { hash, signed_availability, ).await { - warn!(target: LOG_TARGET, "Failed to reply to `DistributeBitfield` message: {}", err); + tracing::warn!(target: LOG_TARGET, err = ?err, "Failed to reply to `DistributeBitfield` message"); } } FromOverseer::Communication { msg: BitfieldDistributionMessage::NetworkBridgeUpdateV1(event), } => { - trace!(target: LOG_TARGET, "Processing NetworkMessage"); + tracing::trace!(target: LOG_TARGET, "Processing NetworkMessage"); // a network message was received if let Err(e) = handle_network_msg(&mut ctx, &mut state, &self.metrics, event).await { - warn!(target: LOG_TARGET, "Failed to handle incoming network messages: {:?}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "Failed to handle incoming network messages"); } } FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated })) => { for relay_parent in activated { - trace!(target: LOG_TARGET, "Start {:?}", relay_parent); + tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "activated"); // query basic system parameters once match query_basics(&mut ctx, relay_parent).await { Ok(Some((validator_set, signing_context))) => { @@ -203,22 +203,22 @@ impl BitfieldDistribution { ); } Err(e) => { - warn!(target: LOG_TARGET, "query_basics has failed: {}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "query_basics has failed"); } _ => {}, } } for relay_parent in deactivated { - trace!(target: LOG_TARGET, "Stop {:?}", relay_parent); + tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "deactivated"); // defer the cleanup to the view change } } FromOverseer::Signal(OverseerSignal::BlockFinalized(hash)) => { - trace!(target: LOG_TARGET, "Block finalized {:?}", hash); + tracing::trace!(target: LOG_TARGET, hash = %hash, "block finalized"); } FromOverseer::Signal(OverseerSignal::Conclude) => { - trace!(target: LOG_TARGET, "Conclude"); + tracing::trace!(target: LOG_TARGET, "Conclude"); return; } } @@ -227,6 +227,7 @@ impl BitfieldDistribution { } /// Modify the reputation of a peer based on its behaviour. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn modify_reputation( ctx: &mut Context, peer: PeerId, @@ -235,7 +236,7 @@ async fn modify_reputation( where Context: SubsystemContext, { - trace!(target: LOG_TARGET, "Reputation change of {:?} for peer {:?}", rep, peer); + tracing::trace!(target: LOG_TARGET, rep = ?rep, peer_id = %peer, "reputation change"); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ReportPeer(peer, rep), )) @@ -245,6 +246,7 @@ where /// Distribute a given valid and signature checked bitfield message. /// /// For this variant the source is this node. +#[tracing::instrument(level = "trace", skip(ctx, metrics), fields(subsystem = LOG_TARGET))] async fn handle_bitfield_distribution( ctx: &mut Context, state: &mut ProtocolState, @@ -260,17 +262,17 @@ where let job_data: &mut _ = if let Some(ref mut job_data) = job_data { job_data } else { - trace!( + tracing::trace!( target: LOG_TARGET, - "Not supposed to work on relay parent {} related data", - relay_parent + relay_parent = %relay_parent, + "Not supposed to work on relay parent related data", ); return Ok(()); }; let validator_set = &job_data.validator_set; if validator_set.is_empty() { - trace!(target: LOG_TARGET, "Validator set for {:?} is empty", relay_parent); + tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "validator set is empty"); return Ok(()); } @@ -278,7 +280,7 @@ where let validator = if let Some(validator) = validator_set.get(validator_index) { validator.clone() } else { - trace!(target: LOG_TARGET, "Could not find a validator for index {}", validator_index); + tracing::trace!(target: LOG_TARGET, "Could not find a validator for index {}", validator_index); return Ok(()); }; @@ -298,6 +300,7 @@ where /// Distribute a given valid and signature checked bitfield message. /// /// Can be originated by another subsystem or received via network from another peer. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn relay_message( ctx: &mut Context, job_data: &mut PerRelayParentData, @@ -342,10 +345,10 @@ where .collect::>(); if interested_peers.is_empty() { - trace!( + tracing::trace!( target: LOG_TARGET, - "No peers are interested in gossip for relay parent {:?}", - message.relay_parent + relay_parent = %message.relay_parent, + "no peers are interested in gossip for relay parent", ); } else { ctx.send_message(AllMessages::NetworkBridge( @@ -360,6 +363,7 @@ where } /// Handle an incoming message from a peer. +#[tracing::instrument(level = "trace", skip(ctx, metrics), fields(subsystem = LOG_TARGET))] async fn process_incoming_peer_message( ctx: &mut Context, state: &mut ProtocolState, @@ -385,10 +389,10 @@ where let validator_set = &job_data.validator_set; if validator_set.is_empty() { - trace!( + tracing::trace!( target: LOG_TARGET, - "Validator set for relay parent {:?} is empty", - &message.relay_parent + relay_parent = %message.relay_parent, + "Validator set is empty", ); return modify_reputation(ctx, origin, COST_MISSING_PEER_SESSION_KEY).await; } @@ -427,10 +431,10 @@ where // only relay_message a message of a validator once if one_per_validator.get(&validator).is_some() { - trace!( + tracing::trace!( target: LOG_TARGET, - "Already received a message for validator at index {}", - validator_index + validator_index, + "already received a message for validator", ); modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await?; return Ok(()); @@ -447,6 +451,7 @@ where /// Deal with network bridge updates and track what needs to be tracked /// which depends on the message type received. +#[tracing::instrument(level = "trace", skip(ctx, metrics), fields(subsystem = LOG_TARGET))] async fn handle_network_msg( ctx: &mut Context, state: &mut ProtocolState, @@ -474,7 +479,7 @@ where NetworkBridgeEvent::PeerMessage(remote, message) => { match message { protocol_v1::BitfieldDistributionMessage::Bitfield(relay_parent, bitfield) => { - trace!(target: LOG_TARGET, "Received bitfield gossip from peer {:?}", &remote); + tracing::trace!(target: LOG_TARGET, peer_id = %remote, "received bitfield gossip from peer"); let gossiped_bitfield = BitfieldGossipMessage { relay_parent, signed_availability: bitfield, @@ -488,13 +493,15 @@ where } /// Handle the changes necassary when our view changes. +#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] fn handle_our_view_change(state: &mut ProtocolState, view: View) -> SubsystemResult<()> { let old_view = std::mem::replace(&mut (state.view), view); for added in state.view.difference(&old_view) { if !state.per_relay_parent.contains_key(&added) { - warn!( + tracing::warn!( target: LOG_TARGET, + added = %added, "Our view contains {} but the overseer never told use we should work on this", &added ); @@ -510,6 +517,7 @@ fn handle_our_view_change(state: &mut ProtocolState, view: View) -> SubsystemRes // Send the difference between two views which were not sent // to that particular peer. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn handle_peer_view_change( ctx: &mut Context, state: &mut ProtocolState, @@ -560,6 +568,7 @@ where } /// Send a gossip message and track it in the per relay parent data. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn send_tracked_gossip_message( ctx: &mut Context, state: &mut ProtocolState, @@ -610,6 +619,7 @@ where } /// Query our validator set and signing context for a particular relay parent. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_basics( ctx: &mut Context, relay_parent: Hash, @@ -639,7 +649,7 @@ where SigningContext { parent_hash: relay_parent, session_index: s }, ))), (Err(e), _) | (_, Err(e)) => { - warn!(target: LOG_TARGET, "Failed to fetch basics from runtime API: {:?}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "Failed to fetch basics from runtime API"); Ok(None) } } diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 3e89edae2b..4bb6448d44 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -7,7 +7,8 @@ edition = "2018" [dependencies] async-trait = "0.1.41" futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 1ea5f47b78..97744c5c77 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -68,7 +68,7 @@ const MALFORMED_VIEW_COST: ReputationChange = ReputationChange::new(-500, "Malformed view"); // network bridge log target -const TARGET: &'static str = "network_bridge"; +const LOG_TARGET: &'static str = "network_bridge"; /// Messages received on the network. #[derive(Debug, Encode, Decode, Clone)] @@ -264,6 +264,7 @@ enum Action { Nop, } +#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] fn action_from_overseer_message( res: polkadot_subsystem::SubsystemResult>, ) -> Action { @@ -286,16 +287,17 @@ fn action_from_overseer_message( Ok(FromOverseer::Signal(OverseerSignal::BlockFinalized(_))) => Action::Nop, Err(e) => { - log::warn!(target: TARGET, "Shutting down Network Bridge due to error {:?}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "Shutting down Network Bridge due to error"); Action::Abort } } } +#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] fn action_from_network_message(event: Option) -> Action { match event { None => { - log::info!(target: TARGET, "Shutting down Network Bridge: underlying event stream concluded"); + tracing::info!(target: LOG_TARGET, "Shutting down Network Bridge: underlying event stream concluded"); Action::Abort } Some(NetworkEvent::Dht(_)) => Action::Nop, @@ -350,6 +352,7 @@ fn construct_view(live_heads: &[Hash]) -> View { View(live_heads.iter().rev().take(MAX_VIEW_HEADS).cloned().collect()) } +#[tracing::instrument(level = "trace", skip(net, ctx, validation_peers, collation_peers), fields(subsystem = LOG_TARGET))] async fn update_view( net: &mut impl Network, ctx: &mut impl SubsystemContext, @@ -379,7 +382,7 @@ async fn update_view( NetworkBridgeEvent::OurViewChange(new_view.clone()), ctx, ).await { - log::warn!(target: TARGET, "Aborting - Failure to dispatch messages to overseer"); + tracing::warn!(target: LOG_TARGET, err = ?e, "Aborting - Failure to dispatch messages to overseer"); return Err(e) } @@ -387,7 +390,7 @@ async fn update_view( NetworkBridgeEvent::OurViewChange(new_view.clone()), ctx, ).await { - log::warn!(target: TARGET, "Aborting - Failure to dispatch messages to overseer"); + tracing::warn!(target: LOG_TARGET, err = ?e, "Aborting - Failure to dispatch messages to overseer"); return Err(e) } @@ -396,6 +399,7 @@ async fn update_view( // Handle messages on a specific peer-set. The peer is expected to be connected on that // peer-set. +#[tracing::instrument(level = "trace", skip(peers, messages, net), fields(subsystem = LOG_TARGET))] async fn handle_peer_messages( peer: PeerId, peers: &mut HashMap, @@ -442,6 +446,7 @@ async fn handle_peer_messages( Ok(outgoing_messages) } +#[tracing::instrument(level = "trace", skip(net, peers), fields(subsystem = LOG_TARGET))] async fn send_validation_message( net: &mut impl Network, peers: I, @@ -454,6 +459,7 @@ async fn send_validation_message( send_message(net, peers, PeerSet::Validation, message).await } +#[tracing::instrument(level = "trace", skip(net, peers), fields(subsystem = LOG_TARGET))] async fn send_collation_message( net: &mut impl Network, peers: I, @@ -516,6 +522,7 @@ async fn dispatch_collation_event_to_all( dispatch_collation_events_to_all(std::iter::once(event), ctx).await } +#[tracing::instrument(level = "trace", skip(events, ctx), fields(subsystem = LOG_TARGET))] async fn dispatch_validation_events_to_all( events: I, ctx: &mut impl SubsystemContext, @@ -547,6 +554,7 @@ async fn dispatch_validation_events_to_all( ctx.send_messages(events.into_iter().flat_map(messages_for)).await } +#[tracing::instrument(level = "trace", skip(events, ctx), fields(subsystem = LOG_TARGET))] async fn dispatch_collation_events_to_all( events: I, ctx: &mut impl SubsystemContext, @@ -564,6 +572,7 @@ async fn dispatch_collation_events_to_all( ctx.send_messages(events.into_iter().flat_map(messages_for)).await } +#[tracing::instrument(skip(network_service, authority_discovery_service, ctx), fields(subsystem = LOG_TARGET))] async fn run_network( mut network_service: N, mut authority_discovery_service: AD, @@ -686,7 +695,7 @@ where }; if let Err(e) = res { - log::warn!("Aborting - Failure to dispatch messages to overseer"); + tracing::warn!(err = ?e, "Aborting - Failure to dispatch messages to overseer"); return Err(e); } } @@ -713,8 +722,9 @@ where }; if let Err(e) = res { - log::warn!( - target: TARGET, + tracing::warn!( + target: LOG_TARGET, + err = ?e, "Aborting - Failure to dispatch messages to overseer", ); return Err(e) @@ -734,8 +744,9 @@ where events, &mut ctx, ).await { - log::warn!( - target: TARGET, + tracing::warn!( + target: LOG_TARGET, + err = ?e, "Aborting - Failure to dispatch messages to overseer", ); return Err(e) @@ -754,8 +765,9 @@ where events, &mut ctx, ).await { - log::warn!( - target: TARGET, + tracing::warn!( + target: LOG_TARGET, + err = ?e, "Aborting - Failure to dispatch messages to overseer", ); return Err(e) diff --git a/node/network/bridge/src/validator_discovery.rs b/node/network/bridge/src/validator_discovery.rs index da5491bf6d..d0cc146191 100644 --- a/node/network/bridge/src/validator_discovery.rs +++ b/node/network/bridge/src/validator_discovery.rs @@ -29,6 +29,7 @@ use polkadot_node_network_protocol::PeerId; use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash}; const PRIORITY_GROUP: &'static str = "parachain_validators"; +const LOG_TARGET: &str = "ValidatorDiscovery"; /// An abstraction over networking for the purposes of validator discovery service. #[async_trait] @@ -163,6 +164,7 @@ impl Service { /// Find connected validators using the given `validator_ids`. /// /// Returns a [`HashMap`] that contains the found [`AuthorityDiscoveryId`]'s and their associated [`PeerId`]'s. + #[tracing::instrument(level = "trace", skip(self, authority_discovery_service), fields(subsystem = LOG_TARGET))] async fn find_connected_validators( &mut self, validator_ids: &[AuthorityDiscoveryId], @@ -201,6 +203,7 @@ impl Service { /// This method will also clean up all previously revoked requests. /// it takes `network_service` and `authority_discovery_service` by value /// and returns them as a workaround for the Future: Send requirement imposed by async fn impl. + #[tracing::instrument(level = "trace", skip(self, connected, revoke, network_service, authority_discovery_service), fields(subsystem = LOG_TARGET))] pub async fn on_request( &mut self, validator_ids: Vec, @@ -283,7 +286,7 @@ impl Service { PRIORITY_GROUP.to_owned(), multiaddr_to_add, ).await { - log::warn!(target: super::TARGET, "AuthorityDiscoveryService returned an invalid multiaddress: {}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); } // the addresses are known to be valid let _ = network_service.remove_from_priority_group(PRIORITY_GROUP.to_owned(), multiaddr_to_remove).await; @@ -304,6 +307,7 @@ impl Service { } /// Should be called when a peer connected. + #[tracing::instrument(level = "trace", skip(self, authority_discovery_service), fields(subsystem = LOG_TARGET))] pub async fn on_peer_connected(&mut self, peer_id: &PeerId, authority_discovery_service: &mut AD) { // check if it's an authority we've been waiting for let maybe_authority = authority_discovery_service.get_authority_id_by_peer_id(peer_id.clone()).await; diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 740b8e1435..49844e9c7e 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" thiserror = "1.0.22" @@ -16,6 +17,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } [dev-dependencies] +log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" smallvec = "1.5.0" diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index f0b974c822..9267ab0916 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -19,7 +19,6 @@ use std::collections::HashMap; use super::{LOG_TARGET, Result}; use futures::{StreamExt, task::Poll}; -use log::warn; use polkadot_primitives::v1::{ CollatorId, CoreIndex, CoreState, Hash, Id as ParaId, CandidateReceipt, @@ -138,6 +137,7 @@ struct State { /// or the relay-parent isn't in the active-leaves set, we ignore the message /// as it must be invalid in that case - although this indicates a logic error /// elsewhere in the node. +#[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] async fn distribute_collation( ctx: &mut Context, state: &mut State, @@ -152,10 +152,10 @@ where // This collation is not in the active-leaves set. if !state.view.contains(&relay_parent) { - warn!( + tracing::warn!( target: LOG_TARGET, - "Distribute collation message parent {:?} is outside of our view", - relay_parent, + relay_parent = %relay_parent, + "distribute collation message parent is outside of our view", ); return Ok(()); @@ -171,9 +171,11 @@ where let (our_core, num_cores) = match determine_core(ctx, id, relay_parent).await? { Some(core) => core, None => { - warn!( + tracing::warn!( target: LOG_TARGET, - "Looks like no core is assigned to {:?} at {:?}", id, relay_parent, + para_id = %id, + relay_parent = %relay_parent, + "looks like no core is assigned to {} at {}", id, relay_parent, ); return Ok(()); } @@ -183,9 +185,10 @@ where let our_validators = match determine_our_validators(ctx, our_core, num_cores, relay_parent).await? { Some(validators) => validators, None => { - warn!( + tracing::warn!( target: LOG_TARGET, - "There are no validators assigned to {:?} core", our_core, + core = ?our_core, + "there are no validators assigned to core", ); return Ok(()); @@ -217,6 +220,7 @@ where /// Get the Id of the Core that is assigned to the para being collated on if any /// and the total number of cores. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn determine_core( ctx: &mut Context, para_id: ParaId, @@ -241,6 +245,7 @@ where /// Figure out a group of validators assigned to the para being collated on. /// /// This returns validators for the current group and the next group. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn determine_our_validators( ctx: &mut Context, core_index: CoreIndex, @@ -280,6 +285,7 @@ where } /// Issue a `Declare` collation message to a set of peers. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn declare( ctx: &mut Context, state: &mut State, @@ -302,6 +308,7 @@ where /// Issue a connection request to a set of validators and /// revoke the previous connection request. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn connect_to_validators( ctx: &mut Context, relay_parent: Hash, @@ -327,6 +334,7 @@ where } /// Advertise collation to a set of relay chain validators. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn advertise_collation( ctx: &mut Context, state: &mut State, @@ -358,6 +366,7 @@ where } /// The main incoming message dispatching switch. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn process_msg( ctx: &mut Context, state: &mut State, @@ -377,39 +386,39 @@ where Some(id) if receipt.descriptor.para_id != id => { // If the ParaId of a collation requested to be distributed does not match // the one we expect, we ignore the message. - warn!( + tracing::warn!( target: LOG_TARGET, - "DistributeCollation message for para {:?} while collating on {:?}", - receipt.descriptor.para_id, - id, + para_id = %receipt.descriptor.para_id, + collating_on = %id, + "DistributeCollation for unexpected para_id", ); } Some(id) => { distribute_collation(ctx, state, id, receipt, pov).await?; } None => { - warn!( + tracing::warn!( target: LOG_TARGET, - "DistributeCollation message for para {:?} while not collating on any", - receipt.descriptor.para_id, + para_id = %receipt.descriptor.para_id, + "DistributeCollation message while not collating on any", ); } } } FetchCollation(_, _, _, _) => { - warn!( + tracing::warn!( target: LOG_TARGET, "FetchCollation message is not expected on the collator side of the protocol", ); } ReportCollator(_) => { - warn!( + tracing::warn!( target: LOG_TARGET, "ReportCollator message is not expected on the collator side of the protocol", ); } NoteGoodCollation(_) => { - warn!( + tracing::warn!( target: LOG_TARGET, "NoteGoodCollation message is not expected on the collator side of the protocol", ); @@ -420,9 +429,10 @@ where state, event, ).await { - warn!( + tracing::warn!( target: LOG_TARGET, - "Failed to handle incoming network message: {:?}", e, + err = ?e, + "Failed to handle incoming network message", ); } }, @@ -432,6 +442,7 @@ where } /// Issue a response to a previously requested collation. +#[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] async fn send_collation( ctx: &mut Context, state: &mut State, @@ -462,6 +473,7 @@ where } /// A networking messages switch. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_incoming_peer_message( ctx: &mut Context, state: &mut State, @@ -475,13 +487,13 @@ where match msg { Declare(_) => { - warn!( + tracing::warn!( target: LOG_TARGET, "Declare message is not expected on the collator side of the protocol", ); } AdvertiseCollation(_, _) => { - warn!( + tracing::warn!( target: LOG_TARGET, "AdvertiseCollation message is not expected on the collator side of the protocol", ); @@ -494,24 +506,25 @@ where send_collation(ctx, state, request_id, origin, collation.0, collation.1).await?; } } else { - warn!( + tracing::warn!( target: LOG_TARGET, - "Received a RequestCollation for {:?} while collating on {:?}", - para_id, our_para_id, + for_para_id = %para_id, + our_para_id = %our_para_id, + "received a RequestCollation for unexpected para_id", ); } } None => { - warn!( + tracing::warn!( target: LOG_TARGET, - "Received a RequestCollation for {:?} while not collating on any para", - para_id, + for_para_id = %para_id, + "received a RequestCollation while not collating on any para", ); } } } Collation(_, _, _) => { - warn!( + tracing::warn!( target: LOG_TARGET, "Collation message is not expected on the collator side of the protocol", ); @@ -522,6 +535,7 @@ where } /// Our view has changed. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_peer_view_change( ctx: &mut Context, state: &mut State, @@ -549,6 +563,7 @@ where /// A validator is connected. /// /// `Declare` that we are a collator with a given `CollatorId`. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_validator_connected( ctx: &mut Context, state: &mut State, @@ -571,6 +586,7 @@ where } /// Bridge messages switch. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_network_msg( ctx: &mut Context, state: &mut State, @@ -605,6 +621,7 @@ where } /// Handles our view changes. +#[tracing::instrument(level = "trace", skip(state), fields(subsystem = LOG_TARGET))] async fn handle_our_view_change( state: &mut State, view: View, @@ -624,6 +641,7 @@ async fn handle_our_view_change( } /// The collator protocol collator side main loop. +#[tracing::instrument(skip(ctx, metrics), fields(subsystem = LOG_TARGET))] pub(crate) async fn run( mut ctx: Context, our_id: CollatorId, @@ -646,10 +664,10 @@ where if let Some(mut request) = state.last_connection_request.take() { while let Poll::Ready(Some((validator_id, peer_id))) = futures::poll!(request.next()) { if let Err(err) = handle_validator_connected(&mut ctx, &mut state, peer_id, validator_id).await { - warn!( + tracing::warn!( target: LOG_TARGET, - "Failed to declare our collator id: {:?}", - err, + err = ?err, + "Failed to declare our collator id", ); } } @@ -661,7 +679,7 @@ where match msg? { Communication { msg } => { if let Err(e) = process_msg(&mut ctx, &mut state, msg).await { - warn!(target: LOG_TARGET, "Failed to process message: {}", e); + tracing::warn!(target: LOG_TARGET, err = ?e, "Failed to process message"); } }, Signal(ActiveLeaves(_update)) => {} @@ -682,7 +700,6 @@ mod tests { use assert_matches::assert_matches; use futures::{executor, future, Future}; - use log::trace; use smallvec::smallvec; use sp_core::crypto::Pair; @@ -839,7 +856,7 @@ mod tests { overseer: &mut test_helpers::TestSubsystemContextHandle, msg: CollatorProtocolMessage, ) { - trace!("Sending message:\n{:?}", &msg); + tracing::trace!(msg = ?msg, "sending message"); overseer .send(FromOverseer::Communication { msg }) .timeout(TIMEOUT) @@ -854,7 +871,7 @@ mod tests { .await .expect(&format!("{:?} is more than enough to receive messages", TIMEOUT)); - trace!("Received message:\n{:?}", &msg); + tracing::trace!(msg = ?msg, "received message"); msg } @@ -863,7 +880,7 @@ mod tests { overseer: &mut test_helpers::TestSubsystemContextHandle, timeout: Duration, ) -> Option { - trace!("Waiting for message..."); + tracing::trace!("waiting for message..."); overseer .recv() .timeout(timeout) diff --git a/node/network/collator-protocol/src/lib.rs b/node/network/collator-protocol/src/lib.rs index 2d4f51aa04..5909c0b8e6 100644 --- a/node/network/collator-protocol/src/lib.rs +++ b/node/network/collator-protocol/src/lib.rs @@ -21,7 +21,6 @@ use std::time::Duration; use futures::{channel::oneshot, FutureExt, TryFutureExt}; -use log::trace; use thiserror::Error; use polkadot_subsystem::{ @@ -96,6 +95,7 @@ impl CollatorProtocolSubsystem { } } + #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] async fn run(self, ctx: Context) -> Result<()> where Context: SubsystemContext, @@ -135,13 +135,16 @@ where } /// Modify the reputation of a peer based on its behavior. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn modify_reputation(ctx: &mut Context, peer: PeerId, rep: Rep) -> Result<()> where Context: SubsystemContext, { - trace!( + tracing::trace!( target: LOG_TARGET, - "Reputation change of {:?} for peer {:?}", rep, peer, + rep = ?rep, + peer_id = %peer, + "reputation change for peer", ); ctx.send_message(AllMessages::NetworkBridge( diff --git a/node/network/collator-protocol/src/validator_side.rs b/node/network/collator-protocol/src/validator_side.rs index 9b95c0ee46..f3a5958a67 100644 --- a/node/network/collator-protocol/src/validator_side.rs +++ b/node/network/collator-protocol/src/validator_side.rs @@ -25,7 +25,6 @@ use futures::{ future::BoxFuture, stream::FuturesUnordered, }; -use log::{trace, warn}; use polkadot_primitives::v1::{ Id as ParaId, CandidateReceipt, CollatorId, Hash, PoV, @@ -188,6 +187,7 @@ struct State { } /// Another subsystem has requested to fetch collations on a particular leaf for some para. +#[tracing::instrument(level = "trace", skip(ctx, state, tx), fields(subsystem = LOG_TARGET))] async fn fetch_collation( ctx: &mut Context, state: &mut State, @@ -206,9 +206,10 @@ where if let Err(e) = tx.send((collation.1.clone(), collation.2.clone())) { // We do not want this to be fatal because the receving subsystem // may have closed the results channel for some reason. - trace!( + tracing::trace!( target: LOG_TARGET, - "Failed to send collation: {:?}", e, + err = ?e, + "Failed to send collation", ); } return Ok(()); @@ -238,6 +239,7 @@ where } /// Report a collator for some malicious actions. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn report_collator( ctx: &mut Context, state: &mut State, @@ -259,6 +261,7 @@ where } /// Some other subsystem has reported a collator as a good one, bump reputation. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn note_good_collation( ctx: &mut Context, state: &mut State, @@ -279,6 +282,7 @@ where /// A peer's view has changed. A number of things should be done: /// - Ongoing collation requests have to be cancelled. /// - Advertisements by this peer that are no longer relevant have to be removed. +#[tracing::instrument(level = "trace", skip(state), fields(subsystem = LOG_TARGET))] async fn handle_peer_view_change( state: &mut State, peer_id: PeerId, @@ -320,6 +324,7 @@ async fn handle_peer_view_change( /// - Cancel all ongoing requests /// - Reply to interested parties if any /// - Store collation. +#[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] async fn received_collation( ctx: &mut Context, state: &mut State, @@ -368,6 +373,7 @@ where /// - Check if the requested collation is in our view. /// - Update PerRequest records with the `result` field if necessary. /// And as such invocations of this function may rely on that. +#[tracing::instrument(level = "trace", skip(ctx, state, result), fields(subsystem = LOG_TARGET))] async fn request_collation( ctx: &mut Context, state: &mut State, @@ -380,19 +386,23 @@ where Context: SubsystemContext { if !state.view.contains(&relay_parent) { - trace!( + tracing::trace!( target: LOG_TARGET, - "Collation by {} on {} on relay parent {} is no longer in view", - peer_id, para_id, relay_parent, + peer_id = %peer_id, + para_id = %para_id, + relay_parent = %relay_parent, + "collation is no longer in view", ); return Ok(()); } if state.requested_collations.contains_key(&(relay_parent, para_id.clone(), peer_id.clone())) { - trace!( + tracing::trace!( target: LOG_TARGET, - "Collation by {} on {} on relay parent {} has already been requested", - peer_id, para_id, relay_parent, + peer_id = %peer_id, + para_id = %para_id, + relay_parent = %relay_parent, + "collation has already been requested", ); return Ok(()); } @@ -436,6 +446,7 @@ where } /// Notify `CandidateSelectionSubsystem` that a collation has been advertised. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn notify_candidate_selection( ctx: &mut Context, collator: CollatorId, @@ -457,6 +468,7 @@ where } /// Networking message has been received. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn process_incoming_peer_message( ctx: &mut Context, state: &mut State, @@ -495,6 +507,7 @@ where /// A leaf has become inactive so we want to /// - Cancel all ongoing collation requests that are on top of that leaf. /// - Remove all stored collations relevant to that leaf. +#[tracing::instrument(level = "trace", skip(state), fields(subsystem = LOG_TARGET))] async fn remove_relay_parent( state: &mut State, relay_parent: Hash, @@ -520,6 +533,7 @@ async fn remove_relay_parent( } /// Our view has changed. +#[tracing::instrument(level = "trace", skip(state), fields(subsystem = LOG_TARGET))] async fn handle_our_view_change( state: &mut State, view: View, @@ -543,6 +557,7 @@ async fn handle_our_view_change( } /// A request has timed out. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn request_timed_out( ctx: &mut Context, state: &mut State, @@ -568,6 +583,7 @@ where } /// Bridge event switch. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_network_msg( ctx: &mut Context, state: &mut State, @@ -601,6 +617,7 @@ where } /// The main message receiver switch. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn process_msg( ctx: &mut Context, msg: CollatorProtocolMessage, @@ -613,13 +630,14 @@ where match msg { CollateOn(id) => { - warn!( + tracing::warn!( target: LOG_TARGET, - "CollateOn({}) message is not expected on the validator side of the protocol", id, + para_id = %id, + "CollateOn message is not expected on the validator side of the protocol", ); } DistributeCollation(_, _) => { - warn!( + tracing::warn!( target: LOG_TARGET, "DistributeCollation message is not expected on the validator side of the protocol", ); @@ -639,9 +657,10 @@ where state, event, ).await { - warn!( + tracing::warn!( target: LOG_TARGET, - "Failed to handle incoming network message: {:?}", e, + err = ?e, + "Failed to handle incoming network message", ); } } @@ -651,6 +670,7 @@ where } /// The main run loop. +#[tracing::instrument(skip(ctx, metrics), fields(subsystem = LOG_TARGET))] pub(crate) async fn run( mut ctx: Context, request_timeout: Duration, @@ -671,7 +691,7 @@ where loop { if let Poll::Ready(msg) = futures::poll!(ctx.recv()) { let msg = msg?; - trace!(target: LOG_TARGET, "Received a message {:?}", msg); + tracing::trace!(target: LOG_TARGET, msg = ?msg, "received a message"); match msg { Communication { msg } => process_msg(&mut ctx, msg, &mut state).await?, @@ -687,7 +707,7 @@ where // if the chain has not moved on yet. match request { CollationRequestResult::Timeout(id) => { - trace!(target: LOG_TARGET, "Request timed out {}", id); + tracing::trace!(target: LOG_TARGET, id, "request timed out"); request_timed_out(&mut ctx, &mut state, id).await?; } CollationRequestResult::Received(id) => { @@ -784,7 +804,7 @@ mod tests { overseer: &mut test_helpers::TestSubsystemContextHandle, msg: CollatorProtocolMessage, ) { - log::trace!("Sending message:\n{:?}", &msg); + tracing::trace!("Sending message:\n{:?}", &msg); overseer .send(FromOverseer::Communication { msg }) .timeout(TIMEOUT) @@ -799,7 +819,7 @@ mod tests { .await .expect(&format!("{:?} is enough to receive messages.", TIMEOUT)); - log::trace!("Received message:\n{:?}", &msg); + tracing::trace!("Received message:\n{:?}", &msg); msg } @@ -808,7 +828,7 @@ mod tests { overseer: &mut test_helpers::TestSubsystemContextHandle, timeout: Duration, ) -> Option { - log::trace!("Waiting for message..."); + tracing::trace!("Waiting for message..."); overseer .recv() .timeout(timeout) @@ -826,7 +846,7 @@ mod tests { } = test_harness; let pair = CollatorPair::generate().0; - log::trace!("activating"); + tracing::trace!("activating"); overseer_send( &mut virtual_overseer, diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 1c85e39ac0..4d22587f68 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index e28013a06a..b1d7a8367c 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -116,6 +116,7 @@ fn send_pov_message(relay_parent: Hash, pov_hash: Hash, pov: PoV) /// Handles the signal. If successful, returns `true` if the subsystem should conclude, /// `false` otherwise. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_signal( state: &mut State, ctx: &mut impl SubsystemContext, @@ -134,10 +135,10 @@ async fn handle_signal( let n_validators = match vals_rx.await? { Ok(v) => v.len(), Err(e) => { - log::warn!( + tracing::warn!( target: LOG_TARGET, - "Error fetching validators from runtime API for active leaf: {:?}", - e + err = ?e, + "Error fetching validators from runtime API for active leaf", ); // Not adding bookkeeping here might make us behave funny, but we @@ -169,6 +170,7 @@ async fn handle_signal( /// Notify peers that we are awaiting a given PoV hash. /// /// This only notifies peers who have the relay parent in their view. +#[tracing::instrument(level = "trace", skip(peers, ctx), fields(subsystem = LOG_TARGET))] async fn notify_all_we_are_awaiting( peers: &mut HashMap, ctx: &mut impl SubsystemContext, @@ -195,6 +197,7 @@ async fn notify_all_we_are_awaiting( } /// Notify one peer about everything we're awaiting at a given relay-parent. +#[tracing::instrument(level = "trace", skip(ctx, relay_parent_state), fields(subsystem = LOG_TARGET))] async fn notify_one_we_are_awaiting_many( peer: &PeerId, ctx: &mut impl SubsystemContext, @@ -219,6 +222,7 @@ async fn notify_one_we_are_awaiting_many( } /// Distribute a PoV to peers who are awaiting it. +#[tracing::instrument(level = "trace", skip(peers, ctx, metrics, pov), fields(subsystem = LOG_TARGET))] async fn distribute_to_awaiting( peers: &mut HashMap, ctx: &mut impl SubsystemContext, @@ -255,6 +259,7 @@ async fn distribute_to_awaiting( } /// Handles a `FetchPoV` message. +#[tracing::instrument(level = "trace", skip(ctx, state, response_sender), fields(subsystem = LOG_TARGET))] async fn handle_fetch( state: &mut State, ctx: &mut impl SubsystemContext, @@ -286,8 +291,10 @@ async fn handle_fetch( } if relay_parent_state.fetching.len() > 2 * relay_parent_state.n_validators { - log::warn!("Other subsystems have requested PoV distribution to \ - fetch more PoVs than reasonably expected: {}", relay_parent_state.fetching.len()); + tracing::warn!( + relay_parent_state.fetching.len = relay_parent_state.fetching.len(), + "other subsystems have requested PoV distribution to fetch more PoVs than reasonably expected", + ); return Ok(()); } @@ -301,6 +308,7 @@ async fn handle_fetch( } /// Handles a `DistributePoV` message. +#[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] async fn handle_distribute( state: &mut State, ctx: &mut impl SubsystemContext, @@ -336,6 +344,7 @@ async fn handle_distribute( } /// Report a reputation change for a peer. +#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn report_peer( ctx: &mut impl SubsystemContext, peer: PeerId, @@ -345,6 +354,7 @@ async fn report_peer( } /// Handle a notification from a peer that they are awaiting some PoVs. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_awaiting( state: &mut State, ctx: &mut impl SubsystemContext, @@ -359,7 +369,7 @@ async fn handle_awaiting( let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { None => { - log::warn!("PoV Distribution relay parent state out-of-sync with our view"); + tracing::warn!("PoV Distribution relay parent state out-of-sync with our view"); return Ok(()); } Some(s) => s, @@ -399,6 +409,7 @@ async fn handle_awaiting( /// Handle an incoming PoV from our peer. Reports them if unexpected, rewards them if not. /// /// Completes any requests awaiting that PoV. +#[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] async fn handle_incoming_pov( state: &mut State, ctx: &mut impl SubsystemContext, @@ -466,6 +477,7 @@ async fn handle_incoming_pov( } /// Handles a network bridge update. +#[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_network_update( state: &mut State, ctx: &mut impl SubsystemContext, @@ -537,6 +549,7 @@ impl PoVDistribution { Self { metrics } } + #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] async fn run( self, mut ctx: impl SubsystemContext, diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index 7e953e0ad9..8c80d69224 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -7,7 +7,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } node-primitives = { package = "polkadot-node-primitives", path = "../../primitives" } sp-staking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index bb4c192c4f..383f34a6fc 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -111,7 +111,7 @@ impl VcPerPeerTracker { /// based on a message that we have sent it from our local pool. fn note_local(&mut self, h: CandidateHash) { if !note_hash(&mut self.local_observed, h) { - log::warn!("Statement distribution is erroneously attempting to distribute more \ + tracing::warn!("Statement distribution is erroneously attempting to distribute more \ than {} candidate(s) per validator index. Ignoring", VC_THRESHOLD); } } @@ -164,6 +164,7 @@ impl PeerRelayParentKnowledge { /// /// This returns `Some(true)` if this is the first time the peer has become aware of a /// candidate with the given hash. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn send(&mut self, fingerprint: &(CompactStatement, ValidatorIndex)) -> Option { let already_known = self.sent_statements.contains(fingerprint) || self.received_statements.contains(fingerprint); @@ -212,6 +213,7 @@ impl PeerRelayParentKnowledge { /// /// This returns `Ok(true)` if this is the first time the peer has become aware of a /// candidate with given hash. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn receive( &mut self, fingerprint: &(CompactStatement, ValidatorIndex), @@ -278,6 +280,7 @@ impl PeerData { /// /// This returns `Some(true)` if this is the first time the peer has become aware of a /// candidate with the given hash. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn send( &mut self, relay_parent: &Hash, @@ -302,6 +305,7 @@ impl PeerData { /// /// This returns `Ok(true)` if this is the first time the peer has become aware of a /// candidate with given hash. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn receive( &mut self, relay_parent: &Hash, @@ -411,6 +415,7 @@ impl ActiveHeadData { /// /// Any other statements or those that reference a candidate we are not aware of cannot be accepted /// and will return `NotedStatement::NotUseful`. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn note_statement(&mut self, statement: SignedFullStatement) -> NotedStatement { let validator_index = statement.validator_index(); let comparator = StoredStatementComparator { @@ -490,6 +495,7 @@ fn check_statement_signature( /// Informs all registered listeners about a newly received statement. /// /// Removes all closed listeners. +#[tracing::instrument(level = "trace", skip(listeners), fields(subsystem = LOG_TARGET))] async fn inform_statement_listeners( statement: &SignedFullStatement, listeners: &mut Vec>, @@ -509,6 +515,7 @@ async fn inform_statement_listeners( /// circulates the statement to all peers who have not seen it yet, and /// sends all statements dependent on that statement to peers who could previously not receive /// them but now can. +#[tracing::instrument(level = "trace", skip(peers, ctx, active_heads, metrics), fields(subsystem = LOG_TARGET))] async fn circulate_statement_and_dependents( peers: &mut HashMap, active_heads: &mut HashMap, @@ -564,6 +571,7 @@ fn statement_message(relay_parent: Hash, statement: SignedFullStatement) /// Circulates a statement to all peers who have not seen it yet, and returns /// an iterator over peers who need to have dependent statements sent. +#[tracing::instrument(level = "trace", skip(peers, ctx), fields(subsystem = LOG_TARGET))] async fn circulate_statement( peers: &mut HashMap, ctx: &mut impl SubsystemContext, @@ -597,6 +605,7 @@ async fn circulate_statement( } /// Send all statements about a given candidate hash to a peer. +#[tracing::instrument(level = "trace", skip(peer_data, ctx, active_head, metrics), fields(subsystem = LOG_TARGET))] async fn send_statements_about( peer: PeerId, peer_data: &mut PeerData, @@ -625,6 +634,7 @@ async fn send_statements_about( } /// Send all statements at a given relay-parent to a peer. +#[tracing::instrument(level = "trace", skip(peer_data, ctx, active_head, metrics), fields(subsystem = LOG_TARGET))] async fn send_statements( peer: PeerId, peer_data: &mut PeerData, @@ -666,6 +676,7 @@ async fn report_peer( // // This function checks the signature and ensures the statement is compatible with our // view. +#[tracing::instrument(level = "trace", skip(peer_data, ctx, active_heads, metrics), fields(subsystem = LOG_TARGET))] async fn handle_incoming_message<'a>( peer: PeerId, peer_data: &mut PeerData, @@ -688,7 +699,10 @@ async fn handle_incoming_message<'a>( None => { // This should never be out-of-sync with our view if the view updates // correspond to actual `StartWork` messages. So we just log and ignore. - log::warn!("Our view out-of-sync with active heads. Head {} not found", relay_parent); + tracing::warn!( + requested_relay_parent = %relay_parent, + "our view out-of-sync with active heads; head not found", + ); return Ok(None); } }; @@ -741,6 +755,7 @@ async fn handle_incoming_message<'a>( } /// Update a peer's view. Sends all newly unlocked statements based on the previous +#[tracing::instrument(level = "trace", skip(peer_data, ctx, active_heads, metrics), fields(subsystem = LOG_TARGET))] async fn update_peer_view_and_send_unlocked( peer: PeerId, peer_data: &mut PeerData, @@ -777,6 +792,7 @@ async fn update_peer_view_and_send_unlocked( Ok(()) } +#[tracing::instrument(level = "trace", skip(peers, active_heads, ctx, metrics), fields(subsystem = LOG_TARGET))] async fn handle_network_update( peers: &mut HashMap, active_heads: &mut HashMap, @@ -847,9 +863,13 @@ async fn handle_network_update( for new in our_view.difference(&old_view) { if !active_heads.contains_key(&new) { - log::warn!(target: LOG_TARGET, "Our network bridge view update \ + tracing::warn!( + target: LOG_TARGET, + unknown_hash = %new, + "Our network bridge view update \ inconsistent with `StartWork` messages we have received from overseer. \ - Contains unknown hash {}", new); + Contains unknown hash.", + ); } } @@ -860,6 +880,7 @@ async fn handle_network_update( } impl StatementDistribution { + #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] async fn run( self, mut ctx: impl SubsystemContext, @@ -899,10 +920,10 @@ impl StatementDistribution { match (val_rx.await?, session_rx.await?) { (Ok(v), Ok(s)) => (v, s), (Err(e), _) | (_, Err(e)) => { - log::warn!( + tracing::warn!( target: LOG_TARGET, - "Failed to fetch runtime API data for active leaf: {:?}", - e, + err = ?e, + "Failed to fetch runtime API data for active leaf", ); // Lacking this bookkeeping might make us behave funny, although diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index b1f32723b8..145cfa0e13 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] futures = "0.3.8" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" futures-timer = "3.0.2" streamunordered = "0.5.1" polkadot-primitives = { path = "../../primitives" } @@ -22,5 +23,4 @@ polkadot-node-network-protocol = { path = "../network/protocol" } futures = { version = "0.3.8", features = ["thread-pool"] } futures-timer = "3.0.2" femme = "2.1.1" -log = "0.4.11" kv-log-macro = "1.0.7" diff --git a/node/overseer/examples/minimal-example.rs b/node/overseer/examples/minimal-example.rs index dd923f5df8..e07280c1ca 100644 --- a/node/overseer/examples/minimal-example.rs +++ b/node/overseer/examples/minimal-example.rs @@ -25,7 +25,6 @@ use futures::{ FutureExt, StreamExt, }; use futures_timer::Delay; -use kv_log_macro as log; use polkadot_primitives::v1::{BlockData, PoV}; use polkadot_overseer::{Overseer, AllSubsystems}; @@ -43,13 +42,13 @@ impl Subsystem1 { match ctx.try_recv().await { Ok(Some(msg)) => { if let FromOverseer::Communication { msg } = msg { - log::info!("msg {:?}", msg); + tracing::info!("msg {:?}", msg); } continue; } Ok(None) => (), Err(_) => { - log::info!("exiting"); + tracing::info!("exiting"); return; } } @@ -94,7 +93,7 @@ impl Subsystem2 { "subsystem-2-job", Box::pin(async { loop { - log::info!("Job tick"); + tracing::info!("Job tick"); Delay::new(Duration::from_secs(1)).await; } }), @@ -103,12 +102,12 @@ impl Subsystem2 { loop { match ctx.try_recv().await { Ok(Some(msg)) => { - log::info!("Subsystem2 received message {:?}", msg); + tracing::info!("Subsystem2 received message {:?}", msg); continue; } Ok(None) => { pending!(); } Err(_) => { - log::info!("exiting"); + tracing::info!("exiting"); return; }, } @@ -159,7 +158,7 @@ fn main() { select! { _ = overseer_fut => break, _ = timer_stream.next() => { - log::info!("tick"); + tracing::info!("tick"); } complete => break, } diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index b01e4fb055..113d3d0be0 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -135,6 +135,7 @@ enum ToOverseer { /// This structure exists solely for the purposes of decoupling /// `Overseer` code from the client code and the necessity to call /// `HeaderBackend::block_number_from_id()`. +#[derive(Debug)] pub struct BlockInfo { /// hash of the block. pub hash: Hash, @@ -191,16 +192,19 @@ pub struct OverseerHandler { impl OverseerHandler { /// Inform the `Overseer` that that some block was imported. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] pub async fn block_imported(&mut self, block: BlockInfo) -> SubsystemResult<()> { self.events_tx.send(Event::BlockImported(block)).await.map_err(Into::into) } /// Send some message to one of the `Subsystem`s. + #[tracing::instrument(level = "trace", skip(self, msg), fields(subsystem = LOG_TARGET))] pub async fn send_msg(&mut self, msg: impl Into) -> SubsystemResult<()> { self.events_tx.send(Event::MsgToSubsystem(msg.into())).await.map_err(Into::into) } /// Inform the `Overseer` that that some block was finalized. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] pub async fn block_finalized(&mut self, block: BlockInfo) -> SubsystemResult<()> { self.events_tx.send(Event::BlockFinalized(block)).await.map_err(Into::into) } @@ -212,6 +216,7 @@ impl OverseerHandler { /// Note that due the fact the overseer doesn't store the whole active-leaves set, only deltas, /// the response channel may never return if the hash was deactivated before this call. /// In this case, it's the caller's responsibility to ensure a timeout is set. + #[tracing::instrument(level = "trace", skip(self, response_channel), fields(subsystem = LOG_TARGET))] pub async fn wait_for_activation(&mut self, hash: Hash, response_channel: oneshot::Sender>) -> SubsystemResult<()> { self.events_tx.send(Event::ExternalRequest(ExternalRequest::WaitForActivation { hash, @@ -220,6 +225,7 @@ impl OverseerHandler { } /// Tell `Overseer` to shutdown. + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] pub async fn stop(&mut self) -> SubsystemResult<()> { self.events_tx.send(Event::Stop).await.map_err(Into::into) } @@ -1287,6 +1293,7 @@ where } /// Run the `Overseer`. + #[tracing::instrument(skip(self), fields(subsystem = LOG_TARGET))] pub async fn run(mut self) -> SubsystemResult<()> { let leaves = std::mem::take(&mut self.leaves); let mut update = ActiveLeavesUpdate::default(); @@ -1337,7 +1344,7 @@ where // Some subsystem exited? It's time to panic. if let Poll::Ready(Some(finished)) = poll!(self.running_subsystems.next()) { - log::error!(target: LOG_TARGET, "Subsystem finished unexpectedly {:?}", finished); + tracing::error!(target: LOG_TARGET, subsystem = ?finished, "subsystem finished unexpectedly"); self.stop().await; return finished; } @@ -1347,6 +1354,7 @@ where } } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn block_imported(&mut self, block: BlockInfo) -> SubsystemResult<()> { let mut update = ActiveLeavesUpdate::default(); @@ -1376,6 +1384,7 @@ where Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn block_finalized(&mut self, block: BlockInfo) -> SubsystemResult<()> { let mut update = ActiveLeavesUpdate::default(); @@ -1399,6 +1408,7 @@ where Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn broadcast_signal(&mut self, signal: OverseerSignal) -> SubsystemResult<()> { if let Some(ref mut s) = self.candidate_validation_subsystem.instance { s.tx.send(FromOverseer::Signal(signal.clone())).await?; @@ -1463,6 +1473,7 @@ where Ok(()) } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn route_message(&mut self, msg: AllMessages) { self.metrics.on_message_relayed(); match msg { @@ -1544,6 +1555,7 @@ where } } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn on_head_activated(&mut self, hash: &Hash) { self.metrics.on_head_activated(); if let Some(listeners) = self.activation_external_listeners.remove(hash) { @@ -1554,6 +1566,7 @@ where } } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn on_head_deactivated(&mut self, hash: &Hash) { self.metrics.on_head_deactivated(); if let Some(listeners) = self.activation_external_listeners.remove(hash) { @@ -1562,6 +1575,7 @@ where } } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn clean_up_external_listeners(&mut self) { self.activation_external_listeners.retain(|_, v| { // remove dead listeners @@ -1570,6 +1584,7 @@ where }) } + #[tracing::instrument(level = "trace", skip(self, request), fields(subsystem = LOG_TARGET))] fn handle_external_request(&mut self, request: ExternalRequest) { match request { ExternalRequest::WaitForActivation { hash, response_channel } => { @@ -1607,9 +1622,9 @@ fn spawn( let fut = Box::pin(async move { if let Err(e) = future.await { - log::error!("Subsystem {} exited with error {:?}", name, e); + tracing::error!(subsystem=name, err = ?e, "subsystem exited with error"); } else { - log::debug!("Subsystem {} exited without an error", name); + tracing::debug!(subsystem=name, "subsystem exited without an error"); } let _ = tx.send(()); }); @@ -1617,7 +1632,7 @@ fn spawn( spawner.spawn(name, fut); let _ = streams.push(from_rx); - futures.push(Box::pin(rx.map(|e| { log::warn!("Dropping error {:?}", e); Ok(()) }))); + futures.push(Box::pin(rx.map(|e| { tracing::warn!(err = ?e, "dropping error"); Ok(()) }))); let instance = Some(SubsystemInstance { tx: to_tx, diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index a3a5680474..397449c8b1 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -55,7 +55,8 @@ prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https: futures = "0.3.8" hex-literal = "0.3.1" lazy_static = "1.4.0" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" parking_lot = "0.11.1" serde = { version = "1.0.117", features = ["derive"] } slog = "2.5.2" diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 6cc1e61d20..cd382ff35a 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -28,7 +28,7 @@ use { std::convert::TryInto, std::time::Duration, - log::info, + tracing::info, polkadot_node_core_av_store::Config as AvailabilityConfig, polkadot_node_core_proposer::ProposerFactory, polkadot_overseer::{AllSubsystems, BlockInfo, Overseer, OverseerHandler}, @@ -704,7 +704,10 @@ pub fn new_full( // given delay. let voting_rule = match grandpa_pause { Some((block, delay)) => { - info!("GRANDPA scheduled voting pause set for block #{} with a duration of {} blocks.", + info!( + block_number = %block, + delay = %delay, + "GRANDPA scheduled voting pause set for block #{} with a duration of {} blocks.", block, delay, ); diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 21f7bb9675..8202287592 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -9,7 +9,8 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.41" futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" pin-project = "1.0.2" diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 3b18d3c481..0b9654f5c9 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -9,12 +9,13 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.41" futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.11" -thiserror = "1.0.22" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.2" streamunordered = "0.5.1" +thiserror = "1.0.22" +tracing = "0.1.21" +tracing-futures = "0.2.4" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } @@ -29,7 +30,8 @@ substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate [dev-dependencies] assert_matches = "1.4.0" async-trait = "0.1.41" +env_logger = "0.8.2" futures = { version = "0.3.8", features = ["thread-pool"] } +log = "0.4.11" parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } -env_logger = "0.8.2" diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index bb84ef1171..2c7129f35c 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -579,11 +579,11 @@ impl Jobs { let (future, abort_handle) = future::abortable(async move { if let Err(e) = Job::run(parent_hash, run_args, metrics, to_job_rx, from_job_tx).await { - log::error!( - "{}({}) finished with an error {:?}", - Job::NAME, - parent_hash, - e, + tracing::error!( + job = Job::NAME, + parent_hash = %parent_hash, + err = ?e, + "job finished with an error", ); if let Some(mut err_tx) = err_tx { @@ -591,7 +591,7 @@ impl Jobs { // there's no point trying to propagate this error onto the channel too // all we can do is warn that error propagation has failed if let Err(e) = err_tx.send((Some(parent_hash), JobsError::Job(e))).await { - log::warn!("failed to forward error: {:?}", e); + tracing::warn!(err = ?e, "failed to forward error"); } } } @@ -632,7 +632,7 @@ impl Jobs { async fn send_msg(&mut self, parent_hash: Hash, msg: Job::ToJob) { if let Entry::Occupied(mut job) = self.running.entry(parent_hash) { if job.get_mut().send_msg(msg).await.is_err() { - log::debug!("failed to send message to job ({}), will remove it", Job::NAME); + tracing::debug!(job = Job::NAME, "failed to send message to job, will remove it"); job.remove(); } } @@ -767,7 +767,7 @@ where // if we can't send on the error transmission channel, we can't do anything useful about it // still, we can at least log the failure if let Err(e) = err_tx.send((hash, err)).await { - log::warn!("failed to forward error: {:?}", e); + tracing::warn!(err = ?e, "failed to forward error"); } } } @@ -792,7 +792,11 @@ where for hash in activated { let metrics = metrics.clone(); if let Err(e) = jobs.spawn_job(hash, run_args.clone(), metrics) { - log::error!("Failed to spawn a job({}): {:?}", Job::NAME, e); + tracing::error!( + job = Job::NAME, + err = ?e, + "failed to spawn a job", + ); Self::fwd_err(Some(hash), JobsError::Utility(e), err_tx).await; return true; } @@ -821,7 +825,11 @@ where .forward(drain()) .await { - log::error!("failed to stop all jobs ({}) on conclude signal: {:?}", Job::NAME, e); + tracing::error!( + job = Job::NAME, + err = ?e, + "failed to stop a job on conclude signal", + ); let e = Error::from(e); Self::fwd_err(None, JobsError::Utility(e), err_tx).await; } @@ -832,16 +840,20 @@ where if let Ok(to_job) = ::try_from(msg) { match to_job.relay_parent() { Some(hash) => jobs.send_msg(hash, to_job).await, - None => log::debug!( - "Trying to send a message to a job ({}) without specifying a relay parent.", - Job::NAME, + None => tracing::debug!( + job = Job::NAME, + "trying to send a message to a job without specifying a relay parent", ), } } } Ok(Signal(BlockFinalized(_))) => {} Err(err) => { - log::error!("error receiving message from subsystem context for job ({}): {:?}", Job::NAME, err); + tracing::error!( + job = Job::NAME, + err = ?err, + "error receiving message from subsystem context for job", + ); Self::fwd_err(None, JobsError::Utility(Error::from(err)), err_tx).await; return true; } @@ -956,6 +968,7 @@ macro_rules! delegated_subsystem { } /// Run this subsystem + #[tracing::instrument(skip(ctx, run_args, metrics, spawner), fields(subsystem = $subsystem_name))] pub async fn run(ctx: Context, run_args: $run_args, metrics: $metrics, spawner: Spawner) { >::run(ctx, run_args, metrics, spawner, None).await } diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index fb0cf1539b..fe0df2b17e 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -218,7 +218,7 @@ impl ConnectionRequest { /// This can be done either by calling this function or dropping the request. pub fn revoke(self) { if let Err(_) = self.revoke.send(()) { - log::warn!( + tracing::warn!( "Failed to revoke a validator connection request", ); } diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index b826e79e5e..c181354b28 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -10,7 +10,8 @@ async-trait = "0.1.41" derive_more = "0.99.11" futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.2" diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index b348ac3f97..dfb4a925f1 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -239,7 +239,7 @@ where Err(_) => return Ok(()), Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => return Ok(()), Ok(overseer_msg) => { - log::debug!( + tracing::debug!( target: "dummy-subsystem", "Discarding a message sent from overseer {:?}", overseer_msg diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 54f5b70798..c8b7d6610c 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -8,7 +8,8 @@ edition = "2018" futures = "0.3.8" futures01 = { package = "futures", version = "0.1.29" } hex = "0.4.2" -log = "0.4.11" +tracing = "0.1.21" +tracing-futures = "0.2.4" rand = "0.7.3" tempfile = "3.1.0" diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 1314d140ae..492be95ba3 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -469,8 +469,8 @@ impl From for CoreIndex { } /// The unique (during session) index of a validator group. -#[derive(Encode, Decode, Default, Clone, Copy)] -#[cfg_attr(feature = "std", derive(Eq, Hash, PartialEq, Debug))] +#[derive(Encode, Decode, Default, Clone, Copy, Debug)] +#[cfg_attr(feature = "std", derive(Eq, Hash, PartialEq))] pub struct GroupIndex(pub u32); impl From for GroupIndex { @@ -571,8 +571,8 @@ impl GroupRotationInfo { } /// Information about a core which is currently occupied. -#[derive(Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(PartialEq, Debug))] +#[derive(Clone, Encode, Decode, Debug)] +#[cfg_attr(feature = "std", derive(PartialEq))] pub struct OccupiedCore { /// The ID of the para occupying the core. pub para_id: Id, @@ -596,8 +596,8 @@ pub struct OccupiedCore { } /// Information about a core which is currently occupied. -#[derive(Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(PartialEq, Debug, Default))] +#[derive(Clone, Encode, Decode, Debug)] +#[cfg_attr(feature = "std", derive(PartialEq, Default))] pub struct ScheduledCore { /// The ID of a para scheduled. pub para_id: Id, @@ -606,8 +606,8 @@ pub struct ScheduledCore { } /// The state of a particular availability core. -#[derive(Clone, Encode, Decode)] -#[cfg_attr(feature = "std", derive(PartialEq, Debug))] +#[derive(Clone, Encode, Decode, Debug)] +#[cfg_attr(feature = "std", derive(PartialEq))] pub enum CoreState { /// The core is currently occupied. #[codec(index = "0")] -- GitLab From e655654e695b079b9ad0fd05f058c85120f85997 Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Fri, 20 Nov 2020 15:04:51 +0100 Subject: [PATCH 029/203] Add Prometheus timers to the subsystems (#1923) * reexport prometheus-super for ease of use of other subsystems * add some prometheus timers for collation generation subsystem * add timing metrics to av-store * add metrics to candidate backing * add timing metric to bitfield signing * add timing metrics to candidate selection * add timing metrics to candidate-validation * add timing metrics to chain-api * add timing metrics to provisioner * add timing metrics to runtime-api * add timing metrics to availability-distribution * add timing metrics to bitfield-distribution * add timing metrics to collator protocol: collator side * add timing metrics to collator protocol: validator side * fix candidate validation test failures * add timing metrics to pov distribution * add timing metrics to statement-distribution * use substrate_prometheus_endpoint prometheus reexport instead of prometheus_super * don't include JOB_DELAY in bitfield-signing metrics * give adder-collator ability to easily export its genesis-state and validation code * wip: adder-collator pushbutton script * don't attempt to register the adder-collator automatically Instead, get these values with ```sh target/release/adder-collator export-genesis-state target/release/adder-collator export-genesis-wasm ``` And then register the parachain on https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer To collect prometheus data, after running the script, create `prometheus.yml` per the instructions at https://www.notion.so/paritytechnologies/Setting-up-Prometheus-locally-835cb3a9df7541a781c381006252b5ff and then run: ```sh docker run -v `pwd`/prometheus.yml:/etc/prometheus/prometheus.yml:z --network host prom/prometheus ``` Demonstrates that data makes it across to prometheus, though it is likely to be useful in the future to tweak the buckets. * Update parachain/test-parachains/adder/collator/src/cli.rs Co-authored-by: Andronik Ordian * use the grandpa-pause parameter * skip metrics in tracing instrumentation * remove unnecessary grandpa_pause cli param Co-authored-by: Andronik Ordian --- node/collation-generation/src/lib.rs | 51 +++++ node/core/av-store/src/lib.rs | 141 ++++++++++++- node/core/backing/src/lib.rs | 58 +++++- node/core/bitfield-signing/src/lib.rs | 20 ++ node/core/candidate-selection/src/lib.rs | 34 ++++ node/core/candidate-validation/src/lib.rs | 68 ++++++- node/core/chain-api/src/lib.rs | 81 ++++++++ node/core/provisioner/src/lib.rs | 34 ++++ node/core/runtime-api/src/lib.rs | 17 ++ .../availability-distribution/src/lib.rs | 34 ++++ node/network/bitfield-distribution/src/lib.rs | 51 +++++ .../collator-protocol/src/collator_side.rs | 34 ++++ .../collator-protocol/src/validator_side.rs | 36 +++- node/network/pov-distribution/src/lib.rs | 68 +++++++ .../network/statement-distribution/src/lib.rs | 56 ++++- node/subsystem-util/src/lib.rs | 3 +- .../test-parachains/adder/collator/Cargo.toml | 1 + .../test-parachains/adder/collator/README.md | 2 + .../test-parachains/adder/collator/src/cli.rs | 108 ++++++++++ .../test-parachains/adder/collator/src/lib.rs | 69 +++++-- .../adder/collator/src/main.rs | 127 +++++++----- scripts/adder-collator.sh | 191 ++++++++++++++++++ scripts/two-node-local-net.sh | 2 +- 23 files changed, 1199 insertions(+), 87 deletions(-) create mode 100644 parachain/test-parachains/adder/collator/src/cli.rs create mode 100755 scripts/adder-collator.sh diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index 6d37a157dd..ad28b66f07 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -189,7 +189,11 @@ async fn handle_new_activations( // follow the procedure from the guide: // https://w3f.github.io/parachain-implementers-guide/node/collators/collation-generation.html + let _overall_timer = metrics.time_new_activations(); + for relay_parent in activated.iter().copied() { + let _relay_parent_timer = metrics.time_new_activations_relay_parent(); + // double-future magic happens here: the first layer of requests takes a mutable borrow of the context, and // returns a receiver. The second layer of requests actually polls those receivers to completion. let (availability_cores, validators) = join!( @@ -201,6 +205,8 @@ async fn handle_new_activations( let n_validators = validators??.len(); for core in availability_cores { + let _availability_core_timer = metrics.time_new_activations_availability_core(); + let (scheduled_core, assumption) = match core { CoreState::Scheduled(scheduled_core) => { (scheduled_core, OccupiedCoreAssumption::Free) @@ -335,6 +341,9 @@ fn erasure_root( #[derive(Clone)] struct MetricsInner { collations_generated_total: prometheus::Counter, + new_activations_overall: prometheus::Histogram, + new_activations_per_relay_parent: prometheus::Histogram, + new_activations_per_availability_core: prometheus::Histogram, } /// CollationGenerationSubsystem metrics. @@ -347,6 +356,21 @@ impl Metrics { metrics.collations_generated_total.inc(); } } + + /// Provide a timer for new activations which updates on drop. + fn time_new_activations(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.new_activations_overall.start_timer()) + } + + /// Provide a timer per relay parents which updates on drop. + fn time_new_activations_relay_parent(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.new_activations_per_relay_parent.start_timer()) + } + + /// Provide a timer per availability core which updates on drop. + fn time_new_activations_availability_core(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.new_activations_per_availability_core.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -359,6 +383,33 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + new_activations_overall: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collation_generation_new_activations", + "Time spent within fn handle_new_activations", + ) + )?, + registry, + )?, + new_activations_per_relay_parent: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collation_generation_per_relay_parent", + "Time spent handling a particular relay parent within fn handle_new_activations" + ) + )?, + registry, + )?, + new_activations_per_availability_core: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collation_generation_per_availability_core", + "Time spent handling a particular availability core for a relay parent in fn handle_new_activations", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 8fe0e6c5e9..8c20e351f9 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -313,6 +313,8 @@ impl AvailabilityStoreSubsystem { // Perform pruning of PoVs #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn prune_povs(&self) -> Result<(), Error> { + let _timer = self.metrics.time_prune_povs(); + let mut tx = DBTransaction::new(); let mut pov_pruning = pov_pruning(&self.inner).unwrap_or_default(); let now = PruningDelay::now()?; @@ -338,6 +340,8 @@ impl AvailabilityStoreSubsystem { // Perform pruning of chunks. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn prune_chunks(&self) -> Result<(), Error> { + let _timer = self.metrics.time_prune_chunks(); + let mut tx = DBTransaction::new(); let mut chunk_pruning = chunk_pruning(&self.inner).unwrap_or_default(); let now = PruningDelay::now()?; @@ -522,7 +526,7 @@ where ActiveLeavesUpdate { activated, .. }) ) => { for activated in activated.into_iter() { - process_block_activated(ctx, &subsystem.inner, activated).await?; + process_block_activated(ctx, &subsystem.inner, activated, &subsystem.metrics).await?; } } FromOverseer::Signal(OverseerSignal::BlockFinalized(hash)) => { @@ -561,6 +565,8 @@ async fn process_block_finalized( where Context: SubsystemContext { + let _timer = subsystem.metrics.time_process_block_finalized(); + let block_number = get_block_number(ctx, hash).await?; if let Some(mut pov_pruning) = pov_pruning(db) { @@ -606,15 +612,18 @@ where Ok(()) } -#[tracing::instrument(level = "trace", skip(ctx, db), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, db, metrics), fields(subsystem = LOG_TARGET))] async fn process_block_activated( ctx: &mut Context, db: &Arc, hash: Hash, + metrics: &Metrics, ) -> Result<(), Error> where Context: SubsystemContext { + let _timer = metrics.time_block_activated(); + let events = match request_candidate_events(ctx, hash).await { Ok(events) => events, Err(err) => { @@ -697,6 +706,8 @@ where { use AvailabilityStoreMessage::*; + let _timer = subsystem.metrics.time_process_message(); + match msg { QueryAvailableData(hash, tx) => { tx.send(available_data(&subsystem.inner, &hash).map(|d| d.data)) @@ -860,6 +871,8 @@ fn store_available_data( n_validators: u32, available_data: AvailableData, ) -> Result<(), Error> { + let _timer = subsystem.metrics.time_store_available_data(); + let mut tx = DBTransaction::new(); let block_number = available_data.validation_data.block_number; @@ -927,6 +940,8 @@ fn store_chunk( chunk: ErasureChunk, block_number: BlockNumber, ) -> Result<(), Error> { + let _timer = subsystem.metrics.time_store_chunk(); + let mut tx = DBTransaction::new(); let dbkey = erasure_chunk_key(candidate_hash, chunk.index); @@ -977,6 +992,8 @@ fn get_chunk( candidate_hash: &CandidateHash, index: u32, ) -> Result, Error> { + let _timer = subsystem.metrics.time_get_chunk(); + if let Some(chunk) = query_inner( &subsystem.inner, columns::DATA, @@ -1059,6 +1076,14 @@ fn get_chunks(data: &AvailableData, n_validators: usize, metrics: &Metrics) -> R #[derive(Clone)] struct MetricsInner { received_availability_chunks_total: prometheus::Counter, + prune_povs: prometheus::Histogram, + prune_chunks: prometheus::Histogram, + process_block_finalized: prometheus::Histogram, + block_activated: prometheus::Histogram, + process_message: prometheus::Histogram, + store_available_data: prometheus::Histogram, + store_chunk: prometheus::Histogram, + get_chunk: prometheus::Histogram, } /// Availability metrics. @@ -1074,6 +1099,46 @@ impl Metrics { metrics.received_availability_chunks_total.inc_by(by); } } + + /// Provide a timer for `prune_povs` which observes on drop. + fn time_prune_povs(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.prune_povs.start_timer()) + } + + /// Provide a timer for `prune_chunks` which observes on drop. + fn time_prune_chunks(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.prune_chunks.start_timer()) + } + + /// Provide a timer for `process_block_finalized` which observes on drop. + fn time_process_block_finalized(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_block_finalized.start_timer()) + } + + /// Provide a timer for `block_activated` which observes on drop. + fn time_block_activated(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.block_activated.start_timer()) + } + + /// Provide a timer for `process_message` which observes on drop. + fn time_process_message(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_message.start_timer()) + } + + /// Provide a timer for `store_available_data` which observes on drop. + fn time_store_available_data(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.store_available_data.start_timer()) + } + + /// Provide a timer for `store_chunk` which observes on drop. + fn time_store_chunk(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.store_chunk.start_timer()) + } + + /// Provide a timer for `get_chunk` which observes on drop. + fn time_get_chunk(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.get_chunk.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -1086,6 +1151,78 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + prune_povs: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_prune_povs", + "Time spent within `av_store::prune_povs`", + ) + )?, + registry, + )?, + prune_chunks: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_prune_chunks", + "Time spent within `av_store::prune_chunks`", + ) + )?, + registry, + )?, + process_block_finalized: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_process_block_finalized", + "Time spent within `av_store::block_finalized`", + ) + )?, + registry, + )?, + block_activated: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_block_activated", + "Time spent within `av_store::block_activated`", + ) + )?, + registry, + )?, + process_message: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_process_message", + "Time spent within `av_store::process_message`", + ) + )?, + registry, + )?, + store_available_data: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_store_available_data", + "Time spent within `av_store::store_available_data`", + ) + )?, + registry, + )?, + store_chunk: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_store_chunk", + "Time spent within `av_store::store_chunk`", + ) + )?, + registry, + )?, + get_chunk: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_av_store_get_chunk", + "Time spent within `av_store::get_chunk`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 7c7b248a74..def1d0dd56 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -481,8 +481,11 @@ impl CandidateBackingJob { #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn process_msg(&mut self, msg: CandidateBackingMessage) -> Result<(), Error> { + match msg { CandidateBackingMessage::Second(_, candidate, pov) => { + let _timer = self.metrics.time_process_second(); + // Sanity check that candidate is from our assignment. if candidate.descriptor().para_id != self.assignment { return Ok(()); @@ -509,6 +512,8 @@ impl CandidateBackingJob { } } CandidateBackingMessage::Statement(_, statement) => { + let _timer = self.metrics.time_process_statement(); + self.check_statement_signature(&statement)?; match self.maybe_validate_and_import(statement).await { Err(Error::ValidationFailed(_)) => return Ok(()), @@ -517,6 +522,8 @@ impl CandidateBackingJob { } } CandidateBackingMessage::GetBackedCandidates(_, tx) => { + let _timer = self.metrics.time_get_backed_candidates(); + let backed = self.get_backed(); tx.send(backed).map_err(|data| Error::Send(data))?; @@ -898,7 +905,10 @@ impl util::JobTrait for CandidateBackingJob { #[derive(Clone)] struct MetricsInner { signed_statements_total: prometheus::Counter, - candidates_seconded_total: prometheus::Counter + candidates_seconded_total: prometheus::Counter, + process_second: prometheus::Histogram, + process_statement: prometheus::Histogram, + get_backed_candidates: prometheus::Histogram, } /// Candidate backing metrics. @@ -917,6 +927,21 @@ impl Metrics { metrics.candidates_seconded_total.inc(); } } + + /// Provide a timer for handling `CandidateBackingMessage:Second` which observes on drop. + fn time_process_second(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_second.start_timer()) + } + + /// Provide a timer for handling `CandidateBackingMessage::Statement` which observes on drop. + fn time_process_statement(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_statement.start_timer()) + } + + /// Provide a timer for handling `CandidateBackingMessage::GetBackedCandidates` which observes on drop. + fn time_get_backed_candidates(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.get_backed_candidates.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -924,18 +949,45 @@ impl metrics::Metrics for Metrics { let metrics = MetricsInner { signed_statements_total: prometheus::register( prometheus::Counter::new( - "parachain_signed_statements_total", + "parachain_candidate_backing_signed_statements_total", "Number of statements signed.", )?, registry, )?, candidates_seconded_total: prometheus::register( prometheus::Counter::new( - "parachain_candidates_seconded_total", + "parachain_candidate_backing_candidates_seconded_total", "Number of candidates seconded.", )?, registry, )?, + process_second: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_backing_process_second", + "Time spent within `candidate_backing::process_second`", + ) + )?, + registry, + )?, + process_statement: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_backing_process_statement", + "Time spent within `candidate_backing::process_statement`", + ) + )?, + registry, + )?, + get_backed_candidates: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_backing_get_backed_candidates", + "Time spent within `candidate_backing::get_backed_candidates`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index a0d3f938ae..6bbd4f48ea 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -230,6 +230,7 @@ async fn construct_availability_bitfield( #[derive(Clone)] struct MetricsInner { bitfields_signed_total: prometheus::Counter, + run: prometheus::Histogram, } /// Bitfield signing metrics. @@ -242,6 +243,11 @@ impl Metrics { metrics.bitfields_signed_total.inc(); } } + + /// Provide a timer for `prune_povs` which observes on drop. + fn time_run(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.run.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -254,6 +260,15 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + run: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_bitfield_signing_run", + "Time spent within `bitfield_signing::run`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } @@ -277,6 +292,7 @@ impl JobTrait for BitfieldSigningJob { _receiver: mpsc::Receiver, mut sender: mpsc::Sender, ) -> Pin> + Send>> { + let metrics = metrics.clone(); async move { let wait_until = Instant::now() + JOB_DELAY; @@ -291,6 +307,10 @@ impl JobTrait for BitfieldSigningJob { // wait a bit before doing anything else Delay::new_at(wait_until).await?; + // this timer does not appear at the head of the function because we don't want to include + // JOB_DELAY each time. + let _timer = metrics.time_run(); + let bitfield = match construct_availability_bitfield(relay_parent, validator.index(), &mut sender).await { diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index b4654d121b..64697a69a5 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -204,6 +204,8 @@ impl CandidateSelectionJob { para_id: ParaId, collator_id: CollatorId, ) { + let _timer = self.metrics.time_handle_collation(); + if self.seconded_candidate.is_none() { let (candidate_receipt, pov) = match get_collation( @@ -240,6 +242,8 @@ impl CandidateSelectionJob { #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn handle_invalid(&mut self, candidate_receipt: CandidateReceipt) { + let _timer = self.metrics.time_handle_invalid(); + let received_from = match &self.seconded_candidate { Some(peer) => peer, None => { @@ -336,6 +340,8 @@ async fn forward_invalidity_note( struct MetricsInner { seconds: prometheus::CounterVec, invalid_selections: prometheus::CounterVec, + handle_collation: prometheus::Histogram, + handle_invalid: prometheus::Histogram, } /// Candidate selection metrics. @@ -356,6 +362,16 @@ impl Metrics { metrics.invalid_selections.with_label_values(&[label]).inc(); } } + + /// Provide a timer for `handle_collation` which observes on drop. + fn time_handle_collation(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_collation.start_timer()) + } + + /// Provide a timer for `handle_invalid` which observes on drop. + fn time_handle_invalid(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_invalid.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -381,6 +397,24 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + handle_collation: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_selection_handle_collation", + "Time spent within `candidate_selection::handle_collation`", + ) + )?, + registry, + )?, + handle_invalid: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_selection:handle_invalid", + "Time spent within `candidate_selection::handle_invalid`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index b2382f59e3..011b156ffd 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -103,12 +103,15 @@ async fn run( pov, response_sender, ) => { + let _timer = metrics.time_validate_from_chain_state(); + let res = spawn_validate_from_chain_state( &mut ctx, isolation_strategy.clone(), descriptor, pov, spawn.clone(), + &metrics, ).await; match res { @@ -126,6 +129,8 @@ async fn run( pov, response_sender, ) => { + let _timer = metrics.time_validate_from_exhaustive(); + let res = spawn_validate_exhaustive( &mut ctx, isolation_strategy.clone(), @@ -134,6 +139,7 @@ async fn run( descriptor, pov, spawn.clone(), + &metrics, ).await; match res { @@ -260,13 +266,14 @@ async fn find_assumed_validation_data( Ok(AssumptionCheckOutcome::DoesNotMatch) } -#[tracing::instrument(level = "trace", skip(ctx, pov, spawn), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, pov, spawn, metrics), fields(subsystem = LOG_TARGET))] async fn spawn_validate_from_chain_state( ctx: &mut impl SubsystemContext, isolation_strategy: IsolationStrategy, descriptor: CandidateDescriptor, pov: Arc, spawn: impl SpawnNamed + 'static, + metrics: &Metrics, ) -> SubsystemResult> { let (validation_data, validation_code) = match find_assumed_validation_data(ctx, &descriptor).await? { @@ -292,6 +299,7 @@ async fn spawn_validate_from_chain_state( descriptor.clone(), pov, spawn, + metrics, ) .await; @@ -320,7 +328,7 @@ async fn spawn_validate_from_chain_state( validation_result } -#[tracing::instrument(level = "trace", skip(ctx, validation_code, pov, spawn), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, validation_code, pov, spawn, metrics), fields(subsystem = LOG_TARGET))] async fn spawn_validate_exhaustive( ctx: &mut impl SubsystemContext, isolation_strategy: IsolationStrategy, @@ -329,8 +337,10 @@ async fn spawn_validate_exhaustive( descriptor: CandidateDescriptor, pov: Arc, spawn: impl SpawnNamed + 'static, + metrics: &Metrics, ) -> SubsystemResult> { let (tx, rx) = oneshot::channel(); + let metrics = metrics.clone(); let fut = async move { let res = validate_candidate_exhaustive::( isolation_strategy, @@ -339,6 +349,7 @@ async fn spawn_validate_exhaustive( descriptor, pov, spawn, + &metrics, ); let _ = tx.send(res); @@ -408,7 +419,7 @@ impl ValidationBackend for RealValidationBackend { /// Validates the candidate from exhaustive parameters. /// /// Sends the result of validation on the channel once complete. -#[tracing::instrument(level = "trace", skip(backend_arg, validation_code, pov, spawn), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(backend_arg, validation_code, pov, spawn, metrics), fields(subsystem = LOG_TARGET))] fn validate_candidate_exhaustive( backend_arg: B::Arg, persisted_validation_data: PersistedValidationData, @@ -416,7 +427,10 @@ fn validate_candidate_exhaustive( descriptor: CandidateDescriptor, pov: Arc, spawn: S, + metrics: &Metrics, ) -> Result { + let _timer = metrics.time_validate_candidate_exhaustive(); + if let Err(e) = perform_basic_checks(&descriptor, persisted_validation_data.max_pov_size, &*pov) { return Ok(ValidationResult::Invalid(e)) } @@ -460,6 +474,9 @@ fn validate_candidate_exhaustive( #[derive(Clone)] struct MetricsInner { validation_requests: prometheus::CounterVec, + validate_from_chain_state: prometheus::Histogram, + validate_from_exhaustive: prometheus::Histogram, + validate_candidate_exhaustive: prometheus::Histogram, } /// Candidate validation metrics. @@ -482,6 +499,21 @@ impl Metrics { } } } + + /// Provide a timer for `validate_from_chain_state` which observes on drop. + fn time_validate_from_chain_state(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.validate_from_chain_state.start_timer()) + } + + /// Provide a timer for `validate_from_exhaustive` which observes on drop. + fn time_validate_from_exhaustive(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.validate_from_exhaustive.start_timer()) + } + + /// Provide a timer for `validate_candidate_exhaustive` which observes on drop. + fn time_validate_candidate_exhaustive(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.validate_candidate_exhaustive.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -497,6 +529,33 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + validate_from_chain_state: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_validation_validate_from_chain_state", + "Time spent within `candidate_validation::validate_from_chain_state`", + ) + )?, + registry, + )?, + validate_from_exhaustive: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_validation_validate_from_exhaustive", + "Time spent within `candidate_validation::validate_from_exhaustive`", + ) + )?, + registry, + )?, + validate_candidate_exhaustive: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_candidate_validation_validate_candidate_exhaustive", + "Time spent within `candidate_validation::validate_candidate_exhaustive`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } @@ -850,6 +909,7 @@ mod tests { descriptor, Arc::new(pov), TaskExecutor::new(), + &Default::default(), ).unwrap(); assert_matches!(v, ValidationResult::Valid(outputs, used_validation_data) => { @@ -885,6 +945,7 @@ mod tests { descriptor, Arc::new(pov), TaskExecutor::new(), + &Default::default(), ).unwrap(); assert_matches!(v, ValidationResult::Invalid(InvalidCandidate::BadReturn)); @@ -913,6 +974,7 @@ mod tests { descriptor, Arc::new(pov), TaskExecutor::new(), + &Default::default(), ); assert_matches!(v, Ok(ValidationResult::Invalid(InvalidCandidate::Timeout))); diff --git a/node/core/chain-api/src/lib.rs b/node/core/chain-api/src/lib.rs index 9868ead623..3c7a2a7241 100644 --- a/node/core/chain-api/src/lib.rs +++ b/node/core/chain-api/src/lib.rs @@ -92,11 +92,13 @@ where FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {}, FromOverseer::Communication { msg } => match msg { ChainApiMessage::BlockNumber(hash, response_channel) => { + let _timer = subsystem.metrics.time_block_number(); let result = subsystem.client.number(hash).map_err(|e| e.to_string().into()); subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, ChainApiMessage::BlockHeader(hash, response_channel) => { + let _timer = subsystem.metrics.time_block_header(); let result = subsystem.client .header(BlockId::Hash(hash)) .map_err(|e| e.to_string().into()); @@ -104,19 +106,23 @@ where let _ = response_channel.send(result); }, ChainApiMessage::FinalizedBlockHash(number, response_channel) => { + let _timer = subsystem.metrics.time_finalized_block_hash(); // Note: we don't verify it's finalized let result = subsystem.client.hash(number).map_err(|e| e.to_string().into()); subsystem.metrics.on_request(result.is_ok()); let _ = response_channel.send(result); }, ChainApiMessage::FinalizedBlockNumber(response_channel) => { + let _timer = subsystem.metrics.time_finalized_block_number(); let result = subsystem.client.info().finalized_number; // always succeeds subsystem.metrics.on_request(true); let _ = response_channel.send(Ok(result)); }, ChainApiMessage::Ancestors { hash, k, response_channel } => { + let _timer = subsystem.metrics.time_ancestors(); tracing::span!(tracing::Level::TRACE, "ChainApiMessage::Ancestors", subsystem=LOG_TARGET, hash=%hash, k=k); + let mut hash = hash; let next_parent = core::iter::from_fn(|| { @@ -153,6 +159,11 @@ where #[derive(Clone)] struct MetricsInner { chain_api_requests: prometheus::CounterVec, + block_number: prometheus::Histogram, + block_header: prometheus::Histogram, + finalized_block_hash: prometheus::Histogram, + finalized_block_number: prometheus::Histogram, + ancestors: prometheus::Histogram, } /// Chain API metrics. @@ -169,6 +180,31 @@ impl Metrics { } } } + + /// Provide a timer for `block_number` which observes on drop. + fn time_block_number(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.block_number.start_timer()) + } + + /// Provide a timer for `block_header` which observes on drop. + fn time_block_header(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.block_header.start_timer()) + } + + /// Provide a timer for `finalized_block_hash` which observes on drop. + fn time_finalized_block_hash(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.finalized_block_hash.start_timer()) + } + + /// Provide a timer for `finalized_block_number` which observes on drop. + fn time_finalized_block_number(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.finalized_block_number.start_timer()) + } + + /// Provide a timer for `ancestors` which observes on drop. + fn time_ancestors(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.ancestors.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -184,6 +220,51 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + block_number: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_chain_api_block_number", + "Time spent within `chain_api::block_number`", + ) + )?, + registry, + )?, + block_header: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_chain_api_block_headers", + "Time spent within `chain_api::block_headers`", + ) + )?, + registry, + )?, + finalized_block_hash: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_chain_api_finalized_block_hash", + "Time spent within `chain_api::finalized_block_hash`", + ) + )?, + registry, + )?, + finalized_block_number: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_chain_api_finalized_block_number", + "Time spent within `chain_api::finalized_block_number`", + ) + )?, + registry, + )?, + ancestors: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_chain_api_ancestors", + "Time spent within `chain_api::ancestors`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 18913613c6..1a33c3fdb0 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -197,6 +197,8 @@ impl ProvisioningJob { match msg { ToJob::Provisioner(RequestInherentData(_, return_sender)) => { + let _timer = self.metrics.time_request_inherent_data(); + if let Err(err) = send_inherent_data( self.relay_parent, &self.signed_bitfields, @@ -216,6 +218,8 @@ impl ProvisioningJob { self.provisionable_data_channels.push(sender) } ToJob::Provisioner(ProvisionableData(_, data)) => { + let _timer = self.metrics.time_provisionable_data(); + let mut bad_indices = Vec::new(); for (idx, channel) in self.provisionable_data_channels.iter_mut().enumerate() { match channel.send(data.clone()).await { @@ -488,6 +492,8 @@ fn bitfields_indicate_availability( #[derive(Clone)] struct MetricsInner { inherent_data_requests: prometheus::CounterVec, + request_inherent_data: prometheus::Histogram, + provisionable_data: prometheus::Histogram, } /// Provisioner metrics. @@ -503,6 +509,16 @@ impl Metrics { } } } + + /// Provide a timer for `request_inherent_data` which observes on drop. + fn time_request_inherent_data(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.request_inherent_data.start_timer()) + } + + /// Provide a timer for `provisionable_data` which observes on drop. + fn time_provisionable_data(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.provisionable_data.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -518,6 +534,24 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + request_inherent_data: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_provisioner_request_inherent_data", + "Time spent within `provisioner::request_inherent_data`", + ) + )?, + registry, + )?, + provisionable_data: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_provisioner_provisionable_data", + "Time spent within `provisioner::provisionable_data`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index 255965815a..c957302737 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -103,6 +103,8 @@ fn make_runtime_api_request( Client: ProvideRuntimeApi, Client::Api: ParachainHost, { + let _timer = metrics.time_make_runtime_api_request(); + macro_rules! query { ($api_name:ident ($($param:expr),*), $sender:expr) => {{ let sender = $sender; @@ -141,6 +143,7 @@ fn make_runtime_api_request( #[derive(Clone)] struct MetricsInner { chain_api_requests: prometheus::CounterVec, + make_runtime_api_request: prometheus::Histogram, } /// Runtime API metrics. @@ -157,6 +160,11 @@ impl Metrics { } } } + + /// Provide a timer for `make_runtime_api_request` which observes on drop. + fn time_make_runtime_api_request(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.make_runtime_api_request.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -172,6 +180,15 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + make_runtime_api_request: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_runtime_api_make_runtime_api_request", + "Time spent within `runtime_api::make_runtime_api_request`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 9f390e4cab..24d48acc9e 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -385,6 +385,8 @@ async fn handle_our_view_change( where Context: SubsystemContext, { + let _timer = metrics.time_handle_our_view_change(); + let old_view = std::mem::replace(&mut (state.view), view); // needed due to borrow rules @@ -651,6 +653,8 @@ async fn process_incoming_peer_message( where Context: SubsystemContext, { + let _timer = metrics.time_process_incoming_peer_message(); + // obtain the set of candidates we are interested in based on our current view let live_candidates = state.cached_live_candidates_unioned(state.view.0.iter()); @@ -1180,6 +1184,8 @@ where #[derive(Clone)] struct MetricsInner { gossipped_availability_chunks: prometheus::Counter, + handle_our_view_change: prometheus::Histogram, + process_incoming_peer_message: prometheus::Histogram, } /// Availability Distribution metrics. @@ -1192,6 +1198,16 @@ impl Metrics { metrics.gossipped_availability_chunks.inc(); } } + + /// Provide a timer for `handle_our_view_change` which observes on drop. + fn time_handle_our_view_change(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_our_view_change.start_timer()) + } + + /// Provide a timer for `process_incoming_peer_message` which observes on drop. + fn time_process_incoming_peer_message(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_incoming_peer_message.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -1206,6 +1222,24 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + handle_our_view_change: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_availability_distribution_handle_our_view_change", + "Time spent within `availability_distribution::handle_our_view_change`", + ) + )?, + registry, + )?, + process_incoming_peer_message: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_availability_distribution_process_incoming_peer_message", + "Time spent within `availability_distribution::process_incoming_peer_message`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 7b2348eee6..680c450bd5 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -183,6 +183,8 @@ impl BitfieldDistribution { } } FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated })) => { + let _timer = self.metrics.time_active_leaves_update(); + for relay_parent in activated { tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "activated"); // query basic system parameters once @@ -257,6 +259,8 @@ async fn handle_bitfield_distribution( where Context: SubsystemContext, { + let _timer = metrics.time_handle_bitfield_distribution(); + // Ignore anything the overseer did not tell this subsystem to work on let mut job_data = state.per_relay_parent.get_mut(&relay_parent); let job_data: &mut _ = if let Some(ref mut job_data) = job_data { @@ -461,6 +465,8 @@ async fn handle_network_msg( where Context: SubsystemContext, { + let _timer = metrics.time_handle_network_msg(); + match bridge_message { NetworkBridgeEvent::PeerConnected(peerid, _role) => { // insert if none already present @@ -659,6 +665,9 @@ where struct MetricsInner { gossipped_own_availability_bitfields: prometheus::Counter, received_availability_bitfields: prometheus::Counter, + active_leaves_update: prometheus::Histogram, + handle_bitfield_distribution: prometheus::Histogram, + handle_network_msg: prometheus::Histogram, } /// Bitfield Distribution metrics. @@ -677,6 +686,21 @@ impl Metrics { metrics.received_availability_bitfields.inc(); } } + + /// Provide a timer for `active_leaves_update` which observes on drop. + fn time_active_leaves_update(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.active_leaves_update.start_timer()) + } + + /// Provide a timer for `handle_bitfield_distribution` which observes on drop. + fn time_handle_bitfield_distribution(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_bitfield_distribution.start_timer()) + } + + /// Provide a timer for `handle_network_msg` which observes on drop. + fn time_handle_network_msg(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_network_msg.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -696,6 +720,33 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + active_leaves_update: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_bitfield_distribution_active_leaves_update", + "Time spent within `bitfield_distribution::active_leaves_update`", + ) + )?, + registry, + )?, + handle_bitfield_distribution: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_bitfield_distribution_handle_bitfield_distribution", + "Time spent within `bitfield_distribution::handle_bitfield_distribution`", + ) + )?, + registry, + )?, + handle_network_msg: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_bitfield_distribution_handle_network_msg", + "Time spent within `bitfield_distribution::handle_network_msg`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 9267ab0916..853221e0d7 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -57,12 +57,24 @@ impl Metrics { metrics.collations_sent.inc(); } } + + /// Provide a timer for handling `ConnectionRequest` which observes on drop. + fn time_handle_connection_request(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_connection_request.start_timer()) + } + + /// Provide a timer for `process_msg` which observes on drop. + fn time_process_msg(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_msg.start_timer()) + } } #[derive(Clone)] struct MetricsInner { advertisements_made: prometheus::Counter, collations_sent: prometheus::Counter, + handle_connection_request: prometheus::Histogram, + process_msg: prometheus::Histogram, } impl metrics::Metrics for Metrics { @@ -84,6 +96,24 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + handle_connection_request: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collator_protocol_collator_handle_connection_request", + "Time spent within `collator_protocol_collator::handle_connection_request`", + ) + )?, + registry, + )?, + process_msg: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collator_protocol_collator_process_msg", + "Time spent within `collator_protocol_collator::process_msg`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) @@ -377,6 +407,8 @@ where { use CollatorProtocolMessage::*; + let _timer = state.metrics.time_process_msg(); + match msg { CollateOn(id) => { state.collating_on = Some(id); @@ -662,6 +694,8 @@ where loop { if let Some(mut request) = state.last_connection_request.take() { + let _timer = state.metrics.time_handle_connection_request(); + while let Poll::Ready(Some((validator_id, peer_id))) = futures::poll!(request.next()) { if let Err(err) = handle_validator_connected(&mut ctx, &mut state, peer_id, validator_id).await { tracing::warn!( diff --git a/node/network/collator-protocol/src/validator_side.rs b/node/network/collator-protocol/src/validator_side.rs index f3a5958a67..faeda6d307 100644 --- a/node/network/collator-protocol/src/validator_side.rs +++ b/node/network/collator-protocol/src/validator_side.rs @@ -63,11 +63,23 @@ impl Metrics { } } } + + /// Provide a timer for `process_msg` which observes on drop. + fn time_process_msg(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.process_msg.start_timer()) + } + + /// Provide a timer for `handle_collation_request_result` which observes on drop. + fn time_handle_collation_request_result(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_collation_request_result.start_timer()) + } } #[derive(Clone)] struct MetricsInner { collation_requests: prometheus::CounterVec, + process_msg: prometheus::Histogram, + handle_collation_request_result: prometheus::Histogram, } impl metrics::Metrics for Metrics { @@ -84,7 +96,25 @@ impl metrics::Metrics for Metrics { &["success"], )?, registry, - )? + )?, + process_msg: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collator_protocol_validator_process_msg", + "Time spent within `collator_protocol_validator::process_msg`", + ) + )?, + registry, + )?, + handle_collation_request_result: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_collator_protocol_validator_handle_collation_request_result", + "Time spent within `collator_protocol_validator::handle_collation_request_result`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) @@ -628,6 +658,8 @@ where { use CollatorProtocolMessage::*; + let _timer = state.metrics.time_process_msg(); + match msg { CollateOn(id) => { tracing::warn!( @@ -703,6 +735,8 @@ where } while let Poll::Ready(Some(request)) = futures::poll!(state.requests_in_progress.next()) { + let _timer = state.metrics.time_handle_collation_request_result(); + // Request has timed out, we need to penalize the collator and re-send the request // if the chain has not moved on yet. match request { diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index b1d7a8367c..e0050aeb27 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -125,6 +125,8 @@ async fn handle_signal( match signal { OverseerSignal::Conclude => Ok(true), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated }) => { + let _timer = state.metrics.time_handle_signal(); + for relay_parent in activated { let (vals_tx, vals_rx) = oneshot::channel(); ctx.send_message(AllMessages::RuntimeApi(RuntimeApiMessage::Request( @@ -267,6 +269,8 @@ async fn handle_fetch( descriptor: CandidateDescriptor, response_sender: oneshot::Sender>, ) -> SubsystemResult<()> { + let _timer = state.metrics.time_handle_fetch(); + let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { Some(s) => s, None => return Ok(()), @@ -316,6 +320,8 @@ async fn handle_distribute( descriptor: CandidateDescriptor, pov: Arc, ) -> SubsystemResult<()> { + let _timer = state.metrics.time_handle_distribute(); + let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { None => return Ok(()), Some(s) => s, @@ -483,6 +489,8 @@ async fn handle_network_update( ctx: &mut impl SubsystemContext, update: NetworkBridgeEvent, ) -> SubsystemResult<()> { + let _timer = state.metrics.time_handle_network_update(); + match update { NetworkBridgeEvent::PeerConnected(peer, _observed_role) => { state.peer_state.insert(peer, PeerState { awaited: HashMap::new() }); @@ -600,6 +608,10 @@ impl PoVDistribution { #[derive(Clone)] struct MetricsInner { povs_distributed: prometheus::Counter, + handle_signal: prometheus::Histogram, + handle_fetch: prometheus::Histogram, + handle_distribute: prometheus::Histogram, + handle_network_update: prometheus::Histogram, } /// Availability Distribution metrics. @@ -612,6 +624,26 @@ impl Metrics { metrics.povs_distributed.inc(); } } + + /// Provide a timer for `handle_signal` which observes on drop. + fn time_handle_signal(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_signal.start_timer()) + } + + /// Provide a timer for `handle_fetch` which observes on drop. + fn time_handle_fetch(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_fetch.start_timer()) + } + + /// Provide a timer for `handle_distribute` which observes on drop. + fn time_handle_distribute(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_distribute.start_timer()) + } + + /// Provide a timer for `handle_network_update` which observes on drop. + fn time_handle_network_update(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.handle_network_update.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -624,6 +656,42 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + handle_signal: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_pov_distribution_handle_signal", + "Time spent within `pov_distribution::handle_signal`", + ) + )?, + registry, + )?, + handle_fetch: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_pov_distribution_handle_fetch", + "Time spent within `pov_distribution::handle_fetch`", + ) + )?, + registry, + )?, + handle_distribute: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_pov_distribution_handle_distribute", + "Time spent within `pov_distribution::handle_distribute`", + ) + )?, + registry, + )?, + handle_network_update: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_pov_distribution_handle_network_update", + "Time spent within `pov_distribution::handle_network_update`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 383f34a6fc..b01b60014e 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -895,6 +895,8 @@ impl StatementDistribution { let message = ctx.recv().await?; match message { FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, .. })) => { + let _timer = metrics.time_active_leaves_update(); + for relay_parent in activated { let (validators, session_index) = { let (val_tx, val_rx) = oneshot::channel(); @@ -944,6 +946,8 @@ impl StatementDistribution { FromOverseer::Signal(OverseerSignal::Conclude) => break, FromOverseer::Communication { msg } => match msg { StatementDistributionMessage::Share(relay_parent, statement) => { + let _timer = metrics.time_share(); + inform_statement_listeners( &statement, &mut statement_listeners, @@ -957,7 +961,9 @@ impl StatementDistribution { &metrics, ).await?; } - StatementDistributionMessage::NetworkBridgeUpdateV1(event) => + StatementDistributionMessage::NetworkBridgeUpdateV1(event) => { + let _timer = metrics.time_network_bridge_update_v1(); + handle_network_update( &mut peers, &mut active_heads, @@ -965,7 +971,8 @@ impl StatementDistribution { &mut our_view, event, &metrics, - ).await?, + ).await? + } StatementDistributionMessage::RegisterStatementListener(tx) => { statement_listeners.push(tx); } @@ -979,6 +986,9 @@ impl StatementDistribution { #[derive(Clone)] struct MetricsInner { statements_distributed: prometheus::Counter, + active_leaves_update: prometheus::Histogram, + share: prometheus::Histogram, + network_bridge_update_v1: prometheus::Histogram, } /// Statement Distribution metrics. @@ -991,6 +1001,21 @@ impl Metrics { metrics.statements_distributed.inc(); } } + + /// Provide a timer for `active_leaves_update` which observes on drop. + fn time_active_leaves_update(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.active_leaves_update.start_timer()) + } + + /// Provide a timer for `share` which observes on drop. + fn time_share(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.share.start_timer()) + } + + /// Provide a timer for `network_bridge_update_v1` which observes on drop. + fn time_network_bridge_update_v1(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.network_bridge_update_v1.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -1003,6 +1028,33 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + active_leaves_update: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_statement_distribution_active_leaves_update", + "Time spent within `statement_distribution::active_leaves_update`", + ) + )?, + registry, + )?, + share: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_statement_distribution_share", + "Time spent within `statement_distribution::share`", + ) + )?, + registry, + )?, + network_bridge_update_v1: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts::new( + "parachain_statement_distribution_network_bridge_update_v1", + "Time spent within `statement_distribution::network_bridge_update_v1`", + ) + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 2c7129f35c..5766f25f16 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -442,9 +442,10 @@ impl JobHandle { /// This module reexports Prometheus types and defines the [`Metrics`] trait. pub mod metrics { - /// Reexport Prometheus types. + /// Reexport Substrate Prometheus types. pub use substrate_prometheus_endpoint as prometheus; + /// Subsystem- or job-specific Prometheus metrics. /// /// Usually implemented as a wrapper for `Option` diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 864149f707..0a2fefa5a8 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -26,6 +26,7 @@ polkadot-node-subsystem = { path = "../../../../node/subsystem" } sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] polkadot-parachain = { path = "../../.." } diff --git a/parachain/test-parachains/adder/collator/README.md b/parachain/test-parachains/adder/collator/README.md index 543da44633..e3181a84dd 100644 --- a/parachain/test-parachains/adder/collator/README.md +++ b/parachain/test-parachains/adder/collator/README.md @@ -13,3 +13,5 @@ cargo run --features=real-overseer --release -p test-parachain-adder-collator -- The last step is to register the parachain using polkadot-js. The parachain id is 100. The genesis state and the validation code are printed at startup by the collator. + +To do this automatically, run `scripts/adder-collator.sh`. diff --git a/parachain/test-parachains/adder/collator/src/cli.rs b/parachain/test-parachains/adder/collator/src/cli.rs new file mode 100644 index 0000000000..7b59d2acf7 --- /dev/null +++ b/parachain/test-parachains/adder/collator/src/cli.rs @@ -0,0 +1,108 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Polkadot CLI library. + +use sc_cli::{RuntimeVersion, SubstrateCli}; +use structopt::StructOpt; + +/// Sub-commands supported by the collator. +#[derive(Debug, StructOpt)] +pub enum Subcommand { + /// Export the genesis state of the parachain. + #[structopt(name = "export-genesis-state")] + ExportGenesisState(ExportGenesisStateCommand), + + /// Export the genesis wasm of the parachain. + #[structopt(name = "export-genesis-wasm")] + ExportGenesisWasm(ExportGenesisWasmCommand), +} + +/// Command for exporting the genesis state of the parachain +#[derive(Debug, StructOpt)] +pub struct ExportGenesisStateCommand {} + +/// Command for exporting the genesis wasm file. +#[derive(Debug, StructOpt)] +pub struct ExportGenesisWasmCommand {} + +#[allow(missing_docs)] +#[derive(Debug, StructOpt)] +pub struct RunCmd { + #[allow(missing_docs)] + #[structopt(flatten)] + pub base: sc_cli::RunCmd, +} + +#[allow(missing_docs)] +#[derive(Debug, StructOpt)] +pub struct Cli { + #[structopt(subcommand)] + pub subcommand: Option, + + #[structopt(flatten)] + pub run: RunCmd, +} + +impl SubstrateCli for Cli { + fn impl_name() -> String { + "Parity Polkadot".into() + } + + fn impl_version() -> String { + "0.0.0".into() + } + + fn description() -> String { + env!("CARGO_PKG_DESCRIPTION").into() + } + + fn author() -> String { + env!("CARGO_PKG_AUTHORS").into() + } + + fn support_url() -> String { + "https://github.com/paritytech/polkadot/issues/new".into() + } + + fn copyright_start_year() -> i32 { + 2017 + } + + fn executable_name() -> String { + "polkadot".into() + } + + fn load_spec(&self, id: &str) -> std::result::Result, String> { + let id = if id.is_empty() { "rococo" } else { id }; + Ok(match id { + "rococo-staging" => { + Box::new(polkadot_service::chain_spec::rococo_staging_testnet_config()?) + } + "rococo-local" => { + Box::new(polkadot_service::chain_spec::rococo_local_testnet_config()?) + } + "rococo" => Box::new(polkadot_service::chain_spec::rococo_config()?), + _ => Err("adder collator only supports rococo")?, + }) + } + + fn native_runtime_version( + _spec: &Box, + ) -> &'static RuntimeVersion { + &polkadot_service::rococo_runtime::VERSION + } +} diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index d3afbc1483..b31f15e303 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -16,13 +16,17 @@ //! Collator for the adder test parachain. -use std::{sync::{Arc, Mutex}, collections::HashMap, time::Duration}; -use test_parachain_adder::{hash_state, BlockData, HeadData, execute}; use futures_timer::Delay; -use polkadot_primitives::v1::{PoV, CollatorId, CollatorPair}; use polkadot_node_primitives::{Collation, CollatorFn}; +use polkadot_primitives::v1::{CollatorId, CollatorPair, PoV}; use parity_scale_codec::{Encode, Decode}; use sp_core::Pair; +use std::{ + collections::HashMap, + sync::{Arc, Mutex}, + time::Duration, +}; +use test_parachain_adder::{execute, hash_state, BlockData, HeadData}; /// The amount we add when producing a new block. /// @@ -60,15 +64,19 @@ impl State { self.best_block = parent_head.number; let block = BlockData { - state: *self.head_to_state.get(&parent_head).expect("Getting state using parent head"), + state: *self + .head_to_state + .get(&parent_head) + .expect("Getting state using parent head"), add: ADD, }; - let new_head = execute(parent_head.hash(), parent_head, &block) - .expect("Produces valid block"); + let new_head = + execute(parent_head.hash(), parent_head, &block).expect("Produces valid block"); let new_head_arc = Arc::new(new_head.clone()); - self.head_to_state.insert(new_head_arc.clone(), block.state.wrapping_add(ADD)); + self.head_to_state + .insert(new_head_arc.clone(), block.state.wrapping_add(ADD)); self.number_to_head.insert(new_head.number, new_head_arc); (block, new_head) @@ -92,7 +100,13 @@ impl Collator { /// Get the SCALE encoded genesis head of the adder parachain. pub fn genesis_head(&self) -> Vec { - self.state.lock().unwrap().number_to_head.get(&0).expect("Genesis header exists").encode() + self.state + .lock() + .unwrap() + .number_to_head + .get(&0) + .expect("Genesis header exists") + .encode() } /// Get the validation code of the adder parachain. @@ -113,9 +127,7 @@ impl Collator { /// Create the collation function. /// /// This collation function can be plugged into the overseer to generate collations for the adder parachain. - pub fn create_collation_function( - &self, - ) -> CollatorFn { + pub fn create_collation_function(&self) -> CollatorFn { use futures::FutureExt as _; let state = self.state.clone(); @@ -137,7 +149,9 @@ impl Collator { horizontal_messages: Vec::new(), new_validation_code: None, head_data: head_data.encode().into(), - proof_of_validity: PoV { block_data: block_data.encode().into() }, + proof_of_validity: PoV { + block_data: block_data.encode().into(), + }, processed_downward_messages: 0, hrmp_watermark: validation_data.persisted.block_number, }; @@ -155,7 +169,7 @@ impl Collator { let current_block = self.state.lock().unwrap().best_block; if start_block + blocks <= current_block { - return + return; } } } @@ -167,8 +181,7 @@ mod tests { use futures::executor::block_on; use polkadot_parachain::{primitives::ValidationParams, wasm_executor::IsolationStrategy}; - use polkadot_primitives::v1::{ValidationData, PersistedValidationData}; - use parity_scale_codec::Decode; + use polkadot_primitives::v1::{PersistedValidationData, ValidationData}; #[test] fn collator_works() { @@ -176,7 +189,14 @@ mod tests { let collation_function = collator.create_collation_function(); for i in 0..5 { - let parent_head = collator.state.lock().unwrap().number_to_head.get(&i).unwrap().clone(); + let parent_head = collator + .state + .lock() + .unwrap() + .number_to_head + .get(&i) + .unwrap() + .clone(); let validation_data = ValidationData { persisted: PersistedValidationData { @@ -186,7 +206,8 @@ mod tests { ..Default::default() }; - let collation = block_on(collation_function(Default::default(), &validation_data)).unwrap(); + let collation = + block_on(collation_function(Default::default(), &validation_data)).unwrap(); validate_collation(&collator, (*parent_head).clone(), collation); } } @@ -203,9 +224,19 @@ mod tests { }, &IsolationStrategy::InProcess, sp_core::testing::TaskExecutor::new(), - ).unwrap(); + ) + .unwrap(); let new_head = HeadData::decode(&mut &ret.head_data.0[..]).unwrap(); - assert_eq!(**collator.state.lock().unwrap().number_to_head.get(&(parent_head.number + 1)).unwrap(), new_head); + assert_eq!( + **collator + .state + .lock() + .unwrap() + .number_to_head + .get(&(parent_head.number + 1)) + .unwrap(), + new_head + ); } } diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 0bc93821a2..6b7029be07 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -16,71 +16,88 @@ //! Collator for the adder test parachain. -use sc_cli::{Result, Role, SubstrateCli}; -use polkadot_cli::Cli; -use polkadot_node_subsystem::messages::{CollatorProtocolMessage, CollationGenerationMessage}; use polkadot_node_primitives::CollationGenerationConfig; +use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; use polkadot_primitives::v1::Id as ParaId; -use test_parachain_adder_collator::Collator; +use sc_cli::{Result, Role, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; use std::time::Duration; +use test_parachain_adder_collator::Collator; const PARA_ID: ParaId = ParaId::new(100); +mod cli; +use cli::Cli; + fn main() -> Result<()> { let cli = Cli::from_args(); - if cli.subcommand.is_some() { - return Err("Subcommands are not supported".into()) - } + match cli.subcommand { + Some(cli::Subcommand::ExportGenesisState(_params)) => { + let collator = Collator::new(); + println!("0x{:?}", HexDisplay::from(&collator.genesis_head())); + + Ok(()) + } + Some(cli::Subcommand::ExportGenesisWasm(_params)) => { + let collator = Collator::new(); + println!("0x{:?}", HexDisplay::from(&collator.validation_code())); - let runner = cli.create_runner(&cli.run.base)?; - - runner.run_node_until_exit(|config| async move { - let role = config.role.clone(); - - match role { - Role::Light => Err("Light client not supported".into()), - _ => { - let collator = Collator::new(); - - let full_node = polkadot_service::build_full( - config, - polkadot_service::IsCollator::Yes(collator.collator_id()), - None, - Some(sc_authority_discovery::WorkerConfig { - query_interval: Duration::from_secs(1), - query_start_delay: Duration::from_secs(0), - ..Default::default() - }), - )?; - let mut overseer_handler = full_node.overseer_handler - .expect("Overseer handler should be initialized for collators"); - - let genesis_head_hex = format!("0x{:?}", HexDisplay::from(&collator.genesis_head())); - let validation_code_hex = format!("0x{:?}", HexDisplay::from(&collator.validation_code())); - - log::info!("Running adder collator for parachain id: {}", PARA_ID); - log::info!("Genesis state: {}", genesis_head_hex); - log::info!("Validation code: {}", validation_code_hex); - - let config = CollationGenerationConfig { - key: collator.collator_key(), - collator: collator.create_collation_function(), - para_id: PARA_ID, - }; - overseer_handler - .send_msg(CollationGenerationMessage::Initialize(config)) - .await - .expect("Registers collator"); - - overseer_handler - .send_msg(CollatorProtocolMessage::CollateOn(PARA_ID)) - .await - .expect("Collates on"); - - Ok(full_node.task_manager) - }, + Ok(()) } - }) + None => { + let runner = cli.create_runner(&cli.run.base)?; + + runner.run_node_until_exit(|config| async move { + let role = config.role.clone(); + + match role { + Role::Light => Err("Light client not supported".into()), + _ => { + let collator = Collator::new(); + + let full_node = polkadot_service::build_full( + config, + polkadot_service::IsCollator::Yes(collator.collator_id()), + None, + Some(sc_authority_discovery::WorkerConfig { + query_interval: Duration::from_secs(1), + query_start_delay: Duration::from_secs(0), + ..Default::default() + }), + )?; + let mut overseer_handler = full_node + .overseer_handler + .expect("Overseer handler should be initialized for collators"); + + let genesis_head_hex = + format!("0x{:?}", HexDisplay::from(&collator.genesis_head())); + let validation_code_hex = + format!("0x{:?}", HexDisplay::from(&collator.validation_code())); + + log::info!("Running adder collator for parachain id: {}", PARA_ID); + log::info!("Genesis state: {}", genesis_head_hex); + log::info!("Validation code: {}", validation_code_hex); + + let config = CollationGenerationConfig { + key: collator.collator_key(), + collator: collator.create_collation_function(), + para_id: PARA_ID, + }; + overseer_handler + .send_msg(CollationGenerationMessage::Initialize(config)) + .await + .expect("Registers collator"); + + overseer_handler + .send_msg(CollatorProtocolMessage::CollateOn(PARA_ID)) + .await + .expect("Collates on"); + + Ok(full_node.task_manager) + } + } + }) + } + } } diff --git a/scripts/adder-collator.sh b/scripts/adder-collator.sh new file mode 100755 index 0000000000..ca493eb0a4 --- /dev/null +++ b/scripts/adder-collator.sh @@ -0,0 +1,191 @@ +#!/usr/bin/env bash + +# Run a two node local net with adder-collator. + +set -e + +chainspec="rococo-local" + +# disabled until we can actually successfully register the chain with polkadot-js-api +# if ! command -v polkadot-js-api > /dev/null; then +# echo "polkadot-js-api required; try" +# echo " sudo yarn global add @polkadot/api-cli" +# exit 1 +# fi + +PROJECT_ROOT=$(git rev-parse --show-toplevel) +# shellcheck disable=SC1090 +source "$(dirname "$0")"/common.sh + +cd "$PROJECT_ROOT" + +last_modified_rust_file=$( + find . -path ./target -prune -o -type f -name '*.rs' -printf '%T@ %p\n' | + sort -nr | + head -1 | + cut -d' ' -f2- +) + +polkadot="target/release/polkadot" +adder_collator="target/release/adder-collator" + +# ensure the polkadot binary exists and is up to date +if [ ! -x "$polkadot" ] || [ "$polkadot" -ot "$last_modified_rust_file" ]; then + cargo build --release --features real-overseer +fi +# likewise for the adder collator +if [ ! -x "$adder_collator" ] || [ "$adder_collator" -ot "$last_modified_rust_file" ]; then + cargo build --release --features real-overseer -p test-parachain-adder-collator +fi + +genesis="$(mktemp --directory)" +genesis_state="$genesis/state" +validation_code="$genesis/validation_code" + +"$adder_collator" export-genesis-state > "$genesis_state" +"$adder_collator" export-genesis-wasm > "$validation_code" + + +# setup variables +node_offset=0 +declare -a node_pids +declare -a node_pipes + +# create a sed expression which injects the node name and stream type into each line +function make_sed_expr() { + name="$1" + type="$2" + + printf "s/^/%16s %s: /" "$name" "$type" +} + +# turn a string into a flag +function flagify() { + printf -- '--%s' "$(tr '[:upper:]' '[:lower:]' <<< "$1")" +} + +# start a node and label its output +# +# This function takes a single argument, the node name. +# The name must be one of those which can be passed to the polkadot binary, in un-flagged form, +# one of: +# alice, bob, charlie, dave, eve, ferdie, one, two +function run_node() { + name="$1" + # create a named pipe so we can get the node's PID while also sedding its output + local stdout + local stderr + stdout=$(mktemp --dry-run --tmpdir) + stderr=$(mktemp --dry-run --tmpdir) + mkfifo "$stdout" + mkfifo "$stderr" + node_pipes+=("$stdout") + node_pipes+=("$stderr") + + # compute ports from offset + local port=$((30333+node_offset)) + local rpc_port=$((9933+node_offset)) + local ws_port=$((9944+node_offset)) + local prometheus_port=$((9615+node_offset)) + node_offset=$((node_offset+1)) + + # start the node + "$polkadot" \ + --chain "$chainspec" \ + --tmp \ + --port "$port" \ + --rpc-port "$rpc_port" \ + --ws-port "$ws_port" \ + --prometheus-port "$prometheus_port" \ + --rpc-cors all \ + "$(flagify "$name")" \ + > "$stdout" \ + 2> "$stderr" \ + & + local pid=$! + node_pids+=("$pid") + + # send output from the stdout pipe to stdout, prepending the node name + sed -e "$(make_sed_expr "$name" "OUT")" "$stdout" >&1 & + # send output from the stderr pipe to stderr, prepending the node name + sed -e "$(make_sed_expr "$name" "ERR")" "$stderr" >&2 & +} + +# start an adder collator and label its output +# +# This function takes a single argument, the node name. This affects only the tagging. +function run_adder_collator() { + name="$1" + # create a named pipe so we can get the node's PID while also sedding its output + local stdout + local stderr + stdout=$(mktemp --dry-run --tmpdir) + stderr=$(mktemp --dry-run --tmpdir) + mkfifo "$stdout" + mkfifo "$stderr" + node_pipes+=("$stdout") + node_pipes+=("$stderr") + + # compute ports from offset + local port=$((30333+node_offset)) + local rpc_port=$((9933+node_offset)) + local ws_port=$((9944+node_offset)) + local prometheus_port=$((9615+node_offset)) + node_offset=$((node_offset+1)) + + # start the node + "$adder_collator" \ + --chain "$chainspec" \ + --tmp \ + --port "$port" \ + --rpc-port "$rpc_port" \ + --ws-port "$ws_port" \ + --prometheus-port "$prometheus_port" \ + --rpc-cors all \ + > "$stdout" \ + 2> "$stderr" \ + & + local pid=$! + node_pids+=("$pid") + + # send output from the stdout pipe to stdout, prepending the node name + sed -e "$(make_sed_expr "$name" "OUT")" "$stdout" >&1 & + # send output from the stderr pipe to stderr, prepending the node name + sed -e "$(make_sed_expr "$name" "ERR")" "$stderr" >&2 & +} + + +# clean up the nodes when this script exits +function finish { + for node_pid in "${node_pids[@]}"; do + kill -9 "$node_pid" + done + for node_pipe in "${node_pipes[@]}"; do + rm "$node_pipe" + done + rm -rf "$genesis" +} +trap finish EXIT + +# start the nodes +run_node Alice +run_node Bob +run_adder_collator AdderCollator + +# register the adder collator +# doesn't work yet due to https://github.com/polkadot-js/tools/issues/185 +# polkadot-js-api \ +# --ws ws://localhost:9944 \ +# --sudo \ +# --seed "//Alice" \ +# tx.registrar.registerPara \ +# 100 \ +# '{"scheduling":"Always"}' \ +# "@$validation_code" \ +# "@$genesis_state" + +# now wait; this will exit on its own only if both subprocesses exit +# the practical implication, as both subprocesses are supposed to run forever, is that +# this script will also run forever, until killed, at which point the exit trap should kill +# the subprocesses +wait diff --git a/scripts/two-node-local-net.sh b/scripts/two-node-local-net.sh index 4e3291b015..16db4304f1 100755 --- a/scripts/two-node-local-net.sh +++ b/scripts/two-node-local-net.sh @@ -27,7 +27,7 @@ polkadot="target/release/polkadot" # ensure the polkadot binary exists and is up to date if [ ! -x "$polkadot" ] || [ "$polkadot" -ot "$last_modified_rust_file" ]; then - cargo build --release + cargo build --release --features real-overseer fi # setup variables -- GitLab From f4897f74a69a6b3983c53b9bd8392556e0b47ce6 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Fri, 20 Nov 2020 19:34:57 +0100 Subject: [PATCH 030/203] cleanup validator discovery (#1992) * use snake_case for log targets * remove unused continue * validator_discovery: when disconnecting, use all addresses * validator_discovery: simplify request revokation * fix a typo --- node/core/chain-api/src/lib.rs | 2 +- node/core/runtime-api/src/lib.rs | 2 +- .../availability-distribution/src/lib.rs | 2 +- node/network/bridge/src/lib.rs | 12 +--- .../network/bridge/src/validator_discovery.rs | 67 +++---------------- .../collator-protocol/src/collator_side.rs | 2 +- .../subsystem-util/src/validator_discovery.rs | 42 ++---------- node/subsystem/src/messages.rs | 8 +-- .../src/types/overseer-protocol.md | 24 +++---- 9 files changed, 33 insertions(+), 128 deletions(-) diff --git a/node/core/chain-api/src/lib.rs b/node/core/chain-api/src/lib.rs index 3c7a2a7241..aa8b8ae6e9 100644 --- a/node/core/chain-api/src/lib.rs +++ b/node/core/chain-api/src/lib.rs @@ -44,7 +44,7 @@ use std::sync::Arc; use futures::prelude::*; -const LOG_TARGET: &str = "ChainApiSubsystem"; +const LOG_TARGET: &str = "chain_api"; /// The Chain API Subsystem implementation. pub struct ChainApiSubsystem { diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index c957302737..4dec90b33c 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -40,7 +40,7 @@ use sp_api::{ProvideRuntimeApi}; use futures::prelude::*; -const LOG_TARGET: &str = "RuntimeApi"; +const LOG_TARGET: &str = "runtime_api"; /// The `RuntimeApiSubsystem`. See module docs for more details. pub struct RuntimeApiSubsystem { diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 24d48acc9e..920075e042 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -52,7 +52,7 @@ use std::collections::{HashMap, HashSet}; use std::iter; use thiserror::Error; -const LOG_TARGET: &'static str = "AvailabilityDistribution"; +const LOG_TARGET: &'static str = "availability_distribution"; #[derive(Debug, Error)] enum Error { diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 97744c5c77..ed58cd9097 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -24,7 +24,7 @@ use parity_scale_codec::{Encode, Decode}; use futures::prelude::*; use futures::future::BoxFuture; use futures::stream::BoxStream; -use futures::channel::{mpsc, oneshot}; +use futures::channel::mpsc; use sc_network::Event as NetworkEvent; @@ -246,7 +246,6 @@ enum Action { ConnectToValidators { validator_ids: Vec, connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, - revoke: oneshot::Receiver<()>, }, ReportPeer(PeerId, ReputationChange), @@ -278,11 +277,8 @@ fn action_from_overseer_message( => Action::SendValidationMessage(peers, msg), NetworkBridgeMessage::SendCollationMessage(peers, msg) => Action::SendCollationMessage(peers, msg), - NetworkBridgeMessage::ConnectToValidators { - validator_ids, - connected, - revoke, - } => Action::ConnectToValidators { validator_ids, connected, revoke }, + NetworkBridgeMessage::ConnectToValidators { validator_ids, connected } + => Action::ConnectToValidators { validator_ids, connected }, }, Ok(FromOverseer::Signal(OverseerSignal::BlockFinalized(_))) => Action::Nop, @@ -627,12 +623,10 @@ where Action::ConnectToValidators { validator_ids, connected, - revoke, } => { let (ns, ads) = validator_discovery.on_request( validator_ids, connected, - revoke, network_service, authority_discovery_service, ).await; diff --git a/node/network/bridge/src/validator_discovery.rs b/node/network/bridge/src/validator_discovery.rs index d0cc146191..71a3d4a566 100644 --- a/node/network/bridge/src/validator_discovery.rs +++ b/node/network/bridge/src/validator_discovery.rs @@ -21,7 +21,7 @@ use std::collections::{HashSet, HashMap, hash_map}; use std::sync::Arc; use async_trait::async_trait; -use futures::channel::{mpsc, oneshot}; +use futures::channel::mpsc; use sc_network::multiaddr::{Multiaddr, Protocol}; use sc_authority_discovery::Service as AuthorityDiscoveryService; @@ -29,7 +29,7 @@ use polkadot_node_network_protocol::PeerId; use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash}; const PRIORITY_GROUP: &'static str = "parachain_validators"; -const LOG_TARGET: &str = "ValidatorDiscovery"; +const LOG_TARGET: &str = "validator_discovery"; /// An abstraction over networking for the purposes of validator discovery service. #[async_trait] @@ -76,7 +76,6 @@ struct NonRevokedConnectionRequestState { requested: Vec, pending: HashSet, sender: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, - revoke: oneshot::Receiver<()>, } impl NonRevokedConnectionRequestState { @@ -85,13 +84,11 @@ impl NonRevokedConnectionRequestState { requested: Vec, pending: HashSet, sender: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, - revoke: oneshot::Receiver<()>, ) -> Self { Self { requested, pending, sender, - revoke, } } @@ -105,9 +102,7 @@ impl NonRevokedConnectionRequestState { /// Returns `true` if the request is revoked. pub fn is_revoked(&mut self) -> bool { - self.revoke - .try_recv() - .map_or(true, |r| r.is_some()) + self.sender.is_closed() } pub fn requested(&self) -> &[AuthorityDiscoveryId] { @@ -187,7 +182,6 @@ impl Service { if let Some(ids) = self.connected_peers.get_mut(&peer_id) { ids.insert(id.clone()); result.insert(id.clone(), peer_id.clone()); - continue; } } } @@ -203,12 +197,11 @@ impl Service { /// This method will also clean up all previously revoked requests. /// it takes `network_service` and `authority_discovery_service` by value /// and returns them as a workaround for the Future: Send requirement imposed by async fn impl. - #[tracing::instrument(level = "trace", skip(self, connected, revoke, network_service, authority_discovery_service), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(level = "trace", skip(self, connected, network_service, authority_discovery_service), fields(subsystem = LOG_TARGET))] pub async fn on_request( &mut self, validator_ids: Vec, mut connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, - revoke: oneshot::Receiver<()>, mut network_service: N, mut authority_discovery_service: AD, ) -> (N, AD) { @@ -276,7 +269,7 @@ impl Service { for id in revoked_validators.into_iter() { let result = authority_discovery_service.get_addresses_by_authority_id(id).await; if let Some(addresses) = result { - multiaddr_to_remove.extend(addresses.into_iter().take(MAX_ADDR_PER_PEER)); + multiaddr_to_remove.extend(addresses.into_iter()); } } @@ -300,7 +293,6 @@ impl Service { validator_ids, pending, connected, - revoke, )); (network_service, authority_discovery_service) @@ -418,39 +410,18 @@ mod tests { } #[test] - fn request_is_revoked_on_send() { - let (revoke_tx, revoke_rx) = oneshot::channel(); - let (sender, _receiver) = mpsc::channel(0); + fn request_is_revoked_when_the_receiver_is_dropped() { + let (sender, receiver) = mpsc::channel(0); let mut request = NonRevokedConnectionRequestState::new( Vec::new(), HashSet::new(), sender, - revoke_rx, ); assert!(!request.is_revoked()); - revoke_tx.send(()).unwrap(); - - assert!(request.is_revoked()); - } - - #[test] - fn request_is_revoked_when_the_sender_is_dropped() { - let (revoke_tx, revoke_rx) = oneshot::channel(); - let (sender, _receiver) = mpsc::channel(0); - - let mut request = NonRevokedConnectionRequestState::new( - Vec::new(), - HashSet::new(), - sender, - revoke_rx, - ); - - assert!(!request.is_revoked()); - - drop(revoke_tx); + drop(receiver); assert!(request.is_revoked()); } @@ -467,14 +438,12 @@ mod tests { futures::executor::block_on(async move { let req1 = vec![authority_ids[0].clone(), authority_ids[1].clone()]; let (sender, mut receiver) = mpsc::channel(2); - let (_revoke_tx, revoke_rx) = oneshot::channel(); service.on_peer_connected(&peer_ids[0], &mut ads).await; let _ = service.on_request( req1, sender, - revoke_rx, ns, ads, ).await; @@ -499,12 +468,10 @@ mod tests { futures::executor::block_on(async move { let req1 = vec![authority_ids[0].clone(), authority_ids[1].clone()]; let (sender, mut receiver) = mpsc::channel(2); - let (_revoke_tx, revoke_rx) = oneshot::channel(); let (_, mut ads) = service.on_request( req1, sender, - revoke_rx, ns, ads, ).await; @@ -534,7 +501,6 @@ mod tests { futures::executor::block_on(async move { let (sender, mut receiver) = mpsc::channel(1); - let (revoke_tx, revoke_rx) = oneshot::channel(); service.on_peer_connected(&peer_ids[0], &mut ads).await; service.on_peer_connected(&peer_ids[1], &mut ads).await; @@ -542,22 +508,19 @@ mod tests { let (ns, ads) = service.on_request( vec![authority_ids[0].clone()], sender, - revoke_rx, ns, ads, ).await; let _ = receiver.next().await.unwrap(); // revoke the request - revoke_tx.send(()).unwrap(); + drop(receiver); let (sender, mut receiver) = mpsc::channel(1); - let (_revoke_tx, revoke_rx) = oneshot::channel(); let _ = service.on_request( vec![authority_ids[1].clone()], sender, - revoke_rx, ns, ads, ).await; @@ -581,7 +544,6 @@ mod tests { futures::executor::block_on(async move { let (sender, mut receiver) = mpsc::channel(1); - let (revoke_tx, revoke_rx) = oneshot::channel(); service.on_peer_connected(&peer_ids[0], &mut ads).await; service.on_peer_connected(&peer_ids[1], &mut ads).await; @@ -589,22 +551,19 @@ mod tests { let (ns, ads) = service.on_request( vec![authority_ids[0].clone(), authority_ids[2].clone()], sender, - revoke_rx, ns, ads, ).await; let _ = receiver.next().await.unwrap(); // revoke the first request - revoke_tx.send(()).unwrap(); + drop(receiver); let (sender, mut receiver) = mpsc::channel(1); - let (revoke_tx, revoke_rx) = oneshot::channel(); let (ns, ads) = service.on_request( vec![authority_ids[0].clone(), authority_ids[1].clone()], sender, - revoke_rx, ns, ads, ).await; @@ -614,15 +573,13 @@ mod tests { assert_eq!(ns.priority_group.len(), 2); // revoke the second request - revoke_tx.send(()).unwrap(); + drop(receiver); let (sender, mut receiver) = mpsc::channel(1); - let (_revoke_tx, revoke_rx) = oneshot::channel(); let (ns, _) = service.on_request( vec![authority_ids[0].clone()], sender, - revoke_rx, ns, ads, ).await; @@ -647,7 +604,6 @@ mod tests { futures::executor::block_on(async move { let (sender, mut receiver) = mpsc::channel(1); - let (_revoke_tx, revoke_rx) = oneshot::channel(); service.on_peer_connected(&validator_peer_id, &mut ads).await; @@ -658,7 +614,6 @@ mod tests { let _ = service.on_request( vec![validator_id.clone()], sender, - revoke_rx, ns, ads, ).await; diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 853221e0d7..5a2d48003a 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -349,7 +349,7 @@ where Context: SubsystemContext { if let Some(request) = state.last_connection_request.take() { - request.revoke(); + drop(request); } let request = validator_discovery::connect_to_validators( diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index fe0df2b17e..0952ad048c 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -76,33 +76,30 @@ pub async fn connect_to_validators( .filter_map(|(k, v)| v.map(|v| (v, k))) .collect::>(); - let (connections, revoke) = connect_to_authorities(ctx, authorities).await?; + let connections = connect_to_authorities(ctx, authorities).await?; Ok(ConnectionRequest { validator_map, connections, - revoke, }) } async fn connect_to_authorities( ctx: &mut Context, validator_ids: Vec, -) -> Result<(mpsc::Receiver<(AuthorityDiscoveryId, PeerId)>, oneshot::Sender<()>), Error> { +) -> Result, Error> { const PEERS_CAPACITY: usize = 8; - let (revoke_tx, revoke) = oneshot::channel(); let (connected, connected_rx) = mpsc::channel(PEERS_CAPACITY); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ConnectToValidators { validator_ids, connected, - revoke, } )).await?; - Ok((connected_rx, revoke_tx)) + Ok(connected_rx) } /// A struct that assists performing multiple concurrent connection requests. @@ -176,15 +173,12 @@ impl stream::Stream for ConnectionRequests { /// This struct implements `Stream` to allow for asynchronous /// discovery of validator addresses. /// -/// NOTE: you should call `revoke` on this struct -/// when you're no longer interested in the requested validators. +/// NOTE: the request will be revoked on drop. #[must_use = "dropping a request will result in its immediate revokation"] pub struct ConnectionRequest { validator_map: HashMap, #[must_use = "streams do nothing unless polled"] connections: mpsc::Receiver<(AuthorityDiscoveryId, PeerId)>, - #[must_use = "a request should be revoked at some point"] - revoke: oneshot::Sender<()>, } impl stream::Stream for ConnectionRequest { @@ -209,29 +203,13 @@ impl stream::Stream for ConnectionRequest { } } -impl ConnectionRequest { - /// By revoking the request the caller allows the network to - /// free some peer slots thus freeing the resources. - /// It doesn't necessarily lead to peers disconnection though. - /// The revokation is enacted on in the next connection request. - /// - /// This can be done either by calling this function or dropping the request. - pub fn revoke(self) { - if let Err(_) = self.revoke.send(()) { - tracing::warn!( - "Failed to revoke a validator connection request", - ); - } - } -} - #[cfg(test)] mod tests { use super::*; use polkadot_primitives::v1::ValidatorPair; use sp_core::{Pair, Public}; - use futures::{executor, poll, channel::{mpsc, oneshot}, StreamExt, SinkExt}; + use futures::{executor, poll, StreamExt, SinkExt}; #[test] fn adding_a_connection_request_works() { @@ -251,7 +229,6 @@ mod tests { validator_map.insert(auth_2.clone(), validator_2.clone()); let (mut rq1_tx, rq1_rx) = mpsc::channel(8); - let (revoke_1_tx, _revoke_1_rx) = oneshot::channel(); let peer_id_1 = PeerId::random(); let peer_id_2 = PeerId::random(); @@ -259,7 +236,6 @@ mod tests { let connection_request_1 = ConnectionRequest { validator_map, connections: rq1_rx, - revoke: revoke_1_tx, }; let relay_parent_1 = Hash::repeat_byte(1); @@ -302,10 +278,8 @@ mod tests { validator_map_2.insert(auth_2.clone(), validator_2.clone()); let (mut rq1_tx, rq1_rx) = mpsc::channel(8); - let (revoke_1_tx, _revoke_1_rx) = oneshot::channel(); let (mut rq2_tx, rq2_rx) = mpsc::channel(8); - let (revoke_2_tx, _revoke_2_rx) = oneshot::channel(); let peer_id_1 = PeerId::random(); let peer_id_2 = PeerId::random(); @@ -313,13 +287,11 @@ mod tests { let connection_request_1 = ConnectionRequest { validator_map: validator_map_1, connections: rq1_rx, - revoke: revoke_1_tx, }; let connection_request_2 = ConnectionRequest { validator_map: validator_map_2, connections: rq2_rx, - revoke: revoke_2_tx, }; let relay_parent_1 = Hash::repeat_byte(1); @@ -364,10 +336,8 @@ mod tests { validator_map_2.insert(auth_2.clone(), validator_2.clone()); let (mut rq1_tx, rq1_rx) = mpsc::channel(8); - let (revoke_1_tx, _revoke_1_rx) = oneshot::channel(); let (mut rq2_tx, rq2_rx) = mpsc::channel(8); - let (revoke_2_tx, _revoke_2_rx) = oneshot::channel(); let peer_id_1 = PeerId::random(); let peer_id_2 = PeerId::random(); @@ -375,13 +345,11 @@ mod tests { let connection_request_1 = ConnectionRequest { validator_map: validator_map_1, connections: rq1_rx, - revoke: revoke_1_tx, }; let connection_request_2 = ConnectionRequest { validator_map: validator_map_2, connections: rq2_rx, - revoke: revoke_2_tx, }; let relay_parent = Hash::repeat_byte(3); diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index 0d395f2167..87d2981b54 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -208,6 +208,7 @@ pub enum NetworkBridgeMessage { /// /// Also ask the network to stay connected to these peers at least /// until the request is revoked. + /// This can be done by dropping the receiver. ConnectToValidators { /// Ids of the validators to connect to. validator_ids: Vec, @@ -215,13 +216,6 @@ pub enum NetworkBridgeMessage { /// the validators as they are connected. /// The response is sent immediately for already connected peers. connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, - /// By revoking the request the caller allows the network to - /// free some peer slots thus freeing the resources. - /// It doesn't necessarily lead to peers disconnection though. - /// The revokation is enacted on in the next connection request. - /// - /// This can be done by sending to the channel or dropping the sender. - revoke: oneshot::Receiver<()>, }, } diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index e0ab023a16..3b4b0d5b02 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -54,8 +54,8 @@ enum ApprovalVotingMessage { /// Check if the assignment is valid and can be accepted by our view of the protocol. /// Should not be sent unless the block hash is known. CheckAndImportAssignment( - Hash, - AssignmentCert, + Hash, + AssignmentCert, ValidatorIndex, ResponseChannel, ), @@ -68,11 +68,11 @@ enum ApprovalVotingMessage { ResponseChannel, ), /// Returns the highest possible ancestor hash of the provided block hash which is - /// acceptable to vote on finality for. + /// acceptable to vote on finality for. /// The `BlockNumber` provided is the number of the block's ancestor which is the /// earliest possible vote. - /// - /// It can also return the same block hash, if that is acceptable to vote upon. + /// + /// It can also return the same block hash, if that is acceptable to vote upon. /// Return `None` if the input hash is unrecognized. ApprovedAncestor(Hash, BlockNumber, ResponseChannel>), } @@ -122,8 +122,8 @@ Messages received by the availability recovery subsystem. enum AvailabilityRecoveryMessage { /// Recover available data from validators on the network. RecoverAvailableData( - CandidateDescriptor, - SessionIndex, + CandidateDescriptor, + SessionIndex, ResponseChannel>, ), } @@ -293,6 +293,7 @@ enum NetworkBridgeMessage { /// /// Also ask the network to stay connected to these peers at least /// until the request is revoked. + /// This can be done by dropping the receiver. ConnectToValidators { /// Ids of the validators to connect to. validator_ids: Vec, @@ -300,13 +301,6 @@ enum NetworkBridgeMessage { /// the validators as they are connected. /// The response is sent immediately for already connected peers. connected: ResponseStream<(AuthorityDiscoveryId, PeerId)>, - /// By revoking the request the caller allows the network to - /// free some peer slots thus freeing the resources. - /// It doesn't necessarily lead to peers disconnection though. - /// The revokation is enacted on in the next connection request. - /// - /// This can be done by sending to the channel or dropping the sender. - revoke: ReceiverChannel<()>, }, } ``` @@ -409,7 +403,7 @@ enum RuntimeApiRequest { SessionIndex(ResponseChannel), /// Get the validation code for a specific para, using the given occupied core assumption. ValidationCode(ParaId, OccupiedCoreAssumption, ResponseChannel>), - /// Fetch the historical validation code used by a para for candidates executed in + /// Fetch the historical validation code used by a para for candidates executed in /// the context of a given block height in the current chain. HistoricalValidationCode(ParaId, BlockNumber, ResponseChannel>), /// with the given occupied core assumption. -- GitLab From 7a0b87b184d91209756d88d2cd210cf8a1f4e8aa Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Fri, 20 Nov 2020 21:12:36 +0100 Subject: [PATCH 031/203] sane messaging defaults (#1994) --- node/service/src/chain_spec.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 92ef30928c..03cb99c012 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -1233,6 +1233,28 @@ pub fn rococo_testnet_genesis( max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, group_rotation_frequency: 10, + max_upward_queue_count: 8, + max_upward_queue_size: 8 * 1024, + max_downward_message_size: 1024, + // this is approximatelly 4ms. + // + // Same as `4 * frame_support::weights::WEIGHT_PER_MILLIS`. We don't bother with + // an import since that's a made up number and should be replaced with a constant + // obtained by benchmarking anyway. + preferred_dispatchable_upward_messages_step_weight: 4 * 1_000_000_000, + max_upward_message_size: 1024, + max_upward_message_num_per_candidate: 5, + hrmp_open_request_ttl: 5, + hrmp_sender_deposit: 0, + hrmp_recipient_deposit: 0, + hrmp_channel_max_capacity: 8, + hrmp_channel_max_total_size: 8 * 1024, + hrmp_max_parachain_inbound_channels: 4, + hrmp_max_parathread_inbound_channels: 4, + hrmp_channel_max_message_size: 1024, + hrmp_max_parachain_outbound_channels: 4, + hrmp_max_parathread_outbound_channels: 4, + hrmp_max_message_num_per_candidate: 5, ..Default::default() }, }), -- GitLab From 4a94b71ed7abdba231de8a03a7a22975cab6a079 Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Fri, 20 Nov 2020 21:40:45 +0100 Subject: [PATCH 032/203] add parity-keyring to install instructions (#1993) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d254535f8b..0b54f90eba 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,9 @@ gpg --export 9D4B2B6EB8F97156D19669A9FF0812D491B96798 > /usr/share/keyrings/pari # Add the Parity repository and update the package index echo 'deb [signed-by=/usr/share/keyrings/parity.gpg] https://releases.parity.io/deb release main' > /etc/apt/sources.list.d/parity.list apt update +# Install the `parity-keyring` package - This will ensure the GPG key +# used by APT remains up-to-date +apt install parity-keyring # Install polkadot apt install polkadot -- GitLab From ba74791bc4f647c2e9969cdabdc7fba1ccc9d2be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sun, 22 Nov 2020 12:55:05 +0100 Subject: [PATCH 033/203] Improve collator side of the collator-protocol (#1955) * Improve collator side of the collator-protocol This pr improves the collator-protocol implementation of the collator side. Besides cleaning up code and rewriting it, the following changed: - Before on `PeerViewChange` we send an advertisment to every peer, now this only happens for validators. - It also adds a check that we send an advertisment message only once for a connected peer. - If the same validator was part of the current and next group, we requested to be connected to this validator two times. This is also fixed now. - Instead of having only one connection request, we now are being able to store multiple of them. This is required as we can have multiple active leafs at any point of time. * Switch to common `ConnectionRequests` * Update node/network/collator-protocol/src/collator_side.rs --- .../collator-protocol/src/collator_side.rs | 1253 +++++++++-------- node/network/collator-protocol/src/lib.rs | 1 + 2 files changed, 640 insertions(+), 614 deletions(-) diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 5a2d48003a..784a246b8b 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -14,15 +14,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use super::{LOG_TARGET, Result}; -use futures::{StreamExt, task::Poll}; +use futures::{StreamExt, select, FutureExt}; use polkadot_primitives::v1::{ - CollatorId, CoreIndex, CoreState, Hash, Id as ParaId, CandidateReceipt, - PoV, ValidatorId, + CollatorId, CoreIndex, CoreState, Hash, Id as ParaId, CandidateReceipt, PoV, ValidatorId, }; use polkadot_subsystem::{ FromOverseer, OverseerSignal, SubsystemContext, @@ -120,6 +119,60 @@ impl metrics::Metrics for Metrics { } } +/// The group of validators that is assigned to our para at a given point of time. +/// +/// This structure is responsible for keeping track of which validators belong to a certain group for a para. It also +/// stores a mapping from [`PeerId`] to [`ValidatorId`] as we learn about it over the lifetime of this object. Besides +/// that it also keeps track to which validators we advertised our collation. +struct ValidatorGroup { + /// All [`ValidatorId`]'s that are assigned to us in this group. + validator_ids: HashSet, + /// The mapping from [`PeerId`] to [`ValidatorId`]. This is filled over time as we learn the [`PeerId`]'s from the + /// authority discovery. It is not ensured that this will contain *all* validators of this group. + peer_ids: HashMap, + /// All [`ValidatorId`]'s of the current group to that we advertised our collation. + advertised_to: HashSet, +} + +impl ValidatorGroup { + /// Returns `true` if we should advertise our collation to the given peer. + fn should_advertise_to(&self, peer: &PeerId) -> bool { + match self.peer_ids.get(peer) { + Some(validator_id) => !self.advertised_to.contains(validator_id), + None => false, + } + } + + /// Should be called after we advertised our collation to the given `peer` to keep track of it. + fn advertised_to_peer(&mut self, peer: &PeerId) { + if let Some(validator_id) = self.peer_ids.get(peer) { + self.advertised_to.insert(validator_id.clone()); + } + } + + /// Add a [`PeerId`] that belongs to the given [`ValidatorId`]. + /// + /// This returns `true` if the given validator belongs to this group and we could insert its [`PeerId`]. + fn add_peer_id_for_validator(&mut self, peer_id: &PeerId, validator_id: &ValidatorId) -> bool { + if !self.validator_ids.contains(validator_id) { + false + } else { + self.peer_ids.insert(peer_id.clone(), validator_id.clone()); + true + } + } +} + +impl From> for ValidatorGroup { + fn from(validator_ids: HashSet) -> Self { + Self { + validator_ids, + peer_ids: HashMap::new(), + advertised_to: HashSet::new(), + } + } +} + #[derive(Default)] struct State { /// Our id. @@ -141,24 +194,26 @@ struct State { /// We will keep up to one local collation per relay-parent. collations: HashMap, - /// Our validator groups active leafs. - our_validators_groups: HashMap>, + /// Our validator groups per active leaf. + our_validators_groups: HashMap, - /// Validators we know about via `ConnectToValidators` message. - /// - /// These are the only validators we are interested in talking to and as such - /// all actions from peers not in this map will be ignored. - /// Entries in this map will be cleared as validator groups in `our_validator_groups` - /// go out of scope with their respective deactivated leafs. - known_validators: HashMap, + /// List of peers where we declared ourself as a collator. + declared_at: HashSet, - /// Use to await for the next validator connection and revoke the request. - last_connection_request: Option, + /// The connection requests to validators per relay parent. + connection_requests: validator_discovery::ConnectionRequests, /// Metrics. metrics: Metrics, } +impl State { + /// Returns `true` if the given `peer` is interested in the leaf that is represented by `relay_parent`. + fn peer_interested_in_leaf(&self, peer: &PeerId, relay_parent: &Hash) -> bool { + self.peer_views.get(peer).map(|v| v.contains(relay_parent)).unwrap_or(false) + } +} + /// Distribute a collation. /// /// Figure out the core our para is assigned to and the relevant validators. @@ -168,16 +223,13 @@ struct State { /// as it must be invalid in that case - although this indicates a logic error /// elsewhere in the node. #[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] -async fn distribute_collation( - ctx: &mut Context, +async fn distribute_collation( + ctx: &mut impl SubsystemContext, state: &mut State, id: ParaId, receipt: CandidateReceipt, pov: PoV, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { let relay_parent = receipt.descriptor.relay_parent; // This collation is not in the active-leaves set. @@ -207,41 +259,28 @@ where relay_parent = %relay_parent, "looks like no core is assigned to {} at {}", id, relay_parent, ); - return Ok(()); + + return Ok(()) } }; // Determine the group on that core and the next group on that core. - let our_validators = match determine_our_validators(ctx, our_core, num_cores, relay_parent).await? { - Some(validators) => validators, - None => { - tracing::warn!( - target: LOG_TARGET, - core = ?our_core, - "there are no validators assigned to core", - ); - - return Ok(()); - } - }; + let (current_validators, next_validators) = determine_our_validators(ctx, our_core, num_cores, relay_parent).await?; - state.our_validators_groups.insert(relay_parent, our_validators.clone()); + if current_validators.is_empty() && next_validators.is_empty() { + tracing::warn!( + target: LOG_TARGET, + core = ?our_core, + "there are no validators assigned to core", + ); - // We may be already connected to some of the validators. In that case, - // advertise a collation to them right away. - for validator in our_validators.iter() { - if let Some(peer) = state.known_validators.get(&validator) { - if let Some(view) = state.peer_views.get(peer) { - if view.contains(&relay_parent) { - let peer = peer.clone(); - advertise_collation(ctx, state, relay_parent, vec![peer]).await?; - } - } - } + return Ok(()) } // Issue a discovery request for the validators of the current group and the next group. - connect_to_validators(ctx, relay_parent, state, our_validators).await?; + connect_to_validators(ctx, relay_parent, state, current_validators.union(&next_validators).cloned().collect()).await?; + + state.our_validators_groups.insert(relay_parent, current_validators.into()); state.collations.insert(relay_parent, (receipt, pov)); @@ -251,14 +290,11 @@ where /// Get the Id of the Core that is assigned to the para being collated on if any /// and the total number of cores. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn determine_core( - ctx: &mut Context, +async fn determine_core( + ctx: &mut impl SubsystemContext, para_id: ParaId, relay_parent: Hash, -) -> Result> -where - Context: SubsystemContext -{ +) -> Result> { let cores = request_availability_cores_ctx(relay_parent, ctx).await?.await??; for (idx, core) in cores.iter().enumerate() { @@ -272,63 +308,46 @@ where Ok(None) } -/// Figure out a group of validators assigned to the para being collated on. +/// Figure out current and next group of validators assigned to the para being collated on. /// -/// This returns validators for the current group and the next group. +/// Returns [`ValidatorId`]'s of current and next group as determined based on the `relay_parent`. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn determine_our_validators( - ctx: &mut Context, +async fn determine_our_validators( + ctx: &mut impl SubsystemContext, core_index: CoreIndex, cores: usize, relay_parent: Hash, -) -> Result>> -where - Context: SubsystemContext -{ +) -> Result<(HashSet, HashSet)> { let groups = request_validator_groups_ctx(relay_parent, ctx).await?; let groups = groups.await??; let current_group_index = groups.1.group_for_core(core_index, cores); - - let mut connect_to_validators = match groups.0.get(current_group_index.0 as usize) { - Some(group) => group.clone(), - None => return Ok(None), - }; + let current_validators = groups.0.get(current_group_index.0 as usize).map(|v| v.as_slice()).unwrap_or_default(); let next_group_idx = (current_group_index.0 as usize + 1) % groups.0.len(); + let next_validators = groups.0.get(next_group_idx).map(|v| v.as_slice()).unwrap_or_default(); - if let Some(next_group) = groups.0.get(next_group_idx) { - connect_to_validators.extend_from_slice(&next_group); - } - - let validators = request_validators_ctx(relay_parent, ctx).await?; - - let validators = validators.await??; + let validators = request_validators_ctx(relay_parent, ctx).await?.await??; - let validators = connect_to_validators - .into_iter() - .map(|idx| validators[idx as usize].clone()) - .collect(); + let current_validators = current_validators.iter().map(|i| validators[*i as usize].clone()).collect(); + let next_validators = next_validators.iter().map(|i| validators[*i as usize].clone()).collect(); - Ok(Some(validators)) + Ok((current_validators, next_validators)) } -/// Issue a `Declare` collation message to a set of peers. +/// Issue a `Declare` collation message to the given `peer`. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn declare( - ctx: &mut Context, +async fn declare( + ctx: &mut impl SubsystemContext, state: &mut State, - to: Vec, -) -> Result<()> -where - Context: SubsystemContext -{ + peer: PeerId, +) -> Result<()> { let wire_message = protocol_v1::CollatorProtocolMessage::Declare(state.our_id.clone()); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::SendCollationMessage( - to, + vec![peer], protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) )).await?; @@ -339,41 +358,34 @@ where /// Issue a connection request to a set of validators and /// revoke the previous connection request. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn connect_to_validators( - ctx: &mut Context, +async fn connect_to_validators( + ctx: &mut impl SubsystemContext, relay_parent: Hash, state: &mut State, validators: Vec, -) -> Result<()> -where - Context: SubsystemContext -{ - if let Some(request) = state.last_connection_request.take() { - drop(request); - } - +) -> Result<()> { let request = validator_discovery::connect_to_validators( ctx, relay_parent, validators, ).await?; - state.last_connection_request = Some(request); + state.connection_requests.put(relay_parent, request); Ok(()) } -/// Advertise collation to a set of relay chain validators. +/// Advertise collation to the given `peer`. +/// +/// This will only advertise a collation if there exists one for the given `relay_parent` and the given `peer` is +/// set as validator for our para at the given `relay_parent`. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn advertise_collation( - ctx: &mut Context, +async fn advertise_collation( + ctx: &mut impl SubsystemContext, state: &mut State, relay_parent: Hash, - to: Vec, -) -> Result<()> -where - Context: SubsystemContext -{ + peer: PeerId, +) -> Result<()> { let collating_on = match state.collating_on { Some(collating_on) => collating_on, None => { @@ -381,15 +393,28 @@ where } }; + let should_advertise = state.our_validators_groups + .get(&relay_parent) + .map(|g| g.should_advertise_to(&peer)) + .unwrap_or(false); + + if !state.collations.contains_key(&relay_parent) || !should_advertise { + return Ok(()) + } + let wire_message = protocol_v1::CollatorProtocolMessage::AdvertiseCollation(relay_parent, collating_on); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::SendCollationMessage( - to, + vec![peer.clone()], protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) )).await?; + if let Some(validators) = state.our_validators_groups.get_mut(&relay_parent) { + validators.advertised_to_peer(&peer); + } + state.metrics.on_advertisment_made(); Ok(()) @@ -397,14 +422,11 @@ where /// The main incoming message dispatching switch. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn process_msg( - ctx: &mut Context, +async fn process_msg( + ctx: &mut impl SubsystemContext, state: &mut State, msg: CollatorProtocolMessage, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { use CollatorProtocolMessage::*; let _timer = state.metrics.time_process_msg(); @@ -475,17 +497,14 @@ where /// Issue a response to a previously requested collation. #[tracing::instrument(level = "trace", skip(ctx, state, pov), fields(subsystem = LOG_TARGET))] -async fn send_collation( - ctx: &mut Context, +async fn send_collation( + ctx: &mut impl SubsystemContext, state: &mut State, request_id: RequestId, origin: PeerId, receipt: CandidateReceipt, pov: PoV, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { let wire_message = protocol_v1::CollatorProtocolMessage::Collation( request_id, receipt, @@ -506,15 +525,12 @@ where /// A networking messages switch. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn handle_incoming_peer_message( - ctx: &mut Context, +async fn handle_incoming_peer_message( + ctx: &mut impl SubsystemContext, state: &mut State, origin: PeerId, msg: protocol_v1::CollatorProtocolMessage, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { use protocol_v1::CollatorProtocolMessage::*; match msg { @@ -568,15 +584,12 @@ where /// Our view has changed. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn handle_peer_view_change( - ctx: &mut Context, +async fn handle_peer_view_change( + ctx: &mut impl SubsystemContext, state: &mut State, peer_id: PeerId, view: View, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { let current = state.peer_views.entry(peer_id.clone()).or_default(); let added: Vec = view.difference(&*current).cloned().collect(); @@ -584,9 +597,7 @@ where *current = view; for added in added.into_iter() { - if state.collations.contains_key(&added) { - advertise_collation(ctx, state, added.clone(), vec![peer_id.clone()]).await?; - } + advertise_collation(ctx, state, added, peer_id.clone()).await?; } Ok(()) @@ -596,22 +607,30 @@ where /// /// `Declare` that we are a collator with a given `CollatorId`. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn handle_validator_connected( - ctx: &mut Context, +async fn handle_validator_connected( + ctx: &mut impl SubsystemContext, state: &mut State, peer_id: PeerId, validator_id: ValidatorId, -) -> Result<()> -where - Context: SubsystemContext -{ - // Check if the validator is already known or if maybe its peer id chaned(should not happen) - let unknown = state.known_validators.insert(validator_id, peer_id.clone()).map(|o| o != peer_id).unwrap_or(true); - - if unknown { - // Only declare the new peers. - declare(ctx, state, vec![peer_id.clone()]).await?; - state.peer_views.insert(peer_id, Default::default()); + relay_parent: Hash, +) -> Result<()> { + let not_declared = state.declared_at.insert(peer_id.clone()); + + if not_declared { + declare(ctx, state, peer_id.clone()).await?; + } + + // Store the PeerId and find out if we should advertise to this peer. + // + // If this peer does not belong to the para validators, we also don't need to try to advertise our collation. + let advertise = if let Some(validators) = state.our_validators_groups.get_mut(&relay_parent) { + validators.add_peer_id_for_validator(&peer_id, &validator_id) + } else { + false + }; + + if advertise && state.peer_interested_in_leaf(&peer_id, &relay_parent) { + advertise_collation(ctx, state, relay_parent, peer_id).await?; } Ok(()) @@ -619,14 +638,11 @@ where /// Bridge messages switch. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] -async fn handle_network_msg( - ctx: &mut Context, +async fn handle_network_msg( + ctx: &mut impl SubsystemContext, state: &mut State, bridge_message: NetworkBridgeEvent, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { use NetworkBridgeEvent::*; match bridge_message { @@ -638,8 +654,8 @@ where handle_peer_view_change(ctx, state, peer_id, view).await?; } PeerDisconnected(peer_id) => { - state.known_validators.retain(|_, v| *v != peer_id); state.peer_views.remove(&peer_id); + state.declared_at.remove(&peer_id); } OurViewChange(view) => { handle_our_view_change(state, view).await?; @@ -658,59 +674,59 @@ async fn handle_our_view_change( state: &mut State, view: View, ) -> Result<()> { - let old_view = std::mem::replace(&mut (state.view), view); - - let view = state.view.clone(); - - let removed = old_view.difference(&view).collect::>(); - - for removed in removed.into_iter() { + for removed in state.view.difference(&view) { state.collations.remove(removed); state.our_validators_groups.remove(removed); + state.connection_requests.remove(removed); } + state.view = view; + Ok(()) } /// The collator protocol collator side main loop. #[tracing::instrument(skip(ctx, metrics), fields(subsystem = LOG_TARGET))] -pub(crate) async fn run( - mut ctx: Context, +pub(crate) async fn run( + mut ctx: impl SubsystemContext, our_id: CollatorId, metrics: Metrics, -) -> Result<()> -where - Context: SubsystemContext -{ +) -> Result<()> { use FromOverseer::*; use OverseerSignal::*; let mut state = State { metrics, + our_id, ..Default::default() }; - state.our_id = our_id; - loop { - if let Some(mut request) = state.last_connection_request.take() { - let _timer = state.metrics.time_handle_connection_request(); - - while let Poll::Ready(Some((validator_id, peer_id))) = futures::poll!(request.next()) { - if let Err(err) = handle_validator_connected(&mut ctx, &mut state, peer_id, validator_id).await { + select! { + res = state.connection_requests.next().fuse() => { + let (relay_parent, validator_id, peer_id) = match res { + Some(res) => res, + // Will never happen, but better to be safe. + None => continue, + }; + + let _timer = state.metrics.time_handle_connection_request(); + + if let Err(err) = handle_validator_connected( + &mut ctx, + &mut state, + peer_id, + validator_id, + relay_parent, + ).await { tracing::warn!( target: LOG_TARGET, err = ?err, "Failed to declare our collator id", ); } - } - // put it back - state.last_connection_request = Some(request); - } - - while let Poll::Ready(msg) = futures::poll!(ctx.recv()) { - match msg? { + }, + msg = ctx.recv().fuse() => match msg? { Communication { msg } => { if let Err(e) = process_msg(&mut ctx, &mut state, msg).await { tracing::warn!(target: LOG_TARGET, err = ?e, "Failed to process message"); @@ -721,8 +737,6 @@ where Signal(Conclude) => return Ok(()), } } - - futures::pending!() } } @@ -733,7 +747,7 @@ mod tests { use std::time::Duration; use assert_matches::assert_matches; - use futures::{executor, future, Future}; + use futures::{executor, future, Future, channel::mpsc}; use smallvec::smallvec; use sp_core::crypto::Pair; @@ -746,7 +760,6 @@ mod tests { use polkadot_subsystem::{ActiveLeavesUpdate, messages::{RuntimeApiMessage, RuntimeApiRequest}}; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_subsystem_testhelpers as test_helpers; - use polkadot_node_network_protocol::ObservedRole; #[derive(Default)] struct TestCandidateBuilder { @@ -772,14 +785,14 @@ mod tests { #[derive(Clone)] struct TestState { - chain_ids: Vec, + para_id: ParaId, validators: Vec, validator_public: Vec, validator_authority_id: Vec, validator_peer_id: Vec, validator_groups: (Vec>, GroupRotationInfo), relay_parent: Hash, - availability_cores: Vec, + availability_core: CoreState, our_collator_pair: CollatorPair, } @@ -793,10 +806,7 @@ mod tests { impl Default for TestState { fn default() -> Self { - let chain_a = ParaId::from(1); - let chain_b = ParaId::from(2); - - let chain_ids = vec![chain_a, chain_b]; + let para_id = ParaId::from(1); let validators = vec![ Sr25519Keyring::Alice, @@ -813,7 +823,7 @@ mod tests { .take(validator_public.len()) .collect(); - let validator_groups = vec![vec![2, 0, 4], vec![1], vec![3]]; + let validator_groups = vec![vec![2, 0, 4], vec![3, 2, 4]]; let group_rotation_info = GroupRotationInfo { session_start_block: 0, group_rotation_frequency: 100, @@ -821,37 +831,107 @@ mod tests { }; let validator_groups = (validator_groups, group_rotation_info); - let availability_cores = vec![ - CoreState::Scheduled(ScheduledCore { - para_id: chain_ids[0], - collator: None, - }), - CoreState::Scheduled(ScheduledCore { - para_id: chain_ids[1], - collator: None, - }), - ]; + let availability_core = CoreState::Scheduled(ScheduledCore { + para_id, + collator: None, + }); - let relay_parent = Hash::repeat_byte(0x05); + let relay_parent = Hash::random(); let our_collator_pair = CollatorPair::generate().0; Self { - chain_ids, + para_id, validators, validator_public, validator_authority_id, validator_peer_id, validator_groups, relay_parent, - availability_cores, + availability_core, our_collator_pair, } } } + impl TestState { + fn current_group_validator_indices(&self) -> &[ValidatorIndex] { + &self.validator_groups.0[0] + } + + fn current_group_validator_peer_ids(&self) -> Vec { + self.current_group_validator_indices().iter().map(|i| self.validator_peer_id[*i as usize].clone()).collect() + } + + fn current_group_validator_authority_ids(&self) -> Vec { + self.current_group_validator_indices() + .iter() + .map(|i| self.validator_authority_id[*i as usize].clone()) + .collect() + } + + fn current_group_validator_ids(&self) -> Vec { + self.current_group_validator_indices() + .iter() + .map(|i| self.validator_public[*i as usize].clone()) + .collect() + } + + fn next_group_validator_indices(&self) -> &[ValidatorIndex] { + &self.validator_groups.0[1] + } + + fn next_group_validator_authority_ids(&self) -> Vec { + self.next_group_validator_indices() + .iter() + .map(|i| self.validator_authority_id[*i as usize].clone()) + .collect() + } + + fn next_group_validator_ids(&self) -> Vec { + self.next_group_validator_indices() + .iter() + .map(|i| self.validator_public[*i as usize].clone()) + .collect() + } + + /// Returns the unique count of validators in the current and next group. + fn current_and_next_group_unique_validator_count(&self) -> usize { + let mut indices = self.next_group_validator_indices().iter().collect::>(); + indices.extend(self.current_group_validator_indices()); + indices.len() + } + + /// Generate a new relay parent and inform the subsystem about the new view. + /// + /// If `merge_views == true` it means the subsystem will be informed that we working on the old `relay_parent` + /// and the new one. + async fn advance_to_new_round(&mut self, virtual_overseer: &mut VirtualOverseer, merge_views: bool) { + let old_relay_parent = self.relay_parent; + + while self.relay_parent == old_relay_parent { + self.relay_parent.randomize(); + } + + let hashes = if merge_views { + vec![old_relay_parent, self.relay_parent] + } else { + vec![self.relay_parent] + }; + + overseer_send( + virtual_overseer, + CollatorProtocolMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::OurViewChange(View(hashes)), + ), + ).await; + } + } + + type VirtualOverseer = test_helpers::TestSubsystemContextHandle; + struct TestHarness { - virtual_overseer: test_helpers::TestSubsystemContextHandle, + virtual_overseer: VirtualOverseer, } fn test_harness>( @@ -932,190 +1012,256 @@ mod tests { .expect(&format!("{:?} is more than enough for sending signals.", TIMEOUT)); } - #[test] - fn advertise_and_send_collation() { - let test_state = TestState::default(); + // Setup the system by sending the `CollateOn`, `ActiveLeaves` and `OurViewChange` messages. + async fn setup_system(virtual_overseer: &mut VirtualOverseer, test_state: &TestState) { + overseer_send( + virtual_overseer, + CollatorProtocolMessage::CollateOn(test_state.para_id), + ).await; + + overseer_signal( + virtual_overseer, + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: smallvec![test_state.relay_parent], + deactivated: smallvec![], + }), + ).await; + + overseer_send( + virtual_overseer, + CollatorProtocolMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])), + ), + ).await; + } - test_harness(test_state.our_collator_pair.public(), |test_harness| async move { - let current = test_state.relay_parent; - let mut virtual_overseer = test_harness.virtual_overseer; + /// Result of [`distribute_collation`] + struct DistributeCollation { + /// Should be used to inform the subsystem about connected validators. + connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, + candidate: CandidateReceipt, + pov_block: PoV, + } - let pov_block = PoV { - block_data: BlockData(vec![42, 43, 44]), - }; + /// Create some PoV and distribute it. + async fn distribute_collation( + virtual_overseer: &mut VirtualOverseer, + test_state: &TestState, + ) -> DistributeCollation { + // Now we want to distribute a PoVBlock + let pov_block = PoV { + block_data: BlockData(vec![42, 43, 44]), + }; - let pov_hash = pov_block.hash(); + let pov_hash = pov_block.hash(); - let candidate = TestCandidateBuilder { - para_id: test_state.chain_ids[0], - relay_parent: test_state.relay_parent, - pov_hash, - ..Default::default() - }.build(); + let candidate = TestCandidateBuilder { + para_id: test_state.para_id, + relay_parent: test_state.relay_parent, + pov_hash, + ..Default::default() + }.build(); - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::CollateOn(test_state.chain_ids[0]) - ).await; + overseer_send( + virtual_overseer, + CollatorProtocolMessage::DistributeCollation(candidate.clone(), pov_block.clone()), + ).await; - overseer_signal( - &mut virtual_overseer, - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![current.clone()], - deactivated: smallvec![], - }), - ).await; + // obtain the availability cores. + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::AvailabilityCores(tx) + )) => { + assert_eq!(relay_parent, test_state.relay_parent); + tx.send(Ok(vec![test_state.availability_core.clone()])).unwrap(); + } + ); - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![current])), - ), - ).await; + // Obtain the validator groups + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorGroups(tx) + )) => { + assert_eq!(relay_parent, test_state.relay_parent); + tx.send(Ok(test_state.validator_groups.clone())).unwrap(); + } + ); - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::DistributeCollation(candidate.clone(), pov_block.clone()), - ).await; + // obtain the validators per relay parent + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, test_state.relay_parent); + tx.send(Ok(test_state.validator_public.clone())).unwrap(); + } + ); - // obtain the availability cores. - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::AvailabilityCores(tx) - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(test_state.availability_cores.clone())).unwrap(); - } - ); + // obtain the validator_id to authority_id mapping + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorDiscovery(validators, tx), + )) => { + assert_eq!(relay_parent, test_state.relay_parent); + assert_eq!(validators.len(), test_state.current_and_next_group_unique_validator_count()); - // Obtain the validator groups - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorGroups(tx) - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(test_state.validator_groups.clone())).unwrap(); - } - ); + let current_validators = test_state.current_group_validator_ids(); + let next_validators = test_state.next_group_validator_ids(); - // obtain the validators per relay parent - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::Validators(tx), - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(test_state.validator_public.clone())).unwrap(); - } - ); + assert!(validators.iter().all(|v| current_validators.contains(&v) || next_validators.contains(&v))); - // obtain the validator_id to authority_id mapping - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators, tx), - )) => { - assert_eq!(relay_parent, current); - assert_eq!(validators.len(), 4); - assert!(validators.iter().all(|v| test_state.validator_public.contains(&v))); - - let result = vec![ - Some(test_state.validator_authority_id[2].clone()), - Some(test_state.validator_authority_id[0].clone()), - Some(test_state.validator_authority_id[4].clone()), - Some(test_state.validator_authority_id[1].clone()), - ]; - tx.send(Ok(result)).unwrap(); + let current_validators = test_state.current_group_validator_authority_ids(); + let next_validators = test_state.next_group_validator_authority_ids(); + + tx.send(Ok(current_validators.into_iter().chain(next_validators).map(Some).collect())).unwrap(); + } + ); + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ConnectToValidators { + connected, + .. } - ); + ) => { + DistributeCollation { + connected, + candidate, + pov_block, + } + } + ) + } - // We now should connect to our validator group. - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ConnectToValidators { - validator_ids, - mut connected, - .. - } - ) => { - assert_eq!(validator_ids.len(), 4); - assert!(validator_ids.iter().all(|id| test_state.validator_authority_id.contains(id))); + /// Connect a peer + async fn connect_peer(virtual_overseer: &mut VirtualOverseer, peer: PeerId) { + overseer_send( + virtual_overseer, + CollatorProtocolMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerConnected( + peer.clone(), + polkadot_node_network_protocol::ObservedRole::Authority, + ), + ), + ).await; + + overseer_send( + virtual_overseer, + CollatorProtocolMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange(peer, View(Default::default())), + ), + ).await; + } - let result = vec![ - (test_state.validator_authority_id[2].clone(), test_state.validator_peer_id[2].clone()), - (test_state.validator_authority_id[0].clone(), test_state.validator_peer_id[0].clone()), - (test_state.validator_authority_id[4].clone(), test_state.validator_peer_id[4].clone()), - (test_state.validator_authority_id[1].clone(), test_state.validator_peer_id[1].clone()), - ]; + /// Disconnect a peer + async fn disconnect_peer(virtual_overseer: &mut VirtualOverseer, peer: PeerId) { + overseer_send( + virtual_overseer, + CollatorProtocolMessage::NetworkBridgeUpdateV1(NetworkBridgeEvent::PeerDisconnected(peer)), + ).await; + } - result.into_iter().for_each(|r| connected.try_send(r).unwrap()); - } - ); + /// Check that the next received message is a `Declare` message. + async fn expect_declare_msg(virtual_overseer: &mut VirtualOverseer, test_state: &TestState, peer: &PeerId) { + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendCollationMessage( + to, + protocol_v1::CollationProtocol::CollatorProtocol(wire_message), + ) + ) => { + assert_eq!(to[0], *peer); + assert_matches!( + wire_message, + protocol_v1::CollatorProtocolMessage::Declare(collator_id) => { + assert_eq!(collator_id, test_state.our_collator_pair.public()); + } + ); + } + ); + } - // We declare to the connected validators that we are a collator. - // We need to catch all `Declare` messages to the validators we've - // previosly connected to. - for i in vec![2, 0, 4, 1].into_iter() { + /// Check that the next received message is a collation advertisment message. + async fn expect_advertise_collation_msg( + virtual_overseer: &mut VirtualOverseer, + test_state: &TestState, + peer: &PeerId, + expected_relay_parent: Hash, + ) { + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendCollationMessage( + to, + protocol_v1::CollationProtocol::CollatorProtocol(wire_message), + ) + ) => { + assert_eq!(to[0], *peer); assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendCollationMessage( - to, - protocol_v1::CollationProtocol::CollatorProtocol(wire_message), - ) + wire_message, + protocol_v1::CollatorProtocolMessage::AdvertiseCollation( + relay_parent, + collating_on, ) => { - assert_eq!(to, vec![test_state.validator_peer_id[i].clone()]); - assert_matches!( - wire_message, - protocol_v1::CollatorProtocolMessage::Declare(collator_id) => { - assert_eq!(collator_id, test_state.our_collator_pair.public()); - } - ); + assert_eq!(relay_parent, expected_relay_parent); + assert_eq!(collating_on, test_state.para_id); } ); } + ); + } + + /// Send a message that the given peer's view changed. + async fn send_peer_view_change(virtual_overseer: &mut VirtualOverseer, peer: &PeerId, hashes: Vec) { + overseer_send( + virtual_overseer, + CollatorProtocolMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange(peer.clone(), View(hashes)), + ), + ).await; + } + + #[test] + fn advertise_and_send_collation() { + let mut test_state = TestState::default(); + + test_harness(test_state.our_collator_pair.public(), |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + setup_system(&mut virtual_overseer, &test_state).await; + + let DistributeCollation { mut connected, candidate, pov_block } = + distribute_collation(&mut virtual_overseer, &test_state).await; + test_state.current_group_validator_authority_ids() + .into_iter() + .zip(test_state.current_group_validator_peer_ids()) + .for_each(|r| connected.try_send(r).unwrap()); + + // We declare to the connected validators that we are a collator. + // We need to catch all `Declare` messages to the validators we've + // previosly connected to. + for peer_id in test_state.current_group_validator_peer_ids() { + expect_declare_msg(&mut virtual_overseer, &test_state, &peer_id).await; + } + + let peer = test_state.current_group_validator_peer_ids()[0].clone(); // Send info about peer's view. - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange( - test_state.validator_peer_id[2].clone(), - View(vec![current]), - ) - ) - ).await; + send_peer_view_change(&mut virtual_overseer, &peer, vec![test_state.relay_parent]).await; // The peer is interested in a leaf that we have a collation for; // advertise it. - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendCollationMessage( - to, - protocol_v1::CollationProtocol::CollatorProtocol(wire_message), - ) - ) => { - assert_eq!(to, vec![test_state.validator_peer_id[2].clone()]); - assert_matches!( - wire_message, - protocol_v1::CollatorProtocolMessage::AdvertiseCollation( - relay_parent, - collating_on, - ) => { - assert_eq!(relay_parent, current); - assert_eq!(collating_on, test_state.chain_ids[0]); - } - ); - } - ); + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer, test_state.relay_parent).await; let request_id = 42; @@ -1124,11 +1270,11 @@ mod tests { &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( NetworkBridgeEvent::PeerMessage( - test_state.validator_peer_id[2].clone(), + peer.clone(), protocol_v1::CollatorProtocolMessage::RequestCollation( request_id, - current, - test_state.chain_ids[0], + test_state.relay_parent, + test_state.para_id, ) ) ) @@ -1143,7 +1289,7 @@ mod tests { protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) ) => { - assert_eq!(to, vec![test_state.validator_peer_id[2].clone()]); + assert_eq!(to, vec![peer]); assert_matches!( wire_message, protocol_v1::CollatorProtocolMessage::Collation(req_id, receipt, pov) => { @@ -1155,28 +1301,21 @@ mod tests { } ); - let new_head = Hash::repeat_byte(0xA); + let old_relay_parent = test_state.relay_parent; + test_state.advance_to_new_round(&mut virtual_overseer, false).await; - // Collator's view moves on. - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![new_head])), - ), - ).await; - - let request_id = 43; + let peer = test_state.validator_peer_id[2].clone(); // Re-request a collation. overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( NetworkBridgeEvent::PeerMessage( - test_state.validator_peer_id[2].clone(), + peer.clone(), protocol_v1::CollatorProtocolMessage::RequestCollation( - request_id, - current, - test_state.chain_ids[0], + 43, + old_relay_parent, + test_state.para_id, ) ) ) @@ -1184,123 +1323,25 @@ mod tests { assert!(overseer_recv_with_timeout(&mut virtual_overseer, TIMEOUT).await.is_none()); - let pov_block = PoV { - block_data: BlockData(vec![45, 46, 47]), - }; - - let pov_hash = pov_block.hash(); - let current = Hash::repeat_byte(33); - - let candidate = TestCandidateBuilder { - para_id: test_state.chain_ids[0], - relay_parent: current, - pov_hash, - ..Default::default() - }.build(); - - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![current])), - ), - ).await; + let DistributeCollation { mut connected, .. } = + distribute_collation(&mut virtual_overseer, &test_state).await; + test_state.current_group_validator_authority_ids() + .into_iter() + .zip(test_state.current_group_validator_peer_ids()) + .for_each(|r| connected.try_send(r).unwrap()); // Send info about peer's view. overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( NetworkBridgeEvent::PeerViewChange( - test_state.validator_peer_id[2].clone(), - View(vec![current]), + peer.clone(), + View(vec![test_state.relay_parent]), ) ) ).await; - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::DistributeCollation(candidate.clone(), pov_block.clone()), - ).await; - - // obtain the availability cores. - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::AvailabilityCores(tx) - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(test_state.availability_cores.clone())).unwrap(); - } - ); - - // Obtain the validator groups - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorGroups(tx) - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(test_state.validator_groups.clone())).unwrap(); - } - ); - - // obtain the validators per relay parent - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::Validators(tx), - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(test_state.validator_public.clone())).unwrap(); - } - ); - - // The peer is interested in a leaf that we have a collation for; - // advertise it. - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendCollationMessage( - to, - protocol_v1::CollationProtocol::CollatorProtocol(wire_message), - ) - ) => { - assert_eq!(to, vec![test_state.validator_peer_id[2].clone()]); - assert_matches!( - wire_message, - protocol_v1::CollatorProtocolMessage::AdvertiseCollation( - relay_parent, - collating_on, - ) => { - assert_eq!(relay_parent, current); - assert_eq!(collating_on, test_state.chain_ids[0]); - } - ); - } - ); - - // obtain the validator_id to authority_id mapping - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators, tx), - )) => { - assert_eq!(relay_parent, current); - assert_eq!(validators.len(), 4); - assert!(validators.iter().all(|p| test_state.validator_public.contains(p))); - - let result = vec![ - Some(test_state.validator_authority_id[2].clone()), - Some(test_state.validator_authority_id[0].clone()), - Some(test_state.validator_authority_id[4].clone()), - Some(test_state.validator_authority_id[1].clone()), - ]; - tx.send(Ok(result)).unwrap(); - } - ); + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer, test_state.relay_parent).await; }); } @@ -1316,148 +1357,132 @@ mod tests { let peer = test_state.validator_peer_id[0].clone(); let validator_id = test_state.validator_authority_id[0].clone(); - // Setup the system correctly - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::CollateOn(test_state.chain_ids[0]), - ).await; + setup_system(&mut virtual_overseer, &test_state).await; - overseer_signal( - &mut virtual_overseer, - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![test_state.relay_parent], - deactivated: smallvec![], - }), - ).await; + // A validator connected to us + connect_peer(&mut virtual_overseer, peer.clone()).await; - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])), - ), - ).await; + let mut connected = distribute_collation(&mut virtual_overseer, &test_state).await.connected; + connected.try_send((validator_id, peer.clone())).unwrap(); + + expect_declare_msg(&mut virtual_overseer, &test_state, &peer).await; + }) + } + + #[test] + fn collations_are_only_advertised_to_validators_with_correct_view() { + let test_state = TestState::default(); + + test_harness(test_state.our_collator_pair.public(), |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let peer = test_state.current_group_validator_peer_ids()[0].clone(); + let validator_id = test_state.current_group_validator_authority_ids()[0].clone(); + + let peer2 = test_state.current_group_validator_peer_ids()[1].clone(); + let validator_id2 = test_state.current_group_validator_authority_ids()[1].clone(); + + setup_system(&mut virtual_overseer, &test_state).await; // A validator connected to us - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerConnected(peer.clone(), ObservedRole::Authority), - ), - ).await; + connect_peer(&mut virtual_overseer, peer.clone()).await; - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), - ), - ).await; + // Connect the second validator + connect_peer(&mut virtual_overseer, peer2.clone()).await; - // Now we want to distribute a PoVBlock - let pov_block = PoV { - block_data: BlockData(vec![42, 43, 44]), - }; + // And let it tell us that it is has the same view. + send_peer_view_change(&mut virtual_overseer, &peer2, vec![test_state.relay_parent]).await; - let pov_hash = pov_block.hash(); + let mut connected = distribute_collation(&mut virtual_overseer, &test_state).await.connected; + connected.try_send((validator_id, peer.clone())).unwrap(); + connected.try_send((validator_id2, peer2.clone())).unwrap(); - let candidate = TestCandidateBuilder { - para_id: test_state.chain_ids[0], - relay_parent: test_state.relay_parent, - pov_hash, - ..Default::default() - }.build(); + expect_declare_msg(&mut virtual_overseer, &test_state, &peer).await; + expect_declare_msg(&mut virtual_overseer, &test_state, &peer2).await; - overseer_send( - &mut virtual_overseer, - CollatorProtocolMessage::DistributeCollation(candidate.clone(), pov_block.clone()), - ).await; + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer2, test_state.relay_parent).await; - // obtain the availability cores. - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::AvailabilityCores(tx) - )) => { - assert_eq!(relay_parent, test_state.relay_parent); - tx.send(Ok(test_state.availability_cores.clone())).unwrap(); - } - ); + // The other validator announces that it changed its view. + send_peer_view_change(&mut virtual_overseer, &peer, vec![test_state.relay_parent]).await; - // Obtain the validator groups - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorGroups(tx) - )) => { - assert_eq!(relay_parent, test_state.relay_parent); - tx.send(Ok(test_state.validator_groups.clone())).unwrap(); - } - ); + // After changing the view we should receive the advertisement + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer, test_state.relay_parent).await; + }) + } - // obtain the validators per relay parent - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::Validators(tx), - )) => { - assert_eq!(relay_parent, test_state.relay_parent); - tx.send(Ok(test_state.validator_public.clone())).unwrap(); - } - ); + #[test] + fn collate_on_two_different_relay_chain_blocks() { + let mut test_state = TestState::default(); - // obtain the validator_id to authority_id mapping - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators, tx), - )) => { - assert_eq!(relay_parent, test_state.relay_parent); - assert_eq!(validators.len(), 4); - assert!(validators.iter().all(|v| test_state.validator_public.contains(&v))); - - let result = vec![ - Some(test_state.validator_authority_id[2].clone()), - Some(test_state.validator_authority_id[0].clone()), - Some(test_state.validator_authority_id[4].clone()), - Some(test_state.validator_authority_id[1].clone()), - ]; - tx.send(Ok(result)).unwrap(); - } - ); + test_harness(test_state.our_collator_pair.public(), |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ConnectToValidators { - mut connected, - .. - } - ) => { - connected.try_send((validator_id, peer.clone())).unwrap(); - } - ); + let peer = test_state.current_group_validator_peer_ids()[0].clone(); + let validator_id = test_state.current_group_validator_authority_ids()[0].clone(); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendCollationMessage( - peer_id, - msg, - ) - ) => { - assert_matches!( - msg, - protocol_v1::CollationProtocol::CollatorProtocol( - protocol_v1::CollatorProtocolMessage::Declare(collator_id), - ) if collator_id == test_state.our_collator_pair.public() - ); + let peer2 = test_state.current_group_validator_peer_ids()[1].clone(); + let validator_id2 = test_state.current_group_validator_authority_ids()[1].clone(); - assert_eq!(peer, peer_id[0]); - } - ); + setup_system(&mut virtual_overseer, &test_state).await; + + // A validator connected to us + connect_peer(&mut virtual_overseer, peer.clone()).await; + + // Connect the second validator + connect_peer(&mut virtual_overseer, peer2.clone()).await; + + let mut connected = distribute_collation(&mut virtual_overseer, &test_state).await.connected; + connected.try_send((validator_id.clone(), peer.clone())).unwrap(); + connected.try_send((validator_id2.clone(), peer2.clone())).unwrap(); + + expect_declare_msg(&mut virtual_overseer, &test_state, &peer).await; + expect_declare_msg(&mut virtual_overseer, &test_state, &peer2).await; + + let old_relay_parent = test_state.relay_parent; + + // Advance to a new round, while informing the subsystem that the old and the new relay parent are active. + test_state.advance_to_new_round(&mut virtual_overseer, true).await; + + let mut connected = distribute_collation(&mut virtual_overseer, &test_state).await.connected; + connected.try_send((validator_id, peer.clone())).unwrap(); + connected.try_send((validator_id2, peer2.clone())).unwrap(); + + send_peer_view_change(&mut virtual_overseer, &peer, vec![old_relay_parent]).await; + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer, old_relay_parent).await; + + send_peer_view_change(&mut virtual_overseer, &peer2, vec![test_state.relay_parent]).await; + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer2, test_state.relay_parent).await; + }) + } + + #[test] + fn validator_reconnect_does_not_advertise_a_second_time() { + let test_state = TestState::default(); + + test_harness(test_state.our_collator_pair.public(), |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let peer = test_state.current_group_validator_peer_ids()[0].clone(); + let validator_id = test_state.current_group_validator_authority_ids()[0].clone(); + + setup_system(&mut virtual_overseer, &test_state).await; + + // A validator connected to us + connect_peer(&mut virtual_overseer, peer.clone()).await; + + let mut connected = distribute_collation(&mut virtual_overseer, &test_state).await.connected; + connected.try_send((validator_id.clone(), peer.clone())).unwrap(); + + expect_declare_msg(&mut virtual_overseer, &test_state, &peer).await; + send_peer_view_change(&mut virtual_overseer, &peer, vec![test_state.relay_parent]).await; + expect_advertise_collation_msg(&mut virtual_overseer, &test_state, &peer, test_state.relay_parent).await; + + // Disconnect and reconnect directly + disconnect_peer(&mut virtual_overseer, peer.clone()).await; + connect_peer(&mut virtual_overseer, peer.clone()).await; + send_peer_view_change(&mut virtual_overseer, &peer, vec![test_state.relay_parent]).await; + + assert!(overseer_recv_with_timeout(&mut virtual_overseer, TIMEOUT).await.is_none()); }) } } diff --git a/node/network/collator-protocol/src/lib.rs b/node/network/collator-protocol/src/lib.rs index 5909c0b8e6..73ed2c956b 100644 --- a/node/network/collator-protocol/src/lib.rs +++ b/node/network/collator-protocol/src/lib.rs @@ -18,6 +18,7 @@ //! This subsystem implements both sides of the collator protocol. #![deny(missing_docs, unused_crate_dependencies)] +#![recursion_limit="256"] use std::time::Duration; use futures::{channel::oneshot, FutureExt, TryFutureExt}; -- GitLab From 7ac0353728611643d1e807eb7563e6e00cd11260 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Nov 2020 08:28:21 +0000 Subject: [PATCH 034/203] Bump async-trait from 0.1.41 to 0.1.42 (#1996) Bumps [async-trait](https://github.com/dtolnay/async-trait) from 0.1.41 to 0.1.42. - [Release notes](https://github.com/dtolnay/async-trait/releases) - [Commits](https://github.com/dtolnay/async-trait/compare/0.1.41...0.1.42) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/network/bridge/Cargo.toml | 2 +- node/overseer/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 4 ++-- node/subsystem/Cargo.toml | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b30158b0b1..befb282da1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -333,9 +333,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0" +checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 4bb6448d44..ab15cb9e98 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -async-trait = "0.1.41" +async-trait = "0.1.42" futures = "0.3.8" tracing = "0.1.21" tracing-futures = "0.2.4" diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index 145cfa0e13..968b8d0134 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -15,7 +15,7 @@ client = { package = "sc-client-api", git = "https://github.com/paritytech/subst polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../primitives" } -async-trait = "0.1.41" +async-trait = "0.1.42" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 8202287592..21cd3a4d56 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] -async-trait = "0.1.41" +async-trait = "0.1.42" futures = "0.3.8" futures-timer = "3.0.2" tracing = "0.1.21" diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 0b9654f5c9..0a1dfc0df3 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] -async-trait = "0.1.41" +async-trait = "0.1.42" futures = "0.3.8" futures-timer = "3.0.2" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } @@ -29,7 +29,7 @@ substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate [dev-dependencies] assert_matches = "1.4.0" -async-trait = "0.1.41" +async-trait = "0.1.42" env_logger = "0.8.2" futures = { version = "0.3.8", features = ["thread-pool"] } log = "0.4.11" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index c181354b28..07fa439c0a 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] -async-trait = "0.1.41" +async-trait = "0.1.42" derive_more = "0.99.11" futures = "0.3.8" futures-timer = "3.0.2" @@ -27,7 +27,7 @@ thiserror = "1.0.22" [dev-dependencies] assert_matches = "1.4.0" -async-trait = "0.1.41" +async-trait = "0.1.42" futures = { version = "0.3.8", features = ["thread-pool"] } parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } -- GitLab From ffedeab4f0097107240bec74cf376a79a5240181 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Mon, 23 Nov 2020 12:42:14 +0100 Subject: [PATCH 035/203] overseer: send_msg should not return an error (#1995) * send_message should not return an error * Apply suggestions from code review Co-authored-by: Peter Goodspeed-Niklaus * s/send_logging_error/send_and_log_error Co-authored-by: Peter Goodspeed-Niklaus --- node/collation-generation/src/lib.rs | 5 +- node/core/av-store/src/lib.rs | 4 +- node/core/candidate-validation/src/lib.rs | 2 +- node/core/proposer/src/lib.rs | 4 +- .../availability-distribution/src/lib.rs | 120 +++++++----------- node/network/bitfield-distribution/src/lib.rs | 84 ++++++------ node/network/bridge/src/lib.rs | 64 ++-------- .../collator-protocol/src/collator_side.rs | 54 +++----- node/network/collator-protocol/src/lib.rs | 6 +- .../collator-protocol/src/validator_side.rs | 74 ++++------- node/network/pov-distribution/src/lib.rs | 88 ++++++------- node/network/pov-distribution/src/tests.rs | 28 ++-- .../network/statement-distribution/src/lib.rs | 89 ++++++------- node/overseer/examples/minimal-example.rs | 2 +- node/overseer/src/lib.rs | 119 ++++++++++------- node/subsystem-test-helpers/src/lib.rs | 9 +- node/subsystem-util/src/lib.rs | 20 +-- .../subsystem-util/src/validator_discovery.rs | 4 +- node/subsystem/src/lib.rs | 4 +- node/test/service/src/lib.rs | 6 +- .../adder/collator/src/main.rs | 6 +- 21 files changed, 330 insertions(+), 462 deletions(-) diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index ad28b66f07..b948f3d3c8 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -95,10 +95,7 @@ impl CollationGenerationSubsystem { }, msg = receiver.next().fuse() => { if let Some(msg) = msg { - if let Err(err) = ctx.send_message(msg).await { - tracing::warn!(target: LOG_TARGET, err = ?err, "failed to forward message to overseer"); - break; - } + ctx.send_message(msg).await; } }, } diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 8c20e351f9..72c1d9cb4c 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -690,7 +690,7 @@ where RuntimeApiRequest::CandidateEvents(tx), )); - ctx.send_message(msg.into()).await?; + ctx.send_message(msg.into()).await; Ok(rx.await??) } @@ -858,7 +858,7 @@ where { let (tx, rx) = oneshot::channel(); - ctx.send_message(AllMessages::ChainApi(ChainApiMessage::BlockNumber(block_hash, tx))).await?; + ctx.send_message(AllMessages::ChainApi(ChainApiMessage::BlockNumber(block_hash, tx))).await; Ok(rx.await??.map(|number| number).unwrap_or_default()) } diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 011b156ffd..103e27ecd8 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -171,7 +171,7 @@ async fn runtime_api_request( relay_parent, request, )) - ).await?; + ).await; receiver.await.map_err(Into::into) } diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index 82507bdbf8..813d937a70 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -143,13 +143,13 @@ where let (sender, receiver) = futures::channel::oneshot::channel(); - overseer.wait_for_activation(parent_header_hash, sender).await?; + overseer.wait_for_activation(parent_header_hash, sender).await; receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)??; let (sender, receiver) = futures::channel::oneshot::channel(); overseer.send_msg(AllMessages::Provisioner( ProvisionerMessage::RequestInherentData(parent_header_hash, sender), - )).await?; + )).await; let mut timeout = futures_timer::Delay::new(PROPOSE_TIMEOUT).fuse(); diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 920075e042..53b98826d0 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -56,62 +56,40 @@ const LOG_TARGET: &'static str = "availability_distribution"; #[derive(Debug, Error)] enum Error { - #[error("Sending PendingAvailability query failed")] - QueryPendingAvailabilitySendQuery(#[source] SubsystemError), #[error("Response channel to obtain PendingAvailability failed")] QueryPendingAvailabilityResponseChannel(#[source] oneshot::Canceled), #[error("RuntimeAPI to obtain PendingAvailability failed")] QueryPendingAvailability(#[source] RuntimeApiError), - #[error("Sending StoreChunk query failed")] - StoreChunkSendQuery(#[source] SubsystemError), #[error("Response channel to obtain StoreChunk failed")] StoreChunkResponseChannel(#[source] oneshot::Canceled), - #[error("Sending QueryChunk query failed")] - QueryChunkSendQuery(#[source] SubsystemError), #[error("Response channel to obtain QueryChunk failed")] QueryChunkResponseChannel(#[source] oneshot::Canceled), - #[error("Sending QueryAncestors query failed")] - QueryAncestorsSendQuery(#[source] SubsystemError), #[error("Response channel to obtain QueryAncestors failed")] QueryAncestorsResponseChannel(#[source] oneshot::Canceled), #[error("RuntimeAPI to obtain QueryAncestors failed")] QueryAncestors(#[source] ChainApiError), - #[error("Sending QuerySession query failed")] - QuerySessionSendQuery(#[source] SubsystemError), #[error("Response channel to obtain QuerySession failed")] QuerySessionResponseChannel(#[source] oneshot::Canceled), #[error("RuntimeAPI to obtain QuerySession failed")] QuerySession(#[source] RuntimeApiError), - #[error("Sending QueryValidators query failed")] - QueryValidatorsSendQuery(#[source] SubsystemError), #[error("Response channel to obtain QueryValidators failed")] QueryValidatorsResponseChannel(#[source] oneshot::Canceled), #[error("RuntimeAPI to obtain QueryValidators failed")] QueryValidators(#[source] RuntimeApiError), - #[error("Sending AvailabilityCores query failed")] - AvailabilityCoresSendQuery(#[source] SubsystemError), #[error("Response channel to obtain AvailabilityCores failed")] AvailabilityCoresResponseChannel(#[source] oneshot::Canceled), #[error("RuntimeAPI to obtain AvailabilityCores failed")] AvailabilityCores(#[source] RuntimeApiError), - #[error("Sending AvailabilityCores query failed")] - QueryAvailabilitySendQuery(#[source] SubsystemError), #[error("Response channel to obtain AvailabilityCores failed")] QueryAvailabilityResponseChannel(#[source] oneshot::Canceled), - #[error("Sending out a peer report message")] - ReportPeerMessageSend(#[source] SubsystemError), - - #[error("Sending a gossip message")] - TrackedGossipMessage(#[source] SubsystemError), - #[error("Receive channel closed")] IncomingMessageChannel(#[source] SubsystemError), } @@ -290,7 +268,7 @@ impl ProtocolState { } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn remove_relay_parent(&mut self, relay_parent: &Hash) -> Result<()> { + fn remove_relay_parent(&mut self, relay_parent: &Hash) { // we might be ancestor of some other relay_parent if let Some(ref mut descendants) = self.ancestry.get_mut(relay_parent) { // if we were the last user, and it is @@ -324,7 +302,6 @@ impl ProtocolState { } } } - Ok(()) } } @@ -351,7 +328,7 @@ where state.peer_views.remove(&peerid); } NetworkBridgeEvent::PeerViewChange(peerid, view) => { - handle_peer_view_change(ctx, state, peerid, view, metrics).await?; + handle_peer_view_change(ctx, state, peerid, view, metrics).await; } NetworkBridgeEvent::OurViewChange(view) => { handle_our_view_change(ctx, keystore, state, view, metrics).await?; @@ -472,14 +449,14 @@ where }; send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message) - .await?; + .await; } } // cleanup the removed relay parents and their states let removed = old_view.difference(&view).collect::>(); for removed in removed { - state.remove_relay_parent(&removed)?; + state.remove_relay_parent(&removed); } Ok(()) } @@ -491,7 +468,7 @@ async fn send_tracked_gossip_message_to_peers( metrics: &Metrics, peers: Vec, message: AvailabilityGossipMessage, -) -> Result<()> +) where Context: SubsystemContext, { @@ -506,7 +483,7 @@ async fn send_tracked_gossip_messages_to_peer( metrics: &Metrics, peer: PeerId, message_iter: impl IntoIterator, -) -> Result<()> +) where Context: SubsystemContext, { @@ -521,12 +498,12 @@ async fn send_tracked_gossip_messages_to_peers( metrics: &Metrics, peers: Vec, message_iter: impl IntoIterator, -) -> Result<()> +) where Context: SubsystemContext, { if peers.is_empty() { - return Ok(()); + return; } for message in message_iter { for peer in peers.iter() { @@ -553,13 +530,10 @@ where protocol_v1::ValidationProtocol::AvailabilityDistribution(wire_message), ), )) - .await - .map_err(|e| Error::TrackedGossipMessage(e))?; + .await; metrics.on_chunk_distributed(); } - - Ok(()) } // Send the difference between two views which were not sent @@ -571,7 +545,7 @@ async fn handle_peer_view_change( origin: PeerId, view: View, metrics: &Metrics, -) -> Result<()> +) where Context: SubsystemContext, { @@ -616,9 +590,8 @@ where .collect::>(); send_tracked_gossip_messages_to_peer(ctx, per_candidate, metrics, origin.clone(), messages) - .await?; + .await; } - Ok(()) } /// Obtain the first key which has a signing key. @@ -662,7 +635,8 @@ where let live_candidate = if let Some(live_candidate) = live_candidates.get(&message.candidate_hash) { live_candidate } else { - return modify_reputation(ctx, origin, COST_NOT_A_LIVE_CANDIDATE).await; + modify_reputation(ctx, origin, COST_NOT_A_LIVE_CANDIDATE).await; + return Ok(()); }; // check the merkle proof @@ -674,12 +648,14 @@ where ) { hash } else { - return modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + return Ok(()); }; let erasure_chunk_hash = BlakeTwo256::hash(&message.erasure_chunk.chunk); if anticipated_hash != erasure_chunk_hash { - return modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + return Ok(()); } // an internal unique identifier of this message @@ -695,7 +671,8 @@ where .entry(origin.clone()) .or_default(); if received_set.contains(&message_id) { - return modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; + modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; + return Ok(()); } else { received_set.insert(message_id.clone()); } @@ -707,9 +684,9 @@ where .insert(message_id.1, message.clone()) .is_some() { - modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await?; + modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await; } else { - modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await?; + modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await; // save the chunk for our index if let Some(validator_index) = per_candidate.validator_index { @@ -762,7 +739,8 @@ where .collect::>(); // gossip that message to interested peers - send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message).await + send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message).await; + Ok(()) } /// The bitfield distribution subsystem. @@ -947,8 +925,7 @@ where relay_parent, RuntimeApiRequest::AvailabilityCores(tx), ))) - .await - .map_err(|e| Error::AvailabilityCoresSendQuery(e))?; + .await; let all_para_ids: Vec<_> = rx .await @@ -970,7 +947,7 @@ where /// Modify the reputation of a peer based on its behavior. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn modify_reputation(ctx: &mut Context, peer: PeerId, rep: Rep) -> Result<()> +async fn modify_reputation(ctx: &mut Context, peer: PeerId, rep: Rep) where Context: SubsystemContext, { @@ -982,9 +959,7 @@ where ); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ReportPeer(peer, rep), - )) - .await - .map_err(|e| Error::ReportPeerMessageSend(e)) + )).await; } /// Query the proof of validity for a particular candidate hash. @@ -996,9 +971,8 @@ where let (tx, rx) = oneshot::channel(); ctx.send_message(AllMessages::AvailabilityStore( AvailabilityStoreMessage::QueryDataAvailability(candidate_hash, tx), - )) - .await - .map_err(|e| Error::QueryAvailabilitySendQuery(e))?; + )).await; + rx.await .map_err(|e| Error::QueryAvailabilityResponseChannel(e)) } @@ -1015,9 +989,8 @@ where let (tx, rx) = oneshot::channel(); ctx.send_message(AllMessages::AvailabilityStore( AvailabilityStoreMessage::QueryChunk(candidate_hash, validator_index, tx), - )) - .await - .map_err(|e| Error::QueryChunkSendQuery(e))?; + )).await; + rx.await.map_err(|e| Error::QueryChunkResponseChannel(e)) } @@ -1033,17 +1006,15 @@ where Context: SubsystemContext, { let (tx, rx) = oneshot::channel(); - ctx.send_message( - AllMessages::AvailabilityStore( - AvailabilityStoreMessage::StoreChunk { - candidate_hash, - relay_parent, - validator_index, - chunk: erasure_chunk, - tx, - } - )).await - .map_err(|e| Error::StoreChunkSendQuery(e))?; + ctx.send_message(AllMessages::AvailabilityStore( + AvailabilityStoreMessage::StoreChunk { + candidate_hash, + relay_parent, + validator_index, + chunk: erasure_chunk, + tx, + } + )).await; rx.await.map_err(|e| Error::StoreChunkResponseChannel(e)) } @@ -1062,9 +1033,7 @@ where ctx.send_message(AllMessages::RuntimeApi(RuntimeApiMessage::Request( relay_parent, RuntimeApiRequest::CandidatePendingAvailability(para, tx), - ))) - .await - .map_err(|e| Error::QueryPendingAvailabilitySendQuery(e))?; + ))).await; rx.await .map_err(|e| Error::QueryPendingAvailabilityResponseChannel(e))? @@ -1087,8 +1056,7 @@ where )); ctx.send_message(query_validators) - .await - .map_err(|e| Error::QueryValidatorsSendQuery(e))?; + .await; rx.await .map_err(|e| Error::QueryValidatorsResponseChannel(e))? .map_err(|e| Error::QueryValidators(e)) @@ -1112,8 +1080,7 @@ where }); ctx.send_message(query_ancestors) - .await - .map_err(|e| Error::QueryAncestorsSendQuery(e))?; + .await; rx.await .map_err(|e| Error::QueryAncestorsResponseChannel(e))? .map_err(|e| Error::QueryAncestors(e)) @@ -1135,8 +1102,7 @@ where )); ctx.send_message(query_session_idx_for_child) - .await - .map_err(|e| Error::QuerySessionSendQuery(e))?; + .await; rx.await .map_err(|e| Error::QuerySessionResponseChannel(e))? .map_err(|e| Error::QuerySession(e)) diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 680c450bd5..2925953546 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -163,24 +163,20 @@ impl BitfieldDistribution { msg: BitfieldDistributionMessage::DistributeBitfield(hash, signed_availability), } => { tracing::trace!(target: LOG_TARGET, "Processing DistributeBitfield"); - if let Err(err) = handle_bitfield_distribution( + handle_bitfield_distribution( &mut ctx, &mut state, &self.metrics, hash, signed_availability, - ).await { - tracing::warn!(target: LOG_TARGET, err = ?err, "Failed to reply to `DistributeBitfield` message"); - } + ).await; } FromOverseer::Communication { msg: BitfieldDistributionMessage::NetworkBridgeUpdateV1(event), } => { tracing::trace!(target: LOG_TARGET, "Processing NetworkMessage"); // a network message was received - if let Err(e) = handle_network_msg(&mut ctx, &mut state, &self.metrics, event).await { - tracing::warn!(target: LOG_TARGET, err = ?e, "Failed to handle incoming network messages"); - } + handle_network_msg(&mut ctx, &mut state, &self.metrics, event).await; } FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated })) => { let _timer = self.metrics.time_active_leaves_update(); @@ -234,7 +230,7 @@ async fn modify_reputation( ctx: &mut Context, peer: PeerId, rep: ReputationChange, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { @@ -255,7 +251,7 @@ async fn handle_bitfield_distribution( metrics: &Metrics, relay_parent: Hash, signed_availability: SignedAvailabilityBitfield, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { @@ -272,12 +268,12 @@ where "Not supposed to work on relay parent related data", ); - return Ok(()); + return; }; let validator_set = &job_data.validator_set; if validator_set.is_empty() { tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "validator set is empty"); - return Ok(()); + return; } let validator_index = signed_availability.validator_index() as usize; @@ -285,7 +281,7 @@ where validator.clone() } else { tracing::trace!(target: LOG_TARGET, "Could not find a validator for index {}", validator_index); - return Ok(()); + return; }; let peer_views = &mut state.peer_views; @@ -294,11 +290,9 @@ where signed_availability, }; - relay_message(ctx, job_data, peer_views, validator, msg).await?; + relay_message(ctx, job_data, peer_views, validator, msg).await; metrics.on_own_bitfield_gossipped(); - - Ok(()) } /// Distribute a given valid and signature checked bitfield message. @@ -311,7 +305,7 @@ async fn relay_message( peer_views: &mut HashMap, validator: ValidatorId, message: BitfieldGossipMessage, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { @@ -325,7 +319,7 @@ where ), ), )) - .await?; + .await; let message_sent_to_peer = &mut (job_data.message_sent_to_peer); @@ -361,9 +355,8 @@ where message.into_validation_protocol(), ), )) - .await?; + .await; } - Ok(()) } /// Handle an incoming message from a peer. @@ -374,13 +367,14 @@ async fn process_incoming_peer_message( metrics: &Metrics, origin: PeerId, message: BitfieldGossipMessage, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { // we don't care about this, not part of our view. if !state.view.contains(&message.relay_parent) { - return modify_reputation(ctx, origin, COST_NOT_IN_VIEW).await; + modify_reputation(ctx, origin, COST_NOT_IN_VIEW).await; + return; } // Ignore anything the overseer did not tell this subsystem to work on. @@ -388,7 +382,8 @@ where let job_data: &mut _ = if let Some(ref mut job_data) = job_data { job_data } else { - return modify_reputation(ctx, origin, COST_NOT_IN_VIEW).await; + modify_reputation(ctx, origin, COST_NOT_IN_VIEW).await; + return; }; let validator_set = &job_data.validator_set; @@ -398,7 +393,8 @@ where relay_parent = %message.relay_parent, "Validator set is empty", ); - return modify_reputation(ctx, origin, COST_MISSING_PEER_SESSION_KEY).await; + modify_reputation(ctx, origin, COST_MISSING_PEER_SESSION_KEY).await; + return; } // Use the (untrusted) validator index provided by the signed payload @@ -408,7 +404,8 @@ where let validator = if let Some(validator) = validator_set.get(validator_index) { validator.clone() } else { - return modify_reputation(ctx, origin, COST_VALIDATOR_INDEX_INVALID).await; + modify_reputation(ctx, origin, COST_VALIDATOR_INDEX_INVALID).await; + return; }; // Check if the peer already sent us a message for the validator denoted in the message earlier. @@ -422,7 +419,8 @@ where if !received_set.contains(&validator) { received_set.insert(validator.clone()); } else { - return modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; + modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; + return; }; if message @@ -440,12 +438,12 @@ where validator_index, "already received a message for validator", ); - modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await?; - return Ok(()); + modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await; + return; } one_per_validator.insert(validator.clone(), message.clone()); - relay_message(ctx, job_data, &mut state.peer_views, validator, message).await?; + relay_message(ctx, job_data, &mut state.peer_views, validator, message).await; modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await } else { @@ -461,7 +459,7 @@ async fn handle_network_msg( state: &mut ProtocolState, metrics: &Metrics, bridge_message: NetworkBridgeEvent, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { @@ -477,10 +475,10 @@ where state.peer_views.remove(&peerid); } NetworkBridgeEvent::PeerViewChange(peerid, view) => { - handle_peer_view_change(ctx, state, peerid, view).await?; + handle_peer_view_change(ctx, state, peerid, view).await; } NetworkBridgeEvent::OurViewChange(view) => { - handle_our_view_change(state, view)?; + handle_our_view_change(state, view); } NetworkBridgeEvent::PeerMessage(remote, message) => { match message { @@ -490,17 +488,16 @@ where relay_parent, signed_availability: bitfield, }; - process_incoming_peer_message(ctx, state, metrics, remote, gossiped_bitfield).await?; + process_incoming_peer_message(ctx, state, metrics, remote, gossiped_bitfield).await; } } } } - Ok(()) } /// Handle the changes necassary when our view changes. #[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] -fn handle_our_view_change(state: &mut ProtocolState, view: View) -> SubsystemResult<()> { +fn handle_our_view_change(state: &mut ProtocolState, view: View) { let old_view = std::mem::replace(&mut (state.view), view); for added in state.view.difference(&old_view) { @@ -517,7 +514,6 @@ fn handle_our_view_change(state: &mut ProtocolState, view: View) -> SubsystemRes // cleanup relay parents we are not interested in any more let _ = state.per_relay_parent.remove(&removed); } - Ok(()) } @@ -529,7 +525,7 @@ async fn handle_peer_view_change( state: &mut ProtocolState, origin: PeerId, view: View, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { @@ -567,10 +563,8 @@ where .collect(); for (validator, message) in delta_set.into_iter() { - send_tracked_gossip_message(ctx, state, origin.clone(), validator, message).await?; + send_tracked_gossip_message(ctx, state, origin.clone(), validator, message).await; } - - Ok(()) } /// Send a gossip message and track it in the per relay parent data. @@ -581,14 +575,14 @@ async fn send_tracked_gossip_message( dest: PeerId, validator: ValidatorId, message: BitfieldGossipMessage, -) -> SubsystemResult<()> +) where Context: SubsystemContext, { let job_data = if let Some(job_data) = state.per_relay_parent.get_mut(&message.relay_parent) { job_data } else { - return Ok(()); + return; }; let message_sent_to_peer = &mut (job_data.message_sent_to_peer); @@ -602,10 +596,7 @@ where vec![dest], message.into_validation_protocol(), ), - )) - .await?; - - Ok(()) + )).await; } impl Subsystem for BitfieldDistribution @@ -647,7 +638,7 @@ where )); ctx.send_messages(std::iter::once(query_validators).chain(std::iter::once(query_signing))) - .await?; + .await; match (validators_rx.await?, session_rx.await?) { (Ok(v), Ok(s)) => Ok(Some(( @@ -788,7 +779,6 @@ mod test { .timeout(Duration::from_millis(10)) .await .expect("10ms is more than enough for sending messages.") - .expect("Error values should really never occur.") }; } diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index ed58cd9097..7e05595d0b 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -374,21 +374,15 @@ async fn update_view( WireMessage::ViewUpdate(new_view.clone()), ).await?; - if let Err(e) = dispatch_validation_event_to_all( + dispatch_validation_event_to_all( NetworkBridgeEvent::OurViewChange(new_view.clone()), ctx, - ).await { - tracing::warn!(target: LOG_TARGET, err = ?e, "Aborting - Failure to dispatch messages to overseer"); - return Err(e) - } + ).await; - if let Err(e) = dispatch_collation_event_to_all( + dispatch_collation_event_to_all( NetworkBridgeEvent::OurViewChange(new_view.clone()), ctx, - ).await { - tracing::warn!(target: LOG_TARGET, err = ?e, "Aborting - Failure to dispatch messages to overseer"); - return Err(e) - } + ).await; Ok(()) } @@ -507,14 +501,14 @@ async fn send_message( async fn dispatch_validation_event_to_all( event: NetworkBridgeEvent, ctx: &mut impl SubsystemContext, -) -> SubsystemResult<()> { +) { dispatch_validation_events_to_all(std::iter::once(event), ctx).await } async fn dispatch_collation_event_to_all( event: NetworkBridgeEvent, ctx: &mut impl SubsystemContext, -) -> SubsystemResult<()> { +) { dispatch_collation_events_to_all(std::iter::once(event), ctx).await } @@ -522,7 +516,7 @@ async fn dispatch_collation_event_to_all( async fn dispatch_validation_events_to_all( events: I, ctx: &mut impl SubsystemContext, -) -> SubsystemResult<()> +) where I: IntoIterator>, I::IntoIter: Send, @@ -554,7 +548,7 @@ async fn dispatch_validation_events_to_all( async fn dispatch_collation_events_to_all( events: I, ctx: &mut impl SubsystemContext, -) -> SubsystemResult<()> +) where I: IntoIterator>, I::IntoIter: Send, @@ -665,7 +659,7 @@ where view: View(Vec::new()), }); - let res = match peer_set { + match peer_set { PeerSet::Validation => dispatch_validation_events_to_all( vec![ NetworkBridgeEvent::PeerConnected(peer.clone(), role), @@ -686,11 +680,6 @@ where ], &mut ctx, ).await, - }; - - if let Err(e) = res { - tracing::warn!(err = ?e, "Aborting - Failure to dispatch messages to overseer"); - return Err(e); } } } @@ -704,7 +693,7 @@ where validator_discovery.on_peer_disconnected(&peer); if peer_map.remove(&peer).is_some() { - let res = match peer_set { + match peer_set { PeerSet::Validation => dispatch_validation_event_to_all( NetworkBridgeEvent::PeerDisconnected(peer), &mut ctx, @@ -713,15 +702,6 @@ where NetworkBridgeEvent::PeerDisconnected(peer), &mut ctx, ).await, - }; - - if let Err(e) = res { - tracing::warn!( - target: LOG_TARGET, - err = ?e, - "Aborting - Failure to dispatch messages to overseer", - ); - return Err(e) } } }, @@ -734,17 +714,7 @@ where &mut network_service, ).await?; - if let Err(e) = dispatch_validation_events_to_all( - events, - &mut ctx, - ).await { - tracing::warn!( - target: LOG_TARGET, - err = ?e, - "Aborting - Failure to dispatch messages to overseer", - ); - return Err(e) - } + dispatch_validation_events_to_all(events, &mut ctx).await; } if !c_messages.is_empty() { @@ -755,17 +725,7 @@ where &mut network_service, ).await?; - if let Err(e) = dispatch_collation_events_to_all( - events, - &mut ctx, - ).await { - tracing::warn!( - target: LOG_TARGET, - err = ?e, - "Aborting - Failure to dispatch messages to overseer", - ); - return Err(e) - } + dispatch_collation_events_to_all(events, &mut ctx).await; } }, } diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 784a246b8b..b0a61c66a9 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -274,7 +274,7 @@ async fn distribute_collation( "there are no validators assigned to core", ); - return Ok(()) + return Ok(()); } // Issue a discovery request for the validators of the current group and the next group. @@ -342,7 +342,7 @@ async fn declare( ctx: &mut impl SubsystemContext, state: &mut State, peer: PeerId, -) -> Result<()> { +) { let wire_message = protocol_v1::CollatorProtocolMessage::Declare(state.our_id.clone()); ctx.send_message(AllMessages::NetworkBridge( @@ -350,9 +350,7 @@ async fn declare( vec![peer], protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) - )).await?; - - Ok(()) + )).await; } /// Issue a connection request to a set of validators and @@ -385,12 +383,10 @@ async fn advertise_collation( state: &mut State, relay_parent: Hash, peer: PeerId, -) -> Result<()> { +) { let collating_on = match state.collating_on { Some(collating_on) => collating_on, - None => { - return Ok(()); - } + None => return, }; let should_advertise = state.our_validators_groups @@ -399,7 +395,7 @@ async fn advertise_collation( .unwrap_or(false); if !state.collations.contains_key(&relay_parent) || !should_advertise { - return Ok(()) + return; } let wire_message = protocol_v1::CollatorProtocolMessage::AdvertiseCollation(relay_parent, collating_on); @@ -409,15 +405,13 @@ async fn advertise_collation( vec![peer.clone()], protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) - )).await?; + )).await; if let Some(validators) = state.our_validators_groups.get_mut(&relay_parent) { validators.advertised_to_peer(&peer); } state.metrics.on_advertisment_made(); - - Ok(()) } /// The main incoming message dispatching switch. @@ -504,7 +498,7 @@ async fn send_collation( origin: PeerId, receipt: CandidateReceipt, pov: PoV, -) -> Result<()> { +) { let wire_message = protocol_v1::CollatorProtocolMessage::Collation( request_id, receipt, @@ -516,11 +510,9 @@ async fn send_collation( vec![origin], protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) - )).await?; + )).await; state.metrics.on_collation_sent(); - - Ok(()) } /// A networking messages switch. @@ -551,7 +543,7 @@ async fn handle_incoming_peer_message( Some(our_para_id) => { if our_para_id == para_id { if let Some(collation) = state.collations.get(&relay_parent).cloned() { - send_collation(ctx, state, request_id, origin, collation.0, collation.1).await?; + send_collation(ctx, state, request_id, origin, collation.0, collation.1).await; } } else { tracing::warn!( @@ -589,7 +581,7 @@ async fn handle_peer_view_change( state: &mut State, peer_id: PeerId, view: View, -) -> Result<()> { +) { let current = state.peer_views.entry(peer_id.clone()).or_default(); let added: Vec = view.difference(&*current).cloned().collect(); @@ -597,10 +589,8 @@ async fn handle_peer_view_change( *current = view; for added in added.into_iter() { - advertise_collation(ctx, state, added, peer_id.clone()).await?; + advertise_collation(ctx, state, added, peer_id.clone()).await; } - - Ok(()) } /// A validator is connected. @@ -613,11 +603,11 @@ async fn handle_validator_connected( peer_id: PeerId, validator_id: ValidatorId, relay_parent: Hash, -) -> Result<()> { +) { let not_declared = state.declared_at.insert(peer_id.clone()); if not_declared { - declare(ctx, state, peer_id.clone()).await?; + declare(ctx, state, peer_id.clone()).await; } // Store the PeerId and find out if we should advertise to this peer. @@ -630,10 +620,8 @@ async fn handle_validator_connected( }; if advertise && state.peer_interested_in_leaf(&peer_id, &relay_parent) { - advertise_collation(ctx, state, relay_parent, peer_id).await?; + advertise_collation(ctx, state, relay_parent, peer_id).await; } - - Ok(()) } /// Bridge messages switch. @@ -651,7 +639,7 @@ async fn handle_network_msg( // it should be handled here. } PeerViewChange(peer_id, view) => { - handle_peer_view_change(ctx, state, peer_id, view).await?; + handle_peer_view_change(ctx, state, peer_id, view).await; } PeerDisconnected(peer_id) => { state.peer_views.remove(&peer_id); @@ -712,19 +700,13 @@ pub(crate) async fn run( let _timer = state.metrics.time_handle_connection_request(); - if let Err(err) = handle_validator_connected( + handle_validator_connected( &mut ctx, &mut state, peer_id, validator_id, relay_parent, - ).await { - tracing::warn!( - target: LOG_TARGET, - err = ?err, - "Failed to declare our collator id", - ); - } + ).await; }, msg = ctx.recv().fuse() => match msg? { Communication { msg } => { diff --git a/node/network/collator-protocol/src/lib.rs b/node/network/collator-protocol/src/lib.rs index 73ed2c956b..3b58d9b96b 100644 --- a/node/network/collator-protocol/src/lib.rs +++ b/node/network/collator-protocol/src/lib.rs @@ -137,7 +137,7 @@ where /// Modify the reputation of a peer based on its behavior. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn modify_reputation(ctx: &mut Context, peer: PeerId, rep: Rep) -> Result<()> +async fn modify_reputation(ctx: &mut Context, peer: PeerId, rep: Rep) where Context: SubsystemContext, { @@ -150,7 +150,5 @@ where ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ReportPeer(peer, rep), - )).await?; - - Ok(()) + )).await; } diff --git a/node/network/collator-protocol/src/validator_side.rs b/node/network/collator-protocol/src/validator_side.rs index faeda6d307..3af5aba5e4 100644 --- a/node/network/collator-protocol/src/validator_side.rs +++ b/node/network/collator-protocol/src/validator_side.rs @@ -225,7 +225,7 @@ async fn fetch_collation( collator_id: CollatorId, para_id: ParaId, tx: oneshot::Sender<(CandidateReceipt, PoV)> -) -> Result<()> +) where Context: SubsystemContext { @@ -242,7 +242,7 @@ where "Failed to send collation", ); } - return Ok(()); + return; } } } @@ -262,10 +262,8 @@ where // Request the collation. // Assume it is `request_collation`'s job to check and ignore duplicate requests. if let Some(relevant_advertiser) = relevant_advertiser { - request_collation(ctx, state, relay_parent, para_id, relevant_advertiser, tx).await?; + request_collation(ctx, state, relay_parent, para_id, relevant_advertiser, tx).await; } - - Ok(()) } /// Report a collator for some malicious actions. @@ -274,7 +272,7 @@ async fn report_collator( ctx: &mut Context, state: &mut State, id: CollatorId, -) -> Result<()> +) where Context: SubsystemContext { @@ -283,11 +281,9 @@ where // is a tolerable thing to do. for (k, v) in state.known_collators.iter() { if *v == id { - modify_reputation(ctx, k.clone(), COST_REPORT_BAD).await?; + modify_reputation(ctx, k.clone(), COST_REPORT_BAD).await; } } - - Ok(()) } /// Some other subsystem has reported a collator as a good one, bump reputation. @@ -296,17 +292,15 @@ async fn note_good_collation( ctx: &mut Context, state: &mut State, id: CollatorId, -) -> Result<()> +) where Context: SubsystemContext { for (peer_id, collator_id) in state.known_collators.iter() { if id == *collator_id { - modify_reputation(ctx, peer_id.clone(), BENEFIT_NOTIFY_GOOD).await?; + modify_reputation(ctx, peer_id.clone(), BENEFIT_NOTIFY_GOOD).await; } } - - Ok(()) } /// A peer's view has changed. A number of things should be done: @@ -362,7 +356,7 @@ async fn received_collation( request_id: RequestId, receipt: CandidateReceipt, pov: PoV, -) -> Result<()> +) where Context: SubsystemContext { @@ -390,11 +384,9 @@ where // If this collation is not just a delayed one that we were expecting, // but our view has moved on, in that case modify peer's reputation. if !state.recently_removed_heads.contains(&relay_parent) { - modify_reputation(ctx, origin, COST_UNEXPECTED_MESSAGE).await?; + modify_reputation(ctx, origin, COST_UNEXPECTED_MESSAGE).await; } } - - Ok(()) } /// Request a collation from the network. @@ -411,7 +403,7 @@ async fn request_collation( para_id: ParaId, peer_id: PeerId, result: oneshot::Sender<(CandidateReceipt, PoV)>, -) -> Result<()> +) where Context: SubsystemContext { @@ -423,7 +415,7 @@ where relay_parent = %relay_parent, "collation is no longer in view", ); - return Ok(()); + return; } if state.requested_collations.contains_key(&(relay_parent, para_id.clone(), peer_id.clone())) { @@ -434,7 +426,7 @@ where relay_parent = %relay_parent, "collation has already been requested", ); - return Ok(()); + return; } let request_id = state.next_request_id; @@ -470,9 +462,7 @@ where vec![peer_id], protocol_v1::CollationProtocol::CollatorProtocol(wire_message), ) - )).await?; - - Ok(()) + )).await; } /// Notify `CandidateSelectionSubsystem` that a collation has been advertised. @@ -482,7 +472,7 @@ async fn notify_candidate_selection( collator: CollatorId, relay_parent: Hash, para_id: ParaId, -) -> Result<()> +) where Context: SubsystemContext { @@ -492,9 +482,7 @@ where para_id, collator, ) - )).await?; - - Ok(()) + )).await; } /// Networking message has been received. @@ -504,7 +492,7 @@ async fn process_incoming_peer_message( state: &mut State, origin: PeerId, msg: protocol_v1::CollatorProtocolMessage, -)-> Result<()> +) where Context: SubsystemContext { @@ -519,19 +507,17 @@ where state.advertisements.entry(origin.clone()).or_default().insert((para_id, relay_parent)); if let Some(collator) = state.known_collators.get(&origin) { - notify_candidate_selection(ctx, collator.clone(), relay_parent, para_id).await?; + notify_candidate_selection(ctx, collator.clone(), relay_parent, para_id).await; } } RequestCollation(_, _, _) => { // This is a validator side of the protocol, collation requests are not expected here. - return modify_reputation(ctx, origin, COST_UNEXPECTED_MESSAGE).await; + modify_reputation(ctx, origin, COST_UNEXPECTED_MESSAGE).await; } Collation(request_id, receipt, pov) => { - received_collation(ctx, state, origin, request_id, receipt, pov).await?; + received_collation(ctx, state, origin, request_id, receipt, pov).await; } } - - Ok(()) } /// A leaf has become inactive so we want to @@ -592,7 +578,7 @@ async fn request_timed_out( ctx: &mut Context, state: &mut State, id: RequestId, -) -> Result<()> +) where Context: SubsystemContext { @@ -604,12 +590,10 @@ where if let Some(_) = state.requests_info.remove(&id) { let peer_id = key.2; - modify_reputation(ctx, peer_id, COST_REQUEST_TIMED_OUT).await?; + modify_reputation(ctx, peer_id, COST_REQUEST_TIMED_OUT).await; } } } - - Ok(()) } /// Bridge event switch. @@ -639,7 +623,7 @@ where handle_our_view_change(state, view).await?; }, PeerMessage(remote, msg) => { - process_incoming_peer_message(ctx, state, remote, msg).await?; + process_incoming_peer_message(ctx, state, remote, msg).await; } } @@ -652,7 +636,7 @@ async fn process_msg( ctx: &mut Context, msg: CollatorProtocolMessage, state: &mut State, -) -> Result<()> +) where Context: SubsystemContext { @@ -675,13 +659,13 @@ where ); } FetchCollation(relay_parent, collator_id, para_id, tx) => { - fetch_collation(ctx, state, relay_parent, collator_id, para_id, tx).await?; + fetch_collation(ctx, state, relay_parent, collator_id, para_id, tx).await; } ReportCollator(id) => { - report_collator(ctx, state, id).await?; + report_collator(ctx, state, id).await; } NoteGoodCollation(id) => { - note_good_collation(ctx, state, id).await?; + note_good_collation(ctx, state, id).await; } NetworkBridgeUpdateV1(event) => { if let Err(e) = handle_network_msg( @@ -697,8 +681,6 @@ where } } } - - Ok(()) } /// The main run loop. @@ -726,7 +708,7 @@ where tracing::trace!(target: LOG_TARGET, msg = ?msg, "received a message"); match msg { - Communication { msg } => process_msg(&mut ctx, msg, &mut state).await?, + Communication { msg } => process_msg(&mut ctx, msg, &mut state).await, Signal(BlockFinalized(_)) => {} Signal(ActiveLeaves(_)) => {} Signal(Conclude) => { break } @@ -742,7 +724,7 @@ where match request { CollationRequestResult::Timeout(id) => { tracing::trace!(target: LOG_TARGET, id, "request timed out"); - request_timed_out(&mut ctx, &mut state, id).await?; + request_timed_out(&mut ctx, &mut state, id).await; } CollationRequestResult::Received(id) => { state.requests_info.remove(&id); diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index e0050aeb27..01b86b44a0 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -132,7 +132,7 @@ async fn handle_signal( ctx.send_message(AllMessages::RuntimeApi(RuntimeApiMessage::Request( relay_parent, RuntimeApiRequest::Validators(vals_tx), - ))).await?; + ))).await; let n_validators = match vals_rx.await? { Ok(v) => v.len(), @@ -178,7 +178,7 @@ async fn notify_all_we_are_awaiting( ctx: &mut impl SubsystemContext, relay_parent: Hash, pov_hash: Hash, -) -> SubsystemResult<()> { +) { // We use `awaited` as a proxy for which heads are in the peer's view. let peers_to_send: Vec<_> = peers.iter() .filter_map(|(peer, state)| if state.awaited.contains_key(&relay_parent) { @@ -188,7 +188,9 @@ async fn notify_all_we_are_awaiting( }) .collect(); - if peers_to_send.is_empty() { return Ok(()) } + if peers_to_send.is_empty() { + return; + } let payload = awaiting_message(relay_parent, vec![pov_hash]); @@ -205,7 +207,7 @@ async fn notify_one_we_are_awaiting_many( ctx: &mut impl SubsystemContext, relay_parent_state: &HashMap, relay_parent: Hash, -) -> SubsystemResult<()> { +) { let awaiting_hashes = relay_parent_state.get(&relay_parent).into_iter().flat_map(|s| { // Send the peer everything we are fetching at this relay-parent s.fetching.iter() @@ -213,7 +215,9 @@ async fn notify_one_we_are_awaiting_many( .map(|(pov_hash, _)| *pov_hash) }).collect::>(); - if awaiting_hashes.is_empty() { return Ok(()) } + if awaiting_hashes.is_empty() { + return; + } let payload = awaiting_message(relay_parent, awaiting_hashes); @@ -232,7 +236,7 @@ async fn distribute_to_awaiting( relay_parent: Hash, pov_hash: Hash, pov: &PoV, -) -> SubsystemResult<()> { +) { // Send to all peers who are awaiting the PoV and have that relay-parent in their view. // // Also removes it from their awaiting set. @@ -246,18 +250,16 @@ async fn distribute_to_awaiting( })) .collect(); - if peers_to_send.is_empty() { return Ok(()) } + if peers_to_send.is_empty() { return; } let payload = send_pov_message(relay_parent, pov_hash, pov.clone()); ctx.send_message(AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage( peers_to_send, payload, - ))).await?; + ))).await; metrics.on_pov_distributed(); - - Ok(()) } /// Handles a `FetchPoV` message. @@ -268,17 +270,17 @@ async fn handle_fetch( relay_parent: Hash, descriptor: CandidateDescriptor, response_sender: oneshot::Sender>, -) -> SubsystemResult<()> { +) { let _timer = state.metrics.time_handle_fetch(); let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { Some(s) => s, - None => return Ok(()), + None => return, }; if let Some(pov) = relay_parent_state.known.get(&descriptor.pov_hash) { let _ = response_sender.send(pov.clone()); - return Ok(()); + return; } { @@ -286,7 +288,7 @@ async fn handle_fetch( Entry::Occupied(mut e) => { // we are already awaiting this PoV if there is an entry. e.get_mut().push(response_sender); - return Ok(()); + return; } Entry::Vacant(e) => { e.insert(vec![response_sender]); @@ -299,7 +301,7 @@ async fn handle_fetch( relay_parent_state.fetching.len = relay_parent_state.fetching.len(), "other subsystems have requested PoV distribution to fetch more PoVs than reasonably expected", ); - return Ok(()); + return; } // Issue an `Awaiting` message to all peers with this in their view. @@ -319,12 +321,12 @@ async fn handle_distribute( relay_parent: Hash, descriptor: CandidateDescriptor, pov: Arc, -) -> SubsystemResult<()> { +) { let _timer = state.metrics.time_handle_distribute(); let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { - None => return Ok(()), Some(s) => s, + None => return, }; if let Some(our_awaited) = relay_parent_state.fetching.get_mut(&descriptor.pov_hash) { @@ -355,7 +357,7 @@ async fn report_peer( ctx: &mut impl SubsystemContext, peer: PeerId, rep: Rep, -) -> SubsystemResult<()> { +) { ctx.send_message(AllMessages::NetworkBridge(NetworkBridgeMessage::ReportPeer(peer, rep))).await } @@ -367,16 +369,16 @@ async fn handle_awaiting( peer: PeerId, relay_parent: Hash, pov_hashes: Vec, -) -> SubsystemResult<()> { +) { if !state.our_view.0.contains(&relay_parent) { - report_peer(ctx, peer, COST_AWAITED_NOT_IN_VIEW).await?; - return Ok(()); + report_peer(ctx, peer, COST_AWAITED_NOT_IN_VIEW).await; + return; } let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { None => { tracing::warn!("PoV Distribution relay parent state out-of-sync with our view"); - return Ok(()); + return; } Some(s) => s, }; @@ -385,8 +387,8 @@ async fn handle_awaiting( state.peer_state.get_mut(&peer).and_then(|s| s.awaited.get_mut(&relay_parent)) { None => { - report_peer(ctx, peer, COST_AWAITED_NOT_IN_VIEW).await?; - return Ok(()); + report_peer(ctx, peer, COST_AWAITED_NOT_IN_VIEW).await; + return; } Some(a) => a, }; @@ -400,16 +402,14 @@ async fn handle_awaiting( let payload = send_pov_message(relay_parent, pov_hash, (&**pov).clone()); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::SendValidationMessage(vec![peer.clone()], payload) - )).await?; + )).await; } else { peer_awaiting.insert(pov_hash); } } } else { - report_peer(ctx, peer, COST_APPARENT_FLOOD).await?; + report_peer(ctx, peer, COST_APPARENT_FLOOD).await; } - - Ok(()) } /// Handle an incoming PoV from our peer. Reports them if unexpected, rewards them if not. @@ -423,11 +423,11 @@ async fn handle_incoming_pov( relay_parent: Hash, pov_hash: Hash, pov: PoV, -) -> SubsystemResult<()> { +) { let relay_parent_state = match state.relay_parent_state.get_mut(&relay_parent) { None => { - report_peer(ctx, peer, COST_UNEXPECTED_POV).await?; - return Ok(()); + report_peer(ctx, peer, COST_UNEXPECTED_POV).await; + return; }, Some(r) => r, }; @@ -436,16 +436,16 @@ async fn handle_incoming_pov( // Do validity checks and complete all senders awaiting this PoV. let fetching = match relay_parent_state.fetching.get_mut(&pov_hash) { None => { - report_peer(ctx, peer, COST_UNEXPECTED_POV).await?; - return Ok(()); + report_peer(ctx, peer, COST_UNEXPECTED_POV).await; + return; } Some(f) => f, }; let hash = pov.hash(); if hash != pov_hash { - report_peer(ctx, peer, COST_UNEXPECTED_POV).await?; - return Ok(()); + report_peer(ctx, peer, COST_UNEXPECTED_POV).await; + return; } let pov = Arc::new(pov); @@ -453,10 +453,10 @@ async fn handle_incoming_pov( if fetching.is_empty() { // fetching is empty whenever we were awaiting something and // it was completed afterwards. - report_peer(ctx, peer.clone(), BENEFIT_LATE_POV).await?; + report_peer(ctx, peer.clone(), BENEFIT_LATE_POV).await; } else { // fetching is non-empty when the peer just provided us with data we needed. - report_peer(ctx, peer.clone(), BENEFIT_FRESH_POV).await?; + report_peer(ctx, peer.clone(), BENEFIT_FRESH_POV).await; } for response_sender in fetching.drain(..) { @@ -488,17 +488,15 @@ async fn handle_network_update( state: &mut State, ctx: &mut impl SubsystemContext, update: NetworkBridgeEvent, -) -> SubsystemResult<()> { +) { let _timer = state.metrics.time_handle_network_update(); match update { NetworkBridgeEvent::PeerConnected(peer, _observed_role) => { state.peer_state.insert(peer, PeerState { awaited: HashMap::new() }); - Ok(()) } NetworkBridgeEvent::PeerDisconnected(peer) => { state.peer_state.remove(&peer); - Ok(()) } NetworkBridgeEvent::PeerViewChange(peer_id, view) => { if let Some(peer_state) = state.peer_state.get_mut(&peer_id) { @@ -516,12 +514,11 @@ async fn handle_network_update( ctx, &state.relay_parent_state, *relay_parent, - ).await?; + ).await; } } } - Ok(()) } NetworkBridgeEvent::PeerMessage(peer, message) => { match message { @@ -546,7 +543,6 @@ async fn handle_network_update( } NetworkBridgeEvent::OurViewChange(view) => { state.our_view = view; - Ok(()) } } } @@ -582,7 +578,7 @@ impl PoVDistribution { relay_parent, descriptor, response_sender, - ).await?, + ).await, PoVDistributionMessage::DistributePoV(relay_parent, descriptor, pov) => handle_distribute( &mut state, @@ -590,13 +586,13 @@ impl PoVDistribution { relay_parent, descriptor, pov, - ).await?, + ).await, PoVDistributionMessage::NetworkBridgeUpdateV1(event) => handle_network_update( &mut state, &mut ctx, event, - ).await?, + ).await, }, } } diff --git a/node/network/pov-distribution/src/tests.rs b/node/network/pov-distribution/src/tests.rs index 65f32ffe88..03a39507a9 100644 --- a/node/network/pov-distribution/src/tests.rs +++ b/node/network/pov-distribution/src/tests.rs @@ -80,7 +80,7 @@ fn distributes_to_those_awaiting_and_completes_local() { hash_a, descriptor, Arc::new(pov.clone()), - ).await.unwrap(); + ).await; assert!(!state.peer_state[&peer_a].awaited[&hash_a].contains(&pov_hash)); assert!(state.peer_state[&peer_c].awaited[&hash_b].contains(&pov_hash)); @@ -160,7 +160,7 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { hash_a, descriptor, pov_send, - ).await.unwrap(); + ).await; assert_eq!(state.relay_parent_state[&hash_a].fetching[&pov_hash].len(), 1); @@ -234,7 +234,7 @@ fn peer_view_change_leads_to_us_informing() { &mut state, &mut ctx, NetworkBridgeEvent::PeerViewChange(peer_a.clone(), View(vec![hash_a, hash_b])), - ).await.unwrap(); + ).await; assert_matches!( handle.recv().await, @@ -310,7 +310,7 @@ fn peer_complete_fetch_and_is_rewarded() { peer_a.clone(), send_pov_message(hash_a, pov_hash, pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; handle_network_update( &mut state, @@ -319,7 +319,7 @@ fn peer_complete_fetch_and_is_rewarded() { peer_b.clone(), send_pov_message(hash_a, pov_hash, pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; assert_eq!(&*pov_recv.await.unwrap(), &pov); @@ -399,7 +399,7 @@ fn peer_punished_for_sending_bad_pov() { peer_a.clone(), send_pov_message(hash_a, pov_hash, bad_pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; // didn't complete our sender. assert_eq!(state.relay_parent_state[&hash_a].fetching[&pov_hash].len(), 1); @@ -463,7 +463,7 @@ fn peer_punished_for_sending_unexpected_pov() { peer_a.clone(), send_pov_message(hash_a, pov_hash, pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; assert_matches!( handle.recv().await, @@ -525,7 +525,7 @@ fn peer_punished_for_sending_pov_out_of_our_view() { peer_a.clone(), send_pov_message(hash_b, pov_hash, pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; assert_matches!( handle.recv().await, @@ -588,7 +588,7 @@ fn peer_reported_for_awaiting_too_much() { peer_a.clone(), awaiting_message(hash_a, vec![pov_hash]), ).focus().unwrap(), - ).await.unwrap(); + ).await; } assert_eq!(state.peer_state[&peer_a].awaited[&hash_a].len(), max_plausibly_awaited); @@ -602,7 +602,7 @@ fn peer_reported_for_awaiting_too_much() { peer_a.clone(), awaiting_message(hash_a, vec![last_pov_hash]), ).focus().unwrap(), - ).await.unwrap(); + ).await; // No more bookkeeping for you! assert_eq!(state.peer_state[&peer_a].awaited[&hash_a].len(), max_plausibly_awaited); @@ -672,7 +672,7 @@ fn peer_reported_for_awaiting_outside_their_view() { peer_a.clone(), awaiting_message(hash_b, vec![pov_hash]), ).focus().unwrap(), - ).await.unwrap(); + ).await; assert!(state.peer_state[&peer_a].awaited.get(&hash_b).is_none()); @@ -735,7 +735,7 @@ fn peer_reported_for_awaiting_outside_our_view() { peer_a.clone(), awaiting_message(hash_b, vec![pov_hash]), ).focus().unwrap(), - ).await.unwrap(); + ).await; // Illegal `awaited` is ignored. assert!(state.peer_state[&peer_a].awaited[&hash_b].is_empty()); @@ -810,7 +810,7 @@ fn peer_complete_fetch_leads_to_us_completing_others() { peer_a.clone(), send_pov_message(hash_a, pov_hash, pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; assert_eq!(&*pov_recv.await.unwrap(), &pov); @@ -893,7 +893,7 @@ fn peer_completing_request_no_longer_awaiting() { peer_a.clone(), send_pov_message(hash_a, pov_hash, pov.clone()), ).focus().unwrap(), - ).await.unwrap(); + ).await; assert_eq!(&*pov_recv.await.unwrap(), &pov); diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index b01b60014e..d8afe8341b 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -523,7 +523,7 @@ async fn circulate_statement_and_dependents( relay_parent: Hash, statement: SignedFullStatement, metrics: &Metrics, -) -> SubsystemResult<()> { +) { if let Some(active_head)= active_heads.get_mut(&relay_parent) { // First circulate the statement directly to all peers needing it. @@ -532,7 +532,7 @@ async fn circulate_statement_and_dependents( match active_head.note_statement(statement) { NotedStatement::Fresh(stored) => Some(( *stored.compact().candidate_hash(), - circulate_statement(peers, ctx, relay_parent, stored).await?, + circulate_statement(peers, ctx, relay_parent, stored).await, )), _ => None, } @@ -552,13 +552,11 @@ async fn circulate_statement_and_dependents( candidate_hash, &*active_head, metrics, - ).await?; + ).await; } } } } - - Ok(()) } fn statement_message(relay_parent: Hash, statement: SignedFullStatement) @@ -577,7 +575,7 @@ async fn circulate_statement( ctx: &mut impl SubsystemContext, relay_parent: Hash, stored: &StoredStatement, -) -> SubsystemResult> { +) -> Vec { let fingerprint = stored.fingerprint(); let mut peers_to_send = HashMap::new(); @@ -594,14 +592,14 @@ async fn circulate_statement( ctx.send_message(AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage( peers_to_send.keys().cloned().collect(), payload, - ))).await?; + ))).await; } - Ok(peers_to_send.into_iter().filter_map(|(peer, needs_dependent)| if needs_dependent { + peers_to_send.into_iter().filter_map(|(peer, needs_dependent)| if needs_dependent { Some(peer) } else { None - }).collect()) + }).collect() } /// Send all statements about a given candidate hash to a peer. @@ -614,7 +612,7 @@ async fn send_statements_about( candidate_hash: CandidateHash, active_head: &ActiveHeadData, metrics: &Metrics, -) -> SubsystemResult<()> { +) { for statement in active_head.statements_about(candidate_hash) { if peer_data.send(&relay_parent, &statement.fingerprint()).is_some() { let payload = statement_message( @@ -624,13 +622,11 @@ async fn send_statements_about( ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::SendValidationMessage(vec![peer.clone()], payload) - )).await?; + )).await; metrics.on_statement_distributed(); } } - - Ok(()) } /// Send all statements at a given relay-parent to a peer. @@ -642,7 +638,7 @@ async fn send_statements( relay_parent: Hash, active_head: &ActiveHeadData, metrics: &Metrics, -) -> SubsystemResult<()> { +) { for statement in active_head.statements() { if peer_data.send(&relay_parent, &statement.fingerprint()).is_some() { let payload = statement_message( @@ -652,20 +648,18 @@ async fn send_statements( ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::SendValidationMessage(vec![peer.clone()], payload) - )).await?; + )).await; metrics.on_statement_distributed(); } } - - Ok(()) } async fn report_peer( ctx: &mut impl SubsystemContext, peer: PeerId, rep: Rep, -) -> SubsystemResult<()> { +) { ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ReportPeer(peer, rep) )).await @@ -685,13 +679,14 @@ async fn handle_incoming_message<'a>( ctx: &mut impl SubsystemContext, message: protocol_v1::StatementDistributionMessage, metrics: &Metrics, -) -> SubsystemResult> { +) -> Option<(Hash, &'a StoredStatement)> { let (relay_parent, statement) = match message { protocol_v1::StatementDistributionMessage::Statement(r, s) => (r, s), }; if !our_view.contains(&relay_parent) { - return report_peer(ctx, peer, COST_UNEXPECTED_STATEMENT).await.map(|_| None); + report_peer(ctx, peer, COST_UNEXPECTED_STATEMENT).await; + return None; } let active_head = match active_heads.get_mut(&relay_parent) { @@ -703,13 +698,14 @@ async fn handle_incoming_message<'a>( requested_relay_parent = %relay_parent, "our view out-of-sync with active heads; head not found", ); - return Ok(None); + return None; } }; // check the signature on the statement. if let Err(()) = check_statement_signature(&active_head, relay_parent, &statement) { - return report_peer(ctx, peer, COST_INVALID_SIGNATURE).await.map(|_| None); + report_peer(ctx, peer, COST_INVALID_SIGNATURE).await; + return None; } // Ensure the statement is stored in the peer data. @@ -720,8 +716,8 @@ async fn handle_incoming_message<'a>( let max_message_count = active_head.validators.len() * 2; match peer_data.receive(&relay_parent, &fingerprint, max_message_count) { Err(rep) => { - report_peer(ctx, peer, rep).await?; - return Ok(None) + report_peer(ctx, peer, rep).await; + return None; } Ok(true) => { // Send the peer all statements concerning the candidate that we have, @@ -734,7 +730,7 @@ async fn handle_incoming_message<'a>( fingerprint.0.candidate_hash().clone(), &*active_head, metrics, - ).await? + ).await; } Ok(false) => {} } @@ -742,14 +738,14 @@ async fn handle_incoming_message<'a>( // Note: `peer_data.receive` already ensures that the statement is not an unbounded equivocation // or unpinned to a seconded candidate. So it is safe to place it into the storage. match active_head.note_statement(statement) { - NotedStatement::NotUseful => Ok(None), + NotedStatement::NotUseful => None, NotedStatement::UsefulButKnown => { - report_peer(ctx, peer, BENEFIT_VALID_STATEMENT).await?; - Ok(None) + report_peer(ctx, peer, BENEFIT_VALID_STATEMENT).await; + None } NotedStatement::Fresh(statement) => { - report_peer(ctx, peer, BENEFIT_VALID_STATEMENT_FIRST).await?; - Ok(Some((relay_parent, statement))) + report_peer(ctx, peer, BENEFIT_VALID_STATEMENT_FIRST).await; + Some((relay_parent, statement)) } } } @@ -763,7 +759,7 @@ async fn update_peer_view_and_send_unlocked( active_heads: &HashMap, new_view: View, metrics: &Metrics, -) -> SubsystemResult<()> { +) { let old_view = std::mem::replace(&mut peer_data.view, new_view); // Remove entries for all relay-parents in the old view but not the new. @@ -785,11 +781,9 @@ async fn update_peer_view_and_send_unlocked( new, active_head, metrics, - ).await?; + ).await; } } - - Ok(()) } #[tracing::instrument(level = "trace", skip(peers, active_heads, ctx, metrics), fields(subsystem = LOG_TARGET))] @@ -800,19 +794,16 @@ async fn handle_network_update( our_view: &mut View, update: NetworkBridgeEvent, metrics: &Metrics, -) -> SubsystemResult<()> { +) { match update { NetworkBridgeEvent::PeerConnected(peer, _role) => { peers.insert(peer, PeerData { view: Default::default(), view_knowledge: Default::default(), }); - - Ok(()) } NetworkBridgeEvent::PeerDisconnected(peer) => { peers.remove(&peer); - Ok(()) } NetworkBridgeEvent::PeerMessage(peer, message) => { match peers.get_mut(&peer) { @@ -825,7 +816,7 @@ async fn handle_network_update( ctx, message, metrics, - ).await?; + ).await; if let Some((relay_parent, new)) = new_stored { // When we receive a new message from a peer, we forward it to the @@ -833,12 +824,10 @@ async fn handle_network_update( let message = AllMessages::CandidateBacking( CandidateBackingMessage::Statement(relay_parent, new.statement.clone()) ); - ctx.send_message(message).await?; + ctx.send_message(message).await; } - - Ok(()) } - None => Ok(()), + None => (), } } @@ -854,7 +843,7 @@ async fn handle_network_update( metrics, ).await } - None => Ok(()), + None => (), } } NetworkBridgeEvent::OurViewChange(view) => { @@ -872,8 +861,6 @@ async fn handle_network_update( ); } } - - Ok(()) } } @@ -917,7 +904,7 @@ impl StatementDistribution { ctx.send_messages( std::iter::once(val_message).chain(std::iter::once(session_message)) - ).await?; + ).await; match (val_rx.await?, session_rx.await?) { (Ok(v), Ok(s)) => (v, s), @@ -959,7 +946,7 @@ impl StatementDistribution { relay_parent, statement, &metrics, - ).await?; + ).await; } StatementDistributionMessage::NetworkBridgeUpdateV1(event) => { let _timer = metrics.time_network_bridge_update_v1(); @@ -971,7 +958,7 @@ impl StatementDistribution { &mut our_view, event, &metrics, - ).await? + ).await; } StatementDistributionMessage::RegisterStatementListener(tx) => { statement_listeners.push(tx); @@ -1428,7 +1415,7 @@ mod tests { &active_heads, new_view.clone(), &Default::default(), - ).await.unwrap(); + ).await; assert_eq!(peer_data.view, new_view); assert!(!peer_data.view_knowledge.contains_key(&hash_a)); @@ -1544,7 +1531,7 @@ mod tests { &mut ctx, hash_b, &statement, - ).await.unwrap(); + ).await; { assert_eq!(needs_dependents.len(), 2); diff --git a/node/overseer/examples/minimal-example.rs b/node/overseer/examples/minimal-example.rs index e07280c1ca..e481d38adc 100644 --- a/node/overseer/examples/minimal-example.rs +++ b/node/overseer/examples/minimal-example.rs @@ -64,7 +64,7 @@ impl Subsystem1 { }.into(), tx, ) - )).await.unwrap(); + )).await; } } } diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 113d3d0be0..76d967dc9c 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -193,20 +193,20 @@ pub struct OverseerHandler { impl OverseerHandler { /// Inform the `Overseer` that that some block was imported. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - pub async fn block_imported(&mut self, block: BlockInfo) -> SubsystemResult<()> { - self.events_tx.send(Event::BlockImported(block)).await.map_err(Into::into) + pub async fn block_imported(&mut self, block: BlockInfo) { + self.send_and_log_error(Event::BlockImported(block)).await } /// Send some message to one of the `Subsystem`s. #[tracing::instrument(level = "trace", skip(self, msg), fields(subsystem = LOG_TARGET))] - pub async fn send_msg(&mut self, msg: impl Into) -> SubsystemResult<()> { - self.events_tx.send(Event::MsgToSubsystem(msg.into())).await.map_err(Into::into) + pub async fn send_msg(&mut self, msg: impl Into) { + self.send_and_log_error(Event::MsgToSubsystem(msg.into())).await } /// Inform the `Overseer` that that some block was finalized. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - pub async fn block_finalized(&mut self, block: BlockInfo) -> SubsystemResult<()> { - self.events_tx.send(Event::BlockFinalized(block)).await.map_err(Into::into) + pub async fn block_finalized(&mut self, block: BlockInfo) { + self.send_and_log_error(Event::BlockFinalized(block)).await } /// Wait for a block with the given hash to be in the active-leaves set. @@ -217,17 +217,23 @@ impl OverseerHandler { /// the response channel may never return if the hash was deactivated before this call. /// In this case, it's the caller's responsibility to ensure a timeout is set. #[tracing::instrument(level = "trace", skip(self, response_channel), fields(subsystem = LOG_TARGET))] - pub async fn wait_for_activation(&mut self, hash: Hash, response_channel: oneshot::Sender>) -> SubsystemResult<()> { - self.events_tx.send(Event::ExternalRequest(ExternalRequest::WaitForActivation { + pub async fn wait_for_activation(&mut self, hash: Hash, response_channel: oneshot::Sender>) { + self.send_and_log_error(Event::ExternalRequest(ExternalRequest::WaitForActivation { hash, response_channel - })).await.map_err(Into::into) + })).await } /// Tell `Overseer` to shutdown. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - pub async fn stop(&mut self) -> SubsystemResult<()> { - self.events_tx.send(Event::Stop).await.map_err(Into::into) + pub async fn stop(&mut self) { + self.send_and_log_error(Event::Stop).await + } + + async fn send_and_log_error(&mut self, event: Event) { + if self.events_tx.send(event).await.is_err() { + tracing::info!(target: LOG_TARGET, "Failed to send an event to Overseer"); + } } } @@ -239,7 +245,7 @@ impl OverseerHandler { pub async fn forward_events>( client: Arc

, mut handler: OverseerHandler, -) -> SubsystemResult<()> { +) { let mut finality = client.finality_notification_stream(); let mut imports = client.import_notification_stream(); @@ -248,7 +254,7 @@ pub async fn forward_events>( f = finality.next() => { match f { Some(block) => { - handler.block_finalized(block.into()).await?; + handler.block_finalized(block.into()).await; } None => break, } @@ -256,7 +262,7 @@ pub async fn forward_events>( i = imports.next() => { match i { Some(block) => { - handler.block_imported(block.into()).await?; + handler.block_imported(block.into()).await; } None => break, } @@ -264,8 +270,6 @@ pub async fn forward_events>( complete => break, } } - - Ok(()) } impl Debug for ToOverseer { @@ -338,15 +342,34 @@ impl SubsystemContext for OverseerSubsystemContext { }).await.map_err(Into::into) } - async fn send_message(&mut self, msg: AllMessages) -> SubsystemResult<()> { - self.tx.send(ToOverseer::SubsystemMessage(msg)).await.map_err(Into::into) + async fn send_message(&mut self, msg: AllMessages) { + self.send_and_log_error(ToOverseer::SubsystemMessage(msg)).await } - async fn send_messages(&mut self, msgs: T) -> SubsystemResult<()> + async fn send_messages(&mut self, msgs: T) where T: IntoIterator + Send, T::IntoIter: Send { let mut msgs = stream::iter(msgs.into_iter().map(ToOverseer::SubsystemMessage).map(Ok)); - self.tx.send_all(&mut msgs).await.map_err(Into::into) + if self.tx.send_all(&mut msgs).await.is_err() { + tracing::debug!( + target: LOG_TARGET, + msg_type = std::any::type_name::(), + "Failed to send messages to Overseer", + ); + + } + } +} + +impl OverseerSubsystemContext { + async fn send_and_log_error(&mut self, msg: ToOverseer) { + if self.tx.send(msg).await.is_err() { + tracing::debug!( + target: LOG_TARGET, + msg_type = std::any::type_name::(), + "Failed to send a message to Overseer", + ); + } } } @@ -1712,7 +1735,7 @@ mod tests { tx, ) ) - ).await.unwrap(); + ).await; c += 1; continue; } @@ -1786,7 +1809,7 @@ mod tests { Some(msg) => { s1_results.push(msg); if s1_results.len() == 10 { - handler.stop().await.unwrap(); + handler.stop().await; } } None => break, @@ -1844,10 +1867,10 @@ mod tests { pin_mut!(overseer_fut); - handler.block_imported(second_block).await.unwrap(); - handler.block_imported(third_block).await.unwrap(); - handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await.unwrap(); - handler.stop().await.unwrap(); + handler.block_imported(second_block).await; + handler.block_imported(third_block).await; + handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await; + handler.stop().await; select! { res = overseer_fut => { @@ -2012,8 +2035,8 @@ mod tests { let mut ss5_results = Vec::new(); let mut ss6_results = Vec::new(); - handler.block_imported(second_block).await.unwrap(); - handler.block_imported(third_block).await.unwrap(); + handler.block_imported(second_block).await; + handler.block_imported(third_block).await; let expected_heartbeats = vec![ OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(first_block_hash)), @@ -2048,7 +2071,7 @@ mod tests { if ss5_results.len() == expected_heartbeats.len() && ss6_results.len() == expected_heartbeats.len() { - handler.stop().await.unwrap(); + handler.stop().await; } } @@ -2106,7 +2129,7 @@ mod tests { let mut ss6_results = Vec::new(); // this should stop work on both forks we started with earlier. - handler.block_finalized(third_block).await.unwrap(); + handler.block_finalized(third_block).await; let expected_heartbeats = vec![ OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { @@ -2141,7 +2164,7 @@ mod tests { if ss5_results.len() == expected_heartbeats.len() && ss6_results.len() == expected_heartbeats.len() { - handler.stop().await.unwrap(); + handler.stop().await; } } @@ -2343,28 +2366,28 @@ mod tests { hash: Default::default(), parent_hash: Default::default(), number: Default::default(), - }).await.unwrap(); + }).await; // send a msg to each subsystem // except for BitfieldSigning as the message is not instantiable - handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await.unwrap(); - handler.send_msg(AllMessages::CandidateBacking(test_candidate_backing_msg())).await.unwrap(); - handler.send_msg(AllMessages::CandidateSelection(test_candidate_selection_msg())).await.unwrap(); - handler.send_msg(AllMessages::CollationGeneration(test_collator_generation_msg())).await.unwrap(); - handler.send_msg(AllMessages::CollatorProtocol(test_collator_protocol_msg())).await.unwrap(); - handler.send_msg(AllMessages::StatementDistribution(test_statement_distribution_msg())).await.unwrap(); - handler.send_msg(AllMessages::AvailabilityDistribution(test_availability_distribution_msg())).await.unwrap(); - // handler.send_msg(AllMessages::BitfieldSigning(test_bitfield_signing_msg())).await.unwrap(); - handler.send_msg(AllMessages::BitfieldDistribution(test_bitfield_distribution_msg())).await.unwrap(); - handler.send_msg(AllMessages::Provisioner(test_provisioner_msg())).await.unwrap(); - handler.send_msg(AllMessages::PoVDistribution(test_pov_distribution_msg())).await.unwrap(); - handler.send_msg(AllMessages::RuntimeApi(test_runtime_api_msg())).await.unwrap(); - handler.send_msg(AllMessages::AvailabilityStore(test_availability_store_msg())).await.unwrap(); - handler.send_msg(AllMessages::NetworkBridge(test_network_bridge_msg())).await.unwrap(); - handler.send_msg(AllMessages::ChainApi(test_chain_api_msg())).await.unwrap(); + handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await; + handler.send_msg(AllMessages::CandidateBacking(test_candidate_backing_msg())).await; + handler.send_msg(AllMessages::CandidateSelection(test_candidate_selection_msg())).await; + handler.send_msg(AllMessages::CollationGeneration(test_collator_generation_msg())).await; + handler.send_msg(AllMessages::CollatorProtocol(test_collator_protocol_msg())).await; + handler.send_msg(AllMessages::StatementDistribution(test_statement_distribution_msg())).await; + handler.send_msg(AllMessages::AvailabilityDistribution(test_availability_distribution_msg())).await; + // handler.send_msg(AllMessages::BitfieldSigning(test_bitfield_signing_msg())).await; + handler.send_msg(AllMessages::BitfieldDistribution(test_bitfield_distribution_msg())).await; + handler.send_msg(AllMessages::Provisioner(test_provisioner_msg())).await; + handler.send_msg(AllMessages::PoVDistribution(test_pov_distribution_msg())).await; + handler.send_msg(AllMessages::RuntimeApi(test_runtime_api_msg())).await; + handler.send_msg(AllMessages::AvailabilityStore(test_availability_store_msg())).await; + handler.send_msg(AllMessages::NetworkBridge(test_network_bridge_msg())).await; + handler.send_msg(AllMessages::ChainApi(test_chain_api_msg())).await; // send a stop signal to each subsystems - handler.stop().await.unwrap(); + handler.stop().await; select! { res = overseer_fut => { diff --git a/node/subsystem-test-helpers/src/lib.rs b/node/subsystem-test-helpers/src/lib.rs index 6219421902..512d761afe 100644 --- a/node/subsystem-test-helpers/src/lib.rs +++ b/node/subsystem-test-helpers/src/lib.rs @@ -191,15 +191,14 @@ impl SubsystemContext Ok(()) } - async fn send_message(&mut self, msg: AllMessages) -> SubsystemResult<()> { + async fn send_message(&mut self, msg: AllMessages) { self.tx .send(msg) .await .expect("test overseer no longer live"); - Ok(()) } - async fn send_messages(&mut self, msgs: T) -> SubsystemResult<()> + async fn send_messages(&mut self, msgs: T) where T: IntoIterator + Send, T::IntoIter: Send, @@ -209,8 +208,6 @@ impl SubsystemContext .send_all(&mut iter) .await .expect("test overseer no longer live"); - - Ok(()) } } @@ -341,7 +338,7 @@ mod tests { spawner.spawn("overseer", overseer.run().then(|_| async { () }).boxed()); - block_on(handler.send_msg(CandidateSelectionMessage::Invalid(Default::default(), Default::default()))).unwrap(); + block_on(handler.send_msg(CandidateSelectionMessage::Invalid(Default::default(), Default::default()))); assert!(matches!(block_on(rx.into_future()).0.unwrap(), CandidateSelectionMessage::Invalid(_, _))); } } diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 5766f25f16..750939a57a 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -207,13 +207,11 @@ where { let (tx, rx) = oneshot::channel(); - ctx - .send_message( - AllMessages::RuntimeApi(RuntimeApiMessage::Request(parent, request_builder(tx))) - .try_into() - .map_err(|err| Error::SenderConversion(format!("{:?}", err)))?, - ) - .await?; + ctx.send_message( + AllMessages::RuntimeApi(RuntimeApiMessage::Request(parent, request_builder(tx))) + .try_into() + .map_err(|err| Error::SenderConversion(format!("{:?}", err)))?, + ).await; Ok(rx) } @@ -752,7 +750,7 @@ where break }, outgoing = jobs.next().fuse() => - Self::handle_outgoing(outgoing, &mut ctx, &mut err_tx).await, + Self::handle_outgoing(outgoing, &mut ctx).await, complete => break, } } @@ -866,13 +864,9 @@ where async fn handle_outgoing( outgoing: Option, ctx: &mut Context, - err_tx: &mut Option, JobsError)>>, ) { let msg = outgoing.expect("the Jobs stream never ends; qed"); - if let Err(e) = ctx.send_message(msg.into()).await { - let e = JobsError::Utility(e.into()); - Self::fwd_err(None, e, err_tx).await; - } + ctx.send_message(msg.into()).await; } } diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index 0952ad048c..83c405a3f4 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -63,7 +63,7 @@ pub async fn connect_to_validators( relay_parent, RuntimeApiRequest::ValidatorDiscovery(validators.clone(), tx), ) - )).await?; + )).await; let maybe_authorities = rx.await??; let authorities: Vec<_> = maybe_authorities.iter() @@ -97,7 +97,7 @@ async fn connect_to_authorities( validator_ids, connected, } - )).await?; + )).await; Ok(connected_rx) } diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index dfb4a925f1..57f62649f1 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -204,10 +204,10 @@ pub trait SubsystemContext: Send + 'static { ) -> SubsystemResult<()>; /// Send a direct message to some other `Subsystem`, routed based on message type. - async fn send_message(&mut self, msg: AllMessages) -> SubsystemResult<()>; + async fn send_message(&mut self, msg: AllMessages); /// Send multiple direct messages to other `Subsystem`s, routed based on message type. - async fn send_messages(&mut self, msgs: T) -> SubsystemResult<()> + async fn send_messages(&mut self, msgs: T) where T: IntoIterator + Send, T::IntoIter: Send; } diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index efd68cd3a8..aa46bd6d7e 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -336,13 +336,11 @@ impl PolkadotTestNode { self.overseer_handler .send_msg(CollationGenerationMessage::Initialize(config)) - .await - .expect("Registers the collator"); + .await; self.overseer_handler .send_msg(CollatorProtocolMessage::CollateOn(para_id)) - .await - .expect("Sends CollateOn"); + .await; } } diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 6b7029be07..b41201fd46 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -86,13 +86,11 @@ fn main() -> Result<()> { }; overseer_handler .send_msg(CollationGenerationMessage::Initialize(config)) - .await - .expect("Registers collator"); + .await; overseer_handler .send_msg(CollatorProtocolMessage::CollateOn(PARA_ID)) - .await - .expect("Collates on"); + .await; Ok(full_node.task_manager) } -- GitLab From a86eae0331de9082d4a08a99032323b52b829f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Mon, 23 Nov 2020 15:07:58 +0000 Subject: [PATCH 036/203] companion for substrate#7546 (#1954) * companion for substrate#7546 * update to substrate master --- Cargo.lock | 1390 ++++++++++++++++----------------------- node/service/src/lib.rs | 30 +- 2 files changed, 592 insertions(+), 828 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index befb282da1..cb49d84548 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,18 +12,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.14.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" dependencies = [ - "gimli 0.23.0", + "gimli 0.22.0", ] [[package]] name = "adler" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +checksum = "ccc9a9dd069569f212bc4330af9f17c4afb5e8ce185e83dbb14f1349dda18b10" [[package]] name = "aead" @@ -31,61 +31,52 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.2", ] [[package]] name = "aes" -version = "0.5.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2bc6d3f370b5666245ff421e231cba4353df936e26986d2918e61a8fd6aef6" +checksum = "f7001367fde4c768a19d1029f0a8be5abd9308e1119846d5bd9ad26297b8faf5" dependencies = [ "aes-soft", "aesni", - "block-cipher", + "block-cipher 0.7.1", ] [[package]] name = "aes-gcm" -version = "0.7.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0301c9e9c443494d970a07885e8cf3e587bae8356a1d5abd0999068413f7205f" +checksum = "86f5007801316299f922a6198d1d09a0bae95786815d066d5880d13f7c45ead1" dependencies = [ "aead", "aes", - "block-cipher", + "block-cipher 0.7.1", "ghash", - "subtle 2.3.0", + "subtle 2.2.3", ] [[package]] name = "aes-soft" -version = "0.5.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63dd91889c49327ad7ef3b500fd1109dbd3c509a03db0d4a9ce413b79f575cb6" +checksum = "4925647ee64e5056cf231608957ce7c81e12d6d6e316b9ce1404778cc1d35fa7" dependencies = [ - "block-cipher", + "block-cipher 0.7.1", "byteorder", - "opaque-debug 0.3.0", + "opaque-debug 0.2.3", ] [[package]] name = "aesni" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6fe808308bb07d393e2ea47780043ec47683fcf19cf5efc8ca51c50cc8c68a" -dependencies = [ - "block-cipher", - "opaque-debug 0.3.0", -] - -[[package]] -name = "ahash" -version = "0.2.19" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb" +checksum = "d050d39b0b7688b3a3254394c3e30a9d66c41dcf9b05b0e2dbdc623f6505d264" dependencies = [ - "const-random", + "block-cipher 0.7.1", + "opaque-debug 0.2.3", ] [[package]] @@ -102,9 +93,9 @@ checksum = "f6789e291be47ace86a60303502173d84af8327e3627ecf334356ee0f87a164c" [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86" dependencies = [ "memchr", ] @@ -117,7 +108,7 @@ checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" dependencies = [ "approx", "num-complex", - "num-traits 0.2.14", + "num-traits 0.2.12", ] [[package]] @@ -150,7 +141,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" dependencies = [ - "num-traits 0.2.14", + "num-traits 0.2.12", ] [[package]] @@ -231,48 +222,50 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "d373d78ded7d0b3fa8039375718cde0aace493f2e34fb60f51cbf567562ca801" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", - "once_cell 1.5.1", + "once_cell", "vec-arena", ] [[package]] name = "async-global-executor" -version = "1.4.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73079b49cd26b8fd5a15f68fc7707fc78698dc2a3d61430f2a7a9430230dfa04" +checksum = "124ac8c265e407641c3362b8f4d39cdb4e243885b71eef087be27199790f5a3a" dependencies = [ "async-executor", "async-io", "futures-lite", "num_cpus", - "once_cell 1.5.1", + "once_cell", ] [[package]] name = "async-io" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a0b2bb8ae20fede194e779150fe283f65a4a08461b496de546ec366b174ad9" +checksum = "38628c78a34f111c5a6b98fc87dfc056cd1590b61afe748b145be4623c56d194" dependencies = [ + "cfg-if 0.1.10", "concurrent-queue", "fastrand", "futures-lite", "libc", "log", - "nb-connect", - "once_cell 1.5.1", + "once_cell", "parking", "polling", + "socket2", "vec-arena", "waker-fn", + "wepoll-sys-stjepang", "winapi 0.3.9", ] @@ -287,15 +280,15 @@ dependencies = [ [[package]] name = "async-std" -version = "1.7.0" +version = "1.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e82538bc65a25dbdff70e4c5439d52f068048ab97cdea0acd73f131594caa1" +checksum = "a9fa76751505e8df1c7a77762f60486f60c71bbd9b8557f4da6ad47d083732ed" dependencies = [ "async-global-executor", "async-io", "async-mutex", "blocking", - "crossbeam-utils 0.8.0", + "crossbeam-utils", "futures-channel", "futures-core", "futures-io", @@ -305,7 +298,7 @@ dependencies = [ "log", "memchr", "num_cpus", - "once_cell 1.5.1", + "once_cell", "pin-project-lite", "pin-utils", "slab", @@ -348,7 +341,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", ] [[package]] @@ -376,21 +369,21 @@ checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" [[package]] name = "autocfg" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" -version = "0.3.54" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28" +checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" dependencies = [ "addr2line", - "cfg-if 1.0.0", + "cfg-if 0.1.10", "libc", "miniz_oxide", - "object 0.22.0", + "object 0.20.0", "rustc-demangle", ] @@ -400,6 +393,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" +[[package]] +name = "base64" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" + [[package]] name = "base64" version = "0.12.3" @@ -446,21 +445,6 @@ dependencies = [ "which", ] -[[package]] -name = "bip39" -version = "0.6.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7059804e226b3ac116519a252d7f5fb985a5ccc0e93255e036a5f7e7283323f4" -dependencies = [ - "failure", - "hashbrown 0.1.8", - "hmac 0.7.1", - "once_cell 0.1.8", - "pbkdf2 0.3.0", - "rand 0.6.5", - "sha2 0.8.2", -] - [[package]] name = "bitflags" version = "1.2.1" @@ -479,13 +463,15 @@ dependencies = [ [[package]] name = "blake2" -version = "0.9.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a5720225ef5daecf08657f23791354e1685a8c91a4c60c7f3d3b2892f978f4" +checksum = "84ce5b6108f8e154604bd4eb76a2f726066c3464d5a552a4229262a18c9bb471" dependencies = [ + "byte-tools", + "byteorder", "crypto-mac 0.8.0", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.2.3", ] [[package]] @@ -500,9 +486,9 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "0.5.11" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -511,9 +497,9 @@ dependencies = [ [[package]] name = "blake2s_simd" -version = "0.5.11" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +checksum = "ab9e07352b829279624ceb7c64adb4f585dacdb81d35cafae81139ccd617cf44" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -539,7 +525,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding 0.2.1", - "generic-array 0.14.4", + "generic-array 0.14.2", +] + +[[package]] +name = "block-cipher" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" +dependencies = [ + "generic-array 0.14.2", ] [[package]] @@ -548,7 +543,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f337a3e6da609650eb74e02bc9fac7b735049f7623ab12f2e4c719316fcc7e80" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.2", ] [[package]] @@ -577,7 +572,7 @@ dependencies = [ "atomic-waker", "fastrand", "futures-lite", - "once_cell 1.5.1", + "once_cell", ] [[package]] @@ -594,9 +589,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.14" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" +checksum = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" dependencies = [ "memchr", ] @@ -650,9 +645,9 @@ checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" [[package]] name = "cc" -version = "1.0.62" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40" +checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" dependencies = [ "jobserver", ] @@ -680,40 +675,38 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chacha20" -version = "0.5.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244fbce0d47e97e8ef2f63b81d5e05882cb518c68531eb33194990d7b7e85845" +checksum = "086c0f07ac275808b7bf9a39f2fd013aae1498be83632814c8c4e0bd53f2dc58" dependencies = [ - "stream-cipher", + "stream-cipher 0.4.1", "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.6.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf18d374d66df0c05cdddd528a7db98f78c28e2519b120855c4f84c5027b1f5" +checksum = "18b0c90556d8e3fec7cf18d84a2f53d27b21288f2fe481b830fadcf809e48205" dependencies = [ "aead", "chacha20", "poly1305", - "stream-cipher", + "stream-cipher 0.4.1", "zeroize", ] [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6" dependencies = [ "js-sys", - "libc", "num-integer", - "num-traits 0.2.14", + "num-traits 0.2.12", "time", "wasm-bindgen", - "winapi 0.3.9", ] [[package]] @@ -729,9 +722,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "2.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" dependencies = [ "ansi_term 0.11.0", "atty", @@ -770,7 +763,7 @@ dependencies = [ "color-spantrace", "eyre", "indenter", - "once_cell 1.5.1", + "once_cell", "owo-colors", "tracing-error", ] @@ -815,32 +808,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "const-random" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dc82c12dc2ee6e1ded861cf7d582b46f66f796d1b6c93fa28b911ead95da02" -dependencies = [ - "const-random-macro", - "proc-macro-hack", -] - -[[package]] -name = "const-random-macro" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc757bbb9544aa296c2ae00c679e81f886b37e28e59097defe0cf524306f6685" -dependencies = [ - "getrandom 0.2.0", - "proc-macro-hack", -] - -[[package]] -name = "const_fn" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab" - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -865,9 +832,9 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cpuid-bool" -version = "0.1.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "6d375c433320f6c5057ae04a04376eef4d04ce2801448cf8863a78da99107be4" [[package]] name = "cranelift-bforest" @@ -963,21 +930,11 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils 0.8.0", + "cfg-if 0.1.10", ] [[package]] @@ -986,49 +943,24 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "crossbeam-epoch 0.8.2", - "crossbeam-utils 0.7.2", + "crossbeam-epoch", + "crossbeam-utils", "maybe-uninit", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch 0.9.0", - "crossbeam-utils 0.8.0", -] - [[package]] name = "crossbeam-epoch" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", + "crossbeam-utils", "lazy_static", "maybe-uninit", "memoffset", - "scopeguard 1.1.0", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0f606a85340376eef0d6d8fec399e6d4a544d648386c6645eb6d0653b27d9f" -dependencies = [ - "cfg-if 1.0.0", - "const_fn", - "crossbeam-utils 0.8.0", - "lazy_static", - "memoffset", - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -1038,7 +970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" dependencies = [ "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", + "crossbeam-utils", "maybe-uninit", ] @@ -1048,23 +980,11 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", "cfg-if 0.1.10", "lazy_static", ] -[[package]] -name = "crossbeam-utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 1.0.0", - "const_fn", - "lazy_static", -] - [[package]] name = "crunchy" version = "0.2.2" @@ -1087,8 +1007,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.4", - "subtle 2.3.0", + "generic-array 0.14.2", + "subtle 2.2.3", ] [[package]] @@ -1130,7 +1050,7 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.3.0", + "subtle 2.2.3", "zeroize", ] @@ -1143,15 +1063,15 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.3.0", + "subtle 2.2.3", "zeroize", ] [[package]] name = "data-encoding" -version = "2.3.1" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993a608597367c6377b258c25d7120740f00ed23a2252b729b1932dd7866f908" +checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" [[package]] name = "derive_more" @@ -1185,7 +1105,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.2", ] [[package]] @@ -1257,15 +1177,15 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d55796afa1b20c2945ca8eabfc421839f2b766619209f1ede813cf2484f31804" +checksum = "4c53dc3a653e0f64081026e4bf048d48fec9fce90c66e8326ca7292df0ff2d82" [[package]] name = "ed25519" -version = "1.0.3" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +checksum = "bf038a7b6fd7ef78ad3348b63f3a17550877b0e28f8d68bcc94894d1412158bc" dependencies = [ "signature", ] @@ -1280,15 +1200,15 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.2", + "sha2 0.9.1", "zeroize", ] [[package]] name = "either" -version = "1.6.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" [[package]] name = "enum_primitive" @@ -1362,9 +1282,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.2.7" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe" +checksum = "b480f641ccf0faf324e20c1d3e53d81b7484c698b42ea677f6907ae4db195371" dependencies = [ "errno-dragonfly", "libc", @@ -1398,12 +1318,12 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f29abf4740a4778632fe27a4f681ef5b7a6f659aeba3330ac66f48e20cfa3b7" +checksum = "534ce924bff9118be8b28b24ede6bf7e96a00b53e4ded25050aa7b526e051e1a" dependencies = [ "indenter", - "once_cell 1.5.1", + "once_cell", ] [[package]] @@ -1476,9 +1396,9 @@ dependencies = [ [[package]] name = "file-per-thread-logger" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126" +checksum = "8b3937f028664bd0e13df401ba49a4567ccda587420365823242977f06609ed1" dependencies = [ "env_logger 0.7.1", "log", @@ -1494,7 +1414,7 @@ dependencies = [ "futures 0.3.8", "futures-timer 2.0.2", "log", - "num-traits 0.2.14", + "num-traits 0.2.12", "parity-scale-codec", "parking_lot 0.9.0", ] @@ -1519,11 +1439,11 @@ checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" [[package]] name = "flate2" -version = "1.0.19" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7411863d55df97a419aa64cb4d2f167103ea9d767e2c54a1868b7ac3f6b47129" +checksum = "68c90b0fc46cf89d227cc78b40e494ff81287a92dd07631e5af0d06fe3cf885e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "crc32fast", "libc", "libz-sys", @@ -1539,25 +1459,15 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", ] -[[package]] -name = "form_urlencoded" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" -dependencies = [ - "matches", - "percent-encoding 2.1.0", -] - [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -1575,7 +1485,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "chrono", "frame-benchmarking", @@ -1597,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -1613,7 +1523,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "serde", @@ -1624,14 +1534,14 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "bitflags", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples 0.1.3", "log", - "once_cell 1.5.1", + "once_cell", "parity-scale-codec", "paste", "serde", @@ -1649,7 +1559,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1660,7 +1570,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1672,7 +1582,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1682,7 +1592,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1698,7 +1608,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -1712,7 +1622,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-api", @@ -1732,9 +1642,9 @@ dependencies = [ [[package]] name = "fs_extra" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" [[package]] name = "fuchsia-cprng" @@ -1760,9 +1670,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.1.30" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" +checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" [[package]] name = "futures" @@ -1801,7 +1711,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "num_cpus", ] @@ -1811,12 +1721,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "futures 0.3.8", "lazy_static", "log", "parking_lot 0.9.0", - "pin-project 0.4.27", + "pin-project 0.4.23", "serde", "serde_json", ] @@ -1878,7 +1788,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" dependencies = [ - "once_cell 1.5.1", + "once_cell", ] [[package]] @@ -1903,7 +1813,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "futures-channel", "futures-core", "futures-io", @@ -1927,7 +1837,7 @@ dependencies = [ "bytes 0.5.6", "futures 0.3.8", "memchr", - "pin-project 0.4.27", + "pin-project 0.4.23", ] [[package]] @@ -1936,19 +1846,6 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" -[[package]] -name = "generator" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cdc09201b2e8ca1b19290cf7e65de2246b8e91fb6874279722189c4de7b94dc" -dependencies = [ - "cc", - "libc", - "log", - "rustc_version", - "winapi 0.3.9", -] - [[package]] name = "generic-array" version = "0.12.3" @@ -1960,9 +1857,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" dependencies = [ "typenum", "version_check", @@ -1970,27 +1867,16 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.15" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" dependencies = [ "cfg-if 0.1.10", "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "ghash" version = "0.3.0" @@ -2013,9 +1899,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.23.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" +checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" [[package]] name = "glob" @@ -2025,9 +1911,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a" +checksum = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120" dependencies = [ "aho-corasick", "bstr", @@ -2058,7 +1944,7 @@ dependencies = [ "byteorder", "bytes 0.4.12", "fnv", - "futures 0.1.30", + "futures 0.1.29", "http 0.1.21", "indexmap", "log", @@ -2069,9 +1955,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.2.7" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" +checksum = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" dependencies = [ "bytes 0.5.6", "fnv", @@ -2080,11 +1966,10 @@ dependencies = [ "futures-util", "http 0.2.1", "indexmap", + "log", "slab", - "tokio 0.2.22", + "tokio 0.2.21", "tokio-util", - "tracing", - "tracing-futures", ] [[package]] @@ -2118,32 +2003,12 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" -dependencies = [ - "byteorder", - "scopeguard 0.3.3", -] - -[[package]] -name = "hashbrown" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" -dependencies = [ - "ahash 0.2.19", - "autocfg 0.1.7", -] - -[[package]] -name = "hashbrown" -version = "0.8.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" +checksum = "ab9b7860757ce258c89fd48d28b68c41713e597a7b09e793f6c6a6e2ea37c827" dependencies = [ "ahash 0.3.8", - "autocfg 1.0.1", + "autocfg 1.0.0", ] [[package]] @@ -2166,9 +2031,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9" dependencies = [ "libc", ] @@ -2251,7 +2116,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "http 0.1.21", "tokio-buf", ] @@ -2272,12 +2137,6 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -[[package]] -name = "httpdate" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" - [[package]] name = "humantime" version = "1.3.0" @@ -2300,7 +2159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "futures-cpupool", "h2 0.1.26", "http 0.1.21", @@ -2325,25 +2184,25 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.9" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" +checksum = "a6e7655b9594024ad0ee439f3b5a7299369dc2a3f459b47c696f9ff676f9aa1f" dependencies = [ "bytes 0.5.6", "futures-channel", "futures-core", "futures-util", - "h2 0.2.7", + "h2 0.2.5", "http 0.2.1", "http-body 0.3.1", "httparse", - "httpdate", "itoa", - "pin-project 1.0.2", + "log", + "pin-project 0.4.23", "socket2", - "tokio 0.2.22", + "time", + "tokio 0.2.21", "tower-service", - "tracing", "want 0.3.0", ] @@ -2356,11 +2215,11 @@ dependencies = [ "bytes 0.5.6", "ct-logs", "futures-util", - "hyper 0.13.9", + "hyper 0.13.6", "log", "rustls", "rustls-native-certs", - "tokio 0.2.22", + "tokio 0.2.21", "tokio-rustls", "webpki", ] @@ -2460,28 +2319,22 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", "hashbrown 0.9.1", "serde", ] [[package]] name = "instant" -version = "0.1.8" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb1fc4429a33e1f80d41dc9fea4d108a88bec1de8053878898ae448a0b52f613" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" [[package]] name = "integer-sqrt" -version = "0.1.5" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits 0.2.14", -] +checksum = "f65877bf7d44897a473350b1046277941cee20b263397e90869c50b6e766088b" [[package]] name = "intervalier" @@ -2584,7 +2437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7" dependencies = [ "failure", - "futures 0.1.30", + "futures 0.1.29", "jsonrpc-core", "jsonrpc-pubsub", "log", @@ -2599,7 +2452,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "log", "serde", "serde_derive", @@ -2863,9 +2716,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" -version = "1.3.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "leb128" @@ -2875,9 +2728,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.80" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" +checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" [[package]] name = "libloading" @@ -2960,7 +2813,7 @@ dependencies = [ "rand 0.7.3", "ring", "rw-stream-sink", - "sha2 0.9.2", + "sha2 0.9.1", "smallvec 1.5.0", "thiserror", "unsigned-varint 0.5.1", @@ -3038,7 +2891,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.2", + "sha2 0.9.1", "smallvec 1.5.0", "unsigned-varint 0.5.1", "wasm-timer", @@ -3079,7 +2932,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.2", + "sha2 0.9.1", "smallvec 1.5.0", "uint", "unsigned-varint 0.5.1", @@ -3142,10 +2995,10 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.2", + "sha2 0.9.1", "snow", "static_assertions", - "x25519-dalek", + "x25519-dalek 1.1.0", "zeroize", ] @@ -3189,7 +3042,7 @@ checksum = "96b3c2d5d26a9500e959a0e19743897239a6c4be78dadf99b70414301a70c006" dependencies = [ "futures 0.3.8", "log", - "pin-project 0.4.27", + "pin-project 0.4.23", "rand 0.7.3", "salsa20", "sha3", @@ -3207,7 +3060,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "lru 0.6.1", + "lru", "minicbor", "rand 0.7.3", "smallvec 1.5.0", @@ -3288,7 +3141,7 @@ dependencies = [ "rustls", "rw-stream-sink", "soketto", - "url 2.2.0", + "url 2.1.1", "webpki", "webpki-roots", ] @@ -3330,17 +3183,18 @@ dependencies = [ "hmac-drbg", "rand 0.7.3", "sha2 0.8.2", - "subtle 2.3.0", + "subtle 2.2.3", "typenum", ] [[package]] name = "libz-sys" -version = "1.1.2" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" +checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" dependencies = [ "cc", + "libc", "pkg-config", "vcpkg", ] @@ -3353,9 +3207,9 @@ checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "linked_hash_set" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +checksum = "3c7c91c4c7bbeb4f2f7c4e5be11e6a05bd6830bc37249c47ce1ad86ad453ff9c" dependencies = [ "linked-hash-map", ] @@ -3371,22 +3225,13 @@ dependencies = [ "statrs", ] -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -dependencies = [ - "scopeguard 0.3.3", -] - [[package]] name = "lock_api" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -3395,7 +3240,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -3407,28 +3252,6 @@ dependencies = [ "cfg-if 0.1.10", ] -[[package]] -name = "loom" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" -dependencies = [ - "cfg-if 0.1.10", - "generator", - "scoped-tls", - "serde", - "serde_json", -] - -[[package]] -name = "lru" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0609345ddee5badacf857d4f547e0e5a2e987db77085c24cd887f73573a04237" -dependencies = [ - "hashbrown 0.6.3", -] - [[package]] name = "lru" version = "0.6.1" @@ -3491,9 +3314,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.3.4" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" [[package]] name = "memmap" @@ -3507,21 +3330,21 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.5.6" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", ] [[package]] name = "memory-db" -version = "0.24.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f36ddb0b2cdc25d38babba472108798e3477f02be5165f038c5e393e50c57a" +checksum = "0777fbb396f666701d939e9b3876c18ada6b3581257d88631f2590bc366d8ebe" dependencies = [ "hash-db", - "hashbrown 0.8.2", + "hashbrown 0.8.0", "parity-util-mem", ] @@ -3574,12 +3397,11 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.4.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f" dependencies = [ "adler", - "autocfg 1.0.1", ] [[package]] @@ -3674,16 +3496,16 @@ dependencies = [ "blake2s_simd", "digest 0.9.0", "sha-1 0.9.2", - "sha2 0.9.2", + "sha2 0.9.1", "sha3", "unsigned-varint 0.5.1", ] [[package]] name = "multimap" -version = "0.8.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" +checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce" [[package]] name = "multistream-select" @@ -3711,7 +3533,7 @@ dependencies = [ "matrixmultiply", "num-complex", "num-rational", - "num-traits 0.2.14", + "num-traits 0.2.12", "rand 0.6.5", "typenum", ] @@ -3725,21 +3547,11 @@ dependencies = [ "rand 0.3.23", ] -[[package]] -name = "nb-connect" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" -dependencies = [ - "libc", - "winapi 0.3.9", -] - [[package]] name = "net2" -version = "0.2.35" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853" +checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" dependencies = [ "cfg-if 0.1.10", "libc", @@ -3800,9 +3612,9 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", "num-integer", - "num-traits 0.2.14", + "num-traits 0.2.12", ] [[package]] @@ -3811,18 +3623,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ - "autocfg 1.0.1", - "num-traits 0.2.14", + "autocfg 1.0.0", + "num-traits 0.2.12", ] [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ - "autocfg 1.0.1", - "num-traits 0.2.14", + "autocfg 1.0.0", + "num-traits 0.2.12", ] [[package]] @@ -3831,10 +3643,10 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", "num-bigint", "num-integer", - "num-traits 0.2.14", + "num-traits 0.2.12", ] [[package]] @@ -3843,16 +3655,16 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" dependencies = [ - "num-traits 0.2.14", + "num-traits 0.2.12", ] [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ - "autocfg 1.0.1", + "autocfg 1.0.0", "libm", ] @@ -3883,26 +3695,11 @@ dependencies = [ "wasmparser 0.57.0", ] -[[package]] -name = "object" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" - -[[package]] -name = "once_cell" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532c29a261168a45ce28948f9537ddd7a5dd272cc513b3017b1e82a88f962c37" -dependencies = [ - "parking_lot 0.7.1", -] - [[package]] name = "once_cell" -version = "1.5.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f53cef67919d7d247eb9a2f128ca9e522789967ef1eb4ccd8c71a95a8aedf596" +checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad" dependencies = [ "parking_lot 0.11.1", ] @@ -3952,7 +3749,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -3968,7 +3765,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -3983,7 +3780,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4008,7 +3805,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4022,7 +3819,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4038,7 +3835,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4053,7 +3850,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4068,7 +3865,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4089,7 +3886,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4105,7 +3902,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4125,7 +3922,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4142,7 +3939,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4156,7 +3953,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4172,7 +3969,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4186,7 +3983,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4201,7 +3998,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4222,7 +4019,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4238,7 +4035,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4251,7 +4048,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "enumflags2", "frame-support", @@ -4266,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4281,7 +4078,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4301,7 +4098,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4317,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4331,7 +4128,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4353,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4364,7 +4161,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4378,7 +4175,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4396,7 +4193,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "frame-system", @@ -4413,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4431,7 +4228,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-support", "parity-scale-codec", @@ -4444,7 +4241,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4459,7 +4256,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-benchmarking", "frame-support", @@ -4475,7 +4272,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4503,9 +4300,9 @@ dependencies = [ [[package]] name = "parity-multiaddr" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22fe99b938abd57507e37f8d4ef30cd74b33c71face2809b37b8beb71bab15ab" +checksum = "60d477bda9666bc37e5ac9e7e7ee3684f745ec33e6e86a5b48640e0407acda26" dependencies = [ "arrayref", "bs58 0.4.0", @@ -4516,7 +4313,7 @@ dependencies = [ "serde", "static_assertions", "unsigned-varint 0.5.1", - "url 2.2.0", + "url 2.1.1", ] [[package]] @@ -4557,7 +4354,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "libc", "log", "mio-named-pipes", @@ -4576,7 +4373,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297ff91fa36aec49ce183484b102f6b75b46776822bd81525bfc4cc9b0dd0f5c" dependencies = [ "cfg-if 0.1.10", - "hashbrown 0.8.2", + "hashbrown 0.8.0", "impl-trait-for-tuples 0.1.3", "jemallocator", "parity-util-mem-derive", @@ -4618,7 +4415,7 @@ dependencies = [ "rand 0.7.3", "sha-1 0.8.2", "slab", - "url 2.2.0", + "url 2.1.1", ] [[package]] @@ -4627,16 +4424,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -dependencies = [ - "lock_api 0.1.5", - "parking_lot_core 0.4.0", -] - [[package]] name = "parking_lot" version = "0.9.0" @@ -4669,19 +4456,6 @@ dependencies = [ "parking_lot_core 0.8.0", ] -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -dependencies = [ - "libc", - "rand 0.6.5", - "rustc_version", - "smallvec 0.6.13", - "winapi 0.3.9", -] - [[package]] name = "parking_lot_core" version = "0.6.2" @@ -4753,7 +4527,6 @@ checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" dependencies = [ "byteorder", "crypto-mac 0.7.0", - "rayon", ] [[package]] @@ -4844,11 +4617,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.27" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" +checksum = "ca4433fff2ae79342e497d9f8ee990d174071408f28f726d6d83af93e58e48aa" dependencies = [ - "pin-project-internal 0.4.27", + "pin-project-internal 0.4.23", ] [[package]] @@ -4862,9 +4635,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "0.4.27" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" +checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -4884,9 +4657,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.1.11" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" +checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715" [[package]] name = "pin-utils" @@ -4896,9 +4669,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" [[package]] name = "platforms" @@ -5831,7 +5604,7 @@ version = "0.8.26" dependencies = [ "frame-benchmarking", "frame-system", - "futures 0.1.30", + "futures 0.1.29", "futures 0.3.8", "hex", "pallet-balances", @@ -5874,7 +5647,7 @@ dependencies = [ "substrate-test-client", "substrate-test-utils", "tempfile", - "tokio 0.2.22", + "tokio 0.2.21", "tracing", "tracing-futures", ] @@ -5909,31 +5682,31 @@ dependencies = [ [[package]] name = "polling" -version = "2.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" +checksum = "e0720e0b9ea9d52451cf29d3413ba8a9303f8815d9d9653ef70e03ff73e65566" dependencies = [ "cfg-if 0.1.10", "libc", "log", - "wepoll-sys", + "wepoll-sys-stjepang", "winapi 0.3.9", ] [[package]] name = "poly1305" -version = "0.6.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce46de8e53ee414ca4d02bfefac75d8c12fba948b76622a40b4be34dfce980" +checksum = "d9b42192ab143ed7619bf888a7f9c6733a9a2153b218e2cd557cfdb52fbf9bb1" dependencies = [ "universal-hash", ] [[package]] name = "polyval" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5884790f1ce3553ad55fec37b5aaac5882e0e845a2612df744d6c85c9bf046c" +checksum = "d9a50142b55ab3ed0e9f68dfb3709f1d90d29da24e91033f28b96330643107dc" dependencies = [ "cfg-if 0.1.10", "universal-hash", @@ -5941,15 +5714,15 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" [[package]] name = "predicates" -version = "1.0.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bfead12e90dccead362d62bb2c90a5f6fc4584963645bc7f71a735e0b0735a" +checksum = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030" dependencies = [ "difference", "predicates-core", @@ -5997,18 +5770,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +checksum = "e10d4b51f154c8a7fb96fd6dad097cb74b863943ec010ac94b9fd1be8861fe1e" dependencies = [ "toml", ] [[package]] name = "proc-macro-error" -version = "1.0.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", @@ -6019,12 +5792,14 @@ dependencies = [ [[package]] name = "proc-macro-error-attr" -version = "1.0.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", + "syn 1.0.48", + "syn-mid", "version_check", ] @@ -6242,7 +6017,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom 0.1.15", + "getrandom", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", @@ -6291,7 +6066,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom 0.1.15", + "getrandom", ] [[package]] @@ -6394,25 +6169,25 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.5.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" +checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" dependencies = [ - "autocfg 1.0.1", - "crossbeam-deque 0.8.0", + "autocfg 1.0.0", + "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" +checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" dependencies = [ - "crossbeam-channel", - "crossbeam-deque 0.8.0", - "crossbeam-utils 0.8.0", + "crossbeam-deque", + "crossbeam-queue", + "crossbeam-utils", "lazy_static", "num_cpus", ] @@ -6428,17 +6203,17 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.57" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "redox_users" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" dependencies = [ - "getrandom 0.1.15", + "getrandom", "redox_syscall", "rust-argon2", ] @@ -6454,18 +6229,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17626b2f4bcf35b84bf379072a66e28cfe5c3c6ae58b38e4914bb8891dabece" +checksum = "745c1787167ddae5569661d5ffb8b25ae5fedbf46717eaa92d652221cec72623" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c523ccaed8ac4b0288948849a350b37d3035827413c458b6a40ddb614bb4f72" +checksum = "7d21b475ab879ef0e315ad99067fa25778c3b0377f57f1b00207448dac1a3144" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -6546,7 +6321,7 @@ checksum = "952cd6b98c85bbc30efa1ba5783b8abf12fec8b3287ffa52605b9432313e34e4" dependencies = [ "cc", "libc", - "once_cell 1.5.1", + "once_cell", "spin", "untrusted", "web-sys", @@ -6623,21 +6398,21 @@ dependencies = [ [[package]] name = "rust-argon2" -version = "0.8.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19" +checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" dependencies = [ - "base64 0.12.3", + "base64 0.11.0", "blake2b_simd", "constant_time_eq", - "crossbeam-utils 0.7.2", + "crossbeam-utils", ] [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" [[package]] name = "rustc-hash" @@ -6668,9 +6443,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.18.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81" +checksum = "cac94b333ee2aac3284c5b8a1b7fb4dd11cba88c244e3fe33cdbd047af0eb693" dependencies = [ "base64 0.12.3", "log", @@ -6698,7 +6473,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" dependencies = [ "futures 0.3.8", - "pin-project 0.4.27", + "pin-project 0.4.23", "static_assertions", ] @@ -6723,13 +6498,13 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f47b10fa80f6969bbbd9c8e7cc998f082979d402a9e10579e2303a87955395" dependencies = [ - "stream-cipher", + "stream-cipher 0.7.1", ] [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "async-trait", "bytes 0.5.6", @@ -6759,7 +6534,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6782,7 +6557,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6799,7 +6574,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6820,7 +6595,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6831,11 +6606,10 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "ansi_term 0.12.1", "atty", - "bip39", "chrono", "fdlimit", "futures 0.3.8", @@ -6867,7 +6641,8 @@ dependencies = [ "sp-version", "structopt", "thiserror", - "tokio 0.2.22", + "tiny-bip39", + "tokio 0.2.21", "tracing", "tracing-log", "tracing-subscriber", @@ -6876,7 +6651,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6887,7 +6662,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "fnv", @@ -6924,7 +6699,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "blake2-rfc", "hash-db", @@ -6954,7 +6729,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6965,7 +6740,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "fork-tree", @@ -6975,7 +6750,7 @@ dependencies = [ "merlin", "num-bigint", "num-rational", - "num-traits 0.2.14", + "num-traits 0.2.12", "parity-scale-codec", "parking_lot 0.10.2", "pdqselect", @@ -7010,7 +6785,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "futures 0.3.8", @@ -7034,7 +6809,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7047,7 +6822,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7072,7 +6847,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "sc-client-api", @@ -7086,7 +6861,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "lazy_static", @@ -7115,7 +6890,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "log", @@ -7132,7 +6907,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "parity-scale-codec", @@ -7147,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "parity-scale-codec", @@ -7165,7 +6940,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "finality-grandpa", @@ -7175,7 +6950,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.10.2", - "pin-project 0.4.27", + "pin-project 0.4.23", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -7202,7 +6977,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "finality-grandpa", @@ -7226,7 +7001,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7244,7 +7019,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "async-trait", "derive_more", @@ -7258,13 +7033,13 @@ dependencies = [ "sp-application-crypto", "sp-core", "sp-keystore", - "subtle 2.3.0", + "subtle 2.2.3", ] [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "hash-db", "lazy_static", @@ -7283,7 +7058,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "async-std", "async-trait", @@ -7304,11 +7079,11 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log", - "lru 0.4.3", + "lru", "nohash-hasher", "parity-scale-codec", "parking_lot 0.10.2", - "pin-project 0.4.27", + "pin-project 0.4.23", "prost", "prost-build", "rand 0.7.3", @@ -7337,13 +7112,13 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "libp2p", "log", - "lru 0.4.3", + "lru", "sc-network", "sp-runtime", "wasm-timer", @@ -7352,13 +7127,13 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "bytes 0.5.6", "fnv", "futures 0.3.8", "futures-timer 3.0.2", - "hyper 0.13.9", + "hyper 0.13.6", "hyper-rustls", "log", "num_cpus", @@ -7379,7 +7154,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "libp2p", @@ -7392,7 +7167,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7401,7 +7176,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "hash-db", @@ -7434,7 +7209,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "futures 0.3.8", @@ -7458,9 +7233,9 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "jsonrpc-core", "jsonrpc-http-server", "jsonrpc-ipc-server", @@ -7476,12 +7251,12 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "directories", "exit-future", - "futures 0.1.30", + "futures 0.1.29", "futures 0.3.8", "futures-timer 3.0.2", "hash-db", @@ -7492,7 +7267,7 @@ dependencies = [ "parity-scale-codec", "parity-util-mem", "parking_lot 0.10.2", - "pin-project 0.4.27", + "pin-project 0.4.23", "rand 0.7.3", "sc-block-builder", "sc-chain-spec", @@ -7540,7 +7315,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "parity-scale-codec", @@ -7554,7 +7329,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7573,14 +7348,14 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "libp2p", "log", "parking_lot 0.10.2", - "pin-project 0.4.27", + "pin-project 0.4.23", "rand 0.7.3", "serde", "slog", @@ -7594,7 +7369,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "erased-serde", "log", @@ -7613,7 +7388,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "futures 0.3.8", @@ -7634,7 +7409,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "futures 0.3.8", @@ -7676,12 +7451,12 @@ dependencies = [ "arrayref", "arrayvec 0.5.2", "curve25519-dalek 2.1.0", - "getrandom 0.1.15", + "getrandom", "merlin", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", - "subtle 2.3.0", + "subtle 2.2.3", "zeroize", ] @@ -7691,12 +7466,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" - [[package]] name = "scopeguard" version = "1.1.0" @@ -7705,18 +7474,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scroll" -version = "0.10.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" +checksum = "abb2332cb595d33f7edd5700f4cbf94892e680c7f0ae56adab58a35190b66cb1" dependencies = [ "scroll_derive", ] [[package]] name = "scroll_derive" -version = "0.10.4" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12bd20b94c7cdfda8c7ba9b92ad0d9a56e3fa018c25fca83b51aa664c9b4c0d" +checksum = "e367622f934864ffa1c704ba2b82280aab856e3d8213c84c5720257eb34b15b9" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -7735,9 +7504,9 @@ dependencies = [ [[package]] name = "secrecy" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9182278ed645df3477a9c27bfee0621c621aa16f6972635f7f795dae3d81070f" +checksum = "0673d6a6449f5e7d12a1caf424fd9363e2af3a4953023ed455e3c4beef4597c0" dependencies = [ "zeroize", ] @@ -7868,12 +7637,12 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8" +checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if 0.1.10", "cpuid-bool", "digest 0.9.0", "opaque-debug 0.3.0", @@ -7893,12 +7662,11 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.0" +version = "0.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4921be914e16899a80adefb821f8ddb7974e3f1250223575a44ed994882127" +checksum = "06d5a3f5166fb5b42a5439f2eee8b9de149e235961e3eb21c5808fc3ea17ff3e" dependencies = [ "lazy_static", - "loom", ] [[package]] @@ -7939,18 +7707,19 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "signal-hook-registry" -version = "1.2.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce32ea0c6c56d5eacaeb814fbed9960547021d3edd010ded1425f180536b20ab" +checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" dependencies = [ + "arc-swap", "libc", ] [[package]] name = "signature" -version = "1.2.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210" +checksum = "65211b7b6fc3f14ff9fc7a2011a434e3e6880585bd2e9e9396315ae24cbf7852" [[package]] name = "slab" @@ -8019,9 +7788,9 @@ checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" [[package]] name = "snow" -version = "0.7.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795dd7aeeee24468e5a32661f6d27f7b5cbed802031b2d7640c7b10f8fb2dd50" +checksum = "32bf8474159a95551661246cda4976e89356999e3cbfef36f493dacc3fae1e8e" dependencies = [ "aes-gcm", "blake2", @@ -8030,16 +7799,16 @@ dependencies = [ "rand_core 0.5.1", "ring", "rustc_version", - "sha2 0.9.2", - "subtle 2.3.0", - "x25519-dalek", + "sha2 0.9.1", + "subtle 2.2.3", + "x25519-dalek 0.6.0", ] [[package]] name = "socket2" -version = "0.3.16" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd8b795c389288baa5f355489c65e71fd48a02104600d15c4cfbc561e9e429d" +checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918" dependencies = [ "cfg-if 0.1.10", "libc", @@ -8049,9 +7818,9 @@ dependencies = [ [[package]] name = "soketto" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c71ed3d54db0a699f4948e1bb3e45b450fa31fe602621dee6680361d569c88" +checksum = "85457366ae0c6ce56bf05a958aef14cd38513c236568618edbcd9a8c52cb80b0" dependencies = [ "base64 0.12.3", "bytes 0.5.6", @@ -8060,13 +7829,13 @@ dependencies = [ "httparse", "log", "rand 0.7.3", - "sha-1 0.9.2", + "sha-1 0.8.2", ] [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "log", @@ -8078,7 +7847,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "hash-db", "parity-scale-codec", @@ -8093,7 +7862,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8105,7 +7874,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "serde", @@ -8117,10 +7886,10 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "integer-sqrt", - "num-traits 0.2.14", + "num-traits 0.2.12", "parity-scale-codec", "serde", "sp-debug-derive", @@ -8130,7 +7899,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-api", @@ -8142,7 +7911,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8153,7 +7922,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-api", @@ -8165,10 +7934,10 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", - "lru 0.4.3", + "lru", "parity-scale-codec", "parking_lot 0.10.2", "sp-block-builder", @@ -8182,7 +7951,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "serde", "serde_json", @@ -8191,7 +7960,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8217,7 +7986,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "merlin", "parity-scale-codec", @@ -8237,7 +8006,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8246,7 +8015,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8258,7 +8027,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "base58", "blake2-rfc", @@ -8274,7 +8043,7 @@ dependencies = [ "libsecp256k1", "log", "merlin", - "num-traits 0.2.14", + "num-traits 0.2.12", "parity-scale-codec", "parity-util-mem", "parking_lot 0.10.2", @@ -8302,7 +8071,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8311,7 +8080,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8321,7 +8090,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "environmental", "parity-scale-codec", @@ -8332,7 +8101,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "finality-grandpa", "log", @@ -8349,7 +8118,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8361,7 +8130,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "hash-db", @@ -8385,7 +8154,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "lazy_static", "sp-core", @@ -8396,7 +8165,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "async-trait", "derive_more", @@ -8412,7 +8181,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "serde", @@ -8424,7 +8193,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8435,7 +8204,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "sp-api", "sp-core", @@ -8445,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "backtrace", "log", @@ -8454,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "serde", "sp-core", @@ -8463,7 +8232,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "either", "hash256-std-hasher", @@ -8485,7 +8254,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8501,7 +8270,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "Inflector", "proc-macro-crate", @@ -8513,7 +8282,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "serde", "serde_json", @@ -8522,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-api", @@ -8535,7 +8304,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8545,11 +8314,11 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "hash-db", "log", - "num-traits 0.2.14", + "num-traits 0.2.12", "parity-scale-codec", "parking_lot 0.10.2", "rand 0.7.3", @@ -8567,12 +8336,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8585,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "sp-core", @@ -8598,7 +8367,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8612,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "log", "parity-scale-codec", @@ -8625,7 +8394,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "derive_more", "futures 0.3.8", @@ -8640,7 +8409,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "hash-db", "memory-db", @@ -8654,7 +8423,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "futures-core", @@ -8666,7 +8435,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8678,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8694,9 +8463,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" [[package]] name = "static_assertions" @@ -8713,14 +8482,23 @@ dependencies = [ "rand 0.5.6", ] +[[package]] +name = "stream-cipher" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f8ed9974042b8c3672ff3030a69fcc03b74c47c3d1ecb7755e8a3626011e88" +dependencies = [ + "generic-array 0.14.2", +] + [[package]] name = "stream-cipher" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c80e15f898d8d8f25db24c253ea615cc14acf418ff307822995814e7d42cfa89" dependencies = [ - "block-cipher", - "generic-array 0.14.4", + "block-cipher 0.8.0", + "generic-array 0.14.2", ] [[package]] @@ -8811,12 +8589,12 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "chrono", "console_error_panic_hook", "console_log", - "futures 0.1.30", + "futures 0.1.29", "futures 0.3.8", "futures-timer 3.0.2", "js-sys", @@ -8837,7 +8615,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "platforms", ] @@ -8845,7 +8623,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8868,23 +8646,23 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.9", + "hyper 0.13.6", "log", "prometheus", - "tokio 0.2.22", + "tokio 0.2.21", ] [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "futures 0.3.8", "hash-db", "hex", @@ -8909,17 +8687,17 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", - "tokio 0.2.22", + "tokio 0.2.21", ] [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c180950de63dbdfaa11053a8a56f35e694ed9e36" +source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -8940,9 +8718,9 @@ checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" [[package]] name = "subtle" -version = "2.3.0" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" +checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1" [[package]] name = "syn" @@ -8966,6 +8744,17 @@ dependencies = [ "unicode-xid 0.2.1", ] +[[package]] +name = "syn-mid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.48", +] + [[package]] name = "synstructure" version = "0.12.4" @@ -9049,7 +8838,7 @@ dependencies = [ "structopt", "substrate-test-utils", "test-parachain-adder", - "tokio 0.2.22", + "tokio 0.2.21", ] [[package]] @@ -9131,12 +8920,11 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "wasi 0.10.0+wasi-snapshot-preview1", "winapi 0.3.9", ] @@ -9148,11 +8936,11 @@ checksum = "d9e44c4759bae7f1032e286a7ef990bd9ed23fe831b7eeba0beb97484c2e59b8" dependencies = [ "anyhow", "hmac 0.8.1", - "once_cell 1.5.1", + "once_cell", "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.2", + "sha2 0.9.1", "thiserror", "unicode-normalization", "zeroize", @@ -9169,18 +8957,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b78a366903f506d2ad52ca8dc552102ffdd3e937ba8a227f024dc1d1eae28575" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" [[package]] name = "tokio" @@ -9189,7 +8968,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "mio", "num_cpus", "tokio-codec", @@ -9208,9 +8987,9 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.22" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd" +checksum = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58" dependencies = [ "bytes 0.5.6", "fnv", @@ -9237,7 +9016,7 @@ checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ "bytes 0.4.12", "either", - "futures 0.1.30", + "futures 0.1.29", ] [[package]] @@ -9247,7 +9026,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "tokio-io", ] @@ -9257,7 +9036,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "tokio-executor", ] @@ -9267,8 +9046,8 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.30", + "crossbeam-utils", + "futures 0.1.29", ] [[package]] @@ -9277,7 +9056,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "tokio-io", "tokio-threadpool", ] @@ -9289,7 +9068,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "log", ] @@ -9311,7 +9090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "mio", "mio-named-pipes", "tokio 0.1.22", @@ -9323,8 +9102,8 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.30", + "crossbeam-utils", + "futures 0.1.29", "lazy_static", "log", "mio", @@ -9338,13 +9117,13 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.14.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12831b255bcfa39dc0436b01e19fea231a37db570686c06ee72c423479f889a" +checksum = "228139ddd4fea3fa345a29233009635235833e52807af7ea6448ead03890d6a9" dependencies = [ "futures-core", "rustls", - "tokio 0.2.22", + "tokio 0.2.21", "webpki", ] @@ -9354,7 +9133,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", ] [[package]] @@ -9364,7 +9143,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" dependencies = [ "fnv", - "futures 0.1.30", + "futures 0.1.29", ] [[package]] @@ -9374,7 +9153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "iovec", "mio", "tokio-io", @@ -9387,10 +9166,10 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" dependencies = [ - "crossbeam-deque 0.7.3", + "crossbeam-deque", "crossbeam-queue", - "crossbeam-utils 0.7.2", - "futures 0.1.30", + "crossbeam-utils", + "futures 0.1.29", "lazy_static", "log", "num_cpus", @@ -9404,8 +9183,8 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.30", + "crossbeam-utils", + "futures 0.1.29", "slab", "tokio-executor", ] @@ -9417,7 +9196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "log", "mio", "tokio-codec", @@ -9432,7 +9211,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.29", "iovec", "libc", "log", @@ -9454,14 +9233,14 @@ dependencies = [ "futures-sink", "log", "pin-project-lite", - "tokio 0.2.22", + "tokio 0.2.21", ] [[package]] name = "toml" -version = "0.5.7" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" +checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" dependencies = [ "serde", ] @@ -9479,7 +9258,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" dependencies = [ "cfg-if 0.1.10", - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -9521,7 +9299,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" dependencies = [ - "pin-project 0.4.27", + "pin-project 0.4.23", "tracing", ] @@ -9548,9 +9326,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.15" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" +checksum = "4ef0a5e15477aa303afbfac3a44cba9b6430fdaad52423b1e6c0dbbe28c3eedd" dependencies = [ "ansi_term 0.12.1", "chrono", @@ -9581,7 +9359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e55f7ace33d6237e14137e386f4e1672e2a5c6bbc97fef9f438581a143971f0" dependencies = [ "hash-db", - "hashbrown 0.8.2", + "hashbrown 0.8.0", "log", "rustc-hex", "smallvec 1.5.0", @@ -9598,19 +9376,17 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "twox-hash" -version = "1.6.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" +checksum = "3bfd5b7557925ce778ff9b9ef90e3ade34c524b5ff10e239c69a42d546d2af56" dependencies = [ - "cfg-if 0.1.10", "rand 0.7.3", - "static_assertions", ] [[package]] @@ -9627,9 +9403,9 @@ checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" [[package]] name = "uint" -version = "0.8.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177" +checksum = "173cd16430c206dc1a430af8a89a0e9c076cf15cb42b4aedb10e8cc8fee73681" dependencies = [ "byteorder", "crunchy", @@ -9657,9 +9433,9 @@ dependencies = [ [[package]] name = "unicode-normalization" -version = "0.1.14" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f98e67a4d84f730d343392f9bfff7d21e3fca562b9cb7a43b768350beeddc6" +checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" dependencies = [ "tinyvec", ] @@ -9694,8 +9470,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" dependencies = [ - "generic-array 0.14.4", - "subtle 2.3.0", + "generic-array 0.14.2", + "subtle 2.2.3", ] [[package]] @@ -9741,11 +9517,10 @@ dependencies = [ [[package]] name = "url" -version = "2.2.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ - "form_urlencoded", "idna 0.2.0", "matches", "percent-encoding 2.1.0", @@ -9792,9 +9567,9 @@ dependencies = [ [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "9571542c2ce85ce642e6b58b3364da2fb53526360dfb7c211add4f5c23105ff7" [[package]] name = "want" @@ -9802,7 +9577,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ - "futures 0.1.30", + "futures 0.1.29", "log", "try-lock", ] @@ -9823,12 +9598,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 = "wasm-bindgen" version = "0.2.68" @@ -9921,7 +9690,7 @@ dependencies = [ "libc", "memory_units", "num-rational", - "num-traits 0.2.14", + "num-traits 0.2.12", "parity-wasm", "wasmi-validation", ] @@ -10104,27 +9873,27 @@ dependencies = [ [[package]] name = "wast" -version = "27.0.0" +version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2c3ef5f6a72dffa44c24d5811123f704e18a1dbc83637d347b1852b41d3835c" +checksum = "0b1844f66a2bc8526d71690104c0e78a8e59ffa1597b7245769d174ebb91deb5" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.28" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835cf59c907f67e2bbc20f50157e08f35006fe2a8444d8ec9f5683e22f937045" +checksum = "ce85d72b74242c340e9e3492cfb602652d7bb324c3172dd441b5577e39a2e18c" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.45" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d" +checksum = "863539788676619aac1a23e2df3655e96b32b0e05eb72ca34ba045ad573c625d" dependencies = [ "js-sys", "wasm-bindgen", @@ -10150,10 +9919,10 @@ dependencies = [ ] [[package]] -name = "wepoll-sys" -version = "3.0.1" +name = "wepoll-sys-stjepang" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff" +checksum = "6fd319e971980166b53e17b1026812ad66c6b54063be879eb182342b55284694" dependencies = [ "cc", ] @@ -10296,6 +10065,17 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "x25519-dalek" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637ff90c9540fa3073bb577e65033069e4bae7c79d49d74aa3ffdf5342a53217" +dependencies = [ + "curve25519-dalek 2.1.0", + "rand_core 0.5.1", + "zeroize", +] + [[package]] name = "x25519-dalek" version = "1.1.0" @@ -10369,9 +10149,9 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index cd382ff35a..d9db1a5e1b 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -162,10 +162,7 @@ fn new_partial(config: &mut Configuration) -> Result< grandpa::LinkHalf, FullSelectChain>, babe::BabeLink ), - ( - grandpa::SharedVoterState, - Arc>, - ), + grandpa::SharedVoterState, ) >, Error @@ -219,7 +216,6 @@ fn new_partial(config: &mut Configuration) -> Result< babe_link.clone(), block_import.clone(), Some(Box::new(justification_import)), - None, client.clone(), select_chain.clone(), inherent_data_providers.clone(), @@ -235,7 +231,7 @@ fn new_partial(config: &mut Configuration) -> Result< GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone()); let import_setup = (block_import.clone(), grandpa_link, babe_link.clone()); - let rpc_setup = (shared_voter_state.clone(), finality_proof_provider.clone()); + let rpc_setup = shared_voter_state.clone(); let babe_config = babe_link.config().clone(); let shared_epoch_changes = babe_link.epoch_changes().clone(); @@ -508,7 +504,7 @@ pub fn new_full( let prometheus_registry = config.prometheus_registry().cloned(); - let (shared_voter_state, finality_proof_provider) = rpc_setup; + let shared_voter_state = rpc_setup; #[cfg(feature = "real-overseer")] config.network.notifications_protocols.extend(polkadot_network_bridge::notifications_protocol_info()); @@ -522,8 +518,6 @@ pub fn new_full( import_queue, on_demand: None, block_announce_validator_builder: None, - finality_proof_request_builder: None, - finality_proof_provider: Some(finality_proof_provider.clone()), })?; if config.offchain_worker.enabled { @@ -774,16 +768,12 @@ fn new_light(mut config: Configuration) -> Result<(TaskManage on_demand.clone(), )); - let grandpa_block_import = grandpa::light_block_import( + let (grandpa_block_import, _) = grandpa::block_import( client.clone(), - backend.clone(), &(client.clone() as Arc<_>), - Arc::new(on_demand.checker().clone()), + select_chain.clone(), )?; - - let finality_proof_import = grandpa_block_import.clone(); - let finality_proof_request_builder = - finality_proof_import.create_finality_proof_request_builder(); + let justification_import = grandpa_block_import.clone(); let (babe_block_import, babe_link) = babe::block_import( babe::Config::get_or_compute(&*client)?, @@ -797,8 +787,7 @@ fn new_light(mut config: Configuration) -> Result<(TaskManage let import_queue = babe::import_queue( babe_link, babe_block_import, - None, - Some(Box::new(finality_proof_import)), + Some(Box::new(justification_import)), client.clone(), select_chain.clone(), inherent_data_providers.clone(), @@ -807,9 +796,6 @@ fn new_light(mut config: Configuration) -> Result<(TaskManage consensus_common::NeverCanAuthor, )?; - let finality_proof_provider = - GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone()); - let (network, network_status_sinks, system_rpc_tx, network_starter) = service::build_network(service::BuildNetworkParams { config: &config, @@ -819,8 +805,6 @@ fn new_light(mut config: Configuration) -> Result<(TaskManage import_queue, on_demand: Some(on_demand.clone()), block_announce_validator_builder: None, - finality_proof_request_builder: Some(finality_proof_request_builder), - finality_proof_provider: Some(finality_proof_provider), })?; if config.offchain_worker.enabled { -- GitLab From ab5dd449f854c5dcffea225f3e4a9854e57786a3 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Mon, 23 Nov 2020 19:23:18 +0100 Subject: [PATCH 037/203] *: Update authority discovery and remove WorkerConfig (#1953) * *: Update authority discovery and remove WorkerConfig With https://github.com/paritytech/substrate/pull/7545 the authority discovery module queries and publishes addresses on an exponentially increasing interval. Doing so should make custom configurations obsolete, as operations are retried in a timely fashion in the first minutes. * */Cargo.{lock,toml}: Point to mxinden substrate auth-disc-timing * Revert "*/Cargo.{lock,toml}: Point to mxinden substrate auth-disc-timing" This reverts commit 0785943a1e377454f088814ef20f4432de09da7a. * "Update Substrate" * Revert ""Update Substrate"" This reverts commit 377b221e1853b2c383f0c416d686535b545796cb. * Cargo.lock: Manual Substrate update * node/test/service/src/lib: Remove unused import * parachain/test-parachains/adder: Remove unused import Co-authored-by: parity-processbot <> --- Cargo.lock | 272 +++++++++--------- cli/src/command.rs | 1 - node/service/src/lib.rs | 11 +- node/test/service/src/lib.rs | 7 +- .../adder/collator/src/main.rs | 6 - 5 files changed, 139 insertions(+), 158 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cb49d84548..524da63975 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1459,7 +1459,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", ] @@ -1467,7 +1467,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -1485,7 +1485,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "chrono", "frame-benchmarking", @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -1523,7 +1523,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "serde", @@ -1534,7 +1534,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "bitflags", "frame-metadata", @@ -1559,7 +1559,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1570,7 +1570,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1582,7 +1582,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1592,7 +1592,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1608,7 +1608,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -1622,7 +1622,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-api", @@ -3749,7 +3749,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -3765,7 +3765,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -3780,7 +3780,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3805,7 +3805,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3819,7 +3819,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3835,7 +3835,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3850,7 +3850,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3865,7 +3865,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3886,7 +3886,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3902,7 +3902,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3922,7 +3922,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3939,7 +3939,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -3953,7 +3953,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3969,7 +3969,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -3983,7 +3983,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -3998,7 +3998,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4019,7 +4019,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4035,7 +4035,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -4048,7 +4048,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "enumflags2", "frame-support", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4078,7 +4078,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -4098,7 +4098,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -4128,7 +4128,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4150,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4161,7 +4161,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -4175,7 +4175,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4193,7 +4193,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "frame-system", @@ -4210,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4228,7 +4228,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-support", "parity-scale-codec", @@ -4241,7 +4241,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4256,7 +4256,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4272,7 +4272,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6504,7 +6504,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "async-trait", "bytes 0.5.6", @@ -6534,7 +6534,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6557,7 +6557,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6574,7 +6574,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6595,7 +6595,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6606,7 +6606,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6651,7 +6651,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6662,7 +6662,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "fnv", @@ -6699,7 +6699,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "blake2-rfc", "hash-db", @@ -6729,7 +6729,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6740,7 +6740,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "fork-tree", @@ -6785,7 +6785,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "futures 0.3.8", @@ -6809,7 +6809,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6822,7 +6822,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6847,7 +6847,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "sc-client-api", @@ -6861,7 +6861,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "lazy_static", @@ -6890,7 +6890,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "log", @@ -6907,7 +6907,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "parity-scale-codec", @@ -6922,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "parity-scale-codec", @@ -6940,7 +6940,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "finality-grandpa", @@ -6977,7 +6977,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "finality-grandpa", @@ -7001,7 +7001,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7019,7 +7019,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "async-trait", "derive_more", @@ -7039,7 +7039,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "hash-db", "lazy_static", @@ -7058,7 +7058,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "async-std", "async-trait", @@ -7112,7 +7112,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7127,7 +7127,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "bytes 0.5.6", "fnv", @@ -7154,7 +7154,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "libp2p", @@ -7167,7 +7167,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7176,7 +7176,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "hash-db", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "futures 0.3.8", @@ -7233,7 +7233,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7251,7 +7251,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "directories", @@ -7315,7 +7315,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "parity-scale-codec", @@ -7329,7 +7329,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7348,7 +7348,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7369,7 +7369,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "erased-serde", "log", @@ -7388,7 +7388,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "futures 0.3.8", @@ -7409,7 +7409,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "futures 0.3.8", @@ -7835,7 +7835,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "log", @@ -7847,7 +7847,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "hash-db", "parity-scale-codec", @@ -7862,7 +7862,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7874,7 +7874,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "serde", @@ -7886,7 +7886,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7899,7 +7899,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-api", @@ -7911,7 +7911,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7922,7 +7922,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-api", @@ -7934,7 +7934,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "lru", @@ -7951,7 +7951,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "serde", "serde_json", @@ -7960,7 +7960,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7986,7 +7986,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "merlin", "parity-scale-codec", @@ -8006,7 +8006,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8015,7 +8015,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8027,7 +8027,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "base58", "blake2-rfc", @@ -8071,7 +8071,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8080,7 +8080,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8090,7 +8090,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "environmental", "parity-scale-codec", @@ -8101,7 +8101,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "finality-grandpa", "log", @@ -8118,7 +8118,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8130,7 +8130,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "hash-db", @@ -8154,7 +8154,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "lazy_static", "sp-core", @@ -8165,7 +8165,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "async-trait", "derive_more", @@ -8181,7 +8181,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "serde", @@ -8193,7 +8193,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8204,7 +8204,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "sp-api", "sp-core", @@ -8214,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "backtrace", "log", @@ -8223,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "serde", "sp-core", @@ -8232,7 +8232,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "either", "hash256-std-hasher", @@ -8254,7 +8254,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8270,7 +8270,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "Inflector", "proc-macro-crate", @@ -8282,7 +8282,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "serde", "serde_json", @@ -8291,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-api", @@ -8304,7 +8304,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8314,7 +8314,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "hash-db", "log", @@ -8336,12 +8336,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8354,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "sp-core", @@ -8367,7 +8367,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8381,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "log", "parity-scale-codec", @@ -8394,7 +8394,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "derive_more", "futures 0.3.8", @@ -8409,7 +8409,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "hash-db", "memory-db", @@ -8423,7 +8423,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "futures-core", @@ -8435,7 +8435,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8447,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8589,7 +8589,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "chrono", "console_error_panic_hook", @@ -8615,7 +8615,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "platforms", ] @@ -8623,7 +8623,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8646,7 +8646,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "async-std", "derive_more", @@ -8660,7 +8660,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8687,7 +8687,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8697,7 +8697,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f16acffe37285a93b793672c63146f8ecdab7a5b" +source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/cli/src/command.rs b/cli/src/command.rs index 6d2aa1acd6..3cb84b21c5 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -148,7 +148,6 @@ pub fn run() -> Result<()> { config, service::IsCollator::No, grandpa_pause, - None, ).map(|full| full.task_manager), } }) diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index d9db1a5e1b..7c882eb458 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -33,7 +33,7 @@ use { polkadot_node_core_proposer::ProposerFactory, polkadot_overseer::{AllSubsystems, BlockInfo, Overseer, OverseerHandler}, polkadot_primitives::v1::ParachainHost, - sc_authority_discovery::{Service as AuthorityDiscoveryService, WorkerConfig as AuthorityWorkerConfig}, + sc_authority_discovery::Service as AuthorityDiscoveryService, sp_blockchain::HeaderBackend, sp_core::traits::SpawnNamed, sp_keystore::SyncCryptoStorePtr, @@ -474,7 +474,6 @@ pub fn new_full( mut config: Configuration, is_collator: IsCollator, grandpa_pause: Option<(u32, u32)>, - authority_discovery_config: Option, isolation_strategy: IsolationStrategy, ) -> Result>>, Error> where @@ -583,8 +582,7 @@ pub fn new_full( Event::Dht(e) => Some(e), _ => None, }}); - let (worker, service) = sc_authority_discovery::new_worker_and_service_with_config( - authority_discovery_config.unwrap_or_default(), + let (worker, service) = sc_authority_discovery::new_worker_and_service( client.clone(), network.clone(), Box::pin(dht_event_stream), @@ -897,14 +895,12 @@ pub fn build_full( config: Configuration, is_collator: IsCollator, grandpa_pause: Option<(u32, u32)>, - authority_discovery_config: Option, ) -> Result, Error> { if config.chain_spec.is_rococo() { new_full::( config, is_collator, grandpa_pause, - authority_discovery_config, Default::default(), ).map(|full| full.with_client(Client::Rococo)) } else if config.chain_spec.is_kusama() { @@ -912,7 +908,6 @@ pub fn build_full( config, is_collator, grandpa_pause, - authority_discovery_config, Default::default(), ).map(|full| full.with_client(Client::Kusama)) } else if config.chain_spec.is_westend() { @@ -920,7 +915,6 @@ pub fn build_full( config, is_collator, grandpa_pause, - authority_discovery_config, Default::default(), ).map(|full| full.with_client(Client::Westend)) } else { @@ -928,7 +922,6 @@ pub fn build_full( config, is_collator, grandpa_pause, - authority_discovery_config, Default::default(), ).map(|full| full.with_client(Client::Polkadot)) } diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index aa46bd6d7e..9124be38c7 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -54,7 +54,7 @@ use sp_blockchain::HeaderBackend; use sp_keyring::Sr25519Keyring; use sp_runtime::{codec::Encode, generic, traits::IdentifyAccount, MultiSigner}; use sp_state_machine::BasicExternalities; -use std::{sync::Arc, time::Duration}; +use std::sync::Arc; use substrate_test_client::{BlockchainEventsExt, RpcHandlersExt, RpcTransactionOutput, RpcTransactionError}; native_executor_instance!( @@ -82,11 +82,6 @@ pub fn new_full( config, is_collator, None, - Some(sc_authority_discovery::WorkerConfig { - query_interval: Duration::from_secs(1), - query_start_delay: Duration::from_secs(0), - ..Default::default() - }), polkadot_parachain::wasm_executor::IsolationStrategy::InProcess, ).map_err(Into::into) } diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index b41201fd46..3145bf72c1 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -21,7 +21,6 @@ use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProt use polkadot_primitives::v1::Id as ParaId; use sc_cli::{Result, Role, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; -use std::time::Duration; use test_parachain_adder_collator::Collator; const PARA_ID: ParaId = ParaId::new(100); @@ -60,11 +59,6 @@ fn main() -> Result<()> { config, polkadot_service::IsCollator::Yes(collator.collator_id()), None, - Some(sc_authority_discovery::WorkerConfig { - query_interval: Duration::from_secs(1), - query_start_delay: Duration::from_secs(0), - ..Default::default() - }), )?; let mut overseer_handler = full_node .overseer_handler -- GitLab From a2fe0f84d641ce4983fb81cc8a7ab3c4d6b802ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Nov 2020 09:25:04 +0100 Subject: [PATCH 038/203] Bump color-eyre from 0.5.7 to 0.5.8 (#2002) Bumps [color-eyre](https://github.com/yaahc/color-eyre) from 0.5.7 to 0.5.8. - [Release notes](https://github.com/yaahc/color-eyre/releases) - [Changelog](https://github.com/yaahc/color-eyre/blob/master/CHANGELOG.md) - [Commits](https://github.com/yaahc/color-eyre/compare/v0.5.7...v0.5.8) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 524da63975..9c1d854145 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -755,9 +755,9 @@ dependencies = [ [[package]] name = "color-eyre" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86bc0bb03923141924d5b713a4acd7607c790f3fbc769abe63fe3f38bb268112" +checksum = "8fb57305b07ffcc1a4d08808f1f2200647c8e3d91a4c83d2810ae20c997274e0" dependencies = [ "backtrace", "color-spantrace", diff --git a/Cargo.toml b/Cargo.toml index 7cdb487805..a4127620f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ readme = "README.md" [dependencies] cli = { package = "polkadot-cli", path = "cli" } -color-eyre = "0.5.7" +color-eyre = "0.5.8" thiserror = "1.0.22" futures = "0.3.8" service = { package = "polkadot-service", path = "node/service" } -- GitLab From 26e3ca57f72aff99d3b0b60bcc5b80bb3ae612f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Nov 2020 09:25:29 +0100 Subject: [PATCH 039/203] Bump assert_cmd from 1.0.1 to 1.0.2 (#2003) Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 1.0.1 to 1.0.2. - [Release notes](https://github.com/assert-rs/assert_cmd/releases) - [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md) - [Commits](https://github.com/assert-rs/assert_cmd/compare/v1.0.1...v1.0.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c1d854145..6f1b12c83e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -192,9 +192,9 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c88b9ca26f9c16ec830350d309397e74ee9abdfd8eb1f71cb6ecc71a3fc818da" +checksum = "3dc1679af9a1ab4bea16f228b05d18f8363f8327b1fa8db00d2760cfafc6b61e" dependencies = [ "doc-comment", "predicates", diff --git a/Cargo.toml b/Cargo.toml index a4127620f0..1b15de7aec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ service = { package = "polkadot-service", path = "node/service" } parity-util-mem = { version = "*", default-features = false, features = ["jemalloc-global"] } [dev-dependencies] -assert_cmd = "1.0.1" +assert_cmd = "1.0.2" nix = "0.19.0" tempfile = "3.1.0" -- GitLab From 967d30b8ec9a422fb99497c271bb2bc47c13a21d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Nov 2020 09:44:27 +0100 Subject: [PATCH 040/203] Bump tracing from 0.1.21 to 0.1.22 (#2001) Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.21 to 0.1.22. - [Release notes](https://github.com/tokio-rs/tracing/releases) - [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.21...tracing-0.1.22) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 24 ++++++++++++------- node/collation-generation/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/backing/Cargo.toml | 2 +- node/core/bitfield-signing/Cargo.toml | 2 +- node/core/candidate-selection/Cargo.toml | 2 +- node/core/candidate-validation/Cargo.toml | 2 +- node/core/chain-api/Cargo.toml | 2 +- node/core/proposer/Cargo.toml | 2 +- node/core/provisioner/Cargo.toml | 2 +- node/core/runtime-api/Cargo.toml | 2 +- .../availability-distribution/Cargo.toml | 2 +- node/network/bitfield-distribution/Cargo.toml | 2 +- node/network/bridge/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/pov-distribution/Cargo.toml | 2 +- .../network/statement-distribution/Cargo.toml | 2 +- node/overseer/Cargo.toml | 2 +- node/service/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- node/test/service/Cargo.toml | 2 +- 23 files changed, 37 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f1b12c83e..362076f70e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -299,7 +299,7 @@ dependencies = [ "memchr", "num_cpus", "once_cell", - "pin-project-lite", + "pin-project-lite 0.1.7", "pin-utils", "slab", "wasm-bindgen-futures", @@ -1760,7 +1760,7 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite", + "pin-project-lite 0.1.7", "waker-fn", ] @@ -4661,6 +4661,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715" +[[package]] +name = "pin-project-lite" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" + [[package]] name = "pin-utils" version = "0.1.0" @@ -5929,7 +5935,7 @@ checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" dependencies = [ "futures-core", "futures-sink", - "pin-project-lite", + "pin-project-lite 0.1.7", ] [[package]] @@ -9001,7 +9007,7 @@ dependencies = [ "mio", "mio-uds", "num_cpus", - "pin-project-lite", + "pin-project-lite 0.1.7", "signal-hook-registry", "slab", "tokio-macros", @@ -9232,7 +9238,7 @@ dependencies = [ "futures-core", "futures-sink", "log", - "pin-project-lite", + "pin-project-lite 0.1.7", "tokio 0.2.21", ] @@ -9253,12 +9259,12 @@ checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" [[package]] name = "tracing" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ - "cfg-if 0.1.10", - "pin-project-lite", + "cfg-if 1.0.0", + "pin-project-lite 0.2.0", "tracing-attributes", "tracing-core", ] diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 68a23947f5..fa19ddec4a 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-erasure-coding = { path = "../../erasure-coding" } polkadot-node-primitives = { path = "../primitives" } diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 4e20f81171..210d3f8d88 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -10,7 +10,7 @@ futures-timer = "3.0.2" kvdb = "0.7.0" kvdb-rocksdb = "0.9.1" thiserror = "1.0.22" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", features = ["derive"] } diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index 9368ee0633..f56ef9c274 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -14,7 +14,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } erasure-coding = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } statement-table = { package = "polkadot-statement-table", path = "../../../statement-table" } bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" thiserror = "1.0.22" diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index 9763bc2b88..1d60d85eb8 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/candidate-selection/Cargo.toml b/node/core/candidate-selection/Cargo.toml index 642a38d728..3d988e21e0 100644 --- a/node/core/candidate-selection/Cargo.toml +++ b/node/core/candidate-selection/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 4965e3b573..456a8d7f96 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" sp-core = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index fda7dd17f2..43256704c2 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/proposer/Cargo.toml b/node/core/proposer/Cargo.toml index 68b0c1ca80..a846238c57 100644 --- a/node/core/proposer/Cargo.toml +++ b/node/core/proposer/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.8" futures-timer = "3.0.2" -tracing = "0.1.21" +tracing = "0.1.22" polkadot-node-subsystem = { path = "../../subsystem" } polkadot-overseer = { path = "../../overseer" } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index 6ab65ff65b..c5fccfd43b 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index 393c8aff1b..abf88e0634 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index e43768e637..0a6bc26564 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index bfa48f6c26..a4bf58e382 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index ab15cb9e98..132fdc4b16 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] async-trait = "0.1.42" futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 49844e9c7e..6d390fb1db 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" thiserror = "1.0.22" diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 4d22587f68..6ef2d10a56 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index 8c80d69224..dd7a9adf8d 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } node-primitives = { package = "polkadot-node-primitives", path = "../../primitives" } diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index 968b8d0134..dd9ca81d3f 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" futures-timer = "3.0.2" streamunordered = "0.5.1" diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 397449c8b1..10f89d66ef 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -55,7 +55,7 @@ prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https: futures = "0.3.8" hex-literal = "0.3.1" lazy_static = "1.4.0" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" parking_lot = "0.11.1" serde = { version = "1.0.117", features = ["derive"] } diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 21cd3a4d56..6f3db3acd8 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -9,7 +9,7 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.42" futures = "0.3.8" futures-timer = "3.0.2" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 0a1dfc0df3..19a0238799 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -14,7 +14,7 @@ parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.2" streamunordered = "0.5.1" thiserror = "1.0.22" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-node-primitives = { path = "../primitives" } diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 07fa439c0a..aedbe9dd71 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -10,7 +10,7 @@ async-trait = "0.1.42" derive_more = "0.99.11" futures = "0.3.8" futures-timer = "3.0.2" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index c8b7d6610c..f28f58a326 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.8" futures01 = { package = "futures", version = "0.1.29" } hex = "0.4.2" -tracing = "0.1.21" +tracing = "0.1.22" tracing-futures = "0.2.4" rand = "0.7.3" tempfile = "3.1.0" -- GitLab From 2ffdbe149e1a122723c0044f11ee261777717f97 Mon Sep 17 00:00:00 2001 From: aaron <62870322+armatrix@users.noreply.github.com> Date: Tue, 24 Nov 2020 16:59:45 +0800 Subject: [PATCH 041/203] Update docker.md (#2000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit when you use `CMD ["/usr/local/bin/polkadot"]` in dockerfile, you don’t need to use `polkadot` while creating a container. --- doc/docker.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/docker.md b/doc/docker.md index c2c437a647..1d3b860a06 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -7,29 +7,29 @@ the polkadot binary, pulled from our package repository. Let´s first check the version we have. The first time you run this command, the polkadot docker image will be downloaded. This takes a bit of time and bandwidth, be patient: ```bash -docker run --rm -it parity/polkadot:latest polkadot --version +docker run --rm -it parity/polkadot:latest --version ``` You can also pass any argument/flag that polkadot supports: ```bash -docker run --rm -it parity/polkadot:latest polkadot --chain westend --name "PolkaDocker" +docker run --rm -it parity/polkadot:latest --chain westend --name "PolkaDocker" ``` Once you are done experimenting and picking the best node name :) you can start polkadot as daemon, exposes the polkadot ports and mount a volume that will keep your blockchain data locally: ```bash -docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data parity/polkadot:latest polkadot --chain westend +docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data parity/polkadot:latest --chain westend ``` Additionally if you want to have custom node name you can add the `--name "YourName"` at the end ```bash -docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data parity/polkadot:latest polkadot --chain westend --name "PolkaDocker" +docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data parity/polkadot:latest --chain westend --name "PolkaDocker" ``` ```bash -docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data parity/polkadot:latest polkadot --rpc-external --chain westend +docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data parity/polkadot:latest --rpc-external --chain westend ``` If you want to connect to rpc port 9933, then must add polkadot startup parameter: `--rpc-external`. @@ -70,7 +70,7 @@ If you run into issues with polkadot when using docker, please run the following (replace the tag with the appropriate one if you do not use latest): ```bash -docker run --rm -it parity/polkadot:latest polkadot --version +docker run --rm -it parity/polkadot:latest --version ``` This will show you the polkadot version as well as the git commit ref that was used to build your container. -- GitLab From 7c2f251340226f099890bee499d24d654c080f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 24 Nov 2020 11:50:27 +0100 Subject: [PATCH 042/203] Make sure we inform statement listeners about received statements (#1999) --- .../network/statement-distribution/src/lib.rs | 76 +++++++++++-------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index d8afe8341b..04517477a3 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -312,7 +312,9 @@ impl PeerData { fingerprint: &(CompactStatement, ValidatorIndex), max_message_count: usize, ) -> Result { - self.view_knowledge.get_mut(relay_parent).ok_or(COST_UNEXPECTED_STATEMENT)? + self.view_knowledge + .get_mut(relay_parent) + .ok_or(COST_UNEXPECTED_STATEMENT)? .receive(fingerprint, max_message_count) } } @@ -492,13 +494,15 @@ fn check_statement_signature( .and_then(|v| statement.check_signature(&signing_context, v)) } +type StatementListeners = Vec>; + /// Informs all registered listeners about a newly received statement. /// /// Removes all closed listeners. #[tracing::instrument(level = "trace", skip(listeners), fields(subsystem = LOG_TARGET))] async fn inform_statement_listeners( statement: &SignedFullStatement, - listeners: &mut Vec>, + listeners: &mut StatementListeners, ) { // Ignore the errors since these will be removed later. stream::iter(listeners.iter_mut()).for_each_concurrent( @@ -524,36 +528,38 @@ async fn circulate_statement_and_dependents( statement: SignedFullStatement, metrics: &Metrics, ) { - if let Some(active_head)= active_heads.get_mut(&relay_parent) { - - // First circulate the statement directly to all peers needing it. - // The borrow of `active_head` needs to encompass only this (Rust) statement. - let outputs: Option<(CandidateHash, Vec)> = { - match active_head.note_statement(statement) { - NotedStatement::Fresh(stored) => Some(( - *stored.compact().candidate_hash(), - circulate_statement(peers, ctx, relay_parent, stored).await, - )), - _ => None, - } - }; + let active_head = match active_heads.get_mut(&relay_parent) { + Some(res) => res, + None => return, + }; - // Now send dependent statements to all peers needing them, if any. - if let Some((candidate_hash, peers_needing_dependents)) = outputs { - for peer in peers_needing_dependents { - if let Some(peer_data) = peers.get_mut(&peer) { - // defensive: the peer data should always be some because the iterator - // of peers is derived from the set of peers. - send_statements_about( - peer, - peer_data, - ctx, - relay_parent, - candidate_hash, - &*active_head, - metrics, - ).await; - } + // First circulate the statement directly to all peers needing it. + // The borrow of `active_head` needs to encompass only this (Rust) statement. + let outputs: Option<(CandidateHash, Vec)> = { + match active_head.note_statement(statement) { + NotedStatement::Fresh(stored) => Some(( + *stored.compact().candidate_hash(), + circulate_statement(peers, ctx, relay_parent, stored).await, + )), + _ => None, + } + }; + + // Now send dependent statements to all peers needing them, if any. + if let Some((candidate_hash, peers_needing_dependents)) = outputs { + for peer in peers_needing_dependents { + if let Some(peer_data) = peers.get_mut(&peer) { + // defensive: the peer data should always be some because the iterator + // of peers is derived from the set of peers. + send_statements_about( + peer, + peer_data, + ctx, + relay_parent, + candidate_hash, + &*active_head, + metrics, + ).await; } } } @@ -679,6 +685,7 @@ async fn handle_incoming_message<'a>( ctx: &mut impl SubsystemContext, message: protocol_v1::StatementDistributionMessage, metrics: &Metrics, + statement_listeners: &mut StatementListeners, ) -> Option<(Hash, &'a StoredStatement)> { let (relay_parent, statement) = match message { protocol_v1::StatementDistributionMessage::Statement(r, s) => (r, s), @@ -735,6 +742,8 @@ async fn handle_incoming_message<'a>( Ok(false) => {} } + inform_statement_listeners(&statement, statement_listeners).await; + // Note: `peer_data.receive` already ensures that the statement is not an unbounded equivocation // or unpinned to a seconded candidate. So it is safe to place it into the storage. match active_head.note_statement(statement) { @@ -794,6 +803,7 @@ async fn handle_network_update( our_view: &mut View, update: NetworkBridgeEvent, metrics: &Metrics, + statement_listeners: &mut StatementListeners, ) { match update { NetworkBridgeEvent::PeerConnected(peer, _role) => { @@ -816,6 +826,7 @@ async fn handle_network_update( ctx, message, metrics, + statement_listeners, ).await; if let Some((relay_parent, new)) = new_stored { @@ -875,7 +886,7 @@ impl StatementDistribution { let mut peers: HashMap = HashMap::new(); let mut our_view = View::default(); let mut active_heads: HashMap = HashMap::new(); - let mut statement_listeners: Vec> = Vec::new(); + let mut statement_listeners = StatementListeners::new(); let metrics = self.metrics; loop { @@ -958,6 +969,7 @@ impl StatementDistribution { &mut our_view, event, &metrics, + &mut statement_listeners, ).await; } StatementDistributionMessage::RegisterStatementListener(tx) => { -- GitLab From 9de263fefe0818066b85d5be67324c3a826d73fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 24 Nov 2020 13:31:32 +0100 Subject: [PATCH 043/203] Switch to wasm-builder 3.0.0 (#2004) * Switch to wasm-builder 3.0.0 * Fix deterministic wasm build check --- Cargo.lock | 136 ++++++++++++++++++--- parachain/test-parachains/adder/Cargo.toml | 2 +- parachain/test-parachains/adder/build.rs | 3 +- parachain/test-parachains/halt/Cargo.toml | 2 +- parachain/test-parachains/halt/build.rs | 3 +- runtime/kusama/Cargo.toml | 2 +- runtime/kusama/build.rs | 3 +- runtime/polkadot/Cargo.toml | 2 +- runtime/polkadot/build.rs | 3 +- runtime/rococo/Cargo.toml | 2 +- runtime/rococo/build.rs | 3 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/test-runtime/build.rs | 3 +- runtime/westend/Cargo.toml | 2 +- runtime/westend/build.rs | 3 +- scripts/gitlab/test_deterministic_wasm.sh | 2 +- 16 files changed, 133 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 362076f70e..b0c7ac6e59 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -596,6 +596,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "build-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +dependencies = [ + "semver 0.6.0", +] + [[package]] name = "bumpalo" version = "3.4.0" @@ -643,6 +652,18 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" +[[package]] +name = "cargo_metadata" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83f95cf4bf0dda0ac2e65371ae7215d0dce3c187613a9dbf23aaa9374186f97a" +dependencies = [ + "semver 0.11.0", + "semver-parser 0.10.0", + "serde", + "serde_json", +] + [[package]] name = "cc" version = "1.0.58" @@ -2639,7 +2660,7 @@ dependencies = [ "sp-trie", "sp-version", "static_assertions", - "substrate-wasm-builder-runner", + "substrate-wasm-builder", "tiny-keccak", ] @@ -4394,6 +4415,15 @@ dependencies = [ "synstructure", ] +[[package]] +name = "parity-wasm" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16ad52817c4d343339b3bc2e26861bd21478eda0b7509acf83505727000512ac" +dependencies = [ + "byteorder", +] + [[package]] name = "parity-wasm" version = "0.41.0" @@ -5308,7 +5338,7 @@ dependencies = [ "sp-trie", "sp-version", "static_assertions", - "substrate-wasm-builder-runner", + "substrate-wasm-builder", "tiny-keccak", "trie-db", ] @@ -5600,7 +5630,7 @@ dependencies = [ "sp-transaction-pool", "sp-trie", "sp-version", - "substrate-wasm-builder-runner", + "substrate-wasm-builder", "tiny-keccak", ] @@ -5912,7 +5942,7 @@ checksum = "0f53bc2558e8376358ebdc28301546471d67336584f6438ed4b7c7457a055fd7" dependencies = [ "byteorder", "log", - "parity-wasm", + "parity-wasm 0.41.0", ] [[package]] @@ -6389,7 +6419,7 @@ dependencies = [ "sp-std", "sp-transaction-pool", "sp-version", - "substrate-wasm-builder-runner", + "substrate-wasm-builder", ] [[package]] @@ -6444,7 +6474,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver", + "semver 0.9.0", ] [[package]] @@ -6507,6 +6537,15 @@ dependencies = [ "stream-cipher 0.7.1", ] +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "sc-authority-discovery" version = "0.8.0" @@ -6874,7 +6913,7 @@ dependencies = [ "libsecp256k1", "log", "parity-scale-codec", - "parity-wasm", + "parity-wasm 0.41.0", "parking_lot 0.10.2", "sc-executor-common", "sc-executor-wasmi", @@ -6901,7 +6940,7 @@ dependencies = [ "derive_more", "log", "parity-scale-codec", - "parity-wasm", + "parity-wasm 0.41.0", "sp-allocator", "sp-core", "sp-runtime-interface", @@ -6932,7 +6971,7 @@ source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745 dependencies = [ "log", "parity-scale-codec", - "parity-wasm", + "parity-wasm 0.41.0", "pwasm-utils", "sc-executor-common", "scoped-tls", @@ -7540,13 +7579,32 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser 0.7.0", +] + [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser", + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.0", + "serde", ] [[package]] @@ -7555,6 +7613,16 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "semver-parser" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e012c6c5380fb91897ba7b9261a0f565e624e869d42fe1a1d03fa0d68a083d5" +dependencies = [ + "pest", + "pest_derive", +] + [[package]] name = "send_wrapper" version = "0.3.0" @@ -8711,10 +8779,20 @@ dependencies = [ ] [[package]] -name = "substrate-wasm-builder-runner" -version = "2.0.0" +name = "substrate-wasm-builder" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54cab12167e32b38a62c5ea5825aa0874cde315f907a46aad2b05aa8ef3d862f" +checksum = "79091baab813855ddf65b191de9fe53e656b6b67c1e9bd23fdcbff8788164684" +dependencies = [ + "ansi_term 0.12.1", + "atty", + "build-helper", + "cargo_metadata", + "tempfile", + "toml", + "walkdir", + "wasm-gc-api", +] [[package]] name = "subtle" @@ -8817,7 +8895,7 @@ dependencies = [ "polkadot-parachain", "sp-io", "sp-std", - "substrate-wasm-builder-runner", + "substrate-wasm-builder", "tiny-keccak", ] @@ -8851,7 +8929,7 @@ dependencies = [ name = "test-parachain-halt" version = "0.8.26" dependencies = [ - "substrate-wasm-builder-runner", + "substrate-wasm-builder", ] [[package]] @@ -9577,6 +9655,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9571542c2ce85ce642e6b58b3364da2fb53526360dfb7c211add4f5c23105ff7" +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + [[package]] name = "want" version = "0.2.0" @@ -9672,6 +9761,17 @@ version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" +[[package]] +name = "wasm-gc-api" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c32691b6c7e6c14e7f8fd55361a9088b507aa49620fcd06c09b3a1082186b9" +dependencies = [ + "log", + "parity-wasm 0.32.0", + "rustc-demangle", +] + [[package]] name = "wasm-timer" version = "0.2.5" @@ -9697,7 +9797,7 @@ dependencies = [ "memory_units", "num-rational", "num-traits 0.2.12", - "parity-wasm", + "parity-wasm 0.41.0", "wasmi-validation", ] @@ -9707,7 +9807,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea78c597064ba73596099281e2f4cfc019075122a65cdda3205af94f0b264d93" dependencies = [ - "parity-wasm", + "parity-wasm 0.41.0", ] [[package]] @@ -10005,7 +10105,7 @@ dependencies = [ "sp-trie", "sp-version", "static_assertions", - "substrate-wasm-builder-runner", + "substrate-wasm-builder", "tiny-keccak", ] diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 4b22425bea..1a8b36d58e 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -17,7 +17,7 @@ dlmalloc = { version = "0.2.1", features = [ "global" ] } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, features = [ "disable_allocator" ] } [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = [ "std" ] diff --git a/parachain/test-parachains/adder/build.rs b/parachain/test-parachains/adder/build.rs index 6ed2a43655..ac1ce327cf 100644 --- a/parachain/test-parachains/adder/build.rs +++ b/parachain/test-parachains/adder/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.1") .export_heap_base() .build() } diff --git a/parachain/test-parachains/halt/Cargo.toml b/parachain/test-parachains/halt/Cargo.toml index f91e1d66a5..a8912fc948 100644 --- a/parachain/test-parachains/halt/Cargo.toml +++ b/parachain/test-parachains/halt/Cargo.toml @@ -9,7 +9,7 @@ build = "build.rs" [dependencies] [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = [ "std" ] diff --git a/parachain/test-parachains/halt/build.rs b/parachain/test-parachains/halt/build.rs index 6ed2a43655..ac1ce327cf 100644 --- a/parachain/test-parachains/halt/build.rs +++ b/parachain/test-parachains/halt/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.1") .export_heap_base() .build() } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 3d89cdbc87..17ccfca080 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -83,7 +83,7 @@ separator = "0.4.1" serde_json = "1.0.59" [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = ["std"] diff --git a/runtime/kusama/build.rs b/runtime/kusama/build.rs index e0c89e5649..a75ebb4edb 100644 --- a/runtime/kusama/build.rs +++ b/runtime/kusama/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.1") .import_memory() .export_heap_base() .build() diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index d26ad528bf..b6435b3781 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -81,7 +81,7 @@ trie-db = "0.22.1" serde_json = "1.0.59" [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = ["std"] diff --git a/runtime/polkadot/build.rs b/runtime/polkadot/build.rs index 8c7a1e35dd..e4a139a06a 100644 --- a/runtime/polkadot/build.rs +++ b/runtime/polkadot/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.1") .import_memory() .export_heap_base() .build() diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 309608c641..c1f72cf24b 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -54,7 +54,7 @@ polkadot-parachain = { path = "../../parachain", default-features = false } runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parachains", default-features = false } [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = ["std"] diff --git a/runtime/rococo/build.rs b/runtime/rococo/build.rs index dff1419829..f287ec0e1e 100644 --- a/runtime/rococo/build.rs +++ b/runtime/rococo/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.0") .import_memory() .export_heap_base() .build() diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 9f23f5d400..af1a8cf347 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -65,7 +65,7 @@ sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } serde_json = "1.0.59" [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = ["std"] diff --git a/runtime/test-runtime/build.rs b/runtime/test-runtime/build.rs index e0c89e5649..a75ebb4edb 100644 --- a/runtime/test-runtime/build.rs +++ b/runtime/test-runtime/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.1") .import_memory() .export_heap_base() .build() diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 7544eecc99..c8ff4e43e4 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -84,7 +84,7 @@ sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } serde_json = "1.0.59" [build-dependencies] -wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "2.0.0" } +substrate-wasm-builder = "3.0.0" [features] default = ["std"] diff --git a/runtime/westend/build.rs b/runtime/westend/build.rs index 8c7a1e35dd..e4a139a06a 100644 --- a/runtime/westend/build.rs +++ b/runtime/westend/build.rs @@ -14,12 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use wasm_builder_runner::WasmBuilder; +use substrate_wasm_builder::WasmBuilder; fn main() { WasmBuilder::new() .with_current_project() - .with_wasm_builder_from_crates("2.0.1") .import_memory() .export_heap_base() .build() diff --git a/scripts/gitlab/test_deterministic_wasm.sh b/scripts/gitlab/test_deterministic_wasm.sh index db391ca0a2..998d924d45 100755 --- a/scripts/gitlab/test_deterministic_wasm.sh +++ b/scripts/gitlab/test_deterministic_wasm.sh @@ -6,7 +6,7 @@ source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh # build runtime WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime # make checksum -sha256sum target/release/wbuild/target/wasm32-unknown-unknown/release/*.wasm > checksum.sha256 +sha256sum target/release/wbuild/*-runtime/target/wasm32-unknown-unknown/release/*.wasm > checksum.sha256 # clean up - FIXME: can we reuse some of the artifacts? cargo clean # build again -- GitLab From ede19593c08d3fa740c5344024577f1c27921882 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 24 Nov 2020 10:23:41 -0500 Subject: [PATCH 044/203] backing: reorder votes to match bitfield in backed candidate (#2006) --- node/core/backing/src/lib.rs | 100 +++++++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 4 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index def1d0dd56..11736be9b0 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -32,6 +32,7 @@ use polkadot_primitives::v1::{ ValidatorIndex, SigningContext, PoV, CandidateHash, CandidateDescriptor, AvailableData, ValidatorSignature, Hash, CandidateReceipt, CandidateCommitments, CoreState, CoreIndex, CollatorId, ValidationOutputs, + ValidityAttestation, }; use polkadot_node_primitives::{ FromTableMisbehavior, Statement, SignedFullStatement, MisbehaviorReport, ValidationResult, @@ -256,7 +257,7 @@ fn table_attested_to_backed( ) -> Option { let TableAttestedCandidate { candidate, validity_votes, group_id: para_id } = attested; - let (ids, validity_votes): (Vec<_>, Vec<_>) = validity_votes + let (ids, validity_votes): (Vec<_>, Vec) = validity_votes .into_iter() .map(|(id, vote)| (id, vote.into())) .unzip(); @@ -267,15 +268,30 @@ fn table_attested_to_backed( validator_indices.resize(group.len(), false); - for id in ids.iter() { + // The order of the validity votes in the backed candidate must match + // the order of bits set in the bitfield, which is not necessarily + // the order of the `validity_votes` we got from the table. + let mut vote_positions = Vec::with_capacity(validity_votes.len()); + for (orig_idx, id) in ids.iter().enumerate() { if let Some(position) = group.iter().position(|x| x == id) { validator_indices.set(position, true); + vote_positions.push((orig_idx, position)); + } else { + tracing::warn!( + target: LOG_TARGET, + "Logic error: Validity vote from table does not correspond to group", + ); + + return None; } } + vote_positions.sort_by_key(|(_orig, pos_in_group)| *pos_in_group); Some(BackedCandidate { candidate, - validity_votes, + validity_votes: vote_positions.into_iter() + .map(|(pos_in_votes, _pos_in_group)| validity_votes[pos_in_votes].clone()) + .collect(), validator_indices, }) } @@ -1003,7 +1019,7 @@ mod tests { use polkadot_primitives::v1::{ ScheduledCore, BlockData, CandidateCommitments, PersistedValidationData, ValidationData, TransientValidationData, HeadData, - ValidityAttestation, GroupRotationInfo, + GroupRotationInfo, }; use polkadot_subsystem::{ messages::RuntimeApiRequest, @@ -2123,4 +2139,80 @@ mod tests { ).await; }); } + + #[test] + fn candidate_backing_reorders_votes() { + use sp_core::Encode; + + let relay_parent = [1; 32].into(); + let para_id = ParaId::from(10); + let session_index = 5; + let signing_context = SigningContext { parent_hash: relay_parent, session_index }; + let validators = vec![ + Sr25519Keyring::Alice, + Sr25519Keyring::Bob, + Sr25519Keyring::Charlie, + Sr25519Keyring::Dave, + Sr25519Keyring::Ferdie, + Sr25519Keyring::One, + ]; + + let validator_public = validator_pubkeys(&validators); + let validator_groups = { + let mut validator_groups = HashMap::new(); + validator_groups.insert(para_id, vec![0, 1, 2, 3, 4, 5]); + validator_groups + }; + + let table_context = TableContext { + signing_context, + validator: None, + groups: validator_groups, + validators: validator_public.clone(), + }; + + let fake_attestation = |idx: u32| { + let candidate: CommittedCandidateReceipt = Default::default(); + let hash = candidate.hash(); + let mut data = vec![0; 64]; + data[0..32].copy_from_slice(hash.0.as_bytes()); + data[32..36].copy_from_slice(idx.encode().as_slice()); + + let sig = ValidatorSignature::try_from(data).unwrap(); + statement_table::generic::ValidityAttestation::Implicit(sig) + }; + + let attested = TableAttestedCandidate { + candidate: Default::default(), + validity_votes: vec![ + (5, fake_attestation(5)), + (3, fake_attestation(3)), + (1, fake_attestation(1)), + ], + group_id: para_id, + }; + + let backed = table_attested_to_backed(attested, &table_context).unwrap(); + + let expected_bitvec = { + let mut validator_indices = BitVec::::with_capacity(6); + validator_indices.resize(6, false); + + validator_indices.set(1, true); + validator_indices.set(3, true); + validator_indices.set(5, true); + + validator_indices + }; + + // Should be in bitfield order, which is opposite to the order provided to the function. + let expected_attestations = vec![ + fake_attestation(1).into(), + fake_attestation(3).into(), + fake_attestation(5).into(), + ]; + + assert_eq!(backed.validator_indices, expected_bitvec); + assert_eq!(backed.validity_votes, expected_attestations); + } } -- GitLab From bb91bedfbee0313b6b3491a09ef79eb9d2044677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 24 Nov 2020 22:40:36 +0100 Subject: [PATCH 045/203] Do not send messages twice in bitfield distribution (#2005) * Do not send messages twice in bitfield distribution This removes a bug which resulted in sending bitfield messages multiple times by not checking if we already relayed them. Besides that it also adds an optimization to not relay a message to a peer that send us this message. * Review comments * Break some lines --- Cargo.lock | 2 - node/network/bitfield-distribution/Cargo.toml | 2 - node/network/bitfield-distribution/src/lib.rs | 285 ++++++++++++++---- node/network/protocol/src/lib.rs | 9 + 4 files changed, 233 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0c7ac6e59..a78cf0038d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4746,11 +4746,9 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "sc-keystore", "sp-application-crypto", "sp-core", "sp-keystore", - "tempfile", "tracing", "tracing-futures", ] diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index a4bf58e382..0333926f9d 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -20,9 +20,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } maplit = "1.0.2" log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" -tempfile = "3.1.0" diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 2925953546..2d1313c58e 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -121,11 +121,8 @@ impl PerRelayParentData { peer: &PeerId, validator: &ValidatorId, ) -> bool { - if let Some(set) = self.message_sent_to_peer.get(peer) { - !set.contains(validator) - } else { - false - } + self.message_sent_to_peer.get(peer).map(|v| !v.contains(validator)).unwrap_or(true) + && self.message_received_from_peer.get(peer).map(|v| !v.contains(validator)).unwrap_or(true) } } @@ -321,21 +318,24 @@ where )) .await; - let message_sent_to_peer = &mut (job_data.message_sent_to_peer); - // pass on the bitfield distribution to all interested peers let interested_peers = peer_views .iter() .filter_map(|(peer, view)| { // check interest in the peer in this message's relay parent if view.contains(&message.relay_parent) { + let message_needed = job_data.message_from_validator_needed_by_peer(&peer, &validator); // track the message as sent for this peer - message_sent_to_peer + job_data.message_sent_to_peer .entry(peer.clone()) .or_default() .insert(validator.clone()); - Some(peer.clone()) + if message_needed { + Some(peer.clone()) + } else { + None + } } else { None } @@ -529,11 +529,7 @@ async fn handle_peer_view_change( where Context: SubsystemContext, { - let current = state.peer_views.entry(origin.clone()).or_default(); - - let added: Vec = view.difference(&*current).cloned().collect(); - - *current = view; + let added = state.peer_views.entry(origin.clone()).or_default().replace_difference(view).cloned().collect::>(); // Send all messages we've seen before and the peer is now interested // in to that peer. @@ -585,8 +581,7 @@ where return; }; - let message_sent_to_peer = &mut (job_data.message_sent_to_peer); - message_sent_to_peer + job_data.message_sent_to_peer .entry(dest.clone()) .or_default() .insert(validator.clone()); @@ -755,7 +750,7 @@ mod test { use polkadot_node_subsystem_util::TimeoutExt; use sp_keystore::{SyncCryptoStorePtr, SyncCryptoStore}; use sp_application_crypto::AppKey; - use sc_keystore::LocalKeystore; + use sp_keystore::testing::KeyStore; use std::sync::Arc; use std::time::Duration; use assert_matches::assert_matches; @@ -767,12 +762,6 @@ mod test { ]; } - macro_rules! peers { - ( $( $peer:expr ),* $(,)? ) => [ - vec![ $( $peer.clone() ),* ] - ]; - } - macro_rules! launch { ($fut:expr) => { $fut @@ -816,7 +805,6 @@ mod test { fn state_with_view( view: View, relay_parent: Hash, - keystore_path: &tempfile::TempDir, ) -> (ProtocolState, SigningContext, SyncCryptoStorePtr, ValidatorId) { let mut state = ProtocolState::default(); @@ -825,8 +813,7 @@ mod test { parent_hash: relay_parent.clone(), }; - let keystore : SyncCryptoStorePtr = Arc::new(LocalKeystore::open(keystore_path.path(), None) - .expect("Creates keystore")); + let keystore : SyncCryptoStorePtr = Arc::new(KeyStore::new()); let validator = SyncCryptoStore::sr25519_generate_new(&*keystore, ValidatorId::ID, None) .expect("generating sr25519 key not to fail"); @@ -865,18 +852,20 @@ mod test { }; // another validator not part of the validatorset - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); - let keystore : SyncCryptoStorePtr = Arc::new(LocalKeystore::open(keystore_path.path(), None) - .expect("Creates keystore")); + let keystore : SyncCryptoStorePtr = Arc::new(KeyStore::new()); let malicious = SyncCryptoStore::sr25519_generate_new(&*keystore, ValidatorId::ID, None) .expect("Malicious key created"); let validator = SyncCryptoStore::sr25519_generate_new(&*keystore, ValidatorId::ID, None) .expect("Malicious key created"); let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); - let signed = - executor::block_on(Signed::::sign(&keystore, payload, &signing_context, 0, &malicious.into())) - .expect("should be signed"); + let signed = executor::block_on(Signed::::sign( + &keystore, + payload, + &signing_context, + 0, + &malicious.into(), + )).expect("should be signed"); let msg = BitfieldGossipMessage { relay_parent: hash_a.clone(), @@ -929,17 +918,19 @@ mod test { let peer_b = PeerId::random(); assert_ne!(peer_a, peer_b); - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = - state_with_view(view![hash_a, hash_b], hash_a.clone(), &keystore_path); + let (mut state, signing_context, keystore, validator) = state_with_view(view![hash_a, hash_b], hash_a.clone()); state.peer_views.insert(peer_b.clone(), view![hash_a]); let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); - let signed = - executor::block_on(Signed::::sign(&keystore, payload, &signing_context, 42, &validator)) - .expect("should be signed"); + let signed = executor::block_on(Signed::::sign( + &keystore, + payload, + &signing_context, + 42, + &validator, + )).expect("should be signed"); let msg = BitfieldGossipMessage { relay_parent: hash_a.clone(), @@ -985,16 +976,18 @@ mod test { let peer_b = PeerId::random(); assert_ne!(peer_a, peer_b); - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = - state_with_view(view![hash_a, hash_b], hash_a.clone(), &keystore_path); + let (mut state, signing_context, keystore, validator) = state_with_view(view![hash_a, hash_b], hash_a.clone()); // create a signed message by validator 0 let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); - let signed_bitfield = - executor::block_on(Signed::::sign(&keystore, payload, &signing_context, 0, &validator)) - .expect("should be signed"); + let signed_bitfield = executor::block_on(Signed::::sign( + &keystore, + payload, + &signing_context, + 0, + &validator, + )).expect("should be signed"); let msg = BitfieldGossipMessage { relay_parent: hash_a.clone(), @@ -1085,6 +1078,101 @@ mod test { }); } + #[test] + fn do_not_relay_message_twice() { + let _ = env_logger::builder() + .filter(None, log::LevelFilter::Trace) + .is_test(true) + .try_init(); + + let hash = Hash::random(); + + let peer_a = PeerId::random(); + let peer_b = PeerId::random(); + assert_ne!(peer_a, peer_b); + + // validator 0 key pair + let (mut state, signing_context, keystore, validator) = state_with_view(view![hash], hash.clone()); + + // create a signed message by validator 0 + let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); + let signed_bitfield = executor::block_on(Signed::::sign( + &keystore, + payload, + &signing_context, + 0, + &validator, + )).expect("should be signed"); + + state.peer_views.insert(peer_b.clone(), view![hash]); + state.peer_views.insert(peer_a.clone(), view![hash]); + + let msg = BitfieldGossipMessage { + relay_parent: hash.clone(), + signed_availability: signed_bitfield.clone(), + }; + + let pool = sp_core::testing::TaskExecutor::new(); + let (mut ctx, mut handle) = + make_subsystem_context::(pool); + + executor::block_on(async move { + relay_message( + &mut ctx, + state.per_relay_parent.get_mut(&hash).unwrap(), + &mut state.peer_views, + validator.clone(), + msg.clone(), + ).await; + + assert_matches!( + handle.recv().await, + AllMessages::Provisioner(ProvisionerMessage::ProvisionableData( + _, + ProvisionableData::Bitfield(h, signed) + )) => { + assert_eq!(h, hash); + assert_eq!(signed, signed_bitfield) + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessage(peers, send_msg), + ) => { + assert_eq!(2, peers.len()); + assert!(peers.contains(&peer_a)); + assert!(peers.contains(&peer_b)); + assert_eq!(send_msg, msg.clone().into_validation_protocol()); + } + ); + + // Relaying the message a second time shouldn't work. + relay_message( + &mut ctx, + state.per_relay_parent.get_mut(&hash).unwrap(), + &mut state.peer_views, + validator.clone(), + msg.clone(), + ).await; + + assert_matches!( + handle.recv().await, + AllMessages::Provisioner(ProvisionerMessage::ProvisionableData( + _, + ProvisionableData::Bitfield(h, signed) + )) => { + assert_eq!(h, hash); + assert_eq!(signed, signed_bitfield) + } + ); + + // There shouldn't be any other message + assert!(handle.recv().timeout(Duration::from_millis(10)).await.is_none()); + }); + } + #[test] fn changing_view() { let _ = env_logger::builder() @@ -1099,16 +1187,18 @@ mod test { let peer_b = PeerId::random(); assert_ne!(peer_a, peer_b); - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = - state_with_view(view![hash_a, hash_b], hash_a.clone(), &keystore_path); + let (mut state, signing_context, keystore, validator) = state_with_view(view![hash_a, hash_b], hash_a.clone()); // create a signed message by validator 0 let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); - let signed_bitfield = - executor::block_on(Signed::::sign(&keystore, payload, &signing_context, 0, &validator)) - .expect("should be signed"); + let signed_bitfield = executor::block_on(Signed::::sign( + &keystore, + payload, + &signing_context, + 0, + &validator, + )).expect("should be signed"); let msg = BitfieldGossipMessage { relay_parent: hash_a.clone(), @@ -1160,17 +1250,6 @@ mod test { } ); - // gossip to the network - assert_matches!( - handle.recv().await, - AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage ( - peers, out_msg, - )) => { - assert_eq!(peers, peers![peer_b]); - assert_eq!(out_msg, msg.clone().into_validation_protocol()); - } - ); - // reputation change for peer B assert_matches!( handle.recv().await, @@ -1253,4 +1332,88 @@ mod test { }); } + + #[test] + fn do_not_send_message_back_to_origin() { + let _ = env_logger::builder() + .filter(None, log::LevelFilter::Trace) + .is_test(true) + .try_init(); + + let hash: Hash = [0; 32].into(); + + let peer_a = PeerId::random(); + let peer_b = PeerId::random(); + assert_ne!(peer_a, peer_b); + + // validator 0 key pair + let (mut state, signing_context, keystore, validator) = state_with_view(view![hash], hash); + + // create a signed message by validator 0 + let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); + let signed_bitfield = executor::block_on(Signed::::sign( + &keystore, + payload, + &signing_context, + 0, + &validator, + )).expect("should be signed"); + + state.peer_views.insert(peer_b.clone(), view![hash]); + state.peer_views.insert(peer_a.clone(), view![hash]); + + let msg = BitfieldGossipMessage { + relay_parent: hash.clone(), + signed_availability: signed_bitfield.clone(), + }; + + let pool = sp_core::testing::TaskExecutor::new(); + let (mut ctx, mut handle) = + make_subsystem_context::(pool); + + executor::block_on(async move { + // send a first message + launch!(handle_network_msg( + &mut ctx, + &mut state, + &Default::default(), + NetworkBridgeEvent::PeerMessage( + peer_b.clone(), + msg.clone().into_network_message(), + ), + )); + + assert_matches!( + handle.recv().await, + AllMessages::Provisioner(ProvisionerMessage::ProvisionableData( + _, + ProvisionableData::Bitfield(hash, signed) + )) => { + assert_eq!(hash, hash); + assert_eq!(signed, signed_bitfield) + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessage(peers, send_msg), + ) => { + assert_eq!(1, peers.len()); + assert!(peers.contains(&peer_a)); + assert_eq!(send_msg, msg.clone().into_validation_protocol()); + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ReportPeer(peer, rep) + ) => { + assert_eq!(peer, peer_b); + assert_eq!(rep, BENEFIT_VALID_MESSAGE_FIRST) + } + ); + }); + } } diff --git a/node/network/protocol/src/lib.rs b/node/network/protocol/src/lib.rs index cd3aca73be..8409a795ae 100644 --- a/node/network/protocol/src/lib.rs +++ b/node/network/protocol/src/lib.rs @@ -166,6 +166,15 @@ impl NetworkBridgeEvent { pub struct View(pub Vec); impl View { + /// Replace `self` with `new`. + /// + /// Returns an iterator that will yield all elements of `new` that were not part of `self`. + pub fn replace_difference(&mut self, new: View) -> impl Iterator { + let old = std::mem::replace(self, new); + + self.0.iter().filter(move |h| !old.contains(h)) + } + /// Returns an iterator of the hashes present in `Self` but not in `other`. pub fn difference<'a>(&'a self, other: &'a View) -> impl Iterator + 'a { self.0.iter().filter(move |h| !other.contains(h)) -- GitLab From ac46a9f5a626d817abc63d699c9431b7259d511f Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 24 Nov 2020 16:44:02 -0500 Subject: [PATCH 046/203] Session management for approval voting (#1973) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * elaborate on runtime API * clarify what to do if the runtime API calls fail * Update roadmap/implementers-guide/src/node/approval/approval-voting.md Co-authored-by: Peter Goodspeed-Niklaus * Update roadmap/implementers-guide/src/node/approval/approval-voting.md Co-authored-by: Peter Goodspeed-Niklaus Co-authored-by: Bastian Köcher --- .../src/node/approval/approval-voting.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/roadmap/implementers-guide/src/node/approval/approval-voting.md b/roadmap/implementers-guide/src/node/approval/approval-voting.md index 72bb9d075c..5e9f1e360c 100644 --- a/roadmap/implementers-guide/src/node/approval/approval-voting.md +++ b/roadmap/implementers-guide/src/node/approval/approval-voting.md @@ -91,9 +91,7 @@ struct BlockEntry { // unix epoch. type Tick = u64; -struct TrackerEntry - -struct StoredBlockRange(BlockNumber, BlockNumber) +struct StoredBlockRange(BlockNumber, BlockNumber); ``` In the schema, we map @@ -107,6 +105,10 @@ CandidateHash => CandidateEntry ## Logic +```rust +const APPROVAL_SESSIONS: SessionIndex = 6; +``` + In-memory state: ```rust @@ -149,7 +151,14 @@ On receiving an `OverseerSignal::BlockFinalized(h)`, we fetch the block number ` On receiving an `OverseerSignal::ActiveLeavesUpdate(update)`: * We determine the set of new blocks that were not in our previous view. This is done by querying the ancestry of all new items in the view and contrasting against the stored `BlockNumber`s. Typically, there will be only one new block. We fetch the headers and information on these blocks from the ChainApi subsystem. - * We update the `StoredBlockRange` and the `BlockNumber` maps. We use the RuntimeApiSubsystem to determine the set of candidates included in these blocks and use BABE logic to determine the slot number and VRF of the blocks. + * We update the `StoredBlockRange` and the `BlockNumber` maps. + * We use the RuntimeApiSubsystem to determine information about these blocks. It is generally safe to assume that runtime state is available for recent, unfinalized blocks. In the case that it isn't, it means that we are catching up to the head of the chain and needn't worry about assignments to those blocks anyway, as the security assumption of the protocol tolerates nodes being temporarily offline or out-of-date. + * We fetch the set of candidates included by each block by dispatching a `RuntimeApiRequest::CandidateEvents` and checking the `CandidateIncluded` events. + * We fetch the session of the block by dispatching a `session_index_for_child` request with the parent-hash of the block. + * If the `session index - APPROVAL_SESSIONS > state.earliest_session`, then bump `state.earliest_sessions` to that amount and prune earlier sessions. + * If the session isn't in our `state.session_info`, load the session info for it and for all sessions since the earliest-session, including the earliest-session, if that is missing. And it can be, just after pruning, if we've done a big jump forward, as is the case when we've just finished chain synchronization. + * If any of the runtime API calls fail, we just warn and skip the block. + * We use the RuntimeApiSubsystem to determine the set of candidates included in these blocks and use BABE logic to determine the slot number and VRF of the blocks. * We also note how late we appear to have received the block. We create a `BlockEntry` for each block and a `CandidateEntry` for each candidate obtained from `CandidateIncluded` events after making a `RuntimeApiRequest::CandidateEvents` request. * Ensure that the `CandidateEntry` contains a `block_assignments` entry for the block, with the correct backing group set. * If a validator in this session, compute and assign `our_assignment` for the `block_assignments` -- GitLab From 029c8a2a4e72ddd042627a4eb30c6d58d6b896d0 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 24 Nov 2020 23:40:07 -0500 Subject: [PATCH 047/203] Approval Distribution Subsystem (#1951) * skeleton flow control * tweaks & rename to approvals distribution * Update roadmap/implementers-guide/src/node/approval/approval-distribution.md Co-authored-by: Peter Goodspeed-Niklaus * Update roadmap/implementers-guide/src/node/approval/approval-distribution.md Co-authored-by: Peter Goodspeed-Niklaus * add a `NewBlocks` message and dispatch * new data format for approval distribution * guide: update view to include finalized block number * approvals: document view updating * pruning when peers disconnect * add remaining message types * fix link * network message type * handle incoming assignments * import_and_circulate_approval * handle new blocks * address review comments * address review comments and use nifty VRFProof Co-authored-by: Peter Goodspeed-Niklaus --- roadmap/implementers-guide/src/SUMMARY.md | 3 +- .../src/node/approval/README.md | 2 +- .../node/approval/approval-distribution.md | 196 ++++++++++++++++++ .../src/node/approval/approval-networking.md | 7 - .../src/node/approval/approval-voting.md | 29 +-- .../src/node/utility/network-bridge.md | 6 + .../implementers-guide/src/types/approval.md | 19 +- .../implementers-guide/src/types/network.md | 22 +- .../src/types/overseer-protocol.md | 58 ++++-- 9 files changed, 298 insertions(+), 44 deletions(-) create mode 100644 roadmap/implementers-guide/src/node/approval/approval-distribution.md delete mode 100644 roadmap/implementers-guide/src/node/approval/approval-networking.md diff --git a/roadmap/implementers-guide/src/SUMMARY.md b/roadmap/implementers-guide/src/SUMMARY.md index f90f149f25..c6c4f39250 100644 --- a/roadmap/implementers-guide/src/SUMMARY.md +++ b/roadmap/implementers-guide/src/SUMMARY.md @@ -8,7 +8,6 @@ - [Architecture Overview](architecture.md) - [Messaging Overview](messaging.md) - [Runtime Architecture](runtime/README.md) - - [ApprovalsInherent Module](runtime/approvals_inherent.md) - [Initializer Module](runtime/initializer.md) - [Configuration Module](runtime/configuration.md) - [Disputes Module](runtime/disputes.md) @@ -48,7 +47,7 @@ - [Bitfield Signing](node/availability/bitfield-signing.md) - [Approval Subsystems](node/approval/README.md) - [Approval Voting](node/approval/approval-voting.md) - - [Approval Networking](node/approval/approval-networking.md) + - [Approval Distribution](node/approval/approval-distribution.md) - [Dispute Participation](node/approval/dispute-participation.md) - [Utility Subsystems](node/utility/README.md) - [Availability Store](node/utility/availability-store.md) diff --git a/roadmap/implementers-guide/src/node/approval/README.md b/roadmap/implementers-guide/src/node/approval/README.md index 41ba527f1b..2d08153767 100644 --- a/roadmap/implementers-guide/src/node/approval/README.md +++ b/roadmap/implementers-guide/src/node/approval/README.md @@ -2,6 +2,6 @@ The approval subsystems implement the node-side of the [Approval Protocol](../../protocol-approval.md). -We make a divide between the [assignment/voting logic](approval-voting.md) and the [networking](approval-networking.md) that distributes assignment certifications and approval votes. The logic in the assignment and voting also informs the GRANDPA voting rule on how to vote. +We make a divide between the [assignment/voting logic](approval-voting.md) and the [distribution logic](approval-distribution.md) that distributes assignment certifications and approval votes. The logic in the assignment and voting also informs the GRANDPA voting rule on how to vote. This category of subsystems also contains a module for [participating in live disputes](dispute-participation.md) and tracks all observed votes (backing or approval) by all validators on all candidates. \ No newline at end of file diff --git a/roadmap/implementers-guide/src/node/approval/approval-distribution.md b/roadmap/implementers-guide/src/node/approval/approval-distribution.md new file mode 100644 index 0000000000..6ded8b6db9 --- /dev/null +++ b/roadmap/implementers-guide/src/node/approval/approval-distribution.md @@ -0,0 +1,196 @@ +# Approval Distribution + +A subsystem for the distribution of assignments and approvals for approval checks on candidates over the network. + +The [Approval Voting](approval-voting.md) subsystem is responsible for active participation in a protocol designed to select a sufficient number of validators to check each and every candidate which appears in the relay chain. Statements of participation in this checking process are divided into two kinds: + - **Assignments** indicate that validators have been selected to do checking + - **Approvals** indicate that validators have checked and found the candidate satisfactory. + +The [Approval Voting](approval-voting.md) subsystem handles all the issuing and tallying of this protocol, but this subsystem is responsible for the disbursal of statements among the validator-set. + +The inclusion pipeline of candidates concludes after availability, and only after inclusion do candidates actually get pushed into the approval checking pipeline. As such, this protocol deals with the candidates _made available by_ particular blocks, as opposed to the candidates which actually appear within those blocks, which are the candidates _backed by_ those blocks. Unless stated otherwise, whenever we reference a candidate partially by block hash, we are referring to the set of candidates _made available by_ those blocks. + +We implement this protocol as a gossip protocol, and like other parachain-related gossip protocols our primary concerns are about ensuring fast message propagation while maintaining an upper bound on the number of messages any given node must store at any time. + +Approval messages should always follow assignments, so we need to be able to discern two pieces of information based on our [View](../../types/network.md#universal-types): + 1. Is a particular assignment relevant under a given `View`? + 2. Is a particular approval relevant to any assignment in a set? + +It is acceptable for these two queries to yield false negatives with respect to our peers' views. For our own local view, they must not yield false negatives. When applied to our peers' views, it is acceptable for them to yield false negatives. The reason for that is that our peers' views may be beyond ours, and we are not capable of fully evaluating them. Once we have caught up, we can check again for false negatives to continue distributing. + +For assignments, what we need to be checking is whether we are aware of the (block, candidate) pair that the assignment references. For approvals, we need to be aware of an assignment by the same validator which references the candidate being approved. + +However, awareness on its own of a (block, candidate) pair would imply that even ancient candidates all the way back to the genesis are relevant. We are actually not interested in anything before finality. + + +## Protocol + +## Functionality + +```rust +type BlockScopedCandidate = (Hash, CandidateHash); + +/// The `State` struct is responsible for tracking the overall state of the subsystem. +/// +/// It tracks metadata about our view of the unfinalized chain, which assignments and approvals we have seen, and our peers' views. +struct State { + // These three fields are used in conjunction to construct a view over the unfinalized chain. + blocks_by_number: BTreeMap>, + blocks: HashMap, + finalized_number: BlockNumber, + + // Peer view data is partially stored here, and partially inline within the `BlockEntry`s + peer_views: HashMap, +} + +enum MessageFingerprint { + Assigment(Hash, u32, ValidatorIndex), + Approval(Hash, u32, ValidatorIndex), +} + +struct Knowledge { + known_messages: HashSet, +} + +/// Information about blocks in our current view as well as whether peers know of them. +struct BlockEntry { + // Peers who we know are aware of this block and thus, the candidates within it. This maps to their knowledge of messages. + known_by: HashMap, + // The number of the block. + number: BlockNumber, + // The parent hash of the block. + parent_hash: Hash, + // Our knowledge of messages. + knowledge: Knowledge, + // A votes entry for each candidate. + candidates: IndexMap, +} + +enum ApprovalState { + Assigned(AssignmentCert), + Approved(AssignmentCert, ApprovalSignature), +} + +/// Information about candidates in the context of a particular block they are included in. In other words, +/// multiple `CandidateEntry`s may exist for the same candidate, if it is included by multiple blocks - this is likely the case +/// when there are forks. +struct CandidateEntry { + approvals: HashMap, +} +``` + +### Network updates + +#### `NetworkBridgeEvent::PeerConnected` + +Add a blank view to the `peer_views` state. + +#### `NetworkBridgeEvent::PeerDisconnected` + +Remove the view under the associated `PeerId` from `State::peer_views`. + +Iterate over every `BlockEntry` and remove `PeerId` from it. + +#### `NetworkBridgeEvent::PeerViewChange` + +Invoke `unify_with_peer(peer, view)` to catch them up to messages we have. + +We also need to use the `view.finalized_number` to remove the `PeerId` from any blocks that it won't be wanting information about anymore. Note that we have to be on guard for peers doing crazy stuff like jumping their 'finalized_number` forward 10 trillion blocks to try and get us stuck in a loop for ages. + +One of the safeguards we can implement is to reject view updates from peers where the new `finalized_number` is less than the previous. + +We augment that by defining `constrain(x)` to output the x bounded by the first and last numbers in `state.blocks_by_number`. + +From there, we can loop backwards from `constrain(view.finalized_number)` until `constrain(last_view.finalized_number)` is reached, removing the `PeerId` from all `BlockEntry`s referenced at that height. We can break the loop early if we ever exit the bound supplied by the first block in `state.blocks_by_number`. + +#### `NetworkBridgeEvent::OurViewChange` + +Prune all lists from `blocks_by_number` with number less than or equal to `view.finalized_number`. Prune all the `BlockEntry`s referenced by those lists. + +#### `NetworkBridgeEvent::PeerMessage` + +If the message is of type `ApprovalDistributionV1Message::Assignment(assignment_cert, claimed_index)`, then call `import_and_circulate_assignment(MessageSource::Peer(sender), assignment_cert, claimed_index)` + +If the message is of type `ApprovalDistributionV1Message::Approval(approval_vote)`, then call `import_and_circulate_approval(MessageSource::Peer(sender), approval_vote)` + +### Subsystem Updates + +#### `ApprovalDistributionMessage::NewBlocks` + +Create `BlockEntry` and `CandidateEntries` for all blocks. + +For all peers: + * Compute `view_intersection` as the intersection of the peer's view blocks with the hashes of the new blocks. + * Invoke `unify_with_peer(peer, view_intersection)`. + +#### `ApprovalDistributionMessage::DistributeAsignment` + +Load the corresponding `BlockEntry`. Distribute to all peers in `known_by`. Add to the corresponding `CandidateEntry`. + +#### `ApprovalDistributionMessage::DistributeApproval` + +Load the corresponding `BlockEntry`. Distribute to all peers in `known_by`. Add to the corresponding `CandidateEntry`. + +### Utility + +```rust +enum MessageSource { + Peer(PeerId), + Local, +} +``` + +#### `import_and_circulate_assignment(source: MessageSource, assignment: IndirectAssignmentCert, claimed_candidate_index: u32)` + +Imports an assignment cert referenced by block hash and candidate index. As a postcondition, if the cert is valid, it will have distributed the cert to all peers who have the block in their view, with the exclusion of the peer referenced by the `MessageSource`. + + * Load the BlockEntry using `assignment.block_hash`. If it does not exist, report the source if it is `MessageSource::Peer` and return. + * Compute a fingerprint for the `assignment` using `claimed_candidate_index`. + * If the source is `MessageSource::Peer(sender)`: + * check if `peer` appears under `known_by` and whether the fingerprint is in the `known_messages` of the peer. If the peer does not know the block, report for providing data out-of-view and proceed. If the peer does know the block and the knowledge contains the fingerprint, report for providing replicate data and return. + * If the message fingerprint appears under the `BlockEntry`'s `Knowledge`, give the peer a small positive reputation boost and return. Note that we must do this after checking for out-of-view to avoid being spammed. If we did this check earlier, a peer could provide data out-of-view repeatedly and be rewarded for it. + * Dispatch `ApprovalVotingMessage::CheckAndImportAssignment(assignment)` and wait for the response. + * If the result is `AssignmentCheckResult::Accepted` or `AssignmentCheckResult::AcceptedDuplicate` + * If the vote was accepted but not duplicate, give the peer a positive reputation boost + * add the fingerprint to both our and the peer's knowledge in the `BlockEntry`. Note that we only doing this after making sure we have the right fingerprint. + * If the result is `AssignmentCheckResult::TooFarInFuture`, mildly punish the peer and return. + * If the result is `AssignmentCheckResult::Bad`, punish the peer and return. + * If the source is `MessageSource::Local(CandidateIndex)` + * check if the fingerprint appears under the `BlockEntry's` knowledge. If not, add it. + * Load the candidate entry for the given candidate index. It should exist unless there is a logic error in the approval voting subsystem. + * Set the approval state for the validator index to `ApprovalState::Assigned` unless the approval state is set already. This should not happen as long as the approval voting subsystem instructs us to ignore duplicate assignments. + * Dispatch a `ApprovalDistributionV1Message::Assignment(assignment, candidate_index)` to all peers in the `BlockEntry`'s `known_by` set, excluding the peer in the `source`, if `source` has kind `MessageSource::Peer`. Add the fingerprint of the assignment to the knowledge of each peer. + + +#### `import_and_circulate_approval(source: MessageSource, approval: IndirectSignedApprovalVote)` + +Imports an approval signature referenced by block hash and candidate index. + + * Load the BlockEntry using `approval.block_hash` and the candidate entry using `approval.candidate_entry`. If either does not exist, report the source if it is `MessageSource::Peer` and return. + * Compute a fingerprint for the approval. + * Compute a fingerprint for the corresponding assignment. If the `BlockEntry`'s knowledge does not contain that fingerprint, then report the source if it is `MessageSource::Peer` and return. All references to a fingerprint after this refer to the approval's, not the assignment's. + * If the source is `MessageSource::Peer(sender)`: + * check if `peer` appears under `known_by` and whether the fingerprint is in the `known_messages` of the peer. If the peer does not know the block, report for providing data out-of-view and proceed. If the peer does know the block and the knowledge contains the fingerprint, report for providing replicate data and return. + * If the message fingerprint appears under the `BlockEntry`'s `Knowledge`, give the peer a small positive reputation boost and return. Note that we must do this after checking for out-of-view to avoid being spammed. If we did this check earlier, a peer could provide data out-of-view repeatedly and be rewarded for it. + * Dispatch `ApprovalVotingMessage::CheckAndImportApproval(approval)` and wait for the response. + * If the result is `VoteCheckResult::Accepted(())`: + * Give the peer a positive reputation boost and add the fingerprint to both our and the peer's knowledge. + * If the result is `VoteCheckResult::Bad`: + * Report the peer and return. + * Load the candidate entry for the given candidate index. It should exist unless there is a logic error in the approval voting subsystem. + * Set the approval state for the validator index to `ApprovalState::Approved`. It should already be in the `Assigned` state as our `BlockEntry` knowledge contains a fingerprint for the assignment. + * Dispatch a `ApprovalDistributionV1Message::Approval(approval)` to all peers in the `BlockEntry`'s `known_by` set, excluding the peer in the `source`, if `source` has kind `MessageSource::Peer`. Add the fingerprint of the assignment to the knowledge of each peer. Note that this obeys the politeness conditions: + * We guarantee elsewhere that all peers within `known_by` are aware of all assignments relative to the block. + * We've checked that this specific approval has a corresponding assignment within the `BlockEntry`. + * Thus, all peers are aware of the assignment or have a message to them in-flight which will make them so. + + +#### `unify_with_peer(peer: PeerId, view)`: + +For each block in the view: + 1. Initialize a set `fresh_blocks = {}` + 2. Load the `BlockEntry` for the block. If the block is unknown, or the number is less than the view's finalized number, go to step 6. + 3. Inspect the `known_by` set of the `BlockEntry`. If the peer is already present, go to step 6. + 4. Add the peer to `known_by` with a cloned version of `block_entry.knowledge`. and add the hash of the block to `fresh_blocks`. + 5. Return to step 2 with the ancestor of the block. + 6. For each block in `fresh_blocks`, send all assignments and approvals for all candidates in those blocks to the peer. \ No newline at end of file diff --git a/roadmap/implementers-guide/src/node/approval/approval-networking.md b/roadmap/implementers-guide/src/node/approval/approval-networking.md deleted file mode 100644 index 558d4447c9..0000000000 --- a/roadmap/implementers-guide/src/node/approval/approval-networking.md +++ /dev/null @@ -1,7 +0,0 @@ -# Approval Networking - -> TODO: - -## Protocol - -## Functionality \ No newline at end of file diff --git a/roadmap/implementers-guide/src/node/approval/approval-voting.md b/roadmap/implementers-guide/src/node/approval/approval-voting.md index 5e9f1e360c..be87939f30 100644 --- a/roadmap/implementers-guide/src/node/approval/approval-voting.md +++ b/roadmap/implementers-guide/src/node/approval/approval-voting.md @@ -10,8 +10,8 @@ Input: - `ApprovalVotingMessage::ApprovedAncestor` Output: - - `ApprovalNetworkingMessage::DistributeAssignment` - - `ApprovalNetworkingMessage::DistributeApproval` + - `ApprovalDistributionMessage::DistributeAssignment` + - `ApprovalDistributionMessage::DistributeApproval` - `RuntimeApiMessage::Request` - `ChainApiMessage` - `AvailabilityRecoveryMessage::Recover` @@ -72,7 +72,6 @@ struct BlockEntry { block_hash: Hash, session: SessionIndex, slot: SlotNumber, - received_late_by: Duration, // random bytes derived from the VRF submitted within the block by the block // author as a credential and used as input to approval assignment criteria. relay_vrf_story: [u8; 32], @@ -163,8 +162,9 @@ On receiving an `OverseerSignal::ActiveLeavesUpdate(update)`: * Ensure that the `CandidateEntry` contains a `block_assignments` entry for the block, with the correct backing group set. * If a validator in this session, compute and assign `our_assignment` for the `block_assignments` * Only if not a member of the backing group. - * Run `RelayVRFModulo` and `RelayVRFDelay` according to the [the approvals protocol section](../../protocol-approval.md#assignment-criteria) + * Run `RelayVRFModulo` and `RelayVRFDelay` according to the [the approvals protocol section](../../protocol-approval.md#assignment-criteria). Ensure that the assigned core derived from the output is covered by the auxiliary signature aggregated in the `VRFPRoof`. * invoke `process_wakeup(relay_block, candidate)` for each new candidate in each new block - this will automatically broadcast a 0-tranche assignment, kick off approval work, and schedule the next delay. + * Dispatch an `ApprovalDistributionMessage::NewBlocks` with the meta information filled out for each new block. #### `ApprovalVotingMessage::CheckAndImportAssignment` @@ -175,16 +175,18 @@ On receiving a `ApprovalVotingMessage::CheckAndImportAssignment` message, we che * Check the assignment cert * If the cert kind is `RelayVRFModulo`, then the certificate is valid as long as `sample < session_info.relay_vrf_samples` and the VRF is valid for the validator's key with the input `block_entry.relay_vrf_story ++ sample.encode()` as described with [the approvals protocol section](../../protocol-approval.md#assignment-criteria). We set `core_index = vrf.make_bytes().to_u32() % session_info.n_cores`. If the `BlockEntry` causes inclusion of a candidate at `core_index`, then this is a valid assignment for the candidate at `core_index` and has delay tranche 0. Otherwise, it can be ignored. * If the cert kind is `RelayVRFDelay`, then we check if the VRF is valid for the validator's key with the input `block_entry.relay_vrf_story ++ cert.core_index.encode()` as described in [the approvals protocol section](../../protocol-approval.md#assignment-criteria). The cert can be ignored if the block did not cause inclusion of a candidate on that core index. Otherwise, this is a valid assignment for the included candidate. The delay tranche for the assignment is determined by reducing `(vrf.make_bytes().to_u64() % (session_info.n_delay_tranches + session_info.zeroth_delay_tranche_width)).saturating_sub(session_info.zeroth_delay_tranche_width)`. + * We also check that the core index derived by the output is covered by the `VRFProof` by means of an auxiliary signature. + * If the delay tranche is too far in the future, return `VoteCheckResult::Ignore`. * `import_checked_assignment` * return the appropriate `VoteCheckResult` on the response channel. #### `ApprovalVotingMessage::CheckAndImportApproval` On receiving a `CheckAndImportApproval(indirect_approval_vote, response_channel)` message: - * Fetch the `BlockEntry` from the indirect approval vote's `block_hash`. If none, return `VoteCheckResult::Bad`. - * Fetch the `CandidateEntry` from the indirect approval vote's `candidate_index`. If the block did not trigger inclusion of enough candidates, return `VoteCheckResult::Bad`. - * Construct a `SignedApprovalVote` using the candidate hash and check against the validator's approval key, based on the session info of the block. If invalid or no such validator, return `VoteCheckResult::Bad`. - * Send `VoteCheckResult::Accepted`, + * Fetch the `BlockEntry` from the indirect approval vote's `block_hash`. If none, return `ApprovalCheckResult::Bad`. + * Fetch the `CandidateEntry` from the indirect approval vote's `candidate_index`. If the block did not trigger inclusion of enough candidates, return `ApprovalCheckResult::Bad`. + * Construct a `SignedApprovalVote` using the candidate hash and check against the validator's approval key, based on the session info of the block. If invalid or no such validator, return `ApprovalCheckResult::Bad`. + * Send `ApprovalCheckResult::Accepted` * `import_checked_approval(BlockEntry, CandidateEntry, ValidatorIndex)` #### `ApprovalVotingMessage::ApprovedAncestor` @@ -201,13 +203,14 @@ On receiving an `ApprovedAncestor(Hash, BlockNumber, response_channel)`: #### `import_checked_assignment` * Load the candidate in question and access the `approval_entry` for the block hash the cert references. + * Ignore if we already observe the validator as having been assigned. * Ensure the validator index is not part of the backing group for the candidate. * Ensure the validator index is not present in the approval entry already. * Create a tranche entry for the delay tranche in the approval entry and note the assignment within it. * Note the candidate index within the approval entry. #### `import_checked_approval(BlockEntry, CandidateEntry, ValidatorIndex)` - * Set the corresponding bit of the `approvals` bitfield in the `CandidateEntry` to `1`. + * Set the corresponding bit of the `approvals` bitfield in the `CandidateEntry` to `1`. If already `1`, return. * For each `ApprovalEntry` in the `CandidateEntry` (typically only 1), check whether the validator is assigned as a checker. * If so, set `n_tranches = tranches_to_approve(approval_entry)`. * If `check_approval(block_entry, approval_entry, n_tranches)` is true, set the corresponding bit in the `block_entry.approved_bitfield`. @@ -230,8 +233,8 @@ On receiving an `ApprovedAncestor(Hash, BlockNumber, response_channel)`: * Set `n_tranches = tranches_to_approve(approval_entry)` * If `OurAssignment` has tranche `<= n_tranches`, the tranche is live according to our local clock (based against block slot), and we have not triggered the assignment already * Import to `ApprovalEntry` - * Broadcast on network with an `ApprovalNetworkingMessage::DistributeAssignment`. - * Kick off approval work with `launch_approval` + * Broadcast on network with an `ApprovalDistributionMessage::DistributeAssignment`. + * Kick off approval work with `launch_approval`. Note that if the candidate appears in multiple current blocks, we will launch approval for each block it appears in. It may make sense to shortcut around this with caching either at this level or on the level of the other subsystems invoked by that function. * Schedule another wakeup based on `next_wakeup` #### `next_wakeup(approval_entry, candidate_entry)`: @@ -251,6 +254,6 @@ On receiving an `ApprovedAncestor(Hash, BlockNumber, response_channel)`: #### `issue_approval(request)`: * Fetch the block entry and candidate entry. Ignore if `None` - we've probably just lost a race with finality. * Construct a `SignedApprovalVote` with the validator index for the session. - * Transform into an `IndirectSignedApprovalVote` using the `block_hash` and `candidate_index` from the request. * `import_checked_approval(block_entry, candidate_entry, validator_index)` - * Dispatch an `ApprovalNetworkingMessage::DistributeApproval` message. + * Construct a `IndirectSignedApprovalVote` using the informatio about the vote. + * Dispatch `ApprovalDistributionMessage::DistributeApproval`. diff --git a/roadmap/implementers-guide/src/node/utility/network-bridge.md b/roadmap/implementers-guide/src/node/utility/network-bridge.md index 5ace56b2a9..d89ec7e8fe 100644 --- a/roadmap/implementers-guide/src/node/utility/network-bridge.md +++ b/roadmap/implementers-guide/src/node/utility/network-bridge.md @@ -61,6 +61,12 @@ The `activated` and `deactivated` lists determine the evolution of our local vie If we are connected to the same peer on both peer-sets, we will send the peer two view updates as a result. +### Overseer Signal: BlockFinalized + +We obtain the number of the block hash in the event by issuing a `ChainApiMessage::BlockNumber` request and then issue a `ProtocolMessage::ViewUpdate` to each connected peer on each peer-set. We also issue a `NetworkBridgeEvent::OurViewChange` to each event handler for each protocol. + +If we are connected to the same peer on both peer-sets, we will send the peer two view updates as a result. + ### Network Event: Peer Connected Issue a `NetworkBridgeEvent::PeerConnected` for each [Event Handler](#event-handlers) of the peer-set and negotiated protocol version of the peer. diff --git a/roadmap/implementers-guide/src/types/approval.md b/roadmap/implementers-guide/src/types/approval.md index 07266e718a..5603d03aa6 100644 --- a/roadmap/implementers-guide/src/types/approval.md +++ b/roadmap/implementers-guide/src/types/approval.md @@ -17,11 +17,9 @@ These certificates can be checked in the context of a specific block, candidate, ```rust enum AssignmentCertKind { RelayVRFModulo { - relay_vrf: (VRFInOut, VRFProof), sample: u32, }, RelayVRFDelay { - relay_vrf: (VRFInOut, VRFProof), core_index: CoreIndex, } } @@ -30,12 +28,25 @@ struct AssignmentCert { // The criterion which is claimed to be met by this cert. kind: AssignmentCertKind, // The VRF showing the criterion is met. - vrf: VRFInOut, + vrf: (VRFPreOut, VRFProof), } ``` > TODO: RelayEquivocation cert. Probably can only be broadcast to chains that have handled an equivocation report. +## IndirectAssignmentCert + +An assignment cert which refers to the candidate under which the assignment is relevant by block hash. + +```rust +struct IndirectAssignmentCert { + // A block hash where the candidate appears. + block_hash: Hash, + validator: ValidatorIndex, + cert: AssignmentCert, +} +``` + ## ApprovalVote A vote of approval on a candidate. @@ -58,7 +69,7 @@ struct SignedApprovalVote { A signed approval vote which references the candidate indirectly via the block. If there exists a look-up to the candidate hash from the block hash and candidate index, then this can be transformed into a `SignedApprovalVote`. -Although this vote references the candidate by a specific block hash and candidate index, the vote actually applies to +Although this vote references the candidate by a specific block hash and candidate index, the signature is computed on the actual `SignedApprovalVote` payload. ```rust struct IndirectSignedApprovalVote { diff --git a/roadmap/implementers-guide/src/types/network.md b/roadmap/implementers-guide/src/types/network.md index a5472a4071..5e78c30f29 100644 --- a/roadmap/implementers-guide/src/types/network.md +++ b/roadmap/implementers-guide/src/types/network.md @@ -8,7 +8,12 @@ These types are those that are actually sent over the network to subsystems. type RequestId = u64; type ProtocolVersion = u32; struct PeerId(...); // opaque, unique identifier of a peer. -struct View(Vec); // Up to `N` (5?) chain heads. +struct View { + // Up to `N` (5?) chain heads. + heads: Vec, + // The number of the finalized block. + finalized_number: BlockNumber, +} enum ObservedRole { Full, @@ -18,6 +23,20 @@ enum ObservedRole { ## V1 Network Subsystem Message Types +### Approval Distribution V1 + +```rust +enum ApprovalDistributionV1Message { + /// Assignments for candidates in recent, unfinalized blocks. + /// + /// The u32 is the claimed index of the candidate this assignment corresponds to. Actually checking the assignment + /// may yield a different result. + Assignments(Vec<(IndirectAssignmentCert, u32)>), + /// Approvals for candidates in some recent, unfinalized block. + Approvals(Vec), +} +``` + ### Availability Distribution V1 ```rust @@ -82,6 +101,7 @@ These are the messages for the protocol on the validation peer-set. ```rust enum ValidationProtocolV1 { + ApprovalDistribution(ApprovalDistributionV1Message), AvailabilityDistribution(AvailabilityDistributionV1Message), BitfieldDistribution(BitfieldDistributionV1Message), PoVDistribution(PoVDistributionV1Message), diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 3b4b0d5b02..daebbab34a 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -40,24 +40,30 @@ struct ActiveLeavesUpdate { Messages received by the approval voting subsystem. ```rust -enum VoteCheckResult { +enum AssignmentCheckResult { + // The vote was accepted and should be propagated onwards. + Accepted, + // The vote was valid but duplicate and should not be propagated onwards. + AcceptedDuplicate, + // The vote was valid but too far in the future to accept right now. + TooFarInFuture, + // The vote was bad and should be ignored, reporting the peer who propagated it. + Bad, +} + +enum ApprovalCheckResult { // The vote was accepted and should be propagated onwards. Accepted, // The vote was bad and should be ignored, reporting the peer who propagated it. Bad, - // We do not have enough information to evaluate the vote. Ignore but don't report. - // This should occur primarily on startup. - Ignore, } enum ApprovalVotingMessage { /// Check if the assignment is valid and can be accepted by our view of the protocol. /// Should not be sent unless the block hash is known. CheckAndImportAssignment( - Hash, - AssignmentCert, - ValidatorIndex, - ResponseChannel, + IndirectAssignmentCert, + ResponseChannel, ), /// Check if the approval vote is valid and can be accepted by our view of the /// protocol. @@ -65,7 +71,7 @@ enum ApprovalVotingMessage { /// Should not be sent unless the block hash within the indirect vote is known. CheckAndImportApproval( IndirectSignedApprovalVote, - ResponseChannel, + ResponseChannel, ), /// Returns the highest possible ancestor hash of the provided block hash which is /// acceptable to vote on finality for. @@ -78,17 +84,37 @@ enum ApprovalVotingMessage { } ``` -## Approval Networking +## Approval Distribution -Messages received by the approval networking subsystem. +Messages received by the approval Distribution subsystem. ```rust -enum ApprovalNetworkingMessage { +/// Metadata about a block which is now live in the approval protocol. +struct BlockApprovalMeta { + /// The hash of the block. + hash: Hash, + /// The number of the block. + number: BlockNumber, + /// The candidates included by the block. Note that these are not the same as the candidates that appear within the + /// block body. + candidates: Vec, + /// The consensus slot number of the block. + slot_number: SlotNumber, +} + +enum ApprovalDistributionMessage { + /// Notify the `ApprovalDistribution` subsystem about new blocks and the candidates contained within + /// them. + NewBlocks(Vec), /// Distribute an assignment cert from the local validator. The cert is assumed - /// to be valid for the given relay-parent and validator index. - DistributeAssignment(Hash, AssignmentCert, ValidatorIndex), - /// Distribute an approval vote for the local validator. - DistributeApproval(IndirectApprovalVote), + /// to be valid, relevant, and for the given relay-parent and validator index. + /// + /// The `u32` param is the candidate index in the fully-included list. + DistributeAssignment(IndirectAssignmentCert, u32), + /// Distribute an approval vote for the local validator. The approval vote is assumed to be + /// valid, relevant, and the corresponding approval already issued. If not, the subsystem is free to drop + /// the message. + DistributeApproval(IndirectSignedApprovalVote), } ``` -- GitLab From a0541ce7cf9a53c5904d9a141f93014dbbe733e6 Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Wed, 25 Nov 2020 12:20:54 +0300 Subject: [PATCH 048/203] PoV Distribution optimization (#1990) * Initial commit * Remove unnecessary struct * Some review nits * Update node/network/pov-distribution/src/lib.rs * Update parachain/test-parachains/adder/collator/tests/integration.rs * Review nits * notify_all_we_are_awaiting * Both ways of peers connections should work the same * Add mod-level docs to error.rs * Avoid multiple connection requests at same parent * Dont bail on errors * FusedStream for ConnectionRequests * Fix build after merge * Improve error handling * Remove whitespace formatting --- Cargo.lock | 5 + node/network/pov-distribution/Cargo.toml | 8 + node/network/pov-distribution/src/error.rs | 35 + node/network/pov-distribution/src/lib.rs | 279 ++++++-- node/network/pov-distribution/src/tests.rs | 644 +++++++++++++++++- .../subsystem-util/src/validator_discovery.rs | 11 + 6 files changed, 901 insertions(+), 81 deletions(-) create mode 100644 node/network/pov-distribution/src/error.rs diff --git a/Cargo.lock b/Cargo.lock index a78cf0038d..97f4c52ab9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5202,13 +5202,18 @@ name = "polkadot-pov-distribution" version = "0.1.0" dependencies = [ "assert_matches", + "env_logger 0.8.2", "futures 0.3.8", + "log", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", + "smallvec 1.5.0", "sp-core", + "sp-keyring", + "thiserror", "tracing", "tracing-futures", ] diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 6ef2d10a56..6f2bc640b0 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -6,8 +6,10 @@ edition = "2018" [dependencies] futures = "0.3.8" +thiserror = "1.0.21" tracing = "0.1.22" tracing-futures = "0.2.4" + polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } @@ -15,5 +17,11 @@ polkadot-node-network-protocol = { path = "../../network/protocol" } [dev-dependencies] assert_matches = "1.4.0" +env_logger = "0.8.1" +log = "0.4.11" +smallvec = "1.4.2" + sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } + polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } diff --git a/node/network/pov-distribution/src/error.rs b/node/network/pov-distribution/src/error.rs new file mode 100644 index 0000000000..625ea4c7fd --- /dev/null +++ b/node/network/pov-distribution/src/error.rs @@ -0,0 +1,35 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! The `Error` and `Result` types used by the subsystem. + +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum Error { + #[error(transparent)] + Subsystem(#[from] polkadot_subsystem::SubsystemError), + #[error(transparent)] + OneshotRecv(#[from] futures::channel::oneshot::Canceled), + #[error(transparent)] + Runtime(#[from] polkadot_subsystem::errors::RuntimeApiError), + #[error(transparent)] + ValidatorDiscovery(#[from] polkadot_node_subsystem_util::validator_discovery::Error), + #[error(transparent)] + Util(#[from] polkadot_node_subsystem_util::Error), +} + +pub type Result = std::result::Result; diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index 01b86b44a0..1b59441fc0 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -22,16 +22,26 @@ #![deny(unused_crate_dependencies)] #![warn(missing_docs)] -use polkadot_primitives::v1::{Hash, PoV, CandidateDescriptor}; +use polkadot_primitives::v1::{ + Hash, PoV, CandidateDescriptor, ValidatorId, Id as ParaId, CoreIndex, CoreState, +}; use polkadot_subsystem::{ - ActiveLeavesUpdate, OverseerSignal, SubsystemContext, Subsystem, SubsystemResult, SubsystemError, + ActiveLeavesUpdate, OverseerSignal, SubsystemContext, SubsystemResult, SubsystemError, Subsystem, FromOverseer, SpawnedSubsystem, messages::{ - PoVDistributionMessage, RuntimeApiMessage, RuntimeApiRequest, AllMessages, NetworkBridgeMessage, + PoVDistributionMessage, AllMessages, NetworkBridgeMessage, }, }; -use polkadot_node_subsystem_util::metrics::{self, prometheus}; -use polkadot_node_network_protocol::{v1 as protocol_v1, ReputationChange as Rep, NetworkBridgeEvent, PeerId, View}; +use polkadot_node_subsystem_util::{ + validator_discovery, + request_validators_ctx, + request_validator_groups_ctx, + request_availability_cores_ctx, + metrics::{self, prometheus}, +}; +use polkadot_node_network_protocol::{ + v1 as protocol_v1, ReputationChange as Rep, NetworkBridgeEvent, PeerId, View, +}; use futures::prelude::*; use futures::channel::oneshot; @@ -39,6 +49,8 @@ use futures::channel::oneshot; use std::collections::{hash_map::{Entry, HashMap}, HashSet}; use std::sync::Arc; +mod error; + #[cfg(test)] mod tests; @@ -75,20 +87,33 @@ impl Subsystem for PoVDistribution } } +#[derive(Default)] struct State { + /// A state of things going on on a per-relay-parent basis. relay_parent_state: HashMap, + + /// Info on peers. peer_state: HashMap, + + /// Our own view. our_view: View, + + /// Connect to relevant groups of validators at different relay parents. + connection_requests: validator_discovery::ConnectionRequests, + + /// Metrics. metrics: Metrics, } struct BlockBasedState { known: HashMap>, + /// All the PoVs we are or were fetching, coupled with channels expecting the data. /// /// This may be an empty list, which indicates that we were once awaiting this PoV but have /// received it already. fetching: HashMap>>>, + n_validators: usize, } @@ -128,38 +153,45 @@ async fn handle_signal( let _timer = state.metrics.time_handle_signal(); for relay_parent in activated { - let (vals_tx, vals_rx) = oneshot::channel(); - ctx.send_message(AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::Validators(vals_tx), - ))).await; - - let n_validators = match vals_rx.await? { - Ok(v) => v.len(), + match request_validators_ctx(relay_parent.clone(), ctx).await { + Ok(vals_rx) => { + let n_validators = match vals_rx.await? { + Ok(v) => v.len(), + Err(e) => { + tracing::warn!( + target: LOG_TARGET, + err = ?e, + "Error fetching validators from runtime API for active leaf", + ); + + // Not adding bookkeeping here might make us behave funny, but we + // shouldn't take down the node on spurious runtime API errors. + // + // and this is "behave funny" as in be bad at our job, but not in any + // slashable or security-related way. + continue; + } + }; + + state.relay_parent_state.insert(relay_parent, BlockBasedState { + known: HashMap::new(), + fetching: HashMap::new(), + n_validators, + }); + } Err(e) => { + // continue here also as above. tracing::warn!( target: LOG_TARGET, err = ?e, "Error fetching validators from runtime API for active leaf", ); - - // Not adding bookkeeping here might make us behave funny, but we - // shouldn't take down the node on spurious runtime API errors. - // - // and this is "behave funny" as in be bad at our job, but not in any - // slashable or security-related way. - continue; } - }; - - state.relay_parent_state.insert(relay_parent, BlockBasedState { - known: HashMap::new(), - fetching: HashMap::new(), - n_validators: n_validators, - }); + } } for relay_parent in deactivated { + state.connection_requests.remove(&relay_parent); state.relay_parent_state.remove(&relay_parent); } @@ -197,7 +229,7 @@ async fn notify_all_we_are_awaiting( ctx.send_message(AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage( peers_to_send, payload, - ))).await + ))).await; } /// Notify one peer about everything we're awaiting at a given relay-parent. @@ -224,7 +256,7 @@ async fn notify_one_we_are_awaiting_many( ctx.send_message(AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage( vec![peer.clone()], payload, - ))).await + ))).await; } /// Distribute a PoV to peers who are awaiting it. @@ -262,6 +294,75 @@ async fn distribute_to_awaiting( metrics.on_pov_distributed(); } +/// Get the Id of the Core that is assigned to the para being collated on if any +/// and the total number of cores. +async fn determine_core( + ctx: &mut impl SubsystemContext, + para_id: ParaId, + relay_parent: Hash, +) -> error::Result> { + let cores = request_availability_cores_ctx(relay_parent, ctx).await?.await??; + + for (idx, core) in cores.iter().enumerate() { + if let CoreState::Scheduled(occupied) = core { + if occupied.para_id == para_id { + return Ok(Some(((idx as u32).into(), cores.len()))); + } + } + } + + Ok(None) +} + +/// Figure out a group of validators assigned to a given `ParaId`. +async fn determine_validators_for_core( + ctx: &mut impl SubsystemContext, + core_index: CoreIndex, + num_cores: usize, + relay_parent: Hash, +) -> error::Result>> { + let groups = request_validator_groups_ctx(relay_parent, ctx).await?.await??; + + let group_index = groups.1.group_for_core(core_index, num_cores); + + let connect_to_validators = match groups.0.get(group_index.0 as usize) { + Some(group) => group.clone(), + None => return Ok(None), + }; + + let validators = request_validators_ctx(relay_parent, ctx).await?.await??; + + let validators = connect_to_validators + .into_iter() + .map(|idx| validators[idx as usize].clone()) + .collect(); + + Ok(Some(validators)) +} + +async fn determine_relevant_validators( + ctx: &mut impl SubsystemContext, + relay_parent: Hash, + para_id: ParaId, +) -> error::Result>> { + // Determine which core the para_id is assigned to. + let (core, num_cores) = match determine_core(ctx, para_id, relay_parent).await? { + Some(core) => core, + None => { + tracing::warn!( + target: LOG_TARGET, + "Looks like no core is assigned to {:?} at {:?}", + para_id, + relay_parent, + ); + + return Ok(None); + } + }; + + determine_validators_for_core(ctx, core, num_cores, relay_parent).await +} + /// Handles a `FetchPoV` message. #[tracing::instrument(level = "trace", skip(ctx, state, response_sender), fields(subsystem = LOG_TARGET))] async fn handle_fetch( @@ -291,7 +392,35 @@ async fn handle_fetch( return; } Entry::Vacant(e) => { - e.insert(vec![response_sender]); + if let Ok(Some(relevant_validators)) = determine_relevant_validators( + ctx, + relay_parent, + descriptor.para_id, + ).await { + // We only need one connection request per (relay_parent, para_id) + // so here we take this shortcut to avoid calling `connect_to_validators` + // more than once. + if !state.connection_requests.contains_request(&relay_parent) { + match validator_discovery::connect_to_validators( + ctx, + relay_parent, + relevant_validators.clone(), + ).await { + Ok(new_connection_request) => { + state.connection_requests.put(relay_parent, new_connection_request); + } + Err(e) => { + tracing::debug!( + target: LOG_TARGET, + "Failed to create a validator connection request {:?}", + e, + ); + } + } + } + + e.insert(vec![response_sender]); + } } } } @@ -482,6 +611,11 @@ async fn handle_incoming_pov( ).await } +/// Handles a newly connected validator in the context of some relay leaf. +fn handle_validator_connected(state: &mut State, peer_id: PeerId) { + state.peer_state.entry(peer_id).or_default(); +} + /// Handles a network bridge update. #[tracing::instrument(level = "trace", skip(ctx, state), fields(subsystem = LOG_TARGET))] async fn handle_network_update( @@ -493,7 +627,7 @@ async fn handle_network_update( match update { NetworkBridgeEvent::PeerConnected(peer, _observed_role) => { - state.peer_state.insert(peer, PeerState { awaited: HashMap::new() }); + handle_validator_connected(state, peer); } NetworkBridgeEvent::PeerDisconnected(peer) => { state.peer_state.remove(&peer); @@ -558,44 +692,61 @@ impl PoVDistribution { self, mut ctx: impl SubsystemContext, ) -> SubsystemResult<()> { - let mut state = State { - relay_parent_state: HashMap::new(), - peer_state: HashMap::new(), - our_view: View(Vec::new()), - metrics: self.metrics, - }; + let mut state = State::default(); + state.metrics = self.metrics; loop { - match ctx.recv().await? { - FromOverseer::Signal(signal) => if handle_signal(&mut state, &mut ctx, signal).await? { - return Ok(()); - }, - FromOverseer::Communication { msg } => match msg { - PoVDistributionMessage::FetchPoV(relay_parent, descriptor, response_sender) => - handle_fetch( - &mut state, - &mut ctx, - relay_parent, - descriptor, - response_sender, - ).await, - PoVDistributionMessage::DistributePoV(relay_parent, descriptor, pov) => - handle_distribute( - &mut state, - &mut ctx, - relay_parent, - descriptor, - pov, - ).await, - PoVDistributionMessage::NetworkBridgeUpdateV1(event) => - handle_network_update( + // `select_biased` is used since receiving connection notifications and + // peer view update messages may be racy and we want connection notifications + // first. + futures::select_biased! { + v = state.connection_requests.next() => { + match v { + Some((_relay_parent, _validator_id, peer_id)) => { + handle_validator_connected(&mut state, peer_id); + } + None => break, + } + } + v = ctx.recv().fuse() => { + match v? { + FromOverseer::Signal(signal) => if handle_signal( &mut state, &mut ctx, - event, - ).await, - }, - } + signal, + ).await? { + return Ok(()); + } + FromOverseer::Communication { msg } => match msg { + PoVDistributionMessage::FetchPoV(relay_parent, descriptor, response_sender) => + handle_fetch( + &mut state, + &mut ctx, + relay_parent, + descriptor, + response_sender, + ).await, + PoVDistributionMessage::DistributePoV(relay_parent, descriptor, pov) => + handle_distribute( + &mut state, + &mut ctx, + relay_parent, + descriptor, + pov, + ).await, + PoVDistributionMessage::NetworkBridgeUpdateV1(event) => + handle_network_update( + &mut state, + &mut ctx, + event, + ).await, + } + } + } + }; } + + Ok(()) } } diff --git a/node/network/pov-distribution/src/tests.rs b/node/network/pov-distribution/src/tests.rs index 03a39507a9..7c7859b869 100644 --- a/node/network/pov-distribution/src/tests.rs +++ b/node/network/pov-distribution/src/tests.rs @@ -1,7 +1,21 @@ use super::*; -use futures::executor; -use polkadot_primitives::v1::BlockData; + +use std::time::Duration; + use assert_matches::assert_matches; +use futures::executor; +use tracing::trace; +use smallvec::smallvec; + +use sp_keyring::Sr25519Keyring; + +use polkadot_primitives::v1::{ + AuthorityDiscoveryId, BlockData, CoreState, GroupRotationInfo, Id as ParaId, + ScheduledCore, ValidatorIndex, +}; +use polkadot_subsystem::messages::{RuntimeApiMessage, RuntimeApiRequest}; +use polkadot_node_subsystem_test_helpers as test_helpers; +use polkadot_node_subsystem_util::TimeoutExt; fn make_pov(data: Vec) -> PoV { PoV { block_data: BlockData(data) } @@ -15,6 +29,482 @@ fn make_peer_state(awaited: Vec<(Hash, Vec)>) } } +fn validator_pubkeys(val_ids: &[Sr25519Keyring]) -> Vec { + val_ids.iter().map(|v| v.public().into()).collect() +} + +fn validator_authority_id(val_ids: &[Sr25519Keyring]) -> Vec { + val_ids.iter().map(|v| v.public().into()).collect() +} + +struct TestHarness { + virtual_overseer: test_helpers::TestSubsystemContextHandle, +} + +fn test_harness>( + test: impl FnOnce(TestHarness) -> T, +) { + let _ = env_logger::builder() + .is_test(true) + .filter( + Some("polkadot_pov_distribution"), + log::LevelFilter::Trace, + ) + .filter( + Some(LOG_TARGET), + log::LevelFilter::Trace, + ) + .try_init(); + + let pool = sp_core::testing::TaskExecutor::new(); + + let (context, virtual_overseer) = test_helpers::make_subsystem_context(pool.clone()); + + let subsystem = super::PoVDistribution::new(Metrics::default()); + + let subsystem = subsystem.run(context); + + let test_fut = test(TestHarness { virtual_overseer }); + + futures::pin_mut!(test_fut); + futures::pin_mut!(subsystem); + + executor::block_on(future::select(test_fut, subsystem)); +} + +const TIMEOUT: Duration = Duration::from_millis(100); + +async fn overseer_send( + overseer: &mut test_helpers::TestSubsystemContextHandle, + msg: PoVDistributionMessage, +) { + trace!("Sending message:\n{:?}", &msg); + overseer + .send(FromOverseer::Communication { msg }) + .timeout(TIMEOUT) + .await + .expect(&format!("{:?} is more than enough for sending messages.", TIMEOUT)); +} + +async fn overseer_recv( + overseer: &mut test_helpers::TestSubsystemContextHandle, +) -> AllMessages { + let msg = overseer_recv_with_timeout(overseer, TIMEOUT) + .await + .expect(&format!("{:?} is more than enough to receive messages", TIMEOUT)); + + trace!("Received message:\n{:?}", &msg); + + msg +} + +async fn overseer_recv_with_timeout( + overseer: &mut test_helpers::TestSubsystemContextHandle, + timeout: Duration, +) -> Option { + trace!("Waiting for message..."); + overseer + .recv() + .timeout(timeout) + .await +} + +async fn overseer_signal( + overseer: &mut test_helpers::TestSubsystemContextHandle, + signal: OverseerSignal, +) { + overseer + .send(FromOverseer::Signal(signal)) + .timeout(TIMEOUT) + .await + .expect(&format!("{:?} is more than enough for sending signals.", TIMEOUT)); +} + +#[derive(Clone)] +struct TestState { + chain_ids: Vec, + validators: Vec, + validator_public: Vec, + validator_authority_id: Vec, + validator_peer_id: Vec, + validator_groups: (Vec>, GroupRotationInfo), + relay_parent: Hash, + availability_cores: Vec, +} + +impl Default for TestState { + fn default() -> Self { + let chain_a = ParaId::from(1); + let chain_b = ParaId::from(2); + + let chain_ids = vec![chain_a, chain_b]; + + let validators = vec![ + Sr25519Keyring::Alice, + Sr25519Keyring::Bob, + Sr25519Keyring::Charlie, + Sr25519Keyring::Dave, + Sr25519Keyring::Ferdie, + ]; + + let validator_public = validator_pubkeys(&validators); + let validator_authority_id = validator_authority_id(&validators); + + let validator_peer_id = std::iter::repeat_with(|| PeerId::random()) + .take(validator_public.len()) + .collect(); + + let validator_groups = vec![vec![2, 0, 4], vec![1], vec![3]]; + let group_rotation_info = GroupRotationInfo { + session_start_block: 0, + group_rotation_frequency: 100, + now: 1, + }; + let validator_groups = (validator_groups, group_rotation_info); + + let availability_cores = vec![ + CoreState::Scheduled(ScheduledCore { + para_id: chain_ids[0], + collator: None, + }), + CoreState::Scheduled(ScheduledCore { + para_id: chain_ids[1], + collator: None, + }), + ]; + + let relay_parent = Hash::repeat_byte(0x05); + + Self { + chain_ids, + validators, + validator_public, + validator_authority_id, + validator_peer_id, + validator_groups, + relay_parent, + availability_cores, + } + } +} + +#[test] +fn ask_validators_for_povs() { + let test_state = TestState::default(); + + test_harness(|test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let pov_block = PoV { + block_data: BlockData(vec![42, 43, 44]), + }; + + let pov_hash = pov_block.hash(); + + let mut candidate = CandidateDescriptor::default(); + + let current = test_state.relay_parent.clone(); + candidate.para_id = test_state.chain_ids[0]; + candidate.pov_hash = pov_hash; + candidate.relay_parent = test_state.relay_parent; + + overseer_signal( + &mut virtual_overseer, + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: smallvec![test_state.relay_parent.clone()], + deactivated: smallvec![], + }), + ).await; + + // first subsystem will try to obtain validators. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, current); + tx.send(Ok(test_state.validator_public.clone())).unwrap(); + } + ); + + let (tx, pov_fetch_result) = oneshot::channel(); + + overseer_send( + &mut virtual_overseer, + PoVDistributionMessage::FetchPoV(test_state.relay_parent.clone(), candidate, tx), + ).await; + + // obtain the availability cores. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::AvailabilityCores(tx) + )) => { + assert_eq!(relay_parent, current); + tx.send(Ok(test_state.availability_cores.clone())).unwrap(); + } + ); + + // Obtain the validator groups + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorGroups(tx) + )) => { + assert_eq!(relay_parent, current); + tx.send(Ok(test_state.validator_groups.clone())).unwrap(); + } + ); + + // obtain the validators per relay parent + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, current); + tx.send(Ok(test_state.validator_public.clone())).unwrap(); + } + ); + + // obtain the validator_id to authority_id mapping + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorDiscovery(validators, tx), + )) => { + assert_eq!(relay_parent, current); + assert_eq!(validators.len(), 3); + assert!(validators.iter().all(|v| test_state.validator_public.contains(&v))); + + let result = vec![ + Some(test_state.validator_authority_id[2].clone()), + Some(test_state.validator_authority_id[0].clone()), + Some(test_state.validator_authority_id[4].clone()), + ]; + tx.send(Ok(result)).unwrap(); + } + ); + + // We now should connect to our validator group. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ConnectToValidators { + validator_ids, + mut connected, + .. + } + ) => { + assert_eq!(validator_ids.len(), 3); + assert!(validator_ids.iter().all(|id| test_state.validator_authority_id.contains(id))); + + let result = vec![ + (test_state.validator_authority_id[2].clone(), test_state.validator_peer_id[2].clone()), + (test_state.validator_authority_id[0].clone(), test_state.validator_peer_id[0].clone()), + (test_state.validator_authority_id[4].clone(), test_state.validator_peer_id[4].clone()), + ]; + + result.into_iter().for_each(|r| connected.try_send(r).unwrap()); + } + ); + + for i in vec![2, 0, 4] { + overseer_send( + &mut virtual_overseer, + PoVDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange( + test_state.validator_peer_id[i].clone(), + View(vec![current]), + ) + ) + ).await; + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage( + to_peers, + payload, + )) => { + assert_eq!(to_peers, vec![test_state.validator_peer_id[i].clone()]); + assert_eq!(payload, awaiting_message(current.clone(), vec![pov_hash.clone()])); + } + ); + } + + overseer_send( + &mut virtual_overseer, + PoVDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerMessage( + test_state.validator_peer_id[2].clone(), + protocol_v1::PoVDistributionMessage::SendPoV(current, pov_hash, pov_block.clone()), + ) + ) + ).await; + + assert_eq!(*pov_fetch_result.await.unwrap(), pov_block); + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge(NetworkBridgeMessage::ReportPeer(id, benefit)) => { + assert_eq!(benefit, BENEFIT_FRESH_POV); + assert_eq!(id, test_state.validator_peer_id[2].clone()); + } + ); + + // Now let's test that if some peer is ahead of us we would still + // send `Await` on `FetchPoV` message to it. + let next_leaf = Hash::repeat_byte(10); + + // A validator's view changes and now is lets say ahead of us. + overseer_send( + &mut virtual_overseer, + PoVDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange( + test_state.validator_peer_id[2].clone(), + View(vec![next_leaf]), + ) + ) + ).await; + + let pov_block = PoV { + block_data: BlockData(vec![45, 46, 47]), + }; + + let pov_hash = pov_block.hash(); + + let candidate = CandidateDescriptor { + para_id: test_state.chain_ids[0], + pov_hash, + relay_parent: next_leaf.clone(), + ..Default::default() + }; + + let (tx, _pov_fetch_result) = oneshot::channel(); + + overseer_signal( + &mut virtual_overseer, + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: smallvec![next_leaf.clone()], + deactivated: smallvec![current.clone()], + }) + ).await; + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, next_leaf); + tx.send(Ok(test_state.validator_public.clone())).unwrap(); + } + ); + + overseer_send( + &mut virtual_overseer, + PoVDistributionMessage::FetchPoV(next_leaf.clone(), candidate, tx), + ).await; + + // Obtain the availability cores. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::AvailabilityCores(tx) + )) => { + assert_eq!(relay_parent, next_leaf); + tx.send(Ok(test_state.availability_cores.clone())).unwrap(); + } + ); + + // Obtain the validator groups + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorGroups(tx) + )) => { + assert_eq!(relay_parent, next_leaf); + tx.send(Ok(test_state.validator_groups.clone())).unwrap(); + } + ); + + // obtain the validators per relay parent + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, next_leaf); + tx.send(Ok(test_state.validator_public.clone())).unwrap(); + } + ); + + // obtain the validator_id to authority_id mapping + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorDiscovery(validators, tx), + )) => { + assert_eq!(relay_parent, next_leaf); + assert_eq!(validators.len(), 3); + assert!(validators.iter().all(|v| test_state.validator_public.contains(&v))); + + let result = vec![ + Some(test_state.validator_authority_id[2].clone()), + Some(test_state.validator_authority_id[0].clone()), + Some(test_state.validator_authority_id[4].clone()), + ]; + tx.send(Ok(result)).unwrap(); + } + ); + + // We now should connect to our validator group. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ConnectToValidators { + validator_ids, + mut connected, + .. + } + ) => { + assert_eq!(validator_ids.len(), 3); + assert!(validator_ids.iter().all(|id| test_state.validator_authority_id.contains(id))); + + let result = vec![ + (test_state.validator_authority_id[2].clone(), test_state.validator_peer_id[2].clone()), + (test_state.validator_authority_id[0].clone(), test_state.validator_peer_id[0].clone()), + (test_state.validator_authority_id[4].clone(), test_state.validator_peer_id[4].clone()), + ]; + + result.into_iter().for_each(|r| connected.try_send(r).unwrap()); + } + ); + + // We already know that the leaf in question in the peer's view so we request + // a chunk from them right away. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage( + to_peers, + payload, + )) => { + assert_eq!(to_peers, vec![test_state.validator_peer_id[2].clone()]); + assert_eq!(payload, awaiting_message(next_leaf.clone(), vec![pov_hash.clone()])); + } + ); + }); +} + #[test] fn distributes_to_those_awaiting_and_completes_local() { let hash_a: Hash = [0; 32].into(); @@ -66,6 +556,7 @@ fn distributes_to_those_awaiting_and_completes_local() { }, our_view: View(vec![hash_a, hash_b]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -103,8 +594,10 @@ fn distributes_to_those_awaiting_and_completes_local() { }); } + #[test] fn we_inform_peers_with_same_view_we_are_awaiting() { + let hash_a: Hash = [0; 32].into(); let hash_b: Hash = [1; 32].into(); @@ -146,6 +639,7 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -153,29 +647,135 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { let mut descriptor = CandidateDescriptor::default(); descriptor.pov_hash = pov_hash; + let para_id_1 = ParaId::from(1); + let para_id_2 = ParaId::from(2); + + descriptor.para_id = para_id_1; + + let availability_cores = vec![ + CoreState::Scheduled(ScheduledCore { + para_id: para_id_1, + collator: None, + }), + CoreState::Scheduled(ScheduledCore { + para_id: para_id_2, + collator: None, + }), + ]; + + let validators = vec![ + Sr25519Keyring::Alice, + Sr25519Keyring::Bob, + Sr25519Keyring::Charlie, + Sr25519Keyring::Dave, + Sr25519Keyring::Ferdie, + ]; + + let validator_authority_id = validator_authority_id(&validators); + let validators = validator_pubkeys(&validators); + + let validator_peer_id: Vec<_> = std::iter::repeat_with(|| PeerId::random()) + .take(validators.len()) + .collect(); + + let validator_groups = vec![vec![2, 0, 4], vec![1], vec![3]]; + let group_rotation_info = GroupRotationInfo { + session_start_block: 0, + group_rotation_frequency: 100, + now: 1, + }; + + let validator_groups = (validator_groups, group_rotation_info); + executor::block_on(async move { - handle_fetch( + let handle_future = handle_fetch( &mut state, &mut ctx, hash_a, descriptor, pov_send, - ).await; + ); - assert_eq!(state.relay_parent_state[&hash_a].fetching[&pov_hash].len(), 1); + let check_future = async move { + //assert_eq!(state.relay_parent_state[&hash_a].fetching[&pov_hash].len(), 1); + assert_matches!( + handle.recv().await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::AvailabilityCores(tx) + )) => { + assert_eq!(relay_parent, hash_a); + tx.send(Ok(availability_cores)).unwrap(); + } + ); - assert_matches!( - handle.recv().await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendValidationMessage(peers, message) - ) => { - assert_eq!(peers, vec![peer_a.clone()]); - assert_eq!( - message, - awaiting_message(hash_a, vec![pov_hash]), - ); - } - ) + assert_matches!( + handle.recv().await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorGroups(tx) + )) => { + assert_eq!(relay_parent, hash_a); + tx.send(Ok(validator_groups)).unwrap(); + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, hash_a); + tx.send(Ok(validators.clone())).unwrap(); + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::ValidatorDiscovery(validators_res, tx), + )) => { + assert_eq!(relay_parent, hash_a); + assert_eq!(validators_res.len(), 3); + assert!(validators_res.iter().all(|v| validators.contains(&v))); + + let result = vec![ + Some(validator_authority_id[2].clone()), + Some(validator_authority_id[0].clone()), + Some(validator_authority_id[4].clone()), + ]; + + tx.send(Ok(result)).unwrap(); + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ConnectToValidators { + validator_ids, + mut connected, + .. + } + ) => { + assert_eq!(validator_ids.len(), 3); + assert!(validator_ids.iter().all(|id| validator_authority_id.contains(id))); + + let result = vec![ + (validator_authority_id[2].clone(), validator_peer_id[2].clone()), + (validator_authority_id[0].clone(), validator_peer_id[0].clone()), + (validator_authority_id[4].clone(), validator_peer_id[4].clone()), + ]; + + result.into_iter().for_each(|r| connected.try_send(r).unwrap()); + } + ); + + }; + + futures::join!(handle_future, check_future); }); } @@ -224,6 +824,7 @@ fn peer_view_change_leads_to_us_informing() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -296,6 +897,7 @@ fn peer_complete_fetch_and_is_rewarded() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -385,6 +987,7 @@ fn peer_punished_for_sending_bad_pov() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -449,6 +1052,7 @@ fn peer_punished_for_sending_unexpected_pov() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -511,6 +1115,7 @@ fn peer_punished_for_sending_pov_out_of_our_view() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -570,6 +1175,7 @@ fn peer_reported_for_awaiting_too_much() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -656,6 +1262,7 @@ fn peer_reported_for_awaiting_outside_their_view() { }, our_view: View(vec![hash_a, hash_b]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -719,6 +1326,7 @@ fn peer_reported_for_awaiting_outside_our_view() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -797,6 +1405,7 @@ fn peer_complete_fetch_leads_to_us_completing_others() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); @@ -880,6 +1489,7 @@ fn peer_completing_request_no_longer_awaiting() { }, our_view: View(vec![hash_a]), metrics: Default::default(), + connection_requests: Default::default(), }; let pool = sp_core::testing::TaskExecutor::new(); diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index 83c405a3f4..357041d96b 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -115,6 +115,12 @@ pub struct ConnectionRequests { requests: StreamUnordered, } +impl stream::FusedStream for ConnectionRequests { + fn is_terminated(&self) -> bool { + false + } +} + impl ConnectionRequests { /// Insert a new connection request. /// @@ -133,6 +139,11 @@ impl ConnectionRequests { Pin::new(&mut self.requests).remove(token); } } + + /// Is a connection at this relay parent already present in the request + pub fn contains_request(&self, relay_parent: &Hash) -> bool { + self.id_map.contains_key(relay_parent) + } } impl stream::Stream for ConnectionRequests { -- GitLab From 9a32ab1d9f22386dedc9a7e65aeb5e07949f26f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 25 Nov 2020 10:27:50 +0100 Subject: [PATCH 049/203] Some code cleanup in overseer (#2008) * Some code cleanup in overseer - Switches to select! in the overseer run loop to be more fair about message processing between the different sources. - Added a check to only send `ActiveLeaves` if the update actually contains any data. * Move the check * Restore old behavior * Simplify message sending and signal sending to subsystems * Update node/subsystem/src/lib.rs --- node/overseer/src/lib.rs | 369 +++++++++++++++----------------------- node/subsystem/src/lib.rs | 15 +- 2 files changed, 155 insertions(+), 229 deletions(-) diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 76d967dc9c..661ef79b06 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -68,7 +68,7 @@ use std::collections::{hash_map, HashMap}; use futures::channel::{mpsc, oneshot}; use futures::{ - pending, poll, select, + poll, select, future::BoxFuture, stream::{self, FuturesUnordered}, Future, FutureExt, SinkExt, StreamExt, @@ -384,6 +384,30 @@ struct OverseenSubsystem { instance: Option>, } +impl OverseenSubsystem { + /// Send a message to the wrapped subsystem. + /// + /// If the inner `instance` is `None`, nothing is happening. + async fn send_message(&mut self, msg: M) -> SubsystemResult<()> { + if let Some(ref mut instance) = self.instance { + instance.tx.send(FromOverseer::Communication { msg }).await?; + } + + Ok(()) + } + + /// Send a signal to the wrapped subsystem. + /// + /// If the inner `instance` is `None`, nothing is happening. + async fn send_signal(&mut self, signal: OverseerSignal) -> SubsystemResult<()> { + if let Some(ref mut instance) = self.instance { + instance.tx.send(FromOverseer::Signal(signal)).await?; + } + + Ok(()) + } +} + /// The `Overseer` itself. pub struct Overseer { /// A candidate validation subsystem. @@ -1240,65 +1264,21 @@ where // Stop the overseer. async fn stop(mut self) { - if let Some(ref mut s) = self.candidate_validation_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.candidate_backing_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.candidate_selection_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.statement_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.availability_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.bitfield_signing_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.bitfield_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.provisioner_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.pov_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.runtime_api_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.availability_store_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.network_bridge_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.chain_api_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.collator_protocol_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } - - if let Some(ref mut s) = self.collation_generation_subsystem.instance { - let _ = s.tx.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; - } + let _ = self.candidate_validation_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.candidate_backing_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.candidate_selection_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.statement_distribution_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.availability_distribution_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.bitfield_signing_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.bitfield_distribution_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.provisioner_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.pov_distribution_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.runtime_api_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.availability_store_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.network_bridge_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.chain_api_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.collator_protocol_subsystem.send_signal(OverseerSignal::Conclude).await; + let _ = self.collation_generation_subsystem.send_signal(OverseerSignal::Conclude).await; let mut stop_delay = Delay::new(Duration::from_secs(STOP_DELAY)).fuse(); @@ -1318,10 +1298,9 @@ where /// Run the `Overseer`. #[tracing::instrument(skip(self), fields(subsystem = LOG_TARGET))] pub async fn run(mut self) -> SubsystemResult<()> { - let leaves = std::mem::take(&mut self.leaves); let mut update = ActiveLeavesUpdate::default(); - for (hash, number) in leaves.into_iter() { + for (hash, number) in std::mem::take(&mut self.leaves) { update.activated.push(hash); let _ = self.active_leaves.insert(hash, number); self.on_head_activated(&hash); @@ -1330,50 +1309,62 @@ where self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; loop { - while let Poll::Ready(Some(msg)) = poll!(&mut self.events_rx.next()) { - match msg { - Event::MsgToSubsystem(msg) => { - self.route_message(msg).await; - } - Event::Stop => { - self.stop().await; - return Ok(()); - } - Event::BlockImported(block) => { - self.block_imported(block).await?; - } - Event::BlockFinalized(block) => { - self.block_finalized(block).await?; - } - Event::ExternalRequest(request) => { - self.handle_external_request(request); - } - } - } - - while let Poll::Ready(Some((StreamYield::Item(msg), _))) = poll!( - &mut self.running_subsystems_rx.next() - ) { - match msg { - ToOverseer::SubsystemMessage(msg) => self.route_message(msg).await, - ToOverseer::SpawnJob { name, s } => { - self.spawn_job(name, s); + select! { + msg = self.events_rx.next().fuse() => { + let msg = if let Some(msg) = msg { + msg + } else { + continue + }; + + match msg { + Event::MsgToSubsystem(msg) => { + self.route_message(msg).await; + } + Event::Stop => { + self.stop().await; + return Ok(()); + } + Event::BlockImported(block) => { + self.block_imported(block).await?; + } + Event::BlockFinalized(block) => { + self.block_finalized(block).await?; + } + Event::ExternalRequest(request) => { + self.handle_external_request(request); + } } - ToOverseer::SpawnBlockingJob { name, s } => { - self.spawn_blocking_job(name, s); + }, + msg = self.running_subsystems_rx.next().fuse() => { + let msg = if let Some((StreamYield::Item(msg), _)) = msg { + msg + } else { + continue + }; + + match msg { + ToOverseer::SubsystemMessage(msg) => self.route_message(msg).await, + ToOverseer::SpawnJob { name, s } => { + self.spawn_job(name, s); + } + ToOverseer::SpawnBlockingJob { name, s } => { + self.spawn_blocking_job(name, s); + } } - } - } - - // Some subsystem exited? It's time to panic. - if let Poll::Ready(Some(finished)) = poll!(self.running_subsystems.next()) { - tracing::error!(target: LOG_TARGET, subsystem = ?finished, "subsystem finished unexpectedly"); - self.stop().await; - return finished; + }, + res = self.running_subsystems.next().fuse() => { + let finished = if let Some(finished) = res { + finished + } else { + continue + }; + + tracing::error!(target: LOG_TARGET, subsystem = ?finished, "subsystem finished unexpectedly"); + self.stop().await; + return finished; + }, } - - // Looks like nothing is left to be polled, let's take a break. - pending!(); } } @@ -1424,7 +1415,11 @@ where self.on_head_deactivated(deactivated) } - self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; + // Most of the time we have a leave already closed when it is finalized, so we check here if there are actually + // any updates before sending it to the subsystems. + if !update.is_empty() { + self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; + } self.broadcast_signal(OverseerSignal::BlockFinalized(block.hash)).await?; @@ -1433,65 +1428,21 @@ where #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn broadcast_signal(&mut self, signal: OverseerSignal) -> SubsystemResult<()> { - if let Some(ref mut s) = self.candidate_validation_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.candidate_backing_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.candidate_selection_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.statement_distribution_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.availability_distribution_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.bitfield_distribution_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.bitfield_signing_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.provisioner_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.pov_distribution_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.runtime_api_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.availability_store_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.network_bridge_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.chain_api_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.collator_protocol_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } - - if let Some(ref mut s) = self.collation_generation_subsystem.instance { - s.tx.send(FromOverseer::Signal(signal.clone())).await?; - } + self.candidate_validation_subsystem.send_signal(signal.clone()).await?; + self.candidate_backing_subsystem.send_signal(signal.clone()).await?; + self.candidate_selection_subsystem.send_signal(signal.clone()).await?; + self.statement_distribution_subsystem.send_signal(signal.clone()).await?; + self.availability_distribution_subsystem.send_signal(signal.clone()).await?; + self.bitfield_signing_subsystem.send_signal(signal.clone()).await?; + self.bitfield_distribution_subsystem.send_signal(signal.clone()).await?; + self.provisioner_subsystem.send_signal(signal.clone()).await?; + self.pov_distribution_subsystem.send_signal(signal.clone()).await?; + self.runtime_api_subsystem.send_signal(signal.clone()).await?; + self.availability_store_subsystem.send_signal(signal.clone()).await?; + self.network_bridge_subsystem.send_signal(signal.clone()).await?; + self.chain_api_subsystem.send_signal(signal.clone()).await?; + self.collator_protocol_subsystem.send_signal(signal.clone()).await?; + self.collation_generation_subsystem.send_signal(signal).await?; Ok(()) } @@ -1501,80 +1452,50 @@ where self.metrics.on_message_relayed(); match msg { AllMessages::CandidateValidation(msg) => { - if let Some(ref mut s) = self.candidate_validation_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.candidate_validation_subsystem.send_message(msg).await; + }, AllMessages::CandidateBacking(msg) => { - if let Some(ref mut s) = self.candidate_backing_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.candidate_backing_subsystem.send_message(msg).await; + }, AllMessages::CandidateSelection(msg) => { - if let Some(ref mut s) = self.candidate_selection_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.candidate_selection_subsystem.send_message(msg).await; + }, AllMessages::StatementDistribution(msg) => { - if let Some(ref mut s) = self.statement_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.statement_distribution_subsystem.send_message(msg).await; + }, AllMessages::AvailabilityDistribution(msg) => { - if let Some(ref mut s) = self.availability_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.availability_distribution_subsystem.send_message(msg).await; + }, AllMessages::BitfieldDistribution(msg) => { - if let Some(ref mut s) = self.bitfield_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.bitfield_distribution_subsystem.send_message(msg).await; + }, AllMessages::BitfieldSigning(msg) => { - if let Some(ref mut s) = self.bitfield_signing_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication{ msg }).await; - } - } + let _ = self.bitfield_signing_subsystem.send_message(msg).await; + }, AllMessages::Provisioner(msg) => { - if let Some(ref mut s) = self.provisioner_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.provisioner_subsystem.send_message(msg).await; + }, AllMessages::PoVDistribution(msg) => { - if let Some(ref mut s) = self.pov_distribution_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.pov_distribution_subsystem.send_message(msg).await; + }, AllMessages::RuntimeApi(msg) => { - if let Some(ref mut s) = self.runtime_api_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.runtime_api_subsystem.send_message(msg).await; + }, AllMessages::AvailabilityStore(msg) => { - if let Some(ref mut s) = self.availability_store_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.availability_store_subsystem.send_message(msg).await; + }, AllMessages::NetworkBridge(msg) => { - if let Some(ref mut s) = self.network_bridge_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.network_bridge_subsystem.send_message(msg).await; + }, AllMessages::ChainApi(msg) => { - if let Some(ref mut s) = self.chain_api_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.chain_api_subsystem.send_message(msg).await; + }, AllMessages::CollationGeneration(msg) => { - if let Some(ref mut s) = self.collation_generation_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.collation_generation_subsystem.send_message(msg).await; + }, AllMessages::CollatorProtocol(msg) => { - if let Some(ref mut s) = self.collator_protocol_subsystem.instance { - let _ = s.tx.send(FromOverseer::Communication { msg }).await; - } - } + let _ = self.collator_protocol_subsystem.send_message(msg).await; + }, } } @@ -1671,7 +1592,7 @@ fn spawn( mod tests { use std::sync::atomic; use std::collections::HashMap; - use futures::{executor, pin_mut, select, channel::mpsc, FutureExt}; + use futures::{executor, pin_mut, select, channel::mpsc, FutureExt, pending}; use polkadot_primitives::v1::{BlockData, CollatorPair, PoV, CandidateHash}; use polkadot_subsystem::messages::RuntimeApiRequest; diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index 57f62649f1..143c35d2c0 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -58,12 +58,17 @@ pub struct ActiveLeavesUpdate { impl ActiveLeavesUpdate { /// Create a ActiveLeavesUpdate with a single activated hash pub fn start_work(hash: Hash) -> Self { - Self { activated: [hash].as_ref().into(), ..Default::default() } + Self { activated: [hash][..].into(), ..Default::default() } } /// Create a ActiveLeavesUpdate with a single deactivated hash pub fn stop_work(hash: Hash) -> Self { - Self { deactivated: [hash].as_ref().into(), ..Default::default() } + Self { deactivated: [hash][..].into(), ..Default::default() } + } + + /// Is this update empty and doesn't contain any information? + pub fn is_empty(&self) -> bool { + self.activated.is_empty() && self.deactivated.is_empty() } } @@ -72,9 +77,9 @@ impl PartialEq for ActiveLeavesUpdate { /// /// Instead, it means equality when `activated` and `deactivated` are considered as sets. fn eq(&self, other: &Self) -> bool { - use std::collections::HashSet; - self.activated.iter().collect::>() == other.activated.iter().collect::>() && - self.deactivated.iter().collect::>() == other.deactivated.iter().collect::>() + self.activated.len() == other.activated.len() && self.deactivated.len() == other.deactivated.len() + && self.activated.iter().all(|a| other.activated.contains(a)) + && self.deactivated.iter().all(|a| other.deactivated.contains(a)) } } -- GitLab From 734eda87f61a171438e73e8c9ef971a4c7561c7c Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Thu, 26 Nov 2020 12:02:50 +0100 Subject: [PATCH 050/203] past-session validator discovery APIs (#2009) * guide: fix formatting for SessionInfo module * primitives: SessionInfo type * punt on approval keys * ah, revert the type alias * session info runtime module skeleton * update the guide * runtime/configuration: sync with the guide * runtime/configuration: setters for newly added fields * runtime/configuration: set codec indexes * runtime/configuration: update test * primitives: fix SessionInfo definition * runtime/session_info: initial impl * runtime/session_info: use initializer for session handling (wip) * runtime/session_info: mock authority discovery trait * guide: update the initializer's order * runtime/session_info: tests skeleton * runtime/session_info: store n_delay_tranches in Configuration * runtime/session_info: punt on approval keys * runtime/session_info: add some basic tests * Update primitives/src/v1.rs * small fixes * remove codec index annotation on structs * fix off-by-one error * validator_discovery: accept a session index * runtime: replace validator_discovery api with session_info * Update runtime/parachains/src/session_info.rs Co-authored-by: Sergei Shulepov * runtime/session_info: add a comment about missing entries * runtime/session_info: define the keys * util: expose connect_to_past_session_validators * util: allow session_info requests for jobs * runtime-api: add mock test for session_info * collator-protocol: add session_index to test state * util: fix error message for runtime error * fix compilation * fix tests after merge with master Co-authored-by: Sergei Shulepov --- node/core/runtime-api/src/lib.rs | 42 ++- .../collator-protocol/src/collator_side.rs | 50 ++-- node/network/collator-protocol/src/lib.rs | 10 - node/network/pov-distribution/src/error.rs | 2 - node/network/pov-distribution/src/tests.rs | 143 +++++----- node/subsystem-util/src/lib.rs | 3 + .../subsystem-util/src/validator_discovery.rs | 69 +++-- node/subsystem/src/messages.rs | 12 +- primitives/src/v1.rs | 68 ++++- .../src/runtime/initializer.md | 2 +- .../src/runtime/session_info.md | 7 +- .../src/types/overseer-protocol.md | 27 +- .../implementers-guide/src/types/runtime.md | 5 + runtime/common/src/paras_registrar.rs | 12 +- runtime/kusama/src/lib.rs | 10 +- runtime/parachains/src/configuration.rs | 104 ++++++- runtime/parachains/src/initializer.rs | 7 +- runtime/parachains/src/lib.rs | 1 + runtime/parachains/src/mock.rs | 13 +- runtime/parachains/src/runtime_api_impl/v1.rs | 29 +- runtime/parachains/src/session_info.rs | 256 ++++++++++++++++++ runtime/polkadot/src/lib.rs | 10 +- runtime/rococo/src/lib.rs | 10 +- runtime/test-runtime/src/lib.rs | 9 +- runtime/westend/src/lib.rs | 10 +- 25 files changed, 697 insertions(+), 214 deletions(-) create mode 100644 runtime/parachains/src/session_info.rs diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index 4dec90b33c..f9e40a40ac 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -134,7 +134,7 @@ fn make_runtime_api_request( Request::CandidatePendingAvailability(para, sender) => query!(candidate_pending_availability(para), sender), Request::CandidateEvents(sender) => query!(candidate_events(), sender), - Request::ValidatorDiscovery(ids, sender) => query!(validator_discovery(ids), sender), + Request::SessionInfo(index, sender) => query!(session_info(index), sender), Request::DmqContents(id, sender) => query!(dmq_contents(id), sender), Request::InboundHrmpChannelsContents(id, sender) => query!(inbound_hrmp_channels_contents(id), sender), } @@ -201,8 +201,8 @@ mod tests { use polkadot_primitives::v1::{ ValidatorId, ValidatorIndex, GroupRotationInfo, CoreState, PersistedValidationData, Id as ParaId, OccupiedCoreAssumption, ValidationData, SessionIndex, ValidationCode, - CommittedCandidateReceipt, CandidateEvent, AuthorityDiscoveryId, InboundDownwardMessage, - BlockNumber, InboundHrmpMessage, + CommittedCandidateReceipt, CandidateEvent, InboundDownwardMessage, + BlockNumber, InboundHrmpMessage, SessionInfo, }; use polkadot_node_subsystem_test_helpers as test_helpers; use sp_core::testing::TaskExecutor; @@ -216,6 +216,7 @@ mod tests { availability_cores: Vec, validation_data: HashMap, session_index_for_child: SessionIndex, + session_info: HashMap, validation_code: HashMap, historical_validation_code: HashMap>, validation_outputs_results: HashMap, @@ -289,6 +290,10 @@ mod tests { self.session_index_for_child.clone() } + fn session_info(&self, index: SessionIndex) -> Option { + self.session_info.get(&index).cloned() + } + fn validation_code( &self, para: ParaId, @@ -321,10 +326,6 @@ mod tests { self.candidate_events.clone() } - fn validator_discovery(ids: Vec) -> Vec> { - vec![None; ids.len()] - } - fn dmq_contents( &self, recipient: ParaId, @@ -569,6 +570,33 @@ mod tests { futures::executor::block_on(future::join(subsystem_task, test_task)); } + #[test] + fn requests_session_info() { + let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); + let mut runtime_api = MockRuntimeApi::default(); + let session_index = 1; + runtime_api.session_info.insert(session_index, Default::default()); + let runtime_api = Arc::new(runtime_api); + + let relay_parent = [1; 32].into(); + + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); + let test_task = async move { + let (tx, rx) = oneshot::channel(); + + ctx_handle.send(FromOverseer::Communication { + msg: RuntimeApiMessage::Request(relay_parent, Request::SessionInfo(session_index, tx)) + }).await; + + assert_eq!(rx.await.unwrap().unwrap(), Some(Default::default())); + + ctx_handle.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; + }; + + futures::executor::block_on(future::join(subsystem_task, test_task)); + } + #[test] fn requests_validation_code() { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index b0a61c66a9..1017b55c28 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -738,6 +738,7 @@ mod tests { use polkadot_primitives::v1::{ BlockData, CandidateDescriptor, CollatorPair, ScheduledCore, ValidatorIndex, GroupRotationInfo, AuthorityDiscoveryId, + SessionIndex, SessionInfo, }; use polkadot_subsystem::{ActiveLeavesUpdate, messages::{RuntimeApiMessage, RuntimeApiRequest}}; use polkadot_node_subsystem_util::TimeoutExt; @@ -776,6 +777,7 @@ mod tests { relay_parent: Hash, availability_core: CoreState, our_collator_pair: CollatorPair, + session_index: SessionIndex, } fn validator_pubkeys(val_ids: &[Sr25519Keyring]) -> Vec { @@ -832,6 +834,7 @@ mod tests { relay_parent, availability_core, our_collator_pair, + session_index: 1, } } } @@ -841,6 +844,10 @@ mod tests { &self.validator_groups.0[0] } + fn current_session_index(&self) -> SessionIndex { + self.session_index + } + fn current_group_validator_peer_ids(&self) -> Vec { self.current_group_validator_indices().iter().map(|i| self.validator_peer_id[*i as usize].clone()).collect() } @@ -870,20 +877,6 @@ mod tests { .collect() } - fn next_group_validator_ids(&self) -> Vec { - self.next_group_validator_indices() - .iter() - .map(|i| self.validator_public[*i as usize].clone()) - .collect() - } - - /// Returns the unique count of validators in the current and next group. - fn current_and_next_group_unique_validator_count(&self) -> usize { - let mut indices = self.next_group_validator_indices().iter().collect::>(); - indices.extend(self.current_group_validator_indices()); - indices.len() - } - /// Generate a new relay parent and inform the subsystem about the new view. /// /// If `merge_views == true` it means the subsystem will be informed that we working on the old `relay_parent` @@ -1090,20 +1083,33 @@ mod tests { overseer_recv(virtual_overseer).await, AllMessages::RuntimeApi(RuntimeApiMessage::Request( relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators, tx), + RuntimeApiRequest::SessionIndexForChild(tx), )) => { assert_eq!(relay_parent, test_state.relay_parent); - assert_eq!(validators.len(), test_state.current_and_next_group_unique_validator_count()); + tx.send(Ok(test_state.current_session_index())).unwrap(); + } + ); - let current_validators = test_state.current_group_validator_ids(); - let next_validators = test_state.next_group_validator_ids(); + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::SessionInfo(index, tx), + )) => { + assert_eq!(relay_parent, test_state.relay_parent); + assert_eq!(index, test_state.current_session_index()); - assert!(validators.iter().all(|v| current_validators.contains(&v) || next_validators.contains(&v))); + let validators = test_state.current_group_validator_ids(); + let current_discovery_keys = test_state.current_group_validator_authority_ids(); + let next_discovery_keys = test_state.next_group_validator_authority_ids(); - let current_validators = test_state.current_group_validator_authority_ids(); - let next_validators = test_state.next_group_validator_authority_ids(); + let discovery_keys = [¤t_discovery_keys[..], &next_discovery_keys[..]].concat(); - tx.send(Ok(current_validators.into_iter().chain(next_validators).map(Some).collect())).unwrap(); + tx.send(Ok(Some(SessionInfo { + validators, + discovery_keys, + ..Default::default() + }))).unwrap(); } ); diff --git a/node/network/collator-protocol/src/lib.rs b/node/network/collator-protocol/src/lib.rs index 3b58d9b96b..ba1147fef9 100644 --- a/node/network/collator-protocol/src/lib.rs +++ b/node/network/collator-protocol/src/lib.rs @@ -60,16 +60,6 @@ enum Error { Prometheus(#[from] prometheus::PrometheusError), } -impl From for Error { - fn from(me: util::validator_discovery::Error) -> Self { - match me { - util::validator_discovery::Error::Subsystem(s) => Error::Subsystem(s), - util::validator_discovery::Error::RuntimeApi(ra) => Error::RuntimeApi(ra), - util::validator_discovery::Error::Oneshot(c) => Error::Oneshot(c), - } - } -} - type Result = std::result::Result; /// What side of the collator protocol is being engaged diff --git a/node/network/pov-distribution/src/error.rs b/node/network/pov-distribution/src/error.rs index 625ea4c7fd..754c1e56c5 100644 --- a/node/network/pov-distribution/src/error.rs +++ b/node/network/pov-distribution/src/error.rs @@ -27,8 +27,6 @@ pub enum Error { #[error(transparent)] Runtime(#[from] polkadot_subsystem::errors::RuntimeApiError), #[error(transparent)] - ValidatorDiscovery(#[from] polkadot_node_subsystem_util::validator_discovery::Error), - #[error(transparent)] Util(#[from] polkadot_node_subsystem_util::Error), } diff --git a/node/network/pov-distribution/src/tests.rs b/node/network/pov-distribution/src/tests.rs index 7c7859b869..a6358bedfd 100644 --- a/node/network/pov-distribution/src/tests.rs +++ b/node/network/pov-distribution/src/tests.rs @@ -11,7 +11,7 @@ use sp_keyring::Sr25519Keyring; use polkadot_primitives::v1::{ AuthorityDiscoveryId, BlockData, CoreState, GroupRotationInfo, Id as ParaId, - ScheduledCore, ValidatorIndex, + ScheduledCore, ValidatorIndex, SessionIndex, SessionInfo, }; use polkadot_subsystem::messages::{RuntimeApiMessage, RuntimeApiRequest}; use polkadot_node_subsystem_test_helpers as test_helpers; @@ -37,8 +37,10 @@ fn validator_authority_id(val_ids: &[Sr25519Keyring]) -> Vec; + struct TestHarness { - virtual_overseer: test_helpers::TestSubsystemContextHandle, + virtual_overseer: VirtualOverseer, } fn test_harness>( @@ -75,7 +77,7 @@ fn test_harness>( const TIMEOUT: Duration = Duration::from_millis(100); async fn overseer_send( - overseer: &mut test_helpers::TestSubsystemContextHandle, + overseer: &mut VirtualOverseer, msg: PoVDistributionMessage, ) { trace!("Sending message:\n{:?}", &msg); @@ -87,7 +89,7 @@ async fn overseer_send( } async fn overseer_recv( - overseer: &mut test_helpers::TestSubsystemContextHandle, + overseer: &mut VirtualOverseer, ) -> AllMessages { let msg = overseer_recv_with_timeout(overseer, TIMEOUT) .await @@ -99,7 +101,7 @@ async fn overseer_recv( } async fn overseer_recv_with_timeout( - overseer: &mut test_helpers::TestSubsystemContextHandle, + overseer: &mut VirtualOverseer, timeout: Duration, ) -> Option { trace!("Waiting for message..."); @@ -110,7 +112,7 @@ async fn overseer_recv_with_timeout( } async fn overseer_signal( - overseer: &mut test_helpers::TestSubsystemContextHandle, + overseer: &mut VirtualOverseer, signal: OverseerSignal, ) { overseer @@ -130,6 +132,7 @@ struct TestState { validator_groups: (Vec>, GroupRotationInfo), relay_parent: Hash, availability_cores: Vec, + session_index: SessionIndex, } impl Default for TestState { @@ -184,10 +187,56 @@ impl Default for TestState { validator_groups, relay_parent, availability_cores, + session_index: 1, } } } +async fn test_validator_discovery( + virtual_overseer: &mut VirtualOverseer, + expected_relay_parent: Hash, + session_index: SessionIndex, + validator_ids: &[ValidatorId], + discovery_ids: &[AuthorityDiscoveryId], + validator_group: &[ValidatorIndex], +) { + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::SessionIndexForChild(tx), + )) => { + assert_eq!(relay_parent, expected_relay_parent); + tx.send(Ok(session_index)).unwrap(); + } + ); + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::SessionInfo(index, tx), + )) => { + assert_eq!(relay_parent, expected_relay_parent); + assert_eq!(index, session_index); + + let validators = validator_group.iter() + .map(|idx| validator_ids[*idx as usize].clone()) + .collect(); + + let discovery_keys = validator_group.iter() + .map(|idx| discovery_ids[*idx as usize].clone()) + .collect(); + + tx.send(Ok(Some(SessionInfo { + validators, + discovery_keys, + ..Default::default() + }))).unwrap(); + } + ); +} + #[test] fn ask_validators_for_povs() { let test_state = TestState::default(); @@ -271,25 +320,14 @@ fn ask_validators_for_povs() { } ); - // obtain the validator_id to authority_id mapping - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators, tx), - )) => { - assert_eq!(relay_parent, current); - assert_eq!(validators.len(), 3); - assert!(validators.iter().all(|v| test_state.validator_public.contains(&v))); - - let result = vec![ - Some(test_state.validator_authority_id[2].clone()), - Some(test_state.validator_authority_id[0].clone()), - Some(test_state.validator_authority_id[4].clone()), - ]; - tx.send(Ok(result)).unwrap(); - } - ); + test_validator_discovery( + &mut virtual_overseer, + current, + test_state.session_index, + &test_state.validator_public, + &test_state.validator_authority_id, + &test_state.validator_groups.0[0], + ).await; // We now should connect to our validator group. assert_matches!( @@ -448,24 +486,14 @@ fn ask_validators_for_povs() { ); // obtain the validator_id to authority_id mapping - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators, tx), - )) => { - assert_eq!(relay_parent, next_leaf); - assert_eq!(validators.len(), 3); - assert!(validators.iter().all(|v| test_state.validator_public.contains(&v))); - - let result = vec![ - Some(test_state.validator_authority_id[2].clone()), - Some(test_state.validator_authority_id[0].clone()), - Some(test_state.validator_authority_id[4].clone()), - ]; - tx.send(Ok(result)).unwrap(); - } - ); + test_validator_discovery( + &mut virtual_overseer, + next_leaf, + test_state.session_index, + &test_state.validator_public, + &test_state.validator_authority_id, + &test_state.validator_groups.0[0], + ).await; // We now should connect to our validator group. assert_matches!( @@ -716,7 +744,7 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { RuntimeApiRequest::ValidatorGroups(tx) )) => { assert_eq!(relay_parent, hash_a); - tx.send(Ok(validator_groups)).unwrap(); + tx.send(Ok(validator_groups.clone())).unwrap(); } ); @@ -731,25 +759,14 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { } ); - assert_matches!( - handle.recv().await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators_res, tx), - )) => { - assert_eq!(relay_parent, hash_a); - assert_eq!(validators_res.len(), 3); - assert!(validators_res.iter().all(|v| validators.contains(&v))); - - let result = vec![ - Some(validator_authority_id[2].clone()), - Some(validator_authority_id[0].clone()), - Some(validator_authority_id[4].clone()), - ]; - - tx.send(Ok(result)).unwrap(); - } - ); + test_validator_discovery( + &mut handle, + hash_a, + 1, + &validators, + &validator_authority_id, + &validator_groups.0[0], + ).await; assert_matches!( handle.recv().await, diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 750939a57a..e8794e090d 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -37,6 +37,7 @@ use polkadot_primitives::v1::{ CandidateEvent, CommittedCandidateReceipt, CoreState, EncodeAs, PersistedValidationData, GroupRotationInfo, Hash, Id as ParaId, ValidationData, OccupiedCoreAssumption, SessionIndex, Signed, SigningContext, ValidationCode, ValidatorId, ValidatorIndex, + SessionInfo, }; use sp_core::{ traits::SpawnNamed, @@ -193,6 +194,7 @@ specialize_requests! { fn request_validation_code(para_id: ParaId, assumption: OccupiedCoreAssumption) -> Option; ValidationCode; fn request_candidate_pending_availability(para_id: ParaId) -> Option; CandidatePendingAvailability; fn request_candidate_events() -> Vec; CandidateEvents; + fn request_session_info(index: SessionIndex) -> Option; SessionInfo; } /// Request some data from the `RuntimeApi` via a SubsystemContext. @@ -274,6 +276,7 @@ specialize_requests_ctx! { fn request_validation_code_ctx(para_id: ParaId, assumption: OccupiedCoreAssumption) -> Option; ValidationCode; fn request_candidate_pending_availability_ctx(para_id: ParaId) -> Option; CandidatePendingAvailability; fn request_candidate_events_ctx() -> Vec; CandidateEvents; + fn request_session_info_ctx(index: SessionIndex) -> Option; SessionInfo; } /// From the given set of validators, find the first key we can sign with, if any. diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index 357041d96b..762b800253 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -20,34 +20,20 @@ use std::collections::HashMap; use std::pin::Pin; use futures::{ - channel::{mpsc, oneshot}, + channel::mpsc, task::{Poll, self}, stream, }; use streamunordered::{StreamUnordered, StreamYield}; -use thiserror::Error; use polkadot_node_subsystem::{ - errors::RuntimeApiError, SubsystemError, - messages::{AllMessages, RuntimeApiMessage, RuntimeApiRequest, NetworkBridgeMessage}, + errors::RuntimeApiError, + messages::{AllMessages, NetworkBridgeMessage}, SubsystemContext, }; -use polkadot_primitives::v1::{Hash, ValidatorId, AuthorityDiscoveryId}; +use polkadot_primitives::v1::{Hash, ValidatorId, AuthorityDiscoveryId, SessionIndex}; use sc_network::PeerId; - -/// Error when making a request to connect to validators. -#[derive(Debug, Error)] -pub enum Error { - /// Attempted to send or receive on a oneshot channel which had been canceled - #[error(transparent)] - Oneshot(#[from] oneshot::Canceled), - /// A subsystem error. - #[error(transparent)] - Subsystem(#[from] SubsystemError), - /// An error in the Runtime API. - #[error(transparent)] - RuntimeApi(#[from] RuntimeApiError), -} +use crate::Error; /// Utility function to make it easier to connect to validators. pub async fn connect_to_validators( @@ -55,17 +41,42 @@ pub async fn connect_to_validators( relay_parent: Hash, validators: Vec, ) -> Result { - // ValidatorId -> AuthorityDiscoveryId - let (tx, rx) = oneshot::channel(); - - ctx.send_message(AllMessages::RuntimeApi( - RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::ValidatorDiscovery(validators.clone(), tx), - ) - )).await; + let current_index = crate::request_session_index_for_child_ctx(relay_parent, ctx).await?.await??; + connect_to_past_session_validators(ctx, relay_parent, validators, current_index).await +} + +/// Utility function to make it easier to connect to validators in the past sessions. +pub async fn connect_to_past_session_validators( + ctx: &mut Context, + relay_parent: Hash, + validators: Vec, + session_index: SessionIndex, +) -> Result { + let session_info = crate::request_session_info_ctx( + relay_parent, + session_index, + ctx, + ).await?.await??; + + let (session_validators, discovery_keys) = match session_info { + Some(info) => (info.validators, info.discovery_keys), + None => return Err(RuntimeApiError::from( + format!("No SessionInfo found for the index {}", session_index) + ).into()), + }; + + let id_to_index = session_validators.iter() + .zip(0usize..) + .collect::>(); + + // We assume the same ordering in authorities as in validators so we can do an index search + let maybe_authorities: Vec<_> = validators.iter() + .map(|id| { + let validator_index = id_to_index.get(&id); + validator_index.and_then(|i| discovery_keys.get(*i).cloned()) + }) + .collect(); - let maybe_authorities = rx.await??; let authorities: Vec<_> = maybe_authorities.iter() .cloned() .filter_map(|id| id) diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index 87d2981b54..979364b13c 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -31,7 +31,7 @@ use polkadot_node_primitives::{ CollationGenerationConfig, MisbehaviorReport, SignedFullStatement, ValidationResult, }; use polkadot_primitives::v1::{ - AuthorityDiscoveryId, AvailableData, BackedCandidate, BlockNumber, + AuthorityDiscoveryId, AvailableData, BackedCandidate, BlockNumber, SessionInfo, Header as BlockHeader, CandidateDescriptor, CandidateEvent, CandidateReceipt, CollatorId, CommittedCandidateReceipt, CoreState, ErasureChunk, GroupRotationInfo, Hash, Id as ParaId, OccupiedCoreAssumption, @@ -434,14 +434,8 @@ pub enum RuntimeApiRequest { /// Get all events concerning candidates (backing, inclusion, time-out) in the parent of /// the block in whose state this request is executed. CandidateEvents(RuntimeApiSender>), - /// Get the `AuthorityDiscoveryId`s corresponding to the given `ValidatorId`s. - /// Currently this request is limited to validators in the current session. - /// - /// Returns `None` for validators not found in the current session. - ValidatorDiscovery( - Vec, - RuntimeApiSender>>, - ), + /// Get the session info for the given session, if stored. + SessionInfo(SessionIndex, RuntimeApiSender>), /// Get all the pending inbound messages in the downward message queue for a para. DmqContents( ParaId, diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 492be95ba3..9644c65ffc 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -25,6 +25,7 @@ use primitives::RuntimeDebug; use runtime_primitives::traits::AppVerify; use inherents::InherentIdentifier; use sp_arithmetic::traits::{BaseArithmetic, Saturating, Zero}; +use application_crypto::KeyTypeId; pub use runtime_primitives::traits::{BlakeTwo256, Hash as HashT}; @@ -57,6 +58,34 @@ pub use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; /// Unique identifier for the Inclusion Inherent pub const INCLUSION_INHERENT_IDENTIFIER: InherentIdentifier = *b"inclusn0"; + +/// The key type ID for a parachain approval voting key. +pub const APPROVAL_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"aprv"); + +mod approval_app { + use application_crypto::{app_crypto, sr25519}; + app_crypto!(sr25519, super::APPROVAL_KEY_TYPE_ID); +} + +/// The public key of a keypair used by a validator for approval voting +/// on included parachain candidates. +pub type ApprovalId = approval_app::Public; + +/// The key type ID for parachain assignment key. +pub const ASSIGNMENT_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"asgn"); + +// The public key of a keypair used by a validator for determining assignments +/// to approve included parachain candidates. +mod assigment_app { + use application_crypto::{app_crypto, sr25519}; + app_crypto!(sr25519, super::ASSIGNMENT_KEY_TYPE_ID); +} + +/// The public key of a keypair used by a validator for determining assignments +/// to approve included parachain candidates. +pub type AssignmentId = assigment_app::Public; + + /// Get a collator signature payload on a relay-parent, block-data combo. pub fn collator_signature_payload>( relay_parent: &H, @@ -671,6 +700,35 @@ pub enum CandidateEvent { CandidateTimedOut(CandidateReceipt, HeadData), } +/// Information about validator sets of a session. +#[derive(Clone, Encode, Decode, RuntimeDebug)] +#[cfg_attr(feature = "std", derive(PartialEq, Default))] +pub struct SessionInfo { + /// Validators in canonical ordering. + pub validators: Vec, + /// Validators' authority discovery keys for the session in canonical ordering. + pub discovery_keys: Vec, + /// The assignment and approval keys for validators. + pub approval_keys: Vec<(ApprovalId, AssignmentId)>, + /// Validators in shuffled ordering - these are the validator groups as produced + /// by the `Scheduler` module for the session and are typically referred to by + /// `GroupIndex`. + pub validator_groups: Vec>, + /// The number of availability cores used by the protocol during this session. + pub n_cores: u32, + /// The zeroth delay tranche width. + pub zeroth_delay_tranche_width: u32, + /// The number of samples we do of relay_vrf_modulo. + pub relay_vrf_modulo_samples: u32, + /// The number of delay tranches in total. + pub n_delay_tranches: u32, + /// How many slots (BABE / SASSAFRAS) must pass before an assignment is considered a + /// no-show. + pub no_show_slots: u32, + /// The number of validators needed to approve a block. + pub needed_approvals: u32, +} + sp_api::decl_runtime_apis! { /// The API for querying the state of parachains on-chain. pub trait ParachainHost { @@ -710,6 +768,9 @@ sp_api::decl_runtime_apis! { /// This can be used to instantiate a `SigningContext`. fn session_index_for_child() -> SessionIndex; + /// Get the session info for the given session, if stored. + fn session_info(index: SessionIndex) -> Option; + /// Fetch the validation code used by a para, making the given `OccupiedCoreAssumption`. /// /// Returns `None` if either the para is not registered or the assumption is `Freed` @@ -735,13 +796,6 @@ sp_api::decl_runtime_apis! { #[skip_initialize_block] fn candidate_events() -> Vec>; - /// Get the `AuthorityDiscoveryId`s corresponding to the given `ValidatorId`s. - /// Currently this request is limited to validators in the current session. - /// - /// We assume that every validator runs authority discovery, - /// which would allow us to establish point-to-point connection to given validators. - fn validator_discovery(validators: Vec) -> Vec>; - /// Get all the pending inbound messages in the downward message queue for a para. fn dmq_contents( recipient: Id, diff --git a/roadmap/implementers-guide/src/runtime/initializer.md b/roadmap/implementers-guide/src/runtime/initializer.md index fd7324b219..361fab38c8 100644 --- a/roadmap/implementers-guide/src/runtime/initializer.md +++ b/roadmap/implementers-guide/src/runtime/initializer.md @@ -23,7 +23,7 @@ The other parachains modules are initialized in this order: 1. Paras 1. Scheduler 1. Inclusion -1. Validity +1. SessionInfo 1. DMP 1. UMP 1. HRMP diff --git a/roadmap/implementers-guide/src/runtime/session_info.md b/roadmap/implementers-guide/src/runtime/session_info.md index 697e79fab5..ac2ad926dd 100644 --- a/roadmap/implementers-guide/src/runtime/session_info.md +++ b/roadmap/implementers-guide/src/runtime/session_info.md @@ -30,11 +30,11 @@ struct SessionInfo { // no-show. no_show_slots: u32, /// The number of validators needed to approve a block. - needed_approvals: u32, + needed_approvals: u32, } ``` -Storage Layout: +Storage Layout: ```rust /// The earliest session for which previous session info is stored. @@ -45,11 +45,10 @@ Sessions: map SessionIndex => Option, ## Session Change -1. Update the `CurrentSessionIndex`. 1. Update `EarliestStoredSession` based on `config.dispute_period` and remove all entries from `Sessions` from the previous value up to the new value. 1. Create a new entry in `Sessions` with information about the current session. ## Routines * `earliest_stored_session() -> SessionIndex`: Yields the earliest session for which we have information stored. -* `session_info(session: SessionIndex) -> Option`: Yields the session info for the given session, if stored. \ No newline at end of file +* `session_info(session: SessionIndex) -> Option`: Yields the session info for the given session, if stored. diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index daebbab34a..942d597533 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -424,14 +424,8 @@ enum RuntimeApiRequest { Validators(ResponseChannel>), /// Get the validator groups and rotation info. ValidatorGroups(ResponseChannel<(Vec>, GroupRotationInfo)>), - /// Get the session index for children of the block. This can be used to construct a signing - /// context. - SessionIndex(ResponseChannel), - /// Get the validation code for a specific para, using the given occupied core assumption. - ValidationCode(ParaId, OccupiedCoreAssumption, ResponseChannel>), - /// Fetch the historical validation code used by a para for candidates executed in - /// the context of a given block height in the current chain. - HistoricalValidationCode(ParaId, BlockNumber, ResponseChannel>), + /// Get information about all availability cores. + AvailabilityCores(ResponseChannel>), /// with the given occupied core assumption. PersistedValidationData( ParaId, @@ -450,12 +444,25 @@ enum RuntimeApiRequest { CandidateCommitments, RuntimeApiSender, ), - /// Get information about all availability cores. - AvailabilityCores(ResponseChannel>), + /// Get the session index for children of the block. This can be used to construct a signing + /// context. + SessionIndexForChild(ResponseChannel), + /// Get the validation code for a specific para, using the given occupied core assumption. + ValidationCode(ParaId, OccupiedCoreAssumption, ResponseChannel>), + /// Fetch the historical validation code used by a para for candidates executed in + /// the context of a given block height in the current chain. + HistoricalValidationCode(ParaId, BlockNumber, ResponseChannel>), /// Get a committed candidate receipt for all candidates pending availability. CandidatePendingAvailability(ParaId, ResponseChannel>), /// Get all events concerning candidates in the last block. CandidateEvents(ResponseChannel>), + /// Get the session info for the given session, if stored. + SessionInfo(SessionIndex, ResponseChannel>), + /// Get all the pending inbound messages in the downward message queue for a para. + DmqContents(ParaId, ResponseChannel>>), + /// Get the contents of all channels addressed to the given recipient. Channels that have no + /// messages in them are also included. + InboundHrmpChannelsContents(ParaId, ResponseChannel>>>), } enum RuntimeApiMessage { diff --git a/roadmap/implementers-guide/src/types/runtime.md b/roadmap/implementers-guide/src/types/runtime.md index 70c7237e1c..7900a6edab 100644 --- a/roadmap/implementers-guide/src/types/runtime.md +++ b/roadmap/implementers-guide/src/types/runtime.md @@ -12,6 +12,9 @@ struct HostConfiguration { pub validation_upgrade_frequency: BlockNumber, /// The delay, in blocks, before a validation upgrade is applied. pub validation_upgrade_delay: BlockNumber, + /// The acceptance period, in blocks. This is the amount of blocks after availability that validators + /// and fishermen have to perform secondary checks or issue reports. + pub acceptance_period: BlockNumber, /// The maximum validation code size, in bytes. pub max_code_size: u32, /// The maximum head-data size, in bytes. @@ -37,6 +40,8 @@ struct HostConfiguration { /// submitting an approval vote before a validator is considered a no-show. /// Must be at least 1. pub no_show_slots: u32, + /// The number of delay tranches in total. + pub n_delay_tranches: u32, /// The width of the zeroth delay tranche for approval assignments. This many delay tranches /// beyond 0 are all consolidated to form a wide 0 tranche. pub zeroth_delay_tranche_width: u32, diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index 474402d61f..8427bc3f4a 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -262,14 +262,14 @@ mod tests { }, testing::{UintAuthorityId, TestXt}, Perbill, curve::PiecewiseLinear, }; use primitives::v1::{ - Balance, BlockNumber, Header, Signature, + Balance, BlockNumber, Header, Signature, AuthorityDiscoveryId, }; use frame_support::{ traits::{Randomness, OnInitialize, OnFinalize}, impl_outer_origin, impl_outer_dispatch, assert_ok, parameter_types, }; use keyring::Sr25519Keyring; - use runtime_parachains::{initializer, configuration, inclusion, scheduler, dmp, ump, hrmp}; + use runtime_parachains::{initializer, configuration, inclusion, session_info, scheduler, dmp, ump, hrmp}; use pallet_session::OneSessionHandler; impl_outer_origin! { @@ -477,6 +477,14 @@ mod tests { type Event = (); } + impl session_info::AuthorityDiscoveryTrait for Test { + fn authorities() -> Vec { + Vec::new() + } + } + + impl session_info::Trait for Test { } + pub struct TestRandomness; impl Randomness for TestRandomness { diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index c30bf59a6a..0aa1a4cadb 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -29,7 +29,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, }; use runtime_common::{ claims, SlowAdjustingFeeUpdate, CurrencyToVote, @@ -1092,6 +1092,10 @@ sp_api::impl_runtime_apis! { 0 } + fn session_info(_: SessionIndex) -> Option { + None + } + fn validation_code(_: Id, _: OccupiedCoreAssumption) -> Option { None } @@ -1108,10 +1112,6 @@ sp_api::impl_runtime_apis! { Vec::new() } - fn validator_discovery(_: Vec) -> Vec> { - Vec::new() - } - fn dmq_contents( _recipient: Id, ) -> Vec> { diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 98cb403c9a..96ab3dd88a 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -19,9 +19,10 @@ //! Configuration can change only at session boundaries and is buffered until then. use sp_std::prelude::*; -use primitives::v1::{Balance, ValidatorId}; +use primitives::v1::{Balance, ValidatorId, SessionIndex}; use frame_support::{ decl_storage, decl_module, decl_error, + ensure, dispatch::DispatchResult, weights::{DispatchClass, Weight}, }; @@ -60,6 +61,21 @@ pub struct HostConfiguration { pub thread_availability_period: BlockNumber, /// The amount of blocks ahead to schedule parachains and parathreads. pub scheduling_lookahead: u32, + /// The amount of sessions to keep for disputes. + pub dispute_period: SessionIndex, + /// The amount of consensus slots that must pass between submitting an assignment and + /// submitting an approval vote before a validator is considered a no-show. + /// Must be at least 1. + pub no_show_slots: u32, + /// The number of delay tranches in total. + pub n_delay_tranches: u32, + /// The width of the zeroth delay tranche for approval assignments. This many delay tranches + /// beyond 0 are all consolidated to form a wide 0 tranche. + pub zeroth_delay_tranche_width: u32, + /// The number of validators needed to approve a block. + pub needed_approvals: u32, + /// The number of samples to do of the RelayVRFModulo approval assignment criterion. + pub relay_vrf_modulo_samples: u32, /// Total number of individual messages allowed in the parachain -> relay-chain message queue. pub max_upward_queue_count: u32, /// Total size of messages allowed in the parachain -> relay-chain message queue before which @@ -255,6 +271,68 @@ decl_module! { Ok(()) } + /// Set the dispute period, in number of sessions to keep for disputes. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_dispute_period(origin, new: SessionIndex) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.dispute_period, new) != new + }); + Ok(()) + } + + /// Set the no show slots, in number of number of consensus slots. + /// Must be at least 1. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_no_show_slots(origin, new: u32) -> DispatchResult { + ensure_root(origin)?; + ensure!(new >= 1, "no_show_slots must be at least 1"); + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.no_show_slots, new) != new + }); + Ok(()) + } + + /// Set the total number of delay tranches. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_n_delay_tranches(origin, new: u32) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.n_delay_tranches, new) != new + }); + Ok(()) + } + + /// Set the zeroth delay tranche width. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_zeroth_delay_tranche_width(origin, new: u32) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.zeroth_delay_tranche_width, new) != new + }); + Ok(()) + } + + /// Set the number of validators needed to approve a block. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_needed_approvals(origin, new: u32) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.needed_approvals, new) != new + }); + Ok(()) + } + + /// Set the number of samples to do of the RelayVRFModulo approval assignment criterion. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_relay_vrf_modulo_samples(origin, new: u32) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.relay_vrf_modulo_samples, new) != new + }); + Ok(()) + } + /// Sets the maximum items that can present in a upward dispatch queue at once. #[weight = (1_000, DispatchClass::Operational)] pub fn set_max_upward_queue_count(origin, new: u32) -> DispatchResult { @@ -504,6 +582,12 @@ mod tests { chain_availability_period: 10, thread_availability_period: 8, scheduling_lookahead: 3, + dispute_period: 239, + no_show_slots: 240, + n_delay_tranches: 241, + zeroth_delay_tranche_width: 242, + needed_approvals: 242, + relay_vrf_modulo_samples: 243, max_upward_queue_count: 1337, max_upward_queue_size: 228, max_downward_message_size: 2048, @@ -561,6 +645,24 @@ mod tests { Configuration::set_scheduling_lookahead( Origin::root(), new_config.scheduling_lookahead, ).unwrap(); + Configuration::set_dispute_period( + Origin::root(), new_config.dispute_period, + ).unwrap(); + Configuration::set_no_show_slots( + Origin::root(), new_config.no_show_slots, + ).unwrap(); + Configuration::set_n_delay_tranches( + Origin::root(), new_config.n_delay_tranches, + ).unwrap(); + Configuration::set_zeroth_delay_tranche_width( + Origin::root(), new_config.zeroth_delay_tranche_width, + ).unwrap(); + Configuration::set_needed_approvals( + Origin::root(), new_config.needed_approvals, + ).unwrap(); + Configuration::set_relay_vrf_modulo_samples( + Origin::root(), new_config.relay_vrf_modulo_samples, + ).unwrap(); Configuration::set_max_upward_queue_count( Origin::root(), new_config.max_upward_queue_count, ).unwrap(); diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index ea9348d79f..7ab41e4633 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -29,7 +29,7 @@ use sp_runtime::traits::One; use parity_scale_codec::{Encode, Decode}; use crate::{ configuration::{self, HostConfiguration}, - paras, scheduler, inclusion, dmp, ump, hrmp, + paras, scheduler, inclusion, session_info, dmp, ump, hrmp, }; /// Information about a session change that has just occurred. @@ -63,6 +63,7 @@ pub trait Trait: + paras::Trait + scheduler::Trait + inclusion::Trait + + session_info::Trait + dmp::Trait + ump::Trait + hrmp::Trait @@ -123,6 +124,7 @@ decl_module! { // - Paras // - Scheduler // - Inclusion + // - SessionInfo // - Validity // - DMP // - UMP @@ -131,6 +133,7 @@ decl_module! { paras::Module::::initializer_initialize(now) + scheduler::Module::::initializer_initialize(now) + inclusion::Module::::initializer_initialize(now) + + session_info::Module::::initializer_initialize(now) + dmp::Module::::initializer_initialize(now) + ump::Module::::initializer_initialize(now) + hrmp::Module::::initializer_initialize(now); @@ -146,6 +149,7 @@ decl_module! { hrmp::Module::::initializer_finalize(); ump::Module::::initializer_finalize(); dmp::Module::::initializer_finalize(); + session_info::Module::::initializer_finalize(); inclusion::Module::::initializer_finalize(); scheduler::Module::::initializer_finalize(); paras::Module::::initializer_finalize(); @@ -189,6 +193,7 @@ impl Module { paras::Module::::initializer_on_new_session(¬ification); scheduler::Module::::initializer_on_new_session(¬ification); inclusion::Module::::initializer_on_new_session(¬ification); + session_info::Module::::initializer_on_new_session(¬ification); dmp::Module::::initializer_on_new_session(¬ification); ump::Module::::initializer_on_new_session(¬ification); hrmp::Module::::initializer_on_new_session(¬ification); diff --git a/runtime/parachains/src/lib.rs b/runtime/parachains/src/lib.rs index 3691b41c36..15c41dce17 100644 --- a/runtime/parachains/src/lib.rs +++ b/runtime/parachains/src/lib.rs @@ -28,6 +28,7 @@ pub mod inclusion_inherent; pub mod initializer; pub mod paras; pub mod scheduler; +pub mod session_info; pub mod validity; pub mod origin; pub mod dmp; diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index edb84e2a12..702dac71eb 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -24,7 +24,7 @@ use sp_runtime::{ BlakeTwo256, IdentityLookup, }, }; -use primitives::v1::{BlockNumber, Header}; +use primitives::v1::{AuthorityDiscoveryId, BlockNumber, Header}; use frame_support::{ impl_outer_origin, impl_outer_dispatch, impl_outer_event, parameter_types, weights::Weight, traits::Randomness as RandomnessT, @@ -124,6 +124,14 @@ impl crate::inclusion::Trait for Test { type Event = TestEvent; } +impl crate::session_info::Trait for Test { } + +impl crate::session_info::AuthorityDiscoveryTrait for Test { + fn authorities() -> Vec { + Vec::new() + } +} + pub type System = frame_system::Module; /// Mocked initializer. @@ -150,6 +158,9 @@ pub type Scheduler = crate::scheduler::Module; /// Mocked inclusion module. pub type Inclusion = crate::inclusion::Module; +/// Mocked session info module. +pub type SessionInfo = crate::session_info::Module; + /// Create a new set of test externalities. pub fn new_test_ext(state: GenesisConfig) -> TestExternalities { let mut t = state.system.build_storage::().unwrap(); diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index 2f49f4af8c..abecbbaeb1 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -23,12 +23,12 @@ use primitives::v1::{ ValidatorId, ValidatorIndex, GroupRotationInfo, CoreState, ValidationData, Id as ParaId, OccupiedCoreAssumption, SessionIndex, ValidationCode, CommittedCandidateReceipt, ScheduledCore, OccupiedCore, CoreOccupied, CoreIndex, - GroupIndex, CandidateEvent, PersistedValidationData, AuthorityDiscoveryId, + GroupIndex, CandidateEvent, PersistedValidationData, SessionInfo, InboundDownwardMessage, InboundHrmpMessage, }; use sp_runtime::traits::Zero; use frame_support::debug; -use crate::{initializer, inclusion, scheduler, configuration, paras, dmp, hrmp}; +use crate::{initializer, inclusion, scheduler, configuration, paras, session_info, dmp, hrmp}; /// Implementation for the `validators` function of the runtime API. pub fn validators() -> Vec { @@ -285,28 +285,9 @@ where .collect() } -/// Get the `AuthorityDiscoveryId`s corresponding to the given `ValidatorId`s. -/// Currently this request is limited to validators in the current session. -/// -/// We assume that every validator runs authority discovery, -/// which would allow us to establish point-to-point connection to given validators. -// FIXME: handle previous sessions: -// https://github.com/paritytech/polkadot/issues/1461 -pub fn validator_discovery(validators: Vec) -> Vec> -where - T: initializer::Trait + pallet_authority_discovery::Trait, -{ - // FIXME: the mapping might be invalid if a session change happens in between the calls - // use SessionInfo from https://github.com/paritytech/polkadot/pull/1691 - let current_validators = >::validators(); - let authorities = >::authorities(); - // We assume the same ordering in authorities as in validators so we can do an index search - validators.iter().map(|id| { - // FIXME: linear search is slow O(n^2) - // use SessionInfo from https://github.com/paritytech/polkadot/pull/1691 - let validator_index = current_validators.iter().position(|v| v == id); - validator_index.and_then(|i| authorities.get(i).cloned()) - }).collect() +/// Get the session info for the given session, if stored. +pub fn session_info(index: SessionIndex) -> Option { + >::session_info(index) } /// Implementation for the `dmq_contents` function of the runtime API. diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs new file mode 100644 index 0000000000..2a183c909f --- /dev/null +++ b/runtime/parachains/src/session_info.rs @@ -0,0 +1,256 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! The session info module provides information about validator sets +//! from prior sessions needed for approvals and disputes. +//! +//! See https://w3f.github.io/parachain-implementers-guide/runtime/session_info.html. + +use primitives::v1::{AuthorityDiscoveryId, SessionIndex, SessionInfo}; +use frame_support::{ + decl_storage, decl_module, decl_error, + weights::Weight, +}; +use crate::{configuration, paras, scheduler}; +use sp_std::{cmp, vec::Vec}; + +pub trait Trait: + frame_system::Trait + + configuration::Trait + + paras::Trait + + scheduler::Trait + + AuthorityDiscoveryTrait +{ +} + +decl_storage! { + trait Store for Module as ParaSessionInfo { + /// The earliest session for which previous session info is stored. + EarliestStoredSession get(fn earliest_stored_session): SessionIndex; + /// Session information in a rolling window. + /// Should have an entry in range `EarliestStoredSession..=CurrentSessionIndex`. + /// Does not have any entries before the session index in the first session change notification. + Sessions get(fn session_info): map hasher(identity) SessionIndex => Option; + } +} + +decl_error! { + pub enum Error for Module { } +} + +decl_module! { + /// The session info module. + pub struct Module for enum Call where origin: ::Origin { + type Error = Error; + } +} + +/// An abstraction for the authority discovery pallet +/// to help with mock testing. +pub trait AuthorityDiscoveryTrait { + /// Retrieve authority identifiers of the current and next authority set. + fn authorities() -> Vec; +} + +impl AuthorityDiscoveryTrait for T { + fn authorities() -> Vec { + >::authorities() + } +} + +impl Module { + /// Handle an incoming session change. + pub(crate) fn initializer_on_new_session( + notification: &crate::initializer::SessionChangeNotification + ) { + let config = >::config(); + + let dispute_period = config.dispute_period; + let n_parachains = >::parachains().len() as u32; + + let validators = notification.validators.clone(); + let discovery_keys = ::authorities(); + // FIXME: once we store these keys: https://github.com/paritytech/polkadot/issues/1975 + let approval_keys = Default::default(); + let validator_groups = >::validator_groups(); + let n_cores = n_parachains + config.parathread_cores; + let zeroth_delay_tranche_width = config.zeroth_delay_tranche_width; + let relay_vrf_modulo_samples = config.relay_vrf_modulo_samples; + let n_delay_tranches = config.n_delay_tranches; + let no_show_slots = config.no_show_slots; + let needed_approvals = config.needed_approvals; + + let new_session_index = notification.session_index; + let old_earliest_stored_session = EarliestStoredSession::get(); + let dispute_period = cmp::max(1, dispute_period); + let new_earliest_stored_session = new_session_index.checked_sub(dispute_period - 1).unwrap_or(0); + let new_earliest_stored_session = cmp::max(new_earliest_stored_session, old_earliest_stored_session); + // update `EarliestStoredSession` based on `config.dispute_period` + EarliestStoredSession::set(new_earliest_stored_session); + // remove all entries from `Sessions` from the previous value up to the new value + for idx in old_earliest_stored_session..new_earliest_stored_session { + Sessions::remove(&idx); + } + // create a new entry in `Sessions` with information about the current session + let new_session_info = SessionInfo { + validators, + discovery_keys, + approval_keys, + validator_groups, + n_cores, + zeroth_delay_tranche_width, + relay_vrf_modulo_samples, + n_delay_tranches, + no_show_slots, + needed_approvals, + }; + Sessions::insert(&new_session_index, &new_session_info); + } + + /// Called by the initializer to initialize the session info module. + pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { + 0 + } + + /// Called by the initializer to finalize the session info module. + pub(crate) fn initializer_finalize() {} +} + + +#[cfg(test)] +mod tests { + use super::*; + use crate::mock::{ + new_test_ext, Configuration, SessionInfo, System, GenesisConfig as MockGenesisConfig, + Origin, + }; + use crate::initializer::SessionChangeNotification; + use crate::configuration::HostConfiguration; + use frame_support::traits::{OnFinalize, OnInitialize}; + use primitives::v1::BlockNumber; + + fn run_to_block( + to: BlockNumber, + new_session: impl Fn(BlockNumber) -> Option>, + ) { + while System::block_number() < to { + let b = System::block_number(); + + SessionInfo::initializer_finalize(); + Configuration::initializer_finalize(); + + System::on_finalize(b); + + System::on_initialize(b + 1); + System::set_block_number(b + 1); + + if let Some(notification) = new_session(b + 1) { + Configuration::initializer_on_new_session(¬ification.validators, ¬ification.queued); + SessionInfo::initializer_on_new_session(¬ification); + } + + Configuration::initializer_initialize(b + 1); + SessionInfo::initializer_initialize(b + 1); + } + } + + fn default_config() -> HostConfiguration { + HostConfiguration { + parathread_cores: 1, + dispute_period: 2, + needed_approvals: 3, + ..Default::default() + } + } + + fn genesis_config() -> MockGenesisConfig { + MockGenesisConfig { + configuration: configuration::GenesisConfig { + config: default_config(), + ..Default::default() + }, + ..Default::default() + } + } + + fn session_changes(n: BlockNumber) -> Option> { + match n { + 100 => Some(SessionChangeNotification { + session_index: 10, + ..Default::default() + }), + 200 => Some(SessionChangeNotification { + session_index: 20, + ..Default::default() + }), + 300 => Some(SessionChangeNotification { + session_index: 30, + ..Default::default() + }), + 400 => Some(SessionChangeNotification { + session_index: 40, + ..Default::default() + }), + _ => None, + } + } + + fn new_session_every_block(n: BlockNumber) -> Option> { + Some(SessionChangeNotification{ + session_index: n, + ..Default::default() + }) + } + + #[test] + fn session_pruning_is_based_on_dispute_deriod() { + new_test_ext(genesis_config()).execute_with(|| { + run_to_block(100, session_changes); + assert_eq!(EarliestStoredSession::get(), 9); + + // changing dispute_period works + let dispute_period = 5; + Configuration::set_dispute_period(Origin::root(), dispute_period).unwrap(); + run_to_block(200, session_changes); + assert_eq!(EarliestStoredSession::get(), 20 - dispute_period + 1); + + // we don't have that many sessions stored + let new_dispute_period = 16; + Configuration::set_dispute_period(Origin::root(), new_dispute_period).unwrap(); + run_to_block(300, session_changes); + assert_eq!(EarliestStoredSession::get(), 20 - dispute_period + 1); + + // now we do + run_to_block(400, session_changes); + assert_eq!(EarliestStoredSession::get(), 40 - new_dispute_period + 1); + }) + } + + #[test] + fn session_info_is_based_on_config() { + new_test_ext(genesis_config()).execute_with(|| { + run_to_block(1, new_session_every_block); + let session = Sessions::get(&1).unwrap(); + assert_eq!(session.needed_approvals, 3); + + // change some param + Configuration::set_needed_approvals(Origin::root(), 42).unwrap(); + run_to_block(2, new_session_every_block); + let session = Sessions::get(&2).unwrap(); + assert_eq!(session.needed_approvals, 42); + }) + } +} diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 8d9e9897a6..b12c98541e 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -37,7 +37,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, ModuleId, ApplyExtrinsicResult, @@ -1086,6 +1086,10 @@ sp_api::impl_runtime_apis! { 0 } + fn session_info(_: SessionIndex) -> Option { + None + } + fn validation_code(_: Id, _: OccupiedCoreAssumption) -> Option { None } @@ -1102,10 +1106,6 @@ sp_api::impl_runtime_apis! { Vec::new() } - fn validator_discovery(_: Vec) -> Vec> { - Vec::new() - } - fn dmq_contents( _recipient: Id, ) -> Vec> { diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 07e3e0c433..2cc0a83398 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -28,7 +28,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, Hash, Nonce, Signature, Moment, GroupRotationInfo, CoreState, Id, ValidationData, ValidationCode, CandidateEvent, ValidatorId, ValidatorIndex, CommittedCandidateReceipt, OccupiedCoreAssumption, - PersistedValidationData, InboundDownwardMessage, InboundHrmpMessage, + PersistedValidationData, InboundDownwardMessage, InboundHrmpMessage, SessionInfo, }; use runtime_common::{ SlowAdjustingFeeUpdate, @@ -72,6 +72,7 @@ use runtime_parachains::configuration as parachains_configuration; use runtime_parachains::inclusion as parachains_inclusion; use runtime_parachains::inclusion_inherent as parachains_inclusion_inherent; use runtime_parachains::initializer as parachains_initializer; +use runtime_parachains::session_info as parachains_session_info; use runtime_parachains::paras as parachains_paras; use runtime_parachains::dmp as parachains_dmp; use runtime_parachains::ump as parachains_ump; @@ -536,6 +537,8 @@ impl parachains_paras::Trait for Runtime { type Origin = Origin; } +impl parachains_session_info::Trait for Runtime {} + impl parachains_ump::Trait for Runtime { type UmpSink = (); // TODO: #1873 To be handled by the XCM receiver. } @@ -688,8 +691,9 @@ sp_api::impl_runtime_apis! { } }) } - fn validator_discovery(validators: Vec) -> Vec> { - runtime_api_impl::validator_discovery::(validators) + + fn session_info(index: SessionIndex) -> Option { + runtime_api_impl::session_info::(index) } fn dmq_contents(recipient: Id) -> Vec> { diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index fffcd892e6..abfb734ccd 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -29,6 +29,7 @@ use polkadot_runtime_parachains::configuration as parachains_configuration; use polkadot_runtime_parachains::inclusion as parachains_inclusion; use polkadot_runtime_parachains::inclusion_inherent as parachains_inclusion_inherent; use polkadot_runtime_parachains::initializer as parachains_initializer; +use polkadot_runtime_parachains::session_info as parachains_session_info; use polkadot_runtime_parachains::paras as parachains_paras; use polkadot_runtime_parachains::dmp as parachains_dmp; use polkadot_runtime_parachains::ump as parachains_ump; @@ -40,7 +41,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash as HashT, Id as ParaId, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, }; use runtime_common::{ claims, SlowAdjustingFeeUpdate, paras_sudo_wrapper, @@ -457,6 +458,8 @@ impl parachains_initializer::Trait for Runtime { type Randomness = RandomnessCollectiveFlip; } +impl parachains_session_info::Trait for Runtime {} + impl parachains_paras::Trait for Runtime { type Origin = Origin; } @@ -678,8 +681,8 @@ sp_api::impl_runtime_apis! { runtime_impl::candidate_events::(|trait_event| trait_event.try_into().ok()) } - fn validator_discovery(validators: Vec) -> Vec> { - runtime_impl::validator_discovery::(validators) + fn session_info(index: SessionIndex) -> Option { + runtime_impl::session_info::(index) } fn dmq_contents( diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 08e0ab6a28..e8f55dead8 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -28,7 +28,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, }; use runtime_common::{ SlowAdjustingFeeUpdate, CurrencyToVote, @@ -840,6 +840,10 @@ sp_api::impl_runtime_apis! { 0 } + fn session_info(_: SessionIndex) -> Option { + None + } + fn validation_code(_: Id, _: OccupiedCoreAssumption) -> Option { None } @@ -852,10 +856,6 @@ sp_api::impl_runtime_apis! { Vec::new() } - fn validator_discovery(_: Vec) -> Vec> { - Vec::new() - } - fn dmq_contents( _recipient: Id, ) -> Vec> { -- GitLab From 982c9e5ea15dd5f212349deb27989de6e9566f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 26 Nov 2020 13:13:12 +0100 Subject: [PATCH 051/203] Bump spec versions to ensure that we don't run in native (#2017) --- runtime/polkadot/src/lib.rs | 2 +- runtime/westend/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index b12c98541e..361f5240ff 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -93,7 +93,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polkadot"), impl_name: create_runtime_str!("parity-polkadot"), authoring_version: 0, - spec_version: 26, + spec_version: 27, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index e8f55dead8..1b79cc69ed 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -88,7 +88,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westend"), impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, - spec_version: 46, + spec_version: 47, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From 1f9f04af08534a2cb5b223e576c08370d43c37ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 26 Nov 2020 16:13:44 +0100 Subject: [PATCH 052/203] Make sure we don't send messages multiple times in the availability distribution subsystem (#2015) --- .../availability-distribution/src/lib.rs | 76 ++++------- .../availability-distribution/src/tests.rs | 125 +++++++++++++++++- .../network/statement-distribution/src/lib.rs | 4 +- 3 files changed, 145 insertions(+), 60 deletions(-) diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 53b98826d0..493d5bfbfc 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -52,6 +52,9 @@ use std::collections::{HashMap, HashSet}; use std::iter; use thiserror::Error; +#[cfg(test)] +mod tests; + const LOG_TARGET: &'static str = "availability_distribution"; #[derive(Debug, Error)] @@ -166,6 +169,14 @@ struct PerCandidate { validator_index: Option, } +impl PerCandidate { + /// Returns `true` iff the given `message` is required by the given `peer`. + fn message_required_by_peer(&self, peer: &PeerId, message: &(CandidateHash, ValidatorIndex)) -> bool { + self.received_messages.get(peer).map(|v| !v.contains(message)).unwrap_or(true) + && self.sent_messages.get(peer).map(|v| !v.contains(message)).unwrap_or(true) + } +} + #[derive(Debug, Clone, Default)] struct PerRelayParent { /// Set of `K` ancestors for this relay parent. @@ -364,24 +375,22 @@ where { let _timer = metrics.time_handle_our_view_change(); - let old_view = std::mem::replace(&mut (state.view), view); + let old_view = std::mem::replace(&mut state.view, view); // needed due to borrow rules let view = state.view.clone(); - let added = view.difference(&old_view).collect::>(); // add all the relay parents and fill the cache - for added in added.iter() { - let added = **added; - let validators = query_validators(ctx, added).await?; + for added in view.difference(&old_view) { + let validators = query_validators(ctx, *added).await?; let validator_index = obtain_our_validator_index(&validators, keystore.clone()).await; state - .add_relay_parent(ctx, added, validators, validator_index) + .add_relay_parent(ctx, *added, validators, validator_index) .await?; } // handle all candidates - for (candidate_hash, _receipt) in state.cached_live_candidates_unioned(added) { + for (candidate_hash, _receipt) in state.cached_live_candidates_unioned(view.difference(&old_view)) { let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); // assure the node has the validator role @@ -418,12 +427,9 @@ where // obtain the chunks from the cache, if not fallback // and query the availability store let message_id = (candidate_hash, chunk_index); - let erasure_chunk = if let Some(message) = per_candidate.message_vault.get(&chunk_index) - { + let erasure_chunk = if let Some(message) = per_candidate.message_vault.get(&chunk_index) { message.erasure_chunk.clone() - } else if let Some(erasure_chunk) = - query_chunk(ctx, candidate_hash, chunk_index as ValidatorIndex).await? - { + } else if let Some(erasure_chunk) = query_chunk(ctx, candidate_hash, chunk_index as ValidatorIndex).await? { erasure_chunk } else { continue; @@ -433,23 +439,15 @@ where let peers = peers .iter() - .filter(|peer| { - // only pick those which were not sent before - !per_candidate - .sent_messages - .get(*peer) - .filter(|set| set.contains(&message_id)) - .is_some() - }) - .map(|peer| peer.clone()) + .filter(|peer| per_candidate.message_required_by_peer(peer, &message_id)) + .cloned() .collect::>(); let message = AvailabilityGossipMessage { candidate_hash, erasure_chunk, }; - send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message) - .await; + send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message).await; } } @@ -472,8 +470,7 @@ async fn send_tracked_gossip_message_to_peers( where Context: SubsystemContext, { - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)) - .await + send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await } #[inline(always)] @@ -487,8 +484,7 @@ async fn send_tracked_gossip_messages_to_peer( where Context: SubsystemContext, { - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, vec![peer], message_iter) - .await + send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, vec![peer], message_iter).await } #[tracing::instrument(level = "trace", skip(ctx, metrics, message_iter), fields(subsystem = LOG_TARGET))] @@ -576,21 +572,12 @@ where per_candidate .message_vault .get(&erasure_chunk_index) - .filter(|_| { - // check if that erasure chunk was already sent before - if let Some(sent_set) = per_candidate.sent_messages.get(&origin) { - if sent_set.contains(&message_id) { - return false; - } - } - true - }) + .filter(|_| per_candidate.message_required_by_peer(&origin, &message_id)) }) .cloned() .collect::>(); - send_tracked_gossip_messages_to_peer(ctx, per_candidate, metrics, origin.clone(), messages) - .await; + send_tracked_gossip_messages_to_peer(ctx, per_candidate, metrics, origin.clone(), messages).await; } } @@ -727,15 +714,7 @@ where let peers = peers .into_iter() - .filter(|peer| { - let peer: PeerId = peer.clone(); - // avoid sending duplicate messages - per_candidate - .sent_messages - .entry(peer) - .or_default() - .contains(&message_id) - }) + .filter(|peer| per_candidate.message_required_by_peer(peer, &message_id)) .collect::>(); // gossip that message to interested peers @@ -1210,6 +1189,3 @@ impl metrics::Metrics for Metrics { Ok(Metrics(Some(metrics))) } } - -#[cfg(test)] -mod tests; diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index c4212521a6..a7309043b0 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -314,7 +314,7 @@ fn helper_integrity() { let candidate = TestCandidateBuilder { para_id: test_state.chain_ids[0], relay_parent: test_state.relay_parent, - pov_hash: pov_hash, + pov_hash, erasure_root: make_erasure_root(&test_state, pov_block.clone()), ..Default::default() } @@ -395,7 +395,7 @@ fn reputation_verification() { } .build(), TestCandidateBuilder { - para_id: test_state.chain_ids[0], + para_id: test_state.chain_ids[1], relay_parent: test_state.relay_parent, pov_hash: pov_hash_b, erasure_root: make_erasure_root(&test_state, pov_block_b.clone()), @@ -643,10 +643,8 @@ fn reputation_verification() { ) ) => { let index = candidates2.iter().enumerate().find(|x| { x.1.hash() == candidate_hash }).map(|x| x.0).unwrap(); - expected = dbg!(candidates2.swap_remove(index).hash()); - tx.send( - i == 0 - ).unwrap(); + expected = candidates2.swap_remove(index).hash(); + tx.send(i == 0).unwrap(); } ); @@ -762,6 +760,23 @@ fn reputation_verification() { ) .await; + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessage( + peers, + protocol_v1::ValidationProtocol::AvailabilityDistribution( + protocol_v1::AvailabilityDistributionMessage::Chunk(hash, chunk), + ), + ) + ) => { + assert_eq!(1, peers.len()); + assert_eq!(peers[0], peer_a); + assert_eq!(candidates[0].hash(), hash); + assert_eq!(valid.erasure_chunk, chunk); + } + ); + assert_matches!( overseer_recv(&mut virtual_overseer).await, AllMessages::NetworkBridge( @@ -861,7 +876,7 @@ fn reputation_verification() { { // send another message - let valid2: AvailabilityGossipMessage = make_valid_availability_gossip( + let valid2 = make_valid_availability_gossip( &test_state, candidates[2].hash(), 1, @@ -890,6 +905,102 @@ fn reputation_verification() { } ); } + + { + // send another message + let valid = make_valid_availability_gossip( + &test_state, + candidates[1].hash(), + 2, + pov_block_b.clone(), + ); + + // Make peer a and b listen on `current` + overseer_send( + &mut virtual_overseer, + AvailabilityDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![current]), + ), + ) + .await; + + overseer_send( + &mut virtual_overseer, + AvailabilityDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange(peer_b.clone(), view![current]), + ), + ) + .await; + + overseer_send( + &mut virtual_overseer, + AvailabilityDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerMessage( + peer_a.clone(), + chunk_protocol_message(valid.clone()), + ), + ), + ) + .await; + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ReportPeer( + peer, + rep + ) + ) => { + assert_eq!(peer, peer_a); + assert_eq!(rep, BENEFIT_VALID_MESSAGE_FIRST); + } + ); + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessage( + peers, + protocol_v1::ValidationProtocol::AvailabilityDistribution( + protocol_v1::AvailabilityDistributionMessage::Chunk(hash, chunk), + ), + ) + ) => { + assert_eq!(1, peers.len()); + assert_eq!(peers[0], peer_b); + assert_eq!(candidates[1].hash(), hash); + assert_eq!(valid.erasure_chunk, chunk); + } + ); + + // Let B send the same message + overseer_send( + &mut virtual_overseer, + AvailabilityDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerMessage( + peer_b.clone(), + chunk_protocol_message(valid.clone()), + ), + ), + ) + .await; + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ReportPeer( + peer, + rep + ) + ) => { + assert_eq!(peer, peer_b); + assert_eq!(rep, BENEFIT_VALID_MESSAGE); + } + ); + + // There shouldn't be any other message. + assert!(virtual_overseer.recv().timeout(TIMEOUT).await.is_none()); + } }); } diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 04517477a3..5e6a58f948 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -30,9 +30,7 @@ use polkadot_subsystem::{ RuntimeApiMessage, RuntimeApiRequest, }, }; -use polkadot_node_subsystem_util::{ - metrics::{self, prometheus}, -}; +use polkadot_node_subsystem_util::metrics::{self, prometheus}; use node_primitives::SignedFullStatement; use polkadot_primitives::v1::{ Hash, CompactStatement, ValidatorIndex, ValidatorId, SigningContext, ValidatorSignature, CandidateHash, -- GitLab From a37d8aa73bbefc2fccaf968b688dd41c5aacc41d Mon Sep 17 00:00:00 2001 From: Vincent Ulitzsch Date: Thu, 26 Nov 2020 18:51:52 +0100 Subject: [PATCH 053/203] Add a fuzzer for the erasure coding (#2021) * Commit a fuzzer for the erase coding * Replace tabs with spaces for the erase coding fuzzer * Apply suggestions from code review Co-authored-by: Andronik Ordian --- .../erasure_coding_fuzzer/Cargo.lock | 2621 +++++++++++++++++ .../erasure_coding_fuzzer/Cargo.toml | 20 + .../erasure_coding_fuzzer/src/reconstruct.rs | 20 + .../erasure_coding_fuzzer/src/round_trip.rs | 40 + 4 files changed, 2701 insertions(+) create mode 100644 erasure-coding/erasure_coding_fuzzer/Cargo.lock create mode 100644 erasure-coding/erasure_coding_fuzzer/Cargo.toml create mode 100644 erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs create mode 100644 erasure-coding/erasure_coding_fuzzer/src/round_trip.rs diff --git a/erasure-coding/erasure_coding_fuzzer/Cargo.lock b/erasure-coding/erasure_coding_fuzzer/Cargo.lock new file mode 100644 index 0000000000..4af40a99bb --- /dev/null +++ b/erasure-coding/erasure_coding_fuzzer/Cargo.lock @@ -0,0 +1,2621 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + +[[package]] +name = "ahash" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" + +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf8dcb5b4bbaa28653b647d8c77bd4ed40183b48882e130c1f1ffb73de069fd7" + +[[package]] +name = "arbitrary" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-trait" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base58" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "bitvec" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium", +] + +[[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", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.3", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "byte-slice-cast" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +dependencies = [ + "byteorder", + "iovec", +] + +[[package]] +name = "cc" +version = "1.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95752358c8f7552394baf48cd82695b345628ad3f170d607de3ca03b8dacca15" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits 0.2.14", + "time", + "winapi", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "cloudabi" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" +dependencies = [ + "bitflags", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cpuid-bool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.3", + "subtle 1.0.0", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.4", + "subtle 2.3.0", +] + +[[package]] +name = "curve25519-dalek" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5" +dependencies = [ + "byteorder", + "digest 0.8.1", + "rand_core 0.5.1", + "subtle 2.3.0", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8492de420e9e60bc9a1d66e2dbb91825390b738a388606600663fc529b4b307" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle 2.3.0", + "zeroize", +] + +[[package]] +name = "derive_more" +version = "0.99.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.3", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "dyn-clone" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55796afa1b20c2945ca8eabfc421839f2b766619209f1ede813cf2484f31804" + +[[package]] +name = "ed25519" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.0.0", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.2", + "zeroize", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "enum_primitive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" +dependencies = [ + "num-traits 0.1.43", +] + +[[package]] +name = "environmental" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6576a1755ddffd988788025e75bce9e74b018f7cc226198fe931d077911c6d7e" + +[[package]] +name = "erasure_coding_fuzzer" +version = "0.1.0" +dependencies = [ + "honggfuzz", + "polkadot-erasure-coding", + "polkadot-primitives", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fixed-hash" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c" +dependencies = [ + "byteorder", + "rand 0.7.3", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "frame-metadata" +version = "12.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "parity-scale-codec", + "serde", + "sp-core", + "sp-std", +] + +[[package]] +name = "frame-support" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "bitflags", + "frame-metadata", + "frame-support-procedural", + "impl-trait-for-tuples", + "log", + "once_cell", + "parity-scale-codec", + "paste", + "serde", + "smallvec", + "sp-arithmetic", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "frame-support-procedural" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "frame-support-procedural-tools", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "frame-support-procedural-tools" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "frame-system" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "frame-support", + "impl-trait-for-tuples", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" + +[[package]] +name = "futures-executor" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" + +[[package]] +name = "futures-macro" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +dependencies = [ + "proc-macro-hack", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "futures-sink" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" + +[[package]] +name = "futures-task" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +dependencies = [ + "once_cell", +] + +[[package]] +name = "futures-util" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generator" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cdc09201b2e8ca1b19290cf7e65de2246b8e91fb6874279722189c4de7b94dc" +dependencies = [ + "cc", + "libc", + "log", + "rustc_version", + "winapi", +] + +[[package]] +name = "generic-array" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" + +[[package]] +name = "hash-db" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" +dependencies = [ + "ahash", + "autocfg", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" + +[[package]] +name = "hmac" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" +dependencies = [ + "crypto-mac 0.7.0", + "digest 0.8.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac-drbg" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" +dependencies = [ + "digest 0.8.1", + "generic-array 0.12.3", + "hmac 0.7.1", +] + +[[package]] +name = "honggfuzz" +version = "0.5.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f085725a5828d7e959f014f624773094dfe20acc91be310ef106923c30594bc" +dependencies = [ + "arbitrary", + "lazy_static", + "memmap", +] + +[[package]] +name = "impl-codec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be51a921b067b0eaca2fad532d9400041561aa922221cc65f95a85641c6bf53" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-serde" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b47ca4d2b6931707a55fce5cf66aff80e2178c8b63bbb4ecb5695cbc870ddf6f" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "instant" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits 0.2.14", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "keccak" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" + +[[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.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" + +[[package]] +name = "libsecp256k1" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +dependencies = [ + "arrayref", + "crunchy", + "digest 0.8.1", + "hmac-drbg", + "rand 0.7.3", + "sha2 0.8.2", + "subtle 2.3.0", + "typenum", +] + +[[package]] +name = "lock_api" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "lock_api" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "loom" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" +dependencies = [ + "cfg-if 0.1.10", + "generator", + "scoped-tls", + "serde", + "serde_json", +] + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "memory-db" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f36ddb0b2cdc25d38babba472108798e3477f02be5165f038c5e393e50c57a" +dependencies = [ + "hash-db", + "hashbrown", + "parity-util-mem", +] + +[[package]] +name = "memory_units" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" + +[[package]] +name = "memrange" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc29ba65898edc4fdc252cb31cd3925f37c1a8ba25bb46eec883569984976530" +dependencies = [ + "rustc-serialize", +] + +[[package]] +name = "merlin" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6feca46f4fa3443a01769d768727f10c10a20fdb65e52dc16a81f0c8269bb78" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "nix" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7fd5681d13fda646462cfbd4e5f2051279a89a544d50eb98c365b507246839f" +dependencies = [ + "bitflags", + "bytes", + "cfg-if 0.1.10", + "gcc", + "libc", + "void", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.14", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits 0.2.14", +] + +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits 0.2.14", +] + +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +dependencies = [ + "num-traits 0.2.14", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" + +[[package]] +name = "once_cell" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +dependencies = [ + "parking_lot 0.11.1", +] + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "parity-scale-codec" +version = "1.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c740e5fbcb6847058b40ac7e5574766c6388f585e184d769910fe0d3a2ca861" +dependencies = [ + "arrayvec 0.5.2", + "bitvec", + "byte-slice-cast", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db82bb1c18fc00176004462dd809b2a6d851669550aa17af6dacd21ae0c14" +dependencies = [ + "proc-macro-crate", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "parity-util-mem" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297ff91fa36aec49ce183484b102f6b75b46776822bd81525bfc4cc9b0dd0f5c" +dependencies = [ + "cfg-if 0.1.10", + "hashbrown", + "impl-trait-for-tuples", + "parity-util-mem-derive", + "parking_lot 0.10.2", + "primitive-types", + "winapi", +] + +[[package]] +name = "parity-util-mem-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" +dependencies = [ + "proc-macro2 1.0.24", + "syn 1.0.51", + "synstructure", +] + +[[package]] +name = "parity-wasm" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865" + +[[package]] +name = "parking_lot" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" +dependencies = [ + "lock_api 0.3.4", + "parking_lot_core 0.7.2", +] + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api 0.4.2", + "parking_lot_core 0.8.0", +] + +[[package]] +name = "parking_lot_core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi 0.0.3", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi 0.1.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "paste" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880" +dependencies = [ + "paste-impl", + "proc-macro-hack", +] + +[[package]] +name = "paste-impl" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6" +dependencies = [ + "proc-macro-hack", +] + +[[package]] +name = "pbkdf2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" +dependencies = [ + "byteorder", + "crypto-mac 0.7.0", +] + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac 0.8.0", +] + +[[package]] +name = "pin-project" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "polkadot-core-primitives" +version = "0.7.30" +dependencies = [ + "parity-scale-codec", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "polkadot-erasure-coding" +version = "0.8.26" +dependencies = [ + "parity-scale-codec", + "polkadot-primitives", + "reed-solomon-erasure", + "sp-core", + "sp-trie", + "thiserror", +] + +[[package]] +name = "polkadot-parachain" +version = "0.8.26" +dependencies = [ + "derive_more", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.11.1", + "polkadot-core-primitives", + "sc-executor", + "serde", + "shared_memory", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime", + "sp-std", + "sp-wasm-interface", + "thiserror", +] + +[[package]] +name = "polkadot-primitives" +version = "0.8.26" +dependencies = [ + "bitvec", + "frame-system", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-trie", + "sp-version", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "primitive-types" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd39dcacf71411ba488570da7bbc89b717225e46478b30ba99b92db6b149809" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-serde", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid 0.1.0", +] + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid 0.2.1", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +dependencies = [ + "proc-macro2 0.4.30", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2 1.0.24", +] + +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom", + "libc", + "rand_chacha", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "reed-solomon-erasure" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" +dependencies = [ + "smallvec", +] + +[[package]] +name = "ref-cast" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17626b2f4bcf35b84bf379072a66e28cfe5c3c6ae58b38e4914bb8891dabece" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c523ccaed8ac4b0288948849a350b37d3035827413c458b6a40ddb614bb4f72" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-automata" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +dependencies = [ + "byteorder", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "rustc-demangle" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "sc-executor" +version = "0.8.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "derive_more", + "lazy_static", + "libsecp256k1", + "log", + "parity-scale-codec", + "parity-wasm", + "parking_lot 0.10.2", + "sc-executor-common", + "sc-executor-wasmi", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", + "sp-serializer", + "sp-tasks", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "wasmi", +] + +[[package]] +name = "sc-executor-common" +version = "0.8.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "derive_more", + "log", + "parity-scale-codec", + "parity-wasm", + "sp-allocator", + "sp-core", + "sp-runtime-interface", + "sp-serializer", + "sp-wasm-interface", + "wasmi", +] + +[[package]] +name = "sc-executor-wasmi" +version = "0.8.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "log", + "parity-scale-codec", + "sc-executor-common", + "sp-allocator", + "sp-core", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmi", +] + +[[package]] +name = "schnorrkel" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "curve25519-dalek 2.1.0", + "getrandom", + "merlin", + "rand 0.7.3", + "rand_core 0.5.1", + "sha2 0.8.2", + "subtle 2.3.0", + "zeroize", +] + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "secrecy" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0673d6a6449f5e7d12a1caf424fd9363e2af3a4953023ed455e3c4beef4597c0" +dependencies = [ + "zeroize", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpuid-bool", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sharded-slab" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4921be914e16899a80adefb821f8ddb7974e3f1250223575a44ed994882127" +dependencies = [ + "lazy_static", + "loom", +] + +[[package]] +name = "shared_memory" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf3ab0cdff84d6c66fc9e268010ea6508e58ee942575afb66f2cf194bb218bb4" +dependencies = [ + "cfg-if 0.1.10", + "enum_primitive", + "libc", + "log", + "memrange", + "nix", + "quick-error", + "rand 0.4.6", + "shared_memory_derive", + "theban_interval_tree", + "winapi", +] + +[[package]] +name = "shared_memory_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "767a14f1304be2f0b04e69860252f8ae9cfae0afaa9cc07b675147c43425dd3a" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", +] + +[[package]] +name = "signature" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210" + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" + +[[package]] +name = "smallvec" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" + +[[package]] +name = "sp-allocator" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "derive_more", + "log", + "sp-core", + "sp-std", + "sp-wasm-interface", +] + +[[package]] +name = "sp-api" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "hash-db", + "parity-scale-codec", + "sp-api-proc-macro", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-version", +] + +[[package]] +name = "sp-api-proc-macro" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "blake2-rfc", + "proc-macro-crate", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "sp-application-crypto" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-std", +] + +[[package]] +name = "sp-arithmetic" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "integer-sqrt", + "num-traits 0.2.14", + "parity-scale-codec", + "serde", + "sp-debug-derive", + "sp-std", +] + +[[package]] +name = "sp-authority-discovery" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-application-crypto", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-core" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "base58", + "blake2-rfc", + "byteorder", + "dyn-clonable", + "ed25519-dalek", + "futures", + "hash-db", + "hash256-std-hasher", + "hex", + "impl-serde", + "lazy_static", + "libsecp256k1", + "log", + "merlin", + "num-traits 0.2.14", + "parity-scale-codec", + "parity-util-mem", + "parking_lot 0.10.2", + "primitive-types", + "rand 0.7.3", + "regex", + "schnorrkel", + "secrecy", + "serde", + "sha2 0.8.2", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "substrate-bip39", + "thiserror", + "tiny-bip39", + "tiny-keccak", + "twox-hash", + "wasmi", + "zeroize", +] + +[[package]] +name = "sp-debug-derive" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "sp-externalities" +version = "0.8.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std", + "sp-storage", +] + +[[package]] +name = "sp-inherents" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.10.2", + "sp-core", + "sp-std", + "thiserror", +] + +[[package]] +name = "sp-io" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "futures", + "hash-db", + "libsecp256k1", + "log", + "parity-scale-codec", + "parking_lot 0.10.2", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "sp-wasm-interface", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keystore" +version = "0.8.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "async-trait", + "derive_more", + "futures", + "merlin", + "parity-scale-codec", + "parking_lot 0.10.2", + "schnorrkel", + "sp-core", + "sp-externalities", +] + +[[package]] +name = "sp-panic-handler" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "backtrace", +] + +[[package]] +name = "sp-runtime" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "parity-util-mem", + "paste", + "rand 0.7.3", + "serde", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", +] + +[[package]] +name = "sp-runtime-interface" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "parity-scale-codec", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "Inflector", + "proc-macro-crate", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "sp-serializer" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "sp-staking" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "parity-scale-codec", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-state-machine" +version = "0.8.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "hash-db", + "log", + "num-traits 0.2.14", + "parity-scale-codec", + "parking_lot 0.10.2", + "rand 0.7.3", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-std", + "sp-trie", + "thiserror", + "trie-db", + "trie-root", +] + +[[package]] +name = "sp-std" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" + +[[package]] +name = "sp-storage" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", + "sp-std", +] + +[[package]] +name = "sp-tasks" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "log", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime-interface", + "sp-std", +] + +[[package]] +name = "sp-tracing" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "log", + "parity-scale-codec", + "sp-std", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-trie" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "hash-db", + "memory-db", + "parity-scale-codec", + "sp-core", + "sp-std", + "trie-db", + "trie-root", +] + +[[package]] +name = "sp-version" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "serde", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-wasm-interface" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#cff25fbc37c9fc564f8816eefdcd8dce15e1606b" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "sp-std", + "wasmi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "substrate-bip39" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236" +dependencies = [ + "hmac 0.7.1", + "pbkdf2 0.3.0", + "schnorrkel", + "sha2 0.8.2", + "zeroize", +] + +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", +] + +[[package]] +name = "syn" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b4f34193997d92804d359ed09953e25d5138df6bcc055a71bf68ee89fdf9223" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "unicode-xid 0.2.1", +] + +[[package]] +name = "synstructure" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", + "unicode-xid 0.2.1", +] + +[[package]] +name = "theban_interval_tree" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7b42a5385db9a651628091edcd1d58ac9cb1c92327d8cd2a29bf8e35bdfe4ea" +dependencies = [ + "memrange", + "rand 0.3.23", + "time", +] + +[[package]] +name = "thiserror" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9e44c4759bae7f1032e286a7ef990bd9ed23fe831b7eeba0beb97484c2e59b8" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.2", + "thiserror", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf8dbc19eb42fba10e8feaaec282fb50e2c14b2726d6301dbfeed0f73306a6f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", +] + +[[package]] +name = "tracing-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "tracing-log" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" +dependencies = [ + "ansi_term", + "chrono", + "lazy_static", + "matchers", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trie-db" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e55f7ace33d6237e14137e386f4e1672e2a5c6bbc97fef9f438581a143971f0" +dependencies = [ + "hash-db", + "hashbrown", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "652931506d2c1244d7217a70b99f56718a7b4161b37f04e7cd868072a99f68cd" +dependencies = [ + "hash-db", +] + +[[package]] +name = "twox-hash" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" +dependencies = [ + "cfg-if 0.1.10", + "rand 0.7.3", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" + +[[package]] +name = "uint" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177" +dependencies = [ + "byteorder", + "crunchy", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "wasi" +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 = "wasmi" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf617d864d25af3587aa745529f7aaa541066c876d57e050c0d0c85c61c92aff" +dependencies = [ + "libc", + "memory_units", + "num-rational", + "num-traits 0.2.14", + "parity-wasm", + "wasmi-validation", +] + +[[package]] +name = "wasmi-validation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea78c597064ba73596099281e2f4cfc019075122a65cdda3205af94f0b264d93" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "zeroize" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.51", + "synstructure", +] diff --git a/erasure-coding/erasure_coding_fuzzer/Cargo.toml b/erasure-coding/erasure_coding_fuzzer/Cargo.toml new file mode 100644 index 0000000000..5117be38c1 --- /dev/null +++ b/erasure-coding/erasure_coding_fuzzer/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "erasure_coding_fuzzer" +version = "0.1.0" +authors = ["Vincent Ulitzsch "] +edition = "2018" + +[dependencies] +polkadot-erasure-coding = { path = ".." } +honggfuzz = "0.5" +primitives = { package = "polkadot-primitives", path = "../../primitives/" } + +[[bin]] +name = "reconstruct_fuzzer" +path = "src/reconstruct.rs" + +[[bin]] +name = "round_trip" +path = "src/round_trip.rs" + +[workspace] diff --git a/erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs b/erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs new file mode 100644 index 0000000000..6c8d41306b --- /dev/null +++ b/erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs @@ -0,0 +1,20 @@ +use polkadot_erasure_coding::*; +use primitives::v1::AvailableData; +use std::sync::Arc; +use honggfuzz::fuzz; + +fn main(){ + loop { + fuzz!(|data: (usize, Vec<(Vec, usize)>)| { + let (num_validators, chunk_input) = data; + if num_validators <= 1 || num_validators > 10_000 { + return; + } + let reconstructed: Result = reconstruct_v1( + num_validators, + chunk_input.iter().map(|t| (&*t.0, t.1)).collect::>() + ); + println!("reconstructed {:?}", reconstructed); + }); + } +} diff --git a/erasure-coding/erasure_coding_fuzzer/src/round_trip.rs b/erasure-coding/erasure_coding_fuzzer/src/round_trip.rs new file mode 100644 index 0000000000..39766c7fbc --- /dev/null +++ b/erasure-coding/erasure_coding_fuzzer/src/round_trip.rs @@ -0,0 +1,40 @@ +use polkadot_erasure_coding::*; +use primitives::v1::{AvailableData, BlockData, PoV}; +use std::sync::Arc; +use honggfuzz::fuzz; + + +fn main(){ + loop { + fuzz!(|data: &[u8]| { + let pov_block = PoV { + block_data: BlockData(data.iter().cloned().collect()), + }; + + let available_data = AvailableData { + pov: Arc::new(pov_block), + validation_data: Default::default(), + }; + let chunks = obtain_chunks_v1( + 10, + &available_data, + ).unwrap(); + + assert_eq!(chunks.len(), 10); + + // any 4 chunks should work. + let reconstructed: AvailableData = reconstruct_v1( + 10, + [ + (&*chunks[1], 1), + (&*chunks[4], 4), + (&*chunks[6], 6), + (&*chunks[9], 9), + ].iter().cloned(), + ).unwrap(); + + assert_eq!(reconstructed, available_data); + println!("{:?}", reconstructed); + }); + } +} -- GitLab From 0d3218665039dc0a5935964299cd4333026423d5 Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Thu, 26 Nov 2020 20:17:16 +0100 Subject: [PATCH 054/203] Fix check_runtime.sh (#2020) --- scripts/gitlab/check_runtime.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/gitlab/check_runtime.sh b/scripts/gitlab/check_runtime.sh index 7b2a4a1faf..21dfc74be9 100755 --- a/scripts/gitlab/check_runtime.sh +++ b/scripts/gitlab/check_runtime.sh @@ -24,7 +24,10 @@ SUBSTRATE_REPO_CARGO="git\+${SUBSTRATE_REPO}" SUBSTRATE_VERSIONS_FILE="bin/node/runtime/src/lib.rs" # figure out the latest release tag -LATEST_TAG="$(git tag -l | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)" +boldprint "make sure we have all tags (including those from the release branch)" +git fetch --depth="${GIT_DEPTH:-100}" origin release +git fetch --depth="${GIT_DEPTH:-100}" origin 'refs/tags/*:refs/tags/*' +LATEST_TAG="$(git tag -l | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+-?[0-9]*$' | sort -V | tail -n 1)" boldprint "latest release tag ${LATEST_TAG}" boldprint "latest 10 commits of ${CI_COMMIT_REF_NAME}" @@ -33,6 +36,7 @@ git --no-pager log --graph --oneline --decorate=short -n 10 boldprint "make sure the master branch is available in shallow clones" git fetch --depth="${GIT_DEPTH:-100}" origin master + runtimes=( "kusama" "polkadot" -- GitLab From 1a1f858f8693a6ca07807fd2fa9faf93e7c37101 Mon Sep 17 00:00:00 2001 From: yaanhyy Date: Fri, 27 Nov 2020 16:45:31 +0800 Subject: [PATCH 055/203] add module to features/std (#2024) Co-authored-by: hongyuanyang --- runtime/common/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 232829f8a0..025c0a65a2 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -80,6 +80,7 @@ std = [ "pallet-timestamp/std", "pallet-vesting/std", "pallet-transaction-payment/std", + "runtime-parachains/std", ] runtime-benchmarks = [ "libsecp256k1/hmac", -- GitLab From fff4635925c12c80717a524367687fcc304bcb13 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 27 Nov 2020 11:39:42 -0500 Subject: [PATCH 056/203] Move erasure root out of candidate commitments and into descriptor (#2010) * guide: move erasure-root to candidate descriptor * primitives: move erasure root to descriptor * guide: unify candidate commitments and validation outputs * primitives: unify validation outputs and candidate commitments * parachains-runtime: fix fallout * runtimes: fix fallout * collation generation: fix fallout * fix stray reference in primitives * fix fallout in node-primitives * fix remaining fallout in collation generation * fix fallout in candidate validation * fix fallout in runtime API subsystem * fix fallout in subsystem messages * fix fallout in candidate backing * fix fallout in availability distribution * don't clone * clone Co-authored-by: Sergei Shulepov --- node/collation-generation/src/lib.rs | 4 +- node/core/backing/src/lib.rs | 128 ++++++++---------- node/core/candidate-validation/src/lib.rs | 4 +- node/core/runtime-api/src/lib.rs | 4 +- .../availability-distribution/src/lib.rs | 2 +- .../availability-distribution/src/tests.rs | 4 +- node/primitives/src/lib.rs | 4 +- node/subsystem/src/messages.rs | 2 +- primitives/src/v1.rs | 24 +--- .../implementers-guide/src/types/candidate.md | 29 +--- .../src/types/overseer-protocol.md | 2 +- runtime/kusama/src/lib.rs | 2 +- runtime/parachains/src/inclusion.rs | 2 +- runtime/parachains/src/runtime_api_impl/v1.rs | 2 +- runtime/polkadot/src/lib.rs | 2 +- runtime/rococo/src/lib.rs | 2 +- runtime/test-runtime/src/lib.rs | 2 +- runtime/westend/src/lib.rs | 2 +- 18 files changed, 86 insertions(+), 135 deletions(-) diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index b948f3d3c8..2c430c17ef 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -284,7 +284,6 @@ async fn handle_new_activations( horizontal_messages: collation.horizontal_messages, new_validation_code: collation.new_validation_code, head_data: collation.head_data, - erasure_root, processed_downward_messages: collation.processed_downward_messages, hrmp_watermark: collation.hrmp_watermark, }; @@ -298,6 +297,7 @@ async fn handle_new_activations( collator: task_config.key.public(), persisted_validation_data_hash, pov_hash, + erasure_root, }, }; @@ -702,6 +702,7 @@ mod tests { collator: config.key.public(), persisted_validation_data_hash: expect_validation_data_hash, pov_hash: expect_pov_hash, + erasure_root: Default::default(), // this isn't something we're checking right now }; assert_eq!(sent_messages.len(), 1); @@ -728,6 +729,7 @@ mod tests { let expect_descriptor = { let mut expect_descriptor = expect_descriptor; expect_descriptor.signature = descriptor.signature.clone(); + expect_descriptor.erasure_root = descriptor.erasure_root.clone(); expect_descriptor }; assert_eq!(descriptor, &expect_descriptor); diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 11736be9b0..91ffbed9e5 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -31,8 +31,7 @@ use polkadot_primitives::v1::{ CommittedCandidateReceipt, BackedCandidate, Id as ParaId, ValidatorId, ValidatorIndex, SigningContext, PoV, CandidateHash, CandidateDescriptor, AvailableData, ValidatorSignature, Hash, CandidateReceipt, - CandidateCommitments, CoreState, CoreIndex, CollatorId, ValidationOutputs, - ValidityAttestation, + CoreState, CoreIndex, CollatorId, ValidityAttestation, }; use polkadot_node_primitives::{ FromTableMisbehavior, Statement, SignedFullStatement, MisbehaviorReport, ValidationResult, @@ -229,6 +228,8 @@ impl TryFrom for FromJob { } } +struct InvalidErasureRoot; + // It looks like it's not possible to do an `impl From` given the current state of // the code. So this does the necessary conversion. fn primitive_statement_to_table(s: &SignedFullStatement) -> TableSignedStatement { @@ -347,36 +348,38 @@ impl CandidateBackingJob { let candidate_hash = candidate.hash(); let statement = match valid { - ValidationResult::Valid(outputs, validation_data) => { + ValidationResult::Valid(commitments, validation_data) => { // make PoV available for later distribution. Send data to the availability // store to keep. Sign and dispatch `valid` statement to network if we // have not seconded the given candidate. // // If the commitments hash produced by validation is not the same as given by // the collator, do not make available and report the collator. - let commitments_check = self.make_pov_available( - pov, - candidate_hash, - validation_data, - outputs, - |commitments| if commitments.hash() == candidate.commitments_hash { - Ok(CommittedCandidateReceipt { - descriptor: candidate.descriptor().clone(), - commitments, - }) - } else { - Err(()) - }, - ).await?; - - match commitments_check { - Ok(candidate) => { - self.issued_statements.insert(candidate_hash); - Some(Statement::Seconded(candidate)) - } - Err(()) => { - self.issue_candidate_invalid_message(candidate.clone()).await?; - None + if candidate.commitments_hash != commitments.hash() { + self.issue_candidate_invalid_message(candidate.clone()).await?; + None + } else { + let erasure_valid = self.make_pov_available( + pov, + candidate_hash, + validation_data, + candidate.descriptor.erasure_root, + ).await?; + + match erasure_valid { + Ok(()) => { + let candidate = CommittedCandidateReceipt { + descriptor: candidate.descriptor().clone(), + commitments, + }; + + self.issued_statements.insert(candidate_hash); + Some(Statement::Seconded(candidate)) + } + Err(InvalidErasureRoot) => { + self.issue_candidate_invalid_message(candidate.clone()).await?; + None + } } } } @@ -566,6 +569,7 @@ impl CandidateBackingJob { // and not just those things that the function uses. let candidate = self.table.get_candidate(&candidate_hash).ok_or(Error::CandidateNotFound)?; let expected_commitments = candidate.commitments.clone(); + let expected_erasure_root = candidate.descriptor.erasure_root; let descriptor = candidate.descriptor().clone(); @@ -585,23 +589,22 @@ impl CandidateBackingJob { let v = self.request_candidate_validation(descriptor, pov.clone()).await?; let statement = match v { - ValidationResult::Valid(outputs, validation_data) => { + ValidationResult::Valid(commitments, validation_data) => { // If validation produces a new set of commitments, we vote the candidate as invalid. - let commitments_check = self.make_pov_available( - pov, - candidate_hash, - validation_data, - outputs, - |commitments| if commitments == expected_commitments { - Ok(()) - } else { - Err(()) + if commitments != expected_commitments { + Statement::Invalid(candidate_hash) + } else { + let erasure_valid = self.make_pov_available( + pov, + candidate_hash, + validation_data, + expected_erasure_root, + ).await?; + + match erasure_valid { + Ok(()) => Statement::Valid(candidate_hash), + Err(InvalidErasureRoot) => Statement::Invalid(candidate_hash), } - ).await?; - - match commitments_check { - Ok(()) => Statement::Valid(candidate_hash), - Err(()) => Statement::Invalid(candidate_hash), } } ValidationResult::Invalid(_reason) => { @@ -733,18 +736,16 @@ impl CandidateBackingJob { // Make a `PoV` available. // - // This calls an inspection function before making the PoV available for any last checks - // that need to be done. If the inspection function returns an error, this function returns - // early without making the PoV available. - #[tracing::instrument(level = "trace", skip(self, pov, with_commitments), fields(subsystem = LOG_TARGET))] - async fn make_pov_available( + // This will compute the erasure root internally and compare it to the expected erasure root. + // This returns `Err()` iff there is an internal error. Otherwise, it returns either `Ok(Ok(()))` or `Ok(Err(_))`. + #[tracing::instrument(level = "trace", skip(self, pov), fields(subsystem = LOG_TARGET))] + async fn make_pov_available( &mut self, pov: Arc, candidate_hash: CandidateHash, validation_data: polkadot_primitives::v1::PersistedValidationData, - outputs: ValidationOutputs, - with_commitments: impl FnOnce(CandidateCommitments) -> Result, - ) -> Result, Error> { + expected_erasure_root: Hash, + ) -> Result, Error> { let available_data = AvailableData { pov, validation_data, @@ -758,20 +759,9 @@ impl CandidateBackingJob { let branches = erasure_coding::branches(chunks.as_ref()); let erasure_root = branches.root(); - let commitments = CandidateCommitments { - upward_messages: outputs.upward_messages, - horizontal_messages: outputs.horizontal_messages, - erasure_root, - new_validation_code: outputs.new_validation_code, - head_data: outputs.head_data, - processed_downward_messages: outputs.processed_downward_messages, - hrmp_watermark: outputs.hrmp_watermark, - }; - - let res = match with_commitments(commitments) { - Ok(x) => x, - Err(e) => return Ok(Err(e)), - }; + if erasure_root != expected_erasure_root { + return Ok(Err(InvalidErasureRoot)); + } self.store_available_data( self.table_context.validator.as_ref().map(|v| v.index()), @@ -780,7 +770,7 @@ impl CandidateBackingJob { available_data, ).await?; - Ok(Ok(res)) + Ok(Ok(())) } async fn distribute_signed_statement(&mut self, s: SignedFullStatement) -> Result<(), Error> { @@ -1183,11 +1173,11 @@ mod tests { para_id: self.para_id, pov_hash: self.pov_hash, relay_parent: self.relay_parent, + erasure_root: self.erasure_root, ..Default::default() }, commitments: CandidateCommitments { head_data: self.head_data, - erasure_root: self.erasure_root, ..Default::default() }, } @@ -1290,7 +1280,7 @@ mod tests { ) ) if pov == pov && &c == candidate.descriptor() => { tx.send(Ok( - ValidationResult::Valid(ValidationOutputs { + ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), horizontal_messages: Vec::new(), upward_messages: Vec::new(), @@ -1428,7 +1418,7 @@ mod tests { ) ) if pov == pov && &c == candidate_a.descriptor() => { tx.send(Ok( - ValidationResult::Valid(ValidationOutputs { + ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), upward_messages: Vec::new(), horizontal_messages: Vec::new(), @@ -1579,7 +1569,7 @@ mod tests { ) ) if pov == pov && &c == candidate_a.descriptor() => { tx.send(Ok( - ValidationResult::Valid(ValidationOutputs { + ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), upward_messages: Vec::new(), horizontal_messages: Vec::new(), @@ -1764,7 +1754,7 @@ mod tests { ) ) if pov == pov && &c == candidate_b.descriptor() => { tx.send(Ok( - ValidationResult::Valid(ValidationOutputs { + ValidationResult::Valid(CandidateCommitments { head_data: expected_head_data.clone(), upward_messages: Vec::new(), horizontal_messages: Vec::new(), diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 103e27ecd8..3c64f962c2 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -36,7 +36,7 @@ use polkadot_subsystem::errors::RuntimeApiError; use polkadot_node_primitives::{ValidationResult, InvalidCandidate}; use polkadot_primitives::v1::{ ValidationCode, PoV, CandidateDescriptor, PersistedValidationData, - OccupiedCoreAssumption, Hash, ValidationOutputs, + OccupiedCoreAssumption, Hash, CandidateCommitments, }; use polkadot_parachain::wasm_executor::{ self, IsolationStrategy, ValidationError, InvalidCandidate as WasmInvalidCandidate @@ -458,7 +458,7 @@ fn validate_candidate_exhaustive( Ok(ValidationResult::Invalid(InvalidCandidate::ExecutionError(e.to_string()))), Err(ValidationError::Internal(e)) => Err(ValidationFailed(e.to_string())), Ok(res) => { - let outputs = ValidationOutputs { + let outputs = CandidateCommitments { head_data: res.head_data, upward_messages: res.upward_messages, horizontal_messages: res.horizontal_messages, diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index f9e40a40ac..5fb8ac73cb 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -276,7 +276,7 @@ mod tests { fn check_validation_outputs( &self, para_id: ParaId, - _commitments: polkadot_primitives::v1::ValidationOutputs, + _commitments: polkadot_primitives::v1::CandidateCommitments, ) -> bool { self.validation_outputs_results .get(¶_id) @@ -498,7 +498,7 @@ mod tests { let relay_parent = [1; 32].into(); let para_a = 5.into(); let para_b = 6.into(); - let commitments = polkadot_primitives::v1::ValidationOutputs::default(); + let commitments = polkadot_primitives::v1::CandidateCommitments::default(); runtime_api.validation_outputs_results.insert(para_a, false); runtime_api.validation_outputs_results.insert(para_b, true); diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 493d5bfbfc..4ca045a7bc 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -627,7 +627,7 @@ where }; // check the merkle proof - let root = &live_candidate.commitments.erasure_root; + let root = &live_candidate.descriptor.erasure_root; let anticipated_hash = if let Ok(hash) = branch_hash( root, &message.erasure_chunk.proof, diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index a7309043b0..b55c7a2241 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -290,11 +290,11 @@ impl TestCandidateBuilder { para_id: self.para_id, pov_hash: self.pov_hash, relay_parent: self.relay_parent, + erasure_root: self.erasure_root, ..Default::default() }, commitments: CandidateCommitments { head_data: self.head_data, - erasure_root: self.erasure_root, ..Default::default() }, } @@ -323,7 +323,7 @@ fn helper_integrity() { let message = make_valid_availability_gossip(&test_state, candidate.hash(), 2, pov_block.clone()); - let root = dbg!(&candidate.commitments.erasure_root); + let root = dbg!(&candidate.descriptor.erasure_root); let anticipated_hash = branch_hash( root, diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index 0b2262da93..0ea2799daa 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -28,7 +28,7 @@ use polkadot_primitives::v1::{ Hash, CommittedCandidateReceipt, CandidateReceipt, CompactStatement, EncodeAs, Signed, SigningContext, ValidatorIndex, ValidatorId, UpwardMessage, ValidationCode, PersistedValidationData, ValidationData, - HeadData, PoV, CollatorPair, Id as ParaId, OutboundHrmpMessage, ValidationOutputs, CandidateHash, + HeadData, PoV, CollatorPair, Id as ParaId, OutboundHrmpMessage, CandidateCommitments, CandidateHash, }; use polkadot_statement_table::{ generic::{ @@ -144,7 +144,7 @@ pub enum InvalidCandidate { pub enum ValidationResult { /// Candidate is valid. The validation process yields these outputs and the persisted validation /// data used to form inputs. - Valid(ValidationOutputs, PersistedValidationData), + Valid(CandidateCommitments, PersistedValidationData), /// Candidate is invalid. Invalid(InvalidCandidate), } diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index 979364b13c..eef51fe47a 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -406,7 +406,7 @@ pub enum RuntimeApiRequest { /// Sends back `true` if the validation outputs pass all acceptance criteria checks. CheckValidationOutputs( ParaId, - polkadot_primitives::v1::ValidationOutputs, + polkadot_primitives::v1::CandidateCommitments, RuntimeApiSender, ), /// Get the session index that a child of the block will have. diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 9644c65ffc..947c595036 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -142,6 +142,8 @@ pub struct CandidateDescriptor { pub persisted_validation_data_hash: Hash, /// The blake2-256 hash of the pov. pub pov_hash: Hash, + /// The root of a block's erasure encoding Merkle tree. + pub erasure_root: Hash, /// Signature on blake2-256 of components of this receipt: /// The parachain index, the relay parent, the validation data hash, and the pov_hash. pub signature: CollatorSignature, @@ -341,24 +343,6 @@ pub struct TransientValidationData { pub dmq_length: u32, } -/// Outputs of validating a candidate. -#[derive(Encode, Decode)] -#[cfg_attr(feature = "std", derive(Clone, Debug, Default))] -pub struct ValidationOutputs { - /// The head-data produced by validation. - pub head_data: HeadData, - /// Upward messages to the relay chain. - pub upward_messages: Vec, - /// The horizontal messages sent by the parachain. - pub horizontal_messages: Vec>, - /// The new validation code submitted by the execution, if any. - pub new_validation_code: Option, - /// The number of messages processed from the DMQ. - pub processed_downward_messages: u32, - /// The mark which specifies the block number up to which all inbound HRMP messages are processed. - pub hrmp_watermark: BlockNumber, -} - /// Commitments made in a `CandidateReceipt`. Many of these are outputs of validation. #[derive(PartialEq, Eq, Clone, Encode, Decode)] #[cfg_attr(feature = "std", derive(Debug, Default, Hash))] @@ -367,8 +351,6 @@ pub struct CandidateCommitments { pub upward_messages: Vec, /// Horizontal messages sent by the parachain. pub horizontal_messages: Vec>, - /// The root of a block's erasure encoding Merkle tree. - pub erasure_root: Hash, /// New validation code. pub new_validation_code: Option, /// The head-data produced as a result of execution. @@ -761,7 +743,7 @@ sp_api::decl_runtime_apis! { -> Option>; /// Checks if the given validation outputs pass the acceptance criteria. - fn check_validation_outputs(para_id: Id, outputs: ValidationOutputs) -> bool; + fn check_validation_outputs(para_id: Id, outputs: CandidateCommitments) -> bool; /// Returns the session index expected at a child of the block. /// diff --git a/roadmap/implementers-guide/src/types/candidate.md b/roadmap/implementers-guide/src/types/candidate.md index 566fa7f9e7..86c80153f3 100644 --- a/roadmap/implementers-guide/src/types/candidate.md +++ b/roadmap/implementers-guide/src/types/candidate.md @@ -80,6 +80,8 @@ struct CandidateDescriptor { persisted_validation_data_hash: Hash, /// The blake2-256 hash of the pov-block. pov_hash: Hash, + /// The root of a block's erasure encoding Merkle tree. + erasure_root: Hash, /// Signature on blake2-256 of components of this receipt: /// The parachain index, the relay parent, the validation data hash, and the pov_hash. signature: CollatorSignature, @@ -251,8 +253,6 @@ struct CandidateCommitments { horizontal_messages: Vec, /// Messages destined to be interpreted by the Relay chain itself. upward_messages: Vec, - /// The root of a block's erasure encoding Merkle tree. - erasure_root: Hash, /// New validation code. new_validation_code: Option, /// The head-data produced as a result of execution. @@ -275,27 +275,4 @@ struct SigningContext { /// The session index this signature is in the context of. session_index: SessionIndex, } -``` - -## Validation Outputs - -This struct encapsulates the outputs of candidate validation. - -```rust -struct ValidationOutputs { - /// The head-data produced by validation. - head_data: HeadData, - /// The validation data, persisted. - validation_data: PersistedValidationData, - /// Messages directed to other paras routed via the relay chain. - horizontal_messages: Vec, - /// Upwards messages to the relay chain. - upwards_messages: Vec, - /// The new validation code submitted by the execution, if any. - new_validation_code: Option, - /// The number of messages processed from the DMQ. - processed_downward_messages: u32, - /// The mark which specifies the block number up to which all inbound HRMP messages are processed. - hrmp_watermark: BlockNumber, -} -``` +``` \ No newline at end of file diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 942d597533..77a94891f2 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -503,7 +503,7 @@ Various modules request that the [Candidate Validation subsystem](../node/utilit enum ValidationResult { /// Candidate is valid, and here are the outputs and the validation data used to form inputs. /// In practice, this should be a shared type so that validation caching can be done. - Valid(ValidationOutputs, PersistedValidationData), + Valid(CandidateCommitments, PersistedValidationData), /// Candidate is invalid. Invalid, } diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 0aa1a4cadb..14b6af0394 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1083,7 +1083,7 @@ sp_api::impl_runtime_apis! { } fn check_validation_outputs( _: Id, - _: primitives::v1::ValidationOutputs, + _: primitives::v1::CandidateCommitments, ) -> bool { false } diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 8bca04f4f4..39a2cf71ce 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -562,7 +562,7 @@ impl Module { /// Run the acceptance criteria checks on the given candidate commitments. pub(crate) fn check_validation_outputs( para_id: ParaId, - validation_outputs: primitives::v1::ValidationOutputs, + validation_outputs: primitives::v1::CandidateCommitments, ) -> bool { if let Err(err) = CandidateCheckContext::::new().check_validation_outputs( para_id, diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index abecbbaeb1..8b7fe7331d 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -221,7 +221,7 @@ pub fn persisted_validation_data( /// Implementation for the `check_validation_outputs` function of the runtime API. pub fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v1::ValidationOutputs, + outputs: primitives::v1::CandidateCommitments, ) -> bool { >::check_validation_outputs(para_id, outputs) } diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 361f5240ff..a91fdbda77 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -1078,7 +1078,7 @@ sp_api::impl_runtime_apis! { None } - fn check_validation_outputs(_: Id, _: primitives::v1::ValidationOutputs) -> bool { + fn check_validation_outputs(_: Id, _: primitives::v1::CandidateCommitments) -> bool { false } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 2cc0a83398..d008463145 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -657,7 +657,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: Id, - outputs: primitives::v1::ValidationOutputs, + outputs: primitives::v1::CandidateCommitments, ) -> bool { runtime_api_impl::check_validation_outputs::(para_id, outputs) } diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index abfb734ccd..aa20079cc4 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -650,7 +650,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( para_id: ParaId, - outputs: primitives::v1::ValidationOutputs, + outputs: primitives::v1::CandidateCommitments, ) -> bool { runtime_impl::check_validation_outputs::(para_id, outputs) } diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 1b79cc69ed..92151ce62f 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -831,7 +831,7 @@ sp_api::impl_runtime_apis! { fn check_validation_outputs( _: Id, - _: primitives::v1::ValidationOutputs + _: primitives::v1::CandidateCommitments ) -> bool { false } -- GitLab From 2d4ee353904d052dba5cbc3b3e7724939e870de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Fri, 27 Nov 2020 18:39:22 +0000 Subject: [PATCH 057/203] proposer: guard all provisioner data work with timeout (#2026) --- node/core/proposer/src/lib.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index 813d937a70..48971ad074 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -141,20 +141,23 @@ where let mut overseer = self.overseer.clone(); let parent_header_hash = self.parent_header_hash.clone(); - let (sender, receiver) = futures::channel::oneshot::channel(); + let pid = async { + let (sender, receiver) = futures::channel::oneshot::channel(); + overseer.wait_for_activation(parent_header_hash, sender).await; + receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)??; - overseer.wait_for_activation(parent_header_hash, sender).await; - receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)??; + let (sender, receiver) = futures::channel::oneshot::channel(); + overseer.send_msg(AllMessages::Provisioner( + ProvisionerMessage::RequestInherentData(parent_header_hash, sender), + )).await; - let (sender, receiver) = futures::channel::oneshot::channel(); - overseer.send_msg(AllMessages::Provisioner( - ProvisionerMessage::RequestInherentData(parent_header_hash, sender), - )).await; + receiver.await.map_err(|_| Error::ClosedChannelAwaitingInherentData) + }; let mut timeout = futures_timer::Delay::new(PROPOSE_TIMEOUT).fuse(); select! { - pid = receiver.fuse() => pid.map_err(|_| Error::ClosedChannelAwaitingInherentData), + pid = pid.fuse() => pid, _ = timeout => Err(Error::Timeout), } } -- GitLab From 804e5187990cf3fbce29cbb523d1fd343a707f9e Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Fri, 27 Nov 2020 22:49:00 +0100 Subject: [PATCH 058/203] erasure-coding: do not panic on 1 validator (#2022) * erasure-coding: do not panic on 1 validator * tabify fuzz tests * remove num_validators length check * remove unused import * move erasure_coding_fuzzer to fuzzer * change the authors to admit (at) parity.io * Apply suggestions from code review Co-authored-by: Sergei Shulepov Co-authored-by: Sergei Shulepov --- .../erasure_coding_fuzzer/src/reconstruct.rs | 20 ---------- .../erasure_coding_fuzzer/src/round_trip.rs | 40 ------------------- .../Cargo.lock | 0 .../Cargo.toml | 2 +- erasure-coding/fuzzer/src/reconstruct.rs | 16 ++++++++ erasure-coding/fuzzer/src/round_trip.rs | 40 +++++++++++++++++++ erasure-coding/src/lib.rs | 24 ++++++----- 7 files changed, 72 insertions(+), 70 deletions(-) delete mode 100644 erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs delete mode 100644 erasure-coding/erasure_coding_fuzzer/src/round_trip.rs rename erasure-coding/{erasure_coding_fuzzer => fuzzer}/Cargo.lock (100%) rename erasure-coding/{erasure_coding_fuzzer => fuzzer}/Cargo.toml (87%) create mode 100644 erasure-coding/fuzzer/src/reconstruct.rs create mode 100644 erasure-coding/fuzzer/src/round_trip.rs diff --git a/erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs b/erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs deleted file mode 100644 index 6c8d41306b..0000000000 --- a/erasure-coding/erasure_coding_fuzzer/src/reconstruct.rs +++ /dev/null @@ -1,20 +0,0 @@ -use polkadot_erasure_coding::*; -use primitives::v1::AvailableData; -use std::sync::Arc; -use honggfuzz::fuzz; - -fn main(){ - loop { - fuzz!(|data: (usize, Vec<(Vec, usize)>)| { - let (num_validators, chunk_input) = data; - if num_validators <= 1 || num_validators > 10_000 { - return; - } - let reconstructed: Result = reconstruct_v1( - num_validators, - chunk_input.iter().map(|t| (&*t.0, t.1)).collect::>() - ); - println!("reconstructed {:?}", reconstructed); - }); - } -} diff --git a/erasure-coding/erasure_coding_fuzzer/src/round_trip.rs b/erasure-coding/erasure_coding_fuzzer/src/round_trip.rs deleted file mode 100644 index 39766c7fbc..0000000000 --- a/erasure-coding/erasure_coding_fuzzer/src/round_trip.rs +++ /dev/null @@ -1,40 +0,0 @@ -use polkadot_erasure_coding::*; -use primitives::v1::{AvailableData, BlockData, PoV}; -use std::sync::Arc; -use honggfuzz::fuzz; - - -fn main(){ - loop { - fuzz!(|data: &[u8]| { - let pov_block = PoV { - block_data: BlockData(data.iter().cloned().collect()), - }; - - let available_data = AvailableData { - pov: Arc::new(pov_block), - validation_data: Default::default(), - }; - let chunks = obtain_chunks_v1( - 10, - &available_data, - ).unwrap(); - - assert_eq!(chunks.len(), 10); - - // any 4 chunks should work. - let reconstructed: AvailableData = reconstruct_v1( - 10, - [ - (&*chunks[1], 1), - (&*chunks[4], 4), - (&*chunks[6], 6), - (&*chunks[9], 9), - ].iter().cloned(), - ).unwrap(); - - assert_eq!(reconstructed, available_data); - println!("{:?}", reconstructed); - }); - } -} diff --git a/erasure-coding/erasure_coding_fuzzer/Cargo.lock b/erasure-coding/fuzzer/Cargo.lock similarity index 100% rename from erasure-coding/erasure_coding_fuzzer/Cargo.lock rename to erasure-coding/fuzzer/Cargo.lock diff --git a/erasure-coding/erasure_coding_fuzzer/Cargo.toml b/erasure-coding/fuzzer/Cargo.toml similarity index 87% rename from erasure-coding/erasure_coding_fuzzer/Cargo.toml rename to erasure-coding/fuzzer/Cargo.toml index 5117be38c1..e844e9ad94 100644 --- a/erasure-coding/erasure_coding_fuzzer/Cargo.toml +++ b/erasure-coding/fuzzer/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "erasure_coding_fuzzer" version = "0.1.0" -authors = ["Vincent Ulitzsch "] +authors = ["Parity Technologies "] edition = "2018" [dependencies] diff --git a/erasure-coding/fuzzer/src/reconstruct.rs b/erasure-coding/fuzzer/src/reconstruct.rs new file mode 100644 index 0000000000..694953e58d --- /dev/null +++ b/erasure-coding/fuzzer/src/reconstruct.rs @@ -0,0 +1,16 @@ +use polkadot_erasure_coding::*; +use primitives::v1::AvailableData; +use honggfuzz::fuzz; + +fn main() { + loop { + fuzz!(|data: (usize, Vec<(Vec, usize)>)| { + let (num_validators, chunk_input) = data; + let reconstructed: Result = reconstruct_v1( + num_validators, + chunk_input.iter().map(|t| (&*t.0, t.1)).collect::>() + ); + println!("reconstructed {:?}", reconstructed); + }); + } +} diff --git a/erasure-coding/fuzzer/src/round_trip.rs b/erasure-coding/fuzzer/src/round_trip.rs new file mode 100644 index 0000000000..141e86073b --- /dev/null +++ b/erasure-coding/fuzzer/src/round_trip.rs @@ -0,0 +1,40 @@ +use polkadot_erasure_coding::*; +use primitives::v1::{AvailableData, BlockData, PoV}; +use std::sync::Arc; +use honggfuzz::fuzz; + + +fn main() { + loop { + fuzz!(|data: &[u8]| { + let pov_block = PoV { + block_data: BlockData(data.iter().cloned().collect()), + }; + + let available_data = AvailableData { + pov: Arc::new(pov_block), + validation_data: Default::default(), + }; + let chunks = obtain_chunks_v1( + 10, + &available_data, + ).unwrap(); + + assert_eq!(chunks.len(), 10); + + // any 4 chunks should work. + let reconstructed: AvailableData = reconstruct_v1( + 10, + [ + (&*chunks[1], 1), + (&*chunks[4], 4), + (&*chunks[6], 6), + (&*chunks[9], 9), + ].iter().cloned(), + ).unwrap(); + + assert_eq!(reconstructed, available_data); + println!("{:?}", reconstructed); + }); + } +} diff --git a/erasure-coding/src/lib.rs b/erasure-coding/src/lib.rs index 199a7436a5..370c228e34 100644 --- a/erasure-coding/src/lib.rs +++ b/erasure-coding/src/lib.rs @@ -45,9 +45,9 @@ pub enum Error { /// Returned when there are too many validators. #[error("There are too many validators")] TooManyValidators, - /// Cannot encode something for no validators - #[error("Validator set is empty")] - EmptyValidators, + /// Cannot encode something for zero or one validator + #[error("Expected at least 2 validators")] + NotEnoughValidators, /// Cannot reconstruct: wrong number of validators. #[error("Validator count mismatches between encoding and decoding")] WrongValidatorCount, @@ -122,7 +122,7 @@ impl CodeParams { fn code_params(n_validators: usize) -> Result { if n_validators > MAX_VALIDATORS { return Err(Error::TooManyValidators) } - if n_validators == 0 { return Err(Error::EmptyValidators) } + if n_validators <= 1 { return Err(Error::NotEnoughValidators) } let n_faulty = n_validators.saturating_sub(1) / 3; let n_good = n_validators - n_faulty; @@ -406,12 +406,9 @@ mod tests { #[test] fn test_code_params() { - assert_eq!(code_params(0), Err(Error::EmptyValidators)); + assert_eq!(code_params(0), Err(Error::NotEnoughValidators)); - assert_eq!(code_params(1), Ok(CodeParams { - data_shards: 1, - parity_shards: 0, - })); + assert_eq!(code_params(1), Err(Error::NotEnoughValidators)); assert_eq!(code_params(2), Ok(CodeParams { data_shards: 1, @@ -487,6 +484,15 @@ mod tests { assert_eq!(reconstructed, available_data); } + #[test] + fn reconstruct_does_not_panic_on_low_validator_count() { + let reconstructed = reconstruct_v1( + 1, + [].iter().cloned(), + ); + assert_eq!(reconstructed, Err(Error::NotEnoughValidators)); + } + #[test] fn construct_valid_branches() { let pov_block = PoVBlock { -- GitLab From d6e8115fc9fd1d33641daf443d287a236f42abcf Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sat, 28 Nov 2020 13:35:46 -0500 Subject: [PATCH 059/203] change approval voting counting procedure (#1972) * change approval voting counting procedure * language * Update roadmap/implementers-guide/src/node/approval/approval-voting.md Co-authored-by: Peter Goodspeed-Niklaus * improve language * time-shifting * tweak time-shifting * expand * typo * tweaks to ensure we always get woken up * move timing check into `tranches_to_approve` Co-authored-by: Peter Goodspeed-Niklaus --- .../src/node/approval/approval-voting.md | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/roadmap/implementers-guide/src/node/approval/approval-voting.md b/roadmap/implementers-guide/src/node/approval/approval-voting.md index be87939f30..cb722b8aae 100644 --- a/roadmap/implementers-guide/src/node/approval/approval-voting.md +++ b/roadmap/implementers-guide/src/node/approval/approval-voting.md @@ -201,6 +201,9 @@ On receiving an `ApprovedAncestor(Hash, BlockNumber, response_channel)`: ### Utility +#### `tranche_now(slot_number, time) -> DelayTranche` + * Convert `time.saturating_sub(slot_number.to_time())` to a delay tranches value + #### `import_checked_assignment` * Load the candidate in question and access the `approval_entry` for the block hash the cert references. * Ignore if we already observe the validator as having been assigned. @@ -208,36 +211,59 @@ On receiving an `ApprovedAncestor(Hash, BlockNumber, response_channel)`: * Ensure the validator index is not present in the approval entry already. * Create a tranche entry for the delay tranche in the approval entry and note the assignment within it. * Note the candidate index within the approval entry. + * Schedule a wakeup with `next_wakeup`. #### `import_checked_approval(BlockEntry, CandidateEntry, ValidatorIndex)` * Set the corresponding bit of the `approvals` bitfield in the `CandidateEntry` to `1`. If already `1`, return. * For each `ApprovalEntry` in the `CandidateEntry` (typically only 1), check whether the validator is assigned as a checker. - * If so, set `n_tranches = tranches_to_approve(approval_entry)`. + * If so, set `n_tranches = tranches_to_approve(approval_entry, tranche_now(block.slot, now()))`. * If `check_approval(block_entry, approval_entry, n_tranches)` is true, set the corresponding bit in the `block_entry.approved_bitfield`. -#### `tranches_to_approve(approval_entry) -> tranches` - * Determine the amount of tranches `n_tranches` our view of the protocol requires of this approval entry +#### `tranches_to_approve(approval_entry, tranche_now) -> RequiredTranches` + +```rust +enum RequiredTranches { + // All validators appear to be required, based on tranches already taken and remaining no-shows. + All, + // More tranches required - We're awaiting more assignments. The given `DelayTranche` indicates the + // upper bound of tranches that should broadcast based on the last no-show. + Pending(DelayTranche), + // An exact number of required tranches and a number of no-shows. This indicates that the amount of `needed_approvals` are assigned and additionally all no-shows are covered. + Exact(DelayTranche, usize), +} +``` + + * Determine the amount of tranches `n_tranches` our view of the protocol requires of this approval entry. + * Ignore all tranches beyond `tranche_now`. * First, take tranches until we have at least `session_info.needed_approvals`. Call the number of tranches taken `k` - * Then, count no-shows in tranches `0..k`. For each no-show, we require another checker. Take new tranches until each no-show is covered, so now we've taken `l` tranches. e.g. if there are 2 no-shows, we might only need to take 1 additional tranche with >= 2 assignments. Or we might need to take 3 tranches, where one is empty and the other two have 1 assignment each. - * Count no-shows in tranches `k..l` and for each of those, take tranches until all no-shows are covered. Repeat so on until either - * We run out of tranches to take, having not received any assignments past a certain point. In this case we set `n_tranches` to a special value `ALL` which indicates that new assignments are needed. - * All no-shows are covered. Set `n_tranches` to the number of tranches taken + * Then, count no-shows in tranches `0..k`. For each no-show, we require another non-empty tranche. Take another non-empty tranche for each no-show, so now we've taken `l = k + j` tranches, where `j` is at least the number of no-shows within tranches `0..k`. + * Count no-shows in tranches `k..l` and for each of those, take another non-empty tranche for each no-show. Repeat so on until either + * We run out of tranches to take, having not received any assignments past a certain point. In this case we set `n_tranches` to a special value `RequiredTranches::Pending(last_taken_tranche + uncovered_no_shows)` which indicates that new assignments are needed. `uncovered_no_shows` is the number of no-shows we have not yet covered with `last_taken_tranche`. + * All no-shows are covered by at least one non-empty tranche. Set `n_tranches` to the number of tranches taken and return `RequiredTranches::Exact(n_tranches)`. + * The amount of assignments in non-empty & taken tranches plus the amount of needed extras equals or exceeds the total number of validators for the approval entry, which can be obtained by measuring the bitfield. In this case we return a special value `RequiredTranches::All` indicating that all validators have effectively been assigned to check. * return `n_tranches` #### `check_approval(block_entry, approval_entry, n_tranches) -> bool` - * If `n_tranches` is ALL, return false - * Otherwise, if all validators in `n_tranches` have approved, return `true`. If any validator in these tranches has not yet approved but is not yet considered a no-show, return `false`. + * If `n_tranches` is `RequiredTranches::Pending`, return false + * If `n_tranches` is `RequiredTranches::All`, then we return `3 * n_approvals > 2 * n_validators`. + * If `n_tranches` is `RequiredTranches::Exact(tranche, no_shows), then we return whether all assigned validators up to `tranche` less `no_shows` have approved. e.g. if we had 5 tranches and 1 no-show, we would accept all validators in tranches 0..=5 except for 1 approving. In that example, we also accept all validators in tranches 0..=5 approving, but that would indicate that the `RequiredTranches` value was incorrectly constructed, so it is not realistic. If there are more missing approvals than there are no-shows, that indicates that there are some assignments which are not yet no-shows, but may become no-shows. #### `process_wakeup(relay_block, candidate_hash)` * Load the `BlockEntry` and `CandidateEntry` from disk. If either is not present, this may have lost a race with finality and can be ignored. Also load the `ApprovalEntry` for the block and candidate. - * Set `n_tranches = tranches_to_approve(approval_entry)` - * If `OurAssignment` has tranche `<= n_tranches`, the tranche is live according to our local clock (based against block slot), and we have not triggered the assignment already - * Import to `ApprovalEntry` + * Set `required = tranches_to_approve(approval_entry, tranche_now(block.slot, now()))` + * Determine if we should trigger our assignment. + * If we've already triggered or `OurAssignment` is `None`, we do not trigger. + * If `required` is `RequiredTranches::All`, then we trigger if `check_approval(block_entry, approval_entry, All)` is false. + * If `required` is `RequiredTranches::Pending(max), then we trigger if our assignment's tranche is less than or equal to `max`. + * If `required` is `RequiredTranches::Exact(tranche)` then we do not trigger, because this value indicates that no new assignments are needed at the moment. + * If we should trigger our assignment + * Import the assignment to the `ApprovalEntry` * Broadcast on network with an `ApprovalDistributionMessage::DistributeAssignment`. - * Kick off approval work with `launch_approval`. Note that if the candidate appears in multiple current blocks, we will launch approval for each block it appears in. It may make sense to shortcut around this with caching either at this level or on the level of the other subsystems invoked by that function. + * Kick off approval work with `launch_approval` * Schedule another wakeup based on `next_wakeup` #### `next_wakeup(approval_entry, candidate_entry)`: + * If the `approval_entry` is approved, this doesn't need to be woken up again. * Return the earlier of our next no-show timeout or the tranche of our assignment, if not yet triggered * Our next no-show timeout is computed by finding the earliest-received assignment within `n_tranches` for which we have not received an approval and adding `to_ticks(session_info.no_show_slots)` to it. -- GitLab From 9106ee2bc827a876e4b04de08a53ca30b702f642 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sat, 28 Nov 2020 15:12:43 -0500 Subject: [PATCH 060/203] allow jobs to spawn sub-tasks (#2030) * allow jobs to spawn sub-tasks * fix fallout in subsytems --- node/core/backing/src/lib.rs | 9 +++-- node/core/bitfield-signing/src/lib.rs | 10 ++--- node/core/candidate-selection/src/lib.rs | 10 ++--- node/core/provisioner/src/lib.rs | 10 ++--- node/subsystem-util/src/lib.rs | 49 +++++++++++++++++------- 5 files changed, 55 insertions(+), 33 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 91ffbed9e5..000c121c42 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -52,6 +52,7 @@ use polkadot_node_subsystem_util::{ request_from_runtime, Validator, delegated_subsystem, + FromJobCommand, metrics::{self, prometheus}, }; use statement_table::{ @@ -197,9 +198,9 @@ enum FromJob { StatementDistribution(StatementDistributionMessage), } -impl From for AllMessages { - fn from(f: FromJob) -> Self { - match f { +impl From for FromJobCommand { + fn from(f: FromJob) -> FromJobCommand { + FromJobCommand::SendMessage(match f { FromJob::AvailabilityStore(msg) => AllMessages::AvailabilityStore(msg), FromJob::RuntimeApiMessage(msg) => AllMessages::RuntimeApi(msg), FromJob::CandidateValidation(msg) => AllMessages::CandidateValidation(msg), @@ -207,7 +208,7 @@ impl From for AllMessages { FromJob::StatementDistribution(msg) => AllMessages::StatementDistribution(msg), FromJob::PoVDistribution(msg) => AllMessages::PoVDistribution(msg), FromJob::Provisioner(msg) => AllMessages::Provisioner(msg), - } + }) } } diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 6bbd4f48ea..139fed6ddc 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem::{ errors::RuntimeApiError, }; use polkadot_node_subsystem_util::{ - self as util, JobManager, JobTrait, ToJobTrait, Validator, + self as util, JobManager, JobTrait, ToJobTrait, Validator, FromJobCommand, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{AvailabilityBitfield, CoreState, Hash, ValidatorIndex}; @@ -90,14 +90,14 @@ pub enum FromJob { RuntimeApi(RuntimeApiMessage), } -impl From for AllMessages { - fn from(from_job: FromJob) -> AllMessages { - match from_job { +impl From for FromJobCommand { + fn from(from_job: FromJob) -> FromJobCommand { + FromJobCommand::SendMessage(match from_job { FromJob::AvailabilityStore(asm) => AllMessages::AvailabilityStore(asm), FromJob::BitfieldDistribution(bdm) => AllMessages::BitfieldDistribution(bdm), FromJob::CandidateBacking(cbm) => AllMessages::CandidateBacking(cbm), FromJob::RuntimeApi(ram) => AllMessages::RuntimeApi(ram), - } + }) } } diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index 64697a69a5..dc2692431c 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -30,7 +30,7 @@ use polkadot_node_subsystem::{ }, }; use polkadot_node_subsystem_util::{ - self as util, delegated_subsystem, JobTrait, ToJobTrait, + self as util, delegated_subsystem, JobTrait, ToJobTrait, FromJobCommand, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{CandidateReceipt, CollatorId, Hash, Id as ParaId, PoV}; @@ -89,12 +89,12 @@ enum FromJob { Collator(CollatorProtocolMessage), } -impl From for AllMessages { - fn from(from_job: FromJob) -> AllMessages { - match from_job { +impl From for FromJobCommand { + fn from(from_job: FromJob) -> FromJobCommand { + FromJobCommand::SendMessage(match from_job { FromJob::Backing(msg) => AllMessages::CandidateBacking(msg), FromJob::Collator(msg) => AllMessages::CollatorProtocol(msg), - } + }) } } diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 1a33c3fdb0..91655951cc 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -33,7 +33,7 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_util::{ self as util, - delegated_subsystem, + delegated_subsystem, FromJobCommand, request_availability_cores, request_persisted_validation_data, JobTrait, ToJobTrait, metrics::{self, prometheus}, }; @@ -98,12 +98,12 @@ enum FromJob { Runtime(RuntimeApiMessage), } -impl From for AllMessages { - fn from(from_job: FromJob) -> AllMessages { - match from_job { +impl From for FromJobCommand { + fn from(from_job: FromJob) -> FromJobCommand { + FromJobCommand::SendMessage(match from_job { FromJob::ChainApi(cam) => AllMessages::ChainApi(cam), FromJob::Runtime(ram) => AllMessages::RuntimeApi(ram), - } + }) } } diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index e8794e090d..30cd107463 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -476,6 +476,16 @@ pub mod metrics { } } +/// Commands from a job to the broader subsystem. +pub enum FromJobCommand { + /// Send a message to another subsystem. + SendMessage(AllMessages), + /// Spawn a child task on the executor. + Spawn(&'static str, Pin + Send>>), + /// Spawn a blocking child task on the executor's dedicated thread pool. + SpawnBlocking(&'static str, Pin + Send>>), +} + /// This trait governs jobs. /// /// Jobs are instantiated and killed automatically on appropriate overseer messages. @@ -485,7 +495,7 @@ pub trait JobTrait: Unpin { /// Message type to the job. Typically a subset of AllMessages. type ToJob: 'static + ToJobTrait + Send; /// Message type from the job. Typically a subset of AllMessages. - type FromJob: 'static + Into + Send; + type FromJob: 'static + Into + Send; /// Job runtime error. type Error: 'static + std::error::Error + Send; /// Extra arguments this job needs to run properly. @@ -752,8 +762,11 @@ where ).await { break }, - outgoing = jobs.next().fuse() => - Self::handle_outgoing(outgoing, &mut ctx).await, + outgoing = jobs.next().fuse() => { + if let Err(e) = Self::handle_from_job(outgoing, &mut ctx).await { + tracing::warn!(err = ?e, "failed to handle command from job"); + } + } complete => break, } } @@ -863,13 +876,19 @@ where false } - // handle an outgoing message. - async fn handle_outgoing( + // handle a command from a job. + async fn handle_from_job( outgoing: Option, ctx: &mut Context, - ) { - let msg = outgoing.expect("the Jobs stream never ends; qed"); - ctx.send_message(msg.into()).await; + ) -> SubsystemResult<()> { + let cmd: FromJobCommand = outgoing.expect("the Jobs stream never ends; qed").into(); + match cmd { + FromJobCommand::SendMessage(msg) => ctx.send_message(msg).await, + FromJobCommand::Spawn(name, task) => ctx.spawn(name, task).await?, + FromJobCommand::SpawnBlocking(name, task) => ctx.spawn_blocking(name, task).await?, + } + + Ok(()) } } @@ -1031,7 +1050,7 @@ impl Future for Timeout { #[cfg(test)] mod tests { - use super::{JobManager, JobTrait, JobsError, TimeoutExt, ToJobTrait}; + use super::{JobManager, JobTrait, JobsError, TimeoutExt, ToJobTrait, FromJobCommand}; use thiserror::Error; use polkadot_node_subsystem::{ messages::{AllMessages, CandidateSelectionMessage}, @@ -1101,9 +1120,9 @@ mod tests { } } - // FromJob must be infallibly convertable into AllMessages. + // FromJob must be infallibly convertable into FromJobCommand. // - // It exists to be a type-safe subset of AllMessages that this job is specified to send. + // It exists to be a type-safe subset of FromJobCommand that this job is specified to send. // // Note: the Clone impl here is not generally required; it's just ueful for this test context because // we include it in the RunArgs @@ -1112,10 +1131,12 @@ mod tests { Test, } - impl From for AllMessages { - fn from(from_job: FromJob) -> AllMessages { + impl From for FromJobCommand { + fn from(from_job: FromJob) -> FromJobCommand { match from_job { - FromJob::Test => AllMessages::CandidateSelection(CandidateSelectionMessage::default()), + FromJob::Test => FromJobCommand::SendMessage( + AllMessages::CandidateSelection(CandidateSelectionMessage::default()) + ), } } } -- GitLab From 8238fb129d5d3b0c040c8be234ecf13369b7307f Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Sat, 28 Nov 2020 23:14:37 +0100 Subject: [PATCH 061/203] util: implement FusedStream for Jobs (#2031) --- node/subsystem-util/src/lib.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 30cd107463..2620a1f25e 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -674,6 +674,17 @@ where } } +impl stream::FusedStream for Jobs +where + Spawner: SpawnNamed, + Job: JobTrait, +{ + fn is_terminated(&self) -> bool { + false + } +} + + /// A basic implementation of a subsystem. /// /// This struct is responsible for handling message traffic between @@ -762,7 +773,7 @@ where ).await { break }, - outgoing = jobs.next().fuse() => { + outgoing = jobs.next() => { if let Err(e) = Self::handle_from_job(outgoing, &mut ctx).await { tracing::warn!(err = ?e, "failed to handle command from job"); } -- GitLab From d8ae52a85a4861f491f8b6cca38af6d927341d80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Nov 2020 10:08:36 +0100 Subject: [PATCH 062/203] Bump nix from 0.19.0 to 0.19.1 (#2033) Bumps [nix](https://github.com/nix-rust/nix) from 0.19.0 to 0.19.1. - [Release notes](https://github.com/nix-rust/nix/releases) - [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md) - [Commits](https://github.com/nix-rust/nix/compare/v0.19.0...v0.19.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 97f4c52ab9..1300be292e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3595,13 +3595,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85db2feff6bf70ebc3a4793191517d5f0331100a2f10f9bf93b5e5214f32b7b7" +checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" dependencies = [ "bitflags", "cc", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", ] @@ -4722,7 +4722,7 @@ dependencies = [ "assert_cmd", "color-eyre", "futures 0.3.8", - "nix 0.19.0", + "nix 0.19.1", "parity-util-mem", "polkadot-cli", "polkadot-service", diff --git a/Cargo.toml b/Cargo.toml index 1b15de7aec..d480bd60fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ parity-util-mem = { version = "*", default-features = false, features = ["jemall [dev-dependencies] assert_cmd = "1.0.2" -nix = "0.19.0" +nix = "0.19.1" tempfile = "3.1.0" [workspace] -- GitLab From d00c05ba8c89f0a9985a46562178b9be48aa8dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 30 Nov 2020 11:41:47 +0100 Subject: [PATCH 063/203] Process runtime api requests in the background (#2035) This pr changes how the runtime api subsystem processes runtime api requests. Instead of answering all of them in the subsystem task and thus, making all requests sequential, we now answer them in a background task. This enables us to serve multiple requests at once. --- Cargo.lock | 3 - node/core/runtime-api/Cargo.toml | 1 + node/core/runtime-api/src/lib.rs | 100 +++++++++++++++++++------------ node/service/Cargo.toml | 3 - node/service/src/lib.rs | 1 + 5 files changed, 64 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1300be292e..7a53fea791 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5450,12 +5450,10 @@ dependencies = [ "futures 0.3.8", "hex-literal", "kusama-runtime", - "lazy_static", "pallet-babe", "pallet-im-online", "pallet-staking", "pallet-transaction-payment-rpc-runtime-api", - "parking_lot 0.11.1", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", "polkadot-collator-protocol", @@ -5497,7 +5495,6 @@ dependencies = [ "sc-telemetry", "sc-transaction-pool", "serde", - "slog", "sp-api", "sp-authority-discovery", "sp-block-builder", diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index abf88e0634..3fd5a7be01 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -9,6 +9,7 @@ futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index 5fb8ac73cb..38b78648f1 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -30,15 +30,14 @@ use polkadot_subsystem::{ }, errors::RuntimeApiError, }; -use polkadot_node_subsystem_util::{ - metrics::{self, prometheus}, -}; +use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_primitives::v1::{Block, BlockId, Hash, ParachainHost}; -use std::sync::Arc; -use sp_api::{ProvideRuntimeApi}; +use sp_api::ProvideRuntimeApi; +use sp_core::traits::SpawnNamed; use futures::prelude::*; +use std::sync::Arc; const LOG_TARGET: &str = "runtime_api"; @@ -46,12 +45,13 @@ const LOG_TARGET: &str = "runtime_api"; pub struct RuntimeApiSubsystem { client: Arc, metrics: Metrics, + spawn_handle: Box, } impl RuntimeApiSubsystem { /// Create a new Runtime API subsystem wrapping the given client and metrics. - pub fn new(client: Arc, metrics: Metrics) -> Self { - RuntimeApiSubsystem { client, metrics } + pub fn new(client: Arc, metrics: Metrics, spawn_handle: impl SpawnNamed + 'static) -> Self { + RuntimeApiSubsystem { client, metrics, spawn_handle: Box::new(spawn_handle) } } } @@ -73,7 +73,7 @@ async fn run( mut ctx: impl SubsystemContext, subsystem: RuntimeApiSubsystem, ) -> SubsystemResult<()> where - Client: ProvideRuntimeApi, + Client: ProvideRuntimeApi + Send + Sync + 'static, Client::Api: ParachainHost, { loop { @@ -82,12 +82,19 @@ async fn run( FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {}, FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {}, FromOverseer::Communication { msg } => match msg { - RuntimeApiMessage::Request(relay_parent, request) => make_runtime_api_request( - &*subsystem.client, - &subsystem.metrics, - relay_parent, - request, - ), + RuntimeApiMessage::Request(relay_parent, request) => { + let client = subsystem.client.clone(); + let metrics = subsystem.metrics.clone(); + + subsystem.spawn_handle.spawn_blocking("polkadot-runtime-api-request", async move { + make_runtime_api_request( + client, + metrics, + relay_parent, + request, + ) + }.boxed()) + }, } } } @@ -95,8 +102,8 @@ async fn run( #[tracing::instrument(level = "trace", skip(client, metrics), fields(subsystem = LOG_TARGET))] fn make_runtime_api_request( - client: &Client, - metrics: &Metrics, + client: Arc, + metrics: Metrics, relay_parent: Hash, request: Request, ) where @@ -347,8 +354,9 @@ mod tests { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); let runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); + let spawner = sp_core::testing::TaskExecutor::new(); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -370,8 +378,9 @@ mod tests { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); let runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); + let spawner = sp_core::testing::TaskExecutor::new(); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -393,8 +402,9 @@ mod tests { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); let runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); + let spawner = sp_core::testing::TaskExecutor::new(); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -414,14 +424,16 @@ mod tests { #[test] fn requests_persisted_validation_data() { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); - let mut runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); let para_a = 5.into(); let para_b = 6.into(); + let spawner = sp_core::testing::TaskExecutor::new(); - Arc::get_mut(&mut runtime_api).unwrap().validation_data.insert(para_a, Default::default()); + let mut runtime_api = MockRuntimeApi::default(); + runtime_api.validation_data.insert(para_a, Default::default()); + let runtime_api = Arc::new(runtime_api); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -454,14 +466,16 @@ mod tests { #[test] fn requests_full_validation_data() { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); - let mut runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); let para_a = 5.into(); let para_b = 6.into(); + let spawner = sp_core::testing::TaskExecutor::new(); - Arc::get_mut(&mut runtime_api).unwrap().validation_data.insert(para_a, Default::default()); + let mut runtime_api = MockRuntimeApi::default(); + runtime_api.validation_data.insert(para_a, Default::default()); + let runtime_api = Arc::new(runtime_api); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -499,13 +513,14 @@ mod tests { let para_a = 5.into(); let para_b = 6.into(); let commitments = polkadot_primitives::v1::CandidateCommitments::default(); + let spawner = sp_core::testing::TaskExecutor::new(); runtime_api.validation_outputs_results.insert(para_a, false); runtime_api.validation_outputs_results.insert(para_b, true); let runtime_api = Arc::new(runtime_api); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -552,8 +567,9 @@ mod tests { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); let runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); + let spawner = sp_core::testing::TaskExecutor::new(); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -577,10 +593,11 @@ mod tests { let session_index = 1; runtime_api.session_info.insert(session_index, Default::default()); let runtime_api = Arc::new(runtime_api); + let spawner = sp_core::testing::TaskExecutor::new(); let relay_parent = [1; 32].into(); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -600,14 +617,17 @@ mod tests { #[test] fn requests_validation_code() { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); - let mut runtime_api = Arc::new(MockRuntimeApi::default()); + let relay_parent = [1; 32].into(); let para_a = 5.into(); let para_b = 6.into(); + let spawner = sp_core::testing::TaskExecutor::new(); - Arc::get_mut(&mut runtime_api).unwrap().validation_code.insert(para_a, Default::default()); + let mut runtime_api = MockRuntimeApi::default(); + runtime_api.validation_code.insert(para_a, Default::default()); + let runtime_api = Arc::new(runtime_api); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -640,16 +660,16 @@ mod tests { #[test] fn requests_candidate_pending_availability() { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); - let mut runtime_api = MockRuntimeApi::default(); let relay_parent = [1; 32].into(); let para_a = 5.into(); let para_b = 6.into(); + let spawner = sp_core::testing::TaskExecutor::new(); + let mut runtime_api = MockRuntimeApi::default(); runtime_api.candidate_pending_availability.insert(para_a, Default::default()); - let runtime_api = Arc::new(runtime_api); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -685,8 +705,9 @@ mod tests { let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); let runtime_api = Arc::new(MockRuntimeApi::default()); let relay_parent = [1; 32].into(); + let spawner = sp_core::testing::TaskExecutor::new(); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -710,6 +731,7 @@ mod tests { let relay_parent = [1; 32].into(); let para_a = 5.into(); let para_b = 6.into(); + let spawner = sp_core::testing::TaskExecutor::new(); let runtime_api = Arc::new({ let mut runtime_api = MockRuntimeApi::default(); @@ -726,7 +748,7 @@ mod tests { runtime_api }); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -766,6 +788,7 @@ mod tests { let para_a = 99.into(); let para_b = 66.into(); let para_c = 33.into(); + let spawner = sp_core::testing::TaskExecutor::new(); let para_b_inbound_channels = [ (para_a, vec![]), @@ -792,7 +815,7 @@ mod tests { runtime_api }); - let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { let (tx, rx) = oneshot::channel(); @@ -830,6 +853,7 @@ mod tests { let para_a = 5.into(); let para_b = 6.into(); + let spawner = sp_core::testing::TaskExecutor::new(); let runtime_api = Arc::new({ let mut runtime_api = MockRuntimeApi::default(); @@ -848,7 +872,7 @@ mod tests { }); let relay_parent = [1; 32].into(); - let subsystem = RuntimeApiSubsystem::new(runtime_api, Metrics(None)); + let subsystem = RuntimeApiSubsystem::new(runtime_api, Metrics(None), spawner); let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); let test_task = async move { { diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 10f89d66ef..74a55445ef 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -54,12 +54,9 @@ prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https: # External Crates futures = "0.3.8" hex-literal = "0.3.1" -lazy_static = "1.4.0" tracing = "0.1.22" tracing-futures = "0.2.4" -parking_lot = "0.11.1" serde = { version = "1.0.117", features = ["derive"] } -slog = "2.5.2" # Polkadot polkadot-node-core-proposer = { path = "../core/proposer" } diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 7c882eb458..e59994cdcc 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -406,6 +406,7 @@ where runtime_api: RuntimeApiSubsystem::new( runtime_client, Metrics::register(registry)?, + spawner.clone(), ), statement_distribution: StatementDistributionSubsystem::new( Metrics::register(registry)?, -- GitLab From c58fd0ea02ca3846ed66572b96a9fae27737abe5 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 30 Nov 2020 15:47:23 +0100 Subject: [PATCH 064/203] cargo update -p sp-io (#2038) --- Cargo.lock | 649 ++++++++++++++++++++++++++--------------------------- 1 file changed, 314 insertions(+), 335 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a53fea791..940935f5ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,7 +31,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -100,17 +100,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "alga" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" -dependencies = [ - "approx", - "num-complex", - "num-traits 0.2.12", -] - [[package]] name = "ansi_term" version = "0.11.0" @@ -321,7 +310,7 @@ dependencies = [ "futures-io", "rustls", "webpki", - "webpki-roots", + "webpki-roots 0.20.0", ] [[package]] @@ -495,17 +484,6 @@ dependencies = [ "constant_time_eq", ] -[[package]] -name = "blake2s_simd" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9e07352b829279624ceb7c64adb4f585dacdb81d35cafae81139ccd617cf44" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "constant_time_eq", -] - [[package]] name = "block-buffer" version = "0.7.3" @@ -525,7 +503,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding 0.2.1", - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -534,7 +512,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -543,7 +521,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f337a3e6da609650eb74e02bc9fac7b735049f7623ab12f2e4c719316fcc7e80" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -575,12 +553,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "bs58" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" - [[package]] name = "bs58" version = "0.4.0" @@ -821,9 +793,9 @@ dependencies = [ [[package]] name = "console_log" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7871d2947441b0fdd8e2bd1ce2a2f75304f896582c0d572162d48290683c48" +checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" dependencies = [ "log", "web-sys", @@ -1028,7 +1000,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", "subtle 2.2.3", ] @@ -1126,7 +1098,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -1139,6 +1111,15 @@ dependencies = [ "dirs-sys", ] +[[package]] +name = "directories" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-sys" version = "0.3.5" @@ -1480,7 +1461,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", ] @@ -1488,7 +1469,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -1506,7 +1487,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "chrono", "frame-benchmarking", @@ -1528,7 +1509,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -1544,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "serde", @@ -1555,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "bitflags", "frame-metadata", @@ -1580,7 +1561,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1591,7 +1572,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1603,7 +1584,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1613,7 +1594,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1629,7 +1610,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -1643,7 +1624,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-api", @@ -1878,9 +1859,18 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" +checksum = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", "version_check", @@ -2771,9 +2761,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.30.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c2b4c99f8798be90746fc226acf95d3e6cff0655883634cc30dab1f64f438b" +checksum = "24966e73cc5624a6cf14b025365f67cb6da436b4d6337ed84d198063ba74451d" dependencies = [ "atomic", "bytes 0.5.6", @@ -2800,7 +2790,6 @@ dependencies = [ "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", - "multihash", "parity-multiaddr", "parking_lot 0.11.1", "pin-project 1.0.2", @@ -2810,12 +2799,13 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.24.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8186060d6bd415e4e928e6cb44c4fe7e7a7dd53437bd936ce7e5f421e45a51" +checksum = "28d92fab5df60c9705e05750d9ecee6a5af15aed1e3fa86e09fd3dd07ec5dc8e" dependencies = [ "asn1_der", - "bs58 0.4.0", + "bs58", + "bytes 0.5.6", "ed25519-dalek", "either", "fnv", @@ -2837,16 +2827,16 @@ dependencies = [ "sha2 0.9.1", "smallvec 1.5.0", "thiserror", - "unsigned-varint 0.5.1", + "unsigned-varint", "void", "zeroize", ] [[package]] name = "libp2p-core-derive" -version = "0.20.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f753d9324cd3ec14bf04b8a8cd0d269c87f294153d6bf2a84497a63a5ad22213" +checksum = "f4bc40943156e42138d22ed3c57ff0e1a147237742715937622a99b10fbe0156" dependencies = [ "quote 1.0.7", "syn 1.0.48", @@ -2854,9 +2844,9 @@ dependencies = [ [[package]] name = "libp2p-deflate" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aea69349e70a58ef9ecd21ac12c5eaa36255ac6986828079d26393f9e618cb" +checksum = "5a579d7dd506d0620ba88ccc1754436b7de35ed6c884234f9a226bbfce382640" dependencies = [ "flate2", "futures 0.3.8", @@ -2865,9 +2855,9 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0baeff71fb5cb1fe1604f74a712a44b66a8c5900f4022411a1d550f09d6bb776" +checksum = "15dea5933f570844d7b5222b12b58f7bd52e9ca38cd65a1bd4f35341f053f012" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -2876,9 +2866,9 @@ dependencies = [ [[package]] name = "libp2p-floodsub" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0f925a45f310b678e70faf71a10023b829d02eb9cc2628a63de928936f3ade" +checksum = "23070a0838bd9a8adb27e6eba477eeb650c498f9d139383dd0135d20a8170253" dependencies = [ "cuckoofilter", "fnv", @@ -2894,9 +2884,9 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efeb65567174974f551a91f9f5719445b6695cad56f6a7a47a27111f37efb6b8" +checksum = "65e8f3aa0906fbad435dac23c177eef3cdfaaf62609791bd7f54f8553edcfdf9" dependencies = [ "base64 0.13.0", "byteorder", @@ -2914,15 +2904,15 @@ dependencies = [ "rand 0.7.3", "sha2 0.9.1", "smallvec 1.5.0", - "unsigned-varint 0.5.1", + "unsigned-varint", "wasm-timer", ] [[package]] name = "libp2p-identify" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e074124669840484de564901d47f2d0892e73f6d8ee7c37e9c2644af1b217bf4" +checksum = "802fb973a7e0dde3fb9a2113a62bad90338ebe01983b706e1d576d0c2af93cda" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -2936,9 +2926,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a2653b2e3254a3bbeb66bfc3f0dca7d6cba6aa2a96791db114003dec1b5394" +checksum = "6506b7b7982f7626fc96a91bc61be4b1fe7ae9ac23824f0ecefcce21cb39238c" dependencies = [ "arrayvec 0.5.2", "bytes 0.5.6", @@ -2949,23 +2939,22 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "multihash", "prost", "prost-build", "rand 0.7.3", "sha2 0.9.1", "smallvec 1.5.0", "uint", - "unsigned-varint 0.5.1", + "unsigned-varint", "void", "wasm-timer", ] [[package]] name = "libp2p-mdns" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786b068098794322239f8f04df88a52daeb7863b2e77501c4d85d32e0a8f2d26" +checksum = "4458ec36b5ab2662fb4d5c8bb9b6e1591da0ab6efe8881c7a7670ef033bc8937" dependencies = [ "async-std", "data-encoding", @@ -2985,9 +2974,9 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed764eab613a8fb6b7dcf6c796f55a06fef2270e528329903e25cd3311b99663" +checksum = "ae2132b14045009b0f8e577a06e1459592ef0a89dedc58f3d4baf4eac956837b" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -2998,14 +2987,14 @@ dependencies = [ "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.5.0", - "unsigned-varint 0.5.1", + "unsigned-varint", ] [[package]] name = "libp2p-noise" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb441fb015ec16690099c5d910fcba271d357763b3dcb784db7b27bbb0b68372" +checksum = "b9610a524bef4db383cd96b4ec3ec4722eafa72c7242fa89990b74166760583d" dependencies = [ "bytes 0.5.6", "curve25519-dalek 3.0.0", @@ -3025,9 +3014,9 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e5c50936cfdbe96a514e8992f304fa44cd3a681b6f779505f1ae62b3474705" +checksum = "659adf89356e04f65398bb74ee791b269e63da9e41b37f8dc19eaacd12487bfe" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3040,9 +3029,9 @@ dependencies = [ [[package]] name = "libp2p-plaintext" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21026557c335d3639591f247b19b7536195772034ec7e9c463137227f95eaaa1" +checksum = "96dfe26270c91d4ff095030d1fcadd602f3fd84968ebd592829916d0715798a6" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -3051,7 +3040,7 @@ dependencies = [ "log", "prost", "prost-build", - "unsigned-varint 0.5.1", + "unsigned-varint", "void", ] @@ -3071,9 +3060,9 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dd9a1e0e6563dec1c9e702f7e68bdaa43da62a84536aa06372d3fed3e25d4ca" +checksum = "1e952dcc9d2d7e7e45ae8bfcff255723091bd43e3e9a7741a0af8a17fe55b3ed" dependencies = [ "async-trait", "bytes 0.5.6", @@ -3085,15 +3074,15 @@ dependencies = [ "minicbor", "rand 0.7.3", "smallvec 1.5.0", - "unsigned-varint 0.5.1", + "unsigned-varint", "wasm-timer", ] [[package]] name = "libp2p-swarm" -version = "0.24.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "565f0e06674b4033c978471e4083d5aaa8e03cef0719a0ec0905aaeaad39a919" +checksum = "a6ecee54e85513a7301eb4681b3a6aac5b6d11f60d43097cf7624fd4450d7dfe" dependencies = [ "either", "futures 0.3.8", @@ -3107,9 +3096,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.24.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33f3dce259c0d3127af5167f45c275b6c047320efdd0e40fde947482487af0a3" +checksum = "bc28c9ad6dc43f4c3950411cf808639d90307a076330e7996e5e94e70279bde0" dependencies = [ "async-std", "futures 0.3.8", @@ -3123,9 +3112,9 @@ dependencies = [ [[package]] name = "libp2p-uds" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0aba04370a00d8d0236e350bc862926c1b42542a169aa6a481e660e5b990fe" +checksum = "9d821208d4b9af4b293a56dde470edd9f9fac8bb94a51f4f5327cc29a471b3f3" dependencies = [ "async-std", "futures 0.3.8", @@ -3135,9 +3124,9 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c703816f4170477a375b49c56d349e535ce68388f81ba1d9a3c8e2517effa82" +checksum = "1e6ef400b231ba78e866b860445480ca21ee447e03034138c6d57cf2969d6bf4" dependencies = [ "futures 0.3.8", "js-sys", @@ -3149,9 +3138,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5e7268a959748040a0cf7456ad655be55b87f0ceda03bdb5b53674726b28f7" +checksum = "a5736e2fccdcea6e728bbaf903bddc113be223313ce2c756ad9fe43b5a2b0f06" dependencies = [ "async-tls", "either", @@ -3164,14 +3153,14 @@ dependencies = [ "soketto", "url 2.1.1", "webpki", - "webpki-roots", + "webpki-roots 0.21.0", ] [[package]] name = "libp2p-yamux" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0798cbb58535162c40858493d09af06eac42a26e4966e58de0df701f559348" +checksum = "3be7ac000fa3e42ac09a6e658e48de34ac8ef9fff64a4e6e6b08dcc8f4b0e5f6" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3237,11 +3226,10 @@ dependencies = [ [[package]] name = "linregress" -version = "0.1.7" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9290cf6f928576eeb9c096c6fad9d8d452a0a1a70a2bbffa6e36064eedc0aac9" +checksum = "0d0ad4b5cc8385a881c561fac3501353d63d2a2b7a357b5064d71815c9a92724" dependencies = [ - "failure", "nalgebra", "statrs", ] @@ -3509,17 +3497,29 @@ checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" [[package]] name = "multihash" -version = "0.11.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567122ab6492f49b59def14ecc36e13e64dca4188196dd0cd41f9f3f979f3df6" +checksum = "fb63389ee5fcd4df3f8727600f4a0c3df53c541f0ed4e8b50a9ae51a80fc1efe" dependencies = [ - "blake2b_simd", - "blake2s_simd", "digest 0.9.0", - "sha-1 0.9.2", + "generic-array 0.14.4", + "multihash-derive", "sha2 0.9.1", - "sha3", - "unsigned-varint 0.5.1", + "unsigned-varint", +] + +[[package]] +name = "multihash-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f5653449cd45d502a53480ee08d7a599e8f4893d2bacb33c63d65bc20af6c1a" +dependencies = [ + "proc-macro-crate", + "proc-macro-error", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.48", + "synstructure", ] [[package]] @@ -3530,32 +3530,33 @@ checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce" [[package]] name = "multistream-select" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93faf2e41f9ee62fb01680ed48f3cc26652352327aa2e59869070358f6b7dd75" +checksum = "46e19fd46149acdd3600780ebaa09f6ae4e7f2ddbafec64aab54cf75aafd1746" dependencies = [ "bytes 0.5.6", "futures 0.3.8", "log", "pin-project 1.0.2", "smallvec 1.5.0", - "unsigned-varint 0.5.1", + "unsigned-varint", ] [[package]] name = "nalgebra" -version = "0.18.1" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa9fddbc34c8c35dd2108515587b8ce0cab396f17977b8c738568e4edb521a2" +checksum = "d6b6147c3d50b4f3cdabfe2ecc94a0191fd3d6ad58aefd9664cf396285883486" dependencies = [ - "alga", "approx", - "generic-array 0.12.3", + "generic-array 0.13.2", "matrixmultiply", "num-complex", "num-rational", "num-traits 0.2.12", - "rand 0.6.5", + "rand 0.7.3", + "rand_distr", + "simba", "typenum", ] @@ -3770,7 +3771,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -3786,7 +3787,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -3801,7 +3802,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3826,7 +3827,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3840,7 +3841,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3856,7 +3857,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3871,7 +3872,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3886,7 +3887,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3907,7 +3908,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3923,7 +3924,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3943,7 +3944,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3960,7 +3961,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -3974,7 +3975,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -3990,7 +3991,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4004,7 +4005,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4019,7 +4020,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4040,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4056,7 +4057,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4069,7 +4070,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "enumflags2", "frame-support", @@ -4084,7 +4085,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4099,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4119,7 +4120,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4135,7 +4136,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4149,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4171,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4182,7 +4183,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4196,7 +4197,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4214,7 +4215,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "frame-system", @@ -4231,7 +4232,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4249,7 +4250,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-support", "parity-scale-codec", @@ -4262,7 +4263,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4277,7 +4278,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-benchmarking", "frame-support", @@ -4293,7 +4294,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4321,19 +4322,19 @@ dependencies = [ [[package]] name = "parity-multiaddr" -version = "0.9.5" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d477bda9666bc37e5ac9e7e7ee3684f745ec33e6e86a5b48640e0407acda26" +checksum = "2f51a30667591b14f96068b2d12f1306d07a41ebd98239d194356d4d9707ac16" dependencies = [ "arrayref", - "bs58 0.4.0", + "bs58", "byteorder", "data-encoding", "multihash", "percent-encoding 2.1.0", "serde", "static_assertions", - "unsigned-varint 0.5.1", + "unsigned-varint", "url 2.1.1", ] @@ -4443,7 +4444,7 @@ dependencies = [ "mio", "mio-extras", "rand 0.7.3", - "sha-1 0.8.2", + "sha-1", "slab", "url 2.1.1", ] @@ -4632,7 +4633,7 @@ checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" dependencies = [ "maplit", "pest", - "sha-1 0.8.2", + "sha-1", ] [[package]] @@ -5806,18 +5807,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10d4b51f154c8a7fb96fd6dad097cb74b863943ec010ac94b9fd1be8861fe1e" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ "toml", ] [[package]] name = "proc-macro-error" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", @@ -5828,14 +5829,12 @@ dependencies = [ [[package]] name = "proc-macro-error-attr" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", - "syn-mid", "version_check", ] @@ -6015,19 +6014,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "rand" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" -dependencies = [ - "cloudabi 0.0.3", - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.6.5" @@ -6105,6 +6091,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_distr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2" +dependencies = [ + "rand 0.7.3", +] + [[package]] name = "rand_hc" version = "0.1.0" @@ -6424,9 +6419,9 @@ dependencies = [ [[package]] name = "rpassword" -version = "4.0.5" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" +checksum = "d755237fc0f99d98641540e66abac8bc46a0652f19148ac9e21de2da06b326c9" dependencies = [ "libc", "winapi 0.3.9", @@ -6549,10 +6544,9 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "async-trait", - "bytes 0.5.6", "derive_more", "either", "futures 0.3.8", @@ -6564,7 +6558,6 @@ dependencies = [ "prost-build", "rand 0.7.3", "sc-client-api", - "sc-keystore", "sc-network", "serde_json", "sp-api", @@ -6579,7 +6572,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6602,7 +6595,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6619,7 +6612,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6640,7 +6633,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6651,7 +6644,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6696,7 +6689,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6707,20 +6700,18 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "fnv", "futures 0.3.8", "hash-db", - "hex-literal", "kvdb", "lazy_static", "log", "parity-scale-codec", "parking_lot 0.10.2", "sc-executor", - "sc-telemetry", "sp-api", "sp-blockchain", "sp-consensus", @@ -6728,7 +6719,6 @@ dependencies = [ "sp-database", "sp-externalities", "sp-inherents", - "sp-keyring", "sp-keystore", "sp-runtime", "sp-state-machine", @@ -6744,7 +6734,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "blake2-rfc", "hash-db", @@ -6774,7 +6764,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6785,7 +6775,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "fork-tree", @@ -6830,7 +6820,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "futures 0.3.8", @@ -6854,7 +6844,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6867,7 +6857,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6887,12 +6877,13 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-trie", + "thiserror", ] [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "sc-client-api", @@ -6906,7 +6897,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "lazy_static", @@ -6935,24 +6926,23 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", - "log", "parity-scale-codec", "parity-wasm 0.41.0", "sp-allocator", "sp-core", - "sp-runtime-interface", "sp-serializer", "sp-wasm-interface", + "thiserror", "wasmi", ] [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "parity-scale-codec", @@ -6967,7 +6957,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "parity-scale-codec", @@ -6985,7 +6975,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "finality-grandpa", @@ -7022,7 +7012,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "finality-grandpa", @@ -7046,7 +7036,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7064,7 +7054,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "async-trait", "derive_more", @@ -7084,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "hash-db", "lazy_static", @@ -7103,12 +7093,12 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "async-std", "async-trait", "bitflags", - "bs58 0.3.1", + "bs58", "bytes 0.5.6", "derive_more", "either", @@ -7127,7 +7117,7 @@ dependencies = [ "lru", "nohash-hasher", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "pin-project 0.4.23", "prost", "prost-build", @@ -7139,7 +7129,7 @@ dependencies = [ "serde_json", "slog", "slog_derive", - "smallvec 0.6.13", + "smallvec 1.5.0", "sp-arithmetic", "sp-blockchain", "sp-consensus", @@ -7148,7 +7138,7 @@ dependencies = [ "sp-utils", "substrate-prometheus-endpoint", "thiserror", - "unsigned-varint 0.4.0", + "unsigned-varint", "void", "wasm-timer", "zeroize", @@ -7157,7 +7147,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7172,7 +7162,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "bytes 0.5.6", "fnv", @@ -7199,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "libp2p", @@ -7212,7 +7202,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7221,7 +7211,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "hash-db", @@ -7254,7 +7244,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "futures 0.3.8", @@ -7278,7 +7268,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7296,10 +7286,9 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ - "derive_more", - "directories", + "directories 3.0.1", "exit-future", "futures 0.1.29", "futures 0.3.8", @@ -7352,6 +7341,7 @@ dependencies = [ "sp-version", "substrate-prometheus-endpoint", "tempfile", + "thiserror", "tracing", "tracing-futures", "wasm-timer", @@ -7360,7 +7350,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "parity-scale-codec", @@ -7369,12 +7359,13 @@ dependencies = [ "parking_lot 0.10.2", "sc-client-api", "sp-core", + "thiserror", ] [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7388,12 +7379,13 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-runtime", + "thiserror", ] [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7414,7 +7406,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "erased-serde", "log", @@ -7433,7 +7425,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "futures 0.3.8", @@ -7448,15 +7440,15 @@ dependencies = [ "sp-runtime", "sp-transaction-pool", "sp-utils", + "thiserror", "wasm-timer", ] [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ - "derive_more", "futures 0.3.8", "futures-diagnose", "intervalier", @@ -7474,6 +7466,7 @@ dependencies = [ "sp-transaction-pool", "sp-utils", "substrate-prometheus-endpoint", + "thiserror", "wasm-timer", ] @@ -7684,19 +7677,6 @@ dependencies = [ "opaque-debug 0.2.3", ] -[[package]] -name = "sha-1" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3cdf1b5e620a498ee6f2a171885ac7e22f0e12089ec4b3d22b84921792507c" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpuid-bool", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - [[package]] name = "sha2" version = "0.8.2" @@ -7795,6 +7775,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65211b7b6fc3f14ff9fc7a2011a434e3e6880585bd2e9e9396315ae24cbf7852" +[[package]] +name = "simba" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb931b1367faadea6b1ab1c306a860ec17aaa5fa39f367d0c744e69d971a1fb2" +dependencies = [ + "approx", + "num-complex", + "num-traits 0.2.12", + "paste", +] + [[package]] name = "slab" version = "0.4.2" @@ -7903,13 +7895,13 @@ dependencies = [ "httparse", "log", "rand 0.7.3", - "sha-1 0.8.2", + "sha-1", ] [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "log", @@ -7921,7 +7913,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "hash-db", "parity-scale-codec", @@ -7931,12 +7923,13 @@ dependencies = [ "sp-state-machine", "sp-std", "sp-version", + "thiserror", ] [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7948,7 +7941,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "serde", @@ -7960,7 +7953,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7973,7 +7966,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-api", @@ -7985,7 +7978,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7996,7 +7989,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-api", @@ -8008,13 +8001,14 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ + "futures 0.3.8", "log", "lru", "parity-scale-codec", "parking_lot 0.10.2", - "sp-block-builder", + "sp-api", "sp-consensus", "sp-database", "sp-runtime", @@ -8025,7 +8019,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "serde", "serde_json", @@ -8034,7 +8028,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8060,7 +8054,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "merlin", "parity-scale-codec", @@ -8080,7 +8074,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8089,7 +8083,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8101,7 +8095,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "base58", "blake2-rfc", @@ -8145,7 +8139,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8154,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8164,7 +8158,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "environmental", "parity-scale-codec", @@ -8175,7 +8169,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "finality-grandpa", "log", @@ -8192,7 +8186,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8204,7 +8198,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "hash-db", @@ -8228,7 +8222,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "lazy_static", "sp-core", @@ -8239,7 +8233,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "async-trait", "derive_more", @@ -8255,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "serde", @@ -8267,7 +8261,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8278,7 +8272,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "sp-api", "sp-core", @@ -8288,16 +8282,15 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "backtrace", - "log", ] [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "serde", "sp-core", @@ -8306,7 +8299,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "either", "hash256-std-hasher", @@ -8320,7 +8313,6 @@ dependencies = [ "sp-application-crypto", "sp-arithmetic", "sp-core", - "sp-inherents", "sp-io", "sp-std", ] @@ -8328,7 +8320,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8344,7 +8336,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "Inflector", "proc-macro-crate", @@ -8356,7 +8348,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "serde", "serde_json", @@ -8365,7 +8357,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-api", @@ -8378,7 +8370,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8388,7 +8380,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "hash-db", "log", @@ -8410,12 +8402,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8428,7 +8420,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "sp-core", @@ -8441,7 +8433,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8455,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "log", "parity-scale-codec", @@ -8468,7 +8460,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "derive_more", "futures 0.3.8", @@ -8478,12 +8470,13 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-runtime", + "thiserror", ] [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "hash-db", "memory-db", @@ -8497,7 +8490,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "futures-core", @@ -8509,7 +8502,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8521,7 +8514,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8549,11 +8542,11 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "statrs" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10102ac8d55e35db2b3fafc26f81ba8647da2e15879ab686a67e6d19af2685e8" +checksum = "cce16f6de653e88beca7bd13780d08e09d4489dbca1f9210e041bc4852481382" dependencies = [ - "rand 0.5.6", + "rand 0.7.3", ] [[package]] @@ -8562,7 +8555,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09f8ed9974042b8c3672ff3030a69fcc03b74c47c3d1ecb7755e8a3626011e88" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -8572,7 +8565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c80e15f898d8d8f25db24c253ea615cc14acf418ff307822995814e7d42cfa89" dependencies = [ "block-cipher 0.8.0", - "generic-array 0.14.2", + "generic-array 0.14.4", ] [[package]] @@ -8663,7 +8656,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "chrono", "console_error_panic_hook", @@ -8689,7 +8682,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "platforms", ] @@ -8697,7 +8690,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8720,7 +8713,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "async-std", "derive_more", @@ -8734,7 +8727,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8761,7 +8754,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8771,7 +8764,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0840c58849bc84e7fd72627745bda243741adcd8" +source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -8828,17 +8821,6 @@ dependencies = [ "unicode-xid 0.2.1", ] -[[package]] -name = "syn-mid" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" -dependencies = [ - "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", -] - [[package]] name = "synstructure" version = "0.12.4" @@ -9554,22 +9536,10 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" dependencies = [ - "generic-array 0.14.2", + "generic-array 0.14.4", "subtle 2.2.3", ] -[[package]] -name = "unsigned-varint" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669d776983b692a906c881fcd0cfb34271a48e197e4d6cb8df32b05bfc3d3fa5" -dependencies = [ - "bytes 0.5.6", - "futures-io", - "futures-util", - "futures_codec", -] - [[package]] name = "unsigned-varint" version = "0.5.1" @@ -9877,7 +9847,7 @@ dependencies = [ "cranelift-entity", "cranelift-frontend", "cranelift-wasm", - "directories", + "directories 2.0.2", "errno", "file-per-thread-logger", "indexmap", @@ -10024,6 +9994,15 @@ dependencies = [ "webpki", ] +[[package]] +name = "webpki-roots" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" +dependencies = [ + "webpki", +] + [[package]] name = "wepoll-sys-stjepang" version = "1.0.6" -- GitLab From efa9b9947949f2e3f782eeef6afc7f6a778ddb02 Mon Sep 17 00:00:00 2001 From: Guillaume Thiolliere Date: Mon, 30 Nov 2020 16:13:43 +0100 Subject: [PATCH 065/203] Companion: Rename pallet trait `Trait` to `Config` (#2014) * rename Trait -> Config * revert diener changes * rename HostConfig to ActiveConfig as more meaningful * fix merge * "Update Substrate" * cargo update -p sp-io Co-authored-by: parity-processbot <> --- Cargo.lock | 272 +++++++++--------- runtime/common/src/claims.rs | 54 ++-- runtime/common/src/crowdfund.rs | 56 ++-- runtime/common/src/impls.rs | 32 +-- runtime/common/src/lib.rs | 6 +- runtime/common/src/paras_registrar.rs | 62 ++-- runtime/common/src/paras_sudo_wrapper.rs | 8 +- runtime/common/src/purchase.rs | 50 ++-- runtime/common/src/slots.rs | 34 +-- runtime/kusama/src/lib.rs | 66 ++--- runtime/kusama/src/weights/frame_system.rs | 2 +- runtime/kusama/src/weights/pallet_balances.rs | 2 +- .../kusama/src/weights/pallet_collective.rs | 2 +- .../kusama/src/weights/pallet_democracy.rs | 2 +- .../src/weights/pallet_elections_phragmen.rs | 2 +- runtime/kusama/src/weights/pallet_identity.rs | 2 +- .../kusama/src/weights/pallet_im_online.rs | 2 +- runtime/kusama/src/weights/pallet_indices.rs | 2 +- runtime/kusama/src/weights/pallet_multisig.rs | 2 +- runtime/kusama/src/weights/pallet_proxy.rs | 2 +- .../kusama/src/weights/pallet_scheduler.rs | 2 +- runtime/kusama/src/weights/pallet_session.rs | 2 +- runtime/kusama/src/weights/pallet_staking.rs | 2 +- .../kusama/src/weights/pallet_timestamp.rs | 2 +- runtime/kusama/src/weights/pallet_treasury.rs | 2 +- runtime/kusama/src/weights/pallet_utility.rs | 2 +- runtime/kusama/src/weights/pallet_vesting.rs | 2 +- runtime/parachains/src/configuration.rs | 14 +- runtime/parachains/src/dmp.rs | 8 +- runtime/parachains/src/hrmp.rs | 20 +- runtime/parachains/src/inclusion.rs | 34 +-- runtime/parachains/src/inclusion_inherent.rs | 10 +- runtime/parachains/src/initializer.rs | 32 +-- runtime/parachains/src/lib.rs | 10 +- runtime/parachains/src/mock.rs | 22 +- runtime/parachains/src/origin.rs | 4 +- runtime/parachains/src/paras.rs | 16 +- runtime/parachains/src/runtime_api_impl/v1.rs | 38 +-- runtime/parachains/src/scheduler.rs | 10 +- runtime/parachains/src/session_info.rs | 26 +- runtime/parachains/src/ump.rs | 16 +- runtime/parachains/src/util.rs | 4 +- runtime/polkadot/src/lib.rs | 62 ++-- runtime/polkadot/src/weights/frame_system.rs | 2 +- .../polkadot/src/weights/pallet_balances.rs | 2 +- .../polkadot/src/weights/pallet_collective.rs | 2 +- .../polkadot/src/weights/pallet_democracy.rs | 2 +- .../src/weights/pallet_elections_phragmen.rs | 2 +- .../polkadot/src/weights/pallet_identity.rs | 2 +- .../polkadot/src/weights/pallet_im_online.rs | 2 +- .../polkadot/src/weights/pallet_indices.rs | 2 +- .../polkadot/src/weights/pallet_multisig.rs | 2 +- runtime/polkadot/src/weights/pallet_proxy.rs | 2 +- .../polkadot/src/weights/pallet_scheduler.rs | 2 +- .../polkadot/src/weights/pallet_session.rs | 2 +- .../polkadot/src/weights/pallet_staking.rs | 2 +- .../polkadot/src/weights/pallet_timestamp.rs | 2 +- .../polkadot/src/weights/pallet_treasury.rs | 2 +- .../polkadot/src/weights/pallet_utility.rs | 2 +- .../polkadot/src/weights/pallet_vesting.rs | 2 +- runtime/rococo/src/lib.rs | 58 ++-- runtime/test-runtime/src/lib.rs | 56 ++-- runtime/westend/src/lib.rs | 52 ++-- runtime/westend/src/weights/frame_system.rs | 2 +- .../westend/src/weights/pallet_balances.rs | 2 +- .../westend/src/weights/pallet_identity.rs | 2 +- .../westend/src/weights/pallet_im_online.rs | 2 +- runtime/westend/src/weights/pallet_indices.rs | 2 +- .../westend/src/weights/pallet_multisig.rs | 2 +- runtime/westend/src/weights/pallet_proxy.rs | 2 +- .../westend/src/weights/pallet_scheduler.rs | 2 +- runtime/westend/src/weights/pallet_session.rs | 2 +- runtime/westend/src/weights/pallet_staking.rs | 2 +- .../westend/src/weights/pallet_timestamp.rs | 2 +- runtime/westend/src/weights/pallet_utility.rs | 2 +- runtime/westend/src/weights/pallet_vesting.rs | 2 +- 76 files changed, 613 insertions(+), 613 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 940935f5ff..b09cce2d94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1461,7 +1461,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", ] @@ -1469,7 +1469,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -1487,7 +1487,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "chrono", "frame-benchmarking", @@ -1509,7 +1509,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "serde", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "bitflags", "frame-metadata", @@ -1561,7 +1561,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1572,7 +1572,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1584,7 +1584,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1594,7 +1594,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1610,7 +1610,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -1624,7 +1624,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-api", @@ -3771,7 +3771,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -3787,7 +3787,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -3802,7 +3802,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3827,7 +3827,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3841,7 +3841,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3857,7 +3857,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3872,7 +3872,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3887,7 +3887,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3908,7 +3908,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3924,7 +3924,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3944,7 +3944,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3961,7 +3961,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -3975,7 +3975,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3991,7 +3991,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4005,7 +4005,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4020,7 +4020,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4041,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4057,7 +4057,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4070,7 +4070,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "enumflags2", "frame-support", @@ -4085,7 +4085,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4120,7 +4120,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4136,7 +4136,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4150,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4172,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4183,7 +4183,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4197,7 +4197,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4215,7 +4215,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "frame-system", @@ -4232,7 +4232,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4250,7 +4250,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-support", "parity-scale-codec", @@ -4263,7 +4263,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4278,7 +4278,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4294,7 +4294,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6544,7 +6544,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "async-trait", "derive_more", @@ -6572,7 +6572,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6595,7 +6595,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6612,7 +6612,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6633,7 +6633,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6644,7 +6644,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6689,7 +6689,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6700,7 +6700,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "fnv", @@ -6734,7 +6734,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "blake2-rfc", "hash-db", @@ -6764,7 +6764,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6775,7 +6775,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "fork-tree", @@ -6820,7 +6820,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "futures 0.3.8", @@ -6844,7 +6844,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6857,7 +6857,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6883,7 +6883,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "sc-client-api", @@ -6897,7 +6897,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "lazy_static", @@ -6926,7 +6926,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "parity-scale-codec", @@ -6942,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "parity-scale-codec", @@ -6957,7 +6957,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "parity-scale-codec", @@ -6975,7 +6975,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "finality-grandpa", @@ -7012,7 +7012,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "finality-grandpa", @@ -7036,7 +7036,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7054,7 +7054,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "async-trait", "derive_more", @@ -7074,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "hash-db", "lazy_static", @@ -7093,7 +7093,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "async-std", "async-trait", @@ -7147,7 +7147,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7162,7 +7162,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "bytes 0.5.6", "fnv", @@ -7189,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "libp2p", @@ -7202,7 +7202,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7211,7 +7211,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "hash-db", @@ -7244,7 +7244,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "futures 0.3.8", @@ -7268,7 +7268,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7286,7 +7286,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "directories 3.0.1", "exit-future", @@ -7350,7 +7350,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "parity-scale-codec", @@ -7365,7 +7365,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7385,7 +7385,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7406,7 +7406,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "erased-serde", "log", @@ -7425,7 +7425,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "futures 0.3.8", @@ -7447,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7901,7 +7901,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "log", @@ -7913,7 +7913,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "hash-db", "parity-scale-codec", @@ -7929,7 +7929,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7941,7 +7941,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "serde", @@ -7953,7 +7953,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7966,7 +7966,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-api", @@ -7978,7 +7978,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-api", @@ -8001,7 +8001,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "log", @@ -8019,7 +8019,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "serde", "serde_json", @@ -8028,7 +8028,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8054,7 +8054,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "merlin", "parity-scale-codec", @@ -8074,7 +8074,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8083,7 +8083,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8095,7 +8095,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "base58", "blake2-rfc", @@ -8139,7 +8139,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8148,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8158,7 +8158,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "environmental", "parity-scale-codec", @@ -8169,7 +8169,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "finality-grandpa", "log", @@ -8186,7 +8186,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8198,7 +8198,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "hash-db", @@ -8222,7 +8222,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "lazy_static", "sp-core", @@ -8233,7 +8233,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "async-trait", "derive_more", @@ -8249,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "serde", @@ -8261,7 +8261,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8272,7 +8272,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "sp-api", "sp-core", @@ -8282,7 +8282,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "backtrace", ] @@ -8290,7 +8290,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "serde", "sp-core", @@ -8299,7 +8299,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "either", "hash256-std-hasher", @@ -8320,7 +8320,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8336,7 +8336,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "Inflector", "proc-macro-crate", @@ -8348,7 +8348,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "serde", "serde_json", @@ -8357,7 +8357,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-api", @@ -8370,7 +8370,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8380,7 +8380,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "hash-db", "log", @@ -8402,12 +8402,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8420,7 +8420,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "sp-core", @@ -8433,7 +8433,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8447,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "log", "parity-scale-codec", @@ -8460,7 +8460,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "derive_more", "futures 0.3.8", @@ -8476,7 +8476,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "hash-db", "memory-db", @@ -8490,7 +8490,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "futures-core", @@ -8502,7 +8502,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8514,7 +8514,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8656,7 +8656,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "chrono", "console_error_panic_hook", @@ -8682,7 +8682,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "platforms", ] @@ -8690,7 +8690,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8713,7 +8713,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "async-std", "derive_more", @@ -8727,7 +8727,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8754,7 +8754,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8764,7 +8764,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#779c801d31ff31a9dba9d11326c01c4780b4d589" +source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index fbcd7a3af2..176c1cd4bd 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -37,13 +37,13 @@ use sp_runtime::{ }; use primitives::v1::ValidityError; -type CurrencyOf = <::VestingSchedule as VestingSchedule<::AccountId>>::Currency; -type BalanceOf = as Currency<::AccountId>>::Balance; +type CurrencyOf = <::VestingSchedule as VestingSchedule<::AccountId>>::Currency; +type BalanceOf = as Currency<::AccountId>>::Balance; /// Configuration trait. -pub trait Trait: frame_system::Trait { +pub trait Config: frame_system::Config { /// The overarching event type. - type Event: From> + Into<::Event>; + type Event: From> + Into<::Event>; type VestingSchedule: VestingSchedule; type Prefix: Get<&'static [u8]>; type MoveClaimOrigin: EnsureOrigin; @@ -130,7 +130,7 @@ impl sp_std::fmt::Debug for EcdsaSignature { decl_event!( pub enum Event where Balance = BalanceOf, - AccountId = ::AccountId + AccountId = ::AccountId { /// Someone claimed some DOTs. [who, ethereum_address, amount] Claimed(AccountId, EthereumAddress, Balance), @@ -138,7 +138,7 @@ decl_event!( ); decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// Invalid Ethereum signature. InvalidEthereumSignature, /// Ethereum address has no claim. @@ -159,7 +159,7 @@ decl_storage! { // A macro for the Storage trait, and its implementation, for this module. // This allows for type-safe usage of the Substrate storage database, so you can // keep things around between blocks. - trait Store for Module as Claims { + trait Store for Module as Claims { Claims get(fn claims) build(|config: &GenesisConfig| { config.claims.iter().map(|(a, b, _, _)| (a.clone(), b.clone())).collect::>() }): map hasher(identity) EthereumAddress => Option>; @@ -194,7 +194,7 @@ decl_storage! { } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::Origin { type Error = Error; /// The Prefix that is used in signed Ethereum messages for this network @@ -426,7 +426,7 @@ fn to_ascii_hex(data: &[u8]) -> Vec { r } -impl Module { +impl Module { // Constructs the message that Ethereum RPC's `personal_sign` and `eth_sign` would sign. fn ethereum_signable_message(what: &[u8], extra: &[u8]) -> Vec { let prefix = T::Prefix::get(); @@ -487,7 +487,7 @@ impl Module { } } -impl sp_runtime::traits::ValidateUnsigned for Module { +impl sp_runtime::traits::ValidateUnsigned for Module { type Call = Call; fn validate_unsigned(_source: TransactionSource, call: &Self::Call) -> TransactionValidity { @@ -538,11 +538,11 @@ impl sp_runtime::traits::ValidateUnsigned for Module { /// Validate `attest` calls prior to execution. Needed to avoid a DoS attack since they are /// otherwise free to place on chain. #[derive(Encode, Decode, Clone, Eq, PartialEq)] -pub struct PrevalidateAttests(sp_std::marker::PhantomData) where - ::Call: IsSubType>; +pub struct PrevalidateAttests(sp_std::marker::PhantomData) where + ::Call: IsSubType>; -impl Debug for PrevalidateAttests where - ::Call: IsSubType> +impl Debug for PrevalidateAttests where + ::Call: IsSubType> { #[cfg(feature = "std")] fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { @@ -555,8 +555,8 @@ impl Debug for PrevalidateAttests where } } -impl PrevalidateAttests where - ::Call: IsSubType> +impl PrevalidateAttests where + ::Call: IsSubType> { /// Create new `SignedExtension` to check runtime version. pub fn new() -> Self { @@ -564,11 +564,11 @@ impl PrevalidateAttests where } } -impl SignedExtension for PrevalidateAttests where - ::Call: IsSubType> +impl SignedExtension for PrevalidateAttests where + ::Call: IsSubType> { type AccountId = T::AccountId; - type Call = ::Call; + type Call = ::Call; type AdditionalSigned = (); type Pre = (); const IDENTIFIER: &'static str = "PrevalidateAttests"; @@ -615,7 +615,7 @@ mod secp_utils { res.0.copy_from_slice(&keccak_256(&public(secret).serialize()[1..65])[12..]); res } - pub fn sig(secret: &secp256k1::SecretKey, what: &[u8], extra: &[u8]) -> EcdsaSignature { + pub fn sig(secret: &secp256k1::SecretKey, what: &[u8], extra: &[u8]) -> EcdsaSignature { let msg = keccak_256(&>::ethereum_signable_message(&to_ascii_hex(what)[..], extra)); let (sig, recovery_id) = secp256k1::sign(&secp256k1::Message::parse(&msg), secret); let mut r = [0u8; 65]; @@ -665,7 +665,7 @@ mod tests { pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } - impl frame_system::Trait for Test { + impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Call = Call; @@ -697,7 +697,7 @@ mod tests { pub const ExistentialDeposit: u64 = 1; } - impl pallet_balances::Trait for Test { + impl pallet_balances::Config for Test { type Balance = u64; type Event = (); type DustRemoval = (); @@ -711,7 +711,7 @@ mod tests { pub const MinVestedTransfer: u64 = 0; } - impl pallet_vesting::Trait for Test { + impl pallet_vesting::Config for Test { type Event = (); type Currency = Balances; type BlockNumberToBalance = Identity; @@ -726,7 +726,7 @@ mod tests { pub const Six: u64 = 6; } - impl Trait for Test { + impl Config for Test { type Event = (); type VestingSchedule = Vesting; type Prefix = Prefix; @@ -1048,7 +1048,7 @@ mod tests { fn claiming_while_vested_doesnt_work() { new_test_ext().execute_with(|| { // A user is already vested - assert_ok!(::VestingSchedule::add_vesting_schedule(&69, total_claims(), 100, 10)); + assert_ok!(::VestingSchedule::add_vesting_schedule(&69, total_claims(), 100, 10)); CurrencyOf::::make_free_balance_be(&69, total_claims()); assert_eq!(Balances::free_balance(69), total_claims()); assert_ok!(Claims::mint_claim(Origin::root(), eth(&bob()), 200, Some((50, 10, 1)), None)); @@ -1181,7 +1181,7 @@ mod benchmarking { const MAX_CLAIMS: u32 = 10_000; const VALUE: u32 = 1_000_000; - fn create_claim(input: u32) -> DispatchResult { + fn create_claim(input: u32) -> DispatchResult { let secret_key = secp256k1::SecretKey::parse(&keccak_256(&input.encode())).unwrap(); let eth_address = eth(&secret_key); let vesting = Some((100_000u32.into(), 1_000u32.into(), 100u32.into())); @@ -1189,7 +1189,7 @@ mod benchmarking { Ok(()) } - fn create_claim_attest(input: u32) -> DispatchResult { + fn create_claim_attest(input: u32) -> DispatchResult { let secret_key = secp256k1::SecretKey::parse(&keccak_256(&input.encode())).unwrap(); let eth_address = eth(&secret_key); let vesting = Some((100_000u32.into(), 1_000u32.into(), 100u32.into())); diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdfund.rs index 6e8985b1af..1c0895bc0c 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdfund.rs @@ -82,13 +82,13 @@ use sp_std::vec::Vec; use primitives::v1::{Id as ParaId, HeadData}; pub type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; + <::Currency as Currency<::AccountId>>::Balance; #[allow(dead_code)] pub type NegativeImbalanceOf = - <::Currency as Currency<::AccountId>>::NegativeImbalance; + <::Currency as Currency<::AccountId>>::NegativeImbalance; -pub trait Trait: slots::Trait { - type Event: From> + Into<::Event>; +pub trait Config: slots::Config { + type Event: From> + Into<::Event>; /// ModuleID for the crowdfund module. An appropriate value could be ```ModuleId(*b"py/cfund")``` type ModuleId: Get; @@ -164,7 +164,7 @@ pub struct FundInfo { } decl_storage! { - trait Store for Module as Crowdfund { + trait Store for Module as Crowdfund { /// Info on all of the funds. Funds get(fn funds): map hasher(twox_64_concat) FundIndex @@ -184,7 +184,7 @@ decl_storage! { decl_event! { pub enum Event where - ::AccountId, + ::AccountId, Balance = BalanceOf, { /// Create a new crowdfunding campaign. [fund_index] @@ -205,7 +205,7 @@ decl_event! { } decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// Last slot must be greater than first slot. LastSlotBeforeFirstSlot, /// The last slot cannot be more then 3 slots after the first slot. @@ -251,7 +251,7 @@ decl_error! { } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::Origin { type Error = Error; const ModuleId: ModuleId = T::ModuleId::get(); @@ -528,7 +528,7 @@ decl_module! { } } -impl Module { +impl Module { /// The account ID of the fund pot. /// /// This actually does computation. If you need to keep using it, then make sure you cache the @@ -599,7 +599,7 @@ mod tests { pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } - impl frame_system::Trait for Test { + impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Call = (); @@ -629,7 +629,7 @@ mod tests { parameter_types! { pub const ExistentialDeposit: u64 = 1; } - impl pallet_balances::Trait for Test { + impl pallet_balances::Config for Test { type Balance = u64; type Event = (); type DustRemoval = (); @@ -667,7 +667,7 @@ mod tests { fn min_len() -> usize { 0 } fn max_len() -> usize { 0 } } - impl pallet_treasury::Trait for Test { + impl pallet_treasury::Config for Test { type Currency = pallet_balances::Module; type ApproveOrigin = frame_system::EnsureRoot; type RejectOrigin = frame_system::EnsureRoot; @@ -749,7 +749,7 @@ mod tests { pub const LeasePeriod: u64 = 10; pub const EndingPeriod: u64 = 3; } - impl slots::Trait for Test { + impl slots::Config for Test { type Event = (); type Currency = Balances; type Parachains = TestParachains; @@ -763,7 +763,7 @@ mod tests { pub const RetirementPeriod: u64 = 5; pub const CrowdfundModuleId: ModuleId = ModuleId(*b"py/cfund"); } - impl Trait for Test { + impl Config for Test { type Event = (); type SubmissionDeposit = SubmissionDeposit; type MinContribution = MinContribution; @@ -936,7 +936,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into() )); @@ -947,7 +947,7 @@ mod tests { assert_eq!( fund.deploy_data, Some(DeployData { - code_hash: ::Hash::default(), + code_hash: ::Hash::default(), code_size: 0, initial_head_data: vec![0].into(), }), @@ -966,7 +966,7 @@ mod tests { assert_noop!(Crowdfund::fix_deploy_data( Origin::signed(2), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into()), Error::::InvalidOrigin @@ -976,7 +976,7 @@ mod tests { assert_noop!(Crowdfund::fix_deploy_data( Origin::signed(1), 1, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into()), Error::::InvalidFundIndex @@ -986,7 +986,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -994,7 +994,7 @@ mod tests { assert_noop!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![1].into()), Error::::ExistingDeployData @@ -1014,7 +1014,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -1060,7 +1060,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -1088,7 +1088,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -1131,7 +1131,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -1273,7 +1273,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -1302,7 +1302,7 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); @@ -1341,14 +1341,14 @@ mod tests { assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(1), 0, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); assert_ok!(Crowdfund::fix_deploy_data( Origin::signed(2), 1, - ::Hash::default(), + ::Hash::default(), 0, vec![0].into(), )); diff --git a/runtime/common/src/impls.rs b/runtime/common/src/impls.rs index 72d4f6ce89..64b881f6d4 100644 --- a/runtime/common/src/impls.rs +++ b/runtime/common/src/impls.rs @@ -23,12 +23,12 @@ use crate::NegativeImbalance; pub struct ToAuthor(sp_std::marker::PhantomData); impl OnUnbalanced> for ToAuthor where - R: pallet_balances::Trait + pallet_authorship::Trait, - ::AccountId: From, - ::AccountId: Into, - ::Event: From::AccountId, - ::Balance, + R: pallet_balances::Config + pallet_authorship::Config, + ::AccountId: From, + ::AccountId: Into, + ::Event: From::AccountId, + ::Balance, pallet_balances::DefaultInstance> >, { @@ -43,13 +43,13 @@ where pub struct DealWithFees(sp_std::marker::PhantomData); impl OnUnbalanced> for DealWithFees where - R: pallet_balances::Trait + pallet_treasury::Trait + pallet_authorship::Trait, + R: pallet_balances::Config + pallet_treasury::Config + pallet_authorship::Config, pallet_treasury::Module: OnUnbalanced>, - ::AccountId: From, - ::AccountId: Into, - ::Event: From::AccountId, - ::Balance, + ::AccountId: From, + ::AccountId: Into, + ::Event: From::AccountId, + ::Balance, pallet_balances::DefaultInstance> >, { @@ -97,7 +97,7 @@ mod tests { pub const AvailableBlockRatio: Perbill = Perbill::one(); } - impl frame_system::Trait for Test { + impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Index = u64; @@ -125,7 +125,7 @@ mod tests { type SystemWeightInfo = (); } - impl pallet_balances::Trait for Test { + impl pallet_balances::Config for Test { type Balance = u64; type Event = (); type DustRemoval = (); @@ -151,7 +151,7 @@ mod tests { pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry"); } - impl pallet_treasury::Trait for Test { + impl pallet_treasury::Config for Test { type Currency = pallet_balances::Module; type ApproveOrigin = frame_system::EnsureRoot; type RejectOrigin = frame_system::EnsureRoot; @@ -185,7 +185,7 @@ mod tests { Some(Default::default()) } } - impl pallet_authorship::Trait for Test { + impl pallet_authorship::Config for Test { type FindAuthor = OneAuthor; type UncleGenerations = (); type FilterUncle = (); diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index ed0aad5950..3f867579eb 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -47,7 +47,7 @@ pub use pallet_balances::Call as BalancesCall; /// Implementations of some helper traits passed into runtime modules as associated types. pub use impls::ToAuthor; -pub type NegativeImbalance = as Currency<::AccountId>>::NegativeImbalance; +pub type NegativeImbalance = as Currency<::AccountId>>::NegativeImbalance; /// The sequence of bytes a valid wasm module binary always starts with. Apart from that it's also a /// valid wasm module. @@ -106,7 +106,7 @@ impl sp_runtime::BoundToRuntimeAppPublic for ParachainSessionKeyPlaceholder +impl pallet_session::OneSessionHandler for ParachainSessionKeyPlaceholder { type Key = ValidatorId; @@ -154,7 +154,7 @@ mod multiplier_tests { pub const AvailableBlockRatio: Perbill = Perbill::one(); } - impl frame_system::Trait for Runtime { + impl frame_system::Config for Runtime { type BaseCallFilter = (); type Origin = Origin; type Index = u64; diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index 8427bc3f4a..177ec3180a 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -39,15 +39,15 @@ use runtime_parachains::{ }; type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; + <::Currency as Currency<::AccountId>>::Balance; -pub trait Trait: paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait { +pub trait Config: paras::Config + dmp::Config + ump::Config + hrmp::Config { /// The aggregated origin type must support the `parachains` origin. We require that we can /// infallibly convert between this origin and the system origin, but in reality, they're the /// same type, we just can't express that to the Rust type system without writing a `where` /// clause everywhere. - type Origin: From<::Origin> - + Into::Origin>>; + type Origin: From<::Origin> + + Into::Origin>>; /// The system's currency for parathread payment. type Currency: ReservableCurrency; @@ -57,7 +57,7 @@ pub trait Trait: paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait { } decl_storage! { - trait Store for Module as Registrar { + trait Store for Module as Registrar { /// Whether parathreads are enabled or not. ParathreadsRegistrationEnabled: bool; @@ -73,7 +73,7 @@ decl_storage! { } decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// Parachain already exists. ParaAlreadyExists, /// Invalid parachain ID. @@ -92,7 +92,7 @@ decl_error! { } decl_module! { - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; /// Register a parathread with given code for immediate use. @@ -117,7 +117,7 @@ decl_module! { ensure!(outgoing.binary_search(&id).is_err(), Error::::ParaAlreadyExists); - ::Currency::reserve(&who, T::ParathreadDeposit::get())?; + ::Currency::reserve(&who, T::ParathreadDeposit::get())?; >::insert(id, who); Paras::insert(id, false); @@ -142,7 +142,7 @@ decl_module! { /// governance intervention). #[weight = 0] fn deregister_parathread(origin) -> DispatchResult { - let id = ensure_parachain(::Origin::from(origin))?; + let id = ensure_parachain(::Origin::from(origin))?; ensure!(ParathreadsRegistrationEnabled::get(), Error::::ParathreadsRegistrationDisabled); @@ -151,7 +151,7 @@ decl_module! { ensure!(!is_parachain, Error::::InvalidThreadId); let debtor = >::take(id); - let _ = ::Currency::unreserve(&debtor, T::ParathreadDeposit::get()); + let _ = ::Currency::unreserve(&debtor, T::ParathreadDeposit::get()); runtime_parachains::schedule_para_cleanup::(id); @@ -187,7 +187,7 @@ decl_module! { /// and the auction deposit are switched. #[weight = 0] fn swap(origin, other: ParaId) { - let id = ensure_parachain(::Origin::from(origin))?; + let id = ensure_parachain(::Origin::from(origin))?; if PendingSwap::get(other) == Some(id) { // Remove intention to swap. @@ -211,7 +211,7 @@ decl_module! { } } -impl Module { +impl Module { /// Register a parachain with given code. Must be called by root. /// Fails if given ID is already used. pub fn register_parachain( @@ -306,7 +306,7 @@ mod tests { pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } - impl frame_system::Trait for Test { + impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Call = Call; @@ -345,7 +345,7 @@ mod tests { pub const ExistentialDeposit: Balance = 1; } - impl pallet_balances::Trait for Test { + impl pallet_balances::Config for Test { type Balance = u128; type DustRemoval = (); type Event = (); @@ -371,7 +371,7 @@ mod tests { pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; } - impl pallet_session::Trait for Test { + impl pallet_session::Config for Test { type SessionManager = (); type Keys = UintAuthorityId; type ShouldEndSession = pallet_session::PeriodicSessions; @@ -395,7 +395,7 @@ mod tests { pub const StakingUnsignedPriority: u64 = u64::max_value() / 2; } - impl pallet_staking::Trait for Test { + impl pallet_staking::Config for Test { type RewardRemainder = (); type CurrencyToVote = frame_support::traits::SaturatingCurrencyToVote; type Event = (); @@ -420,24 +420,24 @@ mod tests { type WeightInfo = (); } - impl pallet_timestamp::Trait for Test { + impl pallet_timestamp::Config for Test { type Moment = u64; type OnTimestampSet = (); type MinimumPeriod = MinimumPeriod; type WeightInfo = (); } - impl dmp::Trait for Test {} + impl dmp::Config for Test {} - impl ump::Trait for Test { + impl ump::Config for Test { type UmpSink = (); } - impl hrmp::Trait for Test { + impl hrmp::Config for Test { type Origin = Origin; } - impl pallet_session::historical::Trait for Test { + impl pallet_session::historical::Config for Test { type FullIdentification = pallet_staking::Exposure; type FullIdentificationOf = pallet_staking::ExposureOf; } @@ -467,23 +467,23 @@ mod tests { pub type ReporterId = app::Public; } - impl paras::Trait for Test { + impl paras::Config for Test { type Origin = Origin; } - impl configuration::Trait for Test { } + impl configuration::Config for Test { } - impl inclusion::Trait for Test { + impl inclusion::Config for Test { type Event = (); } - impl session_info::AuthorityDiscoveryTrait for Test { + impl session_info::AuthorityDiscoveryConfig for Test { fn authorities() -> Vec { Vec::new() } } - impl session_info::Trait for Test { } + impl session_info::Config for Test { } pub struct TestRandomness; @@ -493,11 +493,11 @@ mod tests { } } - impl initializer::Trait for Test { + impl initializer::Config for Test { type Randomness = TestRandomness; } - impl scheduler::Trait for Test { } + impl scheduler::Config for Test { } type Extrinsic = TestXt; @@ -507,8 +507,8 @@ mod tests { fn create_transaction>( call: Call, _public: test_keys::ReporterId, - _account: ::AccountId, - nonce: ::Index, + _account: ::AccountId, + nonce: ::Index, ) -> Option<(Call, ::SignaturePayload)> { Some((call, (nonce, ()))) } @@ -525,7 +525,7 @@ mod tests { pub const MaxRetries: u32 = 3; } - impl Trait for Test { + impl Config for Test { type Origin = Origin; type Currency = pallet_balances::Module; type ParathreadDeposit = ParathreadDeposit; diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index fcaf598d64..1ff03a3640 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -30,13 +30,13 @@ use runtime_parachains::{ use primitives::v1::Id as ParaId; /// The module's configuration trait. -pub trait Trait: - configuration::Trait + paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait +pub trait Config: + configuration::Config + paras::Config + dmp::Config + ump::Config + hrmp::Config { } decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// The specified parachain or parathread is not registered. ParaDoesntExist, /// A DMP message couldn't be sent because it exceeds the maximum size allowed for a downward @@ -49,7 +49,7 @@ decl_error! { decl_module! { /// A sudo wrapper to call into v1 paras module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; /// Schedule a para to be initialized at the start of the next session. diff --git a/runtime/common/src/purchase.rs b/runtime/common/src/purchase.rs index 5969bc8b0f..7a29b4641a 100644 --- a/runtime/common/src/purchase.rs +++ b/runtime/common/src/purchase.rs @@ -28,9 +28,9 @@ use sp_core::sr25519; use sp_std::prelude::*; /// Configuration trait. -pub trait Trait: frame_system::Trait { +pub trait Config: frame_system::Config { /// The overarching event type. - type Event: From> + Into<::Event>; + type Event: From> + Into<::Event>; /// Balances Pallet type Currency: Currency; /// Vesting Pallet @@ -47,7 +47,7 @@ pub trait Trait: frame_system::Trait { type MaxUnlocked: Get>; } -type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; /// The kind of a statement an account needs to make for a claim to be valid. #[derive(Encode, Decode, Clone, Copy, Eq, PartialEq, RuntimeDebug)] @@ -103,9 +103,9 @@ pub struct AccountStatus { decl_event!( pub enum Event where - AccountId = ::AccountId, + AccountId = ::AccountId, Balance = BalanceOf, - BlockNumber = ::BlockNumber, + BlockNumber = ::BlockNumber, { /// A [new] account was created. AccountCreated(AccountId), @@ -125,7 +125,7 @@ decl_event!( ); decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// Account is not currently valid to use. InvalidAccount, /// Account used in the purchase already exists. @@ -146,7 +146,7 @@ decl_error! { } decl_storage! { - trait Store for Module as Purchase { + trait Store for Module as Purchase { // A map of all participants in the DOT purchase process. Accounts: map hasher(blake2_128_concat) T::AccountId => AccountStatus>; // The account that will be used to payout participants of the DOT purchase process. @@ -159,7 +159,7 @@ decl_storage! { } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::Origin { type Error = Error; /// The maximum statement length for the statement users to sign when creating an account. @@ -340,7 +340,7 @@ decl_module! { } } -impl Module { +impl Module { fn verify_signature(who: &T::AccountId, signature: &[u8]) -> Result<(), DispatchError> { // sr25519 always expects a 64 byte signature. ensure!(signature.len() == 64, Error::::InvalidSignature); @@ -374,7 +374,7 @@ fn account_to_bytes(account: &AccountId) -> Result<[u8; 32], Dispatch /// WARNING: Executing this function will clear all storage used by this pallet. /// Be sure this is what you want... pub fn remove_pallet() -> frame_support::weights::Weight - where T: frame_system::Trait + where T: frame_system::Config { use frame_support::migration::remove_storage_prefix; remove_storage_prefix(b"Purchase", b"Accounts", b""); @@ -428,7 +428,7 @@ mod tests { pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } - impl frame_system::Trait for Test { + impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Call = Call; @@ -460,7 +460,7 @@ mod tests { pub const ExistentialDeposit: u64 = 1; } - impl pallet_balances::Trait for Test { + impl pallet_balances::Config for Test { type Balance = u64; type Event = (); type DustRemoval = (); @@ -474,7 +474,7 @@ mod tests { pub const MinVestedTransfer: u64 = 0; } - impl pallet_vesting::Trait for Test { + impl pallet_vesting::Config for Test { type Event = (); type Currency = Balances; type BlockNumberToBalance = Identity; @@ -494,7 +494,7 @@ mod tests { pub const ConfigurationOrigin: AccountId = AccountId32::from([2u8; 32]); } - impl Trait for Test { + impl Config for Test { type Event = (); type Currency = Balances; type VestingSchedule = Vesting; @@ -692,7 +692,7 @@ mod tests { ); // Account with vesting - assert_ok!(::VestingSchedule::add_vesting_schedule( + assert_ok!(::VestingSchedule::add_vesting_schedule( &alice(), 100, 1, @@ -933,13 +933,13 @@ mod tests { bob(), )); // Payment is made. - assert_eq!(::Currency::free_balance(&payment_account()), 99_650); - assert_eq!(::Currency::free_balance(&alice()), 100); + assert_eq!(::Currency::free_balance(&payment_account()), 99_650); + assert_eq!(::Currency::free_balance(&alice()), 100); // 10% of the 50 units is unlocked automatically for Alice - assert_eq!(::VestingSchedule::vesting_balance(&alice()), Some(45)); - assert_eq!(::Currency::free_balance(&bob()), 250); + assert_eq!(::VestingSchedule::vesting_balance(&alice()), Some(45)); + assert_eq!(::Currency::free_balance(&bob()), 250); // A max of 10 units is unlocked automatically for Bob - assert_eq!(::VestingSchedule::vesting_balance(&bob()), Some(140)); + assert_eq!(::VestingSchedule::vesting_balance(&bob()), Some(140)); // Status is completed. assert_eq!( Accounts::::get(alice()), @@ -966,13 +966,13 @@ mod tests { let vest_call = Call::Vesting(pallet_vesting::Call::::vest()); assert_ok!(vest_call.clone().dispatch(Origin::signed(alice()))); assert_ok!(vest_call.clone().dispatch(Origin::signed(bob()))); - assert_eq!(::VestingSchedule::vesting_balance(&alice()), Some(45)); - assert_eq!(::VestingSchedule::vesting_balance(&bob()), Some(140)); + assert_eq!(::VestingSchedule::vesting_balance(&alice()), Some(45)); + assert_eq!(::VestingSchedule::vesting_balance(&bob()), Some(140)); System::set_block_number(101); assert_ok!(vest_call.clone().dispatch(Origin::signed(alice()))); assert_ok!(vest_call.clone().dispatch(Origin::signed(bob()))); - assert_eq!(::VestingSchedule::vesting_balance(&alice()), None); - assert_eq!(::VestingSchedule::vesting_balance(&bob()), None); + assert_eq!(::VestingSchedule::vesting_balance(&alice()), None); + assert_eq!(::VestingSchedule::vesting_balance(&bob()), None); }); } @@ -985,7 +985,7 @@ mod tests { alice(), ), BadOrigin); // Account with Existing Vesting Schedule - assert_ok!(::VestingSchedule::add_vesting_schedule( + assert_ok!(::VestingSchedule::add_vesting_schedule( &bob(), 100, 1, 50, )); assert_noop!(Purchase::payout( diff --git a/runtime/common/src/slots.rs b/runtime/common/src/slots.rs index 16dfb04aa7..ec51aa539b 100644 --- a/runtime/common/src/slots.rs +++ b/runtime/common/src/slots.rs @@ -34,12 +34,12 @@ use primitives::v1::{ use frame_system::{ensure_signed, ensure_root}; use crate::slot_range::{SlotRange, SLOT_RANGE_COUNT}; -type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; /// The module's configuration trait. -pub trait Trait: frame_system::Trait { +pub trait Config: frame_system::Config { /// The overarching event type. - type Event: From> + Into<::Event>; + type Event: From> + Into<::Event>; /// The currency type used for bidding. type Currency: ReservableCurrency; @@ -161,18 +161,18 @@ pub enum IncomingParachain { Deploy { code: ValidationCode, initial_head_data: HeadData }, } -type LeasePeriodOf = ::BlockNumber; +type LeasePeriodOf = ::BlockNumber; // Winning data type. This encodes the top bidders of each range together with their bid. type WinningData = - [Option<(Bidder<::AccountId>, BalanceOf)>; SLOT_RANGE_COUNT]; + [Option<(Bidder<::AccountId>, BalanceOf)>; SLOT_RANGE_COUNT]; // Winners data type. This encodes each of the final winners of a parachain auction, the parachain // index assigned to them, their winning bid and the range that they won. type WinnersData = - Vec<(Option::AccountId>>, ParaId, BalanceOf, SlotRange)>; + Vec<(Option::AccountId>>, ParaId, BalanceOf, SlotRange)>; // This module's storage items. decl_storage! { - trait Store for Module as Slots { + trait Store for Module as Slots { /// The number of auctions that have been started so far. pub AuctionCounter get(fn auction_counter): AuctionIndex; @@ -245,7 +245,7 @@ fn swap_ordered_existence(ids: &mut [T], one: T, oth ids.sort(); } -impl SwapAux for Module { +impl SwapAux for Module { fn ensure_can_swap(one: ParaId, other: ParaId) -> Result<(), &'static str> { if >::contains_key(one) || >::contains_key(other) { Err("can't swap an undeployed parachain")? @@ -262,8 +262,8 @@ impl SwapAux for Module { decl_event!( pub enum Event where - AccountId = ::AccountId, - BlockNumber = ::BlockNumber, + AccountId = ::AccountId, + BlockNumber = ::BlockNumber, LeasePeriod = LeasePeriodOf, ParaId = ParaId, Balance = BalanceOf, @@ -292,7 +292,7 @@ decl_event!( ); decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// This auction is already in progress. AuctionInProgress, /// The lease period is in the past. @@ -323,7 +323,7 @@ decl_error! { } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::Origin { type Error = Error; fn deposit_event() = default; @@ -520,7 +520,7 @@ decl_module! { .ok_or(Error::::ParaNotOnboarding)?; if let IncomingParachain::Fixed{code_hash, code_size, initial_head_data} = details { ensure!(code.0.len() as u32 == code_size, Error::::InvalidCode); - ensure!(::Hashing::hash(&code.0) == code_hash, Error::::InvalidCode); + ensure!(::Hashing::hash(&code.0) == code_hash, Error::::InvalidCode); if starts > Self::lease_period_index() { // Hasn't yet begun. Replace the on-boarding entry with the new information. @@ -542,7 +542,7 @@ decl_module! { } } -impl Module { +impl Module { /// Deposit currently held for a particular parachain that we administer. fn deposit_held(para_id: &ParaId) -> BalanceOf { >::get(para_id).into_iter().max().unwrap_or_else(Zero::zero) @@ -968,7 +968,7 @@ mod tests { pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } - impl frame_system::Trait for Test { + impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Call = (); @@ -1000,7 +1000,7 @@ mod tests { pub const ExistentialDeposit: u64 = 1; } - impl pallet_balances::Trait for Test { + impl pallet_balances::Config for Test { type Balance = u64; type Event = (); type DustRemoval = (); @@ -1074,7 +1074,7 @@ mod tests { pub const EndingPeriod: BlockNumber = 3; } - impl Trait for Test { + impl Config for Test { type Event = (); type Currency = Balances; type Parachains = TestParachains; diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 14b6af0394..2cc1af280d 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -127,7 +127,7 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -impl frame_system::Trait for Runtime { +impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; type Origin = Origin; type Call = Call; @@ -159,7 +159,7 @@ parameter_types! { pub const MaxScheduledPerBlock: u32 = 50; } -impl pallet_scheduler::Trait for Runtime { +impl pallet_scheduler::Config for Runtime { type Event = Event; type Origin = Origin; type PalletsOrigin = OriginCaller; @@ -175,7 +175,7 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; } -impl pallet_babe::Trait for Runtime { +impl pallet_babe::Config for Runtime { type EpochDuration = EpochDuration; type ExpectedBlockTime = ExpectedBlockTime; @@ -204,7 +204,7 @@ parameter_types! { pub const IndexDeposit: Balance = 1 * DOLLARS; } -impl pallet_indices::Trait for Runtime { +impl pallet_indices::Config for Runtime { type AccountIndex = AccountIndex; type Currency = Balances; type Deposit = IndexDeposit; @@ -217,7 +217,7 @@ parameter_types! { pub const MaxLocks: u32 = 50; } -impl pallet_balances::Trait for Runtime { +impl pallet_balances::Config for Runtime { type Balance = Balance; type DustRemoval = (); type Event = Event; @@ -231,7 +231,7 @@ parameter_types! { pub const TransactionByteFee: Balance = 10 * MILLICENTS; } -impl pallet_transaction_payment::Trait for Runtime { +impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type TransactionByteFee = TransactionByteFee; type WeightToFee = WeightToFee; @@ -241,7 +241,7 @@ impl pallet_transaction_payment::Trait for Runtime { parameter_types! { pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } -impl pallet_timestamp::Trait for Runtime { +impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Babe; type MinimumPeriod = MinimumPeriod; @@ -253,7 +253,7 @@ parameter_types! { } // TODO: substrate#2986 implement this properly -impl pallet_authorship::Trait for Runtime { +impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; type UncleGenerations = UncleGenerations; type FilterUncle = (); @@ -279,7 +279,7 @@ parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } -impl pallet_session::Trait for Runtime { +impl pallet_session::Config for Runtime { type Event = Event; type ValidatorId = AccountId; type ValidatorIdOf = pallet_staking::StashOf; @@ -292,7 +292,7 @@ impl pallet_session::Trait for Runtime { type WeightInfo = weights::pallet_session::WeightInfo; } -impl pallet_session::historical::Trait for Runtime { +impl pallet_session::historical::Config for Runtime { type FullIdentification = pallet_staking::Exposure; type FullIdentificationOf = pallet_staking::ExposureOf; } @@ -337,7 +337,7 @@ type SlashCancelOrigin = EnsureOneOf< pallet_collective::EnsureProportionAtLeast<_1, _2, AccountId, CouncilCollective> >; -impl pallet_staking::Trait for Runtime { +impl pallet_staking::Config for Runtime { type Currency = Balances; type UnixTime = Timestamp; type CurrencyToVote = CurrencyToVote; @@ -379,7 +379,7 @@ parameter_types! { pub const MaxProposals: u32 = 100; } -impl pallet_democracy::Trait for Runtime { +impl pallet_democracy::Config for Runtime { type Proposal = Call; type Event = Event; type Currency = Balances; @@ -435,7 +435,7 @@ parameter_types! { } type CouncilCollective = pallet_collective::Instance1; -impl pallet_collective::Trait for Runtime { +impl pallet_collective::Config for Runtime { type Origin = Origin; type Proposal = Call; type Event = Event; @@ -458,7 +458,7 @@ parameter_types! { // Make sure that there are no more than MaxMembers members elected via phragmen. const_assert!(DesiredMembers::get() <= CouncilMaxMembers::get()); -impl pallet_elections_phragmen::Trait for Runtime { +impl pallet_elections_phragmen::Config for Runtime { type Event = Event; type Currency = Balances; type ChangeMembers = Council; @@ -483,7 +483,7 @@ parameter_types! { } type TechnicalCollective = pallet_collective::Instance2; -impl pallet_collective::Trait for Runtime { +impl pallet_collective::Config for Runtime { type Origin = Origin; type Proposal = Call; type Event = Event; @@ -494,7 +494,7 @@ impl pallet_collective::Trait for Runtime { type WeightInfo = weights::pallet_collective::WeightInfo; } -impl pallet_membership::Trait for Runtime { +impl pallet_membership::Config for Runtime { type Event = Event; type AddOrigin = MoreThanHalfCouncil; type RemoveOrigin = MoreThanHalfCouncil; @@ -530,7 +530,7 @@ type ApproveOrigin = EnsureOneOf< pallet_collective::EnsureProportionAtLeast<_3, _5, AccountId, CouncilCollective> >; -impl pallet_treasury::Trait for Runtime { +impl pallet_treasury::Config for Runtime { type ModuleId = TreasuryModuleId; type Currency = Balances; type ApproveOrigin = ApproveOrigin; @@ -560,14 +560,14 @@ parameter_types! { pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); } -impl pallet_offences::Trait for Runtime { +impl pallet_offences::Config for Runtime { type Event = Event; type IdentificationTuple = pallet_session::historical::IdentificationTuple; type OnOffenceHandler = Staking; type WeightSoftLimit = OffencesWeightSoftLimit; } -impl pallet_authority_discovery::Trait for Runtime {} +impl pallet_authority_discovery::Config for Runtime {} parameter_types! { pub const SessionDuration: BlockNumber = EPOCH_DURATION_IN_BLOCKS as _; @@ -579,7 +579,7 @@ parameter_types! { pub const ImOnlineUnsignedPriority: TransactionPriority = TransactionPriority::max_value(); } -impl pallet_im_online::Trait for Runtime { +impl pallet_im_online::Config for Runtime { type AuthorityId = ImOnlineId; type Event = Event; type ReportUnresponsiveness = Offences; @@ -588,7 +588,7 @@ impl pallet_im_online::Trait for Runtime { type WeightInfo = weights::pallet_im_online::WeightInfo; } -impl pallet_grandpa::Trait for Runtime { +impl pallet_grandpa::Config for Runtime { type Event = Event; type Call = Call; @@ -616,7 +616,7 @@ impl frame_system::offchain::CreateSignedTransaction for R call: Call, public: ::Signer, account: AccountId, - nonce: ::Index, + nonce: ::Index, ) -> Option<(Call, ::SignaturePayload)> { // take the biggest period possible. let period = BlockHashCount::get() @@ -666,7 +666,7 @@ parameter_types! { pub Prefix: &'static [u8] = b"Pay KSMs to the Kusama account:"; } -impl claims::Trait for Runtime { +impl claims::Config for Runtime { type Event = Event; type VestingSchedule = Vesting; type Prefix = Prefix; @@ -683,7 +683,7 @@ parameter_types! { pub const MaxRegistrars: u32 = 20; } -impl pallet_identity::Trait for Runtime { +impl pallet_identity::Config for Runtime { type Event = Event; type Currency = Balances; type Slashed = Treasury; @@ -698,7 +698,7 @@ impl pallet_identity::Trait for Runtime { type WeightInfo = weights::pallet_identity::WeightInfo; } -impl pallet_utility::Trait for Runtime { +impl pallet_utility::Config for Runtime { type Event = Event; type Call = Call; type WeightInfo = weights::pallet_utility::WeightInfo; @@ -712,7 +712,7 @@ parameter_types! { pub const MaxSignatories: u16 = 100; } -impl pallet_multisig::Trait for Runtime { +impl pallet_multisig::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -729,7 +729,7 @@ parameter_types! { pub const RecoveryDeposit: Balance = 5 * DOLLARS; } -impl pallet_recovery::Trait for Runtime { +impl pallet_recovery::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -750,7 +750,7 @@ parameter_types! { pub const SocietyModuleId: ModuleId = ModuleId(*b"py/socie"); } -impl pallet_society::Trait for Runtime { +impl pallet_society::Config for Runtime { type Event = Event; type Currency = Balances; type Randomness = RandomnessCollectiveFlip; @@ -771,7 +771,7 @@ parameter_types! { pub const MinVestedTransfer: Balance = 100 * DOLLARS; } -impl pallet_vesting::Trait for Runtime { +impl pallet_vesting::Config for Runtime { type Event = Event; type Currency = Balances; type BlockNumberToBalance = ConvertInto; @@ -874,7 +874,7 @@ impl InstanceFilter for ProxyType { } } -impl pallet_proxy::Trait for Runtime { +impl pallet_proxy::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -1248,9 +1248,9 @@ sp_api::impl_runtime_apis! { use pallet_offences_benchmarking::Module as OffencesBench; use frame_system_benchmarking::Module as SystemBench; - impl pallet_session_benchmarking::Trait for Runtime {} - impl pallet_offences_benchmarking::Trait for Runtime {} - impl frame_system_benchmarking::Trait for Runtime {} + impl pallet_session_benchmarking::Config for Runtime {} + impl pallet_offences_benchmarking::Config for Runtime {} + impl frame_system_benchmarking::Config for Runtime {} let whitelist: Vec = vec![ // Block Number diff --git a/runtime/kusama/src/weights/frame_system.rs b/runtime/kusama/src/weights/frame_system.rs index 07afa8ebca..b44c68542e 100644 --- a/runtime/kusama/src/weights/frame_system.rs +++ b/runtime/kusama/src/weights/frame_system.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for frame_system. pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { +impl frame_system::WeightInfo for WeightInfo { fn remark(_b: u32, ) -> Weight { (1_815_000 as Weight) } diff --git a/runtime/kusama/src/weights/pallet_balances.rs b/runtime/kusama/src/weights/pallet_balances.rs index bd848cf7ef..4ee5687e7e 100644 --- a/runtime/kusama/src/weights/pallet_balances.rs +++ b/runtime/kusama/src/weights/pallet_balances.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_balances. pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { +impl pallet_balances::WeightInfo for WeightInfo { fn transfer() -> Weight { (91_625_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_collective.rs b/runtime/kusama/src/weights/pallet_collective.rs index df8751e61b..5ee9f949f4 100644 --- a/runtime/kusama/src/weights/pallet_collective.rs +++ b/runtime/kusama/src/weights/pallet_collective.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_collective. pub struct WeightInfo(PhantomData); -impl pallet_collective::WeightInfo for WeightInfo { +impl pallet_collective::WeightInfo for WeightInfo { fn set_members(m: u32, n: u32, p: u32, ) -> Weight { (0 as Weight) .saturating_add((20_744_000 as Weight).saturating_mul(m as Weight)) diff --git a/runtime/kusama/src/weights/pallet_democracy.rs b/runtime/kusama/src/weights/pallet_democracy.rs index e9731066bc..7f12bc7559 100644 --- a/runtime/kusama/src/weights/pallet_democracy.rs +++ b/runtime/kusama/src/weights/pallet_democracy.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_democracy. pub struct WeightInfo(PhantomData); -impl pallet_democracy::WeightInfo for WeightInfo { +impl pallet_democracy::WeightInfo for WeightInfo { fn propose() -> Weight { (73_769_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_elections_phragmen.rs b/runtime/kusama/src/weights/pallet_elections_phragmen.rs index 1c21081690..38d37ea631 100644 --- a/runtime/kusama/src/weights/pallet_elections_phragmen.rs +++ b/runtime/kusama/src/weights/pallet_elections_phragmen.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_elections_phragmen. pub struct WeightInfo(PhantomData); -impl pallet_elections_phragmen::WeightInfo for WeightInfo { +impl pallet_elections_phragmen::WeightInfo for WeightInfo { fn vote(v: u32, ) -> Weight { (83_050_000 as Weight) .saturating_add((124_000 as Weight).saturating_mul(v as Weight)) diff --git a/runtime/kusama/src/weights/pallet_identity.rs b/runtime/kusama/src/weights/pallet_identity.rs index 1dec703d1c..09e63ae501 100644 --- a/runtime/kusama/src/weights/pallet_identity.rs +++ b/runtime/kusama/src/weights/pallet_identity.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_identity. pub struct WeightInfo(PhantomData); -impl pallet_identity::WeightInfo for WeightInfo { +impl pallet_identity::WeightInfo for WeightInfo { fn add_registrar(r: u32, ) -> Weight { (26_618_000 as Weight) .saturating_add((318_000 as Weight).saturating_mul(r as Weight)) diff --git a/runtime/kusama/src/weights/pallet_im_online.rs b/runtime/kusama/src/weights/pallet_im_online.rs index 2a30792adf..53073f641e 100644 --- a/runtime/kusama/src/weights/pallet_im_online.rs +++ b/runtime/kusama/src/weights/pallet_im_online.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_im_online. pub struct WeightInfo(PhantomData); -impl pallet_im_online::WeightInfo for WeightInfo { +impl pallet_im_online::WeightInfo for WeightInfo { fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { (108_140_000 as Weight) .saturating_add((217_000 as Weight).saturating_mul(k as Weight)) diff --git a/runtime/kusama/src/weights/pallet_indices.rs b/runtime/kusama/src/weights/pallet_indices.rs index b85495d8c4..07773fe8b4 100644 --- a/runtime/kusama/src/weights/pallet_indices.rs +++ b/runtime/kusama/src/weights/pallet_indices.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_indices. pub struct WeightInfo(PhantomData); -impl pallet_indices::WeightInfo for WeightInfo { +impl pallet_indices::WeightInfo for WeightInfo { fn claim() -> Weight { (51_086_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_multisig.rs b/runtime/kusama/src/weights/pallet_multisig.rs index f6c5aff1ce..14def1b77b 100644 --- a/runtime/kusama/src/weights/pallet_multisig.rs +++ b/runtime/kusama/src/weights/pallet_multisig.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_multisig. pub struct WeightInfo(PhantomData); -impl pallet_multisig::WeightInfo for WeightInfo { +impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { (12_168_000 as Weight) .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) diff --git a/runtime/kusama/src/weights/pallet_proxy.rs b/runtime/kusama/src/weights/pallet_proxy.rs index abb41ccfec..5a520577e3 100644 --- a/runtime/kusama/src/weights/pallet_proxy.rs +++ b/runtime/kusama/src/weights/pallet_proxy.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_proxy. pub struct WeightInfo(PhantomData); -impl pallet_proxy::WeightInfo for WeightInfo { +impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { (30_797_000 as Weight) .saturating_add((182_000 as Weight).saturating_mul(p as Weight)) diff --git a/runtime/kusama/src/weights/pallet_scheduler.rs b/runtime/kusama/src/weights/pallet_scheduler.rs index ad35dcc2be..4ecddb8d5e 100644 --- a/runtime/kusama/src/weights/pallet_scheduler.rs +++ b/runtime/kusama/src/weights/pallet_scheduler.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_scheduler. pub struct WeightInfo(PhantomData); -impl pallet_scheduler::WeightInfo for WeightInfo { +impl pallet_scheduler::WeightInfo for WeightInfo { fn schedule(s: u32, ) -> Weight { (33_450_000 as Weight) .saturating_add((48_000 as Weight).saturating_mul(s as Weight)) diff --git a/runtime/kusama/src/weights/pallet_session.rs b/runtime/kusama/src/weights/pallet_session.rs index 94c1120409..5c2d95a53e 100644 --- a/runtime/kusama/src/weights/pallet_session.rs +++ b/runtime/kusama/src/weights/pallet_session.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_session. pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { +impl pallet_session::WeightInfo for WeightInfo { fn set_keys() -> Weight { (89_426_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_staking.rs b/runtime/kusama/src/weights/pallet_staking.rs index 0c3fa15e14..43316a4236 100644 --- a/runtime/kusama/src/weights/pallet_staking.rs +++ b/runtime/kusama/src/weights/pallet_staking.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_staking. pub struct WeightInfo(PhantomData); -impl pallet_staking::WeightInfo for WeightInfo { +impl pallet_staking::WeightInfo for WeightInfo { fn bond() -> Weight { (91_974_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_timestamp.rs b/runtime/kusama/src/weights/pallet_timestamp.rs index 316312ecc5..61a54a44e5 100644 --- a/runtime/kusama/src/weights/pallet_timestamp.rs +++ b/runtime/kusama/src/weights/pallet_timestamp.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_timestamp. pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { +impl pallet_timestamp::WeightInfo for WeightInfo { fn set() -> Weight { (10_514_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_treasury.rs b/runtime/kusama/src/weights/pallet_treasury.rs index 57b00385de..a9a85c2ff5 100644 --- a/runtime/kusama/src/weights/pallet_treasury.rs +++ b/runtime/kusama/src/weights/pallet_treasury.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_treasury. pub struct WeightInfo(PhantomData); -impl pallet_treasury::WeightInfo for WeightInfo { +impl pallet_treasury::WeightInfo for WeightInfo { fn propose_spend() -> Weight { (52_217_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_utility.rs b/runtime/kusama/src/weights/pallet_utility.rs index e28d168c7a..d4201cd2cf 100644 --- a/runtime/kusama/src/weights/pallet_utility.rs +++ b/runtime/kusama/src/weights/pallet_utility.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_utility. pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { +impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { (18_717_000 as Weight) .saturating_add((1_995_000 as Weight).saturating_mul(c as Weight)) diff --git a/runtime/kusama/src/weights/pallet_vesting.rs b/runtime/kusama/src/weights/pallet_vesting.rs index 1940c2efc2..59ffb2f975 100644 --- a/runtime/kusama/src/weights/pallet_vesting.rs +++ b/runtime/kusama/src/weights/pallet_vesting.rs @@ -43,7 +43,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_vesting. pub struct WeightInfo(PhantomData); -impl pallet_vesting::WeightInfo for WeightInfo { +impl pallet_vesting::WeightInfo for WeightInfo { fn vest_locked(l: u32, ) -> Weight { (54_477_000 as Weight) .saturating_add((129_000 as Weight).saturating_mul(l as Weight)) diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 96ab3dd88a..159caadabb 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -130,24 +130,24 @@ pub struct HostConfiguration { pub hrmp_max_message_num_per_candidate: u32, } -pub trait Trait: frame_system::Trait { } +pub trait Config: frame_system::Config { } decl_storage! { - trait Store for Module as Configuration { + trait Store for Module as Configuration { /// The active configuration for the current session. - Config get(fn config) config(): HostConfiguration; + ActiveConfig get(fn config) config(): HostConfiguration; /// Pending configuration (if any) for the next session. PendingConfig: Option>; } } decl_error! { - pub enum Error for Module { } + pub enum Error for Module { } } decl_module! { /// The parachains configuration module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; /// Set the validation upgrade frequency. @@ -506,7 +506,7 @@ decl_module! { } } -impl Module { +impl Module { /// Called by the initializer to initialize the configuration module. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { 0 @@ -518,7 +518,7 @@ impl Module { /// Called by the initializer to note that a new session has started. pub(crate) fn initializer_on_new_session(_validators: &[ValidatorId], _queued: &[ValidatorId]) { if let Some(pending) = ::PendingConfig::take() { - ::Config::set(pending); + ::ActiveConfig::set(pending); } } diff --git a/runtime/parachains/src/dmp.rs b/runtime/parachains/src/dmp.rs index 004308c0d7..49fb2f8a57 100644 --- a/runtime/parachains/src/dmp.rs +++ b/runtime/parachains/src/dmp.rs @@ -62,10 +62,10 @@ impl fmt::Debug for ProcessedDownwardMessagesAcceptanceErr { } } -pub trait Trait: frame_system::Trait + configuration::Trait {} +pub trait Config: frame_system::Config + configuration::Config {} decl_storage! { - trait Store for Module as Dmp { + trait Store for Module as Dmp { /// Paras that are to be cleaned up at the end of the session. /// The entries are sorted ascending by the para id. OutgoingParas: Vec; @@ -85,11 +85,11 @@ decl_storage! { decl_module! { /// The DMP module. - pub struct Module for enum Call where origin: ::Origin { } + pub struct Module for enum Call where origin: ::Origin { } } /// Routines and getters related to downward message passing. -impl Module { +impl Module { /// Block initialization logic, called by initializer. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { 0 diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index 3361470466..9ce7220e2d 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -207,14 +207,14 @@ impl fmt::Debug for OutboundHrmpAcceptanceErr { } } -pub trait Trait: frame_system::Trait + configuration::Trait + paras::Trait + dmp::Trait { +pub trait Config: frame_system::Config + configuration::Config + paras::Config + dmp::Config { type Origin: From - + From<::Origin> - + Into::Origin>>; + + From<::Origin> + + Into::Origin>>; } decl_storage! { - trait Store for Module as Hrmp { + trait Store for Module as Hrmp { /// Paras that are to be cleaned up at the end of the session. /// The entries are sorted ascending by the para id. OutgoingParas: Vec; @@ -286,7 +286,7 @@ decl_storage! { } decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// The sender tried to open a channel to themselves. OpenHrmpChannelToSelf, /// The recipient is not a valid para. @@ -322,7 +322,7 @@ decl_error! { decl_module! { /// The HRMP module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; #[weight = 0] @@ -332,7 +332,7 @@ decl_module! { proposed_max_capacity: u32, proposed_max_message_size: u32, ) -> DispatchResult { - let origin = ensure_parachain(::Origin::from(origin))?; + let origin = ensure_parachain(::Origin::from(origin))?; Self::init_open_channel( origin, recipient, @@ -344,14 +344,14 @@ decl_module! { #[weight = 0] fn hrmp_accept_open_channel(origin, sender: ParaId) -> DispatchResult { - let origin = ensure_parachain(::Origin::from(origin))?; + let origin = ensure_parachain(::Origin::from(origin))?; Self::accept_open_channel(origin, sender)?; Ok(()) } #[weight = 0] fn hrmp_close_channel(origin, channel_id: HrmpChannelId) -> DispatchResult { - let origin = ensure_parachain(::Origin::from(origin))?; + let origin = ensure_parachain(::Origin::from(origin))?; Self::close_channel(origin, channel_id)?; Ok(()) } @@ -359,7 +359,7 @@ decl_module! { } /// Routines and getters related to HRMP. -impl Module { +impl Module { /// Block initialization logic, called by initializer. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { 0 diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 39a2cf71ce..0b05f78064 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -85,19 +85,19 @@ impl CandidatePendingAvailability { } } -pub trait Trait: - frame_system::Trait - + paras::Trait - + dmp::Trait - + ump::Trait - + hrmp::Trait - + configuration::Trait +pub trait Config: + frame_system::Config + + paras::Config + + dmp::Config + + ump::Config + + hrmp::Config + + configuration::Config { - type Event: From> + Into<::Event>; + type Event: From> + Into<::Event>; } decl_storage! { - trait Store for Module as ParaInclusion { + trait Store for Module as ParaInclusion { /// The latest bitfield for each validator, referred to by their index in the validator set. AvailabilityBitfields: map hasher(twox_64_concat) ValidatorIndex => Option>; @@ -119,7 +119,7 @@ decl_storage! { } decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// Availability bitfield has unexpected size. WrongBitfieldSize, /// Multiple bitfields submitted by same validator or validators out of order by index. @@ -170,7 +170,7 @@ decl_error! { } decl_event! { - pub enum Event where ::Hash { + pub enum Event where ::Hash { /// A candidate was backed. [candidate, head_data] CandidateBacked(CandidateReceipt, HeadData), /// A candidate was included. [candidate, head_data] @@ -182,8 +182,8 @@ decl_event! { decl_module! { /// The parachain-candidate inclusion module. - pub struct Module - for enum Call where origin: ::Origin + pub struct Module + for enum Call where origin: ::Origin { type Error = Error; @@ -193,7 +193,7 @@ decl_module! { const LOG_TARGET: &str = "parachains_runtime_inclusion"; -impl Module { +impl Module { /// Block initialization logic, called by initializer. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { 0 } @@ -733,7 +733,7 @@ enum AcceptanceCheckErr { impl AcceptanceCheckErr { /// Returns the same error so that it can be threaded through a needle of `DispatchError` and /// ultimately returned from a `Dispatchable`. - fn strip_into_dispatch_err(self) -> Error { + fn strip_into_dispatch_err(self) -> Error { use AcceptanceCheckErr::*; match self { HeadDataTooLarge => Error::::HeadDataTooLarge, @@ -748,13 +748,13 @@ impl AcceptanceCheckErr { } /// A collection of data required for checking a candidate. -struct CandidateCheckContext { +struct CandidateCheckContext { config: configuration::HostConfiguration, now: T::BlockNumber, relay_parent_number: T::BlockNumber, } -impl CandidateCheckContext { +impl CandidateCheckContext { fn new() -> Self { let now = >::block_number(); Self { diff --git a/runtime/parachains/src/inclusion_inherent.rs b/runtime/parachains/src/inclusion_inherent.rs index b6cbf94133..bb25f5c80f 100644 --- a/runtime/parachains/src/inclusion_inherent.rs +++ b/runtime/parachains/src/inclusion_inherent.rs @@ -39,10 +39,10 @@ use crate::{ }; use inherents::{InherentIdentifier, InherentData, MakeFatalError, ProvideInherent}; -pub trait Trait: inclusion::Trait + scheduler::Trait {} +pub trait Config: inclusion::Config + scheduler::Config {} decl_storage! { - trait Store for Module as ParaInclusionInherent { + trait Store for Module as ParaInclusionInherent { /// Whether the inclusion inherent was included within this block. /// /// The `Option<()>` is effectively a bool, but it never hits storage in the `None` variant @@ -54,7 +54,7 @@ decl_storage! { } decl_error! { - pub enum Error for Module { + pub enum Error for Module { /// Inclusion inherent called more than once per block. TooManyInclusionInherents, } @@ -62,7 +62,7 @@ decl_error! { decl_module! { /// The inclusion inherent module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; fn on_initialize() -> Weight { @@ -127,7 +127,7 @@ decl_module! { } } -impl ProvideInherent for Module { +impl ProvideInherent for Module { type Call = Call; type Error = MakeFatalError<()>; const INHERENT_IDENTIFIER: InherentIdentifier = INCLUSION_INHERENT_IDENTIFIER; diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index 7ab41e4633..15484ed5fb 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -57,23 +57,23 @@ struct BufferedSessionChange { session_index: sp_staking::SessionIndex, } -pub trait Trait: - frame_system::Trait - + configuration::Trait - + paras::Trait - + scheduler::Trait - + inclusion::Trait - + session_info::Trait - + dmp::Trait - + ump::Trait - + hrmp::Trait +pub trait Config: + frame_system::Config + + configuration::Config + + paras::Config + + scheduler::Config + + inclusion::Config + + session_info::Config + + dmp::Config + + ump::Config + + hrmp::Config { /// A randomness beacon. type Randomness: Randomness; } decl_storage! { - trait Store for Module as Initializer { + trait Store for Module as Initializer { /// Whether the parachains modules have been initialized within this block. /// /// Semantically a bool, but this guarantees it should never hit the trie, @@ -95,12 +95,12 @@ decl_storage! { } decl_error! { - pub enum Error for Module { } + pub enum Error for Module { } } decl_module! { /// The initializer module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; fn on_initialize(now: T::BlockNumber) -> Weight { @@ -159,7 +159,7 @@ decl_module! { } } -impl Module { +impl Module { fn apply_new_session( session_index: sp_staking::SessionIndex, validators: Vec, @@ -225,11 +225,11 @@ impl Module { } } -impl sp_runtime::BoundToRuntimeAppPublic for Module { +impl sp_runtime::BoundToRuntimeAppPublic for Module { type Public = ValidatorId; } -impl pallet_session::OneSessionHandler for Module { +impl pallet_session::OneSessionHandler for Module { type Key = ValidatorId; fn on_genesis_session<'a, I: 'a>(_validators: I) diff --git a/runtime/parachains/src/lib.rs b/runtime/parachains/src/lib.rs index 15c41dce17..7531def266 100644 --- a/runtime/parachains/src/lib.rs +++ b/runtime/parachains/src/lib.rs @@ -45,7 +45,7 @@ mod mock; pub use origin::{Origin, ensure_parachain}; /// Schedule a para to be initialized at the start of the next session with the given genesis data. -pub fn schedule_para_initialize( +pub fn schedule_para_initialize( id: primitives::v1::Id, genesis: paras::ParaGenesisArgs, ) { @@ -55,10 +55,10 @@ pub fn schedule_para_initialize( /// Schedule a para to be cleaned up at the start of the next session. pub fn schedule_para_cleanup(id: primitives::v1::Id) where - T: paras::Trait - + dmp::Trait - + ump::Trait - + hrmp::Trait, + T: paras::Config + + dmp::Config + + ump::Config + + hrmp::Config, { >::schedule_para_cleanup(id); >::schedule_para_cleanup(id); diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 702dac71eb..0934493c15 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -70,7 +70,7 @@ parameter_types! { pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } -impl frame_system::Trait for Test { +impl frame_system::Config for Test { type BaseCallFilter = (); type Origin = Origin; type Call = Call; @@ -98,35 +98,35 @@ impl frame_system::Trait for Test { type SystemWeightInfo = (); } -impl crate::initializer::Trait for Test { +impl crate::initializer::Config for Test { type Randomness = TestRandomness; } -impl crate::configuration::Trait for Test { } +impl crate::configuration::Config for Test { } -impl crate::paras::Trait for Test { +impl crate::paras::Config for Test { type Origin = Origin; } -impl crate::dmp::Trait for Test { } +impl crate::dmp::Config for Test { } -impl crate::ump::Trait for Test { +impl crate::ump::Config for Test { type UmpSink = crate::ump::mock_sink::MockUmpSink; } -impl crate::hrmp::Trait for Test { +impl crate::hrmp::Config for Test { type Origin = Origin; } -impl crate::scheduler::Trait for Test { } +impl crate::scheduler::Config for Test { } -impl crate::inclusion::Trait for Test { +impl crate::inclusion::Config for Test { type Event = TestEvent; } -impl crate::session_info::Trait for Test { } +impl crate::session_info::Config for Test { } -impl crate::session_info::AuthorityDiscoveryTrait for Test { +impl crate::session_info::AuthorityDiscoveryConfig for Test { fn authorities() -> Vec { Vec::new() } diff --git a/runtime/parachains/src/origin.rs b/runtime/parachains/src/origin.rs index b8444181de..f238b91fba 100644 --- a/runtime/parachains/src/origin.rs +++ b/runtime/parachains/src/origin.rs @@ -40,7 +40,7 @@ pub fn ensure_parachain(o: OuterOrigin) -> result::Result for enum Call where origin: ::Origin {} + pub struct Module for enum Call where origin: ::Origin {} } impl From for Origin { diff --git a/runtime/parachains/src/paras.rs b/runtime/parachains/src/paras.rs index 66782d7c12..7a9375b029 100644 --- a/runtime/parachains/src/paras.rs +++ b/runtime/parachains/src/paras.rs @@ -45,11 +45,11 @@ use serde::{Serialize, Deserialize}; pub use crate::Origin; -pub trait Trait: frame_system::Trait + configuration::Trait { +pub trait Config: frame_system::Config + configuration::Config { /// The outer origin type. type Origin: From - + From<::Origin> - + Into::Origin>>; + + From<::Origin> + + Into::Origin>>; } // the two key times necessary to track for every code replacement. @@ -177,7 +177,7 @@ pub struct ParaGenesisArgs { } decl_storage! { - trait Store for Module as Paras { + trait Store for Module as Paras { /// All parachains. Ordered ascending by ParaId. Parathreads are not included. Parachains get(fn parachains): Vec; /// All parathreads. @@ -224,7 +224,7 @@ decl_storage! { } #[cfg(feature = "std")] -fn build(config: &GenesisConfig) { +fn build(config: &GenesisConfig) { let mut parachains: Vec<_> = config.paras .iter() .filter(|(_, args)| args.parachain) @@ -244,17 +244,17 @@ fn build(config: &GenesisConfig) { } decl_error! { - pub enum Error for Module { } + pub enum Error for Module { } } decl_module! { /// The parachains configuration module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; } } -impl Module { +impl Module { /// Called by the initializer to initialize the configuration module. pub(crate) fn initializer_initialize(now: T::BlockNumber) -> Weight { Self::prune_old_code(now) diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index 8b7fe7331d..a573361271 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -31,12 +31,12 @@ use frame_support::debug; use crate::{initializer, inclusion, scheduler, configuration, paras, session_info, dmp, hrmp}; /// Implementation for the `validators` function of the runtime API. -pub fn validators() -> Vec { +pub fn validators() -> Vec { >::validators() } /// Implementation for the `validator_groups` function of the runtime API. -pub fn validator_groups() -> ( +pub fn validator_groups() -> ( Vec>, GroupRotationInfo, ) { @@ -47,7 +47,7 @@ pub fn validator_groups() -> ( } /// Implementation for the `availability_cores` function of the runtime API. -pub fn availability_cores() -> Vec> { +pub fn availability_cores() -> Vec> { let cores = >::availability_cores(); let parachains = >::parachains(); let config = >::config(); @@ -163,24 +163,24 @@ pub fn availability_cores() -> Vec( +fn with_assumption( para_id: ParaId, assumption: OccupiedCoreAssumption, build: F, ) -> Option where - Trait: inclusion::Trait, + Config: inclusion::Config, F: FnOnce() -> Option, { match assumption { OccupiedCoreAssumption::Included => { - >::force_enact(para_id); + >::force_enact(para_id); build() } OccupiedCoreAssumption::TimedOut => { build() } OccupiedCoreAssumption::Free => { - if >::pending_availability(para_id).is_some() { + if >::pending_availability(para_id).is_some() { None } else { build() @@ -190,7 +190,7 @@ fn with_assumption( } /// Implementation for the `full_validation_data` function of the runtime API. -pub fn full_validation_data( +pub fn full_validation_data( para_id: ParaId, assumption: OccupiedCoreAssumption, ) @@ -207,7 +207,7 @@ pub fn full_validation_data( } /// Implementation for the `persisted_validation_data` function of the runtime API. -pub fn persisted_validation_data( +pub fn persisted_validation_data( para_id: ParaId, assumption: OccupiedCoreAssumption, ) -> Option> { @@ -219,7 +219,7 @@ pub fn persisted_validation_data( } /// Implementation for the `check_validation_outputs` function of the runtime API. -pub fn check_validation_outputs( +pub fn check_validation_outputs( para_id: ParaId, outputs: primitives::v1::CandidateCommitments, ) -> bool { @@ -227,7 +227,7 @@ pub fn check_validation_outputs( } /// Implementation for the `session_index_for_child` function of the runtime API. -pub fn session_index_for_child() -> SessionIndex { +pub fn session_index_for_child() -> SessionIndex { // Just returns the session index from `inclusion`. Runtime APIs follow // initialization so the initializer will have applied any pending session change // which is expected at the child of the block whose context the runtime API was invoked @@ -239,7 +239,7 @@ pub fn session_index_for_child() -> SessionIndex { } /// Implementation for the `validation_code` function of the runtime API. -pub fn validation_code( +pub fn validation_code( para_id: ParaId, assumption: OccupiedCoreAssumption, ) -> Option { @@ -251,7 +251,7 @@ pub fn validation_code( } /// Implementation for the `historical_validation_code` function of the runtime API. -pub fn historical_validation_code( +pub fn historical_validation_code( para_id: ParaId, context_height: T::BlockNumber, ) -> Option { @@ -259,7 +259,7 @@ pub fn historical_validation_code( } /// Implementation for the `candidate_pending_availability` function of the runtime API. -pub fn candidate_pending_availability(para_id: ParaId) +pub fn candidate_pending_availability(para_id: ParaId) -> Option> { >::candidate_pending_availability(para_id) @@ -270,8 +270,8 @@ pub fn candidate_pending_availability(para_id: ParaId) // this means it can run in a different session than other runtime APIs at the same block. pub fn candidate_events(extract_event: F) -> Vec> where - T: initializer::Trait, - F: Fn(::Event) -> Option>, + T: initializer::Config, + F: Fn(::Event) -> Option>, { use inclusion::Event as RawEvent; @@ -286,19 +286,19 @@ where } /// Get the session info for the given session, if stored. -pub fn session_info(index: SessionIndex) -> Option { +pub fn session_info(index: SessionIndex) -> Option { >::session_info(index) } /// Implementation for the `dmq_contents` function of the runtime API. -pub fn dmq_contents( +pub fn dmq_contents( recipient: ParaId, ) -> Vec> { >::dmq_contents(recipient) } /// Implementation for the `inbound_hrmp_channels_contents` function of the runtime API. -pub fn inbound_hrmp_channels_contents( +pub fn inbound_hrmp_channels_contents( recipient: ParaId, ) -> BTreeMap>> { >::inbound_hrmp_channels_contents(recipient) diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index 5d06f179fe..8f4b0d55ef 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -153,10 +153,10 @@ impl CoreAssignment { } } -pub trait Trait: frame_system::Trait + configuration::Trait + paras::Trait { } +pub trait Config: frame_system::Config + configuration::Config + paras::Config { } decl_storage! { - trait Store for Module as ParaScheduler { + trait Store for Module as ParaScheduler { /// All the validator groups. One for each core. /// /// Bound: The number of cores is the sum of the numbers of parachains and parathread multiplexers. @@ -190,17 +190,17 @@ decl_storage! { } decl_error! { - pub enum Error for Module { } + pub enum Error for Module { } } decl_module! { /// The scheduler module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; } } -impl Module { +impl Module { /// Called by the initializer to initialize the scheduler module. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { Self::schedule(Vec::new()); diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index 2a183c909f..c3faec7eeb 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -27,17 +27,17 @@ use frame_support::{ use crate::{configuration, paras, scheduler}; use sp_std::{cmp, vec::Vec}; -pub trait Trait: - frame_system::Trait - + configuration::Trait - + paras::Trait - + scheduler::Trait - + AuthorityDiscoveryTrait +pub trait Config: + frame_system::Config + + configuration::Config + + paras::Config + + scheduler::Config + + AuthorityDiscoveryConfig { } decl_storage! { - trait Store for Module as ParaSessionInfo { + trait Store for Module as ParaSessionInfo { /// The earliest session for which previous session info is stored. EarliestStoredSession get(fn earliest_stored_session): SessionIndex; /// Session information in a rolling window. @@ -48,30 +48,30 @@ decl_storage! { } decl_error! { - pub enum Error for Module { } + pub enum Error for Module { } } decl_module! { /// The session info module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { type Error = Error; } } /// An abstraction for the authority discovery pallet /// to help with mock testing. -pub trait AuthorityDiscoveryTrait { +pub trait AuthorityDiscoveryConfig { /// Retrieve authority identifiers of the current and next authority set. fn authorities() -> Vec; } -impl AuthorityDiscoveryTrait for T { +impl AuthorityDiscoveryConfig for T { fn authorities() -> Vec { >::authorities() } } -impl Module { +impl Module { /// Handle an incoming session change. pub(crate) fn initializer_on_new_session( notification: &crate::initializer::SessionChangeNotification @@ -82,7 +82,7 @@ impl Module { let n_parachains = >::parachains().len() as u32; let validators = notification.validators.clone(); - let discovery_keys = ::authorities(); + let discovery_keys = ::authorities(); // FIXME: once we store these keys: https://github.com/paritytech/polkadot/issues/1975 let approval_keys = Default::default(); let validator_groups = >::validator_groups(); diff --git a/runtime/parachains/src/ump.rs b/runtime/parachains/src/ump.rs index 03d52ebb2c..f18ad250b9 100644 --- a/runtime/parachains/src/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -105,13 +105,13 @@ impl fmt::Debug for AcceptanceCheckErr { } } -pub trait Trait: frame_system::Trait + configuration::Trait { +pub trait Config: frame_system::Config + configuration::Config { /// A place where all received upward messages are funneled. type UmpSink: UmpSink; } decl_storage! { - trait Store for Module as Ump { + trait Store for Module as Ump { /// Paras that are to be cleaned up at the end of the session. /// The entries are sorted ascending by the para id. OutgoingParas: Vec; @@ -152,12 +152,12 @@ decl_storage! { decl_module! { /// The UMP module. - pub struct Module for enum Call where origin: ::Origin { + pub struct Module for enum Call where origin: ::Origin { } } /// Routines related to the upward message passing. -impl Module { +impl Module { /// Block initialization logic, called by initializer. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { 0 @@ -365,7 +365,7 @@ impl QueueCache { /// /// - `upward_message` a dequeued message or `None` if the queue _was_ empty. /// - `became_empty` is true if the queue _became_ empty. - fn dequeue(&mut self, para: ParaId) -> (Option, bool) { + fn dequeue(&mut self, para: ParaId) -> (Option, bool) { let cache_entry = self.0.entry(para).or_insert_with(|| { let queue = as Store>::RelayDispatchQueues::get(¶); let (count, total_size) = as Store>::RelayDispatchQueueSize::get(¶); @@ -386,7 +386,7 @@ impl QueueCache { } /// Flushes the updated queues into the storage. - fn flush(self) { + fn flush(self) { // NOTE we use an explicit method here instead of Drop impl because it has unwanted semantics // within runtime. It is dangerous to use because of double-panics and flushing on a panic // is not necessary as well. @@ -427,7 +427,7 @@ struct NeedsDispatchCursor { } impl NeedsDispatchCursor { - fn new() -> Self { + fn new() -> Self { let needs_dispatch: Vec = as Store>::NeedsDispatch::get(); let start_with = as Store>::NextDispatchRoundStartWith::get(); @@ -481,7 +481,7 @@ impl NeedsDispatchCursor { } /// Flushes the dispatcher state into the persistent storage. - fn flush(self) { + fn flush(self) { let next_one = self.peek(); as Store>::NextDispatchRoundStartWith::set(next_one); as Store>::NeedsDispatch::put(self.needs_dispatch); diff --git a/runtime/parachains/src/util.rs b/runtime/parachains/src/util.rs index d73f824c45..151222cbec 100644 --- a/runtime/parachains/src/util.rs +++ b/runtime/parachains/src/util.rs @@ -25,7 +25,7 @@ use crate::{configuration, paras, dmp, hrmp}; /// Make the persisted validation data for a particular parachain. /// /// This ties together the storage of several modules. -pub fn make_persisted_validation_data( +pub fn make_persisted_validation_data( para_id: ParaId, ) -> Option> { let config = >::config(); @@ -43,7 +43,7 @@ pub fn make_persisted_validation_data( /// Make the transient validation data for a particular parachain. /// /// This ties together the storage of several modules. -pub fn make_transient_validation_data( +pub fn make_transient_validation_data( para_id: ParaId, ) -> Option> { let config = >::config(); diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index a91fdbda77..373f93a8ee 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -140,7 +140,7 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -impl frame_system::Trait for Runtime { +impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; type Origin = Origin; type Call = Call; @@ -172,7 +172,7 @@ parameter_types! { pub const MaxScheduledPerBlock: u32 = 50; } -impl pallet_scheduler::Trait for Runtime { +impl pallet_scheduler::Config for Runtime { type Event = Event; type Origin = Origin; type PalletsOrigin = OriginCaller; @@ -188,7 +188,7 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; } -impl pallet_babe::Trait for Runtime { +impl pallet_babe::Config for Runtime { type EpochDuration = EpochDuration; type ExpectedBlockTime = ExpectedBlockTime; @@ -217,7 +217,7 @@ parameter_types! { pub const IndexDeposit: Balance = 10 * DOLLARS; } -impl pallet_indices::Trait for Runtime { +impl pallet_indices::Config for Runtime { type AccountIndex = AccountIndex; type Currency = Balances; type Deposit = IndexDeposit; @@ -230,7 +230,7 @@ parameter_types! { pub const MaxLocks: u32 = 50; } -impl pallet_balances::Trait for Runtime { +impl pallet_balances::Config for Runtime { type Balance = Balance; type DustRemoval = (); type Event = Event; @@ -244,7 +244,7 @@ parameter_types! { pub const TransactionByteFee: Balance = 10 * MILLICENTS; } -impl pallet_transaction_payment::Trait for Runtime { +impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type TransactionByteFee = TransactionByteFee; type WeightToFee = WeightToFee; @@ -254,7 +254,7 @@ impl pallet_transaction_payment::Trait for Runtime { parameter_types! { pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } -impl pallet_timestamp::Trait for Runtime { +impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Babe; type MinimumPeriod = MinimumPeriod; @@ -266,7 +266,7 @@ parameter_types! { } // TODO: substrate#2986 implement this properly -impl pallet_authorship::Trait for Runtime { +impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; type UncleGenerations = UncleGenerations; type FilterUncle = (); @@ -287,7 +287,7 @@ parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } -impl pallet_session::Trait for Runtime { +impl pallet_session::Config for Runtime { type Event = Event; type ValidatorId = AccountId; type ValidatorIdOf = pallet_staking::StashOf; @@ -300,7 +300,7 @@ impl pallet_session::Trait for Runtime { type WeightInfo = weights::pallet_session::WeightInfo; } -impl pallet_session::historical::Trait for Runtime { +impl pallet_session::historical::Config for Runtime { type FullIdentification = pallet_staking::Exposure; type FullIdentificationOf = pallet_staking::ExposureOf; } @@ -344,7 +344,7 @@ type SlashCancelOrigin = EnsureOneOf< pallet_collective::EnsureProportionAtLeast<_3, _4, AccountId, CouncilCollective> >; -impl pallet_staking::Trait for Runtime { +impl pallet_staking::Config for Runtime { type Currency = Balances; type UnixTime = Timestamp; type CurrencyToVote = CurrencyToVote; @@ -382,7 +382,7 @@ parameter_types! { pub const MaxRegistrars: u32 = 20; } -impl pallet_identity::Trait for Runtime { +impl pallet_identity::Config for Runtime { type Event = Event; type Currency = Balances; type BasicDeposit = BasicDeposit; @@ -411,7 +411,7 @@ parameter_types! { pub const MaxProposals: u32 = 100; } -impl pallet_democracy::Trait for Runtime { +impl pallet_democracy::Config for Runtime { type Proposal = Call; type Event = Event; type Currency = Balances; @@ -480,7 +480,7 @@ parameter_types! { } type CouncilCollective = pallet_collective::Instance1; -impl pallet_collective::Trait for Runtime { +impl pallet_collective::Config for Runtime { type Origin = Origin; type Proposal = Call; type Event = Event; @@ -504,7 +504,7 @@ parameter_types! { // Make sure that there are no more than `MaxMembers` members elected via phragmen. const_assert!(DesiredMembers::get() <= CouncilMaxMembers::get()); -impl pallet_elections_phragmen::Trait for Runtime { +impl pallet_elections_phragmen::Config for Runtime { type Event = Event; type ModuleId = ElectionsPhragmenModuleId; type Currency = Balances; @@ -529,7 +529,7 @@ parameter_types! { } type TechnicalCollective = pallet_collective::Instance2; -impl pallet_collective::Trait for Runtime { +impl pallet_collective::Config for Runtime { type Origin = Origin; type Proposal = Call; type Event = Event; @@ -540,7 +540,7 @@ impl pallet_collective::Trait for Runtime { type WeightInfo = weights::pallet_collective::WeightInfo; } -impl pallet_membership::Trait for Runtime { +impl pallet_membership::Config for Runtime { type Event = Event; type AddOrigin = MoreThanHalfCouncil; type RemoveOrigin = MoreThanHalfCouncil; @@ -576,7 +576,7 @@ type ApproveOrigin = EnsureOneOf< pallet_collective::EnsureProportionAtLeast<_3, _5, AccountId, CouncilCollective> >; -impl pallet_treasury::Trait for Runtime { +impl pallet_treasury::Config for Runtime { type ModuleId = TreasuryModuleId; type Currency = Balances; type ApproveOrigin = ApproveOrigin; @@ -606,14 +606,14 @@ parameter_types! { pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); } -impl pallet_offences::Trait for Runtime { +impl pallet_offences::Config for Runtime { type Event = Event; type IdentificationTuple = pallet_session::historical::IdentificationTuple; type OnOffenceHandler = Staking; type WeightSoftLimit = OffencesWeightSoftLimit; } -impl pallet_authority_discovery::Trait for Runtime {} +impl pallet_authority_discovery::Config for Runtime {} parameter_types! { pub const SessionDuration: BlockNumber = EPOCH_DURATION_IN_BLOCKS as _; @@ -625,7 +625,7 @@ parameter_types! { pub const ImOnlineUnsignedPriority: TransactionPriority = TransactionPriority::max_value(); } -impl pallet_im_online::Trait for Runtime { +impl pallet_im_online::Config for Runtime { type AuthorityId = ImOnlineId; type Event = Event; type SessionDuration = SessionDuration; @@ -634,7 +634,7 @@ impl pallet_im_online::Trait for Runtime { type WeightInfo = weights::pallet_im_online::WeightInfo; } -impl pallet_grandpa::Trait for Runtime { +impl pallet_grandpa::Config for Runtime { type Event = Event; type Call = Call; @@ -662,7 +662,7 @@ impl frame_system::offchain::CreateSignedTransaction for R call: Call, public: ::Signer, account: AccountId, - nonce: ::Index, + nonce: ::Index, ) -> Option<(Call, ::SignaturePayload)> { // take the biggest period possible. let period = BlockHashCount::get() @@ -717,7 +717,7 @@ parameter_types! { pub Prefix: &'static [u8] = b"Pay DOTs to the Polkadot account:"; } -impl claims::Trait for Runtime { +impl claims::Config for Runtime { type Event = Event; type VestingSchedule = Vesting; type Prefix = Prefix; @@ -729,7 +729,7 @@ parameter_types! { pub const MinVestedTransfer: Balance = 100 * DOLLARS; } -impl pallet_vesting::Trait for Runtime { +impl pallet_vesting::Config for Runtime { type Event = Event; type Currency = Balances; type BlockNumberToBalance = ConvertInto; @@ -737,7 +737,7 @@ impl pallet_vesting::Trait for Runtime { type WeightInfo = weights::pallet_vesting::WeightInfo; } -impl pallet_utility::Trait for Runtime { +impl pallet_utility::Config for Runtime { type Event = Event; type Call = Call; type WeightInfo = weights::pallet_utility::WeightInfo; @@ -751,7 +751,7 @@ parameter_types! { pub const MaxSignatories: u16 = 100; } -impl pallet_multisig::Trait for Runtime { +impl pallet_multisig::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -879,7 +879,7 @@ impl InstanceFilter for ProxyType { } } -impl pallet_proxy::Trait for Runtime { +impl pallet_proxy::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -1243,9 +1243,9 @@ sp_api::impl_runtime_apis! { use pallet_offences_benchmarking::Module as OffencesBench; use frame_system_benchmarking::Module as SystemBench; - impl pallet_session_benchmarking::Trait for Runtime {} - impl pallet_offences_benchmarking::Trait for Runtime {} - impl frame_system_benchmarking::Trait for Runtime {} + impl pallet_session_benchmarking::Config for Runtime {} + impl pallet_offences_benchmarking::Config for Runtime {} + impl frame_system_benchmarking::Config for Runtime {} let whitelist: Vec = vec![ // Block Number diff --git a/runtime/polkadot/src/weights/frame_system.rs b/runtime/polkadot/src/weights/frame_system.rs index 5dce4a8810..87537327d8 100644 --- a/runtime/polkadot/src/weights/frame_system.rs +++ b/runtime/polkadot/src/weights/frame_system.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for frame_system. pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { +impl frame_system::WeightInfo for WeightInfo { fn remark(_b: u32, ) -> Weight { (1_851_000 as Weight) } diff --git a/runtime/polkadot/src/weights/pallet_balances.rs b/runtime/polkadot/src/weights/pallet_balances.rs index 9c044bb43d..20ef0a7f27 100644 --- a/runtime/polkadot/src/weights/pallet_balances.rs +++ b/runtime/polkadot/src/weights/pallet_balances.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_balances. pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { +impl pallet_balances::WeightInfo for WeightInfo { fn transfer() -> Weight { (90_334_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_collective.rs b/runtime/polkadot/src/weights/pallet_collective.rs index 9aea29368e..acd43e0e92 100644 --- a/runtime/polkadot/src/weights/pallet_collective.rs +++ b/runtime/polkadot/src/weights/pallet_collective.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_collective. pub struct WeightInfo(PhantomData); -impl pallet_collective::WeightInfo for WeightInfo { +impl pallet_collective::WeightInfo for WeightInfo { fn set_members(m: u32, n: u32, p: u32, ) -> Weight { (0 as Weight) .saturating_add((20_942_000 as Weight).saturating_mul(m as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_democracy.rs b/runtime/polkadot/src/weights/pallet_democracy.rs index af491a66b3..963ac269dd 100644 --- a/runtime/polkadot/src/weights/pallet_democracy.rs +++ b/runtime/polkadot/src/weights/pallet_democracy.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_democracy. pub struct WeightInfo(PhantomData); -impl pallet_democracy::WeightInfo for WeightInfo { +impl pallet_democracy::WeightInfo for WeightInfo { fn propose() -> Weight { (73_078_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_elections_phragmen.rs b/runtime/polkadot/src/weights/pallet_elections_phragmen.rs index 4204d1d58d..e5316b3492 100644 --- a/runtime/polkadot/src/weights/pallet_elections_phragmen.rs +++ b/runtime/polkadot/src/weights/pallet_elections_phragmen.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_elections_phragmen. pub struct WeightInfo(PhantomData); -impl pallet_elections_phragmen::WeightInfo for WeightInfo { +impl pallet_elections_phragmen::WeightInfo for WeightInfo { fn vote(v: u32, ) -> Weight { (85_361_000 as Weight) .saturating_add((113_000 as Weight).saturating_mul(v as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_identity.rs b/runtime/polkadot/src/weights/pallet_identity.rs index 6045029832..5fa965c6d7 100644 --- a/runtime/polkadot/src/weights/pallet_identity.rs +++ b/runtime/polkadot/src/weights/pallet_identity.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_identity. pub struct WeightInfo(PhantomData); -impl pallet_identity::WeightInfo for WeightInfo { +impl pallet_identity::WeightInfo for WeightInfo { fn add_registrar(r: u32, ) -> Weight { (26_935_000 as Weight) .saturating_add((309_000 as Weight).saturating_mul(r as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_im_online.rs b/runtime/polkadot/src/weights/pallet_im_online.rs index 0b7c6dc6a0..e8dfb1b85f 100644 --- a/runtime/polkadot/src/weights/pallet_im_online.rs +++ b/runtime/polkadot/src/weights/pallet_im_online.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_im_online. pub struct WeightInfo(PhantomData); -impl pallet_im_online::WeightInfo for WeightInfo { +impl pallet_im_online::WeightInfo for WeightInfo { fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { (107_274_000 as Weight) .saturating_add((218_000 as Weight).saturating_mul(k as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_indices.rs b/runtime/polkadot/src/weights/pallet_indices.rs index ced1cf26cd..1e7149497e 100644 --- a/runtime/polkadot/src/weights/pallet_indices.rs +++ b/runtime/polkadot/src/weights/pallet_indices.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_indices. pub struct WeightInfo(PhantomData); -impl pallet_indices::WeightInfo for WeightInfo { +impl pallet_indices::WeightInfo for WeightInfo { fn claim() -> Weight { (50_502_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_multisig.rs b/runtime/polkadot/src/weights/pallet_multisig.rs index 1dc0f9a2a9..a18dd7f57a 100644 --- a/runtime/polkadot/src/weights/pallet_multisig.rs +++ b/runtime/polkadot/src/weights/pallet_multisig.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_multisig. pub struct WeightInfo(PhantomData); -impl pallet_multisig::WeightInfo for WeightInfo { +impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { (12_023_000 as Weight) .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_proxy.rs b/runtime/polkadot/src/weights/pallet_proxy.rs index 559d408ce3..466c380f9b 100644 --- a/runtime/polkadot/src/weights/pallet_proxy.rs +++ b/runtime/polkadot/src/weights/pallet_proxy.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_proxy. pub struct WeightInfo(PhantomData); -impl pallet_proxy::WeightInfo for WeightInfo { +impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { (30_511_000 as Weight) .saturating_add((189_000 as Weight).saturating_mul(p as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_scheduler.rs b/runtime/polkadot/src/weights/pallet_scheduler.rs index 4fe23eeb4a..a8395ee2d4 100644 --- a/runtime/polkadot/src/weights/pallet_scheduler.rs +++ b/runtime/polkadot/src/weights/pallet_scheduler.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_scheduler. pub struct WeightInfo(PhantomData); -impl pallet_scheduler::WeightInfo for WeightInfo { +impl pallet_scheduler::WeightInfo for WeightInfo { fn schedule(s: u32, ) -> Weight { (33_070_000 as Weight) .saturating_add((43_000 as Weight).saturating_mul(s as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_session.rs b/runtime/polkadot/src/weights/pallet_session.rs index da9d9fd4cc..b8084ef7bc 100644 --- a/runtime/polkadot/src/weights/pallet_session.rs +++ b/runtime/polkadot/src/weights/pallet_session.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_session. pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { +impl pallet_session::WeightInfo for WeightInfo { fn set_keys() -> Weight { (93_498_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_staking.rs b/runtime/polkadot/src/weights/pallet_staking.rs index cd0d026f49..be296fb924 100644 --- a/runtime/polkadot/src/weights/pallet_staking.rs +++ b/runtime/polkadot/src/weights/pallet_staking.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_staking. pub struct WeightInfo(PhantomData); -impl pallet_staking::WeightInfo for WeightInfo { +impl pallet_staking::WeightInfo for WeightInfo { fn bond() -> Weight { (92_188_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_timestamp.rs b/runtime/polkadot/src/weights/pallet_timestamp.rs index 23be1ccc4b..0f3642e768 100644 --- a/runtime/polkadot/src/weights/pallet_timestamp.rs +++ b/runtime/polkadot/src/weights/pallet_timestamp.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_timestamp. pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { +impl pallet_timestamp::WeightInfo for WeightInfo { fn set() -> Weight { (10_868_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_treasury.rs b/runtime/polkadot/src/weights/pallet_treasury.rs index aa9c30c21b..f6fe477e10 100644 --- a/runtime/polkadot/src/weights/pallet_treasury.rs +++ b/runtime/polkadot/src/weights/pallet_treasury.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_treasury. pub struct WeightInfo(PhantomData); -impl pallet_treasury::WeightInfo for WeightInfo { +impl pallet_treasury::WeightInfo for WeightInfo { fn propose_spend() -> Weight { (52_150_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_utility.rs b/runtime/polkadot/src/weights/pallet_utility.rs index c32407cfa9..2f42858106 100644 --- a/runtime/polkadot/src/weights/pallet_utility.rs +++ b/runtime/polkadot/src/weights/pallet_utility.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_utility. pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { +impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { (18_624_000 as Weight) .saturating_add((1_986_000 as Weight).saturating_mul(c as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_vesting.rs b/runtime/polkadot/src/weights/pallet_vesting.rs index 3129f6f5ef..e3f859d7e4 100644 --- a/runtime/polkadot/src/weights/pallet_vesting.rs +++ b/runtime/polkadot/src/weights/pallet_vesting.rs @@ -42,7 +42,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_vesting. pub struct WeightInfo(PhantomData); -impl pallet_vesting::WeightInfo for WeightInfo { +impl pallet_vesting::WeightInfo for WeightInfo { fn vest_locked(l: u32, ) -> Weight { (53_484_000 as Weight) .saturating_add((134_000 as Weight).saturating_mul(l as Weight)) diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index d008463145..51735ed3da 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -210,7 +210,7 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -impl frame_system::Trait for Runtime { +impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; type Origin = Origin; type Call = Call; @@ -255,7 +255,7 @@ impl frame_system::offchain::CreateSignedTransaction for R call: Call, public: ::Signer, account: AccountId, - nonce: ::Index, + nonce: ::Index, ) -> Option<(Call, ::SignaturePayload)> { // take the biggest period possible. let period = BlockHashCount::get() @@ -294,7 +294,7 @@ impl frame_system::offchain::SigningTypes for Runtime { type Signature = Signature; } -impl pallet_session::historical::Trait for Runtime { +impl pallet_session::historical::Config for Runtime { type FullIdentification = pallet_staking::Exposure; type FullIdentificationOf = pallet_staking::ExposureOf; } @@ -334,7 +334,7 @@ parameter_types! { pub const ImOnlineUnsignedPriority: TransactionPriority = TransactionPriority::max_value(); } -impl pallet_im_online::Trait for Runtime { +impl pallet_im_online::Config for Runtime { type AuthorityId = ImOnlineId; type Event = Event; type ReportUnresponsiveness = Offences; @@ -343,7 +343,7 @@ impl pallet_im_online::Trait for Runtime { type WeightInfo = (); } -impl pallet_staking::Trait for Runtime { +impl pallet_staking::Config for Runtime { type Currency = Balances; type UnixTime = Timestamp; type CurrencyToVote = frame_support::traits::U128CurrencyToVote; @@ -374,7 +374,7 @@ parameter_types! { pub const MaxLocks: u32 = 50; } -impl pallet_balances::Trait for Runtime { +impl pallet_balances::Config for Runtime { type Balance = Balance; type DustRemoval = (); type Event = Event; @@ -401,19 +401,19 @@ parameter_types! { pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); } -impl pallet_offences::Trait for Runtime { +impl pallet_offences::Config for Runtime { type Event = Event; type IdentificationTuple = pallet_session::historical::IdentificationTuple; type OnOffenceHandler = Staking; type WeightSoftLimit = OffencesWeightSoftLimit; } -impl pallet_authority_discovery::Trait for Runtime {} +impl pallet_authority_discovery::Config for Runtime {} parameter_types! { pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } -impl pallet_timestamp::Trait for Runtime { +impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Babe; type MinimumPeriod = MinimumPeriod; @@ -424,7 +424,7 @@ parameter_types! { pub const TransactionByteFee: Balance = 10 * MILLICENTS; } -impl pallet_transaction_payment::Trait for Runtime { +impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type TransactionByteFee = TransactionByteFee; type WeightToFee = WeightToFee; @@ -435,7 +435,7 @@ parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } -impl pallet_session::Trait for Runtime { +impl pallet_session::Config for Runtime { type Event = Event; type ValidatorId = AccountId; type ValidatorIdOf = pallet_staking::StashOf; @@ -453,7 +453,7 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; } -impl pallet_babe::Trait for Runtime { +impl pallet_babe::Config for Runtime { type EpochDuration = EpochDuration; type ExpectedBlockTime = ExpectedBlockTime; @@ -482,7 +482,7 @@ parameter_types! { pub const IndexDeposit: Balance = 1 * DOLLARS; } -impl pallet_indices::Trait for Runtime { +impl pallet_indices::Config for Runtime { type AccountIndex = AccountIndex; type Currency = Balances; type Deposit = IndexDeposit; @@ -494,7 +494,7 @@ parameter_types! { pub const AttestationPeriod: BlockNumber = 50; } -impl pallet_grandpa::Trait for Runtime { +impl pallet_grandpa::Config for Runtime { type Event = Event; type Call = Call; @@ -518,54 +518,54 @@ parameter_types! { } // TODO: substrate#2986 implement this properly -impl pallet_authorship::Trait for Runtime { +impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; type UncleGenerations = UncleGenerations; type FilterUncle = (); type EventHandler = (Staking, ImOnline); } -impl parachains_origin::Trait for Runtime {} +impl parachains_origin::Config for Runtime {} -impl parachains_configuration::Trait for Runtime {} +impl parachains_configuration::Config for Runtime {} -impl parachains_inclusion::Trait for Runtime { +impl parachains_inclusion::Config for Runtime { type Event = Event; } -impl parachains_paras::Trait for Runtime { +impl parachains_paras::Config for Runtime { type Origin = Origin; } -impl parachains_session_info::Trait for Runtime {} +impl parachains_session_info::Config for Runtime {} -impl parachains_ump::Trait for Runtime { +impl parachains_ump::Config for Runtime { type UmpSink = (); // TODO: #1873 To be handled by the XCM receiver. } -impl parachains_dmp::Trait for Runtime {} +impl parachains_dmp::Config for Runtime {} -impl parachains_hrmp::Trait for Runtime { +impl parachains_hrmp::Config for Runtime { type Origin = Origin; } -impl parachains_inclusion_inherent::Trait for Runtime {} +impl parachains_inclusion_inherent::Config for Runtime {} -impl parachains_scheduler::Trait for Runtime {} +impl parachains_scheduler::Config for Runtime {} -impl parachains_initializer::Trait for Runtime { +impl parachains_initializer::Config for Runtime { type Randomness = Babe; } -impl paras_sudo_wrapper::Trait for Runtime {} +impl paras_sudo_wrapper::Config for Runtime {} -impl paras_registrar::Trait for Runtime { +impl paras_registrar::Config for Runtime { type Currency = Balances; type ParathreadDeposit = ParathreadDeposit; type Origin = Origin; } -impl pallet_sudo::Trait for Runtime { +impl pallet_sudo::Config for Runtime { type Event = Event; type Call = Call; } diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index aa20079cc4..6597247b54 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -123,7 +123,7 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -impl frame_system::Trait for Runtime { +impl frame_system::Config for Runtime { type BaseCallFilter = (); type Origin = Origin; type Call = Call; @@ -163,7 +163,7 @@ parameter_types! { pub storage ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; } -impl pallet_babe::Trait for Runtime { +impl pallet_babe::Config for Runtime { type EpochDuration = EpochDuration; type ExpectedBlockTime = ExpectedBlockTime; @@ -191,7 +191,7 @@ parameter_types! { pub storage IndexDeposit: Balance = 1 * DOLLARS; } -impl pallet_indices::Trait for Runtime { +impl pallet_indices::Config for Runtime { type AccountIndex = AccountIndex; type Currency = Balances; type Deposit = IndexDeposit; @@ -204,7 +204,7 @@ parameter_types! { pub storage MaxLocks: u32 = 50; } -impl pallet_balances::Trait for Runtime { +impl pallet_balances::Config for Runtime { type Balance = Balance; type DustRemoval = (); type Event = Event; @@ -218,7 +218,7 @@ parameter_types! { pub storage TransactionByteFee: Balance = 10 * MILLICENTS; } -impl pallet_transaction_payment::Trait for Runtime { +impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter; type TransactionByteFee = TransactionByteFee; type WeightToFee = WeightToFee; @@ -229,7 +229,7 @@ parameter_types! { pub storage SlotDuration: u64 = SLOT_DURATION; pub storage MinimumPeriod: u64 = SlotDuration::get() / 2; } -impl pallet_timestamp::Trait for Runtime { +impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Babe; type MinimumPeriod = MinimumPeriod; @@ -241,7 +241,7 @@ parameter_types! { } // TODO: substrate#2986 implement this properly -impl pallet_authorship::Trait for Runtime { +impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; type UncleGenerations = UncleGenerations; type FilterUncle = (); @@ -266,7 +266,7 @@ parameter_types! { pub storage DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } -impl pallet_session::Trait for Runtime { +impl pallet_session::Config for Runtime { type Event = Event; type ValidatorId = AccountId; type ValidatorIdOf = pallet_staking::StashOf; @@ -279,7 +279,7 @@ impl pallet_session::Trait for Runtime { type WeightInfo = (); } -impl pallet_session::historical::Trait for Runtime { +impl pallet_session::historical::Config for Runtime { type FullIdentification = pallet_staking::Exposure; type FullIdentificationOf = pallet_staking::ExposureOf; } @@ -310,7 +310,7 @@ parameter_types! { pub MinSolutionScoreBump: Perbill = Perbill::from_rational_approximation(5u32, 10_000); } -impl pallet_staking::Trait for Runtime { +impl pallet_staking::Config for Runtime { type Currency = Balances; type UnixTime = Timestamp; type CurrencyToVote = frame_support::traits::U128CurrencyToVote; @@ -337,7 +337,7 @@ impl pallet_staking::Trait for Runtime { } -impl pallet_grandpa::Trait for Runtime { +impl pallet_grandpa::Config for Runtime { type Event = Event; type Call = Call; @@ -363,7 +363,7 @@ impl frame_system::offchain::CreateSignedTransaction for R call: Call, public: ::Signer, account: AccountId, - nonce: ::Index, + nonce: ::Index, ) -> Option<(Call, ::SignaturePayload)> { let period = BlockHashCount::get() .checked_next_power_of_two() @@ -404,14 +404,14 @@ parameter_types! { pub storage OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); } -impl pallet_offences::Trait for Runtime { +impl pallet_offences::Config for Runtime { type Event = Event; type IdentificationTuple = pallet_session::historical::IdentificationTuple; type OnOffenceHandler = Staking; type WeightSoftLimit = OffencesWeightSoftLimit; } -impl pallet_authority_discovery::Trait for Runtime {} +impl pallet_authority_discovery::Config for Runtime {} parameter_types! { pub storage LeasePeriod: BlockNumber = 100_000; @@ -422,7 +422,7 @@ parameter_types! { pub Prefix: &'static [u8] = b"Pay KSMs to the Kusama account:"; } -impl claims::Trait for Runtime { +impl claims::Config for Runtime { type Event = Event; type VestingSchedule = Vesting; type Prefix = Prefix; @@ -433,7 +433,7 @@ parameter_types! { pub storage MinVestedTransfer: Balance = 100 * DOLLARS; } -impl pallet_vesting::Trait for Runtime { +impl pallet_vesting::Config for Runtime { type Event = Event; type Currency = Balances; type BlockNumberToBalance = ConvertInto; @@ -441,42 +441,42 @@ impl pallet_vesting::Trait for Runtime { type WeightInfo = (); } -impl pallet_sudo::Trait for Runtime { +impl pallet_sudo::Config for Runtime { type Event = Event; type Call = Call; } -impl parachains_configuration::Trait for Runtime {} +impl parachains_configuration::Config for Runtime {} -impl parachains_inclusion::Trait for Runtime { +impl parachains_inclusion::Config for Runtime { type Event = Event; } -impl parachains_inclusion_inherent::Trait for Runtime {} +impl parachains_inclusion_inherent::Config for Runtime {} -impl parachains_initializer::Trait for Runtime { +impl parachains_initializer::Config for Runtime { type Randomness = RandomnessCollectiveFlip; } -impl parachains_session_info::Trait for Runtime {} +impl parachains_session_info::Config for Runtime {} -impl parachains_paras::Trait for Runtime { +impl parachains_paras::Config for Runtime { type Origin = Origin; } -impl parachains_dmp::Trait for Runtime {} +impl parachains_dmp::Config for Runtime {} -impl parachains_ump::Trait for Runtime { +impl parachains_ump::Config for Runtime { type UmpSink = (); } -impl parachains_hrmp::Trait for Runtime { +impl parachains_hrmp::Config for Runtime { type Origin = Origin; } -impl parachains_scheduler::Trait for Runtime {} +impl parachains_scheduler::Config for Runtime {} -impl paras_sudo_wrapper::Trait for Runtime {} +impl paras_sudo_wrapper::Config for Runtime {} construct_runtime! { pub enum Runtime where diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 92151ce62f..119e98e48f 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -118,7 +118,7 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; } -impl frame_system::Trait for Runtime { +impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; type Origin = Origin; type Call = Call; @@ -150,7 +150,7 @@ parameter_types! { pub const MaxScheduledPerBlock: u32 = 50; } -impl pallet_scheduler::Trait for Runtime { +impl pallet_scheduler::Config for Runtime { type Event = Event; type Origin = Origin; type PalletsOrigin = OriginCaller; @@ -166,7 +166,7 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; } -impl pallet_babe::Trait for Runtime { +impl pallet_babe::Config for Runtime { type EpochDuration = EpochDuration; type ExpectedBlockTime = ExpectedBlockTime; @@ -195,7 +195,7 @@ parameter_types! { pub const IndexDeposit: Balance = 1 * DOLLARS; } -impl pallet_indices::Trait for Runtime { +impl pallet_indices::Config for Runtime { type AccountIndex = AccountIndex; type Currency = Balances; type Deposit = IndexDeposit; @@ -208,7 +208,7 @@ parameter_types! { pub const MaxLocks: u32 = 50; } -impl pallet_balances::Trait for Runtime { +impl pallet_balances::Config for Runtime { type Balance = Balance; type DustRemoval = (); type Event = Event; @@ -222,7 +222,7 @@ parameter_types! { pub const TransactionByteFee: Balance = 10 * MILLICENTS; } -impl pallet_transaction_payment::Trait for Runtime { +impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type TransactionByteFee = TransactionByteFee; type WeightToFee = WeightToFee; @@ -232,7 +232,7 @@ impl pallet_transaction_payment::Trait for Runtime { parameter_types! { pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } -impl pallet_timestamp::Trait for Runtime { +impl pallet_timestamp::Config for Runtime { type Moment = u64; type OnTimestampSet = Babe; type MinimumPeriod = MinimumPeriod; @@ -244,7 +244,7 @@ parameter_types! { } // TODO: substrate#2986 implement this properly -impl pallet_authorship::Trait for Runtime { +impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; type UncleGenerations = UncleGenerations; type FilterUncle = (); @@ -270,7 +270,7 @@ parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } -impl pallet_session::Trait for Runtime { +impl pallet_session::Config for Runtime { type Event = Event; type ValidatorId = AccountId; type ValidatorIdOf = pallet_staking::StashOf; @@ -283,7 +283,7 @@ impl pallet_session::Trait for Runtime { type WeightInfo = weights::pallet_session::WeightInfo; } -impl pallet_session::historical::Trait for Runtime { +impl pallet_session::historical::Config for Runtime { type FullIdentification = pallet_staking::Exposure; type FullIdentificationOf = pallet_staking::ExposureOf; } @@ -317,7 +317,7 @@ parameter_types! { .saturating_sub(ExtrinsicBaseWeight::get()); } -impl pallet_staking::Trait for Runtime { +impl pallet_staking::Config for Runtime { type Currency = Balances; type UnixTime = Timestamp; type CurrencyToVote = CurrencyToVote; @@ -359,14 +359,14 @@ parameter_types! { pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); } -impl pallet_offences::Trait for Runtime { +impl pallet_offences::Config for Runtime { type Event = Event; type IdentificationTuple = pallet_session::historical::IdentificationTuple; type OnOffenceHandler = Staking; type WeightSoftLimit = OffencesWeightSoftLimit; } -impl pallet_authority_discovery::Trait for Runtime {} +impl pallet_authority_discovery::Config for Runtime {} parameter_types! { pub const SessionDuration: BlockNumber = EPOCH_DURATION_IN_BLOCKS as _; @@ -377,7 +377,7 @@ parameter_types! { pub const ImOnlineUnsignedPriority: TransactionPriority = TransactionPriority::max_value(); } -impl pallet_im_online::Trait for Runtime { +impl pallet_im_online::Config for Runtime { type AuthorityId = ImOnlineId; type Event = Event; type ReportUnresponsiveness = Offences; @@ -386,7 +386,7 @@ impl pallet_im_online::Trait for Runtime { type WeightInfo = weights::pallet_im_online::WeightInfo; } -impl pallet_grandpa::Trait for Runtime { +impl pallet_grandpa::Config for Runtime { type Event = Event; type Call = Call; @@ -414,7 +414,7 @@ impl frame_system::offchain::CreateSignedTransaction for R call: Call, public: ::Signer, account: AccountId, - nonce: ::Index, + nonce: ::Index, ) -> Option<(Call, ::SignaturePayload)> { // take the biggest period possible. let period = BlockHashCount::get() @@ -470,7 +470,7 @@ parameter_types! { pub const MaxRegistrars: u32 = 20; } -impl pallet_identity::Trait for Runtime { +impl pallet_identity::Config for Runtime { type Event = Event; type Currency = Balances; type Slashed = (); @@ -485,7 +485,7 @@ impl pallet_identity::Trait for Runtime { type WeightInfo = weights::pallet_identity::WeightInfo; } -impl pallet_utility::Trait for Runtime { +impl pallet_utility::Config for Runtime { type Event = Event; type Call = Call; type WeightInfo = weights::pallet_utility::WeightInfo; @@ -499,7 +499,7 @@ parameter_types! { pub const MaxSignatories: u16 = 100; } -impl pallet_multisig::Trait for Runtime { +impl pallet_multisig::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -516,7 +516,7 @@ parameter_types! { pub const RecoveryDeposit: Balance = 5 * DOLLARS; } -impl pallet_recovery::Trait for Runtime { +impl pallet_recovery::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -530,7 +530,7 @@ parameter_types! { pub const MinVestedTransfer: Balance = 100 * DOLLARS; } -impl pallet_vesting::Trait for Runtime { +impl pallet_vesting::Config for Runtime { type Event = Event; type Currency = Balances; type BlockNumberToBalance = ConvertInto; @@ -538,7 +538,7 @@ impl pallet_vesting::Trait for Runtime { type WeightInfo = weights::pallet_vesting::WeightInfo; } -impl pallet_sudo::Trait for Runtime { +impl pallet_sudo::Config for Runtime { type Event = Event; type Call = Call; } @@ -628,7 +628,7 @@ impl InstanceFilter for ProxyType { } } -impl pallet_proxy::Trait for Runtime { +impl pallet_proxy::Config for Runtime { type Event = Event; type Call = Call; type Currency = Balances; @@ -992,9 +992,9 @@ sp_api::impl_runtime_apis! { use pallet_offences_benchmarking::Module as OffencesBench; use frame_system_benchmarking::Module as SystemBench; - impl pallet_session_benchmarking::Trait for Runtime {} - impl pallet_offences_benchmarking::Trait for Runtime {} - impl frame_system_benchmarking::Trait for Runtime {} + impl pallet_session_benchmarking::Config for Runtime {} + impl pallet_offences_benchmarking::Config for Runtime {} + impl frame_system_benchmarking::Config for Runtime {} let whitelist: Vec = vec![ // Block Number diff --git a/runtime/westend/src/weights/frame_system.rs b/runtime/westend/src/weights/frame_system.rs index 5fc9a8392c..a3f5ee5b89 100644 --- a/runtime/westend/src/weights/frame_system.rs +++ b/runtime/westend/src/weights/frame_system.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for frame_system. pub struct WeightInfo(PhantomData); -impl frame_system::WeightInfo for WeightInfo { +impl frame_system::WeightInfo for WeightInfo { fn remark(_b: u32, ) -> Weight { (1_859_000 as Weight) } diff --git a/runtime/westend/src/weights/pallet_balances.rs b/runtime/westend/src/weights/pallet_balances.rs index cf8648078b..c3aedc45e7 100644 --- a/runtime/westend/src/weights/pallet_balances.rs +++ b/runtime/westend/src/weights/pallet_balances.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_balances. pub struct WeightInfo(PhantomData); -impl pallet_balances::WeightInfo for WeightInfo { +impl pallet_balances::WeightInfo for WeightInfo { fn transfer() -> Weight { (92_296_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/westend/src/weights/pallet_identity.rs b/runtime/westend/src/weights/pallet_identity.rs index bef0a65c10..9747999ebc 100644 --- a/runtime/westend/src/weights/pallet_identity.rs +++ b/runtime/westend/src/weights/pallet_identity.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_identity. pub struct WeightInfo(PhantomData); -impl pallet_identity::WeightInfo for WeightInfo { +impl pallet_identity::WeightInfo for WeightInfo { fn add_registrar(r: u32, ) -> Weight { (26_425_000 as Weight) .saturating_add((296_000 as Weight).saturating_mul(r as Weight)) diff --git a/runtime/westend/src/weights/pallet_im_online.rs b/runtime/westend/src/weights/pallet_im_online.rs index c60a0e0d4e..aa61f58ffa 100644 --- a/runtime/westend/src/weights/pallet_im_online.rs +++ b/runtime/westend/src/weights/pallet_im_online.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_im_online. pub struct WeightInfo(PhantomData); -impl pallet_im_online::WeightInfo for WeightInfo { +impl pallet_im_online::WeightInfo for WeightInfo { fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { (108_057_000 as Weight) .saturating_add((217_000 as Weight).saturating_mul(k as Weight)) diff --git a/runtime/westend/src/weights/pallet_indices.rs b/runtime/westend/src/weights/pallet_indices.rs index 4b15b1e814..a4638dfa82 100644 --- a/runtime/westend/src/weights/pallet_indices.rs +++ b/runtime/westend/src/weights/pallet_indices.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_indices. pub struct WeightInfo(PhantomData); -impl pallet_indices::WeightInfo for WeightInfo { +impl pallet_indices::WeightInfo for WeightInfo { fn claim() -> Weight { (51_356_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) diff --git a/runtime/westend/src/weights/pallet_multisig.rs b/runtime/westend/src/weights/pallet_multisig.rs index 9aed4e08ca..781c200034 100644 --- a/runtime/westend/src/weights/pallet_multisig.rs +++ b/runtime/westend/src/weights/pallet_multisig.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_multisig. pub struct WeightInfo(PhantomData); -impl pallet_multisig::WeightInfo for WeightInfo { +impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { (12_253_000 as Weight) .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) diff --git a/runtime/westend/src/weights/pallet_proxy.rs b/runtime/westend/src/weights/pallet_proxy.rs index 4df538a2c5..dfcf34db3e 100644 --- a/runtime/westend/src/weights/pallet_proxy.rs +++ b/runtime/westend/src/weights/pallet_proxy.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_proxy. pub struct WeightInfo(PhantomData); -impl pallet_proxy::WeightInfo for WeightInfo { +impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { (29_891_000 as Weight) .saturating_add((182_000 as Weight).saturating_mul(p as Weight)) diff --git a/runtime/westend/src/weights/pallet_scheduler.rs b/runtime/westend/src/weights/pallet_scheduler.rs index e64bf47ed9..e72370710b 100644 --- a/runtime/westend/src/weights/pallet_scheduler.rs +++ b/runtime/westend/src/weights/pallet_scheduler.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_scheduler. pub struct WeightInfo(PhantomData); -impl pallet_scheduler::WeightInfo for WeightInfo { +impl pallet_scheduler::WeightInfo for WeightInfo { fn schedule(s: u32, ) -> Weight { (33_042_000 as Weight) .saturating_add((43_000 as Weight).saturating_mul(s as Weight)) diff --git a/runtime/westend/src/weights/pallet_session.rs b/runtime/westend/src/weights/pallet_session.rs index a3c757227b..3a5d99ab65 100644 --- a/runtime/westend/src/weights/pallet_session.rs +++ b/runtime/westend/src/weights/pallet_session.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_session. pub struct WeightInfo(PhantomData); -impl pallet_session::WeightInfo for WeightInfo { +impl pallet_session::WeightInfo for WeightInfo { fn set_keys() -> Weight { (89_357_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) diff --git a/runtime/westend/src/weights/pallet_staking.rs b/runtime/westend/src/weights/pallet_staking.rs index 4fb60345bb..5ee9fc92ae 100644 --- a/runtime/westend/src/weights/pallet_staking.rs +++ b/runtime/westend/src/weights/pallet_staking.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_staking. pub struct WeightInfo(PhantomData); -impl pallet_staking::WeightInfo for WeightInfo { +impl pallet_staking::WeightInfo for WeightInfo { fn bond() -> Weight { (92_588_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) diff --git a/runtime/westend/src/weights/pallet_timestamp.rs b/runtime/westend/src/weights/pallet_timestamp.rs index 3340e6753d..edc53ac47b 100644 --- a/runtime/westend/src/weights/pallet_timestamp.rs +++ b/runtime/westend/src/weights/pallet_timestamp.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_timestamp. pub struct WeightInfo(PhantomData); -impl pallet_timestamp::WeightInfo for WeightInfo { +impl pallet_timestamp::WeightInfo for WeightInfo { fn set() -> Weight { (9_830_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) diff --git a/runtime/westend/src/weights/pallet_utility.rs b/runtime/westend/src/weights/pallet_utility.rs index 6280c8b11f..9b9f149766 100644 --- a/runtime/westend/src/weights/pallet_utility.rs +++ b/runtime/westend/src/weights/pallet_utility.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_utility. pub struct WeightInfo(PhantomData); -impl pallet_utility::WeightInfo for WeightInfo { +impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { (18_268_000 as Weight) .saturating_add((1_504_000 as Weight).saturating_mul(c as Weight)) diff --git a/runtime/westend/src/weights/pallet_vesting.rs b/runtime/westend/src/weights/pallet_vesting.rs index 3ed631be83..c18845df33 100644 --- a/runtime/westend/src/weights/pallet_vesting.rs +++ b/runtime/westend/src/weights/pallet_vesting.rs @@ -41,7 +41,7 @@ use sp_std::marker::PhantomData; /// Weight functions for pallet_vesting. pub struct WeightInfo(PhantomData); -impl pallet_vesting::WeightInfo for WeightInfo { +impl pallet_vesting::WeightInfo for WeightInfo { fn vest_locked(l: u32, ) -> Weight { (52_570_000 as Weight) .saturating_add((130_000 as Weight).saturating_mul(l as Weight)) -- GitLab From 1fbf09ac43bbb350bdb8e088c201c5423e11ff07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 30 Nov 2020 17:01:26 +0100 Subject: [PATCH 066/203] Simplify subsystem jobs (#2037) * Simplify subsystem jobs This pr simplifies the subsystem jobs interface. Instead of requiring an extra message that is used to signal that a job should be ended, a job now ends when the receiver returns `None`. Besides that it changes the interface to enforce that messages to a job provide a relay parent. * Drop ToJobTrait * Remove FromJob We always convert this message to FromJobCommand anyway. --- Cargo.lock | 1 - node/core/backing/src/lib.rs | 129 ++-------- node/core/bitfield-signing/Cargo.toml | 1 - node/core/bitfield-signing/src/lib.rs | 132 +++------- node/core/candidate-selection/src/lib.rs | 178 ++++---------- node/core/provisioner/src/lib.rs | 121 ++-------- node/core/provisioner/src/tests.rs | 28 +-- node/subsystem-util/src/lib.rs | 295 ++++++----------------- node/subsystem/src/messages.rs | 47 ++-- 9 files changed, 246 insertions(+), 686 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b09cce2d94..0d16f1f684 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4940,7 +4940,6 @@ dependencies = [ name = "polkadot-node-core-bitfield-signing" version = "0.1.0" dependencies = [ - "derive_more", "futures 0.3.8", "polkadot-node-subsystem", "polkadot-node-subsystem-util", diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 000c121c42..6adec2747a 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -40,8 +40,7 @@ use polkadot_subsystem::{ messages::{ AllMessages, AvailabilityStoreMessage, CandidateBackingMessage, CandidateSelectionMessage, CandidateValidationMessage, NewBackedCandidate, PoVDistributionMessage, ProvisionableData, - ProvisionerMessage, RuntimeApiMessage, StatementDistributionMessage, ValidationFailed, - RuntimeApiRequest, + ProvisionerMessage, StatementDistributionMessage, ValidationFailed, RuntimeApiRequest, }, }; use polkadot_node_subsystem_util::{ @@ -93,9 +92,9 @@ struct CandidateBackingJob { /// The hash of the relay parent on top of which this job is doing it's work. parent: Hash, /// Inbound message channel receiving part. - rx_to: mpsc::Receiver, + rx_to: mpsc::Receiver, /// Outbound message channel sending part. - tx_from: mpsc::Sender, + tx_from: mpsc::Sender, /// The `ParaId` assigned to this validator assignment: ParaId, /// The collator required to author the candidate, if any. @@ -151,84 +150,6 @@ impl TableContextTrait for TableContext { } } -/// A message type that is sent from `CandidateBackingSubsystem` to `CandidateBackingJob`. -pub enum ToJob { - /// A `CandidateBackingMessage`. - CandidateBacking(CandidateBackingMessage), - /// Stop working. - Stop, -} - -impl TryFrom for ToJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::CandidateBacking(msg) => Ok(ToJob::CandidateBacking(msg)), - _ => Err(()), - } - } -} - -impl From for ToJob { - fn from(msg: CandidateBackingMessage) -> Self { - Self::CandidateBacking(msg) - } -} - -impl util::ToJobTrait for ToJob { - const STOP: Self = ToJob::Stop; - - fn relay_parent(&self) -> Option { - match self { - Self::CandidateBacking(cb) => cb.relay_parent(), - Self::Stop => None, - } - } -} - -/// A message type that is sent from `CandidateBackingJob` to `CandidateBackingSubsystem`. -enum FromJob { - AvailabilityStore(AvailabilityStoreMessage), - RuntimeApiMessage(RuntimeApiMessage), - CandidateValidation(CandidateValidationMessage), - CandidateSelection(CandidateSelectionMessage), - Provisioner(ProvisionerMessage), - PoVDistribution(PoVDistributionMessage), - StatementDistribution(StatementDistributionMessage), -} - -impl From for FromJobCommand { - fn from(f: FromJob) -> FromJobCommand { - FromJobCommand::SendMessage(match f { - FromJob::AvailabilityStore(msg) => AllMessages::AvailabilityStore(msg), - FromJob::RuntimeApiMessage(msg) => AllMessages::RuntimeApi(msg), - FromJob::CandidateValidation(msg) => AllMessages::CandidateValidation(msg), - FromJob::CandidateSelection(msg) => AllMessages::CandidateSelection(msg), - FromJob::StatementDistribution(msg) => AllMessages::StatementDistribution(msg), - FromJob::PoVDistribution(msg) => AllMessages::PoVDistribution(msg), - FromJob::Provisioner(msg) => AllMessages::Provisioner(msg), - }) - } -} - -impl TryFrom for FromJob { - type Error = &'static str; - - fn try_from(f: AllMessages) -> Result { - match f { - AllMessages::AvailabilityStore(msg) => Ok(FromJob::AvailabilityStore(msg)), - AllMessages::RuntimeApi(msg) => Ok(FromJob::RuntimeApiMessage(msg)), - AllMessages::CandidateValidation(msg) => Ok(FromJob::CandidateValidation(msg)), - AllMessages::CandidateSelection(msg) => Ok(FromJob::CandidateSelection(msg)), - AllMessages::StatementDistribution(msg) => Ok(FromJob::StatementDistribution(msg)), - AllMessages::PoVDistribution(msg) => Ok(FromJob::PoVDistribution(msg)), - AllMessages::Provisioner(msg) => Ok(FromJob::Provisioner(msg)), - _ => Err("can't convert this AllMessages variant to FromJob"), - } - } -} - struct InvalidErasureRoot; // It looks like it's not possible to do an `impl From` given the current state of @@ -301,12 +222,10 @@ fn table_attested_to_backed( impl CandidateBackingJob { /// Run asynchronously. async fn run_loop(mut self) -> Result<(), Error> { - while let Some(msg) = self.rx_to.next().await { - match msg { - ToJob::CandidateBacking(msg) => { - self.process_msg(msg).await?; - } - ToJob::Stop => break, + loop { + match self.rx_to.next().await { + Some(msg) => self.process_msg(msg).await?, + None => break, } } @@ -317,9 +236,7 @@ impl CandidateBackingJob { &mut self, candidate: CandidateReceipt, ) -> Result<(), Error> { - self.tx_from.send(FromJob::CandidateSelection( - CandidateSelectionMessage::Invalid(self.parent, candidate) - )).await?; + self.tx_from.send(AllMessages::from(CandidateSelectionMessage::Invalid(self.parent, candidate)).into()).await?; Ok(()) } @@ -664,7 +581,7 @@ impl CandidateBackingJob { } async fn send_to_provisioner(&mut self, msg: ProvisionerMessage) -> Result<(), Error> { - self.tx_from.send(FromJob::Provisioner(msg)).await?; + self.tx_from.send(AllMessages::from(msg).into()).await?; Ok(()) } @@ -674,9 +591,9 @@ impl CandidateBackingJob { descriptor: CandidateDescriptor, pov: Arc, ) -> Result<(), Error> { - self.tx_from.send(FromJob::PoVDistribution( + self.tx_from.send(AllMessages::from( PoVDistributionMessage::DistributePoV(self.parent, descriptor, pov), - )).await.map_err(Into::into) + ).into()).await.map_err(Into::into) } async fn request_pov_from_distribution( @@ -685,9 +602,9 @@ impl CandidateBackingJob { ) -> Result, Error> { let (tx, rx) = oneshot::channel(); - self.tx_from.send(FromJob::PoVDistribution( + self.tx_from.send(AllMessages::from( PoVDistributionMessage::FetchPoV(self.parent, descriptor, tx) - )).await?; + ).into()).await?; Ok(rx.await?) } @@ -699,13 +616,14 @@ impl CandidateBackingJob { ) -> Result { let (tx, rx) = oneshot::channel(); - self.tx_from.send(FromJob::CandidateValidation( + self.tx_from.send( + AllMessages::from( CandidateValidationMessage::ValidateFromChainState( candidate, pov, tx, ) - ) + ).into(), ).await?; Ok(rx.await??) @@ -719,7 +637,7 @@ impl CandidateBackingJob { available_data: AvailableData, ) -> Result<(), Error> { let (tx, rx) = oneshot::channel(); - self.tx_from.send(FromJob::AvailabilityStore( + self.tx_from.send(AllMessages::from( AvailabilityStoreMessage::StoreAvailableData( candidate_hash, id, @@ -727,7 +645,7 @@ impl CandidateBackingJob { available_data, tx, ) - ) + ).into(), ).await?; let _ = rx.await?; @@ -777,15 +695,14 @@ impl CandidateBackingJob { async fn distribute_signed_statement(&mut self, s: SignedFullStatement) -> Result<(), Error> { let smsg = StatementDistributionMessage::Share(self.parent, s); - self.tx_from.send(FromJob::StatementDistribution(smsg)).await?; + self.tx_from.send(AllMessages::from(smsg).into()).await?; Ok(()) } } impl util::JobTrait for CandidateBackingJob { - type ToJob = ToJob; - type FromJob = FromJob; + type ToJob = CandidateBackingMessage; type Error = Error; type RunArgs = SyncCryptoStorePtr; type Metrics = Metrics; @@ -798,7 +715,7 @@ impl util::JobTrait for CandidateBackingJob { keystore: SyncCryptoStorePtr, metrics: Metrics, rx_to: mpsc::Receiver, - mut tx_from: mpsc::Sender, + mut tx_from: mpsc::Sender, ) -> Pin> + Send>> { async move { macro_rules! try_runtime_api { @@ -1000,7 +917,7 @@ impl metrics::Metrics for Metrics { } } -delegated_subsystem!(CandidateBackingJob(SyncCryptoStorePtr, Metrics) <- ToJob as CandidateBackingSubsystem); +delegated_subsystem!(CandidateBackingJob(SyncCryptoStorePtr, Metrics) <- CandidateBackingMessage as CandidateBackingSubsystem); #[cfg(test)] mod tests { @@ -1013,7 +930,7 @@ mod tests { GroupRotationInfo, }; use polkadot_subsystem::{ - messages::RuntimeApiRequest, + messages::{RuntimeApiRequest, RuntimeApiMessage}, ActiveLeavesUpdate, FromOverseer, OverseerSignal, }; use polkadot_node_primitives::InvalidCandidate; diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index 1d60d85eb8..3abe9680ae 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -14,4 +14,3 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } wasm-timer = "0.2.5" thiserror = "1.0.22" -derive_more = "0.99.11" diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 139fed6ddc..7937d908ef 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -25,16 +25,15 @@ use sp_keystore::{Error as KeystoreError, SyncCryptoStorePtr}; use polkadot_node_subsystem::{ messages::{ AllMessages, AvailabilityStoreMessage, BitfieldDistributionMessage, - BitfieldSigningMessage, CandidateBackingMessage, RuntimeApiMessage, RuntimeApiRequest, + BitfieldSigningMessage, RuntimeApiMessage, RuntimeApiRequest, }, errors::RuntimeApiError, }; use polkadot_node_subsystem_util::{ - self as util, JobManager, JobTrait, ToJobTrait, Validator, FromJobCommand, - metrics::{self, prometheus}, + self as util, JobManager, JobTrait, Validator, FromJobCommand, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{AvailabilityBitfield, CoreState, Hash, ValidatorIndex}; -use std::{convert::TryFrom, pin::Pin, time::Duration, iter::FromIterator}; +use std::{pin::Pin, time::Duration, iter::FromIterator}; use wasm_timer::{Delay, Instant}; use thiserror::Error; @@ -45,76 +44,6 @@ const LOG_TARGET: &str = "bitfield_signing"; /// Each `BitfieldSigningJob` prepares a signed bitfield for a single relay parent. pub struct BitfieldSigningJob; -/// Messages which a `BitfieldSigningJob` is prepared to receive. -#[allow(missing_docs)] -pub enum ToJob { - BitfieldSigning(BitfieldSigningMessage), - Stop, -} - -impl ToJobTrait for ToJob { - const STOP: Self = ToJob::Stop; - - fn relay_parent(&self) -> Option { - match self { - Self::BitfieldSigning(bsm) => bsm.relay_parent(), - Self::Stop => None, - } - } -} - -impl TryFrom for ToJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::BitfieldSigning(bsm) => Ok(ToJob::BitfieldSigning(bsm)), - _ => Err(()), - } - } -} - -impl From for ToJob { - fn from(bsm: BitfieldSigningMessage) -> ToJob { - ToJob::BitfieldSigning(bsm) - } -} - -/// Messages which may be sent from a `BitfieldSigningJob`. -#[allow(missing_docs)] -#[derive(Debug, derive_more::From)] -pub enum FromJob { - AvailabilityStore(AvailabilityStoreMessage), - BitfieldDistribution(BitfieldDistributionMessage), - CandidateBacking(CandidateBackingMessage), - RuntimeApi(RuntimeApiMessage), -} - -impl From for FromJobCommand { - fn from(from_job: FromJob) -> FromJobCommand { - FromJobCommand::SendMessage(match from_job { - FromJob::AvailabilityStore(asm) => AllMessages::AvailabilityStore(asm), - FromJob::BitfieldDistribution(bdm) => AllMessages::BitfieldDistribution(bdm), - FromJob::CandidateBacking(cbm) => AllMessages::CandidateBacking(cbm), - FromJob::RuntimeApi(ram) => AllMessages::RuntimeApi(ram), - }) - } -} - -impl TryFrom for FromJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::AvailabilityStore(asm) => Ok(Self::AvailabilityStore(asm)), - AllMessages::BitfieldDistribution(bdm) => Ok(Self::BitfieldDistribution(bdm)), - AllMessages::CandidateBacking(cbm) => Ok(Self::CandidateBacking(cbm)), - AllMessages::RuntimeApi(ram) => Ok(Self::RuntimeApi(ram)), - _ => Err(()), - } - } -} - /// Errors we may encounter in the course of executing the `BitfieldSigningSubsystem`. #[derive(Debug, Error)] pub enum Error { @@ -145,7 +74,7 @@ async fn get_core_availability( relay_parent: Hash, core: CoreState, validator_idx: ValidatorIndex, - sender: &Mutex<&mut mpsc::Sender>, + sender: &Mutex<&mut mpsc::Sender>, ) -> Result { if let CoreState::Occupied(core) = core { let (tx, rx) = oneshot::channel(); @@ -153,10 +82,10 @@ async fn get_core_availability( .lock() .await .send( - RuntimeApiMessage::Request( + AllMessages::from(RuntimeApiMessage::Request( relay_parent, RuntimeApiRequest::CandidatePendingAvailability(core.para_id, tx), - ).into(), + )).into(), ) .await?; @@ -174,11 +103,11 @@ async fn get_core_availability( .lock() .await .send( - AvailabilityStoreMessage::QueryChunkAvailability( + AllMessages::from(AvailabilityStoreMessage::QueryChunkAvailability( committed_candidate_receipt.hash(), validator_idx, tx, - ).into(), + )).into(), ) .await?; return rx.await.map_err(Into::into); @@ -188,9 +117,14 @@ async fn get_core_availability( } /// delegates to the v1 runtime API -async fn get_availability_cores(relay_parent: Hash, sender: &mut mpsc::Sender) -> Result, Error> { +async fn get_availability_cores( + relay_parent: Hash, + sender: &mut mpsc::Sender, +) -> Result, Error> { let (tx, rx) = oneshot::channel(); - sender.send(RuntimeApiMessage::Request(relay_parent, RuntimeApiRequest::AvailabilityCores(tx)).into()).await?; + sender + .send(AllMessages::from(RuntimeApiMessage::Request(relay_parent, RuntimeApiRequest::AvailabilityCores(tx))).into()) + .await?; match rx.await { Ok(Ok(out)) => Ok(out), Ok(Err(runtime_err)) => Err(runtime_err.into()), @@ -206,7 +140,7 @@ async fn get_availability_cores(relay_parent: Hash, sender: &mut mpsc::Sender, + sender: &mut mpsc::Sender, ) -> Result { // get the set of availability cores from the runtime let availability_cores = get_availability_cores(relay_parent, sender).await?; @@ -275,8 +209,7 @@ impl metrics::Metrics for Metrics { } impl JobTrait for BitfieldSigningJob { - type ToJob = ToJob; - type FromJob = FromJob; + type ToJob = BitfieldSigningMessage; type Error = Error; type RunArgs = SyncCryptoStorePtr; type Metrics = Metrics; @@ -289,8 +222,8 @@ impl JobTrait for BitfieldSigningJob { relay_parent: Hash, keystore: Self::RunArgs, metrics: Self::Metrics, - _receiver: mpsc::Receiver, - mut sender: mpsc::Sender, + _receiver: mpsc::Receiver, + mut sender: mpsc::Sender, ) -> Pin> + Send>> { let metrics = metrics.clone(); async move { @@ -330,7 +263,11 @@ impl JobTrait for BitfieldSigningJob { metrics.on_bitfield_signed(); sender - .send(BitfieldDistributionMessage::DistributeBitfield(relay_parent, signed_bitfield).into()) + .send( + AllMessages::from( + BitfieldDistributionMessage::DistributeBitfield(relay_parent, signed_bitfield), + ).into(), + ) .await .map_err(Into::into) } @@ -345,8 +282,7 @@ pub type BitfieldSigningSubsystem = JobManager CoreState { CoreState::Occupied(OccupiedCore { @@ -373,12 +309,18 @@ mod tests { loop { futures::select! { m = receiver.next() => match m.unwrap() { - RuntimeApi(RuntimeApiMessage::Request(rp, RuntimeApiRequest::AvailabilityCores(tx))) => { + FromJobCommand::SendMessage( + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(rp, RuntimeApiRequest::AvailabilityCores(tx)), + ), + ) => { assert_eq!(relay_parent, rp); tx.send(Ok(vec![CoreState::Free, occupied_core(1), occupied_core(2)])).unwrap(); }, - RuntimeApi( - RuntimeApiMessage::Request(rp, RuntimeApiRequest::CandidatePendingAvailability(para_id, tx)) + FromJobCommand::SendMessage( + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(rp, RuntimeApiRequest::CandidatePendingAvailability(para_id, tx)), + ), ) => { assert_eq!(relay_parent, rp); @@ -388,7 +330,11 @@ mod tests { tx.send(Ok(None)).unwrap(); } }, - AvailabilityStore(AvailabilityStoreMessage::QueryChunkAvailability(_, vidx, tx)) => { + FromJobCommand::SendMessage( + AllMessages::AvailabilityStore( + AvailabilityStoreMessage::QueryChunkAvailability(_, vidx, tx), + ), + ) => { assert_eq!(validator_index, vidx); tx.send(true).unwrap(); diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index dc2692431c..0eb5242979 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -30,86 +30,21 @@ use polkadot_node_subsystem::{ }, }; use polkadot_node_subsystem_util::{ - self as util, delegated_subsystem, JobTrait, ToJobTrait, FromJobCommand, - metrics::{self, prometheus}, + self as util, delegated_subsystem, JobTrait, FromJobCommand, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{CandidateReceipt, CollatorId, Hash, Id as ParaId, PoV}; -use std::{convert::TryFrom, pin::Pin}; +use std::pin::Pin; use thiserror::Error; const LOG_TARGET: &'static str = "candidate_selection"; struct CandidateSelectionJob { - sender: mpsc::Sender, - receiver: mpsc::Receiver, + sender: mpsc::Sender, + receiver: mpsc::Receiver, metrics: Metrics, seconded_candidate: Option, } -/// This enum defines the messages that the provisioner is prepared to receive. -#[derive(Debug)] -pub enum ToJob { - /// The provisioner message is the main input to the provisioner. - CandidateSelection(CandidateSelectionMessage), - /// This message indicates that the provisioner should shut itself down. - Stop, -} - -impl ToJobTrait for ToJob { - const STOP: Self = Self::Stop; - - fn relay_parent(&self) -> Option { - match self { - Self::CandidateSelection(csm) => csm.relay_parent(), - Self::Stop => None, - } - } -} - -impl TryFrom for ToJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::CandidateSelection(csm) => Ok(Self::CandidateSelection(csm)), - _ => Err(()), - } - } -} - -impl From for ToJob { - fn from(csm: CandidateSelectionMessage) -> Self { - Self::CandidateSelection(csm) - } -} - -#[derive(Debug)] -enum FromJob { - Backing(CandidateBackingMessage), - Collator(CollatorProtocolMessage), -} - -impl From for FromJobCommand { - fn from(from_job: FromJob) -> FromJobCommand { - FromJobCommand::SendMessage(match from_job { - FromJob::Backing(msg) => AllMessages::CandidateBacking(msg), - FromJob::Collator(msg) => AllMessages::CollatorProtocol(msg), - }) - } -} - -impl TryFrom for FromJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::CandidateBacking(msg) => Ok(FromJob::Backing(msg)), - AllMessages::CollatorProtocol(msg) => Ok(FromJob::Collator(msg)), - _ => Err(()), - } - } -} - #[derive(Debug, Error)] enum Error { #[error(transparent)] @@ -123,40 +58,32 @@ enum Error { } impl JobTrait for CandidateSelectionJob { - type ToJob = ToJob; - type FromJob = FromJob; + type ToJob = CandidateSelectionMessage; type Error = Error; type RunArgs = (); type Metrics = Metrics; const NAME: &'static str = "CandidateSelectionJob"; - /// Run a job for the parent block indicated - // - // this function is in charge of creating and executing the job's main loop #[tracing::instrument(skip(_relay_parent, _run_args, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] fn run( _relay_parent: Hash, _run_args: Self::RunArgs, metrics: Self::Metrics, - receiver: mpsc::Receiver, - sender: mpsc::Sender, + receiver: mpsc::Receiver, + sender: mpsc::Sender, ) -> Pin> + Send>> { - Box::pin(async move { - let job = CandidateSelectionJob::new(metrics, sender, receiver); - - // it isn't necessary to break run_loop into its own function, - // but it's convenient to separate the concerns in this way - job.run_loop().await - }) + async move { + CandidateSelectionJob::new(metrics, sender, receiver).run_loop().await + }.boxed() } } impl CandidateSelectionJob { pub fn new( metrics: Metrics, - sender: mpsc::Sender, - receiver: mpsc::Receiver, + sender: mpsc::Sender, + receiver: mpsc::Receiver, ) -> Self { Self { sender, @@ -166,28 +93,23 @@ impl CandidateSelectionJob { } } - async fn run_loop(mut self) -> Result<(), Error> { - self.run_loop_borrowed().await - } - - /// this function exists for testing and should not generally be used; use `run_loop` instead. - async fn run_loop_borrowed(&mut self) -> Result<(), Error> { - while let Some(msg) = self.receiver.next().await { - match msg { - ToJob::CandidateSelection(CandidateSelectionMessage::Collation( + async fn run_loop(&mut self) -> Result<(), Error> { + loop { + match self.receiver.next().await { + Some(CandidateSelectionMessage::Collation( relay_parent, para_id, collator_id, )) => { self.handle_collation(relay_parent, para_id, collator_id).await; } - ToJob::CandidateSelection(CandidateSelectionMessage::Invalid( + Some(CandidateSelectionMessage::Invalid( _, candidate_receipt, )) => { self.handle_invalid(candidate_receipt).await; } - ToJob::Stop => break, + None => break, } } @@ -283,16 +205,16 @@ async fn get_collation( relay_parent: Hash, para_id: ParaId, collator_id: CollatorId, - mut sender: mpsc::Sender, + mut sender: mpsc::Sender, ) -> Result<(CandidateReceipt, PoV), Error> { let (tx, rx) = oneshot::channel(); sender - .send(FromJob::Collator(CollatorProtocolMessage::FetchCollation( + .send(AllMessages::from(CollatorProtocolMessage::FetchCollation( relay_parent, collator_id, para_id, tx, - ))) + )).into()) .await?; rx.await.map_err(Into::into) } @@ -301,15 +223,15 @@ async fn second_candidate( relay_parent: Hash, candidate_receipt: CandidateReceipt, pov: PoV, - sender: &mut mpsc::Sender, + sender: &mut mpsc::Sender, metrics: &Metrics, ) -> Result<(), Error> { match sender - .send(FromJob::Backing(CandidateBackingMessage::Second( + .send(AllMessages::from(CandidateBackingMessage::Second( relay_parent, candidate_receipt, pov, - ))) + )).into()) .await { Err(err) => { @@ -326,12 +248,12 @@ async fn second_candidate( async fn forward_invalidity_note( received_from: &CollatorId, - sender: &mut mpsc::Sender, + sender: &mut mpsc::Sender, ) -> Result<(), Error> { sender - .send(FromJob::Collator(CollatorProtocolMessage::ReportCollator( + .send(AllMessages::from(CollatorProtocolMessage::ReportCollator( received_from.clone(), - ))) + )).into()) .await .map_err(Into::into) } @@ -420,7 +342,7 @@ impl metrics::Metrics for Metrics { } } -delegated_subsystem!(CandidateSelectionJob((), Metrics) <- ToJob as CandidateSelectionSubsystem); +delegated_subsystem!(CandidateSelectionJob((), Metrics) <- CandidateSelectionMessage as CandidateSelectionSubsystem); #[cfg(test)] mod tests { @@ -436,7 +358,7 @@ mod tests { postconditions: Postconditions, ) where Preconditions: FnOnce(&mut CandidateSelectionJob), - TestBuilder: FnOnce(mpsc::Sender, mpsc::Receiver) -> Test, + TestBuilder: FnOnce(mpsc::Sender, mpsc::Receiver) -> Test, Test: Future, Postconditions: FnOnce(CandidateSelectionJob, Result<(), Error>), { @@ -453,7 +375,7 @@ mod tests { let (_, job_result) = futures::executor::block_on(future::join( test(to_job_tx, from_job_rx), - job.run_loop_borrowed(), + job.run_loop(), )); postconditions(job, job_result); @@ -479,12 +401,10 @@ mod tests { |_job| {}, |mut to_job, mut from_job| async move { to_job - .send(ToJob::CandidateSelection( - CandidateSelectionMessage::Collation( - relay_parent, - para_id, - collator_id_clone.clone(), - ), + .send(CandidateSelectionMessage::Collation( + relay_parent, + para_id, + collator_id_clone.clone(), )) .await .unwrap(); @@ -492,12 +412,12 @@ mod tests { while let Some(msg) = from_job.next().await { match msg { - FromJob::Collator(CollatorProtocolMessage::FetchCollation( + FromJobCommand::SendMessage(AllMessages::CollatorProtocol(CollatorProtocolMessage::FetchCollation( got_relay_parent, collator_id, got_para_id, return_sender, - )) => { + ))) => { assert_eq!(got_relay_parent, relay_parent); assert_eq!(got_para_id, para_id); assert_eq!(collator_id, collator_id_clone); @@ -506,11 +426,11 @@ mod tests { .send((candidate_receipt.clone(), pov.clone())) .unwrap(); } - FromJob::Backing(CandidateBackingMessage::Second( + FromJobCommand::SendMessage(AllMessages::CandidateBacking(CandidateBackingMessage::Second( got_relay_parent, got_candidate_receipt, got_pov, - )) => { + ))) => { assert_eq!(got_relay_parent, relay_parent); assert_eq!(got_candidate_receipt, candidate_receipt); assert_eq!(got_pov, pov); @@ -546,12 +466,10 @@ mod tests { |job| job.seconded_candidate = Some(prev_collator_id.clone()), |mut to_job, mut from_job| async move { to_job - .send(ToJob::CandidateSelection( - CandidateSelectionMessage::Collation( - relay_parent, - para_id, - collator_id_clone, - ), + .send(CandidateSelectionMessage::Collation( + relay_parent, + para_id, + collator_id_clone, )) .await .unwrap(); @@ -559,11 +477,11 @@ mod tests { while let Some(msg) = from_job.next().await { match msg { - FromJob::Backing(CandidateBackingMessage::Second( + FromJobCommand::SendMessage(AllMessages::CandidateBacking(CandidateBackingMessage::Second( _got_relay_parent, _got_candidate_receipt, _got_pov, - )) => { + ))) => { *was_seconded_clone.lock().await = true; } other => panic!("unexpected message from job: {:?}", other), @@ -595,18 +513,16 @@ mod tests { |job| job.seconded_candidate = Some(collator_id.clone()), |mut to_job, mut from_job| async move { to_job - .send(ToJob::CandidateSelection( - CandidateSelectionMessage::Invalid(relay_parent, candidate_receipt), - )) + .send(CandidateSelectionMessage::Invalid(relay_parent, candidate_receipt)) .await .unwrap(); std::mem::drop(to_job); while let Some(msg) = from_job.next().await { match msg { - FromJob::Collator(CollatorProtocolMessage::ReportCollator( + FromJobCommand::SendMessage(AllMessages::CollatorProtocol(CollatorProtocolMessage::ReportCollator( got_collator_id, - )) => { + ))) => { assert_eq!(got_collator_id, collator_id_clone); *sent_report_clone.lock().await = true; diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 91655951cc..c013e11b8f 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -26,99 +26,31 @@ use futures::{ }; use polkadot_node_subsystem::{ errors::{ChainApiError, RuntimeApiError}, - messages::{ - AllMessages, ChainApiMessage, ProvisionableData, ProvisionerInherentData, - ProvisionerMessage, RuntimeApiMessage, - }, + messages::{ChainApiMessage, ProvisionableData, ProvisionerInherentData, ProvisionerMessage, AllMessages}, }; use polkadot_node_subsystem_util::{ - self as util, - delegated_subsystem, FromJobCommand, - request_availability_cores, request_persisted_validation_data, JobTrait, ToJobTrait, - metrics::{self, prometheus}, + self as util, delegated_subsystem, FromJobCommand, + request_availability_cores, request_persisted_validation_data, JobTrait, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{ BackedCandidate, BlockNumber, CoreState, Hash, OccupiedCoreAssumption, SignedAvailabilityBitfield, ValidatorIndex, }; -use std::{convert::TryFrom, pin::Pin}; -use std::collections::BTreeMap; +use std::{pin::Pin, collections::BTreeMap}; use thiserror::Error; const LOG_TARGET: &str = "provisioner"; struct ProvisioningJob { relay_parent: Hash, - sender: mpsc::Sender, - receiver: mpsc::Receiver, + sender: mpsc::Sender, + receiver: mpsc::Receiver, provisionable_data_channels: Vec>, backed_candidates: Vec, signed_bitfields: Vec, metrics: Metrics, } -/// This enum defines the messages that the provisioner is prepared to receive. -pub enum ToJob { - /// The provisioner message is the main input to the provisioner. - Provisioner(ProvisionerMessage), - /// This message indicates that the provisioner should shut itself down. - Stop, -} - -impl ToJobTrait for ToJob { - const STOP: Self = Self::Stop; - - fn relay_parent(&self) -> Option { - match self { - Self::Provisioner(pm) => pm.relay_parent(), - Self::Stop => None, - } - } -} - -impl TryFrom for ToJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::Provisioner(pm) => Ok(Self::Provisioner(pm)), - _ => Err(()), - } - } -} - -impl From for ToJob { - fn from(pm: ProvisionerMessage) -> Self { - Self::Provisioner(pm) - } -} - -enum FromJob { - ChainApi(ChainApiMessage), - Runtime(RuntimeApiMessage), -} - -impl From for FromJobCommand { - fn from(from_job: FromJob) -> FromJobCommand { - FromJobCommand::SendMessage(match from_job { - FromJob::ChainApi(cam) => AllMessages::ChainApi(cam), - FromJob::Runtime(ram) => AllMessages::RuntimeApi(ram), - }) - } -} - -impl TryFrom for FromJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::ChainApi(chain) => Ok(FromJob::ChainApi(chain)), - AllMessages::RuntimeApi(runtime) => Ok(FromJob::Runtime(runtime)), - _ => Err(()), - } - } -} - #[derive(Debug, Error)] enum Error { #[error(transparent)] @@ -141,8 +73,7 @@ enum Error { } impl JobTrait for ProvisioningJob { - type ToJob = ToJob; - type FromJob = FromJob; + type ToJob = ProvisionerMessage; type Error = Error; type RunArgs = (); type Metrics = Metrics; @@ -157,8 +88,8 @@ impl JobTrait for ProvisioningJob { relay_parent: Hash, _run_args: Self::RunArgs, metrics: Self::Metrics, - receiver: mpsc::Receiver, - sender: mpsc::Sender, + receiver: mpsc::Receiver, + sender: mpsc::Sender, ) -> Pin> + Send>> { async move { let job = ProvisioningJob::new(relay_parent, metrics, sender, receiver); @@ -175,8 +106,8 @@ impl ProvisioningJob { pub fn new( relay_parent: Hash, metrics: Metrics, - sender: mpsc::Sender, - receiver: mpsc::Receiver, + sender: mpsc::Sender, + receiver: mpsc::Receiver, ) -> Self { Self { relay_parent, @@ -190,13 +121,13 @@ impl ProvisioningJob { } async fn run_loop(mut self) -> Result<(), Error> { - while let Some(msg) = self.receiver.next().await { - use ProvisionerMessage::{ - ProvisionableData, RequestBlockAuthorshipData, RequestInherentData, - }; + use ProvisionerMessage::{ + ProvisionableData, RequestBlockAuthorshipData, RequestInherentData, + }; - match msg { - ToJob::Provisioner(RequestInherentData(_, return_sender)) => { + loop { + match self.receiver.next().await { + Some(RequestInherentData(_, return_sender)) => { let _timer = self.metrics.time_request_inherent_data(); if let Err(err) = send_inherent_data( @@ -214,10 +145,10 @@ impl ProvisioningJob { self.metrics.on_inherent_data_request(Ok(())); } } - ToJob::Provisioner(RequestBlockAuthorshipData(_, sender)) => { + Some(RequestBlockAuthorshipData(_, sender)) => { self.provisionable_data_channels.push(sender) } - ToJob::Provisioner(ProvisionableData(_, data)) => { + Some(ProvisionableData(_, data)) => { let _timer = self.metrics.time_provisionable_data(); let mut bad_indices = Vec::new(); @@ -252,7 +183,7 @@ impl ProvisioningJob { .map(|(_, item)| item) .collect(); } - ToJob::Stop => break, + None => break, } } @@ -298,7 +229,7 @@ async fn send_inherent_data( bitfields: &[SignedAvailabilityBitfield], candidates: &[BackedCandidate], return_sender: oneshot::Sender, - mut from_job: mpsc::Sender, + mut from_job: mpsc::Sender, ) -> Result<(), Error> { let availability_cores = request_availability_cores(relay_parent, &mut from_job) .await? @@ -368,7 +299,7 @@ async fn select_candidates( bitfields: &[SignedAvailabilityBitfield], candidates: &[BackedCandidate], relay_parent: Hash, - sender: &mut mpsc::Sender, + sender: &mut mpsc::Sender, ) -> Result, Error> { let block_number = get_block_number_under_construction(relay_parent, sender).await?; @@ -432,14 +363,14 @@ async fn select_candidates( #[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] async fn get_block_number_under_construction( relay_parent: Hash, - sender: &mut mpsc::Sender, + sender: &mut mpsc::Sender, ) -> Result { let (tx, rx) = oneshot::channel(); sender - .send(FromJob::ChainApi(ChainApiMessage::BlockNumber( + .send(AllMessages::from(ChainApiMessage::BlockNumber( relay_parent, tx, - ))) + )).into()) .await .map_err(|e| Error::ChainApiMessageSend(e))?; match rx.await? { @@ -558,7 +489,7 @@ impl metrics::Metrics for Metrics { } -delegated_subsystem!(ProvisioningJob((), Metrics) <- ToJob as ProvisioningSubsystem); +delegated_subsystem!(ProvisioningJob((), Metrics) <- ProvisionerMessage as ProvisioningSubsystem); #[cfg(test)] mod tests; diff --git a/node/core/provisioner/src/tests.rs b/node/core/provisioner/src/tests.rs index 3cf06b9e75..1cfe0cf29f 100644 --- a/node/core/provisioner/src/tests.rs +++ b/node/core/provisioner/src/tests.rs @@ -193,13 +193,13 @@ mod select_candidates { use futures_timer::Delay; use super::super::*; use super::{build_occupied_core, default_bitvec, occupied_core, scheduled_core}; - use polkadot_node_subsystem::messages::RuntimeApiRequest::{ - AvailabilityCores, PersistedValidationData as PersistedValidationDataReq, + use polkadot_node_subsystem::messages::{ + AllMessages, RuntimeApiMessage, + RuntimeApiRequest::{AvailabilityCores, PersistedValidationData as PersistedValidationDataReq}, }; use polkadot_primitives::v1::{ BlockNumber, CandidateDescriptor, CommittedCandidateReceipt, PersistedValidationData, }; - use FromJob::{ChainApi, Runtime}; const BLOCK_UNDER_PRODUCTION: BlockNumber = 128; @@ -207,9 +207,9 @@ mod select_candidates { overseer_factory: OverseerFactory, test_factory: TestFactory, ) where - OverseerFactory: FnOnce(mpsc::Receiver) -> Overseer, + OverseerFactory: FnOnce(mpsc::Receiver) -> Overseer, Overseer: Future, - TestFactory: FnOnce(mpsc::Sender) -> Test, + TestFactory: FnOnce(mpsc::Sender) -> Test, Test: Future, { let (tx, rx) = mpsc::channel(64); @@ -297,20 +297,20 @@ mod select_candidates { ] } - async fn mock_overseer(mut receiver: mpsc::Receiver) { + async fn mock_overseer(mut receiver: mpsc::Receiver) { use ChainApiMessage::BlockNumber; use RuntimeApiMessage::Request; while let Some(from_job) = receiver.next().await { match from_job { - ChainApi(BlockNumber(_relay_parent, tx)) => { + FromJobCommand::SendMessage(AllMessages::ChainApi(BlockNumber(_relay_parent, tx))) => { tx.send(Ok(Some(BLOCK_UNDER_PRODUCTION - 1))).unwrap() } - Runtime(Request( + FromJobCommand::SendMessage(AllMessages::RuntimeApi(Request( _parent_hash, PersistedValidationDataReq(_para_id, _assumption, tx), - )) => tx.send(Ok(Some(Default::default()))).unwrap(), - Runtime(Request(_parent_hash, AvailabilityCores(tx))) => { + ))) => tx.send(Ok(Some(Default::default()))).unwrap(), + FromJobCommand::SendMessage(AllMessages::RuntimeApi(Request(_parent_hash, AvailabilityCores(tx)))) => { tx.send(Ok(mock_availability_cores())).unwrap() } // non-exhaustive matches are fine for testing @@ -321,14 +321,14 @@ mod select_candidates { #[test] fn handles_overseer_failure() { - let overseer = |rx: mpsc::Receiver| async move { + let overseer = |rx: mpsc::Receiver| async move { // drop the receiver so it closes and the sender can't send, then just sleep long enough that // this is almost certainly not the first of the two futures to complete std::mem::drop(rx); Delay::new(std::time::Duration::from_secs(1)).await; }; - let test = |mut tx: mpsc::Sender| async move { + let test = |mut tx: mpsc::Sender| async move { // wait so that the overseer can drop the rx before we attempt to send Delay::new(std::time::Duration::from_millis(50)).await; let result = select_candidates(&[], &[], &[], Default::default(), &mut tx).await; @@ -341,7 +341,7 @@ mod select_candidates { #[test] fn can_succeed() { - test_harness(mock_overseer, |mut tx: mpsc::Sender| async move { + test_harness(mock_overseer, |mut tx: mpsc::Sender| async move { let result = select_candidates(&[], &[], &[], Default::default(), &mut tx).await; println!("{:?}", result); assert!(result.is_ok()); @@ -403,7 +403,7 @@ mod select_candidates { .map(|&idx| candidates[idx].clone()) .collect(); - test_harness(mock_overseer, |mut tx: mpsc::Sender| async move { + test_harness(mock_overseer, |mut tx: mpsc::Sender| async move { let result = select_candidates(&mock_cores, &[], &candidates, Default::default(), &mut tx) .await; diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 2620a1f25e..8abfcad206 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -26,7 +26,7 @@ use polkadot_node_subsystem::{ errors::RuntimeApiError, - messages::{AllMessages, RuntimeApiMessage, RuntimeApiRequest, RuntimeApiSender}, + messages::{AllMessages, RuntimeApiMessage, RuntimeApiRequest, RuntimeApiSender, BoundToRelayParent}, FromOverseer, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemError, SubsystemResult, }; use futures::{channel::{mpsc, oneshot}, prelude::*, select, stream::Stream}; @@ -56,6 +56,7 @@ use std::{ pin::Pin, task::{Poll, Context}, time::Duration, + fmt, }; use streamunordered::{StreamUnordered, StreamYield}; use thiserror::Error; @@ -117,18 +118,11 @@ pub async fn request_from_runtime( ) -> Result, Error> where RequestBuilder: FnOnce(RuntimeApiSender) -> RuntimeApiRequest, - FromJob: TryFrom, - >::Error: std::fmt::Debug, + FromJob: From, { let (tx, rx) = oneshot::channel(); - sender - .send( - AllMessages::RuntimeApi(RuntimeApiMessage::Request(parent, request_builder(tx))) - .try_into() - .map_err(|err| Error::SenderConversion(format!("{:?}", err)))?, - ) - .await?; + sender.send(AllMessages::RuntimeApi(RuntimeApiMessage::Request(parent, request_builder(tx))).into()).await?; Ok(rx) } @@ -157,8 +151,7 @@ macro_rules! specialize_requests { sender: &mut mpsc::Sender, ) -> Result, Error> where - FromJob: TryFrom, - >::Error: std::fmt::Debug, + FromJob: From, { request_from_runtime(parent, sender, |tx| RuntimeApiRequest::$request_variant( $( $param_name, )* tx @@ -308,8 +301,7 @@ impl Validator { mut sender: mpsc::Sender, ) -> Result where - FromJob: TryFrom, - >::Error: std::fmt::Debug, + FromJob: From, { // Note: request_validators and request_session_index_for_child do not and cannot // run concurrently: they both have a mutable handle to the same sender. @@ -392,17 +384,6 @@ impl Validator { } } -/// ToJob is expected to be an enum declaring the set of messages of interest to a particular job. -/// -/// Normally, this will be some subset of `Allmessages`, and a `Stop` variant. -pub trait ToJobTrait: TryFrom { - /// The `Stop` variant of the ToJob enum. - const STOP: Self; - - /// If the message variant contains its relay parent, return it here - fn relay_parent(&self) -> Option; -} - struct AbortOnDrop(future::AbortHandle); impl Drop for AbortOnDrop { @@ -415,7 +396,6 @@ impl Drop for AbortOnDrop { struct JobHandle { _abort_handle: AbortOnDrop, to_job: mpsc::Sender, - finished: oneshot::Receiver<()>, } impl JobHandle { @@ -425,22 +405,6 @@ impl JobHandle { } } -impl JobHandle { - /// Stop this job gracefully. - /// - /// If it hasn't shut itself down after `JOB_GRACEFUL_STOP_DURATION`, abort it. - async fn stop(mut self) { - // we don't actually care if the message couldn't be sent - if self.to_job.send(ToJob::STOP).await.is_err() { - return; - } - - let stop_timer = Delay::new(JOB_GRACEFUL_STOP_DURATION); - - future::select(stop_timer, self.finished).await; - } -} - /// This module reexports Prometheus types and defines the [`Metrics`] trait. pub mod metrics { /// Reexport Substrate Prometheus types. @@ -486,16 +450,29 @@ pub enum FromJobCommand { SpawnBlocking(&'static str, Pin + Send>>), } +impl fmt::Debug for FromJobCommand { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match self { + Self::SendMessage(msg) => write!(fmt, "FromJobCommand::SendMessage({:?})", msg), + Self::Spawn(name, _) => write!(fmt, "FromJobCommand::Spawn({})", name), + Self::SpawnBlocking(name, _) => write!(fmt, "FromJobCommand::SpawnBlocking({})", name), + } + } +} + +impl From for FromJobCommand { + fn from(msg: AllMessages) -> Self { + Self::SendMessage(msg) + } +} + /// This trait governs jobs. /// /// Jobs are instantiated and killed automatically on appropriate overseer messages. -/// Other messages are passed along to and from the job via the overseer to other -/// subsystems. +/// Other messages are passed along to and from the job via the overseer to other subsystems. pub trait JobTrait: Unpin { - /// Message type to the job. Typically a subset of AllMessages. - type ToJob: 'static + ToJobTrait + Send; - /// Message type from the job. Typically a subset of AllMessages. - type FromJob: 'static + Into + Send; + /// Message type used to send messages to the job. + type ToJob: 'static + BoundToRelayParent + Send; /// Job runtime error. type Error: 'static + std::error::Error + Send; /// Extra arguments this job needs to run properly. @@ -512,13 +489,15 @@ pub trait JobTrait: Unpin { /// Name of the job, i.e. `CandidateBackingJob` const NAME: &'static str; - /// Run a job for the parent block indicated + /// Run a job for the given relay `parent`. + /// + /// The job should be ended when `receiver` returns `None`. fn run( parent: Hash, run_args: Self::RunArgs, metrics: Self::Metrics, receiver: mpsc::Receiver, - sender: mpsc::Sender, + sender: mpsc::Sender, ) -> Pin> + Send>>; } @@ -546,7 +525,7 @@ pub enum JobsError { pub struct Jobs { spawner: Spawner, running: HashMap>, - outgoing_msgs: StreamUnordered>, + outgoing_msgs: StreamUnordered>, #[pin] job: std::marker::PhantomData, errors: Option, JobsError)>>, @@ -585,7 +564,6 @@ impl Jobs { fn spawn_job(&mut self, parent_hash: Hash, run_args: Job::RunArgs, metrics: Job::Metrics) -> Result<(), Error> { let (to_job_tx, to_job_rx) = mpsc::channel(JOB_CHANNEL_CAPACITY); let (from_job_tx, from_job_rx) = mpsc::channel(JOB_CHANNEL_CAPACITY); - let (finished_tx, finished) = oneshot::channel(); let err_tx = self.errors.clone(); @@ -609,23 +587,13 @@ impl Jobs { } }); - let future = async move { - // job errors are already handled within the future, meaning - // that any errors here are due to the abortable mechanism. - // failure to abort isn't of interest. - let _ = future.await; - // transmission failure here is only possible if the receiver is closed, - // which means the handle is dropped, which means we don't care anymore - let _ = finished_tx.send(()); - }; - self.spawner.spawn(Job::NAME, future.boxed()); + self.spawner.spawn(Job::NAME, future.map(drop).boxed()); self.outgoing_msgs.push(from_job_rx); let handle = JobHandle { _abort_handle: AbortOnDrop(abort_handle), to_job: to_job_tx, - finished, }; self.running.insert(parent_hash, handle); @@ -635,9 +603,7 @@ impl Jobs { /// Stop the job associated with this `parent_hash`. pub async fn stop_job(&mut self, parent_hash: Hash) { - if let Some(handle) = self.running.remove(&parent_hash) { - handle.stop().await; - } + self.running.remove(&parent_hash); } /// Send a message to the appropriate job for this `parent_hash`. @@ -656,7 +622,7 @@ where Spawner: SpawnNamed, Job: JobTrait, { - type Item = Job::FromJob; + type Item = FromJobCommand; fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll> { loop { @@ -706,7 +672,7 @@ where Context: SubsystemContext, Job: 'static + JobTrait, Job::RunArgs: Clone, - Job::ToJob: TryFrom + TryFrom<::Message> + Sync, + Job::ToJob: From<::Message> + Sync, { /// Creates a new `Subsystem`. pub fn new(spawner: Spawner, run_args: Job::RunArgs, metrics: Job::Metrics) -> Self { @@ -783,7 +749,7 @@ where } } - // if we have a channel on which to forward errors, do so + /// Forward a given error to the higher context using the given error channel. async fn fwd_err( hash: Option, err: JobsError, @@ -798,7 +764,9 @@ where } } - // handle an incoming message. return true if we should break afterwards. + /// Handle an incoming message. + /// + /// Returns `true` when this job manager should shutdown. async fn handle_incoming( incoming: SubsystemResult>, jobs: &mut Jobs, @@ -833,44 +801,12 @@ where } } Ok(Signal(Conclude)) => { - // Breaking the loop ends fn run, which drops `jobs`, which immediately drops all ongoing work. - // We can afford to wait a little while to shut them all down properly before doing that. - // - // Forwarding the stream to a drain means we wait until all of the items in the stream - // have completed. Contrast with `into_future`, which turns it into a future of `(head, rest_stream)`. - use futures::sink::drain; - use futures::stream::FuturesUnordered; - use futures::stream::StreamExt; - - if let Err(e) = jobs - .running - .drain() - .map(|(_, handle)| handle.stop()) - .collect::>() - .map(Ok) - .forward(drain()) - .await - { - tracing::error!( - job = Job::NAME, - err = ?e, - "failed to stop a job on conclude signal", - ); - let e = Error::from(e); - Self::fwd_err(None, JobsError::Utility(e), err_tx).await; - } - + jobs.running.clear(); return true; } Ok(Communication { msg }) => { if let Ok(to_job) = ::try_from(msg) { - match to_job.relay_parent() { - Some(hash) => jobs.send_msg(hash, to_job).await, - None => tracing::debug!( - job = Job::NAME, - "trying to send a message to a job without specifying a relay parent", - ), - } + jobs.send_msg(to_job.relay_parent(), to_job).await; } } Ok(Signal(BlockFinalized(_))) => {} @@ -889,11 +825,10 @@ where // handle a command from a job. async fn handle_from_job( - outgoing: Option, + outgoing: Option, ctx: &mut Context, ) -> SubsystemResult<()> { - let cmd: FromJobCommand = outgoing.expect("the Jobs stream never ends; qed").into(); - match cmd { + match outgoing.expect("the Jobs stream never ends; qed") { FromJobCommand::SendMessage(msg) => ctx.send_message(msg).await, FromJobCommand::Spawn(name, task) => ctx.spawn(name, task).await?, FromJobCommand::SpawnBlocking(name, task) => ctx.spawn_blocking(name, task).await?, @@ -907,10 +842,9 @@ impl Subsystem for JobManager::Message: Into, Job: 'static + JobTrait + Send, Job::RunArgs: Clone + Sync, - Job::ToJob: TryFrom + Sync, + Job::ToJob: From<::Message> + Sync, Job::Metrics: Sync, { fn start(self, ctx: Context) -> SpawnedSubsystem { @@ -985,7 +919,7 @@ macro_rules! delegated_subsystem { where Spawner: Clone + $crate::reexports::SpawnNamed + Send + Unpin, Context: $crate::reexports::SubsystemContext, - ::Message: Into<$to_job>, + $to_job: From<::Message>, { #[doc = "Creates a new "] #[doc = $subsystem_name] @@ -1006,7 +940,7 @@ macro_rules! delegated_subsystem { where Spawner: $crate::reexports::SpawnNamed + Send + Clone + Unpin + 'static, Context: $crate::reexports::SubsystemContext, - ::Message: Into<$to_job>, + $to_job: From<::Message>, { fn start(self, ctx: Context) -> $crate::reexports::SpawnedSubsystem { self.manager.start(ctx) @@ -1061,22 +995,17 @@ impl Future for Timeout { #[cfg(test)] mod tests { - use super::{JobManager, JobTrait, JobsError, TimeoutExt, ToJobTrait, FromJobCommand}; + use super::*; use thiserror::Error; use polkadot_node_subsystem::{ - messages::{AllMessages, CandidateSelectionMessage}, - ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, + messages::{AllMessages, CandidateSelectionMessage}, ActiveLeavesUpdate, FromOverseer, OverseerSignal, + SpawnedSubsystem, }; use assert_matches::assert_matches; - use futures::{ - channel::mpsc, - executor, - stream::{self, StreamExt}, - future, Future, FutureExt, SinkExt, - }; + use futures::{channel::mpsc, executor, StreamExt, future, Future, FutureExt, SinkExt}; use polkadot_primitives::v1::Hash; use polkadot_node_subsystem_test_helpers::{self as test_helpers, make_subsystem_context}; - use std::{collections::HashMap, convert::TryFrom, pin::Pin, time::Duration}; + use std::{pin::Pin, time::Duration}; // basic usage: in a nutshell, when you want to define a subsystem, just focus on what its jobs do; // you can leave the subsystem itself to the job manager. @@ -1087,69 +1016,7 @@ mod tests { // job structs are constructed within JobTrait::run // most will want to retain the sender and receiver, as well as whatever other data they like struct FakeCandidateSelectionJob { - receiver: mpsc::Receiver, - } - - // ToJob implementations require the following properties: - // - // - have a Stop variant (to impl ToJobTrait) - // - impl ToJobTrait - // - impl TryFrom - // - impl From (from SubsystemContext::Message) - // - // Mostly, they are just a type-safe subset of AllMessages that this job is prepared to receive - enum ToJob { - CandidateSelection(CandidateSelectionMessage), - Stop, - } - - impl ToJobTrait for ToJob { - const STOP: Self = ToJob::Stop; - - fn relay_parent(&self) -> Option { - match self { - Self::CandidateSelection(csm) => csm.relay_parent(), - Self::Stop => None, - } - } - } - - impl TryFrom for ToJob { - type Error = (); - - fn try_from(msg: AllMessages) -> Result { - match msg { - AllMessages::CandidateSelection(csm) => Ok(ToJob::CandidateSelection(csm)), - _ => Err(()), - } - } - } - - impl From for ToJob { - fn from(csm: CandidateSelectionMessage) -> ToJob { - ToJob::CandidateSelection(csm) - } - } - - // FromJob must be infallibly convertable into FromJobCommand. - // - // It exists to be a type-safe subset of FromJobCommand that this job is specified to send. - // - // Note: the Clone impl here is not generally required; it's just ueful for this test context because - // we include it in the RunArgs - #[derive(Clone)] - enum FromJob { - Test, - } - - impl From for FromJobCommand { - fn from(from_job: FromJob) -> FromJobCommand { - match from_job { - FromJob::Test => FromJobCommand::SendMessage( - AllMessages::CandidateSelection(CandidateSelectionMessage::default()) - ), - } - } + receiver: mpsc::Receiver, } // Error will mostly be a wrapper to make the try operator more convenient; @@ -1162,17 +1029,9 @@ mod tests { } impl JobTrait for FakeCandidateSelectionJob { - type ToJob = ToJob; - type FromJob = FromJob; + type ToJob = CandidateSelectionMessage; type Error = Error; - // RunArgs can be anything that a particular job needs supplied from its external context - // in order to create the Job. In this case, they're a hashmap of parents to the mock outputs - // expected from that job. - // - // Note that it's not recommended to use something as heavy as a hashmap in production: the - // RunArgs get cloned so that each job gets its own owned copy. If you need that, wrap it in - // an Arc. Within a testing context, that efficiency is less important. - type RunArgs = HashMap>; + type RunArgs = bool; type Metrics = (); const NAME: &'static str = "FakeCandidateSelectionJob"; @@ -1181,21 +1040,23 @@ mod tests { // // this function is in charge of creating and executing the job's main loop fn run( - parent: Hash, - mut run_args: Self::RunArgs, + _: Hash, + run_args: Self::RunArgs, _metrics: Self::Metrics, - receiver: mpsc::Receiver, - mut sender: mpsc::Sender, + receiver: mpsc::Receiver, + mut sender: mpsc::Sender, ) -> Pin> + Send>> { async move { let job = FakeCandidateSelectionJob { receiver }; - // most jobs will have a request-response cycle at the heart of their run loop. - // however, in this case, we never receive valid messages, so we may as well - // just send all of our (mock) output messages now - let mock_output = run_args.remove(&parent).unwrap_or_default(); - let mut stream = stream::iter(mock_output.into_iter().map(Ok)); - sender.send_all(&mut stream).await?; + if run_args { + sender.send(FromJobCommand::SendMessage( + CandidateSelectionMessage::Invalid( + Default::default(), + Default::default(), + ).into(), + )).await?; + } // it isn't necessary to break run_loop into its own function, // but it's convenient to separate the concerns in this way @@ -1207,12 +1068,12 @@ mod tests { impl FakeCandidateSelectionJob { async fn run_loop(mut self) -> Result<(), Error> { - while let Some(msg) = self.receiver.next().await { - match msg { - ToJob::CandidateSelection(_csm) => { + loop { + match self.receiver.next().await { + Some(_csm) => { unimplemented!("we'd report the collator to the peer set manager here, but that's not implemented yet"); } - ToJob::Stop => break, + None => break, } } @@ -1228,7 +1089,7 @@ mod tests { type OverseerHandle = test_helpers::TestSubsystemContextHandle; fn test_harness>( - run_args: HashMap>, + run_args: bool, test: impl FnOnce(OverseerHandle, mpsc::Receiver<(Option, JobsError)>) -> T, ) { let _ = env_logger::builder() @@ -1259,13 +1120,8 @@ mod tests { #[test] fn starting_and_stopping_job_works() { let relay_parent: Hash = [0; 32].into(); - let mut run_args = HashMap::new(); - let _ = run_args.insert( - relay_parent.clone(), - vec![FromJob::Test], - ); - test_harness(run_args, |mut overseer_handle, err_rx| async move { + test_harness(true, |mut overseer_handle, err_rx| async move { overseer_handle .send(FromOverseer::Signal(OverseerSignal::ActiveLeaves( ActiveLeavesUpdate::start_work(relay_parent), @@ -1293,13 +1149,8 @@ mod tests { #[test] fn sending_to_a_non_running_job_do_not_stop_the_subsystem() { let relay_parent = Hash::repeat_byte(0x01); - let mut run_args = HashMap::new(); - let _ = run_args.insert( - relay_parent.clone(), - vec![FromJob::Test], - ); - test_harness(run_args, |mut overseer_handle, err_rx| async move { + test_harness(true, |mut overseer_handle, err_rx| async move { overseer_handle .send(FromOverseer::Signal(OverseerSignal::ActiveLeaves( ActiveLeavesUpdate::start_work(relay_parent), @@ -1334,7 +1185,7 @@ mod tests { let (context, _) = make_subsystem_context::(pool.clone()); let SpawnedSubsystem { name, .. } = - FakeCandidateSelectionSubsystem::new(pool, HashMap::new(), ()).start(context); + FakeCandidateSelectionSubsystem::new(pool, false, ()).start(context); assert_eq!(name, "FakeCandidateSelection"); } } diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index eef51fe47a..727814381f 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -39,8 +39,13 @@ use polkadot_primitives::v1::{ ValidationCode, ValidatorId, ValidationData, CandidateHash, ValidatorIndex, ValidatorSignature, InboundDownwardMessage, InboundHrmpMessage, }; -use std::sync::Arc; -use std::collections::btree_map::BTreeMap; +use std::{sync::Arc, collections::btree_map::BTreeMap}; + +/// Subsystem messages where each message is always bound to a relay parent. +pub trait BoundToRelayParent { + /// Returns the relay parent this message is bound to. + fn relay_parent(&self) -> Hash; +} /// A notification of a new backed candidate. #[derive(Debug)] @@ -56,12 +61,11 @@ pub enum CandidateSelectionMessage { Invalid(Hash, CandidateReceipt), } -impl CandidateSelectionMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { +impl BoundToRelayParent for CandidateSelectionMessage { + fn relay_parent(&self) -> Hash { match self { - Self::Collation(hash, ..) => Some(*hash), - Self::Invalid(hash, _) => Some(*hash), + Self::Collation(hash, ..) => *hash, + Self::Invalid(hash, _) => *hash, } } } @@ -86,13 +90,12 @@ pub enum CandidateBackingMessage { Statement(Hash, SignedFullStatement), } -impl CandidateBackingMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { +impl BoundToRelayParent for CandidateBackingMessage { + fn relay_parent(&self) -> Hash { match self { - Self::GetBackedCandidates(hash, _) => Some(*hash), - Self::Second(hash, _, _) => Some(*hash), - Self::Statement(hash, _) => Some(*hash), + Self::GetBackedCandidates(hash, _) => *hash, + Self::Second(hash, _, _) => *hash, + Self::Statement(hash, _) => *hash, } } } @@ -273,10 +276,9 @@ impl BitfieldDistributionMessage { #[derive(Debug)] pub enum BitfieldSigningMessage {} -impl BitfieldSigningMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { - None +impl BoundToRelayParent for BitfieldSigningMessage { + fn relay_parent(&self) -> Hash { + match *self {} } } @@ -525,13 +527,12 @@ pub enum ProvisionerMessage { ProvisionableData(Hash, ProvisionableData), } -impl ProvisionerMessage { - /// If the current variant contains the relay parent hash, return it. - pub fn relay_parent(&self) -> Option { +impl BoundToRelayParent for ProvisionerMessage { + fn relay_parent(&self) -> Hash { match self { - Self::RequestBlockAuthorshipData(hash, _) => Some(*hash), - Self::RequestInherentData(hash, _) => Some(*hash), - Self::ProvisionableData(hash, _) => Some(*hash), + Self::RequestBlockAuthorshipData(hash, _) => *hash, + Self::RequestInherentData(hash, _) => *hash, + Self::ProvisionableData(hash, _) => *hash, } } } -- GitLab From 1e0c9910aa6c43c237b3aa15c45a1f70b896848c Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 30 Nov 2020 12:01:03 -0500 Subject: [PATCH 067/203] Move candidate validation to the background (#2028) * refactor some functions to not rely on `self` * factor out common elements of seconding and attesting * Add Spawn to backing FromJob * do candidate validation in background * tests * address grumbles --- node/core/backing/src/lib.rs | 695 ++++++++++++++++++++++++----------- 1 file changed, 477 insertions(+), 218 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 6adec2747a..aff2944e45 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -31,7 +31,7 @@ use polkadot_primitives::v1::{ CommittedCandidateReceipt, BackedCandidate, Id as ParaId, ValidatorId, ValidatorIndex, SigningContext, PoV, CandidateHash, CandidateDescriptor, AvailableData, ValidatorSignature, Hash, CandidateReceipt, - CoreState, CoreIndex, CollatorId, ValidityAttestation, + CoreState, CoreIndex, CollatorId, ValidityAttestation, CandidateCommitments, }; use polkadot_node_primitives::{ FromTableMisbehavior, Statement, SignedFullStatement, MisbehaviorReport, ValidationResult, @@ -87,6 +87,36 @@ enum Error { UtilError(#[from] util::Error), } +enum ValidatedCandidateCommand { + // We were instructed to second the candidate. + Second(BackgroundValidationResult), + // We were instructed to validate the candidate. + Attest(BackgroundValidationResult), +} + +impl std::fmt::Debug for ValidatedCandidateCommand { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let candidate_hash = self.candidate_hash(); + match *self { + ValidatedCandidateCommand::Second(_) => + write!(f, "Second({})", candidate_hash), + ValidatedCandidateCommand::Attest(_) => + write!(f, "Attest({})", candidate_hash), + } + } +} + +impl ValidatedCandidateCommand { + fn candidate_hash(&self) -> CandidateHash { + match *self { + ValidatedCandidateCommand::Second(Ok((ref candidate, _, _))) => candidate.hash(), + ValidatedCandidateCommand::Second(Err(ref candidate)) => candidate.hash(), + ValidatedCandidateCommand::Attest(Ok((ref candidate, _, _))) => candidate.hash(), + ValidatedCandidateCommand::Attest(Err(ref candidate)) => candidate.hash(), + } + } +} + /// Holds all data needed for candidate backing job operation. struct CandidateBackingJob { /// The hash of the relay parent on top of which this job is doing it's work. @@ -99,8 +129,10 @@ struct CandidateBackingJob { assignment: ParaId, /// The collator required to author the candidate, if any. required_collator: Option, - /// We issued `Valid` or `Invalid` statements on about these candidates. + /// We issued `Seconded`, `Valid` or `Invalid` statements on about these candidates. issued_statements: HashSet, + /// These candidates are undergoing validation in the background. + awaiting_validation: HashSet, /// `Some(h)` if this job has already issues `Seconded` statemt for some candidate with `h` hash. seconded: Option, /// The candidates that are includable, by hash. Each entry here indicates @@ -111,6 +143,8 @@ struct CandidateBackingJob { keystore: SyncCryptoStorePtr, table: Table, table_context: TableContext, + background_validation: mpsc::Receiver, + background_validation_tx: mpsc::Sender, metrics: Metrics, } @@ -219,19 +253,272 @@ fn table_attested_to_backed( }) } +async fn store_available_data( + tx_from: &mut mpsc::Sender, + id: Option, + n_validators: u32, + candidate_hash: CandidateHash, + available_data: AvailableData, +) -> Result<(), Error> { + let (tx, rx) = oneshot::channel(); + tx_from.send(AllMessages::AvailabilityStore( + AvailabilityStoreMessage::StoreAvailableData( + candidate_hash, + id, + n_validators, + available_data, + tx, + ) + ).into() + ).await?; + + let _ = rx.await?; + + Ok(()) +} + +// Make a `PoV` available. +// +// This will compute the erasure root internally and compare it to the expected erasure root. +// This returns `Err()` iff there is an internal error. Otherwise, it returns either `Ok(Ok(()))` or `Ok(Err(_))`. +#[tracing::instrument(level = "trace", skip(tx_from, pov), fields(subsystem = LOG_TARGET))] +async fn make_pov_available( + tx_from: &mut mpsc::Sender, + validator_index: Option, + n_validators: usize, + pov: Arc, + candidate_hash: CandidateHash, + validation_data: polkadot_primitives::v1::PersistedValidationData, + expected_erasure_root: Hash, +) -> Result, Error> { + let available_data = AvailableData { + pov, + validation_data, + }; + + let chunks = erasure_coding::obtain_chunks_v1( + n_validators, + &available_data, + )?; + + let branches = erasure_coding::branches(chunks.as_ref()); + let erasure_root = branches.root(); + + if erasure_root != expected_erasure_root { + return Ok(Err(InvalidErasureRoot)); + } + + store_available_data( + tx_from, + validator_index, + n_validators as u32, + candidate_hash, + available_data, + ).await?; + + Ok(Ok(())) +} + +async fn request_pov_from_distribution( + tx_from: &mut mpsc::Sender, + parent: Hash, + descriptor: CandidateDescriptor, +) -> Result, Error> { + let (tx, rx) = oneshot::channel(); + + tx_from.send(AllMessages::PoVDistribution( + PoVDistributionMessage::FetchPoV(parent, descriptor, tx) + ).into()).await?; + + Ok(rx.await?) +} + +async fn request_candidate_validation( + tx_from: &mut mpsc::Sender, + candidate: CandidateDescriptor, + pov: Arc, +) -> Result { + let (tx, rx) = oneshot::channel(); + + tx_from.send(AllMessages::CandidateValidation( + CandidateValidationMessage::ValidateFromChainState( + candidate, + pov, + tx, + ) + ).into() + ).await?; + + Ok(rx.await??) +} + +type BackgroundValidationResult = Result<(CandidateReceipt, CandidateCommitments, Arc), CandidateReceipt>; + +struct BackgroundValidationParams { + tx_from: mpsc::Sender, + tx_command: mpsc::Sender, + candidate: CandidateReceipt, + relay_parent: Hash, + pov: Option>, + validator_index: Option, + n_validators: usize, + make_command: F, +} + +async fn validate_and_make_available( + params: BackgroundValidationParams ValidatedCandidateCommand>, +) -> Result<(), Error> { + let BackgroundValidationParams { + mut tx_from, + mut tx_command, + candidate, + relay_parent, + pov, + validator_index, + n_validators, + make_command, + } = params; + + let pov = match pov { + Some(pov) => pov, + None => request_pov_from_distribution( + &mut tx_from, + relay_parent, + candidate.descriptor.clone(), + ).await?, + }; + + let v = request_candidate_validation(&mut tx_from, candidate.descriptor.clone(), pov.clone()).await?; + + let expected_commitments_hash = candidate.commitments_hash; + + let res = match v { + ValidationResult::Valid(commitments, validation_data) => { + // If validation produces a new set of commitments, we vote the candidate as invalid. + if commitments.hash() != expected_commitments_hash { + Err(candidate) + } else { + let erasure_valid = make_pov_available( + &mut tx_from, + validator_index, + n_validators, + pov.clone(), + candidate.hash(), + validation_data, + candidate.descriptor.erasure_root, + ).await?; + + match erasure_valid { + Ok(()) => Ok((candidate, commitments, pov.clone())), + Err(InvalidErasureRoot) => Err(candidate), + } + } + } + ValidationResult::Invalid(_reason) => { + Err(candidate) + } + }; + + let command = make_command(res); + tx_command.send(command).await?; + Ok(()) +} + impl CandidateBackingJob { /// Run asynchronously. async fn run_loop(mut self) -> Result<(), Error> { loop { - match self.rx_to.next().await { - Some(msg) => self.process_msg(msg).await?, - None => break, + futures::select! { + validated_command = self.background_validation.next() => { + if let Some(c) = validated_command { + self.handle_validated_candidate_command(c).await?; + } else { + panic!("`self` hasn't dropped and `self` holds a reference to this sender; qed"); + } + } + to_job = self.rx_to.next() => match to_job { + None => break, + Some(msg) => { + self.process_msg(msg).await?; + } + } + } + } + + Ok(()) + } + + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] + async fn handle_validated_candidate_command( + &mut self, + command: ValidatedCandidateCommand, + ) -> Result<(), Error> { + let candidate_hash = command.candidate_hash(); + self.awaiting_validation.remove(&candidate_hash); + + match command { + ValidatedCandidateCommand::Second(res) => { + match res { + Ok((candidate, commitments, pov)) => { + // sanity check. + if self.seconded.is_none() && !self.issued_statements.contains(&candidate_hash) { + self.seconded = Some(candidate_hash); + self.issued_statements.insert(candidate_hash); + self.metrics.on_candidate_seconded(); + + let statement = Statement::Seconded(CommittedCandidateReceipt { + descriptor: candidate.descriptor.clone(), + commitments, + }); + self.sign_import_and_distribute_statement(statement).await?; + self.distribute_pov(candidate.descriptor, pov).await?; + } + } + Err(candidate) => { + self.issue_candidate_invalid_message(candidate).await?; + } + } + } + ValidatedCandidateCommand::Attest(res) => { + // sanity check. + if !self.issued_statements.contains(&candidate_hash) { + let statement = if res.is_ok() { + Statement::Valid(candidate_hash) + } else { + Statement::Invalid(candidate_hash) + }; + + self.issued_statements.insert(candidate_hash); + self.sign_import_and_distribute_statement(statement).await?; + } } } Ok(()) } + #[tracing::instrument(level = "trace", skip(self, params), fields(subsystem = LOG_TARGET))] + async fn background_validate_and_make_available( + &mut self, + params: BackgroundValidationParams< + impl Fn(BackgroundValidationResult) -> ValidatedCandidateCommand + Send + 'static + >, + ) -> Result<(), Error> { + let candidate_hash = params.candidate.hash(); + + if self.awaiting_validation.insert(candidate_hash) { + // spawn background task. + let bg = async move { + if let Err(e) = validate_and_make_available(params).await { + tracing::error!("Failed to validate and make available: {:?}", e); + } + }; + self.tx_from.send(FromJobCommand::Spawn("Backing Validation", bg.boxed())).await?; + } + + Ok(()) + } + async fn issue_candidate_invalid_message( &mut self, candidate: CandidateReceipt, @@ -241,83 +528,33 @@ impl CandidateBackingJob { Ok(()) } - /// Validate the candidate that is requested to be `Second`ed and distribute validation result. - /// - /// Returns `Ok(true)` if we issued a `Seconded` statement about this candidate. + /// Kick off background validation with intent to second. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn validate_and_second( &mut self, candidate: &CandidateReceipt, pov: Arc, - ) -> Result { + ) -> Result<(), Error> { // Check that candidate is collated by the right collator. if self.required_collator.as_ref() .map_or(false, |c| c != &candidate.descriptor().collator) { self.issue_candidate_invalid_message(candidate.clone()).await?; - return Ok(false); + return Ok(()); } - let valid = self.request_candidate_validation( - candidate.descriptor().clone(), - pov.clone(), - ).await?; - - let candidate_hash = candidate.hash(); - - let statement = match valid { - ValidationResult::Valid(commitments, validation_data) => { - // make PoV available for later distribution. Send data to the availability - // store to keep. Sign and dispatch `valid` statement to network if we - // have not seconded the given candidate. - // - // If the commitments hash produced by validation is not the same as given by - // the collator, do not make available and report the collator. - if candidate.commitments_hash != commitments.hash() { - self.issue_candidate_invalid_message(candidate.clone()).await?; - None - } else { - let erasure_valid = self.make_pov_available( - pov, - candidate_hash, - validation_data, - candidate.descriptor.erasure_root, - ).await?; - - match erasure_valid { - Ok(()) => { - let candidate = CommittedCandidateReceipt { - descriptor: candidate.descriptor().clone(), - commitments, - }; - - self.issued_statements.insert(candidate_hash); - Some(Statement::Seconded(candidate)) - } - Err(InvalidErasureRoot) => { - self.issue_candidate_invalid_message(candidate.clone()).await?; - None - } - } - } - } - ValidationResult::Invalid(_reason) => { - // no need to issue a statement about this if we aren't seconding it. - // - // there's an infinite amount of garbage out there. no need to acknowledge - // all of it. - self.issue_candidate_invalid_message(candidate.clone()).await?; - None - } - }; - - let issued_statement = statement.is_some(); - - if let Some(statement) = statement { - self.sign_import_and_distribute_statement(statement).await? - } + self.background_validate_and_make_available(BackgroundValidationParams { + tx_from: self.tx_from.clone(), + tx_command: self.background_validation_tx.clone(), + candidate: candidate.clone(), + relay_parent: self.parent, + pov: Some(pov), + validator_index: self.table_context.validator.as_ref().map(|v| v.index()), + n_validators: self.table_context.validators.len(), + make_command: ValidatedCandidateCommand::Second, + }).await?; - Ok(issued_statement) + Ok(()) } async fn sign_import_and_distribute_statement(&mut self, statement: Statement) -> Result<(), Error> { @@ -418,7 +655,6 @@ impl CandidateBackingJob { #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn process_msg(&mut self, msg: CandidateBackingMessage) -> Result<(), Error> { - match msg { CandidateBackingMessage::Second(_, candidate, pov) => { let _timer = self.metrics.time_process_second(); @@ -437,14 +673,7 @@ impl CandidateBackingJob { let pov = Arc::new(pov); if !self.issued_statements.contains(&candidate_hash) { - if let Ok(true) = self.validate_and_second( - &candidate, - pov.clone(), - ).await { - self.metrics.on_candidate_seconded(); - self.seconded = Some(candidate_hash); - self.distribute_pov(candidate.descriptor, pov).await?; - } + self.validate_and_second(&candidate, pov.clone()).await?; } } } @@ -485,10 +714,7 @@ impl CandidateBackingJob { // We clone the commitments here because there are borrowck // errors relating to this being a struct and methods borrowing the entirety of self // and not just those things that the function uses. - let candidate = self.table.get_candidate(&candidate_hash).ok_or(Error::CandidateNotFound)?; - let expected_commitments = candidate.commitments.clone(); - let expected_erasure_root = candidate.descriptor.erasure_root; - + let candidate = self.table.get_candidate(&candidate_hash).ok_or(Error::CandidateNotFound)?.to_plain(); let descriptor = candidate.descriptor().clone(); // Check that candidate is collated by the right collator. @@ -503,36 +729,16 @@ impl CandidateBackingJob { return Ok(()); } - let pov = self.request_pov_from_distribution(descriptor.clone()).await?; - let v = self.request_candidate_validation(descriptor, pov.clone()).await?; - - let statement = match v { - ValidationResult::Valid(commitments, validation_data) => { - // If validation produces a new set of commitments, we vote the candidate as invalid. - if commitments != expected_commitments { - Statement::Invalid(candidate_hash) - } else { - let erasure_valid = self.make_pov_available( - pov, - candidate_hash, - validation_data, - expected_erasure_root, - ).await?; - - match erasure_valid { - Ok(()) => Statement::Valid(candidate_hash), - Err(InvalidErasureRoot) => Statement::Invalid(candidate_hash), - } - } - } - ValidationResult::Invalid(_reason) => { - Statement::Invalid(candidate_hash) - } - }; - - self.issued_statements.insert(candidate_hash); - - self.sign_import_and_distribute_statement(statement).await + self.background_validate_and_make_available(BackgroundValidationParams { + tx_from: self.tx_from.clone(), + tx_command: self.background_validation_tx.clone(), + candidate: candidate, + relay_parent: self.parent, + pov: None, + validator_index: self.table_context.validator.as_ref().map(|v| v.index()), + n_validators: self.table_context.validators.len(), + make_command: ValidatedCandidateCommand::Attest, + }).await } /// Import the statement and kick off validation work if it is a part of our assignment. @@ -596,102 +802,6 @@ impl CandidateBackingJob { ).into()).await.map_err(Into::into) } - async fn request_pov_from_distribution( - &mut self, - descriptor: CandidateDescriptor, - ) -> Result, Error> { - let (tx, rx) = oneshot::channel(); - - self.tx_from.send(AllMessages::from( - PoVDistributionMessage::FetchPoV(self.parent, descriptor, tx) - ).into()).await?; - - Ok(rx.await?) - } - - async fn request_candidate_validation( - &mut self, - candidate: CandidateDescriptor, - pov: Arc, - ) -> Result { - let (tx, rx) = oneshot::channel(); - - self.tx_from.send( - AllMessages::from( - CandidateValidationMessage::ValidateFromChainState( - candidate, - pov, - tx, - ) - ).into(), - ).await?; - - Ok(rx.await??) - } - - async fn store_available_data( - &mut self, - id: Option, - n_validators: u32, - candidate_hash: CandidateHash, - available_data: AvailableData, - ) -> Result<(), Error> { - let (tx, rx) = oneshot::channel(); - self.tx_from.send(AllMessages::from( - AvailabilityStoreMessage::StoreAvailableData( - candidate_hash, - id, - n_validators, - available_data, - tx, - ) - ).into(), - ).await?; - - let _ = rx.await?; - - Ok(()) - } - - // Make a `PoV` available. - // - // This will compute the erasure root internally and compare it to the expected erasure root. - // This returns `Err()` iff there is an internal error. Otherwise, it returns either `Ok(Ok(()))` or `Ok(Err(_))`. - #[tracing::instrument(level = "trace", skip(self, pov), fields(subsystem = LOG_TARGET))] - async fn make_pov_available( - &mut self, - pov: Arc, - candidate_hash: CandidateHash, - validation_data: polkadot_primitives::v1::PersistedValidationData, - expected_erasure_root: Hash, - ) -> Result, Error> { - let available_data = AvailableData { - pov, - validation_data, - }; - - let chunks = erasure_coding::obtain_chunks_v1( - self.table_context.validators.len(), - &available_data, - )?; - - let branches = erasure_coding::branches(chunks.as_ref()); - let erasure_root = branches.root(); - - if erasure_root != expected_erasure_root { - return Ok(Err(InvalidErasureRoot)); - } - - self.store_available_data( - self.table_context.validator.as_ref().map(|v| v.index()), - self.table_context.validators.len() as u32, - candidate_hash, - available_data, - ).await?; - - Ok(Ok(())) - } - async fn distribute_signed_statement(&mut self, s: SignedFullStatement) -> Result<(), Error> { let smsg = StatementDistributionMessage::Share(self.parent, s); @@ -804,6 +914,7 @@ impl util::JobTrait for CandidateBackingJob { Some(r) => r, }; + let (background_tx, background_rx) = mpsc::channel(16); let job = CandidateBackingJob { parent, rx_to, @@ -811,12 +922,15 @@ impl util::JobTrait for CandidateBackingJob { assignment, required_collator, issued_statements: HashSet::new(), + awaiting_validation: HashSet::new(), seconded: None, backed: HashSet::new(), reported_misbehavior_for: HashSet::new(), keystore, table: Table::default(), table_context, + background_validation: background_rx, + background_validation_tx: background_tx, metrics, }; @@ -925,9 +1039,8 @@ mod tests { use assert_matches::assert_matches; use futures::{future, Future}; use polkadot_primitives::v1::{ - ScheduledCore, BlockData, CandidateCommitments, - PersistedValidationData, ValidationData, TransientValidationData, HeadData, - GroupRotationInfo, + ScheduledCore, BlockData, PersistedValidationData, ValidationData, + TransientValidationData, HeadData, GroupRotationInfo, }; use polkadot_subsystem::{ messages::{RuntimeApiRequest, RuntimeApiMessage}, @@ -1357,13 +1470,6 @@ mod tests { } ); - let statement = CandidateBackingMessage::Statement( - test_state.relay_parent, - signed_b.clone(), - ); - - virtual_overseer.send(FromOverseer::Communication{ msg: statement }).await; - assert_matches!( virtual_overseer.recv().await, AllMessages::StatementDistribution( @@ -1374,6 +1480,13 @@ mod tests { } ); + let statement = CandidateBackingMessage::Statement( + test_state.relay_parent, + signed_b.clone(), + ); + + virtual_overseer.send(FromOverseer::Communication{ msg: statement }).await; + assert_matches!( virtual_overseer.recv().await, AllMessages::Provisioner( @@ -1404,6 +1517,152 @@ mod tests { }); } + #[test] + fn backing_works_while_validation_ongoing() { + let test_state = TestState::default(); + test_harness(test_state.keystore.clone(), |test_harness| async move { + let TestHarness { mut virtual_overseer } = test_harness; + + test_startup(&mut virtual_overseer, &test_state).await; + + let pov = PoV { + block_data: BlockData(vec![1, 2, 3]), + }; + + let pov_hash = pov.hash(); + + let expected_head_data = test_state.head_data.get(&test_state.chain_ids[0]).unwrap(); + + let candidate_a = TestCandidateBuilder { + para_id: test_state.chain_ids[0], + relay_parent: test_state.relay_parent, + pov_hash, + head_data: expected_head_data.clone(), + erasure_root: make_erasure_root(&test_state, pov.clone()), + ..Default::default() + }.build(); + + let candidate_a_hash = candidate_a.hash(); + let public1 = CryptoStore::sr25519_generate_new( + &*test_state.keystore, + ValidatorId::ID, + Some(&test_state.validators[5].to_seed()), + ).await.expect("Insert key into keystore"); + let public2 = CryptoStore::sr25519_generate_new( + &*test_state.keystore, + ValidatorId::ID, + Some(&test_state.validators[2].to_seed()), + ).await.expect("Insert key into keystore"); + let public3 = CryptoStore::sr25519_generate_new( + &*test_state.keystore, + ValidatorId::ID, + Some(&test_state.validators[3].to_seed()), + ).await.expect("Insert key into keystore"); + + let signed_a = SignedFullStatement::sign( + &test_state.keystore, + Statement::Seconded(candidate_a.clone()), + &test_state.signing_context, + 2, + &public2.into(), + ).await.expect("should be signed"); + + let signed_b = SignedFullStatement::sign( + &test_state.keystore, + Statement::Valid(candidate_a_hash), + &test_state.signing_context, + 5, + &public1.into(), + ).await.expect("should be signed"); + + let signed_c = SignedFullStatement::sign( + &test_state.keystore, + Statement::Valid(candidate_a_hash), + &test_state.signing_context, + 3, + &public3.into(), + ).await.expect("should be signed"); + + let statement = CandidateBackingMessage::Statement(test_state.relay_parent, signed_a.clone()); + virtual_overseer.send(FromOverseer::Communication{ msg: statement }).await; + + // Sending a `Statement::Seconded` for our assignment will start + // validation process. The first thing requested is PoV from the + // `PoVDistribution`. + assert_matches!( + virtual_overseer.recv().await, + AllMessages::PoVDistribution( + PoVDistributionMessage::FetchPoV(relay_parent, _, tx) + ) if relay_parent == test_state.relay_parent => { + tx.send(Arc::new(pov.clone())).unwrap(); + } + ); + + // The next step is the actual request to Validation subsystem + // to validate the `Seconded` candidate. + assert_matches!( + virtual_overseer.recv().await, + AllMessages::CandidateValidation( + CandidateValidationMessage::ValidateFromChainState( + c, + pov, + tx, + ) + ) if pov == pov && &c == candidate_a.descriptor() => { + // we never validate the candidate. our local node + // shouldn't issue any statements. + std::mem::forget(tx); + } + ); + + let statement = CandidateBackingMessage::Statement( + test_state.relay_parent, + signed_b.clone(), + ); + + virtual_overseer.send(FromOverseer::Communication{ msg: statement }).await; + + let statement = CandidateBackingMessage::Statement( + test_state.relay_parent, + signed_c.clone(), + ); + + virtual_overseer.send(FromOverseer::Communication{ msg: statement }).await; + + // Candidate gets backed entirely by other votes. + assert_matches!( + virtual_overseer.recv().await, + AllMessages::Provisioner( + ProvisionerMessage::ProvisionableData( + _, + ProvisionableData::BackedCandidate(BackedCandidate { + candidate, + validity_votes, + validator_indices, + }) + ) + ) if candidate == candidate_a => { + assert_eq!(validity_votes.len(), 3); + + assert!(validity_votes.contains( + &ValidityAttestation::Implicit(signed_a.signature().clone()) + )); + assert!(validity_votes.contains( + &ValidityAttestation::Explicit(signed_b.signature().clone()) + )); + assert!(validity_votes.contains( + &ValidityAttestation::Explicit(signed_c.signature().clone()) + )); + assert_eq!(validator_indices, bitvec::bitvec![Lsb0, u8; 1, 0, 1, 1]); + } + ); + + virtual_overseer.send(FromOverseer::Signal( + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::stop_work(test_state.relay_parent))) + ).await; + }); + } + // Issuing conflicting statements on the same candidate should // be a misbehavior. #[test] -- GitLab From 4c79b5fe332a2681053d77bc6e9a58f70ad6ac1b Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 30 Nov 2020 19:26:44 +0100 Subject: [PATCH 068/203] Update Substrate again (#2041) --- Cargo.lock | 274 ++++++++++++++++++++++++++--------------------------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0d16f1f684..b30e2d8606 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1461,7 +1461,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", ] @@ -1469,7 +1469,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -1487,7 +1487,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "chrono", "frame-benchmarking", @@ -1509,7 +1509,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "serde", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "bitflags", "frame-metadata", @@ -1561,7 +1561,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1572,7 +1572,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1584,7 +1584,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1594,7 +1594,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1610,7 +1610,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -1624,7 +1624,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-api", @@ -3771,7 +3771,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -3787,7 +3787,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -3802,7 +3802,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3827,7 +3827,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3841,7 +3841,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3857,7 +3857,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3872,7 +3872,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3887,7 +3887,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3908,7 +3908,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3924,7 +3924,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3944,7 +3944,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3961,7 +3961,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -3975,7 +3975,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3991,7 +3991,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4005,7 +4005,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4020,7 +4020,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4041,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4057,7 +4057,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4070,7 +4070,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "enumflags2", "frame-support", @@ -4085,7 +4085,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4120,7 +4120,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4136,7 +4136,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4150,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4172,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4183,7 +4183,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4197,7 +4197,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4215,7 +4215,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "frame-system", @@ -4232,7 +4232,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4250,7 +4250,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-support", "parity-scale-codec", @@ -4263,7 +4263,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4278,7 +4278,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4294,7 +4294,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6543,7 +6543,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "async-trait", "derive_more", @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6594,7 +6594,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6611,7 +6611,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6632,7 +6632,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6643,7 +6643,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6688,7 +6688,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6699,7 +6699,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "fnv", @@ -6733,7 +6733,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "blake2-rfc", "hash-db", @@ -6763,7 +6763,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6774,7 +6774,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "fork-tree", @@ -6819,7 +6819,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "futures 0.3.8", @@ -6843,7 +6843,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6856,7 +6856,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6882,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "sc-client-api", @@ -6896,7 +6896,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "lazy_static", @@ -6925,7 +6925,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "parity-scale-codec", @@ -6941,7 +6941,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "parity-scale-codec", @@ -6956,7 +6956,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "parity-scale-codec", @@ -6974,7 +6974,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "finality-grandpa", @@ -7011,7 +7011,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "finality-grandpa", @@ -7035,7 +7035,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7053,7 +7053,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "async-trait", "derive_more", @@ -7073,7 +7073,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "hash-db", "lazy_static", @@ -7092,7 +7092,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "async-std", "async-trait", @@ -7146,7 +7146,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7161,7 +7161,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "bytes 0.5.6", "fnv", @@ -7188,7 +7188,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "libp2p", @@ -7201,7 +7201,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7210,7 +7210,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "hash-db", @@ -7243,7 +7243,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "futures 0.3.8", @@ -7267,7 +7267,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7285,7 +7285,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "directories 3.0.1", "exit-future", @@ -7349,7 +7349,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "parity-scale-codec", @@ -7364,7 +7364,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7384,7 +7384,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7405,7 +7405,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "erased-serde", "log", @@ -7424,7 +7424,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "futures 0.3.8", @@ -7446,7 +7446,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7900,19 +7900,19 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ - "derive_more", "log", "sp-core", "sp-std", "sp-wasm-interface", + "thiserror", ] [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "hash-db", "parity-scale-codec", @@ -7928,7 +7928,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7940,7 +7940,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "serde", @@ -7952,7 +7952,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7965,7 +7965,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-api", @@ -7977,7 +7977,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7988,7 +7988,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8000,7 +8000,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "log", @@ -8018,7 +8018,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "serde", "serde_json", @@ -8027,7 +8027,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8053,7 +8053,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "merlin", "parity-scale-codec", @@ -8073,7 +8073,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8082,7 +8082,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8094,7 +8094,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "base58", "blake2-rfc", @@ -8138,7 +8138,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8147,7 +8147,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8157,7 +8157,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "environmental", "parity-scale-codec", @@ -8168,7 +8168,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "finality-grandpa", "log", @@ -8185,7 +8185,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8197,7 +8197,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "hash-db", @@ -8221,7 +8221,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "lazy_static", "sp-core", @@ -8232,7 +8232,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "async-trait", "derive_more", @@ -8248,7 +8248,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "serde", @@ -8260,7 +8260,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8271,7 +8271,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "sp-api", "sp-core", @@ -8281,7 +8281,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "backtrace", ] @@ -8289,7 +8289,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "serde", "sp-core", @@ -8298,7 +8298,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "either", "hash256-std-hasher", @@ -8319,7 +8319,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8335,7 +8335,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "Inflector", "proc-macro-crate", @@ -8347,7 +8347,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "serde", "serde_json", @@ -8356,7 +8356,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8369,7 +8369,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8379,7 +8379,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "hash-db", "log", @@ -8401,12 +8401,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8419,7 +8419,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "sp-core", @@ -8432,7 +8432,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8446,7 +8446,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "log", "parity-scale-codec", @@ -8459,7 +8459,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "derive_more", "futures 0.3.8", @@ -8475,7 +8475,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "hash-db", "memory-db", @@ -8489,7 +8489,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "futures-core", @@ -8501,7 +8501,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8513,7 +8513,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8655,7 +8655,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "chrono", "console_error_panic_hook", @@ -8681,7 +8681,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "platforms", ] @@ -8689,7 +8689,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8712,7 +8712,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "async-std", "derive_more", @@ -8726,7 +8726,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8753,7 +8753,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8763,7 +8763,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#237874bb15bbac174b6cb8d594053b5512f32ca2" +source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" dependencies = [ "proc-macro-crate", "quote 1.0.7", -- GitLab From 6ef668ae84db12018c720ceda2b73c9e5da2838f Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 30 Nov 2020 15:18:02 -0500 Subject: [PATCH 069/203] parachains runtime: configurable maximum validators per core (#2043) * parachains runtime: configurable maximum validators per core * update guide and add test --- .../src/runtime/scheduler.md | 5 +- .../implementers-guide/src/types/runtime.md | 2 + runtime/parachains/src/configuration.rs | 16 ++++ runtime/parachains/src/scheduler.rs | 75 ++++++++++++++++++- 4 files changed, 94 insertions(+), 4 deletions(-) diff --git a/roadmap/implementers-guide/src/runtime/scheduler.md b/roadmap/implementers-guide/src/runtime/scheduler.md index ab8089a647..ead981b6d6 100644 --- a/roadmap/implementers-guide/src/runtime/scheduler.md +++ b/roadmap/implementers-guide/src/runtime/scheduler.md @@ -175,11 +175,12 @@ Actions: 1. Set `SessionStartBlock` to current block number. 1. Clear all `Some` members of `AvailabilityCores`. Return all parathread claims to queue with retries un-incremented. 1. Set `configuration = Configuration::configuration()` (see [`HostConfiguration`](../types/runtime.md#host-configuration)) -1. Resize `AvailabilityCores` to have length `Paras::parachains().len() + configuration.parathread_cores with all`None` entries. +1. Resize `AvailabilityCores` to have length `Paras::parachains().len() + configuration.parathread_cores with all `None` entries. 1. Compute new validator groups by shuffling using a secure randomness beacon - We need a total of `N = Paras::parachains().len() + configuration.parathread_cores` validator groups. - - The total number of validators `V` in the `SessionChangeNotification`'s `validators` may not be evenly divided by `V`. - First, we obtain "shuffled validators" `SV` by shuffling the validators using the `SessionChangeNotification`'s random seed. + - Then, we truncate `SV` to have at most `configuration.max_validators_per_core * N` members, if `configuration.max_validators_per_core` is `Some`. + - Note that the total number of validators `V` in `SV` may not be evenly divided by `N`. - The groups are selected by partitioning `SV`. The first V % N groups will have (V / N) + 1 members, while the remaining groups will have (V / N) members each. 1. Prune the parathread queue to remove all retries beyond `configuration.parathread_retries`. - Also prune all parathread claims corresponding to de-registered parathreads. diff --git a/roadmap/implementers-guide/src/types/runtime.md b/roadmap/implementers-guide/src/types/runtime.md index 7900a6edab..332860d470 100644 --- a/roadmap/implementers-guide/src/types/runtime.md +++ b/roadmap/implementers-guide/src/types/runtime.md @@ -34,6 +34,8 @@ struct HostConfiguration { pub thread_availability_period: BlockNumber, /// The amount of blocks ahead to schedule parathreads. pub scheduling_lookahead: u32, + /// The maximum number of validators to have per core. `None` means no maximum. + pub max_validators_per_core: Option, /// The amount of sessions to keep for disputes. pub dispute_period: SessionIndex, /// The amount of consensus slots that must pass between submitting an assignment and diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 159caadabb..2c413b7d61 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -61,6 +61,8 @@ pub struct HostConfiguration { pub thread_availability_period: BlockNumber, /// The amount of blocks ahead to schedule parachains and parathreads. pub scheduling_lookahead: u32, + /// The maximum number of validators to have per core. `None` means no maximum. + pub max_validators_per_core: Option, /// The amount of sessions to keep for disputes. pub dispute_period: SessionIndex, /// The amount of consensus slots that must pass between submitting an assignment and @@ -271,6 +273,16 @@ decl_module! { Ok(()) } + /// Set the maximum number of validators to assign to any core. + #[weight = (1_000, DispatchClass::Operational)] + pub fn set_max_validators_per_core(origin, new: Option) -> DispatchResult { + ensure_root(origin)?; + Self::update_config_member(|config| { + sp_std::mem::replace(&mut config.max_validators_per_core, new) != new + }); + Ok(()) + } + /// Set the dispute period, in number of sessions to keep for disputes. #[weight = (1_000, DispatchClass::Operational)] pub fn set_dispute_period(origin, new: SessionIndex) -> DispatchResult { @@ -582,6 +594,7 @@ mod tests { chain_availability_period: 10, thread_availability_period: 8, scheduling_lookahead: 3, + max_validators_per_core: None, dispute_period: 239, no_show_slots: 240, n_delay_tranches: 241, @@ -645,6 +658,9 @@ mod tests { Configuration::set_scheduling_lookahead( Origin::root(), new_config.scheduling_lookahead, ).unwrap(); + Configuration::set_max_validators_per_core( + Origin::root(), new_config.max_validators_per_core, + ).unwrap(); Configuration::set_dispute_period( Origin::root(), new_config.dispute_period, ).unwrap(); diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index 8f4b0d55ef..139e2dfa6a 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -273,8 +273,17 @@ impl Module { shuffled_indices.shuffle(&mut rng); - let group_base_size = validators.len() / n_cores as usize; - let n_larger_groups = validators.len() % n_cores as usize; + // trim to max per cores. do this after shuffling. + { + if let Some(max_per_core) = config.max_validators_per_core { + let max_total = max_per_core * n_cores; + shuffled_indices.truncate(max_total as usize); + } + } + + let group_base_size = shuffled_indices.len() / n_cores as usize; + let n_larger_groups = shuffled_indices.len() % n_cores as usize; + let groups: Vec> = (0..n_cores).map(|core_id| { let n_members = if (core_id as usize) < n_larger_groups { group_base_size + 1 @@ -1055,6 +1064,68 @@ mod tests { }); } + #[test] + fn session_change_takes_only_max_per_core() { + let config = { + let mut config = default_config(); + config.parathread_cores = 0; + config.max_validators_per_core = Some(1); + config + }; + + let genesis_config = MockGenesisConfig { + configuration: crate::configuration::GenesisConfig { + config: config.clone(), + ..Default::default() + }, + ..Default::default() + }; + + new_test_ext(genesis_config).execute_with(|| { + let chain_a = ParaId::from(1); + let chain_b = ParaId::from(2); + + // ensure that we have 5 groups by registering 2 parachains. + Paras::schedule_para_initialize(chain_a, ParaGenesisArgs { + genesis_head: Vec::new().into(), + validation_code: Vec::new().into(), + parachain: true, + }); + Paras::schedule_para_initialize(chain_b, ParaGenesisArgs { + genesis_head: Vec::new().into(), + validation_code: Vec::new().into(), + parachain: true, + }); + + run_to_block(1, |number| match number { + 1 => Some(SessionChangeNotification { + new_config: config.clone(), + validators: vec![ + ValidatorId::from(Sr25519Keyring::Alice.public()), + ValidatorId::from(Sr25519Keyring::Bob.public()), + ValidatorId::from(Sr25519Keyring::Charlie.public()), + ValidatorId::from(Sr25519Keyring::Dave.public()), + ValidatorId::from(Sr25519Keyring::Eve.public()), + ValidatorId::from(Sr25519Keyring::Ferdie.public()), + ValidatorId::from(Sr25519Keyring::One.public()), + ], + random_seed: [99; 32], + ..Default::default() + }), + _ => None, + }); + + let groups = ValidatorGroups::get(); + assert_eq!(groups.len(), 2); + + // Even though there are 7 validators, only 1 validator per group + // due to the max. + for i in 0..2 { + assert_eq!(groups[i].len(), 1); + } + }); + } + #[test] fn schedule_schedules() { let genesis_config = MockGenesisConfig { -- GitLab From 5ce2b3809058b938b3f091bbab6677866f4c7bdf Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 30 Nov 2020 16:52:30 -0500 Subject: [PATCH 070/203] small improvements for parachains consensus (#2040) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * introduce a waiting period before selecting candidates and bitfields * add network_bridge=debug tracing for rep * change to 2.5s timeout in proposer * pass timeout to proposer * move timeout back to provisioner * grumbles * Update node/core/provisioner/src/lib.rs * Fix nitpicks * Fix bug Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- node/core/proposer/src/lib.rs | 2 +- node/core/provisioner/Cargo.toml | 2 +- node/core/provisioner/src/lib.rs | 192 ++++++++++++++++-------- node/core/runtime-api/src/lib.rs | 2 +- node/network/bridge/src/lib.rs | 12 +- node/test/service/tests/build-blocks.rs | 2 + 6 files changed, 142 insertions(+), 70 deletions(-) diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index 48971ad074..e5b4c61341 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -37,7 +37,7 @@ use prometheus_endpoint::Registry as PrometheusRegistry; use std::{fmt, pin::Pin, sync::Arc, time}; /// How long proposal can take before we give up and err out -const PROPOSE_TIMEOUT: core::time::Duration = core::time::Duration::from_secs(2); +const PROPOSE_TIMEOUT: core::time::Duration = core::time::Duration::from_millis(2500); /// Custom Proposer factory for Polkadot pub struct ProposerFactory { diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index c5fccfd43b..57034696fb 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -13,8 +13,8 @@ thiserror = "1.0.22" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } +futures-timer = "3.0.2" [dev-dependencies] sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -futures-timer = "3.0.2" diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index c013e11b8f..560764453a 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -38,9 +38,45 @@ use polkadot_primitives::v1::{ }; use std::{pin::Pin, collections::BTreeMap}; use thiserror::Error; +use futures_timer::Delay; + +/// How long to wait before proposing. +const PRE_PROPOSE_TIMEOUT: std::time::Duration = core::time::Duration::from_millis(2000); const LOG_TARGET: &str = "provisioner"; +enum InherentAfter { + Ready, + Wait(Delay), +} + +impl InherentAfter { + fn new_from_now() -> Self { + InherentAfter::Wait(Delay::new(PRE_PROPOSE_TIMEOUT)) + } + + fn is_ready(&self) -> bool { + match *self { + InherentAfter::Ready => true, + InherentAfter::Wait(_) => false, + } + } + + async fn ready(&mut self) { + match *self { + InherentAfter::Ready => { + // Make sure we never end the returned future. + // This is required because the `select!` that calls this future will end in a busy loop. + futures::pending!() + }, + InherentAfter::Wait(ref mut d) => { + d.await; + *self = InherentAfter::Ready; + }, + } + } +} + struct ProvisioningJob { relay_parent: Hash, sender: mpsc::Sender, @@ -49,6 +85,8 @@ struct ProvisioningJob { backed_candidates: Vec, signed_bitfields: Vec, metrics: Metrics, + inherent_after: InherentAfter, + awaiting_inherent: Vec> } #[derive(Debug, Error)] @@ -92,7 +130,12 @@ impl JobTrait for ProvisioningJob { sender: mpsc::Sender, ) -> Pin> + Send>> { async move { - let job = ProvisioningJob::new(relay_parent, metrics, sender, receiver); + let job = ProvisioningJob::new( + relay_parent, + metrics, + sender, + receiver, + ); // it isn't necessary to break run_loop into its own function, // but it's convenient to separate the concerns in this way @@ -117,6 +160,8 @@ impl ProvisioningJob { backed_candidates: Vec::new(), signed_bitfields: Vec::new(), metrics, + inherent_after: InherentAfter::new_from_now(), + awaiting_inherent: Vec::new(), } } @@ -126,70 +171,89 @@ impl ProvisioningJob { }; loop { - match self.receiver.next().await { - Some(RequestInherentData(_, return_sender)) => { - let _timer = self.metrics.time_request_inherent_data(); - - if let Err(err) = send_inherent_data( - self.relay_parent, - &self.signed_bitfields, - &self.backed_candidates, - return_sender, - self.sender.clone(), - ) - .await - { - tracing::warn!(target: LOG_TARGET, err = ?err, "failed to assemble or send inherent data"); - self.metrics.on_inherent_data_request(Err(())); - } else { - self.metrics.on_inherent_data_request(Ok(())); - } - } - Some(RequestBlockAuthorshipData(_, sender)) => { - self.provisionable_data_channels.push(sender) - } - Some(ProvisionableData(_, data)) => { - let _timer = self.metrics.time_provisionable_data(); - - let mut bad_indices = Vec::new(); - for (idx, channel) in self.provisionable_data_channels.iter_mut().enumerate() { - match channel.send(data.clone()).await { - Ok(_) => {} - Err(_) => bad_indices.push(idx), + futures::select! { + msg = self.receiver.next().fuse() => match msg { + Some(RequestInherentData(_, return_sender)) => { + let _timer = self.metrics.time_request_inherent_data(); + + if self.inherent_after.is_ready() { + self.send_inherent_data(vec![return_sender]).await; + } else { + self.awaiting_inherent.push(return_sender); } } - self.note_provisionable_data(data); - - // clean up our list of channels by removing the bad indices - // start by reversing it for efficient pop - bad_indices.reverse(); - // Vec::retain would be nicer here, but it doesn't provide - // an easy API for retaining by index, so we re-collect instead. - self.provisionable_data_channels = self - .provisionable_data_channels - .into_iter() - .enumerate() - .filter(|(idx, _)| { - if bad_indices.is_empty() { - return true; - } - let tail = bad_indices[bad_indices.len() - 1]; - let retain = *idx != tail; - if *idx >= tail { - let _ = bad_indices.pop(); + Some(RequestBlockAuthorshipData(_, sender)) => { + self.provisionable_data_channels.push(sender) + } + Some(ProvisionableData(_, data)) => { + let _timer = self.metrics.time_provisionable_data(); + + let mut bad_indices = Vec::new(); + for (idx, channel) in self.provisionable_data_channels.iter_mut().enumerate() { + match channel.send(data.clone()).await { + Ok(_) => {} + Err(_) => bad_indices.push(idx), } - retain - }) - .map(|(_, item)| item) - .collect(); + } + self.note_provisionable_data(data); + + // clean up our list of channels by removing the bad indices + // start by reversing it for efficient pop + bad_indices.reverse(); + // Vec::retain would be nicer here, but it doesn't provide + // an easy API for retaining by index, so we re-collect instead. + self.provisionable_data_channels = self + .provisionable_data_channels + .into_iter() + .enumerate() + .filter(|(idx, _)| { + if bad_indices.is_empty() { + return true; + } + let tail = bad_indices[bad_indices.len() - 1]; + let retain = *idx != tail; + if *idx >= tail { + let _ = bad_indices.pop(); + } + retain + }) + .map(|(_, item)| item) + .collect(); + } + None => break, + }, + _ = self.inherent_after.ready().fuse() => { + let return_senders = std::mem::take(&mut self.awaiting_inherent); + if !return_senders.is_empty() { + self.send_inherent_data(return_senders).await; + } } - None => break, } } Ok(()) } + async fn send_inherent_data( + &mut self, + return_senders: Vec>, + ) { + if let Err(err) = send_inherent_data( + self.relay_parent, + &self.signed_bitfields, + &self.backed_candidates, + return_senders, + &mut self.sender, + ) + .await + { + tracing::warn!(target: LOG_TARGET, err = ?err, "failed to assemble or send inherent data"); + self.metrics.on_inherent_data_request(Err(())); + } else { + self.metrics.on_inherent_data_request(Ok(())); + } + } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn note_provisionable_data(&mut self, provisionable_data: ProvisionableData) { match provisionable_data { @@ -223,15 +287,15 @@ type CoreAvailability = BitVec; /// When we're choosing bitfields to include, the rule should be simple: /// maximize availability. So basically, include all bitfields. And then /// choose a coherent set of candidates along with that. -#[tracing::instrument(level = "trace", skip(return_sender, from_job), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(return_senders, from_job), fields(subsystem = LOG_TARGET))] async fn send_inherent_data( relay_parent: Hash, bitfields: &[SignedAvailabilityBitfield], candidates: &[BackedCandidate], - return_sender: oneshot::Sender, - mut from_job: mpsc::Sender, + return_senders: Vec>, + from_job: &mut mpsc::Sender, ) -> Result<(), Error> { - let availability_cores = request_availability_cores(relay_parent, &mut from_job) + let availability_cores = request_availability_cores(relay_parent, from_job) .await? .await??; @@ -241,13 +305,15 @@ async fn send_inherent_data( &bitfields, candidates, relay_parent, - &mut from_job, + from_job, ) .await?; - return_sender - .send((bitfields, candidates)) - .map_err(|_data| Error::InherentDataReturnChannel)?; + let res = (bitfields, candidates); + for return_sender in return_senders { + return_sender.send(res.clone()).map_err(|_data| Error::InherentDataReturnChannel)?; + } + Ok(()) } diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index 38b78648f1..16fd080ff2 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -243,7 +243,7 @@ mod tests { sp_api::mock_impl_runtime_apis! { impl ParachainHost for MockRuntimeApi { - type Error = String; + type Error = sp_api::ApiError; fn validators(&self) -> Vec { self.validators.clone() diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 7e05595d0b..0253d3c137 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -136,6 +136,7 @@ impl Network for Arc> { sc_network::NetworkService::event_stream(self, "polkadot-network-bridge").boxed() } + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn action_sink<'a>(&'a mut self) -> Pin + Send + 'a>> { @@ -153,10 +154,13 @@ impl Network for Arc> { fn start_send(self: Pin<&mut Self>, action: NetworkAction) -> SubsystemResult<()> { match action { - NetworkAction::ReputationChange(peer, cost_benefit) => self.0.report_peer( - peer, - cost_benefit, - ), + NetworkAction::ReputationChange(peer, cost_benefit) => { + tracing::debug!("reputation: {:?} for {}", cost_benefit, peer); + self.0.report_peer( + peer, + cost_benefit, + ) + } NetworkAction::WriteNotification(peer, peer_set, message) => { match peer_set { PeerSet::Validation => self.0.write_notification( diff --git a/node/test/service/tests/build-blocks.rs b/node/test/service/tests/build-blocks.rs index fa03e04228..777f266a03 100644 --- a/node/test/service/tests/build-blocks.rs +++ b/node/test/service/tests/build-blocks.rs @@ -21,6 +21,8 @@ use sp_keyring::Sr25519Keyring; #[substrate_test_utils::test] async fn ensure_test_service_build_blocks(task_executor: TaskExecutor) { + sc_cli::init_logger("", Default::default(), None).expect("Sets up logger"); + let mut alice = run_validator_node( task_executor.clone(), Sr25519Keyring::Alice, -- GitLab From 76b1efd8b1fe742a1610f684c5e5d47e168c09e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 09:41:36 +0100 Subject: [PATCH 071/203] Bump structopt from 0.3.20 to 0.3.21 (#2046) Bumps [structopt](https://github.com/TeXitoi/structopt) from 0.3.20 to 0.3.21. - [Release notes](https://github.com/TeXitoi/structopt/releases) - [Changelog](https://github.com/TeXitoi/structopt/blob/master/CHANGELOG.md) - [Commits](https://github.com/TeXitoi/structopt/compare/v0.3.20...v0.3.21) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- cli/Cargo.toml | 2 +- parachain/test-parachains/adder/collator/Cargo.toml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b30e2d8606..fac2565903 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8596,9 +8596,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8" +checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c" dependencies = [ "clap", "lazy_static", @@ -8607,9 +8607,9 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8" +checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90" dependencies = [ "heck", "proc-macro-error", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index fae390df70..930b995109 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -16,7 +16,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] log = "0.4.11" thiserror = "1.0.22" -structopt = { version = "0.3.20", optional = true } +structopt = { version = "0.3.21", optional = true } wasm-bindgen = { version = "0.2.68", optional = true } wasm-bindgen-futures = { version = "0.4.18", optional = true } diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 0a2fefa5a8..8fdefbffb7 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -14,7 +14,7 @@ parity-scale-codec = { version = "1.3.5", default-features = false, features = [ futures = "0.3.8" futures-timer = "3.0.2" log = "0.4.11" -structopt = "0.3.20" +structopt = "0.3.21" test-parachain-adder = { path = ".." } polkadot-primitives = { path = "../../../../primitives" } -- GitLab From 5f51c63a0942d2feabe1d6534dedd34022fc5370 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 13:18:30 +0100 Subject: [PATCH 072/203] Bump wasm-bindgen from 0.2.68 to 0.2.69 (#2044) Bumps [wasm-bindgen](https://github.com/rustwasm/wasm-bindgen) from 0.2.68 to 0.2.69. - [Release notes](https://github.com/rustwasm/wasm-bindgen/releases) - [Changelog](https://github.com/rustwasm/wasm-bindgen/blob/master/CHANGELOG.md) - [Commits](https://github.com/rustwasm/wasm-bindgen/compare/0.2.68...0.2.69) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 22 +++++++++++----------- cli/Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fac2565903..3ee8796871 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9664,11 +9664,11 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.68" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42" +checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "serde", "serde_json", "wasm-bindgen-macro", @@ -9676,9 +9676,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.68" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" +checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62" dependencies = [ "bumpalo", "lazy_static", @@ -9703,9 +9703,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.68" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038" +checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084" dependencies = [ "quote 1.0.7", "wasm-bindgen-macro-support", @@ -9713,9 +9713,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.68" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" +checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -9726,9 +9726,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.68" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" +checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158" [[package]] name = "wasm-gc-api" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 930b995109..cde1b8cd50 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -17,7 +17,7 @@ crate-type = ["cdylib", "rlib"] log = "0.4.11" thiserror = "1.0.22" structopt = { version = "0.3.21", optional = true } -wasm-bindgen = { version = "0.2.68", optional = true } +wasm-bindgen = { version = "0.2.69", optional = true } wasm-bindgen-futures = { version = "0.4.18", optional = true } service = { package = "polkadot-service", path = "../node/service", default-features = false, optional = true } -- GitLab From 54d4cbaf719db2a4faecaaebecd2110829f63e8c Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Tue, 1 Dec 2020 15:22:24 +0100 Subject: [PATCH 073/203] execute_with_client: add 'static bound for Backend (#2049) This is not a big change since the user definition AbstractClient already is 'static. --- node/service/src/client.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/service/src/client.rs b/node/service/src/client.rs index 04ba49fb12..0074803219 100644 --- a/node/service/src/client.rs +++ b/node/service/src/client.rs @@ -115,7 +115,7 @@ pub trait ExecuteWithClient { fn execute_with_client(self, client: Arc) -> Self::Output where >::StateBackend: sp_api::StateBackend, - Backend: sc_client_api::Backend, + Backend: sc_client_api::Backend + 'static, Backend::State: sp_api::StateBackend, Api: crate::RuntimeApiCollection, Client: AbstractClient + 'static; -- GitLab From b8042dde326fc76fc2f1f311df1db24a382893e2 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Tue, 1 Dec 2020 19:20:20 +0100 Subject: [PATCH 074/203] adder-collator cli flags (#2051) * Accept --parachain-id in adder-collator * adder-collator: Support a file chainspec This change is to make it more similar to what we have in cumlus. --- parachain/test-parachains/adder/collator/src/cli.rs | 9 ++++++++- parachain/test-parachains/adder/collator/src/main.rs | 11 +++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/parachain/test-parachains/adder/collator/src/cli.rs b/parachain/test-parachains/adder/collator/src/cli.rs index 7b59d2acf7..ae6e9ef900 100644 --- a/parachain/test-parachains/adder/collator/src/cli.rs +++ b/parachain/test-parachains/adder/collator/src/cli.rs @@ -45,6 +45,10 @@ pub struct RunCmd { #[allow(missing_docs)] #[structopt(flatten)] pub base: sc_cli::RunCmd, + + /// Id of the parachain this collator collates for. + #[structopt(long)] + pub parachain_id: Option, } #[allow(missing_docs)] @@ -96,7 +100,10 @@ impl SubstrateCli for Cli { Box::new(polkadot_service::chain_spec::rococo_local_testnet_config()?) } "rococo" => Box::new(polkadot_service::chain_spec::rococo_config()?), - _ => Err("adder collator only supports rococo")?, + path => { + let path = std::path::PathBuf::from(path); + Box::new(polkadot_service::RococoChainSpec::from_json_file(path)?) + } }) } diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 3145bf72c1..03b63989cc 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -23,7 +23,8 @@ use sc_cli::{Result, Role, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; use test_parachain_adder_collator::Collator; -const PARA_ID: ParaId = ParaId::new(100); +/// The parachain ID to collate for in case it wasn't set explicitly through CLI. +const DEFAULT_PARA_ID: ParaId = ParaId::new(100); mod cli; use cli::Cli; @@ -69,21 +70,23 @@ fn main() -> Result<()> { let validation_code_hex = format!("0x{:?}", HexDisplay::from(&collator.validation_code())); - log::info!("Running adder collator for parachain id: {}", PARA_ID); + let para_id = cli.run.parachain_id.map(ParaId::from).unwrap_or(DEFAULT_PARA_ID); + + log::info!("Running adder collator for parachain id: {}", para_id); log::info!("Genesis state: {}", genesis_head_hex); log::info!("Validation code: {}", validation_code_hex); let config = CollationGenerationConfig { key: collator.collator_key(), collator: collator.create_collation_function(), - para_id: PARA_ID, + para_id, }; overseer_handler .send_msg(CollationGenerationMessage::Initialize(config)) .await; overseer_handler - .send_msg(CollatorProtocolMessage::CollateOn(PARA_ID)) + .send_msg(CollatorProtocolMessage::CollateOn(para_id)) .await; Ok(full_node.task_manager) -- GitLab From 12e0257342e0f67e86aa80980c20754d2e348136 Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Tue, 1 Dec 2020 21:43:00 +0300 Subject: [PATCH 075/203] Cadidate selection check assignment (#2042) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Cadidate selection check assignment * Apply suggestions from code review Co-authored-by: Bastian Köcher Co-authored-by: Peter Goodspeed-Niklaus * Review fixes * Punish collator for wrong announcements * Update node/core/candidate-selection/src/lib.rs Co-authored-by: Bastian Köcher Co-authored-by: Peter Goodspeed-Niklaus --- Cargo.lock | 1 + node/core/candidate-selection/Cargo.toml | 3 + node/core/candidate-selection/src/lib.rs | 105 +++++++++++++++++++++-- node/service/src/lib.rs | 2 +- 4 files changed, 101 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3ee8796871..f732d1e1ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4960,6 +4960,7 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "sp-core", + "sp-keystore", "thiserror", "tracing", "tracing-futures", diff --git a/node/core/candidate-selection/Cargo.toml b/node/core/candidate-selection/Cargo.toml index 3d988e21e0..c62cd0b423 100644 --- a/node/core/candidate-selection/Cargo.toml +++ b/node/core/candidate-selection/Cargo.toml @@ -9,6 +9,9 @@ futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" thiserror = "1.0.22" + +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } + polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index 0eb5242979..5812a47f15 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -23,22 +23,28 @@ use futures::{ channel::{mpsc, oneshot}, prelude::*, }; +use sp_keystore::SyncCryptoStorePtr; use polkadot_node_subsystem::{ errors::ChainApiError, messages::{ AllMessages, CandidateBackingMessage, CandidateSelectionMessage, CollatorProtocolMessage, + RuntimeApiRequest, }, }; use polkadot_node_subsystem_util::{ - self as util, delegated_subsystem, JobTrait, FromJobCommand, metrics::{self, prometheus}, + self as util, request_from_runtime, request_validator_groups, delegated_subsystem, + JobTrait, FromJobCommand, Validator, metrics::{self, prometheus}, +}; +use polkadot_primitives::v1::{ + CandidateReceipt, CollatorId, CoreState, CoreIndex, Hash, Id as ParaId, PoV, }; -use polkadot_primitives::v1::{CandidateReceipt, CollatorId, Hash, Id as ParaId, PoV}; use std::pin::Pin; use thiserror::Error; const LOG_TARGET: &'static str = "candidate_selection"; struct CandidateSelectionJob { + assignment: ParaId, sender: mpsc::Sender, receiver: mpsc::Receiver, metrics: Metrics, @@ -57,30 +63,92 @@ enum Error { ChainApi(#[from] ChainApiError), } +macro_rules! try_runtime_api { + ($x: expr) => { + match $x { + Ok(x) => x, + Err(e) => { + tracing::warn!( + target: LOG_TARGET, + err = ?e, + "Failed to fetch runtime API data for job", + ); + + // We can't do candidate selection work if we don't have the + // requisite runtime API data. But these errors should not take + // down the node. + return Ok(()); + } + } + } +} + impl JobTrait for CandidateSelectionJob { type ToJob = CandidateSelectionMessage; type Error = Error; - type RunArgs = (); + type RunArgs = SyncCryptoStorePtr; type Metrics = Metrics; const NAME: &'static str = "CandidateSelectionJob"; - #[tracing::instrument(skip(_relay_parent, _run_args, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(skip(keystore, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] fn run( - _relay_parent: Hash, - _run_args: Self::RunArgs, + relay_parent: Hash, + keystore: Self::RunArgs, metrics: Self::Metrics, receiver: mpsc::Receiver, - sender: mpsc::Sender, + mut sender: mpsc::Sender, ) -> Pin> + Send>> { async move { - CandidateSelectionJob::new(metrics, sender, receiver).run_loop().await + let (groups, cores) = futures::try_join!( + try_runtime_api!(request_validator_groups(relay_parent, &mut sender).await), + try_runtime_api!(request_from_runtime( + relay_parent, + &mut sender, + |tx| RuntimeApiRequest::AvailabilityCores(tx), + ).await), + )?; + + let (validator_groups, group_rotation_info) = try_runtime_api!(groups); + let cores = try_runtime_api!(cores); + + let n_cores = cores.len(); + + let validator = match Validator::new(relay_parent, keystore.clone(), sender.clone()).await { + Ok(validator) => validator, + Err(util::Error::NotAValidator) => return Ok(()), + Err(err) => return Err(Error::Util(err)), + }; + + let mut assignment = None; + + for (idx, core) in cores.into_iter().enumerate() { + // Ignore prospective assignments on occupied cores for the time being. + if let CoreState::Scheduled(scheduled) = core { + let core_index = CoreIndex(idx as _); + let group_index = group_rotation_info.group_for_core(core_index, n_cores); + if let Some(g) = validator_groups.get(group_index.0 as usize) { + if g.contains(&validator.index()) { + assignment = Some(scheduled.para_id); + break; + } + } + } + } + + let assignment = match assignment { + Some(assignment) => assignment, + None => return Ok(()), + }; + + CandidateSelectionJob::new(assignment, metrics, sender, receiver).run_loop().await }.boxed() } } impl CandidateSelectionJob { pub fn new( + assignment: ParaId, metrics: Metrics, sender: mpsc::Sender, receiver: mpsc::Receiver, @@ -89,6 +157,7 @@ impl CandidateSelectionJob { sender, receiver, metrics, + assignment, seconded_candidate: None, } } @@ -128,6 +197,23 @@ impl CandidateSelectionJob { ) { let _timer = self.metrics.time_handle_collation(); + if self.assignment != para_id { + tracing::info!( + target: LOG_TARGET, + "Collator {:?} sent a collation outside of our assignment {:?}", + collator_id, + para_id, + ); + if let Err(err) = forward_invalidity_note(&collator_id, &mut self.sender).await { + tracing::warn!( + target: LOG_TARGET, + err = ?err, + "failed to forward invalidity note", + ); + } + return; + } + if self.seconded_candidate.is_none() { let (candidate_receipt, pov) = match get_collation( @@ -342,7 +428,7 @@ impl metrics::Metrics for Metrics { } } -delegated_subsystem!(CandidateSelectionJob((), Metrics) <- CandidateSelectionMessage as CandidateSelectionSubsystem); +delegated_subsystem!(CandidateSelectionJob(SyncCryptoStorePtr, Metrics) <- CandidateSelectionMessage as CandidateSelectionSubsystem); #[cfg(test)] mod tests { @@ -365,6 +451,7 @@ mod tests { let (to_job_tx, to_job_rx) = mpsc::channel(0); let (from_job_tx, from_job_rx) = mpsc::channel(0); let mut job = CandidateSelectionJob { + assignment: 123.into(), sender: from_job_tx, receiver: to_job_rx, metrics: Default::default(), diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index e59994cdcc..c9f654ea22 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -367,7 +367,7 @@ where ), candidate_selection: CandidateSelectionSubsystem::new( spawner.clone(), - (), + keystore.clone(), Metrics::register(registry)?, ), candidate_validation: CandidateValidationSubsystem::new( -- GitLab From 5075e5a2351e522aae3d10eca745835d10c9499f Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 1 Dec 2020 14:58:31 -0500 Subject: [PATCH 076/203] guide: Availability Recovery (#2011) * expand description * basics of availability recovery * finish availability recovery * fill out missing text * Update roadmap/implementers-guide/src/node/availability/availability-recovery.md Co-authored-by: Fedor Sakharov * fix signal handling Co-authored-by: Fedor Sakharov --- .../src/node/approval/approval-voting.md | 2 +- .../availability/availability-recovery.md | 149 +++++++++++++++++- .../implementers-guide/src/types/network.md | 13 ++ .../src/types/overseer-protocol.md | 8 +- 4 files changed, 168 insertions(+), 4 deletions(-) diff --git a/roadmap/implementers-guide/src/node/approval/approval-voting.md b/roadmap/implementers-guide/src/node/approval/approval-voting.md index cb722b8aae..d1addd207f 100644 --- a/roadmap/implementers-guide/src/node/approval/approval-voting.md +++ b/roadmap/implementers-guide/src/node/approval/approval-voting.md @@ -267,7 +267,7 @@ enum RequiredTranches { * Return the earlier of our next no-show timeout or the tranche of our assignment, if not yet triggered * Our next no-show timeout is computed by finding the earliest-received assignment within `n_tranches` for which we have not received an approval and adding `to_ticks(session_info.no_show_slots)` to it. -#### `launch_approval(SessionIndex, CandidateDescriptor, ValidatorIndex, block_hash, candidate_index)`: +#### `launch_approval(SessionIndex, CandidateReceipt, ValidatorIndex, block_hash, candidate_index)`: * Extract the public key of the `ValidatorIndex` from the `SessionInfo` for the session. * Issue an `AvailabilityRecoveryMessage::RecoverAvailableData(candidate, session_index, response_sender)` * Load the historical validation code of the parachain by dispatching a `RuntimeApiRequest::HistoricalValidationCode(`descriptor.para_id`, `descriptor.relay_parent`)` against the state of `block_hash`. diff --git a/roadmap/implementers-guide/src/node/availability/availability-recovery.md b/roadmap/implementers-guide/src/node/availability/availability-recovery.md index e4a23e0c00..a05b9e9c17 100644 --- a/roadmap/implementers-guide/src/node/availability/availability-recovery.md +++ b/roadmap/implementers-guide/src/node/availability/availability-recovery.md @@ -4,6 +4,8 @@ This subsystem is the inverse of the [Availability Distribution](availability-distribution.md) subsystem: validators will serve the availability chunks kept in the availability store to nodes who connect to them. And the subsystem will also implement the other side: the logic for nodes to connect to validators, request availability pieces, and reconstruct the `AvailableData`. +This version of the availability recovery subsystem is based off of direct connections to validators. In order to recover any given `AvailableData`, we must recover at least `f + 1` pieces from validators of the session. Thus, we will connect to and query randomly chosen validators until we have received `f + 1` pieces. + ## Protocol `PeerSet`: `Validation` @@ -11,7 +13,7 @@ This subsystem is the inverse of the [Availability Distribution](availability-di Input: - NetworkBridgeUpdateV1(update) -- TODO: input message to request a fetch. +- AvailabilityRecoveryMessage::RecoverAvailableData(candidate, session, response) Output: @@ -20,3 +22,148 @@ Output: - AvailabilityStore::QueryChunk ## Functionality + +We hold a state which tracks the current recovery interactions we have live, as well as which request IDs correspond to which interactions. An interaction is a structure encapsulating all interaction with the network necessary to recover the available data. + +```rust +type ChunkResponse = Result<(PeerId, ErasureChunk), Unavailable>; + +struct AwaitedChunk { + issued_at: Instant, + validator_index: ValidatorIndex, + candidate_hash: CandidateHash, + response: ResponseChannel, +} + +struct State { + /// Each interaction is implemented as its own async task, and these handles are for communicating with them. + interactions: Map, + /// A recent block hash for which state should be available. + live_block_hash: Hash, + discovering_validators: Map>, + live_chunk_requests: Map, + next_request_id: RequestId, + connecting_validators: Stream<(AuthorityDiscoveryId, PeerId)>, + + /// interaction communication. This is cloned and given to interactions that are spun up. + from_interaction_tx: Sender, + /// receiver for messages from interactions. + from_interaction_rx: Receiver, + + // An LRU cache of recently recovered data. + availability_lru: LruCache>, +} + +struct InteractionHandle { + awaiting: Vec>>, +} + +struct Unavailable; +enum FromInteraction { + // An interaction concluded. + Concluded(CandidateHash, Result), + // Make a request of a particular chunk from a particular validator. + MakeRequest( + AuthorityDiscoveryId, + CandidateHash, + ValidatorIndex, + ResponseChannel, + ), + // Report a peer. + ReportPeer( + PeerId, + Rep, + ), +} + +struct Interaction { + to_state: Sender, + validator_authority_keys: Vec, + validators: Vec, + // a random shuffling of the validators which indicates the order in which we connect to the validators and + // request the chunk from them. + shuffling: Vec, + // The number of pieces needed. + threshold: usize, + candidate_hash: Hash, + erasure_root: Hash, + received_chunks: Map, + requesting_chunks: FuturesUnordered>, +} +``` + +### Signal Handling + +On `ActiveLeavesUpdate`, if `activated` is non-empty, set `state.live_block_hash` to the first block in `Activated`. + +Ignore `BlockFinalized` signals. + +On `Conclude`, shut down the subsystem. + +#### `AvailabilityRecoveryMessage::RecoverAvailableData(receipt, session, response)` + +1. Check the `availability_lru` for the candidate and return the data if so. +1. Check if there is already an interaction handle for the request. If so, add the response handle to it. +1. Otherwise, load the session info for the given session under the state of `live_block_hash`, and initiate an interaction with *launch_interaction*. Add an interaction handle to the state and add the response channel to it. +1. If the session info is not available, return `RecoveryError::Unavailable` on the response channel. + +### From-interaction logic + +#### `FromInteraction::Concluded` + +1. Load the entry from the `interactions` map. It should always exist, if not for logic errors. Send the result to each member of `awaiting`. +1. Add the entry to the availability_lru. + +#### `FromInteraction::MakeRequest(discovery_pub, candidate_hash, validator_index, response)` + +1. Add an `AwaitedRequest` to the `discovering_validators` map under `discovery_pub`. +1. Issue a `NetworkBridgeMessage::ConnectToValidators`. +1. Add the stream of connected validator events to `state.connecting_validators`. + +#### `FromInteraction::ReportPeer(peer, rep)` + +1. Issue a `NetworkBridgeMessage::ReportPeer(peer, rep)`. + +### Responding to network events. + +#### On `connecting_validators` event: + +1. If the validator exists under `discovering_validators`, remove the entry. +1. For each `AwaitedChunk` in the entry, issue a `AvailabilityRecoveryV1Message::RequestChunk(next_request_id, candidate_hash, validator_index)` and make an entry in the `live_chunk_requests` map. + +#### On receiving `AvailabilityRecoveryV1::RequestChunk(r_id, candidate_hash, validator_index)` + +1. Issue a `AvailabilityStore::QueryChunk(candidate-hash, validator_index, response)` message. +1. Whatever the result, issue a `AvailabilityRecoveryV1Message::Chunk(r_id, response)` message. + +#### On receiving `AvailabilityRecoveryV1::Chunk(r_id, chunk)` + +1. If there exists an entry under `r_id`, remove it. If there doesn't exist one, report the peer and return. If the peer in the entry doesn't match the sending peer, reinstate the entry, report the peer, and return. +1. Send the chunk response on the `awaited_chunk` for the interaction to handle. + +### Interaction logic + +#### `launch_interaction(session_index, session_info, candidate_receipt, candidate_hash)` + +1. Compute the threshold from the session info. It should be `f + 1`, where `n = 3f + k`, where `k in {1, 2, 3}`, and `n` is the number of validators. +1. Set the various fields of `Interaction` based on the validator lists in `session_info`. Compute a random shuffling of the validator indices. +1. Set the `to_state` sender to be equal to a clone of `state.from_interaction_tx`. +1. Initialize `received_chunks` to an empty set, as well as `requesting_chunks`. + +Launch the interaction as a background task running `interaction_loop(interaction)`. + +#### `interaction_loop(interaction)` + +```rust +// How many parallel requests to have going at once. +const N_PARALLEL: usize = 50; +``` + +Loop: + * Poll for new updates from `requesting_chunks`. Check merkle proofs of any received chunks, and any failures should lead to issuance of a `FromInteraction::ReportPeer` message. + * If `received_chunks` has more than `threshold` entries, attempt to recover the data. If that fails, or a re-encoding of it doesn't match the expected erasure root, break and issue a `FromInteraction::Concluded(RecoveryError::Invalid)`. Otherwise, issue a `FromInteraction::Concluded(Ok(()))`. + * While there are fewer than `N_PARALLEL` entries in `requesting_chunks`, + * Pop the next item from `shuffling`. If it's empty and `requesting_chunks` is empty, break and issue a `FromInteraction::Concluded(RecoveryError::Unavailable)`. + * Initialize `(tx, rx)`. + * Issue a `FromInteraction::MakeRequest(validator, candidate_hash, validator_index, tx)`. + * Add `rx` to `requesting_chunks`. diff --git a/roadmap/implementers-guide/src/types/network.md b/roadmap/implementers-guide/src/types/network.md index 5e78c30f29..79eab39002 100644 --- a/roadmap/implementers-guide/src/types/network.md +++ b/roadmap/implementers-guide/src/types/network.md @@ -46,6 +46,18 @@ enum AvailabilityDistributionV1Message { } ``` +### Availability Recovery V1 + +```rust +enum AvailabilityRecoveryV1Message { + /// Request a chunk for a given candidate hash and validator index. + RequestChunk(RequestId, CandidateHash, ValidatorIndex), + /// Respond with chunk for a given candidate hash and validator index. + /// The response may be `None` if the requestee does not have the chunk. + Chunk(RequestId, Option), +} +``` + ### Bitfield Distribution V1 ```rust @@ -103,6 +115,7 @@ These are the messages for the protocol on the validation peer-set. enum ValidationProtocolV1 { ApprovalDistribution(ApprovalDistributionV1Message), AvailabilityDistribution(AvailabilityDistributionV1Message), + AvailabilityRecovery(AvailabilityRecoveryV1Message), BitfieldDistribution(BitfieldDistributionV1Message), PoVDistribution(PoVDistributionV1Message), StatementDistribution(StatementDistributionV1Message), diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 77a94891f2..6debd20523 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -145,12 +145,16 @@ enum AvailabilityDistributionMessage { Messages received by the availability recovery subsystem. ```rust +enum RecoveryError { + Invalid, + Unavailable, +} enum AvailabilityRecoveryMessage { /// Recover available data from validators on the network. RecoverAvailableData( - CandidateDescriptor, + CandidateReceipt, SessionIndex, - ResponseChannel>, + ResponseChannel>, ), } ``` -- GitLab From 8c1a5a5b3e353154d8efa4daf78a25f199a3c16f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Dec 2020 08:54:36 +0100 Subject: [PATCH 077/203] Bump wasm-bindgen-futures from 0.4.18 to 0.4.19 (#2054) Bumps [wasm-bindgen-futures](https://github.com/rustwasm/wasm-bindgen) from 0.4.18 to 0.4.19. - [Release notes](https://github.com/rustwasm/wasm-bindgen/releases) - [Changelog](https://github.com/rustwasm/wasm-bindgen/blob/master/CHANGELOG.md) - [Commits](https://github.com/rustwasm/wasm-bindgen/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 10 +++++----- cli/Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f732d1e1ff..8dc21bb29f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2434,9 +2434,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.45" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca059e81d9486668f12d455a4ea6daa600bd408134cd17e3d3fb5a32d1f016f8" +checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175" dependencies = [ "wasm-bindgen", ] @@ -9692,11 +9692,11 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7866cab0aa01de1edf8b5d7936938a7e397ee50ce24119aef3e1eaa3b6171da" +checksum = "1fe9756085a84584ee9457a002b7cdfe0bfff169f45d2591d8be1345a6780e35" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "js-sys", "wasm-bindgen", "web-sys", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index cde1b8cd50..7b93f13bf0 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -18,7 +18,7 @@ log = "0.4.11" thiserror = "1.0.22" structopt = { version = "0.3.21", optional = true } wasm-bindgen = { version = "0.2.69", optional = true } -wasm-bindgen-futures = { version = "0.4.18", optional = true } +wasm-bindgen-futures = { version = "0.4.19", optional = true } service = { package = "polkadot-service", path = "../node/service", default-features = false, optional = true } polkadot-parachain = { path = "../parachain", optional = true } -- GitLab From 839dba9a193f04e78bd9d9c6e04db5c133e3f99c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 2 Dec 2020 14:00:23 +0100 Subject: [PATCH 078/203] Use correct logging target for network bridge (#2057) --- node/network/bridge/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 0253d3c137..38cbe369ba 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -155,7 +155,7 @@ impl Network for Arc> { fn start_send(self: Pin<&mut Self>, action: NetworkAction) -> SubsystemResult<()> { match action { NetworkAction::ReputationChange(peer, cost_benefit) => { - tracing::debug!("reputation: {:?} for {}", cost_benefit, peer); + tracing::debug!(target: LOG_TARGET, "Changing reputation: {:?} for {}", cost_benefit, peer); self.0.report_peer( peer, cost_benefit, -- GitLab From f8b783d93826ff7aaf0d3163e3019d6725fa073f Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 2 Dec 2020 08:52:51 -0500 Subject: [PATCH 079/203] be more careful about fusing in `select!` (#2052) --- node/collation-generation/src/lib.rs | 5 +++-- node/core/backing/src/lib.rs | 12 ++++++------ node/network/collator-protocol/src/collator_side.rs | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index 2c430c17ef..b3e62cdf1c 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -84,8 +84,9 @@ impl CollationGenerationSubsystem { // at any point waiting for them all, so instead, we create a channel on which they can // send those messages. We can then just monitor the channel and forward messages on it // to the overseer here, via the context. - let (sender, mut receiver) = mpsc::channel(0); + let (sender, receiver) = mpsc::channel(0); + let mut receiver = receiver.fuse(); loop { select! { incoming = ctx.recv().fuse() => { @@ -93,7 +94,7 @@ impl CollationGenerationSubsystem { break; } }, - msg = receiver.next().fuse() => { + msg = receiver.next() => { if let Some(msg) = msg { ctx.send_message(msg).await; } diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index aff2944e45..44ec79e1d7 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -121,8 +121,6 @@ impl ValidatedCandidateCommand { struct CandidateBackingJob { /// The hash of the relay parent on top of which this job is doing it's work. parent: Hash, - /// Inbound message channel receiving part. - rx_to: mpsc::Receiver, /// Outbound message channel sending part. tx_from: mpsc::Sender, /// The `ParaId` assigned to this validator @@ -426,7 +424,10 @@ async fn validate_and_make_available( impl CandidateBackingJob { /// Run asynchronously. - async fn run_loop(mut self) -> Result<(), Error> { + async fn run_loop( + mut self, + mut rx_to: mpsc::Receiver, + ) -> Result<(), Error> { loop { futures::select! { validated_command = self.background_validation.next() => { @@ -436,7 +437,7 @@ impl CandidateBackingJob { panic!("`self` hasn't dropped and `self` holds a reference to this sender; qed"); } } - to_job = self.rx_to.next() => match to_job { + to_job = rx_to.next() => match to_job { None => break, Some(msg) => { self.process_msg(msg).await?; @@ -917,7 +918,6 @@ impl util::JobTrait for CandidateBackingJob { let (background_tx, background_rx) = mpsc::channel(16); let job = CandidateBackingJob { parent, - rx_to, tx_from, assignment, required_collator, @@ -934,7 +934,7 @@ impl util::JobTrait for CandidateBackingJob { metrics, }; - job.run_loop().await + job.run_loop(rx_to).await } .boxed() } diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 1017b55c28..f56f74113b 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -695,7 +695,7 @@ pub(crate) async fn run( let (relay_parent, validator_id, peer_id) = match res { Some(res) => res, // Will never happen, but better to be safe. - None => continue, + None => return Ok(()), }; let _timer = state.metrics.time_handle_connection_request(); -- GitLab From cab6c7b7a486408a9cd95c19d7c7d1f51c417258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 2 Dec 2020 15:15:30 +0100 Subject: [PATCH 080/203] Make it possible for the adder collator to calculate any state (#2056) * Make it possible for the adder collator to calculate any state This is very useful for when wanting to have multiple running or when wanting to restart the collator. * Update parachain/test-parachains/adder/collator/src/lib.rs Co-authored-by: Sergei Shulepov --- .../test-parachains/adder/collator/src/lib.rs | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index b31f15e303..ac50a4f693 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -33,6 +33,25 @@ use test_parachain_adder::{execute, hash_state, BlockData, HeadData}; /// This is a constant to make tests easily reproducible. const ADD: u64 = 2; +/// Calculates the head and state for the block with the given `number`. +fn calculate_head_and_state_for_number(number: u64) -> (HeadData, u64) { + let mut head = HeadData { + number: 0, + parent_hash: Default::default(), + post_state: hash_state(0), + }; + + let mut state = 0u64; + + while head.number < number { + let block = BlockData { state, add: ADD }; + head = execute(head.hash(), head.clone(), &block).expect("Produces valid block"); + state = state.wrapping_add(ADD); + } + + (head, state) +} + /// The state of the adder parachain. struct State { head_to_state: HashMap, u64>, @@ -44,11 +63,7 @@ struct State { impl State { /// Init the genesis state. fn genesis() -> Self { - let genesis_state = Arc::new(HeadData { - number: 0, - parent_hash: Default::default(), - post_state: hash_state(0), - }); + let genesis_state = Arc::new(calculate_head_and_state_for_number(0).0); Self { head_to_state: vec![(genesis_state.clone(), 0)].into_iter().collect(), @@ -64,15 +79,15 @@ impl State { self.best_block = parent_head.number; let block = BlockData { - state: *self + state: self .head_to_state .get(&parent_head) - .expect("Getting state using parent head"), + .copied() + .unwrap_or_else(|| calculate_head_and_state_for_number(parent_head.number).1), add: ADD, }; - let new_head = - execute(parent_head.hash(), parent_head, &block).expect("Produces valid block"); + let new_head = execute(parent_head.hash(), parent_head, &block).expect("Produces valid block"); let new_head_arc = Arc::new(new_head.clone()); self.head_to_state @@ -239,4 +254,25 @@ mod tests { new_head ); } + + #[test] + fn advance_to_state_when_parent_head_is_missing() { + let collator = Collator::new(); + + let mut head = calculate_head_and_state_for_number(10).0; + + for i in 1..10 { + head = collator.state.lock().unwrap().advance(head).1; + assert_eq!(10 + i, head.number); + } + + let collator = Collator::new(); + let mut second_head = collator.state.lock().unwrap().number_to_head.get(&0).cloned().unwrap().as_ref().clone(); + + for _ in 1..20 { + second_head = collator.state.lock().unwrap().advance(second_head.clone()).1; + } + + assert_eq!(second_head, head); + } } -- GitLab From 550d84a8fccb491130160bd16a6b6a4657b7090a Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 2 Dec 2020 15:18:18 +0100 Subject: [PATCH 081/203] remove unused code (#2058) --- node/network/collator-protocol/src/collator_side.rs | 2 +- node/subsystem-util/src/validator_discovery.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index f56f74113b..01ec85fca7 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -691,7 +691,7 @@ pub(crate) async fn run( loop { select! { - res = state.connection_requests.next().fuse() => { + res = state.connection_requests.next() => { let (relay_parent, validator_id, peer_id) = match res { Some(res) => res, // Will never happen, but better to be safe. diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index 762b800253..3a381f7a6f 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -87,7 +87,7 @@ pub async fn connect_to_past_session_validators( .filter_map(|(k, v)| v.map(|v| (v, k))) .collect::>(); - let connections = connect_to_authorities(ctx, authorities).await?; + let connections = connect_to_authorities(ctx, authorities).await; Ok(ConnectionRequest { validator_map, @@ -98,7 +98,7 @@ pub async fn connect_to_past_session_validators( async fn connect_to_authorities( ctx: &mut Context, validator_ids: Vec, -) -> Result, Error> { +) -> mpsc::Receiver<(AuthorityDiscoveryId, PeerId)> { const PEERS_CAPACITY: usize = 8; let (connected, connected_rx) = mpsc::channel(PEERS_CAPACITY); @@ -110,7 +110,7 @@ async fn connect_to_authorities( } )).await; - Ok(connected_rx) + connected_rx } /// A struct that assists performing multiple concurrent connection requests. -- GitLab From ba6a7c5179c69c50201c017921365e7c48cf7dd1 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 2 Dec 2020 18:00:26 +0100 Subject: [PATCH 082/203] Companion PR for removing register notif protocol (#2048) * Companion PR for removing register notif protocol * Missing .into() * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 272 ++++++++++++++++++++-------------------- node/service/src/lib.rs | 3 +- 2 files changed, 137 insertions(+), 138 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8dc21bb29f..e7b8b98e82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1461,7 +1461,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", ] @@ -1469,7 +1469,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -1487,7 +1487,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "chrono", "frame-benchmarking", @@ -1509,7 +1509,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "serde", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "bitflags", "frame-metadata", @@ -1561,7 +1561,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1572,7 +1572,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1584,7 +1584,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1594,7 +1594,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1610,7 +1610,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -1624,7 +1624,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-api", @@ -3771,7 +3771,7 @@ checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -3787,7 +3787,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -3802,7 +3802,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3827,7 +3827,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3841,7 +3841,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3857,7 +3857,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3872,7 +3872,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3887,7 +3887,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3908,7 +3908,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3924,7 +3924,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3944,7 +3944,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3961,7 +3961,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -3975,7 +3975,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -3991,7 +3991,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4005,7 +4005,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4020,7 +4020,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4041,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4057,7 +4057,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4070,7 +4070,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "enumflags2", "frame-support", @@ -4085,7 +4085,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4120,7 +4120,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4136,7 +4136,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4150,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4172,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4183,7 +4183,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4197,7 +4197,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4215,7 +4215,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "frame-system", @@ -4232,7 +4232,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4250,7 +4250,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-support", "parity-scale-codec", @@ -4263,7 +4263,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4278,7 +4278,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-benchmarking", "frame-support", @@ -4294,7 +4294,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6544,7 +6544,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "async-trait", "derive_more", @@ -6572,7 +6572,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6595,7 +6595,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6612,7 +6612,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6633,7 +6633,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6644,7 +6644,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6689,7 +6689,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6700,7 +6700,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "fnv", @@ -6734,7 +6734,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "blake2-rfc", "hash-db", @@ -6764,7 +6764,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6775,7 +6775,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "fork-tree", @@ -6820,7 +6820,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "futures 0.3.8", @@ -6844,7 +6844,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6857,7 +6857,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6883,7 +6883,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "sc-client-api", @@ -6897,7 +6897,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "lazy_static", @@ -6926,7 +6926,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "parity-scale-codec", @@ -6942,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "parity-scale-codec", @@ -6957,7 +6957,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "parity-scale-codec", @@ -6975,7 +6975,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "finality-grandpa", @@ -7012,7 +7012,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "finality-grandpa", @@ -7036,7 +7036,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7054,7 +7054,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "async-trait", "derive_more", @@ -7074,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "hash-db", "lazy_static", @@ -7093,7 +7093,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "async-std", "async-trait", @@ -7147,7 +7147,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7162,7 +7162,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "bytes 0.5.6", "fnv", @@ -7189,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "libp2p", @@ -7202,7 +7202,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7211,7 +7211,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "hash-db", @@ -7244,7 +7244,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "futures 0.3.8", @@ -7268,7 +7268,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7286,7 +7286,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "directories 3.0.1", "exit-future", @@ -7350,7 +7350,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "parity-scale-codec", @@ -7365,7 +7365,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7385,7 +7385,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7406,7 +7406,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "erased-serde", "log", @@ -7425,7 +7425,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "futures 0.3.8", @@ -7447,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7901,7 +7901,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "sp-core", @@ -7913,7 +7913,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "hash-db", "parity-scale-codec", @@ -7929,7 +7929,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7941,7 +7941,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "serde", @@ -7953,7 +7953,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7966,7 +7966,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-api", @@ -7978,7 +7978,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-api", @@ -8001,7 +8001,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "log", @@ -8019,7 +8019,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "serde", "serde_json", @@ -8028,7 +8028,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8054,7 +8054,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "merlin", "parity-scale-codec", @@ -8074,7 +8074,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8083,7 +8083,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8095,7 +8095,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "base58", "blake2-rfc", @@ -8139,7 +8139,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8148,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8158,7 +8158,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "environmental", "parity-scale-codec", @@ -8169,7 +8169,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "finality-grandpa", "log", @@ -8186,7 +8186,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8198,7 +8198,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "hash-db", @@ -8222,7 +8222,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "lazy_static", "sp-core", @@ -8233,7 +8233,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "async-trait", "derive_more", @@ -8249,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "serde", @@ -8261,7 +8261,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8272,7 +8272,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "sp-api", "sp-core", @@ -8282,7 +8282,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "backtrace", ] @@ -8290,7 +8290,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "serde", "sp-core", @@ -8299,7 +8299,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "either", "hash256-std-hasher", @@ -8320,7 +8320,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8336,7 +8336,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "Inflector", "proc-macro-crate", @@ -8348,7 +8348,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "serde", "serde_json", @@ -8357,7 +8357,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-api", @@ -8370,7 +8370,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8380,7 +8380,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "hash-db", "log", @@ -8402,12 +8402,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8420,7 +8420,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "sp-core", @@ -8433,7 +8433,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8447,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "log", "parity-scale-codec", @@ -8460,7 +8460,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "derive_more", "futures 0.3.8", @@ -8476,7 +8476,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "hash-db", "memory-db", @@ -8490,7 +8490,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "futures-core", @@ -8502,7 +8502,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8514,7 +8514,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8656,7 +8656,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "chrono", "console_error_panic_hook", @@ -8682,7 +8682,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "platforms", ] @@ -8690,7 +8690,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8713,7 +8713,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "async-std", "derive_more", @@ -8727,7 +8727,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8754,7 +8754,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8764,7 +8764,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f5088c50a8361f9efc71a75754b0776b6e24ab8a" +source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index c9f654ea22..43f43657b8 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -508,6 +508,7 @@ pub fn new_full( #[cfg(feature = "real-overseer")] config.network.notifications_protocols.extend(polkadot_network_bridge::notifications_protocol_info()); + config.network.notifications_protocols.push(grandpa::GRANDPA_PROTOCOL_NAME.into()); let (network, network_status_sinks, system_rpc_tx, network_starter) = service::build_network(service::BuildNetworkParams { @@ -726,8 +727,6 @@ pub fn new_full( "grandpa-voter", grandpa::run_grandpa_voter(grandpa_config)? ); - } else { - grandpa::setup_disabled_grandpa(network.clone())?; } network_starter.start_network(); -- GitLab From f70e52c056688bc3f1480701cf2a1f5827c0e6a0 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Wed, 2 Dec 2020 19:48:30 +0100 Subject: [PATCH 083/203] Fix locked ksm in council votes. (#1832) * Fix locked ksm in council votes. * Fix accuracy. * use exact values. * Fix build --- runtime/kusama/src/lib.rs | 224 +++++++++++++++++++++++++++++++++++++- 1 file changed, 223 insertions(+), 1 deletion(-) diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 2cc1af280d..7ac0ea52fd 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -889,6 +889,228 @@ impl pallet_proxy::Config for Runtime { type AnnouncementDepositFactor = AnnouncementDepositFactor; } +pub struct FixCouncilHistoricalVotes; +impl frame_support::traits::OnRuntimeUpgrade for FixCouncilHistoricalVotes { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + use frame_support::traits::ReservableCurrency; + use sp_runtime::traits::Zero; + let mut failure: Balance = 0; + // https://github.com/paritytech/polkadot/pull/1252/files#diff-cba4e599a9fdd88fe8d33b5ed913958d63f844186b53c5cbe9bc73a2e2944857R22 + + // https://polkascan.io/kusama/runtime-module/2007-electionsphragmen + let old_bond = 50_000_000_000; + // https://polkascan.io/kusama/runtime-module/2008-electionsphragmen + let current_bond = 8_333_333_330; + let to_unreserve = old_bond - current_bond; // 41666666670 + + // source of accounts: https://github.com/paritytech/substrate/issues/7223 + vec![ + [52u8, 227, 117, 17, 229, 245, 8, 66, 43, 10, 142, 216, 196, 102, 119, 154, 34, 41, 53, 183, 37, 186, 250, 70, 247, 129, 207, 56, 2, 96, 181, 69], + [87, 71, 87, 4, 112, 230, 183, 229, 153, 158, 195, 253, 122, 165, 32, 37, 212, 105, 167, 124, 20, 165, 83, 106, 177, 214, 223, 18, 146, 184, 186, 42], + [74, 223, 81, 164, 123, 114, 121, 83, 102, 213, 34, 133, 227, 41, 34, 156, 131, 110, 167, 187, 254, 19, 157, 190, 143, 160, 112, 12, 79, 134, 252, 86], + [98, 135, 195, 120, 192, 49, 156, 220, 141, 79, 176, 216, 27, 229, 80, 37, 72, 104, 114, 242, 254, 188, 218, 156, 66, 143, 164, 131, 182, 181, 43, 27], + [22, 106, 142, 133, 251, 42, 232, 228, 187, 104, 21, 64, 122, 178, 225, 117, 115, 5, 10, 8, 14, 27, 171, 197, 2, 34, 100, 254, 249, 233, 111, 94], + [230, 17, 194, 236, 237, 27, 86, 17, 131, 248, 143, 174, 208, 221, 125, 136, 213, 250, 253, 241, 111, 88, 64, 198, 62, 195, 109, 140, 49, 19, 111, 97], + [45, 100, 142, 202, 87, 103, 177, 184, 106, 165, 70, 32, 79, 239, 241, 127, 98, 45, 74, 19, 53, 72, 54, 34, 95, 212, 237, 10, 49, 18, 118, 11], + [78, 212, 66, 185, 0, 51, 101, 94, 134, 29, 31, 236, 213, 26, 156, 115, 199, 195, 117, 27, 34, 125, 115, 175, 37, 139, 73, 23, 110, 16, 121, 19], + [198, 17, 209, 81, 89, 27, 253, 242, 89, 118, 43, 153, 183, 128, 97, 97, 123, 89, 210, 171, 23, 66, 63, 32, 239, 233, 142, 222, 32, 184, 217, 120], + [48, 89, 157, 186, 80, 181, 243, 186, 11, 54, 248, 86, 167, 97, 235, 60, 10, 238, 97, 232, 48, 212, 190, 180, 72, 239, 148, 182, 173, 146, 190, 57], + [178, 75, 65, 145, 80, 177, 162, 44, 37, 159, 216, 50, 26, 48, 88, 234, 131, 168, 17, 141, 41, 235, 11, 196, 110, 0, 86, 230, 249, 136, 148, 39], + [0, 90, 67, 60, 142, 21, 28, 129, 174, 148, 133, 68, 244, 203, 7, 98, 43, 24, 168, 67, 4, 128, 222, 111, 198, 225, 163, 139, 196, 111, 156, 39], + [80, 10, 128, 247, 239, 148, 61, 30, 111, 173, 141, 133, 33, 169, 238, 221, 44, 22, 26, 149, 224, 64, 133, 242, 123, 198, 162, 35, 123, 47, 17, 57], + [228, 248, 227, 202, 10, 103, 4, 160, 7, 148, 69, 176, 153, 221, 192, 80, 193, 253, 39, 48, 70, 249, 58, 115, 4, 15, 66, 115, 105, 58, 184, 61], + [146, 142, 243, 123, 168, 13, 37, 253, 223, 148, 61, 229, 35, 244, 110, 88, 140, 135, 188, 134, 227, 131, 24, 149, 242, 125, 169, 157, 38, 154, 160, 18], + [12, 55, 156, 202, 114, 167, 250, 113, 52, 125, 148, 219, 103, 69, 77, 226, 216, 92, 20, 234, 202, 146, 140, 75, 76, 99, 153, 156, 27, 168, 164, 48], + [94, 105, 67, 219, 185, 200, 207, 213, 51, 119, 166, 115, 7, 41, 14, 250, 193, 175, 244, 170, 35, 242, 134, 43, 216, 100, 10, 243, 117, 111, 121, 44], + [176, 235, 16, 242, 219, 110, 35, 128, 177, 12, 46, 128, 32, 93, 131, 158, 3, 181, 150, 226, 40, 253, 141, 242, 188, 117, 191, 197, 150, 174, 171, 36], + [188, 94, 5, 123, 119, 210, 246, 167, 145, 84, 105, 228, 217, 124, 68, 191, 165, 211, 135, 133, 201, 241, 211, 8, 146, 250, 25, 231, 234, 206, 57, 57], + [190, 109, 228, 0, 24, 21, 61, 124, 206, 0, 67, 246, 131, 206, 237, 153, 207, 59, 48, 135, 152, 89, 96, 151, 169, 64, 107, 186, 201, 145, 144, 21], + [168, 176, 158, 34, 73, 77, 195, 235, 190, 198, 231, 174, 81, 174, 202, 99, 219, 183, 220, 4, 216, 95, 64, 254, 135, 161, 130, 228, 157, 18, 205, 122], + [58, 175, 247, 7, 11, 38, 34, 147, 124, 193, 15, 99, 218, 12, 92, 232, 75, 72, 123, 210, 200, 62, 174, 59, 183, 5, 78, 112, 137, 169, 221, 5], + [38, 132, 41, 39, 201, 138, 80, 171, 29, 67, 154, 180, 95, 33, 197, 190, 182, 151, 5, 86, 225, 253, 123, 82, 223, 68, 151, 126, 67, 68, 177, 72], + [160, 50, 214, 174, 242, 243, 162, 74, 49, 196, 28, 253, 251, 33, 243, 155, 163, 253, 207, 201, 237, 31, 56, 185, 22, 125, 172, 178, 228, 61, 116, 124], + [94, 237, 179, 116, 143, 73, 1, 160, 48, 111, 172, 136, 170, 109, 127, 28, 131, 61, 146, 143, 219, 236, 250, 236, 67, 247, 90, 172, 31, 95, 125, 122], + [136, 143, 102, 104, 40, 232, 50, 138, 51, 100, 122, 71, 188, 151, 87, 74, 106, 86, 113, 129, 146, 112, 204, 1, 230, 108, 113, 57, 161, 166, 145, 26], + [41, 76, 90, 193, 202, 37, 94, 199, 50, 139, 43, 253, 174, 91, 152, 164, 163, 181, 13, 201, 149, 100, 7, 183, 161, 145, 13, 143, 215, 229, 129, 232], + [16, 252, 67, 246, 61, 252, 235, 195, 3, 194, 11, 182, 243, 47, 162, 8, 197, 85, 240, 183, 52, 85, 172, 246, 161, 197, 65, 200, 79, 219, 177, 104], + [160, 87, 16, 231, 9, 55, 108, 216, 216, 28, 145, 235, 37, 92, 96, 16, 52, 194, 45, 134, 150, 78, 181, 46, 183, 229, 201, 35, 45, 19, 176, 94], + [134, 135, 73, 95, 235, 234, 33, 222, 68, 159, 242, 115, 129, 249, 48, 141, 166, 241, 92, 229, 217, 211, 20, 98, 97, 39, 93, 236, 24, 205, 86, 111], + [251, 174, 188, 92, 115, 39, 20, 75, 229, 29, 243, 91, 181, 15, 248, 97, 44, 140, 154, 215, 63, 199, 182, 11, 67, 130, 185, 121, 86, 61, 226, 15], + [190, 224, 239, 104, 232, 185, 30, 26, 131, 177, 69, 35, 42, 159, 216, 68, 170, 200, 161, 101, 95, 61, 114, 21, 61, 99, 221, 132, 47, 71, 6, 100], + [132, 237, 28, 134, 11, 165, 89, 21, 143, 203, 78, 152, 122, 33, 213, 210, 155, 117, 79, 248, 141, 180, 215, 75, 125, 214, 64, 79, 188, 233, 114, 22], + [203, 124, 199, 178, 246, 36, 201, 44, 111, 173, 142, 231, 116, 88, 163, 92, 122, 202, 173, 226, 176, 62, 95, 6, 52, 80, 156, 239, 29, 183, 206, 9], + [178, 38, 5, 179, 106, 208, 161, 253, 17, 62, 16, 224, 250, 91, 72, 135, 21, 160, 113, 252, 152, 33, 173, 20, 68, 167, 33, 102, 67, 28, 30, 21], + [0, 85, 93, 35, 172, 249, 206, 242, 240, 251, 36, 168, 255, 45, 70, 79, 228, 161, 147, 137, 98, 46, 36, 1, 38, 15, 73, 36, 114, 171, 123, 70], + [198, 88, 98, 42, 56, 161, 58, 36, 180, 89, 254, 109, 16, 255, 214, 120, 192, 204, 248, 245, 145, 124, 72, 217, 139, 9, 182, 116, 98, 86, 9, 26], + [178, 219, 195, 92, 207, 8, 98, 148, 160, 210, 78, 16, 145, 208, 140, 163, 181, 194, 164, 135, 7, 28, 79, 181, 64, 112, 230, 102, 204, 153, 224, 45], + [118, 253, 161, 198, 240, 206, 6, 239, 41, 107, 105, 123, 178, 23, 249, 142, 69, 146, 242, 95, 20, 113, 228, 97, 146, 148, 115, 55, 146, 48, 147, 173], + [171, 42, 226, 38, 198, 62, 131, 93, 136, 64, 239, 182, 111, 170, 191, 132, 59, 203, 110, 239, 70, 42, 12, 117, 248, 87, 48, 58, 24, 193, 214, 207], + [226, 156, 174, 201, 243, 176, 175, 214, 64, 12, 186, 43, 40, 42, 230, 20, 41, 71, 218, 167, 131, 80, 249, 155, 42, 116, 123, 52, 44, 42, 25, 64], + [38, 233, 51, 113, 227, 226, 183, 195, 139, 229, 42, 201, 30, 142, 166, 33, 165, 173, 117, 24, 213, 88, 15, 167, 179, 109, 37, 11, 158, 211, 87, 26], + [28, 82, 239, 62, 195, 223, 46, 66, 201, 184, 90, 253, 224, 20, 86, 231, 70, 19, 20, 166, 143, 22, 94, 166, 11, 34, 2, 175, 87, 13, 17, 20], + [6, 121, 215, 46, 243, 76, 78, 115, 130, 220, 90, 195, 3, 135, 100, 66, 46, 201, 243, 74, 103, 244, 214, 70, 253, 30, 228, 245, 93, 182, 92, 27], + [56, 242, 67, 184, 105, 96, 247, 25, 150, 176, 97, 251, 46, 223, 29, 42, 114, 79, 82, 223, 42, 165, 104, 95, 225, 132, 222, 222, 236, 237, 180, 70], + [206, 163, 218, 190, 82, 178, 166, 101, 177, 225, 155, 248, 198, 145, 58, 93, 84, 224, 109, 100, 19, 202, 61, 219, 236, 143, 154, 34, 65, 94, 196, 119], + [32, 51, 169, 66, 133, 238, 5, 16, 36, 249, 231, 26, 132, 203, 51, 48, 85, 127, 124, 4, 154, 5, 45, 96, 136, 44, 186, 14, 212, 82, 209, 45], + [136, 87, 179, 203, 183, 159, 117, 238, 119, 98, 216, 164, 49, 132, 57, 146, 127, 210, 181, 22, 67, 156, 89, 113, 52, 195, 208, 159, 224, 227, 241, 3], + [58, 69, 248, 95, 254, 189, 177, 143, 25, 199, 92, 139, 237, 97, 234, 17, 219, 250, 40, 132, 41, 202, 235, 238, 203, 35, 33, 26, 73, 237, 165, 32], + [146, 24, 163, 171, 202, 106, 170, 124, 218, 48, 242, 73, 62, 87, 229, 38, 27, 6, 15, 95, 57, 47, 45, 76, 221, 154, 171, 55, 19, 227, 61, 60], + [60, 58, 195, 101, 58, 75, 249, 167, 40, 117, 131, 147, 187, 201, 189, 197, 202, 49, 226, 154, 237, 70, 161, 88, 95, 211, 212, 145, 2, 87, 200, 33], + [230, 153, 129, 0, 226, 30, 98, 227, 216, 119, 32, 200, 72, 8, 114, 41, 148, 250, 98, 95, 100, 23, 108, 158, 149, 236, 85, 106, 118, 13, 64, 78], + [208, 159, 158, 0, 216, 253, 73, 87, 0, 248, 236, 76, 249, 90, 162, 232, 39, 227, 251, 183, 239, 0, 130, 254, 46, 202, 75, 146, 104, 48, 250, 29], + [206, 65, 0, 132, 231, 167, 48, 145, 37, 141, 211, 98, 59, 98, 217, 50, 157, 101, 135, 114, 63, 194, 96, 210, 142, 85, 21, 144, 133, 63, 93, 88], + [58, 34, 87, 220, 204, 157, 71, 5, 126, 215, 168, 184, 84, 75, 160, 45, 84, 172, 6, 243, 13, 119, 230, 88, 140, 30, 21, 137, 150, 229, 20, 38], + [202, 91, 193, 145, 93, 167, 74, 186, 58, 173, 215, 206, 123, 128, 144, 69, 213, 235, 91, 115, 85, 146, 89, 117, 95, 220, 216, 90, 64, 165, 220, 110], + [10, 58, 158, 3, 226, 253, 136, 14, 137, 63, 60, 210, 253, 3, 181, 124, 125, 40, 29, 43, 70, 105, 185, 59, 16, 42, 148, 5, 43, 227, 101, 98], + [172, 150, 113, 140, 115, 71, 210, 56, 57, 84, 225, 178, 82, 233, 29, 155, 84, 156, 238, 44, 60, 146, 176, 166, 170, 54, 96, 170, 124, 201, 81, 56], + [158, 190, 208, 112, 142, 212, 167, 220, 247, 24, 86, 187, 83, 134, 53, 201, 255, 190, 70, 99, 40, 99, 7, 223, 197, 166, 14, 154, 188, 223, 70, 30], + [60, 67, 92, 98, 149, 98, 142, 28, 126, 136, 184, 249, 235, 75, 188, 61, 96, 166, 59, 25, 140, 13, 201, 175, 192, 130, 4, 170, 74, 190, 195, 113], + [78, 203, 3, 76, 75, 78, 165, 166, 103, 0, 12, 191, 228, 137, 234, 15, 122, 162, 12, 197, 222, 180, 111, 152, 25, 187, 100, 17, 157, 252, 83, 39], + [146, 250, 178, 111, 64, 184, 149, 164, 242, 68, 16, 85, 67, 135, 47, 22, 85, 142, 224, 194, 245, 114, 165, 219, 48, 131, 56, 230, 241, 205, 118, 35], + [111, 136, 30, 180, 158, 175, 45, 159, 88, 34, 172, 160, 141, 149, 18, 237, 72, 43, 243, 95, 36, 70, 169, 253, 20, 102, 134, 46, 122, 117, 94, 40], + [230, 224, 55, 10, 146, 36, 6, 46, 185, 8, 5, 58, 133, 127, 124, 142, 115, 39, 215, 94, 175, 55, 41, 148, 133, 70, 80, 119, 188, 168, 103, 26], + [88, 134, 227, 88, 24, 157, 191, 87, 39, 23, 227, 3, 155, 129, 197, 229, 132, 243, 115, 46, 114, 152, 182, 251, 24, 162, 203, 14, 223, 70, 110, 18], + [78, 192, 56, 30, 68, 39, 237, 101, 103, 247, 165, 195, 40, 40, 140, 237, 54, 195, 59, 236, 234, 110, 206, 205, 129, 69, 0, 31, 66, 48, 172, 27], + [188, 110, 18, 215, 171, 112, 171, 234, 76, 8, 219, 112, 85, 232, 79, 22, 186, 184, 23, 181, 251, 53, 144, 136, 173, 81, 144, 66, 45, 249, 221, 29], + [184, 134, 3, 172, 197, 123, 71, 84, 219, 125, 44, 26, 224, 165, 217, 103, 32, 108, 191, 22, 216, 108, 41, 133, 56, 89, 83, 174, 178, 5, 143, 5], + [10, 216, 180, 249, 77, 200, 230, 34, 158, 44, 68, 141, 153, 80, 148, 205, 193, 189, 53, 109, 193, 76, 97, 85, 70, 122, 192, 126, 222, 24, 184, 114], + [26, 170, 217, 19, 57, 86, 181, 16, 1, 80, 222, 130, 169, 29, 138, 87, 109, 207, 182, 63, 199, 221, 13, 83, 54, 8, 57, 131, 149, 198, 208, 83], + [96, 138, 24, 198, 63, 184, 175, 138, 213, 226, 226, 154, 248, 15, 23, 237, 238, 81, 195, 43, 137, 19, 196, 103, 238, 168, 38, 237, 103, 102, 37, 40], + [52, 128, 169, 39, 185, 38, 19, 53, 116, 172, 54, 108, 87, 60, 188, 116, 37, 164, 126, 195, 94, 206, 39, 89, 153, 179, 209, 240, 131, 82, 156, 46], + [246, 4, 145, 84, 210, 56, 187, 133, 217, 118, 194, 157, 220, 55, 43, 88, 228, 254, 223, 5, 126, 65, 104, 125, 12, 250, 57, 241, 71, 113, 171, 83], + [86, 173, 152, 172, 190, 131, 221, 21, 171, 209, 16, 17, 30, 220, 112, 220, 192, 162, 19, 36, 91, 45, 44, 192, 169, 65, 10, 9, 51, 57, 255, 70], + [64, 123, 211, 149, 104, 201, 8, 6, 47, 202, 49, 232, 8, 152, 189, 202, 190, 237, 160, 117, 1, 51, 131, 240, 249, 166, 158, 208, 126, 177, 38, 38], + [2, 57, 183, 234, 172, 195, 234, 64, 151, 134, 240, 51, 106, 137, 118, 7, 86, 35, 172, 239, 49, 159, 197, 119, 124, 118, 3, 61, 213, 133, 184, 64], + [96, 254, 164, 33, 61, 85, 200, 104, 191, 200, 140, 122, 127, 80, 64, 175, 89, 63, 213, 255, 88, 154, 127, 26, 93, 114, 70, 81, 223, 37, 5, 95], + [72, 35, 54, 126, 94, 99, 159, 33, 213, 118, 137, 168, 157, 235, 63, 72, 148, 114, 187, 16, 4, 122, 103, 117, 103, 88, 162, 148, 218, 167, 159, 21], + [232, 206, 1, 108, 146, 138, 182, 169, 95, 61, 218, 93, 127, 149, 24, 50, 55, 80, 176, 2, 18, 205, 131, 111, 249, 163, 241, 242, 126, 178, 193, 33], + [248, 254, 82, 84, 191, 224, 104, 1, 129, 7, 9, 121, 239, 231, 44, 94, 176, 153, 4, 59, 48, 7, 79, 48, 221, 12, 21, 168, 74, 188, 68, 92], + [2, 156, 106, 91, 42, 221, 67, 178, 36, 110, 31, 47, 8, 233, 169, 131, 255, 102, 80, 228, 186, 141, 9, 32, 35, 145, 198, 162, 141, 60, 223, 54], + [0, 95, 174, 86, 79, 8, 222, 91, 181, 144, 141, 255, 246, 191, 240, 249, 80, 123, 116, 75, 33, 215, 1, 125, 71, 138, 167, 239, 92, 135, 249, 124], + [4, 198, 135, 31, 33, 23, 62, 34, 187, 204, 153, 2, 161, 186, 65, 165, 19, 204, 95, 255, 121, 124, 148, 138, 54, 146, 124, 239, 112, 20, 140, 48], + [146, 46, 66, 112, 210, 142, 32, 160, 129, 86, 195, 218, 234, 150, 130, 77, 79, 69, 30, 232, 224, 12, 77, 254, 7, 81, 203, 63, 65, 228, 187, 74], + [52, 234, 22, 159, 11, 191, 106, 184, 97, 55, 123, 62, 156, 195, 78, 82, 255, 163, 241, 103, 79, 136, 123, 113, 177, 75, 50, 64, 66, 33, 177, 53], + [10, 122, 197, 190, 105, 168, 36, 63, 136, 128, 213, 253, 1, 91, 46, 143, 143, 48, 206, 108, 113, 98, 248, 188, 181, 173, 26, 31, 164, 36, 109, 50], + [10, 91, 84, 200, 115, 95, 146, 200, 152, 137, 149, 161, 91, 207, 61, 17, 192, 46, 232, 218, 103, 99, 52, 168, 162, 144, 252, 116, 63, 99, 73, 40], + [36, 123, 240, 229, 60, 125, 242, 213, 41, 87, 26, 15, 48, 180, 88, 19, 205, 151, 252, 208, 8, 248, 210, 15, 180, 43, 68, 160, 205, 95, 28, 119], + [142, 57, 249, 121, 182, 35, 220, 93, 141, 234, 130, 249, 187, 90, 126, 152, 100, 181, 181, 61, 85, 2, 201, 139, 200, 140, 14, 115, 199, 49, 192, 14], + [132, 70, 235, 131, 233, 186, 168, 74, 114, 31, 172, 138, 150, 168, 7, 117, 176, 86, 48, 31, 223, 126, 113, 95, 57, 141, 125, 203, 37, 249, 174, 114], + [164, 213, 85, 73, 205, 119, 18, 200, 239, 149, 51, 108, 167, 171, 251, 28, 232, 84, 51, 51, 30, 72, 84, 172, 255, 170, 232, 72, 135, 12, 105, 6], + [214, 194, 236, 50, 109, 31, 114, 151, 96, 221, 23, 131, 234, 33, 109, 164, 43, 212, 147, 65, 13, 192, 151, 171, 47, 139, 85, 207, 241, 109, 226, 37], + [25, 148, 223, 91, 240, 244, 67, 66, 177, 113, 155, 251, 177, 86, 18, 134, 189, 129, 182, 216, 79, 87, 127, 85, 239, 69, 254, 122, 214, 245, 14, 74], + [68, 16, 115, 21, 34, 226, 104, 3, 184, 230, 235, 110, 84, 103, 215, 122, 170, 5, 6, 132, 185, 87, 34, 187, 166, 96, 136, 44, 144, 169, 208, 21], + [92, 143, 180, 46, 128, 189, 71, 207, 86, 229, 246, 37, 92, 23, 88, 25, 163, 73, 234, 107, 147, 239, 18, 125, 118, 57, 132, 179, 253, 113, 79, 49], + [152, 97, 132, 18, 9, 74, 115, 6, 101, 205, 185, 117, 139, 71, 65, 181, 84, 53, 3, 174, 8, 178, 181, 247, 154, 70, 3, 147, 89, 138, 183, 54], + [117, 159, 129, 181, 10, 57, 31, 216, 133, 197, 227, 207, 216, 106, 49, 242, 18, 70, 125, 101, 88, 44, 149, 1, 10, 72, 187, 48, 210, 126, 209, 231], + [230, 213, 178, 217, 236, 22, 235, 17, 122, 106, 200, 208, 125, 215, 17, 51, 126, 87, 75, 194, 187, 122, 246, 10, 57, 213, 62, 197, 108, 139, 115, 89], + [56, 85, 62, 17, 98, 50, 252, 144, 165, 195, 142, 14, 85, 228, 46, 97, 195, 219, 204, 67, 197, 178, 64, 234, 124, 62, 50, 179, 125, 103, 201, 81], + [184, 253, 244, 203, 162, 173, 242, 65, 221, 223, 194, 0, 136, 194, 60, 114, 56, 128, 185, 125, 197, 65, 244, 137, 5, 217, 158, 177, 186, 14, 92, 39], + [160, 76, 27, 164, 78, 128, 105, 139, 142, 143, 248, 18, 107, 138, 77, 120, 70, 196, 126, 223, 48, 55, 194, 172, 131, 28, 239, 131, 36, 2, 89, 28], + [186, 25, 173, 248, 171, 133, 40, 201, 245, 48, 88, 180, 148, 182, 21, 77, 222, 15, 173, 254, 43, 222, 179, 169, 185, 200, 119, 97, 205, 203, 180, 65], + [12, 76, 85, 245, 143, 131, 207, 130, 43, 102, 255, 202, 240, 87, 249, 239, 185, 252, 101, 71, 87, 85, 3, 232, 17, 88, 172, 202, 13, 145, 101, 27], + [113, 153, 171, 173, 152, 127, 178, 8, 186, 128, 74, 4, 122, 115, 23, 37, 195, 7, 45, 117, 37, 238, 162, 188, 223, 217, 127, 168, 193, 76, 138, 119], + [12, 206, 158, 33, 12, 71, 63, 209, 242, 1, 120, 254, 136, 156, 23, 137, 86, 234, 28, 243, 37, 197, 75, 26, 67, 154, 136, 188, 98, 254, 120, 81], + [134, 213, 134, 159, 7, 115, 242, 48, 151, 43, 141, 107, 62, 252, 233, 210, 189, 93, 155, 169, 218, 86, 103, 181, 166, 136, 166, 251, 103, 252, 201, 36], + [156, 152, 138, 156, 80, 10, 196, 114, 228, 177, 236, 190, 171, 59, 16, 81, 77, 203, 139, 205, 80, 8, 183, 26, 32, 234, 161, 191, 40, 29, 168, 15], + [96, 132, 24, 217, 54, 66, 26, 130, 142, 118, 240, 102, 152, 105, 47, 47, 66, 53, 132, 35, 4, 42, 239, 229, 119, 171, 238, 44, 33, 41, 228, 187], + [38, 43, 59, 107, 223, 253, 235, 155, 48, 76, 96, 233, 143, 87, 248, 107, 239, 214, 130, 34, 67, 94, 60, 243, 23, 172, 32, 79, 79, 55, 112, 78], + [246, 178, 29, 98, 72, 50, 9, 75, 3, 170, 103, 46, 1, 100, 98, 160, 32, 226, 23, 204, 103, 177, 67, 71, 133, 185, 145, 20, 162, 180, 250, 90], + [138, 152, 73, 84, 229, 126, 123, 240, 75, 163, 140, 241, 166, 30, 215, 71, 131, 212, 202, 118, 116, 76, 63, 169, 246, 220, 10, 253, 85, 217, 23, 71], + [38, 207, 39, 144, 245, 25, 234, 121, 233, 220, 11, 81, 64, 16, 219, 209, 75, 187, 207, 106, 139, 84, 32, 107, 108, 178, 68, 20, 3, 5, 236, 112], + [64, 255, 129, 147, 44, 86, 190, 113, 168, 32, 124, 138, 153, 50, 141, 96, 165, 162, 176, 111, 212, 14, 208, 94, 196, 178, 214, 106, 235, 202, 255, 104], + [44, 25, 247, 67, 149, 0, 166, 187, 208, 78, 125, 185, 236, 25, 139, 4, 89, 160, 4, 196, 128, 47, 39, 229, 0, 254, 77, 248, 122, 61, 227, 27], + [174, 206, 85, 8, 225, 55, 152, 52, 175, 47, 168, 28, 167, 138, 137, 244, 103, 82, 129, 11, 37, 53, 123, 150, 243, 158, 203, 190, 18, 195, 200, 55], + [190, 243, 241, 170, 113, 179, 43, 186, 119, 91, 56, 134, 185, 0, 162, 227, 251, 79, 65, 99, 213, 140, 27, 206, 10, 174, 207, 224, 181, 92, 27, 95], + [218, 214, 230, 25, 76, 32, 165, 14, 194, 19, 56, 71, 77, 52, 110, 93, 38, 112, 237, 19, 172, 17, 68, 117, 145, 189, 5, 133, 201, 124, 200, 101], + [146, 73, 247, 0, 26, 190, 182, 82, 240, 43, 224, 199, 223, 167, 173, 151, 130, 188, 113, 208, 86, 81, 255, 20, 235, 214, 89, 225, 229, 159, 130, 126], + [204, 88, 161, 4, 79, 211, 105, 244, 82, 11, 187, 174, 226, 18, 241, 32, 61, 124, 179, 97, 27, 84, 80, 153, 243, 137, 134, 27, 145, 28, 2, 90], + [178, 33, 243, 211, 58, 219, 171, 225, 105, 91, 109, 239, 143, 159, 179, 179, 10, 51, 201, 238, 226, 231, 176, 36, 52, 17, 82, 213, 253, 187, 226, 51], + [172, 29, 45, 130, 196, 166, 155, 22, 195, 206, 158, 181, 208, 182, 243, 79, 148, 138, 52, 239, 230, 36, 136, 135, 154, 81, 75, 188, 131, 126, 14, 80], + [126, 194, 148, 162, 173, 83, 41, 233, 36, 136, 220, 29, 232, 46, 77, 165, 208, 239, 112, 206, 133, 36, 44, 15, 93, 22, 174, 219, 36, 96, 0, 125], + [182, 191, 157, 11, 214, 231, 26, 222, 121, 107, 197, 21, 181, 99, 44, 71, 187, 157, 143, 154, 229, 81, 95, 52, 45, 55, 23, 134, 255, 110, 90, 30], + [162, 160, 236, 188, 172, 133, 147, 194, 200, 66, 108, 85, 218, 66, 110, 32, 41, 3, 162, 118, 183, 33, 255, 117, 139, 139, 110, 108, 2, 96, 52, 5], + [218, 18, 91, 123, 235, 68, 15, 182, 161, 69, 168, 24, 157, 227, 50, 42, 108, 168, 226, 83, 193, 19, 39, 128, 139, 41, 198, 42, 232, 118, 176, 13], + [218, 214, 145, 46, 29, 34, 180, 161, 82, 185, 48, 163, 42, 136, 88, 162, 4, 109, 16, 187, 21, 166, 51, 211, 124, 151, 142, 222, 173, 110, 119, 46], + [94, 215, 163, 23, 159, 65, 29, 10, 174, 240, 104, 130, 69, 139, 87, 245, 27, 53, 80, 145, 184, 70, 187, 54, 96, 153, 66, 109, 80, 25, 162, 82], + [104, 214, 130, 92, 100, 194, 124, 40, 175, 70, 14, 143, 173, 49, 59, 178, 254, 215, 90, 255, 89, 232, 223, 153, 179, 237, 202, 237, 236, 150, 216, 102], + [166, 101, 158, 76, 63, 34, 194, 170, 151, 213, 74, 54, 227, 26, 181, 122, 97, 122, 246, 43, 212, 62, 198, 46, 213, 112, 119, 20, 146, 6, 146, 112], + [20, 229, 93, 235, 203, 26, 151, 13, 177, 181, 31, 83, 86, 1, 8, 13, 18, 141, 245, 223, 242, 89, 63, 238, 30, 51, 105, 19, 157, 81, 192, 114], + [44, 36, 100, 44, 239, 20, 231, 115, 21, 191, 70, 124, 0, 145, 124, 116, 154, 25, 195, 229, 166, 223, 112, 85, 72, 166, 122, 167, 173, 10, 209, 56], + [142, 133, 30, 217, 146, 34, 143, 34, 104, 238, 140, 97, 79, 230, 7, 93, 56, 0, 6, 10, 225, 64, 152, 224, 48, 148, 19, 160, 168, 28, 68, 112], + [84, 94, 128, 100, 248, 137, 138, 41, 212, 129, 30, 9, 178, 7, 207, 51, 2, 229, 206, 254, 241, 102, 21, 248, 88, 15, 205, 143, 166, 58, 98, 78], + [218, 47, 127, 176, 63, 207, 248, 72, 142, 2, 155, 189, 98, 249, 82, 112, 244, 5, 195, 2, 137, 92, 194, 133, 100, 166, 158, 6, 144, 50, 230, 116], + [42, 138, 54, 49, 198, 224, 120, 197, 217, 30, 242, 215, 114, 10, 252, 175, 64, 173, 186, 66, 90, 100, 138, 128, 130, 66, 13, 125, 7, 140, 71, 58], + [156, 120, 182, 33, 219, 174, 128, 170, 103, 151, 162, 143, 117, 32, 89, 238, 241, 171, 215, 99, 218, 189, 163, 89, 85, 96, 160, 52, 143, 248, 46, 57], + [232, 139, 71, 107, 182, 41, 146, 230, 64, 3, 205, 166, 216, 146, 173, 149, 225, 180, 93, 128, 227, 254, 240, 29, 10, 65, 25, 225, 235, 227, 163, 6], + [121, 91, 9, 166, 254, 68, 24, 31, 178, 252, 33, 186, 252, 39, 149, 139, 185, 99, 188, 188, 73, 107, 169, 0, 92, 176, 6, 44, 242, 122, 240, 145], + [18, 52, 99, 140, 43, 150, 145, 119, 163, 23, 246, 218, 246, 253, 90, 40, 104, 207, 68, 132, 217, 142, 158, 174, 83, 255, 207, 181, 178, 229, 182, 95], + [64, 164, 10, 249, 72, 67, 69, 141, 42, 50, 223, 253, 168, 193, 19, 20, 60, 76, 38, 59, 104, 159, 178, 47, 235, 40, 23, 212, 75, 85, 116, 71], + [90, 135, 58, 121, 143, 143, 110, 100, 254, 215, 107, 203, 160, 199, 182, 86, 86, 161, 81, 93, 144, 199, 51, 190, 175, 173, 102, 139, 228, 4, 116, 109], + [62, 30, 163, 156, 6, 70, 240, 232, 22, 213, 96, 56, 232, 180, 57, 15, 60, 179, 203, 155, 153, 72, 62, 189, 153, 198, 5, 207, 52, 135, 38, 117], + [44, 112, 144, 18, 248, 7, 175, 143, 195, 240, 210, 171, 176, 197, 28, 169, 168, 141, 78, 242, 77, 26, 9, 43, 248, 157, 172, 245, 206, 99, 234, 29], + [28, 46, 116, 60, 92, 209, 172, 126, 74, 248, 247, 204, 141, 211, 239, 86, 31, 116, 155, 112, 215, 44, 170, 215, 182, 233, 212, 116, 28, 124, 47, 56], + [250, 97, 238, 17, 124, 244, 135, 220, 57, 98, 15, 172, 108, 62, 133, 81, 17, 246, 132, 53, 130, 122, 28, 100, 104, 164, 91, 138, 183, 59, 122, 147], + [58, 13, 33, 166, 234, 193, 159, 44, 11, 84, 97, 158, 123, 225, 71, 8, 234, 35, 71, 206, 84, 152, 118, 183, 248, 102, 3, 149, 189, 13, 86, 168], + [210, 150, 179, 95, 208, 49, 151, 66, 83, 55, 119, 53, 143, 48, 183, 8, 170, 246, 179, 135, 9, 210, 90, 89, 246, 87, 110, 88, 22, 108, 209, 77], + [78, 21, 80, 146, 0, 103, 4, 128, 134, 169, 243, 15, 121, 154, 23, 73, 80, 142, 34, 42, 209, 169, 217, 153, 245, 134, 230, 243, 231, 130, 201, 50], + [172, 29, 49, 23, 191, 6, 255, 232, 145, 41, 74, 11, 29, 19, 218, 87, 78, 212, 129, 65, 9, 0, 161, 70, 196, 152, 211, 120, 21, 216, 97, 107], + [171, 172, 81, 10, 126, 40, 213, 246, 82, 66, 253, 253, 50, 154, 112, 117, 40, 245, 162, 134, 93, 237, 142, 52, 41, 104, 176, 27, 1, 79, 238, 84], + [122, 115, 159, 88, 227, 223, 95, 8, 10, 209, 71, 155, 19, 244, 39, 151, 221, 160, 232, 147, 185, 17, 168, 33, 30, 80, 97, 94, 111, 90, 145, 23], + [60, 63, 34, 232, 97, 176, 18, 120, 81, 178, 12, 69, 219, 238, 113, 125, 26, 228, 253, 183, 174, 26, 138, 208, 111, 64, 64, 41, 244, 124, 121, 67], + [40, 148, 254, 89, 9, 137, 110, 100, 156, 123, 146, 165, 201, 220, 254, 199, 164, 120, 52, 58, 234, 170, 210, 158, 121, 241, 68, 27, 79, 59, 113, 37], + [10, 80, 189, 80, 152, 191, 196, 83, 56, 254, 215, 66, 252, 122, 147, 90, 255, 158, 208, 88, 197, 55, 123, 32, 17, 101, 133, 144, 127, 16, 98, 1], + [46, 105, 172, 145, 220, 43, 62, 84, 175, 210, 215, 71, 54, 231, 223, 217, 95, 170, 30, 115, 141, 171, 6, 108, 128, 50, 137, 128, 199, 201, 7, 110], + [34, 67, 70, 237, 99, 250, 41, 140, 128, 100, 237, 222, 206, 7, 18, 51, 3, 66, 165, 15, 47, 21, 42, 95, 175, 180, 84, 240, 9, 165, 104, 85], + [86, 15, 189, 117, 179, 219, 150, 239, 113, 227, 59, 97, 96, 14, 63, 55, 169, 38, 64, 8, 135, 218, 170, 174, 56, 13, 54, 54, 148, 156, 7, 103], + [106, 217, 75, 166, 62, 43, 95, 39, 205, 242, 178, 147, 7, 109, 3, 214, 253, 255, 44, 20, 164, 97, 54, 104, 211, 243, 117, 150, 167, 140, 152, 71], + [54, 149, 171, 208, 232, 116, 221, 99, 156, 141, 102, 199, 185, 226, 175, 117, 139, 91, 54, 222, 54, 187, 1, 240, 233, 80, 72, 207, 181, 224, 15, 104], + [50, 174, 189, 199, 130, 120, 182, 27, 121, 74, 196, 214, 54, 179, 189, 241, 91, 1, 232, 195, 235, 11, 118, 71, 106, 115, 21, 53, 107, 92, 173, 13], + [248, 50, 93, 17, 160, 222, 207, 148, 89, 28, 188, 52, 219, 39, 38, 73, 24, 224, 147, 207, 156, 221, 0, 146, 208, 108, 78, 134, 97, 111, 28, 41], + [196, 252, 84, 183, 173, 5, 166, 238, 111, 47, 225, 171, 174, 86, 2, 197, 161, 240, 88, 149, 207, 167, 191, 117, 184, 97, 188, 245, 46, 62, 24, 99], + [152, 102, 212, 80, 61, 5, 186, 40, 174, 224, 52, 123, 31, 99, 129, 168, 38, 158, 80, 205, 38, 8, 190, 75, 155, 233, 112, 115, 234, 155, 158, 5], + [58, 244, 16, 159, 67, 195, 93, 65, 105, 111, 153, 149, 45, 112, 230, 188, 137, 80, 77, 197, 83, 61, 191, 24, 151, 55, 187, 203, 215, 135, 96, 97], + [188, 163, 103, 207, 165, 67, 118, 65, 78, 154, 254, 205, 53, 215, 163, 42, 23, 1, 31, 210, 108, 134, 202, 237, 146, 247, 187, 188, 11, 238, 11, 127], + [70, 125, 148, 246, 12, 162, 254, 200, 189, 252, 132, 57, 38, 8, 141, 245, 173, 39, 79, 235, 74, 140, 44, 208, 70, 92, 168, 203, 120, 245, 76, 114], + [44, 240, 131, 139, 5, 251, 24, 39, 24, 222, 133, 149, 37, 250, 30, 109, 83, 213, 87, 229, 252, 246, 49, 238, 159, 244, 76, 97, 152, 16, 212, 59], + [138, 247, 46, 8, 175, 253, 239, 75, 125, 166, 137, 80, 188, 72, 94, 147, 57, 41, 40, 23, 129, 252, 18, 213, 36, 233, 140, 140, 30, 144, 164, 29], + [20, 70, 102, 216, 66, 208, 224, 194, 67, 50, 123, 232, 185, 119, 254, 139, 64, 238, 36, 57, 24, 65, 14, 129, 107, 127, 195, 178, 199, 159, 116, 102], + [200, 131, 83, 61, 79, 131, 122, 150, 17, 115, 59, 190, 222, 176, 212, 32, 178, 87, 61, 28, 144, 55, 39, 59, 72, 181, 35, 55, 104, 248, 95, 8], + [124, 213, 155, 165, 255, 79, 185, 97, 149, 226, 204, 185, 234, 204, 215, 139, 255, 152, 46, 15, 21, 219, 126, 148, 45, 114, 209, 185, 87, 162, 252, 10], + [112, 189, 233, 173, 82, 193, 14, 226, 75, 136, 20, 76, 97, 47, 14, 86, 208, 211, 183, 153, 91, 217, 224, 84, 17, 112, 224, 111, 46, 127, 199, 8], + [56, 15, 250, 13, 153, 166, 81, 158, 10, 180, 216, 160, 140, 45, 96, 255, 90, 140, 119, 98, 199, 158, 20, 138, 230, 238, 137, 145, 112, 1, 0, 68], + [62, 110, 138, 244, 155, 221, 46, 135, 254, 143, 195, 97, 196, 10, 114, 182, 95, 193, 193, 238, 177, 161, 79, 135, 6, 67, 54, 244, 45, 223, 231, 3], + [190, 126, 211, 122, 134, 233, 155, 156, 17, 151, 255, 143, 163, 165, 228, 182, 64, 59, 84, 1, 150, 246, 205, 9, 175, 47, 188, 67, 234, 154, 87, 115], + [156, 8, 170, 109, 173, 183, 172, 39, 165, 150, 128, 2, 57, 201, 163, 99, 200, 160, 148, 206, 213, 196, 98, 132, 153, 72, 241, 15, 81, 45, 158, 27], + [238, 158, 10, 156, 237, 29, 152, 9, 5, 107, 74, 220, 168, 210, 36, 234, 60, 53, 154, 185, 175, 31, 182, 152, 96, 40, 254, 129, 110, 55, 102, 90], + [222, 136, 73, 91, 148, 50, 65, 218, 20, 17, 179, 20, 86, 14, 220, 181, 27, 201, 144, 98, 219, 220, 77, 207, 144, 107, 172, 12, 72, 82, 244, 52], + [20, 188, 115, 8, 240, 253, 101, 118, 31, 236, 245, 236, 16, 75, 180, 56, 238, 70, 125, 153, 10, 248, 72, 55, 204, 56, 122, 105, 222, 73, 168, 95], + [134, 140, 213, 79, 174, 161, 160, 228, 88, 54, 99, 91, 43, 246, 88, 115, 52, 54, 236, 105, 197, 86, 125, 101, 27, 229, 146, 57, 44, 187, 105, 220], + [100, 103, 253, 78, 112, 56, 185, 37, 194, 66, 35, 87, 56, 13, 140, 192, 197, 241, 125, 39, 47, 99, 154, 248, 252, 253, 31, 17, 86, 222, 112, 64], + [176, 119, 188, 76, 14, 254, 156, 6, 250, 209, 36, 141, 91, 39, 90, 121, 157, 44, 229, 114, 204, 187, 146, 96, 27, 172, 36, 104, 210, 159, 228, 75], + [212, 72, 42, 216, 212, 46, 156, 252, 128, 249, 248, 10, 9, 55, 100, 74, 36, 62, 89, 139, 239, 130, 62, 59, 33, 68, 68, 84, 53, 197, 54, 35], + [94, 229, 69, 146, 105, 249, 76, 245, 52, 214, 99, 26, 51, 45, 212, 153, 4, 169, 75, 56, 71, 104, 117, 103, 206, 172, 77, 215, 76, 187, 37, 18], + [168, 7, 6, 72, 246, 228, 59, 125, 138, 143, 16, 65, 139, 105, 97, 48, 210, 4, 108, 16, 100, 95, 16, 8, 93, 232, 14, 96, 152, 184, 95, 9], + [12, 30, 86, 186, 160, 124, 128, 173, 10, 212, 212, 241, 151, 236, 105, 29, 17, 4, 103, 1, 12, 168, 194, 86, 71, 57, 145, 157, 113, 209, 9, 124], + [162, 97, 27, 101, 196, 115, 166, 134, 30, 13, 237, 211, 142, 107, 20, 138, 87, 77, 165, 10, 133, 77, 181, 60, 105, 241, 234, 73, 65, 240, 214, 40], + [168, 243, 128, 29, 140, 120, 224, 144, 194, 1, 238, 189, 86, 169, 82, 167, 233, 13, 83, 92, 237, 86, 132, 253, 211, 253, 103, 106, 154, 207, 75, 68], + [76, 228, 33, 55, 12, 240, 37, 125, 134, 150, 24, 236, 37, 195, 36, 237, 76, 108, 127, 101, 40, 146, 151, 163, 193, 52, 51, 44, 33, 46, 53, 11], + [60, 51, 69, 125, 109, 17, 237, 123, 60, 82, 245, 245, 89, 208, 48, 121, 2, 208, 151, 80, 79, 101, 160, 185, 87, 194, 175, 234, 146, 246, 63, 28], + [186, 80, 165, 140, 50, 132, 33, 151, 29, 245, 67, 142, 199, 59, 10, 187, 95, 78, 69, 71, 166, 254, 108, 31, 9, 9, 6, 230, 11, 71, 49, 67], + [166, 148, 132, 242, 177, 14, 194, 241, 222, 161, 147, 148, 66, 61, 87, 111, 145, 198, 181, 171, 35, 21, 179, 137, 244, 225, 8, 188, 240, 170, 40, 64], + ] + .into_iter() + .map(|acc| + AccountId::from(acc) + ).for_each(|acc| { + if !Balances::unreserve(&acc, to_unreserve).is_zero() { + failure += 1; + }; + }); + frame_support::debug::info!("Migration to fix voters happened. Accounts with inaccurate reserved amount: {}", failure); + ::MaximumBlockWeight::get() + } +} + pub struct CustomOnRuntimeUpgrade; impl frame_support::traits::OnRuntimeUpgrade for CustomOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { @@ -992,7 +1214,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllModules, - CustomOnRuntimeUpgrade + FixCouncilHistoricalVotes, >; /// The payload being signed in the transactions. pub type SignedPayload = generic::SignedPayload; -- GitLab From 085599f7e0c78c46e50e037f49b252252ab21948 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 2 Dec 2020 22:40:14 -0800 Subject: [PATCH 084/203] Update lib.rs (#2064) --- runtime/kusama/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 7ac0ea52fd..5e47f9e61a 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1107,7 +1107,7 @@ impl frame_support::traits::OnRuntimeUpgrade for FixCouncilHistoricalVotes { }; }); frame_support::debug::info!("Migration to fix voters happened. Accounts with inaccurate reserved amount: {}", failure); - ::MaximumBlockWeight::get() + ::MaximumBlockWeight::get() } } -- GitLab From c088d52ff4edfa6b09a0489ee239054a6dbc5082 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Dec 2020 07:25:44 +0000 Subject: [PATCH 085/203] Bump serde_json from 1.0.59 to 1.0.60 (#2065) Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.59 to 1.0.60. - [Release notes](https://github.com/serde-rs/json/releases) - [Commits](https://github.com/serde-rs/json/compare/v1.0.59...v1.0.60) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/test/service/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e7b8b98e82..852eec8d83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7656,9 +7656,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" dependencies = [ "itoa", "ryu", diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index f28f58a326..ffe6551cc4 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -57,6 +57,6 @@ substrate-test-client = { git = "https://github.com/paritytech/substrate", branc [dev-dependencies] pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -serde_json = "1.0.59" +serde_json = "1.0.60" substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } tokio = { version = "0.2", features = ["macros"] } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 025c0a65a2..63f8ca9531 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -49,7 +49,7 @@ pallet-randomness-collective-flip = { git = "https://github.com/paritytech/subst pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } trie-db = "0.22.1" -serde_json = "1.0.59" +serde_json = "1.0.60" libsecp256k1 = "0.3.5" [features] diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 17ccfca080..7db1568bed 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -80,7 +80,7 @@ tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } separator = "0.4.1" -serde_json = "1.0.59" +serde_json = "1.0.60" [build-dependencies] substrate-wasm-builder = "3.0.0" diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 5200a897e6..9e15b98c94 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -51,7 +51,7 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.59" +serde_json = "1.0.60" libsecp256k1 = "0.3.5" sp-version = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master"} diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index b6435b3781..01e359f81c 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -78,7 +78,7 @@ tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } trie-db = "0.22.1" -serde_json = "1.0.59" +serde_json = "1.0.60" [build-dependencies] substrate-wasm-builder = "3.0.0" diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index af1a8cf347..e1844baa3a 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -62,7 +62,7 @@ libsecp256k1 = "0.3.5" tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.59" +serde_json = "1.0.60" [build-dependencies] substrate-wasm-builder = "3.0.0" diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index c8ff4e43e4..8a3dd580ba 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -81,7 +81,7 @@ libsecp256k1 = "0.3.5" tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.59" +serde_json = "1.0.60" [build-dependencies] substrate-wasm-builder = "3.0.0" -- GitLab From 5bc94715fe5d896adc6f4925d12764e946250da8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Dec 2020 08:27:29 +0100 Subject: [PATCH 086/203] Bump color-eyre from 0.5.8 to 0.5.10 (#2066) Bumps [color-eyre](https://github.com/yaahc/color-eyre) from 0.5.8 to 0.5.10. - [Release notes](https://github.com/yaahc/color-eyre/releases) - [Changelog](https://github.com/yaahc/color-eyre/blob/v0.5.10/CHANGELOG.md) - [Commits](https://github.com/yaahc/color-eyre/compare/v0.5.8...v0.5.10) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 15 ++++++++------- Cargo.toml | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 852eec8d83..8cd86a4623 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -748,9 +748,9 @@ dependencies = [ [[package]] name = "color-eyre" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb57305b07ffcc1a4d08808f1f2200647c8e3d91a4c83d2810ae20c997274e0" +checksum = "7b29030875fd8376e4a28ef497790d5b4a7843d8d1396bf08ce46f5eec562c5c" dependencies = [ "backtrace", "color-spantrace", @@ -763,11 +763,12 @@ dependencies = [ [[package]] name = "color-spantrace" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a99aa4aa18448eef4c7d3f86d2720d2d8cad5c860fe9ff9b279293efdc8f5be" +checksum = "b6eee477a4a8a72f4addd4de416eb56d54bc307b284d6601bafdee1f4ea462d1" dependencies = [ - "ansi_term 0.11.0", + "once_cell", + "owo-colors", "tracing-core", "tracing-error", ] @@ -3764,9 +3765,9 @@ dependencies = [ [[package]] name = "owo-colors" -version = "1.1.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1250cdd103eef6bd542b5ae82989f931fc00a41a27f60377338241594410f3" +checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" diff --git a/Cargo.toml b/Cargo.toml index d480bd60fd..98fe8a2c4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ readme = "README.md" [dependencies] cli = { package = "polkadot-cli", path = "cli" } -color-eyre = "0.5.8" +color-eyre = "0.5.10" thiserror = "1.0.22" futures = "0.3.8" service = { package = "polkadot-service", path = "node/service" } -- GitLab From f4aae88479554bea56462cd93ace50ebcdb3c777 Mon Sep 17 00:00:00 2001 From: mattrutherford <44339188+mattrutherford@users.noreply.github.com> Date: Thu, 3 Dec 2020 14:32:56 +0000 Subject: [PATCH 087/203] companion for substrate#7474 (#1985) * include new parameter in test `Configuration` * update calls to `init_logger` * "Update Substrate" * cargo update -p sp-io Co-authored-by: Matt Co-authored-by: parity-processbot <> --- Cargo.lock | 327 ++++++++++-------- cli/src/command.rs | 2 +- node/test/service/src/lib.rs | 1 + .../adder/collator/tests/integration.rs | 2 +- 4 files changed, 182 insertions(+), 150 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8cd86a4623..2b75d9ca45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1462,7 +1462,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", ] @@ -1470,7 +1470,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -1488,7 +1488,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "chrono", "frame-benchmarking", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -1526,7 +1526,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "serde", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "bitflags", "frame-metadata", @@ -1562,7 +1562,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1573,7 +1573,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1585,7 +1585,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1595,7 +1595,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -1625,7 +1625,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-api", @@ -1849,6 +1849,19 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +[[package]] +name = "generator" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cdc09201b2e8ca1b19290cf7e65de2246b8e91fb6874279722189c4de7b94dc" +dependencies = [ + "cc", + "libc", + "log", + "rustc_version", + "winapi 0.3.9", +] + [[package]] name = "generic-array" version = "0.12.3" @@ -2762,9 +2775,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.31.1" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24966e73cc5624a6cf14b025365f67cb6da436b4d6337ed84d198063ba74451d" +checksum = "724846a3194368fefcac7ebdab12e01b8ac382e3efe399ddbd28851ab34f396f" dependencies = [ "atomic", "bytes 0.5.6", @@ -2800,9 +2813,9 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.25.1" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d92fab5df60c9705e05750d9ecee6a5af15aed1e3fa86e09fd3dd07ec5dc8e" +checksum = "cc9c96d3a606a696a3a6c0ad3c3352c57bda2082ec9090930f1bd9daf787039f" dependencies = [ "asn1_der", "bs58", @@ -3262,6 +3275,19 @@ dependencies = [ "cfg-if 0.1.10", ] +[[package]] +name = "loom" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" +dependencies = [ + "cfg-if 0.1.10", + "generator", + "scoped-tls", + "serde", + "serde_json", +] + [[package]] name = "lru" version = "0.6.1" @@ -3531,9 +3557,9 @@ checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce" [[package]] name = "multistream-select" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e19fd46149acdd3600780ebaa09f6ae4e7f2ddbafec64aab54cf75aafd1746" +checksum = "dda822043bba2d6da31c4e14041f9794f8fb130a5959289038d0b809d8888614" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -3772,7 +3798,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -3788,7 +3814,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -3803,7 +3829,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3828,7 +3854,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3842,7 +3868,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3858,7 +3884,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3873,7 +3899,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3888,7 +3914,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3909,7 +3935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3925,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3945,7 +3971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3962,7 +3988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -3976,7 +4002,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -3992,7 +4018,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4006,7 +4032,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4021,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4042,7 +4068,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4058,7 +4084,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4071,7 +4097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "enumflags2", "frame-support", @@ -4086,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4101,7 +4127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4121,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4137,7 +4163,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4151,7 +4177,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4173,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4184,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4198,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4216,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "frame-system", @@ -4233,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4251,7 +4277,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-support", "parity-scale-codec", @@ -4264,7 +4290,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4279,7 +4305,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-benchmarking", "frame-support", @@ -4295,7 +4321,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6545,7 +6571,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "async-trait", "derive_more", @@ -6573,7 +6599,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6596,7 +6622,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6613,7 +6639,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6634,7 +6660,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6645,15 +6671,13 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ - "ansi_term 0.12.1", "atty", "chrono", "fdlimit", "futures 0.3.8", "hex", - "lazy_static", "libp2p", "log", "names", @@ -6690,7 +6714,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6701,7 +6725,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "fnv", @@ -6735,7 +6759,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "blake2-rfc", "hash-db", @@ -6765,7 +6789,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6776,7 +6800,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "fork-tree", @@ -6821,7 +6845,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "futures 0.3.8", @@ -6845,7 +6869,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6858,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6884,7 +6908,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "sc-client-api", @@ -6898,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "lazy_static", @@ -6927,7 +6951,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "parity-scale-codec", @@ -6943,7 +6967,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "parity-scale-codec", @@ -6958,7 +6982,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "parity-scale-codec", @@ -6976,7 +7000,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "finality-grandpa", @@ -7013,7 +7037,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "finality-grandpa", @@ -7037,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7055,7 +7079,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "async-trait", "derive_more", @@ -7075,7 +7099,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "hash-db", "lazy_static", @@ -7094,7 +7118,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "async-std", "async-trait", @@ -7148,7 +7172,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7163,7 +7187,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "bytes 0.5.6", "fnv", @@ -7190,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "libp2p", @@ -7203,7 +7227,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7212,7 +7236,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "hash-db", @@ -7226,6 +7250,7 @@ dependencies = [ "sc-executor", "sc-keystore", "sc-rpc-api", + "sc-tracing", "serde_json", "sp-api", "sp-blockchain", @@ -7245,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "futures 0.3.8", @@ -7269,7 +7294,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7287,7 +7312,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "directories 3.0.1", "exit-future", @@ -7351,7 +7376,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "parity-scale-codec", @@ -7366,7 +7391,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7386,7 +7411,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7407,11 +7432,15 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ + "ansi_term 0.12.1", "erased-serde", + "lazy_static", "log", + "once_cell", "parking_lot 0.10.2", + "regex", "rustc-hash", "sc-telemetry", "serde", @@ -7420,13 +7449,14 @@ dependencies = [ "sp-tracing", "tracing", "tracing-core", + "tracing-log", "tracing-subscriber", ] [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "futures 0.3.8", @@ -7448,7 +7478,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7717,11 +7747,12 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.0.9" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06d5a3f5166fb5b42a5439f2eee8b9de149e235961e3eb21c5808fc3ea17ff3e" +checksum = "7b4921be914e16899a80adefb821f8ddb7974e3f1250223575a44ed994882127" dependencies = [ "lazy_static", + "loom", ] [[package]] @@ -7902,7 +7933,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "sp-core", @@ -7914,7 +7945,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "hash-db", "parity-scale-codec", @@ -7930,7 +7961,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7942,7 +7973,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "serde", @@ -7954,7 +7985,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7967,7 +7998,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-api", @@ -7979,7 +8010,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7990,7 +8021,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-api", @@ -8002,7 +8033,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "log", @@ -8020,7 +8051,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "serde", "serde_json", @@ -8029,7 +8060,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8055,7 +8086,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "merlin", "parity-scale-codec", @@ -8075,7 +8106,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8084,7 +8115,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8096,7 +8127,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "base58", "blake2-rfc", @@ -8140,7 +8171,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8149,7 +8180,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8159,7 +8190,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "environmental", "parity-scale-codec", @@ -8170,7 +8201,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "finality-grandpa", "log", @@ -8187,7 +8218,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8199,7 +8230,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "hash-db", @@ -8223,7 +8254,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "lazy_static", "sp-core", @@ -8234,7 +8265,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "async-trait", "derive_more", @@ -8250,7 +8281,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "serde", @@ -8262,7 +8293,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8273,7 +8304,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "sp-api", "sp-core", @@ -8283,7 +8314,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "backtrace", ] @@ -8291,7 +8322,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "serde", "sp-core", @@ -8300,7 +8331,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "either", "hash256-std-hasher", @@ -8321,7 +8352,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "primitive-types", @@ -8337,7 +8368,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "Inflector", "proc-macro-crate", @@ -8349,7 +8380,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "serde", "serde_json", @@ -8358,7 +8389,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-api", @@ -8371,7 +8402,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8381,7 +8412,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "hash-db", "log", @@ -8403,12 +8434,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8421,7 +8452,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "sp-core", @@ -8434,7 +8465,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8448,7 +8479,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "log", "parity-scale-codec", @@ -8461,7 +8492,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "derive_more", "futures 0.3.8", @@ -8477,7 +8508,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "hash-db", "memory-db", @@ -8491,7 +8522,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "futures-core", @@ -8503,7 +8534,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8515,7 +8546,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8657,7 +8688,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "chrono", "console_error_panic_hook", @@ -8683,7 +8714,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "platforms", ] @@ -8691,7 +8722,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8714,7 +8745,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "async-std", "derive_more", @@ -8728,7 +8759,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8755,7 +8786,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8765,7 +8796,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f4d4244ed6f09675f09c6e1afa96c2b595a689bf" +source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -9393,9 +9424,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef0a5e15477aa303afbfac3a44cba9b6430fdaad52423b1e6c0dbbe28c3eedd" +checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" dependencies = [ "ansi_term 0.12.1", "chrono", diff --git a/cli/src/command.rs b/cli/src/command.rs index 3cb84b21c5..85341278fb 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -216,7 +216,7 @@ pub fn run() -> Result<()> { }) }, Some(Subcommand::ValidationWorker(cmd)) => { - let _ = sc_cli::init_logger("", sc_tracing::TracingReceiver::Log, None); + let _ = sc_cli::init_logger("", sc_tracing::TracingReceiver::Log, None, false); if cfg!(feature = "browser") || cfg!(target_os = "android") { Err(sc_cli::Error::Input("Cannot run validation worker in browser".into())) diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 9124be38c7..28af4e1a59 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -194,6 +194,7 @@ pub fn node_config( announce_block: true, base_path: Some(base_path), informant_output_format: Default::default(), + disable_log_reloading: false, } } diff --git a/parachain/test-parachains/adder/collator/tests/integration.rs b/parachain/test-parachains/adder/collator/tests/integration.rs index 2a59e5a33c..6754c6a437 100644 --- a/parachain/test-parachains/adder/collator/tests/integration.rs +++ b/parachain/test-parachains/adder/collator/tests/integration.rs @@ -25,7 +25,7 @@ async fn collating_using_adder_collator(task_executor: sc_service::TaskExecutor) use futures::join; use polkadot_primitives::v1::Id as ParaId; - sc_cli::init_logger("", Default::default(), None).expect("Sets up logger"); + sc_cli::init_logger("", Default::default(), None, false).expect("Sets up logger"); let para_id = ParaId::from(100); -- GitLab From 113ae8272ecf2133272b9373123ffb4f74a00425 Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Fri, 4 Dec 2020 11:24:59 +0100 Subject: [PATCH 088/203] do not store backed candidates in the provisioner (#1909) * guide: non-semantic changes * guide: update per the issue description * GetBackedCandidates operates on multiple hashes now * GetBackedCandidates still needs a relay parent * implement changes specified in guide * distinguish between various occasions for canceled oneshots * add tracing info to getbackedcandidates * REVERT ME: add tracing messages for GetBackedCandidates Note that these messages are only sometimes actually passed on to the candidate backing subsystem, with the consequence that it is unexpectedly frequent that the provisioner fails to create its provisionable data. * REVERT ME: more tracing logging * REVERT ME: log when CandidateBackingJob receives any message at all * REVERT ME: log when send_msg sends a message to a job * fix candidate-backing tests * streamline GetBackedCandidates This uses table.attested_candidate instead of table.get_candidate, because it's not obvious how to get a BackedCandidate from just a CommittedCandidateReceipt. * REVERT ME: more logging tracing job lifespans * promote warning about job premature demise * don't terminate CandiateBackingJob::run_loop in event of failure to process message * Revert "REVERT ME: more logging tracing job lifespans" This reverts commit 7365f2fb3dec988d95cfcd317eba75587fe7fd16. * Revert "REVERT ME: log when send_msg sends a message to a job" This reverts commit 58e46aad038e6517d6d56390c8be65b046a21884. * Revert "REVERT ME: log when CandidateBackingJob receives any message at all" This reverts commit 0d6f38413c7c66b5e9e81dabc587906fa9f82656. * Revert "REVERT ME: more tracing logging" This reverts commit 675fd2628e84d1596965280e7314155ef21b28e6. * Revert "REVERT ME: add tracing messages for GetBackedCandidates" This reverts commit e09e156493430b33b6c8ab4b5cedb3f2f91afd51. * formatting * add logging message to CandidateBackingJob::run_loop start * REVERT ME: add tracing to candidate-backing job creation * run candidatebacking loop even if no assignment * use unique error variants for each canceled oneshot * Revert "REVERT ME: add tracing to candidate-backing job creation" This reverts commit 8ce5f4f0bd7186dade134b118751480f72ea1fd6. * try_runtime_api more to reduce silent exits * add sanity check that returned backed candidates preserve ordering * remove redundant err attribute --- node/core/backing/src/lib.rs | 94 +++++++++---------- node/core/provisioner/src/lib.rs | 73 +++++++++++--- node/subsystem-util/src/lib.rs | 5 +- node/subsystem/src/messages.rs | 10 +- primitives/src/v1.rs | 10 ++ .../src/node/backing/candidate-backing.md | 4 +- .../src/types/overseer-protocol.md | 4 +- 7 files changed, 121 insertions(+), 79 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 44ec79e1d7..20a1a4d421 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -39,7 +39,7 @@ use polkadot_node_primitives::{ use polkadot_subsystem::{ messages::{ AllMessages, AvailabilityStoreMessage, CandidateBackingMessage, CandidateSelectionMessage, - CandidateValidationMessage, NewBackedCandidate, PoVDistributionMessage, ProvisionableData, + CandidateValidationMessage, PoVDistributionMessage, ProvisionableData, ProvisionerMessage, StatementDistributionMessage, ValidationFailed, RuntimeApiRequest, }, }; @@ -74,11 +74,17 @@ enum Error { #[error("Signature is invalid")] InvalidSignature, #[error("Failed to send candidates {0:?}")] - Send(Vec), - #[error("Oneshot never resolved")] - Oneshot(#[from] #[source] oneshot::Canceled), + Send(Vec), + #[error("FetchPoV channel closed before receipt")] + FetchPoV(#[source] oneshot::Canceled), + #[error("ValidateFromChainState channel closed before receipt")] + ValidateFromChainState(#[source] oneshot::Canceled), + #[error("StoreAvailableData channel closed before receipt")] + StoreAvailableData(#[source] oneshot::Canceled), + #[error("a channel was closed before receipt in try_join!")] + JoinMultiple(#[source] oneshot::Canceled), #[error("Obtaining erasure chunks failed")] - ObtainErasureChunks(#[from] #[source] erasure_coding::Error), + ObtainErasureChunks(#[from] erasure_coding::Error), #[error(transparent)] ValidationFailed(#[from] ValidationFailed), #[error(transparent)] @@ -124,7 +130,7 @@ struct CandidateBackingJob { /// Outbound message channel sending part. tx_from: mpsc::Sender, /// The `ParaId` assigned to this validator - assignment: ParaId, + assignment: Option, /// The collator required to author the candidate, if any. required_collator: Option, /// We issued `Seconded`, `Valid` or `Invalid` statements on about these candidates. @@ -270,7 +276,7 @@ async fn store_available_data( ).into() ).await?; - let _ = rx.await?; + let _ = rx.await.map_err(Error::StoreAvailableData)?; Ok(()) } @@ -328,7 +334,7 @@ async fn request_pov_from_distribution( PoVDistributionMessage::FetchPoV(parent, descriptor, tx) ).into()).await?; - Ok(rx.await?) + rx.await.map_err(Error::FetchPoV) } async fn request_candidate_validation( @@ -347,7 +353,11 @@ async fn request_candidate_validation( ).into() ).await?; - Ok(rx.await??) + match rx.await { + Ok(Ok(validation_result)) => Ok(validation_result), + Ok(Err(err)) => Err(Error::ValidationFailed(err)), + Err(err) => Err(Error::ValidateFromChainState(err)), + } } type BackgroundValidationResult = Result<(CandidateReceipt, CandidateCommitments, Arc), CandidateReceipt>; @@ -567,21 +577,6 @@ impl CandidateBackingJob { Ok(()) } - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn get_backed(&self) -> Vec { - let proposed = self.table.proposed_candidates(&self.table_context); - let mut res = Vec::with_capacity(proposed.len()); - - for p in proposed.into_iter() { - match table_attested_to_backed(p, &self.table_context) { - None => continue, - Some(backed) => res.push(NewBackedCandidate(backed)), - } - } - - res - } - /// Check if there have happened any new misbehaviors and issue necessary messages. /// /// TODO: Report multiple misbehaviors (https://github.com/paritytech/polkadot/issues/1387) @@ -641,7 +636,7 @@ impl CandidateBackingJob { { let message = ProvisionerMessage::ProvisionableData( self.parent, - ProvisionableData::BackedCandidate(backed), + ProvisionableData::BackedCandidate(backed.receipt()), ); self.send_to_provisioner(message).await?; } @@ -661,7 +656,7 @@ impl CandidateBackingJob { let _timer = self.metrics.time_process_second(); // Sanity check that candidate is from our assignment. - if candidate.descriptor().para_id != self.assignment { + if Some(candidate.descriptor().para_id) != self.assignment { return Ok(()); } @@ -688,10 +683,16 @@ impl CandidateBackingJob { Ok(()) => (), } } - CandidateBackingMessage::GetBackedCandidates(_, tx) => { + CandidateBackingMessage::GetBackedCandidates(_, requested_candidates, tx) => { let _timer = self.metrics.time_get_backed_candidates(); - let backed = self.get_backed(); + let backed = requested_candidates + .into_iter() + .filter_map(|hash| { + self.table.attested_candidate(&hash, &self.table_context) + .and_then(|attested| table_attested_to_backed(attested, &self.table_context)) + }) + .collect(); tx.send(backed).map_err(|data| Error::Send(data))?; } @@ -750,7 +751,7 @@ impl CandidateBackingJob { ) -> Result<(), Error> { if let Some(summary) = self.import_statement(&statement).await? { if let Statement::Seconded(_) = statement.payload() { - if summary.group_id == self.assignment { + if Some(summary.group_id) == self.assignment { self.kick_off_validation_work(summary).await?; } } @@ -850,15 +851,15 @@ impl util::JobTrait for CandidateBackingJob { } let (validators, groups, session_index, cores) = futures::try_join!( - request_validators(parent, &mut tx_from).await?, - request_validator_groups(parent, &mut tx_from).await?, - request_session_index_for_child(parent, &mut tx_from).await?, - request_from_runtime( + try_runtime_api!(request_validators(parent, &mut tx_from).await), + try_runtime_api!(request_validator_groups(parent, &mut tx_from).await), + try_runtime_api!(request_session_index_for_child(parent, &mut tx_from).await), + try_runtime_api!(request_from_runtime( parent, &mut tx_from, |tx| RuntimeApiRequest::AvailabilityCores(tx), - ).await?, - )?; + ).await), + ).map_err(Error::JoinMultiple)?; let validators = try_runtime_api!(validators); let (validator_groups, group_rotation_info) = try_runtime_api!(groups); @@ -911,8 +912,8 @@ impl util::JobTrait for CandidateBackingJob { }; let (assignment, required_collator) = match assignment { - None => return Ok(()), // no need to work. - Some(r) => r, + None => (None, None), + Some((assignment, required_collator)) => (Some(assignment), required_collator), }; let (background_tx, background_rx) = mpsc::channel(16); @@ -1492,22 +1493,10 @@ mod tests { AllMessages::Provisioner( ProvisionerMessage::ProvisionableData( _, - ProvisionableData::BackedCandidate(BackedCandidate { - candidate, - validity_votes, - validator_indices, - }) + ProvisionableData::BackedCandidate(candidate_receipt) ) - ) if candidate == candidate_a => { - assert_eq!(validity_votes.len(), 3); - - assert!(validity_votes.contains( - &ValidityAttestation::Explicit(signed_b.signature().clone()) - )); - assert!(validity_votes.contains( - &ValidityAttestation::Implicit(signed_a.signature().clone()) - )); - assert_eq!(validator_indices, bitvec::bitvec![Lsb0, u8; 1, 1, 0, 1]); + ) => { + assert_eq!(candidate_receipt, candidate_a.to_plain()); } ); @@ -2190,6 +2179,7 @@ mod tests { let (tx, rx) = oneshot::channel(); let msg = CandidateBackingMessage::GetBackedCandidates( test_state.relay_parent, + vec![candidate.hash()], tx, ); diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 560764453a..be3f38ba1e 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -26,14 +26,17 @@ use futures::{ }; use polkadot_node_subsystem::{ errors::{ChainApiError, RuntimeApiError}, - messages::{ChainApiMessage, ProvisionableData, ProvisionerInherentData, ProvisionerMessage, AllMessages}, + messages::{ + AllMessages, CandidateBackingMessage, ChainApiMessage, ProvisionableData, ProvisionerInherentData, + ProvisionerMessage, + }, }; use polkadot_node_subsystem_util::{ self as util, delegated_subsystem, FromJobCommand, request_availability_cores, request_persisted_validation_data, JobTrait, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{ - BackedCandidate, BlockNumber, CoreState, Hash, OccupiedCoreAssumption, + BackedCandidate, BlockNumber, CandidateReceipt, CoreState, Hash, OccupiedCoreAssumption, SignedAvailabilityBitfield, ValidatorIndex, }; use std::{pin::Pin, collections::BTreeMap}; @@ -82,7 +85,7 @@ struct ProvisioningJob { sender: mpsc::Sender, receiver: mpsc::Receiver, provisionable_data_channels: Vec>, - backed_candidates: Vec, + backed_candidates: Vec, signed_bitfields: Vec, metrics: Metrics, inherent_after: InherentAfter, @@ -94,8 +97,17 @@ enum Error { #[error(transparent)] Util(#[from] util::Error), - #[error(transparent)] - OneshotRecv(#[from] oneshot::Canceled), + #[error("failed to get availability cores")] + CanceledAvailabilityCores(#[source] oneshot::Canceled), + + #[error("failed to get persisted validation data")] + CanceledPersistedValidationData(#[source] oneshot::Canceled), + + #[error("failed to get block number")] + CanceledBlockNumber(#[source] oneshot::Canceled), + + #[error("failed to get backed candidates")] + CanceledBackedCandidates(#[source] oneshot::Canceled), #[error(transparent)] ChainApi(#[from] ChainApiError), @@ -103,11 +115,17 @@ enum Error { #[error(transparent)] Runtime(#[from] RuntimeApiError), - #[error("Failed to send message to ChainAPI")] + #[error("failed to send message to ChainAPI")] ChainApiMessageSend(#[source] mpsc::SendError), - #[error("Failed to send return message with Inherents")] + #[error("failed to send message to CandidateBacking to get backed candidates")] + GetBackedCandidatesSend(#[source] mpsc::SendError), + + #[error("failed to send return message with Inherents")] InherentDataReturnChannel, + + #[error("backed candidate does not correspond to selected candidate; check logic in provisioner")] + BackedCandidateOrderingProblem, } impl JobTrait for ProvisioningJob { @@ -291,13 +309,13 @@ type CoreAvailability = BitVec; async fn send_inherent_data( relay_parent: Hash, bitfields: &[SignedAvailabilityBitfield], - candidates: &[BackedCandidate], + candidates: &[CandidateReceipt], return_senders: Vec>, from_job: &mut mpsc::Sender, ) -> Result<(), Error> { let availability_cores = request_availability_cores(relay_parent, from_job) .await? - .await??; + .await.map_err(|err| Error::CanceledAvailabilityCores(err))??; let bitfields = select_availability_bitfields(&availability_cores, bitfields); let candidates = select_candidates( @@ -363,7 +381,7 @@ fn select_availability_bitfields( async fn select_candidates( availability_cores: &[CoreState], bitfields: &[SignedAvailabilityBitfield], - candidates: &[BackedCandidate], + candidates: &[CandidateReceipt], relay_parent: Hash, sender: &mut mpsc::Sender, ) -> Result, Error> { @@ -403,7 +421,7 @@ async fn select_candidates( sender, ) .await? - .await?? + .await.map_err(|err| Error::CanceledPersistedValidationData(err))?? { Some(v) => v, None => continue, @@ -413,15 +431,40 @@ async fn select_candidates( // we arbitrarily pick the first of the backed candidates which match the appropriate selection criteria if let Some(candidate) = candidates.iter().find(|backed_candidate| { - let descriptor = &backed_candidate.candidate.descriptor; + let descriptor = &backed_candidate.descriptor; descriptor.para_id == scheduled_core.para_id && descriptor.persisted_validation_data_hash == computed_validation_data_hash }) { - selected_candidates.push(candidate.clone()); + selected_candidates.push(candidate.hash()); + } + } + + // now get the backed candidates corresponding to these candidate receipts + let (tx, rx) = oneshot::channel(); + sender.send(AllMessages::CandidateBacking(CandidateBackingMessage::GetBackedCandidates( + relay_parent, + selected_candidates.clone(), + tx, + )).into()).await.map_err(|err| Error::GetBackedCandidatesSend(err))?; + let candidates = rx.await.map_err(|err| Error::CanceledBackedCandidates(err))?; + + // `selected_candidates` is generated in ascending order by core index, and `GetBackedCandidates` + // _should_ preserve that property, but let's just make sure. + // + // We can't easily map from `BackedCandidate` to `core_idx`, but we know that every selected candidate + // maps to either 0 or 1 backed candidate, and the hashes correspond. Therefore, by checking them + // in order, we can ensure that the backed candidates are also in order. + let mut backed_idx = 0; + for selected in selected_candidates.iter() { + if *selected == candidates.get(backed_idx).ok_or(Error::BackedCandidateOrderingProblem)?.hash() { + backed_idx += 1; } } + if candidates.len() != backed_idx { + Err(Error::BackedCandidateOrderingProblem)?; + } - Ok(selected_candidates) + Ok(candidates) } /// Produces a block number 1 higher than that of the relay parent @@ -439,7 +482,7 @@ async fn get_block_number_under_construction( )).into()) .await .map_err(|e| Error::ChainApiMessageSend(e))?; - match rx.await? { + match rx.await.map_err(|err| Error::CanceledBlockNumber(err))? { Ok(Some(n)) => Ok(n + 1), Ok(None) => Ok(0), Err(err) => Err(err.into()), diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 8abfcad206..82c3310f21 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -610,7 +610,10 @@ impl Jobs { async fn send_msg(&mut self, parent_hash: Hash, msg: Job::ToJob) { if let Entry::Occupied(mut job) = self.running.entry(parent_hash) { if job.get_mut().send_msg(msg).await.is_err() { - tracing::debug!(job = Job::NAME, "failed to send message to job, will remove it"); + tracing::warn!( + job = Job::NAME, + relay_parent = ?parent_hash, + "failed to send message to job, will remove it"); job.remove(); } } diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index 727814381f..3b7ee32dda 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -47,10 +47,6 @@ pub trait BoundToRelayParent { fn relay_parent(&self) -> Hash; } -/// A notification of a new backed candidate. -#[derive(Debug)] -pub struct NewBackedCandidate(pub BackedCandidate); - /// Messages received by the Candidate Selection subsystem. #[derive(Debug)] pub enum CandidateSelectionMessage { @@ -81,7 +77,7 @@ impl Default for CandidateSelectionMessage { pub enum CandidateBackingMessage { /// Requests a set of backable candidates that could be backed in a child of the given /// relay-parent, referenced by its hash. - GetBackedCandidates(Hash, oneshot::Sender>), + GetBackedCandidates(Hash, Vec, oneshot::Sender>), /// Note that the Candidate Backing subsystem should second the given candidate in the context of the /// given relay-parent (ref. by hash). This candidate must be validated. Second(Hash, CandidateReceipt, PoV), @@ -93,7 +89,7 @@ pub enum CandidateBackingMessage { impl BoundToRelayParent for CandidateBackingMessage { fn relay_parent(&self) -> Hash { match self { - Self::GetBackedCandidates(hash, _) => *hash, + Self::GetBackedCandidates(hash, _, _) => *hash, Self::Second(hash, _, _) => *hash, Self::Statement(hash, _) => *hash, } @@ -497,7 +493,7 @@ pub enum ProvisionableData { /// This bitfield indicates the availability of various candidate blocks. Bitfield(Hash, SignedAvailabilityBitfield), /// The Candidate Backing subsystem believes that this candidate is valid, pending availability. - BackedCandidate(BackedCandidate), + BackedCandidate(CandidateReceipt), /// Misbehavior reports are self-contained proofs of validator misbehavior. MisbehaviorReport(Hash, MisbehaviorReport), /// Disputes trigger a broad dispute resolution process. diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 947c595036..1b46980684 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -416,6 +416,16 @@ impl BackedCandidate { pub fn descriptor(&self) -> &CandidateDescriptor { &self.candidate.descriptor } + + /// Compute this candidate's hash. + pub fn hash(&self) -> CandidateHash where H: Clone + Encode { + self.candidate.hash() + } + + /// Get this candidate's receipt. + pub fn receipt(&self) -> CandidateReceipt where H: Clone { + self.candidate.to_plain() + } } /// Verify the backing of the given candidate. diff --git a/roadmap/implementers-guide/src/node/backing/candidate-backing.md b/roadmap/implementers-guide/src/node/backing/candidate-backing.md index 3acf058a7d..016c509674 100644 --- a/roadmap/implementers-guide/src/node/backing/candidate-backing.md +++ b/roadmap/implementers-guide/src/node/backing/candidate-backing.md @@ -67,7 +67,7 @@ The goal of a Candidate Backing Job is to produce as many backable candidates as ```rust match msg { - CetBackedCandidates(hash, tx) => { + GetBackedCandidates(hashes, tx) => { // Send back a set of backable candidates. } CandidateBackingMessage::Second(hash, candidate) => { @@ -88,7 +88,7 @@ match msg { } ``` -Add `Seconded` statements and `Valid` statements to a quorum. If quorum reaches validator-group majority, send a [`ProvisionerMessage`][PM]`::ProvisionableData(ProvisionableData::BackedCandidate(BackedCandidate))` message. +Add `Seconded` statements and `Valid` statements to a quorum. If quorum reaches validator-group majority, send a [`ProvisionerMessage`][PM]`::ProvisionableData(ProvisionableData::BackedCandidate(CandidateReceipt))` message. `Invalid` statements that conflict with already witnessed `Seconded` and `Valid` statements for the given candidate, statements that are double-votes, self-contradictions and so on, should result in issuing a [`ProvisionerMessage`][PM]`::MisbehaviorReport` message for each newly detected case of this kind. ### Validating Candidates. diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 6debd20523..44f62c3e8d 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -211,7 +211,7 @@ enum BitfieldSigningMessage { } enum CandidateBackingMessage { /// Requests a set of backable candidates that could be backed in a child of the given /// relay-parent, referenced by its hash. - GetBackedCandidates(Hash, ResponseChannel>), + GetBackedCandidates(Hash, Vec, ResponseChannel>), /// Note that the Candidate Backing subsystem should second the given candidate in the context of the /// given relay-parent (ref. by hash). This candidate must be validated using the provided PoV. /// The PoV is expected to match the `pov_hash` in the descriptor. @@ -384,7 +384,7 @@ enum ProvisionableData { /// This bitfield indicates the availability of various candidate blocks. Bitfield(Hash, SignedAvailabilityBitfield), /// The Candidate Backing subsystem believes that this candidate is valid, pending availability. - BackedCandidate(BackedCandidate), + BackedCandidate(CandidateReceipt), /// Misbehavior reports are self-contained proofs of validator misbehavior. MisbehaviorReport(Hash, MisbehaviorReport), /// Disputes trigger a broad dispute resolution process. -- GitLab From 41e134ea1acf884c76081ef9083539b3b6a04f85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=85=89=E5=8D=8E?= Date: Fri, 4 Dec 2020 20:16:14 +0800 Subject: [PATCH 089/203] Useless modules and misspellings (#2068) --- runtime/parachains/src/configuration.rs | 2 +- runtime/parachains/src/lib.rs | 1 - runtime/parachains/src/validity.rs | 15 --------------- 3 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 runtime/parachains/src/validity.rs diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 2c413b7d61..a37234238c 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -44,7 +44,7 @@ pub struct HostConfiguration { pub max_code_size: u32, /// The maximum head-data size, in bytes. pub max_head_data_size: u32, - /// THe maximum POV block size, in bytes. + /// The maximum POV block size, in bytes. pub max_pov_size: u32, /// The amount of execution cores to dedicate to parathread execution. pub parathread_cores: u32, diff --git a/runtime/parachains/src/lib.rs b/runtime/parachains/src/lib.rs index 7531def266..dfdf0be285 100644 --- a/runtime/parachains/src/lib.rs +++ b/runtime/parachains/src/lib.rs @@ -29,7 +29,6 @@ pub mod initializer; pub mod paras; pub mod scheduler; pub mod session_info; -pub mod validity; pub mod origin; pub mod dmp; pub mod ump; diff --git a/runtime/parachains/src/validity.rs b/runtime/parachains/src/validity.rs deleted file mode 100644 index 1f45de2df7..0000000000 --- a/runtime/parachains/src/validity.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Polkadot. If not, see . -- GitLab From fad5268213353a404e84fd2bc788a5721baf0d5f Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Fri, 4 Dec 2020 14:19:01 +0100 Subject: [PATCH 090/203] Sudo utility for establishing an HRMP channel (#2067) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Clean up of visibility of helper fns * Document HRMP channel dispatchables * Provide the sudo_establish_hrmp_channel dispatchable function * Apply suggestions from code review Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- runtime/common/src/paras_sudo_wrapper.rs | 24 +++++++++++++++ runtime/parachains/src/hrmp.rs | 38 ++++++++++++++++++++---- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index 1ff03a3640..c0eb9426fc 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -88,5 +88,29 @@ decl_module! { Error::::ExceedsMaxMessageSize.into(), }) } + + /// Forcefully establish a channel from the sender to the recipient. + /// + /// This is equivalent to sending an `Hrmp::hrmp_init_open_channel` extrinsic followed by + /// `Hrmp::hrmp_accept_open_channel`. + #[weight = (1_000, DispatchClass::Operational)] + pub fn sudo_establish_hrmp_channel( + origin, + sender: ParaId, + recipient: ParaId, + max_capacity: u32, + max_message_size: u32, + ) -> DispatchResult { + ensure_root(origin)?; + + >::init_open_channel( + sender, + recipient, + max_capacity, + max_message_size, + )?; + >::accept_open_channel(recipient, sender)?; + Ok(()) + } } } diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index 9ce7220e2d..8021ebf2e3 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -325,8 +325,18 @@ decl_module! { pub struct Module for enum Call where origin: ::Origin { type Error = Error; + /// Initiate opening a channel from a parachain to a given recipient with given channel + /// parameters. + /// + /// - `proposed_max_capacity` - specifies how many messages can be in the channel at once. + /// - `proposed_max_message_size` - specifies the maximum size of any of the messages. + /// + /// These numbers are a subject to the relay-chain configuration limits. + /// + /// The channel can be opened only after the recipient confirms it and only on a session + /// change. #[weight = 0] - fn hrmp_init_open_channel( + pub fn hrmp_init_open_channel( origin, recipient: ParaId, proposed_max_capacity: u32, @@ -342,15 +352,22 @@ decl_module! { Ok(()) } + /// Accept a pending open channel request from the given sender. + /// + /// The channel will be opened only on the next session boundary. #[weight = 0] - fn hrmp_accept_open_channel(origin, sender: ParaId) -> DispatchResult { + pub fn hrmp_accept_open_channel(origin, sender: ParaId) -> DispatchResult { let origin = ensure_parachain(::Origin::from(origin))?; Self::accept_open_channel(origin, sender)?; Ok(()) } + /// Initiate unilateral closing of a channel. The origin must be either the sender or the + /// recipient in the channel being closed. + /// + /// The closure can only happen on a session change. #[weight = 0] - fn hrmp_close_channel(origin, channel_id: HrmpChannelId) -> DispatchResult { + pub fn hrmp_close_channel(origin, channel_id: HrmpChannelId) -> DispatchResult { let origin = ensure_parachain(::Origin::from(origin))?; Self::close_channel(origin, channel_id)?; Ok(()) @@ -808,7 +825,12 @@ impl Module { weight } - pub(super) fn init_open_channel( + /// Initiate opening a channel from a parachain to a given recipient with given channel + /// parameters. + /// + /// Basically the same as [`hrmp_init_open_channel`](Module::hrmp_init_open_channel) but intendend for calling directly from + /// other pallets rather than dispatched. + pub fn init_open_channel( origin: ParaId, recipient: ParaId, proposed_max_capacity: u32, @@ -902,7 +924,11 @@ impl Module { Ok(()) } - pub(super) fn accept_open_channel(origin: ParaId, sender: ParaId) -> Result<(), Error> { + /// Accept a pending open channel request from the given sender. + /// + /// Basically the same as [`hrmp_accept_open_channel`](Module::hrmp_accept_open_channel) but intendend for calling directly from + /// other pallets rather than dispatched. + pub fn accept_open_channel(origin: ParaId, sender: ParaId) -> Result<(), Error> { let channel_id = HrmpChannelId { sender, recipient: origin, @@ -958,7 +984,7 @@ impl Module { Ok(()) } - pub(super) fn close_channel(origin: ParaId, channel_id: HrmpChannelId) -> Result<(), Error> { + fn close_channel(origin: ParaId, channel_id: HrmpChannelId) -> Result<(), Error> { // check if the origin is allowed to close the channel. ensure!( origin == channel_id.sender || origin == channel_id.recipient, -- GitLab From 59ee3ebf67935ad91c93a51e3863e81ac21f59e8 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Fri, 4 Dec 2020 19:28:33 +0100 Subject: [PATCH 091/203] Add tracing for candidate validation failures in backing (#2071) --- node/core/backing/src/lib.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 20a1a4d421..1d17827d0a 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -404,6 +404,12 @@ async fn validate_and_make_available( ValidationResult::Valid(commitments, validation_data) => { // If validation produces a new set of commitments, we vote the candidate as invalid. if commitments.hash() != expected_commitments_hash { + tracing::trace!( + target: LOG_TARGET, + candidate_receipt = ?candidate, + actual_commitments = ?commitments, + "Commitments obtained with validation don't match the announced by the candidate receipt", + ); Err(candidate) } else { let erasure_valid = make_pov_available( @@ -418,11 +424,25 @@ async fn validate_and_make_available( match erasure_valid { Ok(()) => Ok((candidate, commitments, pov.clone())), - Err(InvalidErasureRoot) => Err(candidate), + Err(InvalidErasureRoot) => { + tracing::trace!( + target: LOG_TARGET, + candidate_receipt = ?candidate, + actual_commitments = ?commitments, + "Erasure root doesn't match the announced by the candidate receipt", + ); + Err(candidate) + }, } } } - ValidationResult::Invalid(_reason) => { + ValidationResult::Invalid(reason) => { + tracing::trace!( + target: LOG_TARGET, + candidate_receipt = ?candidate, + reason = ?reason, + "Validation yielded an invalid candidate", + ); Err(candidate) } }; -- GitLab From d72570266223d2ace38a777cad785b63b7fc485b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 4 Dec 2020 22:23:56 +0100 Subject: [PATCH 092/203] Add an upper number of maximum parallel runtime api requests (#2069) * Add an upper number of maximum parallel runtime api requests Instead of spawning all runtime api requests in the background and using all wasm instances. This pr adds a maximum number of parallel requests. * Update node/core/runtime-api/src/lib.rs Co-authored-by: Sergei Shulepov * Review feedback * Increase instances * Add warning * Update node/core/runtime-api/src/lib.rs Co-authored-by: Sergei Shulepov Co-authored-by: Sergei Shulepov --- node/core/runtime-api/src/lib.rs | 154 ++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 24 deletions(-) diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index 16fd080ff2..b3b8092966 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -36,22 +36,38 @@ use polkadot_primitives::v1::{Block, BlockId, Hash, ParachainHost}; use sp_api::ProvideRuntimeApi; use sp_core::traits::SpawnNamed; -use futures::prelude::*; -use std::sync::Arc; +use futures::{prelude::*, stream::FuturesUnordered, channel::oneshot, select}; +use std::{sync::Arc, collections::VecDeque, pin::Pin}; const LOG_TARGET: &str = "runtime_api"; +/// The number of maximum runtime api requests can be executed in parallel. Further requests will be buffered. +const MAX_PARALLEL_REQUESTS: usize = 4; + +/// The name of the blocking task that executes a runtime api request. +const API_REQUEST_TASK_NAME: &str = "polkadot-runtime-api-request"; + /// The `RuntimeApiSubsystem`. See module docs for more details. pub struct RuntimeApiSubsystem { client: Arc, metrics: Metrics, spawn_handle: Box, + /// If there are [`MAX_PARALLEL_REQUESTS`] requests being executed, we buffer them in here until they can be executed. + waiting_requests: VecDeque<(Pin + Send>>, oneshot::Receiver<()>)>, + /// All the active runtime api requests that are currently being executed. + active_requests: FuturesUnordered>, } impl RuntimeApiSubsystem { /// Create a new Runtime API subsystem wrapping the given client and metrics. pub fn new(client: Arc, metrics: Metrics, spawn_handle: impl SpawnNamed + 'static) -> Self { - RuntimeApiSubsystem { client, metrics, spawn_handle: Box::new(spawn_handle) } + RuntimeApiSubsystem { + client, + metrics, + spawn_handle: Box::new(spawn_handle), + waiting_requests: Default::default(), + active_requests: Default::default(), + } } } @@ -68,34 +84,82 @@ impl Subsystem for RuntimeApiSubsystem where } } +impl RuntimeApiSubsystem where + Client: ProvideRuntimeApi + Send + 'static + Sync, + Client::Api: ParachainHost, +{ + /// Spawn a runtime api request. + /// + /// If there are already [`MAX_PARALLEL_REQUESTS`] requests being executed, the request will be buffered. + fn spawn_request(&mut self, relay_parent: Hash, request: Request) { + let client = self.client.clone(); + let metrics = self.metrics.clone(); + let (sender, receiver) = oneshot::channel(); + + let request = async move { + make_runtime_api_request( + client, + metrics, + relay_parent, + request, + ); + let _ = sender.send(()); + }.boxed(); + + if self.active_requests.len() >= MAX_PARALLEL_REQUESTS { + self.waiting_requests.push_back((request, receiver)); + + if self.waiting_requests.len() > MAX_PARALLEL_REQUESTS * 10 { + tracing::warn!( + target: LOG_TARGET, + "{} runtime api requests waiting to be executed.", + self.waiting_requests.len(), + ) + } + } else { + self.spawn_handle.spawn_blocking(API_REQUEST_TASK_NAME, request); + self.active_requests.push(receiver); + } + } + + /// Poll the active runtime api requests. + async fn poll_requests(&mut self) { + // If there are no active requests, this future should be pending forever. + if self.active_requests.len() == 0 { + return futures::pending!() + } + + // If there are active requests, this will always resolve to `Some(_)` when a request is finished. + let _ = self.active_requests.next().await; + + if let Some((req, recv)) = self.waiting_requests.pop_front() { + self.spawn_handle.spawn_blocking(API_REQUEST_TASK_NAME, req); + self.active_requests.push(recv); + } + } +} + #[tracing::instrument(skip(ctx, subsystem), fields(subsystem = LOG_TARGET))] async fn run( mut ctx: impl SubsystemContext, - subsystem: RuntimeApiSubsystem, + mut subsystem: RuntimeApiSubsystem, ) -> SubsystemResult<()> where Client: ProvideRuntimeApi + Send + Sync + 'static, Client::Api: ParachainHost, { loop { - match ctx.recv().await? { - FromOverseer::Signal(OverseerSignal::Conclude) => return Ok(()), - FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {}, - FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {}, - FromOverseer::Communication { msg } => match msg { - RuntimeApiMessage::Request(relay_parent, request) => { - let client = subsystem.client.clone(); - let metrics = subsystem.metrics.clone(); - - subsystem.spawn_handle.spawn_blocking("polkadot-runtime-api-request", async move { - make_runtime_api_request( - client, - metrics, - relay_parent, - request, - ) - }.boxed()) - }, - } + select! { + req = ctx.recv().fuse() => match req? { + FromOverseer::Signal(OverseerSignal::Conclude) => return Ok(()), + FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {}, + FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {}, + FromOverseer::Communication { msg } => match msg { + RuntimeApiMessage::Request(relay_parent, request) => { + subsystem.spawn_request(relay_parent, request); + }, + } + }, + _ = subsystem.poll_requests().fuse() => {}, } } } @@ -213,7 +277,7 @@ mod tests { }; use polkadot_node_subsystem_test_helpers as test_helpers; use sp_core::testing::TaskExecutor; - use std::collections::{HashMap, BTreeMap}; + use std::{collections::{HashMap, BTreeMap}, sync::{Arc, Mutex}}; use futures::channel::oneshot; #[derive(Default, Clone)] @@ -221,6 +285,7 @@ mod tests { validators: Vec, validator_groups: Vec>, availability_cores: Vec, + availability_cores_wait: Arc>, validation_data: HashMap, session_index_for_child: SessionIndex, session_info: HashMap, @@ -261,6 +326,7 @@ mod tests { } fn availability_cores(&self) -> Vec { + let _ = self.availability_cores_wait.lock().unwrap(); self.availability_cores.clone() } @@ -916,4 +982,44 @@ mod tests { futures::executor::block_on(future::join(subsystem_task, test_task)); } + + #[test] + fn multiple_requests_in_parallel_are_working() { + let (ctx, mut ctx_handle) = test_helpers::make_subsystem_context(TaskExecutor::new()); + let runtime_api = Arc::new(MockRuntimeApi::default()); + let relay_parent = [1; 32].into(); + let spawner = sp_core::testing::TaskExecutor::new(); + let mutex = runtime_api.availability_cores_wait.clone(); + + let subsystem = RuntimeApiSubsystem::new(runtime_api.clone(), Metrics(None), spawner); + let subsystem_task = run(ctx, subsystem).map(|x| x.unwrap()); + let test_task = async move { + // Make all requests block until we release this mutex. + let lock = mutex.lock().unwrap(); + + let mut receivers = Vec::new(); + + for _ in 0..MAX_PARALLEL_REQUESTS * 10 { + let (tx, rx) = oneshot::channel(); + + ctx_handle.send(FromOverseer::Communication { + msg: RuntimeApiMessage::Request(relay_parent, Request::AvailabilityCores(tx)) + }).await; + + receivers.push(rx); + } + + let join = future::join_all(receivers); + + drop(lock); + + join.await + .into_iter() + .for_each(|r| assert_eq!(r.unwrap().unwrap(), runtime_api.availability_cores)); + + ctx_handle.send(FromOverseer::Signal(OverseerSignal::Conclude)).await; + }; + + futures::executor::block_on(future::join(subsystem_task, test_task)); + } } -- GitLab From 7a2890b16f2def1c0f9d676edc459a0b9acd7b62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Dec 2020 12:28:40 +0100 Subject: [PATCH 093/203] Bump smallvec from 1.5.0 to 1.5.1 (#2076) Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.5.0 to 1.5.1. - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.5.0...v1.5.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 80 +++++++++---------- node/core/av-store/Cargo.toml | 2 +- .../availability-distribution/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/pov-distribution/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 12 files changed, 51 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b75d9ca45..31ba6efd82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -854,7 +854,7 @@ dependencies = [ "log", "regalloc", "serde", - "smallvec 1.5.0", + "smallvec 1.5.1", "target-lexicon", "thiserror", ] @@ -892,7 +892,7 @@ checksum = "2ef419efb4f94ecc02e5d9fbcc910d2bb7f0040e2de570e63a454f883bc891d6" dependencies = [ "cranelift-codegen", "log", - "smallvec 1.5.0", + "smallvec 1.5.1", "target-lexicon", ] @@ -1548,7 +1548,7 @@ dependencies = [ "parity-scale-codec", "paste", "serde", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-arithmetic", "sp-core", "sp-inherents", @@ -2646,7 +2646,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -2684,7 +2684,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0315ef2f688e33844400b31f11c263f2b3dc21d8b9355c6891c5f185fae43f9a" dependencies = [ "parity-util-mem", - "smallvec 1.5.0", + "smallvec 1.5.1", ] [[package]] @@ -2713,7 +2713,7 @@ dependencies = [ "parking_lot 0.10.2", "regex", "rocksdb", - "smallvec 1.5.0", + "smallvec 1.5.1", ] [[package]] @@ -2807,7 +2807,7 @@ dependencies = [ "parity-multiaddr", "parking_lot 0.11.1", "pin-project 1.0.2", - "smallvec 1.5.0", + "smallvec 1.5.1", "wasm-timer", ] @@ -2839,7 +2839,7 @@ dependencies = [ "ring", "rw-stream-sink", "sha2 0.9.1", - "smallvec 1.5.0", + "smallvec 1.5.1", "thiserror", "unsigned-varint", "void", @@ -2893,7 +2893,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "smallvec 1.5.0", + "smallvec 1.5.1", ] [[package]] @@ -2917,7 +2917,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.1", - "smallvec 1.5.0", + "smallvec 1.5.1", "unsigned-varint", "wasm-timer", ] @@ -2934,7 +2934,7 @@ dependencies = [ "log", "prost", "prost-build", - "smallvec 1.5.0", + "smallvec 1.5.1", "wasm-timer", ] @@ -2957,7 +2957,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.1", - "smallvec 1.5.0", + "smallvec 1.5.1", "uint", "unsigned-varint", "void", @@ -2981,7 +2981,7 @@ dependencies = [ "log", "net2", "rand 0.7.3", - "smallvec 1.5.0", + "smallvec 1.5.1", "void", "wasm-timer", ] @@ -3000,7 +3000,7 @@ dependencies = [ "nohash-hasher", "parking_lot 0.11.1", "rand 0.7.3", - "smallvec 1.5.0", + "smallvec 1.5.1", "unsigned-varint", ] @@ -3087,7 +3087,7 @@ dependencies = [ "lru", "minicbor", "rand 0.7.3", - "smallvec 1.5.0", + "smallvec 1.5.1", "unsigned-varint", "wasm-timer", ] @@ -3103,7 +3103,7 @@ dependencies = [ "libp2p-core", "log", "rand 0.7.3", - "smallvec 1.5.0", + "smallvec 1.5.1", "void", "wasm-timer", ] @@ -3565,7 +3565,7 @@ dependencies = [ "futures 0.3.8", "log", "pin-project 1.0.2", - "smallvec 1.5.0", + "smallvec 1.5.1", "unsigned-varint", ] @@ -4249,7 +4249,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "serde", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "sp-io", "sp-runtime", @@ -4428,7 +4428,7 @@ dependencies = [ "parity-util-mem-derive", "parking_lot 0.10.2", "primitive-types", - "smallvec 1.5.0", + "smallvec 1.5.1", "winapi 0.3.9", ] @@ -4539,7 +4539,7 @@ dependencies = [ "cloudabi 0.0.3", "libc", "redox_syscall", - "smallvec 1.5.0", + "smallvec 1.5.1", "winapi 0.3.9", ] @@ -4554,7 +4554,7 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec 1.5.0", + "smallvec 1.5.1", "winapi 0.3.9", ] @@ -4798,7 +4798,7 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "sc-keystore", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-application-crypto", "sp-core", "sp-keyring", @@ -4844,7 +4844,7 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "sp-keyring", "thiserror", @@ -4932,7 +4932,7 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "sc-service", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "thiserror", "tracing", @@ -5123,7 +5123,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "substrate-prometheus-endpoint", "thiserror", @@ -5148,7 +5148,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "tracing", "tracing-futures", @@ -5238,7 +5238,7 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "sp-keyring", "thiserror", @@ -5351,7 +5351,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -5641,7 +5641,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -6282,7 +6282,7 @@ version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" dependencies = [ - "smallvec 1.5.0", + "smallvec 1.5.1", ] [[package]] @@ -6313,7 +6313,7 @@ checksum = "b9ba8aaf5fe7cf307c6dbdaeed85478961d29e25e3bee5169e11b92fa9f027a8" dependencies = [ "log", "rustc-hash", - "smallvec 1.5.0", + "smallvec 1.5.1", ] [[package]] @@ -6426,7 +6426,7 @@ dependencies = [ "polkadot-runtime-parachains", "serde", "serde_derive", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -7154,7 +7154,7 @@ dependencies = [ "serde_json", "slog", "slog_derive", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-arithmetic", "sp-blockchain", "sp-consensus", @@ -7880,9 +7880,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" +checksum = "ae524f056d7d770e174287294f562e95044c68e88dec909a00d2094805db9d75" [[package]] name = "snow" @@ -8420,7 +8420,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", "rand 0.7.3", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-core", "sp-externalities", "sp-panic-handler", @@ -9436,7 +9436,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec 1.5.0", + "smallvec 1.5.1", "thread_local", "tracing", "tracing-core", @@ -9460,7 +9460,7 @@ dependencies = [ "hashbrown 0.8.0", "log", "rustc-hex", - "smallvec 1.5.0", + "smallvec 1.5.1", ] [[package]] @@ -9838,7 +9838,7 @@ dependencies = [ "log", "region", "rustc-demangle", - "smallvec 1.5.0", + "smallvec 1.5.1", "target-lexicon", "wasmparser 0.59.0", "wasmtime-environ", @@ -10098,7 +10098,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.0", + "smallvec 1.5.1", "sp-api", "sp-authority-discovery", "sp-block-builder", diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 210d3f8d88..21c2601453 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -26,7 +26,7 @@ sc-service = { git = "https://github.com/paritytech/substrate", branch = "master log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" -smallvec = "1.5.0" +smallvec = "1.5.1" kvdb-memorydb = "0.7.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index 0a6bc26564..dd1c6f61c3 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -27,5 +27,5 @@ sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "maste futures-timer = "3.0.2" env_logger = "0.8.2" assert_matches = "1.4.0" -smallvec = "1.5.0" +smallvec = "1.5.1" log = "0.4.11" diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 6d390fb1db..337dc6e1e8 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -20,7 +20,7 @@ polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsys log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" -smallvec = "1.5.0" +smallvec = "1.5.1" futures-timer = "3.0.2" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 6f2bc640b0..2482758a69 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -19,7 +19,7 @@ polkadot-node-network-protocol = { path = "../../network/protocol" } assert_matches = "1.4.0" env_logger = "0.8.1" log = "0.4.11" -smallvec = "1.4.2" +smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 6f3db3acd8..8ccc0d39f8 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -20,7 +20,7 @@ polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.5.0" +smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index aedbe9dd71..e70e2171ec 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -20,7 +20,7 @@ polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.5.0" +smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.22" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 7db1568bed..206ea2b68d 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.5.0" +smallvec = "1.5.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 01e359f81c..d0ef5253b8 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.5.0" +smallvec = "1.5.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index c1f72cf24b..de27085764 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -9,7 +9,7 @@ build = "build.rs" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.5.0" +smallvec = "1.5.1" frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index e1844baa3a..3715c403d3 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.5.0" +smallvec = "1.5.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 8a3dd580ba..23a792d614 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.117", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.5.0" +smallvec = "1.5.1" static_assertions = "1.1.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -- GitLab From 6ab99228986b8ecc2bb64bff42a5766c0884d4c5 Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Mon, 7 Dec 2020 13:46:35 +0100 Subject: [PATCH 094/203] Update release documentation + checklist (#2079) * add instructions for extrinsic verification * update release documentation --- .github/ISSUE_TEMPLATE/release.md | 47 ++++++++++++++++----- .github/workflows/publish-draft-release.yml | 2 +- .github/workflows/release-candidate.yml | 2 +- RELEASE.md | 25 ++++++++--- 4 files changed, 57 insertions(+), 19 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/release.md b/.github/ISSUE_TEMPLATE/release.md index ad2120ae09..7dcf9ed190 100644 --- a/.github/ISSUE_TEMPLATE/release.md +++ b/.github/ISSUE_TEMPLATE/release.md @@ -8,23 +8,31 @@ title: Polkadot {{ env.VERSION }} Release checklist This is the release checklist for Polkadot {{ env.VERSION }}. **All** following checks should be completed before publishing a new release of the Polkadot/Kusama/Westend runtime or client. The current release candidate can be -checked out with `git checkout {{ env.VERSION }}` +checked out with `git checkout release-{{ env.VERSION }}` ### Runtime Releases +These checks should be performed on the codebase prior to forking to a release- +candidate branch. + - [ ] Verify [`spec_version`](#spec-version) has been incremented since the last release for any native runtimes from any existing use on public (non-private/test) networks. -- [ ] Verify [new migrations](#new-migrations) complete successfully, and the - runtime state is correctly updated. - [ ] Verify previously [completed migrations](#old-migrations-removed) are - removed. + removed for any public (non-private/test) networks. - [ ] Verify pallet and [extrinsic ordering](#extrinsic-ordering) has stayed the same. Bump `transaction_version` if not. - [ ] Verify new extrinsics have been correctly whitelisted/blacklisted for [proxy filters](#proxy-filtering). - [ ] Verify [benchmarks](#benchmarks) have been updated for any modified runtime logic. + +The following checks can be performed after we have forked off to the release- +candidate branch. + +- [ ] Verify [new migrations](#new-migrations) complete successfully, and the + runtime state is correctly updated for any public (non-private/test) + networks. - [ ] Verify [Polkadot JS API](#polkadot-js) are up to date with the latest runtime changes. @@ -59,7 +67,8 @@ Add any necessary assets to the release. They should include: The release notes should list: -- The priority of the release (i.e., how quickly users should upgrade) +- The priority of the release (i.e., how quickly users should upgrade) - this is + based on the max priority of any *client* changes. - Which native runtimes and their versions are included - The proposal hashes of the runtimes as built with [srtool](https://gitlab.com/chevdor/srtool) @@ -77,16 +86,17 @@ A runtime upgrade must bump the spec number. This may follow a pattern with the client release (e.g. runtime v12 corresponds to v0.8.12, even if the current runtime is not v11). +### Old Migrations Removed + +Any previous `on_runtime_upgrade` functions from old upgrades must be removed +to prevent them from executing a second time. The `on_runtime_upgrade` function +can be found in `runtime//src/lib.rs`. + ### New Migrations Ensure that any migrations that are required due to storage or logic changes are included in the `on_runtime_upgrade` function of the appropriate pallets. -### Old Migrations Removed - -Any previous `on_runtime_upgrade` functions from old upgrades must be removed -to prevent them from executing a second time. - ### Extrinsic Ordering Offline signing libraries depend on a consistent ordering of call indices and @@ -94,6 +104,23 @@ functions. Compare the metadata of the current and new runtimes and ensure that the `module index, call index` tuples map to the same set of functions. In case of a breaking change, increase `transaction_version`. +To verify the order has not changed: + +1. Download the latest release-candidate binary either from the draft-release +on Github, or +[AWS](https://releases.parity.io/polkadot/x86_64-debian:stretch/{{ env.VERSION }}-rc1/polkadot) +(adjust the rc in this URL as necessary). +2. Run the release-candidate binary using a local chain: +`./polkadot --chain=polkadot-local` or `./polkadot --chain=kusama.local` +3. Use [`polkadot-js-tools`](https://github.com/polkadot-js/tools) to compare +the metadata: + - For Polkadot: `docker run --network host jacogr/polkadot-js-tools metadata wss://rpc.polkadot.io ws://localhost:9944` + - For Kusama: `docker run --network host jacogr/polkadot-js-tools metadata wss://kusama-rpc.polkadot.io ws://localhost:9944` +4. Things to look for in the output are lines like: + - `[Identity] idx 28 -> 25 (calls 15)` - indicates the index for `Identity` has changed + - `[+] Society, Recovery` - indicates the new version includes 2 additional modules/pallets. + - If no indices have changed, every modules line should look something like `[Identity] idx 25 (calls 15)` + Note: Adding new functions to the runtime does not constitute a breaking change as long as they are added to the end of a pallet (i.e., does not break any other call index). diff --git a/.github/workflows/publish-draft-release.yml b/.github/workflows/publish-draft-release.yml index c2f45cf862..05b5dc652e 100644 --- a/.github/workflows/publish-draft-release.yml +++ b/.github/workflows/publish-draft-release.yml @@ -139,5 +139,5 @@ jobs: with: room_id: ${{ secrets.INTERNAL_POLKADOT_MATRIX_ROOM_ID }} access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }} - message: "**New version of polkadot tagged**: ${{ github.ref }}
Gav: Draft release created: ${{ needs.publish-draft-release.outputs.release_url }}" + message: "**New version of polkadot tagged**: ${{ github.ref }}
Draft release created: ${{ needs.publish-draft-release.outputs.release_url }}" server: "matrix.parity.io" diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml index acbd7dbabe..515d9a143b 100644 --- a/.github/workflows/release-candidate.yml +++ b/.github/workflows/release-candidate.yml @@ -45,7 +45,7 @@ jobs: if: steps.compute_tag.outputs.first_rc == 'true' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: ${{ steps.compute_tag.outputs.version }} + VERSION: ${{ steps.compute_tag.outputs.version }} with: filename: .github/ISSUE_TEMPLATE/release.md - uses: s3krit/matrix-message-action@v0.0.2 diff --git a/RELEASE.md b/RELEASE.md index e0e219ad1a..554cfb8e45 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -3,14 +3,14 @@ Polkadot Release Process ### Branches * release-candidate branch: The branch used for staging of the next release. - Named like `release-v0.8.26` + Named like `release-v0.8.26` * release branch: The branch to which successful release-candidates are merged and tagged with the new version. Named literally `release`. ### Notes * The release-candidate branch *must* be made in the paritytech/polkadot repo in order for release automation to work correctly -* Any new pushes/merges to the release-candidate branch (for example, +* Any new pushes/merges to the release-candidate branch (for example, refs/heads/release-v0.8.26) will result in the rc index being bumped (e.g., v0.8.26-rc1 to v0.8.26-rc2) and new wasms built. @@ -32,14 +32,25 @@ automated and require no human action. completed 6. (optional) If a fix is required to the release-candidate: 1. Merge the fix with `master` first - 2. Checkout the release-candidate branch and merge `master` - 3. Revert all changes since the creation of the release-candidate that are - **not** required for the fix. - 4. Push the release-candidate branch to Github - this is now the new release- + 2. Cherry-pick the commit from `master` to `release-v0.8.26`, fixing any + merge conflicts. Try to avoid unnecessarily bumping crates. + 3. Push the release-candidate branch to Github - this is now the new release- candidate + 4. Depending on the cherry-picked changes, it may be necessary to perform some + or all of the manual tests again. 7. Once happy with the release-candidate, perform the release using the release script located at `scripts/release.sh` (or perform the steps in that script manually): - `./scripts/release.sh v0.8.26` 8. NOACTION: The HEAD of the `release` branch will be tagged with `v0.8.26`, - and a final release will be created on Github. \ No newline at end of file + and a final draft release will be created on Github. + +### Security releases + +Occasionally there may be changes that need to be made to the most recently +released version of Polkadot, without taking *every* change to `master` since +the last release. For example, in the event of a security vulnerability being +found, where releasing a fixed version is a matter of some expediency. In cases +like this, the fix should first be merged with master, cherry-picked to a branch +forked from `release`, tested, and then finally merged with `release`. A +sensible versioning scheme for changes like this is `vX.Y.Z-1`. -- GitLab From 42917406a56b5c454176de71c630fe00d5d19aa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 7 Dec 2020 15:47:39 +0100 Subject: [PATCH 095/203] Fix tests on master (#2080) Because of a bug in the test script, we didn't stopped CI when the main tests are failed. --- node/core/backing/src/lib.rs | 48 ++++++++++-------- node/core/provisioner/src/lib.rs | 6 +-- node/core/provisioner/src/tests.rs | 65 +++++++++++++++---------- node/overseer/src/lib.rs | 2 +- node/test/service/tests/build-blocks.rs | 2 +- primitives/src/v1.rs | 5 ++ scripts/gitlab/test_linux_stable.sh | 1 + 7 files changed, 78 insertions(+), 51 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 1d17827d0a..54dbe295f7 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -754,7 +754,7 @@ impl CandidateBackingJob { self.background_validate_and_make_available(BackgroundValidationParams { tx_from: self.tx_from.clone(), tx_command: self.background_validation_tx.clone(), - candidate: candidate, + candidate, relay_parent: self.parent, pov: None, validator_index: self.table_context.validator.as_ref().map(|v| v.index()), @@ -1644,28 +1644,38 @@ mod tests { AllMessages::Provisioner( ProvisionerMessage::ProvisionableData( _, - ProvisionableData::BackedCandidate(BackedCandidate { - candidate, - validity_votes, - validator_indices, + ProvisionableData::BackedCandidate(CandidateReceipt { + descriptor, + .. }) ) - ) if candidate == candidate_a => { - assert_eq!(validity_votes.len(), 3); - - assert!(validity_votes.contains( - &ValidityAttestation::Implicit(signed_a.signature().clone()) - )); - assert!(validity_votes.contains( - &ValidityAttestation::Explicit(signed_b.signature().clone()) - )); - assert!(validity_votes.contains( - &ValidityAttestation::Explicit(signed_c.signature().clone()) - )); - assert_eq!(validator_indices, bitvec::bitvec![Lsb0, u8; 1, 0, 1, 1]); - } + ) if descriptor == candidate_a.descriptor + ); + + let (tx, rx) = oneshot::channel(); + let msg = CandidateBackingMessage::GetBackedCandidates( + test_state.relay_parent, + vec![candidate_a.hash()], + tx, ); + virtual_overseer.send(FromOverseer::Communication{ msg }).await; + + let candidates = rx.await.unwrap(); + assert_eq!(1, candidates.len()); + assert_eq!(candidates[0].validity_votes.len(), 3); + + assert!(candidates[0].validity_votes.contains( + &ValidityAttestation::Implicit(signed_a.signature().clone()) + )); + assert!(candidates[0].validity_votes.contains( + &ValidityAttestation::Explicit(signed_b.signature().clone()) + )); + assert!(candidates[0].validity_votes.contains( + &ValidityAttestation::Explicit(signed_c.signature().clone()) + )); + assert_eq!(candidates[0].validator_indices, bitvec::bitvec![Lsb0, u8; 1, 0, 1, 1]); + virtual_overseer.send(FromOverseer::Signal( OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::stop_work(test_state.relay_parent))) ).await; diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index be3f38ba1e..4e985a2622 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -17,7 +17,7 @@ //! The provisioner is responsible for assembling a relay chain block //! from a set of available parachain candidates of its choice. -#![deny(missing_docs, unused_crate_dependencies, unused_results)] +#![deny(missing_docs, unused_crate_dependencies)] use bitvec::vec::BitVec; use futures::{ @@ -455,8 +455,8 @@ async fn select_candidates( // maps to either 0 or 1 backed candidate, and the hashes correspond. Therefore, by checking them // in order, we can ensure that the backed candidates are also in order. let mut backed_idx = 0; - for selected in selected_candidates.iter() { - if *selected == candidates.get(backed_idx).ok_or(Error::BackedCandidateOrderingProblem)?.hash() { + for selected in selected_candidates { + if selected == candidates.get(backed_idx).ok_or(Error::BackedCandidateOrderingProblem)?.hash() { backed_idx += 1; } } diff --git a/node/core/provisioner/src/tests.rs b/node/core/provisioner/src/tests.rs index 1cfe0cf29f..cc3750591e 100644 --- a/node/core/provisioner/src/tests.rs +++ b/node/core/provisioner/src/tests.rs @@ -192,13 +192,13 @@ mod select_availability_bitfields { mod select_candidates { use futures_timer::Delay; use super::super::*; - use super::{build_occupied_core, default_bitvec, occupied_core, scheduled_core}; + use super::{build_occupied_core, occupied_core, scheduled_core, default_bitvec}; use polkadot_node_subsystem::messages::{ AllMessages, RuntimeApiMessage, RuntimeApiRequest::{AvailabilityCores, PersistedValidationData as PersistedValidationDataReq}, }; use polkadot_primitives::v1::{ - BlockNumber, CandidateDescriptor, CommittedCandidateReceipt, PersistedValidationData, + BlockNumber, CandidateDescriptor, PersistedValidationData, CommittedCandidateReceipt, CandidateCommitments, }; const BLOCK_UNDER_PRODUCTION: BlockNumber = 128; @@ -297,7 +297,7 @@ mod select_candidates { ] } - async fn mock_overseer(mut receiver: mpsc::Receiver) { + async fn mock_overseer(mut receiver: mpsc::Receiver, expected: Vec) { use ChainApiMessage::BlockNumber; use RuntimeApiMessage::Request; @@ -313,8 +313,12 @@ mod select_candidates { FromJobCommand::SendMessage(AllMessages::RuntimeApi(Request(_parent_hash, AvailabilityCores(tx)))) => { tx.send(Ok(mock_availability_cores())).unwrap() } - // non-exhaustive matches are fine for testing - _ => unimplemented!(), + FromJobCommand::SendMessage( + AllMessages::CandidateBacking(CandidateBackingMessage::GetBackedCandidates(_, _, sender)) + ) => { + let _ = sender.send(expected.clone()); + } + _ => panic!("Unexpected message: {:?}", from_job), } } } @@ -341,10 +345,8 @@ mod select_candidates { #[test] fn can_succeed() { - test_harness(mock_overseer, |mut tx: mpsc::Sender| async move { - let result = select_candidates(&[], &[], &[], Default::default(), &mut tx).await; - println!("{:?}", result); - assert!(result.is_ok()); + test_harness(|r| mock_overseer(r, Vec::new()), |mut tx: mpsc::Sender| async move { + select_candidates(&[], &[], &[], Default::default(), &mut tx).await.unwrap(); }) } @@ -358,23 +360,19 @@ mod select_candidates { let empty_hash = PersistedValidationData::::default().hash(); - let candidate_template = BackedCandidate { - candidate: CommittedCandidateReceipt { - descriptor: CandidateDescriptor { - persisted_validation_data_hash: empty_hash, - ..Default::default() - }, + let candidate_template = CandidateReceipt { + descriptor: CandidateDescriptor { + persisted_validation_data_hash: empty_hash, ..Default::default() }, - validity_votes: Vec::new(), - validator_indices: default_bitvec(n_cores), + commitments_hash: CandidateCommitments::default().hash(), }; let candidates: Vec<_> = std::iter::repeat(candidate_template) .take(mock_cores.len()) .enumerate() .map(|(idx, mut candidate)| { - candidate.candidate.descriptor.para_id = idx.into(); + candidate.descriptor.para_id = idx.into(); candidate }) .cycle() @@ -386,12 +384,12 @@ mod select_candidates { candidate } else if idx < mock_cores.len() * 2 { // for the second repetition of the candidates, give them the wrong hash - candidate.candidate.descriptor.persisted_validation_data_hash + candidate.descriptor.persisted_validation_data_hash = Default::default(); candidate } else { // third go-around: right hash, wrong para_id - candidate.candidate.descriptor.para_id = idx.into(); + candidate.descriptor.para_id = idx.into(); candidate } }) @@ -403,15 +401,28 @@ mod select_candidates { .map(|&idx| candidates[idx].clone()) .collect(); - test_harness(mock_overseer, |mut tx: mpsc::Sender| async move { + let expected_backed = expected_candidates + .iter() + .map(|c| BackedCandidate { + candidate: CommittedCandidateReceipt { descriptor: c.descriptor.clone(), ..Default::default() }, + validity_votes: Vec::new(), + validator_indices: default_bitvec(n_cores), + }) + .collect(); + + test_harness(|r| mock_overseer(r, expected_backed), |mut tx: mpsc::Sender| async move { let result = select_candidates(&mock_cores, &[], &candidates, Default::default(), &mut tx) - .await; - - if result.is_err() { - println!("{:?}", result); - } - assert_eq!(result.unwrap(), expected_candidates); + .await.unwrap(); + + result.into_iter() + .for_each(|c| + assert!( + expected_candidates.iter().any(|c2| c.candidate.corresponds_to(c2)), + "Failed to find candidate: {:?}", + c, + ) + ); }) } } diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 661ef79b06..bbd9f626fe 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -2165,7 +2165,7 @@ mod tests { fn test_candidate_backing_msg() -> CandidateBackingMessage { let (sender, _) = oneshot::channel(); - CandidateBackingMessage::GetBackedCandidates(Default::default(), sender) + CandidateBackingMessage::GetBackedCandidates(Default::default(), Vec::new(), sender) } fn test_candidate_selection_msg() -> CandidateSelectionMessage { diff --git a/node/test/service/tests/build-blocks.rs b/node/test/service/tests/build-blocks.rs index 777f266a03..bad22e7f0f 100644 --- a/node/test/service/tests/build-blocks.rs +++ b/node/test/service/tests/build-blocks.rs @@ -21,7 +21,7 @@ use sp_keyring::Sr25519Keyring; #[substrate_test_utils::test] async fn ensure_test_service_build_blocks(task_executor: TaskExecutor) { - sc_cli::init_logger("", Default::default(), None).expect("Sets up logger"); + sc_cli::init_logger("", Default::default(), None, false).expect("Sets up logger"); let mut alice = run_validator_node( task_executor.clone(), diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 1b46980684..3985254028 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -231,6 +231,11 @@ impl CommittedCandidateReceipt { pub fn hash(&self) -> CandidateHash where H: Encode { self.to_plain().hash() } + + /// Does this committed candidate receipt corrensponds to the given [`CandidateReceipt`]? + pub fn corresponds_to(&self, receipt: &CandidateReceipt) -> bool where H: PartialEq { + receipt.descriptor == self.descriptor && receipt.commitments_hash == self.commitments.hash() + } } impl PartialOrd for CommittedCandidateReceipt { diff --git a/scripts/gitlab/test_linux_stable.sh b/scripts/gitlab/test_linux_stable.sh index 17f5c80a72..b841d8abec 100755 --- a/scripts/gitlab/test_linux_stable.sh +++ b/scripts/gitlab/test_linux_stable.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +set -e #shellcheck source=lib.sh source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh" -- GitLab From 1b7fa97326f0d39a0617918b52c81bd9b5524a2a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Dec 2020 16:07:29 +0100 Subject: [PATCH 096/203] Bump serde from 1.0.117 to 1.0.118 (#2075) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.117 to 1.0.118. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.117...v1.0.118) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- node/service/Cargo.toml | 2 +- primitives/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 31ba6efd82..c9449a693e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7667,18 +7667,18 @@ checksum = "f97841a747eef040fcd2e7b3b9a220a7205926e60488e673d9e4926d27772ce5" [[package]] name = "serde" -version = "1.0.117" +version = "1.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.117" +version = "1.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 74a55445ef..541f4ab391 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -56,7 +56,7 @@ futures = "0.3.8" hex-literal = "0.3.1" tracing = "0.1.22" tracing-futures = "0.2.4" -serde = { version = "1.0.117", features = ["derive"] } +serde = { version = "1.0.118", features = ["derive"] } # Polkadot polkadot-node-core-proposer = { path = "../core/proposer" } diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 7d00140054..9e079e80a5 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -serde = { version = "1.0.117", optional = true, features = ["derive"] } +serde = { version = "1.0.118", optional = true, features = ["derive"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["bit-vec", "derive"] } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 63f8ca9531..78d5da89b2 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -9,7 +9,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.117", default-features = false } +serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 206ea2b68d..01bc5a4029 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -10,7 +10,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.117", default-features = false } +serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" smallvec = "1.5.1" diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 9e15b98c94..58e84a1241 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -9,7 +9,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = "0.4.11" rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.117", features = [ "derive" ], optional = true } +serde = { version = "1.0.118", features = [ "derive" ], optional = true } derive_more = "0.99.11" sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index d0ef5253b8..6226b4aedc 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -10,7 +10,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.117", default-features = false } +serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" smallvec = "1.5.1" diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index de27085764..84cc968879 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } -serde = { version = "1.0.117", default-features = false } +serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.5.1" diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 3715c403d3..230cced1ac 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -10,7 +10,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.117", default-features = false } +serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.5.1" diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 23a792d614..563d451b55 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -10,7 +10,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } -serde = { version = "1.0.117", default-features = false } +serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.5.1" static_assertions = "1.1.0" -- GitLab From 305d9414132ab2fb96f1b50cfbdb947f6be74793 Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Mon, 7 Dec 2020 17:32:32 +0100 Subject: [PATCH 097/203] Bump substrate, and bump version to v0.8.27 (#2082) * Bump version from v0.8.26 to v0.8.27 * bump substrate --- Cargo.lock | 309 +++++++++++---------- Cargo.toml | 2 +- cli/Cargo.toml | 2 +- erasure-coding/Cargo.toml | 2 +- node/test/client/Cargo.toml | 2 +- node/test/service/Cargo.toml | 2 +- parachain/Cargo.toml | 2 +- parachain/test-parachains/adder/Cargo.toml | 2 +- parachain/test-parachains/halt/Cargo.toml | 2 +- primitives/Cargo.toml | 2 +- rpc/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- statement-table/Cargo.toml | 2 +- validation/Cargo.toml | 2 +- 19 files changed, 173 insertions(+), 172 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c9449a693e..c06db85aa9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1462,7 +1462,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", ] @@ -1470,7 +1470,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -1488,7 +1488,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "chrono", "frame-benchmarking", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -1526,7 +1526,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "serde", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "bitflags", "frame-metadata", @@ -1562,7 +1562,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1573,7 +1573,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1585,7 +1585,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1595,7 +1595,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -1625,7 +1625,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-api", @@ -2595,7 +2595,7 @@ dependencies = [ [[package]] name = "kusama-runtime" -version = "0.8.26" +version = "0.8.27" dependencies = [ "bitvec", "frame-benchmarking", @@ -3798,7 +3798,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -3814,7 +3814,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -3829,7 +3829,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3854,7 +3854,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3868,7 +3868,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3884,7 +3884,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3899,7 +3899,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3914,7 +3914,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3935,7 +3935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3971,7 +3971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3988,7 +3988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4002,7 +4002,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4032,7 +4032,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4068,7 +4068,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4097,7 +4097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "enumflags2", "frame-support", @@ -4112,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4127,7 +4127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4163,7 +4163,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4177,7 +4177,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4199,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4210,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4277,7 +4277,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-support", "parity-scale-codec", @@ -4290,7 +4290,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4305,7 +4305,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4321,7 +4321,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4745,7 +4745,7 @@ checksum = "feb3b2b1033b8a60b4da6ee470325f887758c95d5320f52f9ce0df055a55940e" [[package]] name = "polkadot" -version = "0.8.26" +version = "0.8.27" dependencies = [ "assert_cmd", "color-eyre", @@ -4810,7 +4810,7 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.8.26" +version = "0.8.27" dependencies = [ "frame-benchmarking-cli", "log", @@ -4864,7 +4864,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.8.26" +version = "0.8.27" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -5205,7 +5205,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.8.26" +version = "0.8.27" dependencies = [ "derive_more", "futures 0.3.8", @@ -5248,7 +5248,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.8.26" +version = "0.8.27" dependencies = [ "bitvec", "frame-system", @@ -5274,7 +5274,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.8.26" +version = "0.8.27" dependencies = [ "jsonrpc-core", "pallet-transaction-payment-rpc", @@ -5303,7 +5303,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.8.26" +version = "0.8.27" dependencies = [ "bitvec", "frame-benchmarking", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.8.26" +version = "0.8.27" dependencies = [ "bitvec", "frame-benchmarking", @@ -5572,7 +5572,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.8.26" +version = "0.8.27" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -5581,7 +5581,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.8.26" +version = "0.8.27" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -5605,7 +5605,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.8.26" +version = "0.8.27" dependencies = [ "bitvec", "frame-executive", @@ -5664,7 +5664,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.8.26" +version = "0.8.27" dependencies = [ "frame-benchmarking", "frame-system", @@ -5718,7 +5718,7 @@ dependencies = [ [[package]] name = "polkadot-validation" -version = "0.8.26" +version = "0.8.27" dependencies = [ "futures 0.3.8", "log", @@ -6398,7 +6398,7 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.8.26" +version = "0.8.27" dependencies = [ "frame-executive", "frame-support", @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "async-trait", "derive_more", @@ -6599,7 +6599,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6622,7 +6622,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6639,7 +6639,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6660,7 +6660,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "atty", "chrono", @@ -6714,7 +6714,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6725,7 +6725,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "fnv", @@ -6759,7 +6759,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "blake2-rfc", "hash-db", @@ -6789,7 +6789,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6800,7 +6800,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "fork-tree", @@ -6845,7 +6845,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "futures 0.3.8", @@ -6869,7 +6869,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6882,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6908,7 +6908,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "sc-client-api", @@ -6922,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "lazy_static", @@ -6951,7 +6951,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "parity-scale-codec", @@ -6967,7 +6967,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "parity-scale-codec", @@ -6982,7 +6982,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "parity-scale-codec", @@ -7000,7 +7000,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "finality-grandpa", @@ -7037,7 +7037,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "finality-grandpa", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7079,7 +7079,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "async-trait", "derive_more", @@ -7099,7 +7099,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "hash-db", "lazy_static", @@ -7118,7 +7118,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "async-std", "async-trait", @@ -7172,7 +7172,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7187,7 +7187,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "bytes 0.5.6", "fnv", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "libp2p", @@ -7227,7 +7227,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7236,7 +7236,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "hash-db", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7294,7 +7294,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7312,7 +7312,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "directories 3.0.1", "exit-future", @@ -7376,7 +7376,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "parity-scale-codec", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7411,7 +7411,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7432,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7456,7 +7456,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7478,7 +7478,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7933,7 +7933,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "sp-core", @@ -7945,7 +7945,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "hash-db", "parity-scale-codec", @@ -7961,7 +7961,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7973,7 +7973,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "serde", @@ -7985,7 +7985,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7998,7 +7998,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8010,7 +8010,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8021,7 +8021,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8033,7 +8033,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "log", @@ -8051,7 +8051,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "serde", "serde_json", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8086,7 +8086,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "merlin", "parity-scale-codec", @@ -8106,7 +8106,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8115,7 +8115,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8127,7 +8127,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "base58", "blake2-rfc", @@ -8171,7 +8171,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8180,7 +8180,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8190,7 +8190,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "environmental", "parity-scale-codec", @@ -8201,7 +8201,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "finality-grandpa", "log", @@ -8218,7 +8218,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8230,7 +8230,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "hash-db", @@ -8254,7 +8254,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "lazy_static", "sp-core", @@ -8265,7 +8265,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "async-trait", "derive_more", @@ -8281,7 +8281,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "serde", @@ -8293,7 +8293,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8304,7 +8304,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "sp-api", "sp-core", @@ -8314,7 +8314,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "backtrace", ] @@ -8322,7 +8322,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "serde", "sp-core", @@ -8331,7 +8331,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "either", "hash256-std-hasher", @@ -8352,8 +8352,9 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ + "impl-trait-for-tuples 0.1.3", "parity-scale-codec", "primitive-types", "sp-externalities", @@ -8368,7 +8369,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "Inflector", "proc-macro-crate", @@ -8380,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "serde", "serde_json", @@ -8389,7 +8390,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8402,7 +8403,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8412,7 +8413,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "hash-db", "log", @@ -8434,12 +8435,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8452,7 +8453,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "sp-core", @@ -8465,7 +8466,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8479,7 +8480,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "log", "parity-scale-codec", @@ -8492,7 +8493,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "derive_more", "futures 0.3.8", @@ -8508,7 +8509,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "hash-db", "memory-db", @@ -8522,7 +8523,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "futures-core", @@ -8534,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8546,7 +8547,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8688,7 +8689,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "chrono", "console_error_panic_hook", @@ -8714,7 +8715,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "platforms", ] @@ -8722,7 +8723,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8745,7 +8746,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "async-std", "derive_more", @@ -8759,7 +8760,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8786,7 +8787,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8796,7 +8797,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0dfdc328fa2b9514847b354e6968553a9e29d61e" +source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -8902,7 +8903,7 @@ dependencies = [ [[package]] name = "test-parachain-adder" -version = "0.8.26" +version = "0.8.27" dependencies = [ "dlmalloc", "parity-scale-codec", @@ -8941,7 +8942,7 @@ dependencies = [ [[package]] name = "test-parachain-halt" -version = "0.8.26" +version = "0.8.27" dependencies = [ "substrate-wasm-builder", ] @@ -10046,7 +10047,7 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.8.26" +version = "0.8.27" dependencies = [ "bitvec", "frame-benchmarking", diff --git a/Cargo.toml b/Cargo.toml index 98fe8a2c4c..57708ded62 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ path = "src/main.rs" name = "polkadot" description = "Implementation of a https://polkadot.network node in Rust based on the Substrate framework." license = "GPL-3.0-only" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" readme = "README.md" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 7b93f13bf0..579c32eae2 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-cli" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] description = "Polkadot Relay-chain Client Node" edition = "2018" diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index baab8b4088..46181fe985 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-erasure-coding" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index 40d1dedb8c..5d6c45b6c7 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-test-client" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index ffe6551cc4..38a3a49b39 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-test-service" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index 3635962ea7..34ef958bd3 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-parachain" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] description = "Types and utilities for creating and working with parachains" edition = "2018" diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 1a8b36d58e..b2ca852529 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "test-parachain-adder" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] description = "Test parachain which adds to a number as its state transition" edition = "2018" diff --git a/parachain/test-parachains/halt/Cargo.toml b/parachain/test-parachains/halt/Cargo.toml index a8912fc948..d9fff249bc 100644 --- a/parachain/test-parachains/halt/Cargo.toml +++ b/parachain/test-parachains/halt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "test-parachain-halt" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] description = "Test parachain which executes forever" edition = "2018" diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 9e079e80a5..efe65aec09 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-primitives" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index c697220ea9..bfae25ff34 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-rpc" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 78d5da89b2..05c1ca1e51 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-runtime-common" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 01bc5a4029..9a7e1028a8 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kusama-runtime" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 6226b4aedc..5a4a71a315 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-runtime" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 84cc968879..1ca7f44774 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rococo-runtime" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 230cced1ac..f971d66835 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-test-runtime" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 563d451b55..bc2a72e721 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "westend-runtime" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index e8eb705f4a..235f2c905a 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-statement-table" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" diff --git a/validation/Cargo.toml b/validation/Cargo.toml index c1e53b684d..69e61ef71e 100644 --- a/validation/Cargo.toml +++ b/validation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-validation" -version = "0.8.26" +version = "0.8.27" authors = ["Parity Technologies "] edition = "2018" -- GitLab From b40c35660c93bd60932d69f5d2db2baa4b38d399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 7 Dec 2020 18:47:31 +0100 Subject: [PATCH 098/203] Rework `ConnectionsRequests` (#2081) * Rework `ConnectionsRequests` Instead of implementing the `Stream` trait, this struct now provides a function `next()`. This enables us to encode into the type system that it will always return a value or block indefinitely. * Review feedback --- .../collator-protocol/src/collator_side.rs | 16 +- node/network/pov-distribution/src/lib.rs | 13 +- .../subsystem-util/src/validator_discovery.rs | 161 ++++++++++-------- 3 files changed, 98 insertions(+), 92 deletions(-) diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 01ec85fca7..294be06190 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -18,7 +18,7 @@ use std::collections::{HashMap, HashSet}; use super::{LOG_TARGET, Result}; -use futures::{StreamExt, select, FutureExt}; +use futures::{select, FutureExt}; use polkadot_primitives::v1::{ CollatorId, CoreIndex, CoreState, Hash, Id as ParaId, CandidateReceipt, PoV, ValidatorId, @@ -691,21 +691,15 @@ pub(crate) async fn run( loop { select! { - res = state.connection_requests.next() => { - let (relay_parent, validator_id, peer_id) = match res { - Some(res) => res, - // Will never happen, but better to be safe. - None => return Ok(()), - }; - + res = state.connection_requests.next().fuse() => { let _timer = state.metrics.time_handle_connection_request(); handle_validator_connected( &mut ctx, &mut state, - peer_id, - validator_id, - relay_parent, + res.peer_id, + res.validator_id, + res.relay_parent, ).await; }, msg = ctx.recv().fuse() => match msg? { diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index 1b59441fc0..9d8df343b2 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -700,14 +700,7 @@ impl PoVDistribution { // peer view update messages may be racy and we want connection notifications // first. futures::select_biased! { - v = state.connection_requests.next() => { - match v { - Some((_relay_parent, _validator_id, peer_id)) => { - handle_validator_connected(&mut state, peer_id); - } - None => break, - } - } + v = state.connection_requests.next().fuse() => handle_validator_connected(&mut state, v.peer_id), v = ctx.recv().fuse() => { match v? { FromOverseer::Signal(signal) => if handle_signal( @@ -743,10 +736,8 @@ impl PoVDistribution { } } } - }; + } } - - Ok(()) } } diff --git a/node/subsystem-util/src/validator_discovery.rs b/node/subsystem-util/src/validator_discovery.rs index 3a381f7a6f..9472d44d40 100644 --- a/node/subsystem-util/src/validator_discovery.rs +++ b/node/subsystem-util/src/validator_discovery.rs @@ -23,6 +23,7 @@ use futures::{ channel::mpsc, task::{Poll, self}, stream, + StreamExt, }; use streamunordered::{StreamUnordered, StreamYield}; @@ -113,33 +114,60 @@ async fn connect_to_authorities( connected_rx } +/// Represents a discovered validator. +/// +/// Result of [`ConnectionRequests::next`]. +#[derive(Debug, PartialEq)] +pub struct DiscoveredValidator { + /// The relay parent associated with the connection request that returned a result. + pub relay_parent: Hash, + /// The [`ValidatorId`] that was resolved. + pub validator_id: ValidatorId, + /// The [`PeerId`] associated to the validator id. + pub peer_id: PeerId, +} + +/// Used by [`ConnectionRequests::requests`] to map a [`ConnectionRequest`] item to a [`DiscoveredValidator`]. +struct ConnectionRequestForRelayParent { + request: ConnectionRequest, + relay_parent: Hash, +} + +impl stream::Stream for ConnectionRequestForRelayParent { + type Item = DiscoveredValidator; + + fn poll_next(mut self: Pin<&mut Self>, cx: &mut task::Context) -> Poll> { + self.request + .poll_next_unpin(cx) + .map(|r| r.map(|(validator_id, peer_id)| DiscoveredValidator { + validator_id, + peer_id, + relay_parent: self.relay_parent, + })) + } +} + /// A struct that assists performing multiple concurrent connection requests. /// -/// This allows concurrent connections to validator sets at different `relay_parents` -/// and multiplexes their results into a single `Stream`. +/// This allows concurrent connections to validator sets at different `relay_parents`. +/// Use [`ConnectionRequests::next`] to wait for results of the added connection requests. #[derive(Default)] pub struct ConnectionRequests { - // added connection requests relay_parent -> StreamUnordered token + /// Connection requests relay_parent -> StreamUnordered token id_map: HashMap, - // Connection requests themselves. - requests: StreamUnordered, -} - -impl stream::FusedStream for ConnectionRequests { - fn is_terminated(&self) -> bool { - false - } + /// Connection requests themselves. + requests: StreamUnordered, } impl ConnectionRequests { /// Insert a new connection request. /// /// If a `ConnectionRequest` under a given `relay_parent` already exists it will - /// be revoked and substituted with a new one. + /// be revoked and substituted with the given one. pub fn put(&mut self, relay_parent: Hash, request: ConnectionRequest) { self.remove(&relay_parent); - let token = self.requests.push(request); + let token = self.requests.push(ConnectionRequestForRelayParent { relay_parent, request }); self.id_map.insert(relay_parent, token); } @@ -155,39 +183,23 @@ impl ConnectionRequests { pub fn contains_request(&self, relay_parent: &Hash) -> bool { self.id_map.contains_key(relay_parent) } -} - -impl stream::Stream for ConnectionRequests { - /// (relay_parent, validator_id, peer_id). - type Item = (Hash, ValidatorId, PeerId); - - fn poll_next(mut self: Pin<&mut Self>, cx: &mut task::Context) -> Poll> { - // If there are currently no requests going on, pend instead of - // polling `StreamUnordered` which would lead to it terminating - // and returning `Poll::Ready(None)`. - if self.requests.is_empty() { - return Poll::Pending; - } - match Pin::new(&mut self.requests).poll_next(cx) { - Poll::Ready(Some((yielded, token))) => { - match yielded { - StreamYield::Item(item) => { - if let Some((relay_parent, _)) = self.id_map.iter() - .find(|(_, &val)| val == token) - { - return Poll::Ready(Some((*relay_parent, item.0, item.1))); - } - } - StreamYield::Finished(_) => { - // `ConnectionRequest` is fullfilled, but not revoked - } - } - }, - _ => {}, + /// Returns the next available connection request result. + /// + /// # Note + /// + /// When there are no active requests this will wait indefinitely, like an always pending future. + pub async fn next(&mut self) -> DiscoveredValidator { + loop { + match self.requests.next().await { + Some((StreamYield::Item(item), _)) => { + return item + }, + // Ignore finished requests, they are required to be removed. + Some((StreamYield::Finished(_), _)) => (), + None => futures::pending!(), + } } - - Poll::Pending } } @@ -231,14 +243,20 @@ mod tests { use polkadot_primitives::v1::ValidatorPair; use sp_core::{Pair, Public}; - use futures::{executor, poll, StreamExt, SinkExt}; + use futures::{executor, poll, SinkExt}; + + async fn check_next_is_pending(connection_requests: &mut ConnectionRequests) { + let next = connection_requests.next(); + futures::pin_mut!(next); + assert_eq!(poll!(next), Poll::Pending); + } #[test] fn adding_a_connection_request_works() { let mut connection_requests = ConnectionRequests::default(); executor::block_on(async move { - assert_eq!(poll!(Pin::new(&mut connection_requests).next()), Poll::Pending); + check_next_is_pending(&mut connection_requests).await; let validator_1 = ValidatorPair::generate().0.public(); let validator_2 = ValidatorPair::generate().0.public(); @@ -267,16 +285,19 @@ mod tests { rq1_tx.send((auth_1, peer_id_1.clone())).await.unwrap(); rq1_tx.send((auth_2, peer_id_2.clone())).await.unwrap(); - let res = Pin::new(&mut connection_requests).next().await.unwrap(); - assert_eq!(res, (relay_parent_1, validator_1, peer_id_1)); - - let res = Pin::new(&mut connection_requests).next().await.unwrap(); - assert_eq!(res, (relay_parent_1, validator_2, peer_id_2)); + let res = connection_requests.next().await; + assert_eq!( + res, + DiscoveredValidator { relay_parent: relay_parent_1, validator_id: validator_1, peer_id: peer_id_1 }, + ); + let res = connection_requests.next().await; assert_eq!( - poll!(Pin::new(&mut connection_requests).next()), - Poll::Pending, + res, + DiscoveredValidator { relay_parent: relay_parent_1, validator_id: validator_2, peer_id: peer_id_2 }, ); + + check_next_is_pending(&mut connection_requests).await; }); } @@ -285,7 +306,7 @@ mod tests { let mut connection_requests = ConnectionRequests::default(); executor::block_on(async move { - assert_eq!(poll!(Pin::new(&mut connection_requests).next()), Poll::Pending); + check_next_is_pending(&mut connection_requests).await; let validator_1 = ValidatorPair::generate().0.public(); let validator_2 = ValidatorPair::generate().0.public(); @@ -325,16 +346,19 @@ mod tests { rq1_tx.send((auth_1, peer_id_1.clone())).await.unwrap(); rq2_tx.send((auth_2, peer_id_2.clone())).await.unwrap(); - let res = Pin::new(&mut connection_requests).next().await.unwrap(); - assert_eq!(res, (relay_parent_1, validator_1, peer_id_1)); - - let res = Pin::new(&mut connection_requests).next().await.unwrap(); - assert_eq!(res, (relay_parent_2, validator_2, peer_id_2)); + let res = connection_requests.next().await; + assert_eq!( + res, + DiscoveredValidator { relay_parent: relay_parent_1, validator_id: validator_1, peer_id: peer_id_1 }, + ); + let res = connection_requests.next().await; assert_eq!( - poll!(Pin::new(&mut connection_requests).next()), - Poll::Pending, + res, + DiscoveredValidator { relay_parent: relay_parent_2, validator_id: validator_2, peer_id: peer_id_2 }, ); + + check_next_is_pending(&mut connection_requests).await; }); } @@ -343,7 +367,7 @@ mod tests { let mut connection_requests = ConnectionRequests::default(); executor::block_on(async move { - assert_eq!(poll!(Pin::new(&mut connection_requests).next()), Poll::Pending); + check_next_is_pending(&mut connection_requests).await; let validator_1 = ValidatorPair::generate().0.public(); let validator_2 = ValidatorPair::generate().0.public(); @@ -380,8 +404,8 @@ mod tests { rq1_tx.send((auth_1.clone(), peer_id_1.clone())).await.unwrap(); - let res = Pin::new(&mut connection_requests).next().await.unwrap(); - assert_eq!(res, (relay_parent, validator_1, peer_id_1.clone())); + let res = connection_requests.next().await; + assert_eq!(res, DiscoveredValidator { relay_parent, validator_id: validator_1, peer_id: peer_id_1.clone() }); connection_requests.put(relay_parent.clone(), connection_request_2); @@ -389,13 +413,10 @@ mod tests { rq2_tx.send((auth_2, peer_id_2.clone())).await.unwrap(); - let res = Pin::new(&mut connection_requests).next().await.unwrap(); - assert_eq!(res, (relay_parent, validator_2, peer_id_2)); + let res = connection_requests.next().await; + assert_eq!(res, DiscoveredValidator { relay_parent, validator_id: validator_2, peer_id: peer_id_2 }); - assert_eq!( - poll!(Pin::new(&mut connection_requests).next()), - Poll::Pending, - ); + check_next_is_pending(&mut connection_requests).await; }); } } -- GitLab From 287e6a934ef7507baa2ead0763fd2c17ac69ae0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 7 Dec 2020 21:57:49 +0100 Subject: [PATCH 099/203] Do not spam when we can not send a message to a job (#2084) * Do not spam when we can not send a message to a job There are legal reasons why a job ended. If a job failed, the error is logged. So, we don't need to log an error when we can not send a message to a job. * Review feedback --- node/subsystem-util/src/lib.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 82c3310f21..9cc68834be 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -610,10 +610,6 @@ impl Jobs { async fn send_msg(&mut self, parent_hash: Hash, msg: Job::ToJob) { if let Entry::Occupied(mut job) = self.running.entry(parent_hash) { if job.get_mut().send_msg(msg).await.is_err() { - tracing::warn!( - job = Job::NAME, - relay_parent = ?parent_hash, - "failed to send message to job, will remove it"); job.remove(); } } -- GitLab From 3e6b0c04f75ec379d7c6b90dc12bd183cc8ff4b0 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 7 Dec 2020 17:23:44 -0600 Subject: [PATCH 100/203] add a brief description of goals of the GRANDPA voting rule (#2053) --- roadmap/implementers-guide/src/SUMMARY.md | 3 ++- .../src/node/grandpa-voting-rule.md | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 roadmap/implementers-guide/src/node/grandpa-voting-rule.md diff --git a/roadmap/implementers-guide/src/SUMMARY.md b/roadmap/implementers-guide/src/SUMMARY.md index c6c4f39250..b6e0fab3be 100644 --- a/roadmap/implementers-guide/src/SUMMARY.md +++ b/roadmap/implementers-guide/src/SUMMARY.md @@ -32,7 +32,8 @@ - [Node Architecture](node/README.md) - [Subsystems and Jobs](node/subsystems-and-jobs.md) - [Overseer](node/overseer.md) - - [Collators](node/collators/README.md) + - [GRANDPA Voting Rule](node/grandpa-voting-rule.md) + - [Collator Subsystems](node/collators/README.md) - [Collation Generation](node/collators/collation-generation.md) - [Collator Protocol](node/collators/collator-protocol.md) - [Backing Subsystems](node/backing/README.md) diff --git a/roadmap/implementers-guide/src/node/grandpa-voting-rule.md b/roadmap/implementers-guide/src/node/grandpa-voting-rule.md new file mode 100644 index 0000000000..57da4e0dad --- /dev/null +++ b/roadmap/implementers-guide/src/node/grandpa-voting-rule.md @@ -0,0 +1,11 @@ +# GRANDPA Voting Rule + +[GRANDPA](https://w3f-research.readthedocs.io/en/latest/polkadot/finality.html) is the finality engine of Polkadot. + +One broad goal of finality, which applies across many different blockchains, is that there should exist only one finalized block at each height in the finalized chain. Before a block at a given height is finalized, it may compete with other forks. + +GRANDPA's regular voting rule is for each validator to select the longest chain they are aware of. GRANDPA proceeds in rounds, collecting information from all online validators and determines the blocks that a supermajority of validators all have in common with each other. + +For parachains, we extend the security guarantee of finality to be such that no invalid parachain candidate may be included in a finalized block. Candidates may be included in some fork of the relay chain with only a few backing votes behind them. After that point, we run the [Approvals Protocol](../protocol-approval.md), which is implemented as the [Approval Voting](approval/approval-voting.md) subsystem. This system involves validators self-selecting to re-check candidates included in all observed forks of the relay chain as well as an algorithm for observing validators' statements about assignment and approval in order to determine which candidates, and thus blocks, are with high probability valid. The highest approved ancestor of a given block can be determined by querying the Approval Voting subsystem via the [`ApprovalVotingMessage::ApprovedAncestor`](../types/overseer-protocol.md#approval-voting) message. + +Lastly, we refuse to finalize any block including a candidate for which we are aware of an ongoing dispute or of a dispute resolving against the candidate. The exact means of doing this has not been determined yet. -- GitLab From 20f3c411541096085deabde18b51ab59489e3e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Tue, 8 Dec 2020 13:55:57 +0100 Subject: [PATCH 101/203] Companion for #6629 (weight params refactor) (#1420) * Change branch. * Update runtime. * Revert "Change branch." This reverts commit 841c59f3398136c27cc235a29d7d459e8a4c8ce0. * Update substrate. * Fix tests. * Fix compilation. * Fix frame system imports. * Fix usages of system * Fix stuff. * Fix compilation. * Fixes. * Fix block_weight usage. * Bump substrate. --- Cargo.lock | 272 +++++++++++++------------- runtime/common/src/claims.rs | 15 +- runtime/common/src/crowdfund.rs | 16 +- runtime/common/src/impls.rs | 23 ++- runtime/common/src/lib.rs | 82 +++++--- runtime/common/src/paras_registrar.rs | 19 +- runtime/common/src/purchase.rs | 17 +- runtime/common/src/slots.rs | 18 +- runtime/kusama/src/constants.rs | 8 +- runtime/kusama/src/lib.rs | 29 ++- runtime/parachains/src/mock.rs | 26 +-- runtime/polkadot/src/constants.rs | 8 +- runtime/polkadot/src/lib.rs | 22 +-- runtime/rococo/src/constants.rs | 13 +- runtime/rococo/src/lib.rs | 17 +- runtime/test-runtime/src/lib.rs | 17 +- runtime/westend/src/constants.rs | 8 +- runtime/westend/src/lib.rs | 20 +- 18 files changed, 298 insertions(+), 332 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c06db85aa9..d64b5c9030 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1462,7 +1462,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", ] @@ -1470,7 +1470,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -1488,7 +1488,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "chrono", "frame-benchmarking", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -1526,7 +1526,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "serde", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "bitflags", "frame-metadata", @@ -1562,7 +1562,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1573,7 +1573,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1585,7 +1585,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1595,7 +1595,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -1625,7 +1625,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-api", @@ -3798,7 +3798,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -3814,7 +3814,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -3829,7 +3829,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3854,7 +3854,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3868,7 +3868,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3884,7 +3884,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3899,7 +3899,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3914,7 +3914,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3935,7 +3935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3971,7 +3971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3988,7 +3988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4002,7 +4002,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4032,7 +4032,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4068,7 +4068,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4097,7 +4097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "enumflags2", "frame-support", @@ -4112,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4127,7 +4127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4163,7 +4163,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4177,7 +4177,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4199,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4210,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4277,7 +4277,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-support", "parity-scale-codec", @@ -4290,7 +4290,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4305,7 +4305,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4321,7 +4321,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "async-trait", "derive_more", @@ -6599,7 +6599,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6622,7 +6622,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6639,7 +6639,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6660,7 +6660,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "atty", "chrono", @@ -6714,7 +6714,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6725,7 +6725,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "fnv", @@ -6759,7 +6759,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "blake2-rfc", "hash-db", @@ -6789,7 +6789,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6800,7 +6800,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "fork-tree", @@ -6845,7 +6845,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "futures 0.3.8", @@ -6869,7 +6869,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6882,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6908,7 +6908,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "sc-client-api", @@ -6922,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "lazy_static", @@ -6951,7 +6951,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "parity-scale-codec", @@ -6967,7 +6967,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "parity-scale-codec", @@ -6982,7 +6982,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "parity-scale-codec", @@ -7000,7 +7000,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "finality-grandpa", @@ -7037,7 +7037,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "finality-grandpa", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7079,7 +7079,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "async-trait", "derive_more", @@ -7099,7 +7099,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "hash-db", "lazy_static", @@ -7118,7 +7118,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "async-std", "async-trait", @@ -7172,7 +7172,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7187,7 +7187,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "bytes 0.5.6", "fnv", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "libp2p", @@ -7227,7 +7227,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7236,7 +7236,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "hash-db", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7294,7 +7294,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7312,7 +7312,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "directories 3.0.1", "exit-future", @@ -7376,7 +7376,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "parity-scale-codec", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7411,7 +7411,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7432,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7456,7 +7456,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7478,7 +7478,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7933,7 +7933,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "sp-core", @@ -7945,7 +7945,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "hash-db", "parity-scale-codec", @@ -7961,7 +7961,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7973,7 +7973,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "serde", @@ -7985,7 +7985,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7998,7 +7998,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8010,7 +8010,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8021,7 +8021,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8033,7 +8033,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "log", @@ -8051,7 +8051,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "serde", "serde_json", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8086,7 +8086,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "merlin", "parity-scale-codec", @@ -8106,7 +8106,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8115,7 +8115,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8127,7 +8127,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "base58", "blake2-rfc", @@ -8171,7 +8171,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8180,7 +8180,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8190,7 +8190,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "environmental", "parity-scale-codec", @@ -8201,7 +8201,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "finality-grandpa", "log", @@ -8218,7 +8218,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8230,7 +8230,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "hash-db", @@ -8254,7 +8254,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "lazy_static", "sp-core", @@ -8265,7 +8265,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "async-trait", "derive_more", @@ -8281,7 +8281,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "serde", @@ -8293,7 +8293,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8304,7 +8304,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "sp-api", "sp-core", @@ -8314,7 +8314,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "backtrace", ] @@ -8322,7 +8322,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "serde", "sp-core", @@ -8331,7 +8331,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "either", "hash256-std-hasher", @@ -8352,7 +8352,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8369,7 +8369,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "Inflector", "proc-macro-crate", @@ -8381,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "serde", "serde_json", @@ -8390,7 +8390,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8403,7 +8403,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8413,7 +8413,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "hash-db", "log", @@ -8435,12 +8435,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8453,7 +8453,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "sp-core", @@ -8466,7 +8466,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8480,7 +8480,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "log", "parity-scale-codec", @@ -8493,7 +8493,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "derive_more", "futures 0.3.8", @@ -8509,7 +8509,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "hash-db", "memory-db", @@ -8523,7 +8523,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "futures-core", @@ -8535,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8547,7 +8547,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8689,7 +8689,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "chrono", "console_error_panic_hook", @@ -8715,7 +8715,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "platforms", ] @@ -8723,7 +8723,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8746,7 +8746,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "async-std", "derive_more", @@ -8760,7 +8760,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8787,7 +8787,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8797,7 +8797,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eaab146094360ca02538f5287abe859b2d815c3c" +source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index 176c1cd4bd..1d6f02bfe0 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -636,7 +636,7 @@ mod tests { use parity_scale_codec::Encode; // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are required. - use sp_runtime::{Perbill, traits::{BlakeTwo256, IdentityLookup, Identity}, testing::Header}; + use sp_runtime::{traits::{BlakeTwo256, IdentityLookup, Identity}, testing::Header}; use frame_support::{ impl_outer_origin, impl_outer_dispatch, assert_ok, assert_err, assert_noop, parameter_types, ord_parameter_types, weights::{Pays, GetDispatchInfo}, traits::ExistenceRequirement, @@ -661,12 +661,12 @@ mod tests { pub struct Test; parameter_types! { pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: u32 = 4 * 1024 * 1024; - pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } impl frame_system::Config for Test { type BaseCallFilter = (); + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); type Origin = Origin; type Call = Call; type Index = u64; @@ -678,13 +678,6 @@ mod tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = (); - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdfund.rs index 1c0895bc0c..b3a2310889 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdfund.rs @@ -579,7 +579,7 @@ mod tests { // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are requried. use sp_runtime::{ - Perbill, Permill, Percent, testing::Header, DispatchResult, + Permill, Percent, testing::Header, DispatchResult, traits::{BlakeTwo256, IdentityLookup}, }; use crate::slots::Registrar; @@ -595,12 +595,13 @@ mod tests { pub struct Test; parameter_types! { pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: u32 = 4 * 1024 * 1024; - pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } + impl frame_system::Config for Test { type BaseCallFilter = (); + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); type Origin = Origin; type Call = (); type Index = u64; @@ -612,13 +613,6 @@ mod tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = (); - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; diff --git a/runtime/common/src/impls.rs b/runtime/common/src/impls.rs index 64b881f6d4..b9bace0098 100644 --- a/runtime/common/src/impls.rs +++ b/runtime/common/src/impls.rs @@ -72,7 +72,8 @@ where #[cfg(test)] mod tests { use super::*; - use frame_support::{impl_outer_origin, parameter_types, weights::Weight}; + use frame_system::limits; + use frame_support::{impl_outer_origin, parameter_types, weights::DispatchClass}; use frame_support::traits::FindAuthor; use sp_core::H256; use sp_runtime::{ @@ -91,9 +92,15 @@ mod tests { parameter_types! { pub const BlockHashCount: u64 = 250; - pub const ExtrinsicBaseWeight: u64 = 100; - pub const MaximumBlockWeight: Weight = 1024; - pub const MaximumBlockLength: u32 = 2 * 1024; + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::builder() + .for_class(DispatchClass::all(), |weight| { + weight.base_extrinsic = 100; + }) + .for_class(DispatchClass::non_mandatory(), |weight| { + weight.max_total = Some(1024); + }) + .build_or_panic(); + pub BlockLength: limits::BlockLength = limits::BlockLength::max(2 * 1024); pub const AvailableBlockRatio: Perbill = Perbill::one(); } @@ -110,13 +117,9 @@ mod tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; + type BlockLength = BlockLength; + type BlockWeights = BlockWeights; type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 3f867579eb..06475ee54e 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -28,10 +28,11 @@ pub mod paras_sudo_wrapper; pub mod paras_registrar; use primitives::v1::{BlockNumber, ValidatorId}; -use sp_runtime::{Perquintill, Perbill, FixedPointNumber, traits::Saturating}; +use sp_runtime::{Perquintill, Perbill, FixedPointNumber}; +use frame_system::limits; use frame_support::{ parameter_types, traits::{Currency}, - weights::{Weight, constants::WEIGHT_PER_SECOND}, + weights::{Weight, constants::WEIGHT_PER_SECOND, DispatchClass}, }; use pallet_transaction_payment::{TargetedFeeAdjustment, Multiplier}; use static_assertions::const_assert; @@ -55,22 +56,19 @@ const WASM_MAGIC: &[u8] = &[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]; /// We assume that an on-initialize consumes 2.5% of the weight on average, hence a single extrinsic /// will not be allowed to consume more than `AvailableBlockRatio - 2.5%`. -pub const AVERAGE_ON_INITIALIZE_WEIGHT: Perbill = Perbill::from_perthousand(25); +pub const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_perthousand(25); +/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used +/// by Operational extrinsics. +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); +/// We allow for 2 seconds of compute with a 6 second average block time. +pub const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND; + +const_assert!(NORMAL_DISPATCH_RATIO.deconstruct() >= AVERAGE_ON_INITIALIZE_RATIO.deconstruct()); // Common constants used in all runtimes. parameter_types! { pub const BlockHashCount: BlockNumber = 2400; - /// Block time that can be used by weights. - pub const MaximumBlockWeight: Weight = 2 * WEIGHT_PER_SECOND; - /// Portion of the block available to normal class of dispatches. - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); - /// Maximum weight that a _single_ extrinsic can take. - pub MaximumExtrinsicWeight: Weight = - AvailableBlockRatio::get().saturating_sub(AVERAGE_ON_INITIALIZE_WEIGHT) - * MaximumBlockWeight::get(); - /// Maximum length of block. 5MB. - pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; - /// The portion of the `AvailableBlockRatio` that we adjust the fees with. Blocks filled less + /// The portion of the `NORMAL_DISPATCH_RATIO` that we adjust the fees with. Blocks filled less /// than this will decrease the weight and more will increase. pub const TargetBlockFullness: Perquintill = Perquintill::from_percent(25); /// The adjustment variable of the runtime. Higher values will cause `TargetBlockFullness` to @@ -80,9 +78,41 @@ parameter_types! { /// that combined with `AdjustmentVariable`, we can recover from the minimum. /// See `multiplier_can_grow_from_zero`. pub MinimumMultiplier: Multiplier = Multiplier::saturating_from_rational(1, 1_000_000_000u128); + /// Maximum length of block. Up to 5MB. + pub BlockLength: limits::BlockLength = + limits::BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + /// Block weights base values and limits. + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::builder() + .base_block(BlockExecutionWeight::get()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::Normal, |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .for_class(DispatchClass::Operational, |weights| { + weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); + // Operational transactions have an extra reserved space, so that they + // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. + weights.reserved = Some( + MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT, + ); + }) + .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) + .build_or_panic(); } -const_assert!(AvailableBlockRatio::get().deconstruct() >= AVERAGE_ON_INITIALIZE_WEIGHT.deconstruct()); +parameter_types! { + /// A limit for off-chain phragmen unsigned solution submission. + /// + /// We want to keep it as high as possible, but can't risk having it reject, + /// so we always subtract the base block execution weight. + pub OffchainSolutionWeightLimit: Weight = BlockWeights::get() + .get(DispatchClass::Normal) + .max_extrinsic + .expect("Normal extrinsics have weight limit configured by default; qed") + .saturating_sub(BlockExecutionWeight::get()); +} /// Parameterized slow adjusting fee updated based on /// https://w3f-research.readthedocs.io/en/latest/polkadot/Token%20Economics.html#-2.-slow-adjusting-mechanism @@ -148,14 +178,18 @@ mod multiplier_tests { parameter_types! { pub const BlockHashCount: u64 = 250; - pub const ExtrinsicBaseWeight: u64 = 100; - pub const MaximumBlockWeight: Weight = 1024; - pub const MaximumBlockLength: u32 = 2 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub BlockLength: frame_system::limits::BlockLength = + frame_system::limits::BlockLength::max(2 * 1024); + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(1024); } impl frame_system::Config for Runtime { type BaseCallFilter = (); + type BlockWeights = BlockWeights; + type BlockLength = (); + type DbWeight = (); type Origin = Origin; type Index = u64; type BlockNumber = u64; @@ -167,13 +201,6 @@ mod multiplier_tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = (); @@ -188,7 +215,7 @@ mod multiplier_tests { let mut t: sp_io::TestExternalities = frame_system::GenesisConfig::default().build_storage::().unwrap().into(); t.execute_with(|| { - System::set_block_limits(w, 0); + System::set_block_consumed_resources(w, 0); assertions() }); } @@ -196,7 +223,8 @@ mod multiplier_tests { #[test] fn multiplier_can_grow_from_zero() { let minimum_multiplier = MinimumMultiplier::get(); - let target = TargetBlockFullness::get() * (AvailableBlockRatio::get() * MaximumBlockWeight::get()); + let target = TargetBlockFullness::get() * + BlockWeights::get().get(DispatchClass::Normal).max_total.unwrap(); // if the min is too small, then this will not change, and we are doomed forever. // the weight is 1/10th bigger than target. run_with_system_weight(target * 101 / 100, || { diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index 177ec3180a..a813f07060 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -264,6 +264,7 @@ mod tests { use primitives::v1::{ Balance, BlockNumber, Header, Signature, AuthorityDiscoveryId, }; + use frame_system::limits; use frame_support::{ traits::{Randomness, OnInitialize, OnFinalize}, impl_outer_origin, impl_outer_dispatch, assert_ok, parameter_types, @@ -299,11 +300,13 @@ mod tests { #[derive(Clone, Eq, PartialEq)] pub struct Test; + const NORMAL_RATIO: Perbill = Perbill::from_percent(75); parameter_types! { pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: u32 = 4 * 1024 * 1024; - pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); + pub BlockWeights: limits::BlockWeights = + limits::BlockWeights::with_sensible_defaults(4 * 1024 * 1024, NORMAL_RATIO); + pub BlockLength: limits::BlockLength = + limits::BlockLength::max_with_normal_ratio(4 * 1024 * 1024, NORMAL_RATIO); } impl frame_system::Config for Test { @@ -319,13 +322,9 @@ mod tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = (); - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; + type BlockWeights = BlockWeights; + type BlockLength = BlockLength; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; @@ -416,7 +415,7 @@ mod tests { type UnsignedPriority = StakingUnsignedPriority; type MaxIterations = (); type MinSolutionScoreBump = (); - type OffchainSolutionWeightLimit = MaximumBlockWeight; + type OffchainSolutionWeightLimit = (); type WeightInfo = (); } diff --git a/runtime/common/src/purchase.rs b/runtime/common/src/purchase.rs index 7a29b4641a..2efb61ae4a 100644 --- a/runtime/common/src/purchase.rs +++ b/runtime/common/src/purchase.rs @@ -382,7 +382,7 @@ pub fn remove_pallet() -> frame_support::weights::Weight remove_storage_prefix(b"Purchase", b"Statement", b""); remove_storage_prefix(b"Purchase", b"UnlockBlock", b""); - T::MaximumBlockWeight::get() + ::BlockWeights::get().max_block } #[cfg(test)] @@ -393,7 +393,7 @@ mod tests { // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are required. use sp_runtime::{ - Perbill, MultiSignature, + MultiSignature, traits::{BlakeTwo256, IdentityLookup, Identity, Verify, IdentifyAccount, Dispatchable}, testing::Header }; @@ -424,12 +424,12 @@ mod tests { pub struct Test; parameter_types! { pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: u32 = 4 * 1024 * 1024; - pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } impl frame_system::Config for Test { type BaseCallFilter = (); + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); type Origin = Origin; type Call = Call; type Index = u64; @@ -441,13 +441,6 @@ mod tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = (); - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; diff --git a/runtime/common/src/slots.rs b/runtime/common/src/slots.rs index ec51aa539b..284f1afa52 100644 --- a/runtime/common/src/slots.rs +++ b/runtime/common/src/slots.rs @@ -942,10 +942,7 @@ mod tests { use std::{collections::HashMap, cell::RefCell}; use sp_core::H256; - use sp_runtime::{ - Perbill, - traits::{BlakeTwo256, Hash, IdentityLookup}, - }; + use sp_runtime::traits::{BlakeTwo256, Hash, IdentityLookup}; use frame_support::{ impl_outer_origin, parameter_types, assert_ok, assert_noop, traits::{OnInitialize, OnFinalize} @@ -964,12 +961,12 @@ mod tests { pub struct Test; parameter_types! { pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: u32 = 4 * 1024 * 1024; - pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } impl frame_system::Config for Test { type BaseCallFilter = (); + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); type Origin = Origin; type Call = (); type Index = u64; @@ -981,13 +978,6 @@ mod tests { type Header = Header; type Event = (); type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = (); - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; diff --git a/runtime/kusama/src/constants.rs b/runtime/kusama/src/constants.rs index 5d81cf0bb8..91d6b35452 100644 --- a/runtime/kusama/src/constants.rs +++ b/runtime/kusama/src/constants.rs @@ -69,7 +69,7 @@ pub mod fee { /// node's balance type. /// /// This should typically create a mapping between the following ranges: - /// - [0, frame_system::MaximumBlockWeight] + /// - [0, MAXIMUM_BLOCK_WEIGHT] /// - [Balance::min, Balance::max] /// /// Yet, it can be used for any other sort of change to weight-fee. Some examples being: @@ -95,16 +95,16 @@ pub mod fee { #[cfg(test)] mod tests { use frame_support::weights::WeightToFeePolynomial; - use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use runtime_common::{MAXIMUM_BLOCK_WEIGHT, ExtrinsicBaseWeight}; use super::fee::WeightToFee; use super::currency::{CENTS, DOLLARS, MILLICENTS}; #[test] - // This function tests that the fee for `MaximumBlockWeight` of weight is correct + // This function tests that the fee for `MAXIMUM_BLOCK_WEIGHT` of weight is correct fn full_block_fee_is_correct() { // A full block should cost 16 DOLLARS println!("Base: {}", ExtrinsicBaseWeight::get()); - let x = WeightToFee::calc(&MaximumBlockWeight::get()); + let x = WeightToFee::calc(&MAXIMUM_BLOCK_WEIGHT); let y = 16 * DOLLARS; assert!(x.max(y) - x.min(y) < MILLICENTS); } diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 5e47f9e61a..b6d4b8512c 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -34,9 +34,8 @@ use primitives::v1::{ use runtime_common::{ claims, SlowAdjustingFeeUpdate, CurrencyToVote, impls::DealWithFees, - BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, - MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, - MaximumExtrinsicWeight, ParachainSessionKeyPlaceholder, + BlockHashCount, RocksDbWeight, BlockWeights, BlockLength, OffchainSolutionWeightLimit, + ParachainSessionKeyPlaceholder, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, ModuleId, @@ -129,6 +128,8 @@ parameter_types! { impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; + type BlockWeights = BlockWeights; + type BlockLength = BlockLength; type Origin = Origin; type Call = Call; type Index = Nonce; @@ -140,13 +141,7 @@ impl frame_system::Config for Runtime { type Header = generic::Header; type Event = Event; type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = RocksDbWeight; - type BlockExecutionWeight = BlockExecutionWeight; - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumExtrinsicWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; type PalletInfo = PalletInfo; type AccountData = pallet_balances::AccountData; @@ -156,6 +151,8 @@ impl frame_system::Config for Runtime { } parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + BlockWeights::get().max_block; pub const MaxScheduledPerBlock: u32 = 50; } @@ -164,7 +161,7 @@ impl pallet_scheduler::Config for Runtime { type Origin = Origin; type PalletsOrigin = OriginCaller; type Call = Call; - type MaximumWeight = MaximumBlockWeight; + type MaximumWeight = MaximumSchedulerWeight; type ScheduleOrigin = EnsureRoot; type MaxScheduledPerBlock = MaxScheduledPerBlock; type WeightInfo = weights::pallet_scheduler::WeightInfo; @@ -326,9 +323,6 @@ parameter_types! { pub const ElectionLookahead: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; pub const MaxIterations: u32 = 10; pub MinSolutionScoreBump: Perbill = Perbill::from_rational_approximation(5u32, 10_000); - pub OffchainSolutionWeightLimit: Weight = MaximumExtrinsicWeight::get() - .saturating_sub(BlockExecutionWeight::get()) - .saturating_sub(ExtrinsicBaseWeight::get()); } type SlashCancelOrigin = EnsureOneOf< @@ -557,7 +551,7 @@ impl pallet_treasury::Config for Runtime { } parameter_types! { - pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); + pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * BlockWeights::get().max_block; } impl pallet_offences::Config for Runtime { @@ -1107,7 +1101,7 @@ impl frame_support::traits::OnRuntimeUpgrade for FixCouncilHistoricalVotes { }; }); frame_support::debug::info!("Migration to fix voters happened. Accounts with inaccurate reserved amount: {}", failure); - ::MaximumBlockWeight::get() + ::BlockWeights::get().max_block } } @@ -1534,11 +1528,12 @@ mod test_fees { #[test] #[ignore] fn block_cost() { - let raw_fee = WeightToFee::calc(&MaximumBlockWeight::get()); + let max_block_weight = BlockWeights::get().max_block; + let raw_fee = WeightToFee::calc(&max_block_weight); println!( "Full Block weight == {} // WeightToFee(full_block) == {} plank", - MaximumBlockWeight::get(), + max_block_weight, raw_fee.separated_string(), ); } diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 0934493c15..0481c1941f 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -17,17 +17,14 @@ //! Mocks for all the traits. use sp_io::TestExternalities; -use sp_core::{H256}; -use sp_runtime::{ - Perbill, - traits::{ - BlakeTwo256, IdentityLookup, - }, +use sp_core::H256; +use sp_runtime::traits::{ + BlakeTwo256, IdentityLookup, }; use primitives::v1::{AuthorityDiscoveryId, BlockNumber, Header}; use frame_support::{ impl_outer_origin, impl_outer_dispatch, impl_outer_event, parameter_types, - weights::Weight, traits::Randomness as RandomnessT, + traits::Randomness as RandomnessT, }; use crate::inclusion; use crate as parachains; @@ -65,13 +62,15 @@ impl RandomnessT for TestRandomness { parameter_types! { pub const BlockHashCount: u32 = 250; - pub const MaximumBlockWeight: Weight = 4 * 1024 * 1024; - pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(4 * 1024 * 1024); } impl frame_system::Config for Test { type BaseCallFilter = (); + type BlockWeights = BlockWeights; + type BlockLength = (); + type DbWeight = (); type Origin = Origin; type Call = Call; type Index = u64; @@ -83,13 +82,6 @@ impl frame_system::Config for Test { type Header = Header; type Event = TestEvent; type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = (); - type ExtrinsicBaseWeight = (); - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type PalletInfo = (); type AccountData = pallet_balances::AccountData; diff --git a/runtime/polkadot/src/constants.rs b/runtime/polkadot/src/constants.rs index f784e9fca1..d6704f3eb0 100644 --- a/runtime/polkadot/src/constants.rs +++ b/runtime/polkadot/src/constants.rs @@ -61,7 +61,7 @@ pub mod fee { /// node's balance type. /// /// This should typically create a mapping between the following ranges: - /// - [0, frame_system::MaximumBlockWeight] + /// - [0, MAXIMUM_BLOCK_WEIGHT] /// - [Balance::min, Balance::max] /// /// Yet, it can be used for any other sort of change to weight-fee. Some examples being: @@ -87,16 +87,16 @@ pub mod fee { #[cfg(test)] mod tests { use frame_support::weights::WeightToFeePolynomial; - use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use runtime_common::{MAXIMUM_BLOCK_WEIGHT, ExtrinsicBaseWeight}; use super::fee::WeightToFee; use super::currency::{CENTS, DOLLARS, MILLICENTS}; #[test] - // This function tests that the fee for `MaximumBlockWeight` of weight is correct + // This function tests that the fee for `MAXIMUM_BLOCK_WEIGHT` of weight is correct fn full_block_fee_is_correct() { // A full block should cost 16 DOLLARS println!("Base: {}", ExtrinsicBaseWeight::get()); - let x = WeightToFee::calc(&MaximumBlockWeight::get()); + let x = WeightToFee::calc(&MAXIMUM_BLOCK_WEIGHT); let y = 16 * DOLLARS; assert!(x.max(y) - x.min(y) < MILLICENTS); } diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 373f93a8ee..01073651f7 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -24,9 +24,8 @@ use pallet_transaction_payment::CurrencyAdapter; use runtime_common::{ claims, SlowAdjustingFeeUpdate, CurrencyToVote, impls::DealWithFees, - BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, - MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, - MaximumExtrinsicWeight, ParachainSessionKeyPlaceholder, + BlockHashCount, RocksDbWeight, BlockWeights, BlockLength, OffchainSolutionWeightLimit, + ParachainSessionKeyPlaceholder, }; use sp_std::prelude::*; @@ -142,6 +141,8 @@ parameter_types! { impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; + type BlockWeights = BlockWeights; + type BlockLength = BlockLength; type Origin = Origin; type Call = Call; type Index = Nonce; @@ -153,13 +154,7 @@ impl frame_system::Config for Runtime { type Header = generic::Header; type Event = Event; type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = RocksDbWeight; - type BlockExecutionWeight = BlockExecutionWeight; - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumExtrinsicWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; type PalletInfo = PalletInfo; type AccountData = pallet_balances::AccountData; @@ -169,6 +164,8 @@ impl frame_system::Config for Runtime { } parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + BlockWeights::get().max_block; pub const MaxScheduledPerBlock: u32 = 50; } @@ -177,7 +174,7 @@ impl pallet_scheduler::Config for Runtime { type Origin = Origin; type PalletsOrigin = OriginCaller; type Call = Call; - type MaximumWeight = MaximumBlockWeight; + type MaximumWeight = MaximumSchedulerWeight; type ScheduleOrigin = EnsureRoot; type MaxScheduledPerBlock = MaxScheduledPerBlock; type WeightInfo = weights::pallet_scheduler::WeightInfo; @@ -333,9 +330,6 @@ parameter_types! { pub const ElectionLookahead: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 16; pub const MaxIterations: u32 = 10; pub MinSolutionScoreBump: Perbill = Perbill::from_rational_approximation(5u32, 10_000); - pub OffchainSolutionWeightLimit: Weight = MaximumExtrinsicWeight::get() - .saturating_sub(BlockExecutionWeight::get()) - .saturating_sub(ExtrinsicBaseWeight::get()); } type SlashCancelOrigin = EnsureOneOf< @@ -603,7 +597,7 @@ impl pallet_treasury::Config for Runtime { } parameter_types! { - pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); + pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * BlockWeights::get().max_block; } impl pallet_offences::Config for Runtime { diff --git a/runtime/rococo/src/constants.rs b/runtime/rococo/src/constants.rs index 31f8a97ce4..616c28de1e 100644 --- a/runtime/rococo/src/constants.rs +++ b/runtime/rococo/src/constants.rs @@ -87,8 +87,8 @@ pub mod fee { #[cfg(test)] mod tests { - use frame_support::weights::WeightToFeePolynomial; - use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use frame_support::weights::{WeightToFeePolynomial, DispatchClass}; + use runtime_common::BlockWeights; use super::fee::WeightToFee; use super::currency::{CENTS, DOLLARS, MILLICENTS}; @@ -96,8 +96,8 @@ mod tests { // This function tests that the fee for `MaximumBlockWeight` of weight is correct fn full_block_fee_is_correct() { // A full block should cost 16 DOLLARS - println!("Base: {}", ExtrinsicBaseWeight::get()); - let x = WeightToFee::calc(&MaximumBlockWeight::get()); + println!("Base: {}", BlockWeights::get().get(DispatchClass::Normal).base_extrinsic); + let x = WeightToFee::calc(&BlockWeights::get().max_block); let y = 16 * DOLLARS; assert!(x.max(y) - x.min(y) < MILLICENTS); } @@ -106,8 +106,9 @@ mod tests { // This function tests that the fee for `ExtrinsicBaseWeight` of weight is correct fn extrinsic_base_fee_is_correct() { // `ExtrinsicBaseWeight` should cost 1/10 of a CENT - println!("Base: {}", ExtrinsicBaseWeight::get()); - let x = WeightToFee::calc(&ExtrinsicBaseWeight::get()); + let base_weight = BlockWeights::get().get(DispatchClass::Normal).base_extrinsic; + println!("Base: {}", base_weight); + let x = WeightToFee::calc(&base_weight); let y = CENTS / 10; assert!(x.max(y) - x.min(y) < MILLICENTS); } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 51735ed3da..1a8d9cfdf8 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -33,8 +33,7 @@ use primitives::v1::{ use runtime_common::{ SlowAdjustingFeeUpdate, impls::ToAuthor, - BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, MaximumBlockLength, - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, MaximumExtrinsicWeight, + BlockHashCount, BlockWeights, BlockLength, RocksDbWeight, OffchainSolutionWeightLimit, }; use runtime_parachains::{ self, @@ -212,6 +211,9 @@ parameter_types! { impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; + type BlockWeights = BlockWeights; + type BlockLength = BlockLength; + type DbWeight = RocksDbWeight; type Origin = Origin; type Call = Call; type Index = Nonce; @@ -223,13 +225,6 @@ impl frame_system::Config for Runtime { type Header = generic::Header; type Event = Event; type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = RocksDbWeight; - type BlockExecutionWeight = BlockExecutionWeight; - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumExtrinsicWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; type PalletInfo = PalletInfo; type AccountData = pallet_balances::AccountData; @@ -364,7 +359,7 @@ impl pallet_staking::Config for Runtime { type Call = Call; type UnsignedPriority = StakingUnsignedPriority; type MaxIterations = MaxIterations; - type OffchainSolutionWeightLimit = MaximumBlockWeight; + type OffchainSolutionWeightLimit = OffchainSolutionWeightLimit; type MinSolutionScoreBump = MinSolutionScoreBump; type WeightInfo = (); } @@ -398,7 +393,7 @@ parameter_types! { } parameter_types! { - pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); + pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * BlockWeights::get().max_block; } impl pallet_offences::Config for Runtime { diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 6597247b54..8b4c55391d 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -45,8 +45,7 @@ use primitives::v1::{ }; use runtime_common::{ claims, SlowAdjustingFeeUpdate, paras_sudo_wrapper, - BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, - MaximumBlockLength, BlockExecutionWeight, ExtrinsicBaseWeight, + BlockHashCount, BlockWeights, BlockLength, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, @@ -125,6 +124,9 @@ parameter_types! { impl frame_system::Config for Runtime { type BaseCallFilter = (); + type BlockWeights = BlockWeights; + type BlockLength = BlockLength; + type DbWeight = (); type Origin = Origin; type Call = Call; type Index = Nonce; @@ -136,13 +138,6 @@ impl frame_system::Config for Runtime { type Header = generic::Header; type Event = Event; type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); - type BlockExecutionWeight = BlockExecutionWeight; - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumBlockWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; type PalletInfo = PalletInfo; type AccountData = pallet_balances::AccountData; @@ -331,7 +326,7 @@ impl pallet_staking::Config for Runtime { type Call = Call; type UnsignedPriority = StakingUnsignedPriority; type MaxIterations = MaxIterations; - type OffchainSolutionWeightLimit = MaximumBlockWeight; + type OffchainSolutionWeightLimit = (); type MinSolutionScoreBump = MinSolutionScoreBump; type WeightInfo = (); @@ -401,7 +396,7 @@ impl frame_system::offchain::SigningTypes for Runtime { } parameter_types! { - pub storage OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); + pub storage OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * BlockWeights::get().max_block; } impl pallet_offences::Config for Runtime { diff --git a/runtime/westend/src/constants.rs b/runtime/westend/src/constants.rs index 6fb7e934e1..ed74000704 100644 --- a/runtime/westend/src/constants.rs +++ b/runtime/westend/src/constants.rs @@ -61,7 +61,7 @@ pub mod fee { /// node's balance type. /// /// This should typically create a mapping between the following ranges: - /// - [0, frame_system::MaximumBlockWeight] + /// - [0, MAXIMUM_BLOCK_WEIGHT] /// - [Balance::min, Balance::max] /// /// Yet, it can be used for any other sort of change to weight-fee. Some examples being: @@ -87,16 +87,16 @@ pub mod fee { #[cfg(test)] mod tests { use frame_support::weights::WeightToFeePolynomial; - use runtime_common::{MaximumBlockWeight, ExtrinsicBaseWeight}; + use runtime_common::{MAXIMUM_BLOCK_WEIGHT, ExtrinsicBaseWeight}; use super::fee::WeightToFee; use super::currency::{CENTS, DOLLARS, MILLICENTS}; #[test] - // This function tests that the fee for `MaximumBlockWeight` of weight is correct + // This function tests that the fee for `MAXIMUM_BLOCK_WEIGHT` of weight is correct fn full_block_fee_is_correct() { // A full block should cost 16 DOLLARS println!("Base: {}", ExtrinsicBaseWeight::get()); - let x = WeightToFee::calc(&MaximumBlockWeight::get()); + let x = WeightToFee::calc(&MAXIMUM_BLOCK_WEIGHT); let y = 16 * DOLLARS; assert!(x.max(y) - x.min(y) < MILLICENTS); } diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 119e98e48f..236aaf434f 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -33,8 +33,7 @@ use primitives::v1::{ use runtime_common::{ SlowAdjustingFeeUpdate, CurrencyToVote, impls::ToAuthor, - BlockHashCount, MaximumBlockWeight, AvailableBlockRatio, MaximumBlockLength, - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, MaximumExtrinsicWeight, + BlockHashCount, BlockWeights, BlockLength, RocksDbWeight, OffchainSolutionWeightLimit, ParachainSessionKeyPlaceholder, }; use sp_runtime::{ @@ -120,6 +119,8 @@ parameter_types! { impl frame_system::Config for Runtime { type BaseCallFilter = BaseFilter; + type BlockWeights = BlockWeights; + type BlockLength = BlockLength; type Origin = Origin; type Call = Call; type Index = Nonce; @@ -131,13 +132,7 @@ impl frame_system::Config for Runtime { type Header = generic::Header; type Event = Event; type BlockHashCount = BlockHashCount; - type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = RocksDbWeight; - type BlockExecutionWeight = BlockExecutionWeight; - type ExtrinsicBaseWeight = ExtrinsicBaseWeight; - type MaximumExtrinsicWeight = MaximumExtrinsicWeight; - type MaximumBlockLength = MaximumBlockLength; - type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; type PalletInfo = PalletInfo; type AccountData = pallet_balances::AccountData; @@ -147,6 +142,8 @@ impl frame_system::Config for Runtime { } parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + BlockWeights::get().max_block; pub const MaxScheduledPerBlock: u32 = 50; } @@ -155,7 +152,7 @@ impl pallet_scheduler::Config for Runtime { type Origin = Origin; type PalletsOrigin = OriginCaller; type Call = Call; - type MaximumWeight = MaximumBlockWeight; + type MaximumWeight = MaximumSchedulerWeight; type ScheduleOrigin = EnsureRoot; type MaxScheduledPerBlock = MaxScheduledPerBlock; type WeightInfo = weights::pallet_scheduler::WeightInfo; @@ -312,9 +309,6 @@ parameter_types! { pub const ElectionLookahead: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; pub const MaxIterations: u32 = 10; pub MinSolutionScoreBump: Perbill = Perbill::from_rational_approximation(5u32, 10_000); - pub OffchainSolutionWeightLimit: Weight = MaximumExtrinsicWeight::get() - .saturating_sub(BlockExecutionWeight::get()) - .saturating_sub(ExtrinsicBaseWeight::get()); } impl pallet_staking::Config for Runtime { @@ -356,7 +350,7 @@ parameter_types! { } parameter_types! { - pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * MaximumBlockWeight::get(); + pub OffencesWeightSoftLimit: Weight = Perbill::from_percent(60) * BlockWeights::get().max_block; } impl pallet_offences::Config for Runtime { -- GitLab From e4370aa5ebb232fc96ab2bb96d2de34cc8c65c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 8 Dec 2020 16:05:00 +0100 Subject: [PATCH 102/203] Adds consistency checks for the `HostConfiguration` (#2087) * Adds consistency checks for the `HostConfiguration` Besides that it fixes the chain specs to make the consistency checks happy. * Update runtime/parachains/src/configuration.rs Co-authored-by: Shawn Tabrizi * Review feedback and test fixes etc * Update * More * I'm an idiot * Fix tests... Co-authored-by: Shawn Tabrizi --- node/service/src/chain_spec.rs | 10 +- node/test/service/src/chain_spec.rs | 5 +- primitives/src/v1.rs | 18 +-- .../src/runtime-api/validator-groups.md | 4 - runtime/parachains/src/configuration.rs | 111 ++++++++++++++++-- runtime/parachains/src/initializer.rs | 15 ++- runtime/parachains/src/runtime_api_impl/v1.rs | 5 - runtime/parachains/src/scheduler.rs | 109 +---------------- 8 files changed, 137 insertions(+), 140 deletions(-) diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 03cb99c012..0acc287fee 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -779,7 +779,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: max_code_size: 5 * 1024 * 1024, max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, - group_rotation_frequency: 10, + group_rotation_frequency: 20, + chain_availability_period: 4, + thread_availability_period: 4, + no_show_slots: 10, ..Default::default() }, }), @@ -1232,7 +1235,10 @@ pub fn rococo_testnet_genesis( max_code_size: 5 * 1024 * 1024, max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, - group_rotation_frequency: 10, + group_rotation_frequency: 20, + chain_availability_period: 4, + thread_availability_period: 4, + no_show_slots: 10, max_upward_queue_count: 8, max_upward_queue_size: 8 * 1024, max_downward_message_size: 1024, diff --git a/node/test/service/src/chain_spec.rs b/node/test/service/src/chain_spec.rs index da0b4d844e..546467ad8c 100644 --- a/node/test/service/src/chain_spec.rs +++ b/node/test/service/src/chain_spec.rs @@ -169,7 +169,10 @@ fn polkadot_testnet_genesis( max_code_size: 5 * 1024 * 1024, max_pov_size: 50 * 1024 * 1024, max_head_data_size: 32 * 1024, - group_rotation_frequency: 10, + group_rotation_frequency: 20, + chain_availability_period: 4, + thread_availability_period: 4, + no_show_slots: 10, ..Default::default() }, }), diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 3985254028..18a84a9b61 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -24,7 +24,7 @@ use bitvec::vec::BitVec; use primitives::RuntimeDebug; use runtime_primitives::traits::AppVerify; use inherents::InherentIdentifier; -use sp_arithmetic::traits::{BaseArithmetic, Saturating, Zero}; +use sp_arithmetic::traits::{BaseArithmetic, Saturating}; use application_crypto::KeyTypeId; pub use runtime_primitives::traits::{BlakeTwo256, Hash as HashT}; @@ -573,11 +573,7 @@ impl GroupRotationInfo { impl GroupRotationInfo { /// Returns the block number of the next rotation after the current block. If the current block /// is 10 and the rotation frequency is 5, this should return 15. - /// - /// If the group rotation frequency is 0, returns 0. pub fn next_rotation_at(&self) -> N { - if self.group_rotation_frequency.is_zero() { return Zero::zero() } - let cycle_once = self.now + self.group_rotation_frequency; cycle_once - ( cycle_once.saturating_sub(self.session_start_block) % self.group_rotation_frequency @@ -586,10 +582,7 @@ impl GroupRotationInfo { /// Returns the block number of the last rotation before or including the current block. If the /// current block is 10 and the rotation frequency is 5, this should return 10. - /// - /// If the group rotation frequency is 0, returns 0. pub fn last_rotation_at(&self) -> N { - if self.group_rotation_frequency.is_zero() { return Zero::zero() } self.now - ( self.now.saturating_sub(self.session_start_block) % self.group_rotation_frequency ) @@ -837,15 +830,6 @@ mod tests { assert_eq!(info.next_rotation_at(), 20); assert_eq!(info.last_rotation_at(), 15); - - let info = GroupRotationInfo { - session_start_block: 10u32, - now: 11, - group_rotation_frequency: 0, - }; - - assert_eq!(info.next_rotation_at(), 0); - assert_eq!(info.last_rotation_at(), 0); } #[test] diff --git a/roadmap/implementers-guide/src/runtime-api/validator-groups.md b/roadmap/implementers-guide/src/runtime-api/validator-groups.md index 42b39f976d..75a94e2349 100644 --- a/roadmap/implementers-guide/src/runtime-api/validator-groups.md +++ b/roadmap/implementers-guide/src/runtime-api/validator-groups.md @@ -17,14 +17,10 @@ impl GroupRotationInfo { /// Returns the block number of the next rotation after the current block. If the current block /// is 10 and the rotation frequency is 5, this should return 15. - /// - /// If the group rotation frequency is 0, returns 0. fn next_rotation_at(&self) -> BlockNumber; /// Returns the block number of the last rotation before or including the current block. If the /// current block is 10 and the rotation frequency is 5, this should return 10. - /// - /// If the group rotation frequency is 0, returns 0. fn last_rotation_at(&self) -> BlockNumber; } diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index a37234238c..af693ed676 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -28,9 +28,10 @@ use frame_support::{ }; use parity_scale_codec::{Encode, Decode}; use frame_system::ensure_root; +use sp_runtime::traits::Zero; /// All configuration of the runtime with respect to parachains and parathreads. -#[derive(Clone, Encode, Decode, PartialEq, Default, sp_core::RuntimeDebug)] +#[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct HostConfiguration { /// The minimum frequency at which parachains can update their validation code. @@ -50,23 +51,32 @@ pub struct HostConfiguration { pub parathread_cores: u32, /// The number of retries that a parathread author has to submit their block. pub parathread_retries: u32, - /// How often parachain groups should be rotated across parachains. Must be non-zero. + /// How often parachain groups should be rotated across parachains. + /// + /// Must be non-zero. pub group_rotation_frequency: BlockNumber, /// The availability period, in blocks, for parachains. This is the amount of blocks /// after inclusion that validators have to make the block available and signal its availability to - /// the chain. Must be at least 1. + /// the chain. + /// + /// Must be at least 1. pub chain_availability_period: BlockNumber, /// The availability period, in blocks, for parathreads. Same as the `chain_availability_period`, - /// but a differing timeout due to differing requirements. Must be at least 1. + /// but a differing timeout due to differing requirements. + /// + /// Must be at least 1. pub thread_availability_period: BlockNumber, /// The amount of blocks ahead to schedule parachains and parathreads. pub scheduling_lookahead: u32, - /// The maximum number of validators to have per core. `None` means no maximum. + /// The maximum number of validators to have per core. + /// + /// `None` means no maximum. pub max_validators_per_core: Option, /// The amount of sessions to keep for disputes. pub dispute_period: SessionIndex, /// The amount of consensus slots that must pass between submitting an assignment and /// submitting an approval vote before a validator is considered a no-show. + /// /// Must be at least 1. pub no_show_slots: u32, /// The number of delay tranches in total. @@ -132,6 +142,74 @@ pub struct HostConfiguration { pub hrmp_max_message_num_per_candidate: u32, } +impl> Default for HostConfiguration { + fn default() -> Self { + Self { + group_rotation_frequency: 1u32.into(), + chain_availability_period: 1u32.into(), + thread_availability_period: 1u32.into(), + no_show_slots: 1u32.into(), + validation_upgrade_frequency: Default::default(), + validation_upgrade_delay: Default::default(), + acceptance_period: Default::default(), + max_code_size: Default::default(), + max_pov_size: Default::default(), + max_head_data_size: Default::default(), + parathread_cores: Default::default(), + parathread_retries: Default::default(), + scheduling_lookahead: Default::default(), + max_validators_per_core: Default::default(), + dispute_period: Default::default(), + n_delay_tranches: Default::default(), + zeroth_delay_tranche_width: Default::default(), + needed_approvals: Default::default(), + relay_vrf_modulo_samples: Default::default(), + max_upward_queue_count: Default::default(), + max_upward_queue_size: Default::default(), + max_downward_message_size: Default::default(), + preferred_dispatchable_upward_messages_step_weight: Default::default(), + max_upward_message_size: Default::default(), + max_upward_message_num_per_candidate: Default::default(), + hrmp_open_request_ttl: Default::default(), + hrmp_sender_deposit: Default::default(), + hrmp_recipient_deposit: Default::default(), + hrmp_channel_max_capacity: Default::default(), + hrmp_channel_max_total_size: Default::default(), + hrmp_max_parachain_inbound_channels: Default::default(), + hrmp_max_parathread_inbound_channels: Default::default(), + hrmp_channel_max_message_size: Default::default(), + hrmp_max_parachain_outbound_channels: Default::default(), + hrmp_max_parathread_outbound_channels: Default::default(), + hrmp_max_message_num_per_candidate: Default::default(), + } + } +} + +impl HostConfiguration { + /// Checks that this instance is consistent with the requirements on each individual member. + /// + /// # Panic + /// + /// This function panics if any member is not set properly. + fn check_consistency(&self) { + if self.group_rotation_frequency.is_zero() { + panic!("`group_rotation_frequency` must be non-zero!") + } + + if self.chain_availability_period.is_zero() { + panic!("`chain_availability_period` must be at least 1!") + } + + if self.thread_availability_period.is_zero() { + panic!("`thread_availability_period` must be at least 1!") + } + + if self.no_show_slots.is_zero() { + panic!("`no_show_slots` must be at least 1!") + } + } +} + pub trait Config: frame_system::Config { } decl_storage! { @@ -141,10 +219,18 @@ decl_storage! { /// Pending configuration (if any) for the next session. PendingConfig: Option>; } + add_extra_genesis { + build(|config: &Self| { + config.config.check_consistency(); + }) + } } decl_error! { - pub enum Error for Module { } + pub enum Error for Module { + /// The new value for a configuration parameter is invalid. + InvalidNewValue, + } } decl_module! { @@ -237,6 +323,9 @@ decl_module! { #[weight = (1_000, DispatchClass::Operational)] pub fn set_group_rotation_frequency(origin, new: T::BlockNumber) -> DispatchResult { ensure_root(origin)?; + + ensure!(!new.is_zero(), Error::::InvalidNewValue); + Self::update_config_member(|config| { sp_std::mem::replace(&mut config.group_rotation_frequency, new) != new }); @@ -247,6 +336,9 @@ decl_module! { #[weight = (1_000, DispatchClass::Operational)] pub fn set_chain_availability_period(origin, new: T::BlockNumber) -> DispatchResult { ensure_root(origin)?; + + ensure!(!new.is_zero(), Error::::InvalidNewValue); + Self::update_config_member(|config| { sp_std::mem::replace(&mut config.chain_availability_period, new) != new }); @@ -257,6 +349,9 @@ decl_module! { #[weight = (1_000, DispatchClass::Operational)] pub fn set_thread_availability_period(origin, new: T::BlockNumber) -> DispatchResult { ensure_root(origin)?; + + ensure!(!new.is_zero(), Error::::InvalidNewValue); + Self::update_config_member(|config| { sp_std::mem::replace(&mut config.thread_availability_period, new) != new }); @@ -298,7 +393,9 @@ decl_module! { #[weight = (1_000, DispatchClass::Operational)] pub fn set_no_show_slots(origin, new: u32) -> DispatchResult { ensure_root(origin)?; - ensure!(new >= 1, "no_show_slots must be at least 1"); + + ensure!(!new.is_zero(), Error::::InvalidNewValue); + Self::update_config_member(|config| { sp_std::mem::replace(&mut config.no_show_slots, new) != new }); diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index 15484ed5fb..409b52a260 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -33,7 +33,7 @@ use crate::{ }; /// Information about a session change that has just occurred. -#[derive(Default, Clone)] +#[derive(Clone)] pub struct SessionChangeNotification { /// The new validators in the session. pub validators: Vec, @@ -49,6 +49,19 @@ pub struct SessionChangeNotification { pub session_index: sp_staking::SessionIndex, } +impl> Default for SessionChangeNotification { + fn default() -> Self { + Self { + validators: Vec::new(), + queued: Vec::new(), + prev_config: HostConfiguration::default(), + new_config: HostConfiguration::default(), + random_seed: Default::default(), + session_index: Default::default(), + } + } +} + #[derive(Encode, Decode)] struct BufferedSessionChange { apply_at: N, diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index a573361271..f099c0db15 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -26,7 +26,6 @@ use primitives::v1::{ GroupIndex, CandidateEvent, PersistedValidationData, SessionInfo, InboundDownwardMessage, InboundHrmpMessage, }; -use sp_runtime::traits::Zero; use frame_support::debug; use crate::{initializer, inclusion, scheduler, configuration, paras, session_info, dmp, hrmp}; @@ -57,10 +56,6 @@ pub fn availability_cores() -> Vec Module { if at < session_start_block { return None } - if config.group_rotation_frequency.is_zero() { - // interpret this as "no rotations" - return Some(GroupIndex(core.0)); - } - let validator_groups = ValidatorGroups::get(); if core.0 as usize >= validator_groups.len() { return None } @@ -599,9 +594,6 @@ impl Module { /// timeouts, i.e. only within `max(config.chain_availability_period, config.thread_availability_period)` /// of the last rotation would this return `Some`, unless there are no rotations. /// - /// If there are no rotations (config.group_rotation_frequency == 0), - /// availability timeouts can occur at any block. - /// /// This really should not be a box, but is working around a compiler limitation filed here: /// https://github.com/rust-lang/rust/issues/73226 /// which prevents us from testing the code if using `impl Trait`. @@ -611,12 +603,7 @@ impl Module { let session_start = >::get(); let blocks_since_session_start = now.saturating_sub(session_start); - let no_rotation = config.group_rotation_frequency.is_zero(); - let blocks_since_last_rotation = if no_rotation { - ::zero() - } else { - blocks_since_session_start % config.group_rotation_frequency - }; + let blocks_since_last_rotation = blocks_since_session_start % config.group_rotation_frequency; let absolute_cutoff = sp_std::cmp::max( config.chain_availability_period, @@ -1658,8 +1645,10 @@ mod tests { } = default_config(); let collator = CollatorId::from(Sr25519Keyring::Alice.public()); - assert!(chain_availability_period < thread_availability_period && - thread_availability_period < group_rotation_frequency); + assert!( + chain_availability_period < thread_availability_period + && thread_availability_period < group_rotation_frequency + ); let chain_a = ParaId::from(1); let thread_a = ParaId::from(2); @@ -1749,92 +1738,6 @@ mod tests { }); } - #[test] - fn availability_predicate_no_rotation() { - let genesis_config = MockGenesisConfig { - configuration: crate::configuration::GenesisConfig { - config: HostConfiguration { - group_rotation_frequency: 0, // no rotation - ..default_config() - }, - ..Default::default() - }, - ..Default::default() - }; - let HostConfiguration { - chain_availability_period, - thread_availability_period, - .. - } = default_config(); - let collator = CollatorId::from(Sr25519Keyring::Alice.public()); - - let chain_a = ParaId::from(1); - let thread_a = ParaId::from(2); - - let schedule_blank_para = |id, is_chain| Paras::schedule_para_initialize(id, ParaGenesisArgs { - genesis_head: Vec::new().into(), - validation_code: Vec::new().into(), - parachain: is_chain, - }); - - new_test_ext(genesis_config).execute_with(|| { - schedule_blank_para(chain_a, true); - schedule_blank_para(thread_a, false); - - // start a new session with our chain & thread registered. - run_to_block(1, |number| match number { - 1 => Some(SessionChangeNotification { - new_config: HostConfiguration{ - // Note: the `group_rotation_frequency` config change - // is not accounted for on session change - // group_rotation_frequency: 0, - ..default_config() - }, - validators: vec![ - ValidatorId::from(Sr25519Keyring::Alice.public()), - ValidatorId::from(Sr25519Keyring::Bob.public()), - ValidatorId::from(Sr25519Keyring::Charlie.public()), - ValidatorId::from(Sr25519Keyring::Dave.public()), - ValidatorId::from(Sr25519Keyring::Eve.public()), - ], - ..Default::default() - }), - _ => None, - }); - - // assign some availability cores. - { - AvailabilityCores::mutate(|cores| { - cores[0] = Some(CoreOccupied::Parachain); - cores[1] = Some(CoreOccupied::Parathread(ParathreadEntry { - claim: ParathreadClaim(thread_a, collator), - retries: 0, - })) - }); - } - run_to_block(1 + 1, |_| None); - run_to_block(1 + 1 + 100500, |_| None); - { - let pred = Scheduler::availability_timeout_predicate() - .expect("predicate exists with no rotation"); - - let now = System::block_number(); - - assert!(!pred(CoreIndex(0), now)); // assigned: chain - assert!(!pred(CoreIndex(1), now)); // assigned: thread - assert!(pred(CoreIndex(2), now)); - - // check the tighter bound on chains vs threads. - assert!(pred(CoreIndex(0), now - chain_availability_period)); - assert!(pred(CoreIndex(1), now - thread_availability_period)); - - // check the threshold is exact. - assert!(!pred(CoreIndex(0), now - chain_availability_period + 1)); - assert!(!pred(CoreIndex(1), now - thread_availability_period + 1)); - } - }); - } - #[test] fn next_up_on_available_uses_next_scheduled_or_none_for_thread() { let mut config = default_config(); -- GitLab From 7f66af4b9ded899a27176c5fd4f3c87d4d3e324f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Wed, 9 Dec 2020 10:02:36 +0100 Subject: [PATCH 103/203] Companion for #7671 (child trie deletion host function) (#2077) * Adapt to new kill_child_storage runtime interface version * "Update Substrate" * Update substrate Co-authored-by: parity-processbot <> --- Cargo.lock | 272 ++++++++++++++--------------- parachain/src/wasm_executor/mod.rs | 2 +- runtime/common/src/crowdfund.rs | 2 +- 3 files changed, 138 insertions(+), 138 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d64b5c9030..b9785ca9c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1462,7 +1462,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", ] @@ -1470,7 +1470,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -1488,7 +1488,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "chrono", "frame-benchmarking", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -1526,7 +1526,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "serde", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "bitflags", "frame-metadata", @@ -1562,7 +1562,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1573,7 +1573,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1585,7 +1585,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1595,7 +1595,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -1625,7 +1625,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-api", @@ -3798,7 +3798,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -3814,7 +3814,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -3829,7 +3829,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3854,7 +3854,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3868,7 +3868,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3884,7 +3884,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3899,7 +3899,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3914,7 +3914,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3935,7 +3935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3971,7 +3971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -3988,7 +3988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4002,7 +4002,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4032,7 +4032,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4068,7 +4068,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4097,7 +4097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "enumflags2", "frame-support", @@ -4112,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4127,7 +4127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4163,7 +4163,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4177,7 +4177,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4199,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4210,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4277,7 +4277,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-support", "parity-scale-codec", @@ -4290,7 +4290,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4305,7 +4305,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-benchmarking", "frame-support", @@ -4321,7 +4321,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "async-trait", "derive_more", @@ -6599,7 +6599,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6622,7 +6622,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6639,7 +6639,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6660,7 +6660,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "atty", "chrono", @@ -6714,7 +6714,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6725,7 +6725,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "fnv", @@ -6759,7 +6759,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "blake2-rfc", "hash-db", @@ -6789,7 +6789,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6800,7 +6800,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "fork-tree", @@ -6845,7 +6845,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "futures 0.3.8", @@ -6869,7 +6869,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6882,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6908,7 +6908,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "sc-client-api", @@ -6922,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "lazy_static", @@ -6951,7 +6951,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "parity-scale-codec", @@ -6967,7 +6967,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "parity-scale-codec", @@ -6982,7 +6982,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "parity-scale-codec", @@ -7000,7 +7000,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "finality-grandpa", @@ -7037,7 +7037,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "finality-grandpa", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7079,7 +7079,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "async-trait", "derive_more", @@ -7099,7 +7099,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "hash-db", "lazy_static", @@ -7118,7 +7118,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "async-std", "async-trait", @@ -7172,7 +7172,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7187,7 +7187,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "bytes 0.5.6", "fnv", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "libp2p", @@ -7227,7 +7227,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7236,7 +7236,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "hash-db", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "futures 0.3.8", @@ -7294,7 +7294,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7312,7 +7312,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "directories 3.0.1", "exit-future", @@ -7376,7 +7376,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "parity-scale-codec", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7411,7 +7411,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7432,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7456,7 +7456,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "futures 0.3.8", @@ -7478,7 +7478,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7933,7 +7933,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "sp-core", @@ -7945,7 +7945,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "hash-db", "parity-scale-codec", @@ -7961,7 +7961,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7973,7 +7973,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "serde", @@ -7985,7 +7985,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7998,7 +7998,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-api", @@ -8010,7 +8010,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8021,7 +8021,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-api", @@ -8033,7 +8033,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "log", @@ -8051,7 +8051,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "serde", "serde_json", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8086,7 +8086,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "merlin", "parity-scale-codec", @@ -8106,7 +8106,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8115,7 +8115,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8127,7 +8127,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "base58", "blake2-rfc", @@ -8171,7 +8171,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8180,7 +8180,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8190,7 +8190,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "environmental", "parity-scale-codec", @@ -8201,7 +8201,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "finality-grandpa", "log", @@ -8218,7 +8218,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8230,7 +8230,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "hash-db", @@ -8254,7 +8254,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "lazy_static", "sp-core", @@ -8265,7 +8265,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "async-trait", "derive_more", @@ -8281,7 +8281,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "serde", @@ -8293,7 +8293,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8304,7 +8304,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "sp-api", "sp-core", @@ -8314,7 +8314,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "backtrace", ] @@ -8322,7 +8322,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "serde", "sp-core", @@ -8331,7 +8331,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "either", "hash256-std-hasher", @@ -8352,7 +8352,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8369,7 +8369,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "Inflector", "proc-macro-crate", @@ -8381,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "serde", "serde_json", @@ -8390,7 +8390,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-api", @@ -8403,7 +8403,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8413,7 +8413,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "hash-db", "log", @@ -8435,12 +8435,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8453,7 +8453,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "sp-core", @@ -8466,7 +8466,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8480,7 +8480,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "log", "parity-scale-codec", @@ -8493,7 +8493,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "derive_more", "futures 0.3.8", @@ -8509,7 +8509,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "hash-db", "memory-db", @@ -8523,7 +8523,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "futures-core", @@ -8535,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8547,7 +8547,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8689,7 +8689,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "chrono", "console_error_panic_hook", @@ -8715,7 +8715,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "platforms", ] @@ -8723,7 +8723,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8746,7 +8746,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "async-std", "derive_more", @@ -8760,7 +8760,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8787,7 +8787,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8797,7 +8797,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#332399d16668a6c769f1a7db154bb9ea3b50e61c" +source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/parachain/src/wasm_executor/mod.rs b/parachain/src/wasm_executor/mod.rs index b384ceb6d3..2ab2e9064c 100644 --- a/parachain/src/wasm_executor/mod.rs +++ b/parachain/src/wasm_executor/mod.rs @@ -245,7 +245,7 @@ impl sp_externalities::Externalities for ValidationExternalities { panic!("child_storage: unsupported feature for parachain validation") } - fn kill_child_storage(&mut self, _: &ChildInfo) { + fn kill_child_storage(&mut self, _: &ChildInfo, _: Option) -> bool { panic!("kill_child_storage: unsupported feature for parachain validation") } diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdfund.rs index b3a2310889..865dbcc6fc 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdfund.rs @@ -560,7 +560,7 @@ impl Module { } pub fn crowdfund_kill(index: FundIndex) { - child::kill_storage(&Self::id_from_index(index)); + child::kill_storage(&Self::id_from_index(index), None); } } -- GitLab From 0b222461321004091da43be2ec3654d9d1fc2192 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Wed, 9 Dec 2020 14:05:21 +0100 Subject: [PATCH 104/203] Companion to "Expand remote keystore interface to allow for hybrid mode" (#2083) * adding missing param * updating to latest master --- Cargo.lock | 274 ++++++++++++++++++----------------- node/test/service/src/lib.rs | 1 + 2 files changed, 139 insertions(+), 136 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b9785ca9c0..f376b6b9e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1462,7 +1462,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", ] @@ -1470,7 +1470,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -1488,7 +1488,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "chrono", "frame-benchmarking", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -1526,7 +1526,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "serde", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "bitflags", "frame-metadata", @@ -1562,7 +1562,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1573,7 +1573,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1585,7 +1585,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1595,7 +1595,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -1625,7 +1625,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-api", @@ -3798,7 +3798,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -3814,7 +3814,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -3829,7 +3829,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3854,7 +3854,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3868,7 +3868,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3884,7 +3884,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3899,7 +3899,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3914,7 +3914,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3935,7 +3935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3971,7 +3971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -3988,7 +3988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4002,7 +4002,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4032,7 +4032,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4068,7 +4068,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4084,7 +4084,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4097,7 +4097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "enumflags2", "frame-support", @@ -4112,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4127,7 +4127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4163,7 +4163,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4177,7 +4177,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4199,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4210,7 +4210,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4277,7 +4277,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-support", "parity-scale-codec", @@ -4290,7 +4290,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4305,7 +4305,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4321,7 +4321,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6571,7 +6571,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "async-trait", "derive_more", @@ -6599,7 +6599,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6622,7 +6622,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6639,7 +6639,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6660,7 +6660,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "atty", "chrono", @@ -6714,7 +6714,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6725,7 +6725,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "fnv", @@ -6759,7 +6759,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "blake2-rfc", "hash-db", @@ -6789,7 +6789,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6800,7 +6800,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "fork-tree", @@ -6845,7 +6845,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "futures 0.3.8", @@ -6869,7 +6869,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6882,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6908,7 +6908,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "sc-client-api", @@ -6922,7 +6922,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "lazy_static", @@ -6951,7 +6951,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "parity-scale-codec", @@ -6967,7 +6967,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "parity-scale-codec", @@ -6982,7 +6982,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "parity-scale-codec", @@ -7000,7 +7000,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "finality-grandpa", @@ -7037,7 +7037,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "finality-grandpa", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7079,7 +7079,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "async-trait", "derive_more", @@ -7099,7 +7099,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "hash-db", "lazy_static", @@ -7118,7 +7118,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "async-std", "async-trait", @@ -7172,7 +7172,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7187,7 +7187,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "bytes 0.5.6", "fnv", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "libp2p", @@ -7227,7 +7227,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7236,7 +7236,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "hash-db", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "futures 0.3.8", @@ -7294,7 +7294,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7312,7 +7312,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "directories 3.0.1", "exit-future", @@ -7376,7 +7376,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "parity-scale-codec", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7411,7 +7411,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7432,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7456,7 +7456,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "futures 0.3.8", @@ -7478,7 +7478,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7524,6 +7524,7 @@ dependencies = [ "merlin", "rand 0.7.3", "rand_core 0.5.1", + "serde", "sha2 0.8.2", "subtle 2.2.3", "zeroize", @@ -7933,7 +7934,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "sp-core", @@ -7945,7 +7946,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "hash-db", "parity-scale-codec", @@ -7961,7 +7962,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7973,7 +7974,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "serde", @@ -7985,7 +7986,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7998,7 +7999,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-api", @@ -8010,7 +8011,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8021,7 +8022,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-api", @@ -8033,7 +8034,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "log", @@ -8051,7 +8052,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "serde", "serde_json", @@ -8060,7 +8061,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8086,7 +8087,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "merlin", "parity-scale-codec", @@ -8106,7 +8107,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8115,7 +8116,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8127,7 +8128,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "base58", "blake2-rfc", @@ -8171,7 +8172,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8180,7 +8181,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8190,7 +8191,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "environmental", "parity-scale-codec", @@ -8201,7 +8202,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "finality-grandpa", "log", @@ -8218,7 +8219,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8230,7 +8231,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "hash-db", @@ -8254,7 +8255,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "lazy_static", "sp-core", @@ -8265,7 +8266,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "async-trait", "derive_more", @@ -8274,6 +8275,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", "schnorrkel", + "serde", "sp-core", "sp-externalities", ] @@ -8281,7 +8283,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "serde", @@ -8293,7 +8295,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8304,7 +8306,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "sp-api", "sp-core", @@ -8314,7 +8316,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "backtrace", ] @@ -8322,7 +8324,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "serde", "sp-core", @@ -8331,7 +8333,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "either", "hash256-std-hasher", @@ -8352,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8369,7 +8371,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "Inflector", "proc-macro-crate", @@ -8381,7 +8383,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "serde", "serde_json", @@ -8390,7 +8392,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-api", @@ -8403,7 +8405,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8413,7 +8415,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "hash-db", "log", @@ -8435,12 +8437,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8453,7 +8455,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "sp-core", @@ -8466,7 +8468,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8480,7 +8482,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "log", "parity-scale-codec", @@ -8493,7 +8495,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "derive_more", "futures 0.3.8", @@ -8509,7 +8511,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "hash-db", "memory-db", @@ -8523,7 +8525,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "futures-core", @@ -8535,7 +8537,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8547,7 +8549,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8689,7 +8691,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "chrono", "console_error_panic_hook", @@ -8715,7 +8717,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "platforms", ] @@ -8723,7 +8725,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8746,7 +8748,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "async-std", "derive_more", @@ -8760,7 +8762,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8787,7 +8789,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8797,7 +8799,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#4b8c862ae3b0d34ecdc351888469f81704df68e2" +source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 28af4e1a59..4a4677a0ef 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -156,6 +156,7 @@ pub fn node_config( transaction_pool: Default::default(), network: network_config, keystore: KeystoreConfig::InMemory, + keystore_remote: Default::default(), database: DatabaseConfig::RocksDb { path: root.join("db"), cache_size: 128, -- GitLab From 7a0fcb07fc50becf159fe8f61f4f65e2c4d3ee44 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 9 Dec 2020 16:33:58 +0100 Subject: [PATCH 105/203] runtime/session_info: avoid heavy loop when introduced on a live chain (#2099) * session_info: a heavy loop test * session_info: fix a typo * session_info: fix heavy loop * session_info: crank the iterations all the way up --- runtime/parachains/src/session_info.rs | 31 +++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index c3faec7eeb..decc25a20d 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -101,8 +101,11 @@ impl Module { // update `EarliestStoredSession` based on `config.dispute_period` EarliestStoredSession::set(new_earliest_stored_session); // remove all entries from `Sessions` from the previous value up to the new value - for idx in old_earliest_stored_session..new_earliest_stored_session { - Sessions::remove(&idx); + // avoid a potentially heavy loop when introduced on a live chain + if old_earliest_stored_session != 0 || Sessions::get(0).is_some() { + for idx in old_earliest_stored_session..new_earliest_stored_session { + Sessions::remove(&idx); + } } // create a new entry in `Sessions` with information about the current session let new_session_info = SessionInfo { @@ -216,7 +219,7 @@ mod tests { } #[test] - fn session_pruning_is_based_on_dispute_deriod() { + fn session_pruning_is_based_on_dispute_period() { new_test_ext(genesis_config()).execute_with(|| { run_to_block(100, session_changes); assert_eq!(EarliestStoredSession::get(), 9); @@ -253,4 +256,26 @@ mod tests { assert_eq!(session.needed_approvals, 42); }) } + + #[test] + fn session_pruning_avoids_heavy_loop() { + new_test_ext(genesis_config()).execute_with(|| { + let start = 1_000_000_000; + System::on_initialize(start); + System::set_block_number(start); + + if let Some(notification) = new_session_every_block(start) { + Configuration::initializer_on_new_session(¬ification.validators, ¬ification.queued); + SessionInfo::initializer_on_new_session(¬ification); + } + + Configuration::initializer_initialize(start); + SessionInfo::initializer_initialize(start); + + assert_eq!(EarliestStoredSession::get(), start - 1); + + run_to_block(start + 1, new_session_every_block); + assert_eq!(EarliestStoredSession::get(), start); + }) + } } -- GitLab From b12325b92d59baabb401ed0c56135f69517a5c49 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 9 Dec 2020 23:23:06 +0100 Subject: [PATCH 106/203] Cargo.lock: Update to async-tls 0.10.2 (#2096) * Cargo.lock: Update to async-tls 0.10.2 * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 399 ++++++++++++++++++++++++++++------------------------- 1 file changed, 213 insertions(+), 186 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f376b6b9e6..91f480a07f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -238,23 +238,21 @@ dependencies = [ [[package]] name = "async-io" -version = "1.1.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38628c78a34f111c5a6b98fc87dfc056cd1590b61afe748b145be4623c56d194" +checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" dependencies = [ - "cfg-if 0.1.10", "concurrent-queue", "fastrand", "futures-lite", "libc", "log", + "nb-connect", "once_cell", "parking", "polling", - "socket2", "vec-arena", "waker-fn", - "wepoll-sys-stjepang", "winapi 0.3.9", ] @@ -302,15 +300,15 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" [[package]] name = "async-tls" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85a97c4a0ecce878efd3f945f119c78a646d8975340bca0398f9bb05c30cc52" +checksum = "dd0d8b6fc362bebff7502479fb5e9aed00c8cc3abc5af755536e73a128f0cb88" dependencies = [ "futures-core", "futures-io", - "rustls", + "rustls 0.19.0", "webpki", - "webpki-roots 0.20.0", + "webpki-roots", ] [[package]] @@ -1063,9 +1061,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" +checksum = "993a608597367c6377b258c25d7120740f00ed23a2252b729b1932dd7866f908" [[package]] name = "derive_more" @@ -1462,7 +1460,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", ] @@ -1470,7 +1468,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -1488,7 +1486,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "chrono", "frame-benchmarking", @@ -1510,7 +1508,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -1526,7 +1524,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "serde", @@ -1537,7 +1535,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "bitflags", "frame-metadata", @@ -1562,7 +1560,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1573,7 +1571,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1585,7 +1583,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1595,7 +1593,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1611,7 +1609,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -1625,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-api", @@ -2242,7 +2240,7 @@ dependencies = [ "futures-util", "hyper 0.13.6", "log", - "rustls", + "rustls 0.18.0", "rustls-native-certs", "tokio 0.2.21", "tokio-rustls", @@ -2292,6 +2290,22 @@ dependencies = [ "libc", ] +[[package]] +name = "if-watch" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d7c5e361e6b05c882b4847dd98992534cebc6fcde7f4bc98225bcf10fd6d0d" +dependencies = [ + "async-io", + "futures 0.3.8", + "futures-lite", + "if-addrs", + "ipnet", + "libc", + "log", + "winapi 0.3.9", +] + [[package]] name = "impl-codec" version = "0.4.2" @@ -2753,9 +2767,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.79" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" +checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" [[package]] name = "libloading" @@ -2775,9 +2789,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.31.2" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "724846a3194368fefcac7ebdab12e01b8ac382e3efe399ddbd28851ab34f396f" +checksum = "941af10b45fd27d15e94aea83002c4a21521849fad8aad78d1cdbf00a60b0a17" dependencies = [ "atomic", "bytes 0.5.6", @@ -2966,24 +2980,23 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4458ec36b5ab2662fb4d5c8bb9b6e1591da0ab6efe8881c7a7670ef033bc8937" +checksum = "7b934ee03a361f317df7d75defa4177b285534c58f49d5e6e240278e13ef3f65" dependencies = [ - "async-std", + "async-io", "data-encoding", "dns-parser", - "either", "futures 0.3.8", + "if-watch", "lazy_static", "libp2p-core", "libp2p-swarm", "log", - "net2", "rand 0.7.3", "smallvec 1.5.1", + "socket2", "void", - "wasm-timer", ] [[package]] @@ -3074,9 +3087,9 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e952dcc9d2d7e7e45ae8bfcff255723091bd43e3e9a7741a0af8a17fe55b3ed" +checksum = "bd96c3580fe59a9379ac7906c2f61c7f5ad3b7515362af0e72153a7cc9a45550" dependencies = [ "async-trait", "bytes 0.5.6", @@ -3152,9 +3165,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.26.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5736e2fccdcea6e728bbaf903bddc113be223313ce2c756ad9fe43b5a2b0f06" +checksum = "d8a0af4ea43104a01c634ee1b8026ce11f9ee3766a894a44f9e1da5a0eb74fc0" dependencies = [ "async-tls", "either", @@ -3162,12 +3175,12 @@ dependencies = [ "libp2p-core", "log", "quicksink", - "rustls", + "rustls 0.19.0", "rw-stream-sink", "soketto", "url 2.1.1", "webpki", - "webpki-roots 0.21.0", + "webpki-roots", ] [[package]] @@ -3596,6 +3609,16 @@ dependencies = [ "rand 0.3.23", ] +[[package]] +name = "nb-connect" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "net2" version = "0.2.34" @@ -3798,7 +3821,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -3814,7 +3837,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -3829,7 +3852,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3854,7 +3877,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3868,7 +3891,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3884,7 +3907,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3899,7 +3922,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3914,7 +3937,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3935,7 +3958,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -3951,7 +3974,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3971,7 +3994,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -3988,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4002,7 +4025,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4018,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4032,7 +4055,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4047,7 +4070,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4068,7 +4091,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4084,7 +4107,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4097,7 +4120,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "enumflags2", "frame-support", @@ -4112,7 +4135,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4127,7 +4150,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4147,7 +4170,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4163,7 +4186,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4177,7 +4200,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4199,7 +4222,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4210,7 +4233,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4224,7 +4247,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4242,7 +4265,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4282,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4277,7 +4300,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-support", "parity-scale-codec", @@ -4290,7 +4313,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4305,7 +4328,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-benchmarking", "frame-support", @@ -4321,7 +4344,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5746,14 +5769,14 @@ dependencies = [ [[package]] name = "polling" -version = "1.1.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0720e0b9ea9d52451cf29d3413ba8a9303f8815d9d9653ef70e03ff73e65566" +checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" dependencies = [ "cfg-if 0.1.10", "libc", "log", - "wepoll-sys-stjepang", + "wepoll-sys", "winapi 0.3.9", ] @@ -6512,6 +6535,19 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustls" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" +dependencies = [ + "base64 0.13.0", + "log", + "ring", + "sct", + "webpki", +] + [[package]] name = "rustls-native-certs" version = "0.4.0" @@ -6519,7 +6555,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "629d439a7672da82dd955498445e496ee2096fe2117b9f796558a43fdb9e59b8" dependencies = [ "openssl-probe", - "rustls", + "rustls 0.18.0", "schannel", "security-framework", ] @@ -6571,7 +6607,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "async-trait", "derive_more", @@ -6599,7 +6635,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6622,7 +6658,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6639,7 +6675,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6660,7 +6696,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6671,7 +6707,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "atty", "chrono", @@ -6714,7 +6750,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6725,7 +6761,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "fnv", @@ -6759,7 +6795,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "blake2-rfc", "hash-db", @@ -6789,7 +6825,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6800,7 +6836,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "fork-tree", @@ -6845,7 +6881,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "futures 0.3.8", @@ -6869,7 +6905,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6882,7 +6918,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6908,7 +6944,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "sc-client-api", @@ -6922,7 +6958,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "lazy_static", @@ -6951,7 +6987,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "parity-scale-codec", @@ -6967,7 +7003,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "parity-scale-codec", @@ -6982,7 +7018,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "parity-scale-codec", @@ -7000,7 +7036,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "finality-grandpa", @@ -7037,7 +7073,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "finality-grandpa", @@ -7061,7 +7097,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7079,7 +7115,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "async-trait", "derive_more", @@ -7099,7 +7135,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "hash-db", "lazy_static", @@ -7118,7 +7154,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "async-std", "async-trait", @@ -7172,7 +7208,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7187,7 +7223,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "bytes 0.5.6", "fnv", @@ -7214,7 +7250,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "libp2p", @@ -7227,7 +7263,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7236,7 +7272,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "hash-db", @@ -7270,7 +7306,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "futures 0.3.8", @@ -7294,7 +7330,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7312,7 +7348,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "directories 3.0.1", "exit-future", @@ -7376,7 +7412,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "parity-scale-codec", @@ -7391,7 +7427,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7411,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7432,7 +7468,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7456,7 +7492,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "futures 0.3.8", @@ -7478,7 +7514,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7905,11 +7941,11 @@ dependencies = [ [[package]] name = "socket2" -version = "0.3.12" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918" +checksum = "2c29947abdee2a218277abeca306f25789c938e500ea5a9d4b12a5a504466902" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "redox_syscall", "winapi 0.3.9", @@ -7934,7 +7970,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "sp-core", @@ -7946,7 +7982,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "hash-db", "parity-scale-codec", @@ -7962,7 +7998,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7974,7 +8010,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "serde", @@ -7986,7 +8022,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -7999,7 +8035,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8011,7 +8047,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8022,7 +8058,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8034,7 +8070,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "log", @@ -8052,7 +8088,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "serde", "serde_json", @@ -8061,7 +8097,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8087,7 +8123,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "merlin", "parity-scale-codec", @@ -8107,7 +8143,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8116,7 +8152,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8128,7 +8164,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "base58", "blake2-rfc", @@ -8172,7 +8208,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8181,7 +8217,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8191,7 +8227,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "environmental", "parity-scale-codec", @@ -8202,7 +8238,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "finality-grandpa", "log", @@ -8219,7 +8255,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8231,7 +8267,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "hash-db", @@ -8255,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "lazy_static", "sp-core", @@ -8266,7 +8302,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "async-trait", "derive_more", @@ -8283,7 +8319,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "serde", @@ -8295,7 +8331,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8306,7 +8342,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "sp-api", "sp-core", @@ -8316,7 +8352,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "backtrace", ] @@ -8324,7 +8360,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "serde", "sp-core", @@ -8333,7 +8369,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "either", "hash256-std-hasher", @@ -8354,7 +8390,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8371,7 +8407,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "Inflector", "proc-macro-crate", @@ -8383,7 +8419,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "serde", "serde_json", @@ -8392,7 +8428,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-api", @@ -8405,7 +8441,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8415,7 +8451,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "hash-db", "log", @@ -8437,12 +8473,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8455,7 +8491,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "sp-core", @@ -8468,7 +8504,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8482,7 +8518,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "log", "parity-scale-codec", @@ -8495,7 +8531,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "derive_more", "futures 0.3.8", @@ -8511,7 +8547,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "hash-db", "memory-db", @@ -8525,7 +8561,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "futures-core", @@ -8537,7 +8573,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8549,7 +8585,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8691,7 +8727,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "chrono", "console_error_panic_hook", @@ -8717,7 +8753,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "platforms", ] @@ -8725,7 +8761,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8748,7 +8784,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "async-std", "derive_more", @@ -8762,7 +8798,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8789,7 +8825,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8799,7 +8835,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#be8fd0588013a3b8eab5d5c761fe1c55bdd60dbb" +source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -9223,7 +9259,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "228139ddd4fea3fa345a29233009635235833e52807af7ea6448ead03890d6a9" dependencies = [ "futures-core", - "rustls", + "rustls 0.18.0", "tokio 0.2.21", "webpki", ] @@ -9656,9 +9692,9 @@ dependencies = [ [[package]] name = "waker-fn" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9571542c2ce85ce642e6b58b3364da2fb53526360dfb7c211add4f5c23105ff7" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" @@ -10020,15 +10056,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "webpki-roots" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f20dea7535251981a9670857150d571846545088359b28e4951d350bdaf179f" -dependencies = [ - "webpki", -] - [[package]] name = "webpki-roots" version = "0.21.0" @@ -10039,10 +10066,10 @@ dependencies = [ ] [[package]] -name = "wepoll-sys-stjepang" -version = "1.0.6" +name = "wepoll-sys" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd319e971980166b53e17b1026812ad66c6b54063be879eb182342b55284694" +checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff" dependencies = [ "cc", ] -- GitLab From 381cae23063f7fe6c5264e02e7a2bf79d6270eaa Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Thu, 10 Dec 2020 10:13:40 +0100 Subject: [PATCH 107/203] [WIP] Update weights in prep for v0.8.27 (#2097) * Update weights for polkadot * add Kusama weights * add westend weights * remove claims weight files claims still uses in-line weights which is fine cause it is a polkadot specific pallet Co-authored-by: Parity Benchmarking Bot Co-authored-by: Shawn Tabrizi --- runtime/kusama/src/weights/pallet_balances.rs | 23 ++-- .../kusama/src/weights/pallet_collective.rs | 87 ++++++++----- .../kusama/src/weights/pallet_democracy.rs | 111 ++++++++++------- .../src/weights/pallet_elections_phragmen.rs | 53 ++++---- runtime/kusama/src/weights/pallet_identity.rs | 116 +++++++++++------- .../kusama/src/weights/pallet_im_online.rs | 21 ++-- runtime/kusama/src/weights/pallet_indices.rs | 23 ++-- runtime/kusama/src/weights/pallet_multisig.rs | 64 ++++++---- runtime/kusama/src/weights/pallet_proxy.rs | 75 ++++++----- .../kusama/src/weights/pallet_scheduler.rs | 33 ++--- runtime/kusama/src/weights/pallet_session.rs | 9 +- runtime/kusama/src/weights/pallet_staking.rs | 104 +++++++++------- .../kusama/src/weights/pallet_timestamp.rs | 17 ++- runtime/kusama/src/weights/pallet_treasury.rs | 69 ++++++----- runtime/kusama/src/weights/pallet_utility.rs | 25 ++-- runtime/kusama/src/weights/pallet_vesting.rs | 43 ++++--- .../polkadot/src/weights/pallet_balances.rs | 20 +-- .../polkadot/src/weights/pallet_collective.rs | 86 ++++++++----- .../polkadot/src/weights/pallet_democracy.rs | 110 ++++++++++------- .../src/weights/pallet_elections_phragmen.rs | 52 ++++---- .../polkadot/src/weights/pallet_identity.rs | 114 ++++++++++------- .../polkadot/src/weights/pallet_im_online.rs | 18 +-- .../polkadot/src/weights/pallet_indices.rs | 20 +-- .../polkadot/src/weights/pallet_multisig.rs | 61 +++++---- runtime/polkadot/src/weights/pallet_proxy.rs | 72 ++++++----- .../polkadot/src/weights/pallet_scheduler.rs | 30 +++-- .../polkadot/src/weights/pallet_session.rs | 9 +- .../polkadot/src/weights/pallet_staking.rs | 103 +++++++++------- .../polkadot/src/weights/pallet_timestamp.rs | 14 +-- .../polkadot/src/weights/pallet_treasury.rs | 66 +++++----- .../polkadot/src/weights/pallet_utility.rs | 22 ++-- .../polkadot/src/weights/pallet_vesting.rs | 40 +++--- .../westend/src/weights/pallet_balances.rs | 17 +-- .../westend/src/weights/pallet_identity.rs | 111 ++++++++++------- .../westend/src/weights/pallet_im_online.rs | 15 ++- runtime/westend/src/weights/pallet_indices.rs | 17 +-- .../westend/src/weights/pallet_multisig.rs | 56 ++++++--- runtime/westend/src/weights/pallet_proxy.rs | 65 ++++++---- .../westend/src/weights/pallet_scheduler.rs | 23 ++-- runtime/westend/src/weights/pallet_session.rs | 9 +- runtime/westend/src/weights/pallet_staking.rs | 100 ++++++++------- .../westend/src/weights/pallet_timestamp.rs | 11 +- runtime/westend/src/weights/pallet_utility.rs | 19 +-- runtime/westend/src/weights/pallet_vesting.rs | 35 +++--- 44 files changed, 1275 insertions(+), 913 deletions(-) diff --git a/runtime/kusama/src/weights/pallet_balances.rs b/runtime/kusama/src/weights/pallet_balances.rs index 4ee5687e7e..7e6848c2fb 100644 --- a/runtime/kusama/src/weights/pallet_balances.rs +++ b/runtime/kusama/src/weights/pallet_balances.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_balances +//! Autogenerated weights for pallet_balances +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_balances @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,27 +44,27 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { fn transfer() -> Weight { - (91_625_000 as Weight) + (93_087_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn transfer_keep_alive() -> Weight { - (62_431_000 as Weight) + (63_971_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_balance_creating() -> Weight { - (34_599_000 as Weight) + (35_018_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_balance_killing() -> Weight { - (43_308_000 as Weight) + (44_144_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_transfer() -> Weight { - (90_578_000 as Weight) + (91_707_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_collective.rs b/runtime/kusama/src/weights/pallet_collective.rs index 5ee9f949f4..678d3c3168 100644 --- a/runtime/kusama/src/weights/pallet_collective.rs +++ b/runtime/kusama/src/weights/pallet_collective.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_collective +//! Autogenerated weights for pallet_collective +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_collective @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -46,73 +45,95 @@ pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { fn set_members(m: u32, n: u32, p: u32, ) -> Weight { (0 as Weight) - .saturating_add((20_744_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((71_000 as Weight).saturating_mul(n as Weight)) - .saturating_add((27_804_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 9_000 + .saturating_add((20_739_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 9_000 + .saturating_add((50_000 as Weight).saturating_mul(n as Weight)) + // Standard Error: 9_000 + .saturating_add((28_199_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(p as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } fn execute(b: u32, m: u32, ) -> Weight { - (29_512_000 as Weight) - .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((112_000 as Weight).saturating_mul(m as Weight)) + (30_949_000 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) + // Standard Error: 0 + .saturating_add((111_000 as Weight).saturating_mul(m as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } fn propose_execute(b: u32, m: u32, ) -> Weight { - (36_554_000 as Weight) + (37_904_000 as Weight) + // Standard Error: 0 .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) + // Standard Error: 0 .saturating_add((220_000 as Weight).saturating_mul(m as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) } fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - (60_010_000 as Weight) + (62_075_000 as Weight) + // Standard Error: 0 .saturating_add((5_000 as Weight).saturating_mul(b as Weight)) + // Standard Error: 0 .saturating_add((115_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((565_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 0 + .saturating_add((588_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn vote(m: u32, ) -> Weight { - (43_161_000 as Weight) - .saturating_add((277_000 as Weight).saturating_mul(m as Weight)) + (43_811_000 as Weight) + // Standard Error: 0 + .saturating_add((281_000 as Weight).saturating_mul(m as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - (57_179_000 as Weight) - .saturating_add((215_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((527_000 as Weight).saturating_mul(p as Weight)) + (59_086_000 as Weight) + // Standard Error: 1_000 + .saturating_add((222_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 1_000 + .saturating_add((542_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - (82_532_000 as Weight) + (84_535_000 as Weight) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((220_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((532_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 0 + .saturating_add((221_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((557_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_disapproved(m: u32, p: u32, ) -> Weight { - (63_597_000 as Weight) - .saturating_add((219_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((526_000 as Weight).saturating_mul(p as Weight)) + (65_098_000 as Weight) + // Standard Error: 0 + .saturating_add((221_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((552_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - (88_919_000 as Weight) - .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((220_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((532_000 as Weight).saturating_mul(p as Weight)) + (90_884_000 as Weight) + // Standard Error: 0 + .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) + // Standard Error: 0 + .saturating_add((221_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((558_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn disapprove_proposal(p: u32, ) -> Weight { - (33_674_000 as Weight) - .saturating_add((527_000 as Weight).saturating_mul(p as Weight)) + (34_674_000 as Weight) + // Standard Error: 0 + .saturating_add((552_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_democracy.rs b/runtime/kusama/src/weights/pallet_democracy.rs index 7f12bc7559..d6ee82eb95 100644 --- a/runtime/kusama/src/weights/pallet_democracy.rs +++ b/runtime/kusama/src/weights/pallet_democracy.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_democracy +//! Autogenerated weights for pallet_democracy +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_democracy @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,145 +44,163 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_democracy::WeightInfo for WeightInfo { fn propose() -> Weight { - (73_769_000 as Weight) + (76_513_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn second(s: u32, ) -> Weight { - (48_621_000 as Weight) - .saturating_add((191_000 as Weight).saturating_mul(s as Weight)) + (50_536_000 as Weight) + // Standard Error: 0 + .saturating_add((194_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn vote_new(r: u32, ) -> Weight { - (58_568_000 as Weight) - .saturating_add((224_000 as Weight).saturating_mul(r as Weight)) + (60_328_000 as Weight) + // Standard Error: 0 + .saturating_add((227_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn vote_existing(r: u32, ) -> Weight { - (58_374_000 as Weight) - .saturating_add((229_000 as Weight).saturating_mul(r as Weight)) + (60_063_000 as Weight) + // Standard Error: 0 + .saturating_add((232_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn emergency_cancel() -> Weight { - (35_851_000 as Weight) + (37_941_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn blacklist(p: u32, ) -> Weight { - (117_822_000 as Weight) - .saturating_add((802_000 as Weight).saturating_mul(p as Weight)) + (121_082_000 as Weight) + // Standard Error: 7_000 + .saturating_add((816_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn external_propose(v: u32, ) -> Weight { - (17_593_000 as Weight) - .saturating_add((110_000 as Weight).saturating_mul(v as Weight)) + (18_656_000 as Weight) + // Standard Error: 0 + .saturating_add((107_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn external_propose_majority() -> Weight { - (4_225_000 as Weight) + (4_291_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn external_propose_default() -> Weight { - (4_148_000 as Weight) + (4_484_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn fast_track() -> Weight { - (36_860_000 as Weight) + (38_722_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn veto_external(v: u32, ) -> Weight { - (38_043_000 as Weight) - .saturating_add((178_000 as Weight).saturating_mul(v as Weight)) + (39_271_000 as Weight) + // Standard Error: 0 + .saturating_add((187_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn cancel_proposal(p: u32, ) -> Weight { - (81_567_000 as Weight) - .saturating_add((876_000 as Weight).saturating_mul(p as Weight)) + (84_923_000 as Weight) + // Standard Error: 0 + .saturating_add((879_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn cancel_referendum() -> Weight { - (21_906_000 as Weight) + (22_591_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel_queued(r: u32, ) -> Weight { - (41_109_000 as Weight) - .saturating_add((3_388_000 as Weight).saturating_mul(r as Weight)) + (42_351_000 as Weight) + // Standard Error: 1_000 + .saturating_add((3_421_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn on_initialize_base(r: u32, ) -> Weight { - (13_877_000 as Weight) - .saturating_add((6_543_000 as Weight).saturating_mul(r as Weight)) + (16_859_000 as Weight) + // Standard Error: 3_000 + .saturating_add((6_940_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) } fn delegate(r: u32, ) -> Weight { - (76_902_000 as Weight) - .saturating_add((9_605_000 as Weight).saturating_mul(r as Weight)) + (81_043_000 as Weight) + // Standard Error: 2_000 + .saturating_add((10_032_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) .saturating_add(T::DbWeight::get().writes(4 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) } fn undelegate(r: u32, ) -> Weight { - (39_807_000 as Weight) - .saturating_add((9_502_000 as Weight).saturating_mul(r as Weight)) + (40_537_000 as Weight) + // Standard Error: 2_000 + .saturating_add((10_019_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) } fn clear_public_proposals() -> Weight { - (3_443_000 as Weight) + (3_649_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn note_preimage(b: u32, ) -> Weight { - (55_525_000 as Weight) + (57_601_000 as Weight) + // Standard Error: 0 .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn note_imminent_preimage(b: u32, ) -> Weight { - (37_807_000 as Weight) + (39_448_000 as Weight) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn reap_preimage(b: u32, ) -> Weight { - (51_485_000 as Weight) + (53_441_000 as Weight) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn unlock_remove(r: u32, ) -> Weight { - (49_585_000 as Weight) - .saturating_add((37_000 as Weight).saturating_mul(r as Weight)) + (50_814_000 as Weight) + // Standard Error: 0 + .saturating_add((39_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn unlock_set(r: u32, ) -> Weight { - (44_824_000 as Weight) - .saturating_add((220_000 as Weight).saturating_mul(r as Weight)) + (46_171_000 as Weight) + // Standard Error: 0 + .saturating_add((222_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn remove_vote(r: u32, ) -> Weight { - (27_128_000 as Weight) - .saturating_add((213_000 as Weight).saturating_mul(r as Weight)) + (28_134_000 as Weight) + // Standard Error: 0 + .saturating_add((217_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_other_vote(r: u32, ) -> Weight { - (27_306_000 as Weight) - .saturating_add((214_000 as Weight).saturating_mul(r as Weight)) + (28_233_000 as Weight) + // Standard Error: 0 + .saturating_add((219_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_elections_phragmen.rs b/runtime/kusama/src/weights/pallet_elections_phragmen.rs index 38d37ea631..93342c2266 100644 --- a/runtime/kusama/src/weights/pallet_elections_phragmen.rs +++ b/runtime/kusama/src/weights/pallet_elections_phragmen.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_elections_phragmen +//! Autogenerated weights for pallet_elections_phragmen +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_elections_phragmen @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,65 +44,73 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_elections_phragmen::WeightInfo for WeightInfo { fn vote(v: u32, ) -> Weight { - (83_050_000 as Weight) - .saturating_add((124_000 as Weight).saturating_mul(v as Weight)) + (86_473_000 as Weight) + // Standard Error: 9_000 + .saturating_add((199_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vote_update(v: u32, ) -> Weight { - (50_510_000 as Weight) - .saturating_add((116_000 as Weight).saturating_mul(v as Weight)) + (53_531_000 as Weight) + // Standard Error: 8_000 + .saturating_add((126_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_voter() -> Weight { - (67_489_000 as Weight) + (69_725_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn report_defunct_voter_correct(c: u32, v: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_722_000 as Weight).saturating_mul(c as Weight)) - .saturating_add((34_302_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 2_000 + .saturating_add((1_673_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 53_000 + .saturating_add((33_921_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn report_defunct_voter_incorrect(c: u32, v: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_724_000 as Weight).saturating_mul(c as Weight)) - .saturating_add((34_226_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 0 + .saturating_add((1_696_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 12_000 + .saturating_add((33_906_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn submit_candidacy(c: u32, ) -> Weight { - (67_828_000 as Weight) - .saturating_add((278_000 as Weight).saturating_mul(c as Weight)) + (70_603_000 as Weight) + // Standard Error: 0 + .saturating_add((276_000 as Weight).saturating_mul(c as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn renounce_candidacy_candidate(c: u32, ) -> Weight { - (41_519_000 as Weight) + (42_985_000 as Weight) + // Standard Error: 0 .saturating_add((140_000 as Weight).saturating_mul(c as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn renounce_candidacy_members() -> Weight { - (74_609_000 as Weight) + (76_320_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn renounce_candidacy_runners_up() -> Weight { - (45_458_000 as Weight) + (46_198_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_member_with_replacement() -> Weight { - (112_762_000 as Weight) + (115_357_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn remove_member_wrong_refund() -> Weight { - (8_355_000 as Weight) + (8_869_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } } diff --git a/runtime/kusama/src/weights/pallet_identity.rs b/runtime/kusama/src/weights/pallet_identity.rs index 09e63ae501..86d5e5261c 100644 --- a/runtime/kusama/src/weights/pallet_identity.rs +++ b/runtime/kusama/src/weights/pallet_identity.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_identity +//! Autogenerated weights for pallet_identity +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_identity @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,110 +44,135 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { fn add_registrar(r: u32, ) -> Weight { - (26_618_000 as Weight) - .saturating_add((318_000 as Weight).saturating_mul(r as Weight)) + (28_419_000 as Weight) + // Standard Error: 2_000 + .saturating_add((289_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_identity(r: u32, x: u32, ) -> Weight { - (71_033_000 as Weight) - .saturating_add((297_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_751_000 as Weight).saturating_mul(x as Weight)) + (73_891_000 as Weight) + // Standard Error: 19_000 + .saturating_add((279_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 2_000 + .saturating_add((1_819_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_subs_new(s: u32, ) -> Weight { - (51_338_000 as Weight) - .saturating_add((9_514_000 as Weight).saturating_mul(s as Weight)) + (52_415_000 as Weight) + // Standard Error: 1_000 + .saturating_add((9_876_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight))) .saturating_add(T::DbWeight::get().writes(1 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn set_subs_old(p: u32, ) -> Weight { - (47_288_000 as Weight) - .saturating_add((3_313_000 as Weight).saturating_mul(p as Weight)) + (48_406_000 as Weight) + // Standard Error: 0 + .saturating_add((3_392_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - (60_350_000 as Weight) - .saturating_add((187_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((3_328_000 as Weight).saturating_mul(s as Weight)) - .saturating_add((1_009_000 as Weight).saturating_mul(x as Weight)) + (61_817_000 as Weight) + // Standard Error: 8_000 + .saturating_add((202_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((3_417_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 1_000 + .saturating_add((1_075_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn request_judgement(r: u32, x: u32, ) -> Weight { - (72_162_000 as Weight) - .saturating_add((338_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((2_007_000 as Weight).saturating_mul(x as Weight)) + (73_843_000 as Weight) + // Standard Error: 9_000 + .saturating_add((348_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_085_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel_request(r: u32, x: u32, ) -> Weight { - (62_007_000 as Weight) - .saturating_add((199_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_985_000 as Weight).saturating_mul(x as Weight)) + (63_423_000 as Weight) + // Standard Error: 11_000 + .saturating_add((237_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_067_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_fee(r: u32, ) -> Weight { - (10_371_000 as Weight) - .saturating_add((261_000 as Weight).saturating_mul(r as Weight)) + (10_954_000 as Weight) + // Standard Error: 1_000 + .saturating_add((255_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_account_id(r: u32, ) -> Weight { - (11_728_000 as Weight) - .saturating_add((262_000 as Weight).saturating_mul(r as Weight)) + (12_327_000 as Weight) + // Standard Error: 1_000 + .saturating_add((263_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_fields(r: u32, ) -> Weight { - (10_565_000 as Weight) - .saturating_add((246_000 as Weight).saturating_mul(r as Weight)) + (11_006_000 as Weight) + // Standard Error: 1_000 + .saturating_add((255_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn provide_judgement(r: u32, x: u32, ) -> Weight { - (48_013_000 as Weight) - .saturating_add((281_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_996_000 as Weight).saturating_mul(x as Weight)) + (49_635_000 as Weight) + // Standard Error: 9_000 + .saturating_add((296_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_075_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } - fn kill_identity(r: u32, s: u32, _x: u32, ) -> Weight { - (101_578_000 as Weight) - .saturating_add((98_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((3_347_000 as Weight).saturating_mul(s as Weight)) + fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { + (101_563_000 as Weight) + // Standard Error: 6_000 + .saturating_add((207_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 0 + .saturating_add((3_404_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 + .saturating_add((8_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn add_sub(s: u32, ) -> Weight { - (71_638_000 as Weight) - .saturating_add((188_000 as Weight).saturating_mul(s as Weight)) + (73_298_000 as Weight) + // Standard Error: 0 + .saturating_add((183_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn rename_sub(s: u32, ) -> Weight { - (23_054_000 as Weight) + (23_667_000 as Weight) + // Standard Error: 0 .saturating_add((25_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_sub(s: u32, ) -> Weight { - (67_962_000 as Weight) - .saturating_add((163_000 as Weight).saturating_mul(s as Weight)) + (69_636_000 as Weight) + // Standard Error: 0 + .saturating_add((160_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn quit_sub(s: u32, ) -> Weight { - (44_825_000 as Weight) - .saturating_add((158_000 as Weight).saturating_mul(s as Weight)) + (45_890_000 as Weight) + // Standard Error: 0 + .saturating_add((156_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_im_online.rs b/runtime/kusama/src/weights/pallet_im_online.rs index 53073f641e..9281292314 100644 --- a/runtime/kusama/src/weights/pallet_im_online.rs +++ b/runtime/kusama/src/weights/pallet_im_online.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_im_online +//! Autogenerated weights for pallet_im_online +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_im_online @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,9 +44,11 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - (108_140_000 as Weight) - .saturating_add((217_000 as Weight).saturating_mul(k as Weight)) - .saturating_add((478_000 as Weight).saturating_mul(e as Weight)) + (112_814_000 as Weight) + // Standard Error: 0 + .saturating_add((215_000 as Weight).saturating_mul(k as Weight)) + // Standard Error: 2_000 + .saturating_add((491_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_indices.rs b/runtime/kusama/src/weights/pallet_indices.rs index 07773fe8b4..1f52749461 100644 --- a/runtime/kusama/src/weights/pallet_indices.rs +++ b/runtime/kusama/src/weights/pallet_indices.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_indices +//! Autogenerated weights for pallet_indices +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_indices @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,27 +44,27 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { fn claim() -> Weight { - (51_086_000 as Weight) + (53_201_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn transfer() -> Weight { - (57_319_000 as Weight) + (59_579_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn free() -> Weight { - (45_971_000 as Weight) + (47_496_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_transfer() -> Weight { - (47_039_000 as Weight) + (49_084_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn freeze() -> Weight { - (42_620_000 as Weight) + (44_478_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_multisig.rs b/runtime/kusama/src/weights/pallet_multisig.rs index 14def1b77b..0cd3cf1968 100644 --- a/runtime/kusama/src/weights/pallet_multisig.rs +++ b/runtime/kusama/src/weights/pallet_multisig.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_multisig +//! Autogenerated weights for pallet_multisig +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_multisig @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,64 +44,79 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { - (12_168_000 as Weight) + (12_476_000 as Weight) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) } fn as_multi_create(s: u32, z: u32, ) -> Weight { - (66_343_000 as Weight) - .saturating_add((87_000 as Weight).saturating_mul(s as Weight)) + (69_580_000 as Weight) + // Standard Error: 0 + .saturating_add((89_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (73_923_000 as Weight) - .saturating_add((91_000 as Weight).saturating_mul(s as Weight)) + (78_436_000 as Weight) + // Standard Error: 0 + .saturating_add((92_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (40_235_000 as Weight) - .saturating_add((109_000 as Weight).saturating_mul(s as Weight)) + (41_554_000 as Weight) + // Standard Error: 0 + .saturating_add((108_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (71_596_000 as Weight) - .saturating_add((122_000 as Weight).saturating_mul(s as Weight)) + (74_444_000 as Weight) + // Standard Error: 0 + .saturating_add((124_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (82_197_000 as Weight) - .saturating_add((248_000 as Weight).saturating_mul(s as Weight)) + (85_497_000 as Weight) + // Standard Error: 0 + .saturating_add((245_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((5_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn approve_as_multi_create(s: u32, ) -> Weight { - (65_473_000 as Weight) - .saturating_add((89_000 as Weight).saturating_mul(s as Weight)) + (69_232_000 as Weight) + // Standard Error: 0 + .saturating_add((86_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn approve_as_multi_approve(s: u32, ) -> Weight { - (38_965_000 as Weight) - .saturating_add((108_000 as Weight).saturating_mul(s as Weight)) + (40_932_000 as Weight) + // Standard Error: 0 + .saturating_add((107_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn approve_as_multi_complete(s: u32, ) -> Weight { - (153_044_000 as Weight) - .saturating_add((251_000 as Weight).saturating_mul(s as Weight)) + (157_594_000 as Weight) + // Standard Error: 0 + .saturating_add((245_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn cancel_as_multi(s: u32, ) -> Weight { - (107_171_000 as Weight) + (109_613_000 as Weight) + // Standard Error: 0 .saturating_add((89_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_proxy.rs b/runtime/kusama/src/weights/pallet_proxy.rs index 5a520577e3..8943f9ef74 100644 --- a/runtime/kusama/src/weights/pallet_proxy.rs +++ b/runtime/kusama/src/weights/pallet_proxy.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_proxy +//! Autogenerated weights for pallet_proxy +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_proxy @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,65 +44,79 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { - (30_797_000 as Weight) - .saturating_add((182_000 as Weight).saturating_mul(p as Weight)) + (30_904_000 as Weight) + // Standard Error: 1_000 + .saturating_add((196_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } fn proxy_announced(a: u32, p: u32, ) -> Weight { - (65_387_000 as Weight) - .saturating_add((849_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((183_000 as Weight).saturating_mul(p as Weight)) + (65_146_000 as Weight) + // Standard Error: 1_000 + .saturating_add((825_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((185_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_announcement(a: u32, p: u32, ) -> Weight { - (41_839_000 as Weight) - .saturating_add((832_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((7_000 as Weight).saturating_mul(p as Weight)) + (41_395_000 as Weight) + // Standard Error: 1_000 + .saturating_add((818_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((11_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn reject_announcement(a: u32, p: u32, ) -> Weight { - (41_701_000 as Weight) - .saturating_add((835_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((11_000 as Weight).saturating_mul(p as Weight)) + (41_431_000 as Weight) + // Standard Error: 1_000 + .saturating_add((820_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((13_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn announce(a: u32, p: u32, ) -> Weight { - (66_233_000 as Weight) - .saturating_add((741_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((194_000 as Weight).saturating_mul(p as Weight)) + (65_751_000 as Weight) + // Standard Error: 1_000 + .saturating_add((703_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((186_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn add_proxy(p: u32, ) -> Weight { - (45_088_000 as Weight) - .saturating_add((194_000 as Weight).saturating_mul(p as Weight)) + (44_708_000 as Weight) + // Standard Error: 1_000 + .saturating_add((196_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_proxy(p: u32, ) -> Weight { - (40_241_000 as Weight) - .saturating_add((226_000 as Weight).saturating_mul(p as Weight)) + (40_043_000 as Weight) + // Standard Error: 1_000 + .saturating_add((235_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_proxies(p: u32, ) -> Weight { - (38_268_000 as Weight) - .saturating_add((183_000 as Weight).saturating_mul(p as Weight)) + (38_286_000 as Weight) + // Standard Error: 1_000 + .saturating_add((189_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn anonymous(p: u32, ) -> Weight { - (63_718_000 as Weight) - .saturating_add((29_000 as Weight).saturating_mul(p as Weight)) + (63_581_000 as Weight) + // Standard Error: 1_000 + .saturating_add((25_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn kill_anonymous(p: u32, ) -> Weight { - (40_839_000 as Weight) - .saturating_add((189_000 as Weight).saturating_mul(p as Weight)) + (41_113_000 as Weight) + // Standard Error: 1_000 + .saturating_add((187_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_scheduler.rs b/runtime/kusama/src/weights/pallet_scheduler.rs index 4ecddb8d5e..f4bdbbfaf7 100644 --- a/runtime/kusama/src/weights/pallet_scheduler.rs +++ b/runtime/kusama/src/weights/pallet_scheduler.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_scheduler +//! Autogenerated weights for pallet_scheduler +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_scheduler @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,26 +44,30 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { fn schedule(s: u32, ) -> Weight { - (33_450_000 as Weight) - .saturating_add((48_000 as Weight).saturating_mul(s as Weight)) + (34_006_000 as Weight) + // Standard Error: 0 + .saturating_add((47_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel(s: u32, ) -> Weight { - (30_190_000 as Weight) - .saturating_add((3_043_000 as Weight).saturating_mul(s as Weight)) + (30_954_000 as Weight) + // Standard Error: 6_000 + .saturating_add((3_073_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn schedule_named(s: u32, ) -> Weight { - (42_823_000 as Weight) - .saturating_add((69_000 as Weight).saturating_mul(s as Weight)) + (44_217_000 as Weight) + // Standard Error: 1_000 + .saturating_add((66_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn cancel_named(s: u32, ) -> Weight { - (34_212_000 as Weight) - .saturating_add((3_053_000 as Weight).saturating_mul(s as Weight)) + (35_521_000 as Weight) + // Standard Error: 6_000 + .saturating_add((3_084_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_session.rs b/runtime/kusama/src/weights/pallet_session.rs index 5c2d95a53e..1304deb445 100644 --- a/runtime/kusama/src/weights/pallet_session.rs +++ b/runtime/kusama/src/weights/pallet_session.rs @@ -13,9 +13,10 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_session +//! Autogenerated weights for pallet_session +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-11-03, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: @@ -43,12 +44,12 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_session::WeightInfo for WeightInfo { fn set_keys() -> Weight { - (89_426_000 as Weight) + (91_470_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn purge_keys() -> Weight { - (53_670_000 as Weight) + (53_966_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } diff --git a/runtime/kusama/src/weights/pallet_staking.rs b/runtime/kusama/src/weights/pallet_staking.rs index 43316a4236..7f19219ac5 100644 --- a/runtime/kusama/src/weights/pallet_staking.rs +++ b/runtime/kusama/src/weights/pallet_staking.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_staking +//! Autogenerated weights for pallet_staking +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_staking @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,134 +44,147 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_staking::WeightInfo for WeightInfo { fn bond() -> Weight { - (91_974_000 as Weight) + (97_060_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn bond_extra() -> Weight { - (72_427_000 as Weight) + (76_691_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn unbond() -> Weight { - (65_703_000 as Weight) + (69_501_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn withdraw_unbonded_update(s: u32, ) -> Weight { - (66_099_000 as Weight) - .saturating_add((30_000 as Weight).saturating_mul(s as Weight)) + (69_487_000 as Weight) + // Standard Error: 0 + .saturating_add((28_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn withdraw_unbonded_kill(s: u32, ) -> Weight { - (109_170_000 as Weight) - .saturating_add((3_844_000 as Weight).saturating_mul(s as Weight)) + (113_859_000 as Weight) + // Standard Error: 1_000 + .saturating_add((3_977_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn validate() -> Weight { - (22_484_000 as Weight) + (23_991_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn nominate(n: u32, ) -> Weight { - (29_194_000 as Weight) - .saturating_add((396_000 as Weight).saturating_mul(n as Weight)) + (31_051_000 as Weight) + // Standard Error: 12_000 + .saturating_add((398_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn chill() -> Weight { - (22_054_000 as Weight) + (23_608_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn set_payee() -> Weight { - (14_987_000 as Weight) + (16_106_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_controller() -> Weight { - (32_629_000 as Weight) + (35_097_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn set_validator_count() -> Weight { - (3_079_000 as Weight) + (3_247_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_no_eras() -> Weight { - (3_482_000 as Weight) + (3_667_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_new_era() -> Weight { - (3_459_000 as Weight) + (3_661_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_new_era_always() -> Weight { - (3_459_000 as Weight) + (3_619_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_invulnerables(v: u32, ) -> Weight { - (3_548_000 as Weight) + (3_787_000 as Weight) + // Standard Error: 0 .saturating_add((9_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_unstake(s: u32, ) -> Weight { - (74_819_000 as Weight) - .saturating_add((3_815_000 as Weight).saturating_mul(s as Weight)) + (77_193_000 as Weight) + // Standard Error: 1_000 + .saturating_add((3_980_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn cancel_deferred_slash(s: u32, ) -> Weight { - (5_845_830_000 as Weight) - .saturating_add((34_687_000 as Weight).saturating_mul(s as Weight)) + (5_838_529_000 as Weight) + // Standard Error: 388_000 + .saturating_add((34_638_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn payout_stakers_dead_controller(n: u32, ) -> Weight { - (134_981_000 as Weight) - .saturating_add((57_170_000 as Weight).saturating_mul(n as Weight)) + (134_866_000 as Weight) + // Standard Error: 13_000 + .saturating_add((59_407_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(11 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(n as Weight))) } fn payout_stakers_alive_staked(n: u32, ) -> Weight { - (163_572_000 as Weight) - .saturating_add((74_648_000 as Weight).saturating_mul(n as Weight)) + (169_692_000 as Weight) + // Standard Error: 14_000 + .saturating_add((77_518_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(12 as Weight)) .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(n as Weight))) } fn rebond(l: u32, ) -> Weight { - (44_834_000 as Weight) + (47_084_000 as Weight) + // Standard Error: 2_000 .saturating_add((103_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn set_history_depth(e: u32, ) -> Weight { (0 as Weight) - .saturating_add((36_157_000 as Weight).saturating_mul(e as Weight)) + // Standard Error: 63_000 + .saturating_add((38_667_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) .saturating_add(T::DbWeight::get().writes((7 as Weight).saturating_mul(e as Weight))) } fn reap_stash(s: u32, ) -> Weight { - (94_156_000 as Weight) - .saturating_add((3_813_000 as Weight).saturating_mul(s as Weight)) + (97_545_000 as Weight) + // Standard Error: 0 + .saturating_add((3_988_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn new_era(v: u32, n: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_016_231_000 as Weight).saturating_mul(v as Weight)) - .saturating_add((117_899_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) + // Standard Error: 672_000 + .saturating_add((735_440_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 33_000 + .saturating_add((104_408_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(v as Weight))) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(8 as Weight)) @@ -180,10 +192,14 @@ impl pallet_staking::WeightInfo for WeightInfo { } fn submit_solution_better(v: u32, n: u32, a: u32, w: u32, ) -> Weight { (0 as Weight) - .saturating_add((873_000 as Weight).saturating_mul(v as Weight)) - .saturating_add((499_000 as Weight).saturating_mul(n as Weight)) - .saturating_add((95_179_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((7_721_000 as Weight).saturating_mul(w as Weight)) + // Standard Error: 45_000 + .saturating_add((1_479_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 18_000 + .saturating_add((630_000 as Weight).saturating_mul(n as Weight)) + // Standard Error: 45_000 + .saturating_add((99_647_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 94_000 + .saturating_add((8_674_000 as Weight).saturating_mul(w as Weight)) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(a as Weight))) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight))) diff --git a/runtime/kusama/src/weights/pallet_timestamp.rs b/runtime/kusama/src/weights/pallet_timestamp.rs index 61a54a44e5..e4173ab5f9 100644 --- a/runtime/kusama/src/weights/pallet_timestamp.rs +++ b/runtime/kusama/src/weights/pallet_timestamp.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_timestamp +//! Autogenerated weights for pallet_timestamp +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_timestamp @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,11 +44,11 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { fn set() -> Weight { - (10_514_000 as Weight) + (11_338_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_finalize() -> Weight { - (5_950_000 as Weight) + (6_080_000 as Weight) } } diff --git a/runtime/kusama/src/weights/pallet_treasury.rs b/runtime/kusama/src/weights/pallet_treasury.rs index a9a85c2ff5..73e1b6a82a 100644 --- a/runtime/kusama/src/weights/pallet_treasury.rs +++ b/runtime/kusama/src/weights/pallet_treasury.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_treasury +//! Autogenerated weights for pallet_treasury +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_treasury @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,112 +44,120 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { fn propose_spend() -> Weight { - (52_217_000 as Weight) + (53_899_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn reject_proposal() -> Weight { - (83_066_000 as Weight) + (84_208_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn approve_proposal() -> Weight { - (11_351_000 as Weight) + (11_576_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn report_awesome(r: u32, ) -> Weight { - (64_348_000 as Weight) + (66_679_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn retract_tip() -> Weight { - (54_445_000 as Weight) + (56_703_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip_new(r: u32, t: u32, ) -> Weight { - (40_044_000 as Weight) + (42_139_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((145_000 as Weight).saturating_mul(t as Weight)) + // Standard Error: 0 + .saturating_add((144_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip(t: u32, ) -> Weight { - (27_277_000 as Weight) - .saturating_add((688_000 as Weight).saturating_mul(t as Weight)) + (27_980_000 as Weight) + // Standard Error: 1_000 + .saturating_add((691_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn close_tip(t: u32, ) -> Weight { - (102_574_000 as Weight) + (105_039_000 as Weight) + // Standard Error: 0 .saturating_add((360_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn propose_bounty(d: u32, ) -> Weight { - (55_563_000 as Weight) + (57_452_000 as Weight) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn approve_bounty() -> Weight { - (15_019_000 as Weight) + (15_509_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn propose_curator() -> Weight { - (11_849_000 as Weight) + (12_403_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn unassign_curator() -> Weight { - (66_601_000 as Weight) + (68_535_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn accept_curator() -> Weight { - (46_454_000 as Weight) + (48_001_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn award_bounty() -> Weight { - (32_599_000 as Weight) + (33_291_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn claim_bounty() -> Weight { - (155_219_000 as Weight) + (159_266_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn close_bounty_proposed() -> Weight { - (65_443_000 as Weight) + (67_667_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_bounty_active() -> Weight { - (102_931_000 as Weight) + (105_482_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn extend_bounty_expiry() -> Weight { - (31_483_000 as Weight) + (32_502_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_initialize_proposals(p: u32, ) -> Weight { - (110_747_000 as Weight) - .saturating_add((69_650_000 as Weight).saturating_mul(p as Weight)) + (108_437_000 as Weight) + // Standard Error: 16_000 + .saturating_add((70_932_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(p as Weight))) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(p as Weight))) } fn on_initialize_bounties(b: u32, ) -> Weight { - (102_988_000 as Weight) - .saturating_add((69_250_000 as Weight).saturating_mul(b as Weight)) + (105_767_000 as Weight) + // Standard Error: 17_000 + .saturating_add((70_197_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(b as Weight))) .saturating_add(T::DbWeight::get().writes(3 as Weight)) diff --git a/runtime/kusama/src/weights/pallet_utility.rs b/runtime/kusama/src/weights/pallet_utility.rs index d4201cd2cf..10d6f0ac5a 100644 --- a/runtime/kusama/src/weights/pallet_utility.rs +++ b/runtime/kusama/src/weights/pallet_utility.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_utility +//! Autogenerated weights for pallet_utility +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_utility @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,14 +44,16 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { - (18_717_000 as Weight) - .saturating_add((1_995_000 as Weight).saturating_mul(c as Weight)) + (19_612_000 as Weight) + // Standard Error: 0 + .saturating_add((1_988_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (5_548_000 as Weight) + (5_849_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (19_735_000 as Weight) - .saturating_add((1_990_000 as Weight).saturating_mul(c as Weight)) + (21_934_000 as Weight) + // Standard Error: 0 + .saturating_add((1_503_000 as Weight).saturating_mul(c as Weight)) } } diff --git a/runtime/kusama/src/weights/pallet_vesting.rs b/runtime/kusama/src/weights/pallet_vesting.rs index 59ffb2f975..398b4da678 100644 --- a/runtime/kusama/src/weights/pallet_vesting.rs +++ b/runtime/kusama/src/weights/pallet_vesting.rs @@ -13,16 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_vesting +//! Autogenerated weights for pallet_vesting +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark -// --chain -// kusama-dev +// --chain=kusama-dev // --steps=50 // --repeat=20 // --pallet=pallet_vesting @@ -30,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/kusama/src/weights/ @@ -45,38 +44,44 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { fn vest_locked(l: u32, ) -> Weight { - (54_477_000 as Weight) - .saturating_add((129_000 as Weight).saturating_mul(l as Weight)) + (54_809_000 as Weight) + // Standard Error: 0 + .saturating_add((133_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn vest_unlocked(l: u32, ) -> Weight { - (58_567_000 as Weight) - .saturating_add((106_000 as Weight).saturating_mul(l as Weight)) + (59_001_000 as Weight) + // Standard Error: 2_000 + .saturating_add((107_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vest_other_locked(l: u32, ) -> Weight { - (54_059_000 as Weight) - .saturating_add((135_000 as Weight).saturating_mul(l as Weight)) + (54_779_000 as Weight) + // Standard Error: 0 + .saturating_add((130_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vest_other_unlocked(l: u32, ) -> Weight { - (58_515_000 as Weight) - .saturating_add((104_000 as Weight).saturating_mul(l as Weight)) + (58_762_000 as Weight) + // Standard Error: 2_000 + .saturating_add((109_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn vested_transfer(l: u32, ) -> Weight { - (120_227_000 as Weight) - .saturating_add((168_000 as Weight).saturating_mul(l as Weight)) + (119_976_000 as Weight) + // Standard Error: 8_000 + .saturating_add((174_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn force_vested_transfer(l: u32, ) -> Weight { - (119_321_000 as Weight) - .saturating_add((167_000 as Weight).saturating_mul(l as Weight)) + (119_342_000 as Weight) + // Standard Error: 8_000 + .saturating_add((168_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_balances.rs b/runtime/polkadot/src/weights/pallet_balances.rs index 20ef0a7f27..c1998eafcb 100644 --- a/runtime/polkadot/src/weights/pallet_balances.rs +++ b/runtime/polkadot/src/weights/pallet_balances.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_balances +//! Autogenerated weights for pallet_balances +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-08, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,27 +44,27 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { fn transfer() -> Weight { - (90_334_000 as Weight) + (93_434_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn transfer_keep_alive() -> Weight { - (61_839_000 as Weight) + (64_060_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_balance_creating() -> Weight { - (34_411_000 as Weight) + (35_345_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_balance_killing() -> Weight { - (43_124_000 as Weight) + (44_679_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_transfer() -> Weight { - (88_850_000 as Weight) + (92_521_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_collective.rs b/runtime/polkadot/src/weights/pallet_collective.rs index acd43e0e92..52e58a91e0 100644 --- a/runtime/polkadot/src/weights/pallet_collective.rs +++ b/runtime/polkadot/src/weights/pallet_collective.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_collective +//! Autogenerated weights for pallet_collective +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-08, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -45,73 +45,95 @@ pub struct WeightInfo(PhantomData); impl pallet_collective::WeightInfo for WeightInfo { fn set_members(m: u32, n: u32, p: u32, ) -> Weight { (0 as Weight) - .saturating_add((20_942_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((124_000 as Weight).saturating_mul(n as Weight)) - .saturating_add((27_863_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 9_000 + .saturating_add((20_774_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 9_000 + .saturating_add((140_000 as Weight).saturating_mul(n as Weight)) + // Standard Error: 9_000 + .saturating_add((28_269_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(p as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } fn execute(b: u32, m: u32, ) -> Weight { - (29_288_000 as Weight) + (31_199_000 as Weight) + // Standard Error: 0 .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((107_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((112_000 as Weight).saturating_mul(m as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } fn propose_execute(b: u32, m: u32, ) -> Weight { - (36_744_000 as Weight) - .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((215_000 as Weight).saturating_mul(m as Weight)) + (38_299_000 as Weight) + // Standard Error: 0 + .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) + // Standard Error: 0 + .saturating_add((226_000 as Weight).saturating_mul(m as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) } fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { - (59_415_000 as Weight) + (62_096_000 as Weight) + // Standard Error: 0 .saturating_add((5_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((119_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((573_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 0 + .saturating_add((120_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((595_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn vote(m: u32, ) -> Weight { - (42_965_000 as Weight) - .saturating_add((277_000 as Weight).saturating_mul(m as Weight)) + (44_252_000 as Weight) + // Standard Error: 0 + .saturating_add((286_000 as Weight).saturating_mul(m as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn close_early_disapproved(m: u32, p: u32, ) -> Weight { - (56_592_000 as Weight) - .saturating_add((219_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((539_000 as Weight).saturating_mul(p as Weight)) + (59_479_000 as Weight) + // Standard Error: 0 + .saturating_add((221_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((549_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { - (82_480_000 as Weight) + (85_690_000 as Weight) + // Standard Error: 0 .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((220_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((539_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 0 + .saturating_add((223_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((555_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_disapproved(m: u32, p: u32, ) -> Weight { - (63_358_000 as Weight) - .saturating_add((220_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((543_000 as Weight).saturating_mul(p as Weight)) + (65_935_000 as Weight) + // Standard Error: 0 + .saturating_add((225_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((554_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { - (88_301_000 as Weight) + (92_386_000 as Weight) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) - .saturating_add((223_000 as Weight).saturating_mul(m as Weight)) - .saturating_add((554_000 as Weight).saturating_mul(p as Weight)) + // Standard Error: 0 + .saturating_add((224_000 as Weight).saturating_mul(m as Weight)) + // Standard Error: 0 + .saturating_add((562_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn disapprove_proposal(p: u32, ) -> Weight { - (33_338_000 as Weight) - .saturating_add((543_000 as Weight).saturating_mul(p as Weight)) + (34_916_000 as Weight) + // Standard Error: 0 + .saturating_add((557_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_democracy.rs b/runtime/polkadot/src/weights/pallet_democracy.rs index 963ac269dd..156e30c16c 100644 --- a/runtime/polkadot/src/weights/pallet_democracy.rs +++ b/runtime/polkadot/src/weights/pallet_democracy.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_democracy +//! Autogenerated weights for pallet_democracy +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-08, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,145 +44,163 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_democracy::WeightInfo for WeightInfo { fn propose() -> Weight { - (73_078_000 as Weight) + (78_090_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn second(s: u32, ) -> Weight { - (48_015_000 as Weight) - .saturating_add((189_000 as Weight).saturating_mul(s as Weight)) + (51_177_000 as Weight) + // Standard Error: 0 + .saturating_add((192_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn vote_new(r: u32, ) -> Weight { - (57_512_000 as Weight) - .saturating_add((224_000 as Weight).saturating_mul(r as Weight)) + (60_433_000 as Weight) + // Standard Error: 0 + .saturating_add((232_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn vote_existing(r: u32, ) -> Weight { - (57_230_000 as Weight) - .saturating_add((232_000 as Weight).saturating_mul(r as Weight)) + (60_023_000 as Weight) + // Standard Error: 0 + .saturating_add((238_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn emergency_cancel() -> Weight { - (35_343_000 as Weight) + (38_461_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn blacklist(p: u32, ) -> Weight { - (116_283_000 as Weight) - .saturating_add((795_000 as Weight).saturating_mul(p as Weight)) + (121_984_000 as Weight) + // Standard Error: 7_000 + .saturating_add((836_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn external_propose(v: u32, ) -> Weight { - (17_593_000 as Weight) - .saturating_add((107_000 as Weight).saturating_mul(v as Weight)) + (18_730_000 as Weight) + // Standard Error: 0 + .saturating_add((108_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn external_propose_majority() -> Weight { - (4_194_000 as Weight) + (4_251_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn external_propose_default() -> Weight { - (4_251_000 as Weight) + (4_239_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn fast_track() -> Weight { - (36_616_000 as Weight) + (38_645_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn veto_external(v: u32, ) -> Weight { - (37_973_000 as Weight) - .saturating_add((179_000 as Weight).saturating_mul(v as Weight)) + (39_490_000 as Weight) + // Standard Error: 0 + .saturating_add((184_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn cancel_proposal(p: u32, ) -> Weight { - (80_686_000 as Weight) - .saturating_add((868_000 as Weight).saturating_mul(p as Weight)) + (84_238_000 as Weight) + // Standard Error: 0 + .saturating_add((913_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn cancel_referendum() -> Weight { - (21_630_000 as Weight) + (22_688_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel_queued(r: u32, ) -> Weight { - (40_264_000 as Weight) - .saturating_add((3_366_000 as Weight).saturating_mul(r as Weight)) + (42_080_000 as Weight) + // Standard Error: 1_000 + .saturating_add((3_577_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn on_initialize_base(r: u32, ) -> Weight { - (12_654_000 as Weight) - .saturating_add((6_431_000 as Weight).saturating_mul(r as Weight)) + (16_213_000 as Weight) + // Standard Error: 2_000 + .saturating_add((7_057_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) } fn delegate(r: u32, ) -> Weight { - (74_755_000 as Weight) - .saturating_add((9_558_000 as Weight).saturating_mul(r as Weight)) + (79_864_000 as Weight) + // Standard Error: 2_000 + .saturating_add((10_135_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) .saturating_add(T::DbWeight::get().writes(4 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) } fn undelegate(r: u32, ) -> Weight { - (38_083_000 as Weight) - .saturating_add((9_501_000 as Weight).saturating_mul(r as Weight)) + (40_868_000 as Weight) + // Standard Error: 2_000 + .saturating_add((10_138_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) } fn clear_public_proposals() -> Weight { - (3_453_000 as Weight) + (3_574_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn note_preimage(b: u32, ) -> Weight { - (54_883_000 as Weight) + (57_683_000 as Weight) + // Standard Error: 0 .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn note_imminent_preimage(b: u32, ) -> Weight { - (37_558_000 as Weight) - .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) + (39_299_000 as Weight) + // Standard Error: 0 + .saturating_add((4_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn reap_preimage(b: u32, ) -> Weight { - (51_340_000 as Weight) + (53_857_000 as Weight) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn unlock_remove(r: u32, ) -> Weight { - (48_671_000 as Weight) - .saturating_add((39_000 as Weight).saturating_mul(r as Weight)) + (51_271_000 as Weight) + // Standard Error: 0 + .saturating_add((38_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn unlock_set(r: u32, ) -> Weight { - (44_076_000 as Weight) - .saturating_add((222_000 as Weight).saturating_mul(r as Weight)) + (46_362_000 as Weight) + // Standard Error: 0 + .saturating_add((228_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn remove_vote(r: u32, ) -> Weight { - (26_536_000 as Weight) - .saturating_add((218_000 as Weight).saturating_mul(r as Weight)) + (27_825_000 as Weight) + // Standard Error: 0 + .saturating_add((223_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_other_vote(r: u32, ) -> Weight { - (26_723_000 as Weight) - .saturating_add((219_000 as Weight).saturating_mul(r as Weight)) + (27_987_000 as Weight) + // Standard Error: 0 + .saturating_add((223_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_elections_phragmen.rs b/runtime/polkadot/src/weights/pallet_elections_phragmen.rs index e5316b3492..0407fe84dd 100644 --- a/runtime/polkadot/src/weights/pallet_elections_phragmen.rs +++ b/runtime/polkadot/src/weights/pallet_elections_phragmen.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_elections_phragmen +//! Autogenerated weights for pallet_elections_phragmen +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-08, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,65 +44,73 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_elections_phragmen::WeightInfo for WeightInfo { fn vote(v: u32, ) -> Weight { - (85_361_000 as Weight) - .saturating_add((113_000 as Weight).saturating_mul(v as Weight)) + (88_644_000 as Weight) + // Standard Error: 7_000 + .saturating_add((130_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vote_update(v: u32, ) -> Weight { - (52_021_000 as Weight) - .saturating_add((104_000 as Weight).saturating_mul(v as Weight)) + (54_456_000 as Weight) + // Standard Error: 3_000 + .saturating_add((133_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_voter() -> Weight { - (69_513_000 as Weight) + (71_138_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn report_defunct_voter_correct(c: u32, v: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_693_000 as Weight).saturating_mul(c as Weight)) - .saturating_add((33_480_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 0 + .saturating_add((1_749_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 12_000 + .saturating_add((34_327_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn report_defunct_voter_incorrect(c: u32, v: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_703_000 as Weight).saturating_mul(c as Weight)) - .saturating_add((33_396_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 0 + .saturating_add((1_755_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 9_000 + .saturating_add((34_280_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn submit_candidacy(c: u32, ) -> Weight { - (68_017_000 as Weight) - .saturating_add((279_000 as Weight).saturating_mul(c as Weight)) + (70_892_000 as Weight) + // Standard Error: 0 + .saturating_add((292_000 as Weight).saturating_mul(c as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn renounce_candidacy_candidate(c: u32, ) -> Weight { - (42_371_000 as Weight) - .saturating_add((138_000 as Weight).saturating_mul(c as Weight)) + (43_358_000 as Weight) + // Standard Error: 0 + .saturating_add((143_000 as Weight).saturating_mul(c as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn renounce_candidacy_members() -> Weight { - (74_022_000 as Weight) + (75_956_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn renounce_candidacy_runners_up() -> Weight { - (45_752_000 as Weight) + (46_888_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_member_with_replacement() -> Weight { - (113_257_000 as Weight) + (116_053_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn remove_member_wrong_refund() -> Weight { - (8_688_000 as Weight) + (9_093_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } } diff --git a/runtime/polkadot/src/weights/pallet_identity.rs b/runtime/polkadot/src/weights/pallet_identity.rs index 5fa965c6d7..d4e21417b9 100644 --- a/runtime/polkadot/src/weights/pallet_identity.rs +++ b/runtime/polkadot/src/weights/pallet_identity.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_identity +//! Autogenerated weights for pallet_identity +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-08, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,111 +44,135 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { fn add_registrar(r: u32, ) -> Weight { - (26_935_000 as Weight) - .saturating_add((309_000 as Weight).saturating_mul(r as Weight)) + (28_261_000 as Weight) + // Standard Error: 3_000 + .saturating_add((318_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_identity(r: u32, x: u32, ) -> Weight { - (70_594_000 as Weight) - .saturating_add((235_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_750_000 as Weight).saturating_mul(x as Weight)) + (73_360_000 as Weight) + // Standard Error: 19_000 + .saturating_add((234_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 2_000 + .saturating_add((1_863_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_subs_new(s: u32, ) -> Weight { - (50_502_000 as Weight) - .saturating_add((9_345_000 as Weight).saturating_mul(s as Weight)) + (52_544_000 as Weight) + // Standard Error: 1_000 + .saturating_add((9_959_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight))) .saturating_add(T::DbWeight::get().writes(1 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn set_subs_old(p: u32, ) -> Weight { - (46_961_000 as Weight) - .saturating_add((3_260_000 as Weight).saturating_mul(p as Weight)) + (48_351_000 as Weight) + // Standard Error: 0 + .saturating_add((3_391_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - (60_066_000 as Weight) - .saturating_add((197_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((3_271_000 as Weight).saturating_mul(s as Weight)) - .saturating_add((1_002_000 as Weight).saturating_mul(x as Weight)) + (62_001_000 as Weight) + // Standard Error: 8_000 + .saturating_add((171_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 0 + .saturating_add((3_390_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 + .saturating_add((1_089_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn request_judgement(r: u32, x: u32, ) -> Weight { - (71_756_000 as Weight) - .saturating_add((307_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((2_001_000 as Weight).saturating_mul(x as Weight)) + (74_257_000 as Weight) + // Standard Error: 8_000 + .saturating_add((334_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_141_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel_request(r: u32, x: u32, ) -> Weight { - (61_102_000 as Weight) - .saturating_add((228_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_985_000 as Weight).saturating_mul(x as Weight)) + (62_893_000 as Weight) + // Standard Error: 11_000 + .saturating_add((231_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_117_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_fee(r: u32, ) -> Weight { - (10_296_000 as Weight) - .saturating_add((263_000 as Weight).saturating_mul(r as Weight)) + (10_890_000 as Weight) + // Standard Error: 1_000 + .saturating_add((268_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_account_id(r: u32, ) -> Weight { - (11_809_000 as Weight) - .saturating_add((260_000 as Weight).saturating_mul(r as Weight)) + (12_410_000 as Weight) + // Standard Error: 1_000 + .saturating_add((268_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_fields(r: u32, ) -> Weight { - (10_415_000 as Weight) - .saturating_add((260_000 as Weight).saturating_mul(r as Weight)) + (10_855_000 as Weight) + // Standard Error: 1_000 + .saturating_add((269_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn provide_judgement(r: u32, x: u32, ) -> Weight { - (47_818_000 as Weight) - .saturating_add((293_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_996_000 as Weight).saturating_mul(x as Weight)) + (49_519_000 as Weight) + // Standard Error: 9_000 + .saturating_add((299_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_127_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { - (99_904_000 as Weight) - .saturating_add((118_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((3_280_000 as Weight).saturating_mul(s as Weight)) - .saturating_add((2_000 as Weight).saturating_mul(x as Weight)) + (103_419_000 as Weight) + // Standard Error: 5_000 + .saturating_add((120_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 0 + .saturating_add((3_400_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn add_sub(s: u32, ) -> Weight { - (70_179_000 as Weight) - .saturating_add((189_000 as Weight).saturating_mul(s as Weight)) + (72_490_000 as Weight) + // Standard Error: 0 + .saturating_add((191_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn rename_sub(s: u32, ) -> Weight { - (22_891_000 as Weight) - .saturating_add((27_000 as Weight).saturating_mul(s as Weight)) + (23_454_000 as Weight) + // Standard Error: 0 + .saturating_add((25_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_sub(s: u32, ) -> Weight { - (66_924_000 as Weight) - .saturating_add((163_000 as Weight).saturating_mul(s as Weight)) + (69_012_000 as Weight) + // Standard Error: 0 + .saturating_add((164_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn quit_sub(s: u32, ) -> Weight { - (44_243_000 as Weight) - .saturating_add((160_000 as Weight).saturating_mul(s as Weight)) + (45_725_000 as Weight) + // Standard Error: 0 + .saturating_add((158_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_im_online.rs b/runtime/polkadot/src/weights/pallet_im_online.rs index e8dfb1b85f..1e9a2b2f20 100644 --- a/runtime/polkadot/src/weights/pallet_im_online.rs +++ b/runtime/polkadot/src/weights/pallet_im_online.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_im_online +//! Autogenerated weights for pallet_im_online +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,9 +44,11 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - (107_274_000 as Weight) - .saturating_add((218_000 as Weight).saturating_mul(k as Weight)) - .saturating_add((482_000 as Weight).saturating_mul(e as Weight)) + (111_740_000 as Weight) + // Standard Error: 0 + .saturating_add((217_000 as Weight).saturating_mul(k as Weight)) + // Standard Error: 1_000 + .saturating_add((510_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_indices.rs b/runtime/polkadot/src/weights/pallet_indices.rs index 1e7149497e..28bd0c88a7 100644 --- a/runtime/polkadot/src/weights/pallet_indices.rs +++ b/runtime/polkadot/src/weights/pallet_indices.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_indices +//! Autogenerated weights for pallet_indices +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,27 +44,27 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { fn claim() -> Weight { - (50_502_000 as Weight) + (52_777_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn transfer() -> Weight { - (57_428_000 as Weight) + (59_482_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn free() -> Weight { - (46_204_000 as Weight) + (48_062_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_transfer() -> Weight { - (46_938_000 as Weight) + (49_541_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn freeze() -> Weight { - (42_857_000 as Weight) + (45_151_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_multisig.rs b/runtime/polkadot/src/weights/pallet_multisig.rs index a18dd7f57a..c7582995d0 100644 --- a/runtime/polkadot/src/weights/pallet_multisig.rs +++ b/runtime/polkadot/src/weights/pallet_multisig.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_multisig +//! Autogenerated weights for pallet_multisig +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,65 +44,80 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { - (12_023_000 as Weight) + (12_532_000 as Weight) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) } fn as_multi_create(s: u32, z: u32, ) -> Weight { - (66_415_000 as Weight) - .saturating_add((87_000 as Weight).saturating_mul(s as Weight)) + (70_460_000 as Weight) + // Standard Error: 0 + .saturating_add((86_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (74_404_000 as Weight) + (79_056_000 as Weight) + // Standard Error: 0 .saturating_add((90_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (40_458_000 as Weight) - .saturating_add((110_000 as Weight).saturating_mul(s as Weight)) + (42_175_000 as Weight) + // Standard Error: 0 + .saturating_add((113_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (71_982_000 as Weight) - .saturating_add((123_000 as Weight).saturating_mul(s as Weight)) + (75_726_000 as Weight) + // Standard Error: 0 + .saturating_add((126_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (82_738_000 as Weight) - .saturating_add((250_000 as Weight).saturating_mul(s as Weight)) + (87_543_000 as Weight) + // Standard Error: 0 + .saturating_add((247_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((5_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn approve_as_multi_create(s: u32, ) -> Weight { - (65_612_000 as Weight) - .saturating_add((86_000 as Weight).saturating_mul(s as Weight)) + (69_831_000 as Weight) + // Standard Error: 0 + .saturating_add((89_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn approve_as_multi_approve(s: u32, ) -> Weight { - (39_315_000 as Weight) - .saturating_add((108_000 as Weight).saturating_mul(s as Weight)) + (41_395_000 as Weight) + // Standard Error: 0 + .saturating_add((111_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn approve_as_multi_complete(s: u32, ) -> Weight { - (153_804_000 as Weight) - .saturating_add((248_000 as Weight).saturating_mul(s as Weight)) + (162_511_000 as Weight) + // Standard Error: 0 + .saturating_add((249_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn cancel_as_multi(s: u32, ) -> Weight { - (107_136_000 as Weight) - .saturating_add((91_000 as Weight).saturating_mul(s as Weight)) + (112_698_000 as Weight) + // Standard Error: 0 + .saturating_add((90_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_proxy.rs b/runtime/polkadot/src/weights/pallet_proxy.rs index 466c380f9b..0ea750d212 100644 --- a/runtime/polkadot/src/weights/pallet_proxy.rs +++ b/runtime/polkadot/src/weights/pallet_proxy.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_proxy +//! Autogenerated weights for pallet_proxy +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,65 +44,79 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { - (30_511_000 as Weight) - .saturating_add((189_000 as Weight).saturating_mul(p as Weight)) + (31_560_000 as Weight) + // Standard Error: 1_000 + .saturating_add((190_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } fn proxy_announced(a: u32, p: u32, ) -> Weight { - (64_299_000 as Weight) - .saturating_add((817_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((187_000 as Weight).saturating_mul(p as Weight)) + (65_555_000 as Weight) + // Standard Error: 1_000 + .saturating_add((843_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((194_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_announcement(a: u32, p: u32, ) -> Weight { - (41_168_000 as Weight) - .saturating_add((811_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((8_000 as Weight).saturating_mul(p as Weight)) + (41_808_000 as Weight) + // Standard Error: 1_000 + .saturating_add((842_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((10_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn reject_announcement(a: u32, p: u32, ) -> Weight { - (41_014_000 as Weight) - .saturating_add((806_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((10_000 as Weight).saturating_mul(p as Weight)) + (41_713_000 as Weight) + // Standard Error: 1_000 + .saturating_add((847_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((12_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn announce(a: u32, p: u32, ) -> Weight { - (65_203_000 as Weight) - .saturating_add((699_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((189_000 as Weight).saturating_mul(p as Weight)) + (66_579_000 as Weight) + // Standard Error: 1_000 + .saturating_add((730_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((199_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn add_proxy(p: u32, ) -> Weight { - (44_036_000 as Weight) - .saturating_add((198_000 as Weight).saturating_mul(p as Weight)) + (44_930_000 as Weight) + // Standard Error: 1_000 + .saturating_add((206_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_proxy(p: u32, ) -> Weight { - (39_313_000 as Weight) - .saturating_add((240_000 as Weight).saturating_mul(p as Weight)) + (40_436_000 as Weight) + // Standard Error: 1_000 + .saturating_add((241_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_proxies(p: u32, ) -> Weight { - (37_828_000 as Weight) - .saturating_add((185_000 as Weight).saturating_mul(p as Weight)) + (38_695_000 as Weight) + // Standard Error: 1_000 + .saturating_add((191_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn anonymous(p: u32, ) -> Weight { - (62_488_000 as Weight) - .saturating_add((24_000 as Weight).saturating_mul(p as Weight)) + (64_695_000 as Weight) + // Standard Error: 1_000 + .saturating_add((13_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn kill_anonymous(p: u32, ) -> Weight { - (40_311_000 as Weight) - .saturating_add((190_000 as Weight).saturating_mul(p as Weight)) + (41_503_000 as Weight) + // Standard Error: 1_000 + .saturating_add((192_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_scheduler.rs b/runtime/polkadot/src/weights/pallet_scheduler.rs index a8395ee2d4..d3fb9ff8b4 100644 --- a/runtime/polkadot/src/weights/pallet_scheduler.rs +++ b/runtime/polkadot/src/weights/pallet_scheduler.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_scheduler +//! Autogenerated weights for pallet_scheduler +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,26 +44,30 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { fn schedule(s: u32, ) -> Weight { - (33_070_000 as Weight) - .saturating_add((43_000 as Weight).saturating_mul(s as Weight)) + (34_190_000 as Weight) + // Standard Error: 0 + .saturating_add((41_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel(s: u32, ) -> Weight { - (29_962_000 as Weight) - .saturating_add((3_080_000 as Weight).saturating_mul(s as Weight)) + (31_368_000 as Weight) + // Standard Error: 7_000 + .saturating_add((3_230_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn schedule_named(s: u32, ) -> Weight { - (42_402_000 as Weight) - .saturating_add((60_000 as Weight).saturating_mul(s as Weight)) + (44_444_000 as Weight) + // Standard Error: 1_000 + .saturating_add((55_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn cancel_named(s: u32, ) -> Weight { - (33_800_000 as Weight) - .saturating_add((3_093_000 as Weight).saturating_mul(s as Weight)) + (35_660_000 as Weight) + // Standard Error: 7_000 + .saturating_add((3_238_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_session.rs b/runtime/polkadot/src/weights/pallet_session.rs index b8084ef7bc..f496e32ba5 100644 --- a/runtime/polkadot/src/weights/pallet_session.rs +++ b/runtime/polkadot/src/weights/pallet_session.rs @@ -13,9 +13,10 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_session +//! Autogenerated weights for pallet_session +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-11-03, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: @@ -43,12 +44,12 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_session::WeightInfo for WeightInfo { fn set_keys() -> Weight { - (93_498_000 as Weight) + (95_877_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn purge_keys() -> Weight { - (55_508_000 as Weight) + (56_080_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } diff --git a/runtime/polkadot/src/weights/pallet_staking.rs b/runtime/polkadot/src/weights/pallet_staking.rs index be296fb924..134f87b140 100644 --- a/runtime/polkadot/src/weights/pallet_staking.rs +++ b/runtime/polkadot/src/weights/pallet_staking.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_staking +//! Autogenerated weights for pallet_staking +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,134 +44,147 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_staking::WeightInfo for WeightInfo { fn bond() -> Weight { - (92_188_000 as Weight) + (98_601_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn bond_extra() -> Weight { - (73_699_000 as Weight) + (78_522_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn unbond() -> Weight { - (66_184_000 as Weight) + (70_546_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn withdraw_unbonded_update(s: u32, ) -> Weight { - (66_448_000 as Weight) - .saturating_add((29_000 as Weight).saturating_mul(s as Weight)) + (71_228_000 as Weight) + // Standard Error: 0 + .saturating_add((33_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn withdraw_unbonded_kill(s: u32, ) -> Weight { - (109_546_000 as Weight) - .saturating_add((3_844_000 as Weight).saturating_mul(s as Weight)) + (116_427_000 as Weight) + // Standard Error: 1_000 + .saturating_add((4_046_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn validate() -> Weight { - (22_866_000 as Weight) + (24_212_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn nominate(n: u32, ) -> Weight { - (29_442_000 as Weight) - .saturating_add((393_000 as Weight).saturating_mul(n as Weight)) + (31_922_000 as Weight) + // Standard Error: 12_000 + .saturating_add((418_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn chill() -> Weight { - (22_437_000 as Weight) + (24_183_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn set_payee() -> Weight { - (15_252_000 as Weight) + (16_569_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_controller() -> Weight { - (33_072_000 as Weight) + (35_580_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn set_validator_count() -> Weight { - (3_200_000 as Weight) + (3_217_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_no_eras() -> Weight { - (3_567_000 as Weight) + (3_688_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_new_era() -> Weight { - (3_622_000 as Weight) + (3_739_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_new_era_always() -> Weight { - (3_593_000 as Weight) + (3_611_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_invulnerables(v: u32, ) -> Weight { - (3_877_000 as Weight) + (3_864_000 as Weight) + // Standard Error: 0 .saturating_add((9_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_unstake(s: u32, ) -> Weight { - (75_041_000 as Weight) - .saturating_add((3_835_000 as Weight).saturating_mul(s as Weight)) + (78_757_000 as Weight) + // Standard Error: 1_000 + .saturating_add((4_037_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn cancel_deferred_slash(s: u32, ) -> Weight { - (5_851_773_000 as Weight) - .saturating_add((34_696_000 as Weight).saturating_mul(s as Weight)) + (5_845_293_000 as Weight) + // Standard Error: 388_000 + .saturating_add((34_621_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn payout_stakers_dead_controller(n: u32, ) -> Weight { - (132_866_000 as Weight) - .saturating_add((57_254_000 as Weight).saturating_mul(n as Weight)) + (142_251_000 as Weight) + // Standard Error: 11_000 + .saturating_add((60_125_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(11 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(n as Weight))) } fn payout_stakers_alive_staked(n: u32, ) -> Weight { - (164_346_000 as Weight) - .saturating_add((75_078_000 as Weight).saturating_mul(n as Weight)) + (172_317_000 as Weight) + // Standard Error: 17_000 + .saturating_add((78_585_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(12 as Weight)) .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(n as Weight))) } fn rebond(l: u32, ) -> Weight { - (45_428_000 as Weight) - .saturating_add((101_000 as Weight).saturating_mul(l as Weight)) + (48_379_000 as Weight) + // Standard Error: 1_000 + .saturating_add((109_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn set_history_depth(e: u32, ) -> Weight { (0 as Weight) - .saturating_add((36_273_000 as Weight).saturating_mul(e as Weight)) + // Standard Error: 64_000 + .saturating_add((39_072_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) .saturating_add(T::DbWeight::get().writes((7 as Weight).saturating_mul(e as Weight))) } fn reap_stash(s: u32, ) -> Weight { - (94_854_000 as Weight) - .saturating_add((3_827_000 as Weight).saturating_mul(s as Weight)) + (100_021_000 as Weight) + // Standard Error: 1_000 + .saturating_add((4_046_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn new_era(v: u32, n: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_006_982_000 as Weight).saturating_mul(v as Weight)) - .saturating_add((117_552_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) + // Standard Error: 759_000 + .saturating_add((751_624_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 38_000 + .saturating_add((106_491_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(v as Weight))) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(8 as Weight)) @@ -179,10 +192,14 @@ impl pallet_staking::WeightInfo for WeightInfo { } fn submit_solution_better(v: u32, n: u32, a: u32, w: u32, ) -> Weight { (0 as Weight) - .saturating_add((914_000 as Weight).saturating_mul(v as Weight)) - .saturating_add((378_000 as Weight).saturating_mul(n as Weight)) - .saturating_add((96_533_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((7_530_000 as Weight).saturating_mul(w as Weight)) + // Standard Error: 44_000 + .saturating_add((1_321_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 17_000 + .saturating_add((535_000 as Weight).saturating_mul(n as Weight)) + // Standard Error: 44_000 + .saturating_add((102_449_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 91_000 + .saturating_add((7_907_000 as Weight).saturating_mul(w as Weight)) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(a as Weight))) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight))) diff --git a/runtime/polkadot/src/weights/pallet_timestamp.rs b/runtime/polkadot/src/weights/pallet_timestamp.rs index 0f3642e768..4ebf6c1988 100644 --- a/runtime/polkadot/src/weights/pallet_timestamp.rs +++ b/runtime/polkadot/src/weights/pallet_timestamp.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_timestamp +//! Autogenerated weights for pallet_timestamp +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,11 +44,11 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { fn set() -> Weight { - (10_868_000 as Weight) + (11_397_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_finalize() -> Weight { - (6_135_000 as Weight) + (6_096_000 as Weight) } } diff --git a/runtime/polkadot/src/weights/pallet_treasury.rs b/runtime/polkadot/src/weights/pallet_treasury.rs index f6fe477e10..1075855224 100644 --- a/runtime/polkadot/src/weights/pallet_treasury.rs +++ b/runtime/polkadot/src/weights/pallet_treasury.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_treasury +//! Autogenerated weights for pallet_treasury +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,112 +44,120 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { fn propose_spend() -> Weight { - (52_150_000 as Weight) + (54_574_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn reject_proposal() -> Weight { - (82_349_000 as Weight) + (85_554_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn approve_proposal() -> Weight { - (11_101_000 as Weight) + (11_791_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn report_awesome(r: u32, ) -> Weight { - (64_551_000 as Weight) + (67_174_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn retract_tip() -> Weight { - (54_970_000 as Weight) + (56_466_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip_new(r: u32, t: u32, ) -> Weight { - (40_231_000 as Weight) + (42_193_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 0 .saturating_add((149_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip(t: u32, ) -> Weight { - (27_369_000 as Weight) - .saturating_add((695_000 as Weight).saturating_mul(t as Weight)) + (28_405_000 as Weight) + // Standard Error: 1_000 + .saturating_add((705_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn close_tip(t: u32, ) -> Weight { - (102_827_000 as Weight) - .saturating_add((362_000 as Weight).saturating_mul(t as Weight)) + (106_075_000 as Weight) + // Standard Error: 0 + .saturating_add((361_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn propose_bounty(d: u32, ) -> Weight { - (55_764_000 as Weight) + (58_025_000 as Weight) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn approve_bounty() -> Weight { - (15_335_000 as Weight) + (15_338_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn propose_curator() -> Weight { - (11_888_000 as Weight) + (12_080_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn unassign_curator() -> Weight { - (67_124_000 as Weight) + (69_557_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn accept_curator() -> Weight { - (46_414_000 as Weight) + (47_745_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn award_bounty() -> Weight { - (32_393_000 as Weight) + (33_468_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn claim_bounty() -> Weight { - (156_140_000 as Weight) + (161_390_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } fn close_bounty_proposed() -> Weight { - (65_931_000 as Weight) + (68_016_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn close_bounty_active() -> Weight { - (102_999_000 as Weight) + (106_292_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn extend_bounty_expiry() -> Weight { - (31_493_000 as Weight) + (32_515_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_initialize_proposals(p: u32, ) -> Weight { - (65_761_000 as Weight) - .saturating_add((69_596_000 as Weight).saturating_mul(p as Weight)) + (72_159_000 as Weight) + // Standard Error: 26_000 + .saturating_add((72_167_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(p as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(p as Weight))) } fn on_initialize_bounties(b: u32, ) -> Weight { - (61_158_000 as Weight) - .saturating_add((69_154_000 as Weight).saturating_mul(b as Weight)) + (66_526_000 as Weight) + // Standard Error: 18_000 + .saturating_add((71_398_000 as Weight).saturating_mul(b as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(b as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) diff --git a/runtime/polkadot/src/weights/pallet_utility.rs b/runtime/polkadot/src/weights/pallet_utility.rs index 2f42858106..fd10a605de 100644 --- a/runtime/polkadot/src/weights/pallet_utility.rs +++ b/runtime/polkadot/src/weights/pallet_utility.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_utility +//! Autogenerated weights for pallet_utility +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,14 +44,16 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { - (18_624_000 as Weight) - .saturating_add((1_986_000 as Weight).saturating_mul(c as Weight)) + (19_701_000 as Weight) + // Standard Error: 0 + .saturating_add((2_118_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (5_576_000 as Weight) + (5_534_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (19_708_000 as Weight) - .saturating_add((1_988_000 as Weight).saturating_mul(c as Weight)) + (20_354_000 as Weight) + // Standard Error: 0 + .saturating_add((2_124_000 as Weight).saturating_mul(c as Weight)) } } diff --git a/runtime/polkadot/src/weights/pallet_vesting.rs b/runtime/polkadot/src/weights/pallet_vesting.rs index e3f859d7e4..ba41d013d1 100644 --- a/runtime/polkadot/src/weights/pallet_vesting.rs +++ b/runtime/polkadot/src/weights/pallet_vesting.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_vesting +//! Autogenerated weights for pallet_vesting +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-29, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=polkadot-dev // --steps=50 @@ -29,8 +30,7 @@ // --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 -// --header -// ./file_header.txt +// --header=./file_header.txt // --output=./runtime/polkadot/src/weights/ @@ -44,38 +44,44 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { fn vest_locked(l: u32, ) -> Weight { - (53_484_000 as Weight) - .saturating_add((134_000 as Weight).saturating_mul(l as Weight)) + (55_961_000 as Weight) + // Standard Error: 0 + .saturating_add((138_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn vest_unlocked(l: u32, ) -> Weight { - (57_798_000 as Weight) - .saturating_add((109_000 as Weight).saturating_mul(l as Weight)) + (60_522_000 as Weight) + // Standard Error: 2_000 + .saturating_add((107_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vest_other_locked(l: u32, ) -> Weight { - (53_265_000 as Weight) - .saturating_add((130_000 as Weight).saturating_mul(l as Weight)) + (55_712_000 as Weight) + // Standard Error: 0 + .saturating_add((135_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vest_other_unlocked(l: u32, ) -> Weight { - (57_589_000 as Weight) - .saturating_add((107_000 as Weight).saturating_mul(l as Weight)) + (59_981_000 as Weight) + // Standard Error: 2_000 + .saturating_add((113_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn vested_transfer(l: u32, ) -> Weight { - (118_226_000 as Weight) - .saturating_add((164_000 as Weight).saturating_mul(l as Weight)) + (122_684_000 as Weight) + // Standard Error: 8_000 + .saturating_add((171_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn force_vested_transfer(l: u32, ) -> Weight { - (117_385_000 as Weight) - .saturating_add((166_000 as Weight).saturating_mul(l as Weight)) + (121_973_000 as Weight) + // Standard Error: 8_000 + .saturating_add((165_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_balances.rs b/runtime/westend/src/weights/pallet_balances.rs index c3aedc45e7..361ad5a6f8 100644 --- a/runtime/westend/src/weights/pallet_balances.rs +++ b/runtime/westend/src/weights/pallet_balances.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_balances +//! Autogenerated weights for pallet_balances +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,27 +44,27 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { fn transfer() -> Weight { - (92_296_000 as Weight) + (95_429_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn transfer_keep_alive() -> Weight { - (63_382_000 as Weight) + (66_088_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_balance_creating() -> Weight { - (34_643_000 as Weight) + (35_936_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_balance_killing() -> Weight { - (43_941_000 as Weight) + (45_397_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_transfer() -> Weight { - (91_214_000 as Weight) + (93_993_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_identity.rs b/runtime/westend/src/weights/pallet_identity.rs index 9747999ebc..c69428f780 100644 --- a/runtime/westend/src/weights/pallet_identity.rs +++ b/runtime/westend/src/weights/pallet_identity.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_identity +//! Autogenerated weights for pallet_identity +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,111 +44,135 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_identity::WeightInfo for WeightInfo { fn add_registrar(r: u32, ) -> Weight { - (26_425_000 as Weight) - .saturating_add((296_000 as Weight).saturating_mul(r as Weight)) + (27_481_000 as Weight) + // Standard Error: 2_000 + .saturating_add((300_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_identity(r: u32, x: u32, ) -> Weight { - (70_695_000 as Weight) - .saturating_add((212_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_791_000 as Weight).saturating_mul(x as Weight)) + (71_220_000 as Weight) + // Standard Error: 19_000 + .saturating_add((269_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 2_000 + .saturating_add((1_814_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_subs_new(s: u32, ) -> Weight { - (49_871_000 as Weight) - .saturating_add((9_385_000 as Weight).saturating_mul(s as Weight)) + (52_505_000 as Weight) + // Standard Error: 1_000 + .saturating_add((9_913_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight))) .saturating_add(T::DbWeight::get().writes(1 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn set_subs_old(p: u32, ) -> Weight { - (46_330_000 as Weight) - .saturating_add((3_280_000 as Weight).saturating_mul(p as Weight)) + (47_853_000 as Weight) + // Standard Error: 0 + .saturating_add((3_432_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight { - (59_768_000 as Weight) - .saturating_add((153_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((3_301_000 as Weight).saturating_mul(s as Weight)) - .saturating_add((1_020_000 as Weight).saturating_mul(x as Weight)) + (62_074_000 as Weight) + // Standard Error: 8_000 + .saturating_add((169_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 0 + .saturating_add((3_436_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 + .saturating_add((1_058_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn request_judgement(r: u32, x: u32, ) -> Weight { - (71_397_000 as Weight) - .saturating_add((279_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_999_000 as Weight).saturating_mul(x as Weight)) + (72_697_000 as Weight) + // Standard Error: 8_000 + .saturating_add((316_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_064_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel_request(r: u32, x: u32, ) -> Weight { - (60_690_000 as Weight) - .saturating_add((212_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((2_000_000 as Weight).saturating_mul(x as Weight)) + (62_349_000 as Weight) + // Standard Error: 11_000 + .saturating_add((203_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_048_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_fee(r: u32, ) -> Weight { - (10_265_000 as Weight) - .saturating_add((256_000 as Weight).saturating_mul(r as Weight)) + (10_602_000 as Weight) + // Standard Error: 1_000 + .saturating_add((265_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_account_id(r: u32, ) -> Weight { - (11_662_000 as Weight) - .saturating_add((263_000 as Weight).saturating_mul(r as Weight)) + (12_087_000 as Weight) + // Standard Error: 2_000 + .saturating_add((264_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_fields(r: u32, ) -> Weight { - (10_270_000 as Weight) - .saturating_add((256_000 as Weight).saturating_mul(r as Weight)) + (10_578_000 as Weight) + // Standard Error: 1_000 + .saturating_add((268_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn provide_judgement(r: u32, x: u32, ) -> Weight { - (47_477_000 as Weight) - .saturating_add((276_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((1_994_000 as Weight).saturating_mul(x as Weight)) + (48_552_000 as Weight) + // Standard Error: 8_000 + .saturating_add((279_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 1_000 + .saturating_add((2_067_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight { - (57_410_000 as Weight) - .saturating_add((138_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((3_291_000 as Weight).saturating_mul(s as Weight)) - .saturating_add((6_000 as Weight).saturating_mul(x as Weight)) + (60_031_000 as Weight) + // Standard Error: 4_000 + .saturating_add((140_000 as Weight).saturating_mul(r as Weight)) + // Standard Error: 0 + .saturating_add((3_423_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn add_sub(s: u32, ) -> Weight { - (69_549_000 as Weight) - .saturating_add((188_000 as Weight).saturating_mul(s as Weight)) + (71_751_000 as Weight) + // Standard Error: 0 + .saturating_add((185_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn rename_sub(s: u32, ) -> Weight { - (22_557_000 as Weight) - .saturating_add((26_000 as Weight).saturating_mul(s as Weight)) + (23_607_000 as Weight) + // Standard Error: 0 + .saturating_add((23_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_sub(s: u32, ) -> Weight { - (66_423_000 as Weight) - .saturating_add((169_000 as Weight).saturating_mul(s as Weight)) + (68_696_000 as Weight) + // Standard Error: 0 + .saturating_add((160_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn quit_sub(s: u32, ) -> Weight { - (43_572_000 as Weight) - .saturating_add((159_000 as Weight).saturating_mul(s as Weight)) + (45_448_000 as Weight) + // Standard Error: 0 + .saturating_add((155_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_im_online.rs b/runtime/westend/src/weights/pallet_im_online.rs index aa61f58ffa..6bcb46d94e 100644 --- a/runtime/westend/src/weights/pallet_im_online.rs +++ b/runtime/westend/src/weights/pallet_im_online.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_im_online +//! Autogenerated weights for pallet_im_online +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,9 +44,11 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_im_online::WeightInfo for WeightInfo { fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - (108_057_000 as Weight) - .saturating_add((217_000 as Weight).saturating_mul(k as Weight)) - .saturating_add((499_000 as Weight).saturating_mul(e as Weight)) + (112_311_000 as Weight) + // Standard Error: 0 + .saturating_add((216_000 as Weight).saturating_mul(k as Weight)) + // Standard Error: 1_000 + .saturating_add((497_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_indices.rs b/runtime/westend/src/weights/pallet_indices.rs index a4638dfa82..db2555c63c 100644 --- a/runtime/westend/src/weights/pallet_indices.rs +++ b/runtime/westend/src/weights/pallet_indices.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_indices +//! Autogenerated weights for pallet_indices +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,27 +44,27 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_indices::WeightInfo for WeightInfo { fn claim() -> Weight { - (51_356_000 as Weight) + (52_389_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn transfer() -> Weight { - (57_368_000 as Weight) + (58_943_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn free() -> Weight { - (46_042_000 as Weight) + (47_207_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_transfer() -> Weight { - (47_337_000 as Weight) + (48_696_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn freeze() -> Weight { - (42_906_000 as Weight) + (44_096_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_multisig.rs b/runtime/westend/src/weights/pallet_multisig.rs index 781c200034..ebd9e865d8 100644 --- a/runtime/westend/src/weights/pallet_multisig.rs +++ b/runtime/westend/src/weights/pallet_multisig.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_multisig +//! Autogenerated weights for pallet_multisig +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,64 +44,79 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { - (12_253_000 as Weight) + (12_182_000 as Weight) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) } fn as_multi_create(s: u32, z: u32, ) -> Weight { - (66_480_000 as Weight) - .saturating_add((89_000 as Weight).saturating_mul(s as Weight)) + (68_501_000 as Weight) + // Standard Error: 0 + .saturating_add((85_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (74_333_000 as Weight) - .saturating_add((92_000 as Weight).saturating_mul(s as Weight)) + (76_757_000 as Weight) + // Standard Error: 0 + .saturating_add((90_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (40_631_000 as Weight) - .saturating_add((109_000 as Weight).saturating_mul(s as Weight)) + (40_987_000 as Weight) + // Standard Error: 0 + .saturating_add((110_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (71_642_000 as Weight) - .saturating_add((125_000 as Weight).saturating_mul(s as Weight)) + (73_764_000 as Weight) + // Standard Error: 0 + .saturating_add((120_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (82_286_000 as Weight) - .saturating_add((250_000 as Weight).saturating_mul(s as Weight)) + (85_252_000 as Weight) + // Standard Error: 0 + .saturating_add((241_000 as Weight).saturating_mul(s as Weight)) + // Standard Error: 0 .saturating_add((5_000 as Weight).saturating_mul(z as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn approve_as_multi_create(s: u32, ) -> Weight { - (65_874_000 as Weight) + (67_717_000 as Weight) + // Standard Error: 0 .saturating_add((88_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn approve_as_multi_approve(s: u32, ) -> Weight { - (39_522_000 as Weight) - .saturating_add((109_000 as Weight).saturating_mul(s as Weight)) + (40_372_000 as Weight) + // Standard Error: 0 + .saturating_add((111_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn approve_as_multi_complete(s: u32, ) -> Weight { - (153_553_000 as Weight) - .saturating_add((255_000 as Weight).saturating_mul(s as Weight)) + (157_866_000 as Weight) + // Standard Error: 0 + .saturating_add((243_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn cancel_as_multi(s: u32, ) -> Weight { - (108_049_000 as Weight) + (109_344_000 as Weight) + // Standard Error: 0 .saturating_add((90_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) diff --git a/runtime/westend/src/weights/pallet_proxy.rs b/runtime/westend/src/weights/pallet_proxy.rs index dfcf34db3e..8965ccb200 100644 --- a/runtime/westend/src/weights/pallet_proxy.rs +++ b/runtime/westend/src/weights/pallet_proxy.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_proxy +//! Autogenerated weights for pallet_proxy +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,65 +44,77 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { - (29_891_000 as Weight) - .saturating_add((182_000 as Weight).saturating_mul(p as Weight)) + (31_451_000 as Weight) + // Standard Error: 1_000 + .saturating_add((190_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } fn proxy_announced(a: u32, p: u32, ) -> Weight { - (63_230_000 as Weight) - .saturating_add((813_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((187_000 as Weight).saturating_mul(p as Weight)) + (65_914_000 as Weight) + // Standard Error: 1_000 + .saturating_add((822_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((183_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn remove_announcement(a: u32, p: u32, ) -> Weight { - (40_140_000 as Weight) - .saturating_add((812_000 as Weight).saturating_mul(a as Weight)) + (41_597_000 as Weight) + // Standard Error: 1_000 + .saturating_add((821_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 .saturating_add((11_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } - fn reject_announcement(a: u32, p: u32, ) -> Weight { - (40_219_000 as Weight) - .saturating_add((810_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((9_000 as Weight).saturating_mul(p as Weight)) + fn reject_announcement(a: u32, _p: u32, ) -> Weight { + (46_884_000 as Weight) + // Standard Error: 12_000 + .saturating_add((886_000 as Weight).saturating_mul(a as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn announce(a: u32, p: u32, ) -> Weight { - (63_882_000 as Weight) - .saturating_add((705_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((185_000 as Weight).saturating_mul(p as Weight)) + (66_635_000 as Weight) + // Standard Error: 1_000 + .saturating_add((716_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 1_000 + .saturating_add((188_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn add_proxy(p: u32, ) -> Weight { - (42_991_000 as Weight) - .saturating_add((200_000 as Weight).saturating_mul(p as Weight)) + (44_921_000 as Weight) + // Standard Error: 1_000 + .saturating_add((193_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_proxy(p: u32, ) -> Weight { - (38_502_000 as Weight) - .saturating_add((232_000 as Weight).saturating_mul(p as Weight)) + (40_276_000 as Weight) + // Standard Error: 1_000 + .saturating_add((230_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn remove_proxies(p: u32, ) -> Weight { - (36_781_000 as Weight) + (38_385_000 as Weight) + // Standard Error: 1_000 .saturating_add((187_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn anonymous(p: u32, ) -> Weight { - (60_757_000 as Weight) - .saturating_add((26_000 as Weight).saturating_mul(p as Weight)) + (63_987_000 as Weight) + // Standard Error: 1_000 + .saturating_add((29_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn kill_anonymous(p: u32, ) -> Weight { - (39_333_000 as Weight) - .saturating_add((187_000 as Weight).saturating_mul(p as Weight)) + (41_015_000 as Weight) + // Standard Error: 2_000 + .saturating_add((189_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_scheduler.rs b/runtime/westend/src/weights/pallet_scheduler.rs index e72370710b..acef5c9420 100644 --- a/runtime/westend/src/weights/pallet_scheduler.rs +++ b/runtime/westend/src/weights/pallet_scheduler.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_scheduler +//! Autogenerated weights for pallet_scheduler +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,25 +44,29 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_scheduler::WeightInfo for WeightInfo { fn schedule(s: u32, ) -> Weight { - (33_042_000 as Weight) + (33_809_000 as Weight) + // Standard Error: 0 .saturating_add((43_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn cancel(s: u32, ) -> Weight { - (29_682_000 as Weight) - .saturating_add((3_053_000 as Weight).saturating_mul(s as Weight)) + (30_493_000 as Weight) + // Standard Error: 6_000 + .saturating_add((3_041_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn schedule_named(s: u32, ) -> Weight { - (42_397_000 as Weight) - .saturating_add((57_000 as Weight).saturating_mul(s as Weight)) + (43_391_000 as Weight) + // Standard Error: 1_000 + .saturating_add((62_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn cancel_named(s: u32, ) -> Weight { - (33_595_000 as Weight) + (34_735_000 as Weight) + // Standard Error: 6_000 .saturating_add((3_058_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) diff --git a/runtime/westend/src/weights/pallet_session.rs b/runtime/westend/src/weights/pallet_session.rs index 3a5d99ab65..c5bf1d72eb 100644 --- a/runtime/westend/src/weights/pallet_session.rs +++ b/runtime/westend/src/weights/pallet_session.rs @@ -13,9 +13,10 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_session +//! Autogenerated weights for pallet_session +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-11-03, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: @@ -43,12 +44,12 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_session::WeightInfo for WeightInfo { fn set_keys() -> Weight { - (89_357_000 as Weight) + (91_654_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } fn purge_keys() -> Weight { - (53_020_000 as Weight) + (54_360_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } diff --git a/runtime/westend/src/weights/pallet_staking.rs b/runtime/westend/src/weights/pallet_staking.rs index 5ee9fc92ae..680fe3dac8 100644 --- a/runtime/westend/src/weights/pallet_staking.rs +++ b/runtime/westend/src/weights/pallet_staking.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_staking +//! Autogenerated weights for pallet_staking +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,134 +44,147 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_staking::WeightInfo for WeightInfo { fn bond() -> Weight { - (92_588_000 as Weight) + (97_009_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn bond_extra() -> Weight { - (72_845_000 as Weight) + (76_157_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn unbond() -> Weight { - (66_211_000 as Weight) + (69_106_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn withdraw_unbonded_update(s: u32, ) -> Weight { - (66_421_000 as Weight) - .saturating_add((30_000 as Weight).saturating_mul(s as Weight)) + (69_753_000 as Weight) + // Standard Error: 0 + .saturating_add((28_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn withdraw_unbonded_kill(s: u32, ) -> Weight { - (108_435_000 as Weight) - .saturating_add((3_792_000 as Weight).saturating_mul(s as Weight)) + (114_294_000 as Weight) + // Standard Error: 1_000 + .saturating_add((3_968_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn validate() -> Weight { - (23_187_000 as Weight) + (24_191_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn nominate(n: u32, ) -> Weight { - (30_124_000 as Weight) - .saturating_add((396_000 as Weight).saturating_mul(n as Weight)) + (31_373_000 as Weight) + // Standard Error: 12_000 + .saturating_add((393_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn chill() -> Weight { - (22_762_000 as Weight) + (23_668_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn set_payee() -> Weight { - (15_397_000 as Weight) + (16_126_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_controller() -> Weight { - (33_456_000 as Weight) + (35_127_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn set_validator_count() -> Weight { - (3_088_000 as Weight) + (3_249_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_no_eras() -> Weight { - (3_539_000 as Weight) + (3_644_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_new_era() -> Weight { - (3_475_000 as Weight) + (3_647_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_new_era_always() -> Weight { - (3_521_000 as Weight) + (3_604_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_invulnerables(v: u32, ) -> Weight { - (3_557_000 as Weight) + (3_825_000 as Weight) + // Standard Error: 0 .saturating_add((9_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn force_unstake(s: u32, ) -> Weight { - (73_984_000 as Weight) - .saturating_add((3_774_000 as Weight).saturating_mul(s as Weight)) + (77_182_000 as Weight) + // Standard Error: 1_000 + .saturating_add((3_957_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn cancel_deferred_slash(s: u32, ) -> Weight { - (5_827_544_000 as Weight) - .saturating_add((34_637_000 as Weight).saturating_mul(s as Weight)) + (5_828_506_000 as Weight) + // Standard Error: 388_000 + .saturating_add((34_623_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn payout_stakers_dead_controller(n: u32, ) -> Weight { - (125_455_000 as Weight) - .saturating_add((56_788_000 as Weight).saturating_mul(n as Weight)) + (131_768_000 as Weight) + // Standard Error: 13_000 + .saturating_add((59_048_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(11 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(n as Weight))) } fn payout_stakers_alive_staked(n: u32, ) -> Weight { - (153_217_000 as Weight) - .saturating_add((73_829_000 as Weight).saturating_mul(n as Weight)) + (166_310_000 as Weight) + // Standard Error: 24_000 + .saturating_add((76_868_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(12 as Weight)) .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(n as Weight))) } fn rebond(l: u32, ) -> Weight { - (46_731_000 as Weight) - .saturating_add((102_000 as Weight).saturating_mul(l as Weight)) + (47_420_000 as Weight) + // Standard Error: 2_000 + .saturating_add((99_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn set_history_depth(e: u32, ) -> Weight { (0 as Weight) - .saturating_add((37_029_000 as Weight).saturating_mul(e as Weight)) + // Standard Error: 60_000 + .saturating_add((39_014_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) .saturating_add(T::DbWeight::get().writes((7 as Weight).saturating_mul(e as Weight))) } fn reap_stash(s: u32, ) -> Weight { - (93_424_000 as Weight) - .saturating_add((3_786_000 as Weight).saturating_mul(s as Weight)) + (97_591_000 as Weight) + // Standard Error: 0 + .saturating_add((3_953_000 as Weight).saturating_mul(s as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(8 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) } fn new_era(v: u32, n: u32, ) -> Weight { (0 as Weight) - .saturating_add((1_006_190_000 as Weight).saturating_mul(v as Weight)) - .saturating_add((118_065_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) + // Standard Error: 808_000 + .saturating_add((741_132_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 40_000 + .saturating_add((105_169_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(v as Weight))) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) .saturating_add(T::DbWeight::get().writes(8 as Weight)) @@ -178,10 +192,14 @@ impl pallet_staking::WeightInfo for WeightInfo { } fn submit_solution_better(v: u32, n: u32, a: u32, w: u32, ) -> Weight { (0 as Weight) - .saturating_add((958_000 as Weight).saturating_mul(v as Weight)) - .saturating_add((453_000 as Weight).saturating_mul(n as Weight)) - .saturating_add((97_725_000 as Weight).saturating_mul(a as Weight)) - .saturating_add((7_355_000 as Weight).saturating_mul(w as Weight)) + // Standard Error: 49_000 + .saturating_add((1_163_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 19_000 + .saturating_add((484_000 as Weight).saturating_mul(n as Weight)) + // Standard Error: 49_000 + .saturating_add((101_948_000 as Weight).saturating_mul(a as Weight)) + // Standard Error: 103_000 + .saturating_add((7_810_000 as Weight).saturating_mul(w as Weight)) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(a as Weight))) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight))) diff --git a/runtime/westend/src/weights/pallet_timestamp.rs b/runtime/westend/src/weights/pallet_timestamp.rs index edc53ac47b..1f7fc5e488 100644 --- a/runtime/westend/src/weights/pallet_timestamp.rs +++ b/runtime/westend/src/weights/pallet_timestamp.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_timestamp +//! Autogenerated weights for pallet_timestamp +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,11 +44,11 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { fn set() -> Weight { - (9_830_000 as Weight) + (11_097_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_finalize() -> Weight { - (5_571_000 as Weight) + (6_159_000 as Weight) } } diff --git a/runtime/westend/src/weights/pallet_utility.rs b/runtime/westend/src/weights/pallet_utility.rs index 9b9f149766..06cca4364b 100644 --- a/runtime/westend/src/weights/pallet_utility.rs +++ b/runtime/westend/src/weights/pallet_utility.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_utility +//! Autogenerated weights for pallet_utility +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,14 +44,16 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { - (18_268_000 as Weight) - .saturating_add((1_504_000 as Weight).saturating_mul(c as Weight)) + (19_122_000 as Weight) + // Standard Error: 0 + .saturating_add((1_497_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (5_419_000 as Weight) + (5_668_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (18_951_000 as Weight) - .saturating_add((1_495_000 as Weight).saturating_mul(c as Weight)) + (19_623_000 as Weight) + // Standard Error: 0 + .saturating_add((1_497_000 as Weight).saturating_mul(c as Weight)) } } diff --git a/runtime/westend/src/weights/pallet_vesting.rs b/runtime/westend/src/weights/pallet_vesting.rs index c18845df33..0afc4e98f7 100644 --- a/runtime/westend/src/weights/pallet_vesting.rs +++ b/runtime/westend/src/weights/pallet_vesting.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Weights for pallet_vesting +//! Autogenerated weights for pallet_vesting +//! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-10-31, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-09, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 // Executed Command: -// ./target/release/polkadot +// target/release/polkadot // benchmark // --chain=westend-dev // --steps=50 @@ -43,38 +44,44 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_vesting::WeightInfo for WeightInfo { fn vest_locked(l: u32, ) -> Weight { - (52_570_000 as Weight) + (55_027_000 as Weight) + // Standard Error: 0 .saturating_add((130_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn vest_unlocked(l: u32, ) -> Weight { - (56_501_000 as Weight) - .saturating_add((107_000 as Weight).saturating_mul(l as Weight)) + (59_131_000 as Weight) + // Standard Error: 2_000 + .saturating_add((110_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vest_other_locked(l: u32, ) -> Weight { - (52_276_000 as Weight) - .saturating_add((130_000 as Weight).saturating_mul(l as Weight)) + (54_746_000 as Weight) + // Standard Error: 0 + .saturating_add((126_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn vest_other_unlocked(l: u32, ) -> Weight { - (56_159_000 as Weight) - .saturating_add((111_000 as Weight).saturating_mul(l as Weight)) + (58_988_000 as Weight) + // Standard Error: 2_000 + .saturating_add((106_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn vested_transfer(l: u32, ) -> Weight { - (115_671_000 as Weight) - .saturating_add((171_000 as Weight).saturating_mul(l as Weight)) + (120_685_000 as Weight) + // Standard Error: 8_000 + .saturating_add((167_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn force_vested_transfer(l: u32, ) -> Weight { - (115_068_000 as Weight) - .saturating_add((167_000 as Weight).saturating_mul(l as Weight)) + (119_814_000 as Weight) + // Standard Error: 8_000 + .saturating_add((172_000 as Weight).saturating_mul(l as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } -- GitLab From dca93d01f9a64f09b179bf0552e622ec351fbc4d Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Thu, 10 Dec 2020 16:57:36 +0100 Subject: [PATCH 108/203] addition error definitions (#2107) * remove low information density error doc comments * another round of error dancing * fix compilation * remove stale `None` argument * adjust test, minor slip in command * only add AvailabilityError for full node features * another None where none shuld be --- Cargo.lock | 1 + cli/src/command.rs | 65 ++++++++++++++----- node/core/av-store/src/lib.rs | 19 ++++-- node/core/bitfield-signing/src/lib.rs | 15 ++--- node/service/Cargo.toml | 1 + node/service/src/lib.rs | 46 +++++++++++-- node/subsystem/src/lib.rs | 6 +- node/test/service/src/lib.rs | 7 +- .../adder/collator/src/main.rs | 10 +-- 9 files changed, 124 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91f480a07f..9bbe334f7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5564,6 +5564,7 @@ dependencies = [ "sp-transaction-pool", "sp-trie", "substrate-prometheus-endpoint", + "thiserror", "tracing", "tracing-futures", "westend-runtime", diff --git a/cli/src/command.rs b/cli/src/command.rs index 85341278fb..d09de02a12 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -16,9 +16,32 @@ use log::info; use service::{IdentifyVariant, self}; -use sc_cli::{SubstrateCli, Result, RuntimeVersion, Role}; +use sc_cli::{SubstrateCli, RuntimeVersion, Role}; use crate::cli::{Cli, Subcommand}; +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error(transparent)] + PolkadotService(#[from] service::Error), + + #[error(transparent)] + SubstrateCli(#[from] sc_cli::Error), + + #[error(transparent)] + SubstrateService(#[from] sc_service::Error), + + #[error("Other: {0}")] + Other(String), +} + +impl std::convert::From for Error { + fn from(s: String) -> Self { + Self::Other(s) + } +} + +type Result = std::result::Result; + fn get_exec_name() -> Option { std::env::current_exe() .ok() @@ -139,22 +162,27 @@ pub fn run() -> Result<()> { info!("----------------------------"); } - runner.run_node_until_exit(|config| async move { + + Ok(runner.run_node_until_exit(move |config| async move { let role = config.role.clone(); - match role { - Role::Light => service::build_light(config).map(|(task_manager, _)| task_manager), + let task_manager = match role { + Role::Light => service::build_light(config).map(|(task_manager, _)| task_manager) + .map_err(|e| sc_service::Error::Other(e.to_string()) ), _ => service::build_full( config, service::IsCollator::No, grandpa_pause, - ).map(|full| full.task_manager), - } - }) + ).map(|full| full.task_manager) + .map_err(|e| sc_service::Error::Other(e.to_string()) ) + }; + task_manager + }).map_err(|e| -> sc_cli::Error { e.into() })?) + }, Some(Subcommand::BuildSpec(cmd)) => { let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| cmd.run(config.chain_spec, config.network)) + Ok(runner.sync_run(|config| cmd.run(config.chain_spec, config.network))?) }, Some(Subcommand::CheckBlock(cmd)) => { let runner = cli.create_runner(cmd)?; @@ -163,7 +191,8 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config)?; + let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config) + .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, import_queue), task_manager)) }) }, @@ -174,7 +203,8 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, _, task_manager) = service::new_chain_ops(&mut config)?; + let (client, _, _, task_manager) = service::new_chain_ops(&mut config) + .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, config.database), task_manager)) }) }, @@ -185,7 +215,8 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, _, task_manager) = service::new_chain_ops(&mut config)?; + let (client, _, _, task_manager) = service::new_chain_ops(&mut config) + .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, config.chain_spec), task_manager)) }) }, @@ -196,13 +227,15 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config)?; + let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config) + .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, import_queue), task_manager)) }) }, Some(Subcommand::PurgeChain(cmd)) => { let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| cmd.run(config.database)) + Ok(runner.sync_run(|config| cmd.run(config.database)) + .map_err(|e| sc_service::Error::Other(e.to_string()))?) }, Some(Subcommand::Revert(cmd)) => { let runner = cli.create_runner(cmd)?; @@ -211,7 +244,8 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, backend, _, task_manager) = service::new_chain_ops(&mut config)?; + let (client, backend, _, task_manager) = service::new_chain_ops(&mut config) + .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, backend), task_manager)) }) }, @@ -237,5 +271,6 @@ pub fn run() -> Result<()> { }) }, Some(Subcommand::Key(cmd)) => cmd.run(), - } + }?; + Ok(()) } diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 72c1d9cb4c..795d89d9ee 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -44,7 +44,6 @@ use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_subsystem::messages::{ AllMessages, AvailabilityStoreMessage, ChainApiMessage, RuntimeApiMessage, RuntimeApiRequest, }; -use thiserror::Error; const LOG_TARGET: &str = "availability"; @@ -54,22 +53,32 @@ mod columns { pub const NUM_COLUMNS: u32 = 2; } -#[derive(Debug, Error)] -enum Error { +#[derive(Debug, thiserror::Error)] +#[allow(missing_docs)] +pub enum Error { #[error(transparent)] RuntimeApi(#[from] RuntimeApiError), + #[error(transparent)] ChainApi(#[from] ChainApiError), + #[error(transparent)] Erasure(#[from] erasure::Error), + #[error(transparent)] Io(#[from] io::Error), + #[error(transparent)] Oneshot(#[from] oneshot::Canceled), + #[error(transparent)] Subsystem(#[from] SubsystemError), + #[error(transparent)] Time(#[from] SystemTimeError), + + #[error("Custom databases are not supported")] + CustomDatabase, } impl Error { @@ -418,10 +427,10 @@ pub struct Config { } impl std::convert::TryFrom for Config { - type Error = &'static str; + type Error = Error; fn try_from(config: sc_service::config::DatabaseConfig) -> Result { - let path = config.path().ok_or("custom databases are not supported")?; + let path = config.path().ok_or(Error::CustomDatabase)?; Ok(Self { // substrate cache size is improper here; just use the default diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 7937d908ef..92478afb13 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -35,7 +35,6 @@ use polkadot_node_subsystem_util::{ use polkadot_primitives::v1::{AvailabilityBitfield, CoreState, Hash, ValidatorIndex}; use std::{pin::Pin, time::Duration, iter::FromIterator}; use wasm_timer::{Delay, Instant}; -use thiserror::Error; /// Delay between starting a bitfield signing job and its attempting to create a bitfield. const JOB_DELAY: Duration = Duration::from_millis(1500); @@ -45,24 +44,24 @@ const LOG_TARGET: &str = "bitfield_signing"; pub struct BitfieldSigningJob; /// Errors we may encounter in the course of executing the `BitfieldSigningSubsystem`. -#[derive(Debug, Error)] +#[derive(Debug, thiserror::Error)] +#[allow(missing_docs)] pub enum Error { - /// error propagated from the utility subsystem #[error(transparent)] Util(#[from] util::Error), - /// io error + #[error(transparent)] Io(#[from] std::io::Error), - /// a one shot channel was canceled + #[error(transparent)] Oneshot(#[from] oneshot::Canceled), - /// a mspc channel failed to send + #[error(transparent)] MpscSend(#[from] mpsc::SendError), - /// the runtime API failed to return what we wanted + #[error(transparent)] Runtime(#[from] RuntimeApiError), - /// the keystore failed to process signing request + #[error("Keystore failed: {0:?}")] Keystore(KeystoreError), } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 541f4ab391..0cb3fdc670 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -57,6 +57,7 @@ hex-literal = "0.3.1" tracing = "0.1.22" tracing-futures = "0.2.4" serde = { version = "1.0.118", features = ["derive"] } +thiserror = "1.0.21" # Polkadot polkadot-node-core-proposer = { path = "../core/proposer" } diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 43f43657b8..0bb1769d9a 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -27,9 +27,9 @@ use grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider}; use { std::convert::TryInto, std::time::Duration, - tracing::info, polkadot_node_core_av_store::Config as AvailabilityConfig, + polkadot_node_core_av_store::Error as AvailabilityError, polkadot_node_core_proposer::ProposerFactory, polkadot_overseer::{AllSubsystems, BlockInfo, Overseer, OverseerHandler}, polkadot_primitives::v1::ParachainHost, @@ -56,7 +56,7 @@ pub use sc_client_api::{Backend, ExecutionStrategy, CallExecutor}; pub use sc_consensus::LongestChain; pub use sc_executor::NativeExecutionDispatch; pub use service::{ - Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis, + Role, PruningMode, TransactionPoolOptions, Error as SubstrateServiceError, RuntimeGenesis, TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor, Configuration, ChainSpec, TaskManager, }; @@ -97,6 +97,38 @@ native_executor_instance!( frame_benchmarking::benchmarking::HostFunctions, ); + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error(transparent)] + Io(#[from] std::io::Error), + + #[error(transparent)] + AddrFormatInvalid(#[from] std::net::AddrParseError), + + #[error(transparent)] + Sub(#[from] SubstrateServiceError), + + #[error(transparent)] + Blockchain(#[from] sp_blockchain::Error), + + #[error(transparent)] + Consensus(#[from] consensus_common::Error), + + #[error("Failed to create an overseer")] + Overseer(#[from] polkadot_overseer::SubsystemError), + + #[error(transparent)] + Prometheus(#[from] prometheus_endpoint::PrometheusError), + + #[cfg(feature = "full-node")] + #[error(transparent)] + Availability(#[from] AvailabilityError), + + #[error("Authorities require the real overseer implementation")] + AuthoritiesRequireRealOverseer, +} + /// Can be called for a `Configuration` to check if it is a configuration for the `Kusama` network. pub trait IdentifyVariant { /// Returns if this is a configuration for the `Kusama` network. @@ -304,7 +336,7 @@ where AllSubsystems::<()>::dummy(), registry, spawner, - ).map_err(|e| Error::Other(format!("Failed to create an Overseer: {:?}", e))) + ).map_err(|e| e.into()) } #[cfg(all(feature = "full-node", feature = "real-overseer"))] @@ -418,7 +450,7 @@ where all_subsystems, registry, spawner, - ).map_err(|e| Error::Other(format!("Failed to create an Overseer: {:?}", e))) + ).map_err(|e| e.into()) } #[cfg(feature = "full-node")] @@ -529,7 +561,7 @@ pub fn new_full( let telemetry_connection_sinks = service::TelemetryConnectionSinks::default(); - let availability_config = config.database.clone().try_into(); + let availability_config = config.database.clone().try_into().map_err(Error::Availability)?; let rpc_handlers = service::spawn_tasks(service::SpawnTasksParams { config, @@ -605,7 +637,7 @@ pub fn new_full( leaves, keystore_container.sync_keystore(), overseer_client.clone(), - availability_config?, + availability_config, network.clone(), authority_discovery_service, prometheus_registry.as_ref(), @@ -644,7 +676,7 @@ pub fn new_full( task_manager.spawn_handle(), client.clone(), transaction_pool, - overseer_handler.as_ref().ok_or("authorities require real overseer handlers")?.clone(), + overseer_handler.as_ref().ok_or_else(|| Error::AuthoritiesRequireRealOverseer)?.clone(), prometheus_registry.as_ref(), ); diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index 143c35d2c0..1d9d7b7352 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -77,7 +77,7 @@ impl PartialEq for ActiveLeavesUpdate { /// /// Instead, it means equality when `activated` and `deactivated` are considered as sets. fn eq(&self, other: &Self) -> bool { - self.activated.len() == other.activated.len() && self.deactivated.len() == other.deactivated.len() + self.activated.len() == other.activated.len() && self.deactivated.len() == other.deactivated.len() && self.activated.iter().all(|a| other.activated.contains(a)) && self.deactivated.iter().all(|a| other.deactivated.contains(a)) } @@ -151,13 +151,13 @@ pub enum SubsystemError { /// An additional anotation tag for the origin of `source`. origin: &'static str, /// The wrapped error. Marked as source for tracking the error chain. - #[source] source: Box + #[source] source: Box }, } impl SubsystemError { /// Adds a `str` as `origin` to the given error `err`. - pub fn with_origin(origin: &'static str, err: E) -> Self { + pub fn with_origin(origin: &'static str, err: E) -> Self { Self::FromOrigin { origin, source: Box::new(err) } } } diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 4a4677a0ef..7a37e3db31 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -28,7 +28,7 @@ use polkadot_primitives::v1::{ }; use polkadot_runtime_common::BlockHashCount; use polkadot_service::{ - NewFull, FullClient, ClientHandle, ExecuteWithClient, IsCollator, + Error, NewFull, FullClient, ClientHandle, ExecuteWithClient, IsCollator, }; use polkadot_node_subsystem::messages::{CollatorProtocolMessage, CollationGenerationMessage}; use polkadot_test_runtime::{ @@ -45,7 +45,6 @@ use sc_network::{ }; use service::{ config::{DatabaseConfig, KeystoreConfig, MultiaddrWithPeerId, WasmExecutionMethod}, - error::Error as ServiceError, RpcHandlers, TaskExecutor, TaskManager, }; use service::{BasePath, Configuration, Role}; @@ -76,14 +75,14 @@ pub fn new_full( is_collator: IsCollator, ) -> Result< NewFull>, - ServiceError, + Error, > { polkadot_service::new_full::( config, is_collator, None, polkadot_parachain::wasm_executor::IsolationStrategy::InProcess, - ).map_err(Into::into) + ) } /// A wrapper for the test client that implements `ClientHandle`. diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 03b63989cc..49ffc379eb 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -19,7 +19,7 @@ use polkadot_node_primitives::CollationGenerationConfig; use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; use polkadot_primitives::v1::Id as ParaId; -use sc_cli::{Result, Role, SubstrateCli}; +use sc_cli::{Result, Error as SubstrateCliError, Role, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; use test_parachain_adder_collator::Collator; @@ -46,7 +46,8 @@ fn main() -> Result<()> { Ok(()) } None => { - let runner = cli.create_runner(&cli.run.base)?; + let runner = cli.create_runner(&cli.run.base) + .map_err(|e| SubstrateCliError::Application(Box::new(e) as Box::<(dyn 'static + Send + Sync + std::error::Error)>))?; runner.run_node_until_exit(|config| async move { let role = config.role.clone(); @@ -60,7 +61,7 @@ fn main() -> Result<()> { config, polkadot_service::IsCollator::Yes(collator.collator_id()), None, - )?; + ).map_err(|e| e.to_string())?; let mut overseer_handler = full_node .overseer_handler .expect("Overseer handler should be initialized for collators"); @@ -94,5 +95,6 @@ fn main() -> Result<()> { } }) } - } + }?; + Ok(()) } -- GitLab From 4d10259def083a6a62eb64eb57d59dfe54f10a3c Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Thu, 10 Dec 2020 22:02:36 +0100 Subject: [PATCH 109/203] session_info: store the assigment ids (#2102) * session_info: store the assigment ids * how about this? --- runtime/parachains/src/session_info.rs | 32 ++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index decc25a20d..07f10cb7a3 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -19,7 +19,7 @@ //! //! See https://w3f.github.io/parachain-implementers-guide/runtime/session_info.html. -use primitives::v1::{AuthorityDiscoveryId, SessionIndex, SessionInfo}; +use primitives::v1::{AssignmentId, AuthorityDiscoveryId, SessionIndex, SessionInfo}; use frame_support::{ decl_storage, decl_module, decl_error, weights::Weight, @@ -38,6 +38,10 @@ pub trait Config: decl_storage! { trait Store for Module as ParaSessionInfo { + /// Assignment keys for the current session. + /// Note that this API is private due to it being prone to 'off-by-one' at session boundaries. + /// When in doubt, use `Sessions` API instead. + AssignmentKeysUnsafe: Vec; /// The earliest session for which previous session info is stored. EarliestStoredSession get(fn earliest_stored_session): SessionIndex; /// Session information in a rolling window. @@ -83,7 +87,8 @@ impl Module { let validators = notification.validators.clone(); let discovery_keys = ::authorities(); - // FIXME: once we store these keys: https://github.com/paritytech/polkadot/issues/1975 + let _assignment_keys = AssignmentKeysUnsafe::get(); + // FIXME: remove this once https://github.com/paritytech/polkadot/pull/2092 is merged let approval_keys = Default::default(); let validator_groups = >::validator_groups(); let n_cores = n_parachains + config.parathread_cores; @@ -132,6 +137,29 @@ impl Module { pub(crate) fn initializer_finalize() {} } +impl sp_runtime::BoundToRuntimeAppPublic for Module { + type Public = AssignmentId; +} + +impl pallet_session::OneSessionHandler for Module { + type Key = AssignmentId; + + fn on_genesis_session<'a, I: 'a>(_validators: I) + where I: Iterator + { + + } + + fn on_new_session<'a, I: 'a>(_changed: bool, validators: I, _queued: I) + where I: Iterator + { + let assignment_keys: Vec<_> = validators.map(|(_, v)| v).collect(); + AssignmentKeysUnsafe::set(assignment_keys); + } + + fn on_disabled(_i: usize) { } +} + #[cfg(test)] mod tests { -- GitLab From 4683fa3c850c55dd648f620e0011b83a485e2362 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Thu, 10 Dec 2020 22:34:17 +0100 Subject: [PATCH 110/203] session_ info: small fixes (#2106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * session_info: use proper timeout in test * Revert "fix off-by-one error" This reverts commit 35cb56305a19134acd8a8f881f3aabf999a09d74. * session_info: use correct EarliestStoredSession when introduced on a live chain * use saturating_sub Co-authored-by: Bastian Köcher * session_info: revert the timeout test * session_info: rust is dumb Co-authored-by: Bastian Köcher --- runtime/parachains/src/session_info.rs | 49 +++++++++----------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index 07f10cb7a3..d00b176f3e 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -25,7 +25,7 @@ use frame_support::{ weights::Weight, }; use crate::{configuration, paras, scheduler}; -use sp_std::{cmp, vec::Vec}; +use sp_std::vec::Vec; pub trait Config: frame_system::Config @@ -100,17 +100,19 @@ impl Module { let new_session_index = notification.session_index; let old_earliest_stored_session = EarliestStoredSession::get(); - let dispute_period = cmp::max(1, dispute_period); - let new_earliest_stored_session = new_session_index.checked_sub(dispute_period - 1).unwrap_or(0); - let new_earliest_stored_session = cmp::max(new_earliest_stored_session, old_earliest_stored_session); - // update `EarliestStoredSession` based on `config.dispute_period` - EarliestStoredSession::set(new_earliest_stored_session); + let new_earliest_stored_session = new_session_index.saturating_sub(dispute_period); + let new_earliest_stored_session = core::cmp::max(new_earliest_stored_session, old_earliest_stored_session); // remove all entries from `Sessions` from the previous value up to the new value // avoid a potentially heavy loop when introduced on a live chain if old_earliest_stored_session != 0 || Sessions::get(0).is_some() { for idx in old_earliest_stored_session..new_earliest_stored_session { Sessions::remove(&idx); } + // update `EarliestStoredSession` based on `config.dispute_period` + EarliestStoredSession::set(new_earliest_stored_session); + } else { + // just introduced on a live chain + EarliestStoredSession::set(new_session_index); } // create a new entry in `Sessions` with information about the current session let new_session_info = SessionInfo { @@ -249,24 +251,29 @@ mod tests { #[test] fn session_pruning_is_based_on_dispute_period() { new_test_ext(genesis_config()).execute_with(|| { + let default_info = primitives::v1::SessionInfo::default(); + Sessions::insert(9, default_info); run_to_block(100, session_changes); - assert_eq!(EarliestStoredSession::get(), 9); + // but the first session change is not based on dispute_period + assert_eq!(EarliestStoredSession::get(), 10); + // and we didn't prune the last changes + assert!(Sessions::get(9).is_some()); // changing dispute_period works let dispute_period = 5; Configuration::set_dispute_period(Origin::root(), dispute_period).unwrap(); run_to_block(200, session_changes); - assert_eq!(EarliestStoredSession::get(), 20 - dispute_period + 1); + assert_eq!(EarliestStoredSession::get(), 20 - dispute_period); // we don't have that many sessions stored let new_dispute_period = 16; Configuration::set_dispute_period(Origin::root(), new_dispute_period).unwrap(); run_to_block(300, session_changes); - assert_eq!(EarliestStoredSession::get(), 20 - dispute_period + 1); + assert_eq!(EarliestStoredSession::get(), 20 - dispute_period); // now we do run_to_block(400, session_changes); - assert_eq!(EarliestStoredSession::get(), 40 - new_dispute_period + 1); + assert_eq!(EarliestStoredSession::get(), 40 - new_dispute_period); }) } @@ -284,26 +291,4 @@ mod tests { assert_eq!(session.needed_approvals, 42); }) } - - #[test] - fn session_pruning_avoids_heavy_loop() { - new_test_ext(genesis_config()).execute_with(|| { - let start = 1_000_000_000; - System::on_initialize(start); - System::set_block_number(start); - - if let Some(notification) = new_session_every_block(start) { - Configuration::initializer_on_new_session(¬ification.validators, ¬ification.queued); - SessionInfo::initializer_on_new_session(¬ification); - } - - Configuration::initializer_initialize(start); - SessionInfo::initializer_initialize(start); - - assert_eq!(EarliestStoredSession::get(), start - 1); - - run_to_block(start + 1, new_session_every_block); - assert_eq!(EarliestStoredSession::get(), start); - }) - } } -- GitLab From 6701f77202c67699fa2b2e340124617ead0adb40 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 10 Dec 2020 20:30:27 -0600 Subject: [PATCH 111/203] Add assignment keys to session keys, no separate approvals key (#2092) * guide: merge backing and approval keys * bump substrate master & update primitives * use new SessionInfo struct in session_info * session keys upgrade for Polkadot * kusama & westend runtimes * bump westend, kusama, and polkadot versions * add session key to rococo & test-runtime * update prepare-test-net to latest subkey * update chain specs to support new para_assignment session key * get cargo.lock from master * formatting * update kill_storage based on substrate master * fix test-service * assgn -> asgn * use session info module for assignment session key --- node/service/src/chain_spec.rs | 150 ++++++++++++++---- node/test/service/src/chain_spec.rs | 20 ++- primitives/src/v1.rs | 18 +-- .../src/node/approval/approval-voting.md | 2 +- .../src/protocol-approval.md | 2 +- .../src/runtime/session_info.md | 7 +- .../implementers-guide/src/types/approval.md | 10 +- runtime/common/src/lib.rs | 31 +++- runtime/kusama/src/lib.rs | 49 +++++- runtime/parachains/src/session_info.rs | 6 +- runtime/polkadot/src/lib.rs | 49 +++++- runtime/rococo/src/lib.rs | 9 +- runtime/test-runtime/src/lib.rs | 8 +- runtime/westend/src/lib.rs | 49 +++++- scripts/prepare-test-net.sh | 15 +- 15 files changed, 328 insertions(+), 97 deletions(-) diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 0acc287fee..d4dfcdd597 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -25,7 +25,7 @@ use kusama_runtime as kusama; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_staking::Forcing; use polkadot::constants::currency::DOTS; -use polkadot_primitives::v1::{AccountId, AccountPublic, ValidatorId}; +use polkadot_primitives::v1::{AccountId, AccountPublic, ValidatorId, AssignmentId}; use polkadot_runtime as polkadot; use rococo_runtime as rococo; use rococo_runtime::constants::currency::DOTS as ROC; @@ -88,14 +88,16 @@ fn polkadot_session_keys( babe: BabeId, grandpa: GrandpaId, im_online: ImOnlineId, - parachain_validator: ValidatorId, + para_validator: ValidatorId, + para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, ) -> polkadot::SessionKeys { polkadot::SessionKeys { babe, grandpa, im_online, - parachain_validator, + para_validator, + para_assignment, authority_discovery, } } @@ -104,14 +106,16 @@ fn kusama_session_keys( babe: BabeId, grandpa: GrandpaId, im_online: ImOnlineId, - parachain_validator: ValidatorId, + para_validator: ValidatorId, + para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, ) -> kusama::SessionKeys { kusama::SessionKeys { babe, grandpa, im_online, - parachain_validator, + para_validator, + para_assignment, authority_discovery, } } @@ -120,14 +124,16 @@ fn westend_session_keys( babe: BabeId, grandpa: GrandpaId, im_online: ImOnlineId, - parachain_validator: ValidatorId, + para_validator: ValidatorId, + para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId, ) -> westend::SessionKeys { westend::SessionKeys { babe, grandpa, im_online, - parachain_validator, + para_validator, + para_assignment, authority_discovery, } } @@ -136,14 +142,16 @@ fn rococo_session_keys( babe: BabeId, grandpa: GrandpaId, im_online: ImOnlineId, - parachain_validator: ValidatorId, + para_validator: ValidatorId, + para_assignment: AssignmentId, authority_discovery: AuthorityDiscoveryId ) -> rococo_runtime::SessionKeys { rococo_runtime::SessionKeys { babe, grandpa, im_online, - parachain_validator, + para_validator, + para_assignment, authority_discovery, } } @@ -159,6 +167,7 @@ fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::Gene GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, )> = vec![]; @@ -191,6 +200,7 @@ fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::Gene x.4.clone(), x.5.clone(), x.6.clone(), + x.7.clone(), ), ) }) @@ -249,7 +259,7 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi // for i in 1 2 3 4; do for j in babe; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done // for i in 1 2 3 4; do for j in grandpa; do subkey --ed25519 inspect "$SECRET//$i//$j"; done; done // for i in 1 2 3 4; do for j in im_online; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done - // for i in 1 2 3 4; do for j in parachains; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done + // for i in 1 2 3 4; do for j in para_validator para_assignment; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done let initial_authorities: Vec<( AccountId, AccountId, @@ -257,6 +267,7 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, )> = vec![ ( @@ -279,6 +290,9 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi // 5Ef8qY8LRV6RFd4bThrwxBhhWfLjzqmd4rK8nX3Xs7zJqqp7 hex!["72bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001"] .unchecked_into(), + // 5Ef8qY8LRV6RFd4bThrwxBhhWfLjzqmd4rK8nX3Xs7zJqqp7 + hex!["72bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001"] + .unchecked_into(), ), ( // 5G1ojzh47Yt8KoYhuAjXpHcazvsoCXe3G8LZchKDvumozJJJ @@ -300,6 +314,9 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi // 5Et8y49AyE7ncVKiSRgzN6zbqbYtMK6y7kKuUaS8YqvfLBD9 hex!["7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a"] .unchecked_into(), + // 5Et8y49AyE7ncVKiSRgzN6zbqbYtMK6y7kKuUaS8YqvfLBD9 + hex!["7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a"] + .unchecked_into(), ), ( // 5HYYWyhyUQ7Ae11f8fCid58bhJ7ikLHM9bU8A6Ynwoc3dStR @@ -321,6 +338,9 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi // 5EhnN1SumSv5KxwLAdwE8ugJaw1S8xARZb8V2BMYCKaD7ure hex!["74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e"] .unchecked_into(), + // 5EhnN1SumSv5KxwLAdwE8ugJaw1S8xARZb8V2BMYCKaD7ure + hex!["74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e"] + .unchecked_into(), ), ( // 5CFPcUJgYgWryPaV1aYjSbTpbTLu42V32Ytw1L9rfoMAsfGh @@ -342,6 +362,9 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi // 5Ft7o2uqDq5pXCK4g5wR94BctmtLEzCBy5MvPqRa8753ZemD hex!["a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f"] .unchecked_into(), + // 5Ft7o2uqDq5pXCK4g5wR94BctmtLEzCBy5MvPqRa8753ZemD + hex!["a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f"] + .unchecked_into(), ), ]; @@ -374,6 +397,7 @@ fn westend_staging_testnet_config_genesis(wasm_binary: &[u8]) -> westend::Genesi x.4.clone(), x.5.clone(), x.6.clone(), + x.7.clone(), ), ) }) @@ -420,7 +444,7 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC // for i in 1 2 3 4; do for j in babe; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done // for i in 1 2 3 4; do for j in grandpa; do subkey --ed25519 inspect "$SECRET//$i//$j"; done; done // for i in 1 2 3 4; do for j in im_online; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done - // for i in 1 2 3 4; do for j in parachains; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done + // for i in 1 2 3 4; do for j in para_validator para_assignment; do subkey --sr25519 inspect "$SECRET//$i//$j"; done; done let initial_authorities: Vec<( AccountId, AccountId, @@ -428,6 +452,7 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, )> = vec![ ( @@ -450,6 +475,9 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC // 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1 hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"] .unchecked_into(), + // 5FpewyS2VY8Cj3tKgSckq8ECkjd1HKHvBRnWhiHqRQsWfFC1 + hex!["a639b507ee1585e0b6498ff141d6153960794523226866d1b44eba3f25f36356"] + .unchecked_into(), ), ( // 5G9VGb8ESBeS8Ca4or43RfhShzk9y7T5iTmxHk5RJsjZwsRx @@ -471,6 +499,9 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC // 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"] .unchecked_into(), + // 5GvuM53k1Z4nAB5zXJFgkRSHv4Bqo4BsvgbQWNWkiWZTMwWY + hex!["765e46067adac4d1fe6c783aa2070dfa64a19f84376659e12705d1734b3eae01"] + .unchecked_into(), ), ( // 5FzwpgGvk2kk9agow6KsywLYcPzjYc8suKej2bne5G5b9YU3 @@ -492,6 +523,9 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC // 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5 hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"] .unchecked_into(), + // 5CXNq1mSKJT4Sc2CbyBBdANeSkbUvdWvE4czJjKXfBHi9sX5 + hex!["664eae1ca4713dd6abf8c15e6c041820cda3c60df97dc476c2cbf7cb82cb2d2e"] + .unchecked_into(), ), ( // 5CFj6Kg9rmVn1vrqpyjau2ztyBzKeVdRKwNPiA3tqhB5HPqq @@ -513,6 +547,9 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC // 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"] .unchecked_into(), + // 5FCd9Y7RLNyxz5wnCAErfsLbXGG34L2BaZRHzhiJcMUMd5zd + hex!["2adb17a5cafbddc7c3e00ec45b6951a8b12ce2264235b4def342513a767e5d3d"] + .unchecked_into(), ), ]; @@ -545,6 +582,7 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC x.4.clone(), x.5.clone(), x.6.clone(), + x.7.clone(), ), ) }) @@ -607,6 +645,7 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId )> = vec![( //5EHZkbp22djdbuMFH9qt1DVzSCvqi3zWpj6DAYfANa828oei @@ -619,8 +658,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa"].unchecked_into(), //5F7BEa1LGFksUihyatf3dCDYneB8pWzVyavnByCsm5nBgezi hex!["86975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef743"].unchecked_into(), - //5CDS33qmzmrBHWxVx5Vcz2Wim5b4aVS5C9yh3HpxqwmkrFwt - hex!["06a7f34a2ae69cc0cca633c7a82b37cfba821707eb62ffe065b242e1230e4661"].unchecked_into(), + //5CP6oGfwqbEfML8efqm1tCZsUgRsJztp9L8ZkEUxA16W8PPz + hex!["0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205"].unchecked_into(), + //5HQdwiDh8Qtd5dSNWajNYpwDvoyNWWA16Y43aEkCNactFc2b + hex!["ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477b"].unchecked_into(), //5HbSgM72xVuscsopsdeG3sCSCYdAeM1Tay9p79N6ky6vwDGq hex!["f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c"].unchecked_into(), ), @@ -635,8 +676,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d"].unchecked_into(), //5DhyXZiuB1LvqYKFgT5tRpgGsN3is2cM9QxgW7FikvakbAZP hex!["48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055"].unchecked_into(), - //5FxYBi73N4C9HQphtjCRDthxT2XLhd8e6BuYnxERQ7UJtAx6 - hex!["ac3ce74c09d1bb387d3f79dc8df88d661da689d5364eb8131c83fcc8ecb2fc5b"].unchecked_into(), + //5EPEWRecy2ApL5n18n3aHyU1956zXTRqaJpzDa9DoqiggNwF + hex!["669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816"].unchecked_into(), + //5ES3fw5X4bndSgLNmtPfSbM2J1kLqApVB2CCLS4CBpM1UxUZ + hex!["68bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80d"].unchecked_into(), //5HeXbwb5PxtcRoopPZTp5CQun38atn2UudQ8p2AxR5BzoaXw hex!["f6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f349"].unchecked_into(), ), @@ -651,8 +694,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1"].unchecked_into(), //5HTXBf36LXmkFWJLokNUK6fPxVpkr2ToUnB1pvaagdGu4c1T hex!["ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878"].unchecked_into(), - //5EXD52Bdz24J1N6i8hss7a5pfAARYmURgESatGXgjsV274Rk - hex!["6caf2fe2cf01fc3f07e113a2940a1d6c7bc1ab9d8974f152c2ee201d4f16f67a"].unchecked_into(), + //5FtAGDZYJKXkhVhAxCQrXmaP7EE2mGbBMfmKDHjfYDgq2BiU + hex!["a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037"].unchecked_into(), + //5CtK7JHv3h6UQZ44y54skxdwSVBRtuxwPE1FYm7UZVhg8rJV + hex!["244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e"].unchecked_into(), //5D4r6YaB6F7A7nvMRHNFNF6zrR9g39bqDJFenrcaFmTCRwfa hex!["2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d"].unchecked_into(), ), @@ -667,12 +712,14 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["36be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4"].unchecked_into(), //5FHf8kpK4fPjEJeYcYon2gAPwEBubRvtwpzkUbhMWSweKPUY hex!["8e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c"].unchecked_into(), - //5HZ5hm2WTQEXaYAeH24h5kh2Q2rCbnJeiXNm9nhkxNXwwn8M - hex!["f2d19482d1da872af925e84478787e0719f637bd1f88c0c99316bdf2658d5478"].unchecked_into(), + //5F9FsRjpecP9GonktmtFL3kjqNAMKjHVFjyjRdTPa4hbQRZA + hex!["882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b"].unchecked_into(), + //5F1FZWZSj3JyTLs8sRBxU6QWyGLSL9BMRtmSKDmVEoiKFxSP + hex!["821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b75"].unchecked_into(), //5CtgRR74VypK4h154s369abs78hDUxZSJqcbWsfXvsjcHJNA hex!["2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c"].unchecked_into(), - ), - ( + ), + ( //5C8AL1Zb4bVazgT3EgDxFgcow1L4SJjVu44XcLC9CrYqFN4N hex!["02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16"].into(), //5FLYy3YKsAnooqE4hCudttAsoGKbVG3hYYBtVzwMjJQrevPa @@ -683,8 +730,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["6c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c81"].unchecked_into(), //5GqL8RbVAuNXpDhjQi1KrS1MyNuKhvus2AbmQwRGjpuGZmFu hex!["d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a"].unchecked_into(), - //5DfapfASpVBDsVxgM2FctoQXRX6oa9AbXY5uH7VxWu9esQFy - hex!["46d6245026e0e4f4a120cfdfbc9f36a37de202489c4c7ff05b6c54d1811aee2c"].unchecked_into(), + //5EUNaBpX9mJgcmLQHyG5Pkms6tbDiKuLbeTEJS924Js9cA1N + hex!["6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01"].unchecked_into(), + //5CaZuueRVpMATZG4hkcrgDoF4WGixuz7zu83jeBdY3bgWGaG + hex!["16c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33"].unchecked_into(), //5DABsdQCDUGuhzVGWe5xXzYQ9rtrVxRygW7RXf9Tsjsw1aGJ hex!["306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531"].unchecked_into(), ), @@ -699,8 +748,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33"].unchecked_into(), //5GWZbVkJEfWZ7fRca39YAQeqri2Z7pkeHyd7rUctUHyQifLp hex!["c4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35"].unchecked_into(), - //5C5DAKUwKcxU2eT9fZU23HPEJcJLPQRt7YX5sAyifKKsnBNd - hex!["0062a5ab339962d84b6711b86fa67b457483fcd3d75dafb7bd15f182b7434227"].unchecked_into(), + //5CmLCFeSurRXXtwMmLcVo7sdJ9EqDguvJbuCYDcHkr3cpqyE + hex!["1efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c"].unchecked_into(), + //5DnsSy8a8pfE2aFjKBDtKw7WM1V4nfE5sLzP15MNTka53GqS + hex!["4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22"].unchecked_into(), //5CZdFnyzZvKetZTeUwj5APAYskVJe4QFiTezo5dQNsrnehGd hex!["160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a"].unchecked_into(), ), @@ -715,8 +766,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["4bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14"].unchecked_into(), //5E1Y1FJ7dVP7qtE3wm241pTm72rTMcDT5Jd8Czv7Pwp7N3AH hex!["560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651"].unchecked_into(), - //5Fs2mowfPb93ByRTKtzTE5evCh2SfVLJfpBBM5SmpYGdG6yK - hex!["a809aaaaebc04051536c99166c99f0cba19c7b5950cd8a37882dd56220f2e84f"].unchecked_into(), + //5CAC278tFCHAeHYqE51FTWYxHmeLcENSS1RG77EFRTvPZMJT + hex!["042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f"].unchecked_into(), + //5HjRTLWcQjZzN3JDvaj1UzjNSayg5ZD9ZGWMstaL7Ab2jjAa + hex!["fab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f"].unchecked_into(), //5ELv74v7QcsS6FdzvG4vL2NnYDGWmRnJUSMKYwdyJD7Xcdi7 hex!["64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f"].unchecked_into(), ), @@ -731,8 +784,10 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: hex!["4ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc"].unchecked_into(), //5FNFDUGNLUtqg5LgrwYLNmBiGoP8KRxsvQpBkc7GQP6qaBUG hex!["92156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66"].unchecked_into(), - //5Ea4of4L3i5Nc8QcPE648cN8CL8iuo9v4xc2LpKAtr6oShFU - hex!["6edd19e3c5230998e533e165a26438afe663368d0eab37fabff734a36119ce0e"].unchecked_into(), + //5Gx6YeNhynqn8qkda9QKpc9S7oDr4sBrfAu516d3sPpEt26F + hex!["d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d"].unchecked_into(), + //5DhDcHqwxoes5s89AyudGMjtZXx1nEgrk5P45X88oSTR3iyx + hex!["481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c"].unchecked_into(), //5DqAvikdpfRdk5rR35ZobZhqaC5bJXZcEuvzGtexAZP1hU3T hex!["4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26"].unchecked_into(), )]; @@ -758,7 +813,14 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: keys: initial_authorities.iter().map(|x| ( x.0.clone(), x.0.clone(), - rococo_session_keys(x.2.clone(), x.3.clone(), x.4.clone(), x.5.clone(), x.6.clone()), + rococo_session_keys( + x.2.clone(), + x.3.clone(), + x.4.clone(), + x.5.clone(), + x.6.clone(), + x.7.clone(), + ), )).collect::>(), }), pallet_babe: Some(Default::default()), @@ -898,6 +960,7 @@ pub fn get_authority_keys_from_seed( GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, ) { ( @@ -907,6 +970,7 @@ pub fn get_authority_keys_from_seed( get_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), + get_from_seed::(seed), get_from_seed::(seed), ) } @@ -938,6 +1002,7 @@ pub fn polkadot_testnet_genesis( GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, )>, _root_key: AccountId, @@ -973,6 +1038,7 @@ pub fn polkadot_testnet_genesis( x.4.clone(), x.5.clone(), x.6.clone(), + x.7.clone(), ), ) }) @@ -1030,6 +1096,7 @@ pub fn kusama_testnet_genesis( GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, )>, _root_key: AccountId, @@ -1065,6 +1132,7 @@ pub fn kusama_testnet_genesis( x.4.clone(), x.5.clone(), x.6.clone(), + x.7.clone(), ), ) }) @@ -1122,6 +1190,7 @@ pub fn westend_testnet_genesis( GrandpaId, ImOnlineId, ValidatorId, + AssignmentId, AuthorityDiscoveryId, )>, root_key: AccountId, @@ -1157,6 +1226,7 @@ pub fn westend_testnet_genesis( x.4.clone(), x.5.clone(), x.6.clone(), + x.7.clone(), ), ) }) @@ -1193,7 +1263,16 @@ pub fn westend_testnet_genesis( /// Helper function to create rococo GenesisConfig for testing pub fn rococo_testnet_genesis( wasm_binary: &[u8], - initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ImOnlineId, ValidatorId, AuthorityDiscoveryId)>, + initial_authorities: Vec<( + AccountId, + AccountId, + BabeId, + GrandpaId, + ImOnlineId, + ValidatorId, + AssignmentId, + AuthorityDiscoveryId, + )>, root_key: AccountId, endowed_accounts: Option>, ) -> rococo_runtime::GenesisConfig { @@ -1216,7 +1295,14 @@ pub fn rococo_testnet_genesis( keys: initial_authorities.iter().map(|x| ( x.0.clone(), x.0.clone(), - rococo_session_keys(x.2.clone(), x.3.clone(), x.4.clone(), x.5.clone(), x.6.clone()), + rococo_session_keys( + x.2.clone(), + x.3.clone(), + x.4.clone(), + x.5.clone(), + x.6.clone(), + x.7.clone(), + ), )).collect::>(), }), pallet_babe: Some(Default::default()), diff --git a/node/test/service/src/chain_spec.rs b/node/test/service/src/chain_spec.rs index 546467ad8c..173ee70dfb 100644 --- a/node/test/service/src/chain_spec.rs +++ b/node/test/service/src/chain_spec.rs @@ -20,7 +20,7 @@ use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use babe_primitives::AuthorityId as BabeId; use grandpa::AuthorityId as GrandpaId; use pallet_staking::Forcing; -use polkadot_primitives::v1::{ValidatorId, AccountId}; +use polkadot_primitives::v1::{ValidatorId, AccountId, AssignmentId}; use polkadot_service::chain_spec::{get_account_id_from_seed, get_from_seed, Extensions}; use polkadot_test_runtime::constants::currency::DOTS; use sc_chain_spec::{ChainSpec, ChainType}; @@ -63,13 +63,14 @@ pub fn polkadot_local_testnet_genesis() -> polkadot_test_runtime::GenesisConfig /// Helper function to generate stash, controller and session key from seed fn get_authority_keys_from_seed( seed: &str, -) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AuthorityDiscoveryId) { +) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AssignmentId, AuthorityDiscoveryId) { ( get_account_id_from_seed::(&format!("{}//stash", seed)), get_account_id_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), get_from_seed::(seed), + get_from_seed::(seed), get_from_seed::(seed), ) } @@ -93,7 +94,15 @@ fn testnet_accounts() -> Vec { /// Helper function to create polkadot GenesisConfig for testing fn polkadot_testnet_genesis( - initial_authorities: Vec<(AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AuthorityDiscoveryId)>, + initial_authorities: Vec<( + AccountId, + AccountId, + BabeId, + GrandpaId, + ValidatorId, + AssignmentId, + AuthorityDiscoveryId, + )>, root_key: AccountId, endowed_accounts: Option>, ) -> polkadot_test_runtime::GenesisConfig { @@ -126,8 +135,9 @@ fn polkadot_testnet_genesis( runtime::SessionKeys { babe: x.2.clone(), grandpa: x.3.clone(), - parachain_validator: x.4.clone(), - authority_discovery: x.5.clone(), + para_validator: x.4.clone(), + para_assignment: x.5.clone(), + authority_discovery: x.6.clone(), }, ) }) diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 18a84a9b61..640b2cd1de 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -58,19 +58,6 @@ pub use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; /// Unique identifier for the Inclusion Inherent pub const INCLUSION_INHERENT_IDENTIFIER: InherentIdentifier = *b"inclusn0"; - -/// The key type ID for a parachain approval voting key. -pub const APPROVAL_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"aprv"); - -mod approval_app { - use application_crypto::{app_crypto, sr25519}; - app_crypto!(sr25519, super::APPROVAL_KEY_TYPE_ID); -} - -/// The public key of a keypair used by a validator for approval voting -/// on included parachain candidates. -pub type ApprovalId = approval_app::Public; - /// The key type ID for parachain assignment key. pub const ASSIGNMENT_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"asgn"); @@ -85,7 +72,6 @@ mod assigment_app { /// to approve included parachain candidates. pub type AssignmentId = assigment_app::Public; - /// Get a collator signature payload on a relay-parent, block-data combo. pub fn collator_signature_payload>( relay_parent: &H, @@ -698,8 +684,8 @@ pub struct SessionInfo { pub validators: Vec, /// Validators' authority discovery keys for the session in canonical ordering. pub discovery_keys: Vec, - /// The assignment and approval keys for validators. - pub approval_keys: Vec<(ApprovalId, AssignmentId)>, + /// The assignment keys for validators. + pub assignment_keys: Vec, /// Validators in shuffled ordering - these are the validator groups as produced /// by the `Scheduler` module for the session and are typically referred to by /// `GroupIndex`. diff --git a/roadmap/implementers-guide/src/node/approval/approval-voting.md b/roadmap/implementers-guide/src/node/approval/approval-voting.md index d1addd207f..7f96f96721 100644 --- a/roadmap/implementers-guide/src/node/approval/approval-voting.md +++ b/roadmap/implementers-guide/src/node/approval/approval-voting.md @@ -281,5 +281,5 @@ enum RequiredTranches { * Fetch the block entry and candidate entry. Ignore if `None` - we've probably just lost a race with finality. * Construct a `SignedApprovalVote` with the validator index for the session. * `import_checked_approval(block_entry, candidate_entry, validator_index)` - * Construct a `IndirectSignedApprovalVote` using the informatio about the vote. + * Construct a `IndirectSignedApprovalVote` using the information about the vote. * Dispatch `ApprovalDistributionMessage::DistributeApproval`. diff --git a/roadmap/implementers-guide/src/protocol-approval.md b/roadmap/implementers-guide/src/protocol-approval.md index 828724916a..0ff1f2047f 100644 --- a/roadmap/implementers-guide/src/protocol-approval.md +++ b/roadmap/implementers-guide/src/protocol-approval.md @@ -38,7 +38,7 @@ We need two separate keys for the approval subsystem: - **Approval assignment keys** are sr25519/schnorrkel keys used only for the assignment criteria VRFs. We implicitly sign assignment notices with approval assignment keys by including their relay chain context and additional data in the VRF's extra message, but exclude these from its VRF input. -- **Approval vote keys** would only sign off on candidate parablock validity and has no natural key type restrictions. We could reuse the ed25519 grandpa keys for this purpose since these signatures control access to grandpa, although distant future node configurations might favor separate roles. +- **Approval vote keys** would only sign off on candidate parablock validity and has no natural key type restrictions. There's no need for this to actualy embody a new session key type. We just want to make a distinction between assignments and approvals, although distant future node configurations might favor separate roles. We re-use the same keys as are used for parachain backing in practice. Approval vote keys could relatively easily be handled by some hardened signer tooling, perhaps even HSMs assuming we select ed25519 for approval vote keys. Approval assignment keys might or might not support hardened signer tooling, but doing so sounds far more complex. In fact, assignment keys determine only VRF outputs that determine approval checker assignments, for which they can only act or not act, so they cannot equivocate, lie, etc. and represent little if any slashing risk for validator operators. diff --git a/roadmap/implementers-guide/src/runtime/session_info.md b/roadmap/implementers-guide/src/runtime/session_info.md index ac2ad926dd..d446a314cf 100644 --- a/roadmap/implementers-guide/src/runtime/session_info.md +++ b/roadmap/implementers-guide/src/runtime/session_info.md @@ -8,12 +8,13 @@ Helper structs: ```rust struct SessionInfo { - // validators in canonical ordering. + // validators in canonical ordering. These are the public keys used for backing, + // dispute participation, and approvals. validators: Vec, // validators' authority discovery keys for the session in canonical ordering. discovery_keys: Vec, - // The assignment and approval keys for validators. - approval_keys: Vec<(AssignmentId, ApprovalId)>, + // The assignment keys for validators. + assignment_keys: Vec, // validators in shuffled ordering - these are the validator groups as produced // by the `Scheduler` module for the session and are typically referred to by // `GroupIndex`. diff --git a/roadmap/implementers-guide/src/types/approval.md b/roadmap/implementers-guide/src/types/approval.md index 5603d03aa6..c510137a99 100644 --- a/roadmap/implementers-guide/src/types/approval.md +++ b/roadmap/implementers-guide/src/types/approval.md @@ -1,9 +1,5 @@ # Approval Types -## ApprovalId - -The public key of a keypair used by a validator for approval voting on included parachain candidates. - ## AssignmentId The public key of a keypair used by a validator for determining assignments to approve included parachain candidates. @@ -57,11 +53,13 @@ struct ApprovalVote(Hash); ## SignedApprovalVote +An approval vote signed with a validator's key. This should be verifiable under the `ValidatorId` corresponding to the `ValidatorIndex` of the session, which should be implicit from context. + ```rust struct SignedApprovalVote { vote: ApprovalVote, validator: ValidatorIndex, - signature: ApprovalSignature, + signature: ValidatorSignature, } ``` @@ -78,7 +76,7 @@ struct IndirectSignedApprovalVote { // The index of the candidate in the list of candidates fully included as-of the block. candidate_index: u32, validator: ValidatorIndex, - signature: ApprovalSignature, + signature: ValidatorSignature, } ``` diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 06475ee54e..bc1d3df20c 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -27,7 +27,7 @@ pub mod impls; pub mod paras_sudo_wrapper; pub mod paras_registrar; -use primitives::v1::{BlockNumber, ValidatorId}; +use primitives::v1::{BlockNumber, ValidatorId, AssignmentId}; use sp_runtime::{Perquintill, Perbill, FixedPointNumber}; use frame_system::limits; use frame_support::{ @@ -158,6 +158,35 @@ impl fn on_disabled(_: usize) { } } +/// A placeholder since there is currently no provided session key handler for parachain validator +/// keys. +pub struct AssignmentSessionKeyPlaceholder(sp_std::marker::PhantomData); +impl sp_runtime::BoundToRuntimeAppPublic for AssignmentSessionKeyPlaceholder { + type Public = AssignmentId; +} + +impl + pallet_session::OneSessionHandler for AssignmentSessionKeyPlaceholder +{ + type Key = AssignmentId; + + fn on_genesis_session<'a, I: 'a>(_validators: I) where + I: Iterator, + T::AccountId: 'a + { + + } + + fn on_new_session<'a, I: 'a>(_changed: bool, _v: I, _q: I) where + I: Iterator, + T::AccountId: 'a + { + + } + + fn on_disabled(_: usize) { } +} + #[cfg(test)] mod multiplier_tests { use super::*; diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index b6d4b8512c..31d92bd019 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -29,13 +29,13 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, SessionInfo, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, AssignmentId, }; use runtime_common::{ claims, SlowAdjustingFeeUpdate, CurrencyToVote, impls::DealWithFees, BlockHashCount, RocksDbWeight, BlockWeights, BlockLength, OffchainSolutionWeightLimit, - ParachainSessionKeyPlaceholder, + ParachainSessionKeyPlaceholder, AssignmentSessionKeyPlaceholder, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, ModuleId, @@ -90,7 +90,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("kusama"), impl_name: create_runtime_str!("parity-kusama"), authoring_version: 2, - spec_version: 2027, + spec_version: 2028, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, @@ -262,16 +262,46 @@ parameter_types! { pub const Offset: BlockNumber = 0; } +impl_opaque_keys! { + pub struct OldSessionKeys { + pub grandpa: Grandpa, + pub babe: Babe, + pub im_online: ImOnline, + pub para_validator: ParachainSessionKeyPlaceholder, + pub authority_discovery: AuthorityDiscovery, + } +} + impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, pub im_online: ImOnline, - pub parachain_validator: ParachainSessionKeyPlaceholder, + pub para_validator: ParachainSessionKeyPlaceholder, + pub para_assignment: AssignmentSessionKeyPlaceholder, pub authority_discovery: AuthorityDiscovery, } } +fn transform_session_keys(v: AccountId, old: OldSessionKeys) -> SessionKeys { + SessionKeys { + grandpa: old.grandpa, + babe: old.babe, + im_online: old.im_online, + para_validator: old.para_validator, + para_assignment: { + // We need to produce a dummy value that's unique for the validator. + let mut id = AssignmentId::default(); + let id_raw: &mut [u8] = id.as_mut(); + id_raw.copy_from_slice(v.as_ref()); + id_raw[0..4].copy_from_slice(b"asgn"); + + id + }, + authority_discovery: old.authority_discovery, + } +} + parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } @@ -1105,6 +1135,15 @@ impl frame_support::traits::OnRuntimeUpgrade for FixCouncilHistoricalVotes { } } +// When this is removed, should also remove `OldSessionKeys`. +pub struct UpgradeSessionKeys; +impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + Session::upgrade_keys::(transform_session_keys); + Perbill::from_percent(50) * BlockWeights::get().max_block + } +} + pub struct CustomOnRuntimeUpgrade; impl frame_support::traits::OnRuntimeUpgrade for CustomOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { @@ -1208,7 +1247,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllModules, - FixCouncilHistoricalVotes, + UpgradeSessionKeys, >; /// The payload being signed in the transactions. pub type SignedPayload = generic::SignedPayload; diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index d00b176f3e..64bf4d76b5 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -87,9 +87,7 @@ impl Module { let validators = notification.validators.clone(); let discovery_keys = ::authorities(); - let _assignment_keys = AssignmentKeysUnsafe::get(); - // FIXME: remove this once https://github.com/paritytech/polkadot/pull/2092 is merged - let approval_keys = Default::default(); + let assignment_keys = AssignmentKeysUnsafe::get(); let validator_groups = >::validator_groups(); let n_cores = n_parachains + config.parathread_cores; let zeroth_delay_tranche_width = config.zeroth_delay_tranche_width; @@ -118,7 +116,7 @@ impl Module { let new_session_info = SessionInfo { validators, discovery_keys, - approval_keys, + assignment_keys, validator_groups, n_cores, zeroth_delay_tranche_width, diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 01073651f7..5721ef40cc 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -25,7 +25,7 @@ use runtime_common::{ claims, SlowAdjustingFeeUpdate, CurrencyToVote, impls::DealWithFees, BlockHashCount, RocksDbWeight, BlockWeights, BlockLength, OffchainSolutionWeightLimit, - ParachainSessionKeyPlaceholder, + ParachainSessionKeyPlaceholder, AssignmentSessionKeyPlaceholder, }; use sp_std::prelude::*; @@ -36,7 +36,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, SessionInfo, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, AssignmentId, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, ModuleId, ApplyExtrinsicResult, @@ -92,7 +92,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polkadot"), impl_name: create_runtime_str!("parity-polkadot"), authoring_version: 0, - spec_version: 27, + spec_version: 28, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, @@ -270,16 +270,46 @@ impl pallet_authorship::Config for Runtime { type EventHandler = (Staking, ImOnline); } +impl_opaque_keys! { + pub struct OldSessionKeys { + pub grandpa: Grandpa, + pub babe: Babe, + pub im_online: ImOnline, + pub para_validator: ParachainSessionKeyPlaceholder, + pub authority_discovery: AuthorityDiscovery, + } +} + impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, pub im_online: ImOnline, - pub parachain_validator: ParachainSessionKeyPlaceholder, + pub para_validator: ParachainSessionKeyPlaceholder, + pub para_assignment: AssignmentSessionKeyPlaceholder, pub authority_discovery: AuthorityDiscovery, } } +fn transform_session_keys(v: AccountId, old: OldSessionKeys) -> SessionKeys { + SessionKeys { + grandpa: old.grandpa, + babe: old.babe, + im_online: old.im_online, + para_validator: old.para_validator, + para_assignment: { + // We need to produce a dummy value that's unique for the validator. + let mut id = AssignmentId::default(); + let id_raw: &mut [u8] = id.as_mut(); + id_raw.copy_from_slice(v.as_ref()); + id_raw[0..4].copy_from_slice(b"asgn"); + + id + }, + authority_discovery: old.authority_discovery, + } +} + parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } @@ -888,6 +918,15 @@ impl pallet_proxy::Config for Runtime { type AnnouncementDepositFactor = AnnouncementDepositFactor; } +// When this is removed, should also remove `OldSessionKeys`. +pub struct UpgradeSessionKeys; +impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + Session::upgrade_keys::(transform_session_keys); + Perbill::from_percent(50) * BlockWeights::get().max_block + } +} + pub struct CustomOnRuntimeUpgrade; impl frame_support::traits::OnRuntimeUpgrade for CustomOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { @@ -982,7 +1021,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllModules, - CustomOnRuntimeUpgrade + UpgradeSessionKeys, >; /// The payload being signed in transactions. pub type SignedPayload = generic::SignedPayload; diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 1a8d9cfdf8..4eeaf3b1be 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -28,7 +28,8 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, Hash, Nonce, Signature, Moment, GroupRotationInfo, CoreState, Id, ValidationData, ValidationCode, CandidateEvent, ValidatorId, ValidatorIndex, CommittedCandidateReceipt, OccupiedCoreAssumption, - PersistedValidationData, InboundDownwardMessage, InboundHrmpMessage, SessionInfo, + PersistedValidationData, InboundDownwardMessage, InboundHrmpMessage, + SessionInfo as SessionInfoData, }; use runtime_common::{ SlowAdjustingFeeUpdate, @@ -147,7 +148,8 @@ impl_opaque_keys! { pub grandpa: Grandpa, pub babe: Babe, pub im_online: ImOnline, - pub parachain_validator: Initializer, + pub para_validator: Initializer, + pub para_assignment: SessionInfo, pub authority_discovery: AuthorityDiscovery, } } @@ -189,6 +191,7 @@ construct_runtime! { Dmp: parachains_dmp::{Module, Call, Storage}, Ump: parachains_ump::{Module, Call, Storage}, Hrmp: parachains_hrmp::{Module, Call, Storage}, + SessionInfo: parachains_session_info::{Module, Call, Storage}, Registrar: paras_registrar::{Module, Call, Storage}, ParasSudoWrapper: paras_sudo_wrapper::{Module, Call}, @@ -687,7 +690,7 @@ sp_api::impl_runtime_apis! { }) } - fn session_info(index: SessionIndex) -> Option { + fn session_info(index: SessionIndex) -> Option { runtime_api_impl::session_info::(index) } diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 8b4c55391d..82eb754a3f 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -41,7 +41,7 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash as HashT, Id as ParaId, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, SessionInfo, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo as SessionInfoData, }; use runtime_common::{ claims, SlowAdjustingFeeUpdate, paras_sudo_wrapper, @@ -252,7 +252,8 @@ impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, - pub parachain_validator: Initializer, + pub para_validator: Initializer, + pub para_assignment: SessionInfo, pub authority_discovery: AuthorityDiscovery, } } @@ -514,6 +515,7 @@ construct_runtime! { Paras: parachains_paras::{Module, Call, Storage, Origin}, Scheduler: parachains_scheduler::{Module, Call, Storage}, ParasSudoWrapper: paras_sudo_wrapper::{Module, Call}, + SessionInfo: parachains_session_info::{Module, Call, Storage}, Sudo: pallet_sudo::{Module, Call, Storage, Config, Event}, } @@ -676,7 +678,7 @@ sp_api::impl_runtime_apis! { runtime_impl::candidate_events::(|trait_event| trait_event.try_into().ok()) } - fn session_info(index: SessionIndex) -> Option { + fn session_info(index: SessionIndex) -> Option { runtime_impl::session_info::(index) } diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 236aaf434f..c99b1a1500 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -28,13 +28,13 @@ use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, CoreState, GroupRotationInfo, Hash, Id, Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, Signature, ValidationCode, ValidationData, ValidatorId, ValidatorIndex, - InboundDownwardMessage, InboundHrmpMessage, SessionInfo, + InboundDownwardMessage, InboundHrmpMessage, SessionInfo, AssignmentId, }; use runtime_common::{ SlowAdjustingFeeUpdate, CurrencyToVote, impls::ToAuthor, BlockHashCount, BlockWeights, BlockLength, RocksDbWeight, OffchainSolutionWeightLimit, - ParachainSessionKeyPlaceholder, + ParachainSessionKeyPlaceholder, AssignmentSessionKeyPlaceholder, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, @@ -87,7 +87,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westend"), impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, - spec_version: 47, + spec_version: 48, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, @@ -253,16 +253,46 @@ parameter_types! { pub const Offset: BlockNumber = 0; } +impl_opaque_keys! { + pub struct OldSessionKeys { + pub grandpa: Grandpa, + pub babe: Babe, + pub im_online: ImOnline, + pub para_validator: ParachainSessionKeyPlaceholder, + pub authority_discovery: AuthorityDiscovery, + } +} + impl_opaque_keys! { pub struct SessionKeys { pub grandpa: Grandpa, pub babe: Babe, pub im_online: ImOnline, - pub parachain_validator: ParachainSessionKeyPlaceholder, + pub para_validator: ParachainSessionKeyPlaceholder, + pub para_assignment: AssignmentSessionKeyPlaceholder, pub authority_discovery: AuthorityDiscovery, } } +fn transform_session_keys(v: AccountId, old: OldSessionKeys) -> SessionKeys { + SessionKeys { + grandpa: old.grandpa, + babe: old.babe, + im_online: old.im_online, + para_validator: old.para_validator, + para_assignment: { + // We need to produce a dummy value that's unique for the validator. + let mut id = AssignmentId::default(); + let id_raw: &mut [u8] = id.as_mut(); + id_raw.copy_from_slice(v.as_ref()); + id_raw[0..4].copy_from_slice(b"asgn"); + + id + }, + authority_discovery: old.authority_discovery, + } +} + parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } @@ -722,11 +752,20 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllModules, - CustomOnRuntimeUpgrade, + UpgradeSessionKeys, >; /// The payload being signed in transactions. pub type SignedPayload = generic::SignedPayload; +// When this is removed, should also remove `OldSessionKeys`. +pub struct UpgradeSessionKeys; +impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + Session::upgrade_keys::(transform_session_keys); + Perbill::from_percent(50) * BlockWeights::get().max_block + } +} + pub struct CustomOnRuntimeUpgrade; impl frame_support::traits::OnRuntimeUpgrade for CustomOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { diff --git a/scripts/prepare-test-net.sh b/scripts/prepare-test-net.sh index 6499a1199b..2cf45f496e 100755 --- a/scripts/prepare-test-net.sh +++ b/scripts/prepare-test-net.sh @@ -7,11 +7,11 @@ if [ "$#" -ne 1 ]; then fi generate_account_id() { - subkey ${3:-} inspect "$SECRET//$1//$2" | grep "Account ID" | awk '{ print $3 }' + subkey inspect ${3:-} ${4:-} "$SECRET//$1//$2" | grep "Account ID" | awk '{ print $3 }' } generate_address() { - subkey ${3:-} inspect "$SECRET//$1//$2" | grep "SS58 Address" | awk '{ print $3 }' + subkey inspect ${3:-} ${4:-} "$SECRET//$1//$2" | grep "SS58 Address" | awk '{ print $3 }' } generate_address_and_account_id() { @@ -34,11 +34,12 @@ for i in $(seq 1 $V_NUM); do AUTHORITIES+="(\n" AUTHORITIES+="$(generate_address_and_account_id $i stash)\n" AUTHORITIES+="$(generate_address_and_account_id $i controller)\n" - AUTHORITIES+="$(generate_address_and_account_id $i babe '--sr25519' true)\n" - AUTHORITIES+="$(generate_address_and_account_id $i grandpa '--ed25519' true)\n" - AUTHORITIES+="$(generate_address_and_account_id $i im_online '--sr25519' true)\n" - AUTHORITIES+="$(generate_address_and_account_id $i parachains '--sr25519' true)\n" - AUTHORITIES+="$(generate_address_and_account_id $i authority_discovery '--sr25519' true)\n" + AUTHORITIES+="$(generate_address_and_account_id $i babe '--scheme sr25519' true)\n" + AUTHORITIES+="$(generate_address_and_account_id $i grandpa '--scheme ed25519' true)\n" + AUTHORITIES+="$(generate_address_and_account_id $i im_online '--scheme sr25519' true)\n" + AUTHORITIES+="$(generate_address_and_account_id $i para_validator '--scheme sr25519' true)\n" + AUTHORITIES+="$(generate_address_and_account_id $i para_assignment '--scheme sr25519' true)\n" + AUTHORITIES+="$(generate_address_and_account_id $i authority_discovery '--scheme sr25519' true)\n" AUTHORITIES+="),\n" done -- GitLab From b892796b31d263d52430de4c9d9560f62c98bc1f Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Fri, 11 Dec 2020 17:38:55 +0100 Subject: [PATCH 112/203] initial jaeger integration (#2047) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Pierre Krieger Co-authored-by: Peter Goodspeed-Niklaus Co-authored-by: Bastian Köcher --- Cargo.lock | 129 +++++++-- cli/src/cli.rs | 8 +- cli/src/command.rs | 14 +- node/core/backing/src/lib.rs | 23 +- node/core/bitfield-signing/src/lib.rs | 19 ++ node/core/candidate-selection/src/lib.rs | 19 +- node/core/proposer/src/lib.rs | 11 +- node/core/provisioner/src/lib.rs | 12 +- .../availability-distribution/src/lib.rs | 3 + node/network/bitfield-distribution/src/lib.rs | 18 +- .../collator-protocol/src/collator_side.rs | 5 + .../collator-protocol/src/validator_side.rs | 5 + .../network/statement-distribution/src/lib.rs | 3 + node/service/src/lib.rs | 49 +++- node/subsystem/Cargo.toml | 7 +- node/subsystem/src/errors.rs | 18 ++ node/subsystem/src/jaeger.rs | 251 ++++++++++++++++++ node/subsystem/src/lib.rs | 15 +- node/test/service/src/lib.rs | 1 + .../adder/collator/src/main.rs | 1 + 20 files changed, 554 insertions(+), 57 deletions(-) create mode 100644 node/subsystem/src/jaeger.rs diff --git a/Cargo.lock b/Cargo.lock index 9bbe334f7e..a892de4394 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -265,17 +265,35 @@ dependencies = [ "event-listener", ] +[[package]] +name = "async-process" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8cea09c1fb10a317d1b5af8024eeba256d6554763e85ecd90ff8df31c7bbda" +dependencies = [ + "async-io", + "blocking", + "cfg-if 0.1.10", + "event-listener", + "futures-lite", + "once_cell", + "signal-hook", + "winapi 0.3.9", +] + [[package]] name = "async-std" -version = "1.6.5" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9fa76751505e8df1c7a77762f60486f60c71bbd9b8557f4da6ad47d083732ed" +checksum = "8f9f84f1280a2b436a2c77c2582602732b6c2f4321d5494d6e799e6c367859a8" dependencies = [ + "async-channel", "async-global-executor", "async-io", "async-mutex", + "async-process", "blocking", - "crossbeam-utils", + "crossbeam-utils 0.8.1", "futures-channel", "futures-core", "futures-io", @@ -286,7 +304,7 @@ dependencies = [ "memchr", "num_cpus", "once_cell", - "pin-project-lite 0.1.7", + "pin-project-lite 0.2.0", "pin-utils", "slab", "wasm-bindgen-futures", @@ -936,7 +954,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ "crossbeam-epoch", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "maybe-uninit", ] @@ -948,7 +966,7 @@ checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ "autocfg 1.0.0", "cfg-if 0.1.10", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "lazy_static", "maybe-uninit", "memoffset", @@ -962,7 +980,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" dependencies = [ "cfg-if 0.1.10", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "maybe-uninit", ] @@ -977,6 +995,17 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +dependencies = [ + "autocfg 1.0.0", + "cfg-if 1.0.0", + "lazy_static", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -1465,6 +1494,16 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding 2.1.0", +] + [[package]] name = "frame-benchmarking" version = "2.0.0" @@ -2369,6 +2408,12 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" +[[package]] +name = "integer-encoding" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4ebd0bd29be0f11973e9b3e219005661042a019fd757798c36a47c87852625" + [[package]] name = "integer-sqrt" version = "0.1.3" @@ -3178,7 +3223,7 @@ dependencies = [ "rustls 0.19.0", "rw-stream-sink", "soketto", - "url 2.1.1", + "url 2.2.0", "webpki", "webpki-roots", ] @@ -3424,6 +3469,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "mick-jaeger" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c751e6643309568aa78a725b75755c11d866d6d0d0f7209033142007971cdd" +dependencies = [ + "futures 0.3.8", + "rand 0.7.3", + "thrift", +] + [[package]] name = "minicbor" version = "0.7.0" @@ -3794,6 +3850,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +[[package]] +name = "ordered-float" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3741934be594d77de1c8461ebcbbe866f585ea616a9753aa78f2bdc69f0e4579" +dependencies = [ + "num-traits 0.2.12", +] + [[package]] name = "output_vt100" version = "0.1.2" @@ -4385,7 +4450,7 @@ dependencies = [ "serde", "static_assertions", "unsigned-varint", - "url 2.1.1", + "url 2.2.0", ] [[package]] @@ -4496,7 +4561,7 @@ dependencies = [ "rand 0.7.3", "sha-1", "slab", - "url 2.1.1", + "url 2.2.0", ] [[package]] @@ -5133,10 +5198,14 @@ name = "polkadot-node-subsystem" version = "0.1.0" dependencies = [ "assert_matches", + "async-std", "async-trait", "derive_more", "futures 0.3.8", "futures-timer 3.0.2", + "lazy_static", + "log", + "mick-jaeger", "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.2", @@ -6269,7 +6338,7 @@ checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" dependencies = [ "crossbeam-deque", "crossbeam-queue", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "lazy_static", "num_cpus", ] @@ -6487,7 +6556,7 @@ dependencies = [ "base64 0.11.0", "blake2b_simd", "constant_time_eq", - "crossbeam-utils", + "crossbeam-utils 0.7.2", ] [[package]] @@ -7829,6 +7898,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" +[[package]] +name = "signal-hook" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "604508c1418b99dfe1925ca9224829bb2a8a9a04dda655cc01fcad46f4ab05ed" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.2.0" @@ -9056,6 +9135,19 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "thrift" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6d965454947cc7266d22716ebfd07b18d84ebaf35eec558586bbb2a8cb6b5b" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + [[package]] name = "time" version = "0.1.43" @@ -9184,7 +9276,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ - "crossbeam-utils", + "crossbeam-utils 0.7.2", "futures 0.1.29", ] @@ -9240,7 +9332,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ - "crossbeam-utils", + "crossbeam-utils 0.7.2", "futures 0.1.29", "lazy_static", "log", @@ -9306,7 +9398,7 @@ checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" dependencies = [ "crossbeam-deque", "crossbeam-queue", - "crossbeam-utils", + "crossbeam-utils 0.7.2", "futures 0.1.29", "lazy_static", "log", @@ -9321,7 +9413,7 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ - "crossbeam-utils", + "crossbeam-utils 0.7.2", "futures 0.1.29", "slab", "tokio-executor", @@ -9643,10 +9735,11 @@ dependencies = [ [[package]] name = "url" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" dependencies = [ + "form_urlencoded", "idna 0.2.0", "matches", "percent-encoding 2.1.0", diff --git a/cli/src/cli.rs b/cli/src/cli.rs index bf9c7a242b..8c4bfb1e74 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -91,6 +91,13 @@ pub struct RunCmd { /// elapsed (i.e. until a block at height `pause_block + delay` is imported). #[structopt(long = "grandpa-pause", number_of_values(2))] pub grandpa_pause: Vec, + + /// Add the destination address to the jaeger agent. + /// + /// Must be valid socket address, of format `IP:Port` + /// commonly `127.0.0.1:6831`. + #[structopt(long)] + pub jaeger_agent: Option, } #[allow(missing_docs)] @@ -98,7 +105,6 @@ pub struct RunCmd { pub struct Cli { #[structopt(subcommand)] pub subcommand: Option, - #[structopt(flatten)] pub run: RunCmd, } diff --git a/cli/src/command.rs b/cli/src/command.rs index d09de02a12..a81755634a 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -162,17 +162,19 @@ pub fn run() -> Result<()> { info!("----------------------------"); } + let jaeger_agent = cli.run.jaeger_agent; Ok(runner.run_node_until_exit(move |config| async move { let role = config.role.clone(); let task_manager = match role { Role::Light => service::build_light(config).map(|(task_manager, _)| task_manager) - .map_err(|e| sc_service::Error::Other(e.to_string()) ), + .map_err(|e| sc_service::Error::Other(e.to_string())), _ => service::build_full( config, service::IsCollator::No, grandpa_pause, + jaeger_agent, ).map(|full| full.task_manager) .map_err(|e| sc_service::Error::Other(e.to_string()) ) }; @@ -191,7 +193,7 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config) + let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config, None) .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, import_queue), task_manager)) }) @@ -203,7 +205,7 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, _, task_manager) = service::new_chain_ops(&mut config) + let (client, _, _, task_manager) = service::new_chain_ops(&mut config, None) .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, config.database), task_manager)) }) @@ -215,7 +217,7 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, _, task_manager) = service::new_chain_ops(&mut config) + let (client, _, _, task_manager) = service::new_chain_ops(&mut config, None) .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, config.chain_spec), task_manager)) }) @@ -227,7 +229,7 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config) + let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config, None) .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, import_queue), task_manager)) }) @@ -244,7 +246,7 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, backend, _, task_manager) = service::new_chain_ops(&mut config) + let (client, backend, _, task_manager) = service::new_chain_ops(&mut config, None) .map_err(|e| sc_service::Error::Other(e.to_string()))?; Ok((cmd.run(client, backend), task_manager)) }) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 54dbe295f7..492e57dc4d 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -37,6 +37,7 @@ use polkadot_node_primitives::{ FromTableMisbehavior, Statement, SignedFullStatement, MisbehaviorReport, ValidationResult, }; use polkadot_subsystem::{ + jaeger, messages::{ AllMessages, AvailabilityStoreMessage, CandidateBackingMessage, CandidateSelectionMessage, CandidateValidationMessage, PoVDistributionMessage, ProvisionableData, @@ -457,10 +458,12 @@ impl CandidateBackingJob { async fn run_loop( mut self, mut rx_to: mpsc::Receiver, + span: &jaeger::JaegerSpan ) -> Result<(), Error> { loop { futures::select! { validated_command = self.background_validation.next() => { + let _span = span.child("background validation"); if let Some(c) = validated_command { self.handle_validated_candidate_command(c).await?; } else { @@ -470,6 +473,7 @@ impl CandidateBackingJob { to_job = rx_to.next() => match to_job { None => break, Some(msg) => { + let _span = span.child("process message"); self.process_msg(msg).await?; } } @@ -870,6 +874,9 @@ impl util::JobTrait for CandidateBackingJob { } } + let span = jaeger::hash_span(&parent, "run:backing"); + let _span = span.child("runtime apis"); + let (validators, groups, session_index, cores) = futures::try_join!( try_runtime_api!(request_validators(parent, &mut tx_from).await), try_runtime_api!(request_validator_groups(parent, &mut tx_from).await), @@ -886,6 +893,9 @@ impl util::JobTrait for CandidateBackingJob { let session_index = try_runtime_api!(session_index); let cores = try_runtime_api!(cores); + drop(_span); + let _span = span.child("validator construction"); + let signing_context = SigningContext { parent_hash: parent, session_index }; let validator = match Validator::construct( &validators, @@ -905,6 +915,10 @@ impl util::JobTrait for CandidateBackingJob { } }; + drop(_span); + let _span = span.child("calc validator groups"); + + let mut groups = HashMap::new(); let n_cores = cores.len(); @@ -936,6 +950,9 @@ impl util::JobTrait for CandidateBackingJob { Some((assignment, required_collator)) => (Some(assignment), required_collator), }; + drop(_span); + let _span = span.child("wait for candidate backing job"); + let (background_tx, background_rx) = mpsc::channel(16); let job = CandidateBackingJob { parent, @@ -954,10 +971,10 @@ impl util::JobTrait for CandidateBackingJob { background_validation_tx: background_tx, metrics, }; + drop(_span); - job.run_loop(rx_to).await - } - .boxed() + job.run_loop(rx_to, &span).await + }.boxed() } } diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 92478afb13..e02bd5661f 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -23,6 +23,7 @@ use futures::{channel::{mpsc, oneshot}, lock::Mutex, prelude::*, future, Future}; use sp_keystore::{Error as KeystoreError, SyncCryptoStorePtr}; use polkadot_node_subsystem::{ + jaeger, messages::{ AllMessages, AvailabilityStoreMessage, BitfieldDistributionMessage, BitfieldSigningMessage, RuntimeApiMessage, RuntimeApiRequest, @@ -75,7 +76,9 @@ async fn get_core_availability( validator_idx: ValidatorIndex, sender: &Mutex<&mut mpsc::Sender>, ) -> Result { + let span = jaeger::hash_span(&relay_parent, "core_availability"); if let CoreState::Occupied(core) = core { + let _span = span.child("occupied"); let (tx, rx) = oneshot::channel(); sender .lock() @@ -97,6 +100,10 @@ async fn get_core_availability( return Ok(false); } }; + + drop(_span); + let _span = span.child("query chunk"); + let (tx, rx) = oneshot::channel(); sender .lock() @@ -120,6 +127,7 @@ async fn get_availability_cores( relay_parent: Hash, sender: &mut mpsc::Sender, ) -> Result, Error> { + let _span = jaeger::hash_span(&relay_parent, "get availability cores"); let (tx, rx) = oneshot::channel(); sender .send(AllMessages::from(RuntimeApiMessage::Request(relay_parent, RuntimeApiRequest::AvailabilityCores(tx))).into()) @@ -226,6 +234,8 @@ impl JobTrait for BitfieldSigningJob { ) -> Pin> + Send>> { let metrics = metrics.clone(); async move { + let span = jaeger::hash_span(&relay_parent, "run:bitfield-signing"); + let _span = span.child("delay"); let wait_until = Instant::now() + JOB_DELAY; // now do all the work we can before we need to wait for the availability store @@ -243,6 +253,9 @@ impl JobTrait for BitfieldSigningJob { // JOB_DELAY each time. let _timer = metrics.time_run(); + drop(_span); + let _span = span.child("availablity"); + let bitfield = match construct_availability_bitfield(relay_parent, validator.index(), &mut sender).await { @@ -255,12 +268,18 @@ impl JobTrait for BitfieldSigningJob { Ok(bitfield) => bitfield, }; + drop(_span); + let _span = span.child("signing"); + let signed_bitfield = validator .sign(keystore.clone(), bitfield) .await .map_err(|e| Error::Keystore(e))?; metrics.on_bitfield_signed(); + drop(_span); + let _span = span.child("gossip"); + sender .send( AllMessages::from( diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index 5812a47f15..3958ffe280 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -25,6 +25,7 @@ use futures::{ }; use sp_keystore::SyncCryptoStorePtr; use polkadot_node_subsystem::{ + jaeger, errors::ChainApiError, messages::{ AllMessages, CandidateBackingMessage, CandidateSelectionMessage, CollatorProtocolMessage, @@ -99,7 +100,9 @@ impl JobTrait for CandidateSelectionJob { receiver: mpsc::Receiver, mut sender: mpsc::Sender, ) -> Pin> + Send>> { + let span = jaeger::hash_span(&relay_parent, "candidate-selection:run"); async move { + let _span = span.child("query runtime"); let (groups, cores) = futures::try_join!( try_runtime_api!(request_validator_groups(relay_parent, &mut sender).await), try_runtime_api!(request_from_runtime( @@ -112,6 +115,9 @@ impl JobTrait for CandidateSelectionJob { let (validator_groups, group_rotation_info) = try_runtime_api!(groups); let cores = try_runtime_api!(cores); + drop(_span); + let _span = span.child("find assignment"); + let n_cores = cores.len(); let validator = match Validator::new(relay_parent, keystore.clone(), sender.clone()).await { @@ -141,7 +147,9 @@ impl JobTrait for CandidateSelectionJob { None => return Ok(()), }; - CandidateSelectionJob::new(assignment, metrics, sender, receiver).run_loop().await + drop(_span); + + CandidateSelectionJob::new(assignment, metrics, sender, receiver).run_loop(&span).await }.boxed() } } @@ -162,7 +170,8 @@ impl CandidateSelectionJob { } } - async fn run_loop(&mut self) -> Result<(), Error> { + async fn run_loop(&mut self, span: &jaeger::JaegerSpan) -> Result<(), Error> { + let span = span.child("run loop"); loop { match self.receiver.next().await { Some(CandidateSelectionMessage::Collation( @@ -170,12 +179,14 @@ impl CandidateSelectionJob { para_id, collator_id, )) => { + let _span = span.child("handle collation"); self.handle_collation(relay_parent, para_id, collator_id).await; } Some(CandidateSelectionMessage::Invalid( _, candidate_receipt, )) => { + let _span = span.child("handle invalid"); self.handle_invalid(candidate_receipt).await; } None => break, @@ -459,10 +470,10 @@ mod tests { }; preconditions(&mut job); - + let span = jaeger::JaegerSpan::Disabled; let (_, job_result) = futures::executor::block_on(future::join( test(to_job_tx, from_job_rx), - job.run_loop(), + job.run_loop(&span), )); postconditions(job, job_result); diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index e5b4c61341..63b3859422 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -20,7 +20,10 @@ use futures::prelude::*; use futures::select; -use polkadot_node_subsystem::{messages::{AllMessages, ProvisionerInherentData, ProvisionerMessage}, SubsystemError}; +use polkadot_node_subsystem::{ + jaeger, + messages::{AllMessages, ProvisionerInherentData, ProvisionerMessage}, SubsystemError, +}; use polkadot_overseer::OverseerHandler; use polkadot_primitives::v1::{ Block, Hash, Header, @@ -193,6 +196,9 @@ where record_proof: RecordProof, ) -> Self::Proposal { async move { + let span = jaeger::hash_span(&self.parent_header_hash, "propose"); + let _span = span.child("get provisioner"); + let provisioner_data = match self.get_provisioner_data().await { Ok(pd) => pd, Err(err) => { @@ -201,11 +207,14 @@ where } }; + drop(_span); + inherent_data.put_data( polkadot_primitives::v1::INCLUSION_INHERENT_IDENTIFIER, &provisioner_data, )?; + let _span = span.child("authorship propose"); self.inner .propose(inherent_data, inherent_digests, max_duration, record_proof) .await diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 4e985a2622..fe89a6136c 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -26,6 +26,7 @@ use futures::{ }; use polkadot_node_subsystem::{ errors::{ChainApiError, RuntimeApiError}, + jaeger, messages::{ AllMessages, CandidateBackingMessage, ChainApiMessage, ProvisionableData, ProvisionerInherentData, ProvisionerMessage, @@ -154,10 +155,12 @@ impl JobTrait for ProvisioningJob { sender, receiver, ); + + let span = jaeger::hash_span(&relay_parent, "provisioner"); // it isn't necessary to break run_loop into its own function, // but it's convenient to separate the concerns in this way - job.run_loop().await + job.run_loop(&span).await } .boxed() } @@ -183,15 +186,15 @@ impl ProvisioningJob { } } - async fn run_loop(mut self) -> Result<(), Error> { + async fn run_loop(mut self, span: &jaeger::JaegerSpan) -> Result<(), Error> { use ProvisionerMessage::{ ProvisionableData, RequestBlockAuthorshipData, RequestInherentData, }; - loop { futures::select! { msg = self.receiver.next().fuse() => match msg { Some(RequestInherentData(_, return_sender)) => { + let _span = span.child("req inherent data"); let _timer = self.metrics.time_request_inherent_data(); if self.inherent_after.is_ready() { @@ -201,9 +204,11 @@ impl ProvisioningJob { } } Some(RequestBlockAuthorshipData(_, sender)) => { + let _span = span.child("req block authorship"); self.provisionable_data_channels.push(sender) } Some(ProvisionableData(_, data)) => { + let _span = span.child("provisionable data"); let _timer = self.metrics.time_provisionable_data(); let mut bad_indices = Vec::new(); @@ -241,6 +246,7 @@ impl ProvisioningJob { None => break, }, _ = self.inherent_after.ready().fuse() => { + let _span = span.child("send inherent data"); let return_senders = std::mem::take(&mut self.awaiting_inherent); if !return_senders.is_empty() { self.send_inherent_data(return_senders).await; diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 4ca045a7bc..203e7ef260 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -44,6 +44,7 @@ use polkadot_subsystem::messages::{ NetworkBridgeMessage, RuntimeApiMessage, RuntimeApiRequest, }; use polkadot_subsystem::{ + jaeger, errors::{ChainApiError, RuntimeApiError}, ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemError, @@ -354,6 +355,8 @@ where } }; + let mut _span = jaeger::hash_span(&gossiped_availability.candidate_hash.0, "availability-message-received"); + process_incoming_peer_message(ctx, state, remote, gossiped_availability, metrics) .await?; } diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 2d1313c58e..ccf5e26f43 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -27,6 +27,7 @@ use futures::{channel::oneshot, FutureExt}; use polkadot_subsystem::messages::*; use polkadot_subsystem::{ + jaeger, ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemResult, }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; @@ -180,7 +181,9 @@ impl BitfieldDistribution { for relay_parent in activated { tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "activated"); - // query basic system parameters once + let _span = jaeger::hash_span(&relay_parent, "bitfield-dist:active_leaves:basics"); + + // query validator set and signing context per relay_parent once only match query_basics(&mut ctx, relay_parent).await { Ok(Some((validator_set, signing_context))) => { // If our runtime API fails, we don't take down the node, @@ -232,6 +235,7 @@ where Context: SubsystemContext, { tracing::trace!(target: LOG_TARGET, rep = ?rep, peer_id = %peer, "reputation change"); + ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::ReportPeer(peer, rep), )) @@ -306,6 +310,9 @@ async fn relay_message( where Context: SubsystemContext, { + let span = jaeger::hash_span(&message.relay_parent, "relay_msg"); + + let _span = span.child("provisionable"); // notify the overseer about a new and valid signed bitfield ctx.send_message(AllMessages::Provisioner( ProvisionerMessage::ProvisionableData( @@ -318,6 +325,9 @@ where )) .await; + drop(_span); + + let _span = span.child("interested peers"); // pass on the bitfield distribution to all interested peers let interested_peers = peer_views .iter() @@ -341,6 +351,7 @@ where } }) .collect::>(); + drop(_span); if interested_peers.is_empty() { tracing::trace!( @@ -349,6 +360,7 @@ where "no peers are interested in gossip for relay parent", ); } else { + let _span = span.child("gossip"); ctx.send_message(AllMessages::NetworkBridge( NetworkBridgeMessage::SendValidationMessage( interested_peers, @@ -483,6 +495,8 @@ where NetworkBridgeEvent::PeerMessage(remote, message) => { match message { protocol_v1::BitfieldDistributionMessage::Bitfield(relay_parent, bitfield) => { + let mut _span = jaeger::hash_span(&relay_parent, "bitfield-gossip-received"); + _span.add_string_tag("peer-id", &remote.to_base58()); tracing::trace!(target: LOG_TARGET, peer_id = %remote, "received bitfield gossip from peer"); let gossiped_bitfield = BitfieldGossipMessage { relay_parent, @@ -581,6 +595,8 @@ where return; }; + let _span = jaeger::hash_span(&message.relay_parent, "gossip"); + job_data.message_sent_to_peer .entry(dest.clone()) .or_default() diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 294be06190..60208ec8c6 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -24,6 +24,7 @@ use polkadot_primitives::v1::{ CollatorId, CoreIndex, CoreState, Hash, Id as ParaId, CandidateReceipt, PoV, ValidatorId, }; use polkadot_subsystem::{ + jaeger, FromOverseer, OverseerSignal, SubsystemContext, messages::{ AllMessages, CollatorProtocolMessage, @@ -430,6 +431,8 @@ async fn process_msg( state.collating_on = Some(id); } DistributeCollation(receipt, pov) => { + let _span1 = jaeger::hash_span(&receipt.descriptor.relay_parent, "distributing-collation"); + let _span2 = jaeger::pov_span(&pov, "distributing-collation"); match state.collating_on { Some(id) if receipt.descriptor.para_id != id => { // If the ParaId of a collation requested to be distributed does not match @@ -539,10 +542,12 @@ async fn handle_incoming_peer_message( ); } RequestCollation(request_id, relay_parent, para_id) => { + let _span = jaeger::hash_span(&relay_parent, "rx-collation-request"); match state.collating_on { Some(our_para_id) => { if our_para_id == para_id { if let Some(collation) = state.collations.get(&relay_parent).cloned() { + let _span = _span.child("sending"); send_collation(ctx, state, request_id, origin, collation.0, collation.1).await; } } else { diff --git a/node/network/collator-protocol/src/validator_side.rs b/node/network/collator-protocol/src/validator_side.rs index 3af5aba5e4..a865dc75ee 100644 --- a/node/network/collator-protocol/src/validator_side.rs +++ b/node/network/collator-protocol/src/validator_side.rs @@ -30,6 +30,7 @@ use polkadot_primitives::v1::{ Id as ParaId, CandidateReceipt, CollatorId, Hash, PoV, }; use polkadot_subsystem::{ + jaeger, FromOverseer, OverseerSignal, SubsystemContext, messages::{ AllMessages, CandidateSelectionMessage, CollatorProtocolMessage, NetworkBridgeMessage, @@ -504,6 +505,7 @@ where state.peer_views.entry(origin).or_default(); } AdvertiseCollation(relay_parent, para_id) => { + let _span = jaeger::hash_span(&relay_parent, "advertising-collation"); state.advertisements.entry(origin.clone()).or_default().insert((para_id, relay_parent)); if let Some(collator) = state.known_collators.get(&origin) { @@ -515,6 +517,8 @@ where modify_reputation(ctx, origin, COST_UNEXPECTED_MESSAGE).await; } Collation(request_id, receipt, pov) => { + let _span1 = jaeger::hash_span(&receipt.descriptor.relay_parent, "received-collation"); + let _span2 = jaeger::pov_span(&pov, "received-collation"); received_collation(ctx, state, origin, request_id, receipt, pov).await; } } @@ -659,6 +663,7 @@ where ); } FetchCollation(relay_parent, collator_id, para_id, tx) => { + let _span = jaeger::hash_span(&relay_parent, "fetching-collation"); fetch_collation(ctx, state, relay_parent, collator_id, para_id, tx).await; } ReportCollator(id) => { diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 5e6a58f948..ac2adf094d 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -23,6 +23,7 @@ #![warn(missing_docs)] use polkadot_subsystem::{ + jaeger, Subsystem, SubsystemResult, SubsystemContext, SpawnedSubsystem, ActiveLeavesUpdate, FromOverseer, OverseerSignal, messages::{ @@ -828,6 +829,7 @@ async fn handle_network_update( ).await; if let Some((relay_parent, new)) = new_stored { + let mut _span = jaeger::hash_span(&relay_parent, "sending-statement"); // When we receive a new message from a peer, we forward it to the // candidate backing subsystem. let message = AllMessages::CandidateBacking( @@ -943,6 +945,7 @@ impl StatementDistribution { FromOverseer::Communication { msg } => match msg { StatementDistributionMessage::Share(relay_parent, statement) => { let _timer = metrics.time_share(); + let mut _span = jaeger::hash_span(&relay_parent, "circulate-statement"); inform_statement_listeners( &statement, diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index 0bb1769d9a..c62d4d526f 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -35,12 +35,16 @@ use { polkadot_primitives::v1::ParachainHost, sc_authority_discovery::Service as AuthorityDiscoveryService, sp_blockchain::HeaderBackend, - sp_core::traits::SpawnNamed, sp_keystore::SyncCryptoStorePtr, sp_trie::PrefixedMemoryDB, sc_client_api::ExecutorProvider, }; +use sp_core::traits::SpawnNamed; + + +use polkadot_subsystem::jaeger; + use std::sync::Arc; use prometheus_endpoint::Registry; @@ -97,7 +101,6 @@ native_executor_instance!( frame_benchmarking::benchmarking::HostFunctions, ); - #[derive(thiserror::Error, Debug)] pub enum Error { #[error(transparent)] @@ -121,6 +124,9 @@ pub enum Error { #[error(transparent)] Prometheus(#[from] prometheus_endpoint::PrometheusError), + #[error(transparent)] + Jaeger(#[from] polkadot_subsystem::jaeger::JaegerError), + #[cfg(feature = "full-node")] #[error(transparent)] Availability(#[from] AvailabilityError), @@ -162,6 +168,20 @@ fn set_prometheus_registry(config: &mut Configuration) -> Result<(), Error> { Ok(()) } +/// Initialize the `Jeager` collector. The destination must listen +/// on the given address and port for `UDP` packets. +fn jaeger_launch_collector_with_agent(spawner: impl SpawnNamed, config: &Configuration, agent: Option) -> Result<(), Error> { + if let Some(agent) = agent { + let cfg = jaeger::JaegerConfig::builder() + .agent(agent) + .named(&config.network.node_name) + .build(); + + jaeger::Jaeger::new(cfg).launch(spawner)?; + } + Ok(()) +} + pub type FullBackend = service::TFullBackend; #[cfg(feature = "full-node")] type FullSelectChain = sc_consensus::LongestChain; @@ -177,7 +197,7 @@ type LightClient = service::TLightClientWithBackend; #[cfg(feature = "full-node")] -fn new_partial(config: &mut Configuration) -> Result< +fn new_partial(config: &mut Configuration, jaeger_agent: Option) -> Result< service::PartialComponents< FullClient, FullBackend, FullSelectChain, consensus_common::DefaultImportQueue>, @@ -207,12 +227,15 @@ fn new_partial(config: &mut Configuration) -> Result< { set_prometheus_registry(config)?; + let inherent_data_providers = inherents::InherentDataProviders::new(); let (client, backend, keystore_container, task_manager) = service::new_full_parts::(&config)?; let client = Arc::new(client); + jaeger_launch_collector_with_agent(task_manager.spawn_handle(), &*config, jaeger_agent)?; + let select_chain = sc_consensus::LongestChain::new(backend.clone()); let transaction_pool = sc_transaction_pool::BasicPool::new_full( @@ -507,6 +530,7 @@ pub fn new_full( mut config: Configuration, is_collator: IsCollator, grandpa_pause: Option<(u32, u32)>, + jaeger_agent: Option, isolation_strategy: IsolationStrategy, ) -> Result>>, Error> where @@ -532,7 +556,7 @@ pub fn new_full( transaction_pool, inherent_data_providers, other: (rpc_extensions_builder, import_setup, rpc_setup) - } = new_partial::(&mut config)?; + } = new_partial::(&mut config, jaeger_agent)?; let prometheus_registry = config.prometheus_registry().cloned(); @@ -676,7 +700,7 @@ pub fn new_full( task_manager.spawn_handle(), client.clone(), transaction_pool, - overseer_handler.as_ref().ok_or_else(|| Error::AuthoritiesRequireRealOverseer)?.clone(), + overseer_handler.as_ref().ok_or(Error::AuthoritiesRequireRealOverseer)?.clone(), prometheus_registry.as_ref(), ); @@ -879,7 +903,7 @@ fn new_light(mut config: Configuration) -> Result<(TaskManage /// Builds a new object suitable for chain operations. #[cfg(feature = "full-node")] -pub fn new_chain_ops(mut config: &mut Configuration) -> Result< +pub fn new_chain_ops(mut config: &mut Configuration, jaeger_agent: Option) -> Result< ( Arc, Arc, @@ -892,19 +916,19 @@ pub fn new_chain_ops(mut config: &mut Configuration) -> Result< config.keystore = service::config::KeystoreConfig::InMemory; if config.chain_spec.is_rococo() { let service::PartialComponents { client, backend, import_queue, task_manager, .. } - = new_partial::(config)?; + = new_partial::(config, jaeger_agent)?; Ok((Arc::new(Client::Rococo(client)), backend, import_queue, task_manager)) } else if config.chain_spec.is_kusama() { let service::PartialComponents { client, backend, import_queue, task_manager, .. } - = new_partial::(config)?; + = new_partial::(config, jaeger_agent)?; Ok((Arc::new(Client::Kusama(client)), backend, import_queue, task_manager)) } else if config.chain_spec.is_westend() { let service::PartialComponents { client, backend, import_queue, task_manager, .. } - = new_partial::(config)?; + = new_partial::(config, jaeger_agent)?; Ok((Arc::new(Client::Westend(client)), backend, import_queue, task_manager)) } else { let service::PartialComponents { client, backend, import_queue, task_manager, .. } - = new_partial::(config)?; + = new_partial::(config, jaeger_agent)?; Ok((Arc::new(Client::Polkadot(client)), backend, import_queue, task_manager)) } } @@ -927,12 +951,14 @@ pub fn build_full( config: Configuration, is_collator: IsCollator, grandpa_pause: Option<(u32, u32)>, + jaeger_agent: Option, ) -> Result, Error> { if config.chain_spec.is_rococo() { new_full::( config, is_collator, grandpa_pause, + jaeger_agent, Default::default(), ).map(|full| full.with_client(Client::Rococo)) } else if config.chain_spec.is_kusama() { @@ -940,6 +966,7 @@ pub fn build_full( config, is_collator, grandpa_pause, + jaeger_agent, Default::default(), ).map(|full| full.with_client(Client::Kusama)) } else if config.chain_spec.is_westend() { @@ -947,6 +974,7 @@ pub fn build_full( config, is_collator, grandpa_pause, + jaeger_agent, Default::default(), ).map(|full| full.with_client(Client::Westend)) } else { @@ -954,6 +982,7 @@ pub fn build_full( config, is_collator, grandpa_pause, + jaeger_agent, Default::default(), ).map(|full| full.with_client(Client::Polkadot)) } diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index e70e2171ec..73d688e775 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -6,14 +6,17 @@ edition = "2018" description = "Subsystem traits and message definitions" [dependencies] +async-std = "1.8.0" async-trait = "0.1.42" derive_more = "0.99.11" futures = "0.3.8" futures-timer = "3.0.2" +mick-jaeger = "0.1.1" +lazy_static = "1.4" tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } -parking_lot = { version = "0.11.1", optional = true } +parking_lot = "0.11.1" pin-project = "1.0.2" polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } @@ -24,10 +27,10 @@ smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.22" +log = "0.4.11" [dev-dependencies] assert_matches = "1.4.0" async-trait = "0.1.42" futures = { version = "0.3.8", features = ["thread-pool"] } -parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/subsystem/src/errors.rs b/node/subsystem/src/errors.rs index 5af573c87f..69ddd86108 100644 --- a/node/subsystem/src/errors.rs +++ b/node/subsystem/src/errors.rs @@ -59,3 +59,21 @@ impl core::fmt::Display for ChainApiError { } impl std::error::Error for ChainApiError {} + + +/// A description of an error causing the chain API request to be unservable. +#[derive(Debug, thiserror::Error)] +#[allow(missing_docs)] +pub enum JaegerError { + #[error("Already launched the collector thread")] + AlreadyLaunched, + + #[error("Missing jaeger configuration")] + MissingConfiguration, + + #[error("Failed to allocate port for UDP transfer to jaeger agent")] + PortAllocationError(#[source] std::io::Error), + + #[error("Failed to send jaeger span to agent")] + SendError(#[source] std::io::Error), +} diff --git a/node/subsystem/src/jaeger.rs b/node/subsystem/src/jaeger.rs new file mode 100644 index 0000000000..56ba883354 --- /dev/null +++ b/node/subsystem/src/jaeger.rs @@ -0,0 +1,251 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Jaeger integration. +//! +//! See for an introduction. +//! +//! The easiest way to try Jaeger is: +//! +//! - Start a docker container with the all-in-one docker image (see below). +//! - Open your browser and navigate to to acces the UI. +//! +//! The all-in-one image can be started with: +//! +//! ```not_rust +//! podman login docker.io +//! podman run -d --name jaeger \ +//! -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \ +//! -p 5775:5775/udp \ +//! -p 6831:6831/udp \ +//! -p 6832:6832/udp \ +//! -p 5778:5778 \ +//! -p 16686:16686 \ +//! -p 14268:14268 \ +//! -p 14250:14250 \ +//! -p 9411:9411 \ +//! docker.io/jaegertracing/all-in-one:1.21 +//! ``` +//! + +use polkadot_node_primitives::SpawnNamed; +use polkadot_primitives::v1::{Hash, PoV, CandidateHash}; +use parking_lot::RwLock; +use std::sync::Arc; +use std::result; +pub use crate::errors::JaegerError; + + +lazy_static::lazy_static! { + static ref INSTANCE: RwLock = RwLock::new(Jaeger::None); +} + +/// Configuration for the jaeger tracing. +#[derive(Clone)] +pub struct JaegerConfig { + node_name: String, + agent_addr: std::net::SocketAddr, +} + +impl std::default::Default for JaegerConfig { + fn default() -> Self { + Self { + node_name: "unknown_".to_owned(), + agent_addr: "127.0.0.1:6831".parse().expect(r#"Static "127.0.0.1:6831" is a valid socket address string. qed"#), + } + } +} + +impl JaegerConfig { + /// Use the builder pattern to construct a configuration. + pub fn builder() -> JaegerConfigBuilder { + JaegerConfigBuilder::default() + } +} + + +/// Jaeger configuration builder. +#[derive(Default)] +pub struct JaegerConfigBuilder { + inner: JaegerConfig +} + +impl JaegerConfigBuilder { + /// Set the name for this node. + pub fn named(mut self, name: S) -> Self where S: AsRef { + self.inner.node_name = name.as_ref().to_owned(); + self + } + + /// Set the agent address to send the collected spans to. + pub fn agent(mut self, addr: U) -> Self where U: Into { + self.inner.agent_addr = addr.into(); + self + } + + /// Construct the configuration. + pub fn build(self) -> JaegerConfig { + self.inner + } +} + +/// A wrapper type for a span. +/// +/// Handles running with and without jaeger. +pub enum JaegerSpan { + /// Running with jaeger being enabled. + Enabled(mick_jaeger::Span), + /// Running with jaeger disabled. + Disabled, +} + +impl JaegerSpan { + /// Derive a child span from `self`. + pub fn child(&self, name: impl Into) -> Self { + match self { + Self::Enabled(inner) => Self::Enabled(inner.child(name)), + Self::Disabled => Self::Disabled, + } + } + /// Add an additional tag to the span. + pub fn add_string_tag(&mut self, tag: &str, value: &str) { + match self { + Self::Enabled(ref mut inner) => inner.add_string_tag(tag, value), + Self::Disabled => {}, + } + } +} + +impl From> for JaegerSpan { + fn from(src: Option) -> Self { + if let Some(span) = src { + Self::Enabled(span) + } else { + Self::Disabled + } + } +} + +impl From for JaegerSpan { + fn from(src: mick_jaeger::Span) -> Self { + Self::Enabled(src) + } +} + +/// Shortcut for [`candidate_hash_span`] with the hash of the `Candidate` block. +#[inline(always)] +pub fn candidate_hash_span(candidate_hash: &CandidateHash, span_name: impl Into) -> JaegerSpan { + INSTANCE.read_recursive().span(|| { candidate_hash.0 }, span_name).into() +} + +/// Shortcut for [`hash_span`] with the hash of the `PoV`. +#[inline(always)] +pub fn pov_span(pov: &PoV, span_name: impl Into) -> JaegerSpan { + INSTANCE.read_recursive().span(|| { pov.hash() }, span_name).into() +} + +/// Creates a `Span` referring to the given hash. All spans created with [`hash_span`] with the +/// same hash (even from multiple different nodes) will be visible in the same view on Jaeger. +#[inline(always)] +pub fn hash_span(hash: &Hash, span_name: impl Into) -> JaegerSpan { + INSTANCE.read_recursive().span(|| { *hash }, span_name).into() +} + +/// Stateful convenience wrapper around [`mick_jaeger`]. +pub enum Jaeger { + /// Launched and operational state. + Launched { + /// [`mick_jaeger`] provided API to record spans to. + traces_in: Arc, + }, + /// Preparation state with the necessary config to launch the collector. + Prep(JaegerConfig), + /// Uninitialized, suggests wrong API usage if encountered. + None, +} + +impl Jaeger { + /// Spawn the jaeger instance. + pub fn new(cfg: JaegerConfig) -> Self { + Jaeger::Prep(cfg) + } + + /// Spawn the background task in order to send the tracing information out via udp + #[cfg(target_os = "unknown")] + pub fn launch(self, _spawner: S) -> result::Result<(), JaegerError> { + Ok(()) + } + + /// Spawn the background task in order to send the tracing information out via udp + #[cfg(not(target_os = "unknown"))] + pub fn launch(self, spawner: S) -> result::Result<(), JaegerError> { + let cfg = match self { + Self::Prep(cfg) => Ok(cfg), + Self::Launched{ .. } => { + return Err(JaegerError::AlreadyLaunched) + } + Self::None => Err(JaegerError::MissingConfiguration), + }?; + + let jaeger_agent = cfg.agent_addr; + + log::info!("🐹 Collecting jaeger spans for {:?}", &jaeger_agent); + + let (traces_in, mut traces_out) = mick_jaeger::init(mick_jaeger::Config { + service_name: format!("{}-{}", cfg.node_name, cfg.node_name), + }); + + // Spawn a background task that pulls span information and sends them on the network. + spawner.spawn("jaeger-collector", Box::pin(async move { + let res = async_std::net::UdpSocket::bind("127.0.0.1:0").await + .map_err(JaegerError::PortAllocationError); + match res { + Ok(udp_socket) => loop { + let buf = traces_out.next().await; + // UDP sending errors happen only either if the API is misused or in case of missing privilege. + if let Err(e) = udp_socket.send_to(&buf, jaeger_agent).await + .map_err(|e| JaegerError::SendError(e)) + { + log::trace!("Jaeger: {:?}", e); + } + } + Err(e) => { + log::warn!("Jaeger: {:?}", e); + } + } + })); + + *INSTANCE.write() = Self::Launched { + traces_in, + }; + Ok(()) + } + + fn span(&self, lazy_hash: F, span_name: impl Into) -> Option + where + F: Fn() -> Hash, + { + if let Self::Launched { traces_in , .. } = self { + let hash = lazy_hash(); + let mut buf = [0u8; 16]; + buf.copy_from_slice(&hash.as_ref()[0..16]); + let trace_id = std::num::NonZeroU128::new(u128::from_be_bytes(buf))?; + Some(traces_in.span(trace_id, span_name)) + } else { + None + } + } +} diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index 1d9d7b7352..f726e2a157 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -31,12 +31,13 @@ use futures::future::BoxFuture; use polkadot_primitives::v1::Hash; use async_trait::async_trait; use smallvec::SmallVec; -use thiserror::Error; use crate::messages::AllMessages; pub mod errors; pub mod messages; +pub mod jaeger; +pub use crate::jaeger::*; /// How many slots are stack-reserved for active leaves updates /// @@ -119,29 +120,27 @@ pub enum FromOverseer { /// * Subsystems dying when they are not expected to /// * Subsystems not dying when they are told to die /// * etc. -#[derive(Error, Debug)] +#[derive(thiserror::Error, Debug)] +#[allow(missing_docs)] pub enum SubsystemError { - /// A notification connection is no longer valid. #[error(transparent)] NotifyCancellation(#[from] oneshot::Canceled), - /// Queue does not accept another item. #[error(transparent)] QueueError(#[from] mpsc::SendError), - /// An attempt to spawn a futures task did not succeed. #[error(transparent)] TaskSpawn(#[from] futures::task::SpawnError), - /// An infallable error. #[error(transparent)] Infallible(#[from] std::convert::Infallible), - /// Prometheus had a problem #[error(transparent)] Prometheus(#[from] substrate_prometheus_endpoint::PrometheusError), - /// An other error lacking particular type information. + #[error(transparent)] + Jaeger(#[from] errors::JaegerError), + #[error("Failed to {0}")] Context(String), diff --git a/node/test/service/src/lib.rs b/node/test/service/src/lib.rs index 7a37e3db31..76d2ab735a 100644 --- a/node/test/service/src/lib.rs +++ b/node/test/service/src/lib.rs @@ -81,6 +81,7 @@ pub fn new_full( config, is_collator, None, + None, polkadot_parachain::wasm_executor::IsolationStrategy::InProcess, ) } diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 49ffc379eb..09998e9bc9 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -61,6 +61,7 @@ fn main() -> Result<()> { config, polkadot_service::IsCollator::Yes(collator.collator_id()), None, + None, ).map_err(|e| e.to_string())?; let mut overseer_handler = full_node .overseer_handler -- GitLab From 6be1401482128190c160b861d4543fc6b4a96b69 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Mon, 14 Dec 2020 02:11:08 -0800 Subject: [PATCH 113/203] Add Basic XCM (#1934) * basic setup * fix compile * add back xcmsink * Update primitives.rs * add downward xcm for sudo * Update paras_sudo_wrapper.rs * Update Cargo.lock * some cleanups * Add error log Co-authored-by: Sergei Shulepov --- Cargo.lock | 5 +++ runtime/common/Cargo.toml | 3 ++ runtime/common/src/paras_sudo_wrapper.rs | 7 ++-- runtime/parachains/Cargo.toml | 2 + runtime/parachains/src/ump.rs | 36 ++++++++++++++++ runtime/rococo/Cargo.toml | 7 ++++ runtime/rococo/src/lib.rs | 52 +++++++++++++++++++++++- 7 files changed, 108 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a892de4394..549cf44670 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5509,6 +5509,7 @@ dependencies = [ "sp-trie", "static_assertions", "trie-db", + "xcm", ] [[package]] @@ -5558,6 +5559,7 @@ dependencies = [ "sp-trie", "sp-version", "xcm", + "xcm-executor", ] [[package]] @@ -6535,6 +6537,9 @@ dependencies = [ "sp-transaction-pool", "sp-version", "substrate-wasm-builder", + "xcm", + "xcm-builder", + "xcm-executor", ] [[package]] diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 05c1ca1e51..81195872bd 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -39,6 +39,8 @@ primitives = { package = "polkadot-primitives", path = "../../primitives", defau libsecp256k1 = { version = "0.3.5", default-features = false, optional = true } runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parachains", default-features = false } +xcm = { path = "../../xcm", default-features = false } + [dev-dependencies] hex-literal = "0.3.1" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } @@ -81,6 +83,7 @@ std = [ "pallet-vesting/std", "pallet-transaction-payment/std", "runtime-parachains/std", + "xcm/std", ] runtime-benchmarks = [ "libsecp256k1/hmac", diff --git a/runtime/common/src/paras_sudo_wrapper.rs b/runtime/common/src/paras_sudo_wrapper.rs index c0eb9426fc..796051a27e 100644 --- a/runtime/common/src/paras_sudo_wrapper.rs +++ b/runtime/common/src/paras_sudo_wrapper.rs @@ -28,6 +28,7 @@ use runtime_parachains::{ configuration, dmp, ump, hrmp, paras::{self, ParaGenesisArgs}, }; use primitives::v1::Id as ParaId; +use parity_scale_codec::Encode; /// The module's configuration trait. pub trait Config: @@ -73,16 +74,16 @@ decl_module! { Ok(()) } - /// Send a downward message to the given para. + /// Send a downward XCM to the given para. /// /// The given parachain should exist and the payload should not exceed the preconfigured size /// `config.max_downward_message_size`. #[weight = (1_000, DispatchClass::Operational)] - pub fn sudo_queue_downward_message(origin, id: ParaId, payload: Vec) -> DispatchResult { + pub fn sudo_queue_downward_xcm(origin, id: ParaId, xcm: xcm::VersionedXcm) -> DispatchResult { ensure_root(origin)?; ensure!(>::is_valid_para(id), Error::::ParaDoesntExist); let config = >::config(); - >::queue_downward_message(&config, id, payload) + >::queue_downward_message(&config, id, xcm.encode()) .map_err(|e| match e { dmp::QueueDownwardMessageError::ExceedsMaxMessageSize => Error::::ExceedsMaxMessageSize.into(), diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 58e84a1241..9899a77986 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -35,6 +35,7 @@ pallet-offences = { git = "https://github.com/paritytech/substrate", branch = "m frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } xcm = { package = "xcm", path = "../../xcm", default-features = false } +xcm-executor = { package = "xcm-executor", path = "../../xcm/xcm-executor", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } libsecp256k1 = { version = "0.3.5", default-features = false, optional = true } @@ -84,6 +85,7 @@ std = [ "pallet-timestamp/std", "pallet-vesting/std", "xcm/std", + "xcm-executor/std", ] runtime-benchmarks = [ "libsecp256k1/hmac", diff --git a/runtime/parachains/src/ump.rs b/runtime/parachains/src/ump.rs index f18ad250b9..8974f9c9ff 100644 --- a/runtime/parachains/src/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -52,6 +52,42 @@ impl UmpSink for () { } } +/// A specific implementation of a UmpSink where messages are in the XCM format +/// and will be forwarded to the XCM Executor. +pub struct XcmSink(sp_std::marker::PhantomData); + +impl UmpSink for XcmSink { + fn process_upward_message(origin: ParaId, msg: Vec) -> Weight { + use parity_scale_codec::Decode; + use xcm::VersionedXcm; + use xcm::v0::{Junction, MultiLocation, ExecuteXcm}; + use xcm_executor::XcmExecutor; + + let weight: Weight = 0; + + if let Ok(versioned_xcm_message) = VersionedXcm::decode(&mut &msg[..]) { + match versioned_xcm_message { + VersionedXcm::V0(xcm_message) => { + let xcm_junction: Junction = Junction::Parachain { id: origin.into() }; + let xcm_location: MultiLocation = xcm_junction.into(); + // TODO: Do something with result. + let _result = XcmExecutor::::execute_xcm(xcm_location, xcm_message); + } + } + } else { + frame_support::debug::error!( + target: "xcm", + "Failed to decode versioned XCM from upward message.", + ); + } + + // TODO: to be sound, this implementation must ensure that returned (and thus consumed) + // weight is limited to some small portion of the total block weight (as a ballpark, 1/4, 1/8 + // or lower). + weight + } +} + /// An error returned by [`check_upward_messages`] that indicates a violation of one of acceptance /// criteria rules. pub enum AcceptanceCheckErr { diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 1ca7f44774..1854e860ca 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -53,6 +53,10 @@ primitives = { package = "polkadot-primitives", path = "../../primitives", defau polkadot-parachain = { path = "../../parachain", default-features = false } runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parachains", default-features = false } +xcm = { package = "xcm", path = "../../xcm", default-features = false } +xcm-executor = { package = "xcm-executor", path = "../../xcm/xcm-executor", default-features = false } +xcm-builder = { package = "xcm-builder", path = "../../xcm/xcm-builder", default-features = false } + [build-dependencies] substrate-wasm-builder = "3.0.0" @@ -99,6 +103,9 @@ std = [ "sp-version/std", "serde_derive", "serde/std", + "xcm/std", + "xcm-executor/std", + "xcm-builder/std", ] # When enabled, the runtime api will not be build. # diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 4eeaf3b1be..da437e71c0 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -82,6 +82,15 @@ use runtime_parachains::scheduler as parachains_scheduler; pub use pallet_balances::Call as BalancesCall; pub use pallet_staking::StakerStatus; +use polkadot_parachain::primitives::Id as ParaId; +use xcm::v0::{MultiLocation, NetworkId}; +use xcm_executor::traits::IsConcrete; +use xcm_builder::{ + AccountId32Aliases, ChildParachainConvertsVia, SovereignSignedViaLocation, + CurrencyAdapter as XcmCurrencyAdapter, ChildParachainAsNative, + SignedAccountId32AsNative, ChildSystemParachainAsSuperuser, LocationInverter, +}; + /// Constant values used within the runtime. pub mod constants; use constants::{time::*, currency::*, fee::*}; @@ -535,10 +544,51 @@ impl parachains_paras::Config for Runtime { type Origin = Origin; } +parameter_types! { + pub const RocLocation: MultiLocation = MultiLocation::Null; + pub const RococoNetwork: NetworkId = NetworkId::Polkadot; + pub const Ancestry: MultiLocation = MultiLocation::Null; +} + +pub type LocationConverter = ( + ChildParachainConvertsVia, + AccountId32Aliases, +); + +pub type LocalAssetTransactor = + XcmCurrencyAdapter< + // Use this currency: + Balances, + // Use this currency when it is a fungible asset matching the given location or name: + IsConcrete, + // We can convert the MultiLocations with our converter above: + LocationConverter, + // Our chain's account ID type (we can't get away without mentioning it explicitly): + AccountId, + >; + +type LocalOriginConverter = ( + SovereignSignedViaLocation, + ChildParachainAsNative, + SignedAccountId32AsNative, + ChildSystemParachainAsSuperuser, +); + +pub struct XcmConfig; +impl xcm_executor::Config for XcmConfig { + type Call = Call; + type XcmSender = (); + type AssetTransactor = LocalAssetTransactor; + type OriginConverter = LocalOriginConverter; + type IsReserve = (); + type IsTeleporter = (); + type LocationInverter = LocationInverter; +} + impl parachains_session_info::Config for Runtime {} impl parachains_ump::Config for Runtime { - type UmpSink = (); // TODO: #1873 To be handled by the XCM receiver. + type UmpSink = crate::parachains_ump::XcmSink; } impl parachains_dmp::Config for Runtime {} -- GitLab From 0a61addcc22f48f7263fdec258d4c6460bd27539 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Dec 2020 09:05:32 +0000 Subject: [PATCH 114/203] Bump indexmap from 1.6.0 to 1.6.1 (#2117) Bumps [indexmap](https://github.com/bluss/indexmap) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/bluss/indexmap/releases) - [Commits](https://github.com/bluss/indexmap/compare/1.6.0...1.6.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/network/statement-distribution/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 549cf44670..33218f0d08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2393,9 +2393,9 @@ checksum = "e0bd112d44d9d870a6819eb505d04dd92b5e4d94bb8c304924a0872ae7016fb5" [[package]] name = "indexmap" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" +checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" dependencies = [ "autocfg 1.0.0", "hashbrown 0.9.1", diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index dd7a9adf8d..e0e68ac2da 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -16,7 +16,7 @@ polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsys polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } arrayvec = "0.5.2" -indexmap = "1.6.0" +indexmap = "1.6.1" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } -- GitLab From 7fb1e57d7a90badbbe0b8098443b9da85d3f4da0 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 15 Dec 2020 15:53:17 -0600 Subject: [PATCH 115/203] Approval types (#2111) * start approval types * doc * finish basic types * add debug and codec impls to approval types * grumbles * remove unused AssignmentId * remove aux-schema file --- Cargo.lock | 1 + node/primitives/Cargo.toml | 1 + node/primitives/src/approval.rs | 105 ++++++++++++++++++ node/primitives/src/lib.rs | 2 + .../implementers-guide/src/types/approval.md | 36 ------ 5 files changed, 109 insertions(+), 36 deletions(-) create mode 100644 node/primitives/src/approval.rs diff --git a/Cargo.lock b/Cargo.lock index 33218f0d08..f07dd56dda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5189,6 +5189,7 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "polkadot-statement-table", + "sp-consensus-vrf", "sp-core", "sp-runtime", ] diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index b391623703..888b13f0d3 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -12,3 +12,4 @@ polkadot-statement-table = { path = "../../statement-table" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/primitives/src/approval.rs b/node/primitives/src/approval.rs new file mode 100644 index 0000000000..32b4e5af70 --- /dev/null +++ b/node/primitives/src/approval.rs @@ -0,0 +1,105 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Types relevant for approval. + +pub use sp_consensus_vrf::schnorrkel::{VRFOutput, VRFProof}; + +use polkadot_primitives::v1::{ + CandidateHash, Hash, ValidatorIndex, Signed, ValidatorSignature, CoreIndex, +}; +use parity_scale_codec::{Encode, Decode}; + +/// Validators assigning to check a particular candidate are split up into tranches. +/// Earlier tranches of validators check first, with later tranches serving as backup. +pub type DelayTranche = u32; + +/// A static context used for all relay-vrf-modulo VRFs. +pub const RELAY_VRF_MODULO_CONTEXT: &str = "A&V MOD"; + +/// A static context used for all relay-vrf-delay VRFs. +pub const RELAY_VRF_DELAY_CONTEXT: &str = "A&V TRANCHE"; + +/// random bytes derived from the VRF submitted within the block by the +/// block author as a credential and used as input to approval assignment criteria. +#[derive(Debug, Clone, Encode, Decode)] +pub struct RelayVRF(pub [u8; 32]); + +/// Different kinds of input data or criteria that can prove a validator's assignment +/// to check a particular parachain. +#[derive(Debug, Clone, Encode, Decode)] +pub enum AssignmentCertKind { + /// An assignment story based on the VRF that authorized the relay-chain block where the + /// candidate was included combined with a sample number. + /// + /// The context used to produce bytes is [`RELAY_VRF_MODULO_CONTEXT`] + RelayVRFModulo { + /// The sample number used in this cert. + sample: u32, + }, + /// An assignment story based on the VRF that authorized the relay-chain block where the + /// candidate was included combined with the index of a particular core. + /// + /// The context is [`RELAY_VRF_DELAY_CONTEXT`] + RelayVRFDelay { + /// The core index chosen in this cert. + core_index: CoreIndex, + }, +} + +/// A certification of assignment. +#[derive(Debug, Clone, Encode, Decode)] +pub struct AssignmentCert { + /// The criterion which is claimed to be met by this cert. + pub kind: AssignmentCertKind, + /// The VRF showing the criterion is met. + pub vrf: (VRFOutput, VRFProof), +} + +/// An assignment crt which refers to the candidate under which the assignment is +/// relevant by block hash. +#[derive(Debug, Clone, Encode, Decode)] +pub struct IndirectAssignmentCert { + /// A block hash where the candidate appears. + pub block_hash: Hash, + /// The validator index. + pub validator: ValidatorIndex, + /// The cert itself. + pub cert: AssignmentCert, +} + +/// A vote of approval on a candidate. +#[derive(Debug, Clone, Encode, Decode)] +pub struct ApprovalVote(pub CandidateHash); + +/// An approval vote signed by some validator. +pub type SignedApprovalVote = Signed; + +/// A signed approval vote which references the candidate indirectly via the block. +/// +/// In practice, we have a look-up from block hash and candidate index to candidate hash, +/// so this can be transformed into a `SignedApprovalVote`. +#[derive(Debug, Clone, Encode, Decode)] +pub struct IndirectSignedApprovalVote { + /// A block hash where the candidate appears. + pub block_hash: Hash, + /// The index of the candidate in the list of candidates fully included as-of the block. + pub candidate_index: u32, + /// The validator index. + pub validator: ValidatorIndex, + /// The signature by the validator. + pub signature: ValidatorSignature, +} diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index 0ea2799daa..82ac5dd28e 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -41,6 +41,8 @@ use std::pin::Pin; pub use sp_core::traits::SpawnNamed; +pub mod approval; + /// A statement, where the candidate receipt is included in the `Seconded` variant. /// /// This is the committed candidate receipt instead of the bare candidate receipt. As such, diff --git a/roadmap/implementers-guide/src/types/approval.md b/roadmap/implementers-guide/src/types/approval.md index c510137a99..1db305e760 100644 --- a/roadmap/implementers-guide/src/types/approval.md +++ b/roadmap/implementers-guide/src/types/approval.md @@ -98,40 +98,4 @@ struct CheckedAssignmentCert { ```rust type DelayTranche = u32; -``` - -## RelayVRFStory - -Assignment criteria are based off of possible stories about the relay-chain block that included the candidate. More information on stories is available in [the informational page on approvals.](../protocol-approval.md#stories). - -```rust -/// A story based on the VRF that authorized the relay-chain block where the candidate was -/// included. -/// -/// VRF Context is "A&V RC-VRF" -struct RelayVRFStory(VRFInOut); -``` - -## RelayEquivocationStory - -```rust -/// A story based on the candidate hash itself. Should be used when a candidate is an -/// equivocation: when there are two relay-chain blocks with the same RelayVRFStory, but only -/// one contains the candidate. -/// -/// VRF Context is "A&V RC-EQUIV" -struct RelayEquivocationStory(Hash); -``` - -## ExecutionTimePair - -```rust -struct ExecutionTimePair { - // The absolute time in milliseconds that the validator claims to have taken - // with the block. - absolute: u32, - // The validator's believed ratio in execution time to the average, expressed as a fixed-point - // 16-bit unsigned integer with 8 bits before and after the point. - ratio: FixedU16, -} ``` \ No newline at end of file -- GitLab From b6f01613fa4a27f8f4bb1916e655f8c3c215bf0b Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Wed, 16 Dec 2020 13:27:53 +0100 Subject: [PATCH 116/203] fix check_line_width.sh (#2120) --- scripts/gitlab/check_line_width.sh | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/scripts/gitlab/check_line_width.sh b/scripts/gitlab/check_line_width.sh index f382d630b1..c31cab4465 100755 --- a/scripts/gitlab/check_line_width.sh +++ b/scripts/gitlab/check_line_width.sh @@ -2,19 +2,18 @@ # # check if line width of rust source files is not beyond x characters # - +set -e BASE_BRANCH="origin/master" LINE_WIDTH="121" GOOD_LINE_WIDTH="101" - -git diff --name-only ${BASE_BRANCH}...${CI_COMMIT_SHA} \*.rs | ( while read file +git diff --name-only "${BASE_BRANCH}...${CI_COMMIT_SHA}" -- \*.rs | ( while read -r file do - if [ ! -f ${file} ]; + if [ ! -f "${file}" ]; then echo "Skipping removed file." - elif git diff ${BASE_BRANCH}...${CI_COMMIT_SHA} ${file} | grep -q "^+.\{${LINE_WIDTH}\}" + elif git diff "${BASE_BRANCH}...${CI_COMMIT_SHA}" -- "${file}" | grep -q "^+.\{${LINE_WIDTH}\}" then if [ -z "${FAIL}" ] then @@ -26,11 +25,11 @@ do FAIL="true" fi echo "| file: ${file}" - git diff ${BASE_BRANCH}...${CI_COMMIT_SHA} ${file} \ + git diff "${BASE_BRANCH}...${CI_COMMIT_SHA}" -- "${file}" \ | grep -n "^+.\{${LINE_WIDTH}\}" echo "|" else - if git diff ${BASE_BRANCH}...${CI_COMMIT_SHA} ${file} | grep -q "^+.\{${GOOD_LINE_WIDTH}\}" + if git diff "${BASE_BRANCH}...${CI_COMMIT_SHA}" -- "${file}" | grep -q "^+.\{${GOOD_LINE_WIDTH}\}" then if [ -z "${FAIL}" ] then @@ -41,7 +40,7 @@ do echo "|" fi echo "| file: ${file}" - git diff ${BASE_BRANCH}...${CI_COMMIT_SHA} ${file} \ + git diff "${BASE_BRANCH}...${CI_COMMIT_SHA}" -- "${file}" \ | grep -n "^+.\{${LINE_WIDTH}\}" echo "|" fi -- GitLab From 465e358027ea682e6df23344b5ca174512159fc6 Mon Sep 17 00:00:00 2001 From: RK Date: Wed, 16 Dec 2020 20:59:07 +0530 Subject: [PATCH 117/203] Companion for #7536 (Pallet Treasury Refactor) (#2025) * wk2048 | D6 | issue-7143-treasury-refactor | integration * wk2048 | D6 | issue-7143-treasury-refactor | integration | p2 * trait -> config * fix weight files and import * missed some * fix import * fix imports * alphabetize * fix config traits * fix trait * update traits * update weights * "Update Substrate" * fix features * Update runtime/kusama/src/lib.rs * Update runtime/polkadot/src/lib.rs * add bounties and tips in proxy filters * remove unused * remove unused * remove unused Co-authored-by: Shawn Tabrizi Co-authored-by: parity-processbot <> Co-authored-by: thiolliere --- Cargo.lock | 347 ++++++++++-------- node/service/src/chain_spec.rs | 4 + runtime/common/src/crowdfund.rs | 36 +- runtime/common/src/impls.rs | 24 +- runtime/kusama/Cargo.toml | 6 + runtime/kusama/src/lib.rs | 44 ++- runtime/kusama/src/weights/mod.rs | 2 + runtime/kusama/src/weights/pallet_bounties.rs | 108 ++++++ runtime/kusama/src/weights/pallet_tips.rs | 77 ++++ runtime/kusama/src/weights/pallet_treasury.rs | 111 +----- runtime/polkadot/Cargo.toml | 6 + runtime/polkadot/src/lib.rs | 47 ++- runtime/polkadot/src/weights/mod.rs | 2 + .../polkadot/src/weights/pallet_bounties.rs | 109 ++++++ runtime/polkadot/src/weights/pallet_tips.rs | 78 ++++ .../polkadot/src/weights/pallet_treasury.rs | 107 +----- 16 files changed, 674 insertions(+), 434 deletions(-) create mode 100644 runtime/kusama/src/weights/pallet_bounties.rs create mode 100644 runtime/kusama/src/weights/pallet_tips.rs create mode 100644 runtime/polkadot/src/weights/pallet_bounties.rs create mode 100644 runtime/polkadot/src/weights/pallet_tips.rs diff --git a/Cargo.lock b/Cargo.lock index f07dd56dda..a55b062db8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -318,9 +318,9 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" [[package]] name = "async-tls" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0d8b6fc362bebff7502479fb5e9aed00c8cc3abc5af755536e73a128f0cb88" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" dependencies = [ "futures-core", "futures-io", @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -1525,8 +1525,9 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ + "Inflector", "chrono", "frame-benchmarking", "handlebars", @@ -1547,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -1563,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "serde", @@ -1574,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "bitflags", "frame-metadata", @@ -1599,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1610,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1622,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1632,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1648,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -1662,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-api", @@ -2199,6 +2200,12 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +[[package]] +name = "httpdate" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" + [[package]] name = "humantime" version = "1.3.0" @@ -2246,9 +2253,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.6" +version = "0.13.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e7655b9594024ad0ee439f3b5a7299369dc2a3f459b47c696f9ff676f9aa1f" +checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" dependencies = [ "bytes 0.5.6", "futures-channel", @@ -2258,13 +2265,13 @@ dependencies = [ "http 0.2.1", "http-body 0.3.1", "httparse", + "httpdate", "itoa", - "log", - "pin-project 0.4.23", + "pin-project 1.0.2", "socket2", - "time", "tokio 0.2.21", "tower-service", + "tracing", "want 0.3.0", ] @@ -2277,7 +2284,7 @@ dependencies = [ "bytes 0.5.6", "ct-logs", "futures-util", - "hyper 0.13.6", + "hyper 0.13.9", "log", "rustls 0.18.0", "rustls-native-certs", @@ -2670,6 +2677,7 @@ dependencies = [ "pallet-authorship", "pallet-babe", "pallet-balances", + "pallet-bounties", "pallet-collective", "pallet-democracy", "pallet-elections-phragmen", @@ -2692,6 +2700,7 @@ dependencies = [ "pallet-staking", "pallet-staking-reward-curve", "pallet-timestamp", + "pallet-tips", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -2834,9 +2843,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941af10b45fd27d15e94aea83002c4a21521849fad8aad78d1cdbf00a60b0a17" +checksum = "022cdac4ab124be12de581e591796d4dfb7d1f1eef94669d2c1eaa0e98dd2f0e" dependencies = [ "atomic", "bytes 0.5.6", @@ -3210,9 +3219,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a0af4ea43104a01c634ee1b8026ce11f9ee3766a894a44f9e1da5a0eb74fc0" +checksum = "522a877ce42ededf1f5dd011dbc40ea116f1776818f09dacb3d7a206f3ad6305" dependencies = [ "async-tls", "either", @@ -3886,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -3902,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -3917,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -3942,11 +3951,26 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-bounties" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "pallet-treasury", "parity-scale-codec", "serde", "sp-runtime", @@ -3956,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -3972,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -3987,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4002,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4023,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4039,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4059,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4076,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4090,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4106,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4120,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4135,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4156,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4172,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4185,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "enumflags2", "frame-support", @@ -4200,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4215,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4235,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4251,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4265,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4287,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4298,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4312,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4327,10 +4351,25 @@ dependencies = [ "sp-timestamp", ] +[[package]] +name = "pallet-tips" +version = "2.0.0" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-treasury", + "parity-scale-codec", + "serde", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "frame-system", @@ -4347,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4365,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4378,11 +4417,12 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "impl-trait-for-tuples 0.1.3", "pallet-balances", "parity-scale-codec", "serde", @@ -4393,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4409,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5412,6 +5452,7 @@ dependencies = [ "pallet-authorship", "pallet-babe", "pallet-balances", + "pallet-bounties", "pallet-collective", "pallet-democracy", "pallet-elections-phragmen", @@ -5432,6 +5473,7 @@ dependencies = [ "pallet-staking", "pallet-staking-reward-curve", "pallet-timestamp", + "pallet-tips", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -6683,7 +6725,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "async-trait", "derive_more", @@ -6711,7 +6753,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6734,7 +6776,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6751,7 +6793,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6772,7 +6814,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6783,7 +6825,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "atty", "chrono", @@ -6826,7 +6868,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6837,7 +6879,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "fnv", @@ -6871,7 +6913,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "blake2-rfc", "hash-db", @@ -6901,7 +6943,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6912,7 +6954,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "fork-tree", @@ -6957,7 +6999,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "futures 0.3.8", @@ -6981,7 +7023,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6994,7 +7036,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7020,7 +7062,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "sc-client-api", @@ -7034,7 +7076,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "lazy_static", @@ -7063,7 +7105,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "parity-scale-codec", @@ -7079,7 +7121,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "parity-scale-codec", @@ -7094,7 +7136,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "parity-scale-codec", @@ -7112,7 +7154,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "finality-grandpa", @@ -7149,7 +7191,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "finality-grandpa", @@ -7173,7 +7215,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7191,7 +7233,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "async-trait", "derive_more", @@ -7211,7 +7253,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "hash-db", "lazy_static", @@ -7230,7 +7272,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "async-std", "async-trait", @@ -7284,7 +7326,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7299,13 +7341,13 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "bytes 0.5.6", "fnv", "futures 0.3.8", "futures-timer 3.0.2", - "hyper 0.13.6", + "hyper 0.13.9", "hyper-rustls", "log", "num_cpus", @@ -7326,7 +7368,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "libp2p", @@ -7339,7 +7381,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7348,7 +7390,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "hash-db", @@ -7382,7 +7424,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "futures 0.3.8", @@ -7406,7 +7448,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7424,7 +7466,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "directories 3.0.1", "exit-future", @@ -7488,7 +7530,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "parity-scale-codec", @@ -7503,7 +7545,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7523,7 +7565,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7544,7 +7586,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7568,7 +7610,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "futures 0.3.8", @@ -7590,7 +7632,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8056,7 +8098,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "sp-core", @@ -8068,7 +8110,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "hash-db", "parity-scale-codec", @@ -8084,7 +8126,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8096,7 +8138,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "serde", @@ -8108,7 +8150,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8121,7 +8163,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-api", @@ -8133,7 +8175,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8144,7 +8186,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-api", @@ -8156,7 +8198,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "log", @@ -8174,7 +8216,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "serde", "serde_json", @@ -8183,7 +8225,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8209,7 +8251,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "merlin", "parity-scale-codec", @@ -8229,7 +8271,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8238,7 +8280,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8250,7 +8292,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "base58", "blake2-rfc", @@ -8294,7 +8336,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8303,7 +8345,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8313,7 +8355,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "environmental", "parity-scale-codec", @@ -8324,7 +8366,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "finality-grandpa", "log", @@ -8341,7 +8383,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8353,7 +8395,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "hash-db", @@ -8377,7 +8419,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "lazy_static", "sp-core", @@ -8388,7 +8430,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "async-trait", "derive_more", @@ -8405,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "serde", @@ -8417,7 +8459,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8428,7 +8470,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "sp-api", "sp-core", @@ -8438,7 +8480,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "backtrace", ] @@ -8446,7 +8488,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "serde", "sp-core", @@ -8455,7 +8497,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "either", "hash256-std-hasher", @@ -8476,7 +8518,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8493,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "Inflector", "proc-macro-crate", @@ -8505,7 +8547,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "serde", "serde_json", @@ -8514,7 +8556,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-api", @@ -8527,7 +8569,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8537,7 +8579,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "hash-db", "log", @@ -8559,12 +8601,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8577,7 +8619,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "sp-core", @@ -8590,7 +8632,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8604,7 +8646,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "log", "parity-scale-codec", @@ -8617,7 +8659,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "derive_more", "futures 0.3.8", @@ -8633,7 +8675,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "hash-db", "memory-db", @@ -8647,7 +8689,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "futures-core", @@ -8659,7 +8701,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8671,7 +8713,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8813,7 +8855,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "chrono", "console_error_panic_hook", @@ -8839,7 +8881,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "platforms", ] @@ -8847,7 +8889,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8870,12 +8912,12 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.6", + "hyper 0.13.9", "log", "prometheus", "tokio 0.2.21", @@ -8884,7 +8926,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8911,7 +8953,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8921,7 +8963,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6b600cdeb4043e512bc5f342eb02a5a17d26797a" +source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -9494,6 +9536,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", + "log", "pin-project-lite 0.2.0", "tracing-attributes", "tracing-core", @@ -10387,9 +10430,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" +checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36" dependencies = [ "zeroize_derive", ] diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index d4dfcdd597..90b690d4bd 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -245,6 +245,7 @@ fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::Gene vesting: vec![], }), pallet_vesting: Some(polkadot::VestingConfig { vesting: vec![] }), + pallet_treasury: Some(Default::default()), } } @@ -627,6 +628,7 @@ fn kusama_staging_testnet_config_genesis(wasm_binary: &[u8]) -> kusama::GenesisC vesting: vec![], }), pallet_vesting: Some(kusama::VestingConfig { vesting: vec![] }), + pallet_treasury: Some(Default::default()), } } @@ -1083,6 +1085,7 @@ pub fn polkadot_testnet_genesis( vesting: vec![], }), pallet_vesting: Some(polkadot::VestingConfig { vesting: vec![] }), + pallet_treasury: Some(Default::default()), } } @@ -1177,6 +1180,7 @@ pub fn kusama_testnet_genesis( vesting: vec![], }), pallet_vesting: Some(kusama::VestingConfig { vesting: vec![] }), + pallet_treasury: Some(Default::default()), } } diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdfund.rs index 865dbcc6fc..8e856087bd 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdfund.rs @@ -573,13 +573,12 @@ mod tests { impl_outer_origin, assert_ok, assert_noop, parameter_types, traits::{OnInitialize, OnFinalize}, }; - use frame_support::traits::{Contains, ContainsLengthBound}; use sp_core::H256; use primitives::v1::{Id as ParaId, ValidationCode}; // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are requried. use sp_runtime::{ - Permill, Percent, testing::Header, DispatchResult, + Permill, testing::Header, DispatchResult, traits::{BlakeTwo256, IdentityLookup}, }; use crate::slots::Registrar; @@ -638,28 +637,7 @@ mod tests { pub const ProposalBondMinimum: u64 = 1; pub const SpendPeriod: u64 = 2; pub const Burn: Permill = Permill::from_percent(50); - pub const TipCountdown: u64 = 1; - pub const TipFindersFee: Percent = Percent::from_percent(20); - pub const TipReportDepositBase: u64 = 1; pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry"); - pub const DataDepositPerByte: u64 = 1; - pub const BountyDepositBase: u64 = 1; - pub const BountyDepositPayoutDelay: u64 = 1; - pub const BountyUpdatePeriod: u64 = 1; - pub const MaximumReasonLength: u32 = 16384; - pub const BountyCuratorDeposit: Permill = Permill::from_percent(50); - pub const BountyValueMinimum: u64 = 1; - } - pub struct Nobody; - impl Contains for Nobody { - fn contains(_: &u64) -> bool { false } - fn sorted_members() -> Vec { vec![] } - #[cfg(feature = "runtime-benchmarks")] - fn add(_: &u64) { unimplemented!() } - } - impl ContainsLengthBound for Nobody { - fn min_len() -> usize { 0 } - fn max_len() -> usize { 0 } } impl pallet_treasury::Config for Test { type Currency = pallet_balances::Module; @@ -672,18 +650,8 @@ mod tests { type SpendPeriod = SpendPeriod; type Burn = Burn; type BurnDestination = (); - type Tippers = Nobody; - type TipCountdown = TipCountdown; - type TipFindersFee = TipFindersFee; - type TipReportDepositBase = TipReportDepositBase; - type DataDepositPerByte = DataDepositPerByte; - type BountyDepositBase = BountyDepositBase; - type BountyDepositPayoutDelay = BountyDepositPayoutDelay; - type BountyUpdatePeriod = BountyUpdatePeriod; - type MaximumReasonLength = MaximumReasonLength; - type BountyCuratorDeposit = BountyCuratorDeposit; - type BountyValueMinimum = BountyValueMinimum; type ModuleId = TreasuryModuleId; + type SpendFunds = (); type WeightInfo = (); } diff --git a/runtime/common/src/impls.rs b/runtime/common/src/impls.rs index b9bace0098..185dee74a7 100644 --- a/runtime/common/src/impls.rs +++ b/runtime/common/src/impls.rs @@ -138,18 +138,6 @@ mod tests { type WeightInfo = (); } - pub struct Nobody; - impl frame_support::traits::Contains for Nobody { - fn contains(_: &AccountId) -> bool { false } - fn sorted_members() -> Vec { vec![] } - #[cfg(feature = "runtime-benchmarks")] - fn add(_: &AccountId) { unimplemented!() } - } - impl frame_support::traits::ContainsLengthBound for Nobody { - fn min_len() -> usize { 0 } - fn max_len() -> usize { 0 } - } - parameter_types! { pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry"); } @@ -165,18 +153,8 @@ mod tests { type SpendPeriod = (); type Burn = (); type BurnDestination = (); - type Tippers = Nobody; - type TipCountdown = (); - type TipFindersFee = (); - type TipReportDepositBase = (); - type DataDepositPerByte = (); - type BountyDepositBase = (); - type BountyDepositPayoutDelay = (); - type BountyUpdatePeriod = (); - type MaximumReasonLength = (); - type BountyCuratorDeposit = (); - type BountyValueMinimum = (); type ModuleId = TreasuryModuleId; + type SpendFunds = (); type WeightInfo = (); } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 9a7e1028a8..2af5811f6c 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -34,6 +34,7 @@ pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", pallet-authorship = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-bounties = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -60,6 +61,7 @@ pallet-staking-reward-curve = { package = "pallet-staking-reward-curve", git = " frame-system = {git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-tips = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-vesting = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -107,6 +109,7 @@ std = [ "frame-support/std", "pallet-authorship/std", "pallet-balances/std", + "pallet-bounties/std", "pallet-transaction-payment/std", "pallet-transaction-payment-rpc-runtime-api/std", "pallet-collective/std", @@ -132,6 +135,7 @@ std = [ "frame-system/std", "frame-system-rpc-runtime-api/std", "pallet-timestamp/std", + "pallet-tips/std", "pallet-treasury/std", "sp-version/std", "pallet-utility/std", @@ -153,6 +157,7 @@ runtime-benchmarks = [ "sp-runtime/runtime-benchmarks", "pallet-babe/runtime-benchmarks", "pallet-balances/runtime-benchmarks", + "pallet-bounties/runtime-benchmarks", "pallet-collective/runtime-benchmarks", "pallet-democracy/runtime-benchmarks", "pallet-elections-phragmen/runtime-benchmarks", @@ -166,6 +171,7 @@ runtime-benchmarks = [ "pallet-society/runtime-benchmarks", "pallet-staking/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", + "pallet-tips/runtime-benchmarks", "pallet-treasury/runtime-benchmarks", "pallet-utility/runtime-benchmarks", "pallet-vesting/runtime-benchmarks", diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 31d92bd019..7eb2003961 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -559,25 +559,39 @@ impl pallet_treasury::Config for Runtime { type Currency = Balances; type ApproveOrigin = ApproveOrigin; type RejectOrigin = MoreThanHalfCouncil; - type Tippers = ElectionsPhragmen; - type TipCountdown = TipCountdown; - type TipFindersFee = TipFindersFee; - type TipReportDepositBase = TipReportDepositBase; - type DataDepositPerByte = DataDepositPerByte; type Event = Event; type OnSlash = Treasury; type ProposalBond = ProposalBond; type ProposalBondMinimum = ProposalBondMinimum; type SpendPeriod = SpendPeriod; type Burn = Burn; + type BurnDestination = Society; + type SpendFunds = Bounties; + type WeightInfo = weights::pallet_treasury::WeightInfo; +} + +impl pallet_bounties::Config for Runtime { + type Event = Event; type BountyDepositBase = BountyDepositBase; type BountyDepositPayoutDelay = BountyDepositPayoutDelay; type BountyUpdatePeriod = BountyUpdatePeriod; - type MaximumReasonLength = MaximumReasonLength; type BountyCuratorDeposit = BountyCuratorDeposit; type BountyValueMinimum = BountyValueMinimum; - type BurnDestination = Society; - type WeightInfo = weights::pallet_treasury::WeightInfo; + type DataDepositPerByte = DataDepositPerByte; + type MaximumReasonLength = MaximumReasonLength; + type WeightInfo = weights::pallet_bounties::WeightInfo; + +} + +impl pallet_tips::Config for Runtime { + type Event = Event; + type DataDepositPerByte = DataDepositPerByte; + type MaximumReasonLength = MaximumReasonLength; + type Tippers = ElectionsPhragmen; + type TipCountdown = TipCountdown; + type TipFindersFee = TipFindersFee; + type TipReportDepositBase = TipReportDepositBase; + type WeightInfo = weights::pallet_tips::WeightInfo; } parameter_types! { @@ -850,6 +864,8 @@ impl InstanceFilter for ProxyType { Call::ElectionsPhragmen(..) | Call::TechnicalMembership(..) | Call::Treasury(..) | + Call::Bounties(..) | + Call::Tips(..) | Call::Claims(..) | Call::Utility(..) | Call::Identity(..) | @@ -874,6 +890,8 @@ impl InstanceFilter for ProxyType { Call::TechnicalCommittee(..) | Call::ElectionsPhragmen(..) | Call::Treasury(..) | + Call::Bounties(..) | + Call::Tips(..) | Call::Utility(..) ), ProxyType::Staking => matches!(c, @@ -1185,7 +1203,7 @@ construct_runtime! { TechnicalCommittee: pallet_collective::::{Module, Call, Storage, Origin, Event, Config} = 15, ElectionsPhragmen: pallet_elections_phragmen::{Module, Call, Storage, Event, Config} = 16, TechnicalMembership: pallet_membership::::{Module, Call, Storage, Event, Config} = 17, - Treasury: pallet_treasury::{Module, Call, Storage, Event} = 18, + Treasury: pallet_treasury::{Module, Call, Storage, Config, Event} = 18, // Claims. Usable initially. Claims: claims::{Module, Call, Storage, Event, Config, ValidateUnsigned} = 19, @@ -1213,6 +1231,12 @@ construct_runtime! { // Multisig module. Late addition. Multisig: pallet_multisig::{Module, Call, Storage, Event} = 31, + + // Bounties module. + Bounties: pallet_bounties::{Module, Call, Storage, Event} = 35, + + // Tips module. + Tips: pallet_tips::{Module, Call, Storage, Event} = 36, } } @@ -1528,6 +1552,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, claims, Claims); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); + add_benchmark!(params, batches, pallet_bounties, Bounties); add_benchmark!(params, batches, pallet_collective, Council); add_benchmark!(params, batches, pallet_democracy, Democracy); add_benchmark!(params, batches, pallet_elections_phragmen, ElectionsPhragmen); @@ -1542,6 +1567,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, pallet_staking, Staking); add_benchmark!(params, batches, frame_system, SystemBench::); add_benchmark!(params, batches, pallet_timestamp, Timestamp); + add_benchmark!(params, batches, pallet_tips, Tips); add_benchmark!(params, batches, pallet_treasury, Treasury); add_benchmark!(params, batches, pallet_utility, Utility); add_benchmark!(params, batches, pallet_vesting, Vesting); diff --git a/runtime/kusama/src/weights/mod.rs b/runtime/kusama/src/weights/mod.rs index 19269d0261..f8c7cb230b 100644 --- a/runtime/kusama/src/weights/mod.rs +++ b/runtime/kusama/src/weights/mod.rs @@ -17,6 +17,7 @@ pub mod frame_system; pub mod pallet_balances; +pub mod pallet_bounties; pub mod pallet_collective; pub mod pallet_democracy; pub mod pallet_elections_phragmen; @@ -29,6 +30,7 @@ pub mod pallet_scheduler; pub mod pallet_session; pub mod pallet_staking; pub mod pallet_timestamp; +pub mod pallet_tips; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; diff --git a/runtime/kusama/src/weights/pallet_bounties.rs b/runtime/kusama/src/weights/pallet_bounties.rs new file mode 100644 index 0000000000..562e13c4b9 --- /dev/null +++ b/runtime/kusama/src/weights/pallet_bounties.rs @@ -0,0 +1,108 @@ +// This file is part of Substrate. + +// Copyright (C) 2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for pallet_bounties +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-11-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 + +// Executed Command: +// target/release/substrate +// benchmark +// --chain=dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_bounties +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./frame/bounties/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_bounties using the Substrate node and recommended hardware. +pub struct WeightInfo(PhantomData); +impl pallet_bounties::WeightInfo for WeightInfo { + fn propose_bounty(d: u32, ) -> Weight { + (64_778_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn approve_bounty() -> Weight { + (18_293_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn propose_curator() -> Weight { + (14_248_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn unassign_curator() -> Weight { + (52_100_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn accept_curator() -> Weight { + (52_564_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn award_bounty() -> Weight { + (37_426_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn claim_bounty() -> Weight { + (176_077_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(5 as Weight)) + } + fn close_bounty_proposed() -> Weight { + (51_162_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + fn close_bounty_active() -> Weight { + (116_907_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn extend_bounty_expiry() -> Weight { + (36_419_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn spend_funds(b: u32, ) -> Weight { + (7_562_000 as Weight) + // Standard Error: 16_000 + .saturating_add((77_328_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(b as Weight))) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(b as Weight))) + } +} diff --git a/runtime/kusama/src/weights/pallet_tips.rs b/runtime/kusama/src/weights/pallet_tips.rs new file mode 100644 index 0000000000..1f1a59faba --- /dev/null +++ b/runtime/kusama/src/weights/pallet_tips.rs @@ -0,0 +1,77 @@ +// This file is part of Substrate. + +// Copyright (C) 2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for pallet_tips +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-11-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 + +// Executed Command: +// target/release/substrate +// benchmark +// --chain=dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_tips +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./frame/tips/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_tips using the Substrate node and recommended hardware. +pub struct WeightInfo(PhantomData); +impl pallet_tips::WeightInfo for WeightInfo { + fn report_awesome(r: u32, ) -> Weight { + (70_338_000 as Weight) + .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn retract_tip() -> Weight { + (59_051_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn tip_new(r: u32, t: u32, ) -> Weight { + (41_984_000 as Weight) + .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) + .saturating_add((180_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn tip(t: u32, ) -> Weight { + (33_313_000 as Weight) + .saturating_add((700_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn close_tip(t: u32, ) -> Weight { + (110_781_000 as Weight) + .saturating_add((364_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } +} diff --git a/runtime/kusama/src/weights/pallet_treasury.rs b/runtime/kusama/src/weights/pallet_treasury.rs index 73e1b6a82a..43ed53f898 100644 --- a/runtime/kusama/src/weights/pallet_treasury.rs +++ b/runtime/kusama/src/weights/pallet_treasury.rs @@ -44,123 +44,26 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { fn propose_spend() -> Weight { - (53_899_000 as Weight) + (55_957_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn reject_proposal() -> Weight { - (84_208_000 as Weight) + (45_616_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn approve_proposal() -> Weight { - (11_576_000 as Weight) + (13_362_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } - fn report_awesome(r: u32, ) -> Weight { - (66_679_000 as Weight) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn retract_tip() -> Weight { - (56_703_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn tip_new(r: u32, t: u32, ) -> Weight { - (42_139_000 as Weight) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - // Standard Error: 0 - .saturating_add((144_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn tip(t: u32, ) -> Weight { - (27_980_000 as Weight) - // Standard Error: 1_000 - .saturating_add((691_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - fn close_tip(t: u32, ) -> Weight { - (105_039_000 as Weight) - // Standard Error: 0 - .saturating_add((360_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - } - fn propose_bounty(d: u32, ) -> Weight { - (57_452_000 as Weight) - // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - } - fn approve_bounty() -> Weight { - (15_509_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn propose_curator() -> Weight { - (12_403_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - fn unassign_curator() -> Weight { - (68_535_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn accept_curator() -> Weight { - (48_001_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn award_bounty() -> Weight { - (33_291_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - fn claim_bounty() -> Weight { - (159_266_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) - } - fn close_bounty_proposed() -> Weight { - (67_667_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - } - fn close_bounty_active() -> Weight { - (105_482_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - } - fn extend_bounty_expiry() -> Weight { - (32_502_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } fn on_initialize_proposals(p: u32, ) -> Weight { - (108_437_000 as Weight) - // Standard Error: 16_000 - .saturating_add((70_932_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) + (74_689_000 as Weight) + .saturating_add((71_943_000 as Weight).saturating_mul(p as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(p as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(p as Weight))) } - fn on_initialize_bounties(b: u32, ) -> Weight { - (105_767_000 as Weight) - // Standard Error: 17_000 - .saturating_add((70_197_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(b as Weight))) - } } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 5a4a71a315..f13b4b0069 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -34,6 +34,7 @@ pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", pallet-authorship = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-bounties = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -58,6 +59,7 @@ pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", frame-system = {git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-tips = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-vesting = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -104,6 +106,7 @@ std = [ "frame-support/std", "pallet-authorship/std", "pallet-balances/std", + "pallet-bounties/std", "pallet-transaction-payment/std", "pallet-transaction-payment-rpc-runtime-api/std", "pallet-collective/std", @@ -128,6 +131,7 @@ std = [ "frame-system-rpc-runtime-api/std", "pallet-timestamp/std", "pallet-treasury/std", + "pallet-tips/std", "sp-version/std", "serde_derive", "serde/std", @@ -161,6 +165,8 @@ runtime-benchmarks = [ "pallet-staking/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", "pallet-treasury/runtime-benchmarks", + "pallet-bounties/runtime-benchmarks", + "pallet-tips/runtime-benchmarks", "pallet-utility/runtime-benchmarks", "pallet-vesting/runtime-benchmarks", "pallet-offences-benchmarking", diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 5721ef40cc..872a11fc58 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -123,7 +123,8 @@ impl Filter for BaseFilter { Call::Session(_) | Call::Grandpa(_) | Call::ImOnline(_) | Call::AuthorityDiscovery(_) | Call::Utility(_) | Call::Claims(_) | Call::Vesting(_) | - Call::Identity(_) | Call::Proxy(_) | Call::Multisig(_) + Call::Identity(_) | Call::Proxy(_) | Call::Multisig(_) | + Call::Bounties(_) | Call::Tips(_) => true, } } @@ -605,25 +606,38 @@ impl pallet_treasury::Config for Runtime { type Currency = Balances; type ApproveOrigin = ApproveOrigin; type RejectOrigin = MoreThanHalfCouncil; - type Tippers = ElectionsPhragmen; - type TipCountdown = TipCountdown; - type TipFindersFee = TipFindersFee; - type TipReportDepositBase = TipReportDepositBase; - type DataDepositPerByte = DataDepositPerByte; type Event = Event; type OnSlash = Treasury; type ProposalBond = ProposalBond; type ProposalBondMinimum = ProposalBondMinimum; type SpendPeriod = SpendPeriod; type Burn = Burn; + type BurnDestination = (); + type SpendFunds = Bounties; + type WeightInfo = weights::pallet_treasury::WeightInfo; +} + +impl pallet_bounties::Config for Runtime { + type Event = Event; type BountyDepositBase = BountyDepositBase; type BountyDepositPayoutDelay = BountyDepositPayoutDelay; type BountyUpdatePeriod = BountyUpdatePeriod; - type MaximumReasonLength = MaximumReasonLength; type BountyCuratorDeposit = BountyCuratorDeposit; type BountyValueMinimum = BountyValueMinimum; - type BurnDestination = (); - type WeightInfo = weights::pallet_treasury::WeightInfo; + type DataDepositPerByte = DataDepositPerByte; + type MaximumReasonLength = MaximumReasonLength; + type WeightInfo = weights::pallet_bounties::WeightInfo; +} + +impl pallet_tips::Config for Runtime { + type Event = Event; + type DataDepositPerByte = DataDepositPerByte; + type MaximumReasonLength = MaximumReasonLength; + type Tippers = ElectionsPhragmen; + type TipCountdown = TipCountdown; + type TipFindersFee = TipFindersFee; + type TipReportDepositBase = TipReportDepositBase; + type WeightInfo = weights::pallet_tips::WeightInfo; } parameter_types! { @@ -864,6 +878,8 @@ impl InstanceFilter for ProxyType { Call::ElectionsPhragmen(..) | Call::TechnicalMembership(..) | Call::Treasury(..) | + Call::Bounties(..) | + Call::Tips(..) | Call::Claims(..) | Call::Vesting(pallet_vesting::Call::vest(..)) | Call::Vesting(pallet_vesting::Call::vest_other(..)) | @@ -879,6 +895,8 @@ impl InstanceFilter for ProxyType { Call::TechnicalCommittee(..) | Call::ElectionsPhragmen(..) | Call::Treasury(..) | + Call::Bounties(..) | + Call::Tips(..) | Call::Utility(..) ), ProxyType::Staking => matches!(c, @@ -969,7 +987,7 @@ construct_runtime! { TechnicalCommittee: pallet_collective::::{Module, Call, Storage, Origin, Event, Config} = 16, ElectionsPhragmen: pallet_elections_phragmen::{Module, Call, Storage, Event, Config} = 17, TechnicalMembership: pallet_membership::::{Module, Call, Storage, Event, Config} = 18, - Treasury: pallet_treasury::{Module, Call, Storage, Event} = 19, + Treasury: pallet_treasury::{Module, Call, Storage, Config, Event} = 19, // Claims. Usable initially. Claims: claims::{Module, Call, Storage, Event, Config, ValidateUnsigned} = 24, @@ -986,6 +1004,13 @@ construct_runtime! { // Multisig dispatch. Late addition. Multisig: pallet_multisig::{Module, Call, Storage, Event} = 30, + + // Bounties module. + Bounties: pallet_bounties::{Module, Call, Storage, Event} = 34, + + // Tips module. + Tips: pallet_tips::{Module, Call, Storage, Event} = 35, + } } @@ -1301,6 +1326,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, claims, Claims); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); + add_benchmark!(params, batches, pallet_bounties, Bounties); add_benchmark!(params, batches, pallet_collective, Council); add_benchmark!(params, batches, pallet_democracy, Democracy); add_benchmark!(params, batches, pallet_elections_phragmen, ElectionsPhragmen); @@ -1315,6 +1341,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, pallet_staking, Staking); add_benchmark!(params, batches, frame_system, SystemBench::); add_benchmark!(params, batches, pallet_timestamp, Timestamp); + add_benchmark!(params, batches, pallet_tips, Tips); add_benchmark!(params, batches, pallet_treasury, Treasury); add_benchmark!(params, batches, pallet_utility, Utility); add_benchmark!(params, batches, pallet_vesting, Vesting); diff --git a/runtime/polkadot/src/weights/mod.rs b/runtime/polkadot/src/weights/mod.rs index 19269d0261..0411000b1c 100644 --- a/runtime/polkadot/src/weights/mod.rs +++ b/runtime/polkadot/src/weights/mod.rs @@ -32,3 +32,5 @@ pub mod pallet_timestamp; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; +pub mod pallet_bounties; +pub mod pallet_tips; diff --git a/runtime/polkadot/src/weights/pallet_bounties.rs b/runtime/polkadot/src/weights/pallet_bounties.rs new file mode 100644 index 0000000000..75756c905f --- /dev/null +++ b/runtime/polkadot/src/weights/pallet_bounties.rs @@ -0,0 +1,109 @@ +// This file is part of Substrate. + +// Copyright (C) 2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for pallet_bounties +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-11-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 + +// Executed Command: +// target/release/substrate +// benchmark +// --chain=dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_bounties +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./frame/bounties/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs + + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_bounties using the Substrate node and recommended hardware. +pub struct WeightInfo(PhantomData); +impl pallet_bounties::WeightInfo for WeightInfo { + fn propose_bounty(d: u32, ) -> Weight { + (64_778_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn approve_bounty() -> Weight { + (18_293_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn propose_curator() -> Weight { + (14_248_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn unassign_curator() -> Weight { + (52_100_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn accept_curator() -> Weight { + (52_564_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn award_bounty() -> Weight { + (37_426_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn claim_bounty() -> Weight { + (176_077_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(5 as Weight)) + } + fn close_bounty_proposed() -> Weight { + (51_162_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + fn close_bounty_active() -> Weight { + (116_907_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn extend_bounty_expiry() -> Weight { + (36_419_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn spend_funds(b: u32, ) -> Weight { + (7_562_000 as Weight) + // Standard Error: 16_000 + .saturating_add((77_328_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(b as Weight))) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(b as Weight))) + } +} diff --git a/runtime/polkadot/src/weights/pallet_tips.rs b/runtime/polkadot/src/weights/pallet_tips.rs new file mode 100644 index 0000000000..d9689abb05 --- /dev/null +++ b/runtime/polkadot/src/weights/pallet_tips.rs @@ -0,0 +1,78 @@ +// This file is part of Substrate. + +// Copyright (C) 2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for pallet_tips +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-11-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 + +// Executed Command: +// target/release/substrate +// benchmark +// --chain=dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_tips +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./frame/tips/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs + + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_tips using the Substrate node and recommended hardware. +pub struct WeightInfo(PhantomData); +impl pallet_tips::WeightInfo for WeightInfo { + fn report_awesome(r: u32, ) -> Weight { + (70_338_000 as Weight) + .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn retract_tip() -> Weight { + (59_051_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn tip_new(r: u32, t: u32, ) -> Weight { + (41_984_000 as Weight) + .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) + .saturating_add((180_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn tip(t: u32, ) -> Weight { + (33_313_000 as Weight) + .saturating_add((700_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn close_tip(t: u32, ) -> Weight { + (110_781_000 as Weight) + .saturating_add((364_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } +} diff --git a/runtime/polkadot/src/weights/pallet_treasury.rs b/runtime/polkadot/src/weights/pallet_treasury.rs index 1075855224..6ab5b0e545 100644 --- a/runtime/polkadot/src/weights/pallet_treasury.rs +++ b/runtime/polkadot/src/weights/pallet_treasury.rs @@ -44,123 +44,26 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_treasury::WeightInfo for WeightInfo { fn propose_spend() -> Weight { - (54_574_000 as Weight) + (55_957_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn reject_proposal() -> Weight { - (85_554_000 as Weight) + (45_616_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn approve_proposal() -> Weight { - (11_791_000 as Weight) + (13_362_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } - fn report_awesome(r: u32, ) -> Weight { - (67_174_000 as Weight) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn retract_tip() -> Weight { - (56_466_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn tip_new(r: u32, t: u32, ) -> Weight { - (42_193_000 as Weight) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - // Standard Error: 0 - .saturating_add((149_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn tip(t: u32, ) -> Weight { - (28_405_000 as Weight) - // Standard Error: 1_000 - .saturating_add((705_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - fn close_tip(t: u32, ) -> Weight { - (106_075_000 as Weight) - // Standard Error: 0 - .saturating_add((361_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - } - fn propose_bounty(d: u32, ) -> Weight { - (58_025_000 as Weight) - // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - } - fn approve_bounty() -> Weight { - (15_338_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn propose_curator() -> Weight { - (12_080_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - fn unassign_curator() -> Weight { - (69_557_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn accept_curator() -> Weight { - (47_745_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - } - fn award_bounty() -> Weight { - (33_468_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - fn claim_bounty() -> Weight { - (161_390_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) - } - fn close_bounty_proposed() -> Weight { - (68_016_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - } - fn close_bounty_active() -> Weight { - (106_292_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - } - fn extend_bounty_expiry() -> Weight { - (32_515_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } fn on_initialize_proposals(p: u32, ) -> Weight { - (72_159_000 as Weight) - // Standard Error: 26_000 - .saturating_add((72_167_000 as Weight).saturating_mul(p as Weight)) + (74_689_000 as Weight) + .saturating_add((71_943_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(p as Weight))) .saturating_add(T::DbWeight::get().writes(2 as Weight)) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(p as Weight))) } - fn on_initialize_bounties(b: u32, ) -> Weight { - (66_526_000 as Weight) - // Standard Error: 18_000 - .saturating_add((71_398_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(b as Weight))) - } } -- GitLab From 782cf44738fdfd27e693f294dace1af126fbbc3b Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Wed, 16 Dec 2020 17:34:26 +0100 Subject: [PATCH 118/203] Add logging to collation-generation (#2121) Right now if the collation is not happening one will have to sprinkle log statements and then recompile the code. It's doubly annoying if that happens when working with Cumulus: that means one has to resort to .cargo/config's `paths` or `diener`, which both are not ideal. This just adds some verbose logging to save the investigators some time when looking why the collations are not happening --- node/collation-generation/src/lib.rs | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index b3e62cdf1c..0b2b714c6b 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -202,7 +202,7 @@ async fn handle_new_activations( let availability_cores = availability_cores??; let n_validators = validators??.len(); - for core in availability_cores { + for (core_idx, core) in availability_cores.into_iter().enumerate() { let _availability_core_timer = metrics.time_new_activations_availability_core(); let (scheduled_core, assumption) = match core { @@ -211,12 +211,33 @@ async fn handle_new_activations( } CoreState::Occupied(_occupied_core) => { // TODO: https://github.com/paritytech/polkadot/issues/1573 + tracing::trace!( + target: LOG_TARGET, + core_idx = %core_idx, + relay_parent = ?relay_parent, + "core is occupied. Keep going.", + ); continue; } - _ => continue, + CoreState::Free => { + tracing::trace!( + target: LOG_TARGET, + core_idx = %core_idx, + "core is free. Keep going.", + ); + continue + } }; if scheduled_core.para_id != config.para_id { + tracing::trace!( + target: LOG_TARGET, + core_idx = %core_idx, + relay_parent = ?relay_parent, + our_para = %config.para_id, + their_para = %scheduled_core.para_id, + "core is not assigned to our para. Keep going.", + ); continue; } @@ -233,7 +254,17 @@ async fn handle_new_activations( .await?? { Some(v) => v, - None => continue, + None => { + tracing::trace!( + target: LOG_TARGET, + core_idx = %core_idx, + relay_parent = ?relay_parent, + our_para = %config.para_id, + their_para = %scheduled_core.para_id, + "validation data is not available", + ); + continue + } }; let task_config = config.clone(); -- GitLab From dd9ad157032d15467e077f687a5a31737d4d2f74 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 16 Dec 2020 11:28:46 -0600 Subject: [PATCH 119/203] Reward validators for participating in parachains (#2089) * plumbing for rewarding backers * give validators reward points for participating * fix tests * add bitfield rewarding * add mocks for backing rewards * add testing for backing & availability rewards * implement RewardValidators on top of staking * add to test-runtime and rococo * add to test-runtime & rococo * point to source on rewards values * fix common tests * do not reward availability anymore --- .../src/runtime/inclusion.md | 2 + runtime/common/src/paras_registrar.rs | 10 +- runtime/parachains/src/inclusion.rs | 96 ++++++++++++++++++- runtime/parachains/src/lib.rs | 1 + runtime/parachains/src/mock.rs | 45 ++++++++- runtime/parachains/src/reward_points.rs | 55 +++++++++++ runtime/rococo/src/lib.rs | 2 + runtime/test-runtime/src/lib.rs | 2 + 8 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 runtime/parachains/src/reward_points.rs diff --git a/roadmap/implementers-guide/src/runtime/inclusion.md b/roadmap/implementers-guide/src/runtime/inclusion.md index f2d9f21422..7433d51b96 100644 --- a/roadmap/implementers-guide/src/runtime/inclusion.md +++ b/roadmap/implementers-guide/src/runtime/inclusion.md @@ -17,6 +17,7 @@ struct CandidatePendingAvailability { descriptor: CandidateDescriptor, availability_votes: Bitfield, // one bit per validator. relay_parent_number: BlockNumber, // number of the relay-parent. + backers: Bitfield, // one bit per validator, set for those who backed the candidate. backed_in_number: BlockNumber, } ``` @@ -77,6 +78,7 @@ All failed checks should lead to an unrecoverable error making the block invalid * `enact_candidate(relay_parent_number: BlockNumber, CommittedCandidateReceipt)`: 1. If the receipt contains a code upgrade, Call `Paras::schedule_code_upgrade(para_id, code, relay_parent_number + config.validationl_upgrade_delay)`. > TODO: Note that this is safe as long as we never enact candidates where the relay parent is across a session boundary. In that case, which we should be careful to avoid with contextual execution, the configuration might have changed and the para may de-sync from the host's understanding of it. + 1. Reward all backing validators of each candidate, contained within the `backers` field. 1. call `Ump::enact_upward_messages` for each backed candidate, using the [`UpwardMessage`s](../types/messages.md#upward-message) from the [`CandidateCommitments`](../types/candidate.md#candidate-commitments). 1. call `Dmp::prune_dmq` with the para id of the candidate and the candidate's `processed_downward_messages`. 1. call `Hrmp::prune_hrmp` with the para id of the candiate and the candidate's `hrmp_watermark`. diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index a813f07060..55facc5d3c 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -262,7 +262,7 @@ mod tests { }, testing::{UintAuthorityId, TestXt}, Perbill, curve::PiecewiseLinear, }; use primitives::v1::{ - Balance, BlockNumber, Header, Signature, AuthorityDiscoveryId, + Balance, BlockNumber, Header, Signature, AuthorityDiscoveryId, ValidatorIndex, }; use frame_system::limits; use frame_support::{ @@ -472,8 +472,16 @@ mod tests { impl configuration::Config for Test { } + pub struct TestRewardValidators; + + impl inclusion::RewardValidators for TestRewardValidators { + fn reward_backing(_: impl IntoIterator) { } + fn reward_bitfields(_: impl IntoIterator) { } + } + impl inclusion::Config for Test { type Event = (); + type RewardValidators = TestRewardValidators; } impl session_info::AuthorityDiscoveryConfig for Test { diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 0b05f78064..47bf111f4c 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -62,6 +62,8 @@ pub struct CandidatePendingAvailability { descriptor: CandidateDescriptor, /// The received availability votes. One bit per validator. availability_votes: BitVec, + /// The backers of the candidate pending availability. + backers: BitVec, /// The block number of the relay-parent of the receipt. relay_parent_number: N, /// The block number of the relay-chain block this was backed in. @@ -85,6 +87,16 @@ impl CandidatePendingAvailability { } } +/// A hook for applying validator rewards +pub trait RewardValidators { + // Reward the validators with the given indices for issuing backing statements. + fn reward_backing(validators: impl IntoIterator); + // Reward the validators with the given indices for issuing availability bitfields. + // Validators are sent to this hook when they have contributed to the availability + // of a candidate by setting a bit in their bitfield. + fn reward_bitfields(validators: impl IntoIterator); +} + pub trait Config: frame_system::Config + paras::Config @@ -94,6 +106,7 @@ pub trait Config: + configuration::Config { type Event: From> + Into<::Event>; + type RewardValidators: RewardValidators; } decl_storage! { @@ -341,6 +354,8 @@ impl Module { Self::enact_candidate( pending_availability.relay_parent_number, receipt, + pending_availability.backers, + pending_availability.availability_votes, ); freed_cores.push(pending_availability.core); @@ -375,9 +390,9 @@ impl Module { let check_cx = CandidateCheckContext::::new(); // do all checks before writing storage. - let core_indices = { + let core_indices_and_backers = { let mut skip = 0; - let mut core_indices = Vec::with_capacity(candidates.len()); + let mut core_indices_and_backers = Vec::with_capacity(candidates.len()); let mut last_core = None; let mut check_assignment_in_order = |assignment: &CoreAssignment| -> DispatchResult { @@ -408,6 +423,7 @@ impl Module { 'a: for (candidate_idx, candidate) in candidates.iter().enumerate() { let para_id = candidate.descriptor().para_id; + let mut backers = bitvec::bitvec![BitOrderLsb0, u8; 0; validators.len()]; // we require that the candidate is in the context of the parent block. ensure!( @@ -504,9 +520,19 @@ impl Module { ), Err(()) => { Err(Error::::InvalidBacking)?; } } + + for (bit_idx, _) in candidate + .validator_indices.iter() + .enumerate().filter(|(_, signed)| **signed) + { + let val_idx = group_vals.get(bit_idx) + .expect("this query done above; qed"); + + backers.set(*val_idx as _, true); + } } - core_indices.push(assignment.core); + core_indices_and_backers.push((assignment.core, backers)); continue 'a; } } @@ -525,11 +551,12 @@ impl Module { check_assignment_in_order(assignment)?; } - core_indices + core_indices_and_backers }; // one more sweep for actually writing to storage. - for (candidate, core) in candidates.into_iter().zip(core_indices.iter().cloned()) { + let core_indices = core_indices_and_backers.iter().map(|&(ref c, _)| c.clone()).collect(); + for (candidate, (core, backers)) in candidates.into_iter().zip(core_indices_and_backers) { let para_id = candidate.descriptor().para_id; // initialize all availability votes to 0. @@ -551,6 +578,7 @@ impl Module { descriptor, availability_votes, relay_parent_number: check_cx.relay_parent_number, + backers, backed_in_number: check_cx.now, }); ::insert(¶_id, commitments); @@ -589,11 +617,23 @@ impl Module { fn enact_candidate( relay_parent_number: T::BlockNumber, receipt: CommittedCandidateReceipt, + backers: BitVec, + availability_votes: BitVec, ) -> Weight { let plain = receipt.to_plain(); let commitments = receipt.commitments; let config = >::config(); + T::RewardValidators::reward_backing(backers.iter().enumerate() + .filter(|(_, backed)| **backed) + .map(|(i, _)| i as _) + ); + + T::RewardValidators::reward_bitfields(availability_votes.iter().enumerate() + .filter(|(_, voted)| **voted) + .map(|(i, _)| i as _) + ); + // initial weight is config read. let mut weight = T::DbWeight::get().reads_writes(1, 0); if let Some(new_code) = commitments.new_validation_code { @@ -690,6 +730,8 @@ impl Module { Self::enact_candidate( pending.relay_parent_number, candidate, + pending.backers, + pending.availability_votes, ); } } @@ -988,6 +1030,18 @@ mod tests { bitvec::bitvec![BitOrderLsb0, u8; 0; Validators::get().len()] } + fn default_backing_bitfield() -> BitVec { + bitvec::bitvec![BitOrderLsb0, u8; 0; Validators::get().len()] + } + + fn backing_bitfield(v: &[usize]) -> BitVec { + let mut b = default_backing_bitfield(); + for i in v { + b.set(*i, true); + } + b + } + fn validator_pubkeys(val_ids: &[Sr25519Keyring]) -> Vec { val_ids.iter().map(|v| v.public().into()).collect() } @@ -1062,6 +1116,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 0, backed_in_number: 0, + backers: default_backing_bitfield(), }); PendingAvailabilityCommitments::insert(chain_a, default_candidate.commitments.clone()); @@ -1071,6 +1126,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 0, backed_in_number: 0, + backers: default_backing_bitfield(), }); PendingAvailabilityCommitments::insert(chain_b, default_candidate.commitments); @@ -1234,6 +1290,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 0, backed_in_number: 0, + backers: default_backing_bitfield(), }); PendingAvailabilityCommitments::insert(chain_a, default_candidate.commitments); @@ -1268,6 +1325,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 0, backed_in_number: 0, + backers: default_backing_bitfield(), }); *bare_bitfield.0.get_mut(0).unwrap() = true; @@ -1339,6 +1397,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 0, backed_in_number: 0, + backers: backing_bitfield(&[3, 4]), }); PendingAvailabilityCommitments::insert(chain_a, candidate_a.commitments); @@ -1354,6 +1413,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 0, backed_in_number: 0, + backers: backing_bitfield(&[0, 2]), }); PendingAvailabilityCommitments::insert(chain_b, candidate_b.commitments); @@ -1424,6 +1484,25 @@ mod tests { // and check that chain head was enacted. assert_eq!(Paras::para_head(&chain_a), Some(vec![1, 2, 3, 4].into())); + + // Check that rewards are applied. + { + let rewards = crate::mock::availability_rewards(); + + assert_eq!(rewards.len(), 4); + assert_eq!(rewards.get(&0).unwrap(), &1); + assert_eq!(rewards.get(&1).unwrap(), &1); + assert_eq!(rewards.get(&2).unwrap(), &1); + assert_eq!(rewards.get(&3).unwrap(), &1); + } + + { + let rewards = crate::mock::backing_rewards(); + + assert_eq!(rewards.len(), 2); + assert_eq!(rewards.get(&3).unwrap(), &1); + assert_eq!(rewards.get(&4).unwrap(), &1); + } }); } @@ -1764,6 +1843,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 3, backed_in_number: 4, + backers: default_backing_bitfield(), }); ::insert(&chain_a, candidate.commitments); @@ -2051,6 +2131,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, backed_in_number: System::block_number(), + backers: backing_bitfield(&[0, 1]), }) ); assert_eq!( @@ -2066,6 +2147,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, backed_in_number: System::block_number(), + backers: backing_bitfield(&[2, 3]), }) ); assert_eq!( @@ -2081,6 +2163,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, backed_in_number: System::block_number(), + backers: backing_bitfield(&[4]), }) ); assert_eq!( @@ -2175,6 +2258,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, backed_in_number: System::block_number(), + backers: backing_bitfield(&[0, 1, 2]), }) ); assert_eq!( @@ -2249,6 +2333,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 5, backed_in_number: 6, + backers: default_backing_bitfield(), }); ::insert(&chain_a, candidate.commitments.clone()); @@ -2258,6 +2343,7 @@ mod tests { availability_votes: default_availability_votes(), relay_parent_number: 6, backed_in_number: 7, + backers: default_backing_bitfield(), }); ::insert(&chain_b, candidate.commitments); diff --git a/runtime/parachains/src/lib.rs b/runtime/parachains/src/lib.rs index dfdf0be285..f7cf7cf335 100644 --- a/runtime/parachains/src/lib.rs +++ b/runtime/parachains/src/lib.rs @@ -33,6 +33,7 @@ pub mod origin; pub mod dmp; pub mod ump; pub mod hrmp; +pub mod reward_points; pub mod runtime_api_impl; diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 0481c1941f..ee9cc2a063 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -21,11 +21,13 @@ use sp_core::H256; use sp_runtime::traits::{ BlakeTwo256, IdentityLookup, }; -use primitives::v1::{AuthorityDiscoveryId, BlockNumber, Header}; +use primitives::v1::{AuthorityDiscoveryId, BlockNumber, Header, ValidatorIndex}; use frame_support::{ impl_outer_origin, impl_outer_dispatch, impl_outer_event, parameter_types, traits::Randomness as RandomnessT, }; +use std::cell::RefCell; +use std::collections::HashMap; use crate::inclusion; use crate as parachains; @@ -114,6 +116,7 @@ impl crate::scheduler::Config for Test { } impl crate::inclusion::Config for Test { type Event = TestEvent; + type RewardValidators = TestRewardValidators; } impl crate::session_info::Config for Test { } @@ -124,6 +127,43 @@ impl crate::session_info::AuthorityDiscoveryConfig for Test { } } +thread_local! { + pub static BACKING_REWARDS: RefCell> + = RefCell::new(HashMap::new()); + + pub static AVAILABILITY_REWARDS: RefCell> + = RefCell::new(HashMap::new()); +} + +pub fn backing_rewards() -> HashMap { + BACKING_REWARDS.with(|r| r.borrow().clone()) +} + +pub fn availability_rewards() -> HashMap { + AVAILABILITY_REWARDS.with(|r| r.borrow().clone()) +} + +pub struct TestRewardValidators; + +impl inclusion::RewardValidators for TestRewardValidators { + fn reward_backing(v: impl IntoIterator) { + BACKING_REWARDS.with(|r| { + let mut r = r.borrow_mut(); + for i in v { + *r.entry(i).or_insert(0) += 1; + } + }) + } + fn reward_bitfields(v: impl IntoIterator) { + AVAILABILITY_REWARDS.with(|r| { + let mut r = r.borrow_mut(); + for i in v { + *r.entry(i).or_insert(0) += 1; + } + }) + } +} + pub type System = frame_system::Module; /// Mocked initializer. @@ -155,6 +195,9 @@ pub type SessionInfo = crate::session_info::Module; /// Create a new set of test externalities. pub fn new_test_ext(state: GenesisConfig) -> TestExternalities { + BACKING_REWARDS.with(|r| r.borrow_mut().clear()); + AVAILABILITY_REWARDS.with(|r| r.borrow_mut().clear()); + let mut t = state.system.build_storage::().unwrap(); state.configuration.assimilate_storage(&mut t).unwrap(); state.paras.assimilate_storage(&mut t).unwrap(); diff --git a/runtime/parachains/src/reward_points.rs b/runtime/parachains/src/reward_points.rs new file mode 100644 index 0000000000..7ff208d6d1 --- /dev/null +++ b/runtime/parachains/src/reward_points.rs @@ -0,0 +1,55 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! An implementation of the `RewardValidators` trait used by `inclusion` that employs +//! `pallet-staking` to compute the rewards. +//! +//! Based on https://w3f-research.readthedocs.io/en/latest/polkadot/Token%20Economics.html +//! which doesn't currently mention availability bitfields. As such, we don't reward them +//! for the time being, although we will build schemes to do so in the future. + +use primitives::v1::ValidatorIndex; +use pallet_staking::SessionInterface; + +/// The amount of era points given by backing a candidate that is included. +pub const BACKING_POINTS: u32 = 20; + +/// Rewards validators for participating in parachains with era points in pallet-staking. +pub struct RewardValidatorsWithEraPoints(sp_std::marker::PhantomData); + +fn reward_by_indices(points: u32, indices: I) where + C: pallet_staking::Config, + I: IntoIterator +{ + // Fetch the validators from the _session_ because sessions are offset from eras + // and we are rewarding for behavior in current session. + let validators = C::SessionInterface::validators(); + let rewards = indices.into_iter() + .filter_map(|i| validators.get(i as usize).map(|v| v.clone())) + .map(|v| (v, points)); + + >::reward_by_ids(rewards); +} + +impl crate::inclusion::RewardValidators for RewardValidatorsWithEraPoints + where C: pallet_staking::Config +{ + fn reward_backing(validators: impl IntoIterator) { + reward_by_indices::(BACKING_POINTS, validators); + } + + fn reward_bitfields(_validators: impl IntoIterator) { } +} diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index da437e71c0..f2a6732006 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -78,6 +78,7 @@ use runtime_parachains::dmp as parachains_dmp; use runtime_parachains::ump as parachains_ump; use runtime_parachains::hrmp as parachains_hrmp; use runtime_parachains::scheduler as parachains_scheduler; +use runtime_parachains::reward_points::RewardValidatorsWithEraPoints; pub use pallet_balances::Call as BalancesCall; pub use pallet_staking::StakerStatus; @@ -538,6 +539,7 @@ impl parachains_configuration::Config for Runtime {} impl parachains_inclusion::Config for Runtime { type Event = Event; + type RewardValidators = RewardValidatorsWithEraPoints; } impl parachains_paras::Config for Runtime { diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 82eb754a3f..7d68a6f69c 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -73,6 +73,7 @@ use frame_support::{ use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; use pallet_session::historical as session_historical; +use polkadot_runtime_parachains::reward_points::RewardValidatorsWithEraPoints; #[cfg(feature = "std")] pub use pallet_staking::StakerStatus; @@ -446,6 +447,7 @@ impl parachains_configuration::Config for Runtime {} impl parachains_inclusion::Config for Runtime { type Event = Event; + type RewardValidators = RewardValidatorsWithEraPoints; } impl parachains_inclusion_inherent::Config for Runtime {} -- GitLab From 41c2e076eb35b1dd0fc3bb44eabd31df983ce65e Mon Sep 17 00:00:00 2001 From: Denis Pisarev Date: Thu, 17 Dec 2020 10:46:42 +0100 Subject: [PATCH 120/203] CI: buildah to build images (#2125) * CI: buildah to build images * CI: secure login --- .gitlab-ci.yml | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 07438a8c8f..db2b6d23d8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -227,9 +227,7 @@ generate-impl-guide: publish-docker: <<: *publish-build - image: docker:stable - services: - - docker:dind + image: quay.io/buildah/stable <<: *collect-artifacts # Don't run on releases - this is handled by the Github Action here: # .github/workflows/publish-docker-release.yml @@ -238,26 +236,29 @@ publish-docker: - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" variables: - DOCKER_HOST: tcp://localhost:2375 - DOCKER_DRIVER: overlay2 GIT_STRATEGY: none # DOCKERFILE: scripts/docker/Dockerfile - CONTAINER_IMAGE: parity/polkadot + IMAGE_NAME: docker.io/parity/polkadot script: - - test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity" - || ( echo "no docker credentials provided"; exit 1 ) - - docker login -u "$Docker_Hub_User_Parity" -p "$Docker_Hub_Pass_Parity" - - docker info + - test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity" || + ( echo "no docker credentials provided"; exit 1 ) - cd ./artifacts - - docker build + - buildah bud + --squash + --format=docker --build-arg VCS_REF="${CI_COMMIT_SHA}" --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" - --tag $CONTAINER_IMAGE:$VERSION - --tag $CONTAINER_IMAGE:$EXTRATAG . - - docker push $CONTAINER_IMAGE:$VERSION - - docker push $CONTAINER_IMAGE:$EXTRATAG + --tag "$IMAGE_NAME:$VERSION" + --tag "$IMAGE_NAME:$EXTRATAG" . + - echo "$Docker_Hub_Pass_Parity" | + buildah login --username "$Docker_Hub_User_Parity" --password-stdin docker.io + - buildah info + - buildah push + --format=v2s2 + "$IMAGE_NAME:$VERSION" + "$IMAGE_NAME:$EXTRATAG" after_script: - - docker logout + - buildah logout "$IMAGE_NAME" # only VERSION information is needed for the deployment - find ./artifacts/ -depth -not -name VERSION -not -name artifacts -delete -- GitLab From 20c3d634b65ceb1ee79426dda0191fed762627a4 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Thu, 17 Dec 2020 15:38:56 +0100 Subject: [PATCH 121/203] Improve Jaeger errors and debugging experience (#2127) * Improve Jaeger errors and debugging experience * Bind on 0.0.0.0:0 instead --- node/subsystem/src/errors.rs | 6 ------ node/subsystem/src/jaeger.rs | 12 ++++-------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/node/subsystem/src/errors.rs b/node/subsystem/src/errors.rs index 69ddd86108..243577c353 100644 --- a/node/subsystem/src/errors.rs +++ b/node/subsystem/src/errors.rs @@ -70,10 +70,4 @@ pub enum JaegerError { #[error("Missing jaeger configuration")] MissingConfiguration, - - #[error("Failed to allocate port for UDP transfer to jaeger agent")] - PortAllocationError(#[source] std::io::Error), - - #[error("Failed to send jaeger span to agent")] - SendError(#[source] std::io::Error), } diff --git a/node/subsystem/src/jaeger.rs b/node/subsystem/src/jaeger.rs index 56ba883354..849e59474d 100644 --- a/node/subsystem/src/jaeger.rs +++ b/node/subsystem/src/jaeger.rs @@ -210,20 +210,16 @@ impl Jaeger { // Spawn a background task that pulls span information and sends them on the network. spawner.spawn("jaeger-collector", Box::pin(async move { - let res = async_std::net::UdpSocket::bind("127.0.0.1:0").await - .map_err(JaegerError::PortAllocationError); - match res { + match async_std::net::UdpSocket::bind("0.0.0.0:0").await { Ok(udp_socket) => loop { let buf = traces_out.next().await; // UDP sending errors happen only either if the API is misused or in case of missing privilege. - if let Err(e) = udp_socket.send_to(&buf, jaeger_agent).await - .map_err(|e| JaegerError::SendError(e)) - { - log::trace!("Jaeger: {:?}", e); + if let Err(e) = udp_socket.send_to(&buf, jaeger_agent).await { + log::debug!(target: "jaeger", "UDP send error: {}", e); } } Err(e) => { - log::warn!("Jaeger: {:?}", e); + log::warn!(target: "jaeger", "UDP socket open error: {}", e); } } })); -- GitLab From d3a0c5713e138838e98c9e281bf1d689d0418aaa Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Thu, 17 Dec 2020 16:02:04 +0100 Subject: [PATCH 122/203] guide: minor fixes approval distribution (#2129) * guide: add missing ApprovalDistributionMessage variant * guide: deduplicate sensence --- .../node/approval/approval-distribution.md | 20 +++++++++---------- .../src/types/overseer-protocol.md | 2 ++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/roadmap/implementers-guide/src/node/approval/approval-distribution.md b/roadmap/implementers-guide/src/node/approval/approval-distribution.md index 6ded8b6db9..cdbe8299ea 100644 --- a/roadmap/implementers-guide/src/node/approval/approval-distribution.md +++ b/roadmap/implementers-guide/src/node/approval/approval-distribution.md @@ -16,11 +16,11 @@ Approval messages should always follow assignments, so we need to be able to dis 1. Is a particular assignment relevant under a given `View`? 2. Is a particular approval relevant to any assignment in a set? -It is acceptable for these two queries to yield false negatives with respect to our peers' views. For our own local view, they must not yield false negatives. When applied to our peers' views, it is acceptable for them to yield false negatives. The reason for that is that our peers' views may be beyond ours, and we are not capable of fully evaluating them. Once we have caught up, we can check again for false negatives to continue distributing. +For our own local view, these two queries must not yield false negatives. When applied to our peers' views, it is acceptable for them to yield false negatives. The reason for that is that our peers' views may be beyond ours, and we are not capable of fully evaluating them. Once we have caught up, we can check again for false negatives to continue distributing. For assignments, what we need to be checking is whether we are aware of the (block, candidate) pair that the assignment references. For approvals, we need to be aware of an assignment by the same validator which references the candidate being approved. -However, awareness on its own of a (block, candidate) pair would imply that even ancient candidates all the way back to the genesis are relevant. We are actually not interested in anything before finality. +However, awareness on its own of a (block, candidate) pair would imply that even ancient candidates all the way back to the genesis are relevant. We are actually not interested in anything before finality. ## Protocol @@ -72,7 +72,7 @@ enum ApprovalState { } /// Information about candidates in the context of a particular block they are included in. In other words, -/// multiple `CandidateEntry`s may exist for the same candidate, if it is included by multiple blocks - this is likely the case +/// multiple `CandidateEntry`s may exist for the same candidate, if it is included by multiple blocks - this is likely the case /// when there are forks. struct CandidateEntry { approvals: HashMap, @@ -97,11 +97,11 @@ Invoke `unify_with_peer(peer, view)` to catch them up to messages we have. We also need to use the `view.finalized_number` to remove the `PeerId` from any blocks that it won't be wanting information about anymore. Note that we have to be on guard for peers doing crazy stuff like jumping their 'finalized_number` forward 10 trillion blocks to try and get us stuck in a loop for ages. -One of the safeguards we can implement is to reject view updates from peers where the new `finalized_number` is less than the previous. +One of the safeguards we can implement is to reject view updates from peers where the new `finalized_number` is less than the previous. We augment that by defining `constrain(x)` to output the x bounded by the first and last numbers in `state.blocks_by_number`. -From there, we can loop backwards from `constrain(view.finalized_number)` until `constrain(last_view.finalized_number)` is reached, removing the `PeerId` from all `BlockEntry`s referenced at that height. We can break the loop early if we ever exit the bound supplied by the first block in `state.blocks_by_number`. +From there, we can loop backwards from `constrain(view.finalized_number)` until `constrain(last_view.finalized_number)` is reached, removing the `PeerId` from all `BlockEntry`s referenced at that height. We can break the loop early if we ever exit the bound supplied by the first block in `state.blocks_by_number`. #### `NetworkBridgeEvent::OurViewChange` @@ -142,15 +142,15 @@ enum MessageSource { #### `import_and_circulate_assignment(source: MessageSource, assignment: IndirectAssignmentCert, claimed_candidate_index: u32)` -Imports an assignment cert referenced by block hash and candidate index. As a postcondition, if the cert is valid, it will have distributed the cert to all peers who have the block in their view, with the exclusion of the peer referenced by the `MessageSource`. +Imports an assignment cert referenced by block hash and candidate index. As a postcondition, if the cert is valid, it will have distributed the cert to all peers who have the block in their view, with the exclusion of the peer referenced by the `MessageSource`. * Load the BlockEntry using `assignment.block_hash`. If it does not exist, report the source if it is `MessageSource::Peer` and return. - * Compute a fingerprint for the `assignment` using `claimed_candidate_index`. + * Compute a fingerprint for the `assignment` using `claimed_candidate_index`. * If the source is `MessageSource::Peer(sender)`: * check if `peer` appears under `known_by` and whether the fingerprint is in the `known_messages` of the peer. If the peer does not know the block, report for providing data out-of-view and proceed. If the peer does know the block and the knowledge contains the fingerprint, report for providing replicate data and return. * If the message fingerprint appears under the `BlockEntry`'s `Knowledge`, give the peer a small positive reputation boost and return. Note that we must do this after checking for out-of-view to avoid being spammed. If we did this check earlier, a peer could provide data out-of-view repeatedly and be rewarded for it. * Dispatch `ApprovalVotingMessage::CheckAndImportAssignment(assignment)` and wait for the response. - * If the result is `AssignmentCheckResult::Accepted` or `AssignmentCheckResult::AcceptedDuplicate` + * If the result is `AssignmentCheckResult::Accepted` or `AssignmentCheckResult::AcceptedDuplicate` * If the vote was accepted but not duplicate, give the peer a positive reputation boost * add the fingerprint to both our and the peer's knowledge in the `BlockEntry`. Note that we only doing this after making sure we have the right fingerprint. * If the result is `AssignmentCheckResult::TooFarInFuture`, mildly punish the peer and return. @@ -182,7 +182,7 @@ Imports an approval signature referenced by block hash and candidate index. * Dispatch a `ApprovalDistributionV1Message::Approval(approval)` to all peers in the `BlockEntry`'s `known_by` set, excluding the peer in the `source`, if `source` has kind `MessageSource::Peer`. Add the fingerprint of the assignment to the knowledge of each peer. Note that this obeys the politeness conditions: * We guarantee elsewhere that all peers within `known_by` are aware of all assignments relative to the block. * We've checked that this specific approval has a corresponding assignment within the `BlockEntry`. - * Thus, all peers are aware of the assignment or have a message to them in-flight which will make them so. + * Thus, all peers are aware of the assignment or have a message to them in-flight which will make them so. #### `unify_with_peer(peer: PeerId, view)`: @@ -193,4 +193,4 @@ For each block in the view: 3. Inspect the `known_by` set of the `BlockEntry`. If the peer is already present, go to step 6. 4. Add the peer to `known_by` with a cloned version of `block_entry.knowledge`. and add the hash of the block to `fresh_blocks`. 5. Return to step 2 with the ancestor of the block. - 6. For each block in `fresh_blocks`, send all assignments and approvals for all candidates in those blocks to the peer. \ No newline at end of file + 6. For each block in `fresh_blocks`, send all assignments and approvals for all candidates in those blocks to the peer. diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 44f62c3e8d..3c3456bc71 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -115,6 +115,8 @@ enum ApprovalDistributionMessage { /// valid, relevant, and the corresponding approval already issued. If not, the subsystem is free to drop /// the message. DistributeApproval(IndirectSignedApprovalVote), + /// An update from the network bridge. + NetworkBridgeUpdateV1(NetworkBridgeEvent), } ``` -- GitLab From c429e15c913ba26696a3085b9ac2eb5b30ba4cd4 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Thu, 17 Dec 2020 18:50:58 +0100 Subject: [PATCH 123/203] refactor View to include finalized_number (#2128) * refactor View to include finalized_number * guide: update the NetworkBridge on BlockFinalized * av-store: fix the tests * actually fix tests * grumbles * ignore macro doctest * use Hash::repeat_bytes more consistently * broadcast empty leaves updates as well * fix issuing view updates on empty leaves updates --- node/collation-generation/src/lib.rs | 2 +- node/core/av-store/src/lib.rs | 18 +-- node/core/av-store/src/tests.rs | 44 +----- node/core/backing/src/lib.rs | 2 +- node/core/candidate-validation/src/lib.rs | 2 +- node/core/chain-api/src/lib.rs | 2 +- node/core/runtime-api/src/lib.rs | 2 +- .../availability-distribution/src/lib.rs | 8 +- .../availability-distribution/src/tests.rs | 7 +- node/network/bitfield-distribution/src/lib.rs | 14 +- node/network/bridge/src/lib.rs | 148 ++++++++++++++---- .../collator-protocol/src/collator_side.rs | 13 +- .../collator-protocol/src/validator_side.rs | 13 +- node/network/pov-distribution/src/lib.rs | 8 +- node/network/pov-distribution/src/tests.rs | 31 ++-- node/network/protocol/src/lib.rs | 35 ++++- .../network/statement-distribution/src/lib.rs | 27 ++-- node/overseer/src/lib.rs | 11 +- node/subsystem-util/src/lib.rs | 2 +- node/subsystem/src/lib.rs | 6 +- primitives/src/v0.rs | 4 +- primitives/src/v1.rs | 6 +- .../src/node/utility/network-bridge.md | 6 +- runtime/parachains/src/inclusion.rs | 34 ++-- 24 files changed, 249 insertions(+), 196 deletions(-) diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index 0b2b714c6b..7796a967c1 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -145,7 +145,7 @@ impl CollationGenerationSubsystem { } false } - Ok(Signal(BlockFinalized(_))) => false, + Ok(Signal(BlockFinalized(..))) => false, Err(err) => { tracing::error!( target: LOG_TARGET, diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 795d89d9ee..d1d81d031c 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -538,8 +538,8 @@ where process_block_activated(ctx, &subsystem.inner, activated, &subsystem.metrics).await?; } } - FromOverseer::Signal(OverseerSignal::BlockFinalized(hash)) => { - process_block_finalized(subsystem, ctx, &subsystem.inner, hash).await?; + FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, number)) => { + process_block_finalized(subsystem, &subsystem.inner, number).await?; } FromOverseer::Communication { msg } => { process_message(subsystem, ctx, msg).await?; @@ -564,20 +564,14 @@ where /// The state of data has to be changed from /// `CandidateState::Included` to `CandidateState::Finalized` and their pruning times have /// to be updated to `now` + keep_finalized_{block, chunk}_for`. -#[tracing::instrument(level = "trace", skip(subsystem, ctx, db), fields(subsystem = LOG_TARGET))] -async fn process_block_finalized( +#[tracing::instrument(level = "trace", skip(subsystem, db), fields(subsystem = LOG_TARGET))] +async fn process_block_finalized( subsystem: &AvailabilityStoreSubsystem, - ctx: &mut Context, db: &Arc, - hash: Hash, -) -> Result<(), Error> -where - Context: SubsystemContext -{ + block_number: BlockNumber, +) -> Result<(), Error> { let _timer = subsystem.metrics.time_process_block_finalized(); - let block_number = get_block_number(ctx, hash).await?; - if let Some(mut pov_pruning) = pov_pruning(db) { // Since the records are sorted by time in which they need to be pruned and not by block // numbers we have to iterate through the whole collection here. diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index f35809a4a7..4e83e3d7f7 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -274,7 +274,7 @@ fn store_block_works() { let test_state = TestState::default(); test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; - let candidate_hash = CandidateHash(Hash::from([1; 32])); + let candidate_hash = CandidateHash(Hash::repeat_byte(1)); let validator_index = 5; let n_validators = 10; @@ -328,7 +328,7 @@ fn store_pov_and_query_chunk_works() { test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; - let candidate_hash = CandidateHash(Hash::from([1; 32])); + let candidate_hash = CandidateHash(Hash::repeat_byte(1)); let n_validators = 10; let pov = PoV { @@ -543,20 +543,9 @@ fn stored_data_kept_until_finalized() { overseer_signal( &mut virtual_overseer, - OverseerSignal::BlockFinalized(new_leaf) + OverseerSignal::BlockFinalized(new_leaf, 10) ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::BlockNumber( - hash, - tx, - )) => { - assert_eq!(hash, new_leaf); - tx.send(Ok(Some(10))).unwrap(); - } - ); - // Wait for a half of the time finalized data should be available for Delay::new(test_state.pruning_config.keep_finalized_block_for / 2).await; @@ -658,20 +647,9 @@ fn stored_chunk_kept_until_finalized() { overseer_signal( &mut virtual_overseer, - OverseerSignal::BlockFinalized(new_leaf) + OverseerSignal::BlockFinalized(new_leaf, 10) ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::BlockNumber( - hash, - tx, - )) => { - assert_eq!(hash, new_leaf); - tx.send(Ok(Some(10))).unwrap(); - } - ); - // Wait for a half of the time finalized data should be available for Delay::new(test_state.pruning_config.keep_finalized_block_for / 2).await; @@ -812,21 +790,9 @@ fn forkfullness_works() { overseer_signal( &mut virtual_overseer, - OverseerSignal::BlockFinalized(new_leaf_1) + OverseerSignal::BlockFinalized(new_leaf_1, 5) ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::BlockNumber( - hash, - tx, - )) => { - assert_eq!(hash, new_leaf_1); - tx.send(Ok(Some(5))).unwrap(); - } - ); - - // Data of both candidates should be still present in the DB. assert_eq!( query_available_data(&mut virtual_overseer, candidate_1_hash).await.unwrap(), diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 492e57dc4d..c54eef157b 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -1157,7 +1157,7 @@ mod tests { let mut head_data = HashMap::new(); head_data.insert(chain_a, HeadData(vec![4, 5, 6])); - let relay_parent = Hash::from([5; 32]); + let relay_parent = Hash::repeat_byte(5); let signing_context = SigningContext { session_index: 1, diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index 3c64f962c2..cf47b9d62e 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -95,7 +95,7 @@ async fn run( loop { match ctx.recv().await? { FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {} - FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {} + FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => {} FromOverseer::Signal(OverseerSignal::Conclude) => return Ok(()), FromOverseer::Communication { msg } => match msg { CandidateValidationMessage::ValidateFromChainState( diff --git a/node/core/chain-api/src/lib.rs b/node/core/chain-api/src/lib.rs index aa8b8ae6e9..534c41e3ef 100644 --- a/node/core/chain-api/src/lib.rs +++ b/node/core/chain-api/src/lib.rs @@ -89,7 +89,7 @@ where match ctx.recv().await? { FromOverseer::Signal(OverseerSignal::Conclude) => return Ok(()), FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {}, - FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {}, + FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => {}, FromOverseer::Communication { msg } => match msg { ChainApiMessage::BlockNumber(hash, response_channel) => { let _timer = subsystem.metrics.time_block_number(); diff --git a/node/core/runtime-api/src/lib.rs b/node/core/runtime-api/src/lib.rs index b3b8092966..97e645a428 100644 --- a/node/core/runtime-api/src/lib.rs +++ b/node/core/runtime-api/src/lib.rs @@ -152,7 +152,7 @@ async fn run( req = ctx.recv().fuse() => match req? { FromOverseer::Signal(OverseerSignal::Conclude) => return Ok(()), FromOverseer::Signal(OverseerSignal::ActiveLeaves(_)) => {}, - FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {}, + FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => {}, FromOverseer::Communication { msg } => match msg { RuntimeApiMessage::Request(relay_parent, request) => { subsystem.spawn_request(relay_parent, request); diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 203e7ef260..67d1d4ffa8 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -416,7 +416,7 @@ where .filter(|(_peer, view)| { // collect all direct interests of a peer w/o ancestors state - .cached_live_candidates_unioned(view.0.iter()) + .cached_live_candidates_unioned(view.heads.iter()) .contains_key(&candidate_hash) }) .map(|(peer, _view)| peer.clone()) @@ -619,7 +619,7 @@ where let _timer = metrics.time_process_incoming_peer_message(); // obtain the set of candidates we are interested in based on our current view - let live_candidates = state.cached_live_candidates_unioned(state.view.0.iter()); + let live_candidates = state.cached_live_candidates_unioned(state.view.heads.iter()); // check if the candidate is of interest let live_candidate = if let Some(live_candidate) = live_candidates.get(&message.candidate_hash) { @@ -707,7 +707,7 @@ where .filter(|(_peer, view)| { // peers view must contain the candidate hash too state - .cached_live_candidates_unioned(view.0.iter()) + .cached_live_candidates_unioned(view.heads.iter()) .contains_key(&message_id.0) }) .map(|(peer, _)| -> PeerId { peer.clone() }) @@ -781,7 +781,7 @@ impl AvailabilityDistributionSubsystem { })) => { // handled at view change } - FromOverseer::Signal(OverseerSignal::BlockFinalized(_)) => {} + FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => {} FromOverseer::Signal(OverseerSignal::Conclude) => { return Ok(()); } diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index b55c7a2241..3e7f0d83e4 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -17,7 +17,7 @@ use super::*; use assert_matches::assert_matches; use polkadot_erasure_coding::{branches, obtain_chunks_v1 as obtain_chunks}; -use polkadot_node_network_protocol::ObservedRole; +use polkadot_node_network_protocol::{view, ObservedRole}; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_primitives::v1::{ AvailableData, BlockData, CandidateCommitments, CandidateDescriptor, GroupIndex, @@ -33,11 +33,6 @@ use sp_application_crypto::AppKey; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use std::{sync::Arc, time::Duration}; -macro_rules! view { - ( $( $hash:expr ),* $(,)? ) => [ - View(vec![ $( $hash.clone() ),* ]) - ]; - } macro_rules! delay { ($delay:expr) => { diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index ccf5e26f43..5bd08e9e87 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -212,8 +212,8 @@ impl BitfieldDistribution { // defer the cleanup to the view change } } - FromOverseer::Signal(OverseerSignal::BlockFinalized(hash)) => { - tracing::trace!(target: LOG_TARGET, hash = %hash, "block finalized"); + FromOverseer::Signal(OverseerSignal::BlockFinalized(hash, number)) => { + tracing::trace!(target: LOG_TARGET, hash = %hash, number = %number, "block finalized"); } FromOverseer::Signal(OverseerSignal::Conclude) => { tracing::trace!(target: LOG_TARGET, "Conclude"); @@ -770,13 +770,7 @@ mod test { use std::sync::Arc; use std::time::Duration; use assert_matches::assert_matches; - use polkadot_node_network_protocol::ObservedRole; - - macro_rules! view { - ( $( $hash:expr ),* $(,)? ) => [ - View(vec![ $( $hash.clone() ),* ]) - ]; - } + use polkadot_node_network_protocol::{view, ObservedRole}; macro_rules! launch { ($fut:expr) => { @@ -833,7 +827,7 @@ mod test { let validator = SyncCryptoStore::sr25519_generate_new(&*keystore, ValidatorId::ID, None) .expect("generating sr25519 key not to fail"); - state.per_relay_parent = view.0.iter().map(|relay_parent| {( + state.per_relay_parent = view.heads.iter().map(|relay_parent| {( relay_parent.clone(), PerRelayParentData { signing_context: signing_context.clone(), diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 38cbe369ba..e294b3dc43 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_subsystem::messages::{ BitfieldDistributionMessage, PoVDistributionMessage, StatementDistributionMessage, CollatorProtocolMessage, }; -use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash}; +use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash, BlockNumber}; use polkadot_node_network_protocol::{ ObservedRole, ReputationChange, PeerId, PeerSet, View, NetworkBridgeEvent, v1 as protocol_v1 }; @@ -254,6 +254,7 @@ enum Action { ReportPeer(PeerId, ReputationChange), ActiveLeaves(ActiveLeavesUpdate), + BlockFinalized(BlockNumber), PeerConnected(PeerSet, PeerId, ObservedRole), PeerDisconnected(PeerSet, PeerId), @@ -274,6 +275,8 @@ fn action_from_overseer_message( match res { Ok(FromOverseer::Signal(OverseerSignal::ActiveLeaves(active_leaves))) => Action::ActiveLeaves(active_leaves), + Ok(FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, number))) + => Action::BlockFinalized(number), Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => Action::Abort, Ok(FromOverseer::Communication { msg }) => match msg { NetworkBridgeMessage::ReportPeer(peer, rep) => Action::ReportPeer(peer, rep), @@ -284,8 +287,6 @@ fn action_from_overseer_message( NetworkBridgeMessage::ConnectToValidators { validator_ids, connected } => Action::ConnectToValidators { validator_ids, connected }, }, - Ok(FromOverseer::Signal(OverseerSignal::BlockFinalized(_))) - => Action::Nop, Err(e) => { tracing::warn!(target: LOG_TARGET, err = ?e, "Shutting down Network Bridge due to error"); Action::Abort @@ -348,21 +349,25 @@ fn action_from_network_message(event: Option) -> Action { } } -fn construct_view(live_heads: &[Hash]) -> View { - View(live_heads.iter().rev().take(MAX_VIEW_HEADS).cloned().collect()) +fn construct_view(live_heads: &[Hash], finalized_number: BlockNumber) -> View { + View { + heads: live_heads.iter().rev().take(MAX_VIEW_HEADS).cloned().collect(), + finalized_number + } } #[tracing::instrument(level = "trace", skip(net, ctx, validation_peers, collation_peers), fields(subsystem = LOG_TARGET))] -async fn update_view( +async fn update_our_view( net: &mut impl Network, ctx: &mut impl SubsystemContext, live_heads: &[Hash], local_view: &mut View, + finalized_number: BlockNumber, validation_peers: &HashMap, collation_peers: &HashMap, ) -> SubsystemResult<()> { - let new_view = construct_view(live_heads); - if *local_view == new_view { return Ok(()) } + let new_view = construct_view(live_heads, finalized_number); + if *local_view == new_view { return Ok(()) } *local_view = new_view.clone(); @@ -413,7 +418,7 @@ async fn handle_peer_messages( for message in messages { outgoing_messages.push(match message { WireMessage::ViewUpdate(new_view) => { - if new_view.0.len() > MAX_VIEW_HEADS { + if new_view.heads.len() > MAX_VIEW_HEADS { net.report_peer( peer.clone(), MALFORMED_VIEW_COST, @@ -580,7 +585,8 @@ where // Most recent heads are at the back. let mut live_heads: Vec = Vec::with_capacity(MAX_VIEW_HEADS); - let mut local_view = View(Vec::new()); + let mut local_view = View::default(); + let mut finalized_number = 0; let mut validation_peers: HashMap = HashMap::new(); let mut collation_peers: HashMap = HashMap::new(); @@ -638,16 +644,27 @@ where live_heads.extend(activated); live_heads.retain(|h| !deactivated.contains(h)); - update_view( + update_our_view( &mut network_service, &mut ctx, &live_heads, &mut local_view, + finalized_number, &validation_peers, &collation_peers, ).await?; } + Action::BlockFinalized(number) => { + debug_assert!(finalized_number < number); + + // we don't send the view updates here, but delay them until the next `Action::ActiveLeaves` + // otherwise it might break assumptions of some of the subsystems + // that we never send the same `ActiveLeavesUpdate` + // this is fine, we will get `Action::ActiveLeaves` on block finalization anyway + finalized_number = number; + }, + Action::PeerConnected(peer_set, peer, role) => { let peer_map = match peer_set { PeerSet::Validation => &mut validation_peers, @@ -660,7 +677,7 @@ where hash_map::Entry::Occupied(_) => continue, hash_map::Entry::Vacant(vacant) => { let _ = vacant.insert(PeerData { - view: View(Vec::new()), + view: View::default(), }); match peer_set { @@ -669,7 +686,7 @@ where NetworkBridgeEvent::PeerConnected(peer.clone(), role), NetworkBridgeEvent::PeerViewChange( peer, - View(Default::default()), + View::default(), ), ], &mut ctx, @@ -679,7 +696,7 @@ where NetworkBridgeEvent::PeerConnected(peer.clone(), role), NetworkBridgeEvent::PeerViewChange( peer, - View(Default::default()), + View::default(), ), ], &mut ctx, @@ -753,6 +770,7 @@ mod tests { use polkadot_node_subsystem_test_helpers::{ SingleItemSink, SingleItemStream, TestSubsystemContextHandle, }; + use polkadot_node_network_protocol::view; use sc_network::Multiaddr; use sp_keyring::Sr25519Keyring; @@ -978,7 +996,7 @@ mod tests { ObservedRole::Full, ).await; - let hash_a = Hash::from([1; 32]); + let hash_a = Hash::repeat_byte(1); virtual_overseer.send( FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(hash_a))) @@ -986,7 +1004,7 @@ mod tests { let actions = network_handle.next_network_actions(2).await; let wire_message = WireMessage::::ViewUpdate( - View(vec![hash_a]) + view![hash_a] ).encode(); assert!(network_actions_contains( @@ -1021,7 +1039,7 @@ mod tests { network_handle.connect_peer(peer.clone(), PeerSet::Validation, ObservedRole::Full).await; - let view = View(vec![Hash::from([1u8; 32])]); + let view = view![Hash::repeat_byte(1)]; // bridge will inform about all connected peers. { @@ -1031,7 +1049,7 @@ mod tests { ).await; assert_sends_validation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1075,7 +1093,7 @@ mod tests { ).await; assert_sends_validation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1140,7 +1158,7 @@ mod tests { ).await; assert_sends_validation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1152,7 +1170,7 @@ mod tests { ).await; assert_sends_collation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1166,7 +1184,7 @@ mod tests { // to show that we're still connected on the collation protocol, send a view update. - let hash_a = Hash::from([1; 32]); + let hash_a = Hash::repeat_byte(1); virtual_overseer.send( FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(hash_a))) @@ -1174,7 +1192,7 @@ mod tests { let actions = network_handle.next_network_actions(1).await; let wire_message = WireMessage::::ViewUpdate( - View(vec![hash_a]) + view![hash_a] ).encode(); assert!(network_actions_contains( @@ -1210,7 +1228,7 @@ mod tests { ).await; assert_sends_validation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer_a.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer_a.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1222,7 +1240,7 @@ mod tests { ).await; assert_sends_collation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer_b.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer_b.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1295,7 +1313,7 @@ mod tests { ).await; assert_sends_validation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1307,13 +1325,13 @@ mod tests { ).await; assert_sends_collation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } - let view_a = View(vec![[1; 32].into()]); - let view_b = View(vec![[2; 32].into()]); + let view_a = view![Hash::repeat_byte(1)]; + let view_b = view![Hash::repeat_byte(2)]; network_handle.peer_message( peer.clone(), @@ -1339,6 +1357,74 @@ mod tests { }); } + #[test] + fn sent_views_include_finalized_number_update() { + test_harness(|test_harness| async move { + let TestHarness { mut network_handle, mut virtual_overseer } = test_harness; + + let peer_a = PeerId::random(); + + network_handle.connect_peer( + peer_a.clone(), + PeerSet::Validation, + ObservedRole::Full, + ).await; + + let hash_a = Hash::repeat_byte(1); + let hash_b = Hash::repeat_byte(2); + let hash_c = Hash::repeat_byte(3); + + virtual_overseer.send( + FromOverseer::Signal(OverseerSignal::BlockFinalized(hash_a, 1)) + ).await; + virtual_overseer.send( + FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(hash_b))) + ).await; + + let actions = network_handle.next_network_actions(1).await; + let wire_message = WireMessage::::ViewUpdate( + View { + heads: vec![hash_b], + finalized_number: 1, + } + ).encode(); + + assert!(network_actions_contains( + &actions, + &NetworkAction::WriteNotification( + peer_a.clone(), + PeerSet::Validation, + wire_message.clone(), + ), + )); + + // view updates are issued even when `ActiveLeavesUpdate` is empty + virtual_overseer.send( + FromOverseer::Signal(OverseerSignal::BlockFinalized(hash_c, 3)) + ).await; + virtual_overseer.send( + FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::default())) + ).await; + + let actions = network_handle.next_network_actions(1).await; + let wire_message = WireMessage::::ViewUpdate( + View { + heads: vec![hash_b], + finalized_number: 3, + } + ).encode(); + + assert!(network_actions_contains( + &actions, + &NetworkAction::WriteNotification( + peer_a, + PeerSet::Validation, + wire_message.clone(), + ), + )); + }); + } + #[test] fn send_messages_to_peers() { test_harness(|test_harness| async move { @@ -1360,7 +1446,7 @@ mod tests { ).await; assert_sends_validation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } @@ -1372,7 +1458,7 @@ mod tests { ).await; assert_sends_collation_event_to_all( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View::default()), &mut virtual_overseer, ).await; } diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index 60208ec8c6..ca6b1bfae0 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -714,7 +714,7 @@ pub(crate) async fn run( } }, Signal(ActiveLeaves(_update)) => {} - Signal(BlockFinalized(_)) => {} + Signal(BlockFinalized(..)) => {} Signal(Conclude) => return Ok(()), } } @@ -742,6 +742,7 @@ mod tests { use polkadot_subsystem::{ActiveLeavesUpdate, messages::{RuntimeApiMessage, RuntimeApiRequest}}; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_subsystem_testhelpers as test_helpers; + use polkadot_node_network_protocol::view; #[derive(Default)] struct TestCandidateBuilder { @@ -896,7 +897,7 @@ mod tests { overseer_send( virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(hashes)), + NetworkBridgeEvent::OurViewChange(View { heads: hashes, finalized_number: 0 }), ), ).await; } @@ -1004,7 +1005,7 @@ mod tests { overseer_send( virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])), + NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]), ), ).await; } @@ -1144,7 +1145,7 @@ mod tests { overseer_send( virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer, View(Default::default())), + NetworkBridgeEvent::PeerViewChange(peer, view![]), ), ).await; } @@ -1213,7 +1214,7 @@ mod tests { overseer_send( virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer.clone(), View(hashes)), + NetworkBridgeEvent::PeerViewChange(peer.clone(), View { heads: hashes, finalized_number: 0 }), ), ).await; } @@ -1323,7 +1324,7 @@ mod tests { CollatorProtocolMessage::NetworkBridgeUpdateV1( NetworkBridgeEvent::PeerViewChange( peer.clone(), - View(vec![test_state.relay_parent]), + view![test_state.relay_parent], ) ) ).await; diff --git a/node/network/collator-protocol/src/validator_side.rs b/node/network/collator-protocol/src/validator_side.rs index a865dc75ee..562bb9ab60 100644 --- a/node/network/collator-protocol/src/validator_side.rs +++ b/node/network/collator-protocol/src/validator_side.rs @@ -714,7 +714,7 @@ where match msg { Communication { msg } => process_msg(&mut ctx, msg, &mut state).await, - Signal(BlockFinalized(_)) => {} + Signal(BlockFinalized(..)) => {} Signal(ActiveLeaves(_)) => {} Signal(Conclude) => { break } } @@ -760,6 +760,7 @@ mod tests { use polkadot_primitives::v1::{BlockData, CollatorPair}; use polkadot_subsystem_testhelpers as test_helpers; + use polkadot_node_network_protocol::view; #[derive(Clone)] struct TestState { @@ -872,7 +873,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])) + NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) ) ).await; @@ -930,7 +931,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])) + NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) ) ).await; @@ -1021,7 +1022,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![Hash::repeat_byte(0x42)])) + NetworkBridgeEvent::OurViewChange(view![Hash::repeat_byte(0x42)]) ) ).await; @@ -1049,7 +1050,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])) + NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) ) ).await; @@ -1133,7 +1134,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View(vec![test_state.relay_parent])) + NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) ) ).await; diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index 9d8df343b2..6c882c8c00 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -197,7 +197,7 @@ async fn handle_signal( Ok(false) } - OverseerSignal::BlockFinalized(_) => Ok(false), + OverseerSignal::BlockFinalized(..) => Ok(false), } } @@ -499,7 +499,7 @@ async fn handle_awaiting( relay_parent: Hash, pov_hashes: Vec, ) { - if !state.our_view.0.contains(&relay_parent) { + if !state.our_view.contains(&relay_parent) { report_peer(ctx, peer, COST_AWAITED_NOT_IN_VIEW).await; return; } @@ -635,10 +635,10 @@ async fn handle_network_update( NetworkBridgeEvent::PeerViewChange(peer_id, view) => { if let Some(peer_state) = state.peer_state.get_mut(&peer_id) { // prune anything not in the new view. - peer_state.awaited.retain(|relay_parent, _| view.0.contains(&relay_parent)); + peer_state.awaited.retain(|relay_parent, _| view.contains(&relay_parent)); // introduce things from the new view. - for relay_parent in view.0.iter() { + for relay_parent in view.heads.iter() { if let Entry::Vacant(entry) = peer_state.awaited.entry(*relay_parent) { entry.insert(HashSet::new()); diff --git a/node/network/pov-distribution/src/tests.rs b/node/network/pov-distribution/src/tests.rs index a6358bedfd..f0fec49654 100644 --- a/node/network/pov-distribution/src/tests.rs +++ b/node/network/pov-distribution/src/tests.rs @@ -16,6 +16,7 @@ use polkadot_primitives::v1::{ use polkadot_subsystem::messages::{RuntimeApiMessage, RuntimeApiRequest}; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt; +use polkadot_node_network_protocol::view; fn make_pov(data: Vec) -> PoV { PoV { block_data: BlockData(data) } @@ -358,7 +359,7 @@ fn ask_validators_for_povs() { PoVDistributionMessage::NetworkBridgeUpdateV1( NetworkBridgeEvent::PeerViewChange( test_state.validator_peer_id[i].clone(), - View(vec![current]), + view![current], ) ) ).await; @@ -405,7 +406,7 @@ fn ask_validators_for_povs() { PoVDistributionMessage::NetworkBridgeUpdateV1( NetworkBridgeEvent::PeerViewChange( test_state.validator_peer_id[2].clone(), - View(vec![next_leaf]), + view![next_leaf], ) ) ).await; @@ -582,7 +583,7 @@ fn distributes_to_those_awaiting_and_completes_local() { s }, - our_view: View(vec![hash_a, hash_b]), + our_view: view![hash_a, hash_b], metrics: Default::default(), connection_requests: Default::default(), }; @@ -665,7 +666,7 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -839,7 +840,7 @@ fn peer_view_change_leads_to_us_informing() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -851,7 +852,7 @@ fn peer_view_change_leads_to_us_informing() { handle_network_update( &mut state, &mut ctx, - NetworkBridgeEvent::PeerViewChange(peer_a.clone(), View(vec![hash_a, hash_b])), + NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![hash_a, hash_b]), ).await; assert_matches!( @@ -912,7 +913,7 @@ fn peer_complete_fetch_and_is_rewarded() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1002,7 +1003,7 @@ fn peer_punished_for_sending_bad_pov() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1067,7 +1068,7 @@ fn peer_punished_for_sending_unexpected_pov() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1130,7 +1131,7 @@ fn peer_punished_for_sending_pov_out_of_our_view() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1190,7 +1191,7 @@ fn peer_reported_for_awaiting_too_much() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1277,7 +1278,7 @@ fn peer_reported_for_awaiting_outside_their_view() { s }, - our_view: View(vec![hash_a, hash_b]), + our_view: view![hash_a, hash_b], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1341,7 +1342,7 @@ fn peer_reported_for_awaiting_outside_our_view() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1420,7 +1421,7 @@ fn peer_complete_fetch_leads_to_us_completing_others() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1504,7 +1505,7 @@ fn peer_completing_request_no_longer_awaiting() { s }, - our_view: View(vec![hash_a]), + our_view: view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; diff --git a/node/network/protocol/src/lib.rs b/node/network/protocol/src/lib.rs index 8409a795ae..fe40e06be2 100644 --- a/node/network/protocol/src/lib.rs +++ b/node/network/protocol/src/lib.rs @@ -19,7 +19,7 @@ #![deny(unused_crate_dependencies, unused_results)] #![warn(missing_docs)] -use polkadot_primitives::v1::Hash; +use polkadot_primitives::v1::{Hash, BlockNumber}; use parity_scale_codec::{Encode, Decode}; use std::convert::TryFrom; use std::fmt; @@ -159,11 +159,32 @@ impl NetworkBridgeEvent { } } -/// A succinct representation of a peer's view. This consists of a bounded amount of chain heads. +/// A succinct representation of a peer's view. This consists of a bounded amount of chain heads +/// and the highest known finalized block number. /// /// Up to `N` (5?) chain heads. #[derive(Default, Debug, Clone, PartialEq, Eq, Encode, Decode)] -pub struct View(pub Vec); +pub struct View { + /// A bounded amount of chain heads. + pub heads: Vec, + /// The highest known finalized block number. + pub finalized_number: BlockNumber, +} + + +/// Construct a new view with the given chain heads and finalized number 0. +/// NOTE: Use for tests only. +/// # Example +/// +/// ```ignore +/// view![Hash::repeat_byte(1), Hash::repeat_byte(2)] +/// ``` +#[macro_export] +macro_rules! view { + ( $( $hash:expr ),* $(,)? ) => { + View { heads: vec![ $( $hash.clone() ),* ], finalized_number: 0 } + }; +} impl View { /// Replace `self` with `new`. @@ -172,22 +193,22 @@ impl View { pub fn replace_difference(&mut self, new: View) -> impl Iterator { let old = std::mem::replace(self, new); - self.0.iter().filter(move |h| !old.contains(h)) + self.heads.iter().filter(move |h| !old.contains(h)) } /// Returns an iterator of the hashes present in `Self` but not in `other`. pub fn difference<'a>(&'a self, other: &'a View) -> impl Iterator + 'a { - self.0.iter().filter(move |h| !other.contains(h)) + self.heads.iter().filter(move |h| !other.contains(h)) } /// An iterator containing hashes present in both `Self` and in `other`. pub fn intersection<'a>(&'a self, other: &'a View) -> impl Iterator + 'a { - self.0.iter().filter(move |h| other.contains(h)) + self.heads.iter().filter(move |h| other.contains(h)) } /// Whether the view contains a given hash. pub fn contains(&self, hash: &Hash) -> bool { - self.0.contains(hash) + self.heads.contains(hash) } } diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index ac2adf094d..02ed1cf7bd 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -938,7 +938,7 @@ impl StatementDistribution { .or_insert(ActiveHeadData::new(validators, session_index)); } } - FromOverseer::Signal(OverseerSignal::BlockFinalized(_block_hash)) => { + FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => { // do nothing } FromOverseer::Signal(OverseerSignal::Conclude) => break, @@ -1072,6 +1072,7 @@ mod tests { use futures::executor::{self, block_on}; use sp_keystore::{CryptoStore, SyncCryptoStorePtr, SyncCryptoStore}; use sc_keystore::LocalKeystore; + use polkadot_node_network_protocol::view; #[test] fn active_head_accepts_only_2_seconded_per_validator() { @@ -1326,9 +1327,9 @@ mod tests { #[test] fn peer_view_update_sends_messages() { - let hash_a = [1; 32].into(); - let hash_b = [2; 32].into(); - let hash_c = [3; 32].into(); + let hash_a = Hash::repeat_byte(1); + let hash_b = Hash::repeat_byte(2); + let hash_c = Hash::repeat_byte(3); let candidate = { let mut c = CommittedCandidateReceipt::default(); @@ -1338,8 +1339,8 @@ mod tests { }; let candidate_hash = candidate.hash(); - let old_view = View(vec![hash_a, hash_b]); - let new_view = View(vec![hash_b, hash_c]); + let old_view = view![hash_a, hash_b]; + let new_view = view![hash_b, hash_c]; let mut active_heads = HashMap::new(); let validators = vec![ @@ -1474,9 +1475,9 @@ mod tests { #[test] fn circulated_statement_goes_to_all_peers_with_view() { - let hash_a = [1; 32].into(); - let hash_b = [2; 32].into(); - let hash_c = [3; 32].into(); + let hash_a = Hash::repeat_byte(1); + let hash_b = Hash::repeat_byte(2); + let hash_c = Hash::repeat_byte(3); let candidate = { let mut c = CommittedCandidateReceipt::default(); @@ -1489,15 +1490,15 @@ mod tests { let peer_b = PeerId::random(); let peer_c = PeerId::random(); - let peer_a_view = View(vec![hash_a]); - let peer_b_view = View(vec![hash_a, hash_b]); - let peer_c_view = View(vec![hash_b, hash_c]); + let peer_a_view = view![hash_a]; + let peer_b_view = view![hash_a, hash_b]; + let peer_c_view = view![hash_b, hash_c]; let session_index = 1; let peer_data_from_view = |view: View| PeerData { view: view.clone(), - view_knowledge: view.0.iter().map(|v| (v.clone(), Default::default())).collect(), + view_knowledge: view.heads.iter().map(|v| (v.clone(), Default::default())).collect(), }; let mut peer_data: HashMap<_, _> = vec![ diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index bbd9f626fe..c204aa745c 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -1415,13 +1415,10 @@ where self.on_head_deactivated(deactivated) } - // Most of the time we have a leave already closed when it is finalized, so we check here if there are actually - // any updates before sending it to the subsystems. - if !update.is_empty() { - self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; - } - self.broadcast_signal(OverseerSignal::BlockFinalized(block.hash)).await?; + self.broadcast_signal(OverseerSignal::BlockFinalized(block.hash, block.number)).await?; + // broadcast `ActiveLeavesUpdate` even if empty to issue view updates + self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; Ok(()) } @@ -2061,7 +2058,7 @@ mod tests { deactivated: [first_block_hash, second_block_hash].as_ref().into(), ..Default::default() }), - OverseerSignal::BlockFinalized(third_block_hash), + OverseerSignal::BlockFinalized(third_block_hash, 3), ]; loop { diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 9cc68834be..0bc69cb3d1 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -808,7 +808,7 @@ where jobs.send_msg(to_job.relay_parent(), to_job).await; } } - Ok(Signal(BlockFinalized(_))) => {} + Ok(Signal(BlockFinalized(..))) => {} Err(err) => { tracing::error!( job = Job::NAME, diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index f726e2a157..8c0fa1fecf 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -28,7 +28,7 @@ use futures::prelude::*; use futures::channel::{mpsc, oneshot}; use futures::future::BoxFuture; -use polkadot_primitives::v1::Hash; +use polkadot_primitives::v1::{Hash, BlockNumber}; use async_trait::async_trait; use smallvec::SmallVec; @@ -89,8 +89,8 @@ impl PartialEq for ActiveLeavesUpdate { pub enum OverseerSignal { /// Subsystems should adjust their jobs to start and stop work on appropriate block hashes. ActiveLeaves(ActiveLeavesUpdate), - /// `Subsystem` is informed of a finalized block by its block hash. - BlockFinalized(Hash), + /// `Subsystem` is informed of a finalized block by its block hash and number. + BlockFinalized(Hash, BlockNumber), /// Conclude the work of the `Overseer` and all `Subsystem`s. Conclude, } diff --git a/primitives/src/v0.rs b/primitives/src/v0.rs index 5f6e3ad544..7ce060c528 100644 --- a/primitives/src/v0.rs +++ b/primitives/src/v0.rs @@ -991,9 +991,9 @@ mod tests { assert_eq!(h.as_ref().len(), 32); let _payload = collator_signature_payload( - &Hash::from([1; 32]), + &Hash::repeat_byte(1), &5u32.into(), - &Hash::from([2; 32]), + &Hash::repeat_byte(2), ); } } diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 640b2cd1de..46ae17444b 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -825,10 +825,10 @@ mod tests { assert_eq!(h.as_ref().len(), 32); let _payload = collator_signature_payload( - &Hash::from([1; 32]), + &Hash::repeat_byte(1), &5u32.into(), - &Hash::from([2; 32]), - &Hash::from([3; 32]), + &Hash::repeat_byte(2), + &Hash::repeat_byte(3), ); } } diff --git a/roadmap/implementers-guide/src/node/utility/network-bridge.md b/roadmap/implementers-guide/src/node/utility/network-bridge.md index d89ec7e8fe..2a47459bd7 100644 --- a/roadmap/implementers-guide/src/node/utility/network-bridge.md +++ b/roadmap/implementers-guide/src/node/utility/network-bridge.md @@ -63,9 +63,7 @@ If we are connected to the same peer on both peer-sets, we will send the peer tw ### Overseer Signal: BlockFinalized -We obtain the number of the block hash in the event by issuing a `ChainApiMessage::BlockNumber` request and then issue a `ProtocolMessage::ViewUpdate` to each connected peer on each peer-set. We also issue a `NetworkBridgeEvent::OurViewChange` to each event handler for each protocol. - -If we are connected to the same peer on both peer-sets, we will send the peer two view updates as a result. +We update our view's `finalized_number` to the provided one and delay `ProtocolMessage::ViewUpdate` and `NetworkBridgeEvent::OurViewChange` till the next `ActiveLeavesUpdate`. ### Network Event: Peer Connected @@ -98,8 +96,6 @@ Map the message onto the corresponding [Event Handler](#event-handlers) based on ### ConnectToValidators -> TODO: Currently, this request is limited to the validators in the current session. - - Determine the DHT keys to use for each validator based on the relay-chain state and Runtime API. - Recover the Peer IDs of the validators from the DHT. There may be more than one peer ID per validator. - Send all `(ValidatorId, PeerId)` pairs on the response channel. diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 47bf111f4c..08f9ae124c 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -1575,7 +1575,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1609,7 +1609,7 @@ mod tests { let mut candidate_a = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1617,7 +1617,7 @@ mod tests { let mut candidate_b = TestCandidateBuilder { para_id: chain_b, relay_parent: System::parent_hash(), - pov_hash: Hash::from([2; 32]), + pov_hash: Hash::repeat_byte(2), persisted_validation_data_hash: make_vdata_hash(chain_b).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1667,7 +1667,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1698,13 +1698,13 @@ mod tests { // candidate not in parent context. { - let wrong_parent_hash = Hash::from([222; 32]); + let wrong_parent_hash = Hash::repeat_byte(222); assert!(System::parent_hash() != wrong_parent_hash); let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: wrong_parent_hash, - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), ..Default::default() }.build(); @@ -1737,7 +1737,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: thread_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(thread_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1777,7 +1777,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: thread_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(thread_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1790,7 +1790,7 @@ mod tests { ); // change the candidate after signing. - candidate.descriptor.pov_hash = Hash::from([2; 32]); + candidate.descriptor.pov_hash = Hash::repeat_byte(2); let backed = block_on(back_candidate( candidate, @@ -1816,7 +1816,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1865,7 +1865,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -1905,7 +1905,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), new_validation_code: Some(vec![5, 6, 7, 8].into()), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, @@ -1949,7 +1949,7 @@ mod tests { let mut candidate = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: [42u8; 32].into(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -2048,7 +2048,7 @@ mod tests { let mut candidate_a = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -2061,7 +2061,7 @@ mod tests { let mut candidate_b = TestCandidateBuilder { para_id: chain_b, relay_parent: System::parent_hash(), - pov_hash: Hash::from([2; 32]), + pov_hash: Hash::repeat_byte(2), persisted_validation_data_hash: make_vdata_hash(chain_b).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -2074,7 +2074,7 @@ mod tests { let mut candidate_c = TestCandidateBuilder { para_id: thread_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([3; 32]), + pov_hash: Hash::repeat_byte(3), persisted_validation_data_hash: make_vdata_hash(thread_a).unwrap(), hrmp_watermark: RELAY_PARENT_NUM, ..Default::default() @@ -2220,7 +2220,7 @@ mod tests { let mut candidate_a = TestCandidateBuilder { para_id: chain_a, relay_parent: System::parent_hash(), - pov_hash: Hash::from([1; 32]), + pov_hash: Hash::repeat_byte(1), persisted_validation_data_hash: make_vdata_hash(chain_a).unwrap(), new_validation_code: Some(vec![1, 2, 3].into()), hrmp_watermark: RELAY_PARENT_NUM, -- GitLab From affa668a8bbcc7bc29741eaabfc9135b8ec71e13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 17 Dec 2020 20:09:17 +0100 Subject: [PATCH 124/203] Fix bug and further optimizations in availability distribution (#2104) * Fix bug and further optimizations in availability distribution - There was a bug that resulted in only getting one candidate per block as the candidates were put into the hashmap with the relay block hash as key. The solution for this is to use the candidate hash and the relay block hash as key. - We stored received/sent messages with the candidate hash and chunk index as key. The candidate hash wasn't required in this case, as the messages are already stored per candidate. * Update node/core/bitfield-signing/src/lib.rs Co-authored-by: Robert Habermeier * Remove the reverse map * major refactor of receipts & query_live * finish refactoring remove ancestory mapping, improve relay-parent cleanup & receipts-cache cleanup, add descriptor to `PerCandidate` * rename and rewrite query_pending_availability * add a bunch of consistency tests * Add some last changes * xy * fz * Make it compile again * Fix one test * Fix logging * Remove some buggy code * Make tests work again * Move stuff around * Remove dbg * Remove state from test_harness * More refactor and new test * New test and fixes * Move metric * Remove "duplicated code" * Fix tests * New test * Change break to continue * Update node/core/av-store/src/lib.rs * Update node/core/av-store/src/lib.rs * Update node/core/bitfield-signing/src/lib.rs Co-authored-by: Fedor Sakharov * update guide to match live_candidates changes * add comment * fix bitfield signing Co-authored-by: Robert Habermeier Co-authored-by: Bernhard Schuster Co-authored-by: Fedor Sakharov --- Cargo.lock | 6 +- node/core/av-store/src/lib.rs | 50 +- node/core/bitfield-signing/src/lib.rs | 23 +- .../availability-distribution/Cargo.toml | 6 +- .../availability-distribution/src/lib.rs | 615 ++++--- .../availability-distribution/src/tests.rs | 1480 ++++++++++------- node/subsystem/src/messages.rs | 2 +- .../availability/availability-distribution.md | 3 +- 8 files changed, 1193 insertions(+), 992 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a55b062db8..692a9c1c48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4914,10 +4914,8 @@ name = "polkadot-availability-distribution" version = "0.1.0" dependencies = [ "assert_matches", - "env_logger 0.8.2", "futures 0.3.8", - "futures-timer 3.0.2", - "log", + "maplit", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -4926,11 +4924,11 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "sc-keystore", - "smallvec 1.5.1", "sp-application-crypto", "sp-core", "sp-keyring", "sp-keystore", + "sp-tracing", "thiserror", "tracing", "tracing-futures", diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index d1d81d031c..66bec12142 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -713,25 +713,51 @@ where match msg { QueryAvailableData(hash, tx) => { - tx.send(available_data(&subsystem.inner, &hash).map(|d| d.data)) - .map_err(|_| oneshot::Canceled)?; + tx.send(available_data(&subsystem.inner, &hash).map(|d| d.data)).map_err(|_| oneshot::Canceled)?; } QueryDataAvailability(hash, tx) => { - tx.send(available_data(&subsystem.inner, &hash).is_some()) - .map_err(|_| oneshot::Canceled)?; + let result = available_data(&subsystem.inner, &hash).is_some(); + + tracing::trace!( + target: LOG_TARGET, + candidate_hash = ?hash, + availability = ?result, + "Queried data availability", + ); + + tx.send(result).map_err(|_| oneshot::Canceled)?; } QueryChunk(hash, id, tx) => { - tx.send(get_chunk(subsystem, &hash, id)?) - .map_err(|_| oneshot::Canceled)?; + tx.send(get_chunk(subsystem, &hash, id)?).map_err(|_| oneshot::Canceled)?; } QueryChunkAvailability(hash, id, tx) => { - tx.send(get_chunk(subsystem, &hash, id)?.is_some()) - .map_err(|_| oneshot::Canceled)?; + let result = get_chunk(subsystem, &hash, id).map(|r| r.is_some()); + + tracing::trace!( + target: LOG_TARGET, + candidate_hash = ?hash, + availability = ?result, + "Queried chunk availability", + ); + + tx.send(result?).map_err(|_| oneshot::Canceled)?; } StoreChunk { candidate_hash, relay_parent, validator_index, chunk, tx } => { + let chunk_index = chunk.index; // Current block number is relay_parent block number + 1. let block_number = get_block_number(ctx, relay_parent).await? + 1; - match store_chunk(subsystem, &candidate_hash, validator_index, chunk, block_number) { + let result = store_chunk(subsystem, &candidate_hash, validator_index, chunk, block_number); + + tracing::trace!( + target: LOG_TARGET, + %chunk_index, + ?candidate_hash, + %block_number, + ?result, + "Stored chunk", + ); + + match result { Err(e) => { tx.send(Err(())).map_err(|_| oneshot::Canceled)?; return Err(e); @@ -742,7 +768,11 @@ where } } StoreAvailableData(hash, id, n_validators, av_data, tx) => { - match store_available_data(subsystem, &hash, id, n_validators, av_data) { + let result = store_available_data(subsystem, &hash, id, n_validators, av_data); + + tracing::trace!(target: LOG_TARGET, candidate_hash = ?hash, ?result, "Stored available data"); + + match result { Err(e) => { tx.send(Err(())).map_err(|_| oneshot::Canceled)?; return Err(e); diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index e02bd5661f..d5c7f4b29a 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -78,6 +78,8 @@ async fn get_core_availability( ) -> Result { let span = jaeger::hash_span(&relay_parent, "core_availability"); if let CoreState::Occupied(core) = core { + tracing::trace!(target: LOG_TARGET, para_id = %core.para_id, "Getting core availability"); + let _span = span.child("occupied"); let (tx, rx) = oneshot::channel(); sender @@ -93,7 +95,10 @@ async fn get_core_availability( let committed_candidate_receipt = match rx.await? { Ok(Some(ccr)) => ccr, - Ok(None) => return Ok(false), + Ok(None) => { + tracing::trace!(target: LOG_TARGET, para_id = %core.para_id, "No committed candidate"); + return Ok(false) + }, Err(e) => { // Don't take down the node on runtime API errors. tracing::warn!(target: LOG_TARGET, err = ?e, "Encountered a runtime API error"); @@ -103,6 +108,7 @@ async fn get_core_availability( drop(_span); let _span = span.child("query chunk"); + let candidate_hash = committed_candidate_receipt.hash(); let (tx, rx) = oneshot::channel(); sender @@ -110,13 +116,24 @@ async fn get_core_availability( .await .send( AllMessages::from(AvailabilityStoreMessage::QueryChunkAvailability( - committed_candidate_receipt.hash(), + candidate_hash, validator_idx, tx, )).into(), ) .await?; - return rx.await.map_err(Into::into); + + let res = rx.await.map_err(Into::into); + + tracing::trace!( + target: LOG_TARGET, + para_id = %core.para_id, + availability = ?res, + ?candidate_hash, + "Candidate availability", + ); + + return res; } Ok(false) diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index dd1c6f61c3..b3dc14422c 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -23,9 +23,7 @@ polkadot-subsystem-testhelpers = { package = "polkadot-node-subsystem-test-helpe sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -futures-timer = "3.0.2" -env_logger = "0.8.2" assert_matches = "1.4.0" -smallvec = "1.5.1" -log = "0.4.11" +maplit = "1.0" diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 67d1d4ffa8..5bf11defd2 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -38,6 +38,7 @@ use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_primitives::v1::{ BlakeTwo256, CommittedCandidateReceipt, CoreState, ErasureChunk, Hash, HashT, Id as ParaId, SessionIndex, ValidatorId, ValidatorIndex, PARACHAIN_KEY_TYPE_ID, CandidateHash, + CandidateDescriptor, }; use polkadot_subsystem::messages::{ AllMessages, AvailabilityDistributionMessage, AvailabilityStoreMessage, ChainApiMessage, @@ -50,6 +51,7 @@ use polkadot_subsystem::{ SubsystemContext, SubsystemError, }; use std::collections::{HashMap, HashSet}; +use std::collections::hash_map::Entry; use std::iter; use thiserror::Error; @@ -116,6 +118,12 @@ pub struct AvailabilityGossipMessage { pub erasure_chunk: ErasureChunk, } +impl From for protocol_v1::AvailabilityDistributionMessage { + fn from(message: AvailabilityGossipMessage) -> Self { + Self::Chunk(message.candidate_hash, message.erasure_chunk) + } +} + /// Data used to track information of peers and relay parents the /// overseer ordered us to work on. #[derive(Default, Clone, Debug)] @@ -129,19 +137,8 @@ struct ProtocolState { /// Caches a mapping of relay parents or ancestor to live candidate receipts. /// Allows fast intersection of live candidates with views and consecutive unioning. - /// Maps relay parent / ancestor -> live candidate receipts + its hash. - receipts: HashMap>, - - /// Allow reverse caching of view checks. - /// Maps candidate hash -> relay parent for extracting meta information from `PerRelayParent`. - /// Note that the presence of this is not sufficient to determine if deletion is OK, i.e. - /// two histories could cover this. - reverse: HashMap, - - /// Keeps track of which candidate receipts are required due to ancestors of which relay parents - /// of our view. - /// Maps ancestor -> relay parents in view - ancestry: HashMap>, + /// Maps relay parent / ancestor -> candidate receipts. + receipts: HashMap>, /// Track things needed to start and stop work on a particular relay parent. per_relay_parent: HashMap, @@ -157,24 +154,30 @@ struct PerCandidate { /// candidate hash + erasure chunk index -> gossip message message_vault: HashMap, - /// Track received candidate hashes and validator indices from peers. - received_messages: HashMap>, + /// Track received erasure chunk indices per peer. + received_messages: HashMap>, - /// Track already sent candidate hashes and the erasure chunk index to the peers. - sent_messages: HashMap>, + /// Track sent erasure chunk indices per peer. + sent_messages: HashMap>, /// The set of validators. validators: Vec, /// If this node is a validator, note the index in the validator set. validator_index: Option, + + /// The descriptor of this candidate. + descriptor: CandidateDescriptor, + + /// The set of relay chain blocks this appears to be live in. + live_in: HashSet, } impl PerCandidate { - /// Returns `true` iff the given `message` is required by the given `peer`. - fn message_required_by_peer(&self, peer: &PeerId, message: &(CandidateHash, ValidatorIndex)) -> bool { - self.received_messages.get(peer).map(|v| !v.contains(message)).unwrap_or(true) - && self.sent_messages.get(peer).map(|v| !v.contains(message)).unwrap_or(true) + /// Returns `true` iff the given `validator_index` is required by the given `peer`. + fn message_required_by_peer(&self, peer: &PeerId, validator_index: &ValidatorIndex) -> bool { + self.received_messages.get(peer).map(|v| !v.contains(validator_index)).unwrap_or(true) + && self.sent_messages.get(peer).map(|v| !v.contains(validator_index)).unwrap_or(true) } } @@ -182,139 +185,85 @@ impl PerCandidate { struct PerRelayParent { /// Set of `K` ancestors for this relay parent. ancestors: Vec, + /// Live candidates, according to this relay parent. + live_candidates: HashSet, } impl ProtocolState { - /// Collects the relay_parents ancestors including the relay parents themselfes. - #[tracing::instrument(level = "trace", skip(relay_parents), fields(subsystem = LOG_TARGET))] - fn extend_with_ancestors<'a>( - &'a self, - relay_parents: impl IntoIterator + 'a, - ) -> HashSet { - relay_parents - .into_iter() - .map(|relay_parent| { - self.per_relay_parent - .get(relay_parent) - .into_iter() - .map(|per_relay_parent| per_relay_parent.ancestors.iter().cloned()) - .flatten() - .chain(iter::once(*relay_parent)) - }) - .flatten() - .collect::>() - } - - /// Unionize all cached entries for the given relay parents and its ancestors. + /// Unionize all live candidate hashes of the given relay parents and their recent + /// ancestors. + /// /// Ignores all non existent relay parents, so this can be used directly with a peers view. - /// Returns a map from candidate hash -> receipt + /// Returns a set of candidate hashes. #[tracing::instrument(level = "trace", skip(relay_parents), fields(subsystem = LOG_TARGET))] fn cached_live_candidates_unioned<'a>( &'a self, relay_parents: impl IntoIterator + 'a, - ) -> HashMap { - let relay_parents_and_ancestors = self.extend_with_ancestors(relay_parents); - relay_parents_and_ancestors + ) -> HashSet { + relay_parents .into_iter() - .filter_map(|relay_parent_or_ancestor| self.receipts.get(&relay_parent_or_ancestor)) - .map(|receipt_set| receipt_set.into_iter()) + .filter_map(|r| self.per_relay_parent.get(r)) + .map(|per_relay_parent| per_relay_parent.live_candidates.iter().cloned()) .flatten() - .map(|(receipt_hash, receipt)| (receipt_hash.clone(), receipt.clone())) .collect() } - #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] - async fn add_relay_parent( + #[tracing::instrument(level = "trace", skip(candidates), fields(subsystem = LOG_TARGET))] + fn add_relay_parent( &mut self, - ctx: &mut Context, relay_parent: Hash, validators: Vec, validator_index: Option, - ) -> Result<()> - where - Context: SubsystemContext, - { - let candidates = query_live_candidates(ctx, self, std::iter::once(relay_parent)).await?; + candidates: HashMap, + ancestors: Vec, + ) { + let candidate_hashes: Vec<_> = candidates.keys().cloned().collect(); // register the relation of relay_parent to candidate.. - // ..and the reverse association. - for (relay_parent_or_ancestor, (receipt_hash, receipt)) in candidates.clone() { - self.reverse - .insert(receipt_hash.clone(), relay_parent_or_ancestor.clone()); - let per_candidate = self.per_candidate.entry(receipt_hash.clone()).or_default(); - per_candidate.validator_index = validator_index.clone(); - per_candidate.validators = validators.clone(); - - self.receipts - .entry(relay_parent_or_ancestor) - .or_default() - .insert((receipt_hash, receipt)); - } - - // collect the ancestors again from the hash map - let ancestors = candidates - .iter() - .filter_map(|(ancestor_or_relay_parent, _receipt)| { - if ancestor_or_relay_parent == &relay_parent { - None - } else { - Some(*ancestor_or_relay_parent) - } - }) - .collect::>(); - - // mark all the ancestors as "needed" by this newly added relay parent - for ancestor in ancestors.iter() { - self.ancestry - .entry(ancestor.clone()) - .or_default() - .insert(relay_parent); + for (receipt_hash, fetched) in candidates { + let per_candidate = self.per_candidate.entry(receipt_hash).or_default(); + + // Cached candidates already have entries and thus don't need this + // information to be set. + if let FetchedLiveCandidate::Fresh(descriptor) = fetched { + per_candidate.validator_index = validator_index.clone(); + per_candidate.validators = validators.clone(); + per_candidate.descriptor = descriptor; + } + per_candidate.live_in.insert(relay_parent); } - self.per_relay_parent - .entry(relay_parent) - .or_default() - .ancestors = ancestors; - - Ok(()) + let per_relay_parent = self.per_relay_parent.entry(relay_parent).or_default(); + per_relay_parent.ancestors = ancestors; + per_relay_parent.live_candidates.extend(candidate_hashes); } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn remove_relay_parent(&mut self, relay_parent: &Hash) { - // we might be ancestor of some other relay_parent - if let Some(ref mut descendants) = self.ancestry.get_mut(relay_parent) { - // if we were the last user, and it is - // not explicitly set to be worked on by the overseer - if descendants.is_empty() { - // remove from the ancestry index - self.ancestry.remove(relay_parent); - // and also remove the actual receipt - if let Some(candidates) = self.receipts.remove(relay_parent) { - candidates.into_iter().for_each(|c| { self.per_candidate.remove(&c.0); }); - } - } - } if let Some(per_relay_parent) = self.per_relay_parent.remove(relay_parent) { - // remove all "references" from the hash maps and sets for all ancestors - for ancestor in per_relay_parent.ancestors { - // one of our decendants might be ancestor of some other relay_parent - if let Some(ref mut descendants) = self.ancestry.get_mut(&ancestor) { - // we do not need this descendant anymore - descendants.remove(&relay_parent); - // if we were the last user, and it is - // not explicitly set to be worked on by the overseer - if descendants.is_empty() && !self.per_relay_parent.contains_key(&ancestor) { - // remove from the ancestry index - self.ancestry.remove(&ancestor); - // and also remove the actual receipt - if let Some(candidates) = self.receipts.remove(&ancestor) { - candidates.into_iter().for_each(|c| { self.per_candidate.remove(&c.0); }); - } + for candidate_hash in per_relay_parent.live_candidates { + // Prune the candidate if this was the last member of our view + // to consider it live (including its ancestors). + if let Entry::Occupied(mut occ) = self.per_candidate.entry(candidate_hash) { + occ.get_mut().live_in.remove(relay_parent); + if occ.get().live_in.is_empty() { + occ.remove(); } } } } } + + // Removes all entries from receipts which aren't referenced in the ancestry of + // one of our live relay-chain heads. + fn clean_up_receipts_cache(&mut self) { + let extended_view: HashSet<_> = self.per_relay_parent.iter() + .map(|(r_hash, v)| v.ancestors.iter().cloned().chain(std::iter::once(*r_hash))) + .flatten() + .collect(); + + self.receipts.retain(|ancestor_hash, _| extended_view.contains(ancestor_hash)); + } } /// Deal with network bridge updates and track what needs to be tracked @@ -387,27 +336,30 @@ where for added in view.difference(&old_view) { let validators = query_validators(ctx, *added).await?; let validator_index = obtain_our_validator_index(&validators, keystore.clone()).await; - state - .add_relay_parent(ctx, *added, validators, validator_index) - .await?; + let (candidates, ancestors) + = query_live_candidates(ctx, &mut state.receipts, *added).await?; + + state.add_relay_parent( + *added, + validators, + validator_index, + candidates, + ancestors, + ); } // handle all candidates - for (candidate_hash, _receipt) in state.cached_live_candidates_unioned(view.difference(&old_view)) { - let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); - - // assure the node has the validator role - if per_candidate.validator_index.is_none() { - continue; - }; + for candidate_hash in state.cached_live_candidates_unioned(view.difference(&old_view)) { + // If we are not a validator for this candidate, let's skip it. + if state.per_candidate.entry(candidate_hash).or_default().validator_index.is_none() { + continue + } // check if the availability is present in the store exists if !query_data_availability(ctx, candidate_hash).await? { continue; } - let validator_count = per_candidate.validators.len(); - // obtain interested peers in the candidate hash let peers: Vec = state .peer_views @@ -417,77 +369,64 @@ where // collect all direct interests of a peer w/o ancestors state .cached_live_candidates_unioned(view.heads.iter()) - .contains_key(&candidate_hash) + .contains(&candidate_hash) }) .map(|(peer, _view)| peer.clone()) .collect(); + let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); + + let validator_count = per_candidate.validators.len(); + // distribute all erasure messages to interested peers for chunk_index in 0u32..(validator_count as u32) { - // only the peers which did not receive this particular erasure chunk - let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); - - // obtain the chunks from the cache, if not fallback - // and query the availability store - let message_id = (candidate_hash, chunk_index); - let erasure_chunk = if let Some(message) = per_candidate.message_vault.get(&chunk_index) { - message.erasure_chunk.clone() + let message = if let Some(message) = per_candidate.message_vault.get(&chunk_index) { + tracing::trace!( + target: LOG_TARGET, + %chunk_index, + ?candidate_hash, + "Retrieved chunk from message vault", + ); + message.clone() } else if let Some(erasure_chunk) = query_chunk(ctx, candidate_hash, chunk_index as ValidatorIndex).await? { - erasure_chunk + tracing::trace!( + target: LOG_TARGET, + %chunk_index, + ?candidate_hash, + "Retrieved chunk from availability storage", + ); + + AvailabilityGossipMessage { + candidate_hash, + erasure_chunk, + } } else { + tracing::error!( + target: LOG_TARGET, + %chunk_index, + ?candidate_hash, + "Availability store reported that we have the availability data, but we could not retrieve a chunk of it!", + ); continue; }; - debug_assert_eq!(erasure_chunk.index, chunk_index); + debug_assert_eq!(message.erasure_chunk.index, chunk_index); let peers = peers .iter() - .filter(|peer| per_candidate.message_required_by_peer(peer, &message_id)) + .filter(|peer| per_candidate.message_required_by_peer(peer, &chunk_index)) .cloned() .collect::>(); - let message = AvailabilityGossipMessage { - candidate_hash, - erasure_chunk, - }; - send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message).await; + send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await; } } // cleanup the removed relay parents and their states - let removed = old_view.difference(&view).collect::>(); - for removed in removed { - state.remove_relay_parent(&removed); - } - Ok(()) -} + old_view.difference(&view).for_each(|r| state.remove_relay_parent(r)); + state.clean_up_receipts_cache(); -#[inline(always)] -async fn send_tracked_gossip_message_to_peers( - ctx: &mut Context, - per_candidate: &mut PerCandidate, - metrics: &Metrics, - peers: Vec, - message: AvailabilityGossipMessage, -) -where - Context: SubsystemContext, -{ - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await -} - -#[inline(always)] -async fn send_tracked_gossip_messages_to_peer( - ctx: &mut Context, - per_candidate: &mut PerCandidate, - metrics: &Metrics, - peer: PeerId, - message_iter: impl IntoIterator, -) -where - Context: SubsystemContext, -{ - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, vec![peer], message_iter).await + Ok(()) } #[tracing::instrument(level = "trace", skip(ctx, metrics, message_iter), fields(subsystem = LOG_TARGET))] @@ -501,37 +440,27 @@ async fn send_tracked_gossip_messages_to_peers( where Context: SubsystemContext, { - if peers.is_empty() { - return; - } for message in message_iter { for peer in peers.iter() { - let message_id = (message.candidate_hash, message.erasure_chunk.index); per_candidate .sent_messages .entry(peer.clone()) .or_default() - .insert(message_id); + .insert(message.erasure_chunk.index); } per_candidate .message_vault .insert(message.erasure_chunk.index, message.clone()); - let wire_message = protocol_v1::AvailabilityDistributionMessage::Chunk( - message.candidate_hash, - message.erasure_chunk, - ); - - ctx.send_message(AllMessages::NetworkBridge( - NetworkBridgeMessage::SendValidationMessage( + if !peers.is_empty() { + ctx.send_message(NetworkBridgeMessage::SendValidationMessage( peers.clone(), - protocol_v1::ValidationProtocol::AvailabilityDistribution(wire_message), - ), - )) - .await; + protocol_v1::ValidationProtocol::AvailabilityDistribution(message.into()), + ).into()).await; - metrics.on_chunk_distributed(); + metrics.on_chunk_distributed(); + } } } @@ -558,29 +487,25 @@ where // the union of all relay parent's candidates. let added_candidates = state.cached_live_candidates_unioned(added.iter()); - // Send all messages we've seen before and the peer is now interested - // in to that peer. - - for (candidate_hash, _receipt) in added_candidates { + // Send all messages we've seen before and the peer is now interested in. + for candidate_hash in added_candidates { let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); // obtain the relevant chunk indices not sent yet let messages = ((0 as ValidatorIndex)..(per_candidate.validators.len() as ValidatorIndex)) .into_iter() .filter_map(|erasure_chunk_index: ValidatorIndex| { - let message_id = (candidate_hash, erasure_chunk_index); - // try to pick up the message from the message vault // so we send as much as we have per_candidate .message_vault .get(&erasure_chunk_index) - .filter(|_| per_candidate.message_required_by_peer(&origin, &message_id)) + .filter(|_| per_candidate.message_required_by_peer(&origin, &erasure_chunk_index)) }) .cloned() .collect::>(); - send_tracked_gossip_messages_to_peer(ctx, per_candidate, metrics, origin.clone(), messages).await; + send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, vec![origin.clone()], messages).await; } } @@ -622,37 +547,59 @@ where let live_candidates = state.cached_live_candidates_unioned(state.view.heads.iter()); // check if the candidate is of interest - let live_candidate = if let Some(live_candidate) = live_candidates.get(&message.candidate_hash) { - live_candidate + let descriptor = if live_candidates.contains(&message.candidate_hash) { + state.per_candidate + .get(&message.candidate_hash) + .expect("All live candidates are contained in per_candidate; qed") + .descriptor + .clone() } else { + tracing::trace!( + target: LOG_TARGET, + candidate_hash = ?message.candidate_hash, + peer = %origin, + "Peer send not live candidate", + ); modify_reputation(ctx, origin, COST_NOT_A_LIVE_CANDIDATE).await; - return Ok(()); + return Ok(()) }; - // check the merkle proof - let root = &live_candidate.descriptor.erasure_root; - let anticipated_hash = if let Ok(hash) = branch_hash( - root, + // check the merkle proof against the erasure root in the candidate descriptor. + let anticipated_hash = match branch_hash( + &descriptor.erasure_root, &message.erasure_chunk.proof, message.erasure_chunk.index as usize, ) { - hash - } else { - modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; - return Ok(()); + Ok(hash) => hash, + Err(e) => { + tracing::trace!( + target: LOG_TARGET, + candidate_hash = ?message.candidate_hash, + peer = %origin, + error = ?e, + "Failed to calculate chunk merkle proof", + ); + modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + return Ok(()); + }, }; let erasure_chunk_hash = BlakeTwo256::hash(&message.erasure_chunk.chunk); if anticipated_hash != erasure_chunk_hash { + tracing::trace!( + target: LOG_TARGET, + candidate_hash = ?message.candidate_hash, + peer = %origin, + "Peer send chunk with invalid merkle proof", + ); modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; return Ok(()); } - // an internal unique identifier of this message - let message_id = (message.candidate_hash, message.erasure_chunk.index); + let erasure_chunk_index = &message.erasure_chunk.index; { - let per_candidate = state.per_candidate.entry(message_id.0.clone()).or_default(); + let per_candidate = state.per_candidate.entry(message.candidate_hash).or_default(); // check if this particular erasure chunk was already sent by that peer before { @@ -660,18 +607,16 @@ where .received_messages .entry(origin.clone()) .or_default(); - if received_set.contains(&message_id) { + if !received_set.insert(*erasure_chunk_index) { modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; return Ok(()); - } else { - received_set.insert(message_id.clone()); } } // insert into known messages and change reputation if per_candidate .message_vault - .insert(message_id.1, message.clone()) + .insert(*erasure_chunk_index, message.clone()) .is_some() { modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await; @@ -679,22 +624,18 @@ where modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await; // save the chunk for our index - if let Some(validator_index) = per_candidate.validator_index { - if message.erasure_chunk.index == validator_index { - if let Err(_e) = store_chunk( - ctx, - message.candidate_hash.clone(), - live_candidate.descriptor.relay_parent.clone(), - message.erasure_chunk.index, - message.erasure_chunk.clone(), - ) - .await? - { - tracing::warn!( - target: LOG_TARGET, - "Failed to store erasure chunk to availability store" - ); - } + if Some(*erasure_chunk_index) == per_candidate.validator_index { + if store_chunk( + ctx, + message.candidate_hash, + descriptor.relay_parent, + message.erasure_chunk.index, + message.erasure_chunk.clone(), + ).await?.is_err() { + tracing::warn!( + target: LOG_TARGET, + "Failed to store erasure chunk to availability store" + ); } } }; @@ -704,24 +645,24 @@ where .peer_views .clone() .into_iter() - .filter(|(_peer, view)| { + .filter(|(_, view)| { // peers view must contain the candidate hash too state .cached_live_candidates_unioned(view.heads.iter()) - .contains_key(&message_id.0) + .contains(&message.candidate_hash) }) .map(|(peer, _)| -> PeerId { peer.clone() }) .collect::>(); - let per_candidate = state.per_candidate.entry(message_id.0.clone()).or_default(); + let per_candidate = state.per_candidate.entry(message.candidate_hash).or_default(); let peers = peers .into_iter() - .filter(|peer| per_candidate.message_required_by_peer(peer, &message_id)) + .filter(|peer| per_candidate.message_required_by_peer(peer, erasure_chunk_index)) .collect::>(); // gossip that message to interested peers - send_tracked_gossip_message_to_peers(ctx, per_candidate, metrics, peers, message).await; + send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await; Ok(()) } @@ -743,13 +684,21 @@ impl AvailabilityDistributionSubsystem { } /// Start processing work as passed on from the Overseer. + async fn run(self, ctx: Context) -> Result<()> + where + Context: SubsystemContext, + { + let mut state = ProtocolState::default(); + self.run_inner(ctx, &mut state).await + } + + /// Start processing work. #[tracing::instrument(skip(self, ctx), fields(subsystem = LOG_TARGET))] - async fn run(self, mut ctx: Context) -> Result<()> + async fn run_inner(self, mut ctx: Context, state: &mut ProtocolState) -> Result<()> where Context: SubsystemContext, { // work: process incoming messages from the overseer. - let mut state = ProtocolState::default(); loop { let message = ctx .recv() @@ -762,7 +711,7 @@ impl AvailabilityDistributionSubsystem { if let Err(e) = handle_network_msg( &mut ctx, &self.keystore.clone(), - &mut state, + state, &self.metrics, event, ) @@ -807,96 +756,102 @@ where } } -/// Obtain all live candidates based on an iterator of relay heads. -#[tracing::instrument(level = "trace", skip(ctx, relay_parents), fields(subsystem = LOG_TARGET))] -async fn query_live_candidates_without_ancestors( +// Metadata about a candidate that is part of the live_candidates set. +// +// Those which were not present in a cache are "fresh" and have their candidate descriptor attached. This +// information is propagated to the higher level where it can be used to create data entries. Cached candidates +// already have entries associated with them, and thus don't need this metadata to be fetched. +#[derive(Debug)] +enum FetchedLiveCandidate { + Cached, + Fresh(CandidateDescriptor), +} + +/// Obtain all live candidates for all given `relay_blocks`. +/// +/// This returns a set of all candidate hashes pending availability within the state +/// of the explicitly referenced relay heads. +/// +/// This also queries the provided `receipts` cache before reaching into the +/// runtime and updates it with the information learned. +#[tracing::instrument(level = "trace", skip(ctx, relay_blocks, receipts), fields(subsystem = LOG_TARGET))] +async fn query_pending_availability_at( ctx: &mut Context, - relay_parents: impl IntoIterator, -) -> Result> + relay_blocks: impl IntoIterator, + receipts: &mut HashMap>, +) -> Result> where Context: SubsystemContext, { - let iter = relay_parents.into_iter(); - let hint = iter.size_hint(); + let mut live_candidates = HashMap::new(); + + // fetch and fill out cache for each of these + for relay_parent in relay_blocks { + let receipts_for = match receipts.entry(relay_parent) { + Entry::Occupied(e) => { + live_candidates.extend( + e.get().iter().cloned().map(|c| (c, FetchedLiveCandidate::Cached)) + ); + continue + }, + e => e.or_default(), + }; - let mut live_candidates = HashSet::with_capacity(hint.1.unwrap_or(hint.0)); - for relay_parent in iter { - let paras = query_para_ids(ctx, relay_parent).await?; - for para in paras { + for para in query_para_ids(ctx, relay_parent).await? { if let Some(ccr) = query_pending_availability(ctx, relay_parent, para).await? { - live_candidates.insert(ccr); + let receipt_hash = ccr.hash(); + let descriptor = ccr.descriptor().clone(); + + // unfortunately we have no good way of telling the candidate was + // cached until now. But we don't clobber a `Cached` entry if there + // is one already. + live_candidates.entry(receipt_hash) + .or_insert(FetchedLiveCandidate::Fresh(descriptor)); + + receipts_for.insert(receipt_hash); } } } + Ok(live_candidates) } -/// Obtain all live candidates based on an iterator or relay heads including `k` ancestors. +/// Obtain all live candidates under a particular relay head. This implicitly includes +/// `K` ancestors of the head, such that the candidates pending availability in all of +/// the states of the head and the ancestors are unioned together to produce the +/// return type of this function. Each candidate hash is paired. /// -/// Relay parent. -#[tracing::instrument(level = "trace", skip(ctx, relay_parents), fields(subsystem = LOG_TARGET))] +/// This also updates all `receipts` cached by the protocol state and returns a list +/// of up to `K` ancestors of the relay-parent. +#[tracing::instrument(level = "trace", skip(ctx, receipts), fields(subsystem = LOG_TARGET))] async fn query_live_candidates( ctx: &mut Context, - state: &mut ProtocolState, - relay_parents: impl IntoIterator, -) -> Result> + receipts: &mut HashMap>, + relay_parent: Hash, +) -> Result<(HashMap, Vec)> where Context: SubsystemContext, { - let iter = relay_parents.into_iter(); - let hint = iter.size_hint(); - - let capacity = hint.1.unwrap_or(hint.0) * (1 + AvailabilityDistributionSubsystem::K); - let mut live_candidates = - HashMap::::with_capacity(capacity); - - for relay_parent in iter { - // register one of relay parents (not the ancestors) - let mut ancestors = query_up_to_k_ancestors_in_same_session( - ctx, - relay_parent, - AvailabilityDistributionSubsystem::K, - ) - .await?; - - ancestors.push(relay_parent); - - // ancestors might overlap, so check the cache too - let unknown = ancestors - .into_iter() - .filter(|relay_parent_or_ancestor| { - // use the ones which we pulled before - // but keep the unknown relay parents - state - .receipts - .get(relay_parent_or_ancestor) - .and_then(|receipts| { - // directly extend the live_candidates with the cached value - live_candidates.extend(receipts.into_iter().map( - |(receipt_hash, receipt)| { - (relay_parent, (receipt_hash.clone(), receipt.clone())) - }, - )); - Some(()) - }) - .is_none() - }) - .collect::>(); - - // query the ones that were not present in the receipts cache - let receipts = query_live_candidates_without_ancestors(ctx, unknown.clone()).await?; - live_candidates.extend( - unknown.into_iter().zip( - receipts - .into_iter() - .map(|receipt| (receipt.hash(), receipt)), - ), - ); - } - Ok(live_candidates) + // register one of relay parents (not the ancestors) + let ancestors = query_up_to_k_ancestors_in_same_session( + ctx, + relay_parent, + AvailabilityDistributionSubsystem::K, + ) + .await?; + + // query the ones that were not present in the receipts cache and add them + // to it. + let live_candidates = query_pending_availability_at( + ctx, + ancestors.iter().cloned().chain(std::iter::once(relay_parent)), + receipts, + ).await?; + + Ok((live_candidates, ancestors)) } -/// Query all para IDs. +/// Query all para IDs that are occupied under a given relay-parent. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_para_ids(ctx: &mut Context, relay_parent: Hash) -> Result> where @@ -909,7 +864,7 @@ where ))) .await; - let all_para_ids: Vec<_> = rx + let all_para_ids = rx .await .map_err(|e| Error::AvailabilityCoresResponseChannel(e))? .map_err(|e| Error::AvailabilityCores(e))?; @@ -955,8 +910,7 @@ where AvailabilityStoreMessage::QueryDataAvailability(candidate_hash, tx), )).await; - rx.await - .map_err(|e| Error::QueryAvailabilityResponseChannel(e)) + rx.await.map_err(|e| Error::QueryAvailabilityResponseChannel(e)) } #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] @@ -1111,18 +1065,11 @@ where // iterate from youngest to oldest let mut iter = ancestors.into_iter().peekable(); - while let Some(ancestor) = iter.next() { - if let Some(ancestor_parent) = iter.peek() { - let session = query_session_index_for_child(ctx, *ancestor_parent).await?; - if session != desired_session { - break; - } - acc.push(ancestor); - } else { - // either ended up at genesis or the blocks were - // already pruned + while let Some((ancestor, ancestor_parent)) = iter.next().and_then(|a| iter.peek().map(|ap| (a, ap))) { + if query_session_index_for_child(ctx, *ancestor_parent).await? != desired_session { break; } + acc.push(ancestor); } debug_assert!(acc.len() <= k); diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index 3e7f0d83e4..310ca9e87c 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -26,17 +26,16 @@ use polkadot_primitives::v1::{ use polkadot_subsystem_testhelpers as test_helpers; use futures::{executor, future, Future}; -use futures_timer::Delay; use sc_keystore::LocalKeystore; -use smallvec::smallvec; use sp_application_crypto::AppKey; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use std::{sync::Arc, time::Duration}; +use maplit::hashmap; - -macro_rules! delay { - ($delay:expr) => { - Delay::new(Duration::from_millis($delay)).await; +macro_rules! view { + ( $( $hash:expr ),* $(,)? ) => { + // Finalized number unimportant for availability distribution. + View { heads: vec![ $( $hash.clone() ),* ], finalized_number: 0 } }; } @@ -55,66 +54,43 @@ struct TestHarness { fn test_harness>( keystore: SyncCryptoStorePtr, - test: impl FnOnce(TestHarness) -> T, -) { - let _ = env_logger::builder() - .is_test(true) - .filter( - Some("polkadot_availability_distribution"), - log::LevelFilter::Trace, - ) - .try_init(); + test_fx: impl FnOnce(TestHarness) -> T, +) -> ProtocolState { + sp_tracing::try_init_simple(); let pool = sp_core::testing::TaskExecutor::new(); - let (context, virtual_overseer) = test_helpers::make_subsystem_context(pool.clone()); let subsystem = AvailabilityDistributionSubsystem::new(keystore, Default::default()); - let subsystem = subsystem.run(context); + let mut state = ProtocolState::default(); + { + let subsystem = subsystem.run_inner(context, &mut state); - let test_fut = test(TestHarness { virtual_overseer }); + let test_fut = test_fx(TestHarness { virtual_overseer }); - futures::pin_mut!(test_fut); - futures::pin_mut!(subsystem); - - executor::block_on(future::select(test_fut, subsystem)); -} + futures::pin_mut!(test_fut); + futures::pin_mut!(subsystem); -const TIMEOUT: Duration = Duration::from_millis(100); + executor::block_on(future::select(test_fut, subsystem)); + } -async fn overseer_signal( - overseer: &mut test_helpers::TestSubsystemContextHandle, - signal: OverseerSignal, -) { - delay!(50); - overseer - .send(FromOverseer::Signal(signal)) - .timeout(TIMEOUT) - .await - .expect("10ms is more than enough for sending signals."); + state } async fn overseer_send( overseer: &mut test_helpers::TestSubsystemContextHandle, - msg: AvailabilityDistributionMessage, + msg: impl Into, ) { + let msg = msg.into(); tracing::trace!(msg = ?msg, "sending message"); - overseer - .send(FromOverseer::Communication { msg }) - .timeout(TIMEOUT) - .await - .expect("10ms is more than enough for sending messages."); + overseer.send(FromOverseer::Communication { msg }).await } async fn overseer_recv( overseer: &mut test_helpers::TestSubsystemContextHandle, ) -> AllMessages { tracing::trace!("waiting for message ..."); - let msg = overseer - .recv() - .timeout(TIMEOUT) - .await - .expect("TIMEOUT is enough to recv."); + let msg = overseer.recv().await; tracing::trace!(msg = ?msg, "received message"); msg } @@ -138,7 +114,6 @@ struct TestState { chain_ids: Vec, validators: Vec, validator_public: Vec, - validator_index: Option, validator_groups: (Vec>, GroupRotationInfo), head_data: HashMap, keystore: SyncCryptoStorePtr, @@ -146,6 +121,8 @@ struct TestState { ancestors: Vec, availability_cores: Vec, persisted_validation_data: PersistedValidationData, + candidates: Vec, + pov_blocks: Vec, } fn validator_pubkeys(val_ids: &[Sr25519Keyring]) -> Vec { @@ -216,7 +193,36 @@ impl Default for TestState { max_pov_size: 1024, }; - let validator_index = Some((validators.len() - 1) as ValidatorIndex); + let pov_block_a = PoV { + block_data: BlockData(vec![42, 43, 44]), + }; + + let pov_block_b = PoV { + block_data: BlockData(vec![45, 46, 47]), + }; + + let candidates = vec![ + TestCandidateBuilder { + para_id: chain_ids[0], + relay_parent: relay_parent, + pov_hash: pov_block_a.hash(), + erasure_root: make_erasure_root(persisted_validation_data.clone(), validators.len(), pov_block_a.clone()), + head_data: head_data.get(&chain_ids[0]).unwrap().clone(), + ..Default::default() + } + .build(), + TestCandidateBuilder { + para_id: chain_ids[1], + relay_parent: relay_parent, + pov_hash: pov_block_b.hash(), + erasure_root: make_erasure_root(persisted_validation_data.clone(), validators.len(), pov_block_b.clone()), + head_data: head_data.get(&chain_ids[1]).unwrap().clone(), + ..Default::default() + } + .build(), + ]; + + let pov_blocks = vec![pov_block_a, pov_block_b]; Self { chain_ids, @@ -229,34 +235,42 @@ impl Default for TestState { persisted_validation_data, relay_parent, ancestors, - validator_index, + candidates, + pov_blocks, } } } -fn make_available_data(test: &TestState, pov: PoV) -> AvailableData { +fn make_available_data(validation_data: PersistedValidationData, pov: PoV) -> AvailableData { AvailableData { - validation_data: test.persisted_validation_data.clone(), + validation_data, pov: Arc::new(pov), } } -fn make_erasure_root(test: &TestState, pov: PoV) -> Hash { - let available_data = make_available_data(test, pov); +fn make_erasure_root(peristed: PersistedValidationData, validator_count: usize, pov: PoV) -> Hash { + let available_data = make_available_data(peristed, pov); - let chunks = obtain_chunks(test.validators.len(), &available_data).unwrap(); + let chunks = obtain_chunks(validator_count, &available_data).unwrap(); branches(&chunks).root() } +fn make_erasure_chunks(peristed: PersistedValidationData, validator_count: usize, pov: PoV) -> Vec { + let available_data = make_available_data(peristed, pov); + + derive_erasure_chunks_with_proofs(validator_count, &available_data) +} + fn make_valid_availability_gossip( test: &TestState, - candidate_hash: CandidateHash, + candidate: usize, erasure_chunk_index: u32, - pov: PoV, ) -> AvailabilityGossipMessage { - let available_data = make_available_data(test, pov); - - let erasure_chunks = derive_erasure_chunks_with_proofs(test.validators.len(), &available_data); + let erasure_chunks = make_erasure_chunks( + test.persisted_validation_data.clone(), + test.validator_public.len(), + test.pov_blocks[candidate].clone(), + ); let erasure_chunk: ErasureChunk = erasure_chunks .get(erasure_chunk_index as usize) @@ -264,7 +278,7 @@ fn make_valid_availability_gossip( .clone(); AvailabilityGossipMessage { - candidate_hash, + candidate_hash: test.candidates[candidate].hash(), erasure_chunk, } } @@ -300,25 +314,13 @@ impl TestCandidateBuilder { fn helper_integrity() { let test_state = TestState::default(); - let pov_block = PoV { - block_data: BlockData(vec![42, 43, 44]), - }; - - let pov_hash = pov_block.hash(); - - let candidate = TestCandidateBuilder { - para_id: test_state.chain_ids[0], - relay_parent: test_state.relay_parent, - pov_hash, - erasure_root: make_erasure_root(&test_state, pov_block.clone()), - ..Default::default() - } - .build(); - - let message = - make_valid_availability_gossip(&test_state, candidate.hash(), 2, pov_block.clone()); + let message = make_valid_availability_gossip( + &test_state, + 0, + 2, + ); - let root = dbg!(&candidate.descriptor.erasure_root); + let root = &test_state.candidates[0].descriptor.erasure_root; let anticipated_hash = branch_hash( root, @@ -353,649 +355,571 @@ fn derive_erasure_chunks_with_proofs( erasure_chunks } -#[test] -fn reputation_verification() { - let test_state = TestState::default(); - - test_harness(test_state.keystore.clone(), |test_harness| async move { - let TestHarness { - mut virtual_overseer, - } = test_harness; - - let expected_head_data = test_state.head_data.get(&test_state.chain_ids[0]).unwrap(); - - let pov_block_a = PoV { - block_data: BlockData(vec![42, 43, 44]), - }; - - let pov_block_b = PoV { - block_data: BlockData(vec![45, 46, 47]), - }; - - let pov_block_c = PoV { - block_data: BlockData(vec![48, 49, 50]), - }; - - let pov_hash_a = pov_block_a.hash(); - let pov_hash_b = pov_block_b.hash(); - let pov_hash_c = pov_block_c.hash(); - - let candidates = vec![ - TestCandidateBuilder { - para_id: test_state.chain_ids[0], - relay_parent: test_state.relay_parent, - pov_hash: pov_hash_a, - erasure_root: make_erasure_root(&test_state, pov_block_a.clone()), - ..Default::default() - } - .build(), - TestCandidateBuilder { - para_id: test_state.chain_ids[1], - relay_parent: test_state.relay_parent, - pov_hash: pov_hash_b, - erasure_root: make_erasure_root(&test_state, pov_block_b.clone()), - head_data: expected_head_data.clone(), - ..Default::default() - } - .build(), - TestCandidateBuilder { - para_id: test_state.chain_ids[1], - relay_parent: Hash::repeat_byte(0xFA), - pov_hash: pov_hash_c, - erasure_root: make_erasure_root(&test_state, pov_block_c.clone()), - head_data: test_state - .head_data - .get(&test_state.chain_ids[1]) - .unwrap() - .clone(), - ..Default::default() - } - .build(), - ]; - - let TestState { - chain_ids, - keystore: _, - validators: _, - validator_public, - validator_groups, - availability_cores, - head_data: _, - persisted_validation_data: _, - relay_parent: current, - ancestors, - validator_index: _, - } = test_state.clone(); - - let _ = validator_groups; - let _ = availability_cores; - - let peer_a = PeerId::random(); - let peer_b = PeerId::random(); - assert_ne!(&peer_a, &peer_b); - - tracing::trace!("peer A: {:?}", peer_a); - tracing::trace!("peer B: {:?}", peer_b); - - tracing::trace!("candidate A: {:?}", candidates[0].hash()); - tracing::trace!("candidate B: {:?}", candidates[1].hash()); - - overseer_signal( - &mut virtual_overseer, - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![current.clone()], - deactivated: smallvec![], - }), - ) - .await; - - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![current,]), - ), - ) - .await; - - // obtain the validators per relay parent +async fn expect_chunks_network_message( + virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, + peers: &[PeerId], + candidates: &[CandidateHash], + chunks: &[ErasureChunk], +) { + for _ in 0..chunks.len() { assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::Validators(tx), - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(validator_public.clone())).unwrap(); + overseer_recv(virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessage( + send_peers, + protocol_v1::ValidationProtocol::AvailabilityDistribution( + protocol_v1::AvailabilityDistributionMessage::Chunk(send_candidate, send_chunk), + ), + ) + ) => { + assert!(candidates.contains(&send_candidate), format!("Could not find candidate: {:?}", send_candidate)); + assert!(chunks.iter().any(|c| c == &send_chunk), format!("Could not find chunk: {:?}", send_chunk)); + assert_eq!(peers.len(), send_peers.len()); + assert!(peers.iter().all(|p| send_peers.contains(p))); } ); + } +} - let genesis = Hash::repeat_byte(0xAA); - // query of k ancestors, we only provide one - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::Ancestors { - hash: relay_parent, - k, - response_channel: tx, - }) => { - assert_eq!(relay_parent, current); - assert_eq!(k, AvailabilityDistributionSubsystem::K + 1); - // 0xAA..AA will not be included, since there is no mean to determine - // its session index - tx.send(Ok(vec![ancestors[0].clone(), genesis])).unwrap(); - } - ); +async fn change_our_view( + virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, + view: View, + validator_public: &[ValidatorId], + ancestors: Vec, + session_per_relay_parent: HashMap, + availability_cores_per_relay_parent: HashMap>, + candidate_pending_availabilities_per_relay_parent: HashMap>, + data_availability: HashMap, + chunk_data_per_candidate: HashMap, + send_chunks_to: HashMap>, +) { + overseer_send(virtual_overseer, NetworkBridgeEvent::OurViewChange(view.clone())).await; - // state query for each of them - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::SessionIndexForChild(tx) - )) => { - assert_eq!(relay_parent, current); - tx.send(Ok(1 as SessionIndex)).unwrap(); - } - ); + // obtain the validators per relay parent + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert!(view.contains(&relay_parent)); + tx.send(Ok(validator_public.to_vec())).unwrap(); + } + ); + // query of k ancestors, we only provide one + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::ChainApi(ChainApiMessage::Ancestors { + hash: relay_parent, + k, + response_channel: tx, + }) => { + assert!(view.contains(&relay_parent)); + assert_eq!(k, AvailabilityDistributionSubsystem::K + 1); + tx.send(Ok(ancestors.clone())).unwrap(); + } + ); + + for _ in 0..session_per_relay_parent.len() { assert_matches!( - overseer_recv(&mut virtual_overseer).await, + overseer_recv(virtual_overseer).await, AllMessages::RuntimeApi(RuntimeApiMessage::Request( relay_parent, RuntimeApiRequest::SessionIndexForChild(tx) )) => { - assert_eq!(relay_parent, genesis); - tx.send(Ok(1 as SessionIndex)).unwrap(); + let index = session_per_relay_parent.get(&relay_parent) + .expect(&format!("Session index for relay parent {:?} does not exist", relay_parent)); + tx.send(Ok(*index)).unwrap(); } ); + } - // subsystem peer id collection - // which will query the availability cores - assert_matches!( - overseer_recv(&mut virtual_overseer).await, + for _ in 0..availability_cores_per_relay_parent.len() { + let relay_parent = assert_matches!( + overseer_recv(virtual_overseer).await, AllMessages::RuntimeApi(RuntimeApiMessage::Request( relay_parent, RuntimeApiRequest::AvailabilityCores(tx) )) => { - assert_eq!(relay_parent, ancestors[0]); - // respond with a set of availability core states - tx.send(Ok(vec![ - dummy_occupied_core(chain_ids[0]), - dummy_occupied_core(chain_ids[1]) - ])).unwrap(); - } - ); + let cores = availability_cores_per_relay_parent.get(&relay_parent) + .expect(&format!("Availability core for relay parent {:?} does not exist", relay_parent)); - // now each of the relay parents in the view (1) will - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::CandidatePendingAvailability(para, tx) - )) => { - assert_eq!(relay_parent, ancestors[0]); - assert_eq!(para, chain_ids[0]); - tx.send(Ok(Some( - candidates[0].clone() - ))).unwrap(); + tx.send(Ok(cores.clone())).unwrap(); + relay_parent } ); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::CandidatePendingAvailability(para, tx) - )) => { - assert_eq!(relay_parent, ancestors[0]); - assert_eq!(para, chain_ids[1]); - tx.send(Ok(Some( - candidates[1].clone() - ))).unwrap(); - } - ); + let pending_availability = candidate_pending_availabilities_per_relay_parent.get(&relay_parent) + .expect(&format!("Candidate pending availability for relay parent {:?} does not exist", relay_parent)); - for _ in 0usize..1 { + for _ in 0..pending_availability.len() { assert_matches!( - overseer_recv(&mut virtual_overseer).await, + overseer_recv(virtual_overseer).await, AllMessages::RuntimeApi(RuntimeApiMessage::Request( - _relay_parent, - RuntimeApiRequest::AvailabilityCores(tx), + hash, + RuntimeApiRequest::CandidatePendingAvailability(para, tx) )) => { - tx.send(Ok(vec![ - CoreState::Occupied(OccupiedCore { - para_id: chain_ids[0].clone(), - next_up_on_available: None, - occupied_since: 0, - time_out_at: 10, - next_up_on_time_out: None, - availability: Default::default(), - group_responsible: GroupIndex::from(0), - }), - CoreState::Free, - CoreState::Free, - CoreState::Occupied(OccupiedCore { - para_id: chain_ids[1].clone(), - next_up_on_available: None, - occupied_since: 1, - time_out_at: 7, - next_up_on_time_out: None, - availability: Default::default(), - group_responsible: GroupIndex::from(0), - }), - CoreState::Free, - CoreState::Free, - ])).unwrap(); - } - ); + assert_eq!(relay_parent, hash); - // query the availability cores for each of the paras (2) - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi( - RuntimeApiMessage::Request( - _relay_parent, - RuntimeApiRequest::CandidatePendingAvailability(para, tx), - ) - ) => { - assert_eq!(para, chain_ids[0]); - tx.send(Ok(Some( - candidates[0].clone() - ))).unwrap(); - } - ); + let candidate = pending_availability.iter() + .find(|c| c.descriptor.para_id == para) + .expect(&format!("Pending candidate for para {} does not exist", para)); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - _relay_parent, - RuntimeApiRequest::CandidatePendingAvailability(para, tx), - )) => { - assert_eq!(para, chain_ids[1]); - tx.send(Ok(Some( - candidates[1].clone() - ))).unwrap(); + tx.send(Ok(Some(candidate.clone()))).unwrap(); } ); } + } - let mut candidates2 = candidates.clone(); - // check if the availability store can provide the desired erasure chunks - for i in 0usize..2 { - tracing::trace!("0000"); - let avail_data = make_available_data(&test_state, pov_block_a.clone()); - let chunks = - derive_erasure_chunks_with_proofs(test_state.validators.len(), &avail_data); + for _ in 0..data_availability.len() { + let (available, candidate_hash) = assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::AvailabilityStore( + AvailabilityStoreMessage::QueryDataAvailability( + candidate_hash, + tx, + ) + ) => { + let available = data_availability.get(&candidate_hash) + .expect(&format!("No data availability for candidate {:?}", candidate_hash)); + + tx.send(*available).unwrap(); + (available, candidate_hash) + } + ); - let expected; - // store the chunk to the av store - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::AvailabilityStore( - AvailabilityStoreMessage::QueryDataAvailability( - candidate_hash, - tx, - ) - ) => { - let index = candidates2.iter().enumerate().find(|x| { x.1.hash() == candidate_hash }).map(|x| x.0).unwrap(); - expected = candidates2.swap_remove(index).hash(); - tx.send(i == 0).unwrap(); - } - ); + if !available { + continue; + } - assert_eq!(chunks.len(), test_state.validators.len()); + if let Some((pov, persisted)) = chunk_data_per_candidate.get(&candidate_hash) { + let chunks = make_erasure_chunks(persisted.clone(), validator_public.len(), pov.clone()); - tracing::trace!("xxxx"); - // retrieve a stored chunk - for (j, chunk) in chunks.into_iter().enumerate() { - tracing::trace!("yyyy i={}, j={}", i, j); - if i != 0 { - // not a validator, so this never happens - break; - } - assert_matches!( - overseer_recv(&mut virtual_overseer).await, + for _ in 0..chunks.len() { + let chunk = assert_matches!( + overseer_recv(virtual_overseer).await, AllMessages::AvailabilityStore( AvailabilityStoreMessage::QueryChunk( candidate_hash, - idx, + index, tx, ) ) => { - assert_eq!(candidate_hash, expected); - assert_eq!(j as u32, chunk.index); - assert_eq!(idx, j as u32); - tx.send( - Some(chunk.clone()) - ).unwrap(); + tracing::trace!("Query chunk {} for candidate {:?}", index, candidate_hash); + let chunk = chunks[index as usize].clone(); + tx.send(Some(chunk.clone())).unwrap(); + chunk } ); + + if let Some(peers) = send_chunks_to.get(&candidate_hash) { + expect_chunks_network_message(virtual_overseer, &peers, &[candidate_hash], &[chunk]).await; + } } } - // setup peer a with interest in current - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerConnected(peer_a.clone(), ObservedRole::Full), - ), - ) - .await; + } +} + +async fn setup_peer_with_view( + virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, + peer: PeerId, + view: View, +) { + overseer_send(virtual_overseer, NetworkBridgeEvent::PeerConnected(peer.clone(), ObservedRole::Full)).await; - overseer_send( + overseer_send(virtual_overseer, NetworkBridgeEvent::PeerViewChange(peer, view)).await; +} + +async fn peer_send_message( + virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, + peer: PeerId, + message: AvailabilityGossipMessage, + expected_reputation_change: Rep, +) { + overseer_send(virtual_overseer, NetworkBridgeEvent::PeerMessage(peer.clone(), chunk_protocol_message(message))).await; + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ReportPeer( + rep_peer, + rep, + ) + ) => { + assert_eq!(peer, rep_peer); + assert_eq!(expected_reputation_change, rep); + } + ); +} + +#[test] +fn check_views() { + let test_state = TestState::default(); + + let peer_a = PeerId::random(); + let peer_a_2 = peer_a.clone(); + let peer_b = PeerId::random(); + let peer_b_2 = peer_b.clone(); + assert_ne!(&peer_a, &peer_b); + + let keystore = test_state.keystore.clone(); + let current = test_state.relay_parent; + let ancestors = test_state.ancestors.clone(); + + let state = test_harness(keystore, move |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let TestState { + chain_ids, + validator_public, + relay_parent: current, + ancestors, + candidates, + pov_blocks, + .. + } = test_state.clone(); + + let genesis = Hash::repeat_byte(0xAA); + change_our_view( &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![current]), - ), - ) - .await; + view![current], + &validator_public, + vec![ancestors[0], genesis], + hashmap! { current => 1, genesis => 1 }, + hashmap! { + ancestors[0] => vec![dummy_occupied_core(chain_ids[0]), dummy_occupied_core(chain_ids[1])], + current => vec![ + CoreState::Occupied(OccupiedCore { + para_id: chain_ids[0].clone(), + next_up_on_available: None, + occupied_since: 0, + time_out_at: 10, + next_up_on_time_out: None, + availability: Default::default(), + group_responsible: GroupIndex::from(0), + }), + CoreState::Free, + CoreState::Free, + CoreState::Occupied(OccupiedCore { + para_id: chain_ids[1].clone(), + next_up_on_available: None, + occupied_since: 1, + time_out_at: 7, + next_up_on_time_out: None, + availability: Default::default(), + group_responsible: GroupIndex::from(0), + }), + CoreState::Free, + CoreState::Free, + ] + }, + hashmap! { + ancestors[0] => vec![candidates[0].clone(), candidates[1].clone()], + current => vec![candidates[0].clone(), candidates[1].clone()], + }, + hashmap! { + candidates[0].hash() => true, + candidates[1].hash() => false, + }, + hashmap! { + candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone()), + }, + hashmap! {}, + ).await; + + // setup peer a with interest in current + setup_peer_with_view(&mut virtual_overseer, peer_a.clone(), view![current]).await; // setup peer b with interest in ancestor - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerConnected(peer_b.clone(), ObservedRole::Full), - ), - ) - .await; + setup_peer_with_view(&mut virtual_overseer, peer_b.clone(), view![ancestors[0]]).await; + }); - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer_b.clone(), view![ancestors[0]]), - ), - ) - .await; + assert_matches! { + state, + ProtocolState { + peer_views, + view, + .. + } => { + assert_eq!( + peer_views, + hashmap! { + peer_a_2 => view![current], + peer_b_2 => view![ancestors[0]], + }, + ); + assert_eq!(view, view![current]); + } + }; +} + +#[test] +fn reputation_verification() { + let test_state = TestState::default(); + + let peer_a = PeerId::random(); + let peer_b = PeerId::random(); + assert_ne!(&peer_a, &peer_b); + + let keystore = test_state.keystore.clone(); - delay!(100); + test_harness(keystore, move |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; - let valid: AvailabilityGossipMessage = make_valid_availability_gossip( + let TestState { + relay_parent: current, + validator_public, + ancestors, + candidates, + pov_blocks, + .. + } = test_state.clone(); + + let valid = make_valid_availability_gossip( &test_state, - candidates[0].hash(), + 0, 2, - pov_block_a.clone(), ); - { - // valid (first, from b) - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage( - peer_b.clone(), - chunk_protocol_message(valid.clone()), - ), - ), - ) - .await; + change_our_view( + &mut virtual_overseer, + view![current], + &validator_public, + vec![ancestors[0]], + hashmap! { current => 1 }, + hashmap! { + current => vec![ + dummy_occupied_core(candidates[0].descriptor.para_id), + dummy_occupied_core(candidates[1].descriptor.para_id) + ], + }, + hashmap! { current => vec![candidates[0].clone(), candidates[1].clone()] }, + hashmap! { candidates[0].hash() => true, candidates[1].hash() => false }, + hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, + hashmap! {}, + ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_b); - assert_eq!(rep, BENEFIT_VALID_MESSAGE_FIRST); - } - ); - } + // valid (first, from b) + peer_send_message(&mut virtual_overseer, peer_b.clone(), valid.clone(), BENEFIT_VALID_MESSAGE).await; - { - // valid (duplicate, from b) - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage( - peer_b.clone(), - chunk_protocol_message(valid.clone()), - ), - ), - ) - .await; + // valid (duplicate, from b) + peer_send_message(&mut virtual_overseer, peer_b.clone(), valid.clone(), COST_PEER_DUPLICATE_MESSAGE).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendValidationMessage( - peers, - protocol_v1::ValidationProtocol::AvailabilityDistribution( - protocol_v1::AvailabilityDistributionMessage::Chunk(hash, chunk), - ), - ) - ) => { - assert_eq!(1, peers.len()); - assert_eq!(peers[0], peer_a); - assert_eq!(candidates[0].hash(), hash); - assert_eq!(valid.erasure_chunk, chunk); - } - ); + // valid (second, from a) + peer_send_message(&mut virtual_overseer, peer_a.clone(), valid.clone(), BENEFIT_VALID_MESSAGE).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_b); - assert_eq!(rep, COST_PEER_DUPLICATE_MESSAGE); - } - ); - } + // send the a message again, so we should detect the duplicate + peer_send_message(&mut virtual_overseer, peer_a.clone(), valid.clone(), COST_PEER_DUPLICATE_MESSAGE).await; + + // peer b sends a message before we have the view + // setup peer a with interest in parent x + overseer_send(&mut virtual_overseer, NetworkBridgeEvent::PeerDisconnected(peer_b.clone())).await; + + overseer_send(&mut virtual_overseer, NetworkBridgeEvent::PeerConnected(peer_b.clone(), ObservedRole::Full)).await; { - // valid (second, from a) - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage( - peer_a.clone(), - chunk_protocol_message(valid.clone()), - ), - ), - ) - .await; + // send another message + let valid = make_valid_availability_gossip(&test_state, 1, 2); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_a); - assert_eq!(rep, BENEFIT_VALID_MESSAGE); - } + // Make peer a and b listen on `current` + overseer_send(&mut virtual_overseer, NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![current])).await; + + let mut chunks = make_erasure_chunks( + test_state.persisted_validation_data.clone(), + validator_public.len(), + pov_blocks[0].clone(), ); - } - // peer a is not interested in anything anymore - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![]), - ), - ) - .await; + // Both peers send us this chunk already + chunks.remove(2); - { - // send the a message again, so we should detect the duplicate - overseer_send( + expect_chunks_network_message(&mut virtual_overseer, &[peer_a.clone()], &[candidates[0].hash()], &chunks).await; + + overseer_send(&mut virtual_overseer, NetworkBridgeEvent::PeerViewChange(peer_b.clone(), view![current])).await; + + expect_chunks_network_message(&mut virtual_overseer, &[peer_b.clone()], &[candidates[0].hash()], &chunks).await; + + peer_send_message(&mut virtual_overseer, peer_a.clone(), valid.clone(), BENEFIT_VALID_MESSAGE_FIRST).await; + + expect_chunks_network_message( &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage( - peer_a.clone(), - chunk_protocol_message(valid.clone()), - ), - ), - ) - .await; + &[peer_b.clone()], + &[candidates[1].hash()], + &[valid.erasure_chunk.clone()], + ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_a); - assert_eq!(rep, COST_PEER_DUPLICATE_MESSAGE); - } - ); + // Let B send the same message + peer_send_message(&mut virtual_overseer, peer_b.clone(), valid.clone(), BENEFIT_VALID_MESSAGE).await; } + }); +} - // peer b sends a message before we have the view - // setup peer a with interest in parent x - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerDisconnected(peer_b.clone()), - ), - ) - .await; +#[test] +fn not_a_live_candidate_is_detected() { + let test_state = TestState::default(); - delay!(10); + let peer_a = PeerId::random(); + + let keystore = test_state.keystore.clone(); + + test_harness(keystore, move |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let TestState { + relay_parent: current, + validator_public, + ancestors, + candidates, + pov_blocks, + .. + } = test_state.clone(); - overseer_send( + change_our_view( &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerConnected(peer_b.clone(), ObservedRole::Full), - ), - ) - .await; + view![current], + &validator_public, + vec![ancestors[0]], + hashmap! { current => 1 }, + hashmap! { + current => vec![ + dummy_occupied_core(candidates[0].descriptor.para_id), + ], + }, + hashmap! { current => vec![candidates[0].clone()] }, + hashmap! { candidates[0].hash() => true }, + hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, + hashmap! {}, + ).await; - { - // send another message - let valid2 = make_valid_availability_gossip( - &test_state, - candidates[2].hash(), - 1, - pov_block_c.clone(), - ); + let valid = make_valid_availability_gossip( + &test_state, + 1, + 1, + ); - // send the a message before we send a view update - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage(peer_a.clone(), chunk_protocol_message(valid2)), - ), - ) - .await; + peer_send_message(&mut virtual_overseer, peer_a.clone(), valid.clone(), COST_NOT_A_LIVE_CANDIDATE).await; + }); +} - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_a); - assert_eq!(rep, COST_NOT_A_LIVE_CANDIDATE); - } - ); - } +#[test] +fn peer_change_view_before_us() { + let test_state = TestState::default(); - { - // send another message - let valid = make_valid_availability_gossip( - &test_state, - candidates[1].hash(), - 2, - pov_block_b.clone(), - ); + let peer_a = PeerId::random(); - // Make peer a and b listen on `current` - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![current]), - ), - ) - .await; + let keystore = test_state.keystore.clone(); - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerViewChange(peer_b.clone(), view![current]), - ), - ) - .await; + test_harness(keystore, move |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage( - peer_a.clone(), - chunk_protocol_message(valid.clone()), - ), - ), - ) - .await; + let TestState { + relay_parent: current, + validator_public, + ancestors, + candidates, + pov_blocks, + .. + } = test_state.clone(); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_a); - assert_eq!(rep, BENEFIT_VALID_MESSAGE_FIRST); - } - ); + setup_peer_with_view(&mut virtual_overseer, peer_a.clone(), view![current]).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendValidationMessage( - peers, - protocol_v1::ValidationProtocol::AvailabilityDistribution( - protocol_v1::AvailabilityDistributionMessage::Chunk(hash, chunk), - ), - ) - ) => { - assert_eq!(1, peers.len()); - assert_eq!(peers[0], peer_b); - assert_eq!(candidates[1].hash(), hash); - assert_eq!(valid.erasure_chunk, chunk); - } - ); + change_our_view( + &mut virtual_overseer, + view![current], + &validator_public, + vec![ancestors[0]], + hashmap! { current => 1 }, + hashmap! { + current => vec![ + dummy_occupied_core(candidates[0].descriptor.para_id), + ], + }, + hashmap! { current => vec![candidates[0].clone()] }, + hashmap! { candidates[0].hash() => true }, + hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, + hashmap! { candidates[0].hash() => vec![peer_a.clone()] }, + ).await; - // Let B send the same message - overseer_send( - &mut virtual_overseer, - AvailabilityDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::PeerMessage( - peer_b.clone(), - chunk_protocol_message(valid.clone()), - ), - ), - ) - .await; + let valid = make_valid_availability_gossip( + &test_state, + 0, + 0, + ); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::ReportPeer( - peer, - rep - ) - ) => { - assert_eq!(peer, peer_b); - assert_eq!(rep, BENEFIT_VALID_MESSAGE); - } - ); + // We send peer a all the chunks of candidate0, so we just benefit him for sending a valid message + peer_send_message(&mut virtual_overseer, peer_a.clone(), valid.clone(), BENEFIT_VALID_MESSAGE).await; + }); +} - // There shouldn't be any other message. - assert!(virtual_overseer.recv().timeout(TIMEOUT).await.is_none()); - } +#[test] +fn candidate_chunks_are_put_into_message_vault_when_candidate_is_first_seen() { + let test_state = TestState::default(); + + let peer_a = PeerId::random(); + + let keystore = test_state.keystore.clone(); + + test_harness(keystore, move |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let TestState { + relay_parent: current, + validator_public, + ancestors, + candidates, + pov_blocks, + .. + } = test_state.clone(); + + change_our_view( + &mut virtual_overseer, + view![ancestors[0]], + &validator_public, + vec![ancestors[1]], + hashmap! { ancestors[0] => 1 }, + hashmap! { + ancestors[0] => vec![ + dummy_occupied_core(candidates[0].descriptor.para_id), + ], + }, + hashmap! { ancestors[0] => vec![candidates[0].clone()] }, + hashmap! { candidates[0].hash() => true }, + hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, + hashmap! {}, + ).await; + + change_our_view( + &mut virtual_overseer, + view![current], + &validator_public, + vec![ancestors[0]], + hashmap! { current => 1 }, + hashmap! { + current => vec![ + dummy_occupied_core(candidates[0].descriptor.para_id), + ], + }, + hashmap! { current => vec![candidates[0].clone()] }, + hashmap! { candidates[0].hash() => true }, + hashmap! {}, + hashmap! {}, + ).await; + + // Let peera connect, we should send him all the chunks of the candidate + setup_peer_with_view(&mut virtual_overseer, peer_a.clone(), view![current]).await; + + let chunks = make_erasure_chunks( + test_state.persisted_validation_data.clone(), + validator_public.len(), + pov_blocks[0].clone(), + ); + expect_chunks_network_message( + &mut virtual_overseer, + &[peer_a], + &[candidates[0].hash()], + &chunks, + ).await; }); } @@ -1076,3 +1000,289 @@ fn k_ancestors_in_session() { executor::block_on(future::join(test_fut, sut).timeout(Duration::from_millis(1000))); } + +#[test] +fn clean_up_receipts_cache_unions_ancestors_and_view() { + let mut state = ProtocolState::default(); + + let hash_a = [0u8; 32].into(); + let hash_b = [1u8; 32].into(); + let hash_c = [2u8; 32].into(); + let hash_d = [3u8; 32].into(); + + state.receipts.insert(hash_a, HashSet::new()); + state.receipts.insert(hash_b, HashSet::new()); + state.receipts.insert(hash_c, HashSet::new()); + state.receipts.insert(hash_d, HashSet::new()); + + state.per_relay_parent.insert(hash_a, PerRelayParent { + ancestors: vec![hash_b], + live_candidates: HashSet::new(), + }); + + state.per_relay_parent.insert(hash_c, PerRelayParent::default()); + + state.clean_up_receipts_cache(); + + assert_eq!(state.receipts.len(), 3); + assert!(state.receipts.contains_key(&hash_a)); + assert!(state.receipts.contains_key(&hash_b)); + assert!(state.receipts.contains_key(&hash_c)); + assert!(!state.receipts.contains_key(&hash_d)); +} + +#[test] +fn remove_relay_parent_only_removes_per_candidate_if_final() { + let mut state = ProtocolState::default(); + + let hash_a = [0u8; 32].into(); + let hash_b = [1u8; 32].into(); + + let candidate_hash_a = CandidateHash([46u8; 32].into()); + + state.per_relay_parent.insert(hash_a, PerRelayParent { + ancestors: vec![], + live_candidates: std::iter::once(candidate_hash_a).collect(), + }); + + state.per_relay_parent.insert(hash_b, PerRelayParent { + ancestors: vec![], + live_candidates: std::iter::once(candidate_hash_a).collect(), + }); + + state.per_candidate.insert(candidate_hash_a, PerCandidate { + live_in: vec![hash_a, hash_b].into_iter().collect(), + ..Default::default() + }); + + state.remove_relay_parent(&hash_a); + + assert!(!state.per_relay_parent.contains_key(&hash_a)); + assert!(!state.per_candidate.get(&candidate_hash_a).unwrap().live_in.contains(&hash_a)); + assert!(state.per_candidate.get(&candidate_hash_a).unwrap().live_in.contains(&hash_b)); + + state.remove_relay_parent(&hash_b); + + assert!(!state.per_relay_parent.contains_key(&hash_b)); + assert!(!state.per_candidate.contains_key(&candidate_hash_a)); +} + +#[test] +fn add_relay_parent_includes_all_live_candidates() { + let relay_parent = [0u8; 32].into(); + + let mut state = ProtocolState::default(); + + let ancestor_a = [1u8; 32].into(); + + let candidate_hash_a = CandidateHash([10u8; 32].into()); + let candidate_hash_b = CandidateHash([11u8; 32].into()); + + let candidates = vec![ + (candidate_hash_a, FetchedLiveCandidate::Fresh(Default::default())), + (candidate_hash_b, FetchedLiveCandidate::Cached), + ].into_iter().collect(); + + state.add_relay_parent( + relay_parent, + Vec::new(), + None, + candidates, + vec![ancestor_a], + ); + + assert!( + state.per_candidate.get(&candidate_hash_a).unwrap().live_in.contains(&relay_parent) + ); + assert!( + state.per_candidate.get(&candidate_hash_b).unwrap().live_in.contains(&relay_parent) + ); + + let per_relay_parent = state.per_relay_parent.get(&relay_parent).unwrap(); + + assert!(per_relay_parent.live_candidates.contains(&candidate_hash_a)); + assert!(per_relay_parent.live_candidates.contains(&candidate_hash_b)); +} + +#[test] +fn query_pending_availability_at_pulls_from_and_updates_receipts() { + let hash_a = [0u8; 32].into(); + let hash_b = [1u8; 32].into(); + + let para_a = ParaId::from(1); + let para_b = ParaId::from(2); + let para_c = ParaId::from(3); + + let make_candidate = |para_id| { + let mut candidate = CommittedCandidateReceipt::default(); + candidate.descriptor.para_id = para_id; + candidate.descriptor.relay_parent = [69u8; 32].into(); + candidate + }; + + let candidate_a = make_candidate(para_a); + let candidate_b = make_candidate(para_b); + let candidate_c = make_candidate(para_c); + + let candidate_hash_a = candidate_a.hash(); + let candidate_hash_b = candidate_b.hash(); + let candidate_hash_c = candidate_c.hash(); + + // receipts has an initial entry for hash_a but not hash_b. + let mut receipts = HashMap::new(); + receipts.insert(hash_a, vec![candidate_hash_a, candidate_hash_b].into_iter().collect()); + + let pool = sp_core::testing::TaskExecutor::new(); + + let (mut ctx, mut virtual_overseer) = + test_helpers::make_subsystem_context::(pool); + + let test_fut = async move { + let live_candidates = query_pending_availability_at( + &mut ctx, + vec![hash_a, hash_b], + &mut receipts, + ).await.unwrap(); + + // although 'b' is cached from the perspective of hash_a, it gets overwritten when we query what's happening in + // + assert_eq!(live_candidates.len(), 3); + assert_matches!(live_candidates.get(&candidate_hash_a).unwrap(), FetchedLiveCandidate::Cached); + assert_matches!(live_candidates.get(&candidate_hash_b).unwrap(), FetchedLiveCandidate::Cached); + assert_matches!(live_candidates.get(&candidate_hash_c).unwrap(), FetchedLiveCandidate::Fresh(_)); + + assert!(receipts.get(&hash_b).unwrap().contains(&candidate_hash_b)); + assert!(receipts.get(&hash_b).unwrap().contains(&candidate_hash_c)); + }; + + let answer = async move { + // hash_a should be answered out of cache, so we should just have + // queried for hash_b. + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request( + r, + RuntimeApiRequest::AvailabilityCores(tx), + ) + ) if r == hash_b => { + let _ = tx.send(Ok(vec![ + CoreState::Occupied(OccupiedCore { + para_id: para_b, + next_up_on_available: None, + occupied_since: 0, + time_out_at: 0, + next_up_on_time_out: None, + availability: Default::default(), + group_responsible: GroupIndex::from(0), + }), + CoreState::Occupied(OccupiedCore { + para_id: para_c, + next_up_on_available: None, + occupied_since: 0, + time_out_at: 0, + next_up_on_time_out: None, + availability: Default::default(), + group_responsible: GroupIndex::from(0), + }), + ])); + } + ); + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request( + r, + RuntimeApiRequest::CandidatePendingAvailability(p, tx), + ) + ) if r == hash_b && p == para_b => { + let _ = tx.send(Ok(Some(candidate_b))); + } + ); + + assert_matches!( + overseer_recv(&mut virtual_overseer).await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request( + r, + RuntimeApiRequest::CandidatePendingAvailability(p, tx), + ) + ) if r == hash_b && p == para_c => { + let _ = tx.send(Ok(Some(candidate_c))); + } + ); + }; + + futures::pin_mut!(test_fut); + futures::pin_mut!(answer); + + executor::block_on(future::join(test_fut, answer)); +} + +#[test] +fn new_peer_gets_all_chunks_send() { + let test_state = TestState::default(); + + let peer_a = PeerId::random(); + let peer_b = PeerId::random(); + assert_ne!(&peer_a, &peer_b); + + let keystore = test_state.keystore.clone(); + + test_harness(keystore, move |test_harness| async move { + let mut virtual_overseer = test_harness.virtual_overseer; + + let TestState { + relay_parent: current, + validator_public, + ancestors, + candidates, + pov_blocks, + .. + } = test_state.clone(); + + let valid = make_valid_availability_gossip( + &test_state, + 1, + 2, + ); + + change_our_view( + &mut virtual_overseer, + view![current], + &validator_public, + vec![ancestors[0]], + hashmap! { current => 1 }, + hashmap! { + current => vec![ + dummy_occupied_core(candidates[0].descriptor.para_id), + dummy_occupied_core(candidates[1].descriptor.para_id) + ], + }, + hashmap! { current => vec![candidates[0].clone(), candidates[1].clone()] }, + hashmap! { candidates[0].hash() => true, candidates[1].hash() => false }, + hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, + hashmap! {}, + ).await; + + peer_send_message(&mut virtual_overseer, peer_b.clone(), valid.clone(), BENEFIT_VALID_MESSAGE_FIRST).await; + + setup_peer_with_view(&mut virtual_overseer, peer_a.clone(), view![current]).await; + + let mut chunks = make_erasure_chunks( + test_state.persisted_validation_data.clone(), + validator_public.len(), + pov_blocks[0].clone(), + ); + + chunks.push(valid.erasure_chunk); + + expect_chunks_network_message( + &mut virtual_overseer, + &[peer_a], + &[candidates[0].hash(), candidates[1].hash()], + &chunks, + ).await; + }); +} diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index 3b7ee32dda..bbd2bc37d7 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -231,7 +231,7 @@ impl NetworkBridgeMessage { } /// Availability Distribution Message. -#[derive(Debug)] +#[derive(Debug, derive_more::From)] pub enum AvailabilityDistributionMessage { /// Event from the network bridge. NetworkBridgeUpdateV1(NetworkBridgeEvent), diff --git a/roadmap/implementers-guide/src/node/availability/availability-distribution.md b/roadmap/implementers-guide/src/node/availability/availability-distribution.md index de34f3b8ed..5b1941bc71 100644 --- a/roadmap/implementers-guide/src/node/availability/availability-distribution.md +++ b/roadmap/implementers-guide/src/node/availability/availability-distribution.md @@ -23,7 +23,8 @@ Output: For each relay-parent in our local view update, look at all backed candidates pending availability. Distribute via gossip all erasure chunks for all candidates that we have to peers. -We define an operation `live_candidates(relay_heads) -> Set` which returns a set of [`CommittedCandidateReceipt`s](../../types/candidate.md#committed-candidate-receipt). +We define an operation `live_candidates(relay_heads) -> Set` which returns a set of hashes corresponding to [`CandidateReceipt`s](../../types/candidate.md#candidate-receipt). + This is defined as all candidates pending availability in any of those relay-chain heads or any of their last `K` ancestors in the same session. We assume that state is not pruned within `K` blocks of the chain-head. `K` commonly is small and is currently fixed to `K=3`. We will send any erasure-chunks that correspond to candidates in `live_candidates(peer_most_recent_view_update)`. -- GitLab From f714f5f485c71b25f32aad21429fec78656116a7 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 17 Dec 2020 15:29:55 -0500 Subject: [PATCH 125/203] add better spans for unbacked candidates (#2132) * add better spans for unbacked candidates * improve span names --- node/core/backing/src/lib.rs | 93 +++++++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 23 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index c54eef157b..3de6c37e61 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_node_primitives::{ FromTableMisbehavior, Statement, SignedFullStatement, MisbehaviorReport, ValidationResult, }; use polkadot_subsystem::{ - jaeger, + jaeger::{self, JaegerSpan}, messages::{ AllMessages, AvailabilityStoreMessage, CandidateBackingMessage, CandidateSelectionMessage, CandidateValidationMessage, PoVDistributionMessage, ProvisionableData, @@ -134,6 +134,8 @@ struct CandidateBackingJob { assignment: Option, /// The collator required to author the candidate, if any. required_collator: Option, + /// Spans for all candidates that are not yet backable. + unbacked_candidates: HashMap, /// We issued `Seconded`, `Valid` or `Invalid` statements on about these candidates. issued_statements: HashSet, /// These candidates are undergoing validation in the background. @@ -371,6 +373,7 @@ struct BackgroundValidationParams { pov: Option>, validator_index: Option, n_validators: usize, + span: JaegerSpan, make_command: F, } @@ -385,19 +388,26 @@ async fn validate_and_make_available( pov, validator_index, n_validators, + span, make_command, } = params; let pov = match pov { Some(pov) => pov, - None => request_pov_from_distribution( - &mut tx_from, - relay_parent, - candidate.descriptor.clone(), - ).await?, + None => { + let _span = span.child("request-pov"); + request_pov_from_distribution( + &mut tx_from, + relay_parent, + candidate.descriptor.clone(), + ).await? + } }; - let v = request_candidate_validation(&mut tx_from, candidate.descriptor.clone(), pov.clone()).await?; + let v = { + let _span = span.child("request-validation"); + request_candidate_validation(&mut tx_from, candidate.descriptor.clone(), pov.clone()).await? + }; let expected_commitments_hash = candidate.commitments_hash; @@ -413,6 +423,7 @@ async fn validate_and_make_available( ); Err(candidate) } else { + let _span = span.child("make-available"); let erasure_valid = make_pov_available( &mut tx_from, validator_index, @@ -458,12 +469,12 @@ impl CandidateBackingJob { async fn run_loop( mut self, mut rx_to: mpsc::Receiver, - span: &jaeger::JaegerSpan + span: &JaegerSpan ) -> Result<(), Error> { loop { futures::select! { validated_command = self.background_validation.next() => { - let _span = span.child("background validation"); + let _span = span.child("process-validation-result"); if let Some(c) = validated_command { self.handle_validated_candidate_command(c).await?; } else { @@ -473,8 +484,10 @@ impl CandidateBackingJob { to_job = rx_to.next() => match to_job { None => break, Some(msg) => { - let _span = span.child("process message"); - self.process_msg(msg).await?; + // we intentionally want spans created in `process_msg` to descend from the + // `span ` which is longer-lived than this ephemeral timing span. + let _timing_span = span.child("process-message"); + self.process_msg(&span, msg).await?; } } } @@ -490,6 +503,7 @@ impl CandidateBackingJob { ) -> Result<(), Error> { let candidate_hash = command.candidate_hash(); self.awaiting_validation.remove(&candidate_hash); + self.remove_unbacked_span(&candidate_hash); match command { ValidatedCandidateCommand::Second(res) => { @@ -564,9 +578,10 @@ impl CandidateBackingJob { } /// Kick off background validation with intent to second. - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(level = "trace", skip(self, parent_span, pov), fields(subsystem = LOG_TARGET))] async fn validate_and_second( &mut self, + parent_span: &JaegerSpan, candidate: &CandidateReceipt, pov: Arc, ) -> Result<(), Error> { @@ -578,6 +593,11 @@ impl CandidateBackingJob { return Ok(()); } + let candidate_hash = candidate.hash(); + self.add_unbacked_span(&parent_span, candidate_hash); + let span = self.get_unbacked_validation_child(&candidate_hash) + .expect("just added unbacked span; qed"); + self.background_validate_and_make_available(BackgroundValidationParams { tx_from: self.tx_from.clone(), tx_command: self.background_validation_tx.clone(), @@ -586,6 +606,7 @@ impl CandidateBackingJob { pov: Some(pov), validator_index: self.table_context.validator.as_ref().map(|v| v.index()), n_validators: self.table_context.validators.len(), + span, make_command: ValidatedCandidateCommand::Second, }).await?; @@ -655,6 +676,8 @@ impl CandidateBackingJob { // `HashSet::insert` returns true if the thing wasn't in there already. // one of the few places the Rust-std folks did a bad job with API if self.backed.insert(summary.candidate) { + self.remove_unbacked_span(&summary.candidate); + if let Some(backed) = table_attested_to_backed(attested, &self.table_context) { @@ -673,8 +696,8 @@ impl CandidateBackingJob { Ok(summary) } - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - async fn process_msg(&mut self, msg: CandidateBackingMessage) -> Result<(), Error> { + #[tracing::instrument(level = "trace", skip(self, span), fields(subsystem = LOG_TARGET))] + async fn process_msg(&mut self, span: &JaegerSpan, msg: CandidateBackingMessage) -> Result<(), Error> { match msg { CandidateBackingMessage::Second(_, candidate, pov) => { let _timer = self.metrics.time_process_second(); @@ -693,7 +716,7 @@ impl CandidateBackingJob { let pov = Arc::new(pov); if !self.issued_statements.contains(&candidate_hash) { - self.validate_and_second(&candidate, pov.clone()).await?; + self.validate_and_second(&span, &candidate, pov.clone()).await?; } } } @@ -701,7 +724,7 @@ impl CandidateBackingJob { let _timer = self.metrics.time_process_statement(); self.check_statement_signature(&statement)?; - match self.maybe_validate_and_import(statement).await { + match self.maybe_validate_and_import(&span, statement).await { Err(Error::ValidationFailed(_)) => return Ok(()), Err(e) => return Err(e), Ok(()) => (), @@ -726,10 +749,11 @@ impl CandidateBackingJob { } /// Kick off validation work and distribute the result as a signed statement. - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(level = "trace", skip(self, span), fields(subsystem = LOG_TARGET))] async fn kick_off_validation_work( &mut self, summary: TableSummary, + span: JaegerSpan, ) -> Result<(), Error> { let candidate_hash = summary.candidate; @@ -763,20 +787,26 @@ impl CandidateBackingJob { pov: None, validator_index: self.table_context.validator.as_ref().map(|v| v.index()), n_validators: self.table_context.validators.len(), + span, make_command: ValidatedCandidateCommand::Attest, }).await } /// Import the statement and kick off validation work if it is a part of our assignment. - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(level = "trace", skip(self, parent_span), fields(subsystem = LOG_TARGET))] async fn maybe_validate_and_import( &mut self, + parent_span: &JaegerSpan, statement: SignedFullStatement, ) -> Result<(), Error> { if let Some(summary) = self.import_statement(&statement).await? { if let Statement::Seconded(_) = statement.payload() { + self.add_unbacked_span(parent_span, summary.candidate); if Some(summary.group_id) == self.assignment { - self.kick_off_validation_work(summary).await?; + let span = self.get_unbacked_validation_child(&summary.candidate) + .expect("just created unbacked span; qed"); + + self.kick_off_validation_work(summary, span).await?; } } } @@ -812,6 +842,22 @@ impl CandidateBackingJob { Ok(()) } + fn add_unbacked_span(&mut self, parent_span: &JaegerSpan, hash: CandidateHash) { + self.unbacked_candidates.entry(hash).or_insert_with(|| { + let mut span = parent_span.child("unbacked-candidate"); + span.add_string_tag("candidate-hash", &format!("{:?}", hash.0)); + span + }); + } + + fn get_unbacked_validation_child(&self, hash: &CandidateHash) -> Option { + self.unbacked_candidates.get(hash).map(|span| span.child("validation")) + } + + fn remove_unbacked_span(&mut self, hash: &CandidateHash) { + self.unbacked_candidates.remove(hash); + } + async fn send_to_provisioner(&mut self, msg: ProvisionerMessage) -> Result<(), Error> { self.tx_from.send(AllMessages::from(msg).into()).await?; @@ -875,7 +921,7 @@ impl util::JobTrait for CandidateBackingJob { } let span = jaeger::hash_span(&parent, "run:backing"); - let _span = span.child("runtime apis"); + let _span = span.child("runtime-apis"); let (validators, groups, session_index, cores) = futures::try_join!( try_runtime_api!(request_validators(parent, &mut tx_from).await), @@ -894,7 +940,7 @@ impl util::JobTrait for CandidateBackingJob { let cores = try_runtime_api!(cores); drop(_span); - let _span = span.child("validator construction"); + let _span = span.child("validator-construction"); let signing_context = SigningContext { parent_hash: parent, session_index }; let validator = match Validator::construct( @@ -916,7 +962,7 @@ impl util::JobTrait for CandidateBackingJob { }; drop(_span); - let _span = span.child("calc validator groups"); + let _span = span.child("calc-validator-groups"); let mut groups = HashMap::new(); @@ -951,7 +997,7 @@ impl util::JobTrait for CandidateBackingJob { }; drop(_span); - let _span = span.child("wait for candidate backing job"); + let _span = span.child("wait-for-job"); let (background_tx, background_rx) = mpsc::channel(16); let job = CandidateBackingJob { @@ -962,6 +1008,7 @@ impl util::JobTrait for CandidateBackingJob { issued_statements: HashSet::new(), awaiting_validation: HashSet::new(), seconded: None, + unbacked_candidates: HashMap::new(), backed: HashSet::new(), reported_misbehavior_for: HashSet::new(), keystore, -- GitLab From e28bcbd2d39d9005bf87903e1aec6d71ba1f8c56 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 17 Dec 2020 16:11:37 -0500 Subject: [PATCH 126/203] adjust span names (#2135) * adjust span names * fix compile --- node/core/bitfield-signing/src/lib.rs | 25 ++++++++++++++----- node/core/candidate-selection/src/lib.rs | 10 ++++---- node/core/proposer/src/lib.rs | 4 +-- node/core/provisioner/src/lib.rs | 10 ++++---- node/network/bitfield-distribution/src/lib.rs | 4 +-- 5 files changed, 33 insertions(+), 20 deletions(-) diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index d5c7f4b29a..15ab1983c9 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -76,7 +76,7 @@ async fn get_core_availability( validator_idx: ValidatorIndex, sender: &Mutex<&mut mpsc::Sender>, ) -> Result { - let span = jaeger::hash_span(&relay_parent, "core_availability"); + let span = jaeger::hash_span(&relay_parent, "core-availability"); if let CoreState::Occupied(core) = core { tracing::trace!(target: LOG_TARGET, para_id = %core.para_id, "Getting core availability"); @@ -144,7 +144,6 @@ async fn get_availability_cores( relay_parent: Hash, sender: &mut mpsc::Sender, ) -> Result, Error> { - let _span = jaeger::hash_span(&relay_parent, "get availability cores"); let (tx, rx) = oneshot::channel(); sender .send(AllMessages::from(RuntimeApiMessage::Request(relay_parent, RuntimeApiRequest::AvailabilityCores(tx))).into()) @@ -160,14 +159,18 @@ async fn get_availability_cores( /// - for each core, concurrently determine chunk availability (see `get_core_availability`) /// - return the bitfield if there were no errors at any point in this process /// (otherwise, it's prone to false negatives) -#[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(sender, span), fields(subsystem = LOG_TARGET))] async fn construct_availability_bitfield( relay_parent: Hash, + span: &jaeger::JaegerSpan, validator_idx: ValidatorIndex, sender: &mut mpsc::Sender, ) -> Result { // get the set of availability cores from the runtime - let availability_cores = get_availability_cores(relay_parent, sender).await?; + let availability_cores = { + let _span = span.child("get-availability-cores"); + get_availability_cores(relay_parent, sender).await? + }; // Wrap the sender in a Mutex to share it between the futures. // @@ -274,7 +277,12 @@ impl JobTrait for BitfieldSigningJob { let _span = span.child("availablity"); let bitfield = - match construct_availability_bitfield(relay_parent, validator.index(), &mut sender).await + match construct_availability_bitfield( + relay_parent, + &span, + validator.index(), + &mut sender, + ).await { Err(Error::Runtime(runtime_err)) => { // Don't take down the node on runtime API errors. @@ -338,7 +346,12 @@ mod tests { let relay_parent = Hash::default(); let validator_index = 1u32; - let future = construct_availability_bitfield(relay_parent, validator_index, &mut sender).fuse(); + let future = construct_availability_bitfield( + relay_parent, + &jaeger::JaegerSpan::Disabled, + validator_index, + &mut sender, + ).fuse(); pin_mut!(future); loop { diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index 3958ffe280..de128722af 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -102,7 +102,7 @@ impl JobTrait for CandidateSelectionJob { ) -> Pin> + Send>> { let span = jaeger::hash_span(&relay_parent, "candidate-selection:run"); async move { - let _span = span.child("query runtime"); + let _span = span.child("query-runtime"); let (groups, cores) = futures::try_join!( try_runtime_api!(request_validator_groups(relay_parent, &mut sender).await), try_runtime_api!(request_from_runtime( @@ -116,7 +116,7 @@ impl JobTrait for CandidateSelectionJob { let cores = try_runtime_api!(cores); drop(_span); - let _span = span.child("find assignment"); + let _span = span.child("find-assignment"); let n_cores = cores.len(); @@ -171,7 +171,7 @@ impl CandidateSelectionJob { } async fn run_loop(&mut self, span: &jaeger::JaegerSpan) -> Result<(), Error> { - let span = span.child("run loop"); + let span = span.child("run-loop"); loop { match self.receiver.next().await { Some(CandidateSelectionMessage::Collation( @@ -179,14 +179,14 @@ impl CandidateSelectionJob { para_id, collator_id, )) => { - let _span = span.child("handle collation"); + let _span = span.child("handle-collation"); self.handle_collation(relay_parent, para_id, collator_id).await; } Some(CandidateSelectionMessage::Invalid( _, candidate_receipt, )) => { - let _span = span.child("handle invalid"); + let _span = span.child("handle-invalid"); self.handle_invalid(candidate_receipt).await; } None => break, diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index 63b3859422..96eb6bb95f 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -197,7 +197,7 @@ where ) -> Self::Proposal { async move { let span = jaeger::hash_span(&self.parent_header_hash, "propose"); - let _span = span.child("get provisioner"); + let _span = span.child("get-provisioner"); let provisioner_data = match self.get_provisioner_data().await { Ok(pd) => pd, @@ -214,7 +214,7 @@ where &provisioner_data, )?; - let _span = span.child("authorship propose"); + let _span = span.child("authorship-propose"); self.inner .propose(inherent_data, inherent_digests, max_duration, record_proof) .await diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index fe89a6136c..7eb134fc2a 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -155,7 +155,7 @@ impl JobTrait for ProvisioningJob { sender, receiver, ); - + let span = jaeger::hash_span(&relay_parent, "provisioner"); // it isn't necessary to break run_loop into its own function, @@ -194,7 +194,7 @@ impl ProvisioningJob { futures::select! { msg = self.receiver.next().fuse() => match msg { Some(RequestInherentData(_, return_sender)) => { - let _span = span.child("req inherent data"); + let _span = span.child("req-inherent-data"); let _timer = self.metrics.time_request_inherent_data(); if self.inherent_after.is_ready() { @@ -204,11 +204,11 @@ impl ProvisioningJob { } } Some(RequestBlockAuthorshipData(_, sender)) => { - let _span = span.child("req block authorship"); + let _span = span.child("req-block-authorship"); self.provisionable_data_channels.push(sender) } Some(ProvisionableData(_, data)) => { - let _span = span.child("provisionable data"); + let _span = span.child("provisionable-data"); let _timer = self.metrics.time_provisionable_data(); let mut bad_indices = Vec::new(); @@ -246,7 +246,7 @@ impl ProvisioningJob { None => break, }, _ = self.inherent_after.ready().fuse() => { - let _span = span.child("send inherent data"); + let _span = span.child("send-inherent-data"); let return_senders = std::mem::take(&mut self.awaiting_inherent); if !return_senders.is_empty() { self.send_inherent_data(return_senders).await; diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 5bd08e9e87..966cded33d 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -310,7 +310,7 @@ async fn relay_message( where Context: SubsystemContext, { - let span = jaeger::hash_span(&message.relay_parent, "relay_msg"); + let span = jaeger::hash_span(&message.relay_parent, "relay-msg"); let _span = span.child("provisionable"); // notify the overseer about a new and valid signed bitfield @@ -327,7 +327,7 @@ where drop(_span); - let _span = span.child("interested peers"); + let _span = span.child("interested-peers"); // pass on the bitfield distribution to all interested peers let interested_peers = peer_views .iter() -- GitLab From c58edafe58d2ade8cbd0b0480a2e35dfb9d9299b Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 17 Dec 2020 18:23:47 -0500 Subject: [PATCH 127/203] address review comments from 2104 (#2136) --- .../availability-distribution/src/lib.rs | 49 +++++++++---------- .../availability-distribution/src/tests.rs | 20 ++++---- 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 5bf11defd2..9559aa3ef4 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -135,10 +135,10 @@ struct ProtocolState { /// Our own view. view: View, - /// Caches a mapping of relay parents or ancestor to live candidate receipts. + /// Caches a mapping of relay parents or ancestor to live candidate hashes. /// Allows fast intersection of live candidates with views and consecutive unioning. - /// Maps relay parent / ancestor -> candidate receipts. - receipts: HashMap>, + /// Maps relay parent / ancestor -> candidate hashes. + live_under: HashMap>, /// Track things needed to start and stop work on a particular relay parent. per_relay_parent: HashMap, @@ -217,7 +217,9 @@ impl ProtocolState { candidates: HashMap, ancestors: Vec, ) { - let candidate_hashes: Vec<_> = candidates.keys().cloned().collect(); + let per_relay_parent = self.per_relay_parent.entry(relay_parent).or_default(); + per_relay_parent.ancestors = ancestors; + per_relay_parent.live_candidates.extend(candidates.keys().cloned()); // register the relation of relay_parent to candidate.. for (receipt_hash, fetched) in candidates { @@ -232,10 +234,6 @@ impl ProtocolState { } per_candidate.live_in.insert(relay_parent); } - - let per_relay_parent = self.per_relay_parent.entry(relay_parent).or_default(); - per_relay_parent.ancestors = ancestors; - per_relay_parent.live_candidates.extend(candidate_hashes); } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] @@ -254,15 +252,15 @@ impl ProtocolState { } } - // Removes all entries from receipts which aren't referenced in the ancestry of + // Removes all entries from live_under which aren't referenced in the ancestry of // one of our live relay-chain heads. - fn clean_up_receipts_cache(&mut self) { + fn clean_up_live_under_cache(&mut self) { let extended_view: HashSet<_> = self.per_relay_parent.iter() - .map(|(r_hash, v)| v.ancestors.iter().cloned().chain(std::iter::once(*r_hash))) + .map(|(r_hash, v)| v.ancestors.iter().cloned().chain(iter::once(*r_hash))) .flatten() .collect(); - self.receipts.retain(|ancestor_hash, _| extended_view.contains(ancestor_hash)); + self.live_under.retain(|ancestor_hash, _| extended_view.contains(ancestor_hash)); } } @@ -337,7 +335,7 @@ where let validators = query_validators(ctx, *added).await?; let validator_index = obtain_our_validator_index(&validators, keystore.clone()).await; let (candidates, ancestors) - = query_live_candidates(ctx, &mut state.receipts, *added).await?; + = query_live_candidates(ctx, &mut state.live_under, *added).await?; state.add_relay_parent( *added, @@ -424,7 +422,7 @@ where // cleanup the removed relay parents and their states old_view.difference(&view).for_each(|r| state.remove_relay_parent(r)); - state.clean_up_receipts_cache(); + state.clean_up_live_under_cache(); Ok(()) } @@ -772,13 +770,13 @@ enum FetchedLiveCandidate { /// This returns a set of all candidate hashes pending availability within the state /// of the explicitly referenced relay heads. /// -/// This also queries the provided `receipts` cache before reaching into the +/// This also queries the provided `live_under` cache before reaching into the /// runtime and updates it with the information learned. -#[tracing::instrument(level = "trace", skip(ctx, relay_blocks, receipts), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, relay_blocks, live_under), fields(subsystem = LOG_TARGET))] async fn query_pending_availability_at( ctx: &mut Context, relay_blocks: impl IntoIterator, - receipts: &mut HashMap>, + live_under: &mut HashMap>, ) -> Result> where Context: SubsystemContext, @@ -787,7 +785,7 @@ where // fetch and fill out cache for each of these for relay_parent in relay_blocks { - let receipts_for = match receipts.entry(relay_parent) { + let receipts_for = match live_under.entry(relay_parent) { Entry::Occupied(e) => { live_candidates.extend( e.get().iter().cloned().map(|c| (c, FetchedLiveCandidate::Cached)) @@ -819,14 +817,15 @@ where /// Obtain all live candidates under a particular relay head. This implicitly includes /// `K` ancestors of the head, such that the candidates pending availability in all of /// the states of the head and the ancestors are unioned together to produce the -/// return type of this function. Each candidate hash is paired. +/// return type of this function. Each candidate hash is paired with information about +/// from where it was fetched. /// -/// This also updates all `receipts` cached by the protocol state and returns a list +/// This also updates all `live_under` cached by the protocol state and returns a list /// of up to `K` ancestors of the relay-parent. -#[tracing::instrument(level = "trace", skip(ctx, receipts), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, live_under), fields(subsystem = LOG_TARGET))] async fn query_live_candidates( ctx: &mut Context, - receipts: &mut HashMap>, + live_under: &mut HashMap>, relay_parent: Hash, ) -> Result<(HashMap, Vec)> where @@ -840,12 +839,12 @@ where ) .await?; - // query the ones that were not present in the receipts cache and add them + // query the ones that were not present in the live_under cache and add them // to it. let live_candidates = query_pending_availability_at( ctx, - ancestors.iter().cloned().chain(std::iter::once(relay_parent)), - receipts, + ancestors.iter().cloned().chain(iter::once(relay_parent)), + live_under, ).await?; Ok((live_candidates, ancestors)) diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index 310ca9e87c..cdf5c76fb2 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -1010,10 +1010,10 @@ fn clean_up_receipts_cache_unions_ancestors_and_view() { let hash_c = [2u8; 32].into(); let hash_d = [3u8; 32].into(); - state.receipts.insert(hash_a, HashSet::new()); - state.receipts.insert(hash_b, HashSet::new()); - state.receipts.insert(hash_c, HashSet::new()); - state.receipts.insert(hash_d, HashSet::new()); + state.live_under.insert(hash_a, HashSet::new()); + state.live_under.insert(hash_b, HashSet::new()); + state.live_under.insert(hash_c, HashSet::new()); + state.live_under.insert(hash_d, HashSet::new()); state.per_relay_parent.insert(hash_a, PerRelayParent { ancestors: vec![hash_b], @@ -1022,13 +1022,13 @@ fn clean_up_receipts_cache_unions_ancestors_and_view() { state.per_relay_parent.insert(hash_c, PerRelayParent::default()); - state.clean_up_receipts_cache(); + state.clean_up_live_under_cache(); - assert_eq!(state.receipts.len(), 3); - assert!(state.receipts.contains_key(&hash_a)); - assert!(state.receipts.contains_key(&hash_b)); - assert!(state.receipts.contains_key(&hash_c)); - assert!(!state.receipts.contains_key(&hash_d)); + assert_eq!(state.live_under.len(), 3); + assert!(state.live_under.contains_key(&hash_a)); + assert!(state.live_under.contains_key(&hash_b)); + assert!(state.live_under.contains_key(&hash_c)); + assert!(!state.live_under.contains_key(&hash_d)); } #[test] -- GitLab From af0aff9628605654089ac9a116bfd116c2ecfa80 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 18 Dec 2020 03:20:37 -0500 Subject: [PATCH 128/203] Add candidate info to OccupiedCore (#2134) * guide: add candidate information to OccupiedCore * add descriptor and hash to occupied core type * guide: add candidate hash to inclusion * runtime: return candidate info in core state * bitfield signing: stop querying runtime as much * minimize going to runtime in availability distribution * fix availability distribution tests * guide: remove para ID from Occupied core * get all crates compiling --- node/core/bitfield-signing/src/lib.rs | 65 +++-------- node/core/provisioner/src/tests.rs | 3 +- .../availability-distribution/src/lib.rs | 70 +++--------- .../availability-distribution/src/tests.rs | 104 +++++------------- primitives/src/v1.rs | 37 ++++--- .../src/node/availability/bitfield-signing.md | 2 +- .../src/runtime-api/availability-cores.md | 7 +- .../src/runtime/inclusion.md | 1 + runtime/kusama/src/lib.rs | 2 +- runtime/parachains/src/inclusion.rs | 30 ++++- runtime/parachains/src/runtime_api_impl/v1.rs | 8 +- runtime/polkadot/src/lib.rs | 2 +- runtime/rococo/src/lib.rs | 2 +- runtime/test-runtime/src/lib.rs | 2 +- runtime/westend/src/lib.rs | 2 +- 15 files changed, 129 insertions(+), 208 deletions(-) diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 15ab1983c9..3b30736a0a 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -78,37 +78,7 @@ async fn get_core_availability( ) -> Result { let span = jaeger::hash_span(&relay_parent, "core-availability"); if let CoreState::Occupied(core) = core { - tracing::trace!(target: LOG_TARGET, para_id = %core.para_id, "Getting core availability"); - - let _span = span.child("occupied"); - let (tx, rx) = oneshot::channel(); - sender - .lock() - .await - .send( - AllMessages::from(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::CandidatePendingAvailability(core.para_id, tx), - )).into(), - ) - .await?; - - let committed_candidate_receipt = match rx.await? { - Ok(Some(ccr)) => ccr, - Ok(None) => { - tracing::trace!(target: LOG_TARGET, para_id = %core.para_id, "No committed candidate"); - return Ok(false) - }, - Err(e) => { - // Don't take down the node on runtime API errors. - tracing::warn!(target: LOG_TARGET, err = ?e, "Encountered a runtime API error"); - return Ok(false); - } - }; - - drop(_span); let _span = span.child("query chunk"); - let candidate_hash = committed_candidate_receipt.hash(); let (tx, rx) = oneshot::channel(); sender @@ -116,7 +86,7 @@ async fn get_core_availability( .await .send( AllMessages::from(AvailabilityStoreMessage::QueryChunkAvailability( - candidate_hash, + core.candidate_hash, validator_idx, tx, )).into(), @@ -127,9 +97,9 @@ async fn get_core_availability( tracing::trace!( target: LOG_TARGET, - para_id = %core.para_id, + para_id = %core.para_id(), availability = ?res, - ?candidate_hash, + ?core.candidate_hash, "Candidate availability", ); @@ -325,17 +295,18 @@ pub type BitfieldSigningSubsystem = JobManager CoreState { + fn occupied_core(para_id: u32, candidate_hash: CandidateHash) -> CoreState { CoreState::Occupied(OccupiedCore { - para_id: para_id.into(), group_responsible: para_id.into(), next_up_on_available: None, occupied_since: 100_u32, time_out_at: 200_u32, next_up_on_time_out: None, availability: Default::default(), + candidate_hash, + candidate_descriptor: Default::default(), }) } @@ -354,6 +325,9 @@ mod tests { ).fuse(); pin_mut!(future); + let hash_a = CandidateHash(Hash::repeat_byte(1)); + let hash_b = CandidateHash(Hash::repeat_byte(2)); + loop { futures::select! { m = receiver.next() => match m.unwrap() { @@ -363,29 +337,16 @@ mod tests { ), ) => { assert_eq!(relay_parent, rp); - tx.send(Ok(vec![CoreState::Free, occupied_core(1), occupied_core(2)])).unwrap(); - }, - FromJobCommand::SendMessage( - AllMessages::RuntimeApi( - RuntimeApiMessage::Request(rp, RuntimeApiRequest::CandidatePendingAvailability(para_id, tx)), - ), - ) => { - assert_eq!(relay_parent, rp); - - if para_id == 1.into() { - tx.send(Ok(Some(Default::default()))).unwrap(); - } else { - tx.send(Ok(None)).unwrap(); - } + tx.send(Ok(vec![CoreState::Free, occupied_core(1, hash_a), occupied_core(2, hash_b)])).unwrap(); }, FromJobCommand::SendMessage( AllMessages::AvailabilityStore( - AvailabilityStoreMessage::QueryChunkAvailability(_, vidx, tx), + AvailabilityStoreMessage::QueryChunkAvailability(c_hash, vidx, tx), ), ) => { assert_eq!(validator_index, vidx); - tx.send(true).unwrap(); + tx.send(c_hash == hash_a).unwrap(); }, o => panic!("Unknown message: {:?}", o), }, diff --git a/node/core/provisioner/src/tests.rs b/node/core/provisioner/src/tests.rs index cc3750591e..f6977d69ec 100644 --- a/node/core/provisioner/src/tests.rs +++ b/node/core/provisioner/src/tests.rs @@ -4,13 +4,14 @@ use polkadot_primitives::v1::{OccupiedCore, ScheduledCore}; pub fn occupied_core(para_id: u32) -> CoreState { CoreState::Occupied(OccupiedCore { - para_id: para_id.into(), group_responsible: para_id.into(), next_up_on_available: None, occupied_since: 100_u32, time_out_at: 200_u32, next_up_on_time_out: None, availability: bitvec![bitvec::order::Lsb0, u8; 0; 32], + candidate_descriptor: Default::default(), + candidate_hash: Default::default(), }) } diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 9559aa3ef4..7ce4afe2ad 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -36,7 +36,7 @@ use polkadot_node_network_protocol::{ }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_primitives::v1::{ - BlakeTwo256, CommittedCandidateReceipt, CoreState, ErasureChunk, Hash, HashT, Id as ParaId, + BlakeTwo256, CoreState, ErasureChunk, Hash, HashT, SessionIndex, ValidatorId, ValidatorIndex, PARACHAIN_KEY_TYPE_ID, CandidateHash, CandidateDescriptor, }; @@ -62,11 +62,6 @@ const LOG_TARGET: &'static str = "availability_distribution"; #[derive(Debug, Error)] enum Error { - #[error("Response channel to obtain PendingAvailability failed")] - QueryPendingAvailabilityResponseChannel(#[source] oneshot::Canceled), - #[error("RuntimeAPI to obtain PendingAvailability failed")] - QueryPendingAvailability(#[source] RuntimeApiError), - #[error("Response channel to obtain StoreChunk failed")] StoreChunkResponseChannel(#[source] oneshot::Canceled), @@ -795,19 +790,12 @@ where e => e.or_default(), }; - for para in query_para_ids(ctx, relay_parent).await? { - if let Some(ccr) = query_pending_availability(ctx, relay_parent, para).await? { - let receipt_hash = ccr.hash(); - let descriptor = ccr.descriptor().clone(); - - // unfortunately we have no good way of telling the candidate was - // cached until now. But we don't clobber a `Cached` entry if there - // is one already. - live_candidates.entry(receipt_hash) - .or_insert(FetchedLiveCandidate::Fresh(descriptor)); - - receipts_for.insert(receipt_hash); - } + for (receipt_hash, descriptor) in query_pending_availability(ctx, relay_parent).await? { + // unfortunately we have no good way of telling the candidate was + // cached until now. But we don't clobber a `Cached` entry if there + // is one already. + live_candidates.entry(receipt_hash).or_insert(FetchedLiveCandidate::Fresh(descriptor)); + receipts_for.insert(receipt_hash); } } @@ -850,9 +838,10 @@ where Ok((live_candidates, ancestors)) } -/// Query all para IDs that are occupied under a given relay-parent. +/// Query all hashes and descriptors of candidates pending availability at a particular block. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn query_para_ids(ctx: &mut Context, relay_parent: Hash) -> Result> +async fn query_pending_availability(ctx: &mut Context, relay_parent: Hash) + -> Result> where Context: SubsystemContext, { @@ -863,22 +852,18 @@ where ))) .await; - let all_para_ids = rx + let cores: Vec<_> = rx .await .map_err(|e| Error::AvailabilityCoresResponseChannel(e))? .map_err(|e| Error::AvailabilityCores(e))?; - let occupied_para_ids = all_para_ids - .into_iter() - .filter_map(|core_state| { - if let CoreState::Occupied(occupied) = core_state { - Some(occupied.para_id) - } else { - None - } + Ok(cores.into_iter() + .filter_map(|core_state| if let CoreState::Occupied(occupied) = core_state { + Some((occupied.candidate_hash, occupied.candidate_descriptor)) + } else { + None }) - .collect(); - Ok(occupied_para_ids) + .collect()) } /// Modify the reputation of a peer based on its behavior. @@ -954,27 +939,6 @@ where rx.await.map_err(|e| Error::StoreChunkResponseChannel(e)) } -/// Request the head data for a particular para. -#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn query_pending_availability( - ctx: &mut Context, - relay_parent: Hash, - para: ParaId, -) -> Result> -where - Context: SubsystemContext, -{ - let (tx, rx) = oneshot::channel(); - ctx.send_message(AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::CandidatePendingAvailability(para, tx), - ))).await; - - rx.await - .map_err(|e| Error::QueryPendingAvailabilityResponseChannel(e))? - .map_err(|e| Error::QueryPendingAvailability(e)) -} - /// Query the validator set. #[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] async fn query_validators( diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index cdf5c76fb2..a34caec7ab 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -21,7 +21,8 @@ use polkadot_node_network_protocol::{view, ObservedRole}; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_primitives::v1::{ AvailableData, BlockData, CandidateCommitments, CandidateDescriptor, GroupIndex, - GroupRotationInfo, HeadData, OccupiedCore, PersistedValidationData, PoV, ScheduledCore, + GroupRotationInfo, HeadData, OccupiedCore, PersistedValidationData, PoV, ScheduledCore, Id as ParaId, + CommittedCandidateReceipt, }; use polkadot_subsystem_testhelpers as test_helpers; @@ -29,6 +30,7 @@ use futures::{executor, future, Future}; use sc_keystore::LocalKeystore; use sp_application_crypto::AppKey; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; +use sp_keyring::Sr25519Keyring; use std::{sync::Arc, time::Duration}; use maplit::hashmap; @@ -95,20 +97,19 @@ async fn overseer_recv( msg } -fn dummy_occupied_core(para: ParaId) -> CoreState { +fn occupied_core_from_candidate(receipt: &CommittedCandidateReceipt) -> CoreState { CoreState::Occupied(OccupiedCore { - para_id: para, next_up_on_available: None, occupied_since: 0, time_out_at: 5, next_up_on_time_out: None, availability: Default::default(), group_responsible: GroupIndex::from(0), + candidate_hash: receipt.hash(), + candidate_descriptor: receipt.descriptor().clone(), }) } -use sp_keyring::Sr25519Keyring; - #[derive(Clone)] struct TestState { chain_ids: Vec, @@ -388,7 +389,6 @@ async fn change_our_view( ancestors: Vec, session_per_relay_parent: HashMap, availability_cores_per_relay_parent: HashMap>, - candidate_pending_availabilities_per_relay_parent: HashMap>, data_availability: HashMap, chunk_data_per_candidate: HashMap, send_chunks_to: HashMap>, @@ -436,7 +436,7 @@ async fn change_our_view( } for _ in 0..availability_cores_per_relay_parent.len() { - let relay_parent = assert_matches!( + assert_matches!( overseer_recv(virtual_overseer).await, AllMessages::RuntimeApi(RuntimeApiMessage::Request( relay_parent, @@ -446,30 +446,8 @@ async fn change_our_view( .expect(&format!("Availability core for relay parent {:?} does not exist", relay_parent)); tx.send(Ok(cores.clone())).unwrap(); - relay_parent } ); - - let pending_availability = candidate_pending_availabilities_per_relay_parent.get(&relay_parent) - .expect(&format!("Candidate pending availability for relay parent {:?} does not exist", relay_parent)); - - for _ in 0..pending_availability.len() { - assert_matches!( - overseer_recv(virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - hash, - RuntimeApiRequest::CandidatePendingAvailability(para, tx) - )) => { - assert_eq!(relay_parent, hash); - - let candidate = pending_availability.iter() - .find(|c| c.descriptor.para_id == para) - .expect(&format!("Pending candidate for para {} does not exist", para)); - - tx.send(Ok(Some(candidate.clone()))).unwrap(); - } - ); - } } for _ in 0..data_availability.len() { @@ -571,7 +549,6 @@ fn check_views() { let mut virtual_overseer = test_harness.virtual_overseer; let TestState { - chain_ids, validator_public, relay_parent: current, ancestors, @@ -588,36 +565,37 @@ fn check_views() { vec![ancestors[0], genesis], hashmap! { current => 1, genesis => 1 }, hashmap! { - ancestors[0] => vec![dummy_occupied_core(chain_ids[0]), dummy_occupied_core(chain_ids[1])], + ancestors[0] => vec![ + occupied_core_from_candidate(&candidates[0]), + occupied_core_from_candidate(&candidates[1]), + ], current => vec![ CoreState::Occupied(OccupiedCore { - para_id: chain_ids[0].clone(), next_up_on_available: None, occupied_since: 0, time_out_at: 10, next_up_on_time_out: None, availability: Default::default(), group_responsible: GroupIndex::from(0), + candidate_hash: candidates[0].hash(), + candidate_descriptor: candidates[0].descriptor().clone(), }), CoreState::Free, CoreState::Free, CoreState::Occupied(OccupiedCore { - para_id: chain_ids[1].clone(), next_up_on_available: None, occupied_since: 1, time_out_at: 7, next_up_on_time_out: None, availability: Default::default(), group_responsible: GroupIndex::from(0), + candidate_hash: candidates[1].hash(), + candidate_descriptor: candidates[1].descriptor().clone(), }), CoreState::Free, CoreState::Free, ] }, - hashmap! { - ancestors[0] => vec![candidates[0].clone(), candidates[1].clone()], - current => vec![candidates[0].clone(), candidates[1].clone()], - }, hashmap! { candidates[0].hash() => true, candidates[1].hash() => false, @@ -690,11 +668,10 @@ fn reputation_verification() { hashmap! { current => 1 }, hashmap! { current => vec![ - dummy_occupied_core(candidates[0].descriptor.para_id), - dummy_occupied_core(candidates[1].descriptor.para_id) + occupied_core_from_candidate(&candidates[0]), + occupied_core_from_candidate(&candidates[1]), ], }, - hashmap! { current => vec![candidates[0].clone(), candidates[1].clone()] }, hashmap! { candidates[0].hash() => true, candidates[1].hash() => false }, hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, hashmap! {}, @@ -783,10 +760,9 @@ fn not_a_live_candidate_is_detected() { hashmap! { current => 1 }, hashmap! { current => vec![ - dummy_occupied_core(candidates[0].descriptor.para_id), + occupied_core_from_candidate(&candidates[0]), ], }, - hashmap! { current => vec![candidates[0].clone()] }, hashmap! { candidates[0].hash() => true }, hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, hashmap! {}, @@ -832,10 +808,9 @@ fn peer_change_view_before_us() { hashmap! { current => 1 }, hashmap! { current => vec![ - dummy_occupied_core(candidates[0].descriptor.para_id), + occupied_core_from_candidate(&candidates[0]), ], }, - hashmap! { current => vec![candidates[0].clone()] }, hashmap! { candidates[0].hash() => true }, hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, hashmap! { candidates[0].hash() => vec![peer_a.clone()] }, @@ -880,10 +855,9 @@ fn candidate_chunks_are_put_into_message_vault_when_candidate_is_first_seen() { hashmap! { ancestors[0] => 1 }, hashmap! { ancestors[0] => vec![ - dummy_occupied_core(candidates[0].descriptor.para_id), + occupied_core_from_candidate(&candidates[0]), ], }, - hashmap! { ancestors[0] => vec![candidates[0].clone()] }, hashmap! { candidates[0].hash() => true }, hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, hashmap! {}, @@ -897,10 +871,9 @@ fn candidate_chunks_are_put_into_message_vault_when_candidate_is_first_seen() { hashmap! { current => 1 }, hashmap! { current => vec![ - dummy_occupied_core(candidates[0].descriptor.para_id), + occupied_core_from_candidate(&candidates[0]), ], }, - hashmap! { current => vec![candidates[0].clone()] }, hashmap! { candidates[0].hash() => true }, hashmap! {}, hashmap! {}, @@ -1168,50 +1141,28 @@ fn query_pending_availability_at_pulls_from_and_updates_receipts() { ) if r == hash_b => { let _ = tx.send(Ok(vec![ CoreState::Occupied(OccupiedCore { - para_id: para_b, next_up_on_available: None, occupied_since: 0, time_out_at: 0, next_up_on_time_out: None, availability: Default::default(), group_responsible: GroupIndex::from(0), + candidate_hash: candidate_hash_b, + candidate_descriptor: candidate_b.descriptor.clone(), }), CoreState::Occupied(OccupiedCore { - para_id: para_c, next_up_on_available: None, occupied_since: 0, time_out_at: 0, next_up_on_time_out: None, availability: Default::default(), group_responsible: GroupIndex::from(0), + candidate_hash: candidate_hash_c, + candidate_descriptor: candidate_c.descriptor.clone(), }), ])); } ); - - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi( - RuntimeApiMessage::Request( - r, - RuntimeApiRequest::CandidatePendingAvailability(p, tx), - ) - ) if r == hash_b && p == para_b => { - let _ = tx.send(Ok(Some(candidate_b))); - } - ); - - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi( - RuntimeApiMessage::Request( - r, - RuntimeApiRequest::CandidatePendingAvailability(p, tx), - ) - ) if r == hash_b && p == para_c => { - let _ = tx.send(Ok(Some(candidate_c))); - } - ); }; futures::pin_mut!(test_fut); @@ -1256,11 +1207,10 @@ fn new_peer_gets_all_chunks_send() { hashmap! { current => 1 }, hashmap! { current => vec![ - dummy_occupied_core(candidates[0].descriptor.para_id), - dummy_occupied_core(candidates[1].descriptor.para_id) + occupied_core_from_candidate(&candidates[0]), + occupied_core_from_candidate(&candidates[1]) ], }, - hashmap! { current => vec![candidates[0].clone(), candidates[1].clone()] }, hashmap! { candidates[0].hash() => true, candidates[1].hash() => false }, hashmap! { candidates[0].hash() => (pov_blocks[0].clone(), test_state.persisted_validation_data.clone())}, hashmap! {}, diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 46ae17444b..1553100b74 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -576,11 +576,11 @@ impl GroupRotationInfo { } /// Information about a core which is currently occupied. -#[derive(Clone, Encode, Decode, Debug)] -#[cfg_attr(feature = "std", derive(PartialEq))] -pub struct OccupiedCore { - /// The ID of the para occupying the core. - pub para_id: Id, +#[derive(Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug, PartialEq))] +pub struct OccupiedCore { + // NOTE: this has no ParaId as it can be deduced from the candidate descriptor. + /// If this core is freed by availability, this is the assignment that is next up on this /// core, if any. None if there is nothing queued for this core. pub next_up_on_available: Option, @@ -598,11 +598,22 @@ pub struct OccupiedCore { pub availability: BitVec, /// The group assigned to distribute availability pieces of this candidate. pub group_responsible: GroupIndex, + /// The hash of the candidate occupying the core. + pub candidate_hash: CandidateHash, + /// The descriptor of the candidate occupying the core. + pub candidate_descriptor: CandidateDescriptor, +} + +impl OccupiedCore { + /// Get the Para currently occupying this core. + pub fn para_id(&self) -> Id { + self.candidate_descriptor.para_id + } } /// Information about a core which is currently occupied. -#[derive(Clone, Encode, Decode, Debug)] -#[cfg_attr(feature = "std", derive(PartialEq, Default))] +#[derive(Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug, PartialEq, Default))] pub struct ScheduledCore { /// The ID of a para scheduled. pub para_id: Id, @@ -611,12 +622,12 @@ pub struct ScheduledCore { } /// The state of a particular availability core. -#[derive(Clone, Encode, Decode, Debug)] -#[cfg_attr(feature = "std", derive(PartialEq))] -pub enum CoreState { +#[derive(Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug, PartialEq))] +pub enum CoreState { /// The core is currently occupied. #[codec(index = "0")] - Occupied(OccupiedCore), + Occupied(OccupiedCore), /// The core is currently free, with a para scheduled and given the opportunity /// to occupy. /// @@ -634,7 +645,7 @@ impl CoreState { /// If this core state has a `para_id`, return it. pub fn para_id(&self) -> Option { match self { - Self::Occupied(OccupiedCore { para_id, ..}) => Some(*para_id), + Self::Occupied(ref core) => Some(core.para_id()), Self::Scheduled(ScheduledCore { para_id, .. }) => Some(*para_id), Self::Free => None, } @@ -718,7 +729,7 @@ sp_api::decl_runtime_apis! { /// Yields information on all availability cores. Cores are either free or occupied. Free /// cores can have paras assigned to them. - fn availability_cores() -> Vec>; + fn availability_cores() -> Vec>; /// Yields the full validation data for the given ParaId along with an assumption that /// should be used if the para currently occupieds a core. diff --git a/roadmap/implementers-guide/src/node/availability/bitfield-signing.md b/roadmap/implementers-guide/src/node/availability/bitfield-signing.md index 0ca9badd32..f3ef3a4e75 100644 --- a/roadmap/implementers-guide/src/node/availability/bitfield-signing.md +++ b/roadmap/implementers-guide/src/node/availability/bitfield-signing.md @@ -24,6 +24,6 @@ If not running as a validator, do nothing. - Begin by waiting a fixed period of time so availability distribution has the chance to make candidates available. - Determine our validator index `i`, the set of backed candidates pending availability in `r`, and which bit of the bitfield each corresponds to. -- Start with an empty bitfield. For each bit in the bitfield, if there is a candidate pending availability, query the [Availability Store](../utility/availability-store.md) for whether we have the availability chunk for our validator index. +- Start with an empty bitfield. For each bit in the bitfield, if there is a candidate pending availability, query the [Availability Store](../utility/availability-store.md) for whether we have the availability chunk for our validator index. The `OccupiedCore` struct contains the candidate hash so the full candidate does not need to be fetched from runtime. - For all chunks we have, set the corresponding bit in the bitfield. - Sign the bitfield and dispatch a `BitfieldDistribution::DistributeBitfield` message. diff --git a/roadmap/implementers-guide/src/runtime-api/availability-cores.md b/roadmap/implementers-guide/src/runtime-api/availability-cores.md index 561e817cca..87b06e2906 100644 --- a/roadmap/implementers-guide/src/runtime-api/availability-cores.md +++ b/roadmap/implementers-guide/src/runtime-api/availability-cores.md @@ -12,8 +12,7 @@ This is all the information that a validator needs about scheduling for the curr ```rust struct OccupiedCore { - /// The ID of the para occupying the core. - para_id: ParaId, + // NOTE: this has no ParaId as it can be deduced from the candidate descriptor. /// If this core is freed by availability, this is the assignment that is next up on this /// core, if any. None if there is nothing queued for this core. next_up_on_available: Option, @@ -31,6 +30,10 @@ struct OccupiedCore { availability: Bitfield, /// The group assigned to distribute availability pieces of this candidate. group_responsible: GroupIndex, + /// The hash of the candidate occupying the core. + candidate_hash: CandidateHash, + /// The descriptor of the candidate occupying the core. + candidate_descriptor: CandidateDescriptor, } struct ScheduledCore { diff --git a/roadmap/implementers-guide/src/runtime/inclusion.md b/roadmap/implementers-guide/src/runtime/inclusion.md index 7433d51b96..9a6228a8c1 100644 --- a/roadmap/implementers-guide/src/runtime/inclusion.md +++ b/roadmap/implementers-guide/src/runtime/inclusion.md @@ -14,6 +14,7 @@ struct AvailabilityBitfield { struct CandidatePendingAvailability { core: CoreIndex, // availability core + hash: CandidateHash, descriptor: CandidateDescriptor, availability_votes: Bitfield, // one bit per validator. relay_parent_number: BlockNumber, // number of the relay-parent. diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 7eb2003961..65899c915a 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1347,7 +1347,7 @@ sp_api::impl_runtime_apis! { (Vec::new(), GroupRotationInfo { session_start_block: 0, group_rotation_frequency: 0, now: 0 }) } - fn availability_cores() -> Vec> { + fn availability_cores() -> Vec> { Vec::new() } diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 08f9ae124c..3e312a0d45 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -25,7 +25,7 @@ use primitives::v1::{ ValidatorId, CandidateCommitments, CandidateDescriptor, ValidatorIndex, Id as ParaId, AvailabilityBitfield as AvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, BackedCandidate, CoreIndex, GroupIndex, CommittedCandidateReceipt, - CandidateReceipt, HeadData, + CandidateReceipt, HeadData, CandidateHash, }; use frame_support::{ decl_storage, decl_module, decl_error, decl_event, ensure, debug, @@ -58,6 +58,8 @@ pub struct AvailabilityBitfieldRecord { pub struct CandidatePendingAvailability { /// The availability core this is assigned to. core: CoreIndex, + /// The candidate hash. + hash: CandidateHash, /// The candidate descriptor. descriptor: CandidateDescriptor, /// The received availability votes. One bit per validator. @@ -85,6 +87,16 @@ impl CandidatePendingAvailability { pub(crate) fn core_occupied(&self)-> CoreIndex { self.core.clone() } + + /// Get the candidate hash. + pub(crate) fn candidate_hash(&self) -> CandidateHash { + self.hash + } + + /// Get the canddiate descriptor. + pub(crate) fn candidate_descriptor(&self) -> &CandidateDescriptor { + &self.descriptor + } } /// A hook for applying validator rewards @@ -568,6 +580,8 @@ impl Module { candidate.candidate.commitments.head_data.clone(), )); + let candidate_hash = candidate.candidate.hash(); + let (descriptor, commitments) = ( candidate.candidate.descriptor, candidate.candidate.commitments, @@ -575,6 +589,7 @@ impl Module { >::insert(¶_id, CandidatePendingAvailability { core, + hash: candidate_hash, descriptor, availability_votes, relay_parent_number: check_cx.relay_parent_number, @@ -1112,6 +1127,7 @@ mod tests { let default_candidate = TestCandidateBuilder::default().build(); >::insert(chain_a, CandidatePendingAvailability { core: CoreIndex::from(0), + hash: default_candidate.hash(), descriptor: default_candidate.descriptor.clone(), availability_votes: default_availability_votes(), relay_parent_number: 0, @@ -1122,6 +1138,7 @@ mod tests { >::insert(&chain_b, CandidatePendingAvailability { core: CoreIndex::from(1), + hash: default_candidate.hash(), descriptor: default_candidate.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 0, @@ -1286,6 +1303,7 @@ mod tests { let default_candidate = TestCandidateBuilder::default().build(); >::insert(chain_a, CandidatePendingAvailability { core: CoreIndex::from(0), + hash: default_candidate.hash(), descriptor: default_candidate.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 0, @@ -1321,6 +1339,7 @@ mod tests { let default_candidate = TestCandidateBuilder::default().build(); >::insert(chain_a, CandidatePendingAvailability { core: CoreIndex::from(0), + hash: default_candidate.hash(), descriptor: default_candidate.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 0, @@ -1393,6 +1412,7 @@ mod tests { >::insert(chain_a, CandidatePendingAvailability { core: CoreIndex::from(0), + hash: candidate_a.hash(), descriptor: candidate_a.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 0, @@ -1409,6 +1429,7 @@ mod tests { >::insert(chain_b, CandidatePendingAvailability { core: CoreIndex::from(1), + hash: candidate_b.hash(), descriptor: candidate_b.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 0, @@ -1839,6 +1860,7 @@ mod tests { let candidate = TestCandidateBuilder::default().build(); >::insert(&chain_a, CandidatePendingAvailability { core: CoreIndex::from(0), + hash: candidate.hash(), descriptor: candidate.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 3, @@ -2127,6 +2149,7 @@ mod tests { >::get(&chain_a), Some(CandidatePendingAvailability { core: CoreIndex::from(0), + hash: candidate_a.hash(), descriptor: candidate_a.descriptor, availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, @@ -2143,6 +2166,7 @@ mod tests { >::get(&chain_b), Some(CandidatePendingAvailability { core: CoreIndex::from(1), + hash: candidate_b.hash(), descriptor: candidate_b.descriptor, availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, @@ -2159,6 +2183,7 @@ mod tests { >::get(&thread_a), Some(CandidatePendingAvailability { core: CoreIndex::from(2), + hash: candidate_c.hash(), descriptor: candidate_c.descriptor, availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, @@ -2254,6 +2279,7 @@ mod tests { >::get(&chain_a), Some(CandidatePendingAvailability { core: CoreIndex::from(0), + hash: candidate_a.hash(), descriptor: candidate_a.descriptor, availability_votes: default_availability_votes(), relay_parent_number: System::block_number() - 1, @@ -2329,6 +2355,7 @@ mod tests { let candidate = TestCandidateBuilder::default().build(); >::insert(&chain_a, CandidatePendingAvailability { core: CoreIndex::from(0), + hash: candidate.hash(), descriptor: candidate.descriptor.clone(), availability_votes: default_availability_votes(), relay_parent_number: 5, @@ -2339,6 +2366,7 @@ mod tests { >::insert(&chain_b, CandidatePendingAvailability { core: CoreIndex::from(1), + hash: candidate.hash(), descriptor: candidate.descriptor, availability_votes: default_availability_votes(), relay_parent_number: 6, diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index f099c0db15..a171f9eb44 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -46,7 +46,7 @@ pub fn validator_groups() -> ( } /// Implementation for the `availability_cores` function of the runtime API. -pub fn availability_cores() -> Vec> { +pub fn availability_cores() -> Vec> { let cores = >::availability_cores(); let parachains = >::parachains(); let config = >::config(); @@ -96,7 +96,6 @@ pub fn availability_cores() -> Vec>::next_up_on_available( CoreIndex(i as u32) ), @@ -113,6 +112,8 @@ pub fn availability_cores() -> Vec { @@ -123,7 +124,6 @@ pub fn availability_cores() -> Vec>::next_up_on_available( CoreIndex(i as u32) ), @@ -140,6 +140,8 @@ pub fn availability_cores() -> Vec Vec> { + fn availability_cores() -> Vec> { Vec::new() } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index f2a6732006..fddf700770 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -691,7 +691,7 @@ sp_api::impl_runtime_apis! { runtime_api_impl::validator_groups::() } - fn availability_cores() -> Vec> { + fn availability_cores() -> Vec> { runtime_api_impl::availability_cores::() } diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 7d68a6f69c..5e3908f14a 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -631,7 +631,7 @@ sp_api::impl_runtime_apis! { runtime_impl::validator_groups::() } - fn availability_cores() -> Vec> { + fn availability_cores() -> Vec> { runtime_impl::availability_cores::() } diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index c99b1a1500..4cf3e26c5f 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -844,7 +844,7 @@ sp_api::impl_runtime_apis! { (Vec::new(), GroupRotationInfo { session_start_block: 0, group_rotation_frequency: 0, now: 0 }) } - fn availability_cores() -> Vec> { + fn availability_cores() -> Vec> { Vec::new() } -- GitLab From 9b45d5c32114da725cea4935db74031e8ce9117c Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 18 Dec 2020 05:52:23 -0500 Subject: [PATCH 129/203] remove `FixCouncilHistoricalVotes` (#2137) --- runtime/kusama/src/lib.rs | 222 -------------------------------------- 1 file changed, 222 deletions(-) diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 65899c915a..29cb5ed9d3 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -931,228 +931,6 @@ impl pallet_proxy::Config for Runtime { type AnnouncementDepositFactor = AnnouncementDepositFactor; } -pub struct FixCouncilHistoricalVotes; -impl frame_support::traits::OnRuntimeUpgrade for FixCouncilHistoricalVotes { - fn on_runtime_upgrade() -> frame_support::weights::Weight { - use frame_support::traits::ReservableCurrency; - use sp_runtime::traits::Zero; - let mut failure: Balance = 0; - // https://github.com/paritytech/polkadot/pull/1252/files#diff-cba4e599a9fdd88fe8d33b5ed913958d63f844186b53c5cbe9bc73a2e2944857R22 - - // https://polkascan.io/kusama/runtime-module/2007-electionsphragmen - let old_bond = 50_000_000_000; - // https://polkascan.io/kusama/runtime-module/2008-electionsphragmen - let current_bond = 8_333_333_330; - let to_unreserve = old_bond - current_bond; // 41666666670 - - // source of accounts: https://github.com/paritytech/substrate/issues/7223 - vec![ - [52u8, 227, 117, 17, 229, 245, 8, 66, 43, 10, 142, 216, 196, 102, 119, 154, 34, 41, 53, 183, 37, 186, 250, 70, 247, 129, 207, 56, 2, 96, 181, 69], - [87, 71, 87, 4, 112, 230, 183, 229, 153, 158, 195, 253, 122, 165, 32, 37, 212, 105, 167, 124, 20, 165, 83, 106, 177, 214, 223, 18, 146, 184, 186, 42], - [74, 223, 81, 164, 123, 114, 121, 83, 102, 213, 34, 133, 227, 41, 34, 156, 131, 110, 167, 187, 254, 19, 157, 190, 143, 160, 112, 12, 79, 134, 252, 86], - [98, 135, 195, 120, 192, 49, 156, 220, 141, 79, 176, 216, 27, 229, 80, 37, 72, 104, 114, 242, 254, 188, 218, 156, 66, 143, 164, 131, 182, 181, 43, 27], - [22, 106, 142, 133, 251, 42, 232, 228, 187, 104, 21, 64, 122, 178, 225, 117, 115, 5, 10, 8, 14, 27, 171, 197, 2, 34, 100, 254, 249, 233, 111, 94], - [230, 17, 194, 236, 237, 27, 86, 17, 131, 248, 143, 174, 208, 221, 125, 136, 213, 250, 253, 241, 111, 88, 64, 198, 62, 195, 109, 140, 49, 19, 111, 97], - [45, 100, 142, 202, 87, 103, 177, 184, 106, 165, 70, 32, 79, 239, 241, 127, 98, 45, 74, 19, 53, 72, 54, 34, 95, 212, 237, 10, 49, 18, 118, 11], - [78, 212, 66, 185, 0, 51, 101, 94, 134, 29, 31, 236, 213, 26, 156, 115, 199, 195, 117, 27, 34, 125, 115, 175, 37, 139, 73, 23, 110, 16, 121, 19], - [198, 17, 209, 81, 89, 27, 253, 242, 89, 118, 43, 153, 183, 128, 97, 97, 123, 89, 210, 171, 23, 66, 63, 32, 239, 233, 142, 222, 32, 184, 217, 120], - [48, 89, 157, 186, 80, 181, 243, 186, 11, 54, 248, 86, 167, 97, 235, 60, 10, 238, 97, 232, 48, 212, 190, 180, 72, 239, 148, 182, 173, 146, 190, 57], - [178, 75, 65, 145, 80, 177, 162, 44, 37, 159, 216, 50, 26, 48, 88, 234, 131, 168, 17, 141, 41, 235, 11, 196, 110, 0, 86, 230, 249, 136, 148, 39], - [0, 90, 67, 60, 142, 21, 28, 129, 174, 148, 133, 68, 244, 203, 7, 98, 43, 24, 168, 67, 4, 128, 222, 111, 198, 225, 163, 139, 196, 111, 156, 39], - [80, 10, 128, 247, 239, 148, 61, 30, 111, 173, 141, 133, 33, 169, 238, 221, 44, 22, 26, 149, 224, 64, 133, 242, 123, 198, 162, 35, 123, 47, 17, 57], - [228, 248, 227, 202, 10, 103, 4, 160, 7, 148, 69, 176, 153, 221, 192, 80, 193, 253, 39, 48, 70, 249, 58, 115, 4, 15, 66, 115, 105, 58, 184, 61], - [146, 142, 243, 123, 168, 13, 37, 253, 223, 148, 61, 229, 35, 244, 110, 88, 140, 135, 188, 134, 227, 131, 24, 149, 242, 125, 169, 157, 38, 154, 160, 18], - [12, 55, 156, 202, 114, 167, 250, 113, 52, 125, 148, 219, 103, 69, 77, 226, 216, 92, 20, 234, 202, 146, 140, 75, 76, 99, 153, 156, 27, 168, 164, 48], - [94, 105, 67, 219, 185, 200, 207, 213, 51, 119, 166, 115, 7, 41, 14, 250, 193, 175, 244, 170, 35, 242, 134, 43, 216, 100, 10, 243, 117, 111, 121, 44], - [176, 235, 16, 242, 219, 110, 35, 128, 177, 12, 46, 128, 32, 93, 131, 158, 3, 181, 150, 226, 40, 253, 141, 242, 188, 117, 191, 197, 150, 174, 171, 36], - [188, 94, 5, 123, 119, 210, 246, 167, 145, 84, 105, 228, 217, 124, 68, 191, 165, 211, 135, 133, 201, 241, 211, 8, 146, 250, 25, 231, 234, 206, 57, 57], - [190, 109, 228, 0, 24, 21, 61, 124, 206, 0, 67, 246, 131, 206, 237, 153, 207, 59, 48, 135, 152, 89, 96, 151, 169, 64, 107, 186, 201, 145, 144, 21], - [168, 176, 158, 34, 73, 77, 195, 235, 190, 198, 231, 174, 81, 174, 202, 99, 219, 183, 220, 4, 216, 95, 64, 254, 135, 161, 130, 228, 157, 18, 205, 122], - [58, 175, 247, 7, 11, 38, 34, 147, 124, 193, 15, 99, 218, 12, 92, 232, 75, 72, 123, 210, 200, 62, 174, 59, 183, 5, 78, 112, 137, 169, 221, 5], - [38, 132, 41, 39, 201, 138, 80, 171, 29, 67, 154, 180, 95, 33, 197, 190, 182, 151, 5, 86, 225, 253, 123, 82, 223, 68, 151, 126, 67, 68, 177, 72], - [160, 50, 214, 174, 242, 243, 162, 74, 49, 196, 28, 253, 251, 33, 243, 155, 163, 253, 207, 201, 237, 31, 56, 185, 22, 125, 172, 178, 228, 61, 116, 124], - [94, 237, 179, 116, 143, 73, 1, 160, 48, 111, 172, 136, 170, 109, 127, 28, 131, 61, 146, 143, 219, 236, 250, 236, 67, 247, 90, 172, 31, 95, 125, 122], - [136, 143, 102, 104, 40, 232, 50, 138, 51, 100, 122, 71, 188, 151, 87, 74, 106, 86, 113, 129, 146, 112, 204, 1, 230, 108, 113, 57, 161, 166, 145, 26], - [41, 76, 90, 193, 202, 37, 94, 199, 50, 139, 43, 253, 174, 91, 152, 164, 163, 181, 13, 201, 149, 100, 7, 183, 161, 145, 13, 143, 215, 229, 129, 232], - [16, 252, 67, 246, 61, 252, 235, 195, 3, 194, 11, 182, 243, 47, 162, 8, 197, 85, 240, 183, 52, 85, 172, 246, 161, 197, 65, 200, 79, 219, 177, 104], - [160, 87, 16, 231, 9, 55, 108, 216, 216, 28, 145, 235, 37, 92, 96, 16, 52, 194, 45, 134, 150, 78, 181, 46, 183, 229, 201, 35, 45, 19, 176, 94], - [134, 135, 73, 95, 235, 234, 33, 222, 68, 159, 242, 115, 129, 249, 48, 141, 166, 241, 92, 229, 217, 211, 20, 98, 97, 39, 93, 236, 24, 205, 86, 111], - [251, 174, 188, 92, 115, 39, 20, 75, 229, 29, 243, 91, 181, 15, 248, 97, 44, 140, 154, 215, 63, 199, 182, 11, 67, 130, 185, 121, 86, 61, 226, 15], - [190, 224, 239, 104, 232, 185, 30, 26, 131, 177, 69, 35, 42, 159, 216, 68, 170, 200, 161, 101, 95, 61, 114, 21, 61, 99, 221, 132, 47, 71, 6, 100], - [132, 237, 28, 134, 11, 165, 89, 21, 143, 203, 78, 152, 122, 33, 213, 210, 155, 117, 79, 248, 141, 180, 215, 75, 125, 214, 64, 79, 188, 233, 114, 22], - [203, 124, 199, 178, 246, 36, 201, 44, 111, 173, 142, 231, 116, 88, 163, 92, 122, 202, 173, 226, 176, 62, 95, 6, 52, 80, 156, 239, 29, 183, 206, 9], - [178, 38, 5, 179, 106, 208, 161, 253, 17, 62, 16, 224, 250, 91, 72, 135, 21, 160, 113, 252, 152, 33, 173, 20, 68, 167, 33, 102, 67, 28, 30, 21], - [0, 85, 93, 35, 172, 249, 206, 242, 240, 251, 36, 168, 255, 45, 70, 79, 228, 161, 147, 137, 98, 46, 36, 1, 38, 15, 73, 36, 114, 171, 123, 70], - [198, 88, 98, 42, 56, 161, 58, 36, 180, 89, 254, 109, 16, 255, 214, 120, 192, 204, 248, 245, 145, 124, 72, 217, 139, 9, 182, 116, 98, 86, 9, 26], - [178, 219, 195, 92, 207, 8, 98, 148, 160, 210, 78, 16, 145, 208, 140, 163, 181, 194, 164, 135, 7, 28, 79, 181, 64, 112, 230, 102, 204, 153, 224, 45], - [118, 253, 161, 198, 240, 206, 6, 239, 41, 107, 105, 123, 178, 23, 249, 142, 69, 146, 242, 95, 20, 113, 228, 97, 146, 148, 115, 55, 146, 48, 147, 173], - [171, 42, 226, 38, 198, 62, 131, 93, 136, 64, 239, 182, 111, 170, 191, 132, 59, 203, 110, 239, 70, 42, 12, 117, 248, 87, 48, 58, 24, 193, 214, 207], - [226, 156, 174, 201, 243, 176, 175, 214, 64, 12, 186, 43, 40, 42, 230, 20, 41, 71, 218, 167, 131, 80, 249, 155, 42, 116, 123, 52, 44, 42, 25, 64], - [38, 233, 51, 113, 227, 226, 183, 195, 139, 229, 42, 201, 30, 142, 166, 33, 165, 173, 117, 24, 213, 88, 15, 167, 179, 109, 37, 11, 158, 211, 87, 26], - [28, 82, 239, 62, 195, 223, 46, 66, 201, 184, 90, 253, 224, 20, 86, 231, 70, 19, 20, 166, 143, 22, 94, 166, 11, 34, 2, 175, 87, 13, 17, 20], - [6, 121, 215, 46, 243, 76, 78, 115, 130, 220, 90, 195, 3, 135, 100, 66, 46, 201, 243, 74, 103, 244, 214, 70, 253, 30, 228, 245, 93, 182, 92, 27], - [56, 242, 67, 184, 105, 96, 247, 25, 150, 176, 97, 251, 46, 223, 29, 42, 114, 79, 82, 223, 42, 165, 104, 95, 225, 132, 222, 222, 236, 237, 180, 70], - [206, 163, 218, 190, 82, 178, 166, 101, 177, 225, 155, 248, 198, 145, 58, 93, 84, 224, 109, 100, 19, 202, 61, 219, 236, 143, 154, 34, 65, 94, 196, 119], - [32, 51, 169, 66, 133, 238, 5, 16, 36, 249, 231, 26, 132, 203, 51, 48, 85, 127, 124, 4, 154, 5, 45, 96, 136, 44, 186, 14, 212, 82, 209, 45], - [136, 87, 179, 203, 183, 159, 117, 238, 119, 98, 216, 164, 49, 132, 57, 146, 127, 210, 181, 22, 67, 156, 89, 113, 52, 195, 208, 159, 224, 227, 241, 3], - [58, 69, 248, 95, 254, 189, 177, 143, 25, 199, 92, 139, 237, 97, 234, 17, 219, 250, 40, 132, 41, 202, 235, 238, 203, 35, 33, 26, 73, 237, 165, 32], - [146, 24, 163, 171, 202, 106, 170, 124, 218, 48, 242, 73, 62, 87, 229, 38, 27, 6, 15, 95, 57, 47, 45, 76, 221, 154, 171, 55, 19, 227, 61, 60], - [60, 58, 195, 101, 58, 75, 249, 167, 40, 117, 131, 147, 187, 201, 189, 197, 202, 49, 226, 154, 237, 70, 161, 88, 95, 211, 212, 145, 2, 87, 200, 33], - [230, 153, 129, 0, 226, 30, 98, 227, 216, 119, 32, 200, 72, 8, 114, 41, 148, 250, 98, 95, 100, 23, 108, 158, 149, 236, 85, 106, 118, 13, 64, 78], - [208, 159, 158, 0, 216, 253, 73, 87, 0, 248, 236, 76, 249, 90, 162, 232, 39, 227, 251, 183, 239, 0, 130, 254, 46, 202, 75, 146, 104, 48, 250, 29], - [206, 65, 0, 132, 231, 167, 48, 145, 37, 141, 211, 98, 59, 98, 217, 50, 157, 101, 135, 114, 63, 194, 96, 210, 142, 85, 21, 144, 133, 63, 93, 88], - [58, 34, 87, 220, 204, 157, 71, 5, 126, 215, 168, 184, 84, 75, 160, 45, 84, 172, 6, 243, 13, 119, 230, 88, 140, 30, 21, 137, 150, 229, 20, 38], - [202, 91, 193, 145, 93, 167, 74, 186, 58, 173, 215, 206, 123, 128, 144, 69, 213, 235, 91, 115, 85, 146, 89, 117, 95, 220, 216, 90, 64, 165, 220, 110], - [10, 58, 158, 3, 226, 253, 136, 14, 137, 63, 60, 210, 253, 3, 181, 124, 125, 40, 29, 43, 70, 105, 185, 59, 16, 42, 148, 5, 43, 227, 101, 98], - [172, 150, 113, 140, 115, 71, 210, 56, 57, 84, 225, 178, 82, 233, 29, 155, 84, 156, 238, 44, 60, 146, 176, 166, 170, 54, 96, 170, 124, 201, 81, 56], - [158, 190, 208, 112, 142, 212, 167, 220, 247, 24, 86, 187, 83, 134, 53, 201, 255, 190, 70, 99, 40, 99, 7, 223, 197, 166, 14, 154, 188, 223, 70, 30], - [60, 67, 92, 98, 149, 98, 142, 28, 126, 136, 184, 249, 235, 75, 188, 61, 96, 166, 59, 25, 140, 13, 201, 175, 192, 130, 4, 170, 74, 190, 195, 113], - [78, 203, 3, 76, 75, 78, 165, 166, 103, 0, 12, 191, 228, 137, 234, 15, 122, 162, 12, 197, 222, 180, 111, 152, 25, 187, 100, 17, 157, 252, 83, 39], - [146, 250, 178, 111, 64, 184, 149, 164, 242, 68, 16, 85, 67, 135, 47, 22, 85, 142, 224, 194, 245, 114, 165, 219, 48, 131, 56, 230, 241, 205, 118, 35], - [111, 136, 30, 180, 158, 175, 45, 159, 88, 34, 172, 160, 141, 149, 18, 237, 72, 43, 243, 95, 36, 70, 169, 253, 20, 102, 134, 46, 122, 117, 94, 40], - [230, 224, 55, 10, 146, 36, 6, 46, 185, 8, 5, 58, 133, 127, 124, 142, 115, 39, 215, 94, 175, 55, 41, 148, 133, 70, 80, 119, 188, 168, 103, 26], - [88, 134, 227, 88, 24, 157, 191, 87, 39, 23, 227, 3, 155, 129, 197, 229, 132, 243, 115, 46, 114, 152, 182, 251, 24, 162, 203, 14, 223, 70, 110, 18], - [78, 192, 56, 30, 68, 39, 237, 101, 103, 247, 165, 195, 40, 40, 140, 237, 54, 195, 59, 236, 234, 110, 206, 205, 129, 69, 0, 31, 66, 48, 172, 27], - [188, 110, 18, 215, 171, 112, 171, 234, 76, 8, 219, 112, 85, 232, 79, 22, 186, 184, 23, 181, 251, 53, 144, 136, 173, 81, 144, 66, 45, 249, 221, 29], - [184, 134, 3, 172, 197, 123, 71, 84, 219, 125, 44, 26, 224, 165, 217, 103, 32, 108, 191, 22, 216, 108, 41, 133, 56, 89, 83, 174, 178, 5, 143, 5], - [10, 216, 180, 249, 77, 200, 230, 34, 158, 44, 68, 141, 153, 80, 148, 205, 193, 189, 53, 109, 193, 76, 97, 85, 70, 122, 192, 126, 222, 24, 184, 114], - [26, 170, 217, 19, 57, 86, 181, 16, 1, 80, 222, 130, 169, 29, 138, 87, 109, 207, 182, 63, 199, 221, 13, 83, 54, 8, 57, 131, 149, 198, 208, 83], - [96, 138, 24, 198, 63, 184, 175, 138, 213, 226, 226, 154, 248, 15, 23, 237, 238, 81, 195, 43, 137, 19, 196, 103, 238, 168, 38, 237, 103, 102, 37, 40], - [52, 128, 169, 39, 185, 38, 19, 53, 116, 172, 54, 108, 87, 60, 188, 116, 37, 164, 126, 195, 94, 206, 39, 89, 153, 179, 209, 240, 131, 82, 156, 46], - [246, 4, 145, 84, 210, 56, 187, 133, 217, 118, 194, 157, 220, 55, 43, 88, 228, 254, 223, 5, 126, 65, 104, 125, 12, 250, 57, 241, 71, 113, 171, 83], - [86, 173, 152, 172, 190, 131, 221, 21, 171, 209, 16, 17, 30, 220, 112, 220, 192, 162, 19, 36, 91, 45, 44, 192, 169, 65, 10, 9, 51, 57, 255, 70], - [64, 123, 211, 149, 104, 201, 8, 6, 47, 202, 49, 232, 8, 152, 189, 202, 190, 237, 160, 117, 1, 51, 131, 240, 249, 166, 158, 208, 126, 177, 38, 38], - [2, 57, 183, 234, 172, 195, 234, 64, 151, 134, 240, 51, 106, 137, 118, 7, 86, 35, 172, 239, 49, 159, 197, 119, 124, 118, 3, 61, 213, 133, 184, 64], - [96, 254, 164, 33, 61, 85, 200, 104, 191, 200, 140, 122, 127, 80, 64, 175, 89, 63, 213, 255, 88, 154, 127, 26, 93, 114, 70, 81, 223, 37, 5, 95], - [72, 35, 54, 126, 94, 99, 159, 33, 213, 118, 137, 168, 157, 235, 63, 72, 148, 114, 187, 16, 4, 122, 103, 117, 103, 88, 162, 148, 218, 167, 159, 21], - [232, 206, 1, 108, 146, 138, 182, 169, 95, 61, 218, 93, 127, 149, 24, 50, 55, 80, 176, 2, 18, 205, 131, 111, 249, 163, 241, 242, 126, 178, 193, 33], - [248, 254, 82, 84, 191, 224, 104, 1, 129, 7, 9, 121, 239, 231, 44, 94, 176, 153, 4, 59, 48, 7, 79, 48, 221, 12, 21, 168, 74, 188, 68, 92], - [2, 156, 106, 91, 42, 221, 67, 178, 36, 110, 31, 47, 8, 233, 169, 131, 255, 102, 80, 228, 186, 141, 9, 32, 35, 145, 198, 162, 141, 60, 223, 54], - [0, 95, 174, 86, 79, 8, 222, 91, 181, 144, 141, 255, 246, 191, 240, 249, 80, 123, 116, 75, 33, 215, 1, 125, 71, 138, 167, 239, 92, 135, 249, 124], - [4, 198, 135, 31, 33, 23, 62, 34, 187, 204, 153, 2, 161, 186, 65, 165, 19, 204, 95, 255, 121, 124, 148, 138, 54, 146, 124, 239, 112, 20, 140, 48], - [146, 46, 66, 112, 210, 142, 32, 160, 129, 86, 195, 218, 234, 150, 130, 77, 79, 69, 30, 232, 224, 12, 77, 254, 7, 81, 203, 63, 65, 228, 187, 74], - [52, 234, 22, 159, 11, 191, 106, 184, 97, 55, 123, 62, 156, 195, 78, 82, 255, 163, 241, 103, 79, 136, 123, 113, 177, 75, 50, 64, 66, 33, 177, 53], - [10, 122, 197, 190, 105, 168, 36, 63, 136, 128, 213, 253, 1, 91, 46, 143, 143, 48, 206, 108, 113, 98, 248, 188, 181, 173, 26, 31, 164, 36, 109, 50], - [10, 91, 84, 200, 115, 95, 146, 200, 152, 137, 149, 161, 91, 207, 61, 17, 192, 46, 232, 218, 103, 99, 52, 168, 162, 144, 252, 116, 63, 99, 73, 40], - [36, 123, 240, 229, 60, 125, 242, 213, 41, 87, 26, 15, 48, 180, 88, 19, 205, 151, 252, 208, 8, 248, 210, 15, 180, 43, 68, 160, 205, 95, 28, 119], - [142, 57, 249, 121, 182, 35, 220, 93, 141, 234, 130, 249, 187, 90, 126, 152, 100, 181, 181, 61, 85, 2, 201, 139, 200, 140, 14, 115, 199, 49, 192, 14], - [132, 70, 235, 131, 233, 186, 168, 74, 114, 31, 172, 138, 150, 168, 7, 117, 176, 86, 48, 31, 223, 126, 113, 95, 57, 141, 125, 203, 37, 249, 174, 114], - [164, 213, 85, 73, 205, 119, 18, 200, 239, 149, 51, 108, 167, 171, 251, 28, 232, 84, 51, 51, 30, 72, 84, 172, 255, 170, 232, 72, 135, 12, 105, 6], - [214, 194, 236, 50, 109, 31, 114, 151, 96, 221, 23, 131, 234, 33, 109, 164, 43, 212, 147, 65, 13, 192, 151, 171, 47, 139, 85, 207, 241, 109, 226, 37], - [25, 148, 223, 91, 240, 244, 67, 66, 177, 113, 155, 251, 177, 86, 18, 134, 189, 129, 182, 216, 79, 87, 127, 85, 239, 69, 254, 122, 214, 245, 14, 74], - [68, 16, 115, 21, 34, 226, 104, 3, 184, 230, 235, 110, 84, 103, 215, 122, 170, 5, 6, 132, 185, 87, 34, 187, 166, 96, 136, 44, 144, 169, 208, 21], - [92, 143, 180, 46, 128, 189, 71, 207, 86, 229, 246, 37, 92, 23, 88, 25, 163, 73, 234, 107, 147, 239, 18, 125, 118, 57, 132, 179, 253, 113, 79, 49], - [152, 97, 132, 18, 9, 74, 115, 6, 101, 205, 185, 117, 139, 71, 65, 181, 84, 53, 3, 174, 8, 178, 181, 247, 154, 70, 3, 147, 89, 138, 183, 54], - [117, 159, 129, 181, 10, 57, 31, 216, 133, 197, 227, 207, 216, 106, 49, 242, 18, 70, 125, 101, 88, 44, 149, 1, 10, 72, 187, 48, 210, 126, 209, 231], - [230, 213, 178, 217, 236, 22, 235, 17, 122, 106, 200, 208, 125, 215, 17, 51, 126, 87, 75, 194, 187, 122, 246, 10, 57, 213, 62, 197, 108, 139, 115, 89], - [56, 85, 62, 17, 98, 50, 252, 144, 165, 195, 142, 14, 85, 228, 46, 97, 195, 219, 204, 67, 197, 178, 64, 234, 124, 62, 50, 179, 125, 103, 201, 81], - [184, 253, 244, 203, 162, 173, 242, 65, 221, 223, 194, 0, 136, 194, 60, 114, 56, 128, 185, 125, 197, 65, 244, 137, 5, 217, 158, 177, 186, 14, 92, 39], - [160, 76, 27, 164, 78, 128, 105, 139, 142, 143, 248, 18, 107, 138, 77, 120, 70, 196, 126, 223, 48, 55, 194, 172, 131, 28, 239, 131, 36, 2, 89, 28], - [186, 25, 173, 248, 171, 133, 40, 201, 245, 48, 88, 180, 148, 182, 21, 77, 222, 15, 173, 254, 43, 222, 179, 169, 185, 200, 119, 97, 205, 203, 180, 65], - [12, 76, 85, 245, 143, 131, 207, 130, 43, 102, 255, 202, 240, 87, 249, 239, 185, 252, 101, 71, 87, 85, 3, 232, 17, 88, 172, 202, 13, 145, 101, 27], - [113, 153, 171, 173, 152, 127, 178, 8, 186, 128, 74, 4, 122, 115, 23, 37, 195, 7, 45, 117, 37, 238, 162, 188, 223, 217, 127, 168, 193, 76, 138, 119], - [12, 206, 158, 33, 12, 71, 63, 209, 242, 1, 120, 254, 136, 156, 23, 137, 86, 234, 28, 243, 37, 197, 75, 26, 67, 154, 136, 188, 98, 254, 120, 81], - [134, 213, 134, 159, 7, 115, 242, 48, 151, 43, 141, 107, 62, 252, 233, 210, 189, 93, 155, 169, 218, 86, 103, 181, 166, 136, 166, 251, 103, 252, 201, 36], - [156, 152, 138, 156, 80, 10, 196, 114, 228, 177, 236, 190, 171, 59, 16, 81, 77, 203, 139, 205, 80, 8, 183, 26, 32, 234, 161, 191, 40, 29, 168, 15], - [96, 132, 24, 217, 54, 66, 26, 130, 142, 118, 240, 102, 152, 105, 47, 47, 66, 53, 132, 35, 4, 42, 239, 229, 119, 171, 238, 44, 33, 41, 228, 187], - [38, 43, 59, 107, 223, 253, 235, 155, 48, 76, 96, 233, 143, 87, 248, 107, 239, 214, 130, 34, 67, 94, 60, 243, 23, 172, 32, 79, 79, 55, 112, 78], - [246, 178, 29, 98, 72, 50, 9, 75, 3, 170, 103, 46, 1, 100, 98, 160, 32, 226, 23, 204, 103, 177, 67, 71, 133, 185, 145, 20, 162, 180, 250, 90], - [138, 152, 73, 84, 229, 126, 123, 240, 75, 163, 140, 241, 166, 30, 215, 71, 131, 212, 202, 118, 116, 76, 63, 169, 246, 220, 10, 253, 85, 217, 23, 71], - [38, 207, 39, 144, 245, 25, 234, 121, 233, 220, 11, 81, 64, 16, 219, 209, 75, 187, 207, 106, 139, 84, 32, 107, 108, 178, 68, 20, 3, 5, 236, 112], - [64, 255, 129, 147, 44, 86, 190, 113, 168, 32, 124, 138, 153, 50, 141, 96, 165, 162, 176, 111, 212, 14, 208, 94, 196, 178, 214, 106, 235, 202, 255, 104], - [44, 25, 247, 67, 149, 0, 166, 187, 208, 78, 125, 185, 236, 25, 139, 4, 89, 160, 4, 196, 128, 47, 39, 229, 0, 254, 77, 248, 122, 61, 227, 27], - [174, 206, 85, 8, 225, 55, 152, 52, 175, 47, 168, 28, 167, 138, 137, 244, 103, 82, 129, 11, 37, 53, 123, 150, 243, 158, 203, 190, 18, 195, 200, 55], - [190, 243, 241, 170, 113, 179, 43, 186, 119, 91, 56, 134, 185, 0, 162, 227, 251, 79, 65, 99, 213, 140, 27, 206, 10, 174, 207, 224, 181, 92, 27, 95], - [218, 214, 230, 25, 76, 32, 165, 14, 194, 19, 56, 71, 77, 52, 110, 93, 38, 112, 237, 19, 172, 17, 68, 117, 145, 189, 5, 133, 201, 124, 200, 101], - [146, 73, 247, 0, 26, 190, 182, 82, 240, 43, 224, 199, 223, 167, 173, 151, 130, 188, 113, 208, 86, 81, 255, 20, 235, 214, 89, 225, 229, 159, 130, 126], - [204, 88, 161, 4, 79, 211, 105, 244, 82, 11, 187, 174, 226, 18, 241, 32, 61, 124, 179, 97, 27, 84, 80, 153, 243, 137, 134, 27, 145, 28, 2, 90], - [178, 33, 243, 211, 58, 219, 171, 225, 105, 91, 109, 239, 143, 159, 179, 179, 10, 51, 201, 238, 226, 231, 176, 36, 52, 17, 82, 213, 253, 187, 226, 51], - [172, 29, 45, 130, 196, 166, 155, 22, 195, 206, 158, 181, 208, 182, 243, 79, 148, 138, 52, 239, 230, 36, 136, 135, 154, 81, 75, 188, 131, 126, 14, 80], - [126, 194, 148, 162, 173, 83, 41, 233, 36, 136, 220, 29, 232, 46, 77, 165, 208, 239, 112, 206, 133, 36, 44, 15, 93, 22, 174, 219, 36, 96, 0, 125], - [182, 191, 157, 11, 214, 231, 26, 222, 121, 107, 197, 21, 181, 99, 44, 71, 187, 157, 143, 154, 229, 81, 95, 52, 45, 55, 23, 134, 255, 110, 90, 30], - [162, 160, 236, 188, 172, 133, 147, 194, 200, 66, 108, 85, 218, 66, 110, 32, 41, 3, 162, 118, 183, 33, 255, 117, 139, 139, 110, 108, 2, 96, 52, 5], - [218, 18, 91, 123, 235, 68, 15, 182, 161, 69, 168, 24, 157, 227, 50, 42, 108, 168, 226, 83, 193, 19, 39, 128, 139, 41, 198, 42, 232, 118, 176, 13], - [218, 214, 145, 46, 29, 34, 180, 161, 82, 185, 48, 163, 42, 136, 88, 162, 4, 109, 16, 187, 21, 166, 51, 211, 124, 151, 142, 222, 173, 110, 119, 46], - [94, 215, 163, 23, 159, 65, 29, 10, 174, 240, 104, 130, 69, 139, 87, 245, 27, 53, 80, 145, 184, 70, 187, 54, 96, 153, 66, 109, 80, 25, 162, 82], - [104, 214, 130, 92, 100, 194, 124, 40, 175, 70, 14, 143, 173, 49, 59, 178, 254, 215, 90, 255, 89, 232, 223, 153, 179, 237, 202, 237, 236, 150, 216, 102], - [166, 101, 158, 76, 63, 34, 194, 170, 151, 213, 74, 54, 227, 26, 181, 122, 97, 122, 246, 43, 212, 62, 198, 46, 213, 112, 119, 20, 146, 6, 146, 112], - [20, 229, 93, 235, 203, 26, 151, 13, 177, 181, 31, 83, 86, 1, 8, 13, 18, 141, 245, 223, 242, 89, 63, 238, 30, 51, 105, 19, 157, 81, 192, 114], - [44, 36, 100, 44, 239, 20, 231, 115, 21, 191, 70, 124, 0, 145, 124, 116, 154, 25, 195, 229, 166, 223, 112, 85, 72, 166, 122, 167, 173, 10, 209, 56], - [142, 133, 30, 217, 146, 34, 143, 34, 104, 238, 140, 97, 79, 230, 7, 93, 56, 0, 6, 10, 225, 64, 152, 224, 48, 148, 19, 160, 168, 28, 68, 112], - [84, 94, 128, 100, 248, 137, 138, 41, 212, 129, 30, 9, 178, 7, 207, 51, 2, 229, 206, 254, 241, 102, 21, 248, 88, 15, 205, 143, 166, 58, 98, 78], - [218, 47, 127, 176, 63, 207, 248, 72, 142, 2, 155, 189, 98, 249, 82, 112, 244, 5, 195, 2, 137, 92, 194, 133, 100, 166, 158, 6, 144, 50, 230, 116], - [42, 138, 54, 49, 198, 224, 120, 197, 217, 30, 242, 215, 114, 10, 252, 175, 64, 173, 186, 66, 90, 100, 138, 128, 130, 66, 13, 125, 7, 140, 71, 58], - [156, 120, 182, 33, 219, 174, 128, 170, 103, 151, 162, 143, 117, 32, 89, 238, 241, 171, 215, 99, 218, 189, 163, 89, 85, 96, 160, 52, 143, 248, 46, 57], - [232, 139, 71, 107, 182, 41, 146, 230, 64, 3, 205, 166, 216, 146, 173, 149, 225, 180, 93, 128, 227, 254, 240, 29, 10, 65, 25, 225, 235, 227, 163, 6], - [121, 91, 9, 166, 254, 68, 24, 31, 178, 252, 33, 186, 252, 39, 149, 139, 185, 99, 188, 188, 73, 107, 169, 0, 92, 176, 6, 44, 242, 122, 240, 145], - [18, 52, 99, 140, 43, 150, 145, 119, 163, 23, 246, 218, 246, 253, 90, 40, 104, 207, 68, 132, 217, 142, 158, 174, 83, 255, 207, 181, 178, 229, 182, 95], - [64, 164, 10, 249, 72, 67, 69, 141, 42, 50, 223, 253, 168, 193, 19, 20, 60, 76, 38, 59, 104, 159, 178, 47, 235, 40, 23, 212, 75, 85, 116, 71], - [90, 135, 58, 121, 143, 143, 110, 100, 254, 215, 107, 203, 160, 199, 182, 86, 86, 161, 81, 93, 144, 199, 51, 190, 175, 173, 102, 139, 228, 4, 116, 109], - [62, 30, 163, 156, 6, 70, 240, 232, 22, 213, 96, 56, 232, 180, 57, 15, 60, 179, 203, 155, 153, 72, 62, 189, 153, 198, 5, 207, 52, 135, 38, 117], - [44, 112, 144, 18, 248, 7, 175, 143, 195, 240, 210, 171, 176, 197, 28, 169, 168, 141, 78, 242, 77, 26, 9, 43, 248, 157, 172, 245, 206, 99, 234, 29], - [28, 46, 116, 60, 92, 209, 172, 126, 74, 248, 247, 204, 141, 211, 239, 86, 31, 116, 155, 112, 215, 44, 170, 215, 182, 233, 212, 116, 28, 124, 47, 56], - [250, 97, 238, 17, 124, 244, 135, 220, 57, 98, 15, 172, 108, 62, 133, 81, 17, 246, 132, 53, 130, 122, 28, 100, 104, 164, 91, 138, 183, 59, 122, 147], - [58, 13, 33, 166, 234, 193, 159, 44, 11, 84, 97, 158, 123, 225, 71, 8, 234, 35, 71, 206, 84, 152, 118, 183, 248, 102, 3, 149, 189, 13, 86, 168], - [210, 150, 179, 95, 208, 49, 151, 66, 83, 55, 119, 53, 143, 48, 183, 8, 170, 246, 179, 135, 9, 210, 90, 89, 246, 87, 110, 88, 22, 108, 209, 77], - [78, 21, 80, 146, 0, 103, 4, 128, 134, 169, 243, 15, 121, 154, 23, 73, 80, 142, 34, 42, 209, 169, 217, 153, 245, 134, 230, 243, 231, 130, 201, 50], - [172, 29, 49, 23, 191, 6, 255, 232, 145, 41, 74, 11, 29, 19, 218, 87, 78, 212, 129, 65, 9, 0, 161, 70, 196, 152, 211, 120, 21, 216, 97, 107], - [171, 172, 81, 10, 126, 40, 213, 246, 82, 66, 253, 253, 50, 154, 112, 117, 40, 245, 162, 134, 93, 237, 142, 52, 41, 104, 176, 27, 1, 79, 238, 84], - [122, 115, 159, 88, 227, 223, 95, 8, 10, 209, 71, 155, 19, 244, 39, 151, 221, 160, 232, 147, 185, 17, 168, 33, 30, 80, 97, 94, 111, 90, 145, 23], - [60, 63, 34, 232, 97, 176, 18, 120, 81, 178, 12, 69, 219, 238, 113, 125, 26, 228, 253, 183, 174, 26, 138, 208, 111, 64, 64, 41, 244, 124, 121, 67], - [40, 148, 254, 89, 9, 137, 110, 100, 156, 123, 146, 165, 201, 220, 254, 199, 164, 120, 52, 58, 234, 170, 210, 158, 121, 241, 68, 27, 79, 59, 113, 37], - [10, 80, 189, 80, 152, 191, 196, 83, 56, 254, 215, 66, 252, 122, 147, 90, 255, 158, 208, 88, 197, 55, 123, 32, 17, 101, 133, 144, 127, 16, 98, 1], - [46, 105, 172, 145, 220, 43, 62, 84, 175, 210, 215, 71, 54, 231, 223, 217, 95, 170, 30, 115, 141, 171, 6, 108, 128, 50, 137, 128, 199, 201, 7, 110], - [34, 67, 70, 237, 99, 250, 41, 140, 128, 100, 237, 222, 206, 7, 18, 51, 3, 66, 165, 15, 47, 21, 42, 95, 175, 180, 84, 240, 9, 165, 104, 85], - [86, 15, 189, 117, 179, 219, 150, 239, 113, 227, 59, 97, 96, 14, 63, 55, 169, 38, 64, 8, 135, 218, 170, 174, 56, 13, 54, 54, 148, 156, 7, 103], - [106, 217, 75, 166, 62, 43, 95, 39, 205, 242, 178, 147, 7, 109, 3, 214, 253, 255, 44, 20, 164, 97, 54, 104, 211, 243, 117, 150, 167, 140, 152, 71], - [54, 149, 171, 208, 232, 116, 221, 99, 156, 141, 102, 199, 185, 226, 175, 117, 139, 91, 54, 222, 54, 187, 1, 240, 233, 80, 72, 207, 181, 224, 15, 104], - [50, 174, 189, 199, 130, 120, 182, 27, 121, 74, 196, 214, 54, 179, 189, 241, 91, 1, 232, 195, 235, 11, 118, 71, 106, 115, 21, 53, 107, 92, 173, 13], - [248, 50, 93, 17, 160, 222, 207, 148, 89, 28, 188, 52, 219, 39, 38, 73, 24, 224, 147, 207, 156, 221, 0, 146, 208, 108, 78, 134, 97, 111, 28, 41], - [196, 252, 84, 183, 173, 5, 166, 238, 111, 47, 225, 171, 174, 86, 2, 197, 161, 240, 88, 149, 207, 167, 191, 117, 184, 97, 188, 245, 46, 62, 24, 99], - [152, 102, 212, 80, 61, 5, 186, 40, 174, 224, 52, 123, 31, 99, 129, 168, 38, 158, 80, 205, 38, 8, 190, 75, 155, 233, 112, 115, 234, 155, 158, 5], - [58, 244, 16, 159, 67, 195, 93, 65, 105, 111, 153, 149, 45, 112, 230, 188, 137, 80, 77, 197, 83, 61, 191, 24, 151, 55, 187, 203, 215, 135, 96, 97], - [188, 163, 103, 207, 165, 67, 118, 65, 78, 154, 254, 205, 53, 215, 163, 42, 23, 1, 31, 210, 108, 134, 202, 237, 146, 247, 187, 188, 11, 238, 11, 127], - [70, 125, 148, 246, 12, 162, 254, 200, 189, 252, 132, 57, 38, 8, 141, 245, 173, 39, 79, 235, 74, 140, 44, 208, 70, 92, 168, 203, 120, 245, 76, 114], - [44, 240, 131, 139, 5, 251, 24, 39, 24, 222, 133, 149, 37, 250, 30, 109, 83, 213, 87, 229, 252, 246, 49, 238, 159, 244, 76, 97, 152, 16, 212, 59], - [138, 247, 46, 8, 175, 253, 239, 75, 125, 166, 137, 80, 188, 72, 94, 147, 57, 41, 40, 23, 129, 252, 18, 213, 36, 233, 140, 140, 30, 144, 164, 29], - [20, 70, 102, 216, 66, 208, 224, 194, 67, 50, 123, 232, 185, 119, 254, 139, 64, 238, 36, 57, 24, 65, 14, 129, 107, 127, 195, 178, 199, 159, 116, 102], - [200, 131, 83, 61, 79, 131, 122, 150, 17, 115, 59, 190, 222, 176, 212, 32, 178, 87, 61, 28, 144, 55, 39, 59, 72, 181, 35, 55, 104, 248, 95, 8], - [124, 213, 155, 165, 255, 79, 185, 97, 149, 226, 204, 185, 234, 204, 215, 139, 255, 152, 46, 15, 21, 219, 126, 148, 45, 114, 209, 185, 87, 162, 252, 10], - [112, 189, 233, 173, 82, 193, 14, 226, 75, 136, 20, 76, 97, 47, 14, 86, 208, 211, 183, 153, 91, 217, 224, 84, 17, 112, 224, 111, 46, 127, 199, 8], - [56, 15, 250, 13, 153, 166, 81, 158, 10, 180, 216, 160, 140, 45, 96, 255, 90, 140, 119, 98, 199, 158, 20, 138, 230, 238, 137, 145, 112, 1, 0, 68], - [62, 110, 138, 244, 155, 221, 46, 135, 254, 143, 195, 97, 196, 10, 114, 182, 95, 193, 193, 238, 177, 161, 79, 135, 6, 67, 54, 244, 45, 223, 231, 3], - [190, 126, 211, 122, 134, 233, 155, 156, 17, 151, 255, 143, 163, 165, 228, 182, 64, 59, 84, 1, 150, 246, 205, 9, 175, 47, 188, 67, 234, 154, 87, 115], - [156, 8, 170, 109, 173, 183, 172, 39, 165, 150, 128, 2, 57, 201, 163, 99, 200, 160, 148, 206, 213, 196, 98, 132, 153, 72, 241, 15, 81, 45, 158, 27], - [238, 158, 10, 156, 237, 29, 152, 9, 5, 107, 74, 220, 168, 210, 36, 234, 60, 53, 154, 185, 175, 31, 182, 152, 96, 40, 254, 129, 110, 55, 102, 90], - [222, 136, 73, 91, 148, 50, 65, 218, 20, 17, 179, 20, 86, 14, 220, 181, 27, 201, 144, 98, 219, 220, 77, 207, 144, 107, 172, 12, 72, 82, 244, 52], - [20, 188, 115, 8, 240, 253, 101, 118, 31, 236, 245, 236, 16, 75, 180, 56, 238, 70, 125, 153, 10, 248, 72, 55, 204, 56, 122, 105, 222, 73, 168, 95], - [134, 140, 213, 79, 174, 161, 160, 228, 88, 54, 99, 91, 43, 246, 88, 115, 52, 54, 236, 105, 197, 86, 125, 101, 27, 229, 146, 57, 44, 187, 105, 220], - [100, 103, 253, 78, 112, 56, 185, 37, 194, 66, 35, 87, 56, 13, 140, 192, 197, 241, 125, 39, 47, 99, 154, 248, 252, 253, 31, 17, 86, 222, 112, 64], - [176, 119, 188, 76, 14, 254, 156, 6, 250, 209, 36, 141, 91, 39, 90, 121, 157, 44, 229, 114, 204, 187, 146, 96, 27, 172, 36, 104, 210, 159, 228, 75], - [212, 72, 42, 216, 212, 46, 156, 252, 128, 249, 248, 10, 9, 55, 100, 74, 36, 62, 89, 139, 239, 130, 62, 59, 33, 68, 68, 84, 53, 197, 54, 35], - [94, 229, 69, 146, 105, 249, 76, 245, 52, 214, 99, 26, 51, 45, 212, 153, 4, 169, 75, 56, 71, 104, 117, 103, 206, 172, 77, 215, 76, 187, 37, 18], - [168, 7, 6, 72, 246, 228, 59, 125, 138, 143, 16, 65, 139, 105, 97, 48, 210, 4, 108, 16, 100, 95, 16, 8, 93, 232, 14, 96, 152, 184, 95, 9], - [12, 30, 86, 186, 160, 124, 128, 173, 10, 212, 212, 241, 151, 236, 105, 29, 17, 4, 103, 1, 12, 168, 194, 86, 71, 57, 145, 157, 113, 209, 9, 124], - [162, 97, 27, 101, 196, 115, 166, 134, 30, 13, 237, 211, 142, 107, 20, 138, 87, 77, 165, 10, 133, 77, 181, 60, 105, 241, 234, 73, 65, 240, 214, 40], - [168, 243, 128, 29, 140, 120, 224, 144, 194, 1, 238, 189, 86, 169, 82, 167, 233, 13, 83, 92, 237, 86, 132, 253, 211, 253, 103, 106, 154, 207, 75, 68], - [76, 228, 33, 55, 12, 240, 37, 125, 134, 150, 24, 236, 37, 195, 36, 237, 76, 108, 127, 101, 40, 146, 151, 163, 193, 52, 51, 44, 33, 46, 53, 11], - [60, 51, 69, 125, 109, 17, 237, 123, 60, 82, 245, 245, 89, 208, 48, 121, 2, 208, 151, 80, 79, 101, 160, 185, 87, 194, 175, 234, 146, 246, 63, 28], - [186, 80, 165, 140, 50, 132, 33, 151, 29, 245, 67, 142, 199, 59, 10, 187, 95, 78, 69, 71, 166, 254, 108, 31, 9, 9, 6, 230, 11, 71, 49, 67], - [166, 148, 132, 242, 177, 14, 194, 241, 222, 161, 147, 148, 66, 61, 87, 111, 145, 198, 181, 171, 35, 21, 179, 137, 244, 225, 8, 188, 240, 170, 40, 64], - ] - .into_iter() - .map(|acc| - AccountId::from(acc) - ).for_each(|acc| { - if !Balances::unreserve(&acc, to_unreserve).is_zero() { - failure += 1; - }; - }); - frame_support::debug::info!("Migration to fix voters happened. Accounts with inaccurate reserved amount: {}", failure); - ::BlockWeights::get().max_block - } -} - // When this is removed, should also remove `OldSessionKeys`. pub struct UpgradeSessionKeys; impl frame_support::traits::OnRuntimeUpgrade for UpgradeSessionKeys { -- GitLab From 184a4b1a05a6cc2c64547f3811af1be2ab8f70b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Dec 2020 12:09:37 +0100 Subject: [PATCH 130/203] Bump mick-jaeger from 0.1.1 to 0.1.2 (#2139) Bumps [mick-jaeger](https://github.com/tomaka/mick-jaeger) from 0.1.1 to 0.1.2. - [Release notes](https://github.com/tomaka/mick-jaeger/releases) - [Commits](https://github.com/tomaka/mick-jaeger/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/subsystem/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 692a9c1c48..b8d331773e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3480,9 +3480,9 @@ dependencies = [ [[package]] name = "mick-jaeger" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c751e6643309568aa78a725b75755c11d866d6d0d0f7209033142007971cdd" +checksum = "4247b181b96e62eacb5a1e7a2f1a39a78b945cb0434c0fceaae4ed1882555957" dependencies = [ "futures 0.3.8", "rand 0.7.3", diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 73d688e775..9ebfe75171 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -11,7 +11,7 @@ async-trait = "0.1.42" derive_more = "0.99.11" futures = "0.3.8" futures-timer = "3.0.2" -mick-jaeger = "0.1.1" +mick-jaeger = "0.1.2" lazy_static = "1.4" tracing = "0.1.22" tracing-futures = "0.2.4" -- GitLab From e9e811641497024b5ff6269b5d0f142bdbae59b1 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Fri, 18 Dec 2020 17:09:33 +0100 Subject: [PATCH 131/203] Fix Jaeger service name (#2140) --- node/subsystem/src/jaeger.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/subsystem/src/jaeger.rs b/node/subsystem/src/jaeger.rs index 849e59474d..cbd8e23ac5 100644 --- a/node/subsystem/src/jaeger.rs +++ b/node/subsystem/src/jaeger.rs @@ -205,7 +205,7 @@ impl Jaeger { log::info!("🐹 Collecting jaeger spans for {:?}", &jaeger_agent); let (traces_in, mut traces_out) = mick_jaeger::init(mick_jaeger::Config { - service_name: format!("{}-{}", cfg.node_name, cfg.node_name), + service_name: format!("polkadot-{}", cfg.node_name), }); // Spawn a background task that pulls span information and sends them on the network. -- GitLab From c52a3016f394a2ae8a1fc9855c20538b89d24f5b Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 18 Dec 2020 13:40:37 -0500 Subject: [PATCH 132/203] fix bug where we over-eagerly remove backing spans for candidates we validate ourselves (#2142) * fix bug where we over-eagerly remove backing spans for candidates we validate ourselves * jaeger: watch importing of statements --- node/core/backing/src/lib.rs | 15 ++++++++++++++- node/primitives/src/lib.rs | 11 +++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 3de6c37e61..1604166a69 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -503,7 +503,6 @@ impl CandidateBackingJob { ) -> Result<(), Error> { let candidate_hash = command.candidate_hash(); self.awaiting_validation.remove(&candidate_hash); - self.remove_unbacked_span(&candidate_hash); match command { ValidatedCandidateCommand::Second(res) => { @@ -664,6 +663,12 @@ impl CandidateBackingJob { &mut self, statement: &SignedFullStatement, ) -> Result, Error> { + let _span = { + // create a span only for candidates we're already aware of. + let candidate_hash = statement.payload().candidate_hash(); + self.get_unbacked_statement_child(&candidate_hash, statement.validator_index()) + }; + let stmt = primitive_statement_to_table(statement); let summary = self.table.import_statement(&self.table_context, stmt); @@ -854,6 +859,14 @@ impl CandidateBackingJob { self.unbacked_candidates.get(hash).map(|span| span.child("validation")) } + fn get_unbacked_statement_child(&self, hash: &CandidateHash, validator: ValidatorIndex) -> Option { + self.unbacked_candidates.get(hash).map(|span| { + let mut span = span.child("import-statement"); + span.add_string_tag("validator-index", &format!("{}", validator)); + span + }) + } + fn remove_unbacked_span(&mut self, hash: &CandidateHash) { self.unbacked_candidates.remove(hash); } diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index 82ac5dd28e..fa4fe750c9 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -63,6 +63,17 @@ pub enum Statement { } impl Statement { + /// Get the candidate hash referenced by this statement. + /// + /// If this is a `Statement::Seconded`, this does hash the candidate receipt, which may be expensive + /// for large candidates. + pub fn candidate_hash(&self) -> CandidateHash { + match *self { + Statement::Valid(ref h) | Statement::Invalid(ref h) => *h, + Statement::Seconded(ref c) => c.hash(), + } + } + /// Transform this statement into its compact version, which references only the hash /// of the candidate. pub fn to_compact(&self) -> CompactStatement { -- GitLab From adc364f78ac2d98cff95defd4733eedf16e4b36e Mon Sep 17 00:00:00 2001 From: Robert Klotzner Date: Sat, 19 Dec 2020 00:31:43 +0100 Subject: [PATCH 133/203] Some typos and misspellings in docs I found, during my studies. (#2144) * Fix stale link to overseer docs * Some typos and mispellings in docs/comments I found during studying how Polkadot works. --- node/core/backing/src/lib.rs | 2 +- node/overseer/src/lib.rs | 6 +++--- roadmap/implementers-guide/src/node/README.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 1604166a69..c1bc4e3669 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -140,7 +140,7 @@ struct CandidateBackingJob { issued_statements: HashSet, /// These candidates are undergoing validation in the background. awaiting_validation: HashSet, - /// `Some(h)` if this job has already issues `Seconded` statemt for some candidate with `h` hash. + /// `Some(h)` if this job has already issued `Seconded` statement for some candidate with `h` hash. seconded: Option, /// The candidates that are includable, by hash. Each entry here indicates /// that we've sent the provisioner the backed candidate. diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index c204aa745c..d802ed451d 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -17,7 +17,7 @@ //! # Overseer //! //! `overseer` implements the Overseer architecture described in the -//! [implementers-guide](https://github.com/paritytech/polkadot/blob/master/roadmap/implementers-guide/guide.md). +//! [implementers-guide](https://w3f.github.io/parachain-implementers-guide/node/index.html). //! For the motivations behind implementing the overseer itself you should //! check out that guide, documentation in this crate will be mostly discussing //! technical stuff. @@ -203,7 +203,7 @@ impl OverseerHandler { self.send_and_log_error(Event::MsgToSubsystem(msg.into())).await } - /// Inform the `Overseer` that that some block was finalized. + /// Inform the `Overseer` that some block was finalized. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] pub async fn block_finalized(&mut self, block: BlockInfo) { self.send_and_log_error(Event::BlockFinalized(block)).await @@ -1002,7 +1002,7 @@ impl Overseer where S: SpawnNamed, { - /// Create a new intance of the `Overseer` with a fixed set of [`Subsystem`]s. + /// Create a new instance of the `Overseer` with a fixed set of [`Subsystem`]s. /// /// ```text /// +------------------------------------+ diff --git a/roadmap/implementers-guide/src/node/README.md b/roadmap/implementers-guide/src/node/README.md index 44eeb4bf97..f20c970aff 100644 --- a/roadmap/implementers-guide/src/node/README.md +++ b/roadmap/implementers-guide/src/node/README.md @@ -10,7 +10,7 @@ The architecture of the node-side behavior aims to embody the Rust principles of Many operations that need to be carried out involve the network, which is asynchronous. This asynchrony affects all core subsystems that rely on the network as well. The approach of hierarchical state machines is well-suited to this kind of environment. -We introduce +We introduce ## Components @@ -26,6 +26,6 @@ The Node-side code comes with a set of assumptions that we build upon. These ass We assume the following constraints regarding provided basic functionality: * The underlying **consensus** algorithm, whether it is BABE or SASSAFRAS is implemented. * There is a **chain synchronization** protocol which will search for and download the longest available chains at all times. - * The **state** of all blocks at the head of the chain is available. There may be **state pruning** such that state of the last `k` blocks behind the last finalized block are is available, as well as the state of all their descendents. This assumption implies that the state of all active leaves and their last `k` ancestors are all available. The underlying implementation is expected to support `k` of a few hundred blocks, but we reduce this to a very conservative `k=5` for our purposes. + * The **state** of all blocks at the head of the chain is available. There may be **state pruning** such that state of the last `k` blocks behind the last finalized block are available, as well as the state of all their descendents. This assumption implies that the state of all active leaves and their last `k` ancestors are all available. The underlying implementation is expected to support `k` of a few hundred blocks, but we reduce this to a very conservative `k=5` for our purposes. * There is an underlying **networking** framework which provides **peer discovery** services which will provide us with peers and will not create "loopback" connections to our own node. The number of peers we will have is assumed to be bounded at 1000. * There is a **transaction pool** and a **transaction propagation** mechanism which maintains a set of current transactions and distributes to connected peers. Current transactions are those which are not outdated relative to some "best" fork of the chain, which is part of the active heads, and have not been included in the best fork. -- GitLab From e991db146e778ee60cba21052798ecd78ef62a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sat, 19 Dec 2020 00:32:21 +0100 Subject: [PATCH 134/203] Rococo V1 (#2141) * Update to latest master and use 30 minutes sessions * add bootnodes to chainspec * Update Substrate * Update chain-spec * Update Cargo.lock * GENESIS * Change session length to one hour * Bump spec_version to not fuck anything up ;) Co-authored-by: Erin Grasmick --- Cargo.lock | 276 ++++++++++++++++---------------- node/service/res/rococo.json | 227 +++++++++++++++----------- runtime/rococo/src/constants.rs | 3 +- runtime/rococo/src/lib.rs | 2 +- 4 files changed, 275 insertions(+), 233 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8d331773e..334202f74a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6723,7 +6723,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "async-trait", "derive_more", @@ -6751,7 +6751,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6774,7 +6774,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6791,7 +6791,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6812,7 +6812,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6823,7 +6823,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "atty", "chrono", @@ -6866,7 +6866,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6877,7 +6877,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "fnv", @@ -6911,7 +6911,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "blake2-rfc", "hash-db", @@ -6941,7 +6941,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6952,7 +6952,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "fork-tree", @@ -6997,7 +6997,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "futures 0.3.8", @@ -7021,7 +7021,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7034,7 +7034,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7060,7 +7060,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "sc-client-api", @@ -7074,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "lazy_static", @@ -7103,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "parity-scale-codec", @@ -7119,7 +7119,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "parity-scale-codec", @@ -7134,7 +7134,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "parity-scale-codec", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "finality-grandpa", @@ -7189,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "finality-grandpa", @@ -7213,7 +7213,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7231,7 +7231,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "async-trait", "derive_more", @@ -7251,7 +7251,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "hash-db", "lazy_static", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "async-std", "async-trait", @@ -7324,7 +7324,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7339,7 +7339,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "bytes 0.5.6", "fnv", @@ -7366,7 +7366,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "libp2p", @@ -7379,7 +7379,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7388,7 +7388,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "hash-db", @@ -7422,7 +7422,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "futures 0.3.8", @@ -7446,7 +7446,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7464,7 +7464,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "directories 3.0.1", "exit-future", @@ -7528,7 +7528,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "parity-scale-codec", @@ -7543,7 +7543,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7563,7 +7563,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7584,7 +7584,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7608,7 +7608,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "futures 0.3.8", @@ -7630,7 +7630,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8096,7 +8096,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "sp-core", @@ -8108,7 +8108,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "hash-db", "parity-scale-codec", @@ -8124,7 +8124,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8136,7 +8136,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "serde", @@ -8148,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8161,7 +8161,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-api", @@ -8173,7 +8173,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8184,7 +8184,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-api", @@ -8196,7 +8196,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "log", @@ -8214,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "serde", "serde_json", @@ -8223,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8249,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "merlin", "parity-scale-codec", @@ -8269,7 +8269,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8278,7 +8278,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8290,7 +8290,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "base58", "blake2-rfc", @@ -8334,7 +8334,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8343,7 +8343,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8353,7 +8353,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "environmental", "parity-scale-codec", @@ -8364,7 +8364,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "finality-grandpa", "log", @@ -8381,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8393,7 +8393,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "hash-db", @@ -8417,7 +8417,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "lazy_static", "sp-core", @@ -8428,7 +8428,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "async-trait", "derive_more", @@ -8445,7 +8445,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "serde", @@ -8457,7 +8457,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8468,7 +8468,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "sp-api", "sp-core", @@ -8478,7 +8478,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "backtrace", ] @@ -8486,7 +8486,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "serde", "sp-core", @@ -8495,7 +8495,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "either", "hash256-std-hasher", @@ -8516,7 +8516,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8533,7 +8533,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "Inflector", "proc-macro-crate", @@ -8545,7 +8545,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "serde", "serde_json", @@ -8554,7 +8554,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-api", @@ -8567,7 +8567,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8577,7 +8577,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "hash-db", "log", @@ -8599,12 +8599,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8617,7 +8617,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "sp-core", @@ -8630,7 +8630,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8644,7 +8644,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "log", "parity-scale-codec", @@ -8657,7 +8657,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "derive_more", "futures 0.3.8", @@ -8673,7 +8673,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "hash-db", "memory-db", @@ -8687,7 +8687,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "futures-core", @@ -8699,7 +8699,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8711,7 +8711,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8853,7 +8853,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "chrono", "console_error_panic_hook", @@ -8879,7 +8879,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "platforms", ] @@ -8887,7 +8887,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8910,7 +8910,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "async-std", "derive_more", @@ -8924,7 +8924,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8951,7 +8951,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8961,7 +8961,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#987a9723920217917f2708388d150add5ef52ef7" +source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/node/service/res/rococo.json b/node/service/res/rococo.json index 84794ae44f..5c2de03453 100644 --- a/node/service/res/rococo.json +++ b/node/service/res/rococo.json @@ -1,10 +1,20 @@ { "name": "Rococo", - "id": "rococo", - "bootNodes": [], + "id": "rococo_v1", + "chainType": "Live", + "bootNodes": [ + "/ip4/34.90.151.124/tcp/30333/p2p/12D3KooWF7BUbG5ErMZ47ZdarRwtpZamgcZqxwpnFzkhjc1spHnP", + "/ip4/34.90.137.14/tcp/30333/p2p/12D3KooWLcpkpvjr5ccgtUdTSYtNDjEdsDcPNrt2Rb7yXuAf7bUE", + "/ip4/35.204.67.254/tcp/30333/p2p/12D3KooWGjEEDmNbBkXLM1uKMseK9iYD3osKA4JGdGKMZDCusjd6", + "/ip4/34.90.121.39/tcp/30333/p2p/12D3KooWBhkZQydNHDR3XSehnrfj1KNFCdpwgDrYpX54FrUR1FRS", + "/ip4/34.91.145.35/tcp/30333/p2p/12D3KooWBuLAMevZexnFKCgTyoz3AnHQn98D9cfe1Mg3kPoCjkwf", + "/ip4/34.91.77.80/tcp/30333/p2p/12D3KooWA5BAM71y9NtV5NH6EjANgYKRZ8jNLJ5z8GJ5RPdjt63n", + "/ip4/34.91.84.25/tcp/30333/p2p/12D3KooWSV4VqhBHZKKBsZKmVU462qRW9PmXTSuYvuajt1P93djA", + "/ip4/34.91.97.19/tcp/30333/p2p/12D3KooWD6wC88atMMyVeP6ZKg9sK7QmUL8x8m1RxMW8rhv2vWyg" + ], "telemetryEndpoints": [ [ - "wss://telemetry.polkadot.io/submit/", + "/dns/telemetry.polkadot.io/tcp/443/x-parity-wss/%2Fsubmit%2F", 0 ] ], @@ -15,104 +25,137 @@ "tokenSymbol": "RCO" }, "forkBlocks": null, - "badBlocks": [], + "badBlocks": null, "consensusEngine": null, + "lightSyncState": null, "genesis": { "raw": { "top": { - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc69406b1b580f3fd70373207c005e38adff268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x047374616b696e672000407a10f35a0000000000000000000002", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950df2ec3df1d2fc39f6772616e80959cebf18fecb305b96fd998c95f850145f52cbbb64b3ef937c0575cc7ebd652": "0x9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90566b5cb12e1bb0dd3301e8ab40c6d0508264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x000000000300407a10f35a000000000000000000000000000000000000000000000000000000407a10f35a0000000000000000000000407a10f35a00000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x0b00407a10f35a0b00407a10f35a00", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade9803adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x00", - "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6afdf816f281ad669fe59fe0f725f72759ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x047374616b696e672000407a10f35a0000000000000000000002", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9bb08f275d00049b315666c2c44130a106648d7f3382690650c681aba1b993cd11e54deb4df21a3a18c3e2177de9f7342": "0x0000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195068dec3fce5ade0966261626580da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa8349": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x00000000", + "0x509fc563e49ed9cb767129896846f57f878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f6584bfaf470c1b26175646980f6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f349": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0000362b4c8ee30d0000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ed0b865484219eb06173676e80244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xf0c365c3cf59d671eb72da0e7a4113c4878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509df5f4072c4244956261626580764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe21": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500d1064d79ff558056772616e800e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503c75eb9438a505fc6261626580a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x2062475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfaa076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed3586975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef7430e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477bf49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022afcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d38757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee81668bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80df6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f34992ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6fe1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2aee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a040436be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe218e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b752496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b166c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c817c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac0116c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb53102ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5bc4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff351efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04afa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a004bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11ffab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab474ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dccda6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa834992156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", + "0xd84ad3579da5beed16cea616d20c3c89878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00", + "0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1": "0x03", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d7ce35a3ce71c3d76175646980160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", - "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x041c77657374656e64", - "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x10a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a72bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300174bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e", - "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x32000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000003adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x0b00407a10f35a0b00407a10f35a00", "0x2371e21684d2fae99bcb4d579242f74a8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb35c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x959cebf18fecb305b96fd998c95f850145f52cbbb64b3ef937c0575cc7ebd65272bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300172bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300172bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300172bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195024a1470c7a02f07e696d6f6e807ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a": "0xaebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934", - "0x3a636f6465": "0x0061736d0100000001ae022c60037f7f7f017f60027f7f017f60027f7f0060017f017e60017f0060047f7f7f7f0060037f7e7e0060017e017f6000017e60017e017e60017f017f60037e7e7f017e60027f7f017e60037f7f7e017e60017e0060027e7e0060037f7e7f017f60027f7e017e60047f7e7e7e017f6000017f60027f7e017f60000060037f7f7f0060057f7f7f7f7f0060027e7f017f60057f7f7f7f7f017f60047f7f7f7f017f60077f7f7f7f7f7f7f017f60087e7e7e7e7e7e7e7e017f60077f7e7e7e7e7e7e0060027f7e0060067f7f7f7f7f7f0060057f7e7e7f7f0060057f7f7f7e7e0060057f7f7e7e7f0060047e7e7e7e017f60047f7f7e7e0060067f7e7e7f7f7f0060067f7f7f7e7e7f0060027e7f0060067f7f7f7f7e7e0060047f7e7e7f0060057f7e7e7e7e0060067f7e7e7e7e7f0002cc0a2203656e76066d656d6f727902001203656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31000603656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31000703656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31000803656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31000903656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31000a03656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000403656e761a6578745f73746f726167655f726561645f76657273696f6e5f31000b03656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31000c03656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000303656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31000d03656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31000e03656e761c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31000e03656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31000703656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31000703656e76196578745f73746f726167655f7365745f76657273696f6e5f31000f03656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31000703656e76196578745f73746f726167655f6765745f76657273696f6e5f31000903656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31000e03656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31000e03656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f32001003656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31001103656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001203656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31000603656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31000903656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31000703656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31000903656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31000803656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31000903656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31001003656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31000e03656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31001303656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31001403656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f310014038b0589050a0a040400000a0a0c1515151616021600151517000101020102020201180403191a161600170101010a1b0101011601010005010100010100000100040101020216021602000101160102010102040202010216051602041616160a0101021c011d01010202040200171e1f160217020104011616161616161616161616161616161616161616161616160216161616160216161616160204021601020416160202020202020202160202021604020201020202160216170216020516161604161604021602021620060f020204150a0402020216020202020202020402020202020405020219021602160a2102021616020216020402162202021602232419040505160204040001010201021602020101020401010201010404040204020204170a020502021602130125020216040404161616040202020404160204010202020202020404040404040404040404040404041502021602020216162605260a02020204021602161702020201020202021616160416020202020202040202020402020104041604040402020404040416051602021602160202021616161902040202160216160202020402000604040202021a02040402020202020202020202021504040404041508020217020216020404021604040204040202040202020202020202020216020216020404020204042717160202021604010216020201020201160202161616010404020402020216051f28020404010201040402020202150416160404040202040501000402040204020202040416160404020402020202161616040404040404040c0c0c0c0c0c0c040c0c0c0c150c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0204040204020402160202160423160404040402040000000029292a2a2a2b0407017001ad01ad010619037f01418080c0000b7f0041a0abc7000b7f0041a0abc7000b07a2071f195f5f696e6469726563745f66756e6374696f6e5f7461626c65010009686173685f7465737400290c436f72655f76657273696f6e00ee0412436f72655f657865637574655f626c6f636b00ef0415436f72655f696e697469616c697a655f626c6f636b00f004114d657461646174615f6d6574616461746100f1041c426c6f636b4275696c6465725f6170706c795f65787472696e73696300f2041b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00f30420426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300f4041c426c6f636b4275696c6465725f636865636b5f696e686572656e747300f60418426c6f636b4275696c6465725f72616e646f6d5f7365656400f7042b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00f804214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200f9041850617261636861696e486f73745f76616c696461746f727300fb041950617261636861696e486f73745f647574795f726f7374657200fc041f50617261636861696e486f73745f6163746976655f70617261636861696e7300fd042850617261636861696e486f73745f676c6f62616c5f76616c69646174696f6e5f7363686564756c6500fe042350617261636861696e486f73745f6c6f63616c5f76616c69646174696f6e5f6461746100ff041c50617261636861696e486f73745f70617261636861696e5f636f64650080051750617261636861696e486f73745f6765745f68656164730081051d50617261636861696e486f73745f7369676e696e675f636f6e746578740082051e4772616e6470614170695f6772616e6470615f617574686f72697469657300830515426162654170695f636f6e66696775726174696f6e0084051b426162654170695f63757272656e745f65706f63685f737461727400850521417574686f72697479446973636f766572794170695f617574686f7269746965730086052153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b6579730087051f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b6579730088051d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365008905205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f008a050a5f5f646174615f656e6403010b5f5f686561705f62617365030209bf02010041010bac01393d5047840148496c51d1015ba503b602b102b202b802df02ab04a4045eb502d0043536375f405254555657586667686a6b6f6d6e4d4e7efc01f503fb01fa01f301bf04f901f801f701f601f401f201ff01fe01a802a902aa02b902bd029301be04bd04e602a603cc04b003d204d4049c059b059d05ea04e904e702dd04dc04e802df04e804c804c904ec04eb04ed04f101ee01e902fd01a702c704ea02f403f303eb02fe03aa03a903ab03b1038f048e04ec02ac04d202d002ed02db02d803d703cc03af03ae03a703fb03fa03ee02e603d904d804ef02e7048d058c05f002970593049204f102ad04bb02ba02f202bc02da029b04f302d103d003f402e5039c04ac03fd038301fc03da03d90391049004990498049a04c204c104c004e004ca04d304d604d504de048e059a05cd04cf049e059f0591010acdd13889050600200010220b0600200010040b0600200010240b0600200010050b0a0020002001200210260b2801017f0240200210042203450d002003200020022001200120024b1b10a1051a200010050b20030b0600200010280b1c01017f0240200010042201450d0020014100200010a0051a0b20010bff0202017f037e230041206b220224002001ad42adfed5e4d485fda8d8007e42b9e0007c210302400240024002400240200141084b0d00200141014b0d0120010d02420021040c030b0240200141104b0d00200241106a2000290000200385420042adfed5e4d485fda8d800420010a605200241186a29030020022903107c200120006a41786a2900008521040c040b200120006a41786a2900002105200321040340200029000020048542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e2003852103200041086a2100200442cf829ebbefefde82147c2104200141786a220141084b0d000b200320058521040c030b0240200141034b0d00200120006a417e6a33000042108620003300008420038521040c030b200120006a417c6a35000042208620003500008420038521040c020b200031000021040b200420038521040b20022004420042adfed5e4d485fda8d800420010a605200241086a290300210420022903002103200241206a2400200420037c42c300850b0500102b000b2400410041d4b3c000ad4280808080f0008441dbb3c000ad4280808080a00484100000000b1100419080c000411141a480c000102d000b4701017f230041206b22032400200341146a41003602002003419ca8c700360210200342013702042003200136021c200320003602182003200341186a36020020032002103a000bdd0101047f0240024002400240200041046a2802002203200041086a28020022046b200220016b2202490d00200028020021050c010b200420026a22052004490d01200341017422062005200620054b1b22064100480d010240024002402003450d00200028020022050d010b024020060d00410121050c020b2006102122050d010c040b024020032006460d00200520032006102521050b2005450d03200041086a28020021040b20002005360200200041046a20063602000b200520046a2001200210a1051a200041086a200420026a3602000f0b102c000b102a000b8b0301067f230041306b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b024002400240024002400240200141146a2802000d00200621070c010b024020040d004100410041cc80c0001030000b024002402006410f4b0d00200341046a280200450d010b200620066a220720064f0d010b4100210741012105200241086a21060c010b2007417f4c0d01200241086a2106024020070d0041002107410121050c010b200710212205450d020b20024100360210200220053602082002200736020c2002200241086a360214200241186a41106a200141106a290200370300200241186a41086a200141086a29020037030020022001290200370318200241146a41dc80c000200241186a10310d0220002006290200370200200041086a200641086a280200360200200241306a24000f0b1032000b1033000b41f480c0004133200241186a41a881c00041b881c0001034000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c2003419884c000360208200341013602242003200341206a360218200320033602282003200341046a360220200341086a2002103a000bba06010a7f230041306b22032400200341246a2001360200200341033a002820034280808080800437030820032000360220410021042003410036021820034100360210024002400240024020022802082205450d0020022802002106200228020422072002410c6a2802002208200820074b1b2209450d01200241146a280200210a2002280210210b41012108200020062802002006280204200128020c1100000d03200541106a2102200641086a2100410121040240024003402003200241746a28020036020c20032002410c6a2d00003a00282003200241786a280200360208200241086a28020021084100210541002101024002400240200241046a2802000e03010002010b2008200a4f0d032008410374210c41002101200b200c6a220c2802044102470d01200c28020028020021080b410121010b2003200836021420032001360210200228020021080240024002402002417c6a2802000e03010002010b2008200a4f0d0420084103742101200b20016a22012802044102470d01200128020028020021080b410121050b2003200836021c200320053602180240200241706a2802002208200a4f0d00200b20084103746a2208280200200341086a20082802041101000d06200420094f0d05200041046a210120002802002105200241206a2102200041086a210041012108200441016a2104200328022020052001280200200328022428020c110000450d010c070b0b2008200a41f088c0001030000b2008200a41e088c0001030000b2008200a41e088c0001030000b2002280200210620022802042207200241146a2802002208200820074b1b220a450d002002280210210241012108200020062802002006280204200128020c1100000d02200641086a21004101210403402002280200200341086a200241046a2802001101000d022004200a4f0d01200041046a210120002802002105200241086a2102200041086a210041012108200441016a2104200328022020052001280200200328022428020c110000450d000c030b0b0240200720044d0d00410121082003280220200620044103746a22022802002002280204200328022428020c1100000d020b410021080c010b410121080b200341306a240020080b0500102c000b0500102a000b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c200541b0fcc200360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004103a000b120020002802002001200120026a102e41000bcb0301047f230041106b22022400200028020021000240024002400240024002402001418001490d002002410036020c2001418010490d012002410c6a210302402001418080044f0d0020022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c050b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c040b0240024020002802082203200041046a280200460d00200028020021040c010b200341016a22042003490d02200341017422052004200520044b1b22054100480d020240024002402003450d00200028020022040d010b024020050d00410121040c020b2005102122040d010c050b024020032005460d00200420032005102521040b2004450d04200028020821030b20002004360200200041046a20053602000b200420036a20013a00002000200028020841016a3602080c040b20022001413f71418001723a000d20022001410676411f7141c001723a000c2002410c6a2103410221010c020b102c000b102a000b20002003200320016a102e0b200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc80c000200241086a10312101200241206a240020010b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241cc82c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41e482c000103a000b0b0020003502002001103e0b3401017f230041106b220224002002200136020c20022000360208200241a884c0003602042002419ca8c7003602002002103f000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241a083c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41b883c000103a000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241dc83c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41f483c000103a000b0d0020002802001a037f0c000b0bd20203027f017e037f230041306b22022400412721030240024020004290ce005a0d00200021040c010b412721030340200241096a20036a2205417c6a200020004290ce0080220442f0b17f7e7ca7220641ffff037141e4006e220741017441ea84c0006a2f00003b00002005417e6a2007419c7f6c20066a41ffff037141017441ea84c0006a2f00003b00002003417c6a2103200042ffc1d72f5621052004210020050d000b0b02402004a7220541e3004c0d00200241096a2003417e6a22036a2004a7220641ffff037141e4006e2205419c7f6c20066a41ffff037141017441ea84c0006a2f00003b00000b024002402005410a480d00200241096a2003417e6a22036a200541017441ea84c0006a2f00003b00000c010b200241096a2003417f6a22036a200541306a3a00000b2001419ca8c7004100200241096a20036a412720036b10412103200241306a240020030b6f01017f230041c0006b220124002001200036020c200141346a410136020020014201370224200141ccb3c0003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a102f410141d4b3c000410720012802102001280218108a0100000b0c00429ef392e9c28bc0b1400be80501067f20002802002205410171220620046a21070240024020054104710d00410021010c010b4100210802402002450d00200221092001210a03402008200a2d000041c00171418001466a2108200a41016a210a2009417f6a22090d000b0b200720026a20086b21070b412b418080c40020061b21080240024020002802084101460d004101210a200020082001200210420d012000280218200320042000411c6a28020028020c110000210a0c010b02402000410c6a280200220920074b0d004101210a200020082001200210420d012000280218200320042000411c6a28020028020c1100000f0b0240024020054108710d004100210a200920076b22092105024002400240410120002d0020220720074103461b0e0402010001020b2009410176210a200941016a41017621050c010b410021052009210a0b200a41016a210a0340200a417f6a220a450d0220002802182000280204200028021c280210110100450d000b41010f0b200028020421052000413036020420002d002021064101210a200041013a0020200020082001200210420d014100210a200920076b22092102024002400240410120002d0020220820084103461b0e0402010001020b2009410176210a200941016a41017621020c010b410021022009210a0b200a41016a210a02400340200a417f6a220a450d0120002802182000280204200028021c280210110100450d000b41010f0b200028020421094101210a200028021820032004200028021c28020c1100000d01200241016a2108200028021c210220002802182101024003402008417f6a2208450d014101210a2001200920022802101101000d030c000b0b200020063a00202000200536020441000f0b200028020421094101210a200020082001200210420d00200028021820032004200028021c28020c1100000d00200541016a2108200028021c210220002802182100034002402008417f6a22080d0041000f0b4101210a200020092002280210110100450d000b0b200a0b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341b486c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a2002103a000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341ec86c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a2002103a000b9307010c7f200041106a28020021030240024002400240200041086a28020022044101460d0020034101460d012000280218200120022000411c6a28020028020c11000021030c030b20034101470d010b0240024020020d00410021020c010b200120026a2105200041146a28020041016a21064100210720012103200121080340200341016a210902400240024020032c0000220a417f4a0d000240024020092005470d004100210b200521030c010b20032d0001413f71210b200341026a220921030b200a411f71210c0240200a41ff0171220a41df014b0d00200b200c41067472210a0c020b0240024020032005470d004100210d2005210e0c010b20032d0000413f71210d200341016a2209210e0b200d200b41067472210b0240200a41f0014f0d00200b200c410c7472210a0c020b02400240200e2005470d004100210a200921030c010b200e41016a2103200e2d0000413f71210a0b200b410674200c411274418080f0007172200a72220a418080c400470d020c040b200a41ff0171210a0b200921030b02402006417f6a2206450d00200720086b20036a21072003210820052003470d010c020b0b200a418080c400460d00024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b4100210902402002450d002002210a200121030340200920032d000041c00171418001466a2109200341016a2103200a417f6a220a0d000b0b0240200220096b200028020c2206490d002000280218200120022000411c6a28020028020c1100000f0b410021074100210902402002450d00410021092002210a200121030340200920032d000041c00171418001466a2109200341016a2103200a417f6a220a0d000b0b200920026b20066a2209210a024002400240410020002d0020220320034103461b0e0402010001020b20094101762107200941016a410176210a0c010b4100210a200921070b200741016a2103024003402003417f6a2203450d0120002802182000280204200028021c280210110100450d000b41010f0b2000280204210941012103200028021820012002200028021c28020c1100000d00200a41016a2103200028021c210a20002802182100034002402003417f6a22030d0041000f0b20002009200a280210110100450d000b41010f0b20030bc80801067f230041f0006b220524002005200336020c20052002360208410121062001210702402001418102490d00410020016b2108418002210903400240200920014f0d00200020096a2c000041bf7f4c0d0041002106200921070c020b2009417f6a21074100210620094101460d01200820096a210a20072109200a4101470d000b0b200520073602142005200036021020054100410520061b36021c2005419ca8c70041b087c00020061b3602180240024002400240200220014b22090d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b200520023602202002450d0220022001460d02200141016a210a03400240200220014f0d00200020026a2c000041404e0d040b2002417f6a210920024101460d04200a2002462107200921022007450d000c040b0b20052002200320091b360228200541306a41146a4103360200200541c8006a41146a4104360200200541d4006a410436020020054203370234200541b887c0003602302005410136024c2005200541c8006a3602402005200541186a3602582005200541106a3602502005200541286a360248200541306a2004103a000b200541e4006a4104360200200541c8006a41146a4104360200200541d4006a4101360200200541306a41146a410436020020054204370234200541d087c0003602302005410136024c2005200541c8006a3602402005200541186a3602602005200541106a36025820052005410c6a3602502005200541086a360248200541306a2004103a000b200221090b024020092001460d00410121070240024002400240200020096a220a2c00002202417f4a0d0041002106200020016a220721010240200a41016a2007460d00200a41026a2101200a2d0001413f7121060b2002411f71210a200241ff017141df014b0d012006200a4106747221010c020b2005200241ff0171360224200541286a21020c020b4100210020072108024020012007460d00200141016a210820012d0000413f7121000b200020064106747221010240200241ff017141f0014f0d002001200a410c747221010c010b41002102024020082007460d0020082d0000413f7121020b2001410674200a411274418080f00071722002722201418080c400460d020b2005200136022441012107200541286a21022001418001490d00410221072001418010490d0041034104200141808004491b21070b200520093602282005200720096a36022c200541306a41146a4105360200200541ec006a4104360200200541e4006a4104360200200541c8006a41146a4106360200200541d4006a410736020020054205370234200541f087c000360230200520023602582005410136024c2005200541c8006a3602402005200541186a3602682005200541106a3602602005200541246a3602502005200541206a360248200541306a2004103a000b41d095c700412b2004102d000b100020012000280200200028020410450b800101037f230041206b220224000240024020002802002001104c0d002001411c6a2802002103200128021821042002411c6a41003602002002419ca8c7003602182002420137020c200241d888c00036020820042003200241086a1031450d010b200241206a240041010f0b20002802042001104c2101200241206a240020010bdd0502047f017e410121020240200128021841272001411c6a2802002802101101000d0041022103024002400240024002402000280200220041776a2204411e4d0d00200041dc00470d010c020b41f40021050240024020040e1f05010202000202020202020202020202020202020202020202030202020203050b41f20021050c040b41ee0021050c030b0240024002402000104a0d00024002400240200041808004490d00200041808008490d0120004190fc476a4190fc0b490d02200041b5d9736a41b5db2b490d02200041e28b746a41e20b490d022000419fa8746a419f18490d02200041dee2746a410e490d02200041feffff0071419ef00a460d02200041a2b2756a4122490d02200041cb91756a410a4b0d050c020b200041c089c000412941928ac00041a20241b48cc00041b502104b450d010c040b200041e98ec000412641b58fc00041af0141e490c00041a303104b0d030b200041017267410276410773ad4280808080d0008421060c010b200041017267410276410773ad4280808080d0008421060b410321030c020b410121030c010b0b200021050b03402003210441dc002100410121024101210302400240024002400240024020040e0402010500020b02400240024002402006422088a741ff01710e06050302010006050b200642ffffffff8f608342808080803084210641f50021000c060b200642ffffffff8f608342808080802084210641fb0021000c050b20052006a72204410274411c7176410f712203413072200341d7006a2003410a491b210002402004450d002006427f7c42ffffffff0f832006428080808070838421060c050b200642ffffffff8f60834280808080108421060c040b200642ffffffff8f6083210641fd0021000c030b41002103200521000c030b20012802184127200128021c2802101101000f0b200642ffffffff8f60834280808080c0008421060b410321030b20012802182000200128021c280210110100450d000b0b20020b9d0301057f0240024002404100410f200041a49a04491b2201200141086a2201200141027441c894c0006a280200410b742000410b7422014b1b2202200241046a2202200241027441c894c0006a280200410b7420014b1b2202200241026a2202200241027441c894c0006a280200410b7420014b1b2202200241016a2202200241027441c894c0006a280200410b7420014b1b220241027441c894c0006a280200410b74220320014620032001496a20026a2201411e4b0d002001410274210241b105210302402001411e460d00200241cc94c0006a2204450d00200428020041157621030b4100210402402001417f6a220520014b0d002005411f4f0d03200541027441c894c0006a28020041ffffff007121040b02402003200241c894c0006a280200411576220141016a460d00200020046b21022003417f6a2103410021000340200141b0054b0d032000200141d495c0006a2d00006a220020024b0d012003200141016a2201470d000b0b20014101710f0b2001411f41889bc0001030000b200141b10541989bc0001030000b2005411f41c495c0001030000bea0201067f200120024101746a210720004180fe0371410876210841002109200041ff0171210a0240024002400340200141026a210b200920012d000122026a210c024020012d000022012008460d00200120084b0d03200c2109200b2101200b2007470d010c030b0240200c2009490d00200c20044b0d02200320096a2101024003402002450d012002417f6a210220012d00002109200141016a21012009200a470d000b410021020c050b200c2109200b2101200b2007470d010c030b0b2009200c418894c0001044000b200c2004418894c0001043000b200041ffff03712109200520066a210c4101210202400340200541016a210a0240024020052d00002201411874411875220b4100480d00200a21050c010b200a200c460d02200b41ff007141087420052d0001722101200541026a21050b200920016b22094100480d02200241017321022005200c470d000c020b0b41d095c700412b419894c000102d000b20024101710ba50201037f23004180016b2202240002400240024002400240200128020022034110710d0020034120710d012000ad2001103e21000c020b410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141a889c0004102200220036a4180016a410020036b104121000c010b410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141a889c0004102200220036a4180016a410020036b104121000b20024180016a240020000f0b2000418001419889c0001044000b2000418001419889c0001044000b1c00200128021841999cc000410b2001411c6a28020028020c1100000b1c00200128021841a49cc000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a410136020020034201370214200341ccb3c0003602102003410436022c2003200341286a3602202003200341086a360228200341106a2002103a000b140020002802002001200028020428020c1101000b1500200120002802002200280200200028020410450bb10401077f230041306b220324000240024020020d00410021040c010b200341286a210502400240024002400340024020002802082d0000450d00200028020041ed9cc0004104200028020428020c1100000d050b2003410a3602282003428a808080103703202003200236021c200341003602182003200236021420032001360210200341086a410a200120021053024002400240024020032802084101470d00200328020c210403402003200420032802186a41016a2204360218024002402004200328022422064f0d00200328021421070c010b200328021422072004490d00200641054f0d072003280210200420066b22086a22092005460d0420092005200610a305450d040b200328021c22092004490d0220072009490d0220032006200341106a6a41176a2d0000200328021020046a200920046b10532003280204210420032802004101460d000b0b2003200328021c3602180b200028020841003a0000200221040c010b200028020841013a0000200841016a21040b2000280204210920002802002106024020044520022004467222070d00200220044d0d03200120046a2c000041bf7f4c0d030b200620012004200928020c1100000d04024020070d00200220044d0d04200120046a2c000041bf7f4c0d040b200120046a2101200220046b22020d000b410021040c040b2006410441f49cc0001043000b200120024100200441849dc0001046000b200120022004200241a087c0001046000b410121040b200341306a240020040bf80201067f410021040240024020024103712205450d00410420056b2205450d0020032005200520034b1b210441002105200141ff01712106034020042005460d01200220056a2107200541016a210520072d000022072006470d000b410121032007200141ff01714641016a41017120056a417f6a21050c010b200141ff017121060240024020034108490d002004200341786a22084b0d00200641818284086c210502400340200220046a220741046a2802002005732209417f73200941fffdfb776a7120072802002005732207417f73200741fffdfb776a7172418081828478710d01200441086a220420084d0d000b0b200420034b0d010b200220046a2109200320046b210241002103410021050240034020022005460d01200920056a2107200541016a210520072d000022072006470d000b410121032007200141ff01714641016a41017120056a417f6a21050b200520046a21050c010b2004200341b09dc0001044000b20002005360204200020033602000b8b0201027f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110522101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41fc9dc000200241086a10312101200241206a240020010b0d0020002802002001200210520b0b002000280200200110540b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41fc9dc000200241086a10312101200241206a240020010bd30202047f027e230041c0006b2203240041012104024020002d00080d00200028020421050240200028020022062d00004104710d0041012104200628021841db9dc00041949ec00020051b4102410120051b2006411c6a28020028020c1100000d0120012000280200200228020c11010021040c010b024020050d0041012104200628021841959ec00041022006411c6a28020028020c1100000d01200028020021060b41012104200341013a0017200341346a41e09dc000360200200320062902183703082003200341176a3602102006290208210720062902102108200320062d00203a00382003200837032820032007370320200320062902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041f89dc0004102200328023428020c11000021040b200020043a00082000200028020441016a360204200341c0006a240020000bd40202037f027e230041c0006b2203240041012104024020002d00040d0020002d000521040240200028020022052d00004104710d000240200441ff0171450d0041012104200528021841db9dc00041022005411c6a28020028020c1100000d02200028020021050b20012005200228020c11010021040c010b0240200441ff01710d0041012104200528021841999ec00041012005411c6a28020028020c1100000d01200028020021050b41012104200341013a0017200341346a41e09dc000360200200320052902183703082003200341176a3602102005290208210620052902102107200320052d00203a00382003200737032820032006370320200320052902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041f89dc0004102200328023428020c11000021040b200041013a0005200020043a0004200341c0006a240020000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a10312100200241206a240020000bd70a020c7f017e230041206b220324004101210402400240200228021841222002411c6a2802002802101101000d000240024020010d00410021050c010b200020016a21064100210520002107410021080240034020072109200741016a210a02400240024020072c0000220b417f4a0d0002400240200a2006470d004100210c200621070c010b20072d0001413f71210c200741026a220a21070b200b411f7121040240200b41ff0171220b41df014b0d00200c200441067472210c0c020b0240024020072006470d004100210d2006210e0c010b20072d0000413f71210d200741016a220a210e0b200d200c41067472210c0240200b41f0014f0d00200c2004410c7472210c0c020b02400240200e2006470d004100210b200a21070c010b200e41016a2107200e2d0000413f71210b0b200c4106742004411274418080f0007172200b72220c418080c400470d020c040b200b41ff0171210c0b200a21070b4102210a024002400240024002400240200c41776a220b411e4d0d00200c41dc00470d010c020b41f400210e02400240200b0e1f05010202000202020202020202020202020202020202020202030202020203050b41f200210e0c040b41ee00210e0c030b0240200c104a0d0002400240200c41808004490d00200c41808008490d01200c4190fc476a4190fc0b490d02200c41b5d9736a41b5db2b490d02200c41e28b746a41e20b490d02200c419fa8746a419f18490d02200c41dee2746a410e490d02200c41feffff0071419ef00a460d02200c41a2b2756a4122490d02200c41cb91756a410a4d0d020c060b200c41c089c000412941928ac00041a20241b48cc00041b502104b450d010c050b200c41e98ec000412641b58fc00041af0141e490c00041a303104b0d040b200c41017267410276410773ad4280808080d00084210f4103210a0c010b0b200c210e0b2003200136020420032000360200200320053602082003200836020c0240024020082005490d0002402005450d0020052001460d00200520014f0d01200020056a2c000041bf7f4c0d010b02402008450d0020082001460d00200820014f0d01200020086a2c000041bf7f4c0d010b2002280218200020056a200820056b200228021c28020c110000450d01410121040c060b20032003410c6a3602182003200341086a36021420032003360210200341106a105d000b0340200a210b4101210441dc0021054101210a024002400240024002400240200b0e0402010500020b0240024002400240200f422088a741ff01710e06050302010006050b200f42ffffffff8f608342808080803084210f4103210a41f50021050c070b200f42ffffffff8f608342808080802084210f4103210a41fb0021050c060b200e200fa7220b410274411c7176410f71220a413072200a41d7006a200a410a491b21050240200b450d00200f427f7c42ffffffff0f83200f4280808080708384210f0c050b200f42ffffffff8f608342808080801084210f0c040b200f42ffffffff8f6083210f4103210a41fd0021050c040b4100210a200e21050c030b4101210a0240200c418001490d004102210a200c418010490d0041034104200c41808004491b210a0b200a20086a21050c040b200f42ffffffff8f60834280808080c00084210f0b4103210a0b20022802182005200228021c280210110100450d000c050b0b200820096b20076a210820062007470d000b0b2005450d0020052001460d00200520014f0d02200020056a2c000041bf7f4c0d020b410121042002280218200020056a200120056b200228021c28020c1100000d0020022802184122200228021c28021011010021040b200341206a240020040f0b200020012005200141a087c0001046000b2b01017f20002802002201280200200128020420002802042802002000280208280200419c9ec0001046000b900101037f23004180016b2202240020002802002103410021000340200220006a41ff006a2003410f712204413072200441376a2004410a491b3a00002000417f6a2100200341047622030d000b024020004180016a2203418101490d002003418001419889c0001044000b200141a889c0004102200220006a4180016a410020006b1041210020024180016a240020000b1c00200128021841fea9c00041052001411c6a28020028020c1100000bb30101037f200028020421020240024020002802004101470d002000410c6a28020022002001106120004103742200450d01200220006a2103034020022802002100200241046a2802002204200110612001200020041062200241086a22022003470d000c020b0b200041086a28020022002001106120004103742200450d00200220006a2103034020022802002100200241046a2802002204200110612001200020041062200241086a22022003470d000b0b0bab0101017f230041106b220224000240024002400240200041c000490d00200041808001490d012000418080808004490d02200241033a00032001200241036a41011062200220003602042001200241046a410410620c030b200220004102743a00032001200241036a410110620c020b200220004102744101723b010a20012002410a6a410210620c010b2002200041027441027236020c20012002410c6a410410620b200241106a24000bcd0101047f0240024002400240200041046a2802002203200041086a28020022046b2002490d00200028020021050c010b200420026a22052004490d01200341017422062005200620054b1b22064100480d010240024020030d00024020060d00410121050c020b2006102122050d010c040b2000280200210520032006460d0020052003200610252205450d03200041086a28020021040b20002005360200200041046a20063602000b200520046a2001200210a1051a200041086a200420026a3602000f0b102c000b102a000bff0101037f200028020421020240024020002802004101470d002000410c6a2802002200200110612000450d01200041186c2103200241146a21000340200041706a2802002102200041746a28020022042001106120012002200410622000417c6a280200210220002802002204200110612001200220041062200041186a2100200341686a22030d000c020b0b200041086a2802002200200110612000450d00200041186c2103200241146a21000340200041706a2802002102200041746a28020022042001106120012002200410622000417c6a280200210220002802002204200110612001200220041062200041186a2100200341686a22030d000b0b0ba90701057f230041206b2203240020012002106102402001450d00200141d8006c2104410021050340200020056a220141046a2802002106200141086a28020022072002106120022006200710622003200141d4006a2d00003a000d20022003410d6a4101106202402001410c6a2d0000220641024b0d0002400240024020060e03000102000b200341003a000e20022003410e6a41011062200141146a2802002106200141186a28020022072002106120022006200710620c020b200341013a000e20022003410e6a4101106202402001410d6a2d0000220641064b0d000240024002400240024002400240024020060e0700010203040506000b200341003a000f0c060b200341013a000f0c050b200341023a000f0c040b200341033a000f0c030b200341043a000f0c020b200341053a000f0c010b200341063a000f0b20022003410f6a410110620b200141146a2802002106200141186a2802002207200210612002200620071062200141206a2802002106200141246a280200220720021061200220062007106220032001410e6a2d00003a000e20022003410e6a410110620c010b200341023a000e20022003410e6a4101106202402001410d6a2d0000220641064b0d000240024002400240024002400240024020060e0700010203040506000b200341003a000f0c060b200341013a000f0c050b200341023a000f0c040b200341033a000f0c030b200341043a000f0c020b200341053a000f0c010b200341063a000f0b20022003410f6a410110620b200141146a2802002106200141186a2802002207200210612002200620071062200141206a2802002106200141246a28020022072002106120022006200710622001412c6a2802002106200141306a28020022072002106120022006200710622001410e6a2d0000220641064b0d000240024002400240024002400240024020060e0700010203040506000b200341003a000f0c060b200341013a000f0c050b200341023a000f0c040b200341033a000f0c030b200341043a000f0c020b200341053a000f0c010b200341063a000f0b20022003410f6a410110620b02400240200141346a2802004101470d00200141386a2802002106200141c0006a28020022072002106120022006200710620c010b200341106a200141386a2802002001413c6a28020028020c11020020032802102106200328021822072002106120022006200710622003280214450d00200610230b200141c4006a200210602004200541d8006a2205470d000b0b200341206a24000be405010b7f2001410c6a28020021022001280208210320012802042104200128020021050240024002400240024002400240024020012d001022060e03010002010b200420056b21070c020b200420056b2201200220036b6a220720014f0d010240024020052004460d00200541016a2108410021060c010b024020032002470d004101210941002104410021070c060b410221062003210120052108200341016a2103200121050b41002101410021074101210903402001410174210a200420086b210b034020052d00002105024020012007470d00200b2107024002400240200641ff01710e03010200010b200220036b21070c010b417f200b200220036b6a22072007200b491b21070b2001417f200741016a220c200c2007491b6a22072001490d05200a2007200a20074b1b22074100480d05024020010d00024020070d00410121090c020b2007102122090d010c090b20012007460d0020092001200710252209450d080b200920016a20053a0000024002400240024002400240200641ff01710e03010300010b20022003460d010c040b024020082004460d00410021060c030b20022003470d030b200141016a21040c090b4101210620082004470d00200141016a21040c080b200141016a210120082105200841016a21080c020b200141016a210141022106200a41026a210a2003220541016a21030c000b0b0b200220036b21070b4101210902402007450d0020074100480d01200710212209450d040b0240200641014d0d0041002104200921010c020b0240024020052004470d0041002104200921010c010b200921012005210a03402001200a2d00003a0000200141016a21012004200a41016a220a470d000b200420056b21040b200641024b0d0220060e03010201010b102c000b20032002460d002003210a03402001200a2d00003a0000200141016a21012002200a41016a220a470d000b2002200420036b6a21040b2000200436020820002007360204200020093602000f0b102a000bd40101037f02400240024002402000280200220041046a2802002203200041086a28020022046b2002490d00200028020021050c010b200420026a22052004490d01200341017422042005200420054b1b22044100480d010240024020030d00024020040d00410121050c020b2004102122050d010c040b2000280200210520032004460d0020052003200410252205450d030b20002005360200200041046a2004360200200041086a28020021040b200520046a2001200210a1051a200041086a200420026a36020041000f0b102c000b102a000bbf0301047f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b0240024002400240200041046a2802002203200041086a28020022046b2001490d00200028020021050c010b200420016a22052004490d01200341017422042005200420054b1b22044100480d010240024020030d00024020040d00410121050c020b2004102122050d010c040b2000280200210520032004460d0020052003200410252205450d030b20002005360200200041046a2004360200200041086a28020021040b200520046a2002410c6a200110a1051a200041086a200420016a360200200241106a240041000f0b102c000b102a000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41cc9fc000200241086a10312101200241206a240020010bcd0101037f0240024002400240200041046a2802002203200041086a28020022046b2002490d00200028020021050c010b200420026a22052004490d01200341017422042005200420054b1b22044100480d010240024020030d00024020040d00410121050c020b2004102122050d010c040b2000280200210520032004460d0020052003200410252205450d030b20002005360200200041046a2004360200200041086a28020021040b200520046a2001200210a1051a200041086a200420026a3602000f0b102c000b102a000b040041010bb60101017f230041c0006b2202240020024100360210200242013703082002410836021c20022001410c6a3602202002200241206a3602182002200241086a3602242002413c6a41013602002002420137022c200241ccb3c0003602282002200241186a360238200241246a41cc9fc000200241286a10311a20012d0000417f6a41ff0171200141046a290200200235021042208620023502088410000240200228020c450d00200228020810230b200241c0006a24000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a10312101200241206a240020010b040041000b02000b02000bcd0201047f230041106b2202240002400240024002400240024002400240024020012d00000e06010203040500010b200241003a000a20024181ca003b01082002200141216a3602042002200141016a3602000c050b410110272201450d062000428180808010370204200020013602000c050b2001410c6a2802002203412020034120491b220441016a220310212205450d0520052003200310a005220541016a200141046a280200200410a1051a2000200336020820002003360204200020053602000c040b200241003a000a20024181c4003b01082002200141216a3602042002200141016a3602000c020b200241003a000a20024181c6003b01082002200141216a3602042002200141016a3602000c010b200241003a000a20024181c8003b01082002200141216a3602042002200141016a3602000b2000200210710b200241106a24000f0b1033000be105010a7f200141096a2d0000210220012d000821032001280204210420012802002105024002400240024002400240024002400240024020012d000a22060e03010002010b200341ff017141014621070c020b200341ff01714101462201200420056b6a220720014f0d01410021084100210141002107410121090240410041ff01710e03030400030b410021060c040b200420056b21070b0240024020070d00410121090c010b20074100480d04200710212209450d060b4100210102400240200341ff01710d00200921080c010b20092108200641014b0d00200920023a0000200941016a2108410121010b200641024b0d04024020060e03000500000b20052004460d04200120056b21010340200820052d00003a0000200841016a21082004200541016a2205470d000b200420016a21010c040b410121060c010b410221060b0340024002400240024020060e03000102020b20052004460d0520052d0000210a41022106200541016a21052002210b200a21020c020b200341017121064100210302402006450d00410021064100210b0c020b20052004460d0420052d0000210241022106200541016a21054100210b0c010b410121062003410171210a410021034100210b200a450d030b024020012007470d00024002400240024020060e03010200010b200420056b21070c020b417f200341ff01714101462207200420056b6a220a200a2007491b21070c010b200341ff017141014621070b2001417f200741016a220a200a2007491b6a22072001490d0220082007200820074b1b22074100480d02024020010d00024020070d00410121090c020b2007102122090d010c050b20012007460d0020092001200710252209450d040b200920016a20023a0000200841026a2108200141016a2101200b2102024002400240200641ff01710e03000102000b410121060c020b410221060c010b410021060c000b0b102c000b2000200136020820002007360204200020093602000f0b102a000ba00201067f410021020240200141016a2203200028020422044d0d000240200041146a22052802002201200041106a280200470d000240024002400240200141016a22022001490d00200141017422062002200620024b1b220241ffffffff03712002470d00200241027422024100480d00024020010d0020020d02410421060c040b200028020c2106200141027422072002460d03024020070d0020020d02410421060c040b20062007200210252206450d020c030b102c000b2002102122060d010b102a000b2000200636020c200041106a20024102763602000b200028020c220241046a2002200141027410a2051a2002200320046b36020020002003360204410121022005200141016a3602002000200028020041016a3602000b20020b8c0201067f02400240024020012802002202450d00200128020421030340200241086a210420022f010622054103742101410021060240024003402001450d0141b2a8c0002004410810a3052207450d02200141786a2101200641016a2106200441086a21042007417f4a0d000b2006417f6a21050b2003450d022003417f6a2103200220054102746a41e4016a28020021020c010b0b200241e0006a2006410c6c6a22012802084108490d01200041086a2001280200290000370300200041003602000f0b200041003602042000410c6a4128360200200041086a41baa8c0003602000c010b200041003602042000410c6a4129360200200041086a41e2a8c0003602000b200041013602000bed0301057f024002400240200241046a2203417f4c0d0002400240024002400240024002400240024002402003450d00200310212204450d0b200241c000490d04200241808001490d052002418080808004490d06200441033a00002003417f6a41034d0d01200321050c030b41012103410110212204450d07200441033a0000410521050c010b200341017422064105200641054b1b22054100480d0720032005460d010b20042003200510252204450d050b20042002360001410521060c030b200420024102743a000041012106200321050c020b02400240200341014d0d00200321050c010b2003200341017422064102200641024b1b2205460d0020042003200510252204450d030b41022106200420024102744101723b00000c010b02400240200341034d0d00200321050c010b200341017422064104200641044b1b22054100480d0320032005460d0020042003200510252204450d020b20042002410274410272360000410421060b0240200520066b2002490d00200521030c050b200620026a22032006490d01200541017422072003200720034b1b22034100480d0120052003460d04200420052003102522040d040b102a000b102c000b1032000b1033000b200420066a2001200210a1051a2000200620026a36020820002003360204200020043602000bd60201027f024002402002450d002002417f6a21040240024020012d0000220241037122054103460d0002400240024020050e03000102000b200241027621020c030b2004450d0320012d0001410874200272220241ffff0371418002490d03200241fcff037141027621020c020b20044103490d0220012f0001200141036a2d000041107472410874200272220241808004490d02200241027621020c010b200241034b0d0120044104490d0120012800012202418080808004490d010b200220036a22012002490d0141012103410121050240200241c000490d0041022105200241808001490d00410441052002418080808004491b21050b0240200141c000490d0041022103200141808001490d00410441052001418080808004491b21030b20002001360204200041003602002000410c6a2003360200200041086a20053602000f0b200041013602000f0b200041013602000be60601067f0240024002400240024020012d0000220341024d0d0041012101410021040c010b02400240024020030e03000102000b410110212205450d03200541013a0000412010212203450d0420032001290001370000200341186a2206200141196a290000370000200341106a2207200141116a290000370000200341086a2208200141096a2900003700004121210420054101412110252201450d0320012003290000370001200141196a2006290000370000200141116a2007290000370000200141096a2008290000370000200310230c020b410110212205450d02200541023a0000412010212203450d0320032001290001370000200341186a2206200141196a290000370000200341106a2207200141116a290000370000200341086a2208200141096a2900003700004121210420054101412110252201450d0220012003290000370001200141196a2006290000370000200141116a2007290000370000200141096a2008290000370000200310230c010b410110212205450d01200541033a0000412010212203450d0220032001290001370000200341186a2206200141196a290000370000200341106a2207200141116a290000370000200341086a2208200141096a2900003700004121210420054101412110252201450d0120012003290000370001200141196a2006290000370000200141116a2007290000370000200141096a2008290000370000200310230b20022802002103410410212205450d0020052003360000412010212203450d0120032002290004370000200341186a22062002411c6a290000370000200341106a2207200241146a290000370000200341086a22082002410c6a29000037000020054104412410252202450d00200220032900003700042002411c6a2006290000370000200241146a20072900003700002002410c6a20082900003700002003102320044101742203200441246a2206200320064b1b2105024020040d00200510212201450d010c030b20042005460d02200120042005102522010d020b102a000b1033000b200120046a22032002290000370000200341206a200241206a280000360000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200210232000200636020820002005360204200020013602000b5f01017f02404120102122020d001033000b200042a080808080043702042000200236020020022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700000b8803010a7f230041206b220124000240024002400240200041086a2802002202450d00410020024102746b2103417f210420002802002205210603402003450d01200441016a2104200341046a210320062802002107200641046a21062007450d000b4100200741004741016a41017122066b2004460d002002200620046a2208490d012002200741004741016a4101716b20046b220641ffffffff03712006470d0220064102742209417f4c0d024104210a02402009450d0020091021220a450d040b200141003602182001200a36021020012009410276360214200141106a4100200610792001280210200128021822064102746a200520084102746a4104200741004741016a410171220741027420036a6b10a1051a200141086a22032002200620076b6a20046b360200200120012903103703000240200041046a28020041ffffffff0371450d00200028020010230b20002001290300370200200041086a20032802003602000b200141206a24000f0b2008200241fcadc0001044000b1032000b1033000bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff03712001470d00200141027422014100480d00024020030d0020010d02410421020c040b20002802002102200341027422032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014102763602000b0bb90403077f017e097f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742208417f4c0d00200810272209450d01024020050d004200210a0c040b2004417f6a220b20044b210c2002280200210d2003417f6a220e20034b0d022001280200210f2007417f6a2102200820096a417c6a2110410021064200210a03404100211102402003200e20066b22124d0d00410021112012200e4b0d00200f20124102746a28020021110b410021120240200c0d002004200b20066b22134d0d002013200b4b0d00200d20134102746a28020021120b200720024d0d052010200a2011ad7c2012ad7c220a3e02002010417c6a21102002417f6a2102200a422088210a200641016a22062005490d000c040b0b1032000b1033000b2007417f6a2102200820096a417c6a2111410021104200210a0340410021060240200c0d00410021062004200b20106b22124d0d00410021062012200b4b0d00200d20124102746a28020021060b200720024d0d022011200a2006ad7c220a3e02002011417c6a21112002417f6a2102200a422088210a201041016a22102005490d000b0b024020072005417f736a220220074f0d00200020073602082000200841027636020420002009360200200920024102746a200a3e02000240200141046a28020041ffffffff0371450d00200128020010230b0f0b2002200741ecadc0001030000b2002200741ecadc0001030000bb404030e7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742207417f4c0d000240200710272208450d002004450d022001280200210902400240024020030d002006417f6a2105200720086a417c6a210a20092004417f6a22024102746a21030340200420024d0d0302402003280200450d00200620054d0d03200a41003602000b2003417c6a2103200a417c6a210a2005417f6a21052002417f6a2202417f470d000c060b0b200720086a417c6a210b200341027420022802006a417c6a210c4100210d2006210e03402004200d417f736a220220044f0d020240200920024102746a220f2802002210450d0042002111417f2102200b2105200c210a024003402006200e20026a22124d0d012005200a3502002010ad7e20117c20053502007c22113e0200201142208821110240200320026a0d002006200d20036a417f736a220520064f0d05200820054102746a20113e02000c030b2005417c6a2105200a417c6a210a200f280200211020032002417f6a22026a22122003490d000b2012200341dcadc0001030000b2012200641dcadc0001030000b200b417c6a210b200e417f6a210e200d41016a220d2004460d050c000b0b2005200641ecadc0001030000b2002200441dcadc0001030000b1033000b1032000b2000200636020820002007410276360204200020083602000240200141046a28020041ffffffff0371450d00200128020010230b0bca0302097f017e230041106b2201240002400240024002400240024002402000280200220228020041016a41004c0d002000280204220328020041016a41004c0d012000280208220441086a28020022054101200028020c22062802006b22076a220820054f0d02200720002802142802006b22052000280210220741086a28020022006a220920054f0d03024002402002290308220a42ffffffff0f560d0041002100200a200428020020084102746a3502007e2003290308422086200728020020094102746a35020084580d010b20022802000d052002410036020020022002290308427f7c370308200441086a2802002200200020062802006b22024d0d0620032802000d07200428020020024102746a350200210a200341003602002003200a20032903087c370308410121000b200141106a240020000f0b41a795c7004118200141086a41dcaec00041c095c7001034000b41a795c7004118200141086a41dcaec00041c095c7001034000b2008200541dcadc0001030000b2009200041dcadc0001030000b41c394c7004110200141086a41ecaec00041d494c7001034000b2002200041dcadc0001030000b41c394c7004110200141086a41ecaec00041d494c7001034000ba80301087f200028020822024102742103410021042000280200220521000240024003402003450d012004417f6a21042003417c6a210320002802002106200041046a21002006450d000b410121072004417f73200641004741016a4101716a21080c010b41002107410020046b21080b200128020822094102742103410021042001280200220121000240024003402003450d012004417f6a21042003417c6a210320002802002106200041046a21002006450d000b410021032004417f73200641004741016a4101716a21000c010b410020046b2100410121030b024020070d00410020034101736b0f0b4101210402400240024020030d0020022008490d0120092000490d02417f200220086b2203200920006b22064720032006491b22040d0020062003200320064b1b2107200120004102746a2103200520084102746a2100417f210103400240200141016a22012007490d0041000f0b2003280200210420002802002106200341046a2103200041046a2100417f200620044720062004491b2204450d000b0b20040f0b20082002418caec0001044000b20002009419caec0001044000b1000200028020020002802042001105c0bcb04010a7f230041106b220224002002410036020820024204370300200128000c2103410021040240024002400240024002400240024020012802042205200128020022064920012d00084100477222010d004100200520066b2204200420054b1b220741016a220420074f0d00200341086a21084100210441042109410021010340200828020022072005417f736a220a20074f0d02200620054f2107200520062005496b21052003280200200a4102746a280200210a024020012002280204470d0020022001417f41004100417f4100200520066b2209200920054b1b220941016a220b200b2009491b20071b20052006491b220941016a220b200b2009491b1079200228020021090b200920046a200a3602002002200141016a2201360208200441046a21042005200649200772450d000c070b0b20024100200410792002280208210b20010d042002280200200b4102746a2104200520064d0d012005417f732101200341086a21092005210703402001200928020022086a220a20014f0d0320042003280200200a4102746a280200360200200141016a2101200441046a210420062007417f6a2207490d000b200520066b200b6a210b0c030b200a200741dcadc0001030000b20052006460d010c020b200a200841dcadc0001030000b200341086a28020022052006417f736a220620054f0d022004200328020020064102746a280200360200200b41016a210b0b2002200b3602080b20002002290300370200200041086a200241086a280200360200200241106a24000f0b2006200541dcadc0001030000bfc0601047f230041d0006b2208240002400240024002402002200685200320078584500d00200220038450450d01410121090c020b417f20002004852001200585844200522000200454200120055420012005511b1b21090c010b0240200620078450450d0041ff0121090c010b411010212209450d012008420437024420082009360240200841c0006a410041041079200841306a41086a22092008280248220a41046a3602002008280240200a4102746a220a20003e020c200a20004220883e0208200a20013e0204200a20014220883e020020082008290340370330200841306a1078200841106a41086a220b20092802003602002008200829033037031041101021220a450d01200842043702442008200a360240200841c0006a41004104107920092008280248220a41046a3602002008280240200a4102746a220a20063e020c200a20064220883e0208200a20073e0204200a20074220883e020020082008290340370330200841306a1078200841206a41086a200928020036020020082008290330370320200841c0006a41086a200b280200360200200820082903103703402008200841c0006a200841206a107b0240200828022441ffffffff0371450d00200828022010230b411010212209450d012008420437024420082009360240200841c0006a410041041079200841306a41086a22092008280248220a41046a3602002008280240200a4102746a220a20043e020c200a20044220883e0208200a20053e0204200a20054220883e020020082008290340370330200841306a1078200841106a41086a220b20092802003602002008200829033037031041101021220a450d01200842043702442008200a360240200841c0006a41004104107920092008280248220a41046a3602002008280240200a4102746a220a20023e020c200a20024220883e0208200a20033e0204200a20034220883e020020082008290340370330200841306a1078200841206a41086a200928020036020020082008290330370320200841c0006a41086a200b28020036020020082008290310370340200841306a200841c0006a200841206a107b0240200828022441ffffffff0371450d00200828022010230b2008200841306a107d21090240200828023441ffffffff0371450d00200828023010230b200828020441ffffffff0371450d00200828020010230b200841d0006a240020090f0b1033000bb00703017f067e017f230041d0006b22022400024002400240200029031022032001290310220485200041186a2903002205200141186a29030022068584500d00200041086a290300210720002903002108411010212200450d022002420437024420022000360240200241c0006a410041041079200241306a41086a22092002280248220041046a360200200228024020004102746a220020083e020c200020084220883e0208200020073e0204200020074220883e020020022002290340370330200241306a1078200241106a41086a200928020036020020022002290330370310411010212200450d022002420437024420022000360240200241c0006a410041041079200241306a41086a22092002280248220041046a360200200228024020004102746a220020043e020c200020044220883e0208200020063e0204200020064220883e020020022002290340370330200241306a1078200241206a41086a200928020036020020022002290330370320200241c0006a41086a200241106a41086a280200360200200220022903103703402002200241c0006a200241206a107b0240200228022441ffffffff0371450d00200228022010230b200141086a290300210420012903002106411010212200450d022002420437024420022000360240200241c0006a410041041079200241306a41086a22002002280248220141046a360200200228024020014102746a220120063e020c200120064220883e0208200120043e0204200120044220883e020020022002290340370330200241306a1078200241106a41086a2209200028020036020020022002290330370310411010212201450d022002420437024420022001360240200241c0006a41004104107920002002280248220141046a360200200228024020014102746a220120033e020c200120034220883e0208200120053e0204200120054220883e020020022002290340370330200241306a1078200241206a41086a200028020036020020022002290330370320200241c0006a41086a200928020036020020022002290310370340200241306a200241c0006a200241206a107b0240200228022441ffffffff0371450d00200228022010230b2002200241306a107d21000240200228023441ffffffff0371450d00200228023010230b200041ff017121000240200228020441ffffffff0371450d00200228020010230b20004521000c010b2000290300200129030085200041086a290300200141086a29030085845021000b200241d0006a240020000f0b1033000bd33007017f017e017f027e017f027e1c7f23004180036b2207240002400240024002402001200284500d002003200484500d004201210820074198016a200320012003200156200420025620042002511b22091b220a2004200220091b220b20054201200542015620064200522006501b220c1b220520064200200c1b220610a70520074188016a200729039801220d20074198016a41086a290300220e2005200610a6052002200420091b21022001200320091b2104200a20072903880185200b20074188016a41086a290300858450450d01200d210a200e210b420021060c020b20004100360200200041106a4200370300200041086a42003703000c020b200741f8006a200420022005200610a705200741e8006a20072903782201200741f8006a41086a29030022032005200610a6054200200620042007290368852002200741e8006a41086a29030085845022091b21064201200520091b21082003200220091b21022001200420091b21040b200741386a200b42002004420010a605200741c8006a20024200200a420010a605200741d8006a200a42002004420010a6050240024002400240024002400240024002400240024002400240024002400240200b420052200242005271200729034042005272200729035042005272200741d8006a41086a2903002201200729033820072903487c7c2203200154724101470d00411010212209450d0d2007420437029c02200720093602980220074198026a410041041079200741f0026a41086a220920072802a002220c41046a360200200728029802200c4102746a220c200a3e020c200c200a4220883e0208200c200b3e0204200c200b4220883e020020072007290398023703f002200741f0026a1078200741a8016a41086a2009280200360200200720072903f0023703a80141101021220c450d0d2007420437029c022007200c3602980220074198026a410041041079200920072802a002220c41046a360200200728029802200c4102746a220c20043e020c200c20044220883e0208200c20023e0204200c20024220883e020020072007290398023703f002200741f0026a1078200741b8016a41086a2009280200360200200720072903f0023703b801411010212209450d0d2007420437029c02200720093602980220074198026a410041041079200741f0026a41086a220c20072802a002220941046a36020020072802980220094102746a22092008a7220f36020c200920084220883e0208200920063e0204200920064220883e020020072007290398023703f002200741f0026a1078200c280200211020072802f402211120072802f0022112200c200741b8016a41086a280200360200200720072903b8013703f00220074198026a41086a200741a8016a41086a280200360200200720072903a80137039802200741c8016a20074198026a200741f0026a107b024020072802f40241ffffffff0371450d0020072802f00210230b200741c8016a107820104101460d0120072802cc01211320072802c80121142010450d0a2012280200450d0a024020072802d0012215450d002014280200450d0b201520104d0d0b200720103602d401201520106b221641016a22174101201741014b1b221841ffffffff03712018470d0320184102742219417f4c0d0320191027221a450d0e201041ffffffff03712010470d032010410274221b417f4c0d03201b1027221c450d0e4101210f410221092012280200220c67221d211e0240200c41ffffffff034b0d0041022109201d210c4101210f034020094101200c4101711b200f6c210f200c41034b211f200920096c2109200c410176221e210c201f0d000b0b200720153602f802200720133602f402200720143602f0024104211f41041021220c450d0f200c20094101201e4101461b200f6c220f360200200742818080801037029c022007200c36029802200741d8016a200741f0026a20074198026a107b200c10230240201b450d00201b1021221f450d0f0b200741003602a0022007201b410276222036029c022007201f3602980220074198026a41002010107920072802980220072802a00222094102746a2012201041027410a1051a200741f8026a200920106a36020020072007290398023703f002410410212209450d0f2009200f360200200742818080801037029c022007200936029802200741e8016a200741f0026a20074198026a107b20091023024020072802d40120176a220920072802e001220c4d0d00200741003602a002200742043703980220074198026a41002009200c6b220c107920072802a00221090240200c450d0020072802980220094102746a4100200c41027410a0051a2009200c6a21090b200741f0026a41086a220c200936020020072007290398023703f00220072802d801211f200741f0026a200920072802e001220f107920072802f002200c28020022094102746a201f200f41027410a1051a200c2009200f6a220936020020074198026a41086a220c2009360200200720072903f00237039802024020072802dc0141ffffffff0371450d0020072802d80110230b200741d8016a41086a200c28020036020020072007290398023703d8010b20194102762121200741e8016a1078024002400240024002400240024002400240024003402007201622223602f401024020072802e001220920072802d401220c20226a220f417f736a221f2009490d00201f200941dcadc0001030000b0240024002400240024002400240024002400240024002400240024020092009200f6b220f4d0d0020072802f00122092009200c6b220c4d0d0120072802e801200c4102746a35020022024200510d02202220224100476b211620072802d8012209201f4102746a35020021012009200f4102746a3502002104200741003602f80120072004200142208684200280220137038002200741003602880220072004200120027e7d42ffffffff0f83370390022007200741f4016a3602ac022007200741d8016a3602a8022007200741d4016a3602a4022007200741e8016a3602a002200720074188026a36029c022007200741f8016a3602980220074198026a107c1a034020072802880241016a41004c0d04024020072903900242ffffffff0f560d0020074198026a107c0d010b0b200729038002210220072802f401210920072802d401210c200741003a00f8022007200c20096a3602f402200720093602f0022007200741d8016a3602fc02200741b0026a200741f0026a107f20072802f001220941ffffffff03712009470d1c2009410274220c417f4c0d1c20072802e801210f02400240200c0d004104211f0c010b200c1021221f450d280b200741003602f8022007201f3602f0022007200c4102763602f402200741f0026a41002009107920072802f00220072802f802221f4102746a200f200c10a1051a200741e0026a41086a2223201f20096a360200200720072903f0023703e002410810212209450d2820092002a72224360204200920024220883e020020074282808080203702f402200720093602f002200741c0026a200741e0026a200741f0026a107b2009102320072802b802221920072802c8022225201920254b1b22144101201441014b1b220c41ffffffff0371200c470d1c200c4102742226417f4c0d1c20072802b402212720072802b00221280240024020260d00410421290c010b202610272229450d280b2014450d062025417f6a221b20254b211520072802c002212a2019417f6a221720194b0d04200c417f6a2109202920266a417c6a211e4100210f4200210203404100211f024020192017200f6b22134d0d004100211f201320174b0d00202820134102746a280200211f0b201fad21044100211f024020150d002025201b200f6b22134d0d002013201b4b0d00202a20134102746a280200211f0b024002402004201fad22037d22012004560d00200120027d220a2001560d00200a42ffffffff0f832104420021020c010b20044280808080108420027d20037d2104420121020b200c20094d0d09201e20043e0200201e417c6a211e2009417f6a2109200f41016a220f2014490d000c060b0b200f200941dcadc0001030000b200c200941dcadc0001030000b41c0adc000411941bcacc000102d000b41a795c7004118200741f0026a41dcaec00041c095c7001034000b200c417f6a2109202920266a417c6a211f4100211e4200210203404100210f024020150d004100210f2025201b201e6b22134d0d004100210f2013201b4b0d00202a20134102746a280200210f0b024002404200200fad22017d22044200520d00200420027d22032004560d00200342ffffffff0f832104420021020c010b428080808010200220017c7d2104420121020b200c20094d0d04201f20043e0200201f417c6a211f2009417f6a2109201e41016a221e2014490d000b0b41012113200250450d010b410021130b0240202741ffffffff0371450d00202810230b20072802d401221f20072802f401220f6a2215201f490d05200f20154f0d01200f417f7321090340200c200c200f6a20096a221e4d0d03200920072802e00122146a220f20094f0d0420072802d801200f4102746a2029201e4102746a2802003602002009417f6a210920072802f401210f201f417f6a221f0d000c050b0b2009200c41ecadc0001030000b201f450d020c030b20252019202520194b1b22074101200741014b1b200f6a20096a200c41dcadc0001030000b200f201441ecadc0001030000b200c200c2015417f7322096a200f6a220f4d0d0220072802e001220c20096a2209200c4f0d0320072802d80120094102746a2029200f4102746a28020036020020072802f401210f0b2018200f417f736a220920184f0d03201a20094102746a202436020002402013450d00201820072802f401417f736a220920184f0d05201a20094102746a22092009280200417f6a36020020072802f401210920072802d401210c200741003a00f8022007200c20096a3602f402200720093602f0022007200741d8016a3602fc02200741d0026a200741f0026a107f20072802f001220941ffffffff03712009470d0f2009410274220c417f4c0d0f20072802e801210f02400240200c0d004104211f0c010b200c1021221f450d1b0b200741003602f8022007201f3602f0022007200c4102763602f402200741f0026a41002009107920072802f00220072802f802221f4102746a200f200c10a1051a2023201f20096a360200200720072903f0023703e002200741f0026a200741e0026a200741d0026a107a024020072802d401220920072802f40122146a220c2009490d00024002402014200c4f0d00200c417f73210920072802f002211320072802f802210f2014211f0340200f200f201f6a20096a221f4d0d0a200920072802e00122156a221e20094f0d0b20072802d801201e4102746a2013201f4102746a280200360200200941016a210920072802f401211f2014200c417f6a220c490d000c020b0b20090d0120072802f802210f2014211f0b201f2014417f7322096a220c200f6a221f200c4f0d0920072802e001220c20096a2209200c4f0d0a20072802d80120094102746a20072802f002201f4102746a2802003602000b024020072802f40241ffffffff0371450d0020072802f00210230b20072802d40241ffffffff0371450d0020072802d00210230b02402026450d00202910230b024020072802c40241ffffffff0371450d0020072802c00210230b20220d000b0240201d0d0020072802e001211020072802dc01212020072802d801210f201c1023410021090c130b4101210920072802d401220c4101460d114100200c6b2114201d411f7121134100201d6b411f7121152010410274201c6a417c6a210c417f210903400240200920072802e001221f6a220f2009490d00200f201f41dcadc0001030000b201f200f417f6a221e4d0d09201020096a221f20104f0d0a200c20072802d801221f201e4102746a280200201574201f200f4102746a28020020137672360200200c417c6a210c20142009417f6a2209460d110c000b0b200f200c41dcadc0001030000b2009200c41ecadc0001030000b2009201841ecadc0001030000b2009201841dcadc0001030000b201f200f41dcadc0001030000b201e201541ecadc0001030000b201f200f41dcadc0001030000b2009200c41ecadc0001030000b200f417f6a201f41dcadc0001030000b201f201041ecadc0001030000b4100410041ccaec0001030000b200741286a200729035820032008200610a70520004100360200200041106a200741286a41086a290300370300200041086a20072903283703000c0f0b20074198026a41086a200741c8016a41086a280200221f360200200720072903c80137039802201f4101201f41014b1b221e41ffffffff0371201e470d00201e410274221b417f4c0d0002400240201b0d00410421170c010b201b10272217450d0c0b201f450d022017201e410274201f4102746b6a210c201f417f6a2114201e201f6b2113200f4101200f41014b1bad21024200210441002109200728029802210f0340201e201320096a22154d0d02200c2004422086200f35020084220420028022013e020020142009460d03200c41046a210c200f41046a210f2004200120027e7d2104201f200941016a22094b0d000b2009201f41dcadc0001030000b1032000b2015201e41ecadc0001030000b2007201e3602f8022007201b4102763602f402200720173602f002200728029c0241ffffffff0371450d0720072802980210230c070b20072802d40121090b20072802e001220c200c20096b220f4d0d012010201020096b22094d0d02201c20094102746a20072802d801200f4102746a280200201d411f717636020041012109201c210f0b024020072802ec0141ffffffff0371450d0020072802e80110230b2009450d0320072802dc0141ffffffff0371450d0320072802d80110230c030b200f200c41dcadc0001030000b2009201041ecadc0001030000b4100211a0240201341ffffffff0371450d00201410230b0b410410212209450d022009410036020041041021220c450d02200c41003602004101211e02400240201a0d002009211a4101212141012118200c210f41012120410121100c010b20091023200c10230b2007201836028002200720213602fc012007201a3602f801200720103602a0022007202036029c022007200f3602980220074198026a1078420021020240024020072802a00222094105744180014d0d00421d21040c010b4100211e024020090d00420021040c010b200728029802220c200941027422096a417c6a220f280200211f0240200c200f470d00201fad21040c010b200c41786a210f201fad2104200741206a211f4120210c420021020340200741186a200f20096a3502004200200c41e0007110a405201f29030020027c2007290318220220047c2204200254ad7c2102200c41206a210c2009417c6a22094104470d000b0b0240200728029c0241ffffffff0371450d0020072802980210230b201e0d030240200420084201882006423f8684562002200642018822045620022004511b450d0020074188026a41086a200741f8016a41086a280200360200200720072903f80137038802411010212209450d022007420437029c02200720093602980220074198026a410041041079200741f0026a41086a220920072802a002220c41046a360200200728029802200c4102746a220c428080808010370208200c420037020020072007290398023703f002200741f0026a107820074198026a41086a2009280200360200200720072903f00237039802200741f8016a20074188026a20074198026a107a200728029c0241ffffffff0371450d0020072802980210230b200741f0026a41086a200741f8016a41086a280200360200200720072903f8013703f0020b200741f0026a107820074198026a41086a2209200741f0026a41086a280200360200200720072903f0023703980220074198026a10784200210202400240200928020022094105744180014d0d00421d21044101211e0c010b4100211e024020090d00420021040c010b200728029802220c200941027422096a417c6a220f280200211f0240200c200f470d00201fad21040c010b200c41786a210f201fad2104200741106a211f4120210c420021020340200741086a200f20096a3502004200200c41e0007110a405201f29030020027c2007290308220220047c2204200254ad7c2102200c41206a210c2009417c6a22094104470d000b0b0240200728029c0241ffffffff0371450d0020072802980210230b02400240201e450d00200041ccafc000360204200041086a4119360200410121090c010b200041106a2002370300200041086a2004370300410021090b20002009360200201141ffffffff0371450d03201210230c030b1033000b102a000b200720043e029c02200741acaec0003602980241fcaec000412f20074198026a41acafc00041bcafc0001034000b20074180036a24000b1c00200128021841e4aac200410f2001411c6a28020028020c1100000bb00301047f230041c0006b2202240020002802002103410121000240200128021841b29cc000410c2001411c6a28020028020c1100000d0002400240200328020822000d0020032802002200200328020428020c11030042e4aec285979ba58811520d012002200036020c2002410936021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241c09cc0003602282002200241106a36023820042005200241286a10310d020c010b2002200036020c2002410836021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241c09cc0003602282002200241106a36023820042005200241286a10310d010b200328020c2100200241106a41146a4101360200200241106a410c6a410136020020022000410c6a3602202002200041086a360218200241043602142002200036021020012802182100200128021c2101200241286a41146a41033602002002420337022c200241d09cc0003602282002200241106a36023820002001200241286a103121000b200241c0006a240020000bed04020b7f037e230041206b22022400024002400240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d00410121060c010b200410212206450d020b2002410036020820022004360204200220063602002003200210610240024020030d002002280208210420022802042107200228020021080c010b20052003410c6c6a21092005210603402006280200210a200641086a280200220420021061024002402002280204220b2002280208220c6b2004490d0020022802002108200b21070c010b200c20046a2208200c490d05200b41017422072008200720084b1b22074100480d0502400240200b0d00024020070d00410121080c020b2007102122080d010c080b20022802002108200b2007460d002008200b200710252208450d070b20022007360204200220083602000b2008200c6a200a200410a1051a2002200c20046a22043602082006410c6a22062009470d000b0b2004ad4220862008ad8410012204290000210d200441086a290000210e200441106a290000210f200241186a2206200441186a290000370300200241106a220c200f370300200241086a220b200e3703002002200d37030020041023200041186a2006290300370000200041106a200c290300370000200041086a200b2903003700002000200229030037000002402007450d00200810230b02402003450d002003410c6c21062005210403400240200441046a280200450d00200428020010230b2004410c6a2104200641746a22060d000b0b0240200141046a2802002204450d002004410c6c450d00200510230b200241206a24000f0b1032000b1033000b102c000b102a000b910301067f230041106b2202240002400240024002400240024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0120024100360208200242013703000c020b1032000b200410212205450d03200241003602082002200436020420022005360200024020030d00200541003a0000410121040c030b20040d010b410110212205450d0420024101360204200220053602000b200541013a000020024101360208200141086a2802002204200210610240024020022802042206200228020822056b2004490d00200228020021010c010b200520046a22012005490d03200641017422072001200720014b1b22074100480d030240024020060d00024020070d00410121010c020b2007102122010d010c060b2002280200210120062007460d0020012006200710252201450d050b20022007360204200220013602000b200120056a2003200410a1051a200520046a21040b20002002290300370200200041086a2004360200200241106a24000f0b1033000b102c000b102a000b900706017f017e067f017e057f017e230041306b220124000240024010022202422088a722030d00410121040c010b2002a721040b2001200336022420012004360220024002400240024002402003450d0020042d0000210520012003417f6a3602242001200441016a360220200541014b0d00024020050e020004000b200141186a200141206a10880120012802180d0020012802242206200128021c2205490d002005417f4c0d020240024020050d00410121070c010b200510272207450d02200720012802202208200510a1051a2001200620056b3602242001200820056a3602200b2007450d00200141106a200141206a1088012005ad22024220862002842209a7210a024020012802100d002001280214220b2001280224410c6e22052005200b4b1bad420c7e2202422088a70d032002a72205417f4c0d030240024020050d004104210c0c010b20051021220c450d030b2005410c6ead21020240200b450d00410021050340200141086a200141206a10880102400240024020012802080d002001280224220d200128020c2206490d002006417f4c0d080240024020060d00410121080c010b200610272208450d0820082001280220220e200610a1051a2001200d20066b3602242001200e20066a3602200b20052002a7470d02024002400240200541016a220d2005490d002005410174220e200d200e200d4b1bad420c7e220f422088a70d00200fa7220d4100480d00024020050d00200d0d024104210c0c050b2005410c6c2205200d460d04024020050d00200d0d024104210c0c050b200c2005200d1025220c450d020c040b102c000b200d1021220c0d020b102a000b02402005450d002005410c6c2106200c210503400240200541046a280200450d00200528020010230b2005410c6a2105200641746a22060d000b0b2002a72205450d042005410c6c450d04200c10230c040b2002422088a72105200d410c6ead21020b200c2005410c6c6a220d2006ad220f422086200f84370204200d2008360200200242ffffffff0f83200541016a2205ad422086842102200b417f6a220b0d000b0b200c450d002007450d012009422088a721050c050b200a450d00200710230b418cb2c000412e200141286a41bcb3c00041bcb2c0001034000b1033000b1032000b410021070b2000200a36020420002007360200200041106a20023702002000410c6a200c360200200041086a200536020002402003450d00200410230b200141306a24000bcf0201067f0240024020012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d01200341036a2d0000210620032f0001210720012002417c6a3602042001200341046a3602002007200641107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000b810103017f017e027f230041106b220324000240024002402002ad4220862000ad8410032204428080808010540d00410121022004a722052d0000220641014b0d0020060e020102010b418cb2c000412e200341086a41bcb3c00041bcb2c0001034000b410021020b2005102302402001450d00200010230b200341106a240020020b21002000417f6a41ff01712002ad4220862001ad842004ad4220862003ad8410000baa0201067f230041206b22022400024002402001422088a722030d00410121040c010b2001a721040b200220033602142002200436021002402003450d0020042d0000210520022003417f6a3602142002200441016a360210200541014b0d0041002103024002400240024020050e020100010b200241086a200241106a10880120022802080d0320022802142206200228020c2205490d032005417f4c0d010240024020050d00410121030c010b200510272203450d03200320022802102207200510a1051a2002200620056b3602142002200720056a3602100b2003450d032005ad220142208620018421010b200020013702042000200336020020041023200241206a24000f0b1032000b1033000b418cb2c000412e200241186a41bcb3c00041bcb2c0001034000b9d0102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad84200510062207422088a72204450d002007a722052d0000220341014b0d00410021010240024020030e020100010b2004417f6a4104490d0120052800012102410121010b200510232000200236020420002001360200200641106a24000f0b418cb2c000412e200641086a41bcb3c00041bcb2c0001034000bcf0303017f017e037f230041d0006b2203240002402001200210072204422088a72201450d002004a722052d0000220241014b0d002001417f6a210602400240024020020e020001000b41002101200341003a0049200541016a21070240034020062001460d01200341286a20016a200720016a2d00003a00002003200141016a22023a00492002210120024121470d000b200341106a200341316a290000370300200341186a200341396a290000370300200341206a200341c1006a2900003703002003200329002937030820032d0028210241002106200341086a21010c020b200141ff0171450d02200341003a00490c020b2006450d0120052d0001220241034f0d01200341086a41186a200341286a41186a290000370300200341086a41106a200341286a41106a290000370300200341086a41086a200341286a41086a2900003703002003200329002837030841012106200341086a21010b200020023a0001200020063a0000200041026a20012900003700002000410a6a200141086a290000370000200041126a200141106a2900003700002000411a6a200141186a29000037000020051023200341d0006a24000f0b418cb2c000412e200341286a41bcb3c00041bcb2c0001034000be90503017f017e0b7f230041e0006b220224002002200136020c02400240024002402002410c6a10082203422088a722010d0020004100360208200042013702000c010b2002200136021420022003a722043602102002200241106a1088010240024020022802000d0020022802042205200228021422064105762201200120054b1b22014105742207417f4c0d040240024020010d00410121080c010b200710212208450d040b2001ad210302402005450d00410021094100210a03402006210b200241003a0058200a41016a210a410021010240024002400340200b2001460d01200241386a20016a200228021022072d00003a00002002200741016a3602102002200141016a22073a00582007210120074120470d000b200241186a41186a220c200241386a41186a290300370300200241186a41106a220d200241386a41106a290300370300200241186a41086a220e200241386a41086a2903003703002002200229033837031820092003a7470d020240200941016a22012009490d00200941017422062001200620014b1b220141ffffff3f712001470d002001410574220141004e0d020b102c000b200241003602140240200141ff0171450d00200241003a00580b200342ffffff3f83500d04200810230c040b024002400240024020090d0020010d01410121080c030b200941057422092001460d02024020090d0020010d01410121080c030b20082009200110252208450d010c020b2001102122080d010b102a000b2003422088a721092001410576ad21030b200b20076b2106200820094105746a22012002290318370000200141186a200c290300370000200141106a200d290300370000200141086a200e290300370000200342ffffffff0f83200941016a2209ad422086842103200a2005470d000b2002200b20076b3602140b20080d010b418cb2c000412e200241386a41fcb1c00041fcb0c0001034000b2000200337020420002008360200200410230b200241e0006a24000f0b1033000b1032000b970403017f017e017f23004190016b22052400200520013602040240200541046a20022004ad4220862003ad8410092206422088a72201450d002006a722072d0000220341014b0d004100210202400240024020030e020100010b41002102200541003a008801200741016a21042001417f6a2101034020012002460d02200541c8006a20026a200420026a2d00003a00002005200241016a22033a00880120032102200341c000470d000b200541086a41386a200541c8006a41386a290300370300200541086a41306a200541c8006a41306a290300370300200541086a41286a200541c8006a41286a290300370300200541086a41206a200541c8006a41206a290300370300200541086a41186a200541c8006a41186a290300370300200541086a41106a200541c8006a41106a290300370300200541086a41086a200541c8006a41086a29030037030020052005290348370308410121020b200020023a000020002005290308370001200041096a200541106a290300370000200041116a200541186a290300370000200041196a200541206a290300370000200041216a200541286a290300370000200041296a200541306a290300370000200041316a200541386a290300370000200041396a200541c0006a2903003700002007102320054190016a24000f0b200241ff0171450d00200541003a0088010b418cb2c000412e200541c8006a41bcb3c00041bcb2c0001034000b980401067f20012802042102024002400240024020012802004101470d002001410c6a280200220141046a2203417f4c0d0102400240024002400240024002400240024002402003450d00200310212204450d0c200141c000490d04200141808001490d052001418080808004490d06200441033a00002003417f6a41034d0d01200321050c030b41012103410110212204450d07200441033a0000410521050c010b200341017422064105200641054b1b22054100480d0720032005460d010b20042003200510252204450d050b20042001360001410521060c030b200420014102743a000041012106200321050c020b02400240200341014d0d00200321050c010b2003200341017422064102200641024b1b2205460d0020042003200510252204450d030b41022106200420014102744101723b00000c010b02400240200341034d0d00200321050c010b200341017422064104200641044b1b22054100480d0320032005460d0020042003200510252204450d020b20042001410274410272360000410421060b0240200520066b2001490d00200521030c060b200620016a22032006490d01200541017422072003200720034b1b22034100480d0120052003460d05200420052003102522040d050b102a000b102c000b20002002200141086a28020010740f0b1032000b1033000b200420066a2002200110a1051a2000200620016a36020820002003360204200020043602000b1c00200128021841e4aac200410f2001411c6a28020028020c1100000b8b0101017f4197acc500ad4280808080d00184100a024002400240024020002d00000e0400010203000b200041046a290200100a0f0b41a3b6c000ad4280808080e00184100a0f0b4199b6c000ad4280808080a00184100a0f0b2000310001100b200041026a310000100b0240200041046a2802002201450d00200041086a3502004220862001ad84100a0b0b1c00200128021841e4aac200410f2001411c6a28020028020c1100000bc10304017f027e067f017e230041206b22032400200229030021042001290300210520022802102106200141106a200141186a2207280200200241186a2208280200220910950120012802102007280200220a410c6c6a20062009410c6c10a1051a200841003602002007200a20096a2209360200200341086a200936020020032001290210370300200228021c21082001411c6a200141246a2207280200200241246a220a2802002209109501200128021c2007280200220b410c6c6a20082009410c6c10a1051a200a41003602002007200b20096a2209360200200341106a41086a20093602002003200129021c370310427f200520047c220420042005541b2105200229030822042001290308220c200c2004561b21040240024020012d0028450d004101210120022d00280d010b410021010b20002005370300200020032903003702102000200329031037021c200020013a002820002004370308200041186a200341086a280200360200200041246a200341106a41086a2802003602000240200241146a2802002201450d002001410c6c450d00200610230b0240200241206a2802002201450d002001410c6c450d00200810230b200341206a24000bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad420c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003410c6c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a2001410c6e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42e0007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341e0006c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141e0006e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff3f712001470d00200141057422014100480d00024020030d0020010d02410821020c040b20002802002102200341057422032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014105763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42287e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341286c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141286e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad4288027e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b2000280200210220034188026c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014188026e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff3f712001470d00200141057422014100480d00024020030d0020010d02410121020c040b20002802002102200341057422032001460d03024020030d0020010d02410121020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014105763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42c4007e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341c4006c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141c4006e3602000b0bb40101027f0240200041046a280200220320016b20024f0d000240024002400240200120026a22042001490d00200341017422022004200220044b1b220420046a22012004490d0020014100480d00024020030d0020010d02410221030c040b2000280200210320022001460d03024020020d0020010d02410221030c040b20032002200110252203450d020c030b102c000b2001102122030d010b102a000b20002003360200200041046a20014101763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42c1007e2204422088a70d002004a722014100480d00024020030d0020010d02410121020c040b20002802002102200341c1006c22032001460d03024020030d0020010d02410121020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141c1006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42147e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341146c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141146e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff1f712001470d00200141067422014100480d00024020030d0020010d02410821020c040b20002802002102200341067422032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014106763602000b0bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff00712001470d00200141047422014100480d00024020030d0020010d02410421020c040b20002802002102200341047422032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014104763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42c8007e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341c8006c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141c8006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42247e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341246c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141246e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad421c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003411c6c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a2001411c6e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42307e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341306c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141306e3602000b0bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff01712001470d00200141037422014100480d00024020030d0020010d02410421020c040b20002802002102200341037422032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014103763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad422c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003412c6c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a2001412c6e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42347e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341346c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141346e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff3f712001470d00200141057422014100480d00024020030d0020010d02410421020c040b20002802002102200341057422032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014105763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d8007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d8006c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141d8006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42287e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341286c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141286e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d0027e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d0026c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141d0026e3602000b0bbc0102027f017e0240200041046a2802002001470d000240024002400240200141016a22022001490d00200141017422032002200320024b1bad42c8037e2204422088a70d002004a722024100480d00024020010d0020020d02410821030c040b20002802002103200141c8036c22012002460d03024020010d0020020d02410821030c040b20032001200210252203450d020c030b102c000b2002102122030d010b102a000b20002003360200200041046a200241c8036e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42b0027e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341b0026c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141b0026e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42387e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341386c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141386e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42227e2204422088a70d002004a722014100480d00024020030d0020010d02410221020c040b20002802002102200341226c22032001460d03024020030d0020010d02410221020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141226e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42187e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341186c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141186e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42c0017e2204422088a70d002004a722014100480d00024020030d0020010d02410121020c040b20002802002102200341c0016c22032001460d03024020030d0020010d02410121020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141c0016e3602000b0bb90102027f017e0240200041046a2802002001470d000240024002400240200141016a22022001490d00200141017422032002200320024b1bad42187e2204422088a70d002004a722024100480d00024020010d0020020d02410821030c040b20002802002103200141186c22012002460d03024020010d0020020d02410821030c040b20032001200210252203450d020c030b102c000b2002102122030d010b102a000b20002003360200200041046a200241186e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff1f712001470d00200141067422014100480d00024020030d0020010d02410421020c040b20002802002102200341067422032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a20014106763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d0007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d0006c22032001460d03024020030d0020010d02410821020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141d0006e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42f0007e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341f0006c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141f0006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42307e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341306c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a200141306e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad423c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003413c6c22032001460d03024020030d0020010d02410421020c040b20022003200110252202450d020c030b102c000b2001102122020d010b102a000b20002002360200200041046a2001413c6e3602000b0bf90403027f017e057f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341eecec000ad4280808080800284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b8b0b04047f017e127f037e230041d0036b22012400200141f0006a41186a4200370300200141f0006a41106a22024200370300200141f0006a41086a2203420037030020014200370370418fcdc200ad4280808080f00084100c220429000021052003200441086a290000370300200120053703702004102341b8dbc100ad4280808080900184100c22042900002105200141206a41086a2206200441086a2900003703002001200537032020041023200220012903202205370300200141c0006a41086a22042003290300370300200141c0006a41106a2005370300200141c0006a41186a200629030037030020012001290370370340200141f0006a200141c0006a10ba0102400240024020012903704202510d002000280208210320002802042107200028020021082001200228020010b801200141f0006a200128020022092001280208220a10bb012004200141f0006a410c6a290200370300200120012902743703400240024020012802704101460d00200141106a410c6a4100360200200142003703100c010b200141106a41086a200141c0006a41086a290300370300200120012903403703100b02402003450d002008200341246c6a210b20014184016a210c2001411c6a210d200141106a410472210e200141e8006a210f200141c0006a41206a211020082111034020112802202112200141206a41186a2213201141186a290000370300200141206a41106a2214201141106a290000370300200141206a41086a2215201141086a290000370300200120112900003703200240024020012802142206450d00200128021821160c010b200141f0006a410041e00210a0051a200f410036020020104200370300200141c0006a41186a22004200370300200141c0006a41106a22034200370300200141c0006a41086a220442003703002001420037034041940310212206450d0541002116200641003b010620064100360200200641086a200141f0006a41e00210a1051a20064190036a200f28020036020020064188036a201029030037020020064180036a2000290300370200200641f8026a2003290300370200200641f0026a2004290300370200200620012903403702e80220014100360218200120063602140b201141246a2111024002400340200641086a210320062f01062217410574210041002104024003402000450d01200141206a2003412010a3052202450d03200041606a2100200441016a2104200341206a21032002417f4a0d000b2004417f6a21170b02402016450d002016417f6a2116200620174102746a4194036a28020021060c010b0b200141c0006a41186a20132903002205370300200141c0006a41106a20142903002218370300200141c0006a41086a2015290300221937030020012001290320221a370340200c201a370200200c41086a2019370200200c41106a2018370200200c41186a20053702002001200d360280012001201736027c2001200e3602782001200636027420014100360270200141f0006a410010bc0121000c010b200620044102746a41e8026a21000b2000200028020020126a3602002001200128021020126a3602102011200b470d000b0b02402007450d00200741246c450d00200810230b200141fc006a200141106a41086a290300370200200120012903102205370274200141013602702001410036024820014201370340410410212200450d0220002005a73600002001200036024020014284808080c000370244200141f0006a41086a2203200141c0006a10bd0120012802442100200aad4220862009ad84200135024842208620012802402204ad84100e02402000450d00200410230b02402001280270450d00200310be010b2001280204450d01200910230c010b200041046a2802002203450d00200341246c450d00200028020010230b200141d0036a24000f0b102a000bd60202057f027e230041d0006b220224002002412036020420022001360200200241086a2001ad42808080808004841010108b0102400240200228020822010d00200042023703000c010b200228020c210302400240200241106a28020022044104490d0020044104460d0020012d0004220541014b0d0020012800002106420021070240024020050e020100010b2004417b6a4108490d0120012900052108420121070b20002008370308200041106a20063602000c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c20024180c5c6003602382002200241286a360248200241346a4184a5c200200241386a10311a2002350220422086200235021884100a0240200228021c450d00200228021810230b420221070b200020073703002003450d00200110230b200241d0006a24000bcd0b030e7f047e087f230041a0046b220324002003200236021420032001360210200341186a2002ad4220862001ad841010108b0102400240200328021822040d00200041003602000c010b200328021c21052003200341206a280200220136022c2003200436022802400240024020014104490d0020032001417c6a36022c2003200441046a36022820042800002106200341086a200341286a10880120032802080d00200328020c21072003410036024820034100360240200341c0006a41086a210802400240024002402007450d00200341d4016a2109200328022c210a200341b8016a210b4100210c034041002101200341003a00e001200c41016a210c024002400340200a2001460d01200341c0016a20016a2003280228220d2d00003a00002003200d41016a3602282003200141016a22023a00e0012002210120024120470d000b20034190016a41086a220e200341c0016a41086a29030037030020034190016a41106a220f200341c0016a41106a29030037030020034190016a41186a2210200341c0016a41186a290300370300200320032903c001370390012003200a20026b220136022c200141044f0d010c050b2003410036022c200141ff0171450d04200341003a00e001410021010c050b200341d0006a41086a200e2903002211370300200341d0006a41106a200f2903002212370300200341d0006a41186a20102903002213370300200320032903900122143703502003200d41056a36022820032001417c6a220a36022c200d2800012115200341f0006a41186a22162013370300200341f0006a41106a22172012370300200341f0006a41086a22182011370300200320143703700240024020032802402219450d002003280244211a0c010b200341c0016a410041e00210a0051a200b410036020020034190016a41206a2201420037030020104200370300200f4200370300200e4200370300200342003703900141940310212219450d034100211a201941003b010620194100360200201941086a200341c0016a41e00210a1051a20194190036a200b28020036020020194188036a200129030037020020194180036a2010290300370200201941f8026a200f290300370200201941f0026a200e29030037020020192003290390013702e80220034100360244200320193602400b024002400340201941086a210220192f0106221b41057421014100210d024003402001450d01200341f0006a2002412010a305221c450d03200141606a2101200d41016a210d200241206a2102201c417f4a0d000b200d417f6a211b0b0240201a450d00201a417f6a211a2019201b4102746a4194036a28020021190c010b0b201020162903002211370300200f20172903002212370300200e201829030022133703002003200329037022143703900120092014370200200941086a2013370200200941106a2012370200200941186a2011370200200320083602d0012003201b3602cc01200320193602c401200341003602c0012003200341c0006a3602c801200341c0016a201510bc011a0c010b2019200d4102746a41e8026a20153602000b200c2007470d000b0b410121010c020b102a000b410021010b200341306a41086a20082802002202360200200320032903402211370330200341c0016a41086a2002360200200320113703c00120010d01200341c0016a10be010b41002101200341003602980120034201370390012003410a3602742003200341106a360270200320034190016a360250200341d4016a4101360200200342013702c40120034180c5c6003602c0012003200341f0006a3602d001200341d0006a4184a5c200200341c0016a10311a20033502980142208620033502900184100a200328029401450d0120032802900110230c010b20034190016a41086a200341c0016a41086a2802002201360200200320032903c00122113703900120002006360204200041086a2011370200200041106a2001360200410121010b200020013602002005450d00200410230b200341a0046a24000bed0701087f23004190046b2202240020002802102203200328020041016a360200200241086a2203200041086a29020037030020022000290200370300200241306a41186a2000412c6a290000370300200241306a41106a200041246a290000370300200241306a41086a2000411c6a29000037030020022000290014370330200241d0006a2002200241306a200110b40402400240024020022d00504101470d002003200241d9006a290000370300200241106a200241e1006a290000370300200241186a200241e9006a29000037030020022002290051370300200241d0006a412c6a280200210120024188016a280200210420024184016a280200210320024180016a2802002105200228028c012106200241f8006a28020022002802002207450d0120002f01042108200241f4006a2802002109200241d0006a410172210003402002200841ffff037136022c20022001360228200220073602242002200941016a360220200241306a41186a200241186a2201290300370300200241306a41106a200241106a2207290300370300200241306a41086a200241086a220829030037030020022002290300370330200241d0006a200241206a200241306a20052003200410b50420022d00504101470d032008200041086a2900003703002007200041106a2900003703002001200041186a29000037030020022000290000370300200228027c2101200228028801210420022802840121032002280280012105200228027822082802002207450d0220082f01042108200228027421090c000b0b200241d0006a41086a280200200241d0006a41106a2802004102746a41e8026a21060c010b200241d0006a410272410041be0310a0051a02400240024041c40310212200450d0020004100360200200041046a200241d0006a41c00310a1051a200020012802002207360294032001200036020020012001280204220841016a360204200741003b010420072000360200200241d0006a41186a200241186a290300370300200241d0006a41106a200241106a290300370300200241d0006a41086a200241086a2903003703002002200229030037035020082004470d0120002f01062201410a4b0d02200020014105746a220441206a200241d0006a41186a290300370000200441186a200241d0006a41106a290300370000200441106a200241d0006a41086a290300370000200441086a2002290350370000200020014102746a41e8026a20053602002000200141016a22014102746a4194036a2003360200200020013b0106200320013b0104200320003602000c030b102a000b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000b20024190046a240020060bf90403067f027e017f230041c0006b22022400200041086a28020022032001106102400240024020002802002204450d00024020002802042205450d002005210620042107034020072802940321072006417f6a22060d000b200421060340200620062f01064102746a4194036a28020021062005417f6a22050d000b200241186a2105200721040c020b200241186a2105200421060c010b410021042002410036021c200241186a21050c010b2002200636021c200241246a20062f010636020020022000360220200241003602180b200241086a41086a200541086a2902002208370300200220052902002209370308200241246a4100360200200241306a2008370300200220003602202002200436021c20024100360218200220093703282002200336023802402003450d00034020022003417f6a360238200241186a410020041b2207280200210620072802082100024002400240200728020c2205200728020422032f01064f0d00200321040c010b0240034020032802002204450d01200641016a210620032f0104210520042103200520042f0106490d020c000b0b2000ad2108410021040c010b2005ad4220862000ad8421080b2008422088a7220041016a21052008a7210a0240024020060d00200421030c010b200420054102746a4194036a2802002103410021052006417f6a2206450d00034020032802940321032006417f6a22060d000b0b2007200536020c2007200a36020820072003360204200741003602002001200420004105746a41086a412010622002200420004102746a41e8026a28020036023c20012002413c6a4104106220022802382203450d01200228021c21040c000b0b200241c0006a24000bb50201047f024020002802002201450d0020002802082102024020002802042200450d00034020012802940321012000417f6a22000d000b0b02402002450d004100210303400240024002402001450d002002417f6a2102200320012f0106490d0141002104034002400240200128020022000d0041002103410021000c010b200441016a210420012f010421030b2001102320002101200320002f01064f0d000b200341016a2103024020040d00200021010c030b200020034102746a4194036a2802002101410021032004417f6a2200450d02034020012802940321012000417f6a22000d000c030b0b41d095c700412b41c491c700102d000b200341016a21030b20020d000b0b2001450d0020012802002100200110232000450d00034020002802002101200010232001210020010d000b0b0baa0703027f017e067f230041e0006b22032400418fcdc200ad4280808080f00084100c22042900002105200341086a200441086a290000370300200320053703002004102341ecc4c000ad4280808080b00284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023200320013602302003200341306aad4280808080c00084100d220429000037034020041023200341d4006a2201200341346a360200200341003a00582003200341c0006a41086a220636024c2003200341306a3602502003200341c0006a360248200341206a200341c8006a1065024002400240024002400240412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad4280808080800484100d2202290000370340200210232001200441206a360200200341003a0058200320043602502003200636024c2003200341c0006a360248200341306a200341c8006a1065200410232003280228220741206a2201200328023822086a2202417f4c0d01200328023021092003280220210a024002402002450d00200210212204450d022002410f4d0d01200221060c050b200241017422044110200441104b1b2206102122040d040c060b200241017422064110200641104b1b220641004e0d020c040b1033000b1032000b20022006460d0020042002200610252204450d020b20042003290300370000200441086a200341086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062001200620014b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620016b2008490d002006210b0c010b200120086a2001490d012006410174220b2002200b20024b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420016a2009200810a1051a200020023602082000200b3602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000baa0703027f017e067f230041e0006b22032400418fcdc200ad4280808080f00084100c22042900002105200341086a200441086a290000370300200320053703002004102341ffc4c000ad4280808080b00284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023200320013602302003200341306aad4280808080c00084100d220429000037034020041023200341d4006a2201200341346a360200200341003a00582003200341c0006a41086a220636024c2003200341306a3602502003200341c0006a360248200341206a200341c8006a1065024002400240024002400240412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad4280808080800484100d2202290000370340200210232001200441206a360200200341003a0058200320043602502003200636024c2003200341c0006a360248200341306a200341c8006a1065200410232003280228220741206a2201200328023822086a2202417f4c0d01200328023021092003280220210a024002402002450d00200210212204450d022002410f4d0d01200221060c050b200241017422044110200441104b1b2206102122040d040c060b200241017422064110200641104b1b220641004e0d020c040b1033000b1032000b20022006460d0020042002200610252204450d020b20042003290300370000200441086a200341086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062001200620014b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620016b2008490d002006210b0c010b200120086a2001490d012006410174220b2002200b20024b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420016a2009200810a1051a200020023602082000200b3602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000bae0503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a29000037030020022004370300200310234192c5c000ad4280808080d00184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bf90403027f017e057f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a29000037030020022004370300200310234180dcc100ad4280808080d00284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bae0503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341bbacc300ad4280808080a00184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bd70503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a2900003703002002200437030020031023419fc5c000ad4280808080900184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240410410212203450d0020034104412010252203450d0520032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200128022021052003412041c00010252201450d052001200536002020022001ad4280808080c00484100d220329000037033020031023200241c4006a200141246a360200200241003a0048200220013602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200110232002280228220641206a2203417f4c0d0120022802202107024002402003450d00200310212201450d022003410f4d0d01200321080c050b200341017422014110200141104b1b2208102122010d040c060b200341017422054110200541104b1b220841004e0d020c040b1033000b1032000b20032008460d0020012003200810252201450d020b20012002290300370000200141086a200241086a2903003700000240024020084170714110460d00200821050c010b200841017422054120200541204b1b22054100480d0120082005460d0020012008200510252201450d020b20012002290310370010200141186a200241106a41086a29030037000002400240200541606a2006490d00200521080c010b2006415f4b0d01200541017422082003200820034b1b22084100480d0120052008460d0020012005200810252201450d020b200141206a2007200610a1051a20002003360208200020083602042000200136020002402002280224450d00200710230b200241d0006a24000f0b102c000b102a000bae0503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341e2c4c000ad4280808080a00184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bcc0503027f017e047f230041e0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341dcc4c000ad4280808080e00084100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100f22012900002104200241386a41086a200141086a2900003703002002200437033820011023200241d4006a200341206a360200200241003a0058200220033602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200310232002280230220541206a2201417f4c0d0120022802282106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000bae0503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341d6c4c000ad4280808080e00084100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bfc0503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241186a41086a200341086a29000037030020022004370318200310234192c5c000ad4280808080d00184100c22032900002104200241286a41086a200341086a290000370300200220043703282003102320012802002101024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d2201290000370348200110232002410c6a200341206a360200200241003a0010200220033602082002200241c8006a41086a3602042002200241c8006a360200200241386a20021065200310232002280240220541206a2201417f4c0d0120022802382106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422074110200741104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290318370000200341086a200241186a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290328370010200341186a200241286a41086a2903003700000240200841606a20054f0d002005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a0240200228023c450d00200610230b20022003200110c901200241286a41086a2207200241086a280200360200200220022903003703280240200228020c2201450d002000200229032837020020002002290310370210200041086a20072802003602000b2000200136020c20031023200241d0006a24000f0b102c000b102a000b990502087f017e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d002000410036020c0c010b200328021421042003200341186a2802002202360224200320013602200240024020024104490d002003200141046a36022020032002417c6a220536022420054104490d00200128000021062003200141086a3602202003200241786a220536022420054104490d00200128000421052003200241746a36022420032001410c6a360220200128000821072003200341206a10880120032802000d002003280224220820032802044102742202490d0002400240024002402002417f4c0d000240024020020d00410121090c010b200210272209450d0220092003280220220a200210a1051a2003200820026b3602242003200a20026a3602200b2009450d0402402002ad220b422086200b84220b422088a722020d00200ba721020c030b024020092002724103710d00200ba722024103710d0020024102762208450d03200b422288a7210a0c040b200ba7450d04200910230c040b1032000b1033000b4100210a02402002450d00200910230b41002108410421090b41000d002009450d00200020083602102000200936020c200020073602082000200536020420002006360200200041146a200a3602000c010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b2000410036020c0b2004450d00200110230b200341e0006a24000bf90403027f017e057f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a29000037030020022004370300200310234191cfc000ad4280808080e00184100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bf90403027f017e057f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341fecec000ad4280808080b00284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bfa810112047f017e017f017e027f017e057f027e017f017e037f017e097f047e087f017e077f037e230041d0056b22022400200241d8016a41186a22034200370300200241d8016a41106a22044200370300200241d8016a41086a22054200370300200242003703d801418fcdc200ad4280808080f000842206100c22072900002108200241b0036a41086a2209200741086a290000370300200220083703b0032007102320052009290300370300200220022903b0033703d801418cdbc100ad4280808080a001842208100c220a290000210b200241f0036a41086a2207200a41086a2900003703002002200b3703f003200a1023200420022903f003220b370300200241d0046a41086a220a2005290300370300200241d0046a41106a220c200b370300200241d0046a41186a220d2007290300370300200220022903d8013703d004200241d0016a200241d0046a412010cd0120022802d001210e20022802d401210f200342003703002004420037030020054200370300200242003703d8012006100c2203290000210b2009200341086a2900003703002002200b3703b0032003102320052009290300370300200220022903b0033703d8012008100c220329000021082007200341086a290000370300200220083703f00320031023200420022903f0032208370300200a2005290300370300200c2008370300200d2007290300370300200220022903d8013703d0042002200f41016a4100200e1b22103602d801200241d0046aad42808080808004842211200241d8016aad22124280808080c00084100e2006100c220529000021062009200541086a290000370300200220063703b003200510234180dcc100ad4280808080d00284100c220529000021062007200541086a290000370300200220063703f00320051023200220103602a0052002200241a0056aad22064280808080c00084100d22052900003703d00420051023200241e4016a200241a4056a360200200241003a00e8012002200a3602dc012002200241a0056a3602e0012002200241d0046a3602d801200241f0026a200241d8016a106502400240024002400240024002400240024020022802f802220a41206a2209417f4c0d0020022802f002210c0240024002402009450d00200910212205450d062009410f4d0d01200921070c020b200941017422054110200541104b1b2207102122050d010c0a0b200941017422074110200741104b1b22074100480d0820092007460d0020052009200710252205450d090b200520022903b003370000200541086a200241b0036a41086a2903003700000240024020074170714110460d00200721030c010b200741017422034120200341204b1b22034100480d0820072003460d0020052007200310252205450d090b200520022903f003370010200541186a200241f0036a41086a2903003700000240200341606a200a4f0d00200a41206a2207200a490d082003410174220d2007200d20074b1b22074100480d0820032007460d0020052003200710252205450d090b200541206a200c200a10a1051a024020022802f402450d00200c10230b200220013602d8012009ad4220862005ad8420124280808080c00084100e20051023200241d8016a41186a220a4200370300200241d8016a41106a22134200370300200241d8016a41086a22054200370300200242003703d801418fcdc200ad4280808080f000842208100c2207290000210b200241b0036a41086a2209200741086a2900003703002002200b3703b0032007102320052009290300370300200220022903b0033703d8014190d8c100ad4280808080c00184100c2203290000210b200241f0036a41086a2207200341086a2900003703002002200b3703f00320031023200420022903f003370000200441086a2007290300370000200241d0046a41086a2005290300370300200241d0046a41106a2013290300370300200241d0046a41186a200a290300370300200220022903d8013703d004200241c8016a200241d0046a412010cd010240201020022802cc0141016a41d50020022802c8011b6b220320104b0d00200310ce010b200a42003703002013420037030020054200370300200242003703d8012008100c220a29000021082009200a41086a290000370300200220083703b003200a102320052009290300370300200220022903b0033703d80141d5cfc000ad4280808080d00184100c220929000021082007200941086a290000370300200220083703f00320091023201320022903f0032208370300200241a0056a41086a2005290300370300200241a0056a41106a2008370300200241a0056a41186a2007290300370300200220022903d8013703a005200241203602c4022002200241a0056a3602c002200241c8026a2006428080808080048422141010108b01024020022802c8022215450d0020022802cc0221162002200241c8026a41086a2802003602dc02200220153602d802200241d8016a200241d8026a10cf010240024020022802d8012217450d00200241d8016a41086a350200211820022802dc012119200241c0016a200241d8026a1088010240024020022802c0010d0020022802c401221a20022802dc02220741d0006e22052005201a4b1bad42d0007e2206422088a70d052006a72205417f4c0d050240024020050d004108211b0c010b20051021221b450d090b4100210a200241003602e8022002201b3602e0022002200541d0006e221c3602e4020240201a450d00200241f4046a211d200241d8016a41206a211e4100210a4100210302400340200241003a009004200341016a210341002105024002400240034020072005460d01200241f0036a20056a20022802d80222092d00003a00002002200941016a3602d8022002200541016a22093a0090042009210520094120470d000b200241b0046a41086a2205200241f0036a41086a220c290300370300200241b0046a41106a2201200241f0036a41106a220d290300370300200241b0046a41186a220e200241f0036a41186a220f290300370300200220022903f0033703b0042002200720096b3602dc02200241d0046a200241d8026a10d00120022802f00422090d01410021090c020b200241003602dc020240200541ff0171450d00200241003a0090040b410021090c010b201e20022903d004370300200241d8016a41186a2207200e290300370300200241d8016a41106a220e2001290300370300200241d8016a41086a22012005290300370300201e41086a200241d0046a41086a290300370300201e41106a200241d0046a41106a290300370300201e41186a200241d0046a41186a290300370300200241c0056a41086a201d41086a280200360200200220022903b0043703d8012002201d2902003703c005200241f0036a41386a200241d8016a41386a290300370300200241f0036a41306a200241d8016a41306a290300370300200241f0036a41286a200241d8016a41286a290300370300200241f0036a41206a201e290300370300200f2007290300370300200d200e290300370300200c2001290300370300200220022903d8013703f0030b200241b0036a41386a2205200241f0036a41386a290300370300200241b0036a41306a2207200241f0036a41306a290300370300200241b0036a41286a220c200241f0036a41286a290300370300200241b0036a41206a2201200241f0036a41206a290300370300200241b0036a41186a220d200241f0036a41186a290300370300200241b0036a41106a220e200241f0036a41106a290300370300200241b0036a41086a220f200241f0036a41086a29030037030020024190056a41086a221f200241c0056a41086a280200360200200220022903f0033703b003200220022903c0053703900502402009450d00200241f0026a41386a22202005290300370300200241f0026a41306a22212007290300370300200241f0026a41286a2207200c290300370300200241f0026a41206a220c2001290300370300200241f0026a41186a2201200d290300370300200241f0026a41106a220d200e290300370300200241f0026a41086a220e200f29030037030020024180056a41086a220f201f280200360200200220022903b0033703f0022002200229039005370380050240200a20022802e402470d00200241e0026a200a410110b40120022802e002211b20022802e802210a0b201b200a41d0006c6a220520022903f002370300200d290300210620012903002108200c290300210b200729030021222021290300212320202903002124200e290300212520052009360240200541086a20253703002005200229038005370244200541cc006a200f280200360200200541386a2024370300200541306a2023370300200541286a2022370300200541206a200b370300200541186a2008370300200541106a20063703002002200a41016a220a3602e8022003201a460d0220022802dc0221070c010b0b0240200a450d00200a41d0006c2109201b41c4006a21050340024020052802002207450d00200741306c450d002005417c6a28020010230b200541d0006a2105200941b07f6a22090d000b0b20022802e4022205450d02200541d0006c450d02201b10230c020b20022802e402211c0b201b450d000240024020022802dc022205450d0020022005417f6a3602dc02200220022802d802220541016a3602d80220052d000022264103490d010b0240200a450d00200a41d0006c2109201b41c4006a21050340024020052802002207450d00200741306c450d002005417c6a28020010230b200541d0006a2105200941b07f6a22090d000b0b0240201c450d00201c41d0006c450d00201b10230b201941ffffff3f71450d030c020b20184220862019ad8421240c030b201941ffffff3f71450d010b201710230b200241003602f803200242013703f0032002410a3602b4032002200241c0026a3602b0032002200241f0036a3602f002200241ec016a4101360200200242013702dc0120024180c5c6003602d8012002200241b0036a3602e801200241f0026a4184a5c200200241d8016a10311a20023502f80342208620023502f00384100a024020022802f403450d0020022802f00310230b410321260b02402016450d00201510230b20264103460d00201410110c070b200241003602d002200242083703c802200241003602e802200242013703e002418fcdc200ad4280808080f00084100c22052900002106200241b0036a41086a2209200541086a290000370300200220063703b0032005102341bbacc300ad4280808080a00184100c22052900002106200241f0036a41086a2207200541086a290000370300200220063703f00320051023412010212205450d03200520022903b003370000200520022903f003370010200541086a2009290300370000200541186a220a2007290300370000412010212209450d0320092005290000370000200941186a200a290000370000200941106a200541106a290000370000200941086a200541086a290000370000200241b0046a41026a220a200241d8016a41026a2d00003a0000200220022f00d8013b01b004200241a0056a41106a42a0808080800437030041002107200241003a00b805200220053602ac05200242a080808080043702a405200220093602a005200241bb056a200a2d00003a0000200220022f01b0043b00b905200241d8016a200241a0056a10d20141012115024020022802d8014101470d00200241d8016a410472210a41002107410121154108211a410021030340200241f0036a41206a200a41206a280200360200200241f0036a41186a2205200a41186a2902002206370300200241f0036a41106a2209200a41106a2902002208370300200241f0036a41086a2220200a41086a290200220b3703002002200a29020022223703f003200241f0026a41186a220e2006370300200241f0026a41106a220f2008370300200241f0026a41086a221f200b370300200220223703f002200241d8016a41186a220c2005290300370300200241d8016a41106a22012009290300370300200241d8016a41086a220d2020290300370300200220022903f0033703d801200241b0016a200241f0026a10d301200241b0016a41086a290300210620022903b0012108412010212209450d0a200920022903f002370000200941186a200e290300370000200941106a200f290300370000200941086a201f290300370000200241b0036a41086a200d290300220b370300200241b0036a41106a20012903002222370300200241b0036a41186a200c2903002223370300200220022903d80122243703b003200241d0046a41186a22202023370300200241d0046a41106a22212022370300200241d0046a41086a221e200b370300200220243703d0040240200320022802cc02470d00200241c8026a20034101109f0120022802c802211a20022802d00221030b201a20034106746a2205200637030820052008370300201e2903002106202129030021082020290300210b20022903d0042122200541346a4281808080103702002005200936023020052022370310200541286a200b370300200541206a2008370300200541186a20063703002002200341016a22033602d002200c200e2903003703002001200f290300370300200d201f290300370300200220022903f0023703d8010240200720022802e402470d00200241e0026a20074101109a0120022802e002211520022802e80221070b201520074105746a220520022903d801370000200541186a200c290300370000200541106a2001290300370000200541086a200d2903003700002002200741016a22073602e802200241d8016a200241a0056a10d20120022802d8014101460d000b0b024020022802a405450d0020022802a00510230b024020022802b005450d0020022802ac0510230b418fcdc200ad4280808080f00084100c22052900002106200241b0036a41086a2209200541086a290000370300200220063703b0032005102341e2c4c000ad4280808080a00184100c22052900002106200241f0036a41086a220a200541086a290000370300200220063703f00320051023412010212205450d03200520022903b003370000200520022903f003370010200541086a2009290300370000200541186a2203200a290300370000412010212209450d0320092005290000370000200941186a2003290000370000200941106a200541106a290000370000200941086a200541086a290000370000200241d8026a41026a2203200241d8016a41026a2d00003a0000200220022f00d8013b01d802200241d8016a41106a220a42a08080808004370300200241003a00f001200220053602e401200242a080808080043702dc01200220093602d801200241f3016a20032d00003a0000200220022f01d8023b00f101200241c8026a200241d8016a10d401200241d8016a41186a22094200370300200a4200370300200241d8016a41086a22054200370300200242003703d801418fcdc200ad4280808080f000842206100c220c2900002108200241b0036a41086a2203200c41086a290000370300200220083703b003200c102320052003290300370300200220022903b0033703d80141e4d8c100ad4280808080e00184100c22012900002108200241f0036a41086a220c200141086a290000370300200220083703f00320011023201320022903f003370000201341086a220d200c290300370000200241a0056a41086a220e2005290300370300200241a0056a41106a220f200a290300370300200241a0056a41186a221f2009290300370300200220022903d8013703a005200241a8016a200241a0056a412010cd0120022802ac01212720022802a801212820094200370300200a420037030020054200370300200242003703d8012006100c220129000021062003200141086a290000370300200220063703b0032001102320052003290300370300200220022903b0033703d801418cd9c100ad4280808080d00284100c22032900002106200c200341086a290000370300200220063703f00320031023201320022903f003370000200d200c290300370000200e2005290300370300200f200a290300370300201f2009290300370300200220022903d8013703a005200241a0016a200241a0056a412010cd0120022802a401210a20022802a001210320022802e402211620022802c802211a20022802cc02211d20022802d002211e200241003602c805200241003602c005201e20076aad42e0007e2206422088a70d002006a72205417f4c0d004108210902402005450d00200510212209450d040b200a410420031b221941014b2129200241003602a805200220093602a0052002200541e0006e3602a405200241003602b803200242083703b003200241b0036a41002007410574220a41057510a90120022802b803212102402007450d00200a41606a410576212a20022802b003202141d8006c6a210320024188026a210920024180026a212041002107201521050340200241b0046a41186a220c200541186a2201290000370300200241b0046a41106a220d200541106a220e290000370300200241b0046a41086a220f200541086a221f290000370300200220052900003703b004200241f0036a41186a2001290000370300200241f0036a41106a200e290000370300200241f0036a41086a201f290000370300200220052900003703f003200241c0056a200241f0036a200710d501200241d8016a41086a4200370300200241d8016a41106a4200370300200241d8016a41186a4200370300200241d8016a41206a420037030020204200370300200941186a200c290300370000200941106a200d290300370000200941086a200f290300370000200920022903b004370000200242003703d8012003200241d8016a41d00010a105220341d0006a41003a0000200341d8006a2103200541206a2105200741016a2107200a41606a220a0d000b2021202a6a41016a21210b2019410120291b2105200220213602b8030240201641ffffff3f71450d00201510230b200241d0046a41086a200241b0036a41086a2802002209360200200220022903b0033703d0040240024020092005490d00200241a0056a20022802a805201e410674220941067510960120022802a005210720022802a8052105200241f0016a200241c0026a360200200241ec016a200241d0046a3602002002201a20096a3602e4012002201a3602e0012002201d3602dc012002201a3602d8012002200241c0056a3602e801200241f0036a41086a20053602002002200241a8056a3602f40320022007200541e0006c6a3602f003200241d8016a200241f0036a10d6012027410020281b222bad42307e2206422088a70d022006a72209417f4c0d0220022802d80421050240024020090d00410821200c010b200910212220450d060b200241003602880520022020360280052002200941306e36028405202b412c6c2209417f4c0d020240024020090d004104212c0c010b20091021222c450d060b4100211a20024100360298052002202b360294052002202c36029005410021282005202b2005202b491b22290d010c030b024020022802d4042205450d00200541d8006c450d0020022802d00410230b024020022802a8052205450d00200541e0006c210920022802a00541346a21050340024020052802002207450d00200741c8006c450d002005417c6a28020010230b200541e0006a2105200941a07f6a22090d000b0b024020022802a4052205450d00200541e0006c450d0020022802a00510230b200241c0056a10be010240201e450d00201e4106742109201a41346a210503400240200528020041ffffff3f71450d002005417c6a28020010230b200541c0006a2105200941406a22090d000b0b410021200240201d41ffffff1f710d000c040b201a10230c030b200241f0026a41186a2116200241f0026a41106a211d200241f0026a41086a211941002115034020022802d004210702402005450d00200541d8006c21092007210503400240200541d0006a2d00000d0002400240200541206a2903002208200541286a290300220b8450450d0042002106427f2108427f210b0c010b427f210620024190016a427f427f2008200b10a70520024190016a41086a290300210b20022903900121080b200520083703002005200b370308200541106a2006370300200541186a20063703000b200541d8006a2105200941a87f6a22090d000b0b0240024020022802a8052205450d0020022802a005220a200541e0006c6a210d03400240200a2802382205450d00200541c8006c2107200a28023041206a2105034020022802d8042203200528020022094d0d04024020022802d004200941d8006c6a22092d00500d0020092903202206200941286a290300220884500d00200241d8016a200a290310200a41186a290300200a290300200a41086a29030020062008108201200920092903002206427f2006427f20022903e00120022802d80141014622031b220b7c22082008200654220c200941086a22012903002206427f200241d8016a41106a29030020031b22227c200cad7c220820065420082006511b22031b200b20228450220c1b37030020012006427f200820031b200c1b3703000b200541c8006a2105200741b87f6a22070d000b0b200a41e0006a220a200d470d000b20022802d00421070b201541016a211520022802d80441d8006c2105200741a87f6a210903402005450d04200541a87f6a2105200941d8006a2109200741d0006a210a200741d8006a22032107200a2d00000d000b02402005450d00200941186a2903002106200941106a2903002108200941086a290300210b200929030021224100210703400240200320076a220a41d0006a2d00000d00200a41086a2903002223200b2022200b20082006200a29030022242023200a41106a2903002225200a41186a290300221810800141ff0171410146220c1b210b20242022200c1b212220182006200c1b210620252008200c1b2108200a2009200c1b21090b2005200741d8006a2207470d000b0b2009450d03200941013a0050024020022802a8052205450d0020022802a0052207200541e0006c6a211e2009410c6a210f200941306a211f0340200741e0006a212102402007280238220a450d0020072802302105200a41c8006c210a034002400240200f2005460d00200541246a201f412010a3050d010b200741186a22032903002122200941086a220c29030021062007290310210b2009290300210820092903102123200541186a200941186a2201290300370300200541106a2023370300200520064200200620227d2008200b54ad7d22232008200b7d2224200856202320065620232006511b220d1b200b20228450220e1b3703082005200842002024200d1b200e1b370300200c2903002106200129030021082009290300210b20072009290310370320200741286a20083703002007200b370310200320063703000b200541c8006a2105200a41b87f6a220a0d000b0b202121072021201e470d000b0b2016200941c8006a290000370300201d200941c0006a2900003703002019200941386a290000370300200220092900303703f002200941286a29030021062009290320210802402028200228028405470d0020024180056a2028410110a401200228028005212020022802880521280b2020202841306c6a220520022903f0023703002019290300210b201d29030021222016290300212320052008370320200541286a2006370300200541186a2023370300200541106a2022370300200541086a200b3703002002202841016a222836028805201520294f0d0320022802d80421050c010b0b2009200341a4e4c4001030000b1032000b024020022802a8052205450d0020022802a0052215200541e0006c6a211d202841306c211e200241fc036a221641186a2119201641106a2129201641086a21274100211a034020162015221f29003c3700002019201f41d4006a2900003700002029201f41cc006a2900003700002027201f41c4006a290000370000200241003602f803200242043703f003201f41e0006a21150240201f2802382205450d00201f280230220d200541c8006c6a210f201f41106a2121410021014104210e0340200d220c41246a2107200c41c8006a210d4100210a201e210920202105024003402009450d01024020072005460d0020052007412010a3052103200a41016a210a200941506a2109200541306a210520030d010b0b418094ebdc03210902402021200c1081010d00410021050240200c290310201f29032085200c41186a290300201f41286a29030085844200520d00200241d8016a428094ebdc034200200c290300200c41086a2903002021290300202141086a290300108201427f20022903e00120022802d80141014622051b220842ffffffff0f56427f200241d8016a41106a29030020051b22064200522006501b0d012008a7220541ff93ebdc034b0d010b200521090b200241b0036a41186a2207200c413c6a290000370300200241b0036a41106a220a200c41346a290000370300200241b0036a41086a2203200c412c6a2900003703002002200c2900243703b0030240200120022802f403470d00200241f0036a2001410110a20120022802f003210e20022802f80321010b200e200141246c6a220520022903b00337020020032903002106200a29030021082007290300210b20052009360220200541186a200b370200200541106a2008370200200541086a20063702002002200141016a22013602f8030b200d200f470d000b02402001450d0002400240200141246c22070d00410021050c010b200e41206a2109410021050340417f200520092802006a220a200a2005491b2105200941246a21092007415c6a22070d000b0b02404100418094ebdc0320056b22052005418094ebdc034b1b220c20016e2205418094ebdc032005418094ebdc03491b2203450d004100210503402002417f200e200520017041246c6a2209280220220720036a220a200a2007491b22073602d8012002418094ebdc033602dc012009200241d8016a2007418094ebdc034b4102746a280200360220200541016a22052001490d000b0b0240200c200320016c6b2203450d004100210503402002417f200e200520017041246c6a2209280220220741016a220a200a2007491b22073602d8012002418094ebdc033602dc012009200241d8016a2007418094ebdc034b4102746a280200360220200541016a22052003490d000b0b200241d8016a41286a2209200241f0036a41286a280200360200200241d8016a41206a2207200241f0036a41206a290300370300200241d8016a41186a220a200241f0036a41186a290300370300200241d8016a41106a2203200241f0036a41106a290300370300200241d8016a41086a220c200241f0036a41086a290300370300200220022903f0033703d8010240201a200228029405470d0020024190056a201a410110a601200228029005212c200228029805211a0b202c201a412c6c6a220520022903d801370200200541286a2009280200360200200541206a2007290300370200200541186a200a290300370200200541106a2003290300370200200541086a200c2903003702002002201a41016a221a360298050c010b20022802f4032205450d00200541246c450d00200e10230b2015201d470d000b200228029405212b0b200228028405212d024020022802d4042205450d00200541d8006c450d0020022802d00410230b024020022802a8052205450d00200541e0006c210920022802a00541346a21050340024020052802002207450d00200741c8006c450d002005417c6a28020010230b200541e0006a2105200941a07f6a22090d000b0b024020022802a4052205450d00200541e0006c450d0020022802a00510230b200241c0056a10be010b024020200d00410321260c040b200241003602e001200242013703d801200241d8016a4100202841306c220741306e109a0120022802e00121210240024020070d0020022802d80121170c010b20022802d801221720214105746a210520202109034020052009290000370000200541186a200941186a290000370000200541106a200941106a290000370000200541086a200941086a290000370000202141016a2121200541206a2105200941306a2109200741506a22070d000b0b20023502dc01212e2002410036029805200242043703900520024190056a4100201a412c6c2205412c6d10a601202c20056a212a2002280298052128200228029005212f0240201a0d00202c21010c020b200241d8016a410c6a210f202f2028412c6c6a210d200241f0026a41106a211a200241d8016a410472211f200241f0036a41206a211b200241f0036a41186a2126200241f0036a41086a211c202c210103402001280200211e201b200141246a29020037030020262001411c6a290200370300200241f0036a41106a2205200141146a290200370300201c2001410c6a290200370300200220012902043703f0032001412c6a2101201e450d02201f20022903f003370200201f41086a201c290300370200201f41106a2005290300370200201f41186a2026290300370200201f41206a201b2903003702002002201e3602d80120024180016a200f10d30120024180016a41086a2903002108200229038001210b200241f0026a41186a22304200370300201a4200370300200241f0026a41086a22294200370300200242003703f00241bdadc500ad4280808080800184100c220529000021062029200541086a290000370300200220063703f0022005102341c5adc500ad4280808080d00184100c22052900002106200241d0046a41086a2215200541086a290000370300200220063703d00420051023201a20022903d004370000201a41086a2015290300370000200241b0036a41086a22162029290300370300200241b0036a41106a221d201a290300370300200241b0036a41186a22192030290300370300200220022903f0023703b003200241e8006a200241b0036a412010d701200241d8006a2002290370200241e8006a41106a290300427f420010a705200241c8006a200b200820022903584200200228026822051b220642012006420156200241d8006a41086a290300420020051b22064200522006501b22051b2006420020051b10a705200241a0056a41086a2231200f41086a290200370300200241a0056a41106a2232200f41106a290200370300200241a0056a41186a2233200f41186a2902003703002002200f2902003703a00520022802dc0121272002290348210802400240024020022802e00141246c2234450d0020342107201e21050340200541206a2802002109200241b0046a41186a220a200541186a290000370300200241b0046a41106a2203200541106a290000370300200241b0046a41086a220c200541086a290000370300200220052900003703b00420090d02200541246a21052007415c6a22070d000b0b42002106410021054108210e02402027450d00202741246c450d00201e1023420021060b4200210b410021150c010b200241386a20084200428094ebdc03420010a705200241286a20022903382223200241386a41086a29030022244280ec94a37c427f10a605200241186a202320242009ad2206420010a6052015200c290300370300200241d0046a41106a22092003290300370300200241d0046a41186a2235200a290300370300200220022903b004220b3703f0022002200b3703d0042006200820022903287c22187e2206428094ebdc0380210b20022903182122200241186a41086a290300212541301021220e450d02200e2022200ba7417f2006428080808080c0b2cd3b541b2006200b4280ec94a37c7e7c4280cab5ee01566aad7c2206370320200e20022903d004370300200e41286a20252006202254ad7c220b370300200e41186a2035290300370300200e41106a2009290300370300200e41086a201529030037030020024281808080103702c4052002200e3602c0050240024020074124470d00410121150c010b200541246a2135201e20346a2207415c6a21344101211503402035210502400340200541206a2802002109200a200541186a2900003703002003200541106a290000370300200c200541086a290000370300200220052900003703b00420090d012007200541246a2205470d000c030b0b200241086a202320242009ad2222420010a6052029200c2903002225370300201a200329030022363703002030200a2903002237370300200220022903b00422383703f00220192037370300201d203637030020162025370300200220383703b003200620022903082225202220187e2222428094ebdc03802236a7417f2022428080808080c0b2cd3b541b202220364280ec94a37c7e7c4280cab5ee01566aad7c22227c22362006542209200b200241086a41086a2903002022202554ad7c22257c2009ad7c2206200b542006200b511b21090240201520022802c405470d00200241c0056a2015410110a40120022802c005210e0b427f200620091b210b427f203620091b2106200541246a2135200e201541306c6a220920022903b00337030020162903002136201d29030021372019290300213820092022370320200941286a2025370300200941186a2038370300200941106a2037370300200941086a20363703002002201541016a22153602c80520342005470d000b0b02402027450d00202741246c450d00201e10230b20022802c40521050b02400240200820067d22232008564200200b2008200654ad7c7d22224200522022501b4101470d00200620087d2222200656200b2006200854ad7d2223200b56200620085a1b0d012015450d01201541306c200e6a41706a220942002009290300220620227d22082008200656200941086a2209290300220820237d2006202254ad7d220620085620062008511b22071b37030020094200200620071b3703000c010b2015450d00201541306c200e6a41706a2209427f2009290300220620237c220820082006542207200941086a2209290300220620227c2007ad7c220820065420082006511b22071b3703002009427f200820071b3703000b20192033290300370300201d203229030037030020162031290300370300200220022903a0053703b003200d2005360204200d2015360208200d200e360200200d20022903b00337020c200d41146a2016290300370200200d411c6a201d290300370200200d41246a2019290300370200202841016a2128200d412c6a210d2001202a470d000b20022028360298050c020b1033000b20022028360298052001202a460d00034020012205412c6a21010240200541046a2802002209450d00200941246c450d00200528020010230b202a2001470d000b0b0240202b450d00202b412c6c450d00202c10230b2002280294052103200241d8016a20172021202f202810d8010240024020022802d801220a0d00410021054100210a4100210c0c010b20022802e001210c0240024020022802dc0122090d00200a21050c010b20092105200a2107034020072802c80521072005417f6a22050d000b200a21050340200520052f01064102746a41c8056a28020021052009417f6a22090d000b2007210a0b20052f010621090b200241f4016a2009360200200241f0016a4100360200200241ec016a20053602002002200c3602f801200241003602e801200242003703e0012002200a3602dc01200241003602d8012021ad21062002200241c0026a3602fc01200241f0036a200241d8016a10d90120022802f003211b20022802f403211c20022802f803210a02402028450d002028412c6c2109202f210503400240200541046a2802002207450d00200741306c450d00200528020010230b2005412c6a2105200941546a22090d000b0b2006422086210602402003450d002003412c6c450d00202f10230b2006202e84212441002126202d450d00202d41306c450d00202010230b200241d8016a41186a22094200370300200241d8016a41106a22074200370300200241d8016a41086a22054200370300200242003703d801418fcdc200ad4280808080f000842208100c220c2900002106200241b0036a41086a2203200c41086a290000370300200220063703b003200c102320052003290300370300200220022903b0033703d80141b0e4c100ad4280808080b00184100c22012900002106200241f0036a41086a220c200141086a290000370300200220063703f00320011023201320022903f003370000201341086a200c290300370000200241a0056a41086a2005290300370300200241a0056a41106a2007290300370300200241a0056a41186a2009290300370300200220022903d8013703a0052014101141002101024020264103460d00200942003703002007420037030020054200370300200242003703d8012008100c220129000021062003200141086a290000370300200220063703b0032001102320052003290300370300200220022903b0033703d80141ccc5c000ad4280808080900284100c22032900002106200c200341086a290000370300200220063703f00320031023200420022903f003370000200441086a200c290300370000200241d0046a41086a2005290300370300200241d0046a41106a2007290300370300200241d0046a41186a2009290300370300200220022903d8013703d004410110212205450d02200541003a000020112005ad42808080801084100e2005102342002108200241d8016a41186a22284200370300200241d8016a41106a222a4200370300200241d8016a41086a22274200370300200242003703d801418fcdc200ad4280808080f000842206100c2205290000210b200241b0036a41086a2230200541086a2900003703002002200b3703b0032005102320272030290300370300200220022903b0033703d80141a8c5c000ad4280808080a00284100c2205290000210b200241f0036a41086a220e200541086a2900003703002002200b3703f00320051023200420022903f003370000200441086a2209200e290300370000200241d0046a41086a22212027290300370300200241d0046a41106a221e202a290300370300200241d0046a41186a22152028290300370300200220022903d8013703d0042011101120284200370300202a420037030020274200370300200242003703d8012006100c220529000021062030200541086a290000370300200220063703b0032005102320272030290300370300200220022903b0033703d80141bac5c000ad4280808080a00284100c22052900002106200e200541086a290000370300200220063703f00320051023200420022903f0033700002009200e29030037000020212027290300370300201e202a29030037030020152028290300370300200220022903d8013703d00420111011201b200a41d0006c6a2120024002400240200a0d00201b2101420021060c010b200241b0036a41106a211a200241f0026a41106a210f20024194036a2116200241d8016a41206a210d4200210842002106201b21010340200241f0036a41386a220a2001220541386a290300370300200241f0036a41306a2203200541306a290300370300200241f0036a41286a220c200541286a290300370300200241f0036a41206a221f200541206a290300370300200241f0036a41186a2209200541186a290300370300200241f0036a41106a2207200541106a290300370300200e200541086a2903003703002005290300210b20024190056a41086a221d200541cc006a2802003602002002200b3703f0032002200541c4006a29020037039005200541d0006a2101200541c0006a2802002205450d01200241d8016a41386a200a290300370300200241d8016a41306a2003290300370300200241d8016a41286a200c290300370300200d201f29030037030020282009290300370300202a20072903003703002027200e290300370300200220022903f0033703d801200241a0056a41186a2009290300370300200241a0056a41106a2007290300370300200241a0056a41086a200e290300370300200220022903f0033703a005200241f0026a41186a2219200d41186a290300370300200f200d41106a290300370300200241f0026a41086a2229200d41086a290300220b37030020022005360290032002200d29030022223703f0022016200229039005370200201641086a201d280200360200200241d0046a2010200241a0056a10da0120023502d804212320022802d004211f200241003602b803200242013703b0032002200241f0026a3602b004200241b0046a200241b0036a10db012002200f3602b004200241b0046a200241b0036a10db0120022802900321052002280298032209200241b0036a106102402009450d00200941306c210303400240024020022802b403220a20022802b80322096b4120490d0020022802b00321070c010b200941206a22072009490d07200a410174220c2007200c20074b1b220c4100480d0702400240200a0d000240200c0d00410121070c020b200c10212207450d0a0c010b20022802b0032107200a200c460d002007200a200c10252207450d090b2002200c3602b403200220073602b0030b200720096a2207200541106a290000370000200741186a200541286a290000370000200741106a200541206a290000370000200741086a200541186a2900003700002002200941206a3602b803200220053602b004200241b0046a200241b0036a10db01200541306a2105200341506a22030d000b0b20022802b40321052023422086201fad8420023502b80342208620022802b0032209ad84100e02402005450d00200910230b024020022802d404450d00201f10230b20152019290300370300201e200f29030037030020212029290300370300200220022903f0023703d004200228029c032107200228029403210a20022802900321090240200228029803220541c100490d0020092005410041202005676b10dc0141c00021050b200241b0036a41186a2015290300370300201a201e29030037030020302021290300370300200220022903d0043703b003200220073602dc03200220053602d8032002200a3602d403200220093602d003200241c0056a2010200241a0056a10dd0120023502c805212320022802c005211f200241003602b804200242013703b0042002200241b0036a3602800520024180056a200241b0046a10db012002201a3602800520024180056a200241b0046a10db0120022802d003210520022802d8032209200241b0046a106102402009450d00200941306c210303400240024020022802b404220a20022802b80422096b4120490d0020022802b00421070c010b200941206a22072009490d07200a410174220c2007200c20074b1b220c4100480d0702400240200a0d000240200c0d00410121070c020b200c10212207450d0a0c010b20022802b0042107200a200c460d002007200a200c10252207450d090b2002200c3602b404200220073602b0040b200720096a2207200541106a290000370000200741186a200541286a290000370000200741106a200541206a290000370000200741086a200541186a2900003700002002200941206a3602b804200220053602800520024180056a200241b0046a10db01200541306a2105200341506a22030d000b0b2006200b7c200820227c220b2008542205ad7c210820022802b40421092023422086201fad8420023502b80442208620022802b0042207ad84100e02402009450d00200710230b2008200651210920082006542107024020022802c405450d00201f10230b2005200720091b2105024020022802d4032209450d00200941306c450d0020022802d00310230b427f200820051b2106427f200b20051b210820012020470d000c020b0b20202001460d0003402001220541d0006a21010240200541c4006a2802002209450d00200941306c450d00200541c0006a28020010230b20202001470d000b0b0240201c450d00201c41d0006c450d00201b10230b200241f0036a201010ca0120022802f003210520023502f803210b200220063703e001200220083703d801200b4220862005ad8420124280808080800284100e024020022802f403450d00200510230b02402024422088a7410574220a450d00200241f0036aad210b201721050340200241d8016a200510c301200220022802d801220720022802e00110de012002280204410020022802001b2109024020022802dc01450d00200710230b200241d8016a2010200510df0120023502e001210620022802d8012107200241003a00f5030240024002400240200941c000490d00200941808001490d012009418080808004490d02200241053a00f503200241033a00f003200220093600f1034280808080d00021080c030b200241013a00f503200220094102743a00f00342808080801021080c020b200241023a00f503200220094102744101723b01f00342808080802021080c010b200241043a00f503200220094102744102723602f0034280808080c00021080b20064220862007ad842008200b84100e024020022d00f503450d00200241003a00f5030b024020022802dc01450d00200710230b200541206a2105200a41606a220a0d000b0b200241e1016a20263a0000200241e0016a41033a0000200241033a00d801200241d8016a10e001201721010b2000202437020420002001360200200241d0056a24000f0b102c000b102a000b8f0201037f230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b4100210120034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c20034180c5c6003602382003200341286a360248200341346a4184a5c200200341386a10311a2003350220422086200335021884100a0240200328021c450d00200328021810230b0b2005450d00200410230b2000200236020420002001360200200341d0006a24000bd81604027f017e077f017e230041d0006b22012400418fcdc200ad4280808080f00084100c22022900002103200141086a200241086a29000037030020012003370300200210234186d0c000ad4280808080b00184100c22022900002103200141106a41086a200241086a29000037030020012003370310200210232001200036022c20012001412c6aad22034280808080c00084100d220229000037033020021023200141c4006a200141306a360200200141003a00482001200141306a41086a220436023c20012001412c6a3602402001200141306a360238200141206a200141386a106502400240024002402001280228220541206a2206417f4c0d00200128022021070240024002402006450d00200610212202450d042006410f4d0d01200621080c020b200641017422024110200241104b1b2208102122020d010c050b200641017422084110200841104b1b22084100480d0320062008460d0020022006200810252202450d040b20022001290300370000200241086a200141086a2903003700000240024020084170714110460d00200821090c010b200841017422094120200941204b1b22094100480d0320082009460d0020022008200910252202450d040b20022001290310370010200241186a200141106a41086a2903003700000240200941606a20054f0d00200541206a22082005490d032009410174220a2008200a20084b1b22084100480d0320092008460d0020022009200810252202450d040b200241206a2007200510a1051a02402001280224450d00200710230b2006ad4220862002ad84101220021023418fcdc200ad4280808080f00084100c2202290000210b200141086a200241086a2900003703002001200b3703002002102341f4cfc000ad4280808080a00284100c2202290000210b200141106a41086a200241086a2900003703002001200b370310200210232001200036022c200120034280808080c00084100d220229000037033020021023200141c4006a200141306a360200200141003a00482001200436023c20012001412c6a3602402001200141306a360238200141206a200141386a10652001280228220941206a2206417f4c0d00200128022021070240024002402006450d00200610212202450d042006410f4d0d01200621080c020b200641017422024110200241104b1b220810212202450d050c010b200641017422084110200841104b1b22084100480d0320062008460d0020022006200810252202450d040b20022001290300370000200241086a200141086a2903003700000240024020084170714110460d00200821050c010b200841017422054120200541204b1b22054100480d0320082005460d0020022008200510252202450d040b20022001290310370010200241186a200141106a41086a2903003700000240200541606a20094f0d002009415f4b0d03200541017422082006200820064b1b22084100480d0320052008460d0020022005200810252202450d040b200241206a2007200910a1051a02402001280224450d00200710230b2006ad4220862002ad84101220021023418fcdc200ad4280808080f00084100c2202290000210b200141086a200241086a2900003703002001200b3703002002102341e2cfc000ad4280808080a00284100c2202290000210b200141106a41086a200241086a2900003703002001200b370310200210232001200036022c200120034280808080c00084100d220229000037033020021023200141c4006a200141306a360200200141003a00482001200436023c20012001412c6a3602402001200141306a360238200141206a200141386a10652001280228220941206a2206417f4c0d00200128022021070240024002402006450d00200610212202450d042006410f4d0d01200621080c020b200641017422024110200241104b1b220810212202450d050c010b200641017422084110200841104b1b22084100480d0320062008460d0020022006200810252202450d040b20022001290300370000200241086a200141086a2903003700000240024020084170714110460d00200821050c010b200841017422054120200541204b1b22054100480d0320082005460d0020022008200510252202450d040b20022001290310370010200241186a200141106a41086a2903003700000240200541606a20094f0d002009415f4b0d03200541017422082006200820064b1b22084100480d0320052008460d0020022005200810252202450d040b200241206a2007200910a1051a02402001280224450d00200710230b2006ad4220862002ad84101220021023418fcdc200ad4280808080f00084100c2202290000210b200141086a200241086a2900003703002001200b3703002002102341fecec000ad4280808080b00284100c2202290000210b200141106a41086a200241086a2900003703002001200b370310200210232001200036022c200120034280808080c00084100d220229000037033020021023200141c4006a200141306a360200200141003a00482001200436023c20012001412c6a3602402001200141306a360238200141206a200141386a10652001280228220941206a2206417f4c0d00200128022021070240024002402006450d00200610212202450d042006410f4d0d01200621080c020b200641017422024110200241104b1b220810212202450d050c010b200641017422084110200841104b1b22084100480d0320062008460d0020022006200810252202450d040b20022001290300370000200241086a200141086a2903003700000240024020084170714110460d00200821050c010b200841017422054120200541204b1b22054100480d0320082005460d0020022008200510252202450d040b20022001290310370010200241186a200141106a41086a2903003700000240200541606a20094f0d002009415f4b0d03200541017422082006200820064b1b22084100480d0320052008460d0020022005200810252202450d040b200241206a2007200910a1051a02402001280224450d00200710230b2006ad4220862002ad84101120021023200141386a200010b801200135024042208620012802382202ad8410110240200128023c450d00200210230b418fcdc200ad4280808080f00084100c2202290000210b200141086a200241086a2900003703002001200b370300200210234191cfc000ad4280808080e00184100c2202290000210b200141106a41086a200241086a2900003703002001200b370310200210232001200036022c200120034280808080c00084100d220229000037033020021023200141c4006a200141306a360200200141003a00482001200436023c20012001412c6a3602402001200141306a360238200141206a200141386a10652001280228220541206a2206417f4c0d00200128022021090240024002402006450d00200610212202450d042006410f4d0d01200621040c020b200641017422024110200241104b1b220410212202450d050c010b200641017422044110200441104b1b22044100480d0320062004460d0020022006200410252202450d040b20022001290300370000200241086a200141086a2903003700000240024020044170714110460d00200421080c010b200441017422084120200841204b1b22084100480d0320042008460d0020022004200810252202450d040b20022001290310370010200241186a200141106a41086a2903003700000240200841606a20054f0d002005415f4b0d03200841017422042006200420064b1b22044100480d0320082004460d0020022008200410252202450d040b200241206a2009200510a1051a02402001280224450d00200910230b2006ad4220862002ad84101120021023200141386a200010c201200135024042208620012802382202ad8410110240200128023c450d00200210230b200141d0006a24000f0b1032000b1033000b102c000b102a000ba20401097f230041e0006b220224002002200110880102400240024002402002280200450d00200041003602000c010b2002280204220320012802044105762204200420034b1b22044105742205417f4c0d010240024020040d00410121060c010b200510212206450d030b41002107200241003602102002200436020c20022006360208024002402003450d0041002108034041002105200241003a0058200841016a21082001280204417f6a210403402004417f460d03200241386a20056a200128020022092d00003a0000200120043602042001200941016a3602002002200541016a22093a00582004417f6a21042009210520094120470d000b200241186a41186a2205200241386a41186a290300370300200241186a41106a2209200241386a41106a290300370300200241186a41086a220a200241386a41086a2903003703002002200229033837031802402007200228020c470d00200241086a20074101109a0120022802082106200228021021070b200620074105746a22042002290318370000200441186a2005290300370000200441106a2009290300370000200441086a200a2903003700002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b0240200541ff0171450d00200241003a00580b20004100360200200228020c41ffffff3f71450d00200610230b200241e0006a24000f0b1032000b1033000b990707017f047e027f017e057f047e017f23004190026b22022400200241c0006a200110800202400240024002400240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a20011080022002290328a70d03200241286a41106a290300210520022903302106200241206a200110880120022802200d0220022802242207200128020441306e2208200820074b1bad42307e2209422088a7450d010c060b200041003602200c040b2009a72208417f4c0d040240024020080d004108210a0c010b20081021220a450d030b4100210b200241003602602002200a3602582002200841306e36025c0240024002402007450d004100210c03404100210d200241003a008802200c41016a210c2001280204417f6a210803402008417f460d03200241e8016a200d6a2001280200220e2d00003a0000200120083602042001200e41016a3602002002200d41016a220e3a0088022008417f6a2108200e210d200e4120470d000b200241c8016a41186a2208200241e8016a41186a290300370300200241c8016a41106a220d200241e8016a41106a290300370300200241c8016a41086a220e200241e8016a41086a290300370300200220022903e8013703c801200241086a20011080022002290308a70d03200241086a41106a29030021092002290310210f20024188016a41086a200e290300221037030020024188016a41106a200d290300221137030020024188016a41186a20082903002212370300200241e8006a41086a220d2010370300200241e8006a41106a220e2011370300200241e8006a41186a22132012370300200220022903c801221037038801200220103703680240200b200228025c470d00200241d8006a200b410110a4012002280258210a2002280260210b0b200a200b41306c6a220820093703082008200f37030020082002290368370310200841186a200d290300370300200841206a200e290300370300200841286a20132903003703002002200b41016a220b360260200c2007470d000b0b200a450d02200229025c210920002004370300200020093702242000200a3602202000200637031020002003370308200041186a20053703000c050b200d41ff0171450d00200241003a0088020b20024188016a41086a200241a8016a41086a290300370300200228025c2201450d00200141306c450d00200a10230b200041003602200c020b200041003602200c010b1033000b20024190026a24000f0b1032000bbd0101047f230041106b220224002000280204210320002802002100410121042001280218419b9ec00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41e0e4c200105a1a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d0020022802002200280218419a9ec00041012000411c6a28020028020c11000021040b200241106a240020040b8a0604057f017e047f037e230041f0006b22022400200241286a200141146a350200422086200135020c841019108b010240024020022802282203450d00200141086a2104200141106a210503400240024020042802002206200229022c2207422088a722084b0d00200128020022092003460d0120092003200610a305450d010b2007a7450d02200310230c020b02402005280200450d00200128020c10230b2001200336020c2005200737020020022003200810de01024002402002280200450d002002280204210a024020012d0018450d002001350214422086200135020c8410110b2001280214220820042802002203490d0102400240200820036b22084108490d00200841786a2106200128020c20036a41086a21090c010b4100210602404100280298ab470d00419ca8c70021090c010b41002106410028028880402103410028028480402108410028029cab47210b200241e000360268200242de80808010370360200241c79ec00036025c20024213370254200241b49ec00036025020024200370348419ca8c70021092002419ca8c70036024420024201370338200241ac9ec00036023420024113360230200241b49ec00036022c20024101360228200841a0a1c000200b410246220b1b200241286a200341b8a1c000200b1b2802101102000b41002103200241003a00480240034020062003460d01200241286a20036a200920036a2d00003a00002002200341016a22083a00482008210320084120470d000b200241086a41186a200241286a41186a2903002207370300200241086a41106a200241286a41106a290300220c370300200241086a41086a200241286a41086a290300220d37030020022002290328220e3703082000411c6a2007370000200041146a200c3700002000410c6a200d3700002000200e370004200041246a200a360200200041013602000c050b200341ff0171450d00200241003a00480b200241286a2001350214422086200135020c841019108b01200228022822030d010c020b0b2003200841dc96c7001044000b200041003602000b200241f0006a24000bf10804047f017e027f017e230041e0016b22022400200241d0016a200110c701200241c8006a20022802d001220120022802d80110e101200241286a41086a2203200241d1006a290000370300200241286a41106a2204200241d9006a290000370300200241286a41186a2205200241e1006a29000037030020022002290049370328024002400240024002400240024002400240024020022d00484101470d00200241086a41186a2005290300370300200241086a41106a2004290300370300200241086a41086a200329030037030020022002290328370308024020022802d401450d00200110230b200241c8006a41186a2203200241086a41186a290300370300200241c8006a41106a2204200241086a41106a290300370300200241c8006a41086a2205200241086a41086a29030037030020022002290308370348418fcdc200ad4280808080f00084100c22012900002106200241a0016a41086a200141086a290000370300200220063703a0012001102341dcc4c000ad4280808080e00084100c22012900002106200241b0016a41086a200141086a290000370300200220063703b00120011023412010212201450d0120012002290348370000200141186a2003290300370000200141106a2004290300370000200141086a20052903003700002001ad4280808080800484100f22032900002106200241d0016a41086a200341086a290000370300200220063703d00120031023200241346a200141206a360200200241003a0038200220013602302002200241d0016a41106a36022c2002200241d0016a360228200241c0016a200241286a10652001102320022802c801220741206a2203417f4c0d0220022802c0012108024002402003450d00200310212201450d032003410f4d0d01200321040c060b200341017422014110200141104b1b2204102122010d050c0a0b200341017422044110200441104b1b220441004e0d030c080b20022802d401450d04200110230c040b1033000b1032000b20032004460d0020012003200410252201450d050b200120022903a001370000200141086a200241a0016a41086a2903003700000240024020044170714110460d00200421050c010b200441017422054120200541204b1b22054100480d0420042005460d0020012004200510252201450d050b200120022903b001370010200141186a200241b0016a41086a2903003700000240200541606a20074f0d002007415f4b0d04200541017422042003200420034b1b22044100480d0420052004460d0020012005200410252201450d050b200141206a2008200710a1051a024020022802c401450d00200810230b200241c8006a2001200310e201200241c8006a41186a2903002106200241f8006a2802002105200241f4006a280200210720022903582109200228026c2104200228026821032001102320030d010b42002109420021060c010b02402004450d00200441186c450d00200310230b200541ffffffff0371450d00200710230b2000200937030020002006370308200241e0016a24000f0b102c000b102a000b860908097f017e0c7f017e017f017e017f047e23004180026b22022400200241186a41186a200141186a280200360200200241186a41106a200141106a290200370300200241186a41086a200141086a29020037030020022001290200370318200241f8006a200241186a10f203024020022d00a8014102460d00200041046a21030340200241b0016a41286a200241f8006a41286a280200360200200241b0016a41206a200241f8006a41206a2201290300370300200241b0016a41186a2204200241f8006a41186a2205290300370300200241b0016a41106a2206200241f8006a41106a2207290300370300200241b0016a41086a2208200241f8006a41086a2209290300370300200220022903783703b0012001280200210a0240200229029c01220b422088a7220c450d0020022802a401210d4100210e200a21014100210f024002400340200220013602dc01200241e0016a200241dc016a10c801024002400240024020022802ec012210450d0020022802e8012111024020022802f00141ffffffff0371450d00201010230b2011200d4b0d010b200e0d014100210e0c020b200e41016a210e0c010b200f200e6b2210200c4f0d02200241e0016a41186a22112001200e4105746b221041186a2212290000370300200241e0016a41106a2213201041106a2214290000370300200241e0016a41086a2215201041086a2216290000370300200220102900003703e001200141086a22172900002118200141106a2219290000211a200141186a221b290000211c201020012900003700002012201c3700002014201a37000020162018370000201b20112903003700002019201329030037000020172015290300370000200120022903e0013700000b200141206a2101200c200f41016a220f460d020c000b0b2010200c4184d9c4001030000b200e417f6a200c4f0d00200b42ffffffff0f83200c200e6bad42208684210b0b200241d8006a41186a22012004290300370300200241d8006a41106a220e2006290300370300200241d8006a41086a220f2008290300370300200220022903b001370358200a450d01200520012903003703002007200e2903003703002009200f29030037030020022002290358370378200241086a200241f8006a10d301200241386a41186a20012903002218370300200241386a41106a200e290300221a370300200241386a41086a200f290300221c37030020022002290358221d370338200241086a41086a290300211e2002290308211f200520183703002007201a3703002009201c3703002002201d3703780240200041086a220f280200220e2003280200470d002000200e4101109f010b2000280200200e4106746a2201201e3703082001201f370300200120022903783703102001200a360230200141186a2009290300370300200141206a2007290300370300200141286a2005290300370300200141346a200b370200200f200e41016a360200200241f8006a200241186a10f20320022d00a8014102470d000b0b0240200228021c450d00200228021810230b0240200241286a280200450d00200228022410230b20024180026a24000bf70c01087f230041c0046b22032400200341206a41186a200141186a290000370300200341206a41106a200141106a290000370300200341206a41086a200141086a290000370300200320012900003703200240024002400240024020002802002204450d00200028020421050c010b4100210520034180016a410041e00210a0051a200341f8006a22014100360200200341f0006a22064200370300200341d0006a41186a4200370300200341d0006a41106a4200370300200341d0006a41086a42003703002003420037035041940310212204450d01200441003b010620044100360200200441086a20034180016a41e00210a1051a20044190036a200128020036020020044188036a200629030037020020044180036a200341e8006a290300370200200441f8026a200341e0006a290300370200200441f0026a200341d0006a41086a290300370200200420032903503702e80220004100360204200020043602000b2003200036025820032004360254200320053602500240034020042f01062207410574210841002101410021060240024002400240034020082001460d010240200341206a200420016a41086a412010a30522090d0041002101200521090c030b200141206a2101200641016a21062009417f4a0d000b2006417f6a21070b20050d014101210141002109200721060b20034180016a41106a20063602002003418c016a200036020020034180016a41086a20043602002003200036025820032004360254200320053602502003200936028401200320013602800102402001450d00200341186a2201200341206a41186a2207290300370300200341106a2208200341206a41106a290300370300200341086a2205200341206a41086a290300370300200320032903203703002000200028020841016a3602082003200636024c200320003602482003200436024420032009360240200341d0006a41186a2001290300370300200341d0006a41106a2008290300370300200341d0006a41086a20052903003703002003200329030037035020034180016a200341c0006a200341d0006a200210b40420032d0080014101470d04200341206a41086a220520034189016a290000370300200341206a41106a220020034191016a290000370300200720034199016a2900003703002003200329008101370320200341ac016a2802002106200341b8016a2802002108200341b4016a2802002109200341b0016a2802002104200341a8016a28020022012802002207450d0220012f01042102200341a4016a280200210a20034180016a410172210103402003200241ffff037136024c20032006360248200320073602442003200a41016a360240200341d0006a41186a200341206a41186a2206290300370300200341d0006a41106a2000290300370300200341d0006a41086a20052903003703002003200329032037035020034180016a200341c0006a200341d0006a20042009200810b50420032d0080014101470d052005200141086a2900003703002000200141106a2900003703002006200141186a2900003703002003200129000037032020032802ac01210620032802b801210820032802b401210920032802b001210420032802a80122022802002207450d0320022f0104210220032802a401210a0c000b0b200420064102746a41e8026a20023602000c030b2005417f6a2105200420074102746a4194036a28020021040c010b0b20034180016a410272410041be0310a0051a41c40310212201450d0120014100360200200141046a20034180016a41c00310a1051a200120062802002205360294032006200136020020062006280204220041016a360204200541003b01042005200136020020034180016a41186a200341206a41186a29030037030020034180016a41106a200341206a41106a29030037030020034180016a41086a200341206a41086a290300370300200320032903203703800120002008470d0220012f01062206410a4b0d03200120064105746a220841206a20034180016a41186a290300370000200841186a20034180016a41106a290300370000200841106a20034180016a41086a290300370000200841086a200329038001370000200120064102746a41e8026a20043602002001200641016a22064102746a4194036a2009360200200120063b0106200920063b0104200920013602000b200341c0046a24000f0b102a000b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000b9711080f7f027e047f017e057f027e057f017e230041a0026b22022400200141086a280200210320012802042104200028020421052000280200210602400240024020002802082207200028020c2208460d00200041146a28020021092001280200210a2000280210210b200241f0016a41106a210c0340200241f0006a41086a2201200741186a290300370300200241f0006a41106a220d200741206a290300370300200241f0006a41186a220e200741286a29030037030020022007290310370370200741c0006a210f0240200728023022100d00200f21070c020b200741086a2903002111200741386a280200210020072903002112200741346a280200211320024190016a41186a2214200e29030037030020024190016a41106a2215200d29030037030020024190016a41086a2216200129030037030020022002290370370390012000ad42c8007e2217422088a70d032017a72207417f4c0d030240024020070d00410821180c010b200710212218450d030b200741c8006e21190240024020000d004100211a0c010b201020004105746a211b4100211a2010211c0340201c41086a2900002117201c41106a290000211d201c290000211e200241b0016a41186a221f201c41186a290000370300200241b0016a41106a2220201d370300200241b0016a41086a222120173703002002201e3703b0010240200b280200220e450d00200b28020421220340200e41086a2100200e2f010622234105742107410021010240024003402007450d01200241b0016a2000412010a305220d450d02200741606a2107200141016a2101200041206a2100200d417f4a0d000b2001417f6a21230b2022450d022022417f6a2122200e20234102746a4194036a280200210e0c010b0b02400240024002402009280208220d200e20014102746a41e8026a220728020022004d0d002009280200200041d8006c6a22002903202117200041286a290300211d200241f0016a41186a22014200370300200c4200370300200241f0016a41086a22004200370300200242003703f00141bdadc500ad4280808080800184100c220d290000211e2000200d41086a2900003703002002201e3703f001200d102341c5adc500ad4280808080d00184100c220d290000211e20024190026a41086a220e200d41086a2900003703002002201e37039002200d1023200c200229039002370000200c41086a200e290300370000200241d0016a41086a2000290300370300200241d0016a41106a200c290300370300200241d0016a41186a2001290300370300200220022903f0013703d001200241d8006a200241d0016a412010d701200241c8006a2002290360200241d8006a41106a290300427f420010a7052009280208220e2007280200220d4d0d01200241386a20122011200229034842002002280258220e1b221e4201201e420156200241c8006a41086a2903004200200e1b221e420052201e501b220e1b201e4200200e1b10a7052009280200200d41d8006c6a220d41286a427f201d201720022903387c221e201754220ead7c2224200e2024201d54201e20175a1b220e1b370300200d427f201e200e1b3703202001201f290300370300200c202029030037030020002021290300370300200220022903b0013703f0012007280200210d201a2019470d03024002400240201a41016a2207201a490d00201a410174220e2007200e20074b1bad42c8007e2217422088a70d002017a722074100480d000240201a0d0020070d02410821180c060b201a41c8006c220e2007460d050240200e0d0020070d02410821180c060b2018200e200710252218450d020c050b102c000b2007102122180d030b102a000b2000200d41e4d8c4001030000b200d200e41f4d8c4001030000b200741c8006e21190b2018201a41c8006c6a220742003703002007200d360220200741186a4200370300200741106a4200370300200741086a4200370300200720022903f0013702242007412c6a2000290300370200200741346a200c2903003702002007413c6a2001290300370200201a41016a211a0b201c41206a221c201b470d000b0b0240201341ffffff3f71450d00201010230b200241f0016a41186a22074200370300200c4200370300200241f0016a41086a22004200370300200242003703f00141bdadc500ad4280808080800184100c220129000021172000200141086a290000370300200220173703f0012001102341c5adc500ad4280808080d00184100c2201290000211720024190026a41086a220d200141086a290000370300200220173703900220011023200c200229039002370000200c41086a200d290300370000200241d0016a41086a2000290300370300200241d0016a41106a200c290300370300200241d0016a41186a2007290300370300200220022903f0013703d001200241206a200241d0016a412010d701200241106a2002290328200241206a41106a290300427f420010a70520022012201120022903104200200228022022011b221742012017420156200241106a41086a290300420020011b22174200522017501b22011b2017420020011b10a705200020162903002217370300200c2015290300370300200720142903003703002002200229039001221d3703f001200a4200370310200a41186a4200370300200a4200370308200a41286a4200370300200a4201370320200a201a360238200a2019360234200a2018360230200a201d37023c200a41c4006a2017370200200a41cc006a200c290300370200200a41d4006a2007290300370200200a2002290300370300200341016a2103200a41e0006a210a200f2107200f2008470d000b200821070b200420033602000240200820076b2200450d0020004106754106742100200741346a210703400240200728020041ffffff3f71450d002007417c6a28020010230b200741c0006a2107200041406a22000d000b0b0240200541ffffff1f71450d00200610230b200241a0026a24000f0b1033000b1032000ba80202017f037e230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c20034180c5c6003602382003200341286a360248200341346a4184a5c200200341386a10311a2003350220422086200335021884100a0240200328021c450d00200328021810230b420021040b2002450d00200110230b2000200637030820002004370300200041106a2005370300200341d0006a24000ba628030d7f047e1d7f230022052106200541e00b6b41607122072400200741003602182007410036021002400240024002402002450d00200120024105746a2108200741e0056a41027221094100210a034020074200370348200742003703402007410036025820074208370350200741a8026a41186a220b200141186a290000370300200741a8026a41106a220c200141106a290000370300200741a8026a41086a220d200141086a290000370300200720012900003703a80202400240200a450d002007280214210e0c010b200741e0056a410041e00210a0051a200741f8026a410041e00210a0051a41c8051021220a450d054100210e200a41003b0106200a4100360200200a41086a200741e0056a41e00210a1051a200a41e8026a200741f8026a41e00210a1051a200741003602142007200a3602100b200141206a21010240024002400240024002400340200a41086a2105200a2f0106220f410574210241002110024003402002450d01200741a8026a2005412010a3052211450d03200241606a2102201041016a2110200541206a21052011417f4a0d000b2010417f6a210f0b0240200e450d00200e417f6a210e200a200f4102746a41c8056a280200210a0c010b0b200741f0006a41186a2202200b290300370300200741f0006a41106a200c2903002212370300200741f0006a41086a200d2903002213370300200720072903a80222143703702007200728021841016a360218200c2012370300200d2013370300200b2002290300370300200720143703a80220072903582112200729035021132007290348211420072903402115200a2f01062205410b490d01200741e0056a410041e00210a0051a200741f8026a410041e00210a0051a41c80510212216450d0a201641003b010620164100360200201641086a200741e0056a41e00210a1052105201641e8026a200741f8026a41e00210a1052110200741e0056a41086a2217200a41b0046a290300370300200741e0056a41106a2218200a41b8046a290300370300200741e0056a41186a2219200a41c0046a2903003703002007200a41db016a2900003703e0022007200a41e0016a2900003700e5022007200a41a8046a2903003703e0052007200a41c8016a2f00003b01f4022007200a41ca016a2d00003a00f602200a41cb016a280000211a200a41cf016a280000211b200a41d3016a280000211c200a41d7016a280000211d2005200a41e8016a200a2f010641796a2202410574221110a10521052010200a41c8046a201110a1052110200a41063b0106201620023b0106200720072f01f4023b01dc02200720072d00f6023a00de02200720072903e0023703c802200720072900e5023700cd02200741f8026a41186a221e2019290300370300200741f8026a41106a221f2018290300370300200741f8026a41086a22202017290300370300200720072903e0053703f80202400240200f4107490d002005200f41057441c07e6a220e6a2005200f41796a2211410574220f6a2205200241ffff037120116b41057410a2051a200541186a200b290300370000200541106a200c290300370000200541086a200d290300370000200520072903a8023700002010200e6a2010200f6a2205201641066a22022f010020116b41057410a2051a200541186a20123703002005201337031020052014370308200520153703000c010b200a41086a2202200f410574221041206a22116a200220106a2205200a41066a22022f0100200f6b41057410a2051a200541186a200b290300370000200541106a200c290300370000200541086a200d290300370000200520072903a802370000200a41e8026a220520116a200520106a220520022f0100200f6b41057410a2051a200541186a20123703002005201337031020052014370308200520153703000b200220022f010041016a3b010020074190026a41026a220220072d00de023a0000200741d8016a41086a22212020290300370300200741d8016a41106a2222201f290300370300200741d8016a41186a2223201e290300370300200720072f01dc023b019002200720072903c8023703c801200720072900cd023700cd01200720072903f8023703d801200741a4016a41026a222420022d00003a0000200720072f0190023b01a401200720072900cd0137009501200720072903c80137039001200741a8016a41186a22252023290300370300200741a8016a41106a22262022290300370300200741a8016a41086a22272021290300370300200720072903d8013703a8010240200a280200220e0d0041002128200741106a21020c040b200a2f01042129410021280340200741a4026a41026a222a20242d00003a0000200720072f01a4013b01a402200720072903900137039002200720072900950137009502200b2025290300370300200c2026290300370300200d2027290300370300200720072903a8013703a80241000d03202941ffff0371210a024002400240200e2f01062202410b490d002009410041f20510a0051a41f80510212211450d0e20114100360200201141046a200741e0056a41f40510a1051a2007200e2f00c8013b01f4022007200e41ca016a2d00003a00f6022007200e41db016a2900003703e0022007200e41e0016a2900003700e502200e41cb016a280000212b200e41cf016a280000212c200e41d3016a280000212d200e41d7016a280000212e2019200e41c0046a2903003703002018200e41b8046a2903003703002017200e41b0046a2903003703002007200e2903a8043703e005201141086a200e41e8016a200e2f0106220241796a2205410574221010a105212f201141e8026a200e41c8046a201010a1052130201141c8056a200e41e4056a2002417a6a220f41027410a1052131200e41063b0106201120053b01060240200f450d00410021022031210503402005280200221020023b010420102011360200200541046a2105200f200241016a2202470d000b0b201e2019290300370300201f201829030037030020202017290300370300200720072903e0053703f802200720072f01f4023b01dc02200720072d00f6023a00de02200720072903e0023703c802200720072900e5023700cd02200741dc056a41026a220f20072d00de023a0000200720072f01dc023b01dc05200720072903c8023703c801200720072900cd023700cd012019201e2903003703002018201f29030037030020172020290300370300200720072903f8023703e005202941ffff037122054107490d01202f200a417a6a221041057422296a202f200a41796a220241057422326a220520112f010620026b41057410a2051a200541186a2007290095023700002005201d36000f2005201c36000b2005201b3600072005201a360003200541026a202a2d00003a0000200520072f01a4023b00002005200729039002370013203020296a203020326a220520112f0106222920026b41057410a2051a200541186a200b290300370300200541106a200c290300370300200541086a200d290300370300200520072903a8023703002011202941016a22053b0106200a410274221a20316a416c6a203120104102746a2229200541ffff0371220a20106b41027410a2051a20292016360200200a2010490d022011201a6a41b0056a2105034020052802002210200241016a22023b010420102011360200200541046a21052002200a490d000c030b0b200e41086a2205200a41016a221041057422116a2005200a410574220f6a22052002200a6b410574221710a2051a2005201d36000f2005201c36000b2005201b3600072005201a360003200541026a202a2d00003a0000200520072f01a4023b00002005200729039002370013200541186a200729009502370000200e41e8026a220520116a2005200f6a2205201710a2051a200541186a200b290300370300200541106a200c290300370300200541086a200d290300370300200520072903a802370300200e200241016a22023b0106200a410274200e41c8056a22056a41086a200520104102746a2205200241ffff037120106b41027410a2051a20052016360200200a200e2f010622024f0d07201620103b01042016200e360200201020024f0d072002417f6a2111200e2010417f6a22024102746a41d0056a2105034020052802002210200241026a3b01042010200e360200200541046a21052011200241016a2202470d000c080b0b200e41086a2202200a41016a221041057422296a2002200a41057422316a2202200e2f0106222f200a6b410574223010a2051a2002201d36000f2002201c36000b2002201b3600072002201a360003200241026a202a2d00003a0000200220072f01a4023b00002002200729039002370013200241186a200729009502370000200e41e8026a220220296a200220316a2202203010a2051a200241186a200b290300370300200241106a200c290300370300200241086a200d290300370300200220072903a802370300200e202f41016a22023b0106200a4102742231200e41c8056a22296a41086a202920104102746a2229200241ffff037120106b41027410a2051a202920163602002005200e2f010622104f0d00200e20316a41cc056a2102034020022802002205200a41016a220a3b01042005200e360200200241046a21022010200a470d000b0b202841016a21282007418c026a41026a2202200f2d00003a0000202120172903003703002022201829030037030020232019290300370300200720072f01dc053b018c02200720072903c8013703f801200720072900cd013700fd01200720072903e0053703d801202420022d00003a0000200720072f018c023b01a401200720072900fd0137009501200720072903f80137039001202520232903003703002026202229030037030020272021290300370300200720072903d8013703a8010240200e28020022020d00200741106a2102202b211a202e211d202d211c202c211b201121160c050b200e2f01042129202b211a202e211d202d211c202c211b2002210e201121160c000b0b200a20104105746a22024180036a2205290300211320052007290358370300200241f8026a2205290300211220052007290350370300200241f0026a2205290300211420052007290348370300200241e8026a2202290300211520022007290340370300200720133703f805200720123703f005200720143703e805200720153703e0052012a72202450d0420072802f4052205450d04200541306c450d04200210230c040b200a41086a2202200f410574221041206a22116a200220106a22022005200f6b41057410a2051a200241186a200b290300370000200241106a200c290300370000200241086a200d290300370000200220072903a802370000200a41e8026a220220116a200220106a2202200a2f0106200f6b41057410a2051a200241186a2012370300200220133703102002201437030820022015370300200a200a2f010641016a3b0106200741003602f0050c030b41ecdbc4004135418c94c700102d000b2009410041f20510a0051a41f80510212205450d0620054100360200200541046a200741e0056a41f40510a1051a2005200228020022103602c8052002200536020020022002280204221141016a360204201041003b010420102005360200200741a8026a41026a220a20242d00003a0000200720072f01a4013b01a80220072007290390013703f80220072007290095013700fd02201920252903003703002018202629030037030020172027290300370300200720072903a8013703e00520112028470d0520052f01062210410a4b0d04200520104105746a2202410a6a200a2d00003a0000200241086a20072f01a8023b0000200241176a201d360000200241136a201c3600002002410f6a201b3600002002410b6a201a3600002002411b6a20072903f802370000200241206a20072900fd02370000200241e8026a20072903e005370300200241f0026a2017290300370300200241f8026a201829030037030020024180036a20192903003703002005201041016a22024102746a41c8056a2016360200200520023b0106201620023b0104201620053602000b200741003602f0050b20012008460d012007280210210a0c000b0b0240024020040d004100210d0c010b20032004412c6c6a21184100210d034020032202412c6a21030240200228020841306c2205450d002002280200220a20056a21172002410c6a210c0340200a41306a210b0240024002402007280210220e450d00200728021421010340200e41086a2105200e2f0106220f410574210241002110024003402002450d01200a2005412010a3052211450d04200241606a2102201041016a2110200541206a21052011417f4a0d000b2010417f6a210f0b2001450d012001417f6a2101200e200f4102746a41c8056a280200210e0c000b0b417f200d41016a22022002200d491b210d0c010b200e20104105746a220241e8026a2205427f20052903002212200a2903207c221320132012542205200241f0026a22102903002212200a41286a22112903007c2005ad7c221320125420132012511b22051b3703002010427f201320051b370300200c2900002112200741e0056a41086a220e200c41086a290000370300200741e0056a41106a2201200c41106a290000370300200741e0056a41186a220f200c41186a290000370300200720123703e00520112903002112200a2903202113200241f8026a2111024020024180036a22052802002210200241fc026a280200470d0020112010410110a401200528020021100b2011280200201041306c6a220220072903e00537030020022013370320200241186a200f290300370300200241106a2001290300370300200241086a200e290300370300200241286a20123703002005200528020041016a3602000b200b210a200b2017470d000b0b20032018470d000b0b200020072903103702002000200d36020c200041086a200741106a41086a280200360200200624000f0b41dcd9c4004127418c94c700102d000b4183dac4004130418c94c700102d000b102a000b841205077f017e057f017e087f230041a0026b2202240002400240024002400240024002400240024020012802202203450d0020012003417f6a220436022020012802042205450d022001280208210620012802002107024002402001410c6a280200220820052f01064f0d00200521030c010b034002400240200528020022030d002006ad2109410021030c010b200741016a210720053301044220862006ad8421090b200510232009a72106200321052009422088a7220820032f01064f0d000b0b20024190016a41186a220a200320084105746a220541206a29000037030020024190016a41106a220b200541186a29000037030020024190016a41086a220c200541106a2900003703002002200541086a29000037039001200541f8026a280200210d200241f0016a41086a220e20054184036a2802003602002002200541fc026a2902003703f001200841016a2108200541f0026a2903002109200541e8026a290300210f02402007450d00200320084102746a41c8056a2802002103410021082007417f6a2205450d00034020032802c80521032005417f6a22050d000b0b200241186a41186a200a290300370300200241186a41106a200b290300370300200241186a41086a200c29030037030020024190026a41086a200e2802003602002002200229039001370318200220022903f001370390022001200836020c200120063602082001200336020420014100360200200d0d010b20024180016a41003602000c060b200241b8016a2009370300200241c0016a200d360200200241c4016a20022903900237020020024190016a41186a200241186a41186a29030037030020024190016a41106a200241186a41106a29030037030020024190016a41086a200241186a41086a290300370300200241cc016a20024190026a41086a2802003602002002200f3703b0012002200229031837039001200241c0006a200141246a20024190016a10910220024180016a280200450d0520024190016a200241c0006a41d00010a1051a417f200441016a220320032004491bad42d0007e2209422088a70d012009a72203417f4c0d01200310212210450d02201020024190016a41d00010a1052105200241013602102002200341d0006e36020c20022005360208200241186a41206a200141206a2902002209370300200241186a41186a200141186a290200370300200241186a41106a200141106a290200370300200241186a41086a200141086a29020037030020022001290200370318024002402009a72203450d0020022003417f6a220d360238200228021c2205450d05200228022021062002280218210702400240200241246a280200220820052f01064f0d00200521030c010b034002400240200528020022030d002006ad2109410021030c010b200741016a210720053301044220862006ad8421090b200510232009a72106200321052009422088a7220820032f01064f0d000b0b20024190016a41186a2201200320084105746a220541206a29000037030020024190016a41106a220b200541186a29000037030020024190016a41086a220c200541106a2900003703002002200541086a29000037039001200541f8026a280200210a20024190026a41086a220e20054184036a2802003602002002200541fc026a29020037039002200841016a2108200541f0026a2903002109200541e8026a290300210f02402007450d00200320084102746a41c8056a2802002103410021082007417f6a2205450d00034020032802c80521032005417f6a22050d000b0b200241f0016a41186a2001290300370300200241f0016a41106a200b290300370300200241f0016a41086a200c290300370300200241e0016a41086a200e28020036020020022002290390013703f00120022002290390023703e00120022008360224200220063602202002200336021c20024100360218200a450d002002413c6a2111200241c4016a2104200241b8016a2112410121010340200420022903e0013702002012200937030020024190016a41186a220b200241f0016a41186a221329030037030020024190016a41106a220c200241f0016a41106a221429030037030020024190016a41086a220e200241f0016a41086a2215290300370300200441086a200241e0016a41086a22162802003602002002200f3703b001200220022903f001370390012002200a3602c001200241c0006a201120024190016a109102200228028001450d0220024190016a200241c0006a41d00010a1051a02402001200228020c470d00200241086a2001417f200d41016a22052005200d491b10b401200228020821100b2010200141d0006c6a20024190016a41d00010a1051a2002200141016a2201360210200d450d012002200d417f6a220d3602382003450d074100210702400240200820032f01064f0d00200321050c010b41002107034002400240200328020022050d002006ad2109410021050c010b200741016a210720033301044220862006ad8421090b200310232009a72106200521032009422088a7220820052f01064f0d000b0b200b200520084105746a220341206a290000370300200c200341186a290000370300200e200341106a2900003703002002200341086a29000037039001200341f8026a280200210a20024190026a41086a221720034184036a2802003602002002200341fc026a29020037039002200841016a2108200341f0026a2903002109200341e8026a290300210f0240024020070d00200521030c010b200520084102746a41c8056a2802002103410021082007417f6a2205450d00034020032802c80521032005417f6a22050d000b0b2013200b2903003703002014200c2903003703002015200e2903003703002016201728020036020020022002290390013703f00120022002290390023703e00120022008360224200220063602202002200336021c20024100360218200a0d000b0b20024100360280010b200241186a10a602200041086a200241086a41086a280200360200200020022903083702000c060b41d095c700412b41c491c700102d000b1032000b1033000b41d095c700412b41c491c700102d000b41d095c700412b41c491c700102d000b2000410036020820004208370200200110a6020b200241a0026a24000baa0703027f017e067f230041e0006b22032400418fcdc200ad4280808080f00084100c22042900002105200341086a200441086a29000037030020032005370300200410234186d0c000ad4280808080b00184100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023200320013602302003200341306aad4280808080c00084100d220429000037034020041023200341d4006a2201200341346a360200200341003a00582003200341c0006a41086a220636024c2003200341306a3602502003200341c0006a360248200341206a200341c8006a1065024002400240024002400240412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad4280808080800484100d2202290000370340200210232001200441206a360200200341003a0058200320043602502003200636024c2003200341c0006a360248200341306a200341c8006a1065200410232003280228220741206a2201200328023822086a2202417f4c0d01200328023021092003280220210a024002402002450d00200210212204450d022002410f4d0d01200221060c050b200241017422044110200441104b1b2206102122040d040c060b200241017422064110200641104b1b220641004e0d020c040b1033000b1032000b20022006460d0020042002200610252204450d020b20042003290300370000200441086a200341086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062001200620014b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620016b2008490d002006210b0c010b200120086a2001490d012006410174220b2002200b20024b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420016a2009200810a1051a200020023602082000200b3602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000ba50403017f027e027f230041e0006b220224000240024020002802002200290300220342c000544100200041086a29030022045022051b0d0002400240024020034280800154410020051b0d00200342808080800454410020051b0d01411020047920037942c0007c20044200521ba741037622056b4104490d022002413320054102746b3a00482001200241c8006a41011062200029030021032002200041086a290300220437030820022003370300200541706a21000340200220033c00482001200241c8006a410110622003420888200442388684210320044208882104200041016a22052000492106200521002006450d000b20022003370300200220043703082003200484500d04200241286a41146a410b360200200241346a410c360200200241106a41146a410336020020022002360240200241f8e5c200360244200241c8006a41146a4100360200200242033702142002418ca7c7003602102002410c36022c2002419ca8c7003602582002420137024c200241b0e5c2003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a419ca8c700103a000b20022003a74102744101723b01482001200241c8006a410210620c030b20022003a74102744102723602482001200241c8006a410410620c020b41f0e4c2004136418c94c700102d000b20022003a74102743a00482001200241c8006a410110620b200241e0006a24000bf12c080a7f017e017f047e147f017e017f017e230041d0026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d0020002001109f042003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00410241012000200a41306c6a220d290300220e200d41506a220f290300221056200d41086a2903002211200f41086a29030022125620112012511b220f1b200f200d41306a29030022132010200e200f1b221056200d41386a290300220e20122011200f1b221156200e2011511b22141b2013201020141b2000200a200a417f6a2215200f1b221641306c6a220d29030056200e201120141b2211200d41086a29030022125620112012511b22176a2000200c41306c6a220d290300220e200d41506a2218290300221056200d41086a2903002211201841086a29030022125620112012511b22186a2000200c410172221941306c6a220d29030022132010200e20181b221056200d41086a290300220e2012201120181b221156200e2011511b221a6a20132010201a1b2000200c200c417f6a221b20181b221c41306c6a220d29030056200e2011201a1b2211200d41086a29030022125620112012511b221d6a2000200b41306c6a220d290300220e200d41506a221e290300221056200d41086a2903002211201e41086a29030022125620112012511b221e6a200d41306a29030022132010200e201e1b221056200d41386a290300220e20122011201e1b221156200e2011511b221f6a20132010201f1b2000200b200b417f6a2220201e1b222141306c6a220d29030056200e2011201f1b2211200d41086a29030022125620112012511b22066a210d2021200b41016a2020200b201e1b201f1b20061b210b201c2019201b200c20181b201a1b201d1b210c2016200a41016a2015200a200f1b20141b20171b210a0b200d2000200c41306c6a220f290300220e2000200a41306c6a2218290300221056200f41086a2903002211201841086a29030022125620112012511b220f6a2000200b41306c6a220d29030022132010200e200f1b221056200d41086a290300220e20122011200f1b221156200e2011511b220d6a211820132010200d1b2000200c200a200f1b222141306c6a221e29030058200e2011200d1b2211201e41086a29030022125820112012511b450d01200b200a200c200f1b200d1b21210c020b2000200110a0040c0f0b201841016a2218410c490d0002402001410176220b450d002000200141306c6a41506a210a2000210c0340200441a0026a41286a220f200c41286a220d290300370300200441a0026a41206a2218200c41206a221e290300370300200441a0026a41186a2214200c41186a221a290300370300200441a0026a41106a221f200c41106a2215290300370300200441a0026a41086a2216200c41086a22172903003703002004200c2903003703a002200a41086a22192903002111200a41106a221b2903002112200a41186a221c290300210e200a41206a221d2903002110200a41286a22202903002113200c200a290300370300200d2013370300201e2010370300201a200e37030020152012370300201720113703002020200f290300370300201d2018290300370300201c2014290300370300201b201f29030037030020192016290300370300200a20042903a002370300200c41306a210c200a41506a210a200b417f6a220b0d000b0b20012021417f736a21214101210a0c010b201845210a0b0240200a452009724101710d002000200110a1040d0d0b2002450d02202120014f0d01024020022903002000202141306c6a220a29030056200241086a2903002211200a41086a220c29030022125620112012511b450d0020002108200121070c040b200441a0026a41286a221a200041286a2218290300370300200441a0026a41206a221f200041206a221e290300370300200441a0026a41186a2215200041186a2214290300370300200441a0026a41106a2216200041106a220b290300370300200441a0026a41086a2217200041086a220f290300370300200420002903003703a002200c2903002111200a41106a220d2903002112200a41186a2219290300210e200a41206a221b2903002110200a41286a221c29030021132000200a29030037030020182013370300201e20103703002014200e370300200b2012370300200f2011370300201c201a290300370300201b201f29030037030020192015290300370300200d2016290300370300200c2017290300370300200a20042903a002370300200f29030021112000290300210e200441186a221c2018290300370300200441106a221d201e290300370300200441086a222020142903003703002004200b290300370300200041506a2119200041306a211b4100210c2001210b03400240200c200b417f6a220f4f0d00201b200c41306c6a210a0340200e200a290300582011200a41086a29030022125820112012511b450d01200a41306a210a200f200c41016a220c470d000b200f210c0b2019200b41306c6a210a02400340200c200b417f6a220b4f0d01200a2903002112200a41086a210f200a41506a220d210a200e2012562011200f29030022125620112012511b0d000b201a201b200c41306c6a220a41286a220f290300370300201f200a41206a22212903003703002015200a41186a22062903003703002016200a41106a22222903003703002017200a41086a22232903003703002004200a2903003703a002200d41386a22242903002112200d41c0006a22252903002110200d41c8006a22262903002113200d41d0006a22272903002128200d41d8006a2229290300212a200a200d41306a220d290300370300200f202a370300202120283703002006201337030020222010370300202320123703002029201a2903003703002027201f290300370300202620152903003703002025201629030037030020242017290300370300200d20042903a002370300200c41016a210c0c010b0b2000200e370300200020113703082000200429030037031020142020290300370300201e201d2903003703002018201c29030037030002402001200c41016a220a490d002000200a41306c6a21002001200a6b220141154f0d010c0c0b0b200a200141e8c5c4001044000b2021200141ccc6c4001030000b2007450d010b202120074f0d01200441a0026a41286a2217200841286a2222290300370300200441a0026a41206a2219200841206a2223290300370300200441a0026a41186a221b200841186a2224290300370300200441a0026a41106a221c200841106a2225290300370300200441a0026a41086a221d200841086a2226290300370300200420082903003703a0022008202141306c6a220a41086a220c2903002111200a41106a220b2903002112200a41186a220f290300210e200a41206a220d2903002110200a41286a220029030021132008200a29030037030020222013370300202320103703002024200e370300202520123703002026201137030020002017290300370300200d2019290300370300200f201b290300370300200b201c290300370300200c201d290300370300200a20042903a0023703002026290300211120082903002112200441186a22272022290300370300200441106a22292023290300370300200441086a2205202429030037030020042025290300370300200841306a2101410021212007417f6a220f450d022001210a0340200a290300201256200a41086a290300220e201156200e2011511b450d03200a41306a210a200f202141016a2221470d000b200f21210c020b410041004184d9c4001030000b2021200741f8c5c4001030000b2008200741306c6a210a200f210b02400340200a2100200b220c20214d22060d01200c417f6a210b200041506a220a290300201258200a41086a290300220e201158200e2011511b0d000b0b0240200c2021490d00200f200c490d0241800121154100210d4100211a4100210f4100211441800121162001202141306c6a220921010340200020016b220a41306e210c0240200a41afe0004b22200d00200c41807f6a200c201a200d492014200f49220b7222181b210a02402018450d002016200a200b1b2116200a2015200b1b21150c010b200a200a41017622166b21150b02402014200f470d00024020160d00200441206a220f21140c010b4100210c200441206a2214210f2001210a0340200f200c3a0000200f410041014102200a2903002210201285200a41086a290300220e20118584501b2010201254200e201154200e2011511b1b4102744198c6c4006a2802006a210f200a41306a210a2016200c41016a220c470d000b0b0240201a200d470d00024020150d00200441a0016a220d211a0c010b200041506a210a4100210c200441a0016a221a210d0340200d200c3a0000200d410041014102200a2903002210201285200a41086a290300220e20118584501b2010201254200e201154200e2011511b1b41027441a4c6c4006a2802006a210d200a41506a210a2015200c41016a220c470d000b0b0240200d201a6b220a200f20146b220c200c200a4b1b221f450d002017200120142d000041306c6a220a41286a2903003703002019200a41206a290300370300201b200a41186a290300370300201c200a41106a290300370300201d200a41086a2903003703002004200a2903003703a002200120142d000041306c6a220a2000201a2d0000417f7341306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a2903003703000240201f4101460d004100210b03402000201a200b6a22182d0000417f7341306c6a220a20012014200b6a41016a221e2d000041306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a2903003703002001201e2d000041306c6a220a2000201841016a2d0000417f7341306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a290300370300200b41026a210a200b41016a220c210b200a201f490d000b201a200c6a211a2014200c6a21140b2000201a2d0000417f7341306c6a220a20042903a002370300200a41286a2017290300370300200a41206a2019290300370300200a41186a201b290300370300200a41106a201c290300370300200a41086a201d290300370300201a41016a211a201441016a21140b2001201641306c6a20012014200f461b21012000410020156b41306c6a2000201a200d461b210020200d000b024002402014200f4f0d002000210a034020172001200f417f6a220f2d000041306c6a220c41286a220b2903003703002019200c41206a220d290300370300201b200c41186a2200290300370300201c200c41106a2218290300370300201d200c41086a221e2903003703002004200c2903003703a002200a41506a220a41086a221a290300210e200a41106a221f2903002110200a41186a22152903002113200a41206a22162903002128200a41286a2220290300212a200c200a290300370300200b202a370300200d20283703002000201337030020182010370300201e200e37030020202017290300370300201620192903003703002015201b290300370300201f201c290300370300201a201d290300370300200a20042903a0023703002014200f490d000c020b0b2001210a201a200d4f0d000340200d417f6a220d2d0000210c2017200a41286a220b2903003703002019200a41206a220f290300370300201b200a41186a2201290300370300201c200a41106a2218290300370300201d200a41086a221e2903003703002004200a2903003703a0022000200c417f7341306c6a220c41086a2214290300210e200c41106a221f2903002110200c41186a22152903002113200c41206a22162903002128200c41286a2220290300212a200a200c290300370300200b202a370300200f20283703002001201337030020182010370300201e200e37030020202017290300370300201620192903003703002015201b290300370300201f201c2903003703002014201d290300370300200c20042903a002370300200a41306a210a201a200d490d000b0b2008201137030820082012370300200820042903003703102024200529030037030020232029290300370300202220272903003703002007200a20096b41306e20216a22014d0d032017202229030037030020192023290300370300201b2024290300370300201c2025290300370300201d2026290300370300200420082903003703a0022008200141306c6a220a41086a220c2903002111200a41106a220b2903002112200a41186a220f290300210e200a41206a220d2903002110200a41286a220029030021132008200a29030037030020222013370300202320103703002024200e370300202520123703002026201137030020002017290300370300200d2019290300370300200f201b290300370300200b201c290300370300200c201d290300370300200a20042903a002370300200720016b220c450d04200c20012001200c4b1b210b2007410376210f200a41306a2100024002402001200c417f6a220c490d002000200c200a200310dc01200821000c010b200820012002200310dc01200a2102200c21010b200b200f4f2105200141154f0d010c050b0b2021200c4188c6c4001044000b200c200f4188c6c4001043000b2001200741f8c5c4001030000b41b0c6c400411c418c94c700102d000b20014102490d00200041a07f6a210d410021184101210c0340200c41016a210f02402000200c41306c6a220b290300220e200b41506a220a29030058200b41086a221e2903002211200a41086a221429030022125820112012511b0d00200441186a221a200b41286a221f290300370300200441106a2215200b41206a2216290300370300200441086a2217200b41186a22192903003703002004200b290310370300200b200a290300370300201e2014290300370300200b41106a200a41106a2903003703002019200a41186a2903003703002016200a41206a290300370300201f200a41286a2903003703002000200c417f6a221e41306c6a211402400240201e0d004100211e0c010b2018210c200d210a200e200b41a07f6a220b290300582011200b41086a29030022125820112012511b0d00024002400340200a4188016a200a41d8006a290300370300200a4180016a200a41d0006a290300370300200a41f8006a200a41c8006a290300370300200a41f0006a200a41c0006a290300370300200a41e8006a200a41386a290300370300200a41e0006a200a41306a290300370300200c4101460d01200a2903002112200a41086a210b200c417f6a210c200a41506a210a200e2012562011200b29030022125620112012511b0d000c020b0b4100210c0b2000200c41306c6a2114200c211e0b2014200e370300201420113703082000201e41306c6a220a41286a201a290300370300200a41206a2015290300370300200a41186a2017290300370300200a20042903003703100b201841016a2118200d41306a210d200f210c200f2001470d000b0b200441d0026a24000baa0703027f017e067f230041e0006b22032400418fcdc200ad4280808080f00084100c22042900002105200341086a200441086a290000370300200320053703002004102341f4cfc000ad4280808080a00284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023200320013602302003200341306aad4280808080c00084100d220429000037034020041023200341d4006a2201200341346a360200200341003a00582003200341c0006a41086a220636024c2003200341306a3602502003200341c0006a360248200341206a200341c8006a1065024002400240024002400240412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad4280808080800484100d2202290000370340200210232001200441206a360200200341003a0058200320043602502003200636024c2003200341c0006a360248200341306a200341c8006a1065200410232003280228220741206a2201200328023822086a2202417f4c0d01200328023021092003280220210a024002402002450d00200210212204450d022002410f4d0d01200221060c050b200241017422044110200441104b1b2206102122040d040c060b200241017422064110200641104b1b220641004e0d020c040b1033000b1032000b20022006460d0020042002200610252204450d020b20042003290300370000200441086a200341086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062001200620014b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620016b2008490d002006210b0c010b200120086a2001490d012006410174220b2002200b20024b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420016a2009200810a1051a200020023602082000200b3602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000bac0201037f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00410021020c010b200328021421042003200341186a280200360224200320013602202003200341206a1088010240024020032802000d0020032802042105410121020c010b4100210220034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b0b2004450d00200110230b2000200536020420002002360200200341e0006a24000baa0703027f017e067f230041e0006b22032400418fcdc200ad4280808080f00084100c22042900002105200341086a200441086a290000370300200320053703002004102341e2cfc000ad4280808080a00284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023200320013602302003200341306aad4280808080c00084100d220429000037034020041023200341d4006a2201200341346a360200200341003a00582003200341c0006a41086a220636024c2003200341306a3602502003200341c0006a360248200341206a200341c8006a1065024002400240024002400240412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad4280808080800484100d2202290000370340200210232001200441206a360200200341003a0058200320043602502003200636024c2003200341c0006a360248200341306a200341c8006a1065200410232003280228220741206a2201200328023822086a2202417f4c0d01200328023021092003280220210a024002402002450d00200210212204450d022002410f4d0d01200221060c050b200241017422044110200441104b1b2206102122040d040c060b200241017422064110200641104b1b220641004e0d020c040b1033000b1032000b20022006460d0020042002200610252204450d020b20042003290300370000200441086a200341086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062001200620014b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620016b2008490d002006210b0c010b200120086a2001490d012006410174220b2002200b20024b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420016a2009200810a1051a200020023602082000200b3602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000b8b1606047f017e027f017e0a7f027e230041c0036b22012400200141b0026a41186a4200370300200141b0026a41106a22024200370300200141b0026a41086a22034200370300200142003703b00241e4dec400ad4280808080e00084100c22042900002105200141a0036a41086a2206200441086a290000370300200120053703a0032004102320032006290300370300200120012903a0033703b00241f3dec400ad4280808080e00084100c220429000021052006200441086a290000370300200120053703a00320041023200220012903a003220537030020014190026a41086a200329030037030020014190026a41106a200537030020014190026a41186a2006290300370300200120012903b00237039002200141086a20014190026a412010cd010240024002400240024002400240024002400240024002402001280208450d00200128020c450d00200141b0026a41186a22044200370300200141b0026a41106a22074200370300200141b0026a41086a22034200370300200142003703b00241e4dec400ad4280808080e000842208100c22092900002105200141a0036a41086a2206200941086a290000370300200120053703a0032009102320032006290300370300200120012903a0033703b00241d483c500ad4280808080e00184100c220929000021052006200941086a290000370300200120053703a00320091023200220012903a003370000200241086a220a200629030037000020014190026a41086a220b200329030037030020014190026a41106a220c200729030037030020014190026a41186a220d2004290300370300200120012903b002370390022001412036028c03200120014190026a36028803200141b0026a20014190026aad428080808080048422051010108b010240024020012802b002220e0d00410321090c010b20012802b402210f02400240024020032802002210450d00200e2d0000221141024b0d00410121090240024020110e03000401000b2010417f6a4104490d01200e2800012112410021090c030b410221090c010b20014100360218200142013703102001410a3602a403200120014188036a3602a0032001200141106a3602f002200141a4016a4101360200200142013702940120014180c5c600360290012001200141a0036a3602a001200141f0026a4184a5c20020014190016a10311a2001350218422086200135021084100a02402001280214450d00200128021010230b410321090b0b200f450d00200e10230b200141106a200041e80010a1051a2001410036029801200142013703900120014190016a41004100109a0120032001280298012200360200200141fc006a201236020020014188016a2000360200200120012903900122133703b00220014102200920094103461b3602782001201337038001200442003703002007420037030020034200370300200142003703b0022008100c220029000021082006200041086a290000370300200120083703a0032000102320032006290300370300200120012903a0033703b00241e481c500ad4280808080a001842213100c220029000021082006200041086a290000370300200120083703a00320001023200220012903a003370000200a2006290300370000200b2003290300370300200c2007290300370300200d2004290300370300200120012903b00237039002200120014190026a412010cd012001280204410020012802001b220641016a22072006490d01200141b0026a41186a22044200370300200141b0026a41106a22004200370300200141b0026a41086a22034200370300200142003703b00241e4dec400ad4280808080e000842208100c22092900002114200141a0036a41086a2206200941086a290000370300200120143703a0032009102320032006290300370300200120012903a0033703b0022013100c220929000021132006200941086a290000370300200120133703a00320091023200220012903a003370000200241086a2209200629030037000020014190026a41086a2212200329030037030020014190026a41106a220a200029030037030020014190026a41186a220b2004290300370300200120012903b002370390022001200736029001200520014190016aad4280808080c00084100e20014190016a200141106a41800110a1051a200442003703002000420037030020034200370300200142003703b0022008100c220729000021082006200741086a290000370300200120083703a0032007102320032006290300370300200120012903a0033703b00241c0e3c400ad4280808080e00084100c220729000021082006200741086a290000370300200120083703a00320071023200220012903a0033700002009200629030037000020122003290300370300200a2000290300370300200b2004290300370300200120012903b0023703900220014188036a20051010108b01024002402001280288030d00200142003702a403200141083602a003410410212202450d04200142043702b402200120023602b0024100200141b0026a1061200141d8026a20012802b802360200200120012903b0023703d002200141a0036a10af040c010b200141d0026a41086a20014188036a41086a28020036020020012001290388033703d0020b200141e0026a41086a200141d0026a41086a2802002202360200200120012903d0023703e002024002402002450d00200141b0026a20012802e00220024101107520012802b0024101470d0120012802e402450d0c20012802e00210230c0c0b4101200141e0026a106120014190016a200141e0026a10b7040c090b20012802b40221040240200141bc026a2802002202200141b0026a41086a2802002206460d0020012802e802200220066b6a220341046a2200417f4c0d040240024020000d00410121070c010b200010212207450d040b200120003602f402200120073602f002200120033602f8022001200141f0026a3602b0022004200141b0026a200210b20320032002490d0520012802f80222042003490d0620012802e80222042006490d0720012802f002210020012802e00221072001200320026b2203360280032001200420066b22043602840320032004470d08200020026a200720066a200310a1051a20014190016a200141f0026a10b70420012802f802210620012802f402210320012802f002210220012802e402450d0a20012802e00210230c0a0b2001200141e0026a3602b0022004200141b0026a200610b20320014190016a200141e0026a10b7040c080b200010b8040c0a0b200141106a10b80420014184016a28020041ffffff3f71450d0920012802800110230c090b1033000b1032000b2002200341c494c6001044000b2003200441c494c6001043000b2006200441d494c6001044000b200141a0036a41146a410b360200200141ac036a410d36020020014188036a41146a4103360200200120014180036a3602b803200120014184036a3602bc03200141b0026a41146a41003602002001420337028c032001418ca7c700360288032001410d3602a4032001419ca8c7003602c002200142013702b402200141e0a7c7003602b0022001200141a0036a360298032001200141b0026a3602b0032001200141bc036a3602a8032001200141b8036a3602a00320014188036a419ca8c700103a000b20012802e802210620012802e402210320012802e00221020b2002450d0020052006ad4220862002ad84100e02402003450d00200210230b20014190016a10b80420014184026a28020041ffffff3f71450d0120012802800210230c010b20014190016a10b80420014184026a28020041ffffff3f71450d0020012802800210230b200141c0036a24000bd50302047f047e230041f0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022040d00200041003a00000c010b200341186a28020021052003280214210641002101200341003a006802400240034020052001460d01200341c8006a20016a200420016a2d00003a00002003200141016a22023a00682002210120024120470d000b200341206a41186a200341c8006a41186a2903002207370300200341206a41106a200341c8006a41106a2903002208370300200341206a41086a200341c8006a41086a290300220937030020032003290348220a370320200041196a2007370000200041116a2008370000200041096a20093700002000200a370001410121010c010b0240200141ff0171450d00200341003a00680b4100210120034100360228200342013703202003410a3602442003200341086a3602402003200341206a36026c200341dc006a41013602002003420137024c20034180c5c6003602482003200341c0006a360258200341ec006a4184a5c200200341c8006a10311a2003350228422086200335022084100a2003280224450d00200328022010230b200020013a00002006450d00200410230b200341f0006a24000bd20804047f047e047f047e230041d0016b220324002003200236024420032001360240200341c8006a2002ad4220862001ad841010108b0102400240200328024822040d00200041003602200c010b200328024c21052003200341d0006a280200220636027c2003200436027841002101200341003a00c8010240024002400240024002400240024002400240034020062001460d01200341a8016a20016a200420016a22022d00003a00002003200241016a3602782003200141016a22023a00c8012002210120024120470d000b20034188016a41086a200341a8016a41086a29030037030020034188016a41106a200341a8016a41106a29030037030020034188016a41186a200341a8016a41186a290300370300200320032903a801370388012003200620026b36027c200341286a200341f8006a1080022003290328a70d08200341286a41106a290300210720032903302108200341106a200341f8006a1080022003290310a70d08200341106a41106a29030021092003290318210a200341a8016a200341f8006a10b20420032802a8012202450d08200341b0016a280200210b20032802ac012101200341086a200341f8006a10880120032802080d07200328027c220c200328020c4102742206490d072006417f4c0d0320060d014101210d0c020b2003410036027c200141ff0171450d07200341003a00c8010c070b20061027220d450d02200d2003280278220e200610a1051a2003200c20066b36027c2003200e20066a3602780b200d450d0402402006ad220f422086200f84220f422088a722060d00200fa721060c030b0240200d2006724103710d00200fa722064103710d002006410276220c450d03200f422288a7210e0c040b200fa7450d04200d10230c040b1032000b1033000b4100210e02402006450d00200d10230b4100210c4104210d0b41000d00200d450d00200341d8006a41186a20034188016a41186a290300220f370300200341d8006a41106a20034188016a41106a2903002210370300200341d8006a41086a20034188016a41086a290300221137030020032003290388012212370358200041186a20093703002000200a3703102000200737030820002008370300200041346a200e360200200041306a200c3602002000412c6a200d360200200041286a200b3602002000200136022420002002360220200041386a2012370300200041c0006a2011370300200041c8006a2010370300200041d0006a200f3703000c020b2001450d00200141186c450d00200210230b200341003602900120034201370388012003410a36025c2003200341c0006a360258200320034188016a36028401200341bc016a4101360200200342013702ac0120034180c5c6003602a8012003200341d8006a3602b80120034184016a4184a5c200200341a8016a10311a20033502900142208620033502880184100a0240200328028c01450d0020032802880110230b200041003602200b2005450d00200410230b200341d0016a24000b883510047f017e017f017e017f017e057f017e097f017e037f017e017f017e0a7f077e23004190026b22012400200141a0016a41186a22024200370300200141a0016a41106a22034200370300200141a0016a41086a22044200370300200142003703a001418fcdc200ad4280808080f000842205100c2206290000210720014180016a41086a2208200641086a2900003703002001200737038001200610232004200829030037030020012001290380013703a00141b8dbc100ad42808080809001842207100c220629000021092008200641086a29000037030020012009370380012006102320032001290380012209370300200141286a41086a220a2004290300370300200141286a41106a220b2009370300200141286a41186a220c2008290300370300200120012903a001370328200141a0016a200141286a10ba012003280200210d20012903a0012109200242003703002003420037030020044200370300200142003703a0012005100c220629000021052008200641086a2900003703002001200537038001200610232004200829030037030020012001290380013703a0012007100c220629000021052008200641086a29000037030020012005370380012006102320032001290380012205370300200a2004290300370300200b2005370300200c2008290300370300200120012903a00137032802400240410410212208450d0020084100200d41016a20094202511b220e36000020084104410810252208450d0041002102200841003a0004200141286aad220f42808080808004842008ad4280808080d00084100e20081023200141a0016a41186a220a4200370300200141a0016a41106a220b4200370300200141a0016a41086a22044200370300200142003703a001418fcdc200ad4280808080f00084100c2206290000210520014180016a41086a2208200641086a2900003703002001200537038001200610232004200829030037030020012001290380013703a00141dce0c100ad4280808080a00184100c220629000021052008200641086a2900003703002001200537038001200610232003200129038001370000200341086a2008290300370000200141286a41086a2004290300370300200141286a41106a200b290300370300200141286a41186a200a290300370300200120012903a001370328200141e0006a200141286a10e401024002400240200128026022100d0020014100360220200142043703180c010b20012902642105200120103602182001200537021c2005422088a722082005a72202470d010b200141186a2002410110a50120012802182110200128022021080b201020084103746a220420003602042004200e3602002001200841016a22113602200240024002400240200e411d4f0d00201121120c010b024020110d0041002112200141003602200c010b200e41646a2104200841ffffffff017141016a2106410021132010210802400340200828020020044f0d01200841086a21082006201341016a2213470d000b0b0240024020112013490d0041002112200141003602202013450d0120134103742114200141fc016aad4280808080c00084210520014180026a211520014180026a41086a21162010210c0340200c280200210d418fcdc200ad4280808080f000842207100c22082900002109200141e0006a41086a2202200841086a290000370300200120093703602008102341ecc4c000ad4280808080b00284100c2208290000210920014180016a41086a2200200841086a2900003703002001200937038001200810232001200d3602fc0120012005100d22082900003703800220081023200141003a00b001200120153602ac01200120163602a4012001200141fc016a3602a801200120014180026a3602a001200141286a200141a0016a10652001280230220a41206a2204417f4c0d07200128022821170240024002402004450d00200410212208450d072004410f4d0d01200421060c020b200441017422084110200841104b1b2206102122080d010c080b200441017422064110200641104b1b22064100480d0620042006460d0020082004200610252208450d070b20082001290360370000200841086a20022903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d062006200b460d0020082006200b10252208450d070b2008200129038001370010200841186a20002903003700000240200b41606a200a4f0d00200a41206a2206200a490d06200b41017422182006201820064b1b22064100480d06200b2006460d002008200b200610252208450d070b200841206a2017200a10a1051a0240200128022c450d00201710230b2004ad4220862008ad841012200810232007100c220829000021072002200841086a290000370300200120073703602008102341ffc4c000ad4280808080b00284100c220829000021072000200841086a2900003703002001200737038001200810232001200d3602fc0120012005100d22082900003703800220081023200141003a00b001200120153602ac01200120163602a4012001200141fc016a3602a801200120014180026a3602a001200141286a200141a0016a10652001280230220a41206a2204417f4c0d072001280228210b0240024002402004450d00200410212208450d072004410f4d0d01200421060c020b200441017422084110200841104b1b220610212208450d080c010b200441017422064110200641104b1b22064100480d0620042006460d0020082004200610252208450d070b20082001290360370000200841086a20022903003700000240024020064170714110460d00200621020c010b200641017422024120200241204b1b22024100480d0620062002460d0020082006200210252208450d070b2008200129038001370010200841186a20002903003700000240200241606a200a4f0d00200a415f4b0d06200241017422062004200620044b1b22064100480d0620022006460d0020082002200610252208450d070b200841206a200b200a10a1051a0240200128022c450d00200b10230b200c41086a210c2004ad4220862008ad84101220081023201441786a22140d000c020b0b20132011103c000b201120136b2217450d0002402013450d002010201020134103746a201741037410a2051a0b2001201736022020102802042113200141a0016a41186a4200370300200141a0016a41106a22164200370300200141a0016a41086a22084200370300200142003703a00141db97c700ad4280808080f00084100c22042900002105200141e0006a41086a2206200441086a290000370300200120053703602004102320082006290300370300200120012903603703a00141a7a8c000ad4280808080b00184100c2204290000210520014180016a41086a2206200441086a29000037030020012005370380012004102320162001290380012205370300200141286a41086a2008290300370300200141286a41106a2005370300200141286a41186a2006290300370300200120012903a001370328200141a0016a200141286a412010e5014101210820012902a40121190240024020012802a00122044101460d00200441014621080c010b2019422088a722182013201320184b1b220d2019a72202490d000240200d20024d0d00200141fc016aad4280808080c00084210720014180026a211420014180026a41086a211541db97c700ad4280808080f00084210903402009100c22082900002105200141e0006a41086a2200200841086a290000370300200120053703602008102341e297c700ad4280808080a00284100c2208290000210520014180016a41086a220c200841086a290000370300200120053703800120081023200120023602fc0120012007100d22082900003703800220081023200141003a00b001200120143602ac01200120153602a4012001200141fc016a3602a801200120014180026a3602a001200141286a200141a0016a10652001280230220a41206a2204417f4c0d072001280228210b0240024002402004450d00200410212208450d072004410f4d0d01200421060c020b41102106411010212208450d080c010b200441017422064110200641104b1b22064100480d06024020042006470d00200421060c010b20082004200610252208450d070b20082001290360370000200841086a20002903003700000240024020064170714110460d00200621000c010b200641017422004120200041204b1b22004100480d0620062000460d0020082006200010252208450d070b2008200129038001370010200841186a200c2903003700000240200041606a200a4f0d00200a415f4b0d06200041017422062004200620044b1b22064100480d0620002006460d0020082000200610252208450d070b200241016a2102200841206a200b200a10a1051a0240200128022c450d00200b10230b2004ad4220862008ad84101120081023200d2002470d000b0b20132018492108201942808080807083200dad8421190b200120193702840220012008360280020240024020080d00200141a0016a41186a22064200370300200141a0016a41106a22024200370300200141a0016a41086a22084200370300200142003703a00141db97c700ad4280808080f00084100c22042900002105200141e0006a41086a2200200441086a290000370300200120053703602004102320082000290300370300200120012903603703a00141a7a8c000ad4280808080b00184100c2204290000210520014180016a41086a2200200441086a2900003703002001200537038001200410232016200129038001370000201641086a2000290300370000200141286a41086a2008290300370300200141286a41106a2002290300370300200141286a41186a2006290300370300200120012903a001370328200f428080808080048410110c010b200141a0016a41186a22064200370300200141a0016a41106a22024200370300200141a0016a41086a22084200370300200142003703a00141db97c700ad4280808080f00084100c22042900002105200141e0006a41086a2200200441086a290000370300200120053703602004102320082000290300370300200120012903603703a00141a7a8c000ad4280808080b00184100c2204290000210520014180016a41086a2200200441086a2900003703002001200537038001200410232016200129038001370000201641086a2000290300370000200141286a41086a2008290300370300200141286a41106a2002290300370300200141286a41186a2006290300370300200120012903a001370328200141203602a4012001200141286a3602a00120014180026a410472200141a0016a10e6010b201721120b200128021c2115200141a0016a41186a22024200370300200141a0016a41106a22004200370300200141a0016a41086a22044200370300200142003703a001418fcdc200ad4280808080f00084100c2206290000210520014180016a41086a2208200641086a2900003703002001200537038001200610232004200829030037030020012001290380013703a00141dce0c100ad4280808080a00184100c220629000021052008200641086a2900003703002001200537038001200610232003200129038001370000200341086a2008290300370000200141286a41086a2004290300370300200141286a41106a2000290300370300200141286a41186a2002290300370300200120012903a0013703280240024020100d00200f428080808080048410110c010b20124103744104722208417f4c0d04200810212204450d01200141003602a801200120083602a401200120043602a0012012200141a0016a10610240024020120d0020012802a801210820012802a00121020c010b201020124103746a2114410020012802a801220b6b210020012802a4012104410021080340200b20086a210a201020086a220c280200210d02400240200420006a4104490d0020012802a0012102200421060c010b200a41046a2206200a490d05200441017422022006200220064b1b22064100480d050240024020040d00024020060d00410121020c020b200610212202450d080c010b20012802a001210220042006460d0020022004200610252202450d070b200120063602a401200120023602a0010b2002200b6a20086a200d3600002001200a41046a22043602a801200c41046a280200210d02400240200620006a417c6a41034d0d00200621040c010b200441046a22172004490d05200641017422042017200420174b1b22044100480d050240024020060d00024020040d00410121020c020b200410212202450d080c010b20062004460d0020022006200410252202450d070b200120043602a401200120023602a0010b2002200b6a20086a41046a200d3600002001200a41086a3602a801200041786a2100200841086a2108200c41086a2014470d000b200b20086a21080b20012802a4012104200f42808080808004842008ad4220862002ad84100e02402004450d00200210230b201541ffffffff0171450d00201010230b200141a0016a41186a221a4200370300200141a0016a41106a221b4200370300200141a0016a41086a221c4200370300200142003703a001418fcdc200ad4280808080f00084221d100c2208290000210520014180016a41086a221e200841086a290000370300200120053703800120081023201c201e29030037030020012001290380013703a001419ce3c100ad4280808080e00284221f100c22082900002105201e200841086a2900003703002001200537038001200810232003200129038001370000200341086a2220201e290300370000200141286a41086a2221201c290300370300200141286a41106a2222201b290300370300200141286a41186a2223201a290300370300200120012903a001370328200141106a200141286a412010cd01200128021421240240200128021022254101470d00024020244100200e41646a22082008200e4b1b22264f0d00200141d8016a2127200141a0016a41246a2100200141a0016a41286a2117202421280340200141286a202810e701200141a0016a200128022822082001280230220410e8010240024020012802a00122290d004200212a410821290c010b2004ad4220862008ad84101120012902a401212a0b0240200128022c450d00200810230b2029202a422088a7220841d8006c6a210b2029210202402008450d00034020014180016a41186a220d200241186a29030037030020014180016a41106a2210200241106a29030037030020014180016a41086a220c200241086a2903003703002002280220210a20022903002105200141a0016a41206a2214200241c4006a2902003703002017200241cc006a290200370300200141a0016a41306a2215200241d4006a280200360200200141a0016a41086a22082002412c6a290200370300200141a0016a41106a2204200241346a290200370300200141a0016a41186a22062002413c6a29020037030020012005370380012001200241246a2902003703a001200241d8006a2102200a450d01200141e0006a41186a2216200d290300370300200141e0006a41106a220d2010290300370300200141e0006a41086a2210200c290300370300200141286a41086a22132008290300370300200141286a41106a22182004290300370300200141286a41186a220e2006290300370300200141286a41206a22122014290300370300200141286a41286a22142017290300370300200141286a41306a221120152802003602002001200129038001370360200120012903a001370328200620162903003703002004200d2903003703002008201029030037030020002001290328370200200041086a2013290300370200200041106a2018290300370200200041186a200e290300370200200041206a2012290300370200200041286a2014290300370200200041306a2011280200360200200120012903603703a0012001200a3602c0012001420037038802200142003703800220012006290300370388012001200429030037038001202720012903a001200829030020014180016a20014180026a10e901024020012802c8012208450d00200841306c2104200a210803402008200841206a290300200841286a29030020014180016a20014180026a10e901200841306a2108200441506a22040d000b0b20014180026a41086a290300212b200129038002212c20012802cc01210d02402001290380012207200c290300220584500d0020012802d4012208450d002001202c2007202c200754202b200554202b2005511b22041b222d202b200520041b222e2008ad420010a70520084105742104200141086a29030021092001290300212f202d2105202e2107200d210803402008202f20052005202f56200720095620072009511b22061b22192009200720061b223010ea01200720307d2005201954ad7d2107200520197d2105200841206a2108200441606a22040d000b427f202b202e7d202c202d54ad7d220920077c202c202d7d220720057c22192007542208ad7c22052008200520095420052009511b22081b212b427f201920081b212c0b202c202b10eb01024020012802c4012208450d00200841306c450d00200a10230b024020012802d00141ffffff3f71450d00200d10230b2002200b470d000b200b21020b202aa721040240200b2002460d0003400240200241246a2802002208450d00200841306c450d00200241206a28020010230b200241d8006a21080240200241306a28020041ffffff3f71450d002002412c6a28020010230b20082102200b2008470d000b0b202841016a212802402004450d00200441d8006c450d00202910230b20282026470d000b0b20242026202420264b1b21240b201a4200370300201b4200370300201c4200370300200142003703a001201d100c22082900002105201e200841086a290000370300200120053703800120081023201c201e29030037030020012001290380013703a001201f100c22082900002105201e200841086a29000037030020012005370380012008102320032001290380013700002020201e2903003700002021201c2903003703002022201b2903003703002023201a290300370300200120012903a0013703280240024020250d00200f428080808080048410110c010b200120243602a001200f4280808080800484200141a0016aad4280808080c00084100e0b20014190026a24000f0b1033000b102c000b102a000b1032000be30401097f230041e0006b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1088010240024020022802000d0020022802042205200228022422064103762201200120054b1b22014103742207417f4c0d030240024020010d00410421080c010b200710212208450d050b200241003602502002200136024c20022008360248024002402005450d004100210103402002410036022820064104490d0220022006417c6a220636022420022002280220220741046a360220200728000021092002410036022820064104490d0220022006417c6a22063602242002200741086a3602202007280004210702402001200228024c470d00200241c8006a2001410110a50120022802482108200228025021010b200820014103746a220a2007360204200a20093602002002200141016a22013602502005417f6a22050d000b0b2008450d012000200229024c370204200020083602000c020b200228024c41ffffffff0171450d00200810230b20024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c20024180c5c6003602482002200241386a360258200241c4006a4184a5c200200241c8006a10311a2002350230422086200235022884100a0240200228022c450d00200228022810230b200041003602000b2004450d00200310230b200241e0006a24000f0b1032000b1033000bba0201037f230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822010d00200041003602000c010b200341106a2802002102200328020c2104200341003602380240024020024104490d0020012800002105200341003602382002417c714104460d00200041086a200128000436020020002005360204200041013602000c010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c20034180c5c6003602382003200341286a360248200341346a4184a5c200200341386a10311a2003350220422086200335021884100a0240200328021c450d00200328021810230b200041003602000b2004450d00200110230b200341d0006a24000b3c01017f02404108102122020d001033000b200220002802003600002002200028020436000420012902002002ad4280808080800184100e200210230bf90403027f017e057f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a29000037030020022004370300200310234191d0c000ad4280808080800284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bfd0f06057f017e0b7f027e067f047e230041c0026b220324002003200236021c20032001360218200341206a2002ad4220862001ad841010108b0102400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a1088010240024020032802100d00024002400240200328021422062003280234220741d8006e2201200120064b1bad42d8007e2208422088a70d002008a72201417f4c0d000240024020010d00410821090c010b200110212209450d020b4100210a20034100360240200320093602382003200141d8006e36023c02402006450d004100210b034041002101200341003a00b802200b41016a210b417f210202400240034020072001460d0120034198026a20016a2003280230220c2d00003a00002003200720026a3602342003200c41016a3602302003200141016a220d3a00b8022002417f6a2102200d2101200d4120470d000b200341a8016a41186a220e20034198026a41186a220f290300370300200341a8016a41106a221020034198026a41106a2211290300370300200341a8016a41086a221220034198026a41086a221329030037030020032003290398023703a8012007200d6b22014110490d062003200c41116a3602302003200141706a360234200c41096a2900002114200c2900012115200341086a200341306a1088012003280208450d010c060b200141ff0171450d05200341003a00b8020c050b200328020c22162003280234220741306e2201200120164b1bad42307e2208422088a70d022008a72201417f4c0d020240024020010d00410821170c010b200110212217450d040b41002118200341003602d001200320173602c8012003200141306e22023602cc01024002400240024002402016450d0041002118410021190340200341003a00b802201941016a2119417f210241002101034020072001460d0320034198026a20016a2003280230220c2d00003a00002003200720026a3602342003200c41016a3602302003200141016a220d3a00b8022002417f6a2102200d2101200d4120470d000b200341f8016a41186a2201200f290300370300200341f8016a41106a22022011290300370300200341f8016a41086a221a201329030037030020032003290398023703f8012007200d6b220d4110490d03200341d8016a41086a221b201a290300370300200341d8016a41106a221a2002290300370300200341d8016a41186a22022001290300370300200320032903f8013703d8012003200c41116a3602302003200d41706a2207360234200c41096a2900002108200c290001211c0240201820032802cc01470d00200341c8016a2018410110a40120032802c801211720032802d00121180b2017201841306c6a220120032903d801370300201b290300211d201a290300211e2002290300211f2001201c370320200141286a2008370300200141186a201f370300200141106a201e370300200141086a201d3703002003201841016a22183602d00120192016470d000b20032802cc0121020b2017450d0820034198026a200341306a10cf01200328029802220d450d02200328029c02210720032802342201410f4b0d030240200741ffffff3f71450d00200d10230b2002450d08200241306c450d08201710230c080b200141ff0171450d00200341003a00b8020b20032802cc012201450d06200141306c450d06201710230c060b2002450d05200241306c450d05201710230c050b20032802a002210c200341e8006a41086a20122903002208370300200341e8006a41106a2010290300221c370300200341e8006a41186a200e290300221d370300200341c8006a41186a2216201d370300200341c8006a41106a2219201c370300200341c8006a41086a220f20083703002003200141706a36023420032003280230220141106a360230200320032903a801220837036820032008370348200141086a29000021082001290000211c0240200a200328023c470d00200341386a200a410110a901200328023821092003280240210a0b2009200a41d8006c6a2201201c370310200120143703082001201537030020012017360220200141186a2008370300200141346a200c360200200141306a20073602002001412c6a200d360200200141286a2018360200200141246a2002360200200141386a2003290348370200200141c0006a200f290300370200200141c8006a2019290300370200200141d0006a20162903003702002003200a41016a220a360240200b2006460d01200328023421070c000b0b2009450d032000200329023c370204200020093602000c040b1032000b1033000b200341e8006a41086a20034188016a41086a2903003703000240200a450d00200a41d8006c2102200941306a210103400240200141746a280200220d450d00200d41306c450d00200141706a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141d8006a2101200241a87f6a22020d000b0b200328023c2201450d00200141d8006c450d00200910230b2003410036028002200342013703f8012003410a3602dc012003200341186a3602d8012003200341f8016a3602a801200341ac026a41013602002003420137029c0220034180c5c600360298022003200341d8016a3602a802200341a8016a4184a5c20020034198026a10311a20033502800242208620033502f80184100a024020032802fc01450d0020032802f80110230b200041003602000b2005450d00200410230b200341c0026a24000b961d020f7f137e23004180056b22052400200541206a200010c70120054198046a20052802202206200528022810e101200541b0036a41086a2207200541a1046a290000370300200541b0036a41106a2208200541a9046a290000370300200541b0036a41186a2209200541b1046a29000037030020052005290099043703b0034100210a024020052d0098044101470d00200541c8026a41186a2009290300370300200541c8026a41106a2008290300370300200541c8026a41086a2007290300370300200520052903b0033703c8024101210a0b02402005280224450d00200610230b02400240200a450d00200541186a200541c8026a41186a2206290300370300200541106a200541c8026a41106a2207290300370300200541086a200541c8026a41086a2208290300370300200520052903c802370300200541d8016a200510c60120054198046a20052802d801220920052802e00110e20120054188016a41086a220b20054198046a41086a29030037030020054188016a41106a220c20054198046a41106a29030037030020054188016a41186a220d20054198046a41186a290300370300200541b0036a41086a220e200541c4046a290200370300200541b0036a41106a220f200541cc046a290200370300200541b0036a41186a2210200541d4046a290200370300200541b0036a41206a2211200541dc046a290200370300200541b0036a41286a2212200541e4046a290200370300200541b0036a41306a2213200541ec046a280200360200200520052903980437038801200520052902bc043703b003024020052802b804220a450d0020054190026a41186a200d29030037030020054190026a41106a200c29030037030020054190026a41086a200b2903003703002008200e2903003703002007200f29030037030020062010290300370300200541c8026a41206a2011290300370300200541c8026a41286a2012290300370300200541c8026a41306a2013280200360200200520052903880137039002200520052903b0033703c8020b024020052802dc01450d00200910230b200a450d00200541c4006a20052903c802370200200541206a41186a220620054190026a41186a290300370300200541206a41106a220720054190026a41106a290300370300200541206a41086a220820054190026a41086a290300370300200541cc006a200541c8026a41086a290300370200200541d4006a200541c8026a41106a290300370200200541dc006a200541c8026a41186a290300370200200541e4006a200541e8026a290300370200200541ec006a200541c8026a41286a290300370200200541f4006a200541f8026a28020036020020052005290390023703202005200a36024020082903002114200529032021150240024020072903002216200120162001542006290300221720025420172002511b22071b22182017200220071b22198450450d002015211a2014211b0c010b2006201720197d2016201854ad7d221c3703002005201620187d221a37033002400240201a4280c8afa02556201c420052201c501b450d0020182116201921170c010b200541386a420037030020054200370330201c20027c201a20017c2201201a54ad7c21020b20054200201420177d2015201654ad7d2218201520167d221c201556201820145620182014511b22061b221b37032820054200201c20061b221a370320200220177d2001201654ad7d2102200120167d21010b02400240200541206a41286a28020022060d004100210a410021060c010b200641186c21084100210603400240200a2903002216200120012016562002200a41086a220929030022175620022017511b22071b22182017200220071b221984500d00200a201620187d221a370300200a201720197d2016201854ad7d221c37030802400240201a4280c8afa02556201c420052201c501b450d002001211c20182116201921170c010b200a4200370308200a42003703002002201c7c2001201a7c221c200154ad7c21020b200541206a41086a220742002007290300220120177d20052903202218201654ad7d2219201820167d221a201856201920015620192001511b22071b221b37030020054200201a20071b221a370320200220177d201c201654ad7d2102201c20167d210120092903002117200a29030021160b024020162017844200520d00200a41186a210a200641016a2106200841686a22080d010b0b2005280248220a2006490d020b200541003602480240200a20066b220a450d0002402006450d00200528024022072007200641186c6a200a41186c10a2051a0b2005200a3602480b024042002015201a7d221620162015562014201b7d2015201a54ad7d221620145620162014511b220a1b220242002016200a1b220184500d00200541f8006a200010970220054188016a200528027822062005280280012207109802200529038801211b2005420037038801200541d0016a280200210820052d00d401210902400240201b4201510d004200211c200541d8016a41306a4200370300200541d8016a41286a4200370300200541d8016a41206a4200370300200541d8016a41186a4200370300200541e8016a4200370300200541e0016a4200370300200542003703d8014200211942002117420021164200211d0c010b200541c0016a290300211820054188016a41306a290300211a20054188016a41206a290300211920054188016a41186a290300211c200541c8016a290300211d20052903980121162005290390012117200541d8016a41206a20054188016a41286a290300370300200541d8016a41286a201a370300200541d8016a41306a2018370300200541e8016a201c370300200520193703f001200520173703d801200520163703e0010b20052017200220172017200256201620015620162001511b220a1b221a7d22143703d8012005201620012016200a1b221e7d2017201a54ad7d22183703e001201620197c211f2017201c7c2220201754220bad2121200541d8016a41106a210a024002402002201a7d22152001201e7d2002201a54ad7d22228450450d004200211c420021222002211e200121230c010b200541f0016a201920222019201c201556201920225620192022511b220c1b22237d201c2015201c200c1b221754ad7d3703002005201c20177d3703e801202220237d2015201754ad7d21222023201e7c2017201a7c221e201754ad7c2123201520177d211c0b201f20217c211720054190026a41186a200a41086a290300221937030020054190026a41206a220c200a41106a290300370300200541b8026a220d200a41186a290300370300200541c0026a220e200a41206a2903003703002005200a290300221a3703a0022005201437039002200520183703980202400240427f2014201a7c221a201a201454220a201820197c200aad7c221920185420192018511b220a1b221a4280c8afa025544100427f2019200a1b2215501b0d00200541a0026a290300211a200e2903002115200d290300211f200c2903002121200529039802212420052903900221254201211920052903a80221260c010b420021190240201a201584500d00201a201510eb01200541d0046a2015370300200541c8046a201a37030020054198046a41086a41013a0000200541a1046a2000290000370000200541a9046a200041086a290000370000200541b1046a200041106a290000370000200541b9046a200041186a290000370000200541023a00980420054198046a10e0010b0b2017201651210a2017201654210c200541b0016a2021370300200541b8016a201f37030020054198016a2024370300200541c0016a2015370300200541a0016a201a370300200520263703a8012005201d3703c8012005202537039001200520094100201b420151220d1b3a00d401200520084100200d1b3602d001200520194201512208ad370388010240024020080d002007ad4220862006ad8410110c010b2005200736029c04200520063602980420054190016a20054198046a1098030b200b200c200a1b210a0240200528027c450d00200610230b427f2017200a1b2116427f2020200a1b21172019420152210a024002400240201b4201510d00200a0d0041032106200541b0036a210a0c010b201b420152200a410173720d0141042106200541c8026a210a0b200a41046a20063a0000200a41003a0000200a41056a2000290000370000200a410d6a200041086a290000370000200a41156a200041106a290000370000200a411d6a200041186a290000370000200a10e0010b024020172016844200520d00200541d0046a2018370300200541c8046a201437030020054198046a41086a41003a0000200541a1046a2000290000370000200541a9046a200041086a290000370000200541b1046a200041106a290000370000200541b9046a200041186a290000370000200541023a00980420054198046a10e0010b2004427f20042903002216201e7c22172017201654220a200441086a2206290300221620237c200aad7c221720165420172016511b220a1b3703002006427f2017200a1b3703000240201c202284500d002003420020032903002216201c7d22172017201656200341086a220a290300221720227d2016201c54ad7d221620175620162017511b22061b370300200a4200201620061b3703000b200542f3e885db96cddbb3203703c802200541c8026a200541206a41386a2005290320200541206a41086a290300411f10990220054198046a200510c601200528029804210a200520052802a0043602b4032005200a3602b003200541206a200541b0036a10ec010240200528029c04450d00200a10230b20054198046a41386a2001370300200541c8046a200237030020054198046a41086a41013a0000200541a1046a2000290000370000200541a9046a200041086a290000370000200541b1046a200041106a290000370000200541b9046a200041186a290000370000200541033a00980420054198046a10e0010b02402005280244220a450d00200a41186c450d00200528024010230b200541d0006a28020041ffffffff0371450d00200528024c10230b20054180056a24000f0b2006200a103c000bbb180e017f027e027f027e037f047e017f017e047f027e027f017e017f027e230041d0046b2203240002400240200120028450450d0042002104420021050c010b200341386a2000109702200341c8006a200328023822062003280240220710980220032903482108420021092003420037034820034190016a280200210a20032d009401210b024002402008420151220c0d0020034198016a41306a420037030020034198016a41286a420037030020034198016a41206a420037030020034198016a41186a4200370300200341a8016a4200370300200341a0016a420037030020034200370398014200210d42002105420021044200210e0c010b20034180016a290300210f200341c8006a41306a2903002110200341c8006a41206a290300210d200341c8006a41186a290300210920034188016a290300210e200329035821042003290350210520034198016a41206a200341c8006a41286a29030037030020034198016a41286a201037030020034198016a41306a200f370300200341a8016a20093703002003200d3703b0012003200537039801200320043703a0010b427f2004200d7c200520097c220d2005542211ad7c22092011200920045420092004511b22111b2110427f200d20111b21124200210902400240200142ffc7afa0255620024200522002501b0d00201220108450450d004100210c4100211342002104410121110c010b4200200420027c200520017c220d2005542211ad7c22052011200520045420052004511b22111b21044200200d20111b210f024020114101470d00200f421088200442308684210920044210882104200f420888a72113200fa7210c410121110c010b200341d8036a41186a22144200370300200341d8036a41106a22154200370300200341d8036a41086a22134200370300200342003703d80341bdadc500ad42808080808001842209100c22162900002117200341c0046a41086a2211201641086a290000370300200320173703c0042016102320132011290300370300200320032903c0043703d80341c5adc500ad4280808080d001842217100c221629000021182011201641086a290000370300200320183703c00420161023201520032903c0042218370300200341d0016a41086a22192013290300370300200341d0016a41106a221a2018370300200341d0016a41186a22162011290300370300200320032903d8033703d001200341206a200341d0016a412010d701200341206a41106a29030021182003290328211b2003280220211c201442003703002015420037030020134200370300200342003703d8032009100c221429000021092011201441086a290000370300200320093703c0042014102320132011290300370300200320032903c0043703d8032017100c221429000021092011201441086a290000370300200320093703c00420141023201520032903c004220937030020192013290300370300201a200937030020162011290300370300200320032903d8033703d001200320184200201c1b3703e0032003201b4200201c1b3703d803200341d0016aad4280808080800484200341d8036aad4280808080800284100e200320043703a0012003200f370398012016200341a8016a221141086a2903002209370300200341d0016a41206a2213201141106a290300370300200341f8016a2215201141186a29030037030020034180026a2216201141206a290300370300200320043703d8012003200f3703d0012003201129030022173703e00102400240427f200f20177c22172017200f542211200420097c2011ad7c220920045420092004511b22111b22044280c8afa025544100427f200920111b2209501b0d00201a2903002104201629030021092015290300210f2013290300211720032903d801211820032903d001211b4201211d20032903e801211e0c010b4200211d02402004200984500d002004200910eb0120034190046a200937030020034188046a2004370300200341d8036a41086a41013a0000200341e1036a2000290000370000200341e9036a200041086a290000370000200341f1036a200041106a290000370000200341f9036a200041186a290000370000200341023a00d803200341d8036a10e0010b0b200341f0006a2017370300200341f8006a200f370300200341d8006a201837030020034180016a2009370300200341e0006a20043703002003201e3703682003200e370388012003201b370350410021112003200b4100200842015122131b3a0094012003200a410020131b360290012003201d4201512213ad370348201220108450ad423086210942002104024020130d002007ad4220862006ad841011410021130c010b200320073602dc03200320063602d803200341d0006a200341d8036a10980341012113410021110b0240200328023c450d00200610230b024020110d0020094230882004421086842109024002400240200c41ff0171220c0d00201341ff0171450d0041032111200341f0026a210c0c010b200c450d01201341ff01710d014104211120034188026a210c0b200c41046a20113a0000200c41003a0000200c41056a2000290000370000200c410d6a200041086a290000370000200c41156a200041106a290000370000200c411d6a200041186a290000370000200c10e0010b200341c8006a41106a220c20053703002003200d37035020032009370348200121042002210520094201520d012003290350210420034190046a200c29030037030020034188046a2004370300200341d8036a41086a41003a0000200341e1036a2000290000370000200341e9036a200041086a290000370000200341f1036a200041106a290000370000200341f9036a200041186a290000370000200341023a00d803200341d8036a10e00120012104200221050c010b20032004421086200942308884220537035020032013ad42ff0183420886200cad42ff01838420094210868422043703480b200341d8036a41186a22064200370300200341d8036a41106a22114200370300200341d8036a41086a220c4200370300200342003703d80341bdadc500ad4280808080800184220f100c2213290000210920034188026a41086a2200201341086a290000370300200320093703880220131023200c200029030037030020032003290388023703d80341c5adc500ad4280808080d001842210100c221329000021092000201341086a29000037030020032009370388022013102320112003290388022209370300200341f0026a41086a220b200c290300370300200341f0026a41106a22072009370300200341f0026a41186a22152000290300370300200320032903d8033703f002200341086a200341f0026a412010d701200220057d2001200454ad7d200520027d2004200154ad7d20042001582005200258200520025122131b220a1b2112200120047d200420017d200a1b2108200341086a41106a29030042002003280208220a1b210920032903104200200a1b210d024002402004200156200520025620131b0d002006420037030020114200370300200c4200370300200342003703d803200f100c221329000021012000201341086a290000370300200320013703880220131023200c200029030037030020032003290388023703d8032010100c221329000021012000201341086a2900003703002003200137038802201310232011200329038802370000201141086a2000290300370000200b200c2903003703002007201129030037030020152006290300370300200320032903d8033703f00220034200200920127d200d200854ad7d2201200d20087d2202200d56200120095620012009511b22001b3703e00320034200200220001b3703d803200341d8036a21000c010b2006420037030020114200370300200c4200370300200342003703d803200f100c221329000021012000201341086a290000370300200320013703880220131023200c200029030037030020032003290388023703d8032010100c221329000021012000201341086a2900003703002003200137038802201310232011200329038802370000201141086a2000290300370000200b200c2903003703002007201129030037030020152006290300370300200320032903d8033703f0022003427f200920127c200d20087c2202200d542200ad7c22012000200120095420012009511b22001b3703e0032003427f200220001b3703d803200341d8036a21000b200341f0026aad42808080808004842000ad4280808080800284100e200341d0046a24000b800508017f017e047f017e017f017e037f017e23004180016b22022400200241186a2000200110cf0302402002290318a7450d00200241186a41106a290300210320022903202100200241d0006a41186a22044200370300200241d0006a41106a22054200370300200241d0006a41086a220642003703002002420037035041bdadc500ad42808080808001842201100c22072900002108200241f0006a41086a2209200741086a2900003703002002200837037020071023200620092903003703002002200229037037035041c5adc500ad4280808080d001842208100c2207290000210a2009200741086a2900003703002002200a3703702007102320052002290370220a370300200241306a41086a220b2006290300370300200241306a41106a220c200a370300200241306a41186a220d2009290300370300200220022903503703302002200241306a412010d701200241106a290300210a2002290308210e20022802002107200442003703002005420037030020064200370300200242003703502001100c220429000021012009200441086a290000370300200220013703702004102320062009290300370300200220022903703703502008100c220429000021012009200441086a2900003703002002200137037020041023200520022903702201370300200b2006290300370300200c2001370300200d20092903003703002002200229035037033020024200200a420020071b220120037d200e420020071b2203200054ad7d2208200320007d2200200356200820015620082001511b22091b37035820024200200020091b370350200241306aad4280808080800484200241d0006aad4280808080800284100e0b20024180016a24000bd80301067f230041106b2202240020024100360208200242013703000240412010212203450d0020032000290038370000200341086a200041c0006a290000370000200341106a200041c8006a290000370000200341186a200041d0006a29000037000020022003360200200242a080808080043702042002200036020c2002410c6a200210db012002200041106a36020c2002410c6a200210db0120002802202103200041286a28020022042002106102402004450d002003200441186c6a210403402002200336020c2002410c6a200210db01200341106a200210ed012004200341186a2203470d000b0b200028022c2105200041346a28020022032002106102400240024020022802042206200228020822046b20034102742200490d0020022802002103200621070c010b200420006a22032004490d01200641017422072003200720034b1b22074100480d010240024020060d00024020070d00410121030c020b2007102122030d010c040b2002280200210320062007460d0020032006200710252203450d030b20022007360204200220033602000b200320046a2005200010a1051a2001290200200420006aad4220862003ad84100e02402007450d00200310230b200241106a24000f0b102c000b102a000bb30101027f230041106b2202240002400240024002402000280200220341c000490d00200341808001490d012003418080808004490d02200241033a00032001200241036a41011062200220002802003602042001200241046a410410620c030b200220034102743a00032001200241036a410110620c020b200220034102744101723b010a20012002410a6a410210620c010b2002200341027441027236020c20012002410c6a410410620b200241106a24000b130020004118360204200041a4d0c0003602000bab0407047f017e017f017e017f017e037f230041d0006b22002400200041206a41186a22014200370300200041206a41106a22024200370300200041206a41086a2203420037030020004200370320418fcdc200ad4280808080f000842204100c22052900002106200041c0006a41086a2207200541086a2900003703002000200637034020051023200320072903003703002000200029034037032041fcdec100ad42808080808001842208100c220529000021062007200541086a2900003703002000200637034020051023200220002903402206370300200041086a22092003290300370300200041106a220a2006370300200041186a220b2007290300370300200020002903203703000240024002404100200010f0012205200541ff01714104461b41ff0171417f6a220541024b0d0020050e03010001010b200142003703002002420037030020034200370300200042003703202004100c220529000021062007200541086a290000370300200020063703402005102320032007290300370300200020002903403703202008100c220529000021062007200541086a290000370300200020063703402005102320022000290340370000200241086a200729030037000020092003290300370300200a2002290300370300200b200129030037030020002000290320370300410110212207450d01200741013a00002000ad42808080808004842007ad42808080801084100e200710230b200041d0006a24000f0b102a000b810201037f230041d0006b220124002001412036020420012000360200200141086a2000ad42808080808004841010108b0102400240200128020822020d00410421000c010b200128020c210302400240200141106a280200450d0020022d000022004104490d010b20014100360220200142013703182001410a36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c20014180c5c6003602382001200141286a360248200141346a4184a5c200200141386a10311a2001350220422086200135021884100a0240200128021c450d00200128021810230b410421000b2003450d00200210230b200141d0006a240020000b34002000418fcdc20036020420004100360200200041146a4124360200200041106a41b0bfc100360200200041086a42073702000b2b01017f02404101102122020d00102a000b200042818080801037020420002002360200200241023a00000b2b01017f02404101102122020d00102a000b200042818080801037020420002002360200200241003a00000b5301017f0240411010212202450d00200242003700082002420037000020024110412010252202450d0020024200370010200042a0808080800437020420002002360200200241186a42003700000f0b102a000b940302047f017e230041206b2203240002400240200241d8006c4104722204417f4c0d00200410212205450d0120034100360208200320043602042003200536020020022003106102402002450d002001200241d8006c6a210603402003200141386a41201062200129030021072003200141086a290300370318200320073703102003200341106a4110106220012802202102200128022822042003106102402004450d002002200441306c6a210403402003200241201062200241206a29030021072003200241286a290300370318200320073703102003200341106a411010622004200241306a2202470d000b0b200141d8006a2105200128022c2102200141346a28020022042003106102402004450d002004410574210403402003200241201062200241206a2102200441606a22040d000b0b200129031021072003200141186a290300370318200320073703102003200341106a411010622005210120052006470d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1032000b1033000b3301017f02404110102122020d001033000b2002420037000820024200370000200042908080808002370204200020023602000b860101027f230041206b220224002002410c6a410036020020024200370300200241003602182002420137031002404104102122030d00102a000b200341003600002002200336021020024284808080c00037021420024104722203200241106a10bd01200041086a200228021836020020002002290310370200200310be01200241206a24000be90101047f230041106b220224002002410036020c02400240410110212203450d000240024002400240200228020c220441c000490d00200441808001490d012004418080808004490d02200341033a0000200228020c21044105210520034101410510252203450d05200320043600010c030b200320044102743a0000410121050c020b4102210520034101410210252203450d03200320044102744101723b00000c010b4104210520034101410410252203450d02200320044102744102723600000b200020053602082000200536020420002003360200200241106a24000f0b1033000b102a000bf60301087f230041c0006b22022400200241186a4200370300200241106a22034200370300200241086a4200370300200241286a22044100360200200242003703002002420837032020024100360238200242013703302002200236023c2002413c6a200241306a10db012002200336023c2002413c6a200241306a10db012002280220210320042802002204200241306a10610240024002402004450d00200441306c210503400240024020022802342206200228023822046b4120490d00200441206a2107200228023021080c010b200441206a22072004490d03200641017422082007200820074b1b22094100480d030240024020060d00024020090d00410121080c020b2009102122080d010c060b2002280230210820062009460d0020082006200910252208450d050b20022009360234200220083602300b200820046a2204200341106a290000370000200441186a200341286a290000370000200441106a200341206a290000370000200441086a200341186a290000370000200220073602382002200336023c2002413c6a200241306a10db01200341306a2103200541506a22050d000b0b20002002290330370200200041086a200241306a41086a280200360200024020022802242203450d00200341306c450d00200228022010230b200241c0006a24000f0b102c000b102a000b4d01027f230041106b2202240002404104102122030d001033000b2002420437020420022003360200410020021061200041086a200228020836020020002002290300370200200241106a24000b2c01017f02404104102122020d001033000b20004284808080c00037020420002002360200200241043600000b2d01017f02404104102122020d001033000b20004284808080c00037020420002002360200200241d4003600000b130020004102360204200041ec86c2003602000b2c01017f02404104102122020d001033000b20004284808080c000370204200020023602002002411c3600000b2c01017f02404104102122020d001033000b20004284808080c00037020420002002360200200241063600000bde0506067f017e017f017e017f017e230041206b220224000240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d01200441036a2d0000210620042f0001210920012003417c6a3602042001200441046a3602002009200641107472410874200572220141808004490d012001410276ad21080c020b024020054102762209410c4b0d0002400240024020090e0d00030303010303030303030302000b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210a0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210a0c050b20064110490d03200441096a290000210a2004290001210820012003416f6a3602042001200441116a360200200a428080808080808080015421070c040b200941046a220641104b0d022003417e6a2103200441026a21044100210541012107200241186a210b420021084200210a03402003417f460d01200241106a2004417f6a3100004200200541037441f8007110a40520012003360204200120043602002003417f6a2103200441016a2104200b290300200a84210a20022903102008842108200541016a220541ff01712006490d000b2002427f427f41e80020094103746b41f8007110a5052008200229030058200a200241086a290300220c58200a200c511b21070c030b0c020b4200210a410021070c010b410121070b20002008370308200041106a200a37030020002007ad370300200241206a24000bd53901037f230041106b2202240020002802002103200028020822042001106102402004450d00200320044103746a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a41021062200341086a22032004470d000b0b200028020c2103200041146a28020022042001106102402004450d0020032004410c6c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a410210622003410c6a22032004470d000b0b20002802182103200041206a28020022042001106102402004450d00200320044104746a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a41021062200341106a22032004470d000b0b200028022421032000412c6a28020022042001106102402004450d002003200441146c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a41021062200341146a22032004470d000b0b20002802302103200041386a28020022042001106102402004450d002003200441186c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a41021062200341186a22032004470d000b0b200028023c2103200041c4006a28020022042001106102402004450d0020032004411c6c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a410210622003411c6a22032004470d000b0b20002802482103200041d0006a28020022042001106102402004450d00200320044105746a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a41021062200341206a22032004470d000b0b20002802542103200041dc006a28020022042001106102402004450d002003200441246c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a41021062200341246a22032004470d000b0b20002802602103200041e8006a28020022042001106102402004450d002003200441286c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a41021062200341286a22032004470d000b0b200028026c2103200041f4006a28020022042001106102402004450d0020032004412c6c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a410210622003412c6a22032004470d000b0b2000280278210320004180016a28020022042001106102402004450d002003200441306c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a4102106220022003412a6a2f01003b010c20012002410c6a4102106220022003412c6a2f01003b010c20012002410c6a41021062200341306a22032004470d000b0b20002802840121032000418c016a28020022042001106102402004450d002003200441346c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a4102106220022003412a6a2f01003b010c20012002410c6a4102106220022003412c6a2f01003b010c20012002410c6a4102106220022003412e6a2f01003b010c20012002410c6a410210622002200341306a2f01003b010c20012002410c6a41021062200341346a22032004470d000b0b200028029001210320004198016a28020022042001106102402004450d002003200441386c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a4102106220022003412a6a2f01003b010c20012002410c6a4102106220022003412c6a2f01003b010c20012002410c6a4102106220022003412e6a2f01003b010c20012002410c6a410210622002200341306a2f01003b010c20012002410c6a410210622002200341326a2f01003b010c20012002410c6a410210622002200341346a2f01003b010c20012002410c6a41021062200341386a22032004470d000b0b200028029c012103200041a4016a28020022042001106102402004450d0020032004413c6c6a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a4102106220022003412a6a2f01003b010c20012002410c6a4102106220022003412c6a2f01003b010c20012002410c6a4102106220022003412e6a2f01003b010c20012002410c6a410210622002200341306a2f01003b010c20012002410c6a410210622002200341326a2f01003b010c20012002410c6a410210622002200341346a2f01003b010c20012002410c6a410210622002200341366a2f01003b010c20012002410c6a410210622002200341386a2f01003b010c20012002410c6a410210622003413c6a22032004470d000b0b20002802a8012103200041b0016a28020022042001106102402004450d00200320044106746a210403402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a4102106220022003412a6a2f01003b010c20012002410c6a4102106220022003412c6a2f01003b010c20012002410c6a4102106220022003412e6a2f01003b010c20012002410c6a410210622002200341306a2f01003b010c20012002410c6a410210622002200341326a2f01003b010c20012002410c6a410210622002200341346a2f01003b010c20012002410c6a410210622002200341366a2f01003b010c20012002410c6a410210622002200341386a2f01003b010c20012002410c6a4102106220022003413a6a2f01003b010c20012002410c6a4102106220022003413c6a2f01003b010c20012002410c6a41021062200341c0006a22032004470d000b0b20002802b4012103200041bc016a28020022002001106102402000450d002003200041c4006c6a210003402002200328020036020c20012002410c6a410410622002200341046a2f01003b010c20012002410c6a410210622002200341066a2f01003b010c20012002410c6a410210622002200341086a2f01003b010c20012002410c6a4102106220022003410a6a2f01003b010c20012002410c6a4102106220022003410c6a2f01003b010c20012002410c6a4102106220022003410e6a2f01003b010c20012002410c6a410210622002200341106a2f01003b010c20012002410c6a410210622002200341126a2f01003b010c20012002410c6a410210622002200341146a2f01003b010c20012002410c6a410210622002200341166a2f01003b010c20012002410c6a410210622002200341186a2f01003b010c20012002410c6a4102106220022003411a6a2f01003b010c20012002410c6a4102106220022003411c6a2f01003b010c20012002410c6a4102106220022003411e6a2f01003b010c20012002410c6a410210622002200341206a2f01003b010c20012002410c6a410210622002200341226a2f01003b010c20012002410c6a410210622002200341246a2f01003b010c20012002410c6a410210622002200341266a2f01003b010c20012002410c6a410210622002200341286a2f01003b010c20012002410c6a4102106220022003412a6a2f01003b010c20012002410c6a4102106220022003412c6a2f01003b010c20012002410c6a4102106220022003412e6a2f01003b010c20012002410c6a410210622002200341306a2f01003b010c20012002410c6a410210622002200341326a2f01003b010c20012002410c6a410210622002200341346a2f01003b010c20012002410c6a410210622002200341366a2f01003b010c20012002410c6a410210622002200341386a2f01003b010c20012002410c6a4102106220022003413a6a2f01003b010c20012002410c6a4102106220022003413c6a2f01003b010c20012002410c6a4102106220022003413e6a2f01003b010c20012002410c6a410210622002200341c0006a2f01003b010c20012002410c6a41021062200341c4006a22032000470d000b0b200241106a24000bd2ae0109097f017e067f037e217f027e0b7f017e047f23004190046b22022400200241f8006a20011088010240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802780d00200228027c220320012802044103762204200420034b1b22054103742204417f4c0d020240024020050d00410421060c010b200410212206450d040b41002104200241003602980320022005360294032002200636029003024002402003450d00410021040340200128020422054104490d0220012802002207280000210820012005417c6a22093602042001200741046a220736020020094102490d0220072f0000210920012005417a6a3602042001200741026a36020002402004200228029403470d0020024190036a2004410110a501200228029003210620022802980321040b200620044103746a220520093b0104200520083602002002200441016a2204360298032003417f6a22030d000b20022802940321050b2006450d01200241f0006a20011088012002280270450d020c180b20022802940341ffffffff0171450d00200610230b200041003602000c180b2002280274220a2001280204410c6e22072007200a4b1bad420c7e220b422088a70d00200ba72203417f4c0d000240024020030d004104210c0c010b20031021220c450d020b4100210720024100360298032002200c3602900320022003410c6e220d36029403024002400240200a450d00410021070340200128020422034104490d0220012802002209280000210e20012003417c6a220d3602042001200941046a2208360200200d4102490d0220082f0000210f20012003417a6a220d3602042001200841026a360200200d4102490d0220092f0006210d2001200341786a22083602042001200941086a220936020020084102490d0220092f000021082001200341766a3602042001200941026a36020002402007200228029403470d0020024190036a20074101109501200228029003210c20022802980321070b200c2007410c6c6a220320083b01082003200f3b01042003200e360200200341066a200d3b01002002200741016a220736029803200a417f6a220a0d000b200228029403210d0b200c450d17200241e8006a20011088012002280268450d010c160b2002280294032201450d162001410c6c450d16200c10230c160b4104210f200228026c220e200128020441047622032003200e4b1b22034104742209417f4c0d0002402003450d0020091021220f450d020b41002108200241003602980320022003360294032002200f36029003024002400240200e450d00410021080340200128020422034104490d0220012802002209280000211020012003417c6a22113602042001200941046a220a36020020114102490d02200a330000210b20012003417a6a22113602042001200a41026a36020020114102490d02200933000621122001200341786a22113602042001200941086a220a36020020114102490d02200a33000021132001200341766a22113602042001200a41026a36020020114102490d02200933000a21142001200341746a220a36020420012009410c6a2209360200200a4102490d0220092f0000210a2001200341726a3602042001200941026a3602002014423086201342208684201242108684200b84210b02402008200228029403470d0020024190036a2008410110a001200228029003210f20022802980321080b200f20084104746a2203200a3b010c2003200b370204200320103602002002200841016a220836029803200e417f6a220e0d000b20022802940321030b200f450d16200241e0006a20011088012002280260450d010c150b20022802940341ffffffff0071450d15200f10230c150b20022802642210200128020441146e2209200920104b1bad42147e220b422088a70d00200ba72209417f4c0d000240024020090d00410421150c010b200910212215450d020b4100210e200241003602980320022015360290032002200941146e2211360294030240024002402010450d004100210e0340200128020422094104490d022001280200220a280000211620012009417c6a22173602042001200a41046a221136020020174102490d0220112f0000211820012009417a6a22173602042001201141026a36020020174102490d02200a2f000621192001200941786a22173602042001200a41086a221136020020174102490d0220112f0000211a2001200941766a22173602042001201141026a36020020174102490d02200a2f000a211b2001200941746a22173602042001200a410c6a221136020020174102490d0220112f0000211c2001200941726a22173602042001201141026a36020020174102490d02200a2f000e21172001200941706a22113602042001200a41106a220a36020020114102490d02200a2f0000211120012009416e6a3602042001200a41026a3602000240200e200228029403470d0020024190036a200e4101109e012002280290032115200228029803210e0b2015200e41146c6a220920113b0110200920183b0104200920163602002009410e6a20173b01002009410c6a201c3b01002009410a6a201b3b0100200941086a201a3b0100200941066a20193b01002002200e41016a220e360298032010417f6a22100d000b20022802940321110b2015450d15200241d8006a20011088012002280258450d010c140b2002280294032201450d14200141146c450d14201510230c140b200228025c2217200128020441186e2209200920174b1bad42187e220b422088a70d00200ba72209417f4c0d000240024020090d00410421180c010b200910212218450d020b41002110200241003602980320022018360290032002200941186e2216360294030240024002402017450d00410021100340200128020422094104490d022001280200220a280000211a20012009417c6a22193602042001200a41046a221636020020194102490d0220162f0000211b20012009417a6a22193602042001201641026a36020020194102490d02200a2f0006211c2001200941786a22193602042001200a41086a221636020020194102490d0220162f0000211d2001200941766a22193602042001201641026a36020020194102490d02200a2f000a211e2001200941746a22193602042001200a410c6a221636020020194102490d0220162f0000211f2001200941726a22193602042001201641026a36020020194102490d02200a2f000e21202001200941706a22193602042001200a41106a221636020020194102490d0220162f0000212120012009416e6a22193602042001201641026a36020020194102490d02200a2f0012211920012009416c6a22163602042001200a41146a220a36020020164102490d02200a2f0000211620012009416a6a3602042001200a41026a36020002402010200228029403470d0020024190036a2010410110b001200228029003211820022802980321100b2018201041186c6a220920163b01142009201b3b01042009201a360200200941126a20193b0100200941106a20213b01002009410e6a20203b01002009410c6a201f3b01002009410a6a201e3b0100200941086a201d3b0100200941066a201c3b01002002201041016a2210360298032017417f6a22170d000b20022802940321160b2018450d14200241d0006a20011088012002280250450d010c130b2002280294032201450d13200141186c450d13201810230c130b200228025422192001280204411c6e2209200920194b1bad421c7e220b422088a70d00200ba72209417f4c0d000240024020090d004104211b0c010b20091021221b450d020b4100211720024100360298032002201b3602900320022009411c6e221a360294030240024002402019450d00410021170340200128020422094104490d022001280200220a280000211d20012009417c6a221c3602042001200a41046a221a360200201c4102490d02201a2f0000211e20012009417a6a221c3602042001201a41026a360200201c4102490d02200a2f0006211f2001200941786a221c3602042001200a41086a221a360200201c4102490d02201a2f000021202001200941766a221c3602042001201a41026a360200201c4102490d02200a2f000a21212001200941746a221c3602042001200a410c6a221a360200201c4102490d02201a2f000021222001200941726a221c3602042001201a41026a360200201c4102490d02200a2f000e21232001200941706a221c3602042001200a41106a221a360200201c4102490d02201a2f0000212420012009416e6a221c3602042001201a41026a360200201c4102490d02200a2f0012212520012009416c6a221c3602042001200a41146a221a360200201c4102490d02201a2f0000212620012009416a6a221c3602042001201a41026a360200201c4102490d02200a2f0016211c2001200941686a221a3602042001200a41186a220a360200201a4102490d02200a2f0000211a2001200941666a3602042001200a41026a36020002402017200228029403470d0020024190036a2017410110a301200228029003211b20022802980321170b201b2017411c6c6a2209201a3b01182009201e3b01042009201d360200200941166a201c3b0100200941146a20263b0100200941126a20253b0100200941106a20243b01002009410e6a20233b01002009410c6a20223b01002009410a6a20213b0100200941086a20203b0100200941066a201f3b01002002201741016a2217360298032019417f6a22190d000b200228029403211a0b201b450d13200241c8006a20011088012002280248450d010c120b2002280294032201450d122001411c6c450d12201b10230c120b200228024c221c200128020441057622092009201c4b1b2209410574220a417f4c0d000240024020090d004104211e0c010b200a1021221e450d020b41002119200241003602980320022009360294032002201e36029003024002400240201c450d00410021190340200128020422094104490d022001280200220a280000212020012009417c6a221f3602042001200a41046a221d360200201f4102490d02201d2f0000212120012009417a6a221f3602042001201d41026a360200201f4102490d02200a2f000621222001200941786a221f3602042001200a41086a221d360200201f4102490d02201d2f000021232001200941766a221f3602042001201d41026a360200201f4102490d02200a2f000a21242001200941746a221f3602042001200a410c6a221d360200201f4102490d02201d2f000021252001200941726a221f3602042001201d41026a360200201f4102490d02200a2f000e21262001200941706a221f3602042001200a41106a221d360200201f4102490d02201d2f0000212720012009416e6a221f3602042001201d41026a360200201f4102490d02200a2f0012212820012009416c6a221f3602042001200a41146a221d360200201f4102490d02201d2f0000212920012009416a6a221f3602042001201d41026a360200201f4102490d02200a2f0016212a2001200941686a221f3602042001200a41186a221d360200201f4102490d02201d2f0000212b2001200941666a221f3602042001201d41026a360200201f4102490d02200a2f001a211f2001200941646a221d3602042001200a411c6a220a360200201d4102490d02200a2f0000211d2001200941626a3602042001200a41026a36020002402019200228029403470d0020024190036a2019410110a801200228029003211e20022802980321190b201e20194105746a2209201d3b011c200920213b0104200920203602002009411a6a201f3b0100200941186a202b3b0100200941166a202a3b0100200941146a20293b0100200941126a20283b0100200941106a20273b01002009410e6a20263b01002009410c6a20253b01002009410a6a20243b0100200941086a20233b0100200941066a20223b01002002201941016a221936029803201c417f6a221c0d000b20022802940321090b201e450d12200241c0006a20011088012002280240450d010c110b20022802940341ffffff3f71450d11201e10230c110b2002280244221f200128020441246e220a200a201f4b1bad42247e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421210c010b200a10212221450d020b4100211d200241003602980320022021360290032002200a41246e222036029403024002400240201f450d004100211d03402001280204220a4104490d022001280200221c28000021232001200a417c6a22223602042001201c41046a222036020020224102490d0220202f000021242001200a417a6a22223602042001202041026a36020020224102490d02201c2f000621252001200a41786a22223602042001201c41086a222036020020224102490d0220202f000021262001200a41766a22223602042001202041026a36020020224102490d02201c2f000a21272001200a41746a22223602042001201c410c6a222036020020224102490d0220202f000021282001200a41726a22223602042001202041026a36020020224102490d02201c2f000e21292001200a41706a22223602042001201c41106a222036020020224102490d0220202f0000212a2001200a416e6a22223602042001202041026a36020020224102490d02201c2f0012212b2001200a416c6a22223602042001201c41146a222036020020224102490d0220202f0000212c2001200a416a6a22223602042001202041026a36020020224102490d02201c2f0016212d2001200a41686a22223602042001201c41186a222036020020224102490d0220202f0000212e2001200a41666a22223602042001202041026a36020020224102490d02201c2f001a212f2001200a41646a22223602042001201c411c6a222036020020224102490d0220202f000021302001200a41626a22223602042001202041026a36020020224102490d02201c2f001e21222001200a41606a22203602042001201c41206a221c36020020204102490d02201c2f000021202001200a415e6a3602042001201c41026a3602000240201d200228029403470d0020024190036a201d410110a2012002280290032121200228029803211d0b2021201d41246c6a220a20203b0120200a20243b0104200a2023360200200a411e6a20223b0100200a411c6a20303b0100200a411a6a202f3b0100200a41186a202e3b0100200a41166a202d3b0100200a41146a202c3b0100200a41126a202b3b0100200a41106a202a3b0100200a410e6a20293b0100200a410c6a20283b0100200a410a6a20273b0100200a41086a20263b0100200a41066a20253b01002002201d41016a221d36029803201f417f6a221f0d000b20022802940321200b2021450d11200241386a20011088012002280238450d010c100b2002280294032201450d10200141246c450d10202110230c100b200228023c2222200128020441286e220a200a20224b1bad42287e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421230c010b200a10212223450d020b4100211f200241003602980320022023360290032002200a41286e2224360294030240024002402022450d004100211f03402001280204220a4104490d022001280200221c28000021262001200a417c6a22253602042001201c41046a222436020020254102490d0220242f000021272001200a417a6a22253602042001202441026a36020020254102490d02201c2f000621282001200a41786a22253602042001201c41086a222436020020254102490d0220242f000021292001200a41766a22253602042001202441026a36020020254102490d02201c2f000a212a2001200a41746a22253602042001201c410c6a222436020020254102490d0220242f0000212b2001200a41726a22253602042001202441026a36020020254102490d02201c2f000e212c2001200a41706a22253602042001201c41106a222436020020254102490d0220242f0000212d2001200a416e6a22253602042001202441026a36020020254102490d02201c2f0012212e2001200a416c6a22253602042001201c41146a222436020020254102490d0220242f0000212f2001200a416a6a22253602042001202441026a36020020254102490d02201c2f001621302001200a41686a22253602042001201c41186a222436020020254102490d0220242f000021312001200a41666a22253602042001202441026a36020020254102490d02201c2f001a21322001200a41646a22253602042001201c411c6a222436020020254102490d0220242f000021332001200a41626a22253602042001202441026a36020020254102490d02201c2f001e21342001200a41606a22253602042001201c41206a222436020020254102490d0220242f000021352001200a415e6a22253602042001202441026a36020020254102490d02201c2f002221252001200a415c6a22243602042001201c41246a221c36020020244102490d02201c2f000021242001200a415a6a3602042001201c41026a3602000240201f200228029403470d0020024190036a201f410110aa012002280290032123200228029803211f0b2023201f41286c6a220a20243b0124200a20273b0104200a2026360200200a41226a20253b0100200a41206a20353b0100200a411e6a20343b0100200a411c6a20333b0100200a411a6a20323b0100200a41186a20313b0100200a41166a20303b0100200a41146a202f3b0100200a41126a202e3b0100200a41106a202d3b0100200a410e6a202c3b0100200a410c6a202b3b0100200a410a6a202a3b0100200a41086a20293b0100200a41066a20283b01002002201f41016a221f360298032022417f6a22220d000b20022802940321240b2023450d10200241306a20011088012002280230450d010c0f0b2002280294032201450d0f200141286c450d0f202310230c0f0b200228023422252001280204412c6e220a200a20254b1bad422c7e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421260c010b200a10212226450d020b41002122200241003602880120022026360280012002200a412c6e22273602840102402025450d004100212203402001280204220a4104490d0e2001280200221c280000212b2001200a417c6a22283602042001201c41046a2227360200200241003a00b403200241003b01d00320284102490d0e20272f000021292001200a417a6a22283602042001202741026a360200200241003b01d00320284102490d0e201c2f000621282001200a41786a222a3602042001201c41086a2227360200200220293b019003200241013a00b403200220283b019203200241003b01d003202a4102490d0d20272f000021292001200a41766a22283602042001202741026a360200200241003b01d003202841014d0d0d201c2f000a21282001200a41746a222a3602042001201c410c6a2227360200200220293b019403200220283b019603200241023a00b403200241003b01d003202a4102490d0d20272f000021292001200a41726a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f000e21282001200a41706a222a3602042001201c41106a2227360200200220293b019803200241033a00b403200220283b019a03200241003b01d003202a4102490d0d20272f000021292001200a416e6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001221282001200a416c6a222a3602042001201c41146a2227360200200220293b019c03200241043a00b403200220283b019e03200241003b01d003202a4102490d0d20272f000021292001200a416a6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001621282001200a41686a222a3602042001201c41186a2227360200200220293b01a003200241053a00b403200220283b01a203200241003b01d003202a4102490d0d20272f000021292001200a41666a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001a21282001200a41646a222a3602042001201c411c6a2227360200200220293b01a403200241063a00b403200220283b01a603200241003b01d003202a4102490d0d20272f000021292001200a41626a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001e21282001200a41606a222a3602042001201c41206a2227360200200220293b01a803200241073a00b403200220283b01aa03200241003b01d003202a4102490d0d20272f000021292001200a415e6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f002221282001200a415c6a222a3602042001201c41246a2227360200200220293b01ac03200241083a00b403200220283b01ae03200241003b01d003202a4102490d0d20272f000021292001200a415a6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f002621272001200a41586a22283602042001201c41286a221c360200200220293b01b003200241093a00b403200220273b01b203200241d0036a41206a20022802b0032227360200200241d0036a41186a20024190036a41186a290300220b370300200241d0036a41106a20024190036a41106a2903002212370300200241d0036a41086a20024190036a41086a2903002213370300200220022903900322143703d003200241d0026a41206a22292027360200200241d0026a41186a2227200b370300200241d0026a41106a222a2012370300200241d0026a41086a222c2013370300200220143703d00220284102490d0e201c2f000021282001200a41566a3602042001201c41026a36020020024190026a41106a202a290300220b370300200241d0016a41086a202c2903002212370300200241d0016a41106a200b370300200241d0016a41186a20272903002213370300200241d0016a41206a2029280200220a360200200220022903d00222143703d00120024190016a41206a221c200a36020020024190016a41186a2227201337030020024190016a41106a2229200b37030020024190016a41086a222a2012370300200220143703900102402022200228028401470d0020024180016a2022410110a601200228028001212620022802880121220b20262022412c6c6a220a202b360200200a200229039001370204201c280200211c2027290300210b20292903002112202a2903002113200a20283b0128200a410c6a2013370200200a41146a2012370200200a411c6a200b370200200a41246a201c3602002002202241016a2222360288012025417f6a22250d000b20022802840121270b2026450d0d200241286a200110880120022802280d0a200228022c2228200128020441306e220a200a20284b1bad42307e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421290c010b200a10212229450d020b41002125200241003602880120022029360280012002200a41306e222a3602840102402028450d004100212503402001280204220a4104490d0b2001280200221c280000212e2001200a417c6a222b3602042001201c41046a222a360200200241003a00b803200241003b01d003202b4102490d0b202a2f0000212c2001200a417a6a222b3602042001202a41026a360200200241003b01d003202b4102490d0b201c2f0006212b2001200a41786a222d3602042001201c41086a222a3602002002202c3b019003200241013a00b8032002202b3b019203200241003b01d003202d4102490d0a202a2f0000212c2001200a41766a222b3602042001202a41026a360200200241003b01d003202b41014d0d0a201c2f000a212b2001200a41746a222d3602042001201c410c6a222a3602002002202c3b0194032002202b3b019603200241023a00b803200241003b01d003202d4102490d0a202a2f0000212c2001200a41726a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f000e212b2001200a41706a222d3602042001201c41106a222a3602002002202c3b019803200241033a00b8032002202b3b019a03200241003b01d003202d4102490d0a202a2f0000212c2001200a416e6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0012212b2001200a416c6a222d3602042001201c41146a222a3602002002202c3b019c03200241043a00b8032002202b3b019e03200241003b01d003202d4102490d0a202a2f0000212c2001200a416a6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0016212b2001200a41686a222d3602042001201c41186a222a3602002002202c3b01a003200241053a00b8032002202b3b01a203200241003b01d003202d4102490d0a202a2f0000212c2001200a41666a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f001a212b2001200a41646a222d3602042001201c411c6a222a3602002002202c3b01a403200241063a00b8032002202b3b01a603200241003b01d003202d4102490d0a202a2f0000212c2001200a41626a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f001e212b2001200a41606a222d3602042001201c41206a222a3602002002202c3b01a803200241073a00b8032002202b3b01aa03200241003b01d003202d4102490d0a202a2f0000212c2001200a415e6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0022212b2001200a415c6a222d3602042001201c41246a222a3602002002202c3b01ac03200241083a00b8032002202b3b01ae03200241003b01d003202d4102490d0a202a2f0000212c2001200a415a6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0026212b2001200a41586a222d3602042001201c41286a222a3602002002202c3b01b003200241093a00b8032002202b3b01b203200241003b01d003202d4102490d0a202a2f0000212c2001200a41566a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f002a212a2001200a41546a222b3602042001201c412c6a221c3602002002202c3b01b4032002410a3a00b8032002202a3b01b603200241d0036a41206a20024190036a41206a290300220b370300200241d0036a41186a20024190036a41186a2903002212370300200241d0036a41106a20024190036a41106a2903002213370300200241d0036a41086a20024190036a41086a2903002214370300200220022903900322363703d003200241d0026a41206a222a200b370300200241d0026a41186a222c2012370300200241d0026a41106a222d2013370300200241d0026a41086a222f2014370300200220363703d002202b4102490d0b201c2f0000212b2001200a41526a3602042001201c41026a36020020024190026a41106a202d290300220b370300200241d0016a41086a202f2903002212370300200241d0016a41106a200b370300200241d0016a41186a202c2903002213370300200241d0016a41206a202a2903002214370300200220022903d00222363703d00120024190016a41206a221c201437030020024190016a41186a222a201337030020024190016a41106a222c200b37030020024190016a41086a222d2012370300200220363703900102402025200228028401470d0020024180016a2025410110b601200228028001212920022802880121250b2029202541306c6a220a202e360200200a200229039001370204201c290300210b202a2903002112202c2903002113202d2903002114200a202b3b012c200a410c6a2014370200200a41146a2013370200200a411c6a2012370200200a41246a200b3702002002202541016a2225360288012028417f6a22280d000b200228028401212a0b2029450d0a200241206a200110880120022802200d072002280224222b200128020441346e220a200a202b4b1bad42347e220b422088a70d00200ba7220a417f4c0d0002400240200a0d004104212c0c010b200a1021222c450d020b4100212820024100360288012002202c360280012002200a41346e222d360284010240202b450d004100212803402001280204220a4104490d082001280200221c28000021312001200a417c6a222e3602042001201c41046a222d360200200241003a00bc03200241003b01d003202e4102490d08202d2f0000212f2001200a417a6a222e3602042001202d41026a360200200241003b01d003202e4102490d08201c2f0006212e2001200a41786a22303602042001201c41086a222d3602002002202f3b019003200241013a00bc032002202e3b019203200241003b01d00320304102490d07202d2f0000212f2001200a41766a222e3602042001202d41026a360200200241003b01d003202e41014d0d07201c2f000a212e2001200a41746a22303602042001201c410c6a222d3602002002202f3b0194032002202e3b019603200241023a00bc03200241003b01d00320304102490d07202d2f0000212f2001200a41726a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f000e212e2001200a41706a22303602042001201c41106a222d3602002002202f3b019803200241033a00bc032002202e3b019a03200241003b01d00320304102490d07202d2f0000212f2001200a416e6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0012212e2001200a416c6a22303602042001201c41146a222d3602002002202f3b019c03200241043a00bc032002202e3b019e03200241003b01d00320304102490d07202d2f0000212f2001200a416a6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0016212e2001200a41686a22303602042001201c41186a222d3602002002202f3b01a003200241053a00bc032002202e3b01a203200241003b01d00320304102490d07202d2f0000212f2001200a41666a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f001a212e2001200a41646a22303602042001201c411c6a222d3602002002202f3b01a403200241063a00bc032002202e3b01a603200241003b01d00320304102490d07202d2f0000212f2001200a41626a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f001e212e2001200a41606a22303602042001201c41206a222d3602002002202f3b01a803200241073a00bc032002202e3b01aa03200241003b01d00320304102490d07202d2f0000212f2001200a415e6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0022212e2001200a415c6a22303602042001201c41246a222d3602002002202f3b01ac03200241083a00bc032002202e3b01ae03200241003b01d00320304102490d07202d2f0000212f2001200a415a6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0026212e2001200a41586a22303602042001201c41286a222d3602002002202f3b01b003200241093a00bc032002202e3b01b203200241003b01d00320304102490d07202d2f0000212f2001200a41566a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f002a212e2001200a41546a22303602042001201c412c6a222d3602002002202f3b01b4032002410a3a00bc032002202e3b01b603200241003b01d00320304102490d07202d2f0000212f2001200a41526a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f002e212d2001200a41506a222e3602042001201c41306a221c3602002002202f3b01b8032002410b3a00bc032002202d3b01ba03200241d0036a41286a20022802b803222d360200200241d0036a41206a20024190036a41206a290300220b370300200241d0036a41186a20024190036a41186a2903002212370300200241d0036a41106a20024190036a41106a2903002213370300200241d0036a41086a20024190036a41086a2903002214370300200220022903900322363703d003200241d0026a41286a222f202d360200200241d0026a41206a222d200b370300200241d0026a41186a22302012370300200241d0026a41106a22322013370300200241d0026a41086a22332014370300200220363703d002202e4102490d08201c2f0000212e2001200a414e6a3602042001201c41026a36020020024190026a41106a2032290300220b37030020024190026a41186a20302903002212370300200241d0016a41086a220a2033290300370300200241d0016a41106a221c200b370300200241d0016a41186a22302012370300200241d0016a41206a2232202d290300370300200241d0016a41286a222d202f280200360200200220022903d0023703d00120024190016a41286a222f202d28020036020020024190016a41206a222d203229030037030020024190016a41186a2232203029030037030020024190016a41106a2230201c29030037030020024190016a41086a221c200a290300370300200220022903d0013703900102402028200228028401470d0020024180016a2028410110a701200228028001212c20022802880121280b202c202841346c6a220a2031360200200a200229039001370204202f280200212f202d290300210b2032290300211220302903002113201c2903002114200a202e3b0130200a410c6a2014370200200a41146a2013370200200a411c6a2012370200200a41246a200b370200200a412c6a202f3602002002202841016a222836028801202b417f6a222b0d000b200228028401212d0b202c450d07200241186a200110880120022802180d04200228021c222e200128020441386e220a200a202e4b1bad42387e220b422088a70d00200ba7220a417f4c0d0002400240200a0d004104212f0c010b200a1021222f450d020b4100212b20024100360288012002202f360280012002200a41386e2234360284010240202e450d004100212b03402001280204220a4104490d052001280200221c28000021342001200a417c6a22313602042001201c41046a2230360200200241003a00c003200241003b01d00320314102490d0520302f000021322001200a417a6a22313602042001203041026a360200200241003b01d00320314102490d05201c2f000621312001200a41786a22333602042001201c41086a2230360200200220323b019003200241013a00c003200220313b019203200241003b01d00320334102490d0420302f000021322001200a41766a22313602042001203041026a360200200241003b01d003203141014d0d04201c2f000a21312001200a41746a22333602042001201c410c6a2230360200200220323b019403200220313b019603200241023a00c003200241003b01d00320334102490d0420302f000021322001200a41726a22313602042001203041026a360200200241003b01d00320314102490d04201c2f000e21312001200a41706a22333602042001201c41106a2230360200200220323b019803200241033a00c003200220313b019a03200241003b01d00320334102490d0420302f000021322001200a416e6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001221312001200a416c6a22333602042001201c41146a2230360200200220323b019c03200241043a00c003200220313b019e03200241003b01d00320334102490d0420302f000021322001200a416a6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001621312001200a41686a22333602042001201c41186a2230360200200220323b01a003200241053a00c003200220313b01a203200241003b01d00320334102490d0420302f000021322001200a41666a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001a21312001200a41646a22333602042001201c411c6a2230360200200220323b01a403200241063a00c003200220313b01a603200241003b01d00320334102490d0420302f000021322001200a41626a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001e21312001200a41606a22333602042001201c41206a2230360200200220323b01a803200241073a00c003200220313b01aa03200241003b01d00320334102490d0420302f000021322001200a415e6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002221312001200a415c6a22333602042001201c41246a2230360200200220323b01ac03200241083a00c003200220313b01ae03200241003b01d00320334102490d0420302f000021322001200a415a6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002621312001200a41586a22333602042001201c41286a2230360200200220323b01b003200241093a00c003200220313b01b203200241003b01d00320334102490d0420302f000021322001200a41566a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002a21312001200a41546a22333602042001201c412c6a2230360200200220323b01b4032002410a3a00c003200220313b01b603200241003b01d00320334102490d0420302f000021322001200a41526a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002e21312001200a41506a22333602042001201c41306a2230360200200220323b01b8032002410b3a00c003200220313b01ba03200241003b01d00320334102490d0420302f000021322001200a414e6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f003221302001200a414c6a22313602042001201c41346a221c360200200220323b01bc032002410c3a00c003200220303b01be03200241d0036a41286a20024190036a41286a290300220b370300200241d0036a41206a20024190036a41206a2903002212370300200241d0036a41186a20024190036a41186a2903002213370300200241d0036a41106a20024190036a41106a2903002214370300200241d0036a41086a20024190036a41086a2903002236370300200220022903900322373703d003200241d0026a41286a2230200b370300200241d0026a41206a22322012370300200241d0026a41186a22332013370300200241d0026a41106a22352014370300200241d0026a41086a22382036370300200220373703d00220314102490d05201c2f000021312001200a414a6a3602042001201c41026a36020020024190026a41106a2035290300220b37030020024190026a41186a20332903002212370300200241d0016a41086a220a2038290300370300200241d0016a41106a221c200b370300200241d0016a41186a22332012370300200241d0016a41206a22352032290300370300200241d0016a41286a22322030290300370300200220022903d0023703d00120024190016a41286a2230203229030037030020024190016a41206a2232203529030037030020024190016a41186a2235203329030037030020024190016a41106a2233201c29030037030020024190016a41086a221c200a290300370300200220022903d001370390010240202b200228028401470d0020024180016a202b410110ae01200228028001212f200228028801212b0b202f202b41386c6a220a2034360200200a2002290390013702042030290300210b203229030021122035290300211320332903002114201c2903002136200a20313b0134200a410c6a2036370200200a41146a2014370200200a411c6a2013370200200a41246a2012370200200a412c6a200b3702002002202b41016a222b36028801202e417f6a222e0d000b20022802840121340b202f450d04200241106a2001108801024002400240024002400240024020022802100d00200228021422392001280204413c6e220a200a20394b1bad423c7e220b422088a70d07200ba7220a417f4c0d0702400240200a0d004104213a0c010b200a1021223a450d090b4100213b20024100360288012002203a360280012002200a413c6e2235360284010240024002402039450d004100213b4100213c0340200128020422354104490d03203c41016a213c417c211c20012802002238280000213d20012035417c6a3602042001203841046a3602004100210a200241003a00c403410021310340200241003b01d0032035201c6a222e4102490d032038200a6a223041046a2f000021322001202e417e6a222e3602042001203041066a2230360200200241003b01d003202e4102490d0320024190036a200a6a223320323b0100203341026a20302f00003b01002001202e417e6a3602042001203041026a3602002002203141016a22313a00c403201c417c6a211c200a41046a220a4134470d000b200241d0036a41306a222e20024190036a41306a280200360200200241d0036a41286a223020024190036a41286a290300370300200241d0036a41206a223220024190036a41206a290300370300200241d0036a41186a223320024190036a41186a290300370300200241d0036a41106a223e20024190036a41106a290300370300200241d0036a41086a223f20024190036a41086a29030037030020022002290390033703d003203141ff0171410d490d03200241d0026a41306a2231202e280200360200200241d0026a41286a222e2030290300370300200241d0026a41206a22302032290300370300200241d0026a41186a22322033290300370300200241d0026a41106a2233203e290300370300200241d0026a41086a223e203f290300370300200220022903d0033703d0022035201c6a41014d0d032038200a6a221c41046a2f0000213820012035200a6b417a6a3602042001201c41066a36020020024190026a41086a203e290300220b37030020024190026a41106a2033290300221237030020024190026a41186a2032290300221337030020024190026a41206a2030290300221437030020024190026a41286a202e290300223637030020024190026a41306a2031280200220a360200200220022903d002223737039002200241d0016a41306a221c200a360200200241d0016a41286a220a2036370300200241d0016a41206a222e2014370300200241d0016a41186a22302013370300200241d0016a41106a22312012370300200241d0016a41086a2232200b370300200220373703d00120024190016a41306a2233201c28020036020020024190016a41286a221c200a29030037030020024190016a41206a2235202e29030037030020024190016a41186a222e203029030037030020024190016a41106a2230203129030037030020024190016a41086a22312032290300370300200220022903d001370390010240203b200228028401470d0020024180016a203b410110b701200228028001213a200228028801213b0b203a203b413c6c6a220a203d360200200a20022903900137020420332802002132201c290300210b20352903002112202e29030021132030290300211420312903002136200a20383b0138200a410c6a2036370200200a41146a2014370200200a411c6a2013370200200a41246a2012370200200a412c6a200b370200200a41346a20323602002002203b41016a223b36028801203c2039470d000b20022802840121350b203a450d02200241086a200110880120022802080d05200228020c223d2001280204410676220a200a203d4b1b221c410674220a417f4c0d09201c0d034104213c0c040b203141ff0171450d00200241003a00c4030b200241d0016a41306a20024190026a41306a280200360200200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d002001413c6c450d00203a10230b2000410036020002402034450d00203441386c450d00202f10230b0240202d450d00202d41346c450d00202c10230b0240202a450d00202a41306c450d00202910230b02402027450d002027412c6c450d00202610230b02402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d1c0c1d0b200a1021223c450d060b4100213e20024100360288012002201c360284012002203c36028001024002400240203d450d004100213e4100213f0340200128020422384104490d03203f41016a213f417c211c20012802002239280000214020012038417c6a3602042001203941046a3602004100210a200241003a00c803410021310340200241003b01d0032038201c6a222e4102490d032039200a6a223041046a2f000021322001202e417e6a222e3602042001203041066a2230360200200241003b01d003202e4102490d0320024190036a200a6a223320323b0100203341026a20302f00003b01002001202e417e6a3602042001203041026a3602002002203141016a22313a00c803201c417c6a211c200a41046a220a4138470d000b200241d0036a41306a222e20024190036a41306a290300370300200241d0036a41286a223020024190036a41286a290300370300200241d0036a41206a223220024190036a41206a290300370300200241d0036a41186a223320024190036a41186a290300370300200241d0036a41106a224120024190036a41106a290300370300200241d0036a41086a224220024190036a41086a29030037030020022002290390033703d003203141ff0171410e490d03200241d0026a41306a2231202e290300370300200241d0026a41286a222e2030290300370300200241d0026a41206a22302032290300370300200241d0026a41186a22322033290300370300200241d0026a41106a22332041290300370300200241d0026a41086a22412042290300370300200220022903d0033703d0022038201c6a41014d0d032039200a6a221c41046a2f0000213920012038200a6b417a6a3602042001201c41066a36020020024190026a41086a2041290300220b37030020024190026a41106a2033290300221237030020024190026a41186a2032290300221337030020024190026a41206a2030290300221437030020024190026a41286a202e290300223637030020024190026a41306a20312903002237370300200220022903d002224337039002200241d0016a41306a220a2037370300200241d0016a41286a221c2036370300200241d0016a41206a222e2014370300200241d0016a41186a22302013370300200241d0016a41106a22312012370300200241d0016a41086a2232200b370300200220433703d00120024190016a41306a2233200a29030037030020024190016a41286a2238201c29030037030020024190016a41206a221c202e29030037030020024190016a41186a222e203029030037030020024190016a41106a2230203129030037030020024190016a41086a22312032290300370300200220022903d001370390010240203e200228028401470d0020024180016a203e410110b301200228028001213c200228028801213e0b203c203e4106746a220a2040360200200a2002290390013702042033290300210b20382903002112201c2903002113202e29030021142030290300213620312903002137200a20393b013c200a410c6a2037370200200a41146a2036370200200a411c6a2014370200200a41246a2013370200200a412c6a2012370200200a41346a200b3702002002203e41016a223e36028801203f203d470d000b200228028401211c0b203c450d022002200110880120022802000d0520022802042240200128020441c4006e220a200a20404b1bad42c4007e220b422088a70d06200ba7220a417f4c0d06200a0d034104213f0c040b203141ff0171450d00200241003a00c8030b200241d0016a41306a20024190026a41306a290300370300200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a29030037030020022802840141ffffff1f71450d00203c10230b2000410036020002402035450d002035413c6c450d00203a10230b02402034450d00203441386c450d00202f10230b0240202d450d00202d41346c450d00202c10230b0240202a450d00202a41306c450d00202910230b02402027450d002027412c6c450d00202610230b02402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d190c1a0b200a1021223f450d030b20024100360288012002203f360280012002200a41c4006e360284010240024002402040450d0041002142410021410340200128020422394104490d03204141016a2141417c212e2001280200223d280000214420012039417c6a3602042001203d41046a3602004100210a200241003a00cc03410021320340200241003b01d0032039202e6a22304102490d03203d200a6a223141046a2f0000213320012030417e6a22303602042001203141066a2231360200200241003b01d00320304102490d0320024190036a200a6a223820333b0100203841026a20312f00003b010020012030417e6a3602042001203141026a3602002002203241016a22323a00cc03202e417c6a212e200a41046a220a413c470d000b200241d0036a41386a223020024190036a41386a280200360200200241d0036a41306a223120024190036a41306a290300370300200241d0036a41286a223320024190036a41286a290300370300200241d0036a41206a223820024190036a41206a290300370300200241d0036a41186a224520024190036a41186a290300370300200241d0036a41106a224620024190036a41106a290300370300200241d0036a41086a224720024190036a41086a29030037030020022002290390033703d003203241ff0171410f490d03200241d0026a41386a22322030280200360200200241d0026a41306a22302031290300370300200241d0026a41286a22312033290300370300200241d0026a41206a22332038290300370300200241d0026a41186a22382045290300370300200241d0026a41106a22452046290300370300200241d0026a41086a22462047290300370300200220022903d0033703d0022039202e6a41014d0d03203d200a6a222e41046a2f0000213d20012039200a6b417a6a3602042001202e41066a36020020024190026a41086a220a204629030037030020024190026a41106a222e204529030037030020024190026a41186a2239203829030037030020024190026a41206a2238203329030037030020024190026a41286a2233203129030037030020024190026a41306a2231203029030037030020024190026a41386a22302032280200360200200220022903d00237039002200241d0016a41086a200a290300220b370300200241d0016a41106a202e2903002212370300200241d0016a41186a20392903002213370300200241d0016a41206a20382903002214370300200241d0016a41286a20332903002236370300200241d0016a41306a20312903002237370300200241d0016a41386a2030280200220a36020020024190016a41086a222e200b37030020024190016a41106a2230201237030020024190016a41186a2231201337030020024190016a41206a2232201437030020024190016a41286a2233203637030020024190016a41306a2238203737030020024190016a41386a2239200a3602002002200229039002220b3703d0012002200b3703900102402042200228028401470d0020024180016a20424101109b01200228028001213f20022802880121420b203f204241c4006c6a220a2044360200200a200229039001370204203928020021392038290300210b20332903002112203229030021132031290300211420302903002136202e2903002137200a203d3b0140200a410c6a2037370200200a41146a2036370200200a411c6a2014370200200a41246a2013370200200a412c6a2012370200200a41346a200b370200200a413c6a20393602002002204241016a22423602880120412040470d000b0b203f450d02200229028401210b2000200536020420002006360200200041b8016a200b370200200041b4016a203f360200200041b0016a203e360200200041ac016a201c360200200041a8016a203c360200200041a4016a203b360200200041a0016a20353602002000419c016a203a36020020004198016a202b36020020004194016a203436020020004190016a202f3602002000418c016a202836020020004188016a202d36020020004184016a202c36020020004180016a2025360200200041fc006a202a360200200041f8006a2029360200200041f4006a2022360200200041f0006a2027360200200041ec006a2026360200200041e8006a201f360200200041e4006a2024360200200041e0006a2023360200200041dc006a201d360200200041d8006a2020360200200041d4006a2021360200200041d0006a2019360200200041cc006a2009360200200041c8006a201e360200200041c4006a2017360200200041c0006a201a3602002000413c6a201b360200200041386a2010360200200041346a2016360200200041306a20183602002000412c6a200e360200200041286a2011360200200041246a2015360200200041206a20083602002000411c6a2003360200200041186a200f360200200041146a2007360200200041106a200d3602002000410c6a200c360200200041086a20043602000c1a0b203241ff0171450d00200241003a00cc030b200241d0016a41386a20024190026a41386a280200360200200241d0016a41306a20024190026a41306a290300370300200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141c4006c450d00203f10230b200041003602000240201c41ffffff1f71450d00203c10230b02402035450d002035413c6c450d00203a10230b02402034450d00203441386c450d00202f10230b0240202d450d00202d41346c450d00202c10230b0240202a450d00202a41306c450d00202910230b02402027450d002027412c6c450d00202610230b02402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff0171450d170c160b1032000b1033000b200241003a00c0030b200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141386c450d00202f10230b200041003602000240202d450d00202d41346c450d00202c10230b0240202a450d00202a41306c450d00202910230b02402027450d002027412c6c450d00202610230b02402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d110c120b200241003a00bc030b200241d0016a41286a20024190026a41286a280200360200200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141346c450d00202c10230b200041003602000240202a450d00202a41306c450d00202910230b02402027450d002027412c6c450d00202610230b02402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d0e0c0f0b200241003a00b8030b200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141306c450d00202910230b2000410036020002402027450d002027412c6c450d00202610230b02402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d0b0c0c0b200241003a00b4030b200241d0016a41206a20024190026a41206a280200360200200241d0016a41186a20024190026a41186a2903003703002002280284012201450d002001412c6c450d00202610230b2000410036020002402024450d00202441286c450d00202310230b02402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d080c090b2000410036020002402020450d00202041246c450d00202110230b0240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d070c080b200041003602000240200941ffffff3f71450d00201e10230b0240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d060c070b200041003602000240201a450d00201a411c6c450d00201b10230b02402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d050c060b2000410036020002402016450d00201641186c450d00201810230b02402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d040c050b2000410036020002402011450d00201141146c450d00201510230b0240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d030c040b200041003602000240200341ffffffff0071450d00200f10230b0240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d020c030b200041003602000240200d450d00200d410c6c450d00200c10230b200541ffffffff01710d010c020b20004100360200200541ffffffff0171450d010b200610230b20024190046a24000bf70301017f0240200041046a28020041ffffffff0171450d00200028020010230b0240200041106a2802002201450d002001410c6c450d00200028020c10230b02402000411c6a28020041ffffffff0071450d00200028021810230b0240200041286a2802002201450d00200141146c450d00200028022410230b0240200041346a2802002201450d00200141186c450d00200028023010230b0240200041c0006a2802002201450d002001411c6c450d00200028023c10230b0240200041cc006a28020041ffffff3f71450d00200028024810230b0240200041d8006a2802002201450d00200141246c450d00200028025410230b0240200041e4006a2802002201450d00200141286c450d00200028026010230b0240200041f0006a2802002201450d002001412c6c450d00200028026c10230b0240200041fc006a2802002201450d00200141306c450d00200028027810230b024020004188016a2802002201450d00200141346c450d0020002802840110230b024020004194016a2802002201450d00200141386c450d0020002802900110230b0240200041a0016a2802002201450d002001413c6c450d00200028029c0110230b0240200041ac016a28020041ffffff1f71450d0020002802a80110230b0240200041b8016a2802002201450d00200141c4006c450d0020002802b40110230b0be49301032a7f047e247f23004180026b22042400200441b8016a4200370300200441b0016a22054280808080c000370300200441a0016a420037030020044198016a22064280808080c00037030020044188016a420037030020044180016a22074280808080c000370300200441f0006a4200370300200441e8006a22084280808080c000370300200441d8006a4200370300200441d0006a22094280808080c000370300200441c0006a4200370300200441386a220a4280808080c000370300200441286a4200370300200441206a220b4280808080c000370300200441106a4200370300200442043703a8012004420437039001200442043703782004420437036020044204370348200442043703302004420437031820044280808080c000370308200442043703002001280200220c2001280208220d412c6c220e6a210f20012802042110200c2101024002400240200d450d00200441bc016a2111200441b4016a2112200441a8016a2113200441a4016a21142004419c016a211520044190016a21162004418c016a211720044184016a2118200441f8006a2119200441f4006a211a200441ec006a211b200441e0006a211c200441dc006a211d200441d4006a211e200441c8006a211f200441c4006a21202004413c6a2121200441306a21222004412c6a2123200441246a2124200441186a2125200441146a21262004410c6a2127200441086a2128200e41546a210d200441e0016a41086a2129200441e0016a41106a212a200441e0016a41186a212b200c210e0340200e280208212c200e280204212d2029200e41146a290200370300202a200e411c6a290200370300202b200e41246a2902003703002004200e29020c3703e001200e412c6a2101200e280200220e450d01200441c0016a41186a202b290300222e370300200441c0016a41106a202a290300222f370300200441c0016a41086a20292903002230370300200420042903e00122313703c001202b202e370300202a202f37030020292030370300200420313703e001024002400240202c41104d0d00410121320c010b024002400240024002400240024002400240024002400240024002400240024002400240202c0e11000102030405060708090a0b0c0d0e0f10000b0240202d450d00202d41226c450d00200e10230b2001200f460d150c120b4102213220022802082233450d102002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c120b0b20032802082234450d102003280200212c203441057421354100213402400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c120b0b2034418080044f0d1002402004280208222c2004280204470d002004202c410110a5012004280208212c0b2004280200202c4103746a222c20343b0104202c20333602002028212c0c0f0b4102213220022802082233450d0f2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c110b0b2003280208222c450d0f41002135202c4105742237213620032802002234212c02400340200e202c460d012035202c200e412010a30522384100476a21352038450d01202c41206a212c203641606a22360d000c110b0b203541ffff034b0d0f200e41226a2136200e2f012021394100212c0240034020362034460d01202c20342036412010a30522384100476a212c2038450d01203441206a2134203741606a22370d000c110b0b202c41ffff034b0d0f0240200428021422322004280210470d00202720324101109501200428021421320b200428020c2032410c6c6a2232202c3b0108203220353b010420322033360200203241066a20393b01002026212c0c0e0b4102213220022802082233450d0e2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c100b0b2003280208222c450d0e41002134202c410574223a213520032802002238212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c100b0b203441ffff034b0d0e200e41226a2136200e2f0120213b41002135203a21372038212c024003402036202c460d012035202c2036412010a30522394100476a21352039450d01202c41206a212c203741606a22370d000c100b0b203541ffff034b0d0e200e41c4006a2136200e41c2006a2f010021394100212c0240034020362038460d01202c20382036412010a30522374100476a212c2037450d01203841206a2138203a41606a223a0d000c100b0b202c41ffff034b0d0e024020042802202232200428021c470d0020252032410110a001200428022021320b200428021820324104746a2232202c3b010c203220343b0104203220333602002032410a6a20393b0100203241086a20353b0100203241066a203b3b0100200b212c0c0d0b4102213220022802082233450d0d2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c0f0b0b2003280208222c450d0d41002134202c410574223b213520032802002237212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c0f0b0b203441ffff034b0d0d200e41226a2136200e2f0120213c41002135203b21382037212c024003402036202c460d012035202c2036412010a30522394100476a21352039450d01202c41206a212c203841606a22380d000c0f0b0b203541ffff034b0d0d200e41c4006a2138200e41c2006a2f0100213d41002136203b21392037212c024003402038202c460d012036202c2038412010a305223a4100476a2136203a450d01202c41206a212c203941606a22390d000c0f0b0b203641ffff034b0d0d200e41e6006a2138200e41e4006a2f0100213a4100212c0240034020382037460d01202c20372038412010a30522394100476a212c2039450d01203741206a2137203b41606a223b0d000c0f0b0b202c41ffff034b0d0d0240200428022c22322004280228470d00202420324101109e01200428022c21320b2004280224203241146c6a2232202c3b0110203220343b0104203220333602002032410e6a203a3b01002032410c6a20363b01002032410a6a203d3b0100203241086a20353b0100203241066a203c3b01002023212c0c0c0b4102213220022802082233450d0c2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c0e0b0b2003280208222c450d0c41002134202c410574223b213520032802002239212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c0e0b0b203441ffff034b0d0c200e41226a2136200e2f0120213d41002135203b21382039212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c0e0b0b203541ffff034b0d0c200e41c4006a2138200e41c2006a2f0100213e41002136203b21372039212c024003402038202c460d012036202c2038412010a305223a4100476a2136203a450d01202c41206a212c203741606a22370d000c0e0b0b203641ffff034b0d0c200e41e6006a2137200e41e4006a2f0100213f41002138203b213a2039212c024003402037202c460d012038202c2037412010a305223c4100476a2138203c450d01202c41206a212c203a41606a223a0d000c0e0b0b203841ffff034b0d0c200e4188016a2137200e4186016a2f0100213c4100212c0240034020372039460d01202c20392037412010a305223a4100476a212c203a450d01203941206a2139203b41606a223b0d000c0e0b0b202c41ffff034b0d0c0240200428023822322004280234470d0020222032410110b001200428023821320b2004280230203241186c6a2232202c3b0114203220343b010420322033360200203241126a203c3b0100203241106a20383b01002032410e6a203f3b01002032410c6a20363b01002032410a6a203e3b0100203241086a20353b0100203241066a203d3b0100200a212c0c0b0b4102213220022802082233450d0b2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c0d0b0b2003280208222c450d0b41002134202c410574223c21352003280200223a212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c0d0b0b203441ffff034b0d0b200e41226a2136200e2f0120213e41002135203c2138203a212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c0d0b0b203541ffff034b0d0b200e41c4006a2138200e41c2006a2f0100213f41002136203c2137203a212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a22370d000c0d0b0b203641ffff034b0d0b200e41e6006a2137200e41e4006a2f0100214041002138203c2139203a212c024003402037202c460d012038202c2037412010a305223b4100476a2138203b450d01202c41206a212c203941606a22390d000c0d0b0b203841ffff034b0d0b200e4188016a2139200e4186016a2f0100214141002137203c213b203a212c024003402039202c460d012037202c2039412010a305223d4100476a2137203d450d01202c41206a212c203b41606a223b0d000c0d0b0b203741ffff034b0d0b200e41aa016a2139200e41a8016a2f0100213d4100212c024003402039203a460d01202c203a2039412010a305223b4100476a212c203b450d01203a41206a213a203c41606a223c0d000c0d0b0b202c41ffff034b0d0b0240200428024422322004280240470d0020212032410110a301200428024421320b200428023c2032411c6c6a2232202c3b0118203220343b010420322033360200203241166a203d3b0100203241146a20373b0100203241126a20413b0100203241106a20383b01002032410e6a20403b01002032410c6a20363b01002032410a6a203f3b0100203241086a20353b0100203241066a203e3b01002020212c0c0a0b4102213220022802082233450d0a2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c0c0b0b2003280208222c450d0a41002134202c410574223c21352003280200223a212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c0c0b0b203441ffff034b0d0a200e41226a2136200e2f0120213f41002135203c2138203a212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c0c0b0b203541ffff034b0d0a200e41c4006a2138200e41c2006a2f0100214041002136203c2137203a212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a22370d000c0c0b0b203641ffff034b0d0a200e41e6006a2137200e41e4006a2f0100214141002138203c2139203a212c024003402037202c460d012038202c2037412010a305223b4100476a2138203b450d01202c41206a212c203941606a22390d000c0c0b0b203841ffff034b0d0a200e4188016a2139200e4186016a2f0100214241002137203c213b203a212c024003402039202c460d012037202c2039412010a305223d4100476a2137203d450d01202c41206a212c203b41606a223b0d000c0c0b0b203741ffff034b0d0a200e41aa016a213b200e41a8016a2f0100214341002139203c213d203a212c02400340203b202c460d012039202c203b412010a305223e4100476a2139203e450d01202c41206a212c203d41606a223d0d000c0c0b0b203941ffff034b0d0a200e41cc016a213b200e41ca016a2f0100213e4100212c02400340203b203a460d01202c203a203b412010a305223d4100476a212c203d450d01203a41206a213a203c41606a223c0d000c0c0b0b202c41ffff034b0d0a024020042802502232200428024c470d00201f2032410110a801200428025021320b200428024820324105746a2232202c3b011c203220343b0104203220333602002032411a6a203e3b0100203241186a20393b0100203241166a20433b0100203241146a20373b0100203241126a20423b0100203241106a20383b01002032410e6a20413b01002032410c6a20363b01002032410a6a20403b0100203241086a20353b0100203241066a203f3b01002009212c0c090b4102213220022802082233450d092002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c0b0b0b2003280208222c450d0941002134202c410574223d21352003280200223b212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c0b0b0b203441ffff034b0d09200e41226a2136200e2f0120214041002135203d2138203b212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c0b0b0b203541ffff034b0d09200e41c4006a2138200e41c2006a2f0100214141002136203d2137203b212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a22370d000c0b0b0b203641ffff034b0d09200e41e6006a2137200e41e4006a2f0100214241002138203d2139203b212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a22390d000c0b0b0b203841ffff034b0d09200e4188016a2139200e4186016a2f0100214341002137203d213a203b212c024003402039202c460d012037202c2039412010a305223c4100476a2137203c450d01202c41206a212c203a41606a223a0d000c0b0b0b203741ffff034b0d09200e41aa016a213a200e41a8016a2f0100214441002139203d213c203b212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203c41606a223c0d000c0b0b0b203941ffff034b0d09200e41cc016a213c200e41ca016a2f010021454100213a203d213e203b212c02400340203c202c460d01203a202c203c412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c0b0b0b203a41ffff034b0d09200e41ee016a213c200e41ec016a2f0100213f4100212c02400340203c203b460d01202c203b203c412010a305223e4100476a212c203e450d01203b41206a213b203d41606a223d0d000c0b0b0b202c41ffff034b0d090240200428025c22322004280258470d00201e2032410110a201200428025c21320b2004280254203241246c6a2232202c3b0120203220343b0104203220333602002032411e6a203f3b01002032411c6a203a3b01002032411a6a20453b0100203241186a20393b0100203241166a20443b0100203241146a20373b0100203241126a20433b0100203241106a20383b01002032410e6a20423b01002032410c6a20363b01002032410a6a20413b0100203241086a20353b0100203241066a20403b0100201d212c0c080b4102213220022802082233450d082002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c0a0b0b2003280208222c450d0841002134202c410574223d21352003280200223b212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c0a0b0b203441ffff034b0d08200e41226a2136200e2f0120214141002135203d2138203b212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c0a0b0b203541ffff034b0d08200e41c4006a2138200e41c2006a2f0100214241002136203d2137203b212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a22370d000c0a0b0b203641ffff034b0d08200e41e6006a2137200e41e4006a2f0100214341002138203d2139203b212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a22390d000c0a0b0b203841ffff034b0d08200e4188016a2139200e4186016a2f0100214441002137203d213a203b212c024003402039202c460d012037202c2039412010a305223c4100476a2137203c450d01202c41206a212c203a41606a223a0d000c0a0b0b203741ffff034b0d08200e41aa016a213a200e41a8016a2f0100214541002139203d213c203b212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203c41606a223c0d000c0a0b0b203941ffff034b0d08200e41cc016a213c200e41ca016a2f010021464100213a203d213e203b212c02400340203c202c460d01203a202c203c412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c0a0b0b203a41ffff034b0d08200e41ee016a213e200e41ec016a2f010021474100213c203d213f203b212c02400340203e202c460d01203c202c203e412010a30522404100476a213c2040450d01202c41206a212c203f41606a223f0d000c0a0b0b203c41ffff034b0d08200e4190026a213e200e418e026a2f010021404100212c02400340203e203b460d01202c203b203e412010a305223f4100476a212c203f450d01203b41206a213b203d41606a223d0d000c0a0b0b202c41ffff034b0d080240200428026822322004280264470d00201c2032410110aa01200428026821320b2004280260203241286c6a2232202c3b0124203220343b010420322033360200203241226a20403b0100203241206a203c3b01002032411e6a20473b01002032411c6a203a3b01002032411a6a20463b0100203241186a20393b0100203241166a20453b0100203241146a20373b0100203241126a20443b0100203241106a20383b01002032410e6a20433b01002032410c6a20363b01002032410a6a20423b0100203241086a20353b0100203241066a20413b01002008212c0c070b4102213220022802082233450d072002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c090b0b2003280208222c450d0741002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c090b0b203441ffff034b0d07200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c090b0b203541ffff034b0d07200e41c4006a2138200e41c2006a2f0100214341002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a22370d000c090b0b203641ffff034b0d07200e41e6006a2137200e41e4006a2f0100214441002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a22390d000c090b0b203841ffff034b0d07200e4188016a2139200e4186016a2f0100214541002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a0d000c090b0b203741ffff034b0d07200e41aa016a213a200e41a8016a2f0100214641002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b0d000c090b0b203941ffff034b0d07200e41cc016a213b200e41ca016a2f010021474100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c090b0b203a41ffff034b0d07200e41ee016a213e200e41ec016a2f010021484100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f0d000c090b0b203b41ffff034b0d07200e4190026a213f200e418e026a2f010021494100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a22400d000c090b0b203e41ffff034b0d07200e41b2026a213f200e41b0026a2f010021414100212c02400340203f203c460d01202c203c203f412010a30522404100476a212c2040450d01203c41206a213c203d41606a223d0d000c090b0b202c41ffff034b0d070240200428027422322004280270470d00201b2032410110a601200428027421320b200428026c2032412c6c6a2232202c3b0128203220343b010420322033360200203241266a20413b0100203241246a203e3b0100203241226a20493b0100203241206a203b3b01002032411e6a20483b01002032411c6a203a3b01002032411a6a20473b0100203241186a20393b0100203241166a20463b0100203241146a20373b0100203241126a20453b0100203241106a20383b01002032410e6a20443b01002032410c6a20363b01002032410a6a20433b0100203241086a20353b0100203241066a20423b0100201a212c0c060b4102213220022802082233450d062002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a22340d000c080b0b2003280208222c450d0641002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a22350d000c080b0b203441ffff034b0d06200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a22380d000c080b0b203541ffff034b0d06200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a22370d000c080b0b203641ffff034b0d06200e41e6006a2137200e41e4006a2f0100214541002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a22390d000c080b0b203841ffff034b0d06200e4188016a2139200e4186016a2f0100214641002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a0d000c080b0b203741ffff034b0d06200e41aa016a213a200e41a8016a2f0100214741002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b0d000c080b0b203941ffff034b0d06200e41cc016a213b200e41ca016a2f010021484100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c080b0b203a41ffff034b0d06200e41ee016a213e200e41ec016a2f010021494100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f0d000c080b0b203b41ffff034b0d06200e4190026a213f200e418e026a2f0100214a4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a22400d000c080b0b203e41ffff034b0d06200e41b2026a2140200e41b0026a2f0100214b4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a30522434100476a213f2043450d01202c41206a212c204141606a2241450d080c000b0b203f41ffff034b0d06200e41d4026a2140200e41d2026a2f010021434100212c024003402040203c460d01202c203c2040412010a30522414100476a212c2041450d01203c41206a213c203d41606a223d450d080c000b0b202c41ffff034b0d0602402004280280012232200428027c470d0020192032410110b60120042802800121320b2004280278203241306c6a2232202c3b012c203220343b0104203220333602002032412a6a20433b0100203241286a203f3b0100203241266a204b3b0100203241246a203e3b0100203241226a204a3b0100203241206a203b3b01002032411e6a20493b01002032411c6a203a3b01002032411a6a20483b0100203241186a20393b0100203241166a20473b0100203241146a20373b0100203241126a20463b0100203241106a20383b01002032410e6a20453b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002007212c0c050b4102213220022802082233450d052002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a2234450d070c000b0b2003280208222c450d0541002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a2235450d070c000b0b203441ffff034b0d05200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a2238450d070c000b0b203541ffff034b0d05200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a2237450d070c000b0b203641ffff034b0d05200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a2239450d070c000b0b203841ffff034b0d05200e4188016a2139200e4186016a2f0100214741002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a450d070c000b0b203741ffff034b0d05200e41aa016a213a200e41a8016a2f0100214841002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b450d070c000b0b203941ffff034b0d05200e41cc016a213b200e41ca016a2f010021494100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e450d070c000b0b203a41ffff034b0d05200e41ee016a213e200e41ec016a2f0100214a4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f450d070c000b0b203b41ffff034b0d05200e4190026a213f200e418e026a2f0100214b4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a2240450d070c000b0b203e41ffff034b0d05200e41b2026a2140200e41b0026a2f0100214c4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a30522434100476a213f2043450d01202c41206a212c204141606a2241450d070c000b0b203f41ffff034b0d05200e41d4026a2141200e41d2026a2f0100214d41002140203d2143203c212c024003402041202c460d012040202c2041412010a30522454100476a21402045450d01202c41206a212c204341606a2243450d070c000b0b204041ffff034b0d05200e41f6026a2141200e41f4026a2f010021454100212c024003402041203c460d01202c203c2041412010a30522434100476a212c2043450d01203c41206a213c203d41606a223d450d070c000b0b202c41ffff034b0d050240200428028c012232200428028801470d0020182032410110a701200428028c0121320b200428028401203241346c6a2232202c3b0130203220343b0104203220333602002032412e6a20453b01002032412c6a20403b01002032412a6a204d3b0100203241286a203f3b0100203241266a204c3b0100203241246a203e3b0100203241226a204b3b0100203241206a203b3b01002032411e6a204a3b01002032411c6a203a3b01002032411a6a20493b0100203241186a20393b0100203241166a20483b0100203241146a20373b0100203241126a20473b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002017212c0c040b4102213220022802082233450d042002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a2234450d060c000b0b2003280208222c450d0441002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a2235450d060c000b0b203441ffff034b0d04200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a2238450d060c000b0b203541ffff034b0d04200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a2237450d060c000b0b203641ffff034b0d04200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a2239450d060c000b0b203841ffff034b0d04200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a450d060c000b0b203741ffff034b0d04200e41aa016a213a200e41a8016a2f0100214941002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b450d060c000b0b203941ffff034b0d04200e41cc016a213b200e41ca016a2f0100214a4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e450d060c000b0b203a41ffff034b0d04200e41ee016a213e200e41ec016a2f0100214b4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f450d060c000b0b203b41ffff034b0d04200e4190026a213f200e418e026a2f0100214c4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a2240450d060c000b0b203e41ffff034b0d04200e41b2026a2140200e41b0026a2f0100214d4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a30522434100476a213f2043450d01202c41206a212c204141606a2241450d060c000b0b203f41ffff034b0d04200e41d4026a2141200e41d2026a2f0100214e41002140203d2143203c212c024003402041202c460d012040202c2041412010a30522454100476a21402045450d01202c41206a212c204341606a2243450d060c000b0b204041ffff034b0d04200e41f6026a2143200e41f4026a2f0100214f41002141203d2145203c212c024003402043202c460d012041202c2043412010a30522474100476a21412047450d01202c41206a212c204541606a2245450d060c000b0b204141ffff034b0d04200e4198036a2143200e4196036a2f010021474100212c024003402043203c460d01202c203c2043412010a30522454100476a212c2045450d01203c41206a213c203d41606a223d450d060c000b0b202c41ffff034b0d0402402004280298012232200428029401470d0020162032410110ae0120042802980121320b200428029001203241386c6a2232202c3b0134203220343b010420322033360200203241326a20473b0100203241306a20413b01002032412e6a204f3b01002032412c6a20403b01002032412a6a204e3b0100203241286a203f3b0100203241266a204d3b0100203241246a203e3b0100203241226a204c3b0100203241206a203b3b01002032411e6a204b3b01002032411c6a203a3b01002032411a6a204a3b0100203241186a20393b0100203241166a20493b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002006212c0c030b4102213220022802082233450d032002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a2234450d050c000b0b2003280208222c450d0341002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a2235450d050c000b0b203441ffff034b0d03200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a2238450d050c000b0b203541ffff034b0d03200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a2237450d050c000b0b203641ffff034b0d03200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a2239450d050c000b0b203841ffff034b0d03200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a450d050c000b0b203741ffff034b0d03200e41aa016a213a200e41a8016a2f0100214a41002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b450d050c000b0b203941ffff034b0d03200e41cc016a213b200e41ca016a2f0100214b4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e450d050c000b0b203a41ffff034b0d03200e41ee016a213e200e41ec016a2f0100214c4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f450d050c000b0b203b41ffff034b0d03200e4190026a213f200e418e026a2f0100214d4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a2240450d050c000b0b203e41ffff034b0d03200e41b2026a2140200e41b0026a2f0100214e4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a30522434100476a213f2043450d01202c41206a212c204141606a2241450d050c000b0b203f41ffff034b0d03200e41d4026a2141200e41d2026a2f0100214f41002140203d2143203c212c024003402041202c460d012040202c2041412010a30522454100476a21402045450d01202c41206a212c204341606a2243450d050c000b0b204041ffff034b0d03200e41f6026a2143200e41f4026a2f0100215041002141203d2145203c212c024003402043202c460d012041202c2043412010a30522474100476a21412047450d01202c41206a212c204541606a2245450d050c000b0b204141ffff034b0d03200e4198036a2145200e4196036a2f0100215141002143203d2147203c212c024003402045202c460d012043202c2045412010a30522494100476a21432049450d01202c41206a212c204741606a2247450d050c000b0b204341ffff034b0d03200e41ba036a2145200e41b8036a2f010021494100212c024003402045203c460d01202c203c2045412010a30522474100476a212c2047450d01203c41206a213c203d41606a223d450d050c000b0b202c41ffff034b0d03024020042802a401223220042802a001470d0020152032410110b70120042802a40121320b200428029c012032413c6c6a2232202c3b0138203220343b010420322033360200203241366a20493b0100203241346a20433b0100203241326a20513b0100203241306a20413b01002032412e6a20503b01002032412c6a20403b01002032412a6a204f3b0100203241286a203f3b0100203241266a204e3b0100203241246a203e3b0100203241226a204d3b0100203241206a203b3b01002032411e6a204c3b01002032411c6a203a3b01002032411a6a204b3b0100203241186a20393b0100203241166a204a3b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002014212c0c020b4102213220022802082233450d022002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a2234450d040c000b0b2003280208222c450d0241002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a2235450d040c000b0b203441ffff034b0d02200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a2238450d040c000b0b203541ffff034b0d02200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a2237450d040c000b0b203641ffff034b0d02200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a2239450d040c000b0b203841ffff034b0d02200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a450d040c000b0b203741ffff034b0d02200e41aa016a213a200e41a8016a2f0100214a41002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b450d040c000b0b203941ffff034b0d02200e41cc016a213b200e41ca016a2f0100214c4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e450d040c000b0b203a41ffff034b0d02200e41ee016a213e200e41ec016a2f0100214d4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f450d040c000b0b203b41ffff034b0d02200e4190026a213f200e418e026a2f0100214e4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a2240450d040c000b0b203e41ffff034b0d02200e41b2026a2140200e41b0026a2f0100214f4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a30522434100476a213f2043450d01202c41206a212c204141606a2241450d040c000b0b203f41ffff034b0d02200e41d4026a2141200e41d2026a2f0100215041002140203d2143203c212c024003402041202c460d012040202c2041412010a30522454100476a21402045450d01202c41206a212c204341606a2243450d040c000b0b204041ffff034b0d02200e41f6026a2143200e41f4026a2f0100215141002141203d2145203c212c024003402043202c460d012041202c2043412010a30522474100476a21412047450d01202c41206a212c204541606a2245450d040c000b0b204141ffff034b0d02200e4198036a2145200e4196036a2f0100215241002143203d2147203c212c024003402045202c460d012043202c2045412010a30522494100476a21432049450d01202c41206a212c204741606a2247450d040c000b0b204341ffff034b0d02200e41ba036a2147200e41b8036a2f0100215341002145203d2149203c212c024003402047202c460d012045202c2047412010a305224b4100476a2145204b450d01202c41206a212c204941606a2249450d040c000b0b204541ffff034b0d02200e41dc036a2147200e41da036a2f0100214b4100212c024003402047203c460d01202c203c2047412010a30522494100476a212c2049450d01203c41206a213c203d41606a223d450d040c000b0b202c41ffff034b0d02024020042802b001223220042802ac01470d0020132032410110b30120042802b00121320b20042802a80120324106746a2232202c3b013c203220343b0104203220333602002032413a6a204b3b0100203241386a20453b0100203241366a20533b0100203241346a20433b0100203241326a20523b0100203241306a20413b01002032412e6a20513b01002032412c6a20403b01002032412a6a20503b0100203241286a203f3b0100203241266a204f3b0100203241246a203e3b0100203241226a204e3b0100203241206a203b3b01002032411e6a204d3b01002032411c6a203a3b01002032411a6a204c3b0100203241186a20393b0100203241166a204a3b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002005212c0c010b4102213220022802082233450d012002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a30522354100476a21332035450d01202c41206a212c203441606a2234450d030c000b0b2003280208222c450d0141002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a30522364100476a21342036450d01202c41206a212c203541606a2235450d030c000b0b203441ffff034b0d01200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a30522374100476a21352037450d01202c41206a212c203841606a2238450d030c000b0b203541ffff034b0d01200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a30522394100476a21362039450d01202c41206a212c203741606a2237450d030c000b0b203641ffff034b0d01200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a305223a4100476a2138203a450d01202c41206a212c203941606a2239450d030c000b0b203841ffff034b0d01200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a305223b4100476a2137203b450d01202c41206a212c203a41606a223a450d030c000b0b203741ffff034b0d01200e41aa016a213a200e41a8016a2f0100214a41002139203d213b203c212c02400340203a202c460d012039202c203a412010a305223e4100476a2139203e450d01202c41206a212c203b41606a223b450d030c000b0b203941ffff034b0d01200e41cc016a213b200e41ca016a2f0100214c4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a305223f4100476a213a203f450d01202c41206a212c203e41606a223e450d030c000b0b203a41ffff034b0d01200e41ee016a213e200e41ec016a2f0100214e4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a30522404100476a213b2040450d01202c41206a212c203f41606a223f450d030c000b0b203b41ffff034b0d01200e4190026a213f200e418e026a2f0100214f4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a30522414100476a213e2041450d01202c41206a212c204041606a2240450d030c000b0b203e41ffff034b0d01200e41b2026a2140200e41b0026a2f010021504100213f203d2141203c212c024003402040202c460d01203f202c2040412010a30522434100476a213f2043450d01202c41206a212c204141606a2241450d030c000b0b203f41ffff034b0d01200e41d4026a2141200e41d2026a2f0100215141002140203d2143203c212c024003402041202c460d012040202c2041412010a30522454100476a21402045450d01202c41206a212c204341606a2243450d030c000b0b204041ffff034b0d01200e41f6026a2143200e41f4026a2f0100215241002141203d2145203c212c024003402043202c460d012041202c2043412010a30522474100476a21412047450d01202c41206a212c204541606a2245450d030c000b0b204141ffff034b0d01200e4198036a2145200e4196036a2f0100215341002143203d2147203c212c024003402045202c460d012043202c2045412010a30522494100476a21432049450d01202c41206a212c204741606a2247450d030c000b0b204341ffff034b0d01200e41ba036a2147200e41b8036a2f0100215441002145203d2149203c212c024003402047202c460d012045202c2047412010a305224b4100476a2145204b450d01202c41206a212c204941606a2249450d030c000b0b204541ffff034b0d01200e41dc036a2149200e41da036a2f0100215541002147203d214b203c212c024003402049202c460d012047202c2049412010a305224d4100476a2147204d450d01202c41206a212c204b41606a224b450d030c000b0b204741ffff034b0d01200e41fe036a2149200e41fc036a2f0100214d4100212c024003402049203c460d01202c203c2049412010a305224b4100476a212c204b450d01203c41206a213c203d41606a223d450d030c000b0b202c41ffff034b0d01024020042802bc01223220042802b801470d00201220324101109b0120042802bc0121320b20042802b401203241c4006c6a2232202c3b0140203220343b0104203220333602002032413e6a204d3b01002032413c6a20473b01002032413a6a20553b0100203241386a20453b0100203241366a20543b0100203241346a20433b0100203241326a20533b0100203241306a20413b01002032412e6a20523b01002032412c6a20403b01002032412a6a20513b0100203241286a203f3b0100203241266a20503b0100203241246a203e3b0100203241226a204f3b0100203241206a203b3b01002032411e6a204e3b01002032411c6a203a3b01002032411a6a204c3b0100203241186a20393b0100203241166a204a3b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002011212c0b202c202c28020041016a3602000240202d450d00202d41226c450d00200e10230b2001200f460d040c010b200041013a0000200020323a00010240202d450d00202d41226c450d00200e10230b0240200f2001460d0003400240200141046a280200220e450d00200e41226c450d00200128020010230b2001412c6a2101200d41546a220d0d000b0b02402010450d002010412c6c450d00200c10230b20041083020c040b200d41546a210d2001210e0c000b0b200f2001460d0003402001220d412c6a21010240200d41046a280200220e450d00200e41226c450d00200d28020010230b200f2001470d000b0b02402010450d002010412c6c450d00200c10230b200041046a200441c00110a1051a200041003a00000b20044180026a24000bd80301067f230041106b2202240020024100360208200242013703000240412010212203450d0020032000290038370000200341086a200041c0006a290000370000200341106a200041c8006a290000370000200341186a200041d0006a29000037000020022003360200200242a080808080043702042002200036020c2002410c6a200210db012002200041106a36020c2002410c6a200210db0120002802202103200041286a28020022042002106102402004450d002003200441186c6a210403402002200336020c2002410c6a200210db01200341106a200210ed012004200341186a2203470d000b0b200028022c2105200041346a28020022032002106102400240024020022802042206200228020822046b20034102742200490d0020022802002103200621070c010b200420006a22032004490d01200641017422072003200720034b1b22074100480d010240024020060d00024020070d00410121030c020b2007102122030d010c040b2002280200210320062007460d0020032006200710252203450d030b20022007360204200220033602000b200320046a2005200010a1051a2001290200200420006aad4220862003ad84100e02402007450d00200310230b200241106a24000f0b102c000b102a000bdb0401097f230041c0016b2202240020024188016a200110c601200241306a200228028801220320022802900110e20120024198016a41086a2204200241ec006a29020037030020024198016a41106a2205200241f4006a29020037030020024198016a41186a2206200241fc006a29020037030020024198016a41206a220720024184016a2802003602002002200241e4006a290200370398010240024020022802502208450d00200241e0006a2802002109200241dc006a280200210a20022802542101200241086a41206a2007280200360200200241086a41186a2006290300370300200241086a41106a2005290300370300200241086a41086a200429030037030020022002290398013703080240200228028c01450d00200310230b200241306a41106a200241086a41106a290300370300200241306a41086a200241086a41086a290300370300200241306a41186a200241086a41186a290300370300200241306a41206a200241086a41206a28020036020020024198016a41086a2002413c6a29020037030020024198016a41106a200241c4006a29020037030020024198016a41186a200241cc006a29020037030020022002290308370330200220022902343703980102402001450d00200141186c450d00200810230b0240200941ffffffff0371450d00200a10230b2000200229039801370001200041196a200241b0016a290300370000200041116a200241a8016a290300370000200041096a200241a0016a290300370000410121010c010b0240200228028c01450d00200310230b410021010b200020013a0000200241c0016a24000bf84511047f017e017f017e0b7f017e017f017e077f027e027f037e017f017e037f017e017f23004180046b22052400200541f8026a41186a22064200370300200541f8026a41106a22074200370300200541f8026a41086a22084200370300200542003703f802418fcdc200ad4280808080f000842209100c220a290000210b200541a8026a41086a220c200a41086a2900003703002005200b3703a802200a10232008200c290300370300200520052903a8023703f80241ccc5c000ad4280808080900284100c220a290000210b200541b8026a41086a220d200a41086a2900003703002005200b3703b802200a1023200720052903b802220b370300200541b8036a41086a220a2008290300370300200541b8036a41106a220e200b370300200541b8036a41186a220f200d290300370300200520052903f8023703b803200541e0016a200541b8036a10880241012110024020052802e001417d710d00200642003703002007420037030020084200370300200542003703f8022009100c2210290000210b200c201041086a2900003703002005200b3703a802201010232008200c290300370300200520052903a8023703f80241a4dfc100ad4280808080b00284100c220c290000210b200d200c41086a2900003703002005200b3703b802200c1023200720052903b802370000200741086a200d290300370000200a2008290300370300200e2007290300370300200f2006290300370300200520052903f8023703b803200541203602bc022005200541b8036a3602b802200541e8016a200541b8036aad428080808080048422091010108b01410021100240024020052802e80122080d00410021110c010b20052802ec01210a02400240200541f0016a2802004104490d00410121112008280000220e418194ebdc03490d010b41002111200541003602900220054201370388022005410a3602e4032005200541b8026a3602e003200520054188026a3602a8022005418c036a4101360200200542013702fc0220054180c5c6003602f8022005200541e0036a36028803200541a8026a4184a5c200200541f8026a10311a20053502900242208620053502880284100a200528028c02450d0020052802880210230b200a450d00200810230b200541f8026a41186a220d4200370300200541f8026a41106a220c4200370300200541f8026a41086a22084200370300200542003703f802418fcdc200ad4280808080f00084100c220a290000210b200541a8026a41086a2206200a41086a2900003703002005200b3703a802200a102320082006290300370300200520052903a8023703f80241b8dbc100ad4280808080900184100c220a290000210b200541b8026a41086a2206200a41086a2900003703002005200b3703b802200a1023200720052903b802370000200741086a2006290300370000200541b8036a41086a2008290300370300200541b8036a41106a200c290300370300200541b8036a41186a200d290300370300200520052903f8023703b803200541f8026a200541b8036a10ba0120052903f8024202510d00200541f8026a200c280200221210c201200541d8016a20052802f802220a20052802800310cd0120052802dc01210c20052802d8012108024020052802fc02450d00200a10230b02400240024020080d00419fcfc000ad4280808080e00684100a4100201241646a2208200820124b1b2113201221140c010b4100201241646a2208200820124b1b21130240200c20044b0d00201221140c010b200541f8026a41186a220c4200370300200541f8026a41106a220d4200370300200541f8026a41086a22084200370300200542003703f802418fcdc200ad4280808080f00084100c220a290000210b200541a8026a41086a2206200a41086a2900003703002005200b3703a802200a102320082006290300370300200520052903a8023703f80241dce0c100ad4280808080a00184100c220a290000210b200541b8026a41086a2206200a41086a2900003703002005200b3703b802200a1023200720052903b802370000200741086a2006290300370000200541b8036a41086a2008290300370300200541b8036a41106a200d290300370300200541b8036a41186a200c290300370300200520052903f8023703b803200541f8026a200541b8036a10e40120052802f8022208410420081b220d20052902fc02420020081b220b422088a741037422086a210a03402008450d02200841786a2108200a417c6a210c200a41786a210a200c28020020044b0d000b200d20086a2802002114200b42ffffffff0183500d00200d10230b200541f8026a41186a22154200370300200541f8026a41106a22164200370300200541f8026a41086a220f4200370300200542003703f802418fcdc200ad4280808080f000842217100c2208290000210b200541a8026a41086a2218200841086a2900003703002005200b3703a80220081023200f2018290300370300200520052903a8023703f802419ce3c100ad4280808080e00284220b100c22082900002119200541b8026a41086a221a200841086a290000370300200520193703b80220081023200720052903b802370000200741086a221b201a290300370000200541b8036a41086a221c200f290300370300200541b8036a41106a221d2016290300370300200541b8036a41186a221e2015290300370300200520052903f8023703b803200541d0016a200541b8036a412010cd0120052802d401210a20052802d001210c2015420037030020164200370300200f4200370300200542003703f8022017100c220829000021192018200841086a290000370300200520193703a80220081023200f2018290300370300200520052903a8023703f802200b100c2208290000210b201a200841086a2900003703002005200b3703b80220081023200720052903b802370000201b201a290300370000201c200f290300370300201d2016290300370300201e2015290300370300200520052903f8023703b8032005200a2012200c4101461b3602f8022009200541f8026aad220b4280808080c00084100e20032001200120034b1b221f450d01200e410020111b2120200541a8036aad4280808080c000842121200b42808080808002842122200541a8036a41046a2123200541e0036a41086a2103200021014100212402400240024003402015420037030020164200370300200f4200370300200542003703f8022017100c2208290000210b2018200841086a2900003703002005200b3703a80220081023200f2018290300370300200520052903a8023703f80241bcd9c100ad4280808080d00184100c2208290000210b201a200841086a2900003703002005200b3703b80220081023200720052903b802370000201b201a290300370000201c200f290300370300201d2016290300370300201e2015290300370300200520052903f8023703b803200541f8026a200541b8036a412010890220052902fc02420020052802f80222081b220b422088a7410574210a2024220c41016a21242002200c4102746a21042000200c41e0006c6a21062008410120081b22102108024003400240200a0d004100210d0c020b4101210d20012008460d0120082006412010a305210c200a41606a210a200841206a2108200c0d000b0b0240200b42ffffff3f83500d00201010230b0240200d0d0020042802002108200542003703b002200542003703a802200541c0016a2006290320220b200641286a290300428094ebdc03420010a705200541a0016a20062903302209200641386a290300428094ebdc03420010a705200541b0016a20052903c0012219200541c0016a41086a29030022254280ec94a37c427f10a605200541f0006a201920252008ad2226420010a60520054190016a20052903a0012219200541a0016a41086a29030022254280ec94a37c427f10a60520054180016a201920252026420010a605200542003703c002200542003703b802202620092005290390017c7e2219428094ebdc0380212502400240200529037042002026200b20052903b0017c7e220b428094ebdc03802209a7417f200b428080808080c0b2cd3b541b200b20094280ec94a37c7e7c4280cab5ee01566a220aad7d85200541f0006a41086a2903004200200a410047ad7d8584500d00200529038001210920054180016a41086a2903002127200541e8016a2014200610bf0120052802e801210a200520052802f001220c3602f4032005200a3602f00320054188026a200cad422086200aad841010108b0102400240200528028802220c0d004200210b0c010b200528028c0221100240024020052802900222044104490d00200c280000220d418094ebdc034b0d004201210b2004417c6a410f4b0d010b200541003602c003200542013703b8032005410a3602e4032005200541f0036a3602e0032005200541b8036a3602a8032005410136028c03200542013702fc0220054180c5c6003602f8022005200541e0036a36028803200541a8036a4184a5c200200541f8026a10311a20053502c00342208620053502b80384100a024020052802bc03450d0020052802b80310230b4200210b2028210d0b02402010450d00200c10230b200d21280b024020052802ec01450d00200a10230b200820284100200b4200521b22044d0d02200541f8026a2014200610bf01200535028003212920052802f802210c41101021220a0d010c060b200542003703f001200542003703e80120054200370390022005420037038802200541f0036a200610c101200541b8036a20052802f003220a20052802f80310c9012003201c280200360200200520052903b8033703e003024020052802c4032208450d00200541a8036a41086a2003280200360200200520052903e0033703a80320052903c803210b0b024020052802f403450d00200a10230b0240024020080d00200542003703c80320054280808080c0003703c003200520133602bc03200541003602b803200541f0036a200610c10120052802f0032108200520052802f8033602e403200520083602e003200541b8036a200541e0036a108a02024020052802f403450d00200810230b2003201c280200360200200520052903b8033703e00320052903c803210b410421080c010b2003200541a8036a41086a280200360200200520052903a8033703e0030b200f20052903e003370200200f41086a2003280200360200200541003a00a403200520063602fc02200520133602f802200520203602a0032005200b370390032005200836028c03200520054188026a36029c032005200541e8016a36029803200541b8036a200541f8026a2014108b02024020052802c0034102460d0020052802b803200528028003470d00200f2012107221082005410120052d00a40320081b22083a00a403200541b8036a200610c30120053502c00342208620052802b803220aad841011024020052802bc03450d00200a10230b200541b8036a200610c50120053502c00342208620052802b803220aad841011024020052802bc03450d00200a10230b02402006108c0241ff0171220a4102460d00200a410171450d0010ef010b200841ff0171450d00200528028403210420052802f8022110024002400240200528029403220e450d00200528028c03210a2005280280032106200e410274210d4100210c2004210802400340200820104d0d01200c41016a210c2008200a2802006b2108200a41046a210a200d417c6a220d0d000c020b0b200e200c4f0d010b200520042010200420104b1b360284030c010b200520042010200420104b1b360284032005200c3602940341000d002006200e6b2006200c6b4f0d004100200e6b210a20052802fc0221080340201e200841186a290000370300201d200841106a290000370300201c200841086a290000370300200520082900003703b80320052006200a6a3602d803200541f0036a200541b8036a10c40120053502f80342208620052802f003220dad841011024020052802f403450d00200d10230b200c200a41016a220a6a0d000b0b200541b8036a20052802fc0210c10120052802b8032108200520052802c0033602f403200520083602f003200f200541f0036a108a0220052802bc03450d00200810230b20052802900341ffffffff0371450d01200528028c0310230c010b200a2008360000200a4110412010252208450d03200820092025a7417f2019428080808080c0b2cd3b541b201920254280ec94a37c7e7c4280cab5ee01566aad7c220b3700042008410c6a2027200b200954ad7c22193700002029422086200cad842008ad4280808080c00284100e20081023024020052802fc02450d00200c10230b20054188026a200610c101200541b8036a200528028802220a20052802900210c9012003201c280200360200200520052903b8033703e003024020052802c4032208450d00200541e8016a41086a2003280200360200200520052903e0033703e80120052903c80321090b0240200528028c02450d00200a10230b0240024020080d00200542003703c80320054280808080c0003703c003200520133602bc03200541003602b80320054188026a200610c101200528028802210820052005280290023602f403200520083602f003200541b8036a200541f0036a108a020240200528028c02450d00200810230b200541f0036a41086a201c280200360200200520052903b8033703f00320052903c8032109410421080c010b200541f0036a41086a200541e8016a41086a280200360200200520052903e8013703f0030b200f20052903f003370200200f41086a222a200541f0036a41086a280200360200200541003a00a403200520063602fc02200520133602f802200520203602a00320052009370390032005200836028c032005200541b8026a36029c032005200541a8026a36029803200541e8006a200541f8026a2014200b2019108d0202400240024020052802684101470d00200528026c200528028003460d010b20052d00a40321080c010b200f2012107221082005410120052d00a40320081b22083a00a403200541b8036a200610c30120053502c00342208620052802b803220aad841011024020052802bc03450d00200a10230b200541b8036a200610c50120053502c00342208620052802b803220aad841011024020052802bc03450d00200a10230b2006108c0241ff0171220a4102460d00200a410171450d0010ef010b0240200841ff0171450d00200528028403210e20052802f8022110024002400240200528029403222b450d00200528028c03210a2005280280032111202b410274210d4100210c200e210802400340200820104d0d01200c41016a210c2008200a2802006b2108200a41046a210a200d417c6a220d0d000c020b0b202b200c4f0d010b2005200e2010200e20104b1b360284030c010b2005200e2010200e20104b1b360284032005200c3602940341000d002011202b6b2011200c6b4f0d004100202b6b210a20052802fc0221080340201e200841186a290000370300201d200841106a290000370300201c200841086a290000370300200520082900003703b80320052011200a6a3602d80320054188026a200541b8036a10c401200535029002422086200528028802220dad8410110240200528028c02450d00200d10230b200c200a41016a220a6a0d000b0b200541b8036a20052802fc0210c10120052802b8032108200520052802c00336028c022005200836028802200f20054188026a108a0220052802bc03450d00200810230b024020052802900341ffffffff0371450d00200528028c0310230b200541003602d002200542083703c802200542003703f001200542003703e801200541c8026a4100200641c8006a220828020010a40102400240200828020022080d004200210920052802c802210c420021190c010b2006280240220e200841306c6a212c2004ad2127034020054200370390022005420037038802200541c0006a200e2903002219200e41086a290300428094ebdc03420010a705200541306a2005290340220b200541c0006a41086a29030022094280ec94a37c427f10a605200541206a200b20092027420010a605200541106a200b20092026420010a605200541f8026a2014200e41106a221010c001200541d0006a20052802f802220a20052802800310d7014200200541106a41086a290300200529031022092026201920052903307c22197e220b428094ebdc03802225a7417f200b428080808080c0b2cd3b541b200b20254280ec94a37c7e7c4280cab5ee01566aad7c220b200954ad7c2209200541206a41086a29030020052903202225202720197e2219428094ebdc03802229a7417f2019428080808080c0b2cd3b541b201920294280ec94a37c7e7c4280cab5ee01566aad7c2219202554ad7c7d200b201954ad7d2225200b20197d2219200b56202520095620252009511b22081b21094200201920081b210b200541d0006a41106a29030021192005290358212520052802502108024020052802fc02450d00200a10230b200541b8036a2014201010c00120052802b803210a20053502c003212920052025420020081b2225200b7c220b3703f80220052019420020081b20097c200b202554ad7c2209370380032029422086200aad842022100e024020052802bc03450d00200a10230b200541f0036a201010c101200541b8036a20052802f003220a20052802f80310c9012003201c280200360200200520052903b8033703e003024020052802c4032208450d00200541a8036a41086a2003280200360200200520052903e0033703a80320052903c803212d0b024020052802f403450d00200a10230b0240024020080d00200542003703c80320054280808080c0003703c003200520133602bc03200541003602b803200541f0036a201010c10120052802f0032108200520052802f8033602e403200520083602e003200541b8036a200541e0036a108a02024020052802f403450d00200810230b2003201c280200360200200520052903b8033703e00320052903c8032119410421080c010b2003200541a8036a41086a280200360200200520052903a8033703e003202d21190b200f20052903e003370200202a2003280200360200200541003a00a403200520103602fc02200520133602f802200520203602a00320052019370390032005200836028c03200520054188026a36029c032005200541e8016a36029803200541086a200541f8026a2014200b2009108d020240024020052802084101470d00200528020c200528028003470d00200f2012107221082005410120052d00a40320081b22083a00a4030c010b20052d00a40321080b0240200841ff0171450d00200528028403211120052802f8022104024002400240200528029403222e450d00200528028c03210a200528028003212b202e410274210d4100210c2011210802400340200820044d0d01200c41016a210c2008200a2802006b2108200a41046a210a200d417c6a220d0d000c020b0b202e200c4f0d010b200520112004201120044b1b360284030c010b200520112004201120044b1b360284032005200c3602940341000d00202b202e6b202b200c6b4f0d004100202e6b210a20052802fc0221080340201e200841186a290000370300201d200841106a290000370300201c200841086a290000370300200520082900003703b8032005202b200a6a3602d803200541f0036a200541b8036a10c40120053502f80342208620052802f003220dad841011024020052802f403450d00200d10230b200c200a41016a220a6a0d000b0b200541b8036a20052802fc0210c10120052802b8032108200520052802c0033602f403200520083602f003200f200541f0036a108a0220052802bc03450d00200810230b024020052802900341ffffffff0371450d00200528028c0310230b200e41306a210e201041086a290000210b201029000021092015201041186a2900003703002016201041106a290000370300200f200b370300200520093703f80220054188026a41086a290300210b2005290388022109024020052802d002220a20052802cc02470d00200541c8026a200a410110a40120052802d002210a0b20052802c802220c200a41306c6a22082009370320200820052903f802370300200841286a200b370300200841086a200f290300370300200841106a2016290300370300200841186a20152903003703002005200a41016a3602d002200e202c470d000b200541e8016a41086a290300211920052903e80121090b2018290300212520052903a802210b200541e8016a41086a2208200641086a290300370300200541e8016a41106a220a200641106a290300370300200541e8016a41186a220d200641186a290300370300200520062903003703e801200c450d00201a290300212620052903b802212720052902cc02212920054188026a41186a2210200d29030037030020054188026a41106a220d200a29030037030020054188026a41086a220a2008290300370300200520052903e80137038802200541f8026a200641d0006a108e02200528028003211120052802fc02212b20052802f802212e201e2010290300370300201d200d290300370300201c200a29030037030020052005290388023703b8032017100c2208290000212d2018200841086a2900003703002005202d3703a802200810234191d0c000ad4280808080800284100c2208290000212d201a200841086a2900003703002005202d3703b80220081023200520123602a80320052021100d22082900003703e00320081023200541003a0088032005202336028403200520033602fc022005200541a8036a360280032005200541e0036a3602f802200541f0036a200541f8026a106502400240024020052802f803220441206a220a417f4c0d0020052802f003210602400240200a450d00200a1021220d450d09200a410f4d0d01200a21100c040b4110211041101021220d0d030c070b200a41017422084110200841104b1b221041004e0d010c050b1032000b0240200a2010470d00200a21100c010b200d200a20101025220d450d040b200d20052903a802370000200d41086a20182903003700000240024020104170714110460d00201021080c010b201041017422084120200841204b1b22084100480d0320102008460d00200d201020081025220d450d040b200d20052903b802370010200d41186a201a29030037000002400240200841606a2004490d002008210e0c010b2004415f4b0d0320084101742210200a2010200a4b1b220e4100480d032008200e460d00200d2008200e1025220d450d040b200b20097c2209200b542108200d41206a2006200410a1051a024020052802f403450d00200610230b202520197c210b2008ad2119200541f8026a200d200a10e8010240024020052802f80222100d0041002106200541003602c002200542083703b80241082110410021040c010b200520052902fc0222253702bc02200520103602b8022025422088a721042025a721060b200b20197c210b2015201e2903003703002016201d290300370300200f201c290300370300200520052903b8033703f802024020042006470d00200541b8026a2004410110a90120052802bc02210620052802b802211020052802c00221040b2010200441d8006c222a6a2208200937031020082026370308200820273703002008202e36022c2008200c360220200841186a200b370300200841346a2011360200200841306a202b360200200841246a2029370200200841386a20052903f802370200200841c0006a200f290300370200200841c8006a2016290300370200200841d0006a20152903003702002005200441016a22083602c0020240024020100d00200aad422086200dad8410110c010b200541f8026a2010200810f501200aad422086200dad8420053502800342208620052802f802220aad84100e024020052802fc02450d00200a10230b02402008450d00201041306a2108202a41d8006a210a03400240200841746a280200220c450d00200c41306c450d00200841706a28020010230b0240200828020041ffffff3f71450d002008417c6a28020010230b200841d8006a2108200a41a87f6a220a0d000b0b02402006450d00200641d8006c450d00201010230b200e450d010b200d10230b200141e0006a21012024201f490d000b410021100c040b102c000b102a000b1033000b41002110200b42ffffffff0183500d00200d10230b20054180046a240020100bb40201067f230041d0006b220224002002412036020420022001360200200241086a2001ad42808080808004841010108b0102400240200228020822030d00410221010c010b200228020c210402400240200241106a2802002205450d0020032d0000220641014b0d0041002101024020060e020200020b2005417f6a4104490d0020032800012107410121010c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c20024180c5c6003602382002200241286a360248200241346a4184a5c200200241386a10311a2002350220422086200235021884100a0240200228021c450d00200228021810230b410221010b2004450d00200310230b2000200736020420002001360200200241d0006a24000bbe0201017f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a10cf010240024020032802480d0020034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b200041003602000c010b20002003290348370200200041086a200341c8006a41086a2802003602000b2002450d00200110230b200341e0006a24000b8f0301067f230041106b220224002002410036020820024201370300200028020021030240410410212204450d002004200336000020024284808080c000370204200220043602002000280204210320044104410810252204450d0020042003360004200242888080808001370204200220043602002000280208210320044108411010252204450d002004200336000820024290808080c00137020420022004360200200028020c2105200041146a28020022002002106102400240024020022802042206200228020822046b20004102742203490d0020022802002100200621070c010b200420036a22002004490d01200641017422072000200720004b1b22074100480d010240024020060d00024020070d00410121000c020b2007102122000d010c040b2002280200210020062007460d0020002006200710252200450d030b20022007360204200220003602000b200020046a2005200310a1051a2001290200200420036aad4220862000ad84100e02402007450d00200010230b200241106a24000f0b102c000b102a000bbd0101057f2001280208210302402001410c6a280200220420024b0d002000410036020820002004ad4220862003ad843702000f0b024002402001411c6a2802002205450d00200141146a2802002101200541027421062003417f6a2103034002402004200128020022076b220520024b0d00200420024b0d030b200141046a21012003417f6a2103200521042006417c6a22060d000b0b200041023602080f0b2000200736020c2000410136020820002005ad4220862003ad843702000bee0f07047f017e047f017e047f017e017f23004190016b22012400200141e8006a41186a4200370300200141e8006a41106a22024200370300200141e8006a41086a220342003703002001420037036841db97c700ad4280808080f00084100c220429000021052003200441086a290000370300200120053703682004102341bbacc300ad4280808080a00184100c22042900002105200141c8006a41086a2206200441086a2900003703002001200537034820041023200220012903482205370300200141286a41086a2003290300370300200141286a41106a2005370300200141286a41186a200629030037030020012001290368370328200141e8006a200141286a412010890220012802682203410120031b210741022108024002400240200129026c420020031b2205422088a72203450d002003410574210241002104200721030240034020002003460d01200420032000412010a30522064100476a21042006450d01200341206a2103200241606a22020d000c020b0b200141e8006a41186a4200370300200141e8006a41106a22094200370300200141e8006a41086a220042003703002001420037036841db97c700ad4280808080f00084100c2202290000210a200141c8006a41086a2203200241086a2900003703002001200a37034820021023200020032903003703002001200129034837036841c0bdc300ad4280808080a00284100c2202290000210a2003200241086a2900003703002001200a3703482002102320092001290348220a370300200141286a41086a2000290300370300200141286a41106a200a370300200141286a41186a200329030037030020012001290368370328200141186a200141286a10ed030240024002402001280218220b0d004100210c20014100360210200142043703084104210b4100210d410021030c010b200129021c210a2001200b3602082001200a37020c200aa7210d4100210302400240200a422088a7220c41014b0d00200c0e020201020b200c2100034020032000410176220220036a22062004200b20064102746a280200491b2103200020026b220041014b0d000b0b4100210802402004200b20034102746a2802002200470d00410021060c020b2003200420004b6a21030b200141e8006a41186a22084200370300200141e8006a41106a220e4200370300200141e8006a41086a220242003703002001420037036841db97c700ad4280808080f00084100c2206290000210a200141c8006a41086a2200200641086a2900003703002001200a37034820061023200220002903003703002001200129034837036841bbacc300ad4280808080a00184100c2206290000210a2000200641086a2900003703002001200a3703482006102320092001290348370000200941086a2000290300370000200141286a41086a2002290300370300200141286a41106a200e290300370300200141286a41186a200829030037030020012001290368370328200141186a200141286aad42808080808004841010108b01024002400240024020012802182202450d00200128021c21062001200141186a41086a28020036026c200120023602682001200141e8006a1088012001280200450d01410021000c020b2001420037024c20014101360248200141e8006a200141c8006a108e02200128027041057421000240200128026c41ffffff3f71450d00200128026810230b200041057521000c020b200128020421000b2006450d00200210230b20002000418094ebdc036e22024180ec94a37c6c6aad4280fd87d1007e220f428094ebdc0380210a200c2003490d0220024180fd87d1006c200f200a4280ec94a37c7e7c4280cab5ee015672200aa76a21020240200c200d470d00200141086a200d41011079200128020c210d2001280208210b0b200b20034102746a220041046a2000200c20036b41027410a2051a20002004360200410121062001200c41016a220c360210200c20024b21080b200141e8006a41186a220e4200370300200141e8006a41106a22104200370300200141e8006a41086a220042003703002001420037036841db97c700ad4280808080f00084100c2202290000210a200141c8006a41086a2203200241086a2900003703002001200a37034820021023200020032903003703002001200129034837036841c0bdc300ad4280808080a00284100c2202290000210a2003200241086a2900003703002001200a3703482002102320092001290348370000200941086a2003290300370000200141286a41086a2000290300370300200141286a41106a2010290300370300200141286a41186a200e2903003703002001200129036837032802400240200b0d00200141286aad428080808080048410110c010b2001412036026c2001200141286a360268200b200c200141e8006a10f603200d41ffffffff0371450d00200b10230b2006450d00200141f0006a2004ad37030020014102360268200141e8006a10f7032001410036027020014201370368410110212203450d02200341023a000020012003360268200142818080801037026c20034101410510252203450d02200120033602682003200128027022006a2004360000200141336a200041046a3600002001410536026c2001200129036837002b200141f4006a2001412f6a290000370000200141c28289aa04360069200141023a00682001200129002837006d200141e8006a10f8030b0240200542ffffff3f83500d00200710230b20014190016a240020080f0b2003200c1038000b102a000b9a0d04047f017e027f067e230041d0026b22052400200541c8016a20012002108b0202400240024002400240024020052802d0014102460d0020052802c8012106200541c8016a41086a2001280204220741086a290000370300200541c8016a41106a200741106a290000370300200541c8016a41186a200741186a290000370300200520063602e801200520072900003703c801200541f0016a200541c8016a10c40120052802f0012108200520052802f801220736028402200520083602800220054188026a2007ad4220862008ad841010108b010240024020052802880222070d00420021090c010b200528028c02210a02400240024020054188026a41086a280200220b4110490d00200b4170714110470d010b200541003602a00220054201370398022005410a3602ac02200520054180026a3602a802200520054198026a3602b402200541cc026a4101360200200542013702bc0220054180c5c6003602b8022005200541a8026a3602c802200541b4026a4184a5c200200541b8026a10311a20053502a00242208620053502980284100a0240200528029c02450d0020052802980210230b420021090c010b200741186a290000210c200741086a290000210d2007290010210e2007290000210f420121090b200a450d00200710230b200d4200200942005222071b210d200f420020071b210f024020052802f401450d00200810230b200c420020071b210c200e420020071b210e200f200354200d200454200d2004511b0d01200f200385200d2004858450450d03200541b8016a20032004428094ebdc03420010a705200541a8016a20052903b801220d200541b8016a41086a290300220f4280ec94a37c427f10a60520054198016a200d200f20013502282209420010a60520054188016a4200200529039801220f200920052903a80120037c7e220d428094ebdc03802209a7417f200d428080808080c0b2cd3b541b200d20094280ec94a37c7e7c4280cab5ee01566aad7c220d200e7d22092009200d5620054198016a41086a290300200d200f54ad7c220f200c7d200d200e54ad7d220d200f56200d200f511b22021b220f4200200d20021b428094ebdc03420010a705200541f8006a200529038801220d20054188016a41086a29030022094280ec94a37c427f10a605200541e8006a200d20094280cab5ee01420010a605200541e8006a41086a29030020052903682209200f20052903787c220d420188220fa7417f200d4280cab5ee017e220d428080808080c0b2cd3b541b200d200f4280ec94a37c7e7c4280cab5ee01566aad7c220d200954ad7c210f410021020c020b410021010c040b200541c8006a20032004428094ebdc03420010a705200541d8006a20032004428094ebdc03420010a805200541386a2005290348200541c8006a41086a29030020013502282209420010a605200541286a420020052903382210200920052903587e2209428094ebdc03802211a7417f2009428080808080c0b2cd3b541b200920114280ec94a37c7e7c4280cab5ee01566aad7c2209200e7d22112011200956200541386a41086a2903002009201054ad7c2210200c7d2009200e54ad7d220920105620092010511b22071b22104200200920071b428094ebdc03420010a705200541186a20052903282209200541286a41086a29030022114280ec94a37c427f10a605200541086a200920114280cab5ee01420010a605200128022422072003200f7d220920072903007c2211370300200741086a22072004200d7d2003200f54ad7d20072903007c2011200954ad7c370300200141106a2207200728020022072002200720024b1b360200200541086a41086a2903002005290308220f201020052903187c220d4201882209a7417f200d4280cab5ee017e220d428080808080c0b2cd3b541b200d20094280ec94a37c7e7c4280cab5ee01566aad7c220d200f54ad7c210f410121020b02400240200d200f84500d002001280220220220022903002209200d7c2210370300200241086a22022002290300200f7c2010200954ad7c370300200c200f7c200e200d7c220d200e54ad7c210c200d210e0c010b2002450d010b200141013a002c200541b8026a200541c8016a10c40120053502c002210d20052802b8022102411010212201450d01200120033700002001200437000820014110412010252201450d012001200e370010200141186a200c370000200d4220862002ad842001ad4280808080800484100e2001102320052802bc02450d00200210230b410121010c010b102a000b2000200636020420002001360200200541d0026a24000ba10201087f230041106b22022400024002402001280208220341ffffff3f712003470d0020034105742204417f4c0d00200128020021050240024020040d00410121060c010b200410212206450d020b41002101200241003602082002200636020020022004410576360204200241002003109a012002280208210702402003450d0020034105742108200228020020074105746a21090340200920016a2204200520016a2206290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a2900003700002008200141206a2201470d000b200341057441606a41057620076a41016a21070b20002002290300370200200041086a2007360200200241106a24000f0b1032000b1033000be70403057f017e037f23004180016b22022400200241206a41186a22034200370300200241206a41106a22044200370300200241206a41086a2205420037030020024200370320418fcdc200ad4280808080f00084100c220629000021072005200641086a290000370300200220073703202006102341b8dbc100ad4280808080900184100c22062900002107200241086a2208200641086a2900003703002002200737030020061023200420022903002207370300200241e0006a41086a22062005290300370300200241e0006a41106a22092007370300200241e0006a41186a220a200829030037030020022002290320370360200241206a200241e0006a10ba010240024020022903204202520d00200041003602200c010b200241d0006a2004280200200110da01200241206a200228025022082002280258109002200a2003290300370300200920042903003703002006200529030037030020022002290320370360200241cc006a280200210402400240200228024022050d0042002107200241186a4200370300200241106a420037030041082105200241086a4200370300200242003703000c010b200241086a200241e0006a41086a290300370300200241106a200241e0006a41106a290300370300200241186a200241e0006a41186a29030037030020022002290360370300200229024421070b02402002280254450d00200810230b2000200229030037030020002007370224200020053602202000412c6a2004360200200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a2903003703000b20024180016a24000b860301017f230041f0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822010d00200041003602200c010b200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a10d0010240024020032802380d0020034100360258200342013703502003410a360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c20034180c5c6003602182003200341e0006a360228200341ec006a4184a5c200200341186a10311a2003350258422086200335025084100a02402003280254450d00200328025010230b200041003602200c010b20002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000b2002450d00200110230b200341f0006a24000bc00908057f047e027f027e067f017e037f017e230041e0016b22032400200241386a2802002104200241346a2802002105200241306a2802002106200341c0006a41186a200241186a290000370300200341c0006a41106a200241106a290000370300200341c0006a41086a200241086a290000370300200320022900003703404100210720034100360268200342083703600240024020040d0042002108420021094200210a4200210b0c010b200441306c210c200341b0016a41106a21044108210d42002108420021094200210a4200210b200621020340200241286a290300210e200241206a290300210f200341f0006a41186a2210200241186a290300370300200341f0006a41106a2211200241106a290300370300200341f0006a41086a2212200241086a29030037030020032002290300370370200341b0016a41186a2213420037030020044200370300200341b0016a41086a22144200370300200342003703b00141bdadc500ad4280808080800184100c221529000021162014201541086a290000370300200320163703b0012015102341c5adc500ad4280808080d00184100c22152900002116200341d0016a41086a2217201541086a290000370300200320163703d00120151023200420032903d001370000200441086a201729030037000020034190016a41086a2215201429030037030020034190016a41106a2217200429030037030020034190016a41186a22182013290300370300200320032903b00137039001200341286a20034190016a412010d701200341186a2003290330200341286a41106a290300427f420010a705200341086a20032903184200200328022822191b221642012016420156200341186a41086a290300420020191b22164200522016501b22191b2016420020191b200f200e10a6052018201029030037030020172011290300370300201520122903003703002003200329037037039001200341086a41086a29030021162003290308210e0240024020034190016a200341c0006a412010a305450d0020132018290300370300200420172903003703002014201529030037030020032003290390013703b001024020072003280264470d00200341e0006a2007410110a4012003280260210d200328026821070b200d200741306c6a221520163703082015200e370300201520032903b001370310201541186a2014290300370300201541206a2004290300370300201541286a20132903003703002003200741016a22073602680c010b427f200920167c2008200e7c221a2008542214ad7c220f2014200f200954200f2009511b22141b2109427f201a20141b21080b200241306a2102427f200b20167c200a200e7c2216200a542214ad7c220a2014200a200b54200a200b511b22141b210b427f201620141b210a200c41506a220c0d000b0b02402005450d00200541306c450d00200610230b2000200a37032020002003290340370000200041386a2009370300200041306a2008370300200041286a200b370300200041c0006a2003290360370200200041186a200341c0006a41186a290300370000200041106a200341c0006a41106a290300370000200041086a200341c0006a41086a290300370000200041c8006a200341e0006a41086a280200360200200341e0016a24000bfd1002057f047e230041d0016b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a220341174b0d0020030e180102030405060708090a0b0c0d0e0f101112131415161718010b41f58ac7004128418c94c700102d000b200041013a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00003a00000c170b200041023a0000200041106a200141106a290300370300200041086a200141086a2903003703000c160b200041033a0000200041106a200141106a290300370300200041086a200141086a2903003703000c150b200041043a00000c140b200041053a0000200041046a200141046a2802003602000c130b200241106a200141046a108e02200041063a00002000410c6a200241186a280200360200200041046a20022903103702000c120b200041073a00000c110b200041083a0000200020012d00013a00010c100b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0f0b2000410a3a0000200041046a200141046a2802003602000c0e0b2000410b3a00000c0d0b2000410c3a00000c0c0b200241106a200141046a108e022000410d3a00002000410c6a200241186a280200360200200041046a20022903103702000c0b0b2000410e3a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0a0b2000410f3a00000c090b200141106a280200220341ffffffff03712003470d0920034102742204417f4c0d09200141046a2802002105200141086a28020021064104210102402004450d00200410212201450d0b0b200241003602182002200136021020022004410276360214200241106a4100200310792002280210200228021822014102746a2006200341027410a1051a200241086a200120036a2201360200200220022903102207370300200041046a2005360200200041086a2007370200200041106a2001360200200041103a00000c080b200141106a2802002203ad42247e2207422088a70d082007a72204417f4c0d08200141046a2802002106200141086a28020021010240024020040d00410421050c010b200410212205450d0a0b20024100360218200220053602102002200441246e360214200241106a4100200310a2012002280218210402402003450d00200341246c21052002280210200441246c6a21030340200141086a2902002107200141106a2902002108200141186a29020021092001290200210a200341206a200141206a280200360200200341186a2009370200200341106a2008370200200341086a20073702002003200a370200200341246a2103200441016a2104200141246a21012005415c6a22050d000b0b200241086a2004360200200220022903102207370300200041046a2006360200200041086a2007370200200041106a2004360200200041113a00000c070b200041123a0000200041046a200141046a2802003602000c060b200041133a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c050b200041143a0000200041106a200141106a290300370300200041086a200141086a2903003703000c040b200041153a0000200041046a200141046a2802003602000c030b200041163a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c020b2001410c6a280200220320036a22042003490d022004417f4c0d02200141046a28020021050240024020040d00410221060c010b200410212206450d040b200241003602182002200636021020022004410176360214200241106a41002003109c012002280210200228021822044101746a2005200341017410a1051a200241086a2205200420036a36020020022002290310370300200241106a200141106a109302200041046a20022903003702002000410c6a200528020036020020012802d0012103200041106a200241106a41c00110a1051a200041d0016a2003360200200041173a000020004180026a200141d8016a220141286a290300370300200041f8016a200141206a290300370300200041f0016a200141186a290300370300200041e8016a200141106a290300370300200041e0016a200141086a290300370300200041d8016a20012903003703000c010b2001410c6a280200220320036a22042003490d012004417f4c0d01200141046a28020021050240024020040d00410221060c010b200410212206450d030b200241003602182002200636021020022004410176360214200241106a41002003109c012002280210200228021822044101746a2005200341017410a1051a200241086a2205200420036a36020020022002290310370300200241106a200141106a109302200041046a20022903003702002000410c6a200528020036020020012802d0012103200041106a200241106a41c00110a1051a200041d0016a2003360200200041183a000020004180026a200141d8016a220141286a290300370300200041f8016a200141206a290300370300200041f0016a200141186a290300370300200041e8016a200141106a290300370300200041e0016a200141086a290300370300200041d8016a20012903003703000b200241d0016a24000f0b1032000b1033000bc11702057f017e23004180026b22022400024002402001280208220341ffffffff01712003470d0020034103742204417f4c0d00200128020021050240024020040d00410421060c010b200410212206450d020b200241003602f801200220063602f001200220044103763602f401200241f0016a4100200310a50120022802f00120022802f80122044103746a2005200341037410a1051a200041086a200420036a360200200020022903f001370200200141146a2802002204ad420c7e2207422088a70d002007a72203417f4c0d00200128020c21064104210502402003450d00200310212205450d020b200241003602f801200220053602f00120022003410c6e3602f401200241f0016a4100200410950120022802f00120022802f8012205410c6c6a2006200310a1051a200241086a200520046a360200200220022903f001370300200141206a280200220341ffffffff00712003470d0020034104742204417f4c0d00200128021821064104210502402004450d00200410212205450d020b200241003602f801200220053602f001200220044104763602f401200241f0016a4100200310a00120022802f00120022802f80122044104746a2006200341047410a1051a200241186a200420036a360200200220022903f0013703102001412c6a2802002204ad42147e2207422088a70d002007a72203417f4c0d00200128022421050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341146e3602f401200241f0016a41002004109e0120022802f00120022802f801220641146c6a2005200310a1051a200241286a200620046a360200200220022903f001370320200141386a2802002204ad42187e2207422088a70d002007a72203417f4c0d00200128023021050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341186e3602f401200241f0016a4100200410b00120022802f00120022802f801220641186c6a2005200310a1051a200241386a200620046a360200200220022903f001370330200141c4006a2802002204ad421c7e2207422088a70d002007a72203417f4c0d00200128023c21050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f00120022003411c6e3602f401200241f0016a4100200410a30120022802f00120022802f8012206411c6c6a2005200310a1051a200241c8006a200620046a360200200220022903f001370340200141d0006a280200220341ffffff3f712003470d0020034105742204417f4c0d00200128024821050240024020040d00410421060c010b200410212206450d020b200241003602f801200220063602f001200220044105763602f401200241f0016a4100200310a80120022802f00120022802f80122044105746a2005200341057410a1051a200241d8006a200420036a360200200220022903f001370350200141dc006a2802002204ad42247e2207422088a70d002007a72203417f4c0d00200128025421050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341246e3602f401200241f0016a4100200410a20120022802f00120022802f801220641246c6a2005200310a1051a200241e8006a200620046a360200200220022903f001370360200141e8006a2802002204ad42287e2207422088a70d002007a72203417f4c0d00200128026021050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341286e3602f401200241f0016a4100200410aa0120022802f00120022802f801220641286c6a2005200310a1051a200241f8006a200620046a360200200220022903f001370370200141f4006a2802002204ad422c7e2207422088a70d002007a72203417f4c0d00200128026c21050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f00120022003412c6e3602f401200241f0016a4100200410a60120022802f00120022802f8012206412c6c6a2005200310a1051a20024188016a200620046a360200200220022903f0013703800120014180016a2802002204ad42307e2207422088a70d002007a72203417f4c0d00200128027821050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341306e3602f401200241f0016a4100200410b60120022802f00120022802f801220641306c6a2005200310a1051a20024198016a200620046a360200200220022903f001370390012001418c016a2802002204ad42347e2207422088a70d002007a72203417f4c0d0020012802840121050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341346e3602f401200241f0016a4100200410a70120022802f00120022802f801220641346c6a2005200310a1051a200241a8016a200620046a360200200220022903f0013703a00120014198016a2802002204ad42387e2207422088a70d002007a72203417f4c0d0020012802900121050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f0012002200341386e3602f401200241f0016a4100200410ae0120022802f00120022802f801220641386c6a2005200310a1051a200241b8016a200620046a360200200220022903f0013703b001200141a4016a2802002204ad423c7e2207422088a70d002007a72203417f4c0d00200128029c0121050240024020030d00410421060c010b200310212206450d020b200241003602f801200220063602f00120022003413c6e3602f401200241f0016a4100200410b70120022802f00120022802f8012206413c6c6a2005200310a1051a200241c8016a200620046a360200200220022903f0013703c001200141b0016a280200220341ffffff1f712003470d0020034106742204417f4c0d0020012802a80121050240024020040d00410421060c010b200410212206450d020b200241003602f801200220063602f001200220044106763602f401200241f0016a4100200310b30120022802f00120022802f80122044106746a2005200341067410a1051a200241d8016a200420036a360200200220022903f0013703d001200141bc016a2802002204ad42c4007e2207422088a70d002007a72203417f4c0d0020012802b40121010240024020030d00410421050c010b200310212205450d020b200241003602f801200220053602f0012002200341c4006e3602f401200241f0016a41002004109b0120022802f00120022802f801220541c4006c6a2001200310a1051a200241e0016a41086a2201200520046a360200200220022903f0013703e001200041146a200241086a2802003602002000200229030037020c20002002290310370218200041206a200241106a41086a280200360200200020022903203702242000412c6a200241206a41086a28020036020020002002290330370230200041386a200241306a41086a280200360200200041c4006a200241c0006a41086a2802003602002000200229034037023c200041d0006a200241d0006a41086a28020036020020002002290350370248200041dc006a200241e0006a41086a28020036020020002002290360370254200041e8006a200241f0006a41086a28020036020020002002290370370260200041f4006a20024180016a41086a280200360200200020022903800137026c20004180016a20024190016a41086a28020036020020002002290390013702782000418c016a200241a0016a41086a280200360200200020022903a0013702840120004198016a200241b0016a41086a280200360200200020022903b00137029001200041a4016a200241c0016a41086a280200360200200020022903c00137029c01200041b0016a200241d0016a41086a280200360200200020022903d0013702a801200041bc016a2001280200360200200020022903e0013702b40120024180026a24000f0b1032000b1033000b92cb0206027f037e237f067e027f037e230041900b6b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e19000102030405060708090a0b0c0d0e0f101112131415161718000b200341e4096a4101360200200342013702d409200341a4c5c6003602d009200341043602c406200341cccec6003602c0062003200341c0066a3602e009200341d0096a419ca8c700103a000b410221040240024020022d00000d0020022d00014101470d00200141306a2903002105200141286a2903002106200141196a2900002107200141186a2d00002108200141176a2d00002109200141156a2f0000210a200141146a2d0000210b200141136a2d0000210c200141116a2f0000210d200141106a2d0000210e2001410f6a2d0000210f2001410d6a2f000021102001410c6a2d000021112001410b6a2d00002112200141096a2f00002113200141086a2d00002114200141076a2d00002115200141056a2f00002116200141046a2d00002117200141036a2d00002118200141216a2d0000211920012f0001211a200241196a2d00002101200241186a2d00002104200241166a2f0100211b200241156a2d0000211c200241146a2d0000211d200241126a2f0100211e200241116a2d0000211f200241106a2d000021202002410e6a2f010021212002410d6a2d000021222002410c6a2d000021232002410a6a2f01002124200241096a2d00002125200241086a2d00002126200241066a2f01002127200241056a2d00002128200241046a2d00002129200241026a2f0100212a20032002411a6a2901003703b809200320013a00b709200320043a00b6092003201b3b01b4092003201c3a00b3092003201d3a00b2092003201e3b01b0092003201f3a00af09200320203a00ae09200320213b01ac09200320223a00ab09200320233a00aa09200320243b01a809200320253a00a709200320263a00a609200320273b01a409200320283a00a309200320293a00a2092003202a3b01a009200341d0096a200341a0096a10c701200341206a20032802d009220220032802d809419ca8c70041004100108c0120032802202101024020032802d409450d00200210230b024020014101470d0041b7c1c0002101410d21024103210441808008211b0c020b200320073703d806200320083a00d706200320093a00d6062003200a3b01d4062003200b3a00d3062003200c3a00d2062003200d3b01d0062003200e3a00cf062003200f3a00ce06200320103b01cc06200320113a00cb06200320123a00ca06200320133b01c806200320143a00c706200320153a00c606200320163b01c406200320173a00c306200320183a00c2062003201a3b01c006200341d0096a200341c0066a10c601200341186a20032802d009220220032802d809419ca8c70041004100108c0120032802182101024020032802d409450d00200210230b024020014101470d00410d210241aac1c00021014180800c211b410321040c020b024020064280c8afa0255441002005501b450d004111210241eec0c00021014180801c211b410321040c020b200341d0096a200341a0096a10c70120033502d809210720032802d0092102412010212201450d19200120032903c006370000200141186a200341c0066a41186a290300370000200141106a200341c0066a41106a290300370000200141086a200341c0066a41086a29030037000020074220862002ad842001ad4280808080800484100e20011023024020032802d409450d00200210230b200341d0096a200341a0096a10950220033502d809210720032802d009210202400240201941037122014103470d00410121014200212b410121040c010b024002400240024020010e03000102000b410021040c020b410121040c010b410221040b200320043a008008410110212201450d45200120043a000041002104428080808010212b0b20074220862002ad84202b2001ad84100e024020040d00200110230b024020032802d409450d00200210230b200341a0096a109602418fcdc200ad4280808080f000842207100c220128000021022001290004212b200128000c210420011023418cdbc100ad4280808080a00184100c2201290000212c2001290008212d200110232003202d3701e8092003202c3701e009200320043601dc092003202b3701d409200320023601d009200341106a200341d0096a412010cd0120032802142102200328021021042007100c2201280000211b20012900042107200128000c211c200110234190d8c100ad4280808080c00184100c2201290000212b2001290008212c200110232003202c3701e8092003202b3701e0092003201c3601dc09200320073701d4092003201b3601d009200341086a200341d0096a412010cd01200328020c21012003280208211b20034180086a200341a0096a109702200341d0096a200328028008221c20032802880810980241002002410020041b2204200141d400201b1b6b2201200120044b1b2101200341d0096a41106a290300420020032903d00942015122021b210720032903d809420020021b212b0240200328028408450d00201c10230b200341d0096a41086a41043a0000200341d9096a20032903a009370000200341e1096a200341a0096a41086a2202290300370000200341e9096a200341a0096a41106a221b290300370000200341f1096a200341a0096a41186a221c290300370000200341880a6a221d20072005202b200654200720055420072005511b221e1b2205370300200341800a6a202b2006201e1b2206370300200341033a00d009200341d0096a10e00120022f0100211e201b2f0100211f201c290300210720032f01a009212020032d00a209212120032d00a309212220032f01a409212320032d00a609212420032d00a709212520032d00aa09212620032d00ab09212720032f01ac09212820032d00ae09212920032d00af09212a20032d00b209210820032d00b309210920032f01b409210a20032d00b609210b20032d00b709210c2003410036028808200342043703800820034180086a41004100200420016b221c201c20044b1b1079200328028808211b0240200420014d0d00200328028008201b4102746a2102034020022001360200200241046a21022004200141016a2201470d000b201c201b6a211b0b200341d8086a41086a2201201b360200200341a00a6a20073703002003419f0a6a200c3a00002003419e0a6a200b3a00002003419c0a6a200a3b01002003419b0a6a20093a00002003419a0a6a20083a0000200341980a6a201f3b0100200341970a6a202a3a0000200341960a6a20293a0000200341940a6a20283b0100200341930a6a20273a0000200341920a6a20263a0000200341900a6a201e3b01002003418f0a6a20253a00002003418e0a6a20243a00002003418c0a6a20233b01002003418b0a6a20223a00002003418a0a6a20213a000020032003290380083703d808200320203b01880a200341d0096a41186a2005370300200341f8096a4100360200200341840a6a2001280200360200200320063703e009200320053703d809200320063703d009200342083703f009200320032903d8083702fc09200342f3e885db96cddbb3203703b008200341b0086a201d20062005411f10990220034180086a200341c0066a10c601200328028008210120032003280288083602dc08200320013602d808200341d0096a200341d8086a10ec010240200328028408450d00200110230b024020032802f4092201450d00200141186c450d0020032802f00910230b200341800a6a28020041ffffffff0371450d4920032802fc0910230c490b4100211b0b20004100360204200041146a2002360200200041106a20013602002000410c6a201b4180801c71200472418010723602000c460b410221040240024020022d00000d0020022d00014101470d00200141106a2903002105200141086a2903002107200241196a2d00002104200241186a2d0000211b200241166a2f0100211c200241156a2d0000211d200241146a2d0000211e200241126a2f0100211f200241116a2d00002120200241106a2d000021212002410e6a2f010021222002410d6a2d000021232002410c6a2d000021242002410a6a2f01002125200241096a2d00002126200241086a2d00002127200241066a2f01002128200241056a2d00002129200241046a2d0000212a200241026a2f0100210120032002411a6a29010037039809200320043a0097092003201b3a0096092003201c3b0194092003201d3a0093092003201e3a0092092003201f3b019009200320203a008f09200320213a008e09200320223b018c09200320233a008b09200320243a008a09200320253b018809200320263a008709200320273a008609200320283b018409200320293a0083092003202a3a008209200320013a008009200320014108763a008109200341c0066a20034180096a10c701200341d0096a20032802c006220220032802c80610e10120032802c40621010240024020032d00d0094101470d00200341e9096a2900002106200341e8096a2d00002104200341e7096a2d0000211b200341e5096a2f0000211c200341e4096a2d0000211d200341e3096a2d0000211e200341e1096a2f0000211f200341e0096a2d00002120200341df096a2d00002121200341dd096a2f00002122200341dc096a2d00002123200341db096a2d00002124200341d9096a2f00002125200341d0096a41086a2d0000212620032d00d709212720032f00d509212820032d00d409212920032d00d309212a20032d00d209210820032d00d109210902402001450d00200210230b200320063703b809200320043a00b7092003201b3a00b6092003201c3b01b4092003201d3a00b3092003201e3a00b2092003201f3b01b009200320203a00af09200320213a00ae09200320223b01ac09200320233a00ab09200320243a00aa09200320253b01a809200320263a00a709200320273a00a609200320283b01a409200320293a00a3092003202a3a00a209200320083a00a109200320093a00a009200341a0066a200341a0096a10c601200341d0096a20032802a006220420032802a80610e20120034180086a41086a221b2003418c0a6a29020037030020034180086a41106a221c200341940a6a29020037030020034180086a41186a221d2003419c0a6a29020037030020034180086a41206a221e200341a40a6a2802003602002003200341840a6a29020037038008024020032802f0092202450d00200341d0096a41186a290300212e200341d0096a41086a290300212d200341800a6a280200211f200341fc096a2802002120200341f8096a280200212120032903e009212f20032903d009210620032802f4092101200341d8086a41206a201e280200360200200341d8086a41186a201d290300370300200341d8086a41106a201c290300370300200341d8086a41086a201b29030037030020032003290380083703d808024020032802a406450d00200410230b200341b0086a41086a2204200341d8086a41086a290300370300200341b0086a41106a221b200341d8086a41106a290300370300200341b0086a41186a221c200341d8086a41186a290300370300200341b0086a41206a221d200341d8086a41206a280200360200200341c0066a41186a202e370300200341f0066a201f360200200341e8066a2021360200200341e4066a2001360200200320032903d8083703b0082003202f3703d006200320063703c006200320203602ec06200320023602e0062003202d3703c80620034194076a201d2802003602002003418c076a201c29030037020020034184076a201b290300370200200341fc066a2004290300370200200341f4066a20032903b00837020020034180086a20034180096a109702200341d0096a200328028008221b200328028808109802200341d0096a41106a290300420020032903d00942015122041b212b20032903d809420020041b212c0240200328028408450d00201b10230b202c20067d2230202c56202b202d7d202c200654ad7d222c202b56202c202b511b0d022003202f200720302030200756202c200556202c2005511b22011b22077c222b3703d006200341c0066a41186a202e2005202c20011b22057c202b202f54ad7c3703002003200720067c22063703c00620032005202d7c2006200754ad7c222b3703c806200341d0096a41386a2005370300200341800a6a2007370300200341d0096a41086a41043a0000200341d9096a200329038009370000200341e1096a20034180096a41086a290300370000200341e9096a20034190096a290300370000200341f1096a20034180096a41186a290300370000200341033a00d009200341d0096a10e001200342f3e885db96cddbb3203703d808200341d8086a200341c0066a41386a2006202b411f109902200341d0096a200341a0096a10c60120032802d0092101200320032802d809360284082003200136028008200341c0066a20034180086a10ec01024020032802d409450d00200110230b024020032802e4062201450d00200141186c450d0020032802e00610230b20032802f00641ffffffff0371450d4b20032802ec0610230c4b0b024020032802a406450d00200410230b41ccc1c0002101410d21024100211b410321040c030b02402001450d00200210230b41c4c1c00021014108210241808004211b410321040c020b02402001450d00200141186c450d00200210230b201f41ffffffff0371450d48202010230c480b4100211b0b20004100360204200041146a2002360200200041106a20013602002000410c6a201b4180800471200472418010723602000c450b410221040240024020022d00000d0020022d00014101470d00200141106a2903002107200141086a290300212b200241196a2d00002101200241186a2d00002104200241166a2f0100211b200241156a2d0000211c200241146a2d0000211d200241126a2f0100211e200241116a2d0000211f200241106a2d000021202002410e6a2f010021212002410d6a2d000021222002410c6a2d000021232002410a6a2f01002124200241096a2d00002125200241086a2d00002126200241066a2f01002127200241056a2d00002128200241046a2d00002129200241026a2f0100212a20032002411a6a2901003703b809200320013a00b709200320043a00b6092003201b3b01b4092003201c3a00b3092003201d3a00b2092003201e3b01b0092003201f3a00af09200320203a00ae09200320213b01ac09200320223a00ab09200320233a00aa09200320243b01a809200320253a00a709200320263a00a609200320273b01a409200320283a00a309200320293a00a2092003202a3b01a00920034180096a200341a0096a10c601200341d0096a200328028009221b20032802880910e20120034180086a41086a221c2003418c0a6a29020037030020034180086a41106a221d200341940a6a29020037030020034180086a41186a221e2003419c0a6a29020037030020034180086a41206a221f200341a40a6a2802003602002003200341840a6a2902003703800802400240024020032802f0092204450d00200341d0096a41186a2903002105200341d0096a41086a290300212c200341800a6a2802002120200341fc096a2802002121200341f8096a280200210120032903e009210620032903d009212d20032802f4092102200341d8086a41206a201f280200360200200341d8086a41186a201e290300370300200341d8086a41106a201d290300370300200341d8086a41086a201c29030037030020032003290380083703d8080240200328028409450d00201b10230b200341b0086a41086a221b200341d8086a41086a290300370300200341b0086a41106a221c200341d8086a41106a290300370300200341b0086a41186a221d200341d8086a41186a290300370300200341b0086a41206a221e200341d8086a41206a280200360200200341c0066a41186a2005370300200341f0066a2020360200200341e8066a2001360200200341e4066a2002360200200320032903d8083703b008200320063703d0062003202d3703c006200320213602ec06200320043602e0062003202c3703c80620034194076a201e2802003602002003418c076a201d29030037020020034184076a201c290300370200200341fc066a201b290300370200200341f4066a20032903b0083702002001411f4d0d0202402002450d00200241186c450d00200410230b41e2c0c0002101410c210241808020211b202041ffffffff0371450d0120211023410321040c040b0240200328028409450d00201b10230b41ccc1c0002101410d21024100211b0b410321040c020b200341c0066a41206a210102402006202b2006202b54200520075420052007511b22021b222b2005200720021b2207844200510d00200341c0066a41186a4200200520077d2006202b54ad7d222c2006202b7d222d4280c8afa025544100202c501b22021b37030020034200202d20021b3703d006418fcdc200ad4280808080f00084100c2204280000211b2004290004212c200428000c211c20041023418cdbc100ad4280808080a00184100c2204290000212d2004290008212f200410232003202f3701e8092003202d3701e0092003201c3601dc092003202c3701d4092003201b3601d009200341286a200341d0096a412010cd012005200720021b21052006202b20021b2106200328022c411c6a411c20032802281b2104024020032802e806220220032802e406470d002001200210b20120032802e80621020b20032802e006200241186c6a220220053703082002200637030020022004360210200320032802e80641016a3602e806200342f3e885db96cddbb3203703d808200341d8086a200341c0066a41386a20032903c006200341c0066a41086a290300411f109902200341d0096a200341a0096a10c60120032802d0092102200320032802d809360284082003200236028008200341c0066a20034180086a10ec01024020032802d409450d00200210230b200341d0096a41386a2005370300200341800a6a2006370300200341d0096a41086a41053a0000200341d9096a20032903f806370000200341e1096a20034180076a290300370000200341e9096a20034188076a290300370000200341f1096a20034190076a290300370000200341033a00d009200341d0096a10e0010b0240200141046a2802002202450d00200241186c450d00200128020010230b20032802f00641ffffffff0371450d4720032802ec0610230c470b4100211b0b20004100360204200041146a2002360200200041106a20013602002000410c6a201b4180803c71200472418010723602000c440b410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f0100211b200241156a2d0000211c200241146a2d0000211d200241126a2f0100211e200241116a2d0000211f200241106a2d000021202002410e6a2f010021212002410d6a2d000021222002410c6a2d000021232002410a6a2f01002124200241096a2d00002125200241086a2d00002126200241066a2f01002127200241056a2d00002128200241046a2d00002129200241026a2f0100212a20032002411a6a29010037039809200320013a009709200320043a0096092003201b3b0194092003201c3a0093092003201d3a0092092003201e3b0190092003201f3a008f09200320203a008e09200320213b018c09200320223a008b09200320233a008a09200320243b018809200320253a008709200320263a008609200320273b018409200320283a008309200320293a0082092003202a3b018009200341a0096a20034180096a10c601200341d0096a20032802a009220120032802a80910e20120034180086a41086a22022003418c0a6a29020037030020034180086a41106a2204200341940a6a29020037030020034180086a41186a221b2003419c0a6a29020037030020034180086a41206a221c200341a40a6a2802003602002003200341840a6a2902003703800802400240024020032802f009221d450d00200341d0096a41186a2903002105200341d0096a41086a290300212c200341800a6a280200211e200341fc096a280200211f200341f8096a280200212020032903e009210620032903d009212d20032802f4092121200341d8086a41206a201c280200360200200341d8086a41186a201b290300370300200341d8086a41106a2004290300370300200341d8086a41086a200229030037030020032003290380083703d808024020032802a409450d00200110230b200341b0086a41086a2201200341d8086a41086a290300370300200341b0086a41106a2202200341d8086a41106a290300370300200341b0086a41186a2204200341d8086a41186a290300370300200341b0086a41206a221b200341d8086a41206a280200360200200341c0066a41186a221c2005370300200341f0066a201e360200200341e8066a2020360200200341e4066a2021360200200320032903d8083703b008200320063703d0062003202d3703c0062003201f3602ec062003201d3602e0062003202c3703c80620034194076a201b2802003602002003418c076a221e200429030037020020034184076a221f2002290300370200200341fc066a22202001290300370200200341f4066a20032903b008370200200341a0096a41186a20034190076a2221290300370300200341a0096a41106a20034188076a2222290300370300200341a0096a41086a20034180076a2223290300370300200320032903f8063703a009418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c210420011023418cdbc100ad4280808080a00184100c220129000021062001290008210720011023200320073701e809200320063701e009200320043601dc09200320053701d409200320023601d009200341306a200341d0096a412010cd0120032802304101460d01201c290300212f20032903d006212e20032802e80621040c020b024020032802a409450d00200110230b41ccc1c0002102410d2104410321014108211b4100211c0c030b2003280234211b20034180086a41086a200341ec066a221d41086a2802003602002003201d2902003703800820032802e0062124201c290300212f200341fa066a2d00002125200341fb066a2d0000212620202f01002127200341fe066a2d00002128200341ff066a2d0000212920232f0100212320034182076a2d0000212a20034183076a2d00002108201f2f0100210920034186076a2d0000210a20034187076a2d0000210b20222f010021222003418a076a2d0000210c2003418b076a2d0000210d201e2f0100210e2003418e076a2d0000210f2003418f076a2d000021102021290300213020032903d006212e20032f01f806212120032802e406211f202d2105202c210602400240024020032802e8062220450d002024202041186c6a211c202041186c41686a2102202d2105202c2106202421010340200141086a290300212b20012903002107201b200141106a2802002204490d0242002006202b7d2005200754ad7d222b200520077d2207200556202b200656202b2006511b22041b21064200200720041b2105200241686a2102200141186a2201201c470d000b0b410021014108211e0240201f450d00201f41186c450d00202410230b410021040c010b41181021221e450d18201e2007370300201e2004360210201e202b37030820034281808080103702d4092003201e3602d0090240024020020d00410121040c010b200141186a2111202041186c20246a41686a21124101210403402011210102400340200141086a290300212b20012903002107201b200141106a2802002202490d0142002006202b7d2005200754ad7d222b200520077d2207200556202b200656202b2006511b22021b21064200200720021b2105200141186a2201201c470d000c030b0b0240200420032802d409470d00200341d0096a200410b20120032802d009211e0b200141186a2111201e200441186c6a222020023602102020202b370308202020073703002003200441016a22043602d80920122001470d000b0b0240201f450d00201f41186c450d00202410230b20032802d40921010b201d200329038008370200200341d8066a202f370300201d41086a20034180086a41086a2802003602002003202e3703d006200320053703c006200320043602e806200320013602e4062003201e3602e0062003203037039007200320103a008f072003200f3a008e072003200e3b018c072003200d3a008b072003200c3a008a07200320223b0188072003200b3a0087072003200a3a008607200320093b018407200320083a0083072003202a3a008207200320233b018007200320293a00ff06200320283a00fe06200320273b01fc06200320263a00fb06200320253a00fa06200320213b01f806200320063703c8060b024002400240024020040d00202e202f84500d010b200342f3e885db96cddbb3203703d808200341d8086a200341f8066a20032903c006200341c8066a290300411f109902200341d0096a20034180096a10c60120032802d0092101200320032802d809360284082003200136028008200341c0066a20034180086a10ec0120032802d409450d01200110230c010b200341d0096a200341a0096a109a0220032d00d00922014104470d01200342f3e885db96cddbb3203703a006200341a0066a200341a0096a109b020b0240202d20032903c006220658202c200341c0066a41086a290300220558202c2005511b0d00200341800a6a202d20067d370300200341d0096a41086a41063a0000200341d9096a20032903a009370000200341e1096a200341a0096a41086a290300370000200341e9096a200341b0096a290300370000200341f1096a200341b8096a290300370000200341880a6a202c20057d202d200654ad7d370300200341033a00d009200341d0096a10e0010b024020032802e4062201450d00200141186c450d0020032802e00610230b20032802f00641ffffffff0371450d4720032802ec0610230c470b200341d0096a41086a280200210420032802d409210220032f00d10920032d00d30941107472221b41ffffff0771211c024020032802e406221d450d00201d41186c450d0020032802e00610230b201c411076211d201c410876211c20032802f00641ffffffff0371450d0120032802ec0610230c010b0b20004100360204200041146a2004360200200041106a20023602002000410c6a201d411074201c41ff017141087472201b41ff0171724108742001723602000c430b0240024020022d00000d0020022d00014101470d00200141046a2802002104200241196a2d0000211b200241186a2d0000211c200241166a2f0100211d200241156a2d0000211e200241146a2d0000211f200241126a2f01002120200241116a2d00002121200241106a2d000021222002410e6a2f010021232002410d6a2d000021242002410c6a2d000021252002410a6a2f01002126200241096a2d00002127200241086a2d00002128200241066a2f01002129200241056a2d0000212a200241046a2d00002108200241026a2f0100210120032002411a6a2901003703b8092003201b3a00b7092003201c3a00b6092003201d3b01b4092003201e3a00b3092003201f3a00b209200320203b01b009200320213a00af09200320223a00ae09200320233b01ac09200320243a00ab09200320253a00aa09200320263b01a809200320273a00a709200320283a00a609200320293b01a4092003202a3a00a309200320083a00a209200320013a00a009200320014108763a00a10920034180096a200341a0096a10c601200341d0096a200328028009221d20032802880910e20120034180086a41086a221e2003418c0a6a29020037030020034180086a41106a221f200341940a6a29020037030020034180086a41186a22202003419c0a6a29020037030020034180086a41206a2221200341a40a6a2802003602002003200341840a6a29020037038008024020032802f0092202450d00200341d0096a41186a2903002105200341d0096a41086a2903002106200341800a6a280200211b200341fc096a280200211c200341f8096a280200212220032903e009210720032903d009212b20032802f4092101200341d8086a41206a2021280200360200200341d8086a41186a2020290300370300200341d8086a41106a201f290300370300200341d8086a41086a201e29030037030020032003290380083703d8080240200328028409450d00201d10230b200341b0086a41086a221d200341d8086a41086a290300370300200341b0086a41106a221e200341d8086a41106a290300370300200341b0086a41186a221f200341d8086a41186a290300370300200341b0086a41206a2220200341d8086a41206a280200360200200341c0066a41186a2005370300200341f0066a201b360200200341e8066a2022360200200341e4066a2001360200200320032903d8083703b008200320073703d0062003202b3703c0062003201c3602ec06200320023602e006200320063703c80620034194076a20202802003602002003418c076a201f29030037020020034184076a201e290300370200200341fc066a201d290300370200200341f4066a20032903b008370200200341d0096a200341f8066a221d10c50120033502d80942208620032802d009221ead841011024020032802d409450d00201e10230b200341d0096a201d10c30120033502d809210520032802d009211d200341003a0085080240024002400240200441c000490d00200441808001490d012004418080808004490d02200341053a008508200341033a00800820032004360081084280808080d00021060c030b200341013a008508200320044102743a00800842808080801021060c020b200341023a008508200320044102744101723b01800842808080802021060c010b200341043a00850820032004410274410272360280084280808080c00021060b2005422086201dad84200620034180086aad84100e024020032d008508450d00200341003a0085080b024020032802d409450d00201d10230b02402001450d00200141186c450d00200210230b201b41ffffffff0371450d46201c10230c460b0240200328028409450d00201d10230b41831021010c010b41821021010b20004100360204200041146a410d360200200041106a41ccc1c0003602002000410c6a20013602000c420b200141086a280200211c200141046a280200211b4102210420022d00000d3e20022d00014101470d3e2001410c6a2802002101200241196a2d00002104200241186a2d0000211d200241166a2f0100211e200241156a2d0000211f200241146a2d00002120200241126a2f01002121200241116a2d00002122200241106a2d000021232002410e6a2f010021242002410d6a2d000021252002410c6a2d000021262002410a6a2f01002127200241096a2d00002128200241086a2d00002129200241066a2f0100212a200241056a2d00002108200241046a2d00002109200241026a2f0100210a20032002411a6a29010037039809200320043a0097092003201d3a0096092003201e3b0194092003201f3a009309200320203a009209200320213b019009200320223a008f09200320233a008e09200320243b018c09200320253a008b09200320263a008a09200320273b018809200320283a008709200320293a0086092003202a3b018409200320083a008309200320093a0082092003200a3b018009200341a0096a20034180096a10c601200341d0096a20032802a009220220032802a80910e20120034180086a41086a22042003418c0a6a29020037030020034180086a41106a221d200341940a6a29020037030020034180086a41186a221e2003419c0a6a29020037030020034180086a41206a221f200341a40a6a2802003602002003200341840a6a290200370380080240024020032802f0092226450d00200341d0096a41186a2903002105200341d0096a41086a2903002106200341800a6a2802002127200341fc096a2802002128200341f8096a280200212020032903e009210720032903d009212b20032802f4092125200341d8086a41206a201f280200360200200341d8086a41186a201e290300370300200341d8086a41106a201d290300370300200341d8086a41086a200429030037030020032003290380083703d808024020032802a409450d00200210230b200341b0086a41086a2202200341d8086a41086a290300370300200341b0086a41106a2204200341d8086a41106a290300370300200341b0086a41186a221d200341d8086a41186a290300370300200341b0086a41206a221e200341d8086a41206a280200360200200341c0066a41186a2005370300200341f0066a2027360200200341e8066a2020360200200341e4066a2025360200200320032903d8083703b008200320073703d0062003202b3703c006200320283602ec06200320263602e006200320063703c80620034194076a201e2802003602002003418c076a201d29030037020020034184076a2004290300370200200341fc066a2002290300370200200341f4066a20032903b00837020020010d0102402025450d00202541186c450d00202610230b0240202741ffffffff0371450d00202810230b419ec1c000211d410c210241032104410421010c410b024020032802a409450d00200210230b41ccc1c000211d410d210241032104410021010c400b024020014105742202450d00200341d0096a41186a2204201b41186a290000370300200341d0096a41106a221d201b41106a290000370300200341d0096a41086a221e201b41086a2900003703002003201b2900003703d009412010212223450d13202320032903d009370000202341186a2004290300370000202341106a201d290300370000202341086a201e29030037000020034281808080103702840820032023360280080240201b20026a201b41206a2202470d00410121010c3c0b200341a0096a41186a221d200241186a290000370300200341a0096a41106a221e200241106a290000370300200341a0096a41086a221f200241086a290000370300200320022900003703a009200141057421244102210141c0002102410121040340200341d0096a41186a2220201d290300370300200341d0096a41106a2221201e290300370300200341d0096a41086a2222201f290300370300200320032903a0093703d00902402001417f6a2004470d0020034180086a20044101109a0120032802800821230b202320026a41606a220420032903d009370000200441186a2020290300370000200441106a2021290300370000200441086a2022290300370000200320013602880820242002460d3c20014110460d3c201d201b20026a220441186a290000370300201e200441106a290000370300201f200441086a290000370300200320042900003703a009200241206a2102200141016a210120032802840821040c000b0b41002101201c41ffffff3f710d1f0c390b0240024020022d00000d0020022d00014101470d00200241196a2d00002104200241186a2d0000211b200241166a2f0100211c200241156a2d0000211d200241146a2d0000211e200241126a2f0100211f200241116a2d00002120200241106a2d000021212002410e6a2f010021222002410d6a2d000021232002410c6a2d000021242002410a6a2f01002125200241096a2d00002126200241086a2d00002127200241066a2f01002128200241056a2d00002129200241046a2d0000212a200241026a2f0100210120032002411a6a2901003703b809200320043a00b7092003201b3a00b6092003201c3b01b4092003201d3a00b3092003201e3a00b2092003201f3b01b009200320203a00af09200320213a00ae09200320223b01ac09200320233a00ab09200320243a00aa09200320253b01a809200320263a00a709200320273a00a609200320283b01a409200320293a00a3092003202a3a00a209200320013a00a009200320014108763a00a10920034180096a200341a0096a10c601200341d0096a200328028009221c20032802880910e20120034180086a41086a221d2003418c0a6a29020037030020034180086a41106a221e200341940a6a29020037030020034180086a41186a221f2003419c0a6a29020037030020034180086a41206a2220200341a40a6a2802003602002003200341840a6a29020037038008024020032802f0092202450d00200341d0096a41186a2903002105200341d0096a41086a2903002106200341800a6a2802002104200341fc096a280200211b200341f8096a280200212120032903e009210720032903d009212b20032802f4092101200341d8086a41206a2020280200360200200341d8086a41186a201f290300370300200341d8086a41106a201e290300370300200341d8086a41086a201d29030037030020032003290380083703d8080240200328028409450d00201c10230b200341b0086a41086a221c200341d8086a41086a290300370300200341b0086a41106a221d200341d8086a41106a290300370300200341b0086a41186a221e200341d8086a41186a290300370300200341b0086a41206a221f200341d8086a41206a280200360200200341c0066a41186a2005370300200341f0066a2004360200200341e8066a2021360200200341e4066a2001360200200320032903d8083703b008200320073703d0062003202b3703c0062003201b3602ec06200320023602e006200320063703c80620034194076a201f2802003602002003418c076a201e29030037020020034184076a201d290300370200200341fc066a201c290300370200200341f4066a20032903b008370200200341d0096a200341f8066a221c10c30120033502d80942208620032802d009221dad841011024020032802d409450d00201d10230b200341d0096a201c10c50120033502d80942208620032802d009221cad841011024020032802d409450d00201c10230b02402001450d00200141186c450d00200210230b200441ffffffff0371450d44201b10230c440b0240200328028409450d00201c10230b41831021010c010b41821021010b20004100360204200041146a410d360200200041106a41ccc1c0003602002000410c6a20013602000c400b0240024020022d00000d0020022d00014101470d0020012d00012108200241196a2d00002104200241186a2d0000211b200241166a2f0100211c200241156a2d0000211d200241146a2d0000211e200241126a2f0100211f200241116a2d00002120200241106a2d000021212002410e6a2f010021222002410d6a2d000021232002410c6a2d000021242002410a6a2f01002125200241096a2d00002126200241086a2d00002127200241066a2f01002128200241056a2d00002129200241046a2d0000212a200241026a2f0100210120032002411a6a2901003703b809200320043a00b7092003201b3a00b6092003201c3b01b4092003201d3a00b3092003201e3a00b2092003201f3b01b009200320203a00af09200320213a00ae09200320223b01ac09200320233a00ab09200320243a00aa09200320253b01a809200320263a00a709200320273a00a609200320283b01a409200320293a00a3092003202a3a00a209200320013a00a009200320014108763a00a10920034180096a200341a0096a10c601200341d0096a200328028009220220032802880910e20120034180086a41086a221d2003418c0a6a29020037030020034180086a41106a221e200341940a6a29020037030020034180086a41186a221f2003419c0a6a29020037030020034180086a41206a2220200341a40a6a2802003602002003200341840a6a29020037038008024020032802f0092204450d00200341d0096a41186a2903002105200341d0096a41086a2903002106200341800a6a280200211b200341fc096a280200211c200341f8096a280200212120032903e009210720032903d009212b20032802f4092101200341d8086a41206a2020280200360200200341d8086a41186a201f290300370300200341d8086a41106a201e290300370300200341d8086a41086a201d29030037030020032003290380083703d8080240200328028409450d00200210230b200341b0086a41086a2202200341d8086a41086a290300370300200341b0086a41106a221d200341d8086a41106a290300370300200341b0086a41186a221e200341d8086a41186a290300370300200341b0086a41206a221f200341d8086a41206a280200360200200341c0066a41186a2005370300200341f0066a201b360200200341e8066a2021360200200341e4066a2001360200200320032903d8083703b008200320073703d0062003202b3703c0062003201c3602ec06200320043602e006200320063703c80620034194076a201f2802003602002003418c076a201e29030037020020034184076a201d290300370200200341fc066a2002290300370200200341f4066a20032903b008370200200341d0096a200341f8066a10950220033502d809210520032802d009211d02400240200841037122024103470d0041012102420021064101211e0c010b024002400240024020020e03000102000b4100211e0c020b4101211e0c010b4102211e0b2003201e3a008008410110212202450d3f2002201e3a00004100211e42808080801021060b2005422086201dad8420062002ad84100e0240201e0d00200210230b024020032802d409450d00201d10230b02402001450d00200141186c450d00200410230b201b41ffffffff0371450d43201c10230c430b0240200328028409450d00200210230b41831021010c010b41821021010b20004100360204200041146a410d360200200041106a41ccc1c0003602002000410c6a20013602000c3f0b200141196a2900002106200141186a2d00002109200141176a2d0000210a200141156a2f0000210b200141146a2d0000210c200141136a2d0000210d200141116a2f0000210e200141106a2d0000210f2001410f6a2d000021102001410d6a2f000021112001410c6a2d000021122001410b6a2d00002113200141096a2f00002114200141086a2d00002115200141076a2d00002116200141056a2f00002117200141046a2d00002118200141036a2d0000211a200141026a2d0000211920012d000121312002411a6a2901002105200241196a2d00002104200241186a2d0000211b200241166a2f0100211c200241156a2d0000211d200241146a2d0000211e200241126a2f0100211f200241116a2d00002120200241106a2d000021212002410e6a2f010021222002410d6a2d000021232002410c6a2d000021242002410a6a2f01002125200241096a2d00002126200241086a2d00002127200241066a2f01002128200241056a2d00002129200241046a2d0000212a200241026a2f0100210841012101024020022d00000d0020022d000141014721010b200320053701e809200320043a00e7092003201b3a00e6092003201c3b01e4092003201d3a00e3092003201e3a00e2092003201f3b01e009200320203a00df09200320213a00de09200320223b01dc09200320233a00db09200320243a00da09200320253b01d809200320263a00d709200320273a00d609200320283b01d409200320293a00d3092003202a3a00d209200320083b01d0090240024020010d0020034180096a41186a200341d0096a41186a220429010037030020034180096a41106a200341d0096a41106a221b29010037030020034180096a41086a200341d0096a41086a221c290100370300200320032901d00937038009200341c0066a20034180096a10c701200341d0096a20032802c006220220032802c80610e10120032802c40621010240024020032d00d0094101470d00200341e9096a290000210520042d00002104200341e7096a2d0000211d200341e5096a2f0000211e200341e4096a2d0000211f200341e3096a2d00002120200341e1096a2f00002121201b2d0000211b200341df096a2d00002122200341dd096a2f00002123200341dc096a2d00002124200341db096a2d00002125200341d9096a2f00002126201c2d0000211c20032d00d709212720032f00d509212820032d00d409212920032d00d309212a20032d00d209210820032d00d109213202402001450d00200210230b200320053703c808200320043a00c7082003201d3a00c6082003201e3b01c4082003201f3a00c308200320203a00c208200320213b01c0082003201b3a00bf08200320223a00be08200320233b01bc08200320243a00bb08200320253a00ba08200320263b01b8082003201c3a00b708200320273a00b608200320283b01b408200320293a00b3082003202a3a00b208200320083a00b108200320323a00b008200320063703f008200320093a00ef082003200a3a00ee082003200b3b01ec082003200c3a00eb082003200d3a00ea082003200e3b01e8082003200f3a00e708200320103a00e608200320113b01e408200320123a00e308200320133a00e208200320143b01e008200320153a00df08200320163a00de08200320173b01dc08200320183a00db082003201a3a00da08200320193a00d908200320313a00d808200341d0096a200341d8086a10c601200341c0006a20032802d009220220032802d809419ca8c70041004100108c0120032802402101024020032802d409450d00200210230b20014101470d0141aac1c0002104410d211b410321014180900c21020c030b02402001450d00200210230b41c4c1c00021044108211b410321014180900421020c020b200341d8086a200341b0086a412010a305450d41200341d0096a20034180096a10c70120033502d809210520032802d0092102412010212201450d11200120032903d808370000200141186a200341d8086a41186a290300370000200141106a200341d8086a41106a290300370000200141086a200341d8086a41086a29030037000020054220862002ad842001ad4280808080800484100e20011023024020032802d409450d00200210230b200341a0066a200341b0086a10c601200341d0096a20032802a006220220032802a806220410e201024020032802f0092201450d002004ad4220862002ad8410110b200341c0066a41086a22042003418c0a6a290200370300200341c0066a41106a221b200341940a6a290200370300200341c0066a41186a221c2003419c0a6a290200370300200341c0066a41206a221d200341a40a6a2802003602002003200341840a6a2902003703c006200341d0096a41186a2903002105200341d0096a41086a2903002106200341800a6a280200211e200341fc096a280200211f200341f8096a280200212020032903e009210720032903d009212b20032802f409212120034180086a41206a2222201d28020036020020034180086a41186a221d201c29030037030020034180086a41106a221c201b29030037030020034180086a41086a221b2004290300370300200320032903c0063703800802402001450d00200341a0096a41206a2022280200360200200341a0096a41186a201d290300370300200341a0096a41106a201c290300370300200341a0096a41086a201b29030037030020032003290380083703a009024020032802a406450d00200210230b200341d0096a41186a2005370300200341800a6a201e360200200341f8096a2020360200200341f4096a2021360200200341840a6a20032903a0093702002003418c0a6a200341a8096a290300370200200341940a6a200341b0096a2903003702002003419c0a6a200341a0096a41186a290300370200200341a40a6a200341c0096a280200360200200320073703e009200320063703d8092003202b3703d0092003201f3602fc09200320013602f009200341c0066a200341d8086a10c60120032802c0062101200320032802c806360284082003200136028008200341d0096a20034180086a108502024020032802c406450d00200110230b024020032802f4092201450d00200141186c450d0020032802f00910230b20032802800a41ffffffff0371450d4220032802fc0910230c420b20032802a406450d41200210230c410b4102210141801021020b20004100360204200041146a201b360200200041106a20043602002000410c6a20022001723602000c3e0b41002104024020022d000120022d000041004772450d00200041003602042000410c6a41023602000c3e0b200141046a2802002102418fcdc200ad4280808080f00084100c2201280000211b20012900042105200128000c211c2001102341e4d8c100ad4280808080e00184100c220129000021062001290008210720011023200320073701e809200320063701e0092003201c3601dc09200320053701d4092003201b3601d009200320023602c006200341d0096aad4280808080800484200341c0066aad4280808080c00084100e200041003602040c3f0b024020022d000120022d0000410047720d00418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c21042001102341fcdec100ad4280808080800184100c220129000021062001290008210720011023200320073701e809200320063701e009200320043601dc09200320053701d409200320023601d009200341023a008008410110212201450d39200120032d0080083a0000200341d0096aad42808080808004842001ad42808080801084100e200110230c3e0b200041003602042000410c6a41023602000c3c0b024020022d000120022d0000410047720d00418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c21042001102341fcdec100ad4280808080800184100c220129000021062001290008210720011023200320073701e809200320063701e009200320043601dc09200320053701d409200320023601d009200341013a008008410110212201450d38200120032d0080083a0000200341d0096aad42808080808004842001ad42808080801084100e200110230c3d0b200041003602042000410c6a41023602000c3b0b200141086a2802002104200141046a280200211b024020022d000120022d0000410047720d002001410c6a2802002102418fcdc200ad4280808080f00084100c2201280000211c20012900042105200128000c211d2001102341bcd9c100ad4280808080d00184100c220129000021062001290008210720011023200320073701e809200320063701e0092003201d3601dc09200320053701d4092003201c3601d009200341203602c4062003200341d0096a3602c006201b2002200341c0066a109c02200441ffffff3f71450d3c201b10230c3c0b0240200441ffffff3f71450d00201b10230b200041003602042000410c6a41023602000c3a0b200341e8096a200141196a290000370300200341d0096a41106a200141116a290000370300200341d0096a41086a200141096a290000370300200320012900013703d00902400240024020022d000120022d0000410047720d00200341c0066a200341d0096a109a0220032d00c00622014104460d0220032f00c10620032d00c306411074722102200341c0066a41086a280200210420032802c406211b0c010b410221010b20004100360204200041146a2004360200200041106a201b3602002000410c6a20024108742001723602000c3a0b200342f3e885db96cddbb3203703a009200341a0096a200341d0096a109b020c3a0b024020022d000120022d0000410047720d00418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c21042001102341fcdec100ad4280808080800184100c220129000021062001290008210720011023200320073701e809200320063701e009200320043601dc09200320053701d409200320023601d009200341033a008008410110212201450d35200120032d0080083a0000200341d0096aad42808080808004842001ad42808080801084100e200110230c3a0b200041003602042000410c6a41023602000c380b4102211c200141106a280200211d2001410c6a2802002125200141086a2802002124200141046a280200212620022d000121040240024020022d0000220141024b0d00024020010e03000102000b200441ff0171450d010b200420014100477241ff0171450d0041801021010c2f0b4103211c0240201d0d00419ec1c0002104410c21024180901021010c2f0b201d41016a210220242101024003402002417f6a22024102490d01200141046a21042001280200211b200141046a2101201b2004280200490d000b418bc0c0002104411221024180903421010c2f0b200341d0096a202610e701200341c0066a20032802d009220220032802d80910e80120032902c406420020032802c00622011b2105024020032802d409450d00200210230b2001410820011b21230240201d410274221d20246a417c6a2802002005422088a722014f0d0041002102417f21042024211b03402002201b280200221e6a22012005422088a7221f4f0d0b2023200141d8006c6a220128022c212120012802202122200141306a2802002120200141246a280200211c2001200141d8006a2004201f6a201e6b41d8006c10a2051a0240201c450d00201c41306c450d00202210230b0240202041ffffff3f71450d00202110230b201b41046a211b20054280808080707c2105200441016a21042002417f6a2102201d417c6a221d0d000b0240202541ffffffff0371450d00202410230b200341c0066a202610e70120032802c006210120033502c8062106200341d0096a20232005422088a7220210f50120064220862001ad8420033502d80942208620032802d0092204ad84100e024020032802d409450d00200410230b024020032802c406450d00200110230b02402002450d00202341306a21012005422088a741d8006c210203400240200141746a2802002204450d00200441306c450d00200141706a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141d8006a2101200241a87f6a22020d000b0b2005a72201450d39200141d8006c450d39202310230c390b02402001450d00200141d8006c2102202341306a210103400240200141746a2802002204450d00200441306c450d00200141706a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141d8006a2101200241a87f6a22020d000b0b41ffc0c0002104411121024180901821012005a7221b450d2e201b41d8006c450d2e202310230c2e0b4102211b2001410c6a2802002104200141086a280200211d024020022d00000d0020022d00014101470d00200241196a2d0000211c200241186a2d0000211f200241166a2f01002120200241156a2d00002121200241146a2d00002122200241126a2f01002123200241116a2d00002124200241106a2d000021252002410e6a2f010021262002410d6a2d000021272002410c6a2d000021282002410a6a2f01002129200241096a2d0000212a200241086a2d00002108200241066a2f01002109200241056a2d0000210a200241046a2d0000210b200241026a2f0100210c200141106a280200211e200141046a280200211b20032002411a6a2901003703c8082003201c3a00c7082003201f3a00c608200320203b01c408200320213a00c308200320223a00c208200320233b01c008200320243a00bf08200320253a00be08200320263b01bc08200320273a00bb08200320283a00ba08200320293b01b8082003202a3a00b708200320083a00b608200320093b01b4082003200a3a00b3082003200b3a00b2082003200c3b01b0080240201e41104d0d00419dc0c0002101411a2102410c211c0c2c0b418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c211c2001102341f4e5c100ad4280808080a00184100c220129000021062001290008210720011023200320073701e809200320063701e0092003201c3601dc09200320053701d409200320023601d009200341f0016a200341d0096a412010cd0141b7c0c000210141122102410b211c20032802f001450d2b201b20032802f4014f0d2b418fcdc200ad4280808080f00084100c221f2800002120201f2900042105201f28000c2121201f1023418cdbc100ad4280808080a00184100c221f2900002106201f2900082107201f1023200320073701e809200320063701e009200320213601dc09200320053701d409200320203601d009200341e8016a200341d0096a412010cd0120032802e801450d2b201b20032802ec0122204b0d2b418fcdc200ad4280808080f00084100c221f2800002121201f2900042105201f28000c2122201f10234190d8c100ad4280808080c00184100c221f2900002106201f2900082107201f1023200320073701e809200320063701e009200320223601dc09200320053701d409200320213601d009200341e0016a200341d0096a412010cd01201b4100202020032802e40141d40020032802e0011b6b221f201f20204b1b2221490d2b200341d0096a201b10cb01200341c8016a20032802d009222020032802d80910d701200341d8016a290300212b20032903d001210720032802c801211f024020032802d409450d00202010230b201f450d2b200341a0096a200341b0086a10c601200341d0096a20032802a009220220032802a80910e20120034180086a41086a221c2003418c0a6a29020037030020034180086a41106a221f200341940a6a29020037030020034180086a41186a22202003419c0a6a29020037030020034180086a41206a2222200341a40a6a2802003602002003200341840a6a2902003703800802400240024020032802f0092223450d00200341d0096a41186a2903002105200341d0096a41086a2903002106200341800a6a2802002124200341fc096a2802002101200341f8096a280200212520032903e009212c20032903d009212d20032802f4092126200341d8086a41206a2022280200360200200341d8086a41186a2020290300370300200341d8086a41106a201f290300370300200341d8086a41086a201c29030037030020032003290380083703d808024020032802a409450d00200210230b200341c0066a41186a2005370300200341f0066a2024360200200341e8066a2025360200200341e4066a2026360200200341f4066a220220032903d808370200200341fc066a200341e0086a29030037020020034184076a200341e8086a2903003702002003418c076a200341d8086a41186a29030037020020034194076a200341f8086a2802003602002003202c3703d0062003202d3703c006200320013602ec06200320233602e006200320063703c80602402002280200221f0d00410021024100211c0c030b410021024100211c03400240024002402021200128020022204b0d0020020d01410021020c020b200241016a21020c010b201c20026b2222201f4f0d0f200120024102746b2222280200212320222020360200200120233602000b200141046a2101201f201c41016a221c470d000b024002402002450d0020032802f4062221201f20026b2201490d01200320013602f406200121210c010b20032802f40621210b20032802ec0621014100210202400240202141014b0d004100211c20210e020401040b2021211c03402002201c410176221f20026a2220201b200120204102746a280200491b2102201c201f6b221c41014b0d000b0b201b200120024102746a280200221c470d01024020032802e4062201450d00200141186c450d0020032802e00610230b024020032802f00641ffffffff0371450d0020032802ec0610230b41fdbfc0002101410e211c410e21020c2e0b024020032802a409450d00200210230b41ccc1c0002101410d21024100211c0c2d0b20212002201b201c4b6a2202490d0c2021211c0b0240201c20032802f006470d00200341ec066a201c4101107920032802ec0621010b200120024102746a220141046a2001201c20026b41027410a2051a2001201b3602002003201c41016a3602f406200341d0096a200341b0086a10c60120032802d0092101200320032802d8093602a409200320013602a009200341c0066a200341a0096a10ec01024020032802d409450d00200110230b200341d8086a201b109d020240201e41246c22010d00410021270c2b0b201d20016a2225415c6a212a200341f8066a2122201d2102410021270340200221010340200141206a2802002102200341a0096a41186a200141186a290000370300200341a0096a41106a200141106a290000370300200341a0096a41086a200141086a290000370300200320012900003703a009200341d0096a201b200341a0096a10df01200341c0016a20032802d009221c20032802d80910de0120032802c001212320032802c4012124024020032802d409450d00201c10230b20034180086a201b200341a0096a10dd01200341d0096a20032802800822202003280288081090020240024020032802f009221e0d00420021054100211f4108211e4100211c420021060c010b200341d0096a41086a290300210620032903d009210520032802f409211f20032802f809211c0b0240200328028408450d00202010230b02400240201c20024d0d00201e200241306c6a2202450d0002402022200241106a221c460d00201c2022412010a3050d020b2002290300200241086a29030020052006109e0221080240024020032802dc0822260d004100211c0c010b20032802e00821280340202641086a211c20262f010622294105742102410021200240024003402002450d01200341a0096a201c412010a3052221450d02200241606a2102202041016a2120201c41206a211c2021417f4a0d000b2020417f6a21290b024020280d004100211c0c030b2028417f6a2128202620294102746a4194036a28020021260c010b0b202620204102746a41e8026a280200211c0b20032802d80822024101200241014b1b2202418094ebdc036e222020022020418094ebdc036c476a22204101202041014b1b222020024b0d102003418094ebdc033602d40920032002201c2002201c491b20206ead428094ebdc037e200220206ead8042ffffffff0f834100418094ebdc032024410020231b6b22022002418094ebdc034b1bad7e428094ebdc0380a722023602d009200341d0096a2002418094ebdc034b4102746a35020021052003418094ebdc033602d409200320052008ad7e428094ebdc0380a722023602d009200341d0096a2002418094ebdc034b4102746a28020021022003418094ebdc033602d4092003417f202720026a220220022027491b22023602d009200341d0096a2002418094ebdc034b4102746a28020021270b0240201f450d00201f41306c450d00201e10230b200141246a2102202a2001460d2d0c020b200141246a21010240201f450d00201f41306c450d00201e10230b20252001460d2c0c000b0b0b2004450d28200441246c450d28201d10230c2b0b4102211b4100210420022d00000d2420022d00014101470d24200241196a2d00002104200241186a2d0000211c200241166a2f0100211d200241156a2d0000211e200241146a2d0000211f200241126a2f01002120200241116a2d00002121200241106a2d000021222002410e6a2f010021232002410d6a2d000021242002410c6a2d000021252002410a6a2f01002126200241096a2d00002127200241086a2d00002128200241066a2f01002129200241056a2d0000212a200241046a2d00002108200241026a2f01002109200141046a280200211b20032002411a6a2901003703c808200320043a00c7082003201c3a00c6082003201d3b01c4082003201e3a00c3082003201f3a00c208200320203b01c008200320213a00bf08200320223a00be08200320233b01bc08200320243a00bb08200320253a00ba08200320263b01b808200320273a00b708200320283a00b608200320293b01b4082003202a3a00b308200320083a00b208200320093b01b008418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c21042001102341f4e5c100ad4280808080a00184100c220129000021062001290008210720011023200320073701e809200320063701e009200320043601dc09200320053701d409200320023601d009200341a0036a200341d0096a412010cd0141b7c0c0002102411221014180802c210402400240024020032802a003450d0020032802a403201b4d0d00418fcdc200ad4280808080f00084100c221c280000211d201c2900042105201c28000c211e201c1023418cdbc100ad4280808080a00184100c221c2900002106201c2900082107201c1023200320073701e809200320063701e0092003201e3601dc09200320053701d4092003201d3601d00920034198036a200341d0096a412010cd01200328029803450d00200328029c03221d201b490d00418fcdc200ad4280808080f00084100c221c280000211e201c2900042105201c28000c211f201c10234190d8c100ad4280808080c00184100c221c2900002106201c2900082107201c1023200320073701e809200320063701e0092003201f3601dc09200320053701d4092003201e3601d00920034190036a200341d0096a412010cd014100201d20032802940341d4002003280290031b6b221c201c201d4b1b221e201b4b0d00200341d0096a201b10cb01200341f8026a20032802d009221d20032802d80910d70120034188036a2903002106200329038003210520032802f802211c024020032802d409450d00201d10230b201c450d00200341a0096a200341b0086a10c601200341d0096a20032802a009220220032802a80910e20120034180086a41086a22042003418c0a6a29020037030020034180086a41106a221c200341940a6a29020037030020034180086a41186a221d2003419c0a6a29020037030020034180086a41206a221f200341a40a6a2802003602002003200341840a6a29020037038008024020032802f0092220450d00200341d0096a41186a2903002107200341d0096a41086a290300212b200341800a6a2802002121200341fc096a2802002101200341f8096a280200212220032903e009212c20032903d009212d20032802f4092123200341d8086a41206a201f280200360200200341d8086a41186a201d290300370300200341d8086a41106a201c290300370300200341d8086a41086a200429030037030020032003290380083703d808024020032802a409450d00200210230b200341c0066a41186a2007370300200341f0066a2021360200200341e8066a2022360200200341e4066a2023360200200341f4066a220220032903d808370200200341fc066a200341e0086a29030037020020034184076a200341e8086a2903003702002003418c076a200341d8086a41186a29030037020020034194076a200341f8086a2802003602002003202c3703d0062003202d3703c006200320013602ec06200320203602e0062003202b3703c80602402002280200221c0d0041002102410021040c040b41002102410021040340024002400240201e2001280200221d4b0d0020020d01410021020c020b200241016a21020c010b200420026b221f201c4f0d11200120024102746b221f2802002120201f201d360200200120203602000b200141046a2101201c200441016a2204470d000b024002402002450d0020032802f406221e201c20026b2201490d01200320013602f4062001211e0c010b20032802f406211e0b20032802ec0621014100210202400240201e41014b0d0041002104201e0e020501050b201e2104034020022004410176221c20026a221d201b2001201d4102746a280200491b21022004201c6b220441014b0d000b0b201b200120024102746a2802002204470d02024020032802e4062201450d00200141186c450d0020032802e00610230b024020032802f00641ffffffff0371450d0020032802ec0610230b41fdbfc0002102410e21014103211b4180803821040c290b024020032802a409450d00200210230b41ccc1c0002102410d2101410021040b4103211b0c270b201e2002201b20044b6a2202490d0d201e21040b0240200420032802f006470d00200341ec066a20044101107920032802ec0621010b200120024102746a220141046a2001200420026b41027410a2051a2001201b3602002003200441016a3602f406200341d0096a200341b0086a10c60120032802d0092101200320032802d8093602a409200320013602a009200341c0066a200341a0096a10ec01024020032802d409450d00200110230b200341d8086a201b109d02200341d0096a201b200341f8066a221c10df01200341f0026a20032802d009220120032802d80910de0120032802f002212120032802f4022122024020032802d409450d00200110230b200341a0096a201b201c10dd01200341d0096a20032802a009220120032802a8091090020240024020032802f00922240d004200210741082124410021204200212b4200212c4200212d0c010b200341d8096a290300212b200341e8096a290300212d20032903d009210720032903e009212c20032802f40921200b024020032802a409450d00200110230b202c202d2007202b109e0221230240024020032802dc08221d0d00410021020c010b200341d8086a41086a280200211e0340201d41086a2102201d2f0106221f4105742101410021040240024003402001450d01201c2002412010a305221b450d02200141606a2101200441016a2104200241206a2102201b417f4a0d000b2004417f6a211f0b0240201e0d00410021020c030b201e417f6a211e201d201f4102746a4194036a280200211d0c010b0b201d20044102746a41e8026a28020021020b20032802d80822014101200141014b1b2201418094ebdc036e220420012004418094ebdc036c476a22044101200441014b1b220420014b0d0d200341c8026a20052006428094ebdc03420010a705200341b8026a20032903c8022206200341c8026a41086a29030022074280ec94a37c427f10a6052003418094ebdc033602d40920032023ad4100418094ebdc032022410020211b221b6b221d201d418094ebdc034b1bad7e428094ebdc0380a7221d3602d009200341d0096a201d418094ebdc034b4102746a280200211d2003418094ebdc033602d4092003417f201b201d6a221d201d201b491b221b3602d009200341d0096a201b418094ebdc034b4102746a350200212b2003418094ebdc033602d4092003202b2001200220012002491b20046ead428094ebdc037e200120046ead8042ffffffff0f837e428094ebdc0380a722013602d009200341a8026a20062007200341d0096a2001418094ebdc034b4102746a350200222b420010a605200341d8026a201c20032903a8022206202b200520032903b8027c7e2205428094ebdc03802207a7417f2005428080808080c0b2cd3b541b200520074280ec94a37c7e7c4280cab5ee01566aad7c2205200341a8026a41086a2903002005200654ad7c109f02200341d8026a41106a290300210520032903e0022106024020032903d8022207a74101470d0020032903b008210720032903b808212b20032903c008212c20032903c808212d200341880a6a2005370300200341800a6a2006370300200341f1096a202d370000200341e9096a202c370000200341e1096a202b370000200341d9096a2007370000200341d0096a41086a220241003a0000200341033a00d009200341d0096a10e001200341d0096a41186a221c4200370300200341d0096a41106a2204420037030020024200370300200342003703d00941bdadc500ad42808080808001842207100c221b290000212b20034180086a41086a2201201b41086a2900003703002003202b37038008201b10232002200129030037030020032003290380083703d00941c5adc500ad4280808080d00184222b100c221b290000212c2001201b41086a2900003703002003202c37038008201b10232004200329038008222c370300200341a0096a41086a221d2002290300370300200341a0096a41106a221e202c370300200341a0096a41186a221f2001290300370300200320032903d0093703a009200341f8016a200341a0096a412010d701200341f8016a41106a290300212c200329038002212d20032802f801211b201c42003703002004420037030020024200370300200342003703d0092007100c221c29000021072001201c41086a2900003703002003200737038008201c10232002200129030037030020032003290380083703d009202b100c221c29000021072001201c41086a2900003703002003200737038008201c102320042003290380082207370300201d2002290300370300201e2007370300201f2001290300370300200320032903d0093703a0092003427f202c4200201b1b220720057c202d4200201b1b220520067c22062005542201ad7c22052001200520075420052007511b22011b3703d8092003427f200620011b3703d009200341d0096a2101200341a0096a21020c230b20074201520d23200341d0096a41186a221c4200370300200341d0096a41106a22044200370300200341d0096a41086a22024200370300200342003703d00941bdadc500ad42808080808001842207100c221b290000212b20034180086a41086a2201201b41086a2900003703002003202b37038008201b10232002200129030037030020032003290380083703d00941c5adc500ad4280808080d00184222b100c221b290000212c2001201b41086a2900003703002003202c37038008201b10232004200329038008222c370300200341a0096a41086a221d2002290300370300200341a0096a41106a221e202c370300200341a0096a41186a221f2001290300370300200320032903d0093703a00920034190026a200341a0096a412010d70120034190026a41106a290300212c200329039802212d200328029002211b201c42003703002004420037030020024200370300200342003703d0092007100c221c29000021072001201c41086a2900003703002003200737038008201c10232002200129030037030020032003290380083703d009202b100c221c29000021072001201c41086a2900003703002003200737038008201c102320042003290380082207370300201d2002290300370300201e2007370300201f2001290300370300200320032903d0093703a0092003427f202c4200201b1b220720057c202d4200201b1b220520067c22062005542201ad7c22052001200520075420052007511b22011b3703d8092003427f200620011b3703d009200341d0096a2101200341a0096a21020c220b200141246a2802002104200341b8066a200141196a290000370300200341b0066a200141116a290000370300200341a8066a200141096a290000370300200320012900013703a00602400240024020022d00000d0020022d00014101470d0020034180096a41186a200341a0066a41186a29030037030020034180096a41106a200341a0066a41106a29030037030020034180096a41086a200341a0066a41086a290300370300200320032903a00637038009418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c211b20011023418cdbc100ad4280808080a00184100c220129000021062001290008210720011023200320073701e809200320063701e0092003201b3601dc09200320053701d409200320023601d00920034188066a200341d0096a412010cd0141b7c0c0002101411221024180802c211b200328028806450d02200328028c06221d2004490d02418fcdc200ad4280808080f00084222b100c221c280000211e201c2900042105201c28000c211f201c10234190d8c100ad4280808080c00184100c221c2900002106201c2900082107201c1023200320073701e809200320063701e0092003201f3601dc09200320053701d4092003201e3601d00920034180066a200341d0096a412010cd0120044100201d20032802840641d4002003280280061b6b221c201c201d4b1b221d490d02202b100c221c280000211e201c2900042105201c28000c211f201c102341f4e5c100ad4280808080a00184100c221c2900002106201c2900082107201c1023200320073701e809200320063701e0092003201f3601dc09200320053701d4092003201e3601d009200341f8056a200341d0096a412010cd01024020032802f8054101470d0020032802fc0520044b0d030b200341d0096a200410cb01200341e0056a20032802d009221e20032802d80910d701200341f0056a290300210620032903e805210520032802e005211c024020032802d409450d00201e10230b201c450d02200341c0066a20034180096a10c701200341d0096a20032802c006220220032802c80610e101200341e9096a2900002107200341e8096a2d0000211b200341e7096a2d0000211c200341e5096a2f0000211e200341e4096a2d0000211f200341e3096a2d00002120200341e1096a2f00002121200341e0096a2d00002122200341df096a2d00002123200341dd096a2f00002124200341dc096a2d00002125200341db096a2d00002126200341d9096a2f00002127200341d8096a2d0000212820032d00d709212920032f00d509212a20032d00d409210820032d00d309210920032d00d209210a20032d00d109210b20032d00d0092101024020032802c406450d00200210230b200141ff01714101470d01200320073703c8082003201b3a00c7082003201c3a00c6082003201e3b01c4082003201f3a00c308200320203a00c208200320213b01c008200320223a00bf08200320233a00be08200320243b01bc08200320253a00bb08200320263a00ba08200320273b01b808200320283a00b708200320293a00b6082003202a3b01b408200320083a00b308200320093a00b2082003200a3a00b1082003200b3a00b008200341a0096a200341b0086a10c601200341d0096a20032802a009220220032802a80910e20120034180086a41086a221b2003418c0a6a29020037030020034180086a41106a221c200341940a6a29020037030020034180086a41186a221e2003419c0a6a29020037030020034180086a41206a221f200341a40a6a2802003602002003200341840a6a2902003703800802400240024020032802f0092220450d00200341d0096a41186a2903002107200341d0096a41086a290300212b200341800a6a2802002121200341fc096a2802002101200341f8096a280200212220032903e009212c20032903d009212d20032802f4092123200341d8086a41206a201f280200360200200341d8086a41186a201e290300370300200341d8086a41106a201c290300370300200341d8086a41086a201b29030037030020032003290380083703d808024020032802a409450d00200210230b200341c0066a41186a2007370300200341f0066a2021360200200341e8066a2022360200200341e4066a2023360200200341f4066a220220032903d808370200200341fc066a200341e0086a29030037020020034184076a200341e8086a2903003702002003418c076a200341d8086a41186a29030037020020034194076a200341f8086a2802003602002003202c3703d0062003202d3703c006200320013602ec06200320203602e0062003202b3703c80602402002280200221c0d00410021024100211b0c030b410021024100211b0340024002400240201d2001280200221e4b0d0020020d01410021020c020b200241016a21020c010b201b20026b221f201c4f0d15200120024102746b221f2802002120201f201e360200200120203602000b200141046a2101201c201b41016a221b470d000b024002402002450d0020032802f406221e201c20026b2201490d01200320013602f4062001211e0c010b20032802f406211e0b20032802ec0621014100210202400240201e41014b0d004100211b201e0e020401040b201e211b03402002201b410176221c20026a221d20042001201d4102746a280200491b2102201b201c6b221b41014b0d000b0b4103211c2004200120024102746a280200221b470d010c230b024020032802a409450d00200210230b41ccc1c0002101410d21024103211c4100211b0c230b201e20022004201b4b6a2202490d12201e211b0b0240201b20032802f006470d00200341ec066a201b4101107920032802ec0621010b200120024102746a220141046a2001201b20026b41027410a2051a200120043602002003201b41016a3602f406200341a0096a2004200341f8066a221e10dd01200341d0096a20032802a009220120032802a8091090020240024020032802f00922270d00420021074100212641082127410021224200212e4200212b4200212c0c010b200341d8096a290300212c200341e8096a290300212e200341f8096a280200212220032903d009212b20032903e009210720032802f40921260b024020032802a409450d00200110230b200341d0096a200341b0086a10c60120032802d0092101200320032802d8093602a409200320013602a009200341c0066a200341a0096a10ec01024020032802d409450d00200110230b200341d8086a2004109d024104211c200341d8086a41047221280240024020032802dc08221f450d0020032802d8082123200341d8086a41086a28020021200340201f41086a2102201f2f0106222141057421014100211b0240024003402001450d01201e2002412010a305221d450d02200141606a2101201b41016a211b200241206a2102201d417f4a0d000b201b417f6a21210b2020450d022020417f6a2120201f20214102746a4194036a280200211f0c010b0b201f201b4102746a41e8026a2802002202450d0020234101202341014b1b2201418094ebdc036e221b2001201b418094ebdc036c476a221b4101201b41014b1b221b20014b0d14200341c8056a20052006428094ebdc03420010a705200341b8056a20032903c8052206200341c8056a41086a290300222d4280ec94a37c427f10a605200341a8056a2006202d2001200220012002491b201b6ead428094ebdc037e2001201b6ead8042ffffffff0f83222f420010a605200341d0096a200420034180096a10df01200341d8056a20032802d009220220032802d80910de01200341a8056a41086a29030020032903a8052206202f200520032903b8057c7e2205428094ebdc0380222da7417f2005428080808080c0b2cd3b541b2005202d4280ec94a37c7e7c4280cab5ee01566aad7c2205200654ad7c212d20032802dc05410020032802d8051b2101024020032802d409450d00200210230b20034180056a2005202d428094ebdc03420010a705200341f0046a200329038005220620034180056a41086a290300222f4280ec94a37c427f10a605200341e0046a2006202f2001ad2230420010a605200341d0046a200520032903e004222f2030200520032903f0047c7e2206428094ebdc03802230a7417f2006428080808080c0b2cd3b541b200620304280ec94a37c7e7c4280cab5ee01566aad7c22067d2230202d200341e0046a41086a2903002006202f54ad7c22337d2005200654ad7d428094ebdc03420010a705200341c0046a20032903d004222d200341d0046a41086a290300222f4280ec94a37c427f10a605200341b0046a202d202f2007202e202b202c109e02ad2207420010a60520034190056a201e20032903b004223420067c2205203020032903c0047c222e20077e2206428094ebdc03802207a7417f2006428080808080c0b2cd3b541b200620074280ec94a37c7e7c4280cab5ee01566aad7c2206200341b0046a41086a29030020337c2005203454ad7c2006200554ad7c109f0220034190056a41106a290300210520032903980521062003290390052207a74101470d0120034180076a290300210720034188076a290300213020034190076a290300213320032903f8062134200341880a6a2005370300200341800a6a2006370300200341f1096a2033370000200341e9096a2030370000200341e1096a2007370000200341d9096a2034370000200341d0096a41086a220241003a0000200341033a00d009200341d0096a10e001200341d0096a41186a221c4200370300200341d0096a41106a2204420037030020024200370300200342003703d00941bdadc500ad42808080808001842207100c221b290000213020034180086a41086a2201201b41086a2900003703002003203037038008201b10232002200129030037030020032003290380083703d00941c5adc500ad4280808080d001842230100c221b29000021332001201b41086a2900003703002003203337038008201b102320042003290380082233370300200341a0096a41086a221d2002290300370300200341a0096a41106a221e2033370300200341a0096a41186a221f2001290300370300200320032903d0093703a00920034180046a200341a0096a412010d70120034180046a41106a29030021332003290388042134200328028004211b201c42003703002004420037030020024200370300200342003703d0092007100c221c29000021072001201c41086a2900003703002003200737038008201c10232002200129030037030020032003290380083703d0092030100c221c29000021072001201c41086a2900003703002003200737038008201c102320042003290380082207370300201d2002290300370300201e2007370300201f2001290300370300200320032903d0093703a0092003427f20334200201b1b220720057c20344200201b1b220520067c22062005542201ad7c22052001200520075420052007511b22011b3703d8092003427f200620011b3703d009200341d0096a2101200341a0096a21020c200b202810be012026450d21202641306c450d21202710230c210b20074201520d1f200341d0096a41186a221c4200370300200341d0096a41106a22044200370300200341d0096a41086a22024200370300200342003703d00941bdadc500ad42808080808001842207100c221b290000213020034180086a41086a2201201b41086a2900003703002003203037038008201b10232002200129030037030020032003290380083703d00941c5adc500ad4280808080d001842230100c221b29000021332001201b41086a2900003703002003203337038008201b102320042003290380082233370300200341a0096a41086a221d2002290300370300200341a0096a41106a221e2033370300200341a0096a41186a221f2001290300370300200320032903d0093703a00920034198046a200341a0096a412010d70120034198046a41106a290300213320032903a0042134200328029804211b201c42003703002004420037030020024200370300200342003703d0092007100c221c29000021072001201c41086a2900003703002003200737038008201c10232002200129030037030020032003290380083703d0092030100c221c29000021072001201c41086a2900003703002003200737038008201c102320042003290380082207370300201d2002290300370300201e2007370300201f2001290300370300200320032903d0093703a0092003427f20334200201b1b220720057c20344200201b1b220520067c22062005542201ad7c22052001200520075420052007511b22011b3703d8092003427f200620011b3703d009200341d0096a2101200341a0096a21020c1e0b4102211c4100211b0c210b41c4c1c00021014108210241808004211b0b4103211c0c1f0b41022104024020022d00000d0020022d00014101470d00200141106a290300212b200141086a290300212c200241196a2d00002104200241186a2d0000211b200241166a2f0100211c200241156a2d0000211d200241146a2d0000211e200241126a2f0100211f200241116a2d00002120200241106a2d000021212002410e6a2f010021222002410d6a2d000021232002410c6a2d000021242002410a6a2f01002125200241096a2d00002126200241086a2d00002127200241066a2f01002128200241056a2d00002129200241046a2d0000212a200241026a2f0100210120032002411a6a29010037039809200320043a0097092003201b3a0096092003201c3b0194092003201d3a0093092003201e3a0092092003201f3b019009200320203a008f09200320213a008e09200320223b018c09200320233a008b09200320243a008a09200320253b018809200320263a008709200320273a008609200320283b018409200320293a0083092003202a3a008209200320013a008009200320014108763a008109200341c0066a20034180096a10c601200341d0096a20032802c006220120032802c80610e20120034180086a41086a22042003418c0a6a29020037030020034180086a41106a221c200341940a6a29020037030020034180086a41186a221d2003419c0a6a29020037030020034180086a41206a221e200341a40a6a2802003602002003200341840a6a2902003703800820032802f009221b450d18200341d0096a41186a290300212d200341d0096a41086a2903002134200341800a6a2802002120200341fc096a2802002121200341f8096a280200210220032903e009212f20032903d009213520032802f409211f200341d8086a41206a201e280200360200200341d8086a41186a201d290300370300200341d8086a41106a201c290300370300200341d8086a41086a200429030037030020032003290380083703d808024020032802c406450d00200110230b200341b0086a41106a200341d8086a41106a2903002205370300200341a0096a41086a2201200341d8086a41086a290300370300200341a0096a41106a22042005370300200341a0096a41186a221c200341d8086a41186a290300370300200341a0096a41206a221d200341d8086a41206a280200360200200320032903d8083703a00902402002450d00200341c0066a41206a201d280200360200200341c0066a41186a201c290300370300200341c0066a41106a2004290300370300200341c0066a41086a2001290300370300200320032903a0093703c006200241186c201b6a41686a21014200212e4200213002400340024020020d00410021020c020b024020012903002205202e7c2206202c58200141086a290300223320307c2006200554ad7c2207202b582007202b5122041b0d0020012005202c202e7d22067d37030020012033202b20307d202c202e54ad7d22077d2005200654ad7d3703082007202d7c2006202f7c222f200654ad7c212d0c020b2002417f6a21022033202d7c2005202f7c222f200554ad7c212d200141686a21012006212e200721302006202c542007202b5420041b0d000b0b200341d0096a41186a202d370300200341800a6a2020360200200341f8096a2002360200200341f4096a201f360200200341840a6a20032903c0063702002003418c0a6a200341c8066a290300370200200341940a6a200341d0066a2903003702002003419c0a6a200341c0066a41186a290300370200200341a40a6a200341e0066a2802003602002003202f3703e009200320353703d009200320213602fc092003201b3602f009200320343703d809200342f3e885db96cddbb3203703d808200341d8086a200341880a6a20352034411f109902200341c0066a20034180096a10c60120032802c0062101200320032802c806360284082003200136028008200341d0096a20034180086a10ec01024020032802c406450d00200110230b024020032802f4092201450d00200141186c450d0020032802f00910230b20032802800a41ffffffff0371450d3620032802fc0910230c360b0240201f450d00201f41186c450d00201b10230b41d5c0c0002101418080242102202041ffffffff0371450d1920211023410321040c1a0b410021020c190b20022d000120022d0000410047720d0e200141046a2802002104418fcdc200ad4280808080f00084222b100c2201280000210220012900042105200128000c211b20011023418cdbc100ad4280808080a00184100c220129000021062001290008210720011023200320073701e809200320063701e0092003201b3601dc09200320053701d409200320023601d00920034198066a200341d0096a412010cd012003280298064101470d33200328029c062102202b100c2201280000211b20012900042105200128000c211c200110234190d8c100ad4280808080c001842206100c220129000021072001290008212b200110232003202b3701e809200320073701e0092003201c3601dc09200320053701d4092003201b3601d00920034190066a200341d0096a412010cd0102404100200220032802940641d4002003280290061b6b2201200120024b1b22014100200220046b221b201b20024b1b22024f0d000340200110ce012002200141016a2201470d000b0b418fcdc200ad4280808080f00084100c2201280000210220012900042105200128000c211b200110232006100c220129000021062001290008210720011023200320073701e809200320063701e0092003201b3601dc09200320053701d409200320023601d009200320043602c006200341d0096aad4280808080800484200341c0066aad4280808080c00084100e0c330b200341c0066a41186a200141196a290000370300200341c0066a41106a200141116a290000370300200341c8066a200141096a290000370300200320012900013703c006200341a0096a200341c0066a109702200341d0096a20032802a009220220032802a809109802200341d0096a41106a290300420020032903d00942015122011b210520032903d809420020011b2106200341f0096a290300420020011b2107200341d0096a41186a290300420020011b212b024020032802a409450d00200210230b427f2006202b7c222b202b2006542201200520077c2001ad7c220620055420062005511b22011b427f200620011b844200520d0e200341d0096a200341c0066a109a02024020032d00d00922014104470d00200342f3e885db96cddbb3203703800820034180086a200341c0066a109b020c330b200341d0096a41086a280200210220032802d409210420032f00d10920032d00d30941107472410874221d4180fe0371211b201d418080fc0771211c201d418080807871211d0c140b2001410c6a280200211c200141086a2802002104200141046a280200211b200141d0016a280200211d200341c0066a200141106a41c00110a1051a200341a8086a20014180026a290300370300200341a0086a200141f8016a29030037030020034198086a200141f0016a29030037030020034180086a41106a200141e8016a29030037030020034180086a41086a200141e0016a2903003703002003200141d8016a290300370380080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00000d0020022d00014101470d002003201c3602e008200320043602dc082003201b3602d808200341d0096a200341c0066a41c00110a1051a200341a0096a41286a20034180086a41286a290300370300200341a0096a41206a20034180086a41206a290300370300200341a0096a41186a20034180086a41186a290300370300200341a0096a41106a20034180086a41106a290300370300200341a0096a41086a20034180086a41086a29030037030020032003290380083703a009200341d8086a200341d0096a4101200341a0096a201d10a002221b41ff0171411c460d4e4180bec000210141122104418080e8002102201b411f710e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c010b200341c0066a1083022004450d2d200441ffffffff0771450d2d201b10230c2d0b200341e4096a4101360200200342013702d409200341a4c5c6003602d009200341043602a409200341c8abc3003602a0092003200341a0096a3602e009200341d0096a419ca8c700103a000b41ccc1c0002101410d2104410021020c190b41c4c1c0002101410821044180800421020c180b41b7c1c0002101410d21044180800821020c170b41aac1c0002101410d21044180800c21020c160b419ec1c0002101410c21044180801021020c150b4190c1c0002101410e21044180801421020c140b41ffc0c0002101411121044180801821020c130b41eec0c0002101411121044180801c21020c120b41e2c0c0002101410c21044180802021020c110b41d5c0c0002101410d21044180802421020c100b41c9c0c0002101410c21044180802821020c0f0b41b7c0c00021014180802c21020c0e0b419dc0c0002101411a21044180803021020c0d0b418bc0c00021014180803421020c0c0b41fdbfc0002101410e21044180803821020c0b0b41e6bfc0002101411721044180803c21020c0a0b41d0bfc000210141162104418080c00021020c090b41bdbfc000210141132104418080c40021020c080b41a5bfc000210141182104418080c80021020c070b4192bfc000210141132104418080cc0021020c060b41febec000210141142104418080d00021020c050b41e8bec000210141162104418080d40021020c040b41d1bec000210141172104418080d80021020c030b41b8bec000210141192104418080dc0021020c020b41a3bec000210141152104418080e00021020c010b4192bec000210141112104418080e40021020b4103211b0c120b2001410c6a280200211c200141086a2802002104200141046a280200211b200141d0016a280200211d200341c0066a200141106a41c00110a1051a200341a8086a20014180026a290300370300200341a0086a200141f8016a29030037030020034198086a200141f0016a29030037030020034180086a41106a200141e8016a29030037030020034180086a41086a200141e0016a2903003703002003200141d8016a290300370380080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00000d0020022d000141ff01714102470d002003201c3602e008200320043602dc082003201b3602d808200341d0096a200341c0066a41c00110a1051a200341a0096a41286a20034180086a41286a290300370300200341a0096a41206a20034180086a41206a290300370300200341a0096a41186a20034180086a41186a290300370300200341a0096a41106a20034180086a41106a290300370300200341a0096a41086a20034180086a41086a29030037030020032003290380083703a009200341d8086a200341d0096a4102200341a0096a201d10a002221b41ff0171411c460d4d4180bec000210141122104418080e8002102201b411f710e1c0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c010b200341c0066a1083022004450d2a200441ffffffff0771450d2a201b10230c2a0b200341e4096a4101360200200342013702d409200341a4c5c6003602d009200341043602a409200341c8abc3003602a0092003200341a0096a3602e009200341d0096a419ca8c700103a000b41ccc1c0002101410d2104410021020c190b41c4c1c0002101410821044180800421020c180b41b7c1c0002101410d21044180800821020c170b41aac1c0002101410d21044180800c21020c160b419ec1c0002101410c21044180801021020c150b4190c1c0002101410e21044180801421020c140b41ffc0c0002101411121044180801821020c130b41eec0c0002101411121044180801c21020c120b41e2c0c0002101410c21044180802021020c110b41d5c0c0002101410d21044180802421020c100b41c9c0c0002101410c21044180802821020c0f0b41b7c0c00021014180802c21020c0e0b419dc0c0002101411a21044180803021020c0d0b418bc0c00021014180803421020c0c0b41fdbfc0002101410e21044180803821020c0b0b41e6bfc0002101411721044180803c21020c0a0b41d0bfc000210141162104418080c00021020c090b41bdbfc000210141132104418080c40021020c080b41a5bfc000210141182104418080c80021020c070b4192bfc000210141132104418080cc0021020c060b41febec000210141142104418080d00021020c050b41e8bec000210141162104418080d40021020c040b41d1bec000210141172104418080d80021020c030b41b8bec000210141192104418080dc0021020c020b41a3bec000210141152104418080e00021020c010b4192bec000210141112104418080e40021020b4103211b0c0f0b1033000b2001201f103b000b2022201f4184d9c4001030000b200220211038000b41f0a6c700411941f4aac700102d000b201f201c4184d9c4001030000b2002201e1038000b41f0a6c700411941f4aac700102d000b201f201c4184d9c4001030000b2002201e1038000b41f0a6c700411941f4aac700102d000b200041003602042000410c6a41023602000c230b4100211d41808028211c41032101410c210241c9c0c0002104418010211b0c050b201b10230c190b4102211b410021020b20004100360204200041146a2004360200200041106a20013602002000410c6a2002418080fc0071201b72418010723602000c1f0b4102211b410021020b20004100360204200041146a2004360200200041106a20013602002000410c6a2002418080fc0071201b72418010723602000c1d0b20004100360204200041146a2002360200200041106a20043602002000410c6a201b200172201c72201d723602000c1c0b024020032802c406450d00200110230b41ccc1c0002101410021020b410321040b20004100360204200041146a410d360200200041106a20013602002000410c6a20024180803c71200472418010723602000c190b2002ad42808080808004842001ad4280808080800284100e0b0240202241306c2201450d00202720016a2120202741286a2101200341a0096aad42808080808004842135200341d0096a41106a2102200341880a6a21250340200341d8036a202d202f200141586a2204290300200441086a290300202b202c109e02ad2205420010a605200341e8036a200141686a221c20032903d80322062005202e7e2205428094ebdc03802207a7417f2005428080808080c0b2cd3b541b200520074280ec94a37c7e7c4280cab5ee01566aad7c2205200341d8036a41086a2903002005200654ad7c109f02200341e8036a41106a290300210520032903f003210602400240024020032903e8032207a74101470d00201c2900002107200141706a2900002130200141786a290000213320012900002134200320063703800a20252005370300200320343700f109200320333700e909200320303700e109200320073700d909200341003a00d809200341033a00d009200341d0096a10e001200341d0096a41186a221d420037030020024200370300200341d0096a41086a221b4200370300200342003703d00941bdadc500ad42808080808001842207100c221e290000213020034180086a41086a2204201e41086a2900003703002003203037038008201e1023201b200429030037030020032003290380083703d00941c5adc500ad4280808080d001842230100c221e29000021332004201e41086a2900003703002003203337038008201e10232002200329038008370000200241086a22212004290300370000200341a0096a41086a2222201b290300370300200341a0096a41106a22232002290300370300200341a0096a41186a2224201d290300370300200320032903d0093703a009200341a8036a200341a0096a412010d701200341a8036a41106a290300213320032903b003213420032802a803211e201d420037030020024200370300201b4200370300200342003703d0092007100c221f29000021072004201f41086a2900003703002003200737038008201f1023201b200429030037030020032003290380083703d0092030100c221f29000021072004201f41086a2900003703002003200737038008201f10232002200329038008370000202120042903003700002022201b290300370300202320022903003703002024201d290300370300200320032903d0093703a0092003427f20334200201e1b220720057c20344200201e1b220520067c22062005542204ad7c22052004200520075420052007511b22041b3703d8092003427f200620041b3703d009200341d0096a21040c010b20074201520d01200341d0096a41186a221d420037030020024200370300200341d0096a41086a221b4200370300200342003703d00941bdadc500ad42808080808001842207100c221e290000213020034180086a41086a2204201e41086a2900003703002003203037038008201e1023201b200429030037030020032003290380083703d00941c5adc500ad4280808080d001842230100c221e29000021332004201e41086a2900003703002003203337038008201e10232002200329038008370000200241086a22212004290300370000200341a0096a41086a2222201b290300370300200341a0096a41106a22232002290300370300200341a0096a41186a2224201d290300370300200320032903d0093703a009200341c0036a200341a0096a412010d701200341c0036a41106a290300213320032903c803213420032802c003211e201d420037030020024200370300201b4200370300200342003703d0092007100c221f29000021072004201f41086a2900003703002003200737038008201f1023201b200429030037030020032003290380083703d0092030100c221f29000021072004201f41086a2900003703002003200737038008201f10232002200329038008370000202120042903003700002022201b290300370300202320022903003703002024201d290300370300200320032903d0093703a0092003427f20334200201e1b220720057c20344200201e1b220520067c22062005542204ad7c22052004200520075420052007511b22041b3703d8092003427f200620041b3703d009200341d0096a21040b20352004ad4280808080800284100e0b200141306a2101201c41206a2020470d000b0b202810be0102402026450d00202641306c450d00202710230b024020032802e4062201450d00200141186c450d0020032802e00610230b024020032802f00641ffffffff0371450d0020032802ec0610230b410021040c030b024020032802e4062201450d00200141186c450d0020032802e00610230b41fdbfc0002101410e210241808038211b20032802f00641ffffffff0371450d0020032802ec0610230b41002104201c4104460d010b200041146a2002360200200041106a20013602002000410c6a201b4180803c71201c7241801072360200410121040b200041003602040c150b2002ad42808080808004842001ad4280808080800284100e0b200341d8086a410472210102402020450d00202041306c450d00202410230b200110be01024020032802e4062201450d00200141186c450d0020032802e00610230b024020032802f00641ffffffff0371450d0020032802ec0610230b410021040c020b0b200041146a2001360200200041106a20023602002000410c6a20044180803c71201b7241801072360200410121040b200041003602040c100b0c020b02402004450d00200441246c450d00201d10230b20034198016a2007202b428094ebdc03420010a70520034188016a200329039801220520034198016a41086a29030022064280ec94a37c427f10a605200341f8006a200520062027ad222b420010a605200341a8016a200341c0066a41386a20032903782206202b20072003290388017c7e2205428094ebdc03802207a7417f2005428080808080c0b2cd3b541b200520074280ec94a37c7e7c4280cab5ee01566aad7c2205200341f8006a41086a2903002005200654ad7c109f02200341a8016a41106a290300210520032903b001210602400240024020032903a8012207a74101470d0020032903b008210720032903b808212b20032903c008212c20032903c808212d200341d0096a41386a2005370300200341800a6a2006370300200341f1096a202d370000200341e9096a202c370000200341e1096a202b370000200341d9096a2007370000200341d0096a41086a220241003a0000200341033a00d009200341d0096a10e001200341d0096a41186a221c4200370300200341d0096a41106a2204420037030020024200370300200342003703d00941bdadc500ad42808080808001842207100c221b290000212b20034180086a41086a2201201b41086a2900003703002003202b37038008201b10232002200129030037030020032003290380083703d00941c5adc500ad4280808080d00184222b100c221b290000212c2001201b41086a2900003703002003202c37038008201b10232004200329038008222c370300200341a0096a41086a221d2002290300370300200341a0096a41106a221e202c370300200341a0096a41186a221f2001290300370300200320032903d0093703a009200341c8006a200341a0096a412010d701200341c8006a41106a290300212c2003290350212d2003280248211b201c42003703002004420037030020024200370300200342003703d0092007100c221c29000021072001201c41086a2900003703002003200737038008201c10232002200129030037030020032003290380083703d009202b100c221c29000021072001201c41086a2900003703002003200737038008201c102320042003290380082207370300201d2002290300370300201e2007370300201f2001290300370300200320032903d0093703a0092003427f202c4200201b1b220720057c202d4200201b1b220520067c22062005542201ad7c22052001200520075420052007511b22011b3703d8092003427f200620011b3703d009200341d0096a2101200341a0096a21020c010b20074201520d01200341d0096a41186a221c4200370300200341d0096a41106a22044200370300200341d0096a41086a22024200370300200342003703d00941bdadc500ad42808080808001842207100c221b290000212b20034180086a41086a2201201b41086a2900003703002003202b37038008201b10232002200129030037030020032003290380083703d00941c5adc500ad4280808080d00184222b100c221b290000212c2001201b41086a2900003703002003202c37038008201b10232004200329038008222c370300200341a0096a41086a221d2002290300370300200341a0096a41106a221e202c370300200341a0096a41186a221f2001290300370300200320032903d0093703a009200341e0006a200341a0096a412010d701200341e0006a41106a290300212c2003290368212d2003280260211b201c42003703002004420037030020024200370300200342003703d0092007100c221c29000021072001201c41086a2900003703002003200737038008201c10232002200129030037030020032003290380083703d009202b100c221c29000021072001201c41086a2900003703002003200737038008201c102320042003290380082207370300201d2002290300370300201e2007370300201f2001290300370300200320032903d0093703a0092003427f202c4200201b1b220720057c202d4200201b1b220520067c22062005542201ad7c22052001200520075420052007511b22011b3703d8092003427f200620011b3703d009200341d0096a2101200341a0096a21020b2002ad42808080808004842001ad4280808080800284100e0b200341d8086a41047210be01024020032802e4062201450d00200141186c450d0020032802e00610230b024020032802f00641ffffffff0371450d0020032802ec0610230b410021040c020b02402004450d00200441246c450d00201d10230b4103211b0b200041146a2002360200200041106a20013602002000410c6a201c41ff0171411074201b7241801072360200410121040b200041003602040c0b0b0240202541ffffffff0371450d00202410230b20004100360204200041146a2002360200200041106a20043602002000410c6a2001201c723602000c080b41012123410021210c010b0240201c41ffffff3f71450d00201b10230b2023450d0120032802840841ffffff3f7121210b418fcdc200ad4280808080f00084100c2202280000210420022900042105200228000c211b20021023418cdbc100ad4280808080a00184100c220229000021062002290008210720021023200320073701e809200320063701e0092003201b3601dc09200320053701d409200320043601d009200341386a200341d0096a412010cd01200328023c212220032802382124200341d0096a200341f8066a220210c30120033502d80942208620032802d0092204ad841011024020032802d409450d00200410230b200341a0096a200210c50120033502a809210520032802a0092120200341003602d809200342013703d0092001200341d0096a106102400240024020010d0020032802d409211b20032802d80921020c010b2001410574211d410020032802d80922026b211c20032802d009211f20032802d409211b2023211e0340201e21010240201b201c6a411f4b0d00200241206a22042002490d03201b410174221e2004201e20044b1b22044100480d030240024002400240201b0d00024020040d004101211f0c020b20041021211f0c030b201b2004470d010b2004211b0c020b201f201b20041025211f0b2004211b201f450d050b200141206a211e201f20026a22042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a290000370000201c41606a211c200241206a2102201d41606a221d0d000b2003201b3602d409200320023602d8092003201f3602d0090b02400240201b20026b4104490d0020032802d0092104201b21010c010b200241046a22012002490d01201b41017422042001200420014b1b22014100480d0102400240201b0d00024020010d00410121040c020b200110212204450d050c010b20032802d0092104201b2001460d002004201b200110252204450d040b200320013602d409200320043602d0090b200420026a2022410020241b3600002003200241046a22023602d8094100211b200341003a0080080240024020012002460d00200221010c010b200141016a22022001490d012001410174221b2002201b20024b1b22024100480d010240024020010d0041002101024020020d00410121040c020b200210212204450d050c010b20012002460d0020042001200210252204450d040b200320023602d409200320043602d00920032d008008211b0b200420016a201b3a000020032802d409210220054220862020ad84200141016aad42208620032802d0092201ad84100e02402002450d00200110230b024020032802a409450d00202010230b02402021450d00202310230b024020032802e4062201450d00200141186c450d0020032802e00610230b20032802f00641ffffffff0371450d0720032802ec0610230c070b102c000b02402025450d00202541186c450d00202610230b0240202741ffffffff0371450d00202810230b410121040c030b102a000b0b201c41ffffff3f71450d00201b10230b20004100360204200041146a2002360200200041106a201d3602002000410c6a200141ff0171411074200472418010723602000b410121040c010b41002104200041003602040b20002004360200200341900b6a24000bae0503027f017e047f230041d0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341b0dac100ad4280808080d00084100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bce0203027f017e037f23004180026b22012400200141086a2000109702200141e0006a200128020822002001280210220210980220012903602103200141b8016a200141e8006a41c40010a1051a200141b4016a41026a2204200141af016a2d00003a0000200120012f00ad013b01b4010240024020034201510d0041002105200141186a410041c40010a0051a0c010b20012d00ac012105200141186a200141b8016a41c40010a1051a200141146a41026a20042d00003a0000200120012f01b4013b01140b200141e8006a200141186a41c40010a1052104200141af016a200141166a2d00003a0000200142013703602001417f2005411874220541808080086a220620062005491b4118763a00ac01200120012f01143b00ad01200120023602bc01200120003602b8012004200141b8016a1098030240200128020c450d00200010230b20014180026a24000bcc0503027f017e047f230041e0006b2202240041e4dec400ad4280808080e00084100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341888ec600ad4280808080f00084100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100f22012900002104200241386a41086a200141086a2900003703002002200437033820011023200241d4006a200341206a360200200241003a0058200220033602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200310232002280230220541206a2201417f4c0d0120022802282106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000baa0406027f017e017f037e017f037e230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044104490d0020044104460d002004417b6a4110490d002004416b6a4110490d002004415b6a4110490d002004414b6a410f4b0d010b20034100360220200342013703182003410a36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c20034180c5c6003602382003200341286a360248200341346a4184a5c200200341386a10311a2003350220422086200335021884100a0240200328021c450d00200328021810230b420021050c010b2001280000210420012d000421062001410d6a2900002105200129000521072001411d6a290000210820012900152109200341286a41026a220a200341386a41026a2d00003a0000200320032f00383b01282001412d6a290000210b2001290025210c2001290035210d200041c0006a2001413d6a290000370300200041386a200d370300200041306a200b370300200041286a200c370300200041206a2008370300200041186a2009370300200041106a200537030020002007370308200020063a004c200041c8006a2004360200200020032f01283b004d200041cf006a200a2d00003a0000420121050b200020053703002002450d00200110230b200341d0006a24000ba00f03037f017e0d7f230022052106200541e0016b41607122052400024002402002200384500d00200441ff01712207450d002000290000210841002109024020074101460d004102410120044101711b21090b20052002370300200520093a00182005200837031020052003370308200541c0016a200110d704200541a0016a20052802c001220720052802c80110da0420052902a401420020052802a00122041b2102024020052802c401450d00200710230b2004410820041b210a2002a7210b0240024002402002422088a7220c450d00200a200c4105746a210d200541a0016a411072210e200541a0016a411972210f410021070340200541e8006a41106a2210200a20076a220441106a290300370300200541e8006a41086a2211200441086a290300370300200520042903003703682005200441196a28000036023820052004411c6a28000036003b200441186a2d000022124103460d01200f2005280238360000200f41036a200528003b360000200520102903003703b001200520112903003703a801200520052903683703a001200520123a00b80102400240200e2000460d00200e2900002000290000510d00200520052903b801220237039801200520052903b00137039001200520052903a80137038801200520052903a001370380010c010b200541033a00d80120052005290318220237039801200520052903103703900120052005290308370388012005200529030037038001200520052903d001370310200520052903c801370308200520052903c001370300200520052903d80122033703182003a721090b2002a7221041ff01714103470d02200741206a2107200441206a200d470d000b0b200541003602a801200542083703a001200b41ffffff3f71450d01200a10230c010b200541d0006a41106a220f200529039001370300200541d0006a41086a22112005290388013703002005200528009c0136004320052005280099013602402005200529038001370350200520052802403602482005200528004336004b41201021220e450d02200e2005290350370300200e20103a0018200e2005280248360019200e411c6a200528004b360000200e41106a200f290300370300200e41086a2011290300370300200542818080801037022c2005200e3602280240200c41057441606a2007460d00200441206a2110200c410574200a6a41606a211320054180016a4119722114200541a0016a4110722112200541a0016a411972210f4101210c0340201021040340200541e8006a41106a2210200441106a290300370300200541e8006a41086a2211200441086a29030037030020052004290300370368200441186a2d000021072005200441196a28000036023820052004411c6a28000036003b20074103460d02200f2005280238360000200f41036a200528003b360000200520102903003703b001200520112903003703a801200520052903683703a001200520073a00b8010240024020122000460d0020122900002000290000510d00200520052903b801220237039801200520052903b00137039001200520052903a80137038801200520052903a001370380010c010b200541033a00d80120052005290318220237039801200520052903103703900120052005290308370388012005200529030037038001200520052903d001370310200520052903c801370308200520052903c001370300200520052903d80122033703182003a721090b02402002a7220741ff01714103470d00200441206a2204200d470d010c030b0b200541d0006a41106a2210200529039001370300200541d0006a41086a2211200529038801370300200520142800003602402005201441036a2800003600432005200529038001370350200520052802403602482005200528004336004b200541c0016a41086a22152011290300370300200541c0016a41106a22112010290300370300200520052903503703c001200520052802483602a0012005200528004b3600a3010240200c200528022c470d00200541286a200c41011097012005280228210e0b200441206a2110201529030021022011290300210320052903c0012108200e200c4105746a221120073a001820112008370300201120052802a0013600192011411c6a20052800a301360000201141106a2003370300201141086a20023703002005200c41016a220c36023020132004470d000b0b0240200b41ffffff3f71450d00200a10230b200541a0016a41086a200541286a41086a280200360200200520052903283703a0010b02400240200941ff01714103470d0020052802a801210420052802a0012107200541a0016a21050c010b200541c0016a41186a220f2005290318370300200541c0016a41106a22102005290310370300200541c0016a41086a22112005290308370300200520052903003703c001024020052802a801220420052802a401470d00200541a0016a2004410110970120052802a80121040b20052802a001220720044105746a220020052903c001370300200041086a2011290300370300200041106a2010290300370300200041186a200f2903003703002005200441016a22043602a801200541a0016a21050b20012007200410db04200541046a28020041ffffff3f71450d00200528020010230b200624000f0b1033000b960903057f027e057f230041a0016b22022400200241e8006a200110c701200241f8006a200228026822032002280270220410e101024020022d00782205450d002004ad4220862003ad8410110b200241086a41176a220420024191016a290000370000200241086a41106a22062002418a016a290100370300200241086a41086a20024182016a29010022073703002002200229017a220837030820022d00792109200241f8006a41176a220a2004290000370000200241f8006a41106a22042006290300370300200241f8006a41086a220620073703002002200837037802400240024002400240024020054101470d00200241c8006a41176a200a290000370000200241c8006a41106a2004290300370300200241c8006a41086a2006290300370300200220022903783703480240200228026c450d00200310230b200241286a41176a2203200241c8006a41176a290000370000200241286a41106a2205200241c8006a41106a290300370300200241116a200241d0006a290300370000200241196a2005290300370000200241206a2003290000370000200220093a000820022002290348370009200241f8006a200241086a10c60120023502800142208620022802782203ad8410110240200228027c450d00200310230b200241f8006a200110950220023502800142208620022802782203ad8410110240200228027c450d00200310230b200241f8006a200110c30120023502800142208620022802782203ad8410110240200228027c450d00200310230b200241f8006a200110c50120023502800142208620022802782203ad8410110240200228027c450d00200310230b200241c8006a200110c101200241f8006a200228024822032002280250220510c9010240200228028401220b450d002005ad4220862003ad8410110b20022903880121072002280278210c0240200228024c450d00200310230b200b450d04200b2007422088a74102746a210d200c210a200b2109410021040240410041ff01710e03020300020b410021030c030b0240200228026c450d00200310230b200041086a4108360200200041046a41c4c1c000360200200041026a41013a000020004183103b01000c040b410121030c010b410221030b0340024002400240024002400240024020030e03000102020b2009200d460d03200941046a21094102210320042105200a417f6a2206210a0c020b4102210541002103024020044102460d00200c21060c020b2009200d460d02200941046a210941022105200a417f6a2206210a410221030c010b4102210541012103200c210620044102460d010b200241f8006a41186a200141186a290000370300200241f8006a41106a200141106a290000370300200241f8006a41086a200141086a290000370300200220063602980120022001290000370378200241c8006a200241f8006a10c401200235025042208620022802482204ad8410110240200228024c450d00200410230b200521040240200341ff01710e03000203000b410121030c030b200742ffffffff0383500d03200b10230c030b410221030c010b410021030c000b0b200110a102200041043a00000b200241a0016a24000bea0306037f017e0d7f027e017f017e230041306b22022400200241106a200110d704200220022802102203200228021810da0420022902044200200228020022041b210502402002280214450d00200310230b2004410820041b2106024002402005422088a722070d00410021070c010b200041706a210841002103200621044100210902400240034002400240024020082004460d00200441106a220a2900002000290000510d0020030d01410021030c020b200341016a21030c010b200920036b220b20074f0d02200241106a41186a220c200420034105746b220b41186a220d290300370300200241106a41106a220e200b41106a220f290300370300200241106a41086a2210200b41086a22112903003703002002200b290300370310200441086a22122903002113200a2903002114200441186a22152903002116200b2004290300370300200d2016370300200f2014370300201120133703002015200c290300370300200a200e29030037030020122010290300370300200420022903103703000b200441206a21042007200941016a2209460d020c000b0b200b20074184d9c4001030000b2003417f6a20074f0d00200542ffffffff0f832105200720036b21070b20012006200710db040240200542ffffff3f83500d00200610230b200241306a24000ba30301067f230041106b22032400024020014105744104722204417f4c0d000240200410212205450d002003410036020820032004360204200320053602002001200310610240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210620032802082105034020002101024002402006200522046b4120490d00200441206a21050c010b024002400240200441206a22052004490d00200641017422002005200020054b1b22004100480d000240024020060d00024020000d00410121070c020b2000102121070c040b20062000470d020b200021060c030b102c000b200720062000102521070b2000210620070d00102a000b200141206a2100200720046a22042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a290000370000200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100e02402006450d00200710230b200341106a24000f0b1033000b1032000bd30503027f017e057f230041e0006b22022400418fcdc200ad4280808080f00084100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341eecec000ad4280808080800284100c22032900002104200241286a41086a200341086a29000037030020022004370328200310232002200136023c20022002413c6aad4280808080c00084100d220329000037034020031023200241d4006a200241c0006a360200200241003a00582002200241c0006a41086a36024c20022002413c6a3602502002200241c0006a360248200241186a200241c8006a10650240024002400240024002402002280220220541206a2201417f4c0d0020022802182106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422074110200741104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290328370010200341186a200241286a41086a2903003700000240200841606a20054f0d00200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a0240200228021c450d00200610230b200241c8006a2003200110bb01200241286a41086a2201200241c8006a410c6a2902003703002002200229024c3703280240024020022802484101460d00200042003702002000410c6a41003602000c010b20002002290328370200200041086a20012903003702000b20031023200241e0006a24000f0b102c000b102a000bbb0302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b2203428094ebdc03420010a705200441286a20042903382206200441386a41086a2903002207428094ebdc03420010a605200441186a20022003200620022004290328852003200441286a41086a2903008584420052ad7c22084201200842015620072008200654ad7c22064200522006501b22051b22082006420020051b220710a70502400240024020042903182206428080808010544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2008200710a70520042903082203428080808010544100200441086a41086a290300501b450d012006a7450d02200441d0006a2400200342ffffffff0f83428094ebdc037e200642ffffffff0f8380a70f0b2004411136024c20044184abc7003602484188a9c70041de00200441c8006a41f8a8c70041e8a9c7001034000b2004411136024c20044184abc7003602484188a9c70041de00200441c8006a41f8a8c70041e4aac7001034000b41f0a6c700411941f4aac700102d000b8f1b020c7f087e230041f0036b22042400200441386a2001109502200428023821052004200428024022063602dc02200420053602d80220044198016a2006ad4220862005ad841010108b01024002402004280298012207450d00200428029c01210802400240200441a0016a280200450d0020072d000022064103490d010b2004410036028002200442013703f8012004410a3602042004200441d8026a3602002004200441f8016a3602d8012004419c036a41013602002004420137028c0320044180c5c600360288032004200436029803200441d8016a4184a5c20020044188036a10311a20043502800242208620043502f80184100a024020042802fc01450d0020042802f80110230b410321060b02402008450d00200710230b20064103470d010b410021060b0240200428023c450d00200510230b0240024002400240024020060e03000201000b20044198016a200110c70120044188036a200428029801220520042802a00110e101200441f8016a41086a220620044191036a290000370300200441f8016a41106a220720044199036a290000370300200441f8016a41186a2208200441a1036a29000037030020042004290089033703f80102400240024020042d0088034101470d00200441f8006a41186a2008290300370300200441f8006a41106a2007290300370300200441f8006a41086a2006290300370300200420042903f8013703780240200428029c01450d00200510230b200441d8016a41186a200441f8006a41186a290300370300200441d8016a41106a200441f8006a41106a290300370300200441d8016a41086a200441f8006a41086a290300370300200420042903783703d801200441386a200441d8016a10c60120044188036a20042802382209200428024010e20120044198016a41086a220620044188036a41086a29030037030020044198016a41106a220720044188036a41106a29030037030020044198016a41186a220820044188036a41186a290300370300200441f8016a41086a220a200441b4036a290200370300200441f8016a41106a220b200441bc036a290200370300200441f8016a41186a220c200441c4036a290200370300200441f8016a41206a220d200441cc036a290200370300200441f8016a41286a220e200441d4036a290200370300200441f8016a41306a220f200441dc036a280200360200200420042903880337039801200420042902ac033703f80120042802a8032205450d01200441d8026a41186a2008290300370300200441d8026a41106a2007290300370300200441d8026a41086a2006290300370300200441086a200a290300370300200441106a200b290300370300200441186a200c290300370300200441206a200d290300370300200441286a200e290300370300200441306a200f28020036020020042004290398013703d802200420042903f8013703000240200428023c450d00200910230b200441f8016a41186a200441d8016a41186a2903002210370300200441f8016a41106a200441d8016a41106a2903002211370300200441f8016a41086a200441d8016a41086a2903002212370300200420042903d80122133703f80120044188036a41186a201037030020044188036a41106a201137030020044188036a41086a201237030020044188036a41286a200441d8026a41086a290300221437030020044188036a41306a200441d8026a41106a290300221537030020044188036a41386a200441d8026a41186a29030022163703002004201337038803200420042903d80222173703a803200441386a41386a2016370300200441386a41306a2015370300200441386a41286a2014370300200441d8006a2017370300200441386a41186a2010370300200441386a41106a2011370300200441386a41086a2012370300200420133703380c020b200428029c01450d04200510230c040b0240200428023c450d00200910230b200441f8016a41186a200441d8016a41186a290300370300200441f8016a41106a200441d8016a41106a290300370300200441f8016a41086a200441d8016a41086a290300370300200420042903d8013703f8010b2005450d0220044198016a41386a2207200441386a41386a29030037030020044198016a41306a2208200441386a41306a29030037030020044198016a41286a220a200441386a41286a29030037030020044198016a41206a220b200441386a41206a29030037030020044198016a41186a200441386a41186a220629030037030020044198016a41106a200441386a41106a220c29030037030020044198016a41086a200441386a41086a220d2903003703002004200429033837039801200441d8016a41186a2006290300370300200441d8016a41106a200c290300370300200441d8016a41086a200d290300370300200420042903383703d801200441f8016a41186a22062007290300370300200441f8016a41106a22072008290300370300200441f8016a41086a2208200a29030037030020042005360298022004200b2903003703f8012004419c026a2004290300370200200441a4026a200441086a290300370200200441ac026a200441106a290300370200200441b4026a200441186a290300370200200441bc026a200441206a290300370200200441c4026a200441286a290300370200200441cc026a200441306a2802003602002006290300211020072007290300221120027c22123703002006201020037c2012201154ad7c3703002008200829030020037c20042903f801221020027c2211201054ad7c2212370300200420113703f80120042003370380012004200237037802400240200220038450450d004200210342002110420021020c010b200420013602d402200441d8026a2001200441f8006a200441d4026a10a202024020042802d8024101470d004200211020042903e0022103420121020c010b20044180036a2903002110200441f8026a29030021034200210220042903e0024201520d00200441d8026a41106a2903002113200441c0036a200441d8026a41186a290300370300200441b8036a201337030020044188036a41086a41003a000020044191036a200129000037000020044199036a200141086a290000370000200441a1036a200141106a290000370000200441a9036a200141186a290000370000200441023a00880320044188036a10e0010b200442f3e885db96cddbb320370378200441f8006a200441f8016a41386a20112012411f10990220044188036a200441d8016a10c601200428028803210520042004280290033602dc02200420053602d802200441f8016a200441d8026a10ec010240200428028c03450d00200510230b0240200428029c022205450d00200541186c450d0020042802980210230b0240200441a8026a28020041ffffffff0371450d0020042802a40210230b200242018521020c030b20044198016a200110c70120044188036a200428029801220520042802a00110e101200441f8016a41086a220120044191036a290000370300200441f8016a41106a220620044199036a290000370300200441f8016a41186a2207200441a1036a29000037030020042004290089033703f801024020042d0088034101470d00200441386a41186a2007290300370300200441386a41106a2006290300370300200441386a41086a2001290300370300200420042903f8013703380240200428029c01450d00200510230b20044198016a41186a200441386a41186a29030037030020044198016a41106a200441386a41106a29030037030020044198016a41086a200441386a41086a2903003703002004200429033837039801200420023703002004200337030802400240200220038450450d004200210242002103420021100c010b200420044198016a3602d802200441f8016a20044198016a2004200441d8026a10a202024020042802f8014101470d00420021102004290380022103420121020c010b200441a0026a290300211020044198026a2903002103420021022004290380024201520d00200441f8016a41106a2903002111200441c0036a200441f8016a41186a290300370300200441b8036a201137030020044188036a41086a41003a000020044191036a20042903980137000020044199036a20044198016a41086a290300370000200441a1036a20044198016a41106a290300370000200441a9036a20044198016a41186a290300370000200441023a00880320044188036a10e0010b200242018521020c030b200428029c01450d0120051023420021020c020b2004200237039801200420033703a00102400240200220038450450d004200210342002110420021020c010b20042001360238200441f8016a200120044198016a200441386a10a202024020042802f8014101470d00420021102004290380022103420121020c010b200441a0026a290300211020044198026a2903002103420021022004290380024201520d00200441f8016a41106a2903002111200441c0036a200441f8016a41186a290300370300200441b8036a201137030020044188036a41086a41003a000020044191036a200129000037000020044199036a200141086a290000370000200441a1036a200141106a290000370000200441a9036a200141186a290000370000200441023a00880320044188036a10e0010b200242018521020c010b420021020b2000200337030820002002370300200041106a2010370300200441f0036a24000b91470b017f067e017f017e017f017e017f017e017f057e167f230041b0036b22052400200341286a2903002106200341186a2903002107200341086a2903002108200329032021092003290310210a2003290300210b20054190036a41086a220c42003703002005420037039003418fcdc200ad4280808080f00084220d100c220e290000210f200541a0036a41086a2210200e41086a2900003703002005200f3703a003200e1023200c2010290300370300200520052903a0033703900341ccc5c000ad4280808080900284100c220e290000210f200e2900082111200e1023200541f0026a41086a2212200c29030037030020052011370388032005200f3703800320052005290390033703f002200541386a200541f0026a108802024002400240024002400240024002400240024002400240024002400240024002402005280238417d710d004110210c0c010b200c42003703002005420037039003200d100c220e290000210f2010200e41086a2900003703002005200f3703a003200e1023200c2010290300370300200520052903a0033703900341b8dbc100ad4280808080900184100c2210290000210f20102900082111201010232012200c29030037030020052011370388032005200f3703800320052005290390033703f002200541e0006a200541f0026a10ba01024020052903604202510d004110210c200541e0006a41106a2802002004470d010b4200210f20054190036a41086a220c42003703002005420037039003418fcdc200ad4280808080f00084100c22102900002111200541a0036a41086a220e201041086a290000370300200520113703a00320101023200c200e290300370300200520052903a0033703900341b0e4c100ad4280808080b00184100c221029000021112010290008210d20101023200541f0026a41086a200c2903003703002005200d37038803200520113703800320052005290390033703f002200541203602e4022005200541f0026a3602e002200541a0036a200541f0026aad428080808080048422131010108b010240024020052802a003220c0d000c010b20052802a4032110024002400240200e280200220e4110490d00200e417071220e4110460d00200e4120470d010b200541003602b802200542013703b0022005410a360294032005200541e0026a360290032005200541b0026a3602a002200541f4006a41013602002005420137026420054180c5c600360260200520054190036a360270200541a0026a4184a5c200200541e0006a10311a20053502b80242208620053502b00284100a024020052802b402450d0020052802b00210230b4200210f0c010b200c41086a290000210d200c2900002114200c41286a2900002115200c41186a2900002111200c2900202116200c29001021174201210f0b2010450d00200c10230b024002400240200f500d0041031021220c450d0a200c417f20092016852006201585844200522009201654200620155420062015511b22121b3a0002200c417f200a201785200720118584420052200a201754200720115420072011511b1b220e3a0001200c417f200b2014852008200d8584420052200b2014542008200d542008200d511b1b22103a0000201041014b0d010240024020100e020001000b200e41014b0d020240200e0e020001000b200c10234111210c20120d010c040b200c10230b20054190036a41086a220c42003703002005420037039003418fcdc200ad4280808080f00084100c2210290000210f200541a0036a41086a220e201041086a2900003703002005200f3703a00320101023200c200e290300370300200520052903a0033703900341a8c5c000ad4280808080a00284100c2210290000210f2010290008211120101023200541f0026a41086a200c29030037030020052011370388032005200f3703800320052005290390033703f002200541e0006a20131010108b01024002402005280260220c450d00200528026421102005200541e0006a41086a2802003602b4022005200c3602b002200541306a200541b0026a108801024002402005280230450d0041012112419ca8c700210e0c010b2005280234210e410021120b02402010450d00200c10230b4112210c2012450d010c040b4100210e0b20054190036a41086a221042003703002005420037039003418fcdc200ad4280808080f00084220d100c220c290000210f200541a0036a41086a2212200c41086a2900003703002005200f3703a003200c102320102012290300370300200520052903a0033703900341e4d8c100ad4280808080e00184100c220c290000210f200c2900082111200c1023200541f0026a41086a2218201029030037030020052011370388032005200f3703800320052005290390033703f002200541286a200541f0026a412010cd014113210c200041086a280200200e200528022c410020052802281b22042004200e4b1b220e470d02201042003703002005420037039003200d100c220c290000210f2012200c41086a2900003703002005200f3703a003200c102320102012290300370300200520052903a0033703900341a8c5c000ad4280808080a00284100c220c290000210f200c2900082111200c10232018201029030037030020052011370388032005200f3703800320052005290390033703f002200541e0006a200541f0026a412010890220052802602210450d0120052005290264220f37024420052010360240200028020021192000280204211a0240200e0d00411c210c0c060b4114210c200f422088a720192f010022004d0d05200541e8006a2212201020004105746a220c41096a290000370300200541f0006a2210200c41116a290000370300200541f7006a2200200c41186a2900003700002005200c290001370360200c2d0000210c412010212204450d072004200c3a000020042005290360370001200441096a2012290300370000200441116a2010290300370000200441186a200029000037000020054281808080103702f402200520043602f00241012112411c210c200e4101460d04200528024820192f010222104d0d03200541b0026a41086a221b200528024020104105746a221041096a290000370300200541b0026a41106a221c201041116a290000370300200541b0026a41176a221d201041186a290000370000200520102900013703b002201941046a2118200e410174417c6a210e20102d0000211e4121210041022112410121100340200541e0006a41176a221f201d290000370000200541e0006a41106a2220201c290300370300200541e0006a41086a2221201b290300370300200520052903b00237036002402012417f6a2010470d00200541f0026a20104101109a0120052802f00221040b200420006a2210417f6a201e3a000020102005290360370000201041086a2021290300370000201041106a2020290300370000201041176a201f290000370000200520123602f802200e450d05200528024820182f010022104d0d04201b200528024020104105746a221041096a290000370300201c201041116a290000370300201d201041186a290000370000200520102900013703b002200e417e6a210e201841026a2118200041206a2100201241016a211220102d0000211e20052802f40221100c000b0b200c10234111210c0c010b4112210c0b2001108302200041046a28020041808080807872418080808078460d0e200028020010230c0e0b4114210c0b0240201a41808080807872418080808078460d00201910230b20052802f40241ffffff3f71211b0c010b4100211b410121040240201a41808080807872418080808078460d00201910230b410021120b0240200c411c460d0041012103201b450d0a0c090b20054190036a41086a220c42003703002005420037039003418fcdc200ad4280808080f00084100c2210290000210f200541a0036a41086a220e201041086a2900003703002005200f3703a00320101023200c200e290300370300200520052903a0033703900341bac5c000ad4280808080a00284100c2210290000210f2010290008211120101023200541f0026a41086a200c29030037030020052011370388032005200f3703800320052005290390033703f002200541e0006a200541f0026a41201089022005280260221e450d0520052005290264220f3702542005201e360250200541e0006a200141c00110a1051a200541b0026a200541e0006a200541d0006a200541c0006a10a302200fa7212120052d00b0024101460d0320052802b4022222200541b0026a410c6a2802002223412c6c22246a2125200541b0026a41086a2226280200212702402024450d00200541f0026a41086a2119418fcdc200ad4280808080f00084210f41bbacc300ad4280808080a00184210620222118024002400340200f100c220c2900002111200541a0036a41086a221c200c41086a290000370300200520113703a003200c10232006100c220c2900082111200c2800042128200c2800002129200c102341201021220c450d04200c2018410c6a220e290000370000200c41186a200e41186a222a290000370000200c41106a200e41106a222b290000370000200c41086a200e41086a222c2900003700002005200cad4280808080800484100d22102900003703f00220101023200541003a00702005200c41206a36026c2005200c360268200520193602642005200541f0026a360260200541b0026a200541e0006a1065200c102320052802b802221f41206a2210417f4c0d0b20052802b00221200240024002402010450d0020101021220c450d072010410f4d0d01201021000c020b4110210041101021220c0d010c080b201041017422004110200041104b1b22004100480d06024020102000470d00201021000c010b200c201020001025220c450d070b200c20052903a003370000200c41086a201c2903003700000240024020004170714110460d002000211d0c010b2000410174221d4120201d41204b1b221d4100480d062000201d460d00200c2000201d1025220c450d070b200c2011370018200c2028360014200c20293600100240201d41606a201f4f0d00201f415f4b0d06201d41017422002010200020104b1b22004100480d06201d2000460d00200c201d20001025220c450d070b200c41206a2020201f10a1051a024020052802b402450d00202010230b200541206a200c2010419ca8c70041004100108c0120052802202120200c1023200f100c220c2900002111201c200c41086a290000370300200520113703a003200c102341e2c4c000ad4280808080a00184100c220c2900082111200c2800042128200c2800002129200c102341201021220c450d04200c200e290000370000200c41186a202a290000370000200c41106a202b290000370000200c41086a202c2900003700002005200cad4280808080800484100d22102900003703f00220101023200541003a00702005200c41206a36026c2005200c360268200520193602642005200541f0026a360260200541b0026a200541e0006a1065200c102320052802b802221d41206a2210417f4c0d0b20052802b002211f0240024002402010450d0020101021220c450d072010410f4d0d01201021000c020b4110210041101021220c450d080c010b201041017422004110200041104b1b22004100480d06024020102000470d00201021000c010b200c201020001025220c450d070b200c20052903a003370000200c41086a201c2903003700000240024020004170714110460d002000211c0c010b2000410174221c4120201c41204b1b221c4100480d062000201c460d00200c2000201c1025220c450d070b200c2011370018200c2028360014200c20293600100240201c41606a201d4f0d00201d415f4b0d06201c41017422002010200020104b1b22004100480d06201c2000460d00200c201c20001025220c450d070b200c41206a201f201d10a1051a024020052802b402450d00201f10230b200541e0006a200c201010a402024020052d00702210410246221c0d002005280260211a2005280264212d2005290368210d0b200c10230240024002400240024002402020410146220c20104102472200460d00200c450d010240201841086a2802004101470d0002402018280200220c200e460d00200c200e412010a3050d010b200c2f012041ffff03460d030b4119210c20104102460d08202d41ffffff3f710d070c080b4116210c20104102460d07202d41ffffff3f71450d070c060b02402000450d0002402018280208220c450d002018280200221c200c41226c6a211f200d422088a72120200da7410574211d03402005201c220e3602b002200e41226a211c201d2110201a210c0340024020100d004117210c0c080b0240200e200c460d00200c200e412010a3052100201041606a2110200c41206a210c20000d010b0b200541e0006a200541b0026a10c8010240200528026c220c450d00200528026821100240200528027041ffffffff0371450d00200c10230b201020204d0d004118210c0c070b201c201f470d000b0b202d41ffffff3f71450d030c020b418189c20041fd0041808ac200104f000b201c0d01202d41ffffff3f71450d010b201a10230b2018412c6a22182025470d010c040b0b202d41ffffff3f71450d010b201a10230b02402023450d002023412c6c21102022210303400240200341046a280200220e450d00200e41226c450d00200328020010230b2003412c6a2103201041546a22100d000b0b2027450d052027412c6c450d05202210230c050b200541003602f802200542043703f002200541f0026a41002024412c6d10a60120052802f002211020052802f802210c200520223602682005202536026c20052027ad4220862022ad843703602005200541a0036a3602702026200c3602002005200541f0026a41086a3602b40220052010200c412c6c6a3602b002200541e0006a200541b0026a10a50220052802f4022119200541e0006a2004201220052802f002222820052802f802221a10d801200541a0026a41086a200541e0006a41086a280200360200200520052903603703a00202400240200528026c450d00411a210c20052802a802212020052802a002211f0c010b02400240024020052802a002221f450d00024020052802a402220e450d00200e210c201f2110034020102802c8052110200c417f6a220c0d000b201f210c0340200c200c2f01064102746a41c8056a280200210c200e417f6a220e0d000b200541e0006a210e0c020b200541e0006a210e201f2110201f210c0c010b4100211020054100360264200541e0006a210e0c010b2005200c360264200541ec006a200c2f0106360200200541003602602005200541a0026a360268200541a0026a210c0b200541f0026a41086a200e41086a290200220f3703002005200e29020022113703f00220052802a8022120200541ec006a4100360200200541e0006a41186a200f3703002005200c36026820052010360264200541003602602005201137037020052020360280010240024020200d00427f2107420021084200210d420021094200210a427f21060c010b20052020417f6a36028001200541e0006a410020101b2218280200210e2018280208211c0240024002400240201828020c22002018280204220c2f01064f0d00200c21100c010b0340200c2802002210450d02200e41016a210e200c2f010421002010210c200020102f01064f0d000b0b2000ad422086201cad84210f0c010b201cad210f410021100b200f422088a7221c41016a2100200fa7211d02400240200e0d002010210c0c010b201020004102746a41c8056a280200210c41002100200e417f6a220e450d000340200c2802c805210c200e417f6a220e0d000b0b2018200036020c2018201d3602082018200c360204201841003602002010201c4105746a41e8026a210c427f2107427f2106420021094200210a420021084200210d03402005200c41086a29030022114200200c290300220f420010a605200541106a200f4200200f420010a605427f200d427f200541106a41086a290300220b2005290300221520157c7c2215201120052903082217842017844200522015200b5472220c1b7c2008427f2005290310200c1b7c220b200854220cad7c2208200c2008200d542008200d511b220c1b210d427f200b200c1b210820112006200f200754201120065420112006511b220c1b2106200f2007200c1b21072011200a7c200f20097c2209200f54ad7c210a200528028001220c450d012005200c417f6a36028001200541e0006a410020052802641b2218280200210e2018280208211c024002400240201828020c22002018280204220c2f01064f0d00200c21100c010b02400340200c2802002210450d01200e41016a210e200c2f010421002010210c200020102f0106490d020c000b0b201cad210f410021100c010b2000ad422086201cad84210f0b200f422088a7221c41016a2100200fa7211d02400240200e0d002010210c0c010b201020004102746a41c8056a280200210c41002100200e417f6a220e450d000340200c2802c805210c200e417f6a220e0d000b0b2018200036020c2018201d3602082018200c360204201841003602002010201c4105746a41e8026a210c0c000b0b200541d8026a200d370300200541b0026a41186a200a370300200520083703d002200520093703c002200520073703b002200520063703b80202400240200541b0026a2003460d00200541b0026a2003413010a3050d010b02400240201f0d004100211f41002103410021200c010b0240024020052802a402220c0d00201f21030c010b200c2103201f2110034020102802c80521102003417f6a22030d000b201f21030340200320032f01064102746a41c8056a2802002103200c417f6a220c0d000b2010211f0b20032f0106210c0b200541fc006a200c360200200541e0006a41186a4100360200200541f4006a2003360200200520203602800120054100360270200542003703682005201f360264200541003602602005200541a0036a36028401200541e0026a200541e0006a10d90120052802e002211d20052802e402211f20052802e802211c20054190036a41086a220342003703002005420037039003418fcdc200ad4280808080f00084100c220c290000210f200541a0036a41086a2210200c41086a2900003703002005200f3703a003200c102320032010290300370300200520052903a0033703900341d5cfc000ad4280808080d00184100c220c290000210f200c2900082111200c1023200541f0026a41086a200329030037030020052011370388032005200f3703800320052005290390033703f00220054100360268200542013703602012200541e0006a106102402012450d002012410574211241002005280268220c6b210e20052802642100200421030340024002402000200e6a4120490d00200528026021100c010b200c41206a2210200c490d06200041017422012010200120104b1b22014100480d060240024020000d00024020010d00410121100c020b200110212210450d090c010b2005280260211020002001460d0020102000200110252210450d080b2005200136026420052010360260200121000b2010200c6a22102003290000370000201041186a200341186a290000370000201041106a200341106a290000370000201041086a200341086a2900003700002005200c41206a220c360268200e41606a210e200341206a2103201241606a22120d000b0b201c200541e0006a10610240201c450d00201d201c41d0006c6a2118201d211203400240024020052802642210200528026822036b4120490d002005280260210c0c010b200341206a220c2003490d062010410174220e200c200e200c4b1b220e4100480d060240024020100d000240200e0d004101210c0c020b200e1021220c450d090c010b2005280260210c2010200e460d00200c2010200e1025220c450d080b2005200e3602642005200c3602600b200c20036a220c2012290000370000200c41186a201241186a290000370000200c41106a201241106a290000370000200c41086a201241086a2900003700002005200341206a3602682005201241206a3602a003200541a0036a200541e0006a10db012005201241306a3602a003200541a0036a200541e0006a10db01201228024021032012280248220c200541e0006a10610240200c450d00200c41306c21000340024002402005280264220e2005280268220c6b4120490d00200528026021100c010b200c41206a2210200c490d08200e41017422012010200120104b1b22014100480d0802400240200e0d00024020010d00410121100c020b200110212210450d0b0c010b20052802602110200e2001460d002010200e200110252210450d0a0b20052001360264200520103602600b2010200c6a2210200341106a290000370000201041186a200341286a290000370000201041106a200341206a290000370000201041086a200341186a2900003700002005200c41206a360268200520033602a003200541a0036a200541e0006a10db01200341306a2103200041506a22000d000b0b2018201241d0006a2212470d000b0b024002400240024002400240200241ff0171220341024b0d0020030e03010203010b20052802682103200528026421102005280260210c0c040b4100210e0c020b4101210e0c010b4102210e0b2005200e3a00a003024002402005280264221020052802682203460d002005280260210c0c010b200341016a220c2003490d0520034101742210200c2010200c4b1b22104100480d050240024020030d0041002103024020100d004101210c0c020b20101021220c450d080c010b2005280260210c20032010460d00200c200320101025220c450d070b200520103602642005200c3602600b200c20036a200e3a00002005200341016a22033602680b20132003ad422086200cad84100e02402010450d00200c10230b0240201b450d00200410230b0240201c450d00201c41d0006c210c201d41c4006a21030340024020032802002210450d00201041306c450d002003417c6a28020010230b200341d0006a2103200c41b07f6a220c0d000b0b0240201f450d00201f41d0006c450d00201d10230b200541e0006a41286a2210200541b0026a41286a290300370300200541e0006a41206a220e200541b0026a41206a290300370300200541e0006a41186a2200200541b0026a41186a290300370300200541e0006a41106a2201200541b0026a41106a290300370300200541e0006a41086a2212200541b0026a41086a290300370300200520052903b00237036020054190036a41086a220342003703002005420037039003418fcdc200ad4280808080f00084100c220c290000210f200541a0036a41086a2204200c41086a2900003703002005200f3703a003200c102320032004290300370300200520052903a0033703900341b0e4c100ad4280808080b00184100c220c290000210f200c2900082111200c1023200541f0026a41086a200329030037030020052011370388032005200f3703800320052005290390033703f002413010212203450d0220032005290360370000200341286a2010290300370000200341206a200e290300370000200341186a2000290300370000200341106a2001290300370000200341086a201229030037000020132003ad4280808080800684100e200310230240201a450d00201a412c6c210c2028210303400240200341046a2802002210450d00201041306c450d00200328020010230b2003412c6a2103200c41546a220c0d000b0b02402019450d002019412c6c450d00202810230b0240202141ffffff3f71450d00201e10230b0240200528024441ffffff3f71450d00200528024010230b411c210c0c0c0b411b210c0b02400240201f450d000240024020052802a40222100d00201f21030c010b20102103201f210e0340200e2802c805210e2003417f6a22030d000b201f21030340200320032f01064102746a41c8056a28020021032010417f6a22100d000b200e211f0b200541fc006a20032f0106360200200541f8006a4100360200200541f4006a200336020020054100360270200542003703682005201f360264200541003602600c010b41002120200541f4006a4100360200200541003602640b2005202036028001200541e0006a10a6020240201a450d00201a412c6c21102028210303400240200341046a280200220e450d00200e41306c450d00200328020010230b2003412c6a2103201041546a22100d000b0b2019450d042019412c6c450d04202810230c040b1033000b102c000b102a000b4115210c0b41002103202141ffffff3f71450d01201e1023201b0d030c040b4112210c410121030b201b0d010c020b1032000b200410230b0240200528024441ffffff3f71450d00200528024010230b2003450d0020011083020b200541b0036a2400200c0bce0203027f017e037f23004180026b22012400200141086a2000109702200141e0006a200128020822002001280210220210980220012903602103200141b8016a200141e8006a41c40010a1051a200141b4016a41026a2204200141af016a2d00003a0000200120012f00ad013b01b4010240024020034201510d0041002105200141186a410041c40010a0051a0c010b20012d00ac012105200141186a200141b8016a41c40010a1051a200141146a41026a20042d00003a0000200120012f01b4013b01140b200141e8006a200141186a41c40010a1052104200141af016a200141166a2d00003a000020014201370360200141002005411874220541808080786a2206200620054b1b4118763a00ac01200120012f01143b00ad01200120023602bc01200120003602b8012004200141b8016a1098030240200128020c450d00200010230b20014180026a24000b9b0b06047f027e027f067e037f067e230041d0026b22042400200328020021052004200110970220044180016a20042802002206200428020822071098022004290380012108420021092004420037038001200441c8016a280200210a20042d00cc01210b02400240200842015122030d00200441106a41306a4200370300200441106a41286a4200370300200441106a41206a4200370300200441106a41186a4200370300200441206a4200370300200441186a4200370300200442003703104200210c4200210d4200210e4200210f0c010b200441b8016a290300211020044180016a41306a290300211120044180016a41206a290300210c20044180016a41186a2903002109200441c0016a290300210f200429039001210e200429038801210d200441106a41206a20044180016a41286a290300370300200441106a41286a2011370300200441106a41306a2010370300200441206a20093703002004200c3703282004200d3703102004200e3703180b0240024002400240427f200d20097c22092009200d542212200e200c7c2012ad7c2209200e542009200e511b22121b427f200920121b8450450d0041a4acc500ad4280808080b00184210e41838a1c21120c010b200d200229030022107c2209200d542212200e200241086a29030022117c2012ad7c220d200e54200d200e511b4101470d0141f4acc500ad4280808080800184210e41838a0821120b200e4280807c832108200e42088842ff0183210c200ea72103410121020c010b200420093703102004200d370318200441c8006a41186a200441206a220241086a290300220e370300200441c8006a41206a2212200241106a290300370300200441f0006a2213200241186a290300370300200441f8006a2214200241206a2903003703002004200d3703502004200937034820042002290300220c37035802400240427f2009200c7c220c200c2009542202200d200e7c2002ad7c220e200d54200e200d511b22021b220c4280c8afa025544100427f200e20021b220e501b0d00200441c8006a41106a290300210e2014290300210c20132903002115201229030021162004290350211720042903482118420121192004290360211a0c010b420021190240200c200e84500d00200c200e10eb01200441a0026a200e37030020044198026a200c370300200441e8016a41086a41013a0000200441f1016a2005290000370000200441f9016a200541086a29000037000020044181026a200541106a29000037000020044189026a200541186a290000370000200441023a00e801200441e8016a10e0010b0b200441a8016a2016370300200441b0016a201537030020044190016a2017370300200441b8016a200c37030020044198016a200e3703002004201a3703a0012004200f3703c00120042018370388014201210c410021022004200b4100200842015122121b3a00cc012004200a410020121b3602c801200420194201512212ad37038001024020120d002007ad4220862006ad8410114200210c420021080c010b200420073602ec01200420063602e80120044188016a200441e8016a109803420021080b02402004280204450d00200610230b024002402002450d0020002012360204200041086a200c4208862003ad42ff018384200884370200410121010c010b024002400240200341ff017122030d00200c4200510d0041032102200441e8016a21030c010b2003450d01200c4200520d014104210220044180016a21030b200341046a20023a0000200341003a0000200341056a20012900003700002003410d6a200141086a290000370000200341156a200141106a2900003700002003411d6a200141186a290000370000200310e0010b200041286a2011370300200041206a2010370300200041186a200d370300200041106a2009370300200041086a4200370300410021010b20002001360200200441d0026a24000bf6c8010e077f017e057f017e0b7f017e037f017e017f017e017f017e017f017e230041d0016b220424002004200336020c20044100360218200442043703102001280204210520012802002106024002400240024002400240024002400240024020012802082203450d0020034103742107200441b0016a41106a2108200441b0016a41176a21092006210a03402002280208200a290200220ba722034d0d07200441b0016a41086a220c200228020020034105746a220341096a2900003703002008200341116a2900003703002009200341186a290000370000200420032900013703b00120032d0000210d412210212203450d02200428020c220e280208200b422088a741ffff0371220f4d0d06200441c0006a41106a2210200e280200200f4105746a220e41116a290000370300200441c0006a41176a220f200e41186a290000370000200441c0006a41086a200e41096a2900002211370300200e290001210b2003200e2d00003a00002003200b370001200341096a2011370000200341ffff033b0120200341116a2010290300370000200341186a200f2900003700002004200b37034020044190016a41176a220f200929000037000020044190016a41106a2210200829030037030020044190016a41086a2212200c290300370300200420042903b0013703900102402004280218220e2004280214470d00200441106a200e410110a6012004280218210e0b200a41086a210a2004280210200e412c6c6a220e200d3a000c200e428180808010370204200e2003360200200e410d6a200429039001370000200e41156a2012290300370000200e411d6a2010290300370000200e41246a200f2900003700002004200428021841016a360218200741786a22070d000b0b0240200541ffffffff0171450d00200610230b200128020c2113200141106a2802002114200141146a2802002203450d0320132003410c6c6a211520044190016a41106a210720044190016a41176a210c2013210a034002400240200a41066a2f0100220841ffff03460d002002280208200a28020022034b0d0120004181043b01000c050b200041013b01000c040b200a41086a2f01002109200a41046a2f0100210e20044190016a41086a2210200228020020034105746a220341096a2900003703002007200341116a290000370300200c200341186a290000370000200420032900013703900120032d0000211241c40010212203450d01200428020c220d280208220f200e4d0d02200441b0016a41086a2206200d280200220d200e4105746a220e41096a290000370300200441b0016a41106a2205200e41116a290000370300200441b0016a41176a2216200e41186a2900003700002004200e2900013703b0010240200f20094d0d00200e2d0000210f200441c0006a41086a2217200d20094105746a220e41096a290000370300200441c0006a41106a2209200e41116a290000370300200441c0006a41176a220d200e41186a290000370000200e290001210b200e2d0000210e2003200f3a0000200320042903b001370001200341096a2006290300370000200341116a2005290300370000200341186a20162900003700002003200e3a0022200320083b01202004200b370340200320042903403700232003412b6a2017290300370000200341336a20092903003700002003413a6a200d29000037000020032008417f733b0142200441206a41176a2208200c290000370000200441206a41106a22092007290300370300200441206a41086a220d2010290300370300200420042903900137032002402004280218220e2004280214470d00200441106a200e410110a6012004280218210e0b2004280210200e412c6c6a220e20123a000c200e428280808020370204200e2003360200200e410d6a2004290320370000200e41156a200d290300370000200e411d6a2009290300370000200e41246a20082900003700002004200428021841016a360218200a410c6a220a2015470d010c050b0b20004181043b0100200310230c020b102a000b20004181043b0100200310230b4100210641012102200441106a210802402014450d002014410c6c450d00201310230b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f4101211041012112410121140c040b02402014450d002014410c6c450d00201310230b200128021821172001411c6a28020021150240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141206a2802002203450d00201720034104746a2116200441c0006a41086a210e200441c0006a41106a210a200441c0006a41176a2108201721090240024003402009410c6a2f0100210c2009280200210d2004200941046a290200220b3703800102400240200428020c2203280208200ba741ffff037122074d0d00200e200328020020074105746a220341096a290000370300200a200341116a2900003703002008200341186a2900003700002004200329000137034020032d00002107412210212203450d06200320073a0000200320042903403700012003200b421088a722123b0120200341096a200e290300370000200341116a200a290300370000200341186a20082900003700002004428180808010370294012004200336029001200428020c220f28020820042f01840122104b0d0141000d004122450d00200310230b20004181043b01000c3a0b20042f0186012107200441b0016a41176a2206200f28020020104105746a220341186a290000370000200441b0016a41106a2210200341116a290000370300200441b0016a41086a220f200341096a290000220b3703002004200329000122113703b00120032d0000210520082006290000370000200a2010290300370300200e200b3703002004201137034020044190016a4101410110af01200428029001220320053a0022200341236a20042903403700002003412b6a200e290300370000200341336a200a2903003700002003413a6a2008290000370000200341c2006a20073b01002004410236022820042004280294012210360224200420033602200240417f2012411074221220074110746a220720072012491b411076220741ffff03470d00200041013b01000c030b200428020c2212280208200c4d0d012007417f732106200e2012280200200c4105746a220741096a290000370300200a200741116a2900003703002008200741186a290000370000200420072900013703404102210c20072d00002107024020104102470d00200441206a4102410110af01200428022021032004280228210c0b2003200c41226c6a220320073a000020032004290340370001200320063b0120200341096a200e290300370000200341116a200a290300370000200341186a20082900003700002004200428022841016a36022802402002280208200d4d0d0020022802002103200f200441206a41086a280200360200200e2003200d4105746a220341096a290000370300200a200341116a2900003703002008200341186a290000370000200420042903203703b0012004200329000137034020032d000021070240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a220320042903b001370200200320073a000c200341086a200f2802003602002003410d6a2004290340370000200341156a200e2903003700002003411d6a200a290300370000200341246a20082900003700002004200428021841016a360218200941106a22092016470d010c040b0b20004181043b0100200428022421100c010b20004181043b01000b2010450d36201041226c450d36200428022010230c360b0240201541ffffffff0071450d00201710230b20012802242118200141286a280200211902402001412c6a2802002203450d002018200341146c6a211a2004418a016a211b20044180016a41086a211c200441c0006a41106a2107200441c0006a41176a210c20182115024002400240034020152f01102114201528020021132015290104210b201c2015410c6a2801003602002004200b3703800102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f018201210e200441c0006a41086a220d2003280200200a4105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d0000210341221021220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200d290300370000200f41116a2007290300370000200f41186a200c2900003700002004428180808010370294012004200f360290010240200428020c220328020820042f018401220a4b0d00410221034101210a0c390b201541146a2115417f200e411074220e20042f01860122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201b21080340200c201629000037000020072005290300370300200d2012290300370300200420042903b0013703400240200e417f6a2003470d0020044190016a2003410110af01200428029001210f0b200f200a6a220941606a20173a0000200941616a22032004290340370000200c290000210b20072903002111200d290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e360298010240200a41e400470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d0000211720042802940121030c000b0b410221030c380b200428029401210a20034103470d362004200e3602282004200a3602242004200f3602200240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200d200328020020144105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d000021090240200a200e470d00200441206a200e410110af012004280220210f2004280228210e0b200f200e41226c6a220320093a000020032004290340370001200c290000210b20072903002111200d290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b3700002004200428022841016a360228200228020820134d0d03200228020021032012200441206a41086a280200360200200d200320134105746a220341096a2900003703002007200341116a290000370300200c200341186a290000370000200420042903203703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200d2903003700002003411d6a2007290300370000200341246a200c2900003700002004200428021841016a3602182015201a470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b01002004280224210a0b200a450d34200a41226c450d34200428022010230c340b02402019450d00201941146c450d00201810230b20012802302118200141346a28020021190240200141386a2802002203450d002018200341186c6a211a2004419a016a211b20044190016a41086a211c200441c0006a41106a2107200441c0006a41176a210c20182115024002400240034020152f01142114201528020021132015290104210b201c2015410c6a2901003703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220d2003280200200a4105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d0000210341221021220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200d290300370000200f41116a2007290300370000200f41186a200c29000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c350b201541186a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201b21080340200c201629000037000020072005290300370300200d2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a22032004290340370000200c290000210b20072903002111200d290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a418601470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c340b2004280224210a20034103470d322004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200d200328020020144105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a000020032004290340370001200c290000210b20072903002111200d290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200d200320134105746a220341096a2900003703002007200341116a290000370300200c200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200d2903003700002003411d6a2007290300370000200341246a200c2900003700002004200428021841016a3602182015201a470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d30200a41226c450d3020042802800110230c300b02402019450d00201941186c450d00201810230b200128023c2119200141c0006a280200211e0240200141c4006a2802002203450d0020192003411c6c6a21182004419a016a211a20044190016a41106a211c20044190016a41086a211b200441c0006a41176a210720192115024002400240034020152f01182114201528020021132015410c6a29010021112015290104210b201c201541146a280100360200201b20113703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220c2003280200200a4105746a220341096a290000370300200441c0006a41106a220d200341116a2900003703002007200341186a2900003700002004200329000137034020032d0000210341221021220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c310b2015411c6a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201a2108034020072016290000370000200d2005290300370300200c2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903403700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41a801470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c300b2004280224210a20034103470d2e2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903403700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152018470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d2c200a41226c450d2c20042802800110230c2c0b0240201e450d00201e411c6c450d00201910230b20012802482119200141cc006a280200211e0240200141d0006a2802002203450d00201920034105746a21182004419a016a211a20044190016a41106a211c20044190016a41086a211b200441c0006a41176a210720192115024002400240034020152f011c2114201528020021132015410c6a29010021112015290104210b201c201541146a290100370300201b20113703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220c2003280200200a4105746a220341096a290000370300200441c0006a41106a220d200341116a2900003703002007200341186a2900003700002004200329000137034020032d0000210341221021220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c2d0b201541206a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201a2108034020072016290000370000200d2005290300370300200c2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903403700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41ca01470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c2c0b2004280224210a20034103470d2a2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903403700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152018470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d28200a41226c450d2820042802800110230c280b0240201e41ffffff3f71450d00201910230b2001280254211f200141d8006a280200211e0240200141dc006a2802002203450d00201f200341246c6a21192004419a016a211820044190016a41186a211c20044190016a41106a211b20044190016a41086a211a200441c0006a41176a2107201f2115024002400240034020152f01202114201528020021132015410c6a2901002111201541146a290100211d2015290104210b201c2015411c6a280100360200201b201d370300201a20113703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220c2003280200200a4105746a220341096a290000370300200441c0006a41106a220d200341116a2900003703002007200341186a2900003700002004200329000137034020032d0000210341221021220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c290b201541246a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e20182108034020072016290000370000200d2005290300370300200c2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903403700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41ec01470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c280b2004280224210a20034103470d262004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903403700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152019470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d24200a41226c450d2420042802800110230c240b0240201e450d00201e41246c450d00201f10230b2001280260211f200141e4006a280200211e0240200141e8006a2802002203450d00201f200341286c6a2119200441ca006a2118200441c0006a41186a211c200441c0006a41106a211b200441c0006a41086a211a200441b0016a41176a2107201f2115024002400240034020152f01242114201528020021132015410c6a2901002111201541146a290100211d2015290104210b201c2015411c6a290100370300201b201d370300201a20113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c250b201541286a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20182108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a418e02470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c240b2004280224210a20034103470d222004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152019470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d20200a41226c450d2020042802800110230c200b0240201e450d00201e41286c450d00201f10230b200128026c211f200141f0006a28020021200240200141f4006a2802002203450d00201f2003412c6c6a211e200441ca006a2119200441e0006a211c200441c0006a41186a211b200441c0006a41106a211a200441c0006a41086a2118200441b0016a41176a2107201f2115024002400240034020152f01282114201528020021132015410c6a2901002111201541146a290100211d2015411c6a29010021212015290104210b201c201541246a280100360200201b2021370300201a201d370300201820113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c210b2015412c6a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20192108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41b002470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c200b2004280224210a20034103470d1e2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201e470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d1c200a41226c450d1c20042802800110230c1c0b02402020450d002020412c6c450d00201f10230b20012802782120200141fc006a280200211f024020014180016a2802002203450d002020200341306c6a211e200441ca006a2119200441e0006a211c200441c0006a41186a211b200441c0006a41106a211a200441c0006a41086a2118200441b0016a41176a210720202115024002400240034020152f012c2114201528020021132015410c6a2901002111201541146a290100211d2015411c6a29010021212015290104210b201c201541246a290100370300201b2021370300201a201d370300201820113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c1d0b201541306a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20192108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41d202470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c1c0b2004280224210a20034103470d1a2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201e470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d18200a41226c450d1820042802800110230c180b0240201f450d00201f41306c450d00202010230b200128028401212020014188016a280200212202402001418c016a2802002203450d002020200341346c6a211f200441ca006a211e200441e8006a211c200441e0006a211b200441c0006a41186a211a200441c0006a41106a2118200441c0006a41086a2119200441b0016a41176a210720202115024002400240034020152f01302114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015290104210b201c2015412c6a280100360200201b2023370300201a20213703002018201d370300201920113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c190b201541346a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201e2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41f402470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c180b2004280224210a20034103470d162004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201f470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d14200a41226c450d1420042802800110230c140b02402022450d00202241346c450d00202010230b200128029001212020014194016a2802002122024020014198016a2802002203450d002020200341386c6a211f200441ca006a211e200441e8006a211c200441e0006a211b200441c0006a41186a211a200441c0006a41106a2118200441c0006a41086a2119200441b0016a41176a210720202115024002400240034020152f01342114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015290104210b201c2015412c6a290100370300201b2023370300201a20213703002018201d370300201920113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c150b201541386a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201e2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a419603470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c140b2004280224210a20034103470d122004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201f470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d10200a41226c450d1020042802800110230c100b02402022450d00202241386c450d00202010230b200128029c012124200141a0016a28020021220240200141a4016a2802002203450d0020242003413c6c6a2120200441ca006a211f200441f0006a211c200441e8006a211b200441e0006a211a200441c0006a41186a2118200441c0006a41106a2119200441c0006a41086a211e200441b0016a41176a210720242115024002400240034020152f01382114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015412c6a29010021252015290104210b201c201541346a280100360200201b2025370300201a2023370300201820213703002019201d370300201e20113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c110b2015413c6a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201f2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41b803470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c100b2004280224210a20034103470d0e2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152020470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d0c200a41226c450d0c20042802800110230c0c0b02402022450d002022413c6c450d00202410230b20012802a8012122200141ac016a28020021240240200141b0016a2802002203450d00202220034106746a2120200441ca006a211f200441f0006a211c200441e8006a211b200441e0006a211a200441c0006a41186a2118200441c0006a41106a2119200441c0006a41086a211e200441b0016a41176a210720222115024002400240034020152f013c2114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015412c6a29010021252015290104210b201c201541346a290100370300201b2025370300201a2023370300201820213703002019201d370300201e20113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c0e0b201541c0006a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201f2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41da03470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c0d0b2004280224210a20034103470d0b2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152020470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d09200a41226c450d0920042802800110230c090b0240202441ffffff1f71450d00202210230b20012802b4012126200141b8016a2802002124200141bc016a2802002203450d022026200341c4006c6a2122200441ca006a2120200441f8006a211c200441f0006a211b200441e8006a211a200441e0006a2118200441c0006a41186a2119200441c0006a41106a211e200441c0006a41086a211f200441b0016a41176a21072026211502400240034020152f01402114201528020021132015410c6a290100210b201541146a29010021112015411c6a290100211d201541246a29010021212015412c6a2901002123201541346a290100212520152901042127201c2015413c6a280100360200201b2025370300201a2023370300201820213703002019201d370300201e2011370300201f200b3703002004202737034002400240200428020c220328020820042f0140220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221021220f450d05200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c090b201541c4006a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20202108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a2003410110af012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41fc03470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c080b2004280224210a20034103470d062004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e410110af01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a2003410110a601200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152022470d010c060b0b200041013b01000c030b20004181043b01000c020b20004181043b0100200428028401210a0c010b1033000b200a450d03200a41226c450d0320042802800110230c030b02402024450d00202441c4006c450d00202610230b200041003a0000200041046a20042903103702002000410c6a200441186a2802003602000c370b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b41002102200441106a210802402024450d00202441c4006c450d00202610230b41002109410021050c060b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210941012102200441106a21080240202441ffffff1f710d00410021050c040b20221023410021050c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210541012102200441106a210802402022450d002022413c6c450d00202410230b410121090b410021160c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100211641012102200441106a210802402022450d00202241386c450d00202010230b41012109410121050b410021170c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100211741012102200441106a210802402022450d00202241346c450d00202010230b4101210941012105410121160b410021150c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100211541012102200441106a21080240201f450d00201f41306c450d00202010230b410121094101210541012116410121170b410021070c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210741012102200441106a210802402020450d002020412c6c450d00201f10230b41012109410121054101211641012117410121150b4100210c0c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210c41012102200441106a21080240201e450d00201e41286c450d00201f10230b4101210941012105410121164101211741012115410121070b410021000c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210041012102200441106a21080240201e450d00201e41246c450d00201f10230b4101210941012105410121164101211741012115410121074101210c0b4100210d0c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210d41012102200441106a21080240201e41ffffff3f71450d00201910230b4101210941012105410121164101211741012115410121074101210c410121000b4100210f0c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100210f41012102200441106a21080240201e450d00201e411c6c450d00201910230b4101210941012105410121164101211741012115410121074101210c410121004101210d0b410021100c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100211041012102200441106a210802402019450d00201941186c450d00201810230b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f0b410021120c030b200a450d00200a41226c450d00200f10230b200041013a0000200020033a00010b4100211241012102200441106a210802402019450d00201941146c450d00201810230b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f410121100b41002114410021060c040b4100211441012102200441106a21080240201541ffffffff0071450d00201710230b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f4101211041012112410021060c030b20004181043b0100200310230c010b20004181043b01000b41012102200441106a21080240200541ffffffff0171450d00200610230b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f410121104101211241012114410121060b02402004280218220e450d0020042802102103200e412c6c210e03400240200341046a280200220a450d00200a41226c450d00200328020010230b2003412c6a2103200e41546a220e0d000b0b0240200841046a2802002203450d002003412c6c450d00200828020010230b02402006450d00200141106a2802002203450d002003410c6c450d00200128020c10230b02402014450d002001411c6a28020041ffffffff0071450d00200128021810230b02402012450d00200141286a2802002203450d00200341146c450d00200128022410230b02402010450d00200141346a2802002203450d00200341186c450d00200128023010230b0240200f450d00200141c0006a2802002203450d002003411c6c450d00200128023c10230b0240200d450d00200141cc006a28020041ffffff3f71450d00200128024810230b02402000450d00200141d8006a2802002203450d00200341246c450d00200128025410230b0240200c450d00200141e4006a2802002203450d00200341286c450d00200128026010230b02402007450d00200141f0006a2802002203450d002003412c6c450d00200128026c10230b02402015450d00200141fc006a2802002203450d00200341306c450d00200128027810230b02402017450d0020014188016a2802002203450d00200341346c450d0020012802840110230b02402016450d0020014194016a2802002203450d00200341386c450d0020012802900110230b02402005450d00200141a0016a2802002203450d002003413c6c450d00200128029c0110230b02402009450d00200141ac016a28020041ffffff1f71450d0020012802a80110230b2002450d00200141b8016a2802002203450d00200341c4006c450d0020012802b40110230b200441d0016a24000bb00401087f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00200041023a00100c010b200328021421042003200341106a41086a28020036022420032001360220200341c8006a200341206a10cf01024002400240024020032802482205450d00200328024c2106024002400240200328022422024104490d00200341c8006a41086a280200210720032002417c6a220836022420032003280220220941046a220a3602202008450d012009280000210920032002417b6a3602242003200a41016a360220200a2d0000220a41014b0d0141002102200a0e020504050b200641ffffff3f710d010c020b200641ffffff3f71450d010b200510230b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b410221020c020b410121020b200341386a41026a200341286a41026a2d0000220a3a0000200341c8006a41026a200a3a0000200320032f002822083b01382000200936020c200020073602082000200636020420002005360200200320083b0148200041136a200a3a0000200020083b00110b200020023a00102004450d00200110230b200341e0006a24000bab120a0d7f017e027f027e017f017e097f027e057f057e23004190036b22022400200141086a28020021032001280204210420002802042105200028020021060240024020002802082207200028020c2208460d0020012802002109200241b0016a410c6a210a200241f0026a41106a2101200241b0016a410472210b20024188016a41086a210c20024188016a41186a210d20024188016a41206a210e41bdadc500ad4280808080800184210f0340200c20072200410c6a29020037030020024188016a41106a2210200041146a290200370300200d2000411c6a290200370300200e200041246a29020037030020022000290204370388012000412c6a210720002802002211450d01200b200229038801370200200b41086a200c290300370200200b41106a2010290300370200200b41186a200d290300370200200b41206a200e290300370200200220113602b001200241f8006a200a10d301200241f8006a41086a290300211220022903782113200241f0026a41186a2214420037030020014200370300200241f0026a41086a22104200370300200242003703f002200f100c220029000021152010200041086a290000370300200220153703f0022000102341c5adc500ad4280808080d00184100c22002900002115200241b0026a41086a2216200041086a290000370300200220153703b00220001023200120022903b002370000200141086a2016290300370000200241d0026a41086a2010290300370300200241d0026a41106a2001290300370300200241d0026a41186a2014290300370300200220022903f0023703d002200241e0006a200241d0026a412010d701200241d0006a2002290368200241e0006a41106a290300427f420010a705200241c0006a2013201220022903504200200228026022001b221542012015420156200241d0006a41086a290300420020001b22154200522015501b22001b2015420020001b10a705200241e0016a41086a2217200a41086a290200370300200241e0016a41106a2218200a41106a290200370300200241e0016a41186a2219200a41186a2902003703002002200a2902003703e00120022802b401211a2002290340211202400240024020022802b80141226c221b450d00201b211c201121000340200041206a2f0100211d2014200041186a2900003703002001200041106a2900003703002010200041086a290000370300200220002900003703f002201d0d02200041226a2100201c415e6a221c0d000b0b420021154108211e410021000240201a450d00201a41226c450d0020111023420021150b420021134100211b0c010b200241306a2012420042ffff03420010a705200241206a2002290330221f200241306a41086a29030022204281807c427f10a605200241106a201f2020201dad420010a60520024190026a41086a2221201029030037030020024190026a41106a2222200129030037030020024190026a41186a22232014290300370300200220022903f00222153703b0022002201537039002201d201220022903207ca722246c221d41ffff036e212520022903102113200241106a41086a290300212641301021221e450d03201e20132025417f201d4180807c491b201d20254181807c6c6a41ffff014b6aad42ffff03837c2215370320201e200229039002370300201e41286a20262015201354ad7c2213370300201e41186a2023290300370300201e41106a2022290300370300201e41086a20212903003703002002428180808010370284022002201e3602800202400240201c4122470d004101211b0c010b200041226a21252011201b6a221c415e6a21214101211b03402025210002400340200041206a2f0100211d2014200041186a2900003703002001200041106a2900003703002010200041086a290000370300200220002900003703f002201d0d01201c200041226a2200470d000c030b0b2002201f2020201dad420010a605201620102903002226370300200241b0026a41106a20012903002227370300200241b0026a41186a20142903002228370300200220022903f00222293703b002201420283703002001202737030020102026370300200220293703f002201520022903002227201d20246c221d41ffff036e2225417f201d4180807c491b201d20254181807c6c6a41ffff014b6aad42ffff03837c22267c2228201554221d2013200241086a2903002026202754ad7c22277c201dad7c221520135420152013511b211d0240201b200228028402470d0020024180026a201b410110a401200228028002211e0b427f2015201d1b2113427f2028201d1b2115200041226a2125201e201b41306c6a221d20022903f00237030020102903002128200129030021292014290300212a201d2026370320201d41286a2027370300201d41186a202a370300201d41106a2029370300201d41086a20283703002002201b41016a221b3602880220212000470d000b0b0240201a450d00201a41226c450d00201110230b20022802840221000b02400240201220157d2220201256420020132012201554ad7c7d221f420052201f501b4101470d00201520127d221f20155620132015201254ad7d2220201356201520125a1b0d01201b450d01201b41306c201e6a41706a221d4200201d2903002215201f7d22122012201556201d41086a221d290300221220207d2015201f54ad7d221520125620152012511b221c1b370300201d42002015201c1b3703000c010b201b450d00201b41306c201e6a41706a221d427f201d290300221520207c22122012201554221c201d41086a221d2903002215201f7c201cad7c221220155420122015511b221c1b370300201d427f2012201c1b3703000b201420192903003703002001201829030037030020102017290300370300200220022903e0013703f002200920003602042009201b3602082009201e360200200920022903f00237020c200941146a20102903003702002009411c6a2001290300370200200941246a2014290300370200200341016a21032009412c6a210920072008470d000b200821070b20042003360200200820076b2200412c6d210102402000450d002001412c6c210003400240200741046a2802002201450d00200141226c450d00200728020010230b2007412c6a2107200041546a22000d000b0b02402005450d002005412c6c450d00200610230b20024190036a24000f0b1033000b8d0303057f017e027f02400240024020002802202201450d00034020002001417f6a36022020002802042202450d03200028020821032000280200210402400240200028020c220520022f01064f0d00200221010c010b034002400240200228020022010d002003ad2106410021010c010b200441016a210420023301044220862003ad8421060b200210232006a72103200121022006422088a7220520012f01064f0d000b0b200541016a2107200120054105746a220241fc026a2802002105200241f8026a280200210802402004450d00200120074102746a41c8056a2802002101410021072004417f6a2202450d00034020012802c80521012002417f6a22020d000b0b2000200736020c2000200336020820002001360204200041003602002008450d0202402005450d00200541306c450d00200810230b200028022022010d000b0b200028020421010b02402001450d0020012802002102200110232002450d00034020022802002101200210232001210220010d000b0b0f0b41d095c700412b41c491c700102d000b13002000411b360204200041f08ac2003602000b0f00200028020020012002106941000bfe0101017f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002002410c6a20011069200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a4184a5c200200241086a10312101200241206a240020010bea1003057f017e077f230041e0006b2202240020012802202103200241306a41186a4200370300200241306a41106a22044200370300200241306a41086a220542003703002002420037033041db97c700ad4280808080f00084100c220629000021072005200641086a290000370300200220073703302006102341bbacc300ad4280808080a00184100c22062900002107200241d0006a41086a2208200641086a2900003703002002200737035020061023200420022903502207370300200241106a41086a2005290300370300200241106a41106a2007370300200241106a41186a200829030037030020022002290330370310200241306a200241106a412010890220022802302205410120051b21060240024002400240024002400240024002400240024020032002290234420020051b2207422088a7490d00200742ffffff3f83500d01200610230c010b2003200620034105746a10ac0221030240200742ffffff3f83500d00200610230b20030d010b200241306a41186a22054200370300200241306a41106a22064200370300200241306a41086a220342003703002002420037033041db97c700ad4280808080f00084100c220829000021072003200841086a290000370300200220073703302008102341bcbcc300ad4280808080c00184100c22082900002107200241d0006a41086a2209200841086a290000370300200220073703502008102320042002290350370000200441086a22082009290300370000200241106a41086a220a2003290300370300200241106a41106a220b2006290300370300200241106a41186a220c200529030037030020022002290330370310200241086a200241106a412010cd01200128021c200228020c410020022802081b220d470d01200542003703002006420037030020034200370300200242003703304180cdc200ad4280808080800184100c220e29000021072003200e41086a29000037030020022007370330200e102341d7a1c200ad4280808080c00084100c220e29000021072009200e41086a29000037030020022007370350200e10232004200229035037000020082009290300370000200a2003290300370300200b2006290300370300200c200529030037030020022002290330370310200241306a200241106a10ad0220022802302204410120041b210c200128022022052002290234420020041b2207422088a74f0d03200c20054105746a220e450d032002410036023820024201370330200128020021034104102122040d020c080b20004180063b0001200041013a0000200041036a41003a00000c060b20004180063b0001200041013a0000200041036a41003a00000c050b20024104360234200220043602302004200336000020024104360238200128020421092001410c6a2802002204200241306a10610240024020022802342208200228023822036b2004490d00200228023021060c010b200320046a22062003490d032008410174220a2006200a20064b1b220a4100480d030240024020080d000240200a0d00410121060c020b200a10212206450d080c010b200228023021062008200a460d0020062008200a10252206450d070b2002200a360234200220063602300b200620036a2009200410a1051a2002200320046a360238200141106a2802002103200141186a2802002204200241306a10610240024020040d002002280234210920022802382104200d210a0c010b20032004410c6c6a210b03402003280200210a200341086a2802002204200241306a10610240024020022802342206200228023822056b2004490d0020022802302108200621090c010b200520046a22082005490d05200641017422092008200920084b1b22094100480d050240024020060d00024020090d00410121080c020b200910212208450d0a0c010b2002280230210820062009460d0020082006200910252208450d090b20022009360234200220083602300b200820056a200a200410a1051a2002200520046a22043602382003410c6a2203200b470d000b20012802202105200128021c210a0b02400240200920046b4104490d00200441046a210320022802302106200921080c010b200441046a22032004490d03200941017422062003200620034b1b22084100480d030240024020090d00024020080d00410121060c020b200810212206450d080c010b2002280230210620092008460d0020062009200810252206450d070b20022008360234200220063602300b200620046a200a360000200220033602380240200820036b41034b0d00200341046a22042003490d03200841017422092004200920044b1b22044100480d030240024020080d00024020040d00410121060c020b200410212206450d080c010b20082004460d0020062008200410252206450d070b20022004360234200220063602300b200620036a200536000020022802342104200141246a200341046aad42208620022802302205ad84200e1013210302402004450d00200510230b20034101460d010b20004180083b0001200041013a0000200041036a41003a0000200742ffffff3f83500d03200c10230c030b410c10212203450d03410410212204450d012004200d36000020044104412410252204450d032004200e2900003700042004411c6a200e41186a290000370000200441146a200e41106a2900003700002004410c6a200e41086a290000370000200041306a41013a0000200041286a428180808010370200200041246a2003360200200041206a4100360200200041186a4204370300200041106a42ac02370300200041086a427f370300200342a4808080c00437020420032004360200200041316a2002280030360000200041346a200241336a280000360000200041003a0000200742ffffff3f83500d02200c10230c020b102c000b1033000b200241e0006a24000f0b102a000b9a0a03047f017e047f23004190016b22022400200241d8006a41186a4200370300200241d8006a41106a22034200370300200241d8006a41086a220442003703002002420037035841db97c700ad4280808080f00084100c220529000021062004200541086a290000370300200220063703582005102341bcbcc300ad4280808080c00184100c22052900002106200241f8006a41086a2207200541086a2900003703002002200637037820051023200320022903782206370300200241386a41086a2004290300370300200241386a41106a2006370300200241386a41186a200729030037030020022002290358370338200241106a200241386a412010cd01200241d8006a2002280214410020022802101b2203200010ae02200241086a200228025822042002280260419ca8c70041004100108c01200228020821050240200228025c450d00200410230b4101210402400240024020054101460d004180cdc200ad4280808080800184100c22042900002106200241f8006a41086a200441086a290000370300200220063703782004102341b4a5c200ad4280808080e00184100c22042900002106200241386a41086a200441086a2900003703002002200637033820041023200220033602282002200241286aad4280808080c00084100d22042900003703880120041023200241e4006a22052002412c6a360200200241003a0068200220024188016a41086a220036025c2002200241286a360260200220024188016a360258200241186a200241d8006a10650240024002400240412010212204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020022004ad4280808080800484100d220129000037038801200110232005200441206a360200200241003a0068200220043602602002200036025c200220024188016a360258200241286a200241d8006a1065200410232002280220220741206a2205200228023022086a2201417f4c0d01200228022821092002280218210a024002402001450d00200110212204450d022001410f4d0d01200121000c050b200141017422044110200441104b1b2200102122040d040c070b200141017422004110200041104b1b220041004e0d020c050b1033000b1032000b20012000460d0020042001200010252204450d030b20042002290378370000200441086a200241f8006a41086a2903003700000240024020004170714110460d00200021030c010b200041017422034120200341204b1b22034100480d0220002003460d0020042000200310252204450d030b20042002290338370010200441186a200241386a41086a29030037000002400240200341606a2007490d00200321000c010b2007415f4b0d02200341017422002005200020054b1b22004100480d0220032000460d0020042003200010252204450d030b200441206a200a200710a1051a02400240200020056b2008490d00200021030c010b200520086a2005490d02200041017422032001200320014b1b22034100480d02024020000d00024020030d00410121040c020b200310212204450d040c010b20002003460d0020042000200310252204450d030b200420056a2009200810a1051a0240200228022c450d00200910230b0240200228021c450d00200a10230b20022004200110cd01200228020421012002280200210502402003450d00200410230b200141004720054100477121040b20024190016a240020040f0b102c000b102a000b8b06010d7f23004190016b220224002002412036021420022001360210200241186a2001ad42808080808004841010108b010240024002400240200228021822030d00200041003602000c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a1088010240024020022802080d00200228020c2205200228022c22064105762201200120054b1b22014105742207417f4c0d030240024020010d00410121080c010b200710212208450d050b41002109200241003602402002200136023c20022008360238024002402005450d004100210a03402006210b41002101200241003a008801200a41016a210a0340200b2001460d03200241e8006a20016a200228022822072d00003a00002002200741016a3602282002200141016a22073a0088012007210120074120470d000b200241c8006a41186a220c200241e8006a41186a290300370300200241c8006a41106a220d200241e8006a41106a290300370300200241c8006a41086a220e200241e8006a41086a2903003703002002200229036837034802402009200228023c470d00200241386a20094101109a0120022802382108200228024021090b200b20076b2106200820094105746a22012002290348370000200141186a200c290300370000200141106a200d290300370000200141086a200e2903003700002002200941016a2209360240200a2005470d000b2002200b20076b36022c0b2008450d012000200229023c370204200020083602000c020b2002410036022c0240200141ff0171450d00200241003a0088010b200228023c41ffffff3f71450d00200810230b20024100360250200242013703482002410a36023c2002200241106a3602382002200241c8006a360234200241fc006a41013602002002420137026c20024180c5c6003602682002200241386a360278200241346a4184a5c200200241e8006a10311a2002350250422086200235024884100a0240200228024c450d00200228024810230b200041003602000b2004450d00200310230b20024190016a24000f0b1032000b1033000bdc0603027f017e077f230041e0006b220324004180cdc200ad4280808080800184100c22042900002105200341086a200441086a290000370300200320053703002004102341d4bec200ad4280808080a00284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023200320013602302003200341306aad4280808080c00084100d220429000037034020041023200341d4006a2204200341306a41046a360200200341003a00582003200341c0006a41086a220136024c2003200341306a3602502003200341c0006a360248200341206a200341c8006a10652003200236023c20032003413c6aad4280808080c00084100d22022900003703402002102320042003413c6a41046a360200200341003a00582003200136024c20032003413c6a3602502003200341c0006a360248200341306a200341c8006a10650240024002400240024002402003280228220641206a2207200328023822086a2202417f4c0d00200328023021092003280220210a024002402002450d00200210212204450d032002410f4d0d012002210b0c050b200241017422044110200441104b1b220b102122040d040c060b200241017422014110200141104b1b220b41004e0d020c040b1032000b1033000b2002200b460d0020042002200b10252204450d020b20042003290300370000200441086a200341086a29030037000002400240200b4170714110460d00200b21010c010b200b41017422014120200141204b1b22014100480d01200b2001460d002004200b200110252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200141606a2006490d002001210b0c010b200641206a220b2006490d012001410174220c200b200c200b4b1b220b4100480d012001200b460d0020042001200b10252204450d020b200441206a200a200610a1051a02400240200b20076b2008490d00200b21010c010b200720086a2007490d01200b41017422012002200120024b1b22014100480d01200b2001460d002004200b200110252204450d020b200420076a2009200810a1051a20002002360208200020013602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000bdd0201057f230041d0006b22022400024002400240410410212203450d00200341f0c2c98b06360000200128020021044108210120034104410810252205450d0120052004360004200241003a004820052106410021030340200241003a0008200241086a20062001410047220410a1051a024020010d00200241003a00080b20012004490d03200241286a20036a20022d00083a00002002200341016a22033a0048200120046b2101200620046a210620034120470d000b200241086a41186a2201200241286a41186a290300370300200241086a41106a2203200241286a41106a290300370300200241086a41086a2204200241286a41086a2903003703002002200229032837030820051023200041186a2001290300370000200041106a2003290300370000200041086a200429030037000020002002290308370000200241d0006a24000f0b1033000b102a000b2004200141a4b5c0001044000bfe21030b7f047e097f230041c0066b2202240002400240024020012802082203200128020c2204460d002001200341206a220536020820012802102106200241f8026a41186a200341186a290000370300200241f8026a41106a200341106a290000370300200241f8026a41086a200341086a290000370300200220032900003703f802200128021421074100210802400240024002402001411c6a280200220941014b0d0020090e020201020b2009210a0340200a410176220b20086a220c20082007200c4105746a200241f8026a412010a3054101481b2108200a200b6b220a41014b0d000b0b200720084105746a200241f8026a412010a3050d002006210c0c010b2001200641016a220c3602104108210820052004460d020240200941014d0d0003402001200541206a2203360208200241f8026a41186a200541186a290000370300200241f8026a41106a200541106a290000370300200241f8026a41086a200541086a290000370300200220052900003703f802410021082009210a0340200a410176220520086a220b20082007200b4105746a200241f8026a412010a3054101481b2108200a20056b220a41014b0d000b200720084105746a200241f8026a412010a305450d022001200c41016a220c3602102003210520032004460d030c000b0b0240024020090e020100010b03402001200541206a2208360208200241f8026a41186a200541186a290000370300200241f8026a41106a200541106a290000370300200241f8026a41086a200541086a290000370300200220052900003703f80202402007200241f8026a412010a3050d00410021080c030b2001200c41016a220c3602102008210520042008460d030c000b0b2001200436020820012006200420036b41406a4105766a41026a3602100c020b024002400240024002400240024002400240200920084d0d00200241186a200720084105746a220841186a290000220d370300200241106a200841106a290000220e370300200241086a200841086a290000220f3703002002200829000022103703002001200c41016a360210200141206a2802002108200141246a280200210a200241206a41186a200d370300200241206a41106a200e370300200241206a41086a200f370300200220103703202002200a36024c200220083602482002200c360244200241f8026a41186a4200370300200241f8026a41106a22054200370300200241f8026a41086a22084200370300200242003703f80241db97c700ad4280808080f00084100c220a290000210d2008200a41086a2900003703002002200d3703f802200a102341bbacc300ad4280808080a00184100c220a290000210d200241b8026a41086a220b200a41086a2900003703002002200d3703b802200a1023200520022903b802220d370300200241d0006a41086a2008290300370300200241d0006a41106a200d370300200241d0006a41186a200b290300370300200220022903f802370350200241f8026a200241d0006a412010890220022802f8022208410120081b210a02400240200c20022902fc02420020081b220d422088a7490d00200d42ffffff3f83500d01200a10232002280244210c0c010b200c200a200c4105746a10ac0221050240200d42ffffff3f83500d00200a10230b410221082002280244210c20050d0c0b200228024c210620022802482111411b10212208450d01200841176a41002800d7a942360000200841106a41002900d0a942370000200841086a41002900c8a942370000200841002900c0a94237000041041021220a450d01200a200c3600002008411b413610252209450d082009200a28000036001b200a1023200241b8026a41002009ad4280808080f00384220d1014108b01024002400240024020022802b8022208450d00200241c0026a280200220a4104490d00200a417c714104460d0041000d0020082800002011470d002008280004220a41036a20064b0d010b410410212208450d0b2008201136000020084104410810252208450d0b20082006360004200241d0006a41086a200241b8026a41086a280200360200200220022903b802370350200241f8026a200241d0006a10860120022802fc02210a4100200d20023502800342208620022802f802220bad842008ad4280808080800184101521050240200a450d00200b10230b02402002280250220a450d002002280254450d00200a10230b200810234104210820054101460d022006210a0c010b024020022802bc02450d00200810230b410121080b20091023200a210c0c0c0b200241f8026a10870120022802f8022212450d032002418c036a280200211320024188036a280200211420024184036a280200211520024180036a280200211620022802fc0221172002410036028003200242013703f802410410212208450d08200241043602fc02200220083602f8022008200636000020024104360280032016200241f8026a10610240024020022802fc02220520022802800322086b2016490d0020022802f802210a0c010b200820166a220a2008490d082005410174220b200a200b200a4b1b220b4100480d080240024020050d000240200b0d004101210a0c020b200b1021220a0d010c0b0b20022802f802210a2005200b460d00200a2005200b1025220a450d0a0b2002200b3602fc022002200a3602f8020b200a20086a2012201610a1051a2002200820166a360280032013200241f8026a10612013450d0220152013410c6c6a21032015210a0340200a2802002104200a41086a2802002208200241f8026a10610240024020022802fc02220b20022802800322056b2008490d0020022802f8022107200b21010c010b200520086a22072005490d09200b41017422012007200120074b1b22014100480d0902400240200b0d00024020010d00410121070c020b200110212207450d0c0c010b20022802f8022107200b2001460d002007200b200110252207450d0b0b200220013602fc02200220073602f8020b200720056a2004200810a1051a2002200520086a220836028003200a410c6a220a2003470d000c050b0b2008200941b0a9c2001030000b1033000b20022802fc02210120022802800321080c010b41012108410521060c010b02400240200120086b4104490d0020022802f802210a200121050c010b200841046a220a2008490d0320014101742205200a2005200a4b1b22054100480d030240024020010d00024020050d004101210a0c020b20051021220a450d060c010b20022802f802210a20012005460d00200a200120051025220a450d050b200220053602fc022002200a3602f8020b200a20086a20113600002002200841046a220b360280034103210702402005200b6b41034b0d00200b41046a2201200b490d03200541017422042001200420014b1b22014100480d030240024020050d00024020010d004101210a0c020b20011021220a450d060c010b20052001460d00200a200520011025220a450d050b200220013602fc022002200a3602f8020b200a200b6a200c36000020022802fc02210a200241f8026a41e9dabdf306200241206a20022802f802220b200841086a108f0141012108024020022d00f8024101470d00200241f6026a20022d00fb023a0000200241b8026a41086a2002418c036a290200370300200241c8026a20024194036a290200370300200241d0026a2002419c036a290200370300200241d8026a200241a4036a290200370300200241e0026a200241ac036a290200370300200241e5026a200241b1036a290000370000200220022f00f9023b01f402200220024184036a2902003703b802200241f8026a41086a28020021054100210820022802fc0221070b200241b4026a41026a2201200241f4026a41026a2d00003a0000200241f8016a41086a200241b8026a41086a290300370300200241f8016a41106a2204200241b8026a41106a290300370300200241f8016a41186a2203200241b8026a41186a290300370300200241f8016a41206a2218200241b8026a41206a290300370300200241f8016a41286a2219200241b8026a41286a290300370300200241f8016a41306a200241b8026a41306a290300370300200220022f01f4023b01b402200220022903b8023703f801024020080d00200241f4016a41026a20012d00003a0000200241f8026a41086a200241f8016a41086a290300370300200241f8026a41106a2004290300370300200241f8026a41186a2003290300370300200241f8026a41206a2018290300370300200241f8026a41286a2019290300370300200241f8026a412d6a200241f8016a412d6a290000370000200220022f01b4023b01f401200220022903f8013703f8020240200a450d00200b10230b200220022f01f4013b01b8022002200241f6016a2d00003a00ba02410021080c020b0240200a450d00200b10230b02402017450d00201210230b02402013450d002013410c6c210a2015210803400240200841046a280200450d00200828020010230b2008410c6a2108200a41746a220a0d000b0b4101210802402014450d002014410c6c450d00201510230b20072106200521120b0b200241b8016a41086a220a200241f8026a41086a290300370300200241b8016a41106a220b200241f8026a41106a290300370300200241b8016a41186a2201200241f8026a41186a290300370300200241b8016a41206a2204200241f8026a41206a290300370300200241b8016a41286a2203200241f8026a41286a290300370300200241b8016a412d6a2218200241f8026a412d6a290000370000200220022d00ba023a00f201200220022f01b8023b01f001200220022903f8023703b80102400240024020080d00200241d0006a41186a2013360200200241d0006a41146a2014360200200241d0006a41106a2015360200200241d0006a410c6a2016360200200241d0006a41086a2017360200200241f6006a20022d00f2013a0000200241fb006a2005360000200241f7006a2007360000200241ff006a20022903b80137000020024187016a200a2903003700002002418f016a200b29030037000020024197016a20012903003700002002419f016a2004290300370000200241a7016a2003290300370000200241ac016a20182900003700002002200c3602702002201136026c2002201236025420022006360250200220022f01f0013b017402404100280298ab474103490d00200241b8026a411c6a410e360200200241b8026a41146a410f360200200241b8026a410c6a410f3602002002410f3602bc022002200241d0006a3602d0022002200241c8006a3602c8022002200241cc006a3602c0022002200241c4006a3602b80241002802888040210841002802848040210a410028029cab472105200241b8036a41de03360200200241b0036a42df80808010370300200241ac036a41fca5c200360200200241a4036a4210370200200241a0036a41eca5c20036020020024198036a420437030020024188036a4204370300200241f8026a41086a4108360200200241f8026a411c6a200241b8026a360200200241dca9c20036028403200241e4a5c2003602fc02200241033602f802200a41a0a1c000200541024622051b200241f8026a200841b8a1c00020051b2802101102000b2002410b36029004200242023703e00320024194046a200241d0006a41e40010a1051a2002200241f8026a3602f801200241b8026a200241f8016a10b30220022802b80220022802bc0220022802c002108901210a20024190046a10b4024107210841062106200a0d010c020b4107210820064107460d010b410410212208450d022008201136000020084104410810252208450d02200841003600044100200d2008ad4280808080800184101620081023200621080b200910232012210c0c040b102c000b102a000b410821080b0b2000200c36020420002008360200200241c0066a24000bc60401067f23004190016b22022400024002402000410c6a2802002203417f4c0d0020002802042104200028020021050240024020030d0041012106410021070c010b20032107200310212206450d020b20062004200310a1052104200241f8006a200041106a10b702200241106a410c6a2003360200200241106a41086a22032007360200200241206a2002290378370300200241286a2206200241f8006a41086a280200360200200241106a412c6a2000412c6a290200370200200241106a41346a200041346a290200370200200241106a413c6a2000413c6a290200370200200241106a41c4006a200041c4006a290200370200200241106a41cc006a200041cc006a290200370200200241106a41d4006a200041d4006a290200370200200241106a41dc006a200041dc006a29020037020020022004360214200220053602102002200029021c37022c200220002902243702342002410c6a4110360200200241aca5c200360200200241043602042001411c6a28020021002002200241106a360208200128021821012002418c016a41023602002002420237027c200241b4aac200360278200220023602880120012000200241f8006a1031210102402003280200450d00200228021410230b024020062802002203450d00200228022021002003410c6c210303400240200041046a280200450d00200028020010230b2000410c6a2100200341746a22030d000b0b0240200241246a2802002200450d002000410c6c450d00200228022010230b20024190016a240020010f0b1032000b1033000bb30201037f23004180016b2202240002400240024002400240200128020022034110710d002000280200210420034120710d012004ad2001103e21000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a889c0004102200220006a4180016a410020006b104121000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a889c0004102200220006a4180016a410020006b104121000b20024180016a240020000f0b2004418001419889c0001044000b2004418001419889c0001044000bb31203077f027e057f230041c0006b22022400024002400240024041ca0310212203450d00200241ca0336020420022003360200200341003b0000200241023602082002280204210402400240200128020022032903684202520d00024020044102470d0020022802004102410410252201450d0620024104360204200220013602000b200228020041043a00022002200228020841016a3602080c010b024020044102470d0020022802004102410410252201450d0520024104360204200220013602000b20022802004184013a000220022002280208220141016a2205360208024002402002280204220620056b4120490d00200141216a210120022802002107200621040c010b200541206a22012005490d04200641017422042001200420014b1b22044100480d040240024020060d00024020040d00410121070c020b2004102122070d010c070b2002280200210720062004460d0020072006200410252207450d060b20022004360204200220073602000b200720056a22052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a29000037000020022001360208024020032d0020220541024b0d000240024002400240024020050e03000102000b410021060c020b410121060c010b41022106200241023a001041c10021050c010b200220063a001041c00021050b024020042001470d00200141016a22042001490d05200141017422082004200820044b1b22044100480d050240024020010d0041002101024020040d00410121070c020b200410212207450d080c010b20012004460d0020072001200410252207450d070b20022004360204200220073602000b200720016a20063a00002002200141016a2201360208024002402002280204220620016b2005490d0020022802002107200621040c010b200120056a22042001490d05200641017422072004200720044b1b22044100480d050240024020060d00024020040d00410121070c020b200410212207450d080c010b2002280200210720062004460d0020072006200410252207450d070b20022004360204200220073602000b200720016a200341206a41016a200510a1051a2002200120056a22013602080b0240024020032903684201520d00200329037820032903702209420c88220a4201200a4201561b80210a0240200420016b41014b0d00200141026a22052001490d06200441017422062005200620054b1b22054100480d060240024020040d00024020050d00410121070c020b200510212207450d090c010b20042005460d0020072004200510252207450d080b20022005360204200220073602000b200720016a200aa741047420097aa7417f6a22044101200441014b1b2204410f2004410f491b723b00002002200141026a3602080c010b200241003a00100240024020042001460d00200121040c010b200441016a22012004490d05200441017422052001200520014b1b22014100480d050240024020040d0041002104024020010d00410121070c020b200110212207450d080c010b20042001460d0020072004200110252207450d070b20022001360204200220073602000b200720046a41003a00002002200441016a3602080b20034190016a200210ed01200220034180016a360210200241106a200210db010b20034198016a200210dd0220022802082103410410212201450d0020024204370214200220013602102003417e6a200241106a10612002280208220341014d0d012002280218210120022802142108200220022802102206360224200241286a200620016a2204360200200241023602102002411c6a2002280200220741026a2205360200410021012002410036020820022003417e6a22033602142002200536021820022002360220200241246a210b0240024002402003450d0020062103034020032004460d032002200341016a360224200720016a20032d00003a00002002200228020841016a36020820014101460d02200141016a210120022802242103200228022821040c000b0b2002200b1082040c010b024020022802282205200228022422036b2201450d00024002402002280220220741046a280200220c2002280214220d2002280210220e6a22046b2001490d00200728020021040c010b200420016a220f2004490d05200c4101742204200f2004200f4b1b220f4100480d0502400240200c0d000240200f0d00410121040c020b200f10212204450d080c010b20072802002104200c200f460d002004200c200f10252204450d070b20072004360200200741046a200f3602000b2004200e20016a22016a2004200e6a200d10a2051a20022001360210200120072802082204460d00200420036a417f732005200e6a6a2101200728020020046a2104034020032005460d022002200341016a360224200420032d00003a00002007200728020841016a3602082001450d01200441016a21042001417f6a210120022802242103200228022821050c000b0b2002410036023820024201370330200241306a200b1082042002280234210b2002280230210e024020022802382203450d00024002402002280220220741046a28020022052002280214220c200228021022046a22016b2003490d00200728020021010c010b200120036a220d2001490d0520054101742201200d2001200d4b1b220d4100480d050240024020050d000240200d0d00410121010c020b200d10212201450d080c010b200728020021012005200d460d0020012005200d10252201450d070b20072001360200200741046a200d3602000b2001200420036a22056a200120046a200c10a2051a20022005360210200520072802082201460d00200120046b2105200728020020016a2101200e210403402003450d01200120042d00003a00002007200728020841016a360208200441016a2104200141016a210120052003417f6a2203470d000b0b200b450d00200e10230b02402002280218200228021c2203460d00200220033602180b024020022802142203450d000240200228021022072002280220220541086a22042802002201460d002005280200220520016a200520076a200310a2051a0b2004200320016a3602000b02402008450d00200610230b20002002290300370200200041086a200241086a280200360200200241c0006a24000f0b1033000b41022003103c000b102c000b102a000b9b1201037f024002402000280200220141144b0d000240024002400240024002400240024002400240024020010e15000c0c0c0c01020c030c04050c060c0708090a0c0c000b200041086a280200417e6a220141074b0d0b02400240024002400240024020010e080011010211030405000b200041106a280200450d102000410c6a28020010230f0b200041106a280200450d0f2000410c6a28020010230f0b200041106a280200450d0e2000410c6a28020010230f0b0240200041146a2802002202450d002000410c6a2802002101200241186c210203400240200141046a280200450d00200128020010230b0240200141106a280200450d002001410c6a28020010230b200141186a2101200241686a22020d000b0b200041106a2802002201450d0d200141186c450d0d200028020c10230f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d0c2001410c6c450d0c200028020c10230f0b200041106a280200450d0b2000410c6a28020010230f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a2101034020011096030240200141046a2802002203450d00200341246c450d00200128020010230b200141f0006a2101200241907f6a22020d000b0b200041086a2802002201450d0a200141f0006c450d0a200028020410230f0b0240200041086a2d0000220141174b0d000240024002400240024020010e180f0f0f0f0f0f000f0f0f0f0f0f010f0f02030f0f0f0f0f040f0b200041106a28020041ffffff3f71450d0e2000410c6a28020010230f0b200041106a28020041ffffff3f71450d0d2000410c6a28020010230f0b200041146a28020041ffffffff0371450d0c200041106a28020010230f0b200041146a2802002201450d0b200141246c450d0b200041106a28020010230f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010230b200041186a1083020f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010230b200041186a1083020f0b20002802042201450d08200041086a280200450d08200110230f0b200041086a280200450d07200028020410230f0b02402000410c6a280200450d00200041086a28020010230b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d062001410c6c450d06200028021410230f0b02402000280204220141014b0d00024020010e020700070b0240200041106a2802002202450d00200041086a280200210120024188026c21020340200110a20320014188026a2101200241f87d6a22020d000b0b2000410c6a2802002201450d0620014188026c450d06200028020810230f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d052001410c6c450d05200028020c10230f0b20002d0004417f6a220141034b0d040240024020010e0400060601000b0240200041106a280200450d002000410c6a28020010230b2000411c6a280200450d05200041186a28020010230f0b02402000410c6a280200450d00200041086a28020010230b200041186a280200450d04200041146a28020010230f0b024020002d0004220141044b0d00024002400240024020010e050800010203080b0240200041106a2802002202450d00200041086a2802002101200241b0026c210203402001109e03200141b0026a2101200241d07d6a22020d000b0b2000410c6a2802002201450d07200141b0026c450d07200028020810230f0b200041086a220128020010b402200128020010230f0b02402000410c6a28020041ffffff3f71450d00200041086a28020010230b200041206a220128020010b402200128020010230f0b2000412c6a28020041ffffff3f71450d04200041286a28020010230f0b2000412c6a28020041ffffff3f71450d03200041286a28020010230f0b200041086a2d0000417e6a220141014b0d020240024020010e020001000b0240200041146a2802002202450d002000410c6a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b0240200041106a2802002201450d00200141c8006c450d00200028020c10230b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010230b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010230b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010230b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010230b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010230b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010230b200041f0016a2d00004101470d03200041f8016a280200450d03200041f4016a28020010230f0b0240200041146a2802002201450d00200141c4006c21022000410c6a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010230b200141c4006a2101200241bc7f6a22020d000b0b200041106a2802002201450d02200141c4006c450d02200028020c10230f0b20002d0004417f6a220141024b0d010240024020010e03000301000b200041286a220128020010b402200128020010230f0b2000410c6a28020041ffffff3f71450d01200041086a28020010230c010b024020002d0004220141024b0d00024020010e03020002020b200041086a220128020010b402200128020010230f0b200041286a220128020010b402200128020010230f0b0bef0401017f230041306b220224000240024002400240024002400240024020002802000e0701020304050600010b2001411c6a2802002100200128021821012002412c6a41003602002002419ca8c7003602282002420137021c20024184a7c20036021820012000200241186a103121010c060b2002200041046a36020c2002410d3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420137021c2002418ca7c2003602182002200241106a36022820012000200241186a103121010c050b2002200041046a36020c2002410d3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c20024194a7c2003602182002200241106a36022820012000200241186a103121010c040b2002200028020436020c200241013602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c200241a4a7c2003602182002200241106a36022820012000200241186a103121010c030b2001411c6a2802002100200128021821012002412c6a41003602002002419ca8c7003602282002420137021c200241b4a7c20036021820012000200241186a103121010c020b2001411c6a2802002100200128021821012002412c6a41003602002002419ca8c7003602282002420137021c200241bca7c20036021820012000200241186a103121010c010b2001411c6a2802002100200128021821012002412c6a41003602002002419ca8c7003602282002420137021c200241c4a7c20036021820012000200241186a103121010b200241306a240020010bba0201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d002000280200210420034120710d012004ad2001103e21000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a889c0004102200220006a4180016a410020006b104121000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a889c0004102200220006a4180016a410020006b104121000b20024180016a240020000f0b2004418001419889c0001044000b2004418001419889c0001044000baf0203027f017e057f230041106b220224000240024020012802082203ad420c7e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410421060c010b200510212206450d020b200241003602082002200636020020022005410c6e3602042002410020031095012002280208210602402003450d0020012003410c6c6a210720022802002006410c6c6a21050340200141086a2802002203417f4c0d02200128020021080240024020030d00410121090c010b200310212209450d040b20092008200310a1052108200541086a2003360200200541046a2003360200200520083602002005410c6a2105200641016a21062001410c6a22012007470d000b0b20002002290300370200200041086a2006360200200241106a24000f0b1032000b1033000b980201027f230041206b2202240020022001280218419ca8c70041002001411c6a28020028020c1100003a00102002200136020841012101200241013a00112002410036020c200220003602182002200041246a36021c200241086a200241186a41c4aac20010592002411c6a41d4aac20010591a20022d0010210002400240200228020c22030d00200021010c010b0240200041ff01710d00024020034101470d0020022d001141ff0171450d00200228020822002d00004104710d0041012101200028021841979ec00041012000411c6a28020028020c1100000d010b2002280208220128021841989ec00041012001411c6a28020028020c11000021010b200220013a00100b200241206a2400200141ff01714100470b1c00200128021841e4aac200410f2001411c6a28020028020c1100000b130020004103360204200041f4aac2003602000b340020004196cdc20036020420004100360200200041146a4101360200200041106a41d8b5c200360200200041086a42073702000b130020004101360204200041f0b6c2003602000b3901017f02404110102122020d001033000b200242003700082002428080e983b1de16370000200042908080808002370204200020023602000bbd280e047f017e017f017e047f017e017f017e017f017e0e7f017e037f017e230041a0026b22012400200141286a200010bf0220014198016a41186a420037030020014198016a41106a2202420037030020014198016a41086a22034200370300200142003703980141e4dec400ad4280808080e00084100c220429000021052003200441086a290000370300200120053703980120041023419483c500ad4280808080a00284100c22042900002105200141c8006a41086a2206200441086a2900003703002001200537034820041023200220012903482205370300200141e8006a41086a2003290300370300200141e8006a41106a2005370300200141e8006a41186a200629030037030020012001290398013703682001412036023c2001200141e8006a36023820014190026a200141e8006aad220742808080808004841010108b0102400240024002400240024002400240024020012802900222040d00410221030c010b2001280294022108200120014190026a41086a28020036028c012001200436028801200141206a20014188016a108801200128022421090240024020012802200d00200141186a20014188016a10880120012802180d00200128028c01220a200128021c2203490d002003417f4c0d030240024020030d00410121060c010b200310272206450d062006200128028801220b200310a1051a2001200a20036b36028c012001200b20036a360288010b2006450d002003ad22054220862005842105410121030c010b20014100360250200142013703482001410a360284022001200141386a360280022001200141c8006a360244200141ac016a41013602002001420137029c0120014180c5c60036029801200120014180026a3602a801200141c4006a4184a5c20020014198016a10311a2001350250422086200135024884100a0240200128024c450d00200128024810230b410221030b2008450d00200410230b0240024020034102460d002005a721040240024020090d00410121030c010b4100210902402005422088a7200420034101461b4107470d00410121092006419cc9c200460d00419cc9c2002006410710a3054521090b200941017321030b02402004450d00200610230b2003450d010b200141a4016a41002902e8c8423702002001410136029801200141002902e0c84237029c01200141e8006a41186a4200370300200141e8006a41106a22064200370300200141e8006a41086a220342003703002001420037036841e4dec400ad4280808080e00084100c220429000021052003200441086a2900003703002001200537036820041023419483c500ad4280808080a00284100c2204290000210520014190026a41086a2209200441086a29000037030020012005370390022004102320062001290390022205370300200141c8006a41086a2003290300370300200141c8006a41106a2005370300200141c8006a41186a20092903003703002001200129036837034820014100360298022001420137039002410120014190026a1061200141e8006a20014198016a4104721090012001280268210a02400240200128029402220820012802980222046b20012802702206490d002001280290022103200821090c010b200420066a22032004490d07200841017422092003200920034b1b22094100480d070240024020080d00024020090d00410121030c020b2009102122030d010c0a0b200128029002210320082009460d0020032008200910252203450d090b200120093602940220012003360290020b200320046a200a200610a1051a2001200420066a2204360298020240200128026c450d00200a10230b200141c8006aad42808080808004842004ad4220862003ad84100e02402009450d00200310230b20014198016a41186a2208420037030020014198016a41106a2209420037030020014198016a41086a2206420037030020014200370398014189e3c400ad42808080808001842205100c2204290000210c200141c8006a41086a2203200441086a2900003703002001200c370348200410232006200329030037030020012001290348370398014191e3c400ad4280808080f00084100c2204290000210c2003200441086a2900003703002001200c3703482004102320092001290348220c370300200141e8006a41086a22042006290300370300200141e8006a41106a220a200c370300200141e8006a41186a220b2003290300370300200120012903980137036820074280808080800484220c101220084200370300200942003703002006420037030020014200370398012005100c220d290000210e2003200d41086a2900003703002001200e370348200d10232006200329030037030020012001290348370398014198e3c400ad4280808080e00284100c220d290000210e2003200d41086a2900003703002001200e370348200d102320092001290348220e37030020042006290300370300200a200e370300200b20032903003703002001200129039801370368200c101220084200370300200942003703002006420037030020014200370398012005100c220d29000021052003200d41086a29000037030020012005370348200d102320062003290300370300200120012903483703980141ac94c500ad4280808080a00284100c220d29000021052003200d41086a29000037030020012005370348200d102320092001290348220537030020042006290300370300200a2005370300200b20032903003703002001200129039801370368200c1012200141c8006a41186a220a4200370300200141c8006a41106a220f42003703002003420037030020014200370348418fcdc200ad4280808080f000842205100c220b290000210c2004200b41086a2900003703002001200c370368200b1023200320042903003703002001200129036837034841a48fc600ad4280808080e00184100c220b290000210c2004200b41086a2900003703002001200c370368200b1023200f2001290368220c370300200620032903003703002009200c37030020082004290300370300200120012903483703980141011021220b450d07200b41023a000020014198016aad42808080808004842210200bad42808080801084100e200b1023200a4200370300200f420037030020034200370300200142003703482005100c220b290000210c2004200b41086a2900003703002001200c370368200b10232003200429030037030020012001290368370348418cdbc100ad4280808080a00184100c220b290000210c2004200b41086a2900003703002001200c370368200b1023200f2001290368370000200f41086a220d2004290300370000200620032903003703002009200f2903003703002008200a2903003703002001200129034837039801200141106a20014198016a412010cd012001280214211120012802102112200a4200370300200f420037030020034200370300200142003703482005100c220b290000210c2004200b41086a2900003703002001200c370368200b102320032004290300370300200120012903683703484190d8c100ad4280808080c00184100c220b290000210c2004200b41086a2900003703002001200c370368200b1023200f2001290368370000200d2004290300370000200620032903003703002009200f2903003703002008200a2903003703002001200129034837039801200141086a20014198016a412010cd01200128020c2109200128020821082005100c2203290000210520014190026a41086a200341086a290000370300200120053703900220031023411010212203450d072003200129039002370000200341086a20014190026a41086a220429030037000041dcc4c000ad4280808080e00084100c220629000021052004200641086a29000037030020012005370390022006102320034110412010252203450d072003200129039002370010200341186a22062004290300370000412010212204450d032011410020121b211320042003290000370000200441186a2006290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141386a41026a220620014198016a41026a2d00003a0000200120012f0098013b0138200141c8006a41106a42a08080808004370300200141013a006020012004360254200142a0808080800437024c20012003360248200141e3006a20062d00003a0000200120012f01383b006120014198016a200141c8006a10c0020240200141d4016a28020022034102460d0041002013200941d40020081b6b2204200420134b1b2114200141d0016a2112200141c4016a211520014198016a41206a2116200141dc016a2117200141c8016a2118200141c0016a2119034020014188016a41086a221a201841086a280200360200200141e8006a41086a221b201741086a290200370300200141e8006a41106a221c201741106a290200370300200141e8006a41186a221d201741186a2902003703002001201829030037038801200120172902003703682019290300210520014198016a41186a221e290300210c20012903b801210e20012903a801211f20012802a0012120200128029c012121200128029801212220012802d8012106200141003602a001200142043703980141002104024002402006410020031b220320144922060d004100200320146b2204200420034b1b220941016a220420094f0d004104210d41012106410021084100210a201421040340200420034f210b200420042003496a210902402006417f6a200a470d0020014198016a200a417f41004100417f4100200320096b220d200d20034b1b220d41016a22112011200d491b200b1b20032009491b220d41016a22112011200d491b1079200128029801210d0b200d20086a2004360200200120063602a001200920034b200b720d02200841046a2108200641016a2106200128029c01210a200921040c000b0b20014198016a41002004107920012802a0012109024020060d0020012802980120094102746a210402400240200320144d0d0020142106034020042006360200200441046a21042003200641016a2206470d000b200320146b20096a21090c010b20032014470d010b20042003360200200941016a21090b200120093602a0010b20014180026a41086a20014198016a41086a28020022033602002001200129039801222337038002201e20053703002016200129038801370300201641086a201a28020036020020152023370200201541086a200336020020122001290368370200201241086a201b290300370200201241106a201c290300370200201241186a201d2903003702002001200e3703a8012001200c3703a0012001201f37039801202041206a2204417f4c0d032004450d04200410272203450d052004410f4d0d06418fcdc200ad4280808080f00084100c2209290000210520014190026a41086a2206200941086a290000370300200120053703900220091023200341086a200629030037000020032001290390023700002004411f4d0d0741dcc4c000ad4280808080e00084100c220929000021052006200941086a290000370300200120053703900220091023200341186a20062903003700002003200129039002370010200341206a2022202010a1051a2001200436029402200120033602900220014198016a20014190026a10850220031023024020012802bc012203450d00200341186c450d0020012802b80110230b024020012802c80141ffffffff0371450d0020012802c40110230b02402021450d00202210230b20014198016a200141c8006a10c00220012802d40122034102470d000b0b0240200128024c450d00200128024810230b02402001280258450d00200128025410230b200141c8006a41186a22094200370300200141c8006a41106a22084200370300200141c8006a41086a2204420037030020014200370348418fcdc200ad4280808080f00084100c22062900002105200141e8006a41086a2203200641086a2900003703002001200537036820061023200420032903003703002001200129036837034841f4e5c100ad4280808080a00184100c220629000021052003200641086a2900003703002001200537036820061023200f2001290368370000200f41086a200329030037000020014198016a41086a200429030037030020014198016a41106a200829030037030020014198016a41186a2009290300370300200120012903483703980120012013360268201020074280808080c00084100e4190ce0010c1020b20002802002203200041106a200041d0006a200141286a410110c202200310c30210c102200142003703900220014198016a41186a2206420037030020014198016a41106a2209420037030020014198016a41086a22034200370300200142003703980141e4dec400ad4280808080e00084100c220429000021052003200441086a29000037030020012005370398012004102341d483c500ad4280808080e00184100c22042900002105200141c8006a41086a2208200441086a290000370300200120053703482004102320022001290348370000200241086a2008290300370000200141e8006a41086a2003290300370300200141e8006a41106a2009290300370300200141e8006a41186a200629030037030020012001290398013703682001412036029c012001200141e8006a3602980120014190026a20014198016a10c40220012802282109024020012802302203450d00200341246c21042009210303400240024020032d0000220641044b0d0002400240024020060e050400010204040b2003410c6a280200450d03200341086a28020010230c030b2003410c6a280200450d02200341086a28020010230c020b2003410c6a280200450d01200341086a28020010230c010b200341086a280200450d00200341046a28020010230b200341246a21032004415c6a22040d000b0b0240200128022c2203450d00200341246c450d00200910230b200141a0026a24000f0b1032000b4110410041d492c7001043000b1033000b4110200441d492c7001043000b4120200441d093c7001043000b102c000b102a000bab03010c7f230041306b220224004100210320024100360208200242043703000240024002402001410c6a28020041246c2204450d0020012802042101410421050340024020012d00004101470d00200141106a2802002206417f4c0d03200141036a2d00002107200141016a2f00002108200141086a2802002109200141046a2d0000210a0240024020060d004101210b4100210c0c010b2006210c20061021220b450d050b20082007411074722108200b2009200610a1052109200241206a41086a220b200241106a41086a29020037030020022002290210370320200d41807e71200a72210d024020032002280204470d0020022003410110a20120022802002105200228020821030b2005200341246c6a220720063602102007200c36020c200720093602082007200d360204200720083b0001200741013a0000200741036a20084110763a0000200720022903203702142007411c6a200b2903003702002002200341016a22033602080b200141246a21012004415c6a22040d000b0b20002002290300370200200041086a200241086a280200360200200241306a24000f0b1032000b1033000bee0b09057f017e027f017e047f047e077f047e037f230041e0016b22022400200241b8016a200141146a350200422086200135020c841019108b010240024020022802b8012203450d00200141086a2104200141106a2105024002400340024002402004280200220620022902bc012207422088a722084b0d00200128020022092003460d0120092003200610a305450d010b2007a7450d04200310230c040b02402008417f4c0d000240024020080d0041012106410021090c010b20082109200810212206450d030b20062003200810a105210602402005280200450d00200128020c10230b200120083602142001200636020c200520093602002002200836025420022003360250200241d8006a2007428080808070832003ad84220a1010108b01024020022802582209450d00200228025c210b20022002280260220c36028c01200220093602880141002108200241003a00d8010240024002400240024002400340200c2008460d01200241b8016a20086a200920086a22062d00003a00002002200641016a360288012002200841016a22063a00d8012006210820064120470d000b20024198016a41086a2208200241b8016a41086a29030037030020024198016a41106a220d200241b8016a41106a29030037030020024198016a41186a220e200241b8016a41186a290300370300200220022903b801370398012002200c20066b36028c01200241186a20024188016a1080022002290318a70d04200241186a41106a290300210f20022903202110200220024188016a1080022002290300a70d04200241106a290300211120022903082112200241b8016a20024188016a10b20420022802b8012213450d0420022802bc01210c200228028c012214450d0320022802c001211520022014417f6a221636028c012002200228028801221741016a3602880120172d0000221841014b0d034100210620180e020201020b2002410036028c01200841ff0171450d03200241003a00d8010c030b20164104490d0120022014417b6a36028c012002201741056a3602880120172800012119410121060b200241e8006a41186a200e290300221a370300200241306a41086a2008290300370300200241306a41106a200d290300370300200241306a41186a201a3703002002200229039801370330410021082010211a200f211b2012211c2011211d2013211e200c211f201521200c020b200c450d00200c41186c450d00201310230b200241003602a00120024201370398012002410a36026c2002200241d0006a360268200220024198016a36029401200241013602cc01200242013702bc0120024180c5c6003602b8012002200241e8006a3602c80120024194016a4184a5c200200241b8016a10311a20023502a00142208620023502980184100a0240200228029c01450d0020022802980110230b41022106410121080b0240200b450d00200910230b20080d00200241b8016a41186a200241306a41186a290300370300200241b8016a41106a200241306a41106a290300370300200241b8016a41086a200241306a41086a290300370300200220022903303703b801024020012d0018450d00200a10110b20012802142208200141086a2802002209490d04200820096b2208417f4c0d01200128020c210c0240024020080d0041002101410121050c010b20082101200810212205450d040b2005200c20096a200810a1052109200041286a201d3702002000201c370220200041186a201b3702002000201a370210200020193602402000200636023c200020203602382000201f3602342000201e360230200020083602082000200136020420002009360200200041c4006a20022903b801370200200041cc006a200241c0016a290300370200200041d4006a200241c8016a290300370200200041dc006a200241b8016a41186a2903003702002007a7450d06200310230c060b02402007a7450d00200310230b200241b8016a2001350214422086200135020c841019108b0120022802b80122030d010c040b0b1032000b1033000b2009200841cc96c7001044000b2000410236023c0b200241e0016a24000bad0407047f017e017f017e017f017e057f230041e0006b22012400200141306a41186a22024200370300200141306a41106a22034200370300200141306a41086a220442003703002001420037033041e4dec400ad4280808080e000842205100c22062900002107200141d0006a41086a2208200641086a2900003703002001200737035020061023200420082903003703002001200129035037033041e8ffc400ad4280808080b002842207100c220629000021092008200641086a2900003703002001200937035020061023200320012903502209370300200141106a41086a220a2004290300370300200141106a41106a220b2009370300200141106a41186a220c200829030037030020012001290330370310200141086a200141106a412010cd01200128020c210d2001280208210e200242003703002003420037030020044200370300200142003703302005100c220629000021052008200641086a290000370300200120053703502006102320042008290300370300200120012903503703302007100c220629000021052008200641086a2900003703002001200537035020061023200320012903502205370300200a2004290300370300200b2005370300200c2008290300370300200120012903303703102001417f200d4100200e1b220820006a220420042008491b2208418094ebdc032008418094ebdc03491b360230200141106aad4280808080800484200141306aad4280808080c00084100e200141e0006a24000b931107047f017e017f017e037f017e017f230041e0006b2205240020054102360208200541306a41186a22064200370300200541306a41106a22074200370300200541306a41086a220842003703002005420037033041e4dec400ad4280808080e000842209100c220a290000210b200541d0006a41086a220c200a41086a2900003703002005200b370350200a10232008200c2903003703002005200529035037033041d483c500ad4280808080e00184100c220a290000210b200c200a41086a2900003703002005200b370350200a102320072005290350220b370300200541106a41086a220a2008290300370300200541106a41106a220d200b370300200541106a41186a220e200c29030037030020052005290330370310200541203602342005200541106a360230200541086a200541306a10c4022005410036023041d7ddc400ad4280808080800284200541306aad4280808080c00084220f100e200642003703002007420037030020084200370300200542003703302009100c2210290000210b200c201041086a2900003703002005200b370350201010232008200c2903003703002005200529035037033041f3dec400ad4280808080e00084100c2210290000210b200c201041086a2900003703002005200b3703502010102320072005290350220b370300200a2008290300370300200d200b370300200e200c2903003703002005200529033037031020052000360230200541106aad4280808080800484220b200f100e200642003703002007420037030020084200370300200542003703302009100c2210290000210f200c201041086a2900003703002005200f370350201010232008200c290300370300200520052903503703304191dfc400ad4280808080e00084100c2210290000210f200c201041086a2900003703002005200f3703502010102320072005290350220f370300200a2008290300370300200d200f370300200e200c29030037030020052005290330370310200541203602342005200541106a36023020032802002003280208200541306a10f802200642003703002007420037030020084200370300200542003703302009100c22062900002109200c200641086a29000037030020052009370350200610232008200c2903003703002005200529035037033041f9dec400ad4280808080a00184100c22062900002109200c200641086a2900003703002005200937035020061023200720052903502209370300200a2008290300370300200d2009370300200e200c29030037030020052005290330370310024041201021220c450d00200c2001290000370000200c41186a200141186a290000370000200c41106a200141106a290000370000200c41086a200141086a290000370000200b200cad4280808080800484100e200c1023200541306a2000417f6a10d403200535023821092005280230210841201021220c450d00200c2001290000370000200c41186a200141186a290000370000200c41106a200141106a290000370000200c41086a200141086a29000037000020094220862008ad84200cad4280808080800484100e200c102302402005280234450d00200810230b200541306a41186a22064200370300200541306a41106a220a4200370300200541306a41086a220842003703002005420037033041e4dec400ad4280808080e00084100c22012900002109200541d0006a41086a220c200141086a29000037030020052009370350200110232008200c290300370300200520052903503703304183dfc400ad4280808080e00184100c22012900002109200c200141086a290000370300200520093703502001102320072005290350370000200741086a200c290300370000200541106a41086a2008290300370300200541106a41106a200a290300370300200541106a41186a20062903003703002005200529033037031041201021220c450d00200c2002290000370000200c41186a200241186a290000370000200c41106a200241106a290000370000200c41086a200241086a290000370000200b200cad4280808080800484100e200c102302402004450d00200541306a41186a22014200370300200541306a41106a22024200370300200541306a41086a220842003703002005420037033041e4dec400ad4280808080e000842209100c2206290000210f200541d0006a41086a220c200641086a2900003703002005200f370350200610232008200c2903003703002005200529035037033041c0e3c400ad4280808080e00084100c2206290000210f200c200641086a2900003703002005200f3703502006102320072005290350370000200741086a2206200c290300370000200541106a41086a220a2008290300370300200541106a41106a220d2002290300370300200541106a41186a220e200129030037030020052005290330370310200b1011200142003703002002420037030020084200370300200542003703302009100c2203290000210f200c200341086a2900003703002005200f370350200310232008200c2903003703002005200529035037033041e481c500ad4280808080a00184100c2203290000210f200c200341086a2900003703002005200f37035020031023200720052903503700002006200c290300370000200a2008290300370300200d2002290300370300200e200129030037030020052005290330370310200b1011200142003703002002420037030020084200370300200542003703302009100c22032900002109200c200341086a29000037030020052009370350200310232008200c2903003703002005200529035037033041eae9c400ad4280808080b00184100c22032900002109200c200341086a2900003703002005200937035020031023200720052903503700002006200c290300370000200a2008290300370300200d2002290300370300200e200129030037030020052005290330370310200b10120b200541e0006a24000f0b1033000ba67e07047f017e047f017e1b7f097e037f230022012102200141e0196b41607122032400200320003602182003418094ebdc0336021c200341f8076a2000108a0420032802f8072104200320032802800822013602e407200320043602e007200341b00a6a2001ad4220862004ad8422051010108b01024002400240024002400240024020032802b00a22060d00410021010c010b20032802b40a21072003200341b80a6a2802003602a40f200320063602a00f200341106a200341a00f6a1088010240024002402003280210450d0041002101200341003602e80c410121080c010b2003280214220920032802a40f220141d0026e2208200820094b1bad42d0027e220a422088a70d04200aa7220b417f4c0d0402400240200b0d004108210c0c010b200b1021220c450d040b41002108200341003602b80f2003200c3602b00f2003200b41d0026e3602b40f0240024020090d000c010b2009417f6a210b0340024002402001450d0020032802a00f220d2d0000210e20032001417f6a220f3602a40f2003200d41016a3602a00f200e41014b0d00410221090240200e0e020200020b024002400240200f0d00410221090c010b200d2d0001210e20032001417e6a220f3602a40f410221092003200d41026a3602a00f02400240200e41014b0d0041002101024002400240200e0e020100010b200341086a200341a00f6a10880120032802080d0220032802a40f200328020c220e490d02200e417f4c0d0e02400240200e0d00410121010c010b200e10272201450d0e20032802a40f200e490d02200120032802a00f200e10a1051a20032802a40f220d200e490d042003200d200e6b3602a40f200320032802a00f200e6a3602a00f0b2001450d02200ead220a422086200a84210a20032802a40f210f0b200aa7210e02400240024002400240200f450d0020032802a00f22102d0000210d2003200f417f6a3602a40f2003201041016a3602a00f200341a0146a200341a00f6a10990320032802a0144116460d0320034180176a200341a0146a41b00210a1051a20032802a40f220f450d0420032802a00f22112d000021102003200f417f6a22123602a40f2003201141016a3602a00f201041014b0d044100210920100e020201020b2001450d07200e450d070c040b20124104490d02201128000121102003201141056a3602a00f2003200f417b6a22093602a40f20094104490d02201128000521132003200f41776a3602a40f2003201141096a3602a00f41012109201021140b200a422088a72115200341a0146a20034180176a41b00210a1051a200320032800f0073602d8072003200341f0076a41036a2800003600db070c060b2001450d04200e450d040c010b20034180176a10b4022001450d01200e450d010b200110230b2016210d2017210e20182101410221090c020b200e200d418ca9c0001044000b2016210d2017210e201821010b200341e8116a200341a0146a41b00210a1051a200320032800db0736008b05200320032802d80736028805024020094102460d00200341d8026a200341e8116a41b00210a1051a2003200328008b053600d30220032003280288053602d00220152119200e211a2001211b200d211c2013211d2014211e200d2116200e2117200121180c020b200d2116200e2117200121180b410321090b200341a0056a200341d8026a41b00210a1051a200320032800d30236009b05200320032802d00236029805024020094103460d00200341206a200341a0056a41b00210a1051a2003200328009b05360093052003200328029805360290050240200820032802b40f470d00200341b00f6a2008410110ab0120032802b00f210c20032802b80f21080b200c200841d0026c6a200341206a41b00210a105220141c8026a201c3a0000200141c4026a201d3602002001201e3602c002200120093602bc02200120193602b8022001201a3602b4022001201b3602b002200141c9026a200328029005360000200141cc026a2003280093053600002003200841016a22083602b80f200b450d02200b417f6a210b20032802a40f21010c010b0b200341003602e80c02402008450d00200841d0026c2108200c210103400240200141bc026a2802004102460d000240200141b0026a2802002209450d00200141b4026a280200450d00200910230b2001109e030b200141d0026a2101200841b07d6a22080d000b0b024020032802b40f2201450d00200141d0026c450d00200c10230b41002101410121080c010b200341e80c6a41086a200341b00f6a41086a280200360200200320032903b00f220a3703e80c200aa722014521082001450d0020032902ec0c210a0c010b200341003602881720034201370380172003410a3602ec112003200341e0076a3602e811200320034180176a3602b00f200341b4146a4101360200200342013702a41420034180c5c6003602a0142003200341e8116a3602b014200341b00f6a4184a5c200200341a0146a10311a20033502881742208620033502801784100a0240200328028417450d0020032802801710230b0b02402007450d00200610230b02402008450d00410021010c010b200510110b200a420020011b210a024020032802fc07450d00200410230b2001410820011b221f200a422088a7220841d0026c220b6a2109200aa72120201f2101024002402008450d00200b41b07d6a210c200341e8116a41046a2117200341b00f6a41046a210f200341e80c6a41046a21074100210b201f210102400340200341206a200141b00210a1051a200141c8026a2d00002104200141c4026a280200210d200141c0026a2802002119200141b8026a280200211a200141b4026a280200211b200141b0026a2802002106200141bc026a28020021082003200141cc026a280000360093052003200141c9026a28000036029005024020084103470d00200141d0026a21010c030b2007200341206a41b00210a1052116200341b00f6a200341e80c6a41b40210a1051a200341d8026a200f41b00210a1051a20032003280093053600d30220032003280290053602d0020240024020084102470d004101210e0c010b2017200341d8026a41b00210a1051a200341b00a6a200341e8116a41b40210a1051a200320032800d3023600f307200320032802d0023602f0074100210e20062118201b2115201a211320042114200d211020192111200b21120b200341f8076a200341b00a6a41b40210a1051a200320032800f3073600db07200320032802f0073602d807200e450d01200b41016a210b200c41b07d6a210c200141d0026a22012009470d000b200921010c010b200341a0056a200341f8076a41b40210a1051a200320032800db0736009b05200320032802d80736029805200341a0146a200341a0056a41b40210a1051a2003200328009b053600a30f20032003280298053602a00f200141d0026a210120084102460d0020034180176a200341a0146a41b40210a1051a200320032800a30f3600e307200320032802a00f3602e007200341a0146a20034180176a41b40210a1051a200320032800e3073600eb11200320032802e0073602e81141d80210212207450d0220072012360200200741046a200341a0146a41b40210a1051a200720143a00d002200720103602cc02200720113602c802200720083602c402200720133602c002200720153602bc02200720183602b802200720032802e8113600d102200741d4026a20032800eb113600002009210802400240200c450d00200b41016a210c200341e80c6a41046a210602400340200341a0056a200141b00210a1051a200141c8026a2d0000210e200141c4026a2802002104200141c0026a280200210d200141b8026a2802002119200141b4026a280200211a200141b0026a280200211b200141bc026a280200210b2003200141cc026a2800003600f3072003200141c9026a2800003602f0070240200b4103470d00200141d0026a21080c030b2006200341a0056a41b00210a1051a200341b00f6a200341e80c6a41b40210a1051a200341d8026a200f41b00210a1051a200320032800f3073600d302200320032802f0073602d00202400240200b4102470d00410121080c010b2017200341d8026a41b00210a1051a200341b00a6a200341e8116a41b40210a1051a200320032800d3023600a30f200320032802d0023602a00f200320032802a00f36029805200320032800a30f36009b0541002108201b2121201a212220192123200e211c2004211d200d211e200c21240b200341f8076a200341b00a6a41b40210a1051a2003200328009b05360093052003200328029805360290052008450d01200c41016a210c200141d0026a22012009470d000b200921080c010b200341a0146a200341f8076a41b40210a1051a2003412c6a200328009305360000200320233602dc16200320223602d816200320213602d4162003201c3a00282003201d3602242003201e3602202003200328029005360029200141d0026a21084101211c0240200b4102470d004101211d0c020b200c41016a210120034180176a200341a0146a41c00210a1051a200341e0076a41086a2206200341206a41086a290300370300200320032903203703e007200341a90f6a211e4101211d4101211c024002400340200341a0146a20034180176a41c00210a1051a200341e8116a41086a220e2006290300370300200320032903e0073703e8110240201c201d470d000240024002400240201d41016a220c201d490d00201d4101742204200c2004200c4b1bad42d8027e220a422088a70d00200aa7220c4100480d000240201d0d00200c0d02410821070c040b201d41d8026c2204200c460d0320040d02200c0d01410821070c030b102c000b200c102122070d010c040b20072004200c10252207450d030b200c41d8026e211d0b2007201c41d8026c6a220c2024360200200c41046a200341a0146a41c00210a1051a200c41c4026a200b360200200c41c8026a20032903e811370300200c41d0026a200e290300370300201c41016a211c024020082009470d00200921080c050b02400340200341206a200841b00210a1051a200841c8026a2d0000210e200841c4026a2802002104200841c0026a280200210d200841b8026a2802002119200841b4026a280200211a200841b0026a280200211b200841bc026a280200210b2003200841cc026a280000360093052003200841c9026a280000360290050240200b4103470d00200841d0026a21080c070b2016200341206a41b00210a1051a200341b00f6a200341e80c6a41b40210a1051a200341d8026a200f41b00210a1051a20032003280093053600d30220032003280290053602d00202400240200b4102470d004101210c0c010b2017200341d8026a41b00210a1051a200341b00a6a200341e8116a41b40210a1051a200320032800d30236008b05200320032802d0023602880520032003280288053602f0072003200328008b053600f3074100210c201b2118201a211520192113200e211420042110200d2111200121120b200341f8076a200341b00a6a41b40210a1051a200320032800f3073600db07200320032802f0073602d807200c450d01200141016a2101200841d0026a22082009470d000b200921080c050b200341a0056a200341f8076a41b40210a1051a200320032800db0736009b05200320032802d80736029805200341a0146a200341a0056a41b40210a1051a201e200328029805360000201e41036a200328009b05360000200320133602dc16200320153602d816200320183602d416200320143a00a80f200320103602a40f200320113602a00f200b4102460d02200841d0026a2108200141016a210120034180176a200341a0146a41c00210a1051a2006200341a00f6a41086a290300370300200320032903a00f3703e007201221240c000b0b102a000b200841d0026a21080c010b4101211c4101211d0b024020092008460d000340200841d0026a21010240200841bc026a2802004102460d000240200841b0026a280200220b450d00200841b4026a280200450d00200b10230b2008109e030b2001210820092001470d000b0b02402020450d00202041d0026c450d00201f10230b0240201c4115490d00201c410176ad42d8027e220a422088a70d04200aa72210417f4c0d04201010212215450d034100210120034100360288172003420437038017200741a87d6a2113200741c87a6a21144104210841002106201c210f0340200f21044100210f4101210e02402004417f6a2216450d000240024002400240024002402007201641d8026c6a41d0026a2d0000200441d8026c221920076a41a07d6a2d0000220b490d002004417e6a210d201420196a210c4100210f4100210903400240200d2009470d002004210e0c080b200941016a2109200b41ff0171210e200c2d0000210b200c41a87d6a210c200e200b4f0d000b200941016a210e2009417f7320046a21090c010b201420196a210c2016210902400340024020094101470d00410021090c020b2009417f6a2109200b41ff0171210e200c2d0000210b200c41a87d6a210c200e200b490d000b0b20042009490d022004201c4b0d01200420096b220e410176220d450d002007200941d8026c6a210b201320196a210c0340200341a0146a200b41d80210a1051a200b200c41d80210a20541d8026a210b200c200341a0146a41d80210a10541a87d6a210c200d417f6a220d0d000b0b024020090d002009210f0c050b0240200e41094d0d002009210f0c050b2004201c4b0d022007200941d8026c6a2119034020042009417f6a220f490d0402402004200f6b220e4102490d002007200941d8026c6a220c41d0026a2d00002007200f41d8026c6a220b41d0026a2d0000221b4f0d00200341a0146a200b41d00210a1051a2003200b41d4026a2800003600f3072003200b41d1026a2800003602f007200b200c41d80210a105211a0240200e4103490d002016210d2019210b201a4180086a2d0000201b4f0d000340200b200b41d8026a220c41d80210a105211a2009200d417f6a220d460d01200c210b201a4180086a2d0000201b490d000b0b200c200341a0146a41d00210a105220941d0026a201b3a0000200941d1026a20032802f007360000200941d4026a20032800f3073600000b200f450d05201941a87d6a2119200f2109200e410a4f0d050c000b0b2004201c41d089c7001043000b2009200441d089c7001044000b20042009417f6a220f490d002004201c41e089c7001043000b200f200441e089c7001044000b02402006200328028417470d0020034180176a2006410110a5012003280280172108200328028817220121060b200820064103746a2209200e3602042009200f3602002003200141016a22013602881720012106024020014102490d000240024003400240024002400240024020082001417f6a4103746a2209280200450d00200141037420086a220e41746a280200220c2009280204220b4b0d010b20014103490d022009280204210b20082001417d6a221a4103746a28020421090c010b41022106200141024d0d0620082001417d6a221a4103746a2802042209200b200c6a4d0d0041032106200141034d0d06200e41646a2802002009200c6a4b0d050b2009200b490d010b2001417e6a211a0b02400240024002400240024002402001201a41016a221b4d0d002001201a4d0d012008201a41037422166a2201280204221720012802006a22012008201b41037422186a22082802002206490d022001201c4b0d032007200641d8026c6a220d2008280204221941d8026c22086a210b200141d8026c210e200120066b220c20196b220120194f0d042015200b200141d8026c220810a105220c20086a210920194101480d0520014101480d052013200e6a210e200b21080340200e200841a87d6a220b200941a87d6a2204200941786a2d0000200841786a2d00004922011b41d80210a105210e2009200420011b21090240200d200b200820011b2208490d00200c21010c080b200e41a87d6a210e200c2101200c2009490d000c070b0b201b200141f089c7001030000b201a200141808ac7001030000b2006200141908ac7001044000b2001201c41908ac7001043000b2015200d200810a105220120086a2109024020194101480d00200c20194c0d002007200e6a210420012101200d21080340200b2001200b41d0026a2d0000200141d0026a2d000049220c1b210e2001200141d8026a200c1b21012008200e41d80210a10541d8026a2108200b41d8026a200b200c1b220b20044f0d03200920014b0d000c030b0b200d2108200121010c010b200b2108200c21010b20082001200920016b2209200941d802706b10a1051a02402003280288172201201a4d0d00200328028017220820166a2209201720196a360204200920063602002001201b4d0d02200820186a2209200941086a2001201b417f736a41037410a2051a20032001417f6a220136028817200141014b0d010c030b0b201a200141a08ac7001030000b201b2001103b000b200121060b200f0d000b024020032802841741ffffffff0171450d00200810230b201041d802702101201041d802490d0220102001460d02201510230c020b201c4102490d01201c417f6a21082007201c41d8026c6a210b4100210c0340024002400240201c20082201417f6a2208490d00201c20086b220e4102490d022007200141d8026c6a220141d0026a2d00002007200841d8026c6a220941d0026a2d000022044f0d02200341a0146a200941d00210a1051a2003200941d4026a2800003600f3072003200941d1026a2800003602f0072009200141d80210a105210d200e4103490d01200c2109200b210e200d4180086a2d000020044f0d010340200e220141a87d6a200141d80210a1051a2009417f6a2209450d02200141d8026a210e200141a8056a2d000020044f0d020c000b0b2008201c41c089c7001044000b2001200341a0146a41d00210a105220141d0026a20043a0000200141d1026a20032802f007360000200141d4026a20032800f3073600000b200c41016a210c200b41a87d6a210b20080d000c020b0b024020092001460d000340200141d0026a21080240200141bc026a2802004102460d000240200141b0026a280200220b450d00200141b4026a280200450d00200b10230b2001109e030b2008210120092008470d000b0b4100211d4108210702402020450d00202041d0026c450d00201f10230b4100211c0b200341003602b00a200341d00f6a200341b00a6a360200200341cc0f6a200341186a360200200342003703c00f20032007201c41d8026c6a3602bc0f200320073602b80f2003201d3602b40f200320073602b00f20032003411c6a3602c80f20034180176a200341b00f6a108b04024002400240024020032802bc194103460d00200341a0146a20034180176a41d00210a1051a41d0021021220b450d04200b200341a0146a41d00210a105210120034281808080103702ec0c200320013602e80c200341e8116a41206a200341b00f6a41206a280200360200200341e8116a41186a200341b00f6a41186a290300370300200341e8116a41106a200341b00f6a41106a290300370300200341e8116a41086a200341b00f6a41086a290300370300200320032903b00f3703e81120034180176a200341e8116a108b04024020032802bc194103470d00410121080c020b4102210841d0022101410121090340200341a0146a20034180176a41d00210a1051a02402008417f6a2009470d00200341e80c6a2009410110ab0120032802e80c210b0b200b20016a200341a0146a41d00210a1051a200320083602f00c20034180176a200341e8116a108b0420032802bc194103460d02200141d0026a2101200841016a210820032802ec0c21090c000b0b20032802bc0f20032802b80f22096b220141d8026d210802402001450d00200841d8026c2108200941bc026a2101034002402001417c6a2802002209450d002001280200450d00200910230b200141cc7d6a109e03200141d8026a2101200841a87d6a22080d000b0b024020032802b40f2201450d00200141d8026c450d0020032802b00f10230b4100210c4108210b0c010b20032802f41120032802f011220c6b220141d8026d210902402001450d00200941d8026c2109200c41bc026a2101034002402001417c6a280200220c450d002001280200450d00200c10230b200141cc7d6a109e03200141d8026a2101200941a87d6a22090d000b0b024020032802ec112201450d00200141d8026c450d0020032802e81110230b20032802ec0c210c2008450d00200328021841016a200b2008108c04200841d0026c210820032802b00a2125200b210103400240200141bc026a2802004102460d000240200141b0026a2802002209450d00200141b4026a280200450d00200910230b2001109e030b200141d0026a2101200841b07d6a22080d000c020b0b20032802b00a21250b0240200c450d00200c41d0026c450d00200b10230b200341e8116a41086a2208420037030041002104200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210a20012d0008210920011023200320032800a30f3600b30a200320032802a00f3602b00a41fcdfc300ad4280808080f00184100c22012900002105200341a00f6a41086a220b200141086a290000370300200320053703a00f200110232008200b2903002205370300200341a0146a410c6a20032800b30a360000200341b8146a2005370200200320032903a00f22053703e811200320093a00a8142003200a3702a014200320032802b00a3600a914200320053702b01420034180176a200341a0146a108f03024002400240200328028017220b0d0041002109200341003602b80f200342043703b00f4104210b41002101410021084100210441002115410421180c010b200329028417210a2003200b3602b00f2003200a3702b40f200aa721090240200a422088a7220141024f0d004104211820012108410021150c010b200b2802082104200b2802042115200b2802002118200b200b410c6a2001417f6a2201410c6c10a2051a200320013602b80f41012108200141014b0d010b0340024020082009470d00200341b00f6a2009410110950120032802b00f210b20032802b80f220121080b200b2008410c6c6a22084100360208200842043702002003200141016a22013602b80f200141014b0d0120032802b40f2109200121080c000b0b200341b0146a2122200341a9146a212320034180176a41086a2208200341b00f6a41086a280200360200200320032903b00f220a3703801702400240200aa7220b0d00200341e8116a41086a22084200370300200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210a20012d0008210920011023200320032800a30f3600b30a200320032802a00f3602b00a41fcdfc300ad4280808080f00184100c22012900002105200341a00f6a41086a220b200141086a290000370300200320053703a00f200110232008200b2903002205370300200320032903a00f22263703e811202320032802b00a360000202341036a20032800b30a36000020222026370000202241086a2005370000200320093a00a8142003200a3702a014200341a0146aad428080808080048410110c010b200341e8116a41086a22094200370300200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210a20012d0008210c20011023200320032800a30f3600b30a200320032802a00f3602b00a41fcdfc300ad4280808080f00184100c22012900002105200341a00f6a41086a220e200141086a290000370300200320053703a00f200110232009200e2903002205370300200320032903a00f22263703e811202320032802b00a360000202341036a20032800b30a36000020222026370000202241086a20053700002003200c3a00a8142003200a3702a014200341203602ec112003200341a0146a3602e81120034180176a200341e8116a109003024020082802002201450d002001410c6c2108200b210103400240200141046a2802002209450d00200941246c450d00200128020010230b2001410c6a2101200841746a22080d000b0b2003280284172201450d002001410c6c450d00200b10230b200341e8116a41086a220842003703004100211a200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210a20012d0008210920011023200320032800a30f3600b30a200320032802a00f3602b00a41a4e2c300ad4280808080a00184100c22012900002105200341a00f6a41086a220b200141086a290000370300200320053703a00f200110232008200b2903002205370300200320032903a00f22263703e811202320032802b00a360000202341036a20032800b30a36000020222026370000202241086a2005370000200320093a00a8142003200a3702a01420034180176a200341a0146a108f03200329028417420020032802801722081b220a422088a72219410c6c21012008410420081b220d41746a210841012109024003402009211b024020010d000c020b200141746a2101201b41016a2109200841146a210b2008410c6a220c2108200b280200220b450d000b20034180176a41086a200c2802002201410c6a29020037030020034190176a200141146a29020037030020032001290204370380172001411c6a29020021272001280200210e2001200141246a200b417f6a220841246c10a2051a200c41086a20083602004101211a0b2003200d3602e80c2003200a3702ec0c200341e8116a41086a22084200370300200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210520012d0008210920011023200320032800a30f3600b30a200320032802a00f3602b00a41a4e2c300ad4280808080a00184100c22012900002126200341a00f6a41086a220b200141086a290000370300200320263703a00f200110232008200b2903002226370300200320032903a00f22283703e811202320032802b00a360000202341036a20032800b30a36000020222028370000202241086a2026370000200320093a00a814200320053702a014200341203602ec112003200341a0146a3602e811200341e80c6a200341e8116a109003200aa7210b02402019450d002019410c6c2108200d210103400240200141046a2802002209450d00200941246c450d00200128020010230b2001410c6a2101200841746a22080d000b0b0240200b450d00200b410c6c450d00200d10230b200341b00f6a41086a220b20034180176a41086a290300370300200341b00f6a41106a220c20034180176a41106a29030037030020032003290380173703b00f410021060240201a450d00200441246c2101201821080340024020010d00410121060c020b2001415c6a210120082802002109200841246a21082009200e470d000b410021060b200341e8116a41086a22084200370300200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210a20012d0008210920011023200320032800a30f3600b30a200320032802a00f3602b00a41b0dfc300ad4280808080a00184100c22012900002105200341a00f6a41086a220d200141086a290000370300200320053703a00f200110232008200d2903002205370300200320032903a00f22263703e811202320032802b00a360000202341036a20032800b30a36000020222026370000202241086a2005370000200320093a00a8142003200a3702a01420034180176a200341a0146a10c9032003280280172101200329028417210a200341003602f00c200342043703e80c200341e8116a41106a200c2903003703002008200b290300370300200320032903b00f3703e8112001410420011b211c2018200441246c22086a210f024002400240024002400240200a420020011b2229422088a7220b41027422094102752201200841246d6a22082001490d00200820066a220120084f0d010b201c20096a21072003200e360284172003200636028017200320032903e811370388172003200341f0116a290300370290172003200341e8116a41106a2903003703981741282108410421174104211a410021164100210d2018210b201c21190240410041ff01710e03020300020b410021010c030b200341e80c6a4100200110a60120032802e80c211720032802f00c21162003200e360284172003200636028017200320032903e811370388172003200341f0116a290300370290172003200341f8116a2903003703981720172016412c6c6a21010240200b450d002016200b4102742209417c6a4102766a210c201c210803402008280200210b200141246a41023602002001200b3602002001412c6a2101200841046a21082009417c6a22090d000b200c41016a21160b0240202942ffffffff0383500d00201c10230b02402004450d00200341b8146a2109200341b0146a210b200341a8146a210c2018210803402008280200210e20092008411c6a290200370300200b200841146a290200370300200c2008410c6a2902003703002003200841046a2902003703a0142001200e360200200141046a20032903a0143702002001410c6a200c290300370200200141146a200b2903003702002001411c6a2009290300370200200141246a42013702002001412c6a2101201641016a2116200841246a2208200f470d000b0b02402015450d00201541246c450d00201810230b200329038817210520032903901721262003290398172128200329038017210a200341003602a0140240200aa74101470d00200a422088a7210820032903b814212a20032903b014212b20032903a814212c20032903a014210a0340202a212d202b212e202c212920012008360200200141046a2005370200200141286a201b360200200141246a41013602002001411c6a20273702002001410c6a2026370200200141146a2028370200200341003602a0142001412c6a2101201641016a2116200aa72109200a422088a7210820032903b814212a20032903b014212b20032903a814212c20032903a014210a20292105202e2126202d212820094101460d000b0b200320163602f00c0c030b410121010c010b410221010b034002400240024002400240024002400240024020010e03000104040b200341003602a0142003290398172126200320032903b814370398172003290390172105200320032903b01437039017200329038817210a200320032903a814370388172003290380172128200320032903a014222a370380172028a74101470d042028422088a7210c202aa721060c010b0240024002400240200d41ff01710e03010200010b200f200b470d044102210d0c020b024020072019470d000240200f200b470d004102210d0c030b200b41146a2902002126200b410c6a2902002105200b411c6a290200212b200b290204210a4101210e4102210d200b2101200b41246a210b0c080b4102210e4100210d20192101201941046a21190c070b20072019470d054101210d0b200341003602a0142003290398172126200320032903b814370398172003290390172105200320032903b01437039017200329038817210a200320032903a814370388172003290380172128200320032903a014222a370380172028a74101470d032028422088a7210c202aa721060b4101210e4102210920272128201b21040c050b200b41146a2902002126200b410c6a2902002105200b411c6a290200212b200b290204210a4101210e4102210d200b2101200b41246a210b0c030b024002400240200d41ff01710e03010200010b200f200b460d02200b41146a2902002126200b410c6a2902002105200b411c6a2902002128200b290204210a200b280200210c41002104410121094102210d200b41246a210b4101210e0c050b024020072019470d00200f200b460d02200b41146a2902002126200b410c6a2902002105200b411c6a2902002128200b290204210a200b280200210c41002104410121094102210d200b41246a210b4101210e0c050b2019280200210c4102210e410121094100210d201941046a21190c040b20072019460d002019280200210c4102210e4101210d201941046a2119410121090c030b0240202942ffffffff0383500d00201c10230b2015450d04201541246c450d04201810230c040b4102210e4101210d20192101202c210a202d2105202e2126201941046a21190b2001280200210c41002109200a212c2005212d2026212e202b2128410021040b0240201620032802ec0c470d00024002400240024020090e03010200010b200641014621010c020b0240024002400240200d41ff01710e03010200010b200f200b6b41246d21010c020b417f200720196b4102752201200f200b6b41246d6a221a201a2001491b21010c010b200720196b41027521010b417f200120064101466a221a201a2001491b21010c010b024002400240200d41ff01710e03010200010b200f200b6b41246d21010c020b417f200720196b4102752201200f200b6b41246d6a221a201a2001491b21010c010b200720196b41027521010b200341e80c6a2016417f200141016a221a201a2001491b10a60120032802e80c2217211a0b201a20086a220120043602002001417c6a200e360200200141746a2028370200200141586a200c3602002001415c6a220120053702082001200a370200200141106a20263702002003201641016a22163602f00c2008412c6a2108024002400240200941ff01710e03000102000b410121010c020b410221010c010b410021010c000b0b20032802ec0c212f20164115490d032016410176ad422c7e220a422088a70d01200aa72230417f4c0d0120301021221f450d004100210120034100360288172003420437038017201741546a21212017412c6a2131201741fc7e6a212441042109410021202016210703402007210d41002107410121040240200d417f6a220c450d000240024002400240024002402017200c412c6c6a280200200d412c6c221a20176a41a87f6a2802002208490d00200d417e6a21192024201a6a210c410021074100210b034002402019200b470d00200d21040c080b200b41016a210b2008200c280200220e4f2104200c41546a210c200e210820040d000b200b41016a2104200b417f73200d6a210c0c010b2024201a6a210b024003400240200c4101470d004100210c0c020b200c417f6a210c2008200b280200220e492104200b41546a210b200e210820040d000b0b200d200c490d01200d20164b0d02200d200c6b2204410176220e450d002017200c412c6c6a21082021201a6a210b0340200341a0146a41286a2219200841286a221a280200360200200341a0146a41206a221b200841206a2206290200370300200341a0146a41186a220f200841186a2207290200370300200341a0146a41106a2218200841106a221c290200370300200341a0146a41086a2215200841086a2213290200370300200320082902003703a014200b41086a2214290200210a200b41106a22102902002105200b41186a22112902002126200b41206a22122902002128200b41286a221d280200211e2008200b290200370200201a201e3602002006202837020020072026370200201c20053702002013200a370200201d20192802003602002012201b2903003702002011200f2903003702002010201829030037020020142015290300370200200b20032903a0143702002008412c6a2108200b41546a210b200e417f6a220e0d000b0b0240200c0d00200c21070c050b0240200441094d0d00200c21070c050b200d20164b0d02200d200c6b210e2031200c412c6c6a21190340200d200c417f6a2207490d040240200d20076b22044102490d002017200c412c6c6a220828020020172007412c6c6a220c28020022064f0d00200341a0146a41206a220f200c41246a290200370300200341a0146a41186a2218200c411c6a290200370300200341a0146a41106a221c200c41146a290200370300200341a0146a41086a2215200c410c6a290200370300200c290204210a200c41286a200841286a2802003602002003200a3703a014200c41206a200841206a290200370200200c41186a200841186a290200370200200c41106a200841106a290200370200200c41086a200841086a290200370200200c20082902003702004101210b024020044103490d00200c28025820064f0d004102211a2019211b0340201b220841546a220b2008290200370200200b41286a200841286a280200360200200b41206a200841206a290200370200200b41186a200841186a290200370200200b41106a200841106a290200370200200b41086a200841086a290200370200200e201a220b460d01200b41016a211a2008412c6a221b2802002006490d000b0b20082006360200200c200b412c6c6a220820032903a014370204200841246a200f2903003702002008411c6a2018290300370200200841146a201c2903003702002008410c6a20152903003702000b2007450d05201941546a2119200e41016a210e2007210c2004410a4f0d050c000b0b200c200d41d089c7001044000b200d201641d089c7001043000b200d200c417f6a2207490d00200d201641e089c7001043000b2007200d41e089c7001044000b02402020200328028417470d0020034180176a2020410110a5012003280280172109200328028817220121200b200920204103746a22082004360204200820073602002003200141016a22013602881720012120024020014102490d000240024003400240024002400240024020092001417f6a4103746a2208280200450d00200141037420096a220e41746a280200220c2008280204220b4b0d010b20014103490d022008280204210b20092001417d6a221b4103746a28020421080c010b41022120200141024d0d0620092001417d6a221b4103746a2802042208200b200c6a4d0d0041032120200141034d0d06200e41646a2802002008200c6a4b0d050b2008200b490d010b2001417e6a211b0b02400240024002400240024002402001201b41016a22064d0d002001201b4d0d012009201b41037422186a2201280204221c20012802006a22012009200641037422156a2208280200220f490d02200120164b0d032017200f412c6c6a22192008280204221a412c6c22086a210b2001412c6c21092001200f6b220e201a6b2201201a4f0d04201f200b2001412c6c220810a105220d20086a210c201a4101480d0520014101480d05202120096a2108200b210103402008200141546a220b200c41546a220e200e280200200b2802004922041b2209290200370200200841286a200941286a280200360200200841206a200941206a290200370200200841186a200941186a290200370200200841106a200941106a290200370200200841086a200941086a290200370200200c200e20041b210c02402019200b200120041b2201490d00200d21090c080b200841546a2108200d2109200d200c490d000c070b0b2006200141f089c7001030000b201b200141808ac7001030000b200f200141908ac7001044000b2001201641908ac7001043000b201f2019200810a105220d20086a210c0240201a4101480d00200e201a4c0d00201720096a2104200d21092019210103402001200b2009200b280200200928020049220e1b2208290200370200200141286a200841286a280200360200200141206a200841206a290200370200200141186a200841186a290200370200200141106a200841106a290200370200200141086a200841086a29020037020020092009412c6a200e1b21092001412c6a2101200b412c6a200b200e1b220b20044f0d03200c20094b0d000c030b0b20192101200d21090c010b200b2101200d21090b20012009200c20096b22082008412c706b10a1051a02402003280288172201201b4d0d00200328028017220920186a2208201c201a6a3602042008200f360200200120064d0d02200920156a2208200841086a20012006417f736a41037410a2051a20032001417f6a220136028817200141014b0d010c030b0b201b200141a08ac7001030000b20062001103b000b200121200b2007450d030c000b0b1033000b1032000b024020032802841741ffffffff0171450d00200910230b2030412c7021012030412c490d0120302001460d01201f10230c010b20164102490d002016417f6a210920172016412c6c6a210e4101210c03400240024002400240201620092201417f6a2209490d00201620096b22084102490d0320172001412c6c6a220128020020172009412c6c6a220b28020022194f0d03200341a0146a41206a221a200b41246a290200370300200341a0146a41186a221b200b411c6a290200370300200341a0146a41106a2206200b41146a290200370300200341a0146a41086a220f200b410c6a290200370300200b290204210a200b41286a200141286a2802003602002003200a3703a014200b41206a200141206a290200370200200b41186a200141186a290200370200200b41106a200141106a290200370200200b41086a200141086a290200370200200b20012902003702004101210420084103490d02200b28025820194f0d0241002104200e210803402008220141546a22082001290200370200200841286a200141286a280200360200200841206a200141206a290200370200200841186a200141186a290200370200200841106a200141106a290200370200200841086a200141086a290200370200200c2004220d460d02200d417f6a21042001412c6a220828020020194f0d020c000b0b2009201641c089c7001044000b4102200d6b21040b20012019360200200b2004412c6c6a220120032903a014370204200141246a201a2903003702002001411c6a201b290300370200200141146a20062903003702002001410c6a200f2903003702000b200e41546a210e200c417f6a210c20090d000b0b200341e8116a41086a22084200370300200341003602b00a200341003600b30a200342003703e81120034196adc300ad4280808080900184100c22012800093602a00f20032001410c6a2800003600a30f2001290000210a20012d0008210920011023200320032800a30f3600b30a200320032802a00f3602b00a41bce0c300ad4280808080e00084100c22012900002105200341a00f6a41086a220b200141086a290000370300200320053703a00f200110232008200b2903002205370300200320032903a00f22263703e811202320032802b00a360000202341036a20032800b30a36000020222026370000202241086a2005370000200320093a00a8142003200a3702a01420034180176a2017201610d302200341a0146aad220a42808080808004842003350288174220862003280280172201ad84100e0240200328028417450d00200110230b0240202f450d00202f412c6c450d00201710230b20034180176a41086a220842003703002003420037038017200341003602e811200341003600eb11200841b0dfc300ad4280808080a00184100c220141086a290000370300200320012900003703801720011023200341a89ec700ad4280808080900184100c22012800093602880520032001410c6a28000036008b052001290000210520012d0008210920011023200341a0146a41086a20082903003703002003200328008b053600eb1120032003280288053602e811200341bc146a20032800eb11360000200320093a00b814200320053703b01420032003290380173703a014200320032802e8113600b914200a42808080808004841011200010e90320022400417f202541d0f7076a220120012025491b0bc30103017f017e027f0240024002402000280200220241024d0d004101210042002103410121020c010b024002400240024020020e03000102000b410110212204450d0441002102200441003a00002000280204210520044101410510252200450d04200020053600014280808080d00021030c030b410110212200450d03200041013a00000c010b410110212200450d02200041023a00000b4100210242808080801021030b200129020020032000ad84100e024020020d00200010230b0f0b102a000bdb1f07057f067e017f017e017f057e037f230041e00b6b22042400200441a0066a200141c80310a1051a20044198036a200441a0066a10c602410121050240024002400240024002400240024002400240024002400240024002400240024020042d0098034101460d00200441186a20044198036a41086a41800310a1051a024020032802002201450d00200341086a280200210620032802042107200441106a41d7ddc400411010cd0141002105200441a0066a2004280214410020042802101b10c70220042802a0062108200420042802a80636029c0320042008360298032001200620044198036a10c802024020042802a406450d00200810230b2007450d00200110230b200441e8096a200441186a41d0006a10c902200441a0066a200441186a41800310a1051a20042903e8092109024002400240024020042903c006220a4202520d0010ca02220841ff01714102470d0210ca02220841ff01714102470d0510ca021a10ca02220841ff01714102470d06200420093703980320044198036a200210cb02220841ff01714102470d0710ca02220841ff01714102460d0120084180feff077141087621020c0b0b200441c00b6a41186a200441a0066a41186a290300370300200441c00b6a41106a200441a0066a41106a290300370300200441c00b6a41086a200441a0066a41086a290300370300200420042903a0063703c00b024020042802f006410f470d004100210841870421020c0d0b200441e0066a290300210b200441d8066a290300210c200441e8066a280200210620042903c806210d024010ca02220841ff01714102470d0010ca021a4200210e20044198036a41186a420037030020044198036a41106a220f420037030020044198036a41086a22084200370300200442003703980341e4dec400ad4280808080e00084100c220729000021102008200741086a29000037030020042010370398032007102341f3dec400ad4280808080e00084100c22072900002110200441a00a6a41086a2211200741086a290000370300200420103703a00a20071023200f20042903a00a2210370300200441f80a6a41086a2008290300370300200441f80a6a41106a2010370300200441f80a6a41186a201129030037030020042004290398033703f80a200441086a200441f80a6a412010cd010240200a4201520d00200d500d090b200441f80a6a200441c00b6a10970220044198036a20042802f80a220720042802800b109802024002402004290398034201510d00410021084200210a4200210d42002110420021124200211342002114420021154100210f0c010b200441a8036a2903002115200441b8036a2903002113200441b0036a2903002112200441c8036a2903002110200441c0036a290300210d200441d8036a290300210a200441d0036a290300210e200441e0036a280200210820042903a003211420042802e403210f0b024020042802fc0a450d00200710230b0240024020082006470d0020044198036a200441c00b6a10970220043502a00321162004280298032107410410212208450d0b2008200641016a36000020084104410810252208450d0b2008200f3a000420084108411510252208450d0b200820143700052008410d6a201537000020084115412a10252208450d0b200820123700152008411d6a20133700002008412a41d40010252208450d0b2008200e3700352008200d3700252008413d6a200a3700002008412d6a201037000020164220862007ad842008ad4280808080d00884100e200810230240200428029c03450d00200710230b024020094280808080f01f83428080808020520d0041002108410921020c100b200420093703980320044198036a200210cb02220841ff01714102460d0120084180feff077141087621020c0f0b41034102200820064b1b2102410021080c0e0b200420093703f80a20044198036a200c200b200441c00b6a200441f80a6a200210cc02024020042d0098034101460d00200441c4036a280200210f200441c0036a2802002106200441bc036a2802002111200441b4036a2802002107200441b0036a28020021170240200441b8036a2802002202450d002002410c6c21082017210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b02402007450d002007410c6c450d00201710230b0240200f450d00200f410c6c21082011210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b2006450d0d2006410c6c450d0d201110230c0d0b20042d00990322084102460d0c20042f019a0321020c0d0b20084180feff077141087621020c0c0b4100210f20042802f006410b470d0e20044198036a200441f4066a10ab0220042d0098034101460d01200441c4036a2802002111200441c0036a2802002106200441bc036a2802002117200441b4036a2802002107200441b0036a28020021180240200441b8036a2802002202450d002002410c6c21082018210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b02402007450d002007410c6c450d00201810230b02402011450d002011410c6c21082017210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b2006450d0e2006410c6c450d0e201710230c0e0b20084180feff077141087621020c080b20042d00990322024102470d060c0c0b200020042f0099033b0001200041013a0000200041036a20042d009b033a000020032802002101410021000c0d0b20084180feff077141087621020c050b20084180feff077141087621020c040b20084180feff077141087621020c030b4180b4c0004119419cb4c000102d000b102a000b20042f019a0341087420027221020c030b2002410874200841ff01717221020c020b20044198036a200441a0066a41d0006a220610cd020240024020042d0098034101460d00200441c4036a2802002111200441c0036a2802002107200441bc036a2802002117200441b4036a280200210f200441b0036a28020021180240200441b8036a2802002202450d002002410c6c21082018210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b0240200f450d00200f410c6c450d00201810230b02402011450d002011410c6c21082017210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b2007450d012007410c6c450d01201710230c010b20042d00990322084102460d0020042f019a0321020c010b20044198036a200610ce02024020042d0098034101460d00200441c4036a280200210f200441c0036a2802002106200441bc036a2802002111200441b4036a2802002107200441b0036a28020021170240200441b8036a2802002202450d002002410c6c21082017210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b02402007450d002007410c6c450d00201710230b0240200f450d00200f410c6c21082011210203400240200241046a280200450d00200228020010230b2002410c6a2102200841746a22080d000b0b2006450d032006410c6c450d03201110230c030b20042d00990322084102460d0220042f019a0321020b2002410874200841ff01717221020b200441f0066a10b4020c020b200441a00b6a41186a200441c00b6a41186a290300370300200441a00b6a41106a200441c00b6a41106a290300370300200441a00b6a41086a200441c00b6a41086a290300370300200420042903c00b3703a00b4101210f0b200441a00a6a41186a2207200441a00b6a41186a2202290300370300200441a00a6a41106a2211200441a00b6a41106a2208290300370300200441a00a6a41086a2217200441a00b6a41086a2206290300370300200420042903a00b3703a00a20044198036a200441f0066a41b00210a1051a200441c00b6a41186a22182007290300370300200441c00b6a41106a22192011290300370300200441c00b6a41086a22112017290300370300200420042903a00a3703c00b410221070240200f450d00200220182903003703002008201929030037030020062011290300370300200420042903c00b3703a00b410121070b200441820b6a20062903003701002004418a0b6a2008290300370100200441920b6a2002290300370100200420073a00f90a200420042903a00b3701fa0a200441003a00f80a200441e00a6a20044198036a200441f80a6a10cf020240024020042802e00a4101470d00200420042900ed0a3703d00a2004200441f40a6a2800003600d70a20042802e40a4102470d010b410421020c030b200441ec0a6a2d00002102200420042800d70a3600c70a200420042903d00a3703c00a20094280808080f01f83428080808020520d02200241ff01714104460d0241801021020b200420042900900a3703800a2004200441970a6a2800003600870a200041036a20024110763a0000200020023b0001200041013a000020054521000b20000d012001450d01200341046a280200450d01200110230c010b200420042800c70a3600970a200420042903c00a3703900a200420042800970a3600870a200420042903900a3703800a200441f0096a41086a220620042800870a360000200420042903800a3700f109200420023a00f0092009210a410021070240200241ff01714104460d00200441f0096a109201200628020021084101210720042903f009210a0b200441b4066a2009370200200441a0066a41106a2008360200200441a0066a41086a200a370300200441bc066a200429029803370200200441c4066a20044198036a41086a2202280200360200200420073a00a406200420042f00f80a3b00a506200441003a00a0062004200441fa0a6a2d00003a00a706200441a0066a10e001200441d7ddc400411010cd012004200428020441016a410120042802001b22083602a00641d7ddc400ad4280808080800284200441a0066aad4280808080c00084100e200420083602c40b200441003602c00b20044198036a41186a420037030020044198036a41106a2207420037030020024200370300200442003703980341e4dec400ad4280808080e00084100c220829000021092002200841086a29000037030020042009370398032008102341d483c500ad4280808080e00184100c22082900002109200441a00a6a41086a220f200841086a290000370300200420093703a00a20081023200720042903a00a2209370300200441f80a6a41086a2002290300370300200441f80a6a41106a2009370300200441f80a6a41186a200f29030037030020042004290398033703f80a200441203602a4062004200441f80a6a3602a006200441c00b6a200441a0066a10c4022000410c6a2006280200360200200041046a20042903f009370200200041003a00002001450d002005450d00200341046a280200450d00200110230b200441e00b6a24000bc02205017f037e047f017e057f230041900f6b2202240042022103024002400240024002400240024002400240200129036822044202520d00200241b8076a20014198016a41b00210a1051a0c010b2002411e6a200141206a41c20010a1051a200241e0006a41186a200141186a290000370300200241e0006a41106a200141106a290000370300200241e0006a41086a200141086a29000037030020022001290000370360200241f0096a20014198016a41b00210a1051a200241a00c6a41086a20014188016a290300370300200241a00c6a41106a20014190016a290300370300200220014180016a2903003703a00c200141f8006a29030021032001290370210541002106200241f80d6a410010d403200241d80e6a20022802f80d220120022802800e10e101200241b80e6a41086a2207200241e40e6a290200370300200241b80e6a41106a2208200241ec0e6a290200370300200241b80e6a41156a2209200241f10e6a290000370000200220022902dc0e3703b80e0240024020022d00d80e4101460d00200241980e6a41156a4200370000200241980e6a41106a4200370300200241980e6a41086a4200370300200242003703980e0c010b20022f00d90e20022d00db0e411074722106200241980e6a41156a2009290000370000200241980e6a41106a2008290300370300200241980e6a41086a2007290300370300200220022903b80e3703980e0b024020022802fc0d450d00200110230b200241b80d6a41086a200241980e6a41086a2201290300370300200241b80d6a41106a200241980e6a41106a290300370300200241b80d6a41156a200241980e6a41156a290000370000200220022903980e3703b80d200241b80e6a41186a4200370300200241b80e6a41106a22094200370300200241b80e6a41086a22074200370300200242003703b80e41e4dec400ad4280808080e00084100c2208290000210a2007200841086a2900003703002002200a3703b80e2008102341f3dec400ad4280808080e00084100c2208290000210a2001200841086a2900003703002002200a3703980e20081023200920022903980e220a370300200241d80e6a41086a2007290300370300200241d80e6a41106a200a370300200241d80e6a41186a2001290300370300200220022903b80e3703d80e200241106a200241d80e6a412010cd0141002101024020044201520d0020054200510d042002280214410020022802101b2107417f21012007ad220a20032003200a541b220a200a20037d2005827d220a42ffffffff0f560d00200aa721010b200241d80e6a200110d403200241086a20022802d80e220820022802e00e419ca8c70041004100108c0120022802082107024020022802dc0e450d00200810230b20074101470d01200241800f6a200110d403200241d80e6a20022802800f220720022802880f10e101200241b80e6a41086a200241e10e6a290000370300200241b80e6a41106a200241e90e6a290000370300200241d00e6a2201200241f10e6a290000370300200220022900d90e3703b80e0240024020022d00d80e4101460d00200241ad0e6a4200370000200241980e6a41106a4200370300200241980e6a41086a4200370300200242003703980e410021010c010b200241980e6a41086a200241c30e6a290000370300200241980e6a41106a200241cb0e6a290000370300200241ad0e6a2001290000370000200220022900bb0e3703980e20022f01b80e20022d00ba0e4110747221010b024020022802840f450d00200710230b200241f80d6a41156a2207200241980e6a41156a290000370000200241f80d6a41106a2208200241980e6a41106a290300370300200241d80d6a41086a2209200241980e6a41086a290300370300200241d80d6a41106a220b2008290300370300200241d80d6a41156a22082007290000370000200241980d6a41086a2207200241b80d6a41086a290300370300200241980d6a41106a220c200241b80d6a41106a290300370300200241980d6a41156a220d200241b80d6a41156a290000370000200220022903980e3703d80d200220022903b80d3703980d200241f80c6a41156a220e2008290000370000200241f80c6a41106a2208200b290300370300200241f80c6a41086a220b2009290300370300200220022903d80d3703f80c200241d80c6a41156a2209200d290000370000200241d80c6a41106a220d200c290300370300200241d80c6a41086a220c2007290300370300200220022903980d3703d80c200241b80c6a41156a2207200e290000370000200241b80c6a41106a220e2008290300370300200241b80c6a41086a2208200b290300370300200220022903f80c3703b80c200241c8046a41156a220b2009290000370000200241c8046a41106a2209200d290300370300200241c8046a41086a220d200c290300370300200220022903d80c3703c804200241a8046a41156a220c2007290000370000200241a8046a41106a2207200e290300370300200241a8046a41086a220e2008290300370300200220022903b80c3703a804200241e8046a41106a2208200241a00c6a41106a290300370300200241e8046a41086a220f200241a00c6a41086a290300370300200220022903a00c3703e804200241b8076a41046a200241f0096a41b00210a1051a20024180056a200241b8076a41b40210a1051a20024180016a20024180056a41046a41b00210a1051a200241e6036a20064110763a0000200241e4036a20063b0100200241c0036a2003370300200241b8036a2005370300200241c8036a220620022903e804370300200241d0036a200f290300370300200241d8036a220f2008290300370300200241e7036a20022903c804370000200241ef036a200d290300370000200241f7036a2009290300370000200241fc036a200b290000370000200220043703b003200241013602e00320024186046a20014110763a000020024184046a20013b010020024187046a20022903a8043700002002418f046a200e29030037000020024197046a20072903003700002002419c046a200c290000370000410410212201450d04200242043702bc07200220013602b80720024180016a200241b8076a10dd020240024020022903b0034201520d0020022903c00320022903b8032203420c882204420120044201561b8021040240024020022802bc07220820022802c00722016b4102490d0020022802b80721070c010b200141026a22072001490d08200841017422092007200920074b1b22094100480d080240024020080d00024020090d00410121070c020b2009102122070d010c0c0b20022802b807210720082009460d0020072008200910252207450d0b20022802c00721010b200220093602bc07200220073602b8070b200720016a2004a741047420037aa7417f6a22074101200741014b1b2207410f2007410f491b723b0000200141026a21010c010b0240024020022802bc0720022802c0072201460d0020022802b80721070c010b200141016a22072001490d07200141017422082007200820074b1b22084100480d070240024020010d0041002101024020080d00410121070c020b200810212207450d0b0c010b20022802b807210720012008460d0020072001200810252207450d0a20022802c00721010b200220083602bc07200220073602b8070b200720016a41003a0000200141016a21010b200220013602c007200f200241b8076a10ed01200220063602800520024180056a200241b8076a10db0120022802e00321060240024020022802bc07220820022802c00722016b4104490d0020022802b80721070c010b200141046a22072001490d06200841017422092007200920074b1b22094100480d060240024020080d00024020090d00410121070c020b200910212207450d0a0c010b20022802b807210720082009460d0020072008200910252207450d0920022802c00721010b200220093602bc07200220073602b8070b200720016a20063600002002200141046a3602c007412010212201450d042001200241e4036a290200370000200141186a200241fc036a290200370000200141106a200241f4036a290200370000200141086a200241ec036a2902003700000240024020022802bc07220620022802c00722076b4120490d0020022802b80721080c010b200741206a22082007490d06200641017422092008200920084b1b22094100480d060240024020060d00024020090d00410121080c020b200910212208450d0a0c010b20022802b807210820062009460d0020082006200910252208450d0920022802c00721070b200220093602bc07200220083602b8070b200820076a22082001290000370000200841186a200141186a290000370000200841106a200141106a290000370000200841086a200141086a2900003700002002200741206a3602c00720011023412010212201450d04200120024184046a290200370000200141186a2002419c046a290200370000200141106a20024194046a290200370000200141086a2002418c046a2902003700000240024020022802bc07220620022802c00722076b4120490d0020022802b80721080c010b200741206a22082007490d06200641017422092008200920084b1b22094100480d060240024020060d00024020090d00410121080c020b200910212208450d0a0c010b20022802b807210820062009460d0020082006200910252208450d0920022802c00721070b200220093602bc07200220083602b8070b200820076a22082001290000370000200841186a200141186a290000370000200841106a200141106a290000370000200841086a200141086a2900003700002002200741206a3602c0072001102320022802bc07210820022802b80721010240024020022802c00722074180024b0d002002411e6a20012007200241e0006a10d50321070c010b2007ad4220862001ad84101822072900002103200741086a2900002104200741106a2900002105200241b80e6a41186a200741186a290000370300200241b80e6a41106a2005370300200241b80e6a41086a2004370300200220033703b80e200710232002411e6a200241b80e6a4120200241e0006a10d50321070b02402008450d00200110230b2007450d02200241f0096a41086a200241e0006a41086a290300370300200241f0096a41106a200241e0006a41106a290300370300200241f0096a41186a200241e0006a41186a29030037030020024180056a41086a200241c0036a29030037030020024180056a41106a200241c8036a29030037030020024180056a41186a200241d0036a290300370300200241a0056a200241d8036a290300370300200220022903603703f0092002200241b8036a2903003703800520022903b0032103200241b8076a20024180016a41b00210a1051a0b200041086a20022903f009370300200041286a2003370300200041306a200229038005370300200041206a200241f0096a41186a290300370300200041186a200241f0096a41106a290300370300200041106a200241f0096a41086a290300370300200041386a20024180056a41086a290300370300200041c0006a20024180056a41106a290300370300200041c8006a20024180056a41186a290300370300200041d0006a20024180056a41206a290300370300200041d8006a200241b8076a41b00210a1051a200041003a00000c050b200241d80d6a41156a200241f80d6a41156a290000370000200241d80c6a41086a200241980d6a41086a290000370300200241d80c6a41106a200241980d6a41106a290000370300200241d80c6a41156a200241980d6a41156a290000370000200241b80c6a41156a200241f80c6a41156a290000370000200220022900980d3703d80c200241f0096a10b402200041036a41003a0000200041800a3b0001200041013a00000c040b20004180083b0001200041013a0000200041036a41003a000020024180016a10b4020c030b4180b4c0004119419cb4c000102d000b1033000b102c000b200241900f6a24000f0b102a000bf90403027f017e057f230041d0006b2202240041e4dec400ad4280808080e00084100c22032900002104200241086a200341086a290000370300200220043703002003102341c480c500ad4280808080d00184100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bad0201057f230041106b220324000240024002400240200141046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b2003410036020820032004360204200320053602002001200310610240024020032802042206200328020822056b2001490d0020032802002104200621070c010b200520016a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d00024020070d00410121040c020b2007102122040d010c060b2003280200210420062007460d0020042006200710252204450d050b20032007360204200320043602000b200420056a2000200110a1051a2002290200200520016aad4220862004ad84100e02402007450d00200410230b200341106a24000f0b1032000b1033000b102c000b102a000baa1101057f230041206b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e16011112020304051106070809110a0b0c0d0e0f101100010b410021034190ce0021040240024002400240024020012d00040e0400010402000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b200241086a200141086a280200220110c90220022802082103200241086a200110c90220034190ce006a21040c010b200241086a200141286a280200220110c90220022802082103200241086a200110c90220034190ce006a21040b20022d000c21030b200041013a0005200020033a0004200020043602000c120b410021034190ce00210402400240024002400240024002400240200141086a2802000e0b0001070203030405050506000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b2001410c6a28020021040b410121030c040b4101210341c09a0c21040c030b4101210341a09c0121040c020b410121030c010b4101210341a8c30121040b200041013a0005200020033a0004200020043602000c110b20004180023b010420004190ce003602000c100b4100210341c0843d2104024002400240200141086a2d00000e050002010202000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b4101210341d0860321040b200041013a0005200020033a0004200020043602000c0f0b20004182023b010420004190ce003602000c0e0b4100210441a0c21e210302400240024002400240024002400240024002400240200141086a2d00000e19000a0a010102020a0a02030303030405060a0a0a0a07080909000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b4180b51821030c080b41b0e32d21030c070b41882721030c060b4190ce0021030c050b41882721030c040b41c0843d21030c030b410121040c020b4190ce0021030c010b4180c2d72f21030b200041013a0005200020043a0004200020033602000c0d0b20004180023b0104200041f093093602000c0c0b20004182023b010420004190ce003602000c0b0b20004180023b010420004190ce003602000c0a0b20004180023b010420004190ce003602000c090b02400240024020012802040e03000102000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b20004182023b0104200041c0843d3602000c090b20004180023b0104200041003602000c080b20004182023b010420004190ce003602000c070b41c096b102210341012104024002400240024020012d00040e080003010202020202000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b4190ce002103410121040c010b410021044190ce0021030b200041013a0005200020043a0004200020033602000c060b0240024002400240024002400240024020012d00040e06000102030405000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b200141086a28020021044190ce0021030240200141106a280200220541b0026c2206450d00200421010340200241086a200110c902200141b0026a2101200228020820036a2103200641d07d6a22060d000b0b200541b0026c21014101210603402001450d06200141d07d6a2101200241086a200410c902200441b0026a210420022d000c4101460d000c050b0b200241086a200141086a280200220110c90220022802082103200241086a200110c90220034190ce006a210320022d000c21060c040b200241086a200141206a280200220310c902200141106a280200210120022802082104200241086a200310c902200420014190ce006c6a4190ce006a210320022d000c21060c030b200141306a2802004190ce006c4190ce006a21030c010b200141306a2802004190ce006c4190ce006a21030b410021060b200041013a0005200020063a0004200020033602000c050b4190ce0021030240024002400240200141086a2d00000e0c000301010101010101010102000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b41d0860321030c010b41a08d0621030b20004180023b0104200020033602000c040b410021044190ce0021030240024002400240024020012d00040e0a00010402020202030304000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a000b200241086a200141286a280200220110c90220022802082103200241086a200110c90220034190ce006a210320022d000c21040c020b41a08d0621030c010b41b0ea0121030b200041013a0005200020043a0004200020033602000c030b4190ce0021030240200141086a2d00002201417f6a4102490d0002400240024020010e0400010102000b2002411c6a41013602002002420137020c200241a4c5c60036020820024104360204200241cccec60036020020022002360218200241086a419ca8c700103a0b000b41c0843d21030b20004180023b0104200020033602000c020b10f502000b20004182023b010420004190ce003602000b200241206a24000b040041020bda0607017f017e017f017e027f037e077f230041e0006b22022400200241306a20002902002203422088a72204200110c6040240024020022903302205a7220141ff01714101460d00200241306a41186a22064200370300200241306a41106a22074200370300200241306a41086a220042003703002002420037033041e4dec400ad4280808080e000842208100c220129000021092000200141086a290000370300200220093703302001102341e8ffc400ad4280808080b00284220a100c220b2900002109200241d0006a41086a2201200b41086a29000037030020022009370350200b1023200720022903502209370300200241106a41086a220c2000290300370300200241106a41106a220d2009370300200241106a41186a220e200129030037030020022002290330370310200241086a200241106a412010cd014100210b417f200228020c410020022802081b220f418094ebdc034180afd0e502200441ff017122041b22102003a7221120102011491b6a22112011200f491b210f024020044102460d0041800c2104200f20104b0d020b200642003703002007420037030020004200370300200242003703302008100c220b29000021032001200b41086a29000037030020022003370350200b10232000200129030037030020022002290350370330418c80c500ad4280808080800284100c220b29000021032001200b41086a29000037030020022003370350200b1023200720022903502203370300200c2000290300370300200d2003370300200e20012903003703002002200229033037031020022005422088a7360230200241106aad42808080808004842205200241306aad4280808080c000842203100e200642003703002007420037030020004200370300200242003703302008100c220b29000021082001200b41086a29000037030020022008370350200b10232000200129030037030020022002290350370330200a100c220b29000021082001200b41086a29000037030020022008370350200b1023200720022903502208370300200c2000290300370300200d2008370300200e2001290300370300200220022903303703102002200f36023020052003100e410021044102210b0c010b200141087641ff0171210b2005421088a741087421040b200241e0006a24002004200b720be90702017f057e230041e0016b22062400200641186a200520042902002207a72007422888a72001200210b6044200210702400240024020062903182208200641206a2903002209844200520d0020064198016a420037030020064190016a4280808080c000370300200642043703880120064200370378200641013a00a0012006427f37038001200641f8006a21030c010b200641003a004320062009370338200620083703302006200336022c410121052006410141112001200284501b3a0042200620033602442006200641c4006a360288012006200641c2006a3602840120062006412c6a360280012006200641c3006a36027c2006200641306a360278200641c8006a2003200641f8006a10c5030240024020062802484101470d004200210a200629035021070c010b200641f0006a290300210a200641e8006a2903002107024020062903504201510d00410021050c010b200641c8006a41106a290300210b20062802442103200641b0016a200641c8006a41186a290300370300200641a8016a200b37030041002105200641f8006a41086a41003a000020064181016a200329000037000020064189016a200341086a29000037000020064191016a200341106a29000037000020064199016a200341186a290000370000200641023a0078200641f8006a10e0010b02402005450d0020004180023b0001200041013a0000200041036a41003a00000c020b2006427f200720072007200120072007200156200a200256200a2002511b22031b22017d542205200a2002200a20031b220b7d2007200154ad7d2202200b7c2005ad7c220120025420012002511b22031b427f200120031b10cf0302402006290300a7450d00200641106a290300210220062903082101200641c8006a108503200641f8006a108503200641f8006a2001200210ea01200641b0016a2002370300200641a8016a2001370300200641f8006a41086a41043a000020064181016a200629034837000020064189016a200641c8006a41086a29030037000020064191016a200641c8006a41106a29030037000020064199016a200641e0006a290300370000200641023a0078200641f8006a10e0010b20064198016a420037030020064190016a4280808080c000370300200642043703880120064200370378200641013a00a0012006427f370380012008427f2009501b2107200641f8006a21030b200041003a000020062007370378200041086a2003290300370300200041106a200341086a290300370300200041186a200341106a290300370300200041206a200341186a290300370300200041286a200341206a290300370300200041306a200341286a2903003703000b200641e0016a24000bbf1705067f017e0a7f027e017f23004190016b22022400410421030240024002400240024002400240024002400240024002402001280200410f460d00410021040c010b41002104200141046a22052d00004105470d00200241e0006a200141c8006a280200108d03200228026022032002280268108e0341ff0171210402402002280264450d00200310230b0240024002400240024002400240024020044102460d002004410171450d00200241e0006a41186a4200370300200241e0006a41106a22064200370300200241e0006a41086a22034200370300200242003703604196adc300ad4280808080900184100c2207290000210820024180016a41086a2204200741086a29000037030020022008370380012007102320032004290300370300200220022903800137036041fcdfc300ad4280808080f00184100c220729000021082004200741086a29000037030020022008370380012007102320062002290380012208370300200241c0006a41086a2003290300370300200241c0006a41106a2008370300200241c0006a41186a200429030037030020022002290360370340200241206a200241c0006a108f030240200228022022090d0020024100360218200242043703100c030b2002290224210820022009360210200220083702142008422088a7220a450d01200a417f6a210b0c040b200041800e3b0001200041013a0000200041036a41013a00000c110b2008a7450d0041002104200a210b0c010b200241106a41004101109501200228021021092002280218220b21040b20092004410c6c6a22044100360208200442043702002002200b41016a220a360218200a200b490d010b200241e0006a41186a220c4200370300200241e0006a41106a220d4200370300200241e0006a41086a22034200370300200242003703604196adc300ad4280808080900184100c2207290000210820024180016a41086a2204200741086a29000037030020022008370380012007102320032004290300370300200220022903800137036041d8dfc300ad4280808080b00184100c220729000021082004200741086a2900003703002002200837038001200710232006200229038001370000200641086a2004290300370000200241c0006a41086a2003290300370300200241c0006a41106a200d290300370300200241c0006a41186a200c29030037030020022002290360370340200241086a200241c0006a412010cd01024002402009200b410c6c6a220e41086a220f2802002204200228020c410020022802081b4f0d00200e28020021100240200441014b0d00024020040e020300030b2001280248210d410021030c040b2001280248210d41002103034020032004410176220720036a220c200d2010200c41246c6a280200491b2103200420076b220441014b0d000c040b0b200041800c3b0001200041013a0000200041036a41003a00000c0d0b2001280248210d410021030c020b200b410041d8afc3001030000b200d2010200341246c6a2802002204460d032003200d20044b6a21030b200241e0006a200d10c30320022802602211450d0320022802642112200241e0006a41086a22073502004220862011ad84101822042900002108200441086a2900002113200441106a2900002114200241206a41186a200441186a290000370300200241206a41106a2014370300200241206a41086a201337030020022008370320200410230240200241206a200541216a2215460d00200241206a2015412010a3050d020b200241e0006a41186a200541196a290000370300200241e0006a41106a200541116a2900003703002007200541096a29000037030020022005290001370360200f28020022042003490d0420012802482107024020042009200b410c6c6a41046a280200470d00200e2004410110a2012002280218210a200228021021090b200e280200200341246c6a220141246a2001200420036b41246c10a2051a20012007360200200120022903603702042001410c6a200241e0006a41086a2203290300370200200141146a200241e0006a41106a22072903003702002001411c6a200241e0006a41186a220c2903003702004101210d200f200441016a3602002002280214210e200c42003703002007420037030020034200370300200242003703604196adc300ad4280808080900184100c2204290000210820024180016a41086a2201200441086a29000037030020022008370380012004102320032001290300370300200220022903800137036041fcdfc300ad4280808080f00184100c220429000021082001200441086a2900003703002002200837038001200410232006200229038001370000200641086a2001290300370000200241c0006a41086a2003290300370300200241c0006a41106a2007290300370300200241c0006a41186a200c29030037030020022002290360370340200a410c6c41046a2201417f4c0d0502402001450d0020011021220d450d070b20024100360268200220013602642002200d360260200a200241e0006a10610240200a450d002009200a410c6c6a210b2009210603402006280200210120062802082204200241e0006a106102402004450d002001200441246c6a21054100200228026822046b210d20022802642103034020012802002110024002402003200d6a4104490d002002280260210c200321070c010b200441046a22072004490d0c2003410174220c2007200c20074b1b22074100480d0c0240024020030d00024020070d004101210c0c020b20071021220c0d010c0f0b2002280260210c20032007460d00200c200320071025220c450d0e0b200220073602642002200c3602600b200c20046a20103600002002200441046a2203360268024002402007200d6a417c6a411f4d0d00200721030c010b200341206a22102003490d0c200741017422032010200320104b1b22034100480d0c0240024020070d00024020030d004101210c0c020b20031021220c450d0f0c010b20072003460d00200c200720031025220c450d0e0b200220033602642002200c3602600b200c20046a220741046a200141046a2900003700002007411c6a2001411c6a290000370000200741146a200141146a2900003700002007410c6a2001410c6a2900003700002002200441246a2204360268200d415c6a210d200141246a22012005470d000b0b2006410c6a2206200b470d000b0b20022802642101200241c0006aad4280808080800484200235026842208620022802602204ad84100e02402001450d00200410230b0240200a450d00200a410c6c21042009210103400240200141046a2802002203450d00200341246c450d00200128020010230b2001410c6a2101200441746a22040d000b0b0240200e450d00200e410c6c450d00200910230b410c10212203450d08412010212201450d0620012015290000370000200141186a2207201541186a290000370000200141106a220c201541106a290000370000200141086a220d201541086a290000370000412010212204450d0820042001290000370000200441186a2007290000370000200441106a200c290000370000200441086a200d29000037000020011023200342a080808080043702042003200436020002402012450d00201110230b410121040b200041003a0000200041306a41013a00002000412c6a2004360200200041286a2004360200200041246a2003360200200041206a4100360200200041186a4204370300200041106a427f370300200041086a4200370300200041316a2002280060360000200041346a200241e3006a2800003600000c090b20004180063b0001200041013a0000200041036a41003a00002012450d07201110230c070b200041800e3b0001200041013a0000200041036a41003a00000c060b200041800e3b0001200041013a0000200041036a41013a00000c050b200320041038000b1032000b1033000b102c000b102a000b0240200a450d00200a410c6c21042009210103400240200141046a2802002203450d00200341246c450d00200128020010230b2001410c6a2101200441746a22040d000b0b20022802142201450d002001410c6c450d00200910230b20024190016a24000be21304057f017e077f017e230041f0026b2202240002400240024002400240024002402001280200410d470d0020012802044102470d00200241f0006a41186a22034200370300200241f0006a41106a22044200370300200241f0006a41086a220542003703002002420037037041db97c700ad4280808080f00084100c220629000021072005200641086a290000370300200220073703702006102341bbacc300ad4280808080a00184100c22062900002107200241d8016a41086a2208200641086a290000370300200220073703d80120061023200420022903d8012207370300200241086a41086a22092005290300370300200241086a41106a220a2007370300200241086a41186a220b200829030037030020022002290370370308200241f0006a200241086a412010890220022902744200200228027022061b21072006410120061b210c02400240200141086a220d280200200141186a220e280200470d002003420037030020044200370300200542003703002002420037037041b0dfc300ad4280808080a00184100c2206290000210f2005200641086a2900003703002002200f3703702006102341bcbac500ad4280808080b00184100c2206290000210f2008200641086a2900003703002002200f3703d80120061023200420022903d801220f37030020092005290300370300200a200f370300200b200829030037030020022002290370370308200241f0006a200241086a10ad0220022802702205410120051b210a41800e21092002290274420020051b220f422088a72205450d062001413c6a21042005410574210841002106200a2105034020042005460d02200620052004412010a30522034100476a21062003450d02200541206a2105200841606a22080d000c070b0b20004180083b0001200041013a0000200041036a41003a00000c060b20062007422088a722054f0d01200241086a41186a200c20064105746a220541186a290000370300200241086a41106a200541106a290000370300200241086a41086a200541086a29000037030020022005290000370308200241f0006a200241086a108f020240024002402002280290012205450d0002402002280294012206450d00200641306c450d00200510230b0240024002400240200141dc006a2d00000e03010200010b20024188016a200d41ed006a29000037030020024180016a200d41e5006a290000370300200241f8006a200d41dd006a2900003703002002200d41d5006a29000037037041022106200241f0006a21050c020b20024188016a200d41ed006a29000037030020024180016a200d41e5006a290000370300200241f8006a200d41dd006a2900003703002002200d41d5006a29000037037041002106200241f0006a21050c010b20024188016a200d41ed006a29000037030020024180016a200d41e5006a290000370300200241f8006a200d41dd006a2900003703002002200d41d5006a29000037037041012106200241f0006a21050b200241216a200541186a290000370000200241196a200541106a290000370000200241116a200541086a290000370000200220063a000820022005290000370009200241316a200d41fd006a290000370000200241396a200d4185016a290000370000200241c1006a200d418d016a290000370000200241c9006a200d4195016a290000370000200241d1006a200d419d016a290000370000200241d9006a200d41a5016a290000370000200241e1006a200d41ad016a2900003700002002200d41f5006a2900003700290240024002400240200d2d00b5010e03010200010b200241d8016a41186a200d41ce016a290000370300200241d8016a41106a200d41c6016a290000370300200241d8016a41086a200d41be016a2900003703002002200d41b6016a2900003703d80141022106200241d8016a21050c020b200241d8016a41186a200d41ce016a290000370300200241d8016a41106a200d41c6016a290000370300200241d8016a41086a200d41be016a2900003703002002200d41b6016a2900003703d80141002106200241d8016a21050c010b200241d8016a41186a200d41ce016a290000370300200241d8016a41106a200d41c6016a290000370300200241d8016a41086a200d41be016a2900003703002002200d41b6016a2900003703d801200241d8016a2105410121060b20024189016a200541186a29000037000020024181016a200541106a290000370000200241f9006a200541086a290000370000200220063a00702002200529000037007120024199016a200d41de016a290000370000200241a1016a200d41e6016a290000370000200241a9016a200d41ee016a290000370000200241b1016a200d41f6016a290000370000200241b9016a200d41fe016a290000370000200241c1016a200d4186026a290000370000200241c9016a200d418e026a2900003700002002200d41d6016a29000037009101200241a8026a410c6a200441086a290200370200200241bc026a200441106a290200370200200241c4026a200441186a290200370200200241f0c2c98b063602a802200220042902003702ac0220012802082105200241e0026a2001410c6a10cd03200241d0026a410c6a200241e0026a41086a280200360200200220053602d002200220022903e0023702d402200241d8016a200241a8026a200241d0026a10b4032002280298022205450d050240200228029c022201450d00200141306c450d00200510230b41042105200d280200200e280200470d06200241086a200e200410ce0341ff017122054106470d06200241f0006a200e200410ce0341ff017122054106470d064103210520022d0008220141024b0d06200241086a4101722104200241f0006a41017221060240024002400240024002400240024020010e03000102000b20022d0070417f6a220141014b0d0d20010e020802080b20022d0070220141024b0d0c20010e03020c04020b20022d0070220141014b0d0b20010e020204020b20042006412010a3050d0a0c060b20062004412010a3050d090c050b20062004412010a3050d080c040b20042006412010a3050d070c030b20042006412010a305450d020c060b41808e0421090c060b20042006412010a3050d040b0240200f42ffffff3f83500d00200a10230b200742ffffff3f83500d00200c10230b200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a4200370300200041316a2002280070360000200041346a200241f3006a2800003600000c050b20062005419c90c3001030000b410521050b200541107441800e7221090b200020093b0001200041013a0000200041036a20094110763a0000200f42ffffff3f83500d00200a10230b200742ffffff3f83500d00200c10230b200241f0026a24000bdec70208027f017e127f017e117f077e037f087e230022032104200341800d6b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e16020103040506070108090a0b010c0d0e0f1011120100020b2002411a6a2901002105200241196a2d00002106200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f010021172001411d6a29000021182001411c6a2d00002119200141196a2f0000211a200141186a2d0000211b200141156a2f0000211c200141146a2d0000211d200141116a2f0000211e200141106a2d0000211f2001410d6a2f000021202001410c6a2d00002121200141086a2802002122200141056a2f0000212320022d0001212420022d0000210220012d001b212520012d0017212620012d0013212720012d000f212820012d00072129024002400240024020012d00040e0400010203000b200341c00a6a41146a4101360200200342013702c40a200341a4c5c6003602c00a2003410436028c09200341cccec60036028809200320034188096a3602d00a200341c00a6a419ca8c700103a000b0240024002400240200241ff01710d00202441ff01714101470d00200320053703d806200320063a00d706200320073a00d606200320083b01d406200320093a00d3062003200a3a00d2062003200b3b01d0062003200c3a00cf062003200d3a00ce062003200e3b01cc062003200f3a00cb06200320103a00ca06200320113b01c806200320123a00c706200320133a00c606200320143b01c406200320153a00c306200320163a00c206200320173b01c006200341e0036a41186a22064200370300200341e0036a41106a22014200370300200341e0036a41086a22024200370300200342003703e003418c97c300ad4280808080c00084100c222429000021052002202441086a290000370300200320053703e003202410234190f1c400ad42808080803084100c2224290000210520034190026a41086a2207202441086a2900003703002003200537039002202410232001200329039002220537030020034180056a41086a200229030037030020034180056a41106a200537030020034180056a41186a2007290300370300200320032903e00337038005200341c00a6a20034180056a412010e10120032d00c00a21242006200341d90a6a2900003703002001200341d10a6a2900003703002002200341c90a6a290000370300200320032900c10a3703e0030240024020244101460d0020034188096a41186a420037030020034188096a41106a420037030020034188096a41086a420037030020034200370388090c010b20034188096a41186a200629030037030020034188096a41106a200129030037030020034188096a41086a2002290300370300200320032903e003370388090b200341c0066a20034188096a412010a3050d18200341c00a6a202241b00210a1051a200341003b018809200341e8076a200341c00a6a20034188096a10cf024101210220032802e8074101470d03200341d00a6a200341fc076a280200360200200341c80a6a2202200341f4076a290200370300200320032902ec073703c00a2002109201419db3c500ad4280808080a00184100a4186a0c000ad4280808080e00184100a20032802c00a4101460d0141fc9fc000ad4280808080a00184100a0c020b202210b4022022102341823021030c4c0b20033502c40a100b0b410021020b200320023a00c20a2003410e3b01c00a200341c00a6a10e001202210232000410036020420004100360200200424000f0b02400240200241ff01710d00202441ff01714101470d00200320053703d806200320063a00d706200320073a00d606200320083b01d406200320093a00d3062003200a3a00d2062003200b3b01d0062003200c3a00cf062003200d3a00ce062003200e3b01cc062003200f3a00cb06200320103a00ca06200320113b01c806200320123a00c706200320133a00c606200320143b01c406200320153a00c306200320163a00c206200320173b01c006200341e0036a41186a22064200370300200341e0036a41106a22014200370300200341e0036a41086a22024200370300200342003703e003418c97c300ad4280808080c00084100c222429000021052002202441086a290000370300200320053703e003202410234190f1c400ad42808080803084100c2224290000210520034190026a41086a2207202441086a2900003703002003200537039002202410232001200329039002220537030020034180056a41086a200229030037030020034180056a41106a200537030020034180056a41186a2007290300370300200320032903e00337038005200341c00a6a20034180056a412010e10120032d00c00a21242006200341d90a6a2900003703002001200341d10a6a2900003703002002200341c90a6a290000370300200320032900c10a3703e0030240024020244101460d0020034188096a41186a420037030020034188096a41106a420037030020034188096a41086a420037030020034200370388090c010b20034188096a41186a200629030037030020034188096a41106a200129030037030020034188096a41086a2002290300370300200320032903e003370388090b0240200341c0066a20034188096a412010a305450d0041833021030c020b2003201837018008200320193a00ff07200320253a00fe072003201a3b01fc072003201b3a00fb07200320263a00fa072003201c3b01f8072003201d3a00f707200320273a00f6072003201e3b01f4072003201f3a00f307200320283a00f207200320203b01f007200320213a00ef07200320223600eb07200320293a00ea07200320233b01e80742002105200341e0036a41186a22224200370300200341e0036a41106a22244200370300200341e0036a41086a22024200370300200342003703e003418c97c300ad4280808080c000842218100c2206290000212a2002200641086a2900003703002003202a3703e003200610234190f1c400ad42808080803084222a100c2206290000212b20034190026a41086a2207200641086a2900003703002003202b37039002200610232001200329039002370000200141086a200729030037000020034180056a41086a200229030037030020034180056a41106a202429030037030020034180056a41186a2022290300370300200320032903e00337038005200341c00a6a20034180056a412010e10120032d00c00a21142022200341d90a6a22152900003703002024200341d10a6a22162900003703002002200341c90a6a2217290000370300200320032900c10a3703e00341002102410021014100212241002124410021064100210741002108410021094100210a4100210b4100210c4100210d4100210e4100210f41002110410021114100211241002113024020144101470d0020032903f803210520032d00f703210220032d00f603210120032f01f403212220032d00f303212420032d00f203210620032f01f003210720032d00ef03210820032d00ee03210920032f01ec03210a20032d00eb03210b20032d00ea03210c20032f01e803210d20032d00e703210e20032d00e603210f20032f01e403211020032d00e303211120032d00e203211220032f01e00321130b200341da0a6a2005370100201520023a0000200341c00a6a41186a220220013a0000200341d60a6a20223b0100200341d50a6a20243a0000200341d40a6a20063a0000200341d20a6a20073b0100201620083a0000200341c00a6a41106a220120093a0000200341ce0a6a200a3b0100200341cd0a6a200b3a0000200341cc0a6a200c3a0000200341ca0a6a200d3b01002017200e3a0000200341c00a6a41086a2222200f3a0000200320103b01c60a200320113a00c50a200320123a00c40a200320133b01c20a2003418e023b01c00a200341c00a6a10e0012002200341e8076a41186a2901003703002001200341e8076a41106a2901003703002022200341e8076a41086a290100370300200320032901e8073703c00a2018100c220229000021052002290008211820021023202a100c2202290000212a2002290008212b200210232003202b3701b8052003202a3701b005200320183701a805200320053701a005412010212202450d3e200220032903c00a370000200241186a200341c00a6a41186a290300370000200241106a200341c00a6a41106a290300370000200241086a200341c00a6a41086a290300370000200341a0056aad42808080808004842002ad4280808080800484100e200210232000410036020420004100360200200424000f0b41823021030b20004100360204200041146a410b360200200041106a41a181c3003602002000410c6a200336020020004101360200200424000f0b200141286a280200210102400240024002400240200241ff01710d00202441ff01714101470d00200320053703d806200320063a00d706200320073a00d606200320083b01d406200320093a00d3062003200a3a00d2062003200b3b01d0062003200c3a00cf062003200d3a00ce062003200e3b01cc062003200f3a00cb06200320103a00ca06200320113b01c806200320123a00c706200320133a00c606200320143b01c406200320153a00c306200320163a00c206200320173b01c006200341e0036a41186a22074200370300200341e0036a41106a22244200370300200341e0036a41086a22024200370300200342003703e003418c97c300ad4280808080c00084100c220629000021052002200641086a290000370300200320053703e003200610234190f1c400ad42808080803084100c2206290000210520034190026a41086a2208200641086a2900003703002003200537039002200610232024200329039002220537030020034180056a41086a200229030037030020034180056a41106a200537030020034180056a41186a2008290300370300200320032903e00337038005200341c00a6a20034180056a412010e10120032d00c00a21062007200341d90a6a2900003703002024200341d10a6a2900003703002002200341c90a6a290000370300200320032900c10a3703e0030240024020064101460d0020034188096a41186a420037030020034188096a41106a420037030020034188096a41086a420037030020034200370388090c010b20034188096a41186a200729030037030020034188096a41106a202429030037030020034188096a41086a2002290300370300200320032903e003370388090b0240200341c0066a20034188096a412010a305450d00200110b4022001102341833021030c020b200320183701b805200320193a00b705200320253a00b6052003201a3b01b4052003201b3a00b305200320263a00b2052003201c3b01b0052003201d3a00af05200320273a00ae052003201e3b01ac052003201f3a00ab05200320283a00aa05200320203b01a805200320213a00a705200320224118763a00a605200320224108763b01a405200320223a00a305200320293a00a205200320233b01a005200341c00a6a200141b00210a1051a20034192096a20032901a8053701002003419a096a20032901b005370100200341a2096a20032901b80537010020034180023b018809200320032901a00537018a09200341e8076a200341c00a6a20034188096a10cf024101210220032802e8074101470d04200341d00a6a200341fc076a280200360200200341c80a6a2202200341f4076a290200370300200320032902ec073703c00a2002109201419db3c500ad4280808080a00184100a4186a0c000ad4280808080e00184100a20032802c00a4101460d0241fc9fc000ad4280808080a00184100a0c030b200110b4022001102341823021030b20004100360204200041146a410b360200200041106a41a181c3003602002000410c6a200336020020004101360200200424000f0b20033502c40a100b0b410021020b200320023a00c20a2003418e043b01c00a200341c00a6a10e001200110232000410036020420004100360200200424000f0b000b41022107200141106a29030021052001410c6a280200210620022d0001212420022d0000212202400240024002400240024002400240024002400240024002400240200141086a280200417f6a0e0a00010203040506070809000b41002103200041003602042024202241ff01714100477241ff0171450d512000410c6a41023602000c500b2005a721030240202241ff01710d00202441ff01714101470d002003450d09200610230c090b02402003450d00200610230b200041003602042000410c6a41023602000c4f0b02402024202241ff01714100477241ff01710d00410810212203450d452003200537000041aa9dc500ad4280808080a001842003ad4280808080800184100e200310230c080b200041003602042000410c6a41023602000c4e0b410021082005a721092024202241ff01714100477241ff01710d4c20034188096a2005428080808070832006ad8422051017108b012003280288092202450d4a200328028c092101200320034190096a2802003602ec07200320023602e807200341206a200341e8076a10880120032802200d4920032802ec07220720032802242222490d492022417f4c0d1b0240024020220d00410121240c010b202210272224450d44202420032802e8072208202210a1051a2003200720226b3602ec072003200820226a3602e8070b2024450d49200341186a200341e8076a1088012022ad22184220862018842218a7210720032802180d4720032802ec072208200328021c2222490d472022417f4c0d1b0240024020220d004101210a0c010b20221027220a450d44200a20032802e807220b202210a1051a2003200820226b22083602ec072003200b20226a3602e8070b200a450d472022ad222a422086202a84222aa7210b0240024002400240024020084104490d0020032802e807222228000021102003202241046a3602e80720032008417c6a220c3602ec07200c4104490d012003202241086a3602e807202228000421112003200841786a220c3602ec07200c4104490d032003200841746a3602ec0720032022410c6a3602e80720222800082112200341106a200341e8076a1088012003280210450d020c4b0b0240200b450d00200a10230b20070d4c0c4d0b0240200b450d00200a10230b20070d4b0c4c0b2003280214220820032802ec07410c6e2222202220084b1bad420c7e222b422088a70d1d202ba7220c417f4c0d1d02400240200c0d004104210d0c010b200c1021220d450d460b41002122200341003602c80a2003200d3602c00a2003200c410c6e3602c40a024002402008450d000340200341c0066a200341e8076a10f60220032d00c0064101460d0220032802ec07220c4104490d0220032900c106212b20032802e807220e280000210f2003200c417c6a3602ec072003200e41046a3602e8070240202220032802c40a470d00200341c00a6a2022410110950120032802c00a210d20032802c80a21220b200d2022410c6c6a220c200f360208200c202b3702002003202241016a22223602c80a2008417f6a22080d000b0b200d450d4920032902c40a212b2003200d36028c04200341013602880420032012360284042003201136028004200320103602fc032003202a422088a73602f8032003200b3602f4032003200a3602f003200341013602ec0320032018422088a7220c3602e803200320073602e403200320243602e0032003202b3703900402402001450d00200210230b202ba7210841c8ddc4002102410f210141002122200c4107470d482024419cc9c200460d022024419cc9c200410710a305450d020c480b20032802c40a2203450d482003410c6c450d48200d10230c480b0240200b450d00200a10230b2007450d4a0c490b0240201141024f0d0041aeddc4002102411a2101410121220c460b02402007450d00202410230b0240200b450d00200a10230b02402008450d002008410c6c450d00200d10230b41b49dc500ad4280808080d000842005100e41002102200341003a00c00a200341023a00c40a200341c00a6a10e0012009450d07200610232000410036020420004100360200200424000f0b2005a7210202402024202241ff01714100477241ff01710d0041b49dc500ad4280808080d000842005428080808070832006ad84100e200341003a00c00a200341023a00c40a200341c00a6a10e0012002450d06200610230c060b02402002450d00200610230b200041003602042000410c6a41023602000c4c0b2024202241ff01714100477241ff01710d1a2005422088a721072005a721080240024020064101460d0041b99dc500ad4280808080d0018410110c010b410410212202450d412002200836000020024104410810252202450d412002200736000441b99dc500ad4280808080d001842002ad4280808080800184100e200210230b200341e0036a41186a4200370300200341e0036a41106a22224200370300200341e0036a41086a22024200370300200342003703e00341e4dec400ad4280808080e00084100c220129000021052002200141086a290000370300200320053703e003200110234191dfc400ad4280808080e00084100c2201290000210520034190026a41086a2224200141086a2900003703002003200537039002200110232022200329039002220537030020034180056a41086a200229030037030020034180056a41106a200537030020034180056a41186a2024290300370300200320032903e00337038005200341c00a6a20034180056a10f7020240024020032802c00a22220d00410021242003410036029009200342043703880941042122410021010c010b200320032902c40a220537028c0920032022360288092005422088a721012005a721240b200341c0066a41026a2209200341e8076a41026a2d00003a0000200341a0056a41086a220a200341c00a6a41086a290200370300200341a0056a41106a220b200341c00a6a41106a280200360200200320032f00e8073b01c006200320032902c00a3703a005024020012024470d0020034188096a2024410110a201200328028c092124200328028809212220032802900921010b2022200141246c220c6a220241043a00002002200736020c2002200836020820022006360204200241036a20092d00003a0000200220032f01c0063b0001200220032903a005370210200241186a200a290300370200200241206a200b2802003602002003200141016a22023602900941e4dec400ad4280808080e00084100c2206290000210520062900082118200610234191dfc400ad4280808080e00084100c2206290000212a2006290008212b200610232003202b3703b8052003202a3703b005200320183703a805200320053703a005200341203602c4062003200341a0056a3602c00620222002200341c0066a10f802024020022001490d00200c41246a21022022210303400240024020032d0000220141044b0d0002400240024020010e050400010204040b2003410c6a280200450d03200341086a28020010230c030b2003410c6a280200450d02200341086a28020010230c020b2003410c6a280200450d01200341086a28020010230c010b200341086a280200450d00200341046a28020010230b200341246a21032002415c6a22020d000b0b2024450d04202441246c450d04202210230c040b2005422088a721012005a7210702402024202241ff01714100477241ff01710d000240200141186c2203450d00200620036a2102200621030340200341086a350200422086200335020084200341146a3502004220862003410c6a35020084100e200341186a22032002470d000b0b02402001450d00200141186c21022006210303400240200341046a280200450d00200328020010230b0240200341106a280200450d002003410c6a28020010230b200341186a2103200241686a22020d000b0b2007450d04200741186c450d04200610230c040b02402001450d00200141186c21022006210303400240200341046a280200450d00200328020010230b0240200341106a280200450d002003410c6a28020010230b200341186a2103200241686a22020d000b0b02402007450d00200741186c450d00200610230b200041003602042000410c6a41023602000c4a0b2005422088a721012005a7210702402024202241ff01714100477241ff01710d0002402001410c6c2203450d00200620036a2102200621030340200341086a35020042208620033502008410112003410c6a22032002470d000b0b02402001450d002001410c6c21022006210303400240200341046a280200450d00200328020010230b2003410c6a2103200241746a22020d000b0b2007450d032007410c6c450d03200610230c030b02402001450d002001410c6c21022006210303400240200341046a280200450d00200328020010230b2003410c6a2103200241746a22020d000b0b02402007450d002007410c6c450d00200610230b200041003602042000410c6a41023602000c490b2005a7210302402024202241ff01714100477241ff01710d002005428080808070832006ad8410122003450d02200610230c020b02402003450d00200610230b200041003602042000410c6a41023602000c480b202241ff01710d0241012101202441ff01714101470d022002411a6a2901002105200241196a2d00002122200241186a2d00002124200241166a2f01002106200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f010021142003200241096a2d00003a00a705200320103a00a605200320113b01a405200320123a00a305200320133a00a205200320143b01a0052003200a3a00af052003200b3a00ae052003200c3b01ac052003200d3a00ab052003200e3a00aa052003200f3b01a805200320223a00b705200320243a00b605200320063b01b405200320073a00b305200320083a00b205200320093b01b005200320053703b80520034188096a41186a200537030020034188096a41106a20032903b00537030020034190096a20032903a805370300200320032903a00537038809200341c0066a20034188096a109702200341c00a6a20032802c006220220032802c80610980242002105420021184200212a4200212b4200212c4200212d4200212e4200212f024020032903c00a4201520d0020032d008c0b452101200341c00a6a41106a290300212f200341e00a6a2903002118200341c00a6a41186a2903002105200341f00a6a290300212b200341e80a6a290300212a200341800b6a290300212d200341f80a6a290300212c20032903c80a212e0b024020032802c406450d00200210230b024020010d00410f210341efdcc4002102418080102101410321220c040b0240202a200584202c84202e84202b201884202d84202f8484500d004113210341fedcc40021024180800c2101410321220c040b200341c00a6a41186a20034188096a41186a290300370300200341c00a6a41106a20034188096a41106a290300370300200341c00a6a41086a20034188096a41086a29030037030020032003290388093703c00a200341c0066a200341c00a6a10f90220033502c80642208620032802c0062202ad84101120032802c406450d00200210230b410021020b2000200236020420002002360200200424000f0b41002101410221220b20004100360204200041146a2003360200200041106a20023602002000410c6a20014180801c712022723602000c430b0240024020022d00000d0020022d000141ff01714102470d00200141086a2903002105200341e0036a41186a22244200370300200341e0036a41106a22024200370300200341e0036a41086a22014200370300200342003703e00341b494c700ad42808080809001842218100c2222290000212a2022290008212b202210232001202b3703002003202a3703e00341a89ec700ad4280808080900184100c2206290000212a20034190026a41086a2222200641086a2900003703002003202a37039002200610232002200329039002222a37030020034180056a41086a2207200129030037030020034180056a41106a2208202a37030020034180056a41186a22092022290300370300200320032903e00337038005200341c8006a20034180056a4120419ca8c70041004100108c0120032802484101460d14202442003703002002420037030020014200370300200342003703e0032018100c220629000021182006290008212a200610232001202a370300200320183703e00341bd94c700ad428080808030842218100c2206290000212a2022200641086a2900003703002003202a37039002200610232002200329039002370000200241086a2022290300370000200720012903003703002008200229030037030020092024290300370300200320032903e00337038005200341386a20034180056a10fa022003290340500d012003280238450d01200341e0036a41186a22244200370300200341e0036a41106a22064200370300200341e0036a41086a22014200370300200342003703e00341b494c700ad4280808080900184100c2222290000212a2022290008212b202210232001202b3703002003202a3703e00341bd94c700ad42808080803084100c2222290000212a20034190026a41086a2207202241086a2900003703002003202a37039002202210232002200329039002370000200241086a200729030037000020034180056a41086a200129030037030020034180056a41106a200629030037030020034180056a41186a2024290300370300200320032903e00337038005200341286a20034180056a10fa02200329033042b8177c42b81720032802281b2005580d0141f5a2c70041ce00418c94c700102d000b200041003602042000410c6a410236020020004101360200200424000f0b200341e0036a41186a22224200370300200341e0036a41106a22244200370300200341e0036a41086a22014200370300200342003703e00341b494c700ad4280808080900184222a100c2206290000212b2006290008212c200610232001202c3703002003202b3703e0032018100c2207290000211820034190026a41086a2206200741086a2900003703002003201837039002200710232002200329039002370000200241086a2208200629030037000020034180056a41086a2209200129030037030020034180056a41106a220a202429030037030020034180056a41186a220b2022290300370300200320032903e00337038005200320053703c00a20034180056aad42808080808004842205200341c00a6aad22184280808080800184100e202242003703002024420037030020014200370300200342003703e003202a100c2207290000212a2007290008212b200710232001202b3703002003202a3703e00341a89ec700ad4280808080900184100c2207290000212a2006200741086a2900003703002003202a370390022007102320022003290390023700002008200629030037000020092001290300370300200a2024290300370300200b2022290300370300200320032903e00337038005200341013a00c00a2005201842808080801084100e2000410036020420004100360200200424000f0b200141156a29000021052001410d6a29000021182002411a6a290100212c200241196a2d00002124200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f01002116200141286a28020021192001411d6a290000212a200141056a290000222b421888a7211720022d0001212220022d000021020240024002400240024020012d00040e050001020304000b200341c00a6a41146a4101360200200342013702c40a200341a4c5c6003602c00a2003410436028c09200341cccec60036028809200320034188096a3602d00a200341c00a6a419ca8c700103a000b200241ff01710d15202241ff01714101470d152003202c37038008200320243a00ff07200320063a00fe07200320073b01fc07200320083a00fb07200320093a00fa072003200a3b01f8072003200b3a00f7072003200c3a00f6072003200d3b01f4072003200e3a00f3072003200f3a00f207200320103b01f007200320113a00ef07200320123a00ee07200320133b01ec07200320143a00eb07200320153a00ea07200320163b01e807200341e0036a201710fb02200341c00a6a20032802e003220920032802e803220a10fc0220034188096a41086a2202200341c00a6a41106a29030037030020034188096a41106a2201200341c00a6a41186a29030037030020034188096a41186a2222200341e00a6a290300370300200320032903c80a37038809024020032903c00a4201510d00200341c0066a41086a200341e8076a41086a290300370300200341c0066a41106a200341e8076a41106a290300370300200341c0066a41186a200341e8076a41186a290300370300200320032903e8073703c006200342003703a80520034280a094a58d1d3703a0052003200341e8076a360280052003200341e8076a3602a0022003200341a0026a3602c80a200320034180056a3602c40a2003200341a0056a3602c00a20034188096a200341e8076a200341c00a6a10fd0202402003280288094101470d0020034194096a280200210120034190096a280200212220032d008f09210720032d008e09212420032d008d09210620032d008c0921020c380b41042102024020034188096a41086a2903004201510d000c380b20034188096a41106a290300210520032802a0022101200341f80a6a20034188096a41186a290300370300200341f00a6a2005370300200341c00a6a41086a41003a0000200341c90a6a2001290000370000200341d10a6a200141086a290000370000200341d90a6a200141106a290000370000200341e10a6a200141186a290000370000200341023a00c00a200341c00a6a10e0010c370b200341c0066a41186a2022290300370300200341c0066a41106a2001290300370300200341c0066a41086a200229030037030020032003290388093703c0064105210141d0a4c6002122410221244104210641032102410021080c370b200341c0066a41106a20053703002003202b3703c0062003202a3703d806200320183703c8060240200241ff01710d00202241ff01714101470d002003202c3703a009200320243a009f09200320063a009e09200320073b019c09200320083a009b09200320093a009a092003200a3b0198092003200b3a0097092003200c3a0096092003200d3b0194092003200e3a0093092003200f3a009209200320103b019009200320113a008f09200320123a008e09200320133b018c09200320143a008b09200320153a008a09200320163b018809024020034188096a200341c0066a412010a3050d00410021014103210241042122410b212441c5a4c6002106410321070c360b200341a0056a201910fb02200341c00a6a20032802a005220820032802a805220910fc02410321024104212241002101024020032903c00a4201510d0041dda4c6002106410b2124410021070c350b200341f00a6a2903002105200341e80a6a2903002118200341d00a6a2224290300212b200341c00a6a41206a290300212a20032903c80a212c2024200341d80a6a2903003703002003202a3703d80a2003202c3703c00a2003202b3703c80a200341c00a6a20034188096a412010a3050d16200341e8076a20034188096a200341c0066a20182005410110fe02200341e8076a41086a290300212b0240024020032802e8074101460d0042002005200341e8076a41106a2903007d2018202b54ad7d222a2018202b7d222b201856202a200556202a2005511b22021b21054200202b20021b2118200341c0066a41106a290300212c20032903c806212d20032903c006212e20032903d806212a4201212b4100212241002107410021010c010b20032802ec07220241187621012002411076210720024108762122202b422088a72124202ba72106200241ff01714104470d354200212b0b200341f00a6a2005370300200341e80a6a2018370300200341e00a6a202a3703002003202b3703c00a200341d80a6a202c3703002003202e3703c80a2003202d3703d00a02400240202b4201510d002009ad4220862008ad8410110c010b411010212202450d3b20024110412010252202450d3a2002200341c80a6a220a290000370000200241186a200a41186a290000370000200241106a200a41106a290000370000200241086a200a41086a2900003700002002412041c00010252202450d3a20022018370020200241286a20053700002009ad4220862008ad842002ad4280808080800684100e200210230b410421020c340b410021224102210241002107410021010c340b0240200241ff01710d00202241ff01714101470d002003202c37038008200320243a00ff07200320063a00fe07200320073b01fc07200320083a00fb07200320093a00fa072003200a3b01f8072003200b3a00f7072003200c3a00f6072003200d3b01f4072003200e3a00f3072003200f3a00f207200320103b01f007200320113a00ef07200320123a00ee07200320133b01ec07200320143a00eb07200320153a00ea07200320163b01e807200341e0036a201710fb02200341c00a6a20032802e003220620032802e803222210fc024103210241002101024020032903c00a4201510d0041dda4c6002122410b21240c320b200341f00a6a290300212b200341e80a6a290300212c200341c00a6a41106a2903002105200341c00a6a41206a290300211820032903c80a212a200341c0066a41106a200341d80a6a290300370300200320183703d8062003202a3703c006200320053703c806200341c0066a200341e8076a412010a3050d162003202c3703a0052003202b3703a8050240202c202b84500d002003200341e8076a3602a00220034188096a200341e8076a200341a0056a200341a0026a10ff022003290388094201520d002003290390092105200341f80a6a20034188096a41106a290300370300200341f00a6a2005370300200341c00a6a41086a41003a0000200341c90a6a20032903e807370000200341d10a6a200341e8076a41086a290300370000200341d90a6a200341e8076a41106a290300370000200341e10a6a20034180086a290300370000200341023a00c00a200341c00a6a10e0010b2022ad4220862006ad841011410421020c310b41002101410221020c310b2022200241ff01714100477241ff01710d15200341a0056a201910fb02200341c00a6a20032802a005222220032802a805220710fc02200341f00a6a2102200341e80a6a2101200341d80a6a2124200341e00a6a2106024020032903c00a4201520d002002290300212c2001290300212d200341c00a6a41106a290300212e2006290300212f20032903c80a2130200341c0066a41106a20242903003703002003202f3703d806200320303703c0062003202e3703c8062003202d3703e8072003202c3703f007202d202c84500d002003200341c0066a3602e00320034188096a200341c0066a200341e8076a200341e0036a10ff022003290388094201520d00200329039009212c200341f80a6a20034188096a41106a290300370300200341f00a6a202c370300200341c00a6a41086a41003a0000200341c90a6a20032903c006370000200341d10a6a200341c0066a41086a290300370000200341d90a6a200341c0066a41106a290300370000200341e10a6a200341d8066a290300370000200341023a00c00a200341c00a6a10e0010b20024200370300200142003703002006202a370300202420053703002003202b3703c80a200342013703c00a200320183703d00a411010212202450d3720024110412010252202450d362002200341c80a6a2201290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700002002412041c00010252202450d3620024200370020200241286a42003700002007ad4220862022ad842002ad4280808080800684100e20021023024020032802a405450d00202210230b200341cd0a6a2018370000200341c00a6a41286a2019360200200341dd0a6a202a370000200341d50a6a20053700002003202b3700c50a200341003a00c40a200341013a00c00a200341c00a6a10e0012000410036020420004100360200200424000f0b200141216a290000212a200141206a2d000021062001411d6a2f000021072001411c6a2d00002108200141196a2f00002109200141186a2d0000210a200141156a2f0000210b200141146a2d0000210c200141116a2f0000210d200141106a2d0000210e2001410d6a2f0000210f2001410c6a2d00002110200141096a2f00002111200141086a2d0000212220012d001f211220012d001b211320012d0017211420012d0013211520012d000f211620012d000b211720032001412c6a28000036008b022003200128002936028802200141c8006a290300212c200141c0006a290300212b200141386a2903002105200141306a29030021182002411a6a290100212d200241196a2d00002119200241186a2d0000211a200241166a2f0100211b200241156a2d0000211c200241146a2d0000211d200241126a2f0100211e200241116a2d0000211f200241106a2d000021202002410e6a2f010021212002410d6a2d000021232002410c6a2d000021252002410a6a2f01002126200241096a2d00002127200241086a2d00002128200241066a2f01002129200241056a2d00002131200241046a2d00002132200241026a2f0100213320022d0001212420022d000021020240024002400240024020220e050001020304000b200341c00a6a41146a4101360200200342013702c40a200341a4c5c6003602c00a2003410436028c09200341cccec60036028809200320034188096a3602d00a200341c00a6a419ca8c700103a000b02400240200241ff01710d00202441ff01714101470d002003202d3703a009200320193a009f092003201a3a009e092003201b3b019c092003201c3a009b092003201d3a009a092003201e3b0198092003201f3a009709200320203a009609200320213b019409200320233a009309200320253a009209200320263b019009200320273a008f09200320283a008e09200320293b018c09200320313a008b09200320323a008a09200320333b0188092003202a3703d80a200320063a00d70a200320123a00d60a200320073b01d40a200320083a00d30a200320133a00d20a200320093b01d00a2003200a3a00cf0a200320143a00ce0a2003200b3b01cc0a2003200c3a00cb0a200320153a00ca0a2003200d3b01c80a2003200e3a00c70a200320163a00c60a2003200f3b01c40a200320103a00c30a200320173a00c20a200320113b01c00a200341c0066a20034188096a200341c00a6a2018200541011080034100210220032d00c00622014104460d32200341c0066a41086a280200210220032802c406212220032d00c106410874212420032d00c206411074210620032d00c30641187421030c010b410021244102210141002106410021030b200041146a2002360200200041106a20223602002000410c6a20032006722024722001723602000c2d0b2024200241ff01714100477241ff01710d182003202a3703b802200320063a00b702200320123a00b602200320073b01b402200320083a00b302200320133a00b202200320093b01b0022003200a3a00af02200320143a00ae022003200b3b01ac022003200c3a00ab02200320153a00aa022003200d3b01a8022003200e3a00a702200320173a00a202200320113b01a0022003200f4108742010722016411874723600a3024200212e20034200202c202b20187c222a4280c8afa025544100202c20057c202a202b54ad7c501b22021b222c3703c80320034200202b20021b222b3703c0032003200341a0026a3602ac0a200341b00a6a200341a0026a109702200341e8076a20032802b00a222420032802b80a220610980220032903e8072130200342003703e8074200200520021b21054200201820021b2118200341b0086a280200210720032d00b40821080240024020304201510d00200341a0056a41306a4200370300200341a0056a41286a4200370300200341a0056a41206a4200370300200341a0056a41186a4200370300200341b0056a4200370300200341a0056a41086a4200370300200342003703a0054200212f4200212d4200212a420021340c010b200341a0086a2903002135200341e8076a41306a2903002136200341e8076a41206a290300212f200341e8076a41186a290300212e200341a8086a290300213420032903f807212a20032903f007212d200341a0056a41206a200341e8076a41286a290300370300200341a0056a41286a2036370300200341a0056a41306a2035370300200341b0056a202e3703002003202f3703b8052003202d3703a0052003202a3703a8050b202d202e7c2236202d5421222018202d562005202a562005202a5122021b0d172018202d542005202a5420021b450d2e200341e0036a41186a220b4200370300200341e0036a41106a22014200370300200341e0036a41086a22024200370300200342003703e00341bdadc500ad4280808080800184222b100c2209290000212c2009290008213520091023200220353703002003202c3703e00341c5adc500ad4280808080d00184222c100c220a290000213520034190026a41086a2209200a41086a2900003703002003203537039002200a10232001200329039002223537030020034180056a41086a220c200229030037030020034180056a41106a220d203537030020034180056a41186a220e2009290300370300200320032903e0033703800520034198016a20034180056a412010d70120034198016a41106a290300213520032903a0012137200328029801210a200b42003703002001420037030020024200370300200342003703e003202b100c220b290000212b200b2900082138200b1023200220383703002003202b3703e003202c100c220b290000212b2009200b41086a2900003703002003202b37039002200b10232001200329039002222b370300200c2002290300370300200d202b370300200e2009290300370300200320032903e003370380052003420020354200200a1b222b202d201854ad2005202a7d7c7c20374200200a1b222c202d20187d223554ad7d222d202c20357d2235202c56202d202b56202d202b511b22021b3703c80a20034200203520021b3703c00a200341c00a6a210220034180056a21010c2d0b200141d8006a290300212d200141d0006a290300212e20034187086a202c3c0000200341f7076a20053700002003202b3700ff07200320183700ef072003200328008b023600eb0720032003280288023602e80741002101024002402024200241ff01714100477241ff01710d002003202a3703a009200320063a009f09200320123a009e09200320073b019c09200320083a009b09200320133a009a09200320093b0198092003200a3a009709200320143a0096092003200b3b0194092003200c3a009309200320153a0092092003200d3b0190092003200e3a008f09200320163a008e092003200f3b018c09200320103a008b09200320173a008a09200320113b018809200341c00a6a41186a200341e8076a41186a290300370300200341c00a6a41106a200341e8076a41106a290300370300200341c00a6a41086a200341e8076a41086a290300370300200320032903e8073703c00a200341c0066a20034188096a200341c00a6a202e202d41011080034100210220032d00c00622224104460d30200341c0066a41086a280200210220032802c406212420032d00c106410874210120032d00c206411074210620032d00c30641187421030c010b4102212241002106410021030b200041146a2002360200200041106a20243602002000410c6a20032006722001722022723602000c2b0b2003202a3703b805200320063a00b705200320123a00b605200320073b01b405200320083a00b305200320133a00b205200320093b01b0052003200a3a00af05200320143a00ae052003200b3b01ac052003200c3a00ab05200320153a00aa052003200d3b01a8052003200e3a00a705200320163a00a6052003200f3b01a405200320103a00a305200320173a00a205200320113b01a00502400240200241ff01710d00202441ff01714101470d002003202d3703a009200320193a009f092003201a3a009e092003201b3b019c092003201c3a009b092003201d3a009a092003201e3b0198092003201f3a009709200320203a009609200320213b019409200320233a009309200320253a009209200320263b019009200320273a008f09200320283a008e09200320293b018c09200320313a008b09200320323a008a09200320333b018809200341c00a6a41186a200341a0056a41186a290300370300200341c00a6a41106a200341a0056a41106a290300370300200341c00a6a41086a200341a0056a41086a290300370300200320032903a0053703c00a41002102200341c0066a20034188096a200341c00a6a20182005410010800320032d00c00622014104460d2f200341c0066a41086a280200210220032802c406212220032d00c106410874212420032d00c206411074210620032d00c30641187421030c010b410021244102210141002106410021030b200041146a2002360200200041106a20223602002000410c6a20032006722024722001723602000c2a0b2001410c6a2802002107200141086a28020021092001280204210b4102212202400240024020022d00000d0020022d000141ff01714102470d002007410a4b0d01200341a0056a41186a22244200370300200341a0056a41106a22064200370300200341a0056a41086a22024200370300200342003703a00541fea6c600ad4280808080a001842205100c220129000021182002200141086a290000370300200320183703a005200110234198bdc600ad4280808080c00184222b100c220129000821182001290000212a20011023200341e8076a41106a2201202a370300200341e8076a41186a22082018370300200341e8076a41086a220a2002290300370300200320032903a0053703e807200341e8076a108103220c41ff01714102460d0241032122200c410171450d020b4101210d4110210a41cfa7c600210e2007450d280c270b4102210d41032122410d210a41c2a7c600210e0c260b202442003703002006420037030020024200370300200342003703a0052005100c222229000021182002202241086a290000370300200320183703a00520221023202b100c222229000821182022290000212a202210232001202a37030020082018370300200a2002290300370300200320032903a0053703e807200341013a00c00a200341e8076aad4280808080800484222a200341c00a6aad42808080801084100e200341e0036a41186a4200370300200341e0036a41106a22194200370300200341e0036a41086a22224200370300200342003703e00341e4dec400ad4280808080e00084100c220c29000021182022200c41086a290000370300200320183703e003200c102341f3dec400ad4280808080e00084100c220c290000211820034190026a41086a220d200c41086a2900003703002003201837039002200c10232019200329039002221837030020034180056a41086a202229030037030020034180056a41106a201837030020034180056a41186a200d290300370300200320032903e00337038005200341b8016a20034180056a412010cd0120032802bc01210c20032802b801210d202442003703002006420037030020024200370300200342003703a0052005100c222229000021052002202241086a290000370300200320053703a00520221023419ca8c600ad4280808080e00084100c2222290008210520222900002118202210232001201837030020082005370300200a2002290300370300200320032903a0053703e807200341c00a6a200341e8076a1082030240024020032802c00a22100d00200341003602b80a200342043703b00a4104211041002101410021020c010b200320032902c40a22053702b40a200320103602b00a2005422088a721012005a721020b200c4100200d1b2122024020012002470d00200341b00a6a20014101109b0120032802b00a211020032802b80a21010b2010200141c4006c6a220241003a000020022022360204200241036a200341c0066a41026a2d00003a0000200220032f00c0063b0001200220032902c00a370208200241106a200341c00a6a41086a2225290200370200200241186a200341c00a6a41106a2226290200370200200241206a200341c00a6a41186a290200370200200241286a200341c00a6a41206a290200370200200241306a200341c00a6a41286a290200370200200241386a200341c00a6a41306a290200370200200241c0006a200341c00a6a41386a2802003602002003200141016a220f3602b80a200b200741f0006c22026a2123024020070d00200b21240c240b200b41f4006a2106200241907f6a210841e4dec400ad4280808080e000842118200b212403402024280204211120242802002122200341c00a6a202441086a41e80010a1051a202441f0006a21242011450d2420034188096a200341c00a6a41e80010a1051a200320113602c40a200320223602c00a202520034188096a41e80010a1051a200341e0036a41186a22134200370300200341e0036a41106a22144200370300200341e0036a41086a22124200370300200342003703e0032018100c220229000021052012200241086a290000370300200320053703e0032002102341f3dec400ad4280808080e00084100c2202290000210520034190026a41086a2201200241086a2900003703002003200537039002200210232019200329039002370000201941086a200129030037000020034180056a41086a2215201229030037030020034180056a41106a2216201429030037030020034180056a41186a22172013290300370300200320032903e00337038005200341b0016a20034180056a412010cd0120032802b001210220032802b4012101200341e8076a200341c00a6a108303410c210a024020220d0041b6a7c600210e4103210d0c240b024020222001410020021b22024d0d0041aaa7c600210e4104210d0c240b200341c0066a2022417f6a1084030240200341c0066a2026412010a305450d004112210a41dfa7c600210e4100210d0c240b0240202220024f0d004108210a418ea7c600210e4106210d0c240b0240024020102010200f41c4006c22016a460d00201041016a2102034002402002417f6a2d00004101470d004101210c200341e8076a2002460d032002200341e8076a412010a305450d030b200241c4006a2102200141bc7f6a22010d000b0b4100210c0b200341c0066a2022108403200341c0066a200341e8076a412010a30521024114210a4196a7c600210e4105210d200c0d232002450d23200341c0036a41086a220a200341a0056a41086a290200370300200341c0036a41106a220c200341a0056a41106a2f01003b0100200320032902a0053703c003200341e8076a200341c00a6a108303201742003703002016420037030020154200370300200342003703800541c80010212202450d35200341e0036a108503200241186a2013290300370200200241106a2014290300370200200241086a2012290300370200200220032903e003370200200241023602202002410136024420022003290380053701242002412c6a2015290300370100200241346a20162903003701002002413c6a2017290300370100200320023602c00620034282808080203702c406200341c0066a10b901200341c0066a41186a4200370300200341c0066a41106a22014200370300200341c0066a41086a22224200370300200342003703c006200341c0066a10d10220032f01e807210d20032d00ea07210e20032800eb07211220032d00ef07211320032f01f007211420032d00f207211520032d00f307211620032f01f407211720032d00f607211a20032d00f707211b20032f01f807211c20032d00fa07211d20032d00fb07211e20032f01fc07211f20032d00fe07212020032d00ff07212120032903800821052001200c2f01003b01002022200a290300370300200320032903c0033703c0060240200f20032802b40a470d00200341b00a6a200f4101109b0120032802b80a210f0b20032802b00a2210200f41c4006c6a220241003a002120022005370019200220213a0018200220203a00172002201f3b00152002201e3a00142002201d3a00132002201c3b00112002201b3a00102002201a3a000f200220173b000d200220163a000c200220153a000b200220143b0009200220133a0008200220123600042002200e3a00032002200d3b0001200241013a0000200241c0006a20012f01003b0000200241386a2022290300370000200220032903c0063700302003200f41016a220f3602b80a024020032802cc0a2202450d00200241246c21012011210203400240024020022d0000222241044b0d0002400240024020220e050400010204040b2002410c6a280200450d03200241086a28020010230c030b2002410c6a280200450d02200241086a28020010230c020b2002410c6a280200450d01200241086a28020010230c010b200241086a280200450d00200241046a28020010230b200241246a21022001415c6a22010d000b0b024020032802c80a2202450d00200241246c450d00201110230b200841907f6a2108200641f0006a210620242023470d000c250b0b200341c00a6a200141086a41880210a1051a20034188096a41206a200241206a28020036020020034188096a41186a200241186a29020037030020034188096a41106a200241106a29020037030020034188096a41086a200241086a29020037030020032002290200370388092000200341c00a6a20034188096a109402200424000f0b200141086a280200211d2001280204211c200341c00a6a2001410c6a41a40110a1051a2002411a6a2901002105200241196a2d00002122200241186a2d00002124200241166a2f01002106200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241096a2d00002110200241086a2d00002111200241066a2f01002112200241056a2d00002113200241046a2d00002114200241026a2f0100211520022d0001210120022d000021020240201c450d00200341a0026a200341c00a6a41046a41a00110a1051a024002400240200241ff01710d00200141ff01714101460d010b0240201d450d00201c10230b41002103410221020c010b200320053703d803200320223a00d703200320243a00d603200320063b01d403200320073a00d303200320083a00d203200320093b01d0032003200a3a00cf032003200b3a00ce032003200c3b01cc032003200d3a00cb032003200e3a00ca032003200f3b01c803200320103a00c703200320113a00c603200320123b01c403200320133a00c303200320143a00c203200320153b01c003200341e0036a200341a0026a41a00110a1051a200341c0066a41186a20032903d803370300200341c0066a41106a20032903d003370300200341c8066a20032903c803370300200320032903c0033703c00620034188096a200341c0066a1086020240024020032d0088094101470d00200341ff076a2202200341a1096a290000370000200341e8076a41106a22012003419a096a29010037030020034189056a20034192096a29010037000020034191056a200129030037000020034180056a41186a2002290000370000200320032d0089093a0080052003200329018a0937008105200341a0056a200341e0036a41a00110a1051a20034190026a20034180056a10860320034188096a200328029002220120032802980210870320032d0088092102200341e8076a20034188096a41017241a00110a1051a0240024020024101460d00200341003a00c0060c010b200341013a00c006200341c0066a410172200341e8076a41a00110a1051a0b0240200328029402450d00200110230b200341a0056a41206a211e200341e0056a211f20034180066a2120200341a0066a2121200341e1066a212320034181076a2125200341a1076a2126200341c1076a2127200341c0066a4101722128416c2124034041002101419ca8c70021220240024002400240202441d8cac2006a280000220241e0ea91cb064a22080d00200241f0c2c98b06460d01200241e2c289ab06470d0341202101201e21220c030b200241e1ea91cb06460d010240200241e9dabdf306460d00200241e7e485f306470d0341202101200341a0056a21220c030b41202101201f21220c020b41202101202021220c010b41202101202121220b20032001360290092003202236028c092003200236028809200341e8076a20034188096a10880320034188096a20032802e807220720032802f00710e10120032802ec0721060240024020032d0088094101470d0020032900a109210520032d00a009210920032d009f09210a20032f009d09210b20032d009c09210c20032d009b09210d20032f009909210e20032d009809210f20032d009709211020032f009509211120032d009409211220032d009309211320032f009109211420032d009009211520032d008f09211620032f008d09211720032d008c09211920032d008b09211a20032f008909211b02402006450d00200710230b200320053703a009200320093a009f092003200a3a009e092003200b3b019c092003200c3a009b092003200d3a009a092003200e3b0198092003200f3a009709200320103a009609200320113b019409200320123a009309200320133a009209200320143b019009200320153a008f09200320163a008e09200320173b018c09200320193a008b092003201a3a008a092003201b3b01880920034188096a20034180056a412010a305450d0141808008210341f9abc3002101410d21220c040b2006450d00200710230b0240024020032d00c0064101470d0041002106419ca8c7002107024002400240024020080d00200241f0c2c98b06460d01200241e2c289ab06470d0341202106202321070c030b200241e1ea91cb06460d010240200241e9dabdf306460d00200241e7e485f306470d0341202106202821070c030b41202106202521070c020b41202106202621070c010b41202106202721070b024020012006470d0020222007460d0220222007200110a305450d020b20032006360290092003200736028c092003200236028809200341e8076a20034188096a10880320033502f00742208620032802e8072206ad84101120032802ec07450d00200610230b20032001360290092003202236028c092003200236028809200341e8076a20034188096a10880320032802e807210120033502f0072105412010212202450d392002200329038005370000200241186a20034180056a41186a290300370000200241106a20034180056a41106a290300370000200241086a20034180056a41086a29030037000020054220862001ad842002ad4280808080800484100e2002102320032802ec07450d00200110230b202441046a22240d000b20034188096a20034180056a10860320033502900921052003280288092101412010212202450d36200220032903a005370000200241186a200341a0056a41186a290300370000200241106a200341a0056a41106a290300370000200241086a200341a0056a41086a2903003700002002412041c00010252202450d36200220032903c005370020200241386a200341a0056a41386a290300370000200241306a200341a0056a41306a290300370000200241286a200341a0056a41286a290300370000200241c00041800110252202450d36200220032903e005370040200241d8006a200341a0056a41d8006a290300370000200241d0006a200341a0056a41d0006a290300370000200241c8006a200341a0056a41c8006a2903003700002002200329038006370060200241e8006a200341a0056a41e8006a290300370000200241f0006a200341a0056a41f0006a290300370000200241f8006a200341a0056a41f8006a290300370000200241800141800210252202450d36200220032903a0063700800120024198016a200341a0056a4198016a29030037000020024190016a200341a0056a4190016a29030037000020024188016a200341a0056a4188016a29030037000020054220862001ad842002ad4280808080801484100e200210230240200328028c09450d00200110230b024020032d00c0060d00200341c0036a1096020b0240201d450d00201c10230b2000410036020420004100360200200424000f0b4180800421034186acc3002101411721220b0240201d450d00201c10230b410321020b20004100360204200041146a2022360200200041106a20013602002000410c6a20034180800c712002724180167236020020004101360200200424000f0b02400240200241ff01710d00200141ff01714101470d00200320103a00a702200320113a00a602200320123b01a402200320133a00a302200320143a00a202200320153b01a0022003200a3a00af022003200b3a00ae022003200c3b01ac022003200d3a00ab022003200e3a00aa022003200f3b01a802200320223a00b702200320243a00b602200320063b01b402200320073a00b302200320083a00b202200320093b01b002200320053703b802200341c0066a41186a2005370300200341c0066a41106a20032903b002370300200341c8066a20032903a802370300200320032903a0023703c00620034188096a200341c0066a108602024020032d0088094101470d00200341ff076a2202200341a1096a290000370000200341e8076a41106a22012003419a096a290100370300200341e9036a20034192096a290100370000200341f1036a2001290300370000200341e0036a41186a2002290000370000200320032d0089093a00e0032003200329018a093700e10320034180056a200341e0036a10860320034188096a20032802800522022003280288052222108703024020032d0088092201450d002022ad4220862002ad8410110b20032d0089092122200341e8076a20034188096a410272419f0110a1051a20034188096a200341e8076a419f0110a1051a024020014101470d00200341a0056a20034188096a419f0110a1051a0240200328028405450d00200210230b200320223a00c006200341c0066a410172200341a0056a419f0110a1051a20034190096a4120360200200341e7e485f306360288092003200341c0066a36028c09200341e8076a20034188096a10880320033502f00742208620032802e8072202ad841011024020032802ec07450d00200210230b200341e2c289ab063602880920034120360290092003200341c0066a41206a36028c09200341e8076a20034188096a10880320033502f00742208620032802e8072202ad841011024020032802ec07450d00200210230b2003412036029009200320034180076a36028c09200341e9dabdf30636028809200341e8076a20034188096a10880320033502f00742208620032802e8072202ad841011024020032802ec07450d00200210230b20034120360290092003200341a0076a36028c09200341f0c2c98b0636028809200341e8076a20034188096a10880320033502f00742208620032802e8072202ad841011024020032802ec07450d00200210230b20034120360290092003200341c0076a36028c09200341e1ea91cb0636028809200341e8076a20034188096a10880320033502f00742208620032802e8072202ad841011024020032802ec07450d00200210230b200341a0026a10a1022000410036020420004100360200200424000f0b0240200328028405450d00200210230b4106210241f3abc30021014180800c2122410321030c020b411721024186acc3002101418080042122410321030c010b41002122410221030b20004100360204200041146a2002360200200041106a20013602002000410c6a20224180800c712003724180167236020020004101360200200424000f0b41801821244102212220022d00000d1d20022d000141ff01714102470d1d20012802042106200341a0056a41186a4200370300200341a0056a41106a4200370300200341a0056a41086a22024200370300200342003703a00541fee2c200ad4280808080f00184100c22012900002105200129000821182001102320022018370300200320053703a00541e1e6c200ad4280808080e00084100c220129000821052001290000211820011023200341e8076a41106a2018370300200341e8076a41186a2005370300200341e8076a41086a2002290300370300200320032903a0053703e807200341c8016a200341e8076a4120419ca8c70041004100108c0141032122024020032802c8014101470d0041d8e3c2002102410e21030c1f0b200341e0036a41186a4200370300200341e0036a41106a22244200370300200341e0036a41086a22024200370300200342003703e00341e4dec400ad4280808080e00084100c220129000021052002200141086a290000370300200320053703e0032001102341f3dec400ad4280808080e00084100c2201290000210520034190026a41086a2207200141086a2900003703002003200537039002200110232024200329039002220537030020034180056a41086a200229030037030020034180056a41106a200537030020034180056a41186a2007290300370300200320032903e00337038005200341c0016a20034180056a412010cd01024020032802c401410020032802c0011b20064f0d0041d1e3c2002102410721034180980421240c1f0b200341a0056a41186a4200370300200341a0056a41106a4200370300200341a0056a41086a22024200370300200342003703a00541fee2c200ad4280808080f00184100c22012900002105200129000821182001102320022018370300200320053703a00541e1e6c200ad4280808080e00084100c220129000821052001290000211820011023200341e8076a41106a2018370300200341e8076a41186a2005370300200341e8076a41086a2002290300370300200320032903a0053703e807200320063602c00a200341e8076aad4280808080800484200341c00a6aad4280808080c00084100e2000410036020420004100360200200424000f0b200141086a280200210320012802042101024020022d00000d0020022d000141ff01714101470d0002402003450d00200110230b2000410036020420004100360200200424000f0b02402003450d00200110230b200041003602042000410c6a410236020020004101360200200424000f0b2001411c6a280200210a200141186a280200210b200141146a280200210c2001410c6a280200210d200141086a280200210f410021224102212402400240024020022d0000450d000c010b20022d000141ff01714102470d00200141246a280200210e200141106a2802002124200341e0036a41186a22064200370300200341e0036a41106a22024200370300200341e0036a41086a22014200370300200342003703e00341db97c700ad4280808080f00084100c222229000021052001202241086a290000370300200320053703e0032022102341bcbcc300ad4280808080c00184100c2207290000210520034190026a41086a2222200741086a2900003703002003200537039002200710232002200329039002220537030020034180056a41086a2208200129030037030020034180056a41106a2209200537030020034180056a41186a22102022290300370300200320032903e00337038005200341d8016a20034180056a412010cd01200341c00a6a20032802dc01410020032802d8011b2212200e10ae02200341d0016a20032802c00a220720032802c80a419ca8c70041004100108c0120032802d0012111024020032802c40a450d00200710230b200642003703002002420037030020014200370300200342003703e0034180cdc200ad4280808080800184100c220729000021052001200741086a290000370300200320053703e0032007102341d7a1c200ad4280808080c00084100c220729000021052022200741086a2900003703002003200537039002200710232002200329039002370000200241086a2022290300370000200820012903003703002009200229030037030020102006290300370300200320032903e00337038005200341c00a6a20034180056a10ad0220032802c00a2202410120021b211020032902c40a420020021b21050240201141014622010d002010200e4105746a4100200e2005422088a7491b22020d020b41a3a1c20041b6a1c20020011b21064113410a20011b21072001411074212241032124200542ffffff3f83500d00201010230b0240200d450d00200f10230b0240200a450d00200a410c6c2102200c210303400240200341046a280200450d00200328020010230b2003410c6a2103200241746a22020d000b0b0240200b450d00200b410c6c450d00200c10230b20004100360204200041146a2007360200200041106a20063602002000410c6a202220247241801c7236020020004101360200200424000f0b200241086a2900002118200241106a290000212a2002290000212b200341a0056a41186a200241186a290000222c370300200341a0056a41106a202a370300200341a0056a41086a20183703002003202b3703a005200341cd0a6a2018370000200341d50a6a202a370000200341dd0a6a202c370000200341003a00c40a200341073a00c00a2003202b3700c50a200341c00a6a10e001200341003602c80a200342013703c00a2024200341c00a6a10610240024020032802c40a222220032802c80a22026b2024490d0020032802c00a21010c010b200220246a22012002490d13202241017422062001200620014b1b22064100480d130240024020220d00024020060d00410121010c020b2006102122010d010c320b20032802c00a210120222006460d0020012022200610252201450d310b200320063602c40a200320013602c00a0b200120026a200f202410a1051a2003200220246a3602c80a200a200341c00a6a1061200a450d11200c200a410c6c6a2109200c2101034020012802002108200141086a2802002202200341c00a6a10610240024020032802c40a222420032802c80a22226b2002490d0020032802c00a2106202421070c010b202220026a22062022490d14202441017422072006200720064b1b22074100480d140240024020240d00024020070d00410121060c020b200710212206450d330c010b20032802c00a210620242007460d0020062024200710252206450d320b200320073602c40a200320063602c00a0b200620226a2008200210a1051a2003202220026a22023602c80a2001410c6a22012009470d000c1b0b0b200341c00a6a200141046a419c0210a1051a20034188096a41206a200241206a28020036020020034188096a41186a200241186a29020037030020034188096a41106a200241106a29020037030020034188096a41086a200241086a29020037030020032002290200370388092000200341c00a6a20034188096a108903200424000f0b41822221010240024020022d00000d0020022d000141ff01714102470d00200341e0036a41186a22064200370300200341e0036a41106a22224200370300200341e0036a41086a22024200370300200342003703e00341b9f4c200ad4280808080c00184222a100c22012900002105200129000821182001102320022018370300200320053703e00341a89ec700ad42808080809001842218100c2201290000210520034190026a41086a2224200141086a2900003703002003200537039002200110232022200329039002220537030020034180056a41086a2207200229030037030020034180056a41106a2208200537030020034180056a41186a22092024290300370300200320032903e00337038005200341e0016a20034180056a4120419ca8c70041004100108c01418322210120032802e0014101470d010b20004100360204200041146a4113360200200041106a41ebe2c2003602002000410c6a200136020020004101360200200424000f0b200642003703002022420037030020024200370300200342003703e003202a100c220129000021052001290008212a200110232002202a370300200320053703e0032018100c220129000021052024200141086a2900003703002003200537039002200110232022200329039002370000202241086a2024290300370000200720022903003703002008202229030037030020092006290300370300200320032903e00337038005200341013a00c00a20034180056aad4280808080800484200341c00a6aad42808080801084100e2000410036020420004100360200200424000f0b200228020022224108762124200241046a28020021062001411c6a280200210b200141186a2802002108200141146a280200210c200141106a280200210a2001410c6a2802002109200141086a2802002107024002400240024002400240024002400240024020012d00040e080001020304050607000b200341c00a6a41146a4101360200200342013702c40a200341a4c5c6003602c00a2003410436028c09200341cccec60036028809200320034188096a3602d00a200341c00a6a419ca8c700103a000b0240024002402024202241ff01714100477241ff01710d00200c41808080054b0d01200141206a28020022024180a0014d0d02200341c8066a41103602002003419fabc3003602c406200341043a00c20620034183243b01c0060c1f0b200341023a00c0060c1e0b200341c8066a410c36020020034193abc3003602c406200341033a00c20620034183243b01c0060c1d0b20012d000521012003200c360290092003200a36028c092003200936028809200320023602c80a2003200b3602c40a200320083602c00a41002102200341c0066a2007200141ff017141004720034188096a200341c00a6a108a0320032d00c0064104460d1e0c1d0b02400240024002402024202241ff01714100477241ff0171450d00200341023a00c00a0c010b200341c00a6a2007108b0320032d00c00a4104460d01200341c80a6a280200210220032802c40a21010b20032802c00a2103200041146a2002360200200041106a20013602002000410c6a2003360200410121030c010b410021030b2000410036020420002003360200200424000f0b4100210202402024202241ff01714100477241ff0171450d00200041003602042000410c6a410236020020004101360200200424000f0b20034198056a420037030020034190056a2224420037030020034180056a41086a2201420037030020034200370380054196adc300ad4280808080900184100c22222900002105202229000821182022102320012018370300200320053703800541d8dfc300ad4280808080b00184100c2222290000210520034190026a41086a2206202241086a2900003703002003200537039002202210232024200329039002220537030020032003290380053703c00a200320012903003703c80a200320053703d00a200320062903003703d80a2003200736028809200341c00a6aad428080808080048420034188096aad4280808080c00084100e0c040b410221010240202241ff0171450d000c190b202441ff01714101470d18200241196a2d00002101200241186a2d00002124200241166a2f0100210d200241156a2d0000210e200241146a2d0000210f200241126a2f01002110200241116a2d00002111200241106a2d000021122002410e6a2f010021132002410d6a2d000021142002410c6a2d000021152002410a6a2f01002116200241096a2d00002117200241086a2d0000211920032002411a6a2901003703d806200320013a00d706200320243a00d6062003200d3b01d4062003200e3a00d3062003200f3a00d206200320103b01d006200320113a00cf06200320123a00ce06200320133b01cc06200320143a00cb06200320153a00ca06200320163b01c806200320173a00c706200320193a00c606200320064110763b01c406200320064108763a00c306200320063a00c206200320224110763b01c006200342003703f00720034280a0e5b9c291013703e8072003200341c0066a3602e0032003200341c0066a3602a0052003200341a0056a3602c80a2003200341e0036a3602c40a2003200341e8076a3602c00a20034188096a200341c0066a200341c00a6a10fd02024002402003280288094101470d0020034194096a280200210f20034190096a280200210e20032d008f09211120032d008e09211020032d008d09210d20032d008c0921010c010b41042101024020034188096a41086a2903004201520d0020034188096a41106a290300210520032802a0052102200341f80a6a20034188096a41186a290300370300200341f00a6a2005370300200341c00a6a41086a41003a0000200341c90a6a2002290000370000200341d10a6a200241086a290000370000200341d90a6a200241106a290000370000200341e10a6a200241186a290000370000200341023a00c00a200341c00a6a10e0010b0b200141ff01714104470d184112210d410321010240200a41808080054d0d00410c210f4193abc300210e410321100c190b0240200b4180a0014d0d00410421104110210f419fabc300210e0c190b20034180056a41186a2206420037030020034180056a41106a2201420037030020034180056a41086a2202420037030020034200370380054196adc300ad42808080809001842205100c222229000021182022290008212a202210232002202a370300200320183703800541b0e1c300ad4280808080a001842218100c2224290000212a20034190026a41086a2222202441086a2900003703002003202a37039002202410232001200329039002222a37030020032003290380053703c00a200320022903003703c80a2003202a3703d00a200320222903003703d80a200341e8016a200341c00a6a412010cd0120032802ec01210d20032802e801210e20064200370300200142003703002002420037030020034200370380052005100c222429000021052024290008212a202410232002202a37030020032005370380052018100c222429000021052022202441086a2900003703002003200537039002202410232001200329039002220537030020032003290380053703c00a200320022903003703c80a200320053703d00a200320222903003703d80a2003200d41e807200e1b220141016a36028809200341c00a6aad428080808080048420034188096aad4280808080c00084100e2003200a360290092003200936028c0920032007360288092003200b3602c80a200320083602c40a2003200c3602c00a200341e8076a2001410120034188096a200341c00a6a108a03200341c00a6a41186a2224200341c0066a41186a290300370300200341c00a6a41106a2206200341c0066a41106a290300370300200341c00a6a41086a2207200341c0066a41086a290300370300200320032903c0063703c00a20034188096a2001108c0320033502900921052003280288092122412010212202450d32200220032903c00a370000200241186a2024290300370000200241106a2006290300370000200241086a200729030037000020054220862022ad842002ad4280808080800484100e200210230240200328028c09450d00202210230b200341083a00c00a200341c00a6a41086a200136020041002102200341003602c40a200341c00a6a10e0010c030b41002102200041003602040240202241ff01710d00202441ff01714101460d040b2000410c6a410236020020004101360200200424000f0b02400240202241ff017122020d004102210641002124410021070c010b200341c00a6a2006202220021b2224108d0320032802c00a220220032802c80a108e0341ff01712101024020032802c40a450d00200210230b4102210241022001410171200141024622011b21060240024020010d0020064101710d01418024212441032106410f21224184abc3002101410021070c020b41e5aac300210141112122410021074100210202400240024020060e03000201000b200341d40a6a4101360200200342013702c40a200341a4c5c6003602c00a2003410436028c09200341c8abc30036028809200320034188096a3602d00a200341c00a6a419ca8c700103a000b41f6aac3002101410e2122410121020b4180242124410321060c010b200341c00a6a2024108b03024020032d00c00a22064104470d00200342003703d80a200342003703d00a200342003703c80a200342003703c00a4196adc300ad4280808080900184222c100c220229000021052002290008211820021023200320183703c80a200320053703c00a41a4e2c300ad4280808080a00184222d100c2202290000210520034190026a41086a2201200241086a29000037030020032005370390022002102320034180056a41086a20032903c80a37030020034180056a41106a221c200329039002220537030020034180056a41186a221d2001290300370300200320053703d00a200320032903c00a37038005200341c00a6a20034180056a108f0320032802c00a2202410420021b211a024020032902c40a420020021b222b422088a7221b450d00201a201b410c6c6a2117201a211503400240201541086a22162802002207450d00201528020021024100210141002122034002400240024020242002280200460d0020010d01410021010c020b200141016a21010c010b202220016b220620074f0d1a200341c00a6a41206a220820022001415c6c6a220641206a2209280200360200200341c00a6a41186a220a200641186a220b290200370300200341c00a6a41106a220c200641106a220d290200370300200341c00a6a41086a220e200641086a220f290200370300200320062902003703c00a200241206a22102802002111200241186a22122902002105200241106a22132902002118200241086a2214290200212a20062002290200370200200f202a370200200d2018370200200b200537020020092011360200201020082802003602002012200a2903003702002013200c2903003702002014200e290300370200200220032903c00a3702000b200241246a21022007202241016a2222470d000b2001450d002016280200200720016b2202490d00201620023602000b2015410c6a22152017470d000b0b2003201a360288092003202b37028c09200342003703d80a200342003703d00a200342003703c80a200342003703c00a202c100c220229000021052002290008211820021023200320183703c80a200320053703c00a202d100c2202290000210520034190026a41086a2201200241086a290000370300200320053703900220021023200341c00a6a4110722219200329039002370000201941086a200129030037000020034180056a41086a20032903c80a370300201c20032903d00a370300201d20032903d80a370300200320032903c00a37038005200341203602c40a200320034180056a3602c00a20034188096a200341c00a6a109003202ba721060240201b450d00201b410c6c2101201a210203400240200241046a2802002222450d00202241246c450d00200228020010230b2002410c6a2102200141746a22010d000b0b02402006450d002006410c6c450d00201a10230b200342003703d80a200342003703d00a200342003703c80a200342003703c00a4196adc300ad4280808080900184222c100c220229000021052002290008211820021023200320183703c80a200320053703c00a41fcdfc300ad4280808080f00184222d100c2202290000210520034190026a41086a221b200241086a2900003703002003200537039002200210232019200329039002370000201941086a221d201b29030037000020034180056a41086a221e20032903c80a37030020034180056a41106a221f20032903d00a37030020034180056a41186a222020032903d80a370300200320032903c00a37038005200341c00a6a20034180056a108f0320032802c00a2202410420021b211a024020032902c40a420020021b222b422088a7221c450d00201a201c410c6c6a2117201a211503400240201541086a22162802002207450d00201528020021024100210141002122034002400240024020242002280200460d0020010d01410021010c020b200141016a21010c010b202220016b220620074f0d1b200341c00a6a41206a220820022001415c6c6a220641206a2209280200360200200341c00a6a41186a220a200641186a220b290200370300200341c00a6a41106a220c200641106a220d290200370300200341c00a6a41086a220e200641086a220f290200370300200320062902003703c00a200241206a22102802002111200241186a22122902002105200241106a22132902002118200241086a2214290200212a20062002290200370200200f202a370200200d2018370200200b200537020020092011360200201020082802003602002012200a2903003702002013200c2903003702002014200e290300370200200220032903c00a3702000b200241246a21022007202241016a2222470d000b2001450d002016280200200720016b2202490d00201620023602000b2015410c6a22152017470d000b0b2003201a360288092003202b37028c09200342003703d80a200342003703d00a200342003703c80a200342003703c00a202c100c220229000021052002290008211820021023200320183703c80a200320053703c00a202d100c22022900002105201b200241086a2900003703002003200537039002200210232019200329039002370000201d201b290300370000201e20032903c80a370300201f20032903d00a370300202020032903d80a370300200320032903c00a37038005200341203602c40a200320034180056a3602c00a20034188096a200341c00a6a109003202ba721060240201c450d00201c410c6c2101201a210203400240200241046a2802002222450d00202241246c450d00200228020010230b2002410c6a2102200141746a22010d000b0b02402006450d002006410c6c450d00201a10230b200342003703d80a200342003703d00a200342003703c80a200342003703c00a4196adc300ad42808080809001842205100c220229000021182002290008212a200210232003202a3703c80a200320183703c00a41bce0c300ad4280808080e000842218100c2202290000212a20034190026a41086a2206200241086a2900003703002003202a37039002200210232019200329039002370000201941086a2209200629030037000020034180056a41086a220a20032903c80a37030020034190056a220b20032903d00a37030020034198056a220c20032903d80a370300200320032903c00a37038005200341c00a6a20034180056a10910320032802c00a2202410420021b2107024020032902c40a420020021b222a422088a72208450d002008412c6c2101200721020340024020022802002024470d00200241246a22222802004102460d00202241003602000b2002412c6a2102200141546a22010d000b0b200342003703d80a200342003703d00a200342003703c80a200342003703c00a2005100c220229000021052002290008212b200210232003202b3703c80a200320053703c00a2018100c220229000021052006200241086a290000370300200320053703900220021023201920032903900237000020092006290300370000200a20032903c80a370300200b20032903d00a370300200c20032903d80a370300200320032903c00a37038005200341c00a6a2007200810d30220034180056aad428080808080048420033502c80a42208620032802c00a2201ad84100e202aa72102024020032802c40a450d00200110230b02402002450d002002412c6c450d00200710230b20034188096a2024108c03200341c00a6a2003280288092202200328029009222210e101024020032d00c00a2201450d002022ad4220862002ad8410110b200341e0036a41186a200341d90a6a2900002205370300200341e0036a41106a200341d10a6a2900002218370300200341e0036a41086a200341c90a6a290000222a370300200320032900c10a222b3703e003200320053703d80a200320183703d00a2003202a3703c80a2003202b3703c00a0240024020014101460d00200341c0066a41186a4200370300200341c0066a41106a4200370300200341c0066a41086a4200370300200342003703c0060c010b200341c0066a41186a20032903d80a370300200341c0066a41106a20032903d00a370300200341c0066a41086a20032903c80a370300200320032903c00a3703c0060b0240200328028c09450d00200210230b200342003703f00720034280a0e5b9c291013703e8072003200341c0066a3602a00520034188096a200341c0066a200341e8076a200341a0056a10ff0202402003290388094201520d002003290390092105200341f80a6a20034188096a41106a290300370300200341f00a6a2005370300200341c00a6a41086a41003a0000200341c90a6a20032903c006370000200341d10a6a200341c0066a41086a290300370000200341d90a6a200341c0066a41106a290300370000200341e10a6a200341d8066a290300370000200341023a00c00a200341c00a6a10e0010b200341083a00c00a200341c00a6a41086a202436020041002102200341003602c40a200341c00a6a10e0010c030b200341c00a6a41086a280200212220032802c40a210120032d00c20a210220032d00c10a410874212420032d00c30a41187421070b20004100360204200041146a2022360200200041106a20013602002000410c6a2007200241ff01714110747220247220067236020020004101360200200424000f0b0240202241ff017122020d00410221020c150b200341c00a6a2007109203200341f0016a20032802c00a220120032802c80a10cd0120032802f401210820032802f0012124024020032802c40a450d00200110230b2006202220021b2101024020244101470d004100210220082001460d150b200341c00a6a200110920320032802c00a210220033502c80a2105200320073602880920054220862002ad8420034188096aad4280808080c00084100e024020032802c40a450d00200210230b410021020b200020023602040b20002002360200200424000f0b200341f80a6a2001413c6a280200360200200341f00a6a200141346a290200370300200341e80a6a2001412c6a290200370300200341c00a6a41206a200141246a290200370300200341c00a6a41186a2001411c6a290200370300200341c00a6a41106a200141146a290200370300200341c00a6a41086a2001410c6a290200370300200320012902043703c00a20034188096a41206a200241206a28020036020020034188096a41186a200241186a29020037030020034188096a41106a200241106a29020037030020034188096a41086a200241086a29020037030020032002290200370388092000200341c00a6a20034188096a109303200424000f0b200341c00a6a200141086a41a80210a1051a20034188096a41206a200241206a28020036020020034188096a41186a200241186a29020037030020034188096a41106a200241106a29020037030020034188096a41086a200241086a29020037030020032002290200370388092000200341c00a6a20034188096a109403200424000f0b200341c00a6a200141046a41c40010a1051a20034188096a41206a200241206a28020036020020034188096a41186a200241186a29020037030020034188096a41106a200241106a29020037030020034188096a41086a200241086a29020037030020032002290200370388092000200341c00a6a20034188096a109503200424000f0b2002411a6a2901002105200241196a2d00002124200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f01002116200141216a2900002118200141206a2d000021172001411d6a2f000021192001411c6a2d0000211a200141196a2f0000211b200141186a2d0000211c200141156a2f0000211d200141146a2d0000211e200141116a2f0000211f200141106a2d000021202001410d6a2f000021212001410c6a2d00002123200141096a2f0000212520022d0001212220022d0000210220012d001f212620012d001b212720012d0017212820012d0013212920012d000f213120012d000b213202400240024002400240200141086a2d00000e0400010203000b200341c00a6a41146a4101360200200342013702c40a200341a4c5c6003602c00a2003410436028c09200341cccec60036028809200320034188096a3602d00a200341c00a6a419ca8c700103a000b02400240024002400240200241ff01710d00202241ff01714101460d010b200341023a0088090c010b200320053703d80a200320243a00d70a200320063a00d60a200320073b01d40a200320083a00d30a200320093a00d20a2003200a3b01d00a2003200b3a00cf0a2003200c3a00ce0a2003200d3b01cc0a2003200e3a00cb0a2003200f3a00ca0a200320103b01c80a200320113a00c70a200320123a00c60a200320133b01c40a200320143a00c30a200320153a00c20a200320163b01c00a20034188096a200341c00a6a10d80220032d0088094104460d010b2003290388092105200041146a20034190096a2802003602002000410c6a2005370200410121030c010b410021030b200041003602040c020b02400240024002400240200241ff01710d00202241ff01714101460d010b200341023a0088090c010b200320183703d80a200320173a00d70a200320263a00d60a200320193b01d40a2003201a3a00d30a200320273a00d20a2003201b3b01d00a2003201c3a00cf0a200320283a00ce0a2003201d3b01cc0a2003201e3a00cb0a200320293a00ca0a2003201f3b01c80a200320203a00c70a200320313a00c60a200320213b01c40a200320233a00c30a200320323a00c20a200320253b01c00a20034188096a200341c00a6a10d80220032d0088094104460d010b2003290388092105200041146a20034190096a2802003602002000410c6a2005370200410121030c010b410021030b200041003602040c010b024002400240200241ff01710d00202241ff01714101470d00200141c8006a290300212c200141c0006a290300212d200141386a290300212a200141306a290300212b200141d0006a2802002122200320053703d806200320243a00d706200320063a00d606200320073b01d406200320083a00d306200320093a00d2062003200a3b01d0062003200b3a00cf062003200c3a00ce062003200d3b01cc062003200e3a00cb062003200f3a00ca06200320103b01c806200320113a00c706200320123a00c606200320133b01c406200320143a00c306200320153a00c206200320163b01c0060240202b42ffffe883b1de1656202a420052202a501b0d004102210241162103410321014109212241f99dc20021240c020b200320183703a009200320173a009f09200320263a009e09200320193b019c092003201a3a009b09200320273a009a092003201b3b0198092003201c3a009709200320283a0096092003201d3b0194092003201e3a009309200320293a0092092003201f3b019009200320203a008f09200320313a008e09200320213b018c09200320233a008b09200320323a008a09200320253b018809200341c00a6a20034188096a10d90220034180026a20032802c00a220220032802c80a419ca8c70041004100108c012003280280022101024020032802c40a450d00200210230b41012102024020014101470d0041162103410321014117212241afacc50021240c020b200341c00a6a200341c0066a20034188096a202b202a4101108003024020032d00c00a22014104460d00200341c80a6a280200212220032802c40a212420032d00c30a210620032d00c20a210220032d00c10a21030c030b200341c00a6a20034188096a10d902200341f8016a20032802c00a220120032802c80a419ca8c70041004100108c0120032802f8012102024020032802c40a450d00200110230b024020024101460d00200341c00a6a20034188096a10d90220033502c80a210520032802c00a2101411010212202450d2d2002202b3700002002202a37000820024110412010252202450d2d2002202d370010200241186a202c3700002002412041c00010252202450d2d2002202236002020054220862001ad842002ad4280808080c00484100e20021023024020032802c40a450d00200110230b200341c00a6a41186a20034188096a41186a290300370300200341c00a6a41106a20034188096a41106a290300370300200341c00a6a41086a20034188096a41086a29030037030020032003290388093703c00a200341e8076a200341c00a6a10d80241002103200041003602040c040b200341c80a6a4117360200200341afacc5003602c40a200341013a00c20a200341832c3b01c00a4189c4c2004137200341c00a6a41c0c4c20041d0c4c2001034000b410221010b0b20004100360204200041146a2022360200200041106a20243602002000410c6a2006411874200241ff017141107472200341ff017141087472200172360200410121030b20002003360200200424000f0b202210b4022022102341833021030c340b1032000b200041003602042000410c6a41023602000c300b41c5a2c7004130418c94c700102d000b410221020c220b4101210741d5a4c6002106410821240c1d0b41808004210141d5a4c6002122410821240c1a0b200041003602042000410c6a410236020020004101360200200424000f0b200341e0036a41186a220b4200370300200341e0036a41106a22014200370300200341e0036a41086a22024200370300200342003703e00341bdadc500ad4280808080800184222b100c2209290000212c2009290008213520091023200220353703002003202c3703e00341c5adc500ad4280808080d00184222c100c220a290000213520034190026a41086a2209200a41086a2900003703002003203537039002200a10232001200329039002223537030020034180056a41086a220c200229030037030020034180056a41106a220d203537030020034180056a41186a220e2009290300370300200320032903e0033703800520034180016a20034180056a412010d70120034180016a41106a29030021352003290388012137200328028001210a200b42003703002001420037030020024200370300200342003703e003202b100c220b290000212b200b2900082138200b1023200220383703002003202b3703e003202c100c220b290000212b2009200b41086a2900003703002003202b37039002200b10232001200329039002222b370300200c2002290300370300200d202b370300200e2009290300370300200320032903e003370380052003427f20354200200a1b222b2005202a7d2018202d54ad7d7c20374200200a1b222c2018202d7d7c222d202c542202ad7c222c2002202c202b54202c202b511b22021b3703c80a2003427f202d20021b3703c00a200341c00a6a210220034180056a21010c150b2000410c6a41023602000c130b20032802c80a210220032802c40a210720032802c00a21060c080b102c000b200620074184d9c4001030000b200620074184d9c4001030000b20004100360204200041146a4111360200200041106a4183aac0003602002000410c6a200236020020004101360200200424000f0b02402008450d00200c10230b02402009450d00200710230b20004100360204200041146a200f360200200041106a200e3602002000410c6a2011411874201041ff017141107472200d41ff017141087472200141ff01717236020020004101360200200424000f0b0240200b450d00200810230b200a450d00200910230b20032903c0062105200041146a200341c8066a2802003602002000410c6a2005370200410121020b2000410036020420002002360200200424000f0b200341c00a6a2012200e10ae0220032802c00a2101200320032802c80a36028c0920032001360288092006200220034188096a10c802024020032802c40a450d00200110230b02402007450d00200610230b0240200542ffffff3f83500d00201010230b0240200d450d00200f10230b0240200a450d00200a410c6c2102200c210303400240200341046a280200450d00200328020010230b2003410c6a2103200241746a22020d000b0b0240200b450d00200b410c6c450d00200c10230b2000410036020420004100360200200424000f0b0b20004100360204200041146a2003360200200041106a20023602002000410c6a202420227236020020004101360200200424000f0b024020032802cc0a2202450d00200241246c21012011210203400240024020022d0000222241044b0d0002400240024020220e050400010204040b2002410c6a280200450d03200241086a28020010230c030b2002410c6a280200450d02200241086a28020010230c020b2002410c6a280200450d01200241086a28020010230c010b200241086a280200450d00200241046a28020010230b200241246a21022001415c6a22010d000b0b024020032802c80a2202450d00200241246c450d00201110230b024020232024460d00034020061096030240200641046a2802002202450d00200241246c450d00200628020010230b200641f0006a2106200841907f6a22080d000b0b02402009450d00200941f0006c450d00200b10230b024020032802b40a2203450d00200341c4006c450d00201010230b410321220c040b20232024460d00200b200741f0006c6a212203402024220241046a2201109603200241f0006a21240240200241086a2802002202450d00200241246c450d00200128020010230b20222024470d000b0b02402009450d00200941f0006c450d00200b10230b200341a0056a41186a4200370300200341a0056a41106a4200370300200341a0056a41086a22024200370300200342003703a00541fea6c600ad4280808080a00184100c220129000021052002200141086a290000370300200320053703a00520011023419ca8c600ad4280808080e00084100c220129000821052001290000211820011023200341e8076a41106a2018370300200341e8076a41186a2005370300200341e8076a41086a2002290300370300200320032903a0053703e807200341c00a6a2010200f109703202a20033502c80a42208620032802c00a2202ad84100e024020032802c40a450d00200210230b024020032802b40a2203450d00200341c4006c450d00201010230b410021030c030b200741f0006c2102200b41046a2103034020031096030240200341046a2802002201450d00200141246c450d00200328020010230b200341f0006a2103200241907f6a22020d000b0b2009450d00200941f0006c450d00200b10230b200041146a200a360200200041106a200e3602002000410c6a200d41107420227241800e72360200410121030b2000200336020020004100360204200424000f0b410121020c020b2001ad42808080808004842002ad4280808080800284100e20032903c803212c20032903c003212b0b202a202f7c212d2022ad2135200341a0056a41106a2102024002400240202b202e56202c202f56202c202f5122011b0d00202b202e54202c202f5420011b450d02200341e0036a41186a220c4200370300200341e0036a41106a22094200370300200341e0036a41086a22014200370300200342003703e00341bdadc500ad42808080808001842237100c220a2900002138200a2900082139200a102320012039370300200320383703e00341c5adc500ad4280808080d001842238100c220b290000213920034190026a41086a220a200b41086a2900003703002003203937039002200b10232009200329039002223937030020034180056a41086a220d200129030037030020034180056a41106a220e203937030020034180056a41186a220f200a290300370300200320032903e00337038005200341e8006a20034180056a412010d701200341e8006a41106a29030021392003290370213a2003280268210b200c42003703002009420037030020014200370300200342003703e0032037100c220c2900002137200c290008213b200c10232001203b370300200320373703e0032038100c220c2900002137200a200c41086a2900003703002003203737039002200c102320092003290390022237370300200d2001290300370300200e2037370300200f200a290300370300200320032903e003370380052003420020394200200b1b2237202e202b54ad202c202f7d7c7c203a4200200b1b222f202e202b7d223854ad7d222e202f20387d2238202f56202e203756202e2037511b22011b3703c80a20034200203820011b3703c00a200341c00a6a210120034180056a21090c010b200341e0036a41186a220c4200370300200341e0036a41106a22094200370300200341e0036a41086a22014200370300200342003703e00341bdadc500ad42808080808001842237100c220a2900002138200a2900082139200a102320012039370300200320383703e00341c5adc500ad4280808080d001842238100c220b290000213920034190026a41086a220a200b41086a2900003703002003203937039002200b10232009200329039002223937030020034180056a41086a220d200129030037030020034180056a41106a220e203937030020034180056a41186a220f200a290300370300200320032903e00337038005200341d0006a20034180056a412010d701200341d0006a41106a29030021392003290358213a2003280250210b200c42003703002009420037030020014200370300200342003703e0032037100c220c2900002137200c290008213b200c10232001203b370300200320373703e0032038100c220c2900002137200a200c41086a2900003703002003203737039002200c102320092003290390022237370300200d2001290300370300200e2037370300200f200a290300370300200320032903e003370380052003427f20394200200b1b2237202c202f7d202b202e54ad7d7c203a4200200b1b222f202b202e7d7c2238202f542201ad7c222e2001202e203754202e2037511b22011b3703c80a2003427f203820011b3703c00a200341c00a6a210120034180056a21090b2009ad42808080808004842001ad4280808080800284100e0b202d20357c212d200320183703a0052003202c3703b8052003202b3703b005200320053703a80520032802ac0a2101200341e0036a41186a200241086a290300222e370300200341e0036a41206a2209200241106a29030037030020034188046a220a200241186a29030037030020034190046a220b200241206a290300370300200320053703e803200320183703e00320032002290300222f3703f00302400240427f2018202f7c222f202f20185422022005202e7c2002ad7c222e200554202e2005511b22021b222f4280c8afa025544100427f202e20021b2235501b0d00200341e0036a41106a290300212f200b2903002135200a29030021372009290300213820032903e803213920032903e003213a4201212e20032903f803213b0c010b4200212e0240202f203584500d00202f203510eb01200341f80a6a2035370300200341f00a6a202f370300200341c00a6a41086a41013a0000200341c90a6a2001290000370000200341d10a6a200141086a290000370000200341d90a6a200141106a290000370000200341e10a6a200141186a290000370000200341023a00c00a200341c00a6a10e0010b0b202d202a512102202d202a54210920034190086a203837030020034198086a2037370300200341f8076a2039370300200341a0086a203537030020034180086a202f3703002003203b37038808200320343703a8082003203a3703f0072003200841002030420151220a1b3a00b408200320074100200a1b3602b0082003202e4201512207ad3703e8070240024020070d002006ad4220862024ad8410110c010b200320063602c40a200320243602c00a200341f0076a200341c00a6a1098030b2022200920021b2102024020032802b40a450d00202410230b427f202d20021b212a427f203620021b212d202e420152210202400240024020304201510d0020020d004103212220034188096a21020c010b20304201522002410173720d0141042122200341c0066a21020b200241046a20223a0000200241056a20032903a002370000200241003a00002002410d6a200341a8026a290300370000200241156a200341b0026a2903003700002002411d6a200341b8026a290300370000200210e0010b0240202d202a844200520d00200341f80a6a2005370300200341f00a6a2018370300200341c00a6a41086a41003a0000200341c90a6a2001290000370000200341d10a6a200141086a290000370000200341d90a6a200141106a290000370000200341e10a6a200141186a290000370000200341023a00c00a200341c00a6a10e0010b200341880b6a202c370300200341800b6a202b370300200341f80a6a2005370300200341f00a6a2018370300200341c00a6a41086a41033a0000200341c90a6a20032903a002370000200341d10a6a200341a0026a41086a290300370000200341d90a6a200341b0026a290300370000200341e10a6a200341b8026a290300370000200341023a00c00a200341c00a6a10e001410021020b2000200236020020004100360204200424000f0b024020032802e403450d00200610230b20024104470d00200341c80a6a2017360200200341013a00c40a200341013a00c00a200341c00a6a10e0012000410036020420004100360200200424000f0b20004100360204200041146a2024360200200041106a20223602002000410c6a200141808004712002724180087236020020004101360200200424000f0b024020032802a405450d00200810230b200241ff01714104470d00200341e80a6a2019360200200341cd0a6a200341c8066a290300370000200341d50a6a200341d0066a290300370000200341dd0a6a200341d8066a290300370000200341003a00c40a200341013a00c00a200320032903c0063700c50a200341c00a6a10e0012000410036020420004100360200200424000f0b20004100360204200041146a2024360200200041106a20063602002000410c6a20014118742007411074418080fc07717220224108744180fe037172200241ff01717236020020004101360200200424000f0b41002108200241ff01714104470d00200341f00a6a4200370300200341e80a6a4280a094a58d1d370300200341c00a6a41106a200341c0066a41086a290300370300200341c00a6a41186a200341c0066a41106a290300370300200341c00a6a41206a200341c0066a41186a290300370300200342013703c00a200320032903c0063703c80a411010212202450d0320024110412010252202450d022002200341c00a6a41086a2208290000370000200241186a200841186a290000370000200241106a200841106a290000370000200241086a200841086a2900003700002002412041c00010252202450d0220024280a094a58d1d370020200241286a4200370000200aad4220862009ad842002ad4280808080800684100e2002102341042102410121080b024020032802e403450d00200910230b02402008450d00200341e80a6a2017360200200341cd0a6a200341f0076a290300370000200341d50a6a200341f8076a290300370000200341dd0a6a20034180086a290300370000200341003a00c40a200341013a00c00a200320032903e8073700c50a200341c00a6a10e0010c040b200241ff01714104460d030b20004100360204200041146a2001360200200041106a20223602002000410c6a2007411874202441ff017141107472200641ff017141087472200241ff01717236020020004101360200200424000f0b102a000b1033000b2000410036020420004100360200200424000f0b02402007450d00202410230b0240200b450d00200a10230b2008450d052008410c6c450d05200d10230c050b200b450d00200a10230b2007450d010b202410230b2001450d00200210230b4191ddc4002102411d2101410221220b20224110742108410321070b02402009450d00200610230b20004100360204200041146a2001360200200041106a20023602002000410c6a20082007723602000b410121030b20002003360200200424000f0b20004100360204200041146a410b360200200041106a41a181c3003602002000410c6a200336020020004101360200200424000b130020004101360204200041e8b9c2003602000b930a03057f017e047f230041a0016b22012400200141e8006a41186a22024200370300200141e8006a41106a22034200370300200141e8006a41086a220442003703002001420037036841db97c700ad4280808080f00084100c220529000021062004200541086a290000370300200120063703682005102341bcbcc300ad4280808080c00184100c2205290000210620014188016a41086a2207200541086a29000037030020012006370388012005102320032001290388012206370300200141c8006a41086a2004290300370300200141c8006a41106a2006370300200141c8006a41186a200729030037030020012001290368370348200141106a200141c8006a412010cd0120012802142105200128021021082002200041186a2900003703002003200041106a2900003703002004200041086a290000370300200120002900003703684180cdc200ad4280808080800184100c22002900002106200141186a41086a200041086a290000370300200120063703182000102341b4a5c200ad4280808080e00184100c220029000021062007200041086a29000037030020012006370388012000102320012005410020081b3602382001200141386aad4280808080c00084100d22002900003703980120001023200141d4006a22052001413c6a360200200141003a0058200120014198016a41086a220736024c2001200141386a360250200120014198016a360248200141286a200141c8006a1065024002400240024002400240412010212200450d0020002001290368370000200041186a2002290300370000200041106a2003290300370000200041086a200429030037000020012000ad4280808080800484100d220429000037039801200410232005200041206a360200200141003a0058200120003602502001200736024c200120014198016a360248200141386a200141c8006a1065200010232001280230220741206a2203200128024022086a2204417f4c0d01200128023821092001280228210a024002402004450d00200410212200450d022004410f4d0d01200421020c050b200441017422004110200041104b1b2202102122000d040c060b200441017422024110200241104b1b220241004e0d020c040b1033000b1032000b20042002460d0020002004200210252200450d020b20002001290318370000200041086a200141186a41086a2903003700000240024020024170714110460d00200221050c010b200241017422054120200541204b1b22054100480d0120022005460d0020002002200510252200450d020b2000200129038801370010200041186a20014188016a41086a29030037000002400240200541606a2007490d00200521020c010b2007415f4b0d01200541017422022003200220034b1b22024100480d0120052002460d0020002005200210252200450d020b200041206a200a200710a1051a02400240200220036b2008490d00200221050c010b200320086a2003490d01200241017422052004200520044b1b22054100480d01024020020d00024020050d00410121000c020b200510212200450d030c010b20022005460d0020002002200510252200450d020b200020036a2009200810a1051a0240200128023c450d00200910230b0240200128022c450d00200a10230b200141086a2000200410cd012001200128020c41016a410120012802081b3602682004ad4220862000ad84200141e8006aad4280808080c00084100e02402005450d00200010230b200141a0016a24000f0b102c000b102a000b340020004180cdc20036020420004100360200200041146a4104360200200041106a4198bbc200360200200041086a42083702000bc60201037f230041106b22032400024002402002412c6c41046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b20034100360208200320043602042003200536020020022003106102402002450d002002412c6c210203402003200128020036020c20032003410c6a4104106202400240200141246a22042802004102470d00200341003a000c20032003410c6a410110620c010b200341013a000c20032003410c6a410110622003200141046a41201062024020042802004101460d00200341003a000c20032003410c6a410110620c010b200341013a000c20032003410c6a410110622003200141286a28020036020c20032003410c6a410410620b2001412c6a2101200241546a22020d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b1032000b1033000b950202037f017e230041206b220324000240024020024106744104722204417f4c0d00200410212205450d0120034100360208200320043602042003200536020020022003106102402002450d002002410674210203400240024020012903004201510d00200341003a00102003200341106a410110620c010b200341013a00102003200341106a410110622003200141206a41201062200141086a29030021062003200141106a290300370318200320063703102003200341106a411010622003200141186a2903003703102003200341106a410810620b200141c0006a2101200241406a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1032000b1033000b8c0301077f230041106b220324000240024002400240200141027441046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b2003410036020820032004360204200320053602002001200310610240024020010d002003280208210120032802042106200328020021070c010b200141027421084100200328020822016b21052003280204210403402000280200210902400240200420056a4104490d0020032802002107200421060c010b200141046a22072001490d05200441017422062007200620074b1b22064100480d050240024020040d00024020060d00410121070c020b2006102122070d010c080b2003280200210720042006460d0020072004200610252207450d070b2003200636020420032007360200200621040b200041046a2100200720016a20093600002003200141046a22013602082005417c6a21052008417c6a22080d000b0b20022902002001ad4220862007ad84100e02402006450d00200710230b200341106a24000f0b1032000b1033000b102c000b102a000b5c01017f200028020022012001280200417f6a3602000240200028020022012802000d000240200128020c450d002001410c6a10d602200028020021010b20012001280204417f6a360204200028020022002802040d00200010230b0bbf0201067f230041106b22022400024002402001410c6a2802002203417f4c0d0020012802042104200128020021050240024020030d0041002106410121070c010b20032106200310212207450d020b20072004200310a10521042002200141106a10b7022000410c6a2003360200200041086a20063602002000200436020420002005360200200041106a2002290300370200200041186a200241086a2802003602002000200129021c37021c200020012902243702242000412c6a2001412c6a290200370200200041346a200141346a2902003702002000413c6a2001413c6a290200370200200041c4006a200141c4006a290200370200200041cc006a200141cc006a290200370200200041d4006a200141d4006a290200370200200041dc006a200141dc006a290200370200200241106a24000f0b1032000b1033000bb50905037f017e027f047e017f23004190026b22022400200241d0006a200110d902200228025021032002200228025822043602fc01200220033602f80120024180016a2004ad4220862003ad841010108b010240024020022802800122040d00420021050c010b200228028401210602400240024020024180016a41086a28020022074110490d0020074170714110460d002007417c714120470d010b20024100360268200242013703602002410a360284022002200241f8016a360280022002200241e0006a36028c02200241a4016a4101360200200242013702940120024180c5c60036029001200220024180026a3602a0012002418c026a4184a5c20020024190016a10311a2002350268422086200235026084100a02402002280264450d00200228026010230b420021050c010b200441086a290000210820042900002109200441186a290000210a2004290010210b20042800202107420121050b2006450d00200410230b02402002280254450d00200310230b02400240024002402005500d0020024190016a41186a420037030020024190016a41106a2206420037030020024190016a41086a22034200370300200242003703900141e4dec400ad4280808080e00084100c220429000021052003200441086a29000037030020022005370390012004102341f3dec400ad4280808080e00084100c2204290000210520024180016a41086a220c200441086a29000037030020022005370380012004102320062002290380012205370300200241e0006a41086a2003290300370300200241e0006a41106a2005370300200241e0006a41186a200c2903003703002002200229039001370360200241386a200241e0006a412010cd01200241186a200a42004100200228023c410020022802381b220320076b2204200420034b1bad2205420010a605200241286a20054200200b420010a605200241086a42004200200b420010a6052002290310200229032084420052200241286a41086a2903002205200229030820022903187c7c220b200554720d0142002009200229032822057d220a200a2009562008200b7d2009200554ad7d220920085620092008511b22031b22084200200920031b220984500d01200242f6cacda397cddbb320370348200241c8006a2001200820094106109902200241c8016a2009370300200241c0016a200837030020024190016a41086a41003a000020024199016a2001290000370000200241a1016a200141086a290000370000200241a9016a200141106a290000370000200241b1016a200141186a2900003700002002410c3a00900120024190016a21010c020b200041163b0001200041086a410a360200200041046a41829ec200360200410321010c020b200242f6cacda397cddbb320370340200241c0006a2001109b0220024190016a200110d9022002350298014220862002280290012203ad8410110240200228029401450d00200310230b20024190016a41086a41013a000020024199016a2001290000370000200241a1016a200141086a290000370000200241a9016a200141106a290000370000200241b1016a200141186a2900003700002002410c3a00900120024190016a21010b200110e001410421010b200020013a000020024190026a24000bc60505017f017e017f017e047f230041e0006b220224004196cdc200ad4280808080f000842203100c22042900002105200241086a41086a200441086a29000037030020022005370308200410232003100c22042900002103200241186a41086a200441086a2900003703002002200337031820041023024002400240024002400240412010212204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100f22012900002103200241386a41086a200141086a2900003703002002200337033820011023200241d4006a200441206a360200200241003a0058200220043602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200410232002280230220641206a2201417f4c0d0120022802282107024002402001450d00200110212204450d022001410f4d0d01200121080c050b200141017422044110200441104b1b2208102122040d040c060b200141017422094110200941104b1b220841004e0d020c040b1033000b1032000b20012008460d0020042001200810252204450d020b20042002290308370000200441086a200241086a41086a2903003700000240024020084170714110460d00200821090c010b200841017422094120200941204b1b22094100480d0120082009460d0020042008200910252204450d020b20042002290318370010200441186a200241186a41086a29030037000002400240200941606a2006490d00200921080c010b2006415f4b0d01200941017422082001200820014b1b22084100480d0120092008460d0020042009200810252204450d020b200441206a2007200610a1051a2000200136020820002008360204200020043602000240200228022c450d00200710230b200241e0006a24000f0b102c000b102a000b130020004103360204200041c0c5c2003602000b130020004102360204200041e8c7c2003602000bb01105097f017e057f037e017f230041c0006b22032400024002400240024002400240024002402001280210220441016a22052004490d00200128020022062107024020064108490d00200641016a41037641076c21070b200520074101764d0d032005200741016a2207200520074b1b22050d01419ca1c0002108410021094104210a4100210b0c020b4194a0c000411c41b0a0c000102d000b024002400240024020054108490d00200541ffffffff01712005470d02200541037441076e21060c010b200541016a21060b417f2006417f6a6776220941086a2206200941056a2205490d04200941016a2207ad42307e220c422088a70d042006417c712206200ca76a22082006490d042008102122080d01102a000b4194a0c000411c41b0a0c000102d000b2009200741037641076c20094108491b210b200841ff01200510a00520066a210a20012802002106200128021021040b2001280204220541046a210d200620056a41016a210e2005280200417f7341808182847871210f2002280200211020012802082111024003400240200f0d000340200d200e4f0d03201141c0016a2111200d2802002106200d41046a2205210d2006418081828478712206418081828478460d000b200641808182847873210f2005210d0b2003201041086a29030022122010290300220c852213200c4218898520134210868520134225897c221342a0cbbf9599b5a19f0a7c22142011200f6841037641306c6a221529001885201529000020148542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852015290008201342efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852015290010201342bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010a605200341086a29030020032903007c2012200c7c85220ca72106410021050340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b200f417f6a21050240200820026841037620076a20097122066a2c00004100480d002008280200418081828478716841037621060b2005200f71210f200820066a200ca741197622053a00002006417c6a20097120086a41046a20053a0000200a200641306c6a220641286a201541286a290200370200200641206a201541206a290200370200200641186a201541186a290200370200200641106a201541106a290200370200200641086a201541086a290200370200200620152902003702000c000b0b200120043602102001200a360208200041003602002001200b20046b36020c200128020421052001200836020420012802002106200120093602002006450d040240200641086a200641056a490d00200641016aad42307e422088a71a0b200510230c040b200641016a21074100210541002106024003400240024020054101710d00200620074f0d0320062105200641016a21060c010b200641036a220520064922080d0220052007492209450d022007200641046a20081b200720091b21060b200128020420056a220520052802002205410776417f73418182840871200541fffefdfb07726a360200410121050c000b0b20012802042106200128020041016a220541044f0d01200641046a2006200510a2051a0c020b4194a0c000411c41b0a0c000102d000b200620056a20062800003600000b417f2106024002402001280200220541016a22102005490d00200228020021154100210f0340200f221141016a210f02402011200128020422096a2d0000418001470d0002400340200341106a201541086a29030022122015290300220c852213200c4218898520134210868520134225897c221342a0cbbf9599b5a19f0a7c22142001280208201141306c6a220d29001885200d29000020148542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85200d290008201342efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85200d290010201342bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010a6052001280200210841002106200341106a41086a29030020032903107c2012200c7c85220ca7220e21050340200641046a2206200520087122076a2105200920076a280000418081828478712202450d000b0240200920026841037620076a20087122066a2c00004100480d002009280200418081828478716841037621060b20062008200e7122056b201120056b732008714104490d01200920066a22052d000021072005200ca741197622023a00002006417c6a20087120096a41046a20023a00000240200741ff01460d002001280208200641306c6a2206290200210c2006200d290200370200200641186a220529020021132005200d41186a2207290200370200200641106a220529020021122005200d41106a2208290200370200200641086a220529020021142005200d41086a2209290200370200200920143702002008201237020020072013370200200d200c370200200641286a2205290200210c2005200d41286a2207290200370200200629022021132006200d290220370220200d20133702202007200c370200200128020421090c010b0b2001280204220520116a41ff013a0000200520012802002011417c6a716a41046a41ff013a00002001280208200641306c6a2206200d290200370200200641086a200d41086a290200370200200641106a200d41106a290200370200200641186a200d41186a290200370200200641206a200d41206a290200370200200641286a200d41286a2902003702000c010b200920116a200ca741197622063a000020082011417c6a7120096a41046a20063a00000b200f2010470d000b200128020022064108490d010b200641016a41037641076c21060b200041003602002001200620012802106b36020c0b200341c0006a24000bbe4003047f017e027f230041e0006b22022400024002402000280200220341154b0d000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e16000102030405060708090a0b0c0d1514131211100f0e000b200241003a00402001200241c0006a41011062200041086a280200417f6a220341094b0d16024002400240024002400240024002400240024020030e0a00010203040506070809000b200241003a003c20012002413c6a4101106220022000410c6a2802003602402001200241c0006a410410620c1f0b200241013a003c20012002413c6a410110622000410c6a2802002103200041146a28020022002001106120012003200010620c1e0b200241023a003c20012002413c6a410110622002200041106a2903003703402001200241c0006a410810620c1d0b200241033a003c20012002413c6a410110622000410c6a2802002103200041146a28020022002001106120012003200010620c1c0b200241043a003c20012002413c6a410110622000410c6a2802002103200041146a28020022002001106120012003200010620c1b0b200241053a003c20012002413c6a4101106202402000410c6a2802004101460d00200241003a003c20012002413c6a410110620c1b0b200241013a003c20012002413c6a410110622002200041106a2802003602402001200241c0006a410410622002200041146a2802003602402001200241c0006a410410620c1a0b200241063a003c20012002413c6a410110622000410c6a2802002103200041146a2802002200200110612000450d192003200041186c6a2104034020032802002100200341086a28020022052001106120012000200510622003410c6a2802002100200341146a2802002205200110612001200020051062200341186a22032004470d000c1a0b0b200241073a003c20012002413c6a410110622000410c6a2802002103200041146a2802002200200110612000450d1820032000410c6c6a2104034020032802002100200341086a28020022052001106120012000200510622003410c6a22032004470d000c190b0b200241083a003c20012002413c6a410110622000410c6a2802002103200041146a28020022002001106120012003200010620c170b200241093a003c20012002413c6a410110620c160b200241013a00402001200241c0006a41011062200110de020c150b200241023a00402001200241c0006a41011062200241003a00402001200241c0006a410110620240024002400240200041086a290300220642c000540d00200642808001540d012006428080808004540d024108200679a741037622036b4104490d032002411320034102746b3a003c20012002413c6a41011062200220002903082206370300200341786a21000340200220063c003c20012002413c6a4101106220064208882106200041016a22032000492105200321002005450d000b200220063703002006500d18200241206a41146a410b3602002002412c6a4111360200200241086a41146a41033602002002200236023c200241a8e5c20036025c200241c0006a41146a41003602002002420337020c2002418ca7c700360208200241113602242002419ca8c70036025020024201370244200241b0e5c2003602402002200241206a3602182002200241c0006a3602302002200241dc006a36022820022002413c6a360220200241086a419ca8c700103a000b20022006a74102743a003c20012002413c6a410110620c170b20022006a74102744101723b01402001200241c0006a410210620c160b20022006a74102744102723602402001200241c0006a410410620c150b41f0e4c2004136418c94c700102d000b200241033a00402001200241c0006a4101106220002d0004417f6a220341034b0d13200041046a21050240024002400240024020030e0400010203000b200241003a003c20012002413c6a410110622002200041086a280200360240200241c0006a21000c030b200241013a003c20012002413c6a410110622001200541016a412010622002200041286a280200360240200241c0006a21000c020b200241023a003c20012002413c6a410110622002200041086a280200360240200241c0006a21000c010b200241033a003c20012002413c6a410110622001200541016a412010622002200041286a280200360240200241c0006a21000b20012000410410620c130b200241043a00402001200241c0006a41011062200041086a22032d0000417f6a220541034b0d120240024002400240024020050e0400010203000b200241003a003c20012002413c6a410110622001200341016a41201062200041306a2103200241dc006a21000c030b200241013a003c20012002413c6a410110622001200341016a412010622002200041306a3602002002200110db01200041c0006a2103200241086a21000c020b200241023a003c20012002413c6a410110622001200341016a412010622001200341216a41201062200041d0006a2103200241206a21000c010b200241033a003c20012002413c6a410110622001200341016a41201062200041306a2103200241c0006a21000b200020033602002000200110db010c120b200241053a00402001200241c0006a41011062200241003a00402001200241c0006a41011062200028020421032000410c6a2802002200200110612000450d112003200041f0006c6a21070340412010212200450d1320002003290010370000200041186a200341286a290000370000200041106a200341206a290000370000200041086a200341186a2900003700002001200041201062200010232003200110ed01412010212200450d1320002003290030370000200041186a200341c8006a290000370000200041106a200341c0006a290000370000200041086a200341386a290000370000200120004120106220001023412010212200450d13200341f0006a210420002003290050370000200041186a200341e8006a290000370000200041106a200341e0006a290000370000200041086a200341d8006a29000037000020012000412010622000102320032802042100200328020c22032001106102402003450d00200341246c21030340200241c0006a200010e0022001200228024022052002280248106202402002280244450d00200510230b200041246a21002003415c6a22030d000b0b2004210320042007470d000c120b0b200241063a00402001200241c0006a41011062200041086a22052d0000417f6a220341174b0d1002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e18000102030405060708090a0b0c0d0e0f1011121314151617000b200241003a00402001200241c0006a410110622001200541016a412010622002200041306a360240200241c0006a200110db0120002d0029220041024b0d2702400240024020000e03000102000b200241003a00402001200241c0006a410110620c290b200241013a00402001200241c0006a410110620c280b200241023a00402001200241c0006a410110620c270b200241013a00402001200241c0006a410110622002200041106a360240200241c0006a200110db010c260b200241023a00402001200241c0006a410110622002200041106a360240200241c0006a200110db010c250b200241033a00402001200241c0006a410110620c240b200241043a00402001200241c0006a410110620240024002402000410c6a280200220341c000490d00200341808001490d012003418080808004490d02200241033a003c20012002413c6a410110622002200028020c3602402001200241c0006a410410620c260b200220034102743a003c20012002413c6a410110620c250b200220034102744101723b01402001200241c0006a410210620c240b200220034102744102723602402001200241c0006a410410620c230b200241053a00402001200241c0006a410110622000410c6a2802002103200041146a2802002200200110612000450d222000410574210003402001200341201062200341206a2103200041606a22000d000c230b0b200241063a00402001200241c0006a410110620c210b200241073a00402001200241c0006a4101106220052d0001220041024b0d2002400240024020000e03000102000b200241003a00402001200241c0006a410110620c220b200241013a00402001200241c0006a410110620c210b200241023a00402001200241c0006a410110620c200b200241083a00402001200241c0006a410110622001200541016a412010620c1f0b200241093a00402001200241c0006a410110622000410c6a200110ed010c1e0b2002410a3a00402001200241c0006a410110620c1d0b2002410b3a00402001200241c0006a410110620c1c0b2002410c3a00402001200241c0006a410110622000410c6a2802002103200041146a2802002200200110612000450d1b2000410574210003402001200341201062200341206a2103200041606a22000d000c1c0b0b2002410d3a00402001200241c0006a410110622001200541016a412010620c1a0b2002410e3a00402001200241c0006a410110620c190b2002410f3a00402001200241c0006a4101106220022000410c6a2802003602402001200241c0006a41041062200041106a2802002103200041186a28020022002001106120012003200041027410620c180b200241103a00402001200241c0006a4101106220022000410c6a2802003602402001200241c0006a41041062200041106a2802002103200041186a2802002200200110612000450d172003200041246c6a2100034020012003412010622002200341206a2802003602402001200241c0006a410410622000200341246a2203470d000c180b0b200241113a00402001200241c0006a4101106220022000410c6a2802003602402001200241c0006a410410620c160b200241123a00402001200241c0006a410110622001200541016a4120106220022000412c6a2802003602402001200241c0006a410410620c150b200241133a00402001200241c0006a410110622002200041106a360240200241c0006a200110db010c140b200241143a00402001200241c0006a410110622000410c6a200110ed010c130b200241153a00402001200241c0006a410110622001200541016a412010620c120b200241163a00402001200241c0006a410110622000410c6a2802002103200041146a2802002205200110612001200320054101741062200041186a20011081022001200041e0016a413010622002200041d8016a2802003602402001200241c0006a410410620c110b200241173a00402001200241c0006a410110622000410c6a2802002103200041146a2802002205200110612001200320054101741062200041186a20011081022001200041e0016a413010622002200041d8016a2802003602402001200241c0006a410410620c100b200241073a00402001200241c0006a41011062200110de020c0f0b200241083a00402001200241c0006a4101106202402000280204450d00200241003a003c20012002413c6a410110622001200041106a412010622001200041306a412010622001200041d0006a412010622001200041f0006a41201062200120004190016a41201062200028020421032000410c6a28020022002001106120012003200010620c0f0b200241013a003c20012002413c6a410110620c0e0b200241093a00402001200241c0006a41011062200241003a00402001200241c0006a41011062200041046a200110ed010c0d0b2002410a3a00402001200241c0006a41011062200241003a00402001200241c0006a41011062200028020421032000410c6a28020022002001106120012003200010620c0c0b2002410b3a00402001200241c0006a41011062200241003a00402001200241c0006a41011062200220002802043602402001200241c0006a41041062200041086a2802002103200041106a2802002205200110612001200320051062200041146a28020021032000411c6a28020022052001106102402005450d0020032005410c6c6a2107034020032802002105200341086a28020022042001106120012005200410622003410c6a22032007470d000b0b2002200041206a2802003602402001200241c0006a410410622002200041246a2802003602402001200241c0006a410410622001200041286a41c00010620c0b0b2002410c3a00402001200241c0006a41011062200110de020c0a0b2002410d3a00402001200241c0006a410110622000280204417f6a220341014b0d09024020030e020009000b200241003a00402001200241c0006a41011062200041086a2802002104200041106a2802002200200110612000450d09200420004188026c6a2108034020042205200110e10220052802f001210020052802f80122032001106102402003450d002000200341c1006c6a2103034020024102410120002d00004101461b3a00402001200241c0006a410110622001200041016a41c0001062200041c1006a22002003470d000b0b20054180026a28020022034103762100024002402003418004490d002000410274210402402003418080084f0d00200220044101723b01402001200241c0006a410210620c020b200220044102723602402001200241c0006a410410620c010b200220004102743a003c20012002413c6a410110620b20054188026a210420052802fc0121070240024020000d00410021050c010b410121052000410820034107716b22034d0d0041024101200020036b22004107711b20004103766a21050b200120072005106220042008470d000c0a0b0b200241153a00402001200241c0006a4101106220002d0004417f6a220341024b0d08200041046a210502400240024020030e03000102000b200241003a003c20012002413c6a41011062200041086a280200200110dd020c0a0b200241013a003c20012002413c6a410110622001200541016a412010620c090b200241023a003c20012002413c6a410110622001200541016a41201062200041286a280200200110dd020c080b200241143a00402001200241c0006a41011062200110de020c070b200241133a00402001200241c0006a41011062200041086a22052d0000417f6a220341024b0d0602400240024020030e03000102000b200241003a003c20012002413c6a410110620c080b200241013a003c20012002413c6a410110622001200541016a412010620c070b200241023a003c20012002413c6a410110622001200541016a41201062200041306a29030021062002200041386a290300370348200220063703402001200241c0006a41101062200041c0006a29030021062002200041c8006a290300370348200220063703402001200241c0006a411010622002200041d0006a2802003602402001200241c0006a410410620c060b200241123a00402001200241c0006a4101106220002d0004417f6a220341084b0d05200041046a210502400240024002400240024002400240024020030e09000102030405060708000b200241003a003c20012002413c6a410110622001200541016a41201062200041286a280200200110dd020c0d0b200241013a003c20012002413c6a410110622001200541016a412010622001200541216a412010620c0c0b200241023a003c20012002413c6a41011062200041086a2802002103200041106a28020022052001106102402005450d002005410574210503402001200341201062200341206a2103200541606a22050d000b0b200220002f01063b01402001200241c0006a41021062200220002802143602402001200241c0006a410410620c0b0b200241033a003c20012002413c6a410110622001200541016a412010620c0a0b200241043a003c20012002413c6a410110622001200541016a412010622001200541216a412010620c090b200241053a003c20012002413c6a410110622001200541016a412010620c080b200241063a003c20012002413c6a410110622001200541016a412010620c070b200241073a003c20012002413c6a410110620c060b200241083a003c20012002413c6a410110622001200541016a412010620c050b200241113a00402001200241c0006a41011062200041086a22052d0000417f6a2203410a4b0d040240024002400240024002400240024002400240024020030e0b000102030405060708090a000b200241003a003c20012002413c6a410110622001200541016a412010620c0e0b200241013a003c20012002413c6a410110622000410c6a200110e2020c0d0b200241023a003c20012002413c6a410110622000410c6a2802002103200041146a2802002200200110612000450d0c2003200041c4006c6a210503402001200341201062200241c0006a200341206a220010702001200228024022032002280248106202402002280244450d00200310230b2005200041246a2203470d000c0d0b0b200241033a003c20012002413c6a410110620c0b0b200241043a003c20012002413c6a410110622000410c6a200110ed012002200041106a360240200241c0006a200110db010c0a0b200241053a003c20012002413c6a4101106220022000410c6a2802003602402001200241c0006a410410620c090b200241063a003c20012002413c6a410110622000410c6a200110ed012002200041106a360240200241c0006a200110db010c080b200241073a003c20012002413c6a410110622000412c6a200110ed012001200541016a412010620c070b200241083a003c20012002413c6a410110622000410c6a200110ed012002200041106a2903003703402001200241c0006a410810620c060b200241093a003c20012002413c6a410110622000412c6a200110ed012001200541016a41201062200041306a200110e3020c050b2002410a3a003c20012002413c6a410110622001200541016a412010620c040b200241103a00402001200241c0006a4101106220002d0004417f6a220341044b0d03200041046a21040240024002400240024020030e050001020304000b200241003a003c20012002413c6a41011062200041086a2802002103200041106a2802002200200110612000450d07200041b0026c210003402003200110dd02200341b0026a2103200041d07d6a22000d000c080b0b200241013a003c20012002413c6a41011062200220002f01063b01402001200241c0006a41021062200041086a280200200110dd020c060b200241023a003c20012002413c6a41011062200220002f01063b01402001200241c0006a41021062200041086a2802002103200041106a28020022052001106102402005450d002005410574210503402001200341201062200341206a2103200541606a22050d000b0b0240024020002802144101460d00200241003a003c20012002413c6a410110620c010b200241013a003c20012002413c6a410110622002200041186a2802003602402001200241c0006a4104106220022000411c6a2802003602402001200241c0006a410410620b2000280220200110dd020c050b200241033a003c20012002413c6a41011062200220002f01263b01402001200241c0006a41021062200041286a2802002103200041306a28020022052001106102402005450d002005410574210503402001200341201062200341206a2103200541606a22050d000b0b200441016a21030240024020002802344101460d00200241003a003c20012002413c6a410110620c010b200241013a003c20012002413c6a410110622002200041386a2802003602402001200241c0006a4104106220022000413c6a2802003602402001200241c0006a410410620b20012003412010620c040b200241043a003c20012002413c6a41011062200220002f01263b01402001200241c0006a41021062200041286a2802002103200041306a280200220520011061200441016a210402402005450d002005410574210503402001200341201062200341206a2103200541606a22050d000b0b200220002802343602402001200241c0006a410410622002200041386a2802003602402001200241c0006a4104106220012004412010620c030b2002410f3a00402001200241c0006a4101106220002d0004417f6a220341064b0d02024002400240024002400240024020030e0700010203040506000b200241003a003c20012002413c6a41011062200041086a200110ed01200220002d00054101463a003c20012002413c6a410110622000410c6a2802002103200041146a2802002205200110612001200320051062200041186a2802002103200041206a28020022002001106120012003200010620c080b200241013a003c20012002413c6a41011062200041086a200110ed010c070b200241023a003c20012002413c6a410110622002200041086a2802003602402001200241c0006a410410620c060b200241033a003c20012002413c6a41011062200041086a2802002103200041106a2802002205200110612001200320051062200041146a28020021032000411c6a28020022002001106120012003200010620c050b200241043a003c20012002413c6a41011062200041c8006a200110ed012001200041046a220341016a41201062412010212200450d05200041186a200341396a290000370000200041106a200341316a290000370000200041086a200341296a2900003700002000200341216a2900003700002001200041201062200010230c040b200241053a003c20012002413c6a410110620c030b200241063a003c20012002413c6a41011062200041086a200110ed010c020b2002410e3a00402001200241c0006a41011062200241003a00402001200241c0006a410110620c010b200241013a00402001200241c0006a4101106220012000413c6a41201062200041dc006a200110e402200041bd016a200110e4022002200041086a2802003602402001200241c0006a410410622000410c6a2802002103200041146a28020022052001106102402005450d0020032005410c6c6a2107034020032802002105200341086a28020022042001106120012005200410622003410c6a22032007470d000b0b2002200041186a2802003602402001200241c0006a41041062412010212203450d01200341186a200041346a290000370000200341106a2000412c6a290000370000200341086a200041246a29000037000020032000411c6a2900003700002001200341201062200310230b200241e0006a24000f0b1033000b4a01037f230041106b220124002001410036020820014201370300200110de02200128020421022000200128020022032001280208106202402002450d00200310230b200141106a24000bc30202027f017e23004180016b220224002000280200210002400240024002400240200128020022034110710d002000290300210420034120710d0120042001103e21000c020b20002903002104410021000340200220006a41ff006a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d02200141a889c0004102200220006a4180016a410020006b104121000c010b410021000340200220006a41ff006a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d02200141a889c0004102200220006a4180016a410020006b104121000b20024180016a240020000f0b2003418001419889c0001044000b2003418001419889c0001044000bff1001067f230041106b22022400024002400240024002400240024002400240024020012d00000e06010402030500010b2002410036020820024201370300410110212203450d082002410136020420022003360200200341003a000020024101360208200141046a28020021042001410c6a2802002201200210610240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d08200541017422072006200720064b1b22074100480d080240024020050d00024020070d00410121060c020b2007102122060d010c0b0b2002280200210620052007460d0020062005200710252206450d0a0b20022007360204200220063602000b200620036a2004200110a1051a2002200320016a3602080c050b2002410036020820024201370300410110212203450d072002410136020420022003360200200341023a000020024101360208412010212203450d0520032001290001370000200341186a200141196a290000370000200341106a200141116a290000370000200341086a200141096a2900003700000240024020022802042206417f6a4120490d00200228020021010c010b200641017422014121200141214b1b22054100480d0720022802002101024020062005460d0020012006200510252201450d090b20022005360204200220013602000b20012003290000370001200141196a200341186a290000370000200141116a200341106a290000370000200141096a200341086a29000037000020024121360208200310230c040b2002410036020820024201370300410110212203450d062002410136020420022003360200200341043a0000200241013602080240024020022802042206417f6a4104490d00200228020021030c010b200641017422034105200341054b1b22054100480d0620022802002103024020062005460d0020032006200510252203450d080b20022005360204200220033602000b200320012800013600012002410536020820012802082104200141106a2802002201200210610240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d06200541017422072006200720064b1b22074100480d060240024020050d00024020070d00410121060c020b200710212206450d090c010b2002280200210620052007460d0020062005200710252206450d080b20022007360204200220063602000b200620036a2004200110a1051a2002200320016a3602080c030b2002410036020820024201370300410110212203450d052002410136020420022003360200200341053a0000200241013602080240024020022802042206417f6a4104490d00200228020021030c010b200641017422034105200341054b1b22054100480d0520022802002103024020062005460d0020032006200510252203450d070b20022005360204200220033602000b200320012800013600012002410536020820012802082104200141106a2802002201200210610240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d05200541017422072006200720064b1b22074100480d050240024020050d00024020070d00410121060c020b200710212206450d080c010b2002280200210620052007460d0020062005200710252206450d070b20022007360204200220063602000b200620036a2004200110a1051a2002200320016a3602080c020b2002410036020820024201370300410110212203450d042002410136020420022003360200200341063a0000200241013602080240024020022802042206417f6a4104490d00200228020021030c010b200641017422034105200341054b1b22054100480d0420022802002103024020062005460d0020032006200510252203450d060b20022005360204200220033602000b200320012800013600012002410536020820012802082104200141106a2802002201200210610240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d04200541017422072006200720064b1b22074100480d040240024020050d00024020070d00410121060c020b200710212206450d070c010b2002280200210620052007460d0020062005200710252206450d060b20022007360204200220063602000b200620036a2004200110a1051a2002200320016a3602080c010b2002410036020820024201370300410110212203450d032002410136020420022003360200200341073a00002002410136020820022802002103024020022802044101470d0020034101410210252203450d0420024102360204200220033602000b200341003a0001200241023602082002280200210320022802042106024020012802044101460d00024020064102470d0020034102410410252203450d0520024104360204200220033602000b200341003a0002200241033602080c010b024020064102470d0020034102410410252203450d0420024104360204200220033602000b200341013a000220024103360208200141086a28020021050240024020022802042206417d6a4104490d00200228020021030c010b200641017422034107200341074b1b22044100480d0320022802002103024020062004460d0020032006200410252203450d050b20022004360204200220033602000b20032005360003200241073602082001410c6a2802002106024002402002280204220341796a4104490d00200228020021010c010b20034101742201410b2001410b4b1b22054100480d0320022802002101024020032005460d0020012003200510252201450d050b20022005360204200220013602000b200120063600072002410b3602080b200020022201290200370200200041086a200141086a280200360200200241106a24000f0b1033000b102c000b102a000b930201037f230041106b220224002002200028024036020c20012002410c6a410410620240412010212203450d0020032000290050370000200341186a200041e8006a290000370000200341106a200041e0006a290000370000200341086a200041d8006a29000037000020012003412010622003102320002802442103200041cc006a28020022042001106120012003200410622001200041f0006a41201062200120004190016a41c0001062412010212203450d00200320002900d001370000200341186a200041e8016a290000370000200341106a200041e0016a290000370000200341086a200041d8016a2900003700002001200341201062200310232000200110e104200241106a24000f0b1033000bf10301047f230041106b2202240020002802002103200028020822042001106102402004450d002003200441c8006c6a210503402002200310702001200228020022042002280208106202402002280204450d00200410230b2002200341246a220310702001200228020022042002280208106202402002280204450d00200410230b200341246a22032005470d000b0b20022000410c6a10702001200228020022032002280208106202402002280204450d00200310230b2002200041306a10702001200228020022032002280208106202402002280204450d00200310230b2002200041d4006a10702001200228020022032002280208106202402002280204450d00200310230b2002200041f8006a10702001200228020022032002280208106202402002280204450d00200310230b20022000419c016a10702001200228020022032002280208106202402002280204450d00200310230b0240024020002d0088024101460d00200241003a000020012002410110620c010b200241013a00002001200241011062200120004189026a411410620b2002200041c0016a10702001200228020022032002280208106202402002280204450d00200310230b2002200041e4016a10702001200228020022032002280208106202402002280204450d00200310230b200241106a24000bde0102027f017e230041106b2202240002402000280200220341064b0d00024002400240024002400240024020030e0700010203040506000b200241003a000020012002410110620c060b200241013a00002001200241011062200029030821042002200041106a2903003703082002200437030020012002411010620c050b200241023a000020012002410110620c040b200241033a000020012002410110620c030b200241043a000020012002410110620c020b200241053a000020012002410110620c010b200241063a000020012002410110620b200241106a24000bee0201027f230041106b220224000240024020002d0000220341024b0d0002400240024020030e03000102000b200241013a000f20012002410f6a41011062412010212203450d0320032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201062200310230c020b200241023a000f20012002410f6a41011062412010212203450d0220032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201062200310230c010b200241033a000f20012002410f6a41011062412010212203450d0120032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201062200310230b2001200041216a41c0001062200241106a24000f0b1033000b880f020a7f017e230041d0036b2202240041002103200241003a002820012802042204417f6a2105417f210602400240024002400240024002400240024002400240034020042003460d01200241086a20036a200128020022072d00003a00002001200420066a3602042001200741016a22083602002002200341016a22093a00282005417f6a21052006417f6a21062009210320094120470d000b20024188036a41186a2206200241086a41186a29030037030020024188036a41106a220a200241086a41106a29030037030020024188036a41086a220b200241086a41086a2903003703002002200229030837038803200941ff01714120490d01200420096b2103200241a8016a41086a200b290300370300200241a8016a41106a200a290300370300200241a8016a41186a20062903003703002002200229038803220c3703c8022002200c3703a80141002106200241003a002803402003450d03200241086a20066a20082d00003a000020012003417f6a22033602042001200841016a22083602002002200641016a22093a00282009210620094120470d000b20024188036a41186a2203200241086a41186a29030037030020024188036a41106a2206200241086a41106a29030037030020024188036a41086a2204200241086a41086a2903003703002002200229030837038803200941ff01714120490d03200241c8016a41086a2004290300370300200241c8016a41106a2006290300370300200241c8016a41186a20032903003703002002200229038803220c3703c8022002200c3703c80141002106200241003a0028200520096b2103200720096a210403402003417f460d05200241086a20066a200820066a2d00003a0000200120033602042001200420066a41026a3602002002200641016a22093a00282003417f6a21032009210620094120470d000b20024188036a41186a2206200241086a41186a29030037030020024188036a41106a2207200241086a41106a29030037030020024188036a41086a220a200241086a41086a2903003703002002200229030837038803200941ff01714120490d05200820096a2105200241e8016a41086a200a290300370300200241e8016a41106a2007290300370300200241e8016a41186a20062903003703002002200229038803220c3703c8022002200c3703e80141002106200241003a0028200420096a210403402003417f460d07200241086a20066a20052d00003a0000200120033602042001200420066a41026a3602002002200641016a22093a00282003417f6a2103200541016a21052009210620094120470d000b20024188036a41186a2206200241086a41186a29030037030020024188036a41106a2204200241086a41106a29030037030020024188036a41086a2207200241086a41086a2903003703002002200229030837038803200941ff01714120490d0720024188026a41086a200729030037030020024188026a41106a200429030037030020024188026a41186a20062903003703002002200229038803220c3703c8022002200c3703880241002106200241003a00c80303402003417f460d09200241a8036a20066a20052d00003a0000200120033602042001200541016a22053602002002200641016a22093a00c8032003417f6a21032009210620094120470d000b20024188036a41186a2203200241a8036a41186a29030037030020024188036a41106a2201200241a8036a41106a29030037030020024188036a41086a2206200241a8036a41086a290300370300200220022903a80337038803200941ff01714120490d09200241a8026a41086a22092006290300370300200241a8026a41106a22062001290300370300200241a8026a41186a22012003290300370300200241086a41186a200241a8016a41186a290300370300200241086a41106a200241a8016a41106a290300370300200241086a41086a200241a8016a41086a2903003703002002200229038803220c3703c8022002200c3703a802200220022903a801370308200241c0006a200241c8016a41186a290300370300200241386a200241c8016a41106a290300370300200241306a200241c8016a41086a290300370300200220022903c801370328200241e0006a200241e8016a41186a290300370300200241d8006a200241e8016a41106a290300370300200241d0006a200241e8016a41086a290300370300200220022903e80137034820024180016a20024188026a41186a290300370300200241f8006a20024188026a41106a290300370300200241f0006a20024188026a41086a2903003703002002200229038802370368200241a0016a200129030037030020024198016a200629030037030020024190016a2009290300370300200220022903a80237038801200041016a200241086a41a00110a1051a200041003a00000c0a0b200341ff0171450d00200241003a00280b200041013a00000c080b200641ff0171450d00200241003a00280b200041013a00000c060b200641ff0171450d00200241003a00280b200041013a00000c040b200641ff0171450d00200241003a00280b200041013a00000c020b200641ff0171450d00200241003a00c8030b200041013a00000b200241d0036a24000b13002000410536020420004198dfc4003602000b13002000410236020420004188a5c6003602000b130020004105360204200041d8adc5003602000b130020004107360204200041e0c5c0003602000b13002000410136020420004194a4c0003602000b130020004101360204200041e8a6c0003602000b130020004103360204200041d0a1c0003602000b130020004103360204200041dca1c2003602000b130020004102360204200041b4aac0003602000b13002000410636020420004188a3c5003602000b13002000410736020420004184c8c6003602000b130020004106360204200041c4eec3003602000b130020004102360204200041ac9ec2003602000b130020004102360204200041e4f4c3003602000b130020004103360204200041c081c3003602000b4d01017f230041206b22002400200041146a410136020020004201370204200041a4c5c6003602002000410436021c200041cccec6003602182000200041186a3602102000419ca8c700103a000bf00204027f017e017f077e0240024020012802042202450d0020012802002203310000210420012002417f6a22053602042001200341016a3602002005450d012003310001210620012002417e6a22053602042001200341026a3602002005450d012003310002210720012002417d6a22053602042001200341036a3602002005450d012003310003210820012002417c6a22053602042001200341046a3602002005450d012003310004210920012002417b6a22053602042001200341056a3602002005450d012003310005210a20012002417a6a22053602042001200341066a3602002005450d012003310006210b2001200241796a22053602042001200341076a3602002005450d01200041003a00002003310007210c2001200241786a3602042001200341086a3602002000200c423886200b42308684200a422886842009422086842008421886842007421086842006420886842004843700010f0b200041013a00000f0b200041013a00000bb10201037f230041e0006b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b0102400240200228021022010d00200041003602000c010b200228021421032002200241186a28020036022420022001360220200241c8006a200241206a10b00402400240200228024822040d0020024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c20024180c5c6003602482002200241386a360258200241c4006a4184a5c200200241c8006a10311a2002350230422086200235022884100a0240200228022c450d00200228022810230b200041003602000c010b2000200229024c370204200020043602000b2003450d00200110230b200241e0006a24000ba70301087f230041206b220324000240024002400240200141246c41046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b2003410036020820032004360204200320053602002001200310610240024020010d002003280208210420032802042106200328020021070c010b200141246c210820032802042105200328020821010340200341106a200010e0022003280210210902400240200520016b2003280218220a490d002001200a6a210420032802002107200521060c010b2001200a6a22042001490d05200541017422062004200620044b1b22064100480d050240024020050d00024020060d00410121070c020b2006102122070d010c080b2003280200210720052006460d0020072005200610252207450d070b20032006360204200320073602000b200720016a2009200a10a1051a2003200436020802402003280214450d00200910230b200041246a210020062105200421012008415c6a22080d000b0b20022902002004ad4220862007ad84100e02402006450d00200710230b200341206a24000f0b1032000b1033000b102c000b102a000bcc0503027f017e047f230041e0006b2202240041e4dec400ad4280808080e00084100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341888ec600ad4280808080f00084100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100f22012900002104200241386a41086a200141086a2900003703002002200437033820011023200241d4006a200341206a360200200241003a0058200220033602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200310232002280230220541206a2201417f4c0d0120022802282106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000b990204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001ad42808080808004841010108b0102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c20024180c5c6003602382002200241286a360248200241346a4184a5c200200241386a10311a2002350220422086200235021884100a0240200228021c450d00200228021810230b420021030b2004450d00200110230b2000200537030820002003370300200241d0006a24000b950503027f017e057f230041e0006b2202240041fba7c600ad4280808080f00084100c22032900002104200241086a41086a200341086a29000037030020022004370308200310234194a8c600ad4280808080800184100c22032900002104200241186a41086a200341086a290000370300200220043703182003102320022001360234200241346aad4280808080c00084100f22032900002104200241386a41086a200341086a2900003703002002200437033820031023200241d4006a200241386a360200200241003a00582002200241c8006a36024c2002200241346a3602502002200241386a360248200241286a200241c8006a10650240024002400240024002402002280230220541206a2201417f4c0d0020022802282106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000bbb0402097f057e230041f0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022040d00200042003703000c010b200341186a28020021052003280214210641002101200341003a0068024002400240034020052001460d01200341c8006a20016a200420016a2d00003a00002003200141016a22023a00682002210120024120470d000b200341286a41186a2201200341c8006a41186a2207290300370300200341286a41106a2208200341c8006a41106a2209290300370300200341286a41086a220a200341c8006a41086a220b29030037030020032003290348370328200520026b410f4d0d01200b200a290300220c37030020092008290300220d37030020072001290300220e37030020032003290328220f370348200420026a22012900002110200041306a200141086a290000370300200041286a2010370300200041206a200e370300200041186a200d370300200041106a200c3703002000200f3703084201210c0c020b200141ff0171450d00200341003a00680b20034100360230200342013703282003410a3602242003200341086a3602202003200341286a36026c200341dc006a41013602002003420137024c20034180c5c6003602482003200341206a360258200341ec006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b4200210c0b2000200c3703002006450d00200410230b200341f0006a24000ba30f05067f027e037f0b7e027f23004180036b22032400200228020821042002280204210520022802002106200341086a2001109702200341b0016a200328020822072003280210220810980220032903b00121094200210a200342003703b001200341f8016a280200210b20032d00fc01210c024002402009420151220d0d00200341186a41306a4200370300200341186a41286a4200370300200341186a41206a4200370300200341186a41186a4200370300200341286a4200370300200341206a4200370300200342003703184200210e4200210f42002110420021110c010b200341e8016a2903002112200341b0016a41306a2903002113200341b0016a41206a2903002110200341b0016a41186a290300210f200341f0016a290300211120032903c001210e20032903b801210a200341186a41206a200341b0016a41286a290300370300200341186a41286a2013370300200341186a41306a2012370300200341286a200f370300200320103703302003200a3703182003200e3703200b200341186a41106a21020240024002400240024002400240200a200629030022137d2214200a56200e200641086a29030022157d200a201354ad7d2212200e562012200e511b450d004280808080b002211341e1acc500210d4180800c21060c010b2003201437031820032012370320200f20137c2216200f542206201020157c2006ad7c221720105420172010511b4101470d0142808080808001211341f4acc500210d4180800821062014210a2012210e0b200341d0006a41206a200241206a290300370300200341d0006a41186a200241186a290300370300200341d0006a41106a200241106a290300370300200341d0006a41086a200241086a290300370300200320022903003703500c010b200341186a41186a201737030020032016370328024002402013201584500d00200341f8006a200528020010970220034198026a20032802782205200328028001109802200341c8026a290300420020032903980242015122061b2113200341c0026a290300420020061b21150240200328027c450d00200510230b2015201456201320125620132012511b0d010b200341d0006a41206a200241206a2903002217370300200341d0006a41186a200241186a2903002216370300200341d0006a41106a200241106a2903002218370300200341d0006a41086a200241086a290300221337030020032002290300221537035020042802002102200341f8006a41186a2013370300200341f8006a41206a22052018370300200341a0016a22192016370300200341a8016a221a20173703002003201537038801200320143703782003201237038001427f200a200f7c220f200f200a542206200e20107c2006ad7c220a200e54200a200e511b22061b427f200a20061b84502106427f201420157c220a200a2014542204201220137c2004ad7c220a201254200a2012511b22041b220e4280c8afa025544100427f200a20041b220a501b0d02200341f8006a41106a290300210a201a290300210e201929030021102005290300210f2003290380012115200329037821174201211620032903900121180c030b200341d0006a41206a200241206a290300370300200341d0006a41186a200241186a290300370300200341d0006a41106a200241106a290300370300200341d0006a41086a200241086a2903003703002003200229030037035041808004210641fcacc500210d4280808080d00221132014210a2012210e0b20064180800c7141830a722106200dad221242088842ff018321102013201284428080fcffff0383210f410121020c020b420021160240200e200a84500d00200e200a10eb01200341d0026a200a370300200341c8026a200e37030020034198026a41086a41013a0000200341a1026a2002290000370000200341a9026a200241086a290000370000200341b1026a200241106a290000370000200341b9026a200241186a290000370000200341023a00980220034198026a10e0010b0b2006ad2113200341d8016a200f370300200341e0016a2010370300200341c0016a2015370300200341e8016a200e370300200341c8016a200a370300200320183703d001200320113703f001200320173703b80142012110410021022003200c4100200942015122061b3a00fc012003200b410020061b3602f801200320164201512206ad3703b001024020060d002008ad4220862007ad841011420021102014210a2012210e4200210f0c010b2003200836029c022003200736029802200341b8016a20034198026a1098034200210f2014210a2012210e0b0240200328020c450d00200710230b024002402002450d0020002006360204200041086a2010420886200dad42ff018384200f84370200410121020c010b024002400240200d41ff017122020d0020104200510d004103210d20034198026a21020c010b2002450d0120104200520d014104210d200341b0016a21020b200241046a200d3a0000200241003a0000200241056a20012900003700002002410d6a200141086a290000370000200241156a200141106a2900003700002002411d6a200141186a290000370000200210e0010b200041186a200e370300200041106a200a370300200041086a2013370300410021020b2000200236020020034180036a24000bb31d0e037f017e037f057e037f017e027f017e017f037e017f017e037f047e23004180086b220624002006200437031020062003370308200620053a001f02400240024002400240024002400240024002402003200484500d0020012002460d0320012002412010a305450d0320064188016a200210970220064198016a200628028801220720062802900122081098022006290398012109420021042006420037039801200641e0016a280200210a20062d00e401210b2009420151220c0d01200641e8016a41386a4200370300200641e8016a41306a4200370300200641e8016a41286a420037030020064188026a4200370300200641e8016a41186a4200370300200641f8016a4200370300200641f0016a4200370300200642003703e801420021034200210d4200210e0c020b20004100360200200041106a4200370300200041086a42003703000c080b20064198016a41386a290300210f20064198016a41306a290300211020064198016a41206a290300210e20064198016a41186a290300210d200641d8016a290300211120062903a801210320062903a001210420064188026a20064198016a41286a290300370300200641e8016a41286a2010370300200641e8016a41306a200f370300200641f8016a200d3703002006200e37038002200620113703a002200620043703e801200620033703f0010b42002110200641e8016a41106a21050240427f2004200d7c220d200d20045422122003200e7c2012ad7c220420035420042003511b22121b427f200420121b844200520d00200641c8056a41206a200541206a290300370300200641c8056a41186a200541186a290300370300200641c8056a41106a200541106a290300370300200641c8056a41086a200541086a290300370300200620052903003703c80541a4acc500ad4280808080b00184210341838a1c21050c040b200641f8036a200110970220064188046a20062802f8032213200628028004221410980220062903880421152006420037038804200641d0046a280200211620062d00d404211702400240201542015122120d004200210d200641d8046a41306a4200370300200641d8046a41286a4200370300200641d8046a41206a4200370300200641d8046a41186a4200370300200641e8046a4200370300200641e0046a4200370300200642003703d804420021034200210e42002104420021180c010b200641c0046a290300210f20064188046a41306a290300211020064188046a41206a290300210320064188046a41186a290300210d200641c8046a29030021182006290398042104200629039004210e200641d8046a41206a20064188046a41286a290300370300200641d8046a41286a2010370300200641d8046a41306a200f370300200641e8046a200d370300200620033703f0042006200e3703d804200620043703e0040b200641086a41086a29030022102003200d2006290308221156200320105620032010511b22191b211a2011200d20191b210f0240024020062d001f4101470d002005211920062903f801221b200f7c221c201b54221d20064180026a290300221e201a7c201dad7c221b201e54201b201e511b0d010c030b200641e8016a211920062903e801221b200f7c221c201b54221d200641e8016a41086a290300221e201a7c201dad7c221b201e54201b201e511b4101470d020b41f4acc500211241f4acc500ad42808080808001842203428080fcff8f0183210f200342088842ff0183210d410121190c020b02402005450d00200641b0066a200110970220064198076a20062802b006220220062802b806109802200641b8076a290300420020062903980742015122011b210e200641b0076a290300420020011b210d024020062802b406450d00200210230b20004100360200200041106a42002004200e7d2003200d54ad7d220e2003200d7d220d200356200e200456200e2004511b22011b370300200041086a4200200d20011b3703000c060b200620033703c805200620043703d0052006200136029003200641b0066a2001200641c8056a20064190036a10ff02200641d0066a290300210320062903c8062104024020062903b0064201520d0020062903b806210d200641d0076a200641b0066a41106a290300370300200641c8076a200d37030020064198076a41086a41003a0000200641a1076a2001290000370000200641a9076a200141086a290000370000200641b1076a200141106a290000370000200641b9076a200141186a290000370000200641023a00980720064198076a10e0010b200041106a2003370300200041086a2004370300200041003602000c050b2019201c3703002019201b370308200641d8046a41186a2003201a7d200d200f54ad7d3703002006200d200f7d3703e80420064190056a41186a200641e8046a221941086a290300221b37030020064190056a41206a221f201941106a290300370300200641b8056a2220201941186a290300370300200641c0056a2221201941206a29030037030020062019290300221c3703a0052006200e3703900520062004370398052010201a7d21102011200f54ad211a427f200e200d7c220d200d200e542219200420037c2019ad7c220320045420032004511b22191b427f200320191b8450211902400240427f200e201c7c22032003200e54221d2004201b7c201dad7c220320045420032004511b221d1b220d4280c8afa025544100427f2003201d1b2203501b0d0020064190056a41106a290300210d2021290300211b2020290300211c201f290300211e200629039805212220062903900521234201212420062903a80521250c010b420021240240200d200384500d00200d200310eb01200641d0076a2003370300200641c8076a200d37030020064198076a41086a41013a0000200641a1076a2001290000370000200641a9076a200141086a290000370000200641b1076a200141106a290000370000200641b9076a200141186a290000370000200641023a00980720064198076a10e0010b0b2010201a7d21102011200f7d21032019ad2111200641b0046a201e370300200641b8046a201c37030020064198046a2022370300200641c0046a201b370300200641a0046a200d370300200620253703a804200620183703c80420062023370390044201210d410021192006201741002015420151221d1b3a00d404200620164100201d1b3602d004200620244201512216ad370388040240024020160d002014ad4220862013ad8410114200210d0c010b2006201436029c07200620133602980720064190046a20064198076a1098030b4200210f0b024020062802fc03450d00201310230b0240024020190d00024002400240201241ff017122120d00200d4200510d0041032119200641b0066a21120c010b2012450d01200d4200520d0141042119200641c8056a21120b201241046a20193a0000201241003a0000201241056a20012900003700002012410d6a200141086a290000370000201241156a200141106a2900003700002012411d6a200141186a290000370000201210e0010b4100211220114201520d01200641d0076a2004370300200641c8076a200e3703004100211220064198076a41086a41003a0000200641a1076a2001290000370000200641a9076a200141086a290000370000200641b1076a200141106a290000370000200641b9076a200141186a290000370000200641023a00980720064198076a10e0010c010b200d4208862012ad42ff018384200f84210342002110410121120b200641e8016a41086a290300210420062903e801210d20062903a002210e200641c8056a41206a2201200541206a290300370300200641c8056a41186a2219200541186a290300370300200641c8056a41106a2213200541106a290300370300200641c8056a41086a2214200541086a290300370300200620052903003703c80541838a0821052012450d010b20034280807c83210d200342088842ff018321042003a7210c410121010c010b200641b0066a41186a2014290300220f370300200641b0066a41206a2013290300370300200641d8066a22052019290300370300200641e0066a22122001290300370300200620062903c80522113703c0062006200d3703b006200620043703b80602400240427f200d20117c22112011200d5422012004200f7c2001ad7c220d200454200d2004511b22011b22044280c8afa025544100427f200d20011b220d501b0d00200641c0066a29030021042012290300210d2005290300210f200641d0066a290300211120062903b806211a20062903b00621154201211b20062903c80621180c010b4200211b02402004200d84500d002004200d10eb01200641d0076a200d370300200641c8076a200437030020064198076a41086a41013a0000200641a1076a2002290000370000200641a9076a200241086a290000370000200641b1076a200241106a290000370000200641b9076a200241186a290000370000200641023a00980720064198076a10e0010b0b200641c0016a2011370300200641c8016a200f370300200641a8016a201a370300200641d0016a200d370300200641b0016a2004370300200620183703b8012006200e3703d801200620153703a00142012104410021012006200b4100200942015122051b3a00e4012006200a410020051b3602e0012006201b4201512205ad37039801024020050d002008ad4220862007ad8410114200210441838a0821054200210d0c010b2006200836029c072006200736029807200641a0016a20064198076a1098034200210d41838a0821050b0240200628028c01450d00200710230b024020010d00024002400240200c41ff017122010d0020044200510d004103210520064190036a21010c010b2001450d0120044200520d0141042105200641a8026a21010b200141046a20053a0000200141003a0000200141056a20022900003700002001410d6a200241086a290000370000200141156a200241106a2900003700002001411d6a200241186a290000370000200110e0010b200041106a2010370300200041086a2003370300200041003602000c010b20002005360204200041086a2004420886200cad42ff018384200d84370200200041013602000b20064180086a24000be40a06037f027e027f0c7e037f057e230041d0026b22042400200328020021052004200110970220044180016a20042802002203200428020822061098022004290380012107420021082004420037038001200441c8016a280200210920042d00cc01210a0240024020074201510d00200441106a41306a4200370300200441106a41286a4200370300200441106a41206a4200370300200441106a41186a4200370300200441206a4200370300200441186a4200370300200442003703104200210b4200210c4200210d4200210e0c010b200441b8016a290300210f20044180016a41306a290300211020044180016a41206a290300210b20044180016a41186a2903002108200441c0016a290300210e200429039001210d200429038801210c200441106a41206a20044180016a41286a290300370300200441106a41286a2010370300200441106a41306a200f370300200441206a20083703002004200b3703282004200c3703102004200d3703180b200441106a41186a200b200241086a2903002211200b20082002290300221256200b201156200b2011511b22021b22137d20082012200820021b221054ad7d22143703002004200820107d22153703202004427f200d20137c200c20107c2216200c542202ad7c220f2002200f200d54200f200d511b22021b220f3703182004427f201620021b2216370310200441c8006a41186a2014370300200441c8006a41206a2217200441106a41206a290300370300200441c8006a41286a2218200441106a41286a290300370300200441c8006a41306a2219200441106a41306a2903003703002004200f3703502004201637034820042015370358427f200d200b7c200c20087c220b200c542202ad7c220820022008200d542008200d511b22021b210c427f200b20021b211a02400240427f201620157c220d200d2016542202200f20147c2002ad7c220d200f54200d200f511b22021b22084280c8afa025544100427f200d20021b220b501b0d00200441d8006a290300210b20192903002114201829030021152017290300211b2004290350211c2004290348211d4201210d2004290360211e0c010b4200210d02402008200b84500d002008200b10eb01200441a0026a200b37030020044198026a2008370300200441e8016a41086a41013a0000200441f1016a2005290000370000200441f9016a200541086a29000037000020044181026a200541106a29000037000020044189026a200541186a290000370000200441023a00e801200441e8016a10e0010b0b20122010542102201a200c842108200441a8016a201b370300200441b0016a201537030020044190016a201c370300200441b8016a201437030020044198016a200b3703002004201e3703a0012004200e3703c0012004201d370388012004200a4100200742015122051b3a00cc0120042009410020051b3602c8012004200d4201512205ad370380010240024020050d002006ad4220862003ad8410110c010b200420063602ec01200420033602e80120044188016a200441e8016a1098030b201120137d210b2002ad210c200850210202402004280204450d00200310230b200b200c7d21082002ad210b201220107d210c200d420152210202400240024020074201510d0020020d0041032103200441e8016a21020c010b20074201522002410173720d014104210320044180016a21020b200241046a20033a0000200241003a0000200241056a20012900003700002002410d6a200141086a290000370000200241156a200141106a2900003700002002411d6a200141186a290000370000200210e0010b2000200c370318200020163703082000200b370300200041206a2008370300200041106a200f370300200441d0026a24000bb91e0b037f027e037f047e037f027e017f077e017f027e047f230041a0076b2206240020062004370318200620033703102006200136020c200620053a002702400240024002400240024020012002460d002003200484500d0020012002412010a305450d00200641286a2002109702200641386a2006280228220720062802302208109802200629033821094200210a2006420037033820064180016a280200210b20062d008401210c024002402009420151220d0d0020064188016a41386a420037030020064188016a41306a420037030020064188016a41286a4200370300200641a8016a420037030020064188016a41186a420037030020064198016a420037030020064190016a420037030020064200370388014200210e4200210f420021100c010b200641386a41386a2903002103200641386a41306a2903002104200641386a41206a290300210e200641386a41186a290300210a200641f8006a2903002111200629034821102006290340210f200641a8016a200641386a41286a29030037030020064188016a41286a200437030020064188016a41306a200337030020064198016a200a3703002006200e3703a001200620113703c0012006200f3703880120062010370390010b20064198036a200628020c2212109702200641a8036a200628029803221320062802a003221410980220062903a803211542002116200642003703a803200641f0036a280200210120062d00f403211702400240201542015122050d00200641f8036a41306a4200370300200641f8036a41286a4200370300200641f8036a41206a4200370300200641f8036a41186a4200370300200641f8036a41106a420037030020064180046a4200370300200642003703f803420021184200210442002103420021190c010b200641e0036a2903002111200641a8036a41306a290300211a200641a8036a41206a2903002118200641a8036a41186a2903002116200641e8036a290300211920062903b803210320062903b0032104200641f8036a41206a200641a8036a41286a290300370300200641f8036a41286a201a370300200641f8036a41306a2011370300200641f8036a41106a20163703002006201837039004200620043703f80320062003370380040b024020042006290310221b7d221a2004562003200641106a41086a290300221c7d2004201b54ad7d221120035620112003511b450d0041e1acc50021054280808080b002211141808a0c21010c030b2006201a3703f80320062011370380040240200629038801221d201b7c221e201d54221f20064188016a41086a2903002220201c7c201fad7c221d202054201d2020511b450d0041f4acc500210542808080808001211141808a0821010c030b2006201e37038801200641a0016a29030021202006201d370390010240427f201e2006290398017c22212021201e54221f201d20207c201fad7c2220201d542020201d511b221f1b4280c8afa025544100427f2020201f1b501b450d0041cfacc50021054280808080a002211141808a1021010c030b0240201b201c84500d00200641b0046a200628020c109702200641b8066a20062802b004222220062802b804109802200641e8066a290300420020062903b806420151221f1b211b200641e0066a2903004200201f1b211d024020062802b404450d00202210230b201d201a56201b201156201b2011511b0d020b0240024020062d00274101460d00201a4280c8afa0255441002011501b0d010c050b200641b0046a200628020c109702200641b8066a20062802b004221f20062802b80410980220062d008407212220062903b806211b024020062802b404450d00201f10230b201a42ffc7afa0255620114200522011501b0d04201b4201520d04202241ff0171450d040b41c6acc500210542808080809001211141808a1421010c020b200041043a00000c040b41fcacc50021054280808080d002211141808a0421010b200141037221172005ad220342088842ff018321042003428080fcff0f83201184211b4101211f0c010b200641b0046a41186a200641f8036a41186a290300221b370300200641b0046a41206a2223200641f8036a41206a290300370300200641b0046a41286a2224200641f8036a41286a290300370300200641b0046a41306a2225200641f8036a41306a2903003703002006200629038804221d3703c0042006201a3703b004200620113703b804427f200420167c22162016200454221f200320187c201fad7c220420035420042003511b221f1b427f2004201f1b8450211f02400240427f201a201d7c22032003201a5422222011201b7c2022ad7c220320115420032011511b22221b22044280c8afa025544100427f200320221b2203501b0d00200641c0046a29030021042025290300211b202429030021162023290300211d20062903b804211c20062903b00421184201212020062903c804211e0c010b4200212002402004200384500d002004200310eb01200641f0066a2003370300200641e8066a2004370300200641b8066a41086a41013a0000200641c1066a2012290000370000200641c9066a201241086a290000370000200641d1066a201241106a290000370000200641d9066a201241186a290000370000200641023a00b806200641b8066a10e0010b0b201fad2103200641d0036a201d370300200641d8036a2016370300200641b8036a201c370300200641e0036a201b370300200641c0036a20043703002006201e3703c803200620193703e803200620183703b003420121044100211f200620174100201542015122221b3a00f40320062001410020221b3602f003200620204201512201ad3703a803024020010d002014ad4220862013ad841011420021044200211b0c010b200620143602bc06200620133602b806200641b0036a200641b8066a1098034200211b0b0240200628029c03450d00201310230b20064188016a41106a210102400240201f0d00024002400240200541ff017122050d0020044200510d0041032117200641d0056a21050c010b2005450d0120044200520d0141042117200641e8046a21050b200541046a20173a0000200541003a0000200541056a20122900003700002005410d6a201241086a290000370000200541156a201241106a2900003700002005411d6a201241186a290000370000200510e0010b410421174100210520034201520d01200641f0066a2011370300200641e8066a201a37030041002105200641b8066a41086a41003a0000200641c1066a2012290000370000200641c9066a201241086a290000370000200641d1066a201241106a290000370000200641d9066a201241186a290000370000200641023a00b806200641b8066a10e0010c010b20044208862005ad42ff018384201b842103201741807e7121050b200641e8046a41086a2212200141086a290300370300200641e8046a41106a221f200141106a290300370300200641e8046a41186a2213200141186a290300370300200641e8046a41206a2214200141206a290300370300200620012903003703e80420064188016a41086a2903002104200629038801211102400240201741ff017122014104460d0020034280807c83211a200342088842ff01832110200520017221052003a7210d410121010c010b20062903c001211a200641d0056a41186a2012290300221b370300200641d0056a41206a201f290300370300200641f8056a2212201329030037030020064180066a22172014290300370300200620062903e80422153703e005200620113703d005200620043703d805427f200f200a7c22032003200f5422012010200e7c2001ad7c220320105420032010511b22011b427f200320011b8450210102400240427f201120157c2203200320115422052004201b7c2005ad7c220320045420032004511b22051b22104280c8afa025544100427f200320051b2203501b0d00200641e0056a29030021102017290300211b2012290300210a200641f0056a290300210f20062903d805211520062903d00521164201210e20062903e805211d0c010b4200210e02402010200384500d002010200310eb01200641f0066a2003370300200641e8066a2010370300200641b8066a41086a41013a0000200641c1066a2002290000370000200641c9066a200241086a290000370000200641d1066a200241106a290000370000200641d9066a200241186a290000370000200641023a00b806200641b8066a10e0010b0b2001ad2103200641e0006a200f370300200641e8006a200a370300200641c8006a2015370300200641f0006a201b370300200641d0006a20103703002006201d3703582006201a3703782006201637034042012110410021012006200c4100200942015122051b3a0084012006200b410020051b360280012006200e4201512205ad370338024020050d002008ad4220862007ad841011420021104200211a0c010b200620083602bc06200620073602b806200641c0006a200641b8066a1098034200211a0b0240200628022c450d00200710230b02400240024020010d00024002400240200d41ff017122010d0020104200510d0041032105200641b0026a21010c010b2001450d0120104200520d0141042105200641c8016a21010b200141046a20053a0000200141003a0000200141056a20022900003700002001410d6a200241086a290000370000200141156a200241106a2900003700002001411d6a200241186a290000370000200110e0010b20034201520d01200641f0066a2004370300200641e8066a2011370300200641b8066a41086a41003a0000200641c1066a2002290000370000200641c9066a200241086a290000370000200641d1066a200241106a290000370000200641d9066a200241186a290000370000200641023a00b806200641b8066a10e0010c010b200541ff01714104470d010b200628020c21012006290310210320064190076a200641106a41086a29030037030020064188076a2003370300200641b8066a41086a41023a0000200641c1066a2001290000370000200641c9066a200141086a290000370000200641d1066a200141106a290000370000200641d9066a200141186a290000370000200641e1066a2002290000370000200641e9066a200241086a290000370000200641f1066a200241106a290000370000200641f9066a200241186a290000370000200641023a00b806200641b8066a10e001200041043a00000c010b2000200541087622023b0001200020053a0000200041036a20024110763a0000200041046a2010420886200dad42ff018384201a843700000b200641a0076a24000b950201047f230041d0006b220124002001412036020420012000360200200141086a2000ad42808080808004841010108b0102400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0020022d0000220441014b0d0041002100024020040e020200020b410121000c010b20014100360220200142013703182001410a36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c20014180c5c6003602382001200141286a360248200141346a4184a5c200200141386a10311a2001350220422086200135021884100a0240200128021c450d00200128021810230b410221000b2003450d00200210230b200141d0006a240020000b901304057f017e107f027e230041e0026b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1088010240024020022802000d00200228020422052002280224220641c4006e2201200120054b1bad42c4007e2207422088a70d032007a72201417f4c0d030240024020010d00410421080c010b200110212208450d050b20024100360230200220083602282002200141c4006e36022c0240024002402005450d00200241b8026a41077221094100210a4100210b03402006450d0220022006417f6a220c36022420022002280220220d41016a360220200d2d0000220141014b0d0202400240024020010e020001000b200c4104490d04200241f4016a41026a200241f8016a41026a2d00003a0000200241d8016a41086a20024198026a41086a290200370300200241d8016a41106a20024198026a41106a290200370300200241d8016a41186a20024198026a41186a2d00003a0000200241b8016a41086a200241b8026a41086a290100370300200241b8016a41106a200241b8026a41106a290100370300200241b8016a41186a200241b8026a41186a290100370300200220022f00f8013b01f40120022002290298023703d801200220022901b8023703b80120022006417b6a220e3602242002200d41056a360220200d280001210f200220022f0194023b01b601410021100c010b41002111200241003a00d8022006417e6a2110024002400240024002400340200c20112201460d01200241b8026a20016a200d20016a221141016a2d00003a00002002201141026a3602202002200141016a22113a00d802200220103602242010417f6a211020114120470d000b20024194026a41026a221220022d00ba023a0000200241f8016a41086a2213200941086a290000370300200241f8016a41106a2214200941106a290000370300200241f8016a41186a2215200941186a2d00003a0000200220022f01b8023b019402200220092900003703f8014100210e200c2011460d0220022800bb022116200220103602242002200d20116a220c41026a360220200c41016a2d0000221141014d0d012010210e410221100c050b0240200141ff0171450d00200241003a00d8020b4100210e410221100c040b024020110e020200020b41002111200241003a00d802200620016b417c6a21010240034020102011460d01200241b8026a20116a200c20116a220d41026a2d00003a00002002200d41036a3602202002201141016a220d3a00d802200220013602242001417f6a2101200d2111200d4120470d000b20024198026a41186a200241b8026a41186a29030037030020024198026a41106a200241b8026a41106a29030037030020024198026a41086a200241b8026a41086a290300370300200220022903b802370398022010200d6b210e410121170c030b0240201141ff0171450d00200241003a00d8020b4100210e0b410221100c020b410021172010210e0b200241b8016a41186a20024198026a41186a290300370300200241b8016a41106a20024198026a41106a290300370300200241b8016a41086a20024198026a41086a290300370300200241f4016a41026a20122d00003a0000200241d8016a41086a2013290300370300200241d8016a41106a2014290300370300200241d8016a41186a20152d00003a000020022002290398023703b801200220022f0194023b01f401200220022903f8013703d801410121102016210f0b200241b2016a41026a2201200241f4016a41026a2d00003a000020024198016a41086a2211200241d8016a41086a29030037030020024198016a41106a220d200241d8016a41106a29030037030020024198016a41186a220c200241d8016a41186a2d00003a0000200241f8006a41086a2206200241b8016a41086a290300370300200241f8006a41106a2212200241b8016a41106a290300370300200241f8006a41186a2213200241b8016a41186a290300370300200220022f01f4013b01b201200220022903d80137039801200220022903b801370378200220022f01b6013b017620104102460d03200b41016a210b200241f2006a41026a221420012d00003a0000200241d8006a41086a22152011290300370300200241d8006a41106a2211200d290300370300200241d8006a41186a220d200c2d00003a0000200241386a41086a220c2006290300370300200241386a41106a22062012290300370300200241386a41186a22122013290300370300200220022f01b2013b0172200220022903980137035820022002290378370338200220022f01763b01360240200a200228022c470d00200241286a200a4101109b01200228022821082002280230210a0b2008200a41c4006c6a220120103a00002001200f360004200141036a20142d00003a0000200120022f01723b0001200d2d00002110201129030021072015290300211820022903582119200120173a002120012019370008200141106a2018370000200141186a2007370000200141206a20103a000020012002290338370022200c29030021072006290300211820122903002119200120022f01363b00422001413a6a2019370000200141326a20183700002001412a6a20073700002002200a41016a220a360230200e2106200b2005470d000b0b2008450d022000200229022c370204200020083602000c030b200241b2016a41026a200241f4016a41026a2d00003a000020024198016a41086a200241d8016a41086a29030037030020024198016a41106a200241d8016a41106a29030037030020024198016a41186a200241d8016a41186a2d00003a0000200241f8006a41086a200241b8016a41086a290300370300200241f8006a41106a200241b8016a41106a290300370300200241f8006a41186a200241b8016a41186a290300370300200220022f01f4013b01b201200220022903d80137039801200220022903b801370378200220022f01b6013b01760b200228022c2201450d00200141c4006c450d00200810230b200241003602a00220024201370398022002410a3602bc012002200241086a3602b801200220024198026a360278200241cc026a4101360200200242013702bc0220024180c5c6003602b8022002200241b8016a3602c802200241f8006a4184a5c200200241b8026a10311a20023502a00242208620023502980284100a0240200228029c02450d0020022802980210230b200041003602000b2004450d00200310230b200241e0026a24000f0b1032000b1033000b9b0902097f037e230041206b220224002002410036020820024201370300024002400240412010212203450d0020032001290010370000200341186a2204200141286a290000370000200341106a2205200141206a290000370000200341086a2206200141186a290000370000412010212207450d02200241203602042002200736020020072003290000370000200741086a2006290000370000200741106a2005290000370000200741186a200429000037000020024120360208200310232001200210ed01412010212203450d0020032001290030370000200341186a200141c8006a290000370000200341106a200141c0006a290000370000200341086a200141386a2900003700000240024020022802042208200228020822066b4120490d00200641206a210720022802002104200821050c010b200641206a22072006490d02200841017422042007200420074b1b22054100480d020240024020080d00024020050d00410121040c020b2005102122040d010c050b2002280200210420082005460d0020042008200510252204450d040b20022005360204200220043602000b200420066a22062003290000370000200641186a200341186a290000370000200641106a200341106a290000370000200641086a200341086a2900003700002002200736020820031023412010212203450d0020032001290050370000200341186a200141e8006a290000370000200341106a200141e0006a290000370000200341086a200141d8006a2900003700000240200520076b411f4b0d00200741206a22062007490d02200541017422082006200820064b1b22064100480d020240024020050d00024020060d00410121040c020b200610212204450d050c010b20052006460d0020042005200610252204450d040b20022006360204200220043602000b200420076a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002002200741206a36020820031023200128020421052001410c6a2802002201200210610240024020010d002002280208210320022802042104200228020021080c010b200141246c210920022802042107200228020821010340200241106a200510e0022002280210210a02400240200720016b20022802182206490d00200120066a210320022802002108200721040c010b200120066a22032001490d04200741017422042003200420034b1b22044100480d040240024020070d00024020040d00410121080c020b200410212208450d070c010b2002280200210820072004460d0020082007200410252208450d060b20022004360204200220083602000b200820016a200a200610a1051a2002200336020802402002280214450d00200a10230b200541246a210520042107200321012009415c6a22090d000b0b2003ad4220862008ad8410182201290000210b200141086a290000210c200141106a290000210d200041186a200141186a290000370000200041106a200d370000200041086a200c3700002000200b3700002001102302402004450d00200810230b200241206a24000f0b1033000b102c000b102a000bac0603027f017e057f23004180016b2202240041e4dec400ad4280808080e00084100c22032900002104200241306a41086a200341086a290000370300200220043703302003102341eadec400ad4280808080900184100c22032900002104200241d0006a41086a200341086a2900003703002002200437035020031023200220013602742002200241f4006aad4280808080c00084100d220329000037037820031023200241146a200241f8006a360200200241003a00182002200241f8006a41086a36020c2002200241f4006a3602102002200241f8006a360208200241c0006a200241086a10650240024002400240024002402002280248220541206a2201417f4c0d0020022802402106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422074110200741104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290330370000200341086a200241306a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290350370010200341186a200241d0006a41086a2903003700000240200841606a20054f0d00200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a02402002280244450d00200610230b200241086a2003200110e101200241d0006a41086a2201200241116a290000370300200241d0006a41106a2207200241196a290000370300200241d0006a41186a2205200241216a290000370300200220022900093703500240024020022d00084101460d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002002290350370000200041186a2005290300370000200041106a2007290300370000200041086a20012903003700000b2003102320024180016a24000f0b102c000b102a000beb0e05017f017e047f017e067f230041f0016b2201240042002102200141d8006a41186a22034200370300200141d8006a41106a22044200370300200141d8006a41086a220542003703002001420037035841fea6c600ad4280808080a00184100c220629000021072005200641086a29000037030020012007370358200610234188a7c600ad4280808080e00084100c22062900002107200141c8006a41086a2208200641086a2900003703002001200737034820061023200420012903482207370300200141286a41086a22062005290300370300200141286a41106a2007370300200141286a41186a200829030037030020012001290358370328200141f8006a200141286a412010e10120012d00782108200320014191016a290000370300200420014189016a290000370300200520014181016a290000370300200120012900793703580240024020084101470d0020002001290358370000200041186a2003290300370000200041106a2004290300370000200041086a20052903003700000c010b200141f8006a41186a4200370300200141f8006a41106a22094200370300200141f8006a41086a220842003703002001420037037841e4dec400ad4280808080e00084100c220a29000021072008200a41086a29000037030020012007370378200a10234191dfc400ad4280808080e00084100c220a29000021072006200a41086a29000037030020012007370328200a102320092001290328220737030020052008290300370300200420073703002003200629030037030020012001290378370358200141f8006a200141d8006a10f702024002402001280278220a0d004104210a410021050c010b200129027c2202422088a721050b02400240200541246c2205450d002005415c6a2103200a210503400240024020052d00004101460d002003450d030c010b200541016a2800002106200541086a28020021082001200541106a28020036025c200120083602580240200641c28289aa04460d0020030d010c030b200141f8006a200141d8006a10f90320012903784202510d02200141f8006a41106a22052802002108200141f8006a41186a420037030020054200370300200141f8006a41086a220342003703002001420037037841db97c700ad4280808080f00084100c220629000021072003200641086a290000370300200120073703782006102341bbacc300ad4280808080a00184100c22062900002107200141286a41086a2209200641086a2900003703002001200737032820061023200520012903282207370300200141d8006a41086a2003290300370300200141d8006a41106a2007370300200141d8006a41186a200929030037030020012001290378370358200141f8006a200141d8006a412010890220012802782205410120051b21064100210302402008200129027c420020051b2207422088a74f0d00200620084105746a2205450d00200141086a41186a200541186a290000370300200141086a41106a200541106a290000370300200141086a41086a200541086a29000037030020012005290000370308410121030b0240200742ffffff3f83500d00200610230b2003450d02200141f8006a41186a2203200141086a41186a290300370300200141f8006a41106a2206200141086a41106a290300370300200141f8006a41086a2208200141086a41086a29030037030020012001290308370378200141d8006a41186a220b4200370300200141d8006a41106a220c4200370300200141d8006a41086a220542003703002001420037035841fea6c600ad4280808080a00184100c220929000021072005200941086a29000037030020012007370358200910234188a7c600ad4280808080e00084100c22092900002107200141c8006a41086a220d200941086a290000370300200120073703482009102320042001290348370000200441086a200d290300370000200141286a41086a2005290300370300200141286a41106a200c290300370300200141286a41186a200b290300370300200120012903583703280240412010212205450d0020052001290378370000200541186a2003290300370000200541106a2006290300370000200541086a2008290300370000200141286aad42808080808004842005ad4280808080800484100e20051023200041186a2003290300370000200041106a2006290300370000200041086a2008290300370000200020012903783700000c040b1033000b200541246a21052003415c6a21030c000b0b20004200370000200041186a4200370000200041106a4200370000200041086a42003700000b02402002422088a72205450d00200541246c2103200a210503400240024020052d0000220641044b0d0002400240024020060e050400010204040b2005410c6a280200450d03200541086a28020010230c030b2005410c6a280200450d02200541086a28020010230c020b2005410c6a280200450d01200541086a28020010230c010b200541086a280200450d00200541046a28020010230b200541246a21052003415c6a22030d000b0b2002a72205450d00200541246c450d00200a10230b200141f0016a24000bae0503027f017e047f230041d0006b2202240041db97c700ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341c5acc300ad4280808080800184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bd60201027f23004180036b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00200041003a00000c010b200328021421042003200341186a2802003602ec02200320013602e802200341c0016a200341e8026a10e502410121020240024020032d00c0014101470d004100210220034100360228200342013703202003410a3602f4022003200341086a3602f0022003200341206a3602fc02200341d4016a4101360200200342013702c40120034180c5c6003602c0012003200341f0026a3602d001200341fc026a4184a5c200200341c0016a10311a2003350228422086200335022084100a2003280224450d01200328022010230c010b200341206a200341c0016a41017241a00110a1051a200041016a200341206a41a00110a1051a0b200020023a00002004450d00200110230b20034180036a24000bea0703027f017e057f230041d0006b2202240041db97c700ad4280808080f00084100c22032900002104200241086a200341086a290000370300200220043703002003102341cdacc300ad4280808080800184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240200141086a280200220541046a2203417f4c0d000240024002402003450d00200310212206450d0420024100360240200220063602382002200336023c200341034b0d02200341017422074104200741044b1b22074100480d0720032007460d0120062003200710252206450d080c010b20024100360240200241013602382002200336023c200341017422034104200341044b1b220710212206450d070b2002200736023c200220063602380b2006200128000036000020024104360240200128020421082005200241386a106102400240200228023c2207200228024022016b2005490d0020022802382103200721060c010b200120056a22032001490d05200741017422062003200620034b1b22064100480d050240024020070d00024020060d00410121030c020b200610212203450d080c010b2002280238210320072006460d0020032007200610252203450d070b2002200636023c200220033602380b200320016a2008200510a1051a2002200120056a2205ad4220862003ad84100d220129000037033020011023200241c4006a200320056a360200200241003a0048200220033602402002200241386a36023c2002200241306a360238200241206a200241386a106502402006450d00200310230b2002280228220741206a2205417f4c0d0020022802202108024002402005450d00200510212203450d032005410f4d0d01200521060c050b200541017422034110200341104b1b220610212203450d060c040b200541017422014110200141104b1b220641004e0d020c040b1032000b1033000b20052006460d0020032005200610252203450d020b20032002290300370000200341086a200241086a2903003700000240024020064170714110460d00200621010c010b200641017422014120200141204b1b22014100480d0120062001460d0020032006200110252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200141606a2007490d00200121060c010b200741206a22062007490d01200141017422092006200920064b1b22064100480d0120012006460d0020032001200610252203450d020b200341206a2008200710a1051a20002005360208200020063602042000200336020002402002280224450d00200810230b200241d0006a24000f0b102c000b102a000bc72606027f017e037f017e157f037e23004190066b220324000240024002400240024020012802000e03000102000b200341bc056a4101360200200342013702ac05200341a4c5c6003602a805200341043602ec01200341cccec6003602e8012003200341e8016a3602b805200341a8056a419ca8c700103a000b20022d0001210420022d00002102200341a8056a41086a2001410c6a280200360200200320012902043703a805200341e8016a20022004200341a8056a10b3030240024020032d00e8014104460d0020032903e8012105200041146a200341e8016a41086a2802003602002000410c6a2005370200410121010c010b410021010b200041003602040c010b200141106a28020021062001410c6a2802002104200141086a280200210720012802042108200341086a200141146a41c40010a1051a024002400240024002400240024002400240024002400240024020022d00000d0020022d00014101470d002002411a6a2901002109200241196a2d0000210a200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002119200241046a2d0000211a200241026a2f0100211b200341a8056a41186a4200370300200341a8056a41106a221c4200370300200341a8056a41086a22014200370300200342003703a80541db97c700ad4280808080f00084100c220229000021052001200241086a290000370300200320053703a8052002102341bbacc300ad4280808080a00184100c22022900002105200341c8046a41086a221d200241086a290000370300200320053703c80420021023201c20032903c8042205370300200341e8016a41086a2001290300370300200341e8016a41106a2005370300200341e8016a41186a201d290300370300200320032903a8053703e801200341a8056a200341e8016a412010890220032802a805210120032902ac052105200341e8016a410c6a200341346a290200370200200341fc016a2003413c6a29020037020020034184026a200341c4006a290200370200200341f0c2c98b063602e8012003200329022c3702ec01200341c8046a410c6a2006360200201d2004360200200320073602cc04200320083602c8042005420020011b21052001410120011b211e200341a8056a200341e8016a200341c8046a10b40320032802e805450d0220032802a8052101200341d0006a200341a8056a41047241cc0010a1051a2003419c016a200341d0006a41cc0010a1051a4120102122020d010c0e0b02402006450d002006410c6c21022007210103400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b410221012004450d0a2004410c6c450d0a200710230c0b0b200220093700182002200a3a00172002200b3a00162002200c3b00142002200d3a00132002200e3a00122002200f3b0010200220103a000f200220113a000e200220123b000c200220133a000b200220143a000a200220153b0008200220163a0007200220173a0006200220183b0004200220193a00032002201a3a00022002201b3b0000200320013602e801200341e8016a4104722003419c016a41cc0010a1051a20032005422088a73602bc02200320083602b80241d00010212201450d0c200341a8056a41086a2204200341e8016a41086a290300370300200341a8056a41106a2206200341e8016a41106a290300370300200341a8056a41186a2207200341e8016a41186a290300370300200320032903e8013703a805200341e8016a41286a290300210920034198026a290300211f200341e8016a41386a29030021202003290388022121200341c8046a200341a8026a10b503200141386a20203703002001201f370330200141286a200937030020012021370320200141186a2007290300370300200141106a2006290300370300200141086a2004290300370300200120032903a805370300200120032903c804370340200141c8006a200341c8046a41086a28020036020020034281808080103702d402200320023602d002410410212204450d082004200836000020034284808080c0003702dc03200320043602d803200341a8056a41a599c50010b603200341c8046a20032802a805220620032802b00510b70320032902cc04420020032802c80422041b21092004410120041b2107024020032802ac05450d00200610230b200320094220883e02cc04200320073602c804200341a8056a200341c8046a10b803200341a8056a41086a280200210620032802ac05211d20032802a8052104200341a8056a41a599c500200341d8036a10b903200341c8046a20032802a805220b20032802b0051089022006410020041b211c201d410020041b210a20032902cc04420020032802c80422061b211f2004410420041b211d2006410120061b2106024020032802ac05450d00200b10230b200341e0026a41206a201c360200200341fc026a200a360200200341e0026a41106a201f370300200341e0026a41086a200341d8036a41086a280200360200200320032903d8033703e0022003201d3602f802200320063602ec0202402009a7450d00200710230b200341a8056a41086a2204200141086a290300370300200341a8056a41106a200141106a290300370300200341a8056a41186a200141186a290300370300200341a8056a41206a200141206a290300370300200341a8056a41286a2207200141286a290300370300200341a8056a41306a220b200141306a290300370300200341a8056a41386a220c200141386a290300370300200341c8046a41086a220d200141cc006a280200360200200320012903003703a805200320012902443703c8042001280240220e450d0120034198036a41386a220f200c29030037030020034198036a41306a220c200b29030037030020034198036a41286a220b200729030037030020034198036a41206a2207200341a8056a41206a29030037030020034198036a41186a2210200341a8056a41186a29030037030020034198036a41106a2211200341a8056a41106a29030037030020034198036a41086a2212200429030037030020034188036a41086a2204200d280200360200200320032903a80537039803200320032903c80437038803200341d8036a41386a200f290300370300200341d8036a41306a200c290300370300200341d8036a41286a200b290300370300200341d8036a41206a2007290300370300200341d8036a41186a2010290300370300200341d8036a41106a2011290300370300200341d8036a41086a201229030037030020032003290398033703d8032003200e360298042003419c046a2207200329038803370200200741086a2004280200360200410410212204450d0820042008360000200341a8056a410c6a220741002900a59945370000200741086a41002900ad994537000020034284808080c0003702ac05200320043602a8052003200341d8036a3602c405200341a8046a200341a8056a10ba0320041023200341a8056a200341a8046a10bb03200320032802a805220720032802b005419ca8c70041004100108c0120032802002104024020032802ac05450d00200710230b024020044101460d00200341c8046a200341d8036a41d00010a1051a20034198056a200341d0026a108e02200341a8056a200341c8046a41d00010a1051a200341f8056a220241086a20034198056a41086a2802003602002002200329039805370200200341c8046a200341a8046a10bb0320032802c8042102200320032802d00436029c052003200236029805200341a8056a20034198056a10bc03024020032802cc04450d00200210230b024020032802ec052202450d00200241306c450d0020032802e80510230b024020032802fc0541ffffff3f71450d0020032802f80510230b200341c8046a41186a200341a8046a41186a290300370300200341c8046a41106a200341a8046a41106a290300370300200341c8046a41086a200341a8046a41086a290300370300200320032903a8043703c804410021020240201c41014b0d000240201c0e020005000b200341a8056a41186a200341c8046a41186a290300370300200341a8056a41106a200341c8046a41106a290300370300200341a8056a41086a200341c8046a41086a290300370300200320032903c8043703a805410021020c050b201c2104034020022004410176220620026a2207201d200741246c6a28020020084b1b2102200420066b220441014b0d000c040b0b200328029c042204450d01200441306c450d0120032802980410230c010b02402005a722060d00419084c300210441252102410021010c0a0b419084c30021044125210241002101200641ffffff3f710d060c090b20011023200341003602c002024020032802e402450d0020032802e00210230b0240201f42ffffff3f83500d00200610230b0240200a450d00200a41246c450d00201d10230b200210230c020b0240201d200241246c6a28020022042008460d00200220042008496a21020b200341a8056a41186a200341c8046a41186a290300370300200341a8056a41106a200341c8046a41106a290300370300200341a8056a41086a200341c8046a41086a290300370300200320032903c8043703a805201c20024f0d002002201c1038000b0240201c200a470d00200341e0026a41186a200a410110a20120032802f802211d0b201d200241246c6a220441246a2004201c20026b41246c10a2051a20042008360200200420032903a8053702042004410c6a200341a8056a41086a2202290300370200200441146a200341a8056a41106a22062903003702002004411c6a200341a8056a41186a22042903003702002003201c41016a360280032004200341c8046a41186a2903003703002006200341c8046a41106a2903003703002002200341c8046a41086a290300370300200320032903c8043703a805024020032802f402220720032802f002470d00200341e0026a410c6a20074101109a0120032802f40221070b20032802ec02221c20074105746a221d20032903a805370000201d41186a2004290300370000201d41106a2006290300370000201d41086a20022903003700002003200741016a22073602f40220011023200341c0026a201c201c20074105746a10bd03200341a8056a41206a200341e0026a41206a28020022013602002004200341e0026a41186a29030022093703002006200341e0026a41106a2903003703002002200341e0026a41086a290300370300200320032903e0023703a805200341d8036a2009a72204200110be03200341c8046a41a599c50010b60320032802c8042101200320032802d00436029c03200320013602980320032802d803220220032802e00320034198036a10c802024020032802cc04450d00200110230b024020032802dc03450d00200210230b200341c8046a41a599c500200341a8056a10b90320032802c8042101200320032802d0043602dc03200320013602d80320032802b4052202200341bc056a280200200341d8036a10bf03024020032802cc04450d00200110230b024020032802ac05450d0020032802a80510230b0240200341b8056a28020041ffffff3f71450d00200210230b0240200341c4056a2802002201450d00200141246c450d00200410230b20032802c0022106024020032802d40241ffffff3f71450d0020032802d00210230b20060d010b0240200341ac026a2802002201450d00200141306c450d0020032802a80210230b2005a722060d0141b584c300210441182102410021010c050b200341c8026a280200210420032802c402211d200341003602b005200342043703a805200341a8056a41002004107920032802a805210720032802b005211c0240024020040d0020032802ac052102200641002007201c20032802b80210c003211c0c010b2007201c4102746a21012004210203402001418094ebdc03360200200141046a21012002417f6a22020d000b20032802ac052102200620042007201c20046a20032802b80210c003211c0b410410212201450d0220012008360000200341b0056a4284808080c000370300200341b8056a41002900a59945370300200341c0056a41002900ad9945370300200341c8056a201c3a0000200320013602ac05200341043a00a805200341a8056a10e0010240200241ffffffff0371450d00200710230b02402004450d00200441e0006c2102200641d4006a210103400240200141706a2802002204450d00200441306c450d002001416c6a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141e0006a2101200241a07f6a22020d000b0b0240201d450d00201d41e0006c450d00200610230b0240200341ac026a2802002201450d00200141306c450d0020032802a80210230b02402005a72201450d00200141ffffff3f71450d00201e10230b41002101200041003602040c050b41b584c30021044118210241002101200641ffffff3f71450d030b201e10230c020b1033000b0b20004100360204200041146a2002360200200041106a20043602002000410c6a2001360200410121010b2000200136020020034190066a24000f0b102a000bca0b03057f017e067f23004180016b22052400200541d0006a2001108d0341002106200541086a200528025022072005280258419ca8c70041004100108c012005280208210802402005280254450d00200710230b02400240024020084101470d004111210841e5aac30021010c010b024020020d00200541d0006a41186a4200370300200541d0006a41106a22094200370300200541d0006a41086a22064200370300200542003703504196adc300ad4280808080900184100c2207290000210a200541f0006a41086a2208200741086a2900003703002005200a37037020071023200620082903003703002005200529037037035041b0dfc300ad4280808080a00184100c2207290000210a2008200741086a2900003703002005200a3703702007102320092005290370220a370300200541306a41086a2006290300370300200541306a41106a200a370300200541306a41186a200829030037030020052005290350370330200541206a200541306a10c90302400240024002400240024002402005280220220b0d004100210820054100360218200542043703104100210c4100210d0c010b2005290224210a2005200b3602102005200a370214200aa7210c41002108024002400240200a422088a7220d41014b0d00200d0e020201020b200d2106034020082006410176220720086a220e200b200e4102746a28020020014b1b2108200620076b220641014b0d000b0b4101210e200b20084102746a28020022062001460d03200d200820062001496a2208490d040b200d200c470d010b200541106a200c410110792005280214210c2005280210210b0b200b20084102746a220641046a2006200d20086b41027410a2051a200620013602002005200d41016a220d3602184106210e0b200541d0006a41186a220f4200370300200541d0006a41106a22104200370300200541d0006a41086a22064200370300200542003703504196adc300ad4280808080900184100c2207290000210a200541f0006a41086a2208200741086a2900003703002005200a37037020071023200620082903003703002005200529037037035041b0dfc300ad4280808080a00184100c2207290000210a2008200741086a2900003703002005200a3703702007102320092005290370370000200941086a2008290300370000200541306a41086a2006290300370300200541306a41106a2010290300370300200541306a41186a200f29030037030020052005290350370330200b0d01200541306aad428080808080048410110c020b2008200d1038000b200541203602542005200541306a360250200b200d200541d0006a10d502200c41ffffffff0371450d00200b10230b200e4106460d00419fabc300210141102108410421060240024002400240200e417f6a0e050001020305000b41e5aac300210141112108410021060c040b41f6aac3002101410e2108410121060c030b4184abc3002101410f2108410221060c020b4193abc3002101410c2108410321060c010b2004280208210e2004280204210b20042802002108200328020421042003280208210d20032802002106200541d0006a200110d2032005280250210720052005280258360234200520073602302006200d200541306a10c80202402005280254450d00200710230b02402004450d00200610230b200541d0006a200110ca032005280250210620052005280258360234200520063602302008200e200541306a10c80202402005280254450d00200610230b0240200b450d00200810230b200541d0006a2001108d032005350258210a200528025021010240410110212208450d00200820023a0000200a4220862001ad842008ad42808080801084100e2008102302402005280254450d00200110230b200041043a00000c020b102a000b20004183243b0100200041086a2008360200200041046a2001360200200041026a20063a00000240200441046a280200450d00200428020010230b200341046a280200450d00200328020010230b20054180016a24000bb80904067f017e047f017e230041d0006b22022400200241206a2001108d034102210302402002280220220420022802282205108e0341ff017122064102460d002005ad4220862004ad841011200621030b02402002280224450d00200410230b41022003410171200341024622031b21040240024002400240024002400240024020030d0020044101710d04200241206a41186a4200370300200241206a41106a22074200370300200241206a41086a22044200370300200242003703204196adc300ad4280808080900184100c22052900002108200241c0006a41086a2203200541086a2900003703002002200837034020051023200420032903003703002002200229034037032041b0dfc300ad4280808080a00184100c220529000021082003200541086a2900003703002002200837034020051023200720022903402208370300200241086a2004290300370300200241106a2008370300200241186a200329030037030020022002290320370300200241206a200210c9034101210920022802202203410420031b210a2002290224420020031b2208422088a7220b41014b0d0141002103200b0e020302030b41e5aac3002103411121014100210502400240024020040e03000201000b200241346a410136020020024201370224200241a4c5c60036022020024104360204200241c8abc30036020020022002360230200241206a419ca8c700103a000b41f6aac3002103410e2101410121050b200041123a0001200041086a2001360200200041046a2003360200200041026a20053a00000c050b41002103200b2104034020032004410176220520036a2206200a20064102746a28020020014b1b2103200420056b220441014b0d000b0b200a20034102746a22042802002001470d002003200b4f0d022004200441046a2003417f73200b6a41027410a2051a200842ffffffff0f832108200b417f6a210b410021090b200241206a41186a22064200370300200241206a41106a220c4200370300200241206a41086a22044200370300200242003703204196adc300ad4280808080900184100c2205290000210d200241c0006a41086a2203200541086a2900003703002002200d37034020051023200420032903003703002002200229034037032041b0dfc300ad4280808080a00184100c2205290000210d2003200541086a2900003703002002200d3703402005102320072002290340370000200741086a2003290300370000200241086a2004290300370300200241106a200c290300370300200241186a2006290300370300200220022903203703002002412036022420022002360220200a200b200241206a10d5020240200842ffffffff0383500d00200a10230b2009450d0020004192023b0001200041086a410e360200200041046a41f6aac3003602000c020b200241206a200110d203200235022842208620022802202203ad84101102402002280224450d00200310230b200241206a200110ca03200235022842208620022802202203ad84101102402002280224450d00200310230b200241206a2001108d03200235022842208620022802202203ad84101102402002280224450d00200310230b410421030c020b2003200b103b000b410321030b200020033a0000200241d0006a24000bf90403027f017e057f230041d0006b220224004196adc300ad4280808080900184100c22032900002104200241086a200341086a2900003703002002200437030020031023419fadc300ad4280808080f00084100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bf90403027f017e057f230041d0006b220224004196adc300ad4280808080900184100c22032900002104200241086a200341086a29000037030020022004370300200310234184e2c300ad4280808080d00084100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b940201037f230041d0006b220224002002200136020420022000360200200241086a2001ad4220862000ad841010108b0102400240200228020822010d00410221000c010b200228020c210302400240200241106a280200450d0020012d0000220441014b0d0041002100024020040e020200020b410121000c010b20024100360220200242013703182002410a36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c20024180c5c6003602382002200241286a360248200241346a4184a5c200200241386a10311a2002350220422086200235021884100a0240200228021c450d00200228021810230b410221000b2003450d00200110230b200241d0006a240020000bda0905047f017e0b7f027e027f230041e0016b220224002002412036021c20022001360218200241206a2001ad42808080808004841010108b010240024002400240200228022022030d00200041003602000c010b200228022421042002200241286a28020036023420022003360230200241106a200241306a1088010240024020022802100d00200228021422052002280234410c6e2201200120054b1bad420c7e2206422088a70d032006a72201417f4c0d030240024020010d00410421070c010b200110212207450d050b200241003602402002200736023820022001410c6e36023c02400240024002402005450d0041002108410021090340200241086a200241306a10880120022802080d04200228020c220a2002280234220141246e220b200b200a4b1bad42247e2206422088a70d082006a7220b417f4c0d0802400240200b0d004104210c0c010b200b1021220c450d0a0b200241003602502002200c3602482002200b41246e36024c0240200a450d004100210d4100210e034020014104490d05200e41016a210e20022001417c6a220f36023420022002280230221041046a3602302010280000211141002101200241003a00d8010340200f2001460d05200241b8016a20016a201020016a220b41046a2d00003a00002002200b41056a3602302002200141016a220b3a00d801200b2101200b4120470d000b200241f8006a41086a200241b8016a41086a2903002206370300200241f8006a41106a200241b8016a41106a2903002212370300200241f8006a41186a200241b8016a41186a2903002213370300200241d8006a41086a22102006370300200241d8006a41106a22142012370300200241d8006a41186a221520133703002002200f200b6b2201360234200220022903b8012206370378200220063703580240200d200228024c470d00200241c8006a200d410110a2012002280248210c2002280250210d0b200c200d41246c6a220b2011360200200b2002290358370204200b410c6a2010290300370200200b41146a2014290300370200200b411c6a20152903003702002002200d41016a220d360250200e200a470d000b0b200c450d04200941016a2109200229024c210602402008200228023c470d00200241386a2008410110950120022802382107200228024021080b20072008410c6c6a220120063702042001200c3602002002200841016a220836024020092005470d000b0b2007450d032000200229023c370204200020073602000c040b20024100360234200141ff0171450d00200241003a00d8010b200228024c2201450d00200141246c450d00200c10230b02402008450d002008410c6c210b2007210103400240200141046a280200220f450d00200f41246c450d00200128020010230b2001410c6a2101200b41746a220b0d000b0b200228023c2201450d002001410c6c450d00200710230b200241003602a00120024201370398012002410a36027c2002200241186a360278200220024198016a360258200241cc016a4101360200200242013702bc0120024180c5c6003602b8012002200241f8006a3602c801200241d8006a4184a5c200200241b8016a10311a20023502a00142208620023502980184100a0240200228029c01450d0020022802980110230b200041003602000b2004450d00200310230b200241e0016a24000f0b1032000b1033000bfb0401097f230041106b22022400024002400240024020002802082203410c6c41046a2204417f4c0d00200028020021050240024020040d00410121000c010b200410212200450d020b20024100360208200220043602042002200036020020032002106102402003450d0020052003410c6c6a2106034020052802002104200528020822032002106102402003450d002004200341246c6a2107200228020421002002280208210303402004280200210802400240200020036b4104490d00200228020021092000210a0c010b200341046a220a2003490d0720004101742209200a2009200a4b1b220a4100480d070240024020000d000240200a0d00410121090c020b200a102122090d010c0a0b200228020021092000200a460d0020092000200a10252209450d090b2002200a360204200220093602000b200920036a20083600002002200341046a220836020802400240200a20086b4120490d00200341246a2103200a21000c010b200841206a22032008490d07200a41017422002003200020034b1b22004100480d0702400240200a0d00024020000d00410121090c020b200010212209450d0a0c010b200a2000460d002009200a200010252209450d090b20022000360204200220093602000b200920086a220a200441046a290000370000200a41186a2004411c6a290000370000200a41106a200441146a290000370000200a41086a2004410c6a29000037000020022003360208200441246a22042007470d000b0b2005410c6a22052006470d000b0b200228020421032001290200200235020842208620022802002204ad84100e02402003450d00200410230b200241106a24000f0b1032000b1033000b102c000b102a000bd00a04057f017e0b7f027e230041c0026b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b0102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1088010240024020022802000d0002400240024002402002280204220520022802242206412c6e2201200120054b1bad422c7e2207422088a70d002007a72201417f4c0d000240024020010d00410421080c010b200110212208450d020b41002109200241003602302002200836022820022001412c6e36022c02402005450d004100210a034020064104490d0520022006417c6a220b36022420022002280220220c41046a2201360220200b450d05200c280000210d20022006417b6a220b3602242002200141016a36022020012d0000220141014b0d054102210e0240024020010e020100010b41002101200241003a00b8022006417b6a210f417a210b02400240024002400340200f2001460d0120024198026a20016a200c20016a220e41056a2d00003a000020022006200b6a3602242002200e41066a3602202002200141016a220e3a00b802200b417f6a210b200e2101200e4120470d000b200241f8016a41186a221020024198026a41186a290300370300200241f8016a41106a221120024198026a41106a290300370300200241f8016a41086a221220024198026a41086a29030037030020022002290398023703f801200f200e460d0920022006200b6a220b3602242002200c200e6a220141066a220f360220200141056a2d0000220c41014b0d09200c0e020201020b200141ff0171450d08200241003a00b8020c080b200b4104490d0720022006200e6b41766a220b36022420022001410a6a360220200f280000210f4101210e0c010b4100210e0b200241b8016a41086a2012290300220737030020024198016a41186a201029030037030020024198016a41106a201129030037030020024198016a41086a2007370300200220022903f80122073703b80120022007370398010b200a41016a210a200241d8006a41086a20024198016a41086a2903002207370300200241d8006a41106a20024198016a41106a2903002213370300200241d8006a41186a20024198016a41186a2903002214370300200241386a41086a22062007370300200241386a41106a220c2013370300200241386a41186a22102014370300200220022903980122073703582002200737033802402009200228022c470d00200241286a2009410110a60120022802282108200228023021090b20082009412c6c6a2201200d3602002001200229033837020420102903002107200c290300211320062903002114200141286a200f360200200141246a200e3602002001410c6a2014370200200141146a20133702002001411c6a20073702002002200941016a2209360230200b2106200a2005470d000b0b2008450d042000200229022c370204200020083602000c050b1032000b1033000b200241b8016a41186a200241d8016a41186a290300370300200241b8016a41106a200241d8016a41106a2903003703000b200228022c2201450d002001412c6c450d00200810230b2002410036028002200242013703f8012002410a3602dc012002200241086a3602d8012002200241f8016a3602b801200241ac026a41013602002002420137029c0220024180c5c600360298022002200241d8016a3602a802200241b8016a4184a5c20020024198026a10311a20023502800242208620023502f80184100a024020022802fc01450d0020022802f80110230b200041003602000b2004450d00200310230b200241c0026a24000bf90403027f017e057f230041d0006b220224004196adc300ad4280808080900184100c22032900002104200241086a200341086a290000370300200220043703002003102341e0e1c300ad4280808080b00184100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bc89001070c7f017e087f027e0c7f017e0b7f23004190106b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b2003418c0d6a4101360200200342013702fc0c200341a4c5c6003602f80c2003410436028c0a200341cccec6003602880a2003200341880a6a3602880d200341f80c6a419ca8c700103a000b200341d80c6a41086a200241106a290200370300200341d80c6a41106a200241186a290200370300200341d80c6a41186a200241206a2802003602002003200241086a2902003703d80c200141046a28020022042001410c6a280200220541b0026c6a2106200141086a2802002107200421012005450d28200241046a2802002108200341f80c6a41047221090240024002400240024020022d000041ff01714101470d004100210220042101034020012802002105200341880a6a200141046a220a41ac0210a1051a200341f80c6a200a41ac0210a1051a20054116460d2c200341d8076a200341f80c6a41ac0210a1051a200341a8056a200341d8076a41ac0210a1051a200341f8026a200341a8056a41ac0210a1051a200341c8006a200341f8026a41ac0210a1051a200320053602f80c2009200341c8006a41ac0210a1051a2003200836028c0a200341013a00880a200341d8076a200341f80c6a200341880a6a10cf0220032802d8074101460d02200241016a2102200141b0026a22012006470d000c2d0b0b024020022d0001220141ff01710d004100210220042101034020012802002105200341880a6a200141046a220a41ac0210a1051a200341f80c6a200a41ac0210a1051a20054116460d2b200341d8076a200341f80c6a41ac0210a1051a200341a8056a200341d8076a41ac0210a1051a200341f8026a200341a8056a41ac0210a1051a200341c8006a200341f8026a41ac0210a1051a200320053602f80c2009200341c8006a41ac0210a1051a200341003b01880a200341d8076a200341f80c6a200341880a6a10cf0220032802d8074101460d03200241016a2102200141b0026a22012006470d000c2d0b0b200241026a2f0100210b200341880a6a4102722105200341b80c6a410672210c200141ff0171210d410021022004210103402001280200210a200341880a6a200141046a220e41ac0210a1051a200341f80c6a200e41ac0210a1051a0240200a4116470d00200141b0026a21010c2f0b200341d8076a200341f80c6a41ac0210a1051a200341a8056a200341d8076a41ac0210a1051a200341f8026a200341a8056a41ac0210a1051a200341c8006a200341f8026a41ac0210a1051a2003200a3602f80c2009200341c8006a41ac0210a1051a4102210a0240200d4102460d00200c20032903d80c370100200c41086a200341d80c6a41086a290300370100200c41106a200341d80c6a41106a290300370100200c41186a200341d80c6a41186a2f01003b0100200320083601ba0c2003200b3b01b80c4101210a0b200520032903b80c370000200541086a200341b80c6a41086a290300370000200541106a200341b80c6a41106a290300370000200541186a200341b80c6a41186a2903003700002003200a3a00890a200341003a00880a200341d8076a200341f80c6a200341880a6a10cf0220032802d8074101460d03200241016a2102200141b0026a22012006460d2c0c000b0b200141b0026a21010c020b200141b0026a21010c010b200141b0026a21010b200341980a6a200341d8076a41146a2802002205360200200341880a6a41086a200341d8076a410c6a290200220f370300200320032902dc073703880a200341f80c6a41086a2002360200200341f80c6a410c6a200f370200200341f80c6a41146a2005360200200341003a00fc0c200341093a00f80c200341f80c6a10e001024020062001460d0003402001109e032006200141b0026a2201470d000b0b02402007450d00200741b0026c450d00200410230b410021010c2a0b41022105200141046a280200210620022d00000d0520022d00014101470d052002411a6a290100210f200241196a2d00002105200241186a2d00002109200241166a2f0100210a200241156a2d00002108200241146a2d0000210c200241126a2f0100210e200241116a2d00002104200241106a2d000021072002410e6a2f0100210d2002410d6a2d0000210b2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f01002102200141026a2f01002117411210212201450d03200141086a41002900d69546370000200141002900ce954637000020014112413010252201450d042001200f370028200120053a0027200120093a00262001200a3b0024200120083a00232001200c3a00222001200e3b0020200120043a001f200120073a001e2001200d3b001c2001200b3a001b200120103a001a200120113b0018200120123a0017200120133a0016200120143b0014200120153a0013200120163a0012200120023b00102001413041e00010252202450d04200220173b00302002ad4280808080a0068410182201290000210f200141086a2900002118200141106a2900002119200341b80c6a41186a2205200141186a290000370300200341b80c6a41106a22092019370300200341b80c6a41086a220a20183703002003200f3703b80c2001102320021023200341093a00980d2003410a3a00980d2003410b3a00980d200320032f01b80c3b01f80c200320032801ba0c3601fa0c200320032f01be0c3b01fe0c2003200a2f01003b01800d200320032d00c20c3a00820d2003410c3a00980d200320032d00c30c3a00830d2003410d3a00980d200320032d00c40c3a00840d2003410e3a00980d200320032d00c50c3a00850d2003410f3a00980d200320032d00c60c3a00860d200341103a00980d200320032d00c70c3a00870d200341113a00980d200320092d00003a00880d200320032d00c90c3a00890d200341123a00980d200341133a00980d200320032d00ca0c3a008a0d200341143a00980d200320032d00cb0c3a008b0d200341153a00980d200320032d00cc0c3a008c0d200341163a00980d200320032d00cd0c3a008d0d200341173a00980d200320032d00ce0c3a008e0d200341183a00980d200320032d00cf0c3a008f0d200341193a00980d200320052d00003a00900d200320032d00d10c3a00910d2003411a3a00980d2003411b3a00980d200320032d00d20c3a00920d2003411c3a00980d200320032d00d30c3a00930d2003411d3a00980d200320032d00d40c3a00940d2003411e3a00980d200320032d00d50c3a00950d2003411f3a00980d200320032d00d60c3a00960d200341203a00980d200320032d00d70c3a00970d200341a8056a41186a220520032903900d370300200341a8056a41106a220120032903880d370300200341a8056a41086a220220032903800d370300200320032903f80c3703a805200341d8076a41186a22092005290300370300200341d8076a41106a22052001290300370300200341d8076a41086a220a2002290300370300200320032903a8053703d807200341f80c6a200641b00210a1051a200341880a6a410a6a200a290300370100200341880a6a41126a2005290300370100200341880a6a411a6a200929030037010020034180023b01880a200320032903d80737018a0a200341a8056a200341f80c6a200341880a6a10cf020240024020032802a8054101470d0020032802ac054102470d010b20061023410021010c240b200341a8056a41146a28020021092001280200210a200341a8056a410c6a2802002105200228020021022006102341002101200541ff01714104460d23200541807e7121010c220b200141086a2802002109200141046a28020021042001411c6a280200210641022105024020022d00000d0020022d00014101470d002001410c6a2802002105200141186a280200211a200141146a280200211b200141106a280200211c200141026a2f0100210c200241196a2d00002101200241186a2d0000210a200241166a2f01002108200241156a2d0000210e200241146a2d00002107200241126a2f0100210d200241116a2d0000210b200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d0000211d200241046a2d0000211e200241026a2f0100211f20032002411a6a2901003703f00c200320013a00ef0c2003200a3a00ee0c200320083b01ec0c2003200e3a00eb0c200320073a00ea0c2003200d3b01e80c2003200b3a00e70c200320103a00e60c200320113b01e40c200320123a00e30c200320133a00e20c200320143b01e00c200320153a00df0c200320163a00de0c200320173b01dc0c2003201d3a00db0c2003201e3a00da0c2003201f3b01d80c0240200c41ffff03710d0041de95c6002101410d210a410021080c1f0b024020050d0041eb95c60021014111210a410321080c1f0b0240200541e3004d0d0041fc95c60021014112210a410421080c1f0b200320053602e007200320093602dc07200320043602d807200341f80c6a41186a200341d80c6a41186a290300370300200341f80c6a41106a200341d80c6a41106a290300370300200341f80c6a41086a2201200341d80c6a41086a290300370300200320032903d80c3703f80c200341880a6a200341d8076a200341f80c6a10e40420032802880a4101460d06200341880a6a41086a2802002120200328028c0a21042001200341880a6a410c6a2802003602002003200c3b01840d200320043602fc0c200341ce95c6003602f80c200341b80c6a200341f80c6a10d603200341083a00980d2003410b3a00980d2003410c3a00980d200320032f01b80c3b01f80c200320032801ba0c3601fa0c200320032d00be0c3a00fe0c200320032800bf0c3600ff0c200320032d00c30c3a00830d2003410d3a00980d200320032d00c40c3a00840d2003410e3a00980d200320032d00c50c3a00850d2003410f3a00980d200320032d00c60c3a00860d200320032d00c70c3a00870d200341103a00980d200341113a00980d200320032d00c80c3a00880d200341123a00980d200320032d00c90c3a00890d200341133a00980d200320032d00ca0c3a008a0d200341143a00980d200320032d00cb0c3a008b0d200341153a00980d200320032d00cc0c3a008c0d200341163a00980d200320032d00cd0c3a008d0d200341173a00980d200320032d00ce0c3a008e0d200320032d00cf0c3a008f0d200341183a00980d200341193a00980d200320032d00d00c3a00900d2003411a3a00980d200320032d00d10c3a00910d2003411b3a00980d200320032d00d20c3a00920d2003411c3a00980d200320032d00d30c3a00930d2003411d3a00980d200320032d00d40c3a00940d2003411e3a00980d200320032d00d50c3a00950d2003411f3a00980d200320032d00d60c3a00960d200341203a00980d200320032d00d70c3a00970d200341a8056a41186a220120032903900d370300200341a8056a41106a220220032903880d370300200341a8056a41086a220520032903800d370300200320032903f80c3703a805200341c8006a41186a2001290300370300200341c8006a41106a2002290300370300200341c8006a41086a2005290300370300200320032903a805370348200341003602800d200342013703f80c2006200341f80c6a10dd0220032802fc0c210220033502800d42208620032802f80c2205ad8410182201290018210f20012d0017210720012d0016210d20012f0014210b20012d0013211020012d0012211120012f0010211220012d000f211320012d000e211420012f000c211520012d000b211620012d000a211720012f0008211d20012d0007211e20012d0006211f20012f0004212120012d0003212220012d0002212320012f000021242001102302402002450d00200510230b2003200f3703d00c200320073a00cf0c2003200d3a00ce0c2003200b3b01cc0c200320103a00cb0c200320113a00ca0c200320123b01c80c200320133a00c70c200320143a00c60c200320153b01c40c200320163a00c30c200320173a00c20c2003201d3b01c00c2003201e3a00bf0c2003201f3a00be0c200320213b01bc0c200320223a00bb0c200320233a00ba0c200320243b01b80c200341880a6a200341c8006a200341b80c6a10e504200341f80c6a20032802880a220120032802900a10e604200341b80c6a41086a2202200341f80c6a41086a290300370300200341b80c6a41106a2205200341f80c6a41106a290300370300200341a8056a41086a220a200341a00d6a290300370300200341a8056a41106a2208200341a80d6a290300370300200341a8056a41186a2225200341b00d6a290300370300200341a8056a41206a200341b80d6a290300370300200320032903f80c3703b80c2003200341f80c6a41206a2903003703a80520032802940d210e024020032802900d2209450d00200341c80f6a41106a2005290300370300200341c80f6a41086a2002290300370300200341f8026a41086a200a290300370300200341f8026a41106a2008290300370300200341f8026a41186a2025290300370300200341f8026a41206a200341a8056a41206a290300370300200320032903b80c3703c80f200320032903a8053703f8020b0240200328028c0a450d00200110230b02400240024020090d0041012109201c4101470d01418e96c60021014113210e41032105410b21084113210a0c020b200341a40a6a200e360200200341880a6a41206a20032903f802370300200341880a6a41106a200341c80f6a41106a290300370300200341880a6a41086a200341c80f6a41086a290300370300200341b00a6a200341f8026a41086a290300370300200341b80a6a200341f8026a41106a290300370300200341c00a6a200341f8026a41186a290300370300200341c80a6a200341f8026a41206a290300370300200320032903c80f3703880a200320093602a00a0240201c4101460d0041a196c6002101410b210a410921080c1c0b41ac96c6002101410e210a410a210820032802980a201b470d1b2003419c0a6a280200201a470d1b024002400240024020032802a80a220841014b0d004100210120080e020201020b410021012008210203402002410176220520016a220a20012009200a4105746a200341d80c6a412010a3054101481b2101200220056b220241014b0d000b0b200920014105746a200341d80c6a412010a3052202450d012002411f7620016a21010b200c417f6a41ffff0371200841ffff03714b0d1b0c190b200c41ffff0371200841ffff03714d0d1841ba96c6002101410f210a410121080c1b0b02400240200c41ffff037141014b0d00200341f80c6a200641b00210a1051a200341920a6a200341c8006a41086a2903003701002003419a0a6a200341c8006a41106a290300370100200341a20a6a200341e0006a29030037010020034180023b01880a2003200329034837018a0a200341d8076a200341f80c6a200341880a6a10cf02024020032802d8074101460d0041002109410421050c030b4100210920032802dc074102470d01410421050c020b200341186a200cad42ffff038342004280e8eda1ba01420010a6052003200329031822194280f092cbdd087c22183703d8072003200341186a41086a2903002018201954ad7c22193703e0072003200341d80c6a3602b80c2003200341d80c6a3602a8052003200341a8056a3602800d2003200341b80c6a3602fc0c2003200341d8076a3602f80c200341880a6a200341d80c6a200341f80c6a10fd020240024020032802880a4101470d00200341940a6a280200210a200341880a6a41086a280200210120032d008f0a210c20032d008e0a210820032d008d0a210e20032d008c0a21050c010b410421050240200341880a6a41086a2903004201520d00200341880a6a41106a290300212620032802a8052101200341b00d6a200341880a6a41186a290300370300200341a80d6a2026370300200341f80c6a41086a41003a0000200341810d6a2001290000370000200341890d6a200141086a290000370000200341910d6a200141106a290000370000200341990d6a200141186a290000370000200341023a00f80c200341f80c6a10e0010b0b0240200541ff01714104460d00410121090c020b200341880a6a41186a4200370300200341880a6a41106a22054200370300200341880a6a41086a22014200370300200342003703880a41e4dec400ad4280808080e00084100c220229000021262001200241086a290000370300200320263703880a2002102341f3dec400ad4280808080e00084100c22022900002126200341f80c6a41086a2209200241086a290000370300200320263703f80c20021023200520032903f80c2226370300200341a8056a41086a2001290300370300200341a8056a41106a2026370300200341a8056a41186a2009290300370300200320032903880a3703a805200341106a200341a8056a412010cd012003280214210220032802102105200341086a41d7ddc400411010cd01200328020c21092003280208210a20032f01d80c210820032d00da0c210c20032d00db0c210e20032f01dc0c211c20032d00de0c211b20032d00df0c211a20032f01e00c212520032d00e20c212720032d00e30c212820032f01e40c212920032d00e60c212a20032d00e70c212b20032f01e80c212c20032d00ea0c212d20032d00eb0c212e20032f01ec0c212f20032d00ee0c213020032d00ef0c213120032903f00c2126412010212201450d06200120032903d80c370000200141186a200341d80c6a41186a290300370000200141106a200341d80c6a41106a290300370000200141086a200341d80c6a41086a2903003700002003418c0d6a20094100200a1b360200200341b40d6a2026370200200341b30d6a20313a0000200341b20d6a20303a0000200341b00d6a202f3b0100200341af0d6a202e3a0000200341ae0d6a202d3a0000200341ac0d6a202c3b0100200341ab0d6a202b3a0000200341aa0d6a202a3a0000200341a80d6a20293b0100200341a70d6a20283a0000200341a60d6a20273a0000200341a40d6a20253b0100200341a30d6a201a3a0000200341a20d6a201b3a0000200341a00d6a201c3b01002003419f0d6a200e3a00002003419e0d6a200c3a0000200320193703800d200320183703f80c20032002410020051b3602880d200320083b019c0d200341940d6a428180808010370200200320013602900d2003200f3703d00c200320073a00cf0c2003200d3a00ce0c2003200b3b01cc0c200320103a00cb0c200320113a00ca0c200320123b01c80c200320133a00c70c200320143a00c60c200320153b01c40c200320163a00c30c200320173a00c20c2003201d3b01c00c2003201e3a00bf0c2003201f3a00be0c200320213b01bc0c200320223a00bb0c200320233a00ba0c200320243b01b80c200341880a6a200341c8006a200341b80c6a10e50420032802880a2101200320032802900a3602dc07200320013602d807200341f80c6a200341d8076a10e2040240200328028c0a450d00200110230b024020032802940d41ffffff3f71450d0020032802900d10230b2003419d0d6a2003290348370000200341850d6a200341d80c6a41086a2903003700002003418d0d6a200341d80c6a41106a290300370000200341950d6a200341d80c6a41186a290300370000200341a50d6a200341c8006a41086a290300370000200341ad0d6a200341c8006a41106a290300370000200341b50d6a200341c8006a41186a290300370000200341023a00fc0c200341093a00f80c200320032903d80c3700fd0c200341f80c6a10e0010240202041ffffff3f71450d00200410230b200610b4020c190b200341ec076a280200210a200341d8076a41106a2802002101200341d8076a41086a2802002102200341e4076a2802002205411876210c200541107621082005410876210e0b0240202041ffffff3f71450d00200410230b20090d1b0c1c0b200610b40220061023410021084100210e0c1e0b200141286a2802002105200141246a280200210c410221060240024020022d00000d0020022d00014101470d00200141196a290000210f200141186a2d0000211f200141176a2d0000211c200141156a2f0000211b200141146a2d0000211a200141136a2d00002121200141116a2f00002122200141106a2d000021232001410f6a2d000021242001410d6a2f000021202001410c6a2d000021252001410b6a2d00002127200141096a2f00002128200141086a2d00002129200141076a2d0000212a200141056a2f0000212b200141046a2d0000212c200141036a2d0000212d2001412c6a2802002106200141386a2802002131200141346a2802002130200141306a280200212f200141226a2f0100210a20012f0001212e200241196a2d00002101200241186a2d00002109200241166a2f01002108200241156a2d0000210e200241146a2d00002104200241126a2f01002107200241116a2d0000210d200241106a2d0000210b2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d0000211d200241026a2f0100211e20032002411a6a290100370360200320013a005f200320093a005e200320083b015c2003200e3a005b200320043a005a200320073b01582003200d3a00572003200b3a0056200320103b0154200320113a0053200320123a0052200320133b0150200320143a004f200320153a004e200320163b014c200320173a004b2003201d3a004a2003201e3b0148200a450d072006450d08200641e4004f0d09200320063602e007200320053602dc072003200c3602d807200341f80c6a41186a200341c8006a41186a290300370300200341f80c6a41106a2202200341c8006a41106a290300370300200341f80c6a41086a2201200341c8006a41086a290300370300200320032903483703f80c200341880a6a200341d8076a200341f80c6a10e40420032802880a4101460d01200341880a6a41086a280200210e200328028c0a210c2001200341880a6a410c6a2802003602002003200a3b01840d2003200c3602fc0c200341ce95c6003602f80c200341b80c6a200341f80c6a10d603200341083a00980d2003410b3a00980d2003410c3a00980d200320032f01b80c3b01f80c200320032801ba0c3601fa0c200320032d00be0c3a00fe0c200320032800bf0c3600ff0c200320032d00c30c3a00830d2003410d3a00980d200320032d00c40c3a00840d2003410e3a00980d200320032d00c50c3a00850d2003410f3a00980d200320032d00c60c3a00860d200320032d00c70c3a00870d200341103a00980d200341113a00980d200320032d00c80c3a00880d200341123a00980d200320032d00c90c3a00890d200341133a00980d200320032d00ca0c3a008a0d200341143a00980d200320032d00cb0c3a008b0d200341153a00980d200320032d00cc0c3a008c0d200341163a00980d200320032d00cd0c3a008d0d200341173a00980d200320032d00ce0c3a008e0d200320032d00cf0c3a008f0d200341183a00980d200341193a00980d200320032d00d00c3a00900d2003411a3a00980d200320032d00d10c3a00910d2003411b3a00980d200320032d00d20c3a00920d2003411c3a00980d200320032d00d30c3a00930d2003411d3a00980d200320032d00d40c3a00940d2003411e3a00980d200320032d00d50c3a00950d2003411f3a00980d200320032d00d60c3a00960d200320032d00d70c3a00970d200341203a00980d200341a8056a41186a220620032903900d370300200341a8056a41106a220520032903880d370300200341a8056a41086a220920032903800d370300200320032903f80c3703a805200341f8026a41186a2006290300370300200341f8026a41106a2005290300370300200341f8026a41086a2009290300370300200320032903a8053703f8022003200f3703d00c2003201f3a00cf0c2003201c3a00ce0c2003201b3b01cc0c2003201a3a00cb0c200320213a00ca0c200320223b01c80c200320233a00c70c200320243a00c60c200320203b01c40c200320253a00c30c200320273a00c20c200320283b01c00c200320293a00bf0c2003202a3a00be0c2003202b3b01bc0c2003202c3a00bb0c2003202d3a00ba0c2003202e3b01b80c200341880a6a200341f8026a200341b80c6a10e504200341f80c6a20032802880a220820032802900a10e604200341b80c6a41086a2001290300370300200341b80c6a41106a20022903003703002009200341a00d6a2903003703002005200341a80d6a2903003703002006200341b00d6a290300370300200341a8056a41206a2201200341b80d6a290300370300200320032903f80c3703b80c2003200341f80c6a41206a2903003703a80520032802940d2105024020032802900d2206450d00200341d80c6a41106a200341b80c6a41106a290300370300200341d80c6a41086a200341b80c6a41086a290300370300200341d8076a41086a200341a8056a41086a290300370300200341d8076a41106a200341a8056a41106a290300370300200341d8076a41186a200341a8056a41186a290300370300200341d8076a41206a2001290300370300200320032903b80c3703d80c200320032903a8053703d8070b0240200328028c0a450d00200810230b0240024020060d0041032106200a41014b0d0141c996c60021014111210241132108410221090c150b200341a40a6a2005360200200341880a6a41206a20032903d807370300200341880a6a41106a200341d80c6a41106a290300370300200341880a6a41086a200341d80c6a41086a290300370300200341b00a6a200341d8076a41086a290300370300200341b80a6a200341d8076a41106a290300370300200341c00a6a200341d8076a41186a290300370300200341c80a6a200341d8076a41206a290300370300200320032903d80c3703880a200320063602a00a0240202f4101460d0041a196c6002101410b2102410921090c140b41ac96c6002101410e2102410a210920032802980a2030470d132003419c0a6a2802002031470d13024020032802a80a2208200a490d0041c996c600210141112102410221090c140b410021010240200841014b0d00024020080e020011000b200341f80c6a41186a200341c8006a41186a290300370300200341f80c6a41106a200341c8006a41106a290300370300200341f80c6a41086a200341c8006a41086a290300370300200320032903483703f80c41002109200341f80c6a21020c110b2008210203402002410176220920016a220a20012006200a4105746a200341c8006a412010a3054101481b2101200220096b220241014b0d000c100b0b0240202f4101470d00418e96c600210141132108410b2109411321020c140b200341386a200aad42004280e8eda1ba01420010a6052003200329033822194280f092cbdd087c22183703a8052003200341386a41086a2903002018201954ad7c22193703b0052003200341c8006a3602c80f2003200341c8006a3602b80c2003200341b80c6a3602800d2003200341c80f6a3602fc0c2003200341a8056a3602f80c200341880a6a200341c8006a200341f80c6a10fd020240024020032802880a4101470d00200341940a6a2802002102200341880a6a41086a280200210120032d008f0a210a20032d008e0a210920032d008d0a210820032d008c0a21060c010b410421060240200341880a6a41086a2903004201520d00200341880a6a41106a290300212620032802b80c2101200341b00d6a200341880a6a41186a290300370300200341a80d6a2026370300200341f80c6a41086a41003a0000200341810d6a2001290000370000200341890d6a200141086a290000370000200341910d6a200141106a290000370000200341990d6a200141186a290000370000200341023a00f80c200341f80c6a10e0010b0b200641ff01714104470d13200341880a6a41186a4200370300200341880a6a41106a22064200370300200341880a6a41086a22014200370300200342003703880a41e4dec400ad4280808080e00084100c220229000021262001200241086a290000370300200320263703880a2002102341f3dec400ad4280808080e00084100c22022900002126200341f80c6a41086a2205200241086a290000370300200320263703f80c20021023200620032903f80c2226370300200341a8056a41086a2001290300370300200341a8056a41106a2026370300200341a8056a41186a2005290300370300200320032903880a3703a805200341306a200341a8056a412010cd012003280234210220032802302106200341286a41d7ddc400411010cd01200328022c21052003280228210920032f0148210a20032d004a210820032d004b210420032f014c210720032d004e210d20032d004f210b20032f0150211020032d0052211120032d0053211220032f0154211320032d0056211420032d0057211520032f0158211620032d005a211720032d005b211d20032f015c211e20032d005e212f20032d005f213020032903602126412010212201450d0420012003290348370000200141186a200341c8006a41186a290300370000200141106a200341c8006a41106a290300370000200141086a200341c8006a41086a2903003700002003418c0d6a2005410020091b360200200341b40d6a2026370200200341b30d6a20303a0000200341b20d6a202f3a0000200341b00d6a201e3b0100200341af0d6a201d3a0000200341ae0d6a20173a0000200341ac0d6a20163b0100200341ab0d6a20153a0000200341aa0d6a20143a0000200341a80d6a20133b0100200341a70d6a20123a0000200341a60d6a20113a0000200341a40d6a20103b0100200341a30d6a200b3a0000200341a20d6a200d3a0000200341a00d6a20073b01002003419f0d6a20043a00002003419e0d6a20083a0000200320193703800d200320183703f80c20032002410020061b3602880d2003200a3b019c0d200341940d6a428180808010370200200320013602900d2003200f3703d00c2003201f3a00cf0c2003201c3a00ce0c2003201b3b01cc0c2003201a3a00cb0c200320213a00ca0c200320223b01c80c200320233a00c70c200320243a00c60c200320203b01c40c200320253a00c30c200320273a00c20c200320283b01c00c200320293a00bf0c2003202a3a00be0c2003202b3b01bc0c2003202c3a00bb0c2003202d3a00ba0c2003202e3b01b80c200341880a6a200341f8026a200341b80c6a10e50420032802880a2101200320032802900a3602ac05200320013602a805200341f80c6a200341a8056a10e2040240200328028c0a450d00200110230b024020032802940d41ffffff3f71450d0020032802900d10230b2003419d0d6a20032903f802370000200341850d6a200341c8006a41086a2903003700002003418d0d6a200341c8006a41106a290300370000200341950d6a200341c8006a41186a290300370000200341a50d6a200341f8026a41086a290300370000200341ad0d6a200341f8026a41106a290300370000200341b50d6a200341f8026a41186a290300370000200341023a00fc0c200341093a00f80c200320032903483700fd0c200341f80c6a10e0010c100b41002109410021080c0c0b41002101200328028c0a220641ff01714104460d272006411876210a2006411076210920064108762108200341940a6a2802002102200341880a6a41086a28020021010c120b2001412c6a2802002109200141286a2802002105200141246a2802002108200141346a280200210e200141306a280200210c200141226a2f0100210a200341d80c6a41186a200141196a290000370300200341d80c6a41106a200141116a290000370300200341d80c6a41086a200141096a290000370300200320012900013703d80c410221064100210120022d00000d0720022d00014101470d07200241196a2d00002106200241186a2d00002104200241166a2f01002107200241156a2d0000210d200241146a2d0000210b200241126a2f01002110200241116a2d00002111200241106a2d000021122002410e6a2f010021132002410d6a2d000021142002410c6a2d000021152002410a6a2f01002116200241096a2d00002117200241086a2d0000211d200241066a2f0100211e200241056a2d0000211f200241046a2d0000211c200241026a2f0100211b20032002411a6a290100370360200320063a005f200320043a005e200320073b015c2003200d3a005b2003200b3a005a200320103b0158200320113a0057200320123a0056200320133b0154200320143a0053200320153a0052200320163b0150200320173a004f2003201d3a004e2003201e3b014c2003201f3a004b2003201c3a004a2003201b3b014841132102410321060240200a41ffff03710d0041de95c600210a410d21090c090b024020090d004180800c210141eb95c600210a411121090c090b0240200941e3004d0d0041808010210141fc95c600210a411221090c090b200320093602e007200320053602dc07200320083602d807200341f80c6a41186a200341c8006a41186a290300370300200341f80c6a41106a2202200341c8006a41106a290300370300200341f80c6a41086a2201200341c8006a41086a290300370300200320032903483703f80c200341880a6a200341d8076a200341f80c6a10e404024020032802880a4101460d00200341880a6a41086a2802002104200328028c0a21082001200341880a6a410c6a2802003602002003200a3b01840d200320083602fc0c200341ce95c6003602f80c200341b80c6a200341f80c6a10d603200341083a00980d2003410b3a00980d2003410c3a00980d200320032f01b80c3b01f80c200320032801ba0c3601fa0c200320032d00be0c3a00fe0c200320032800bf0c3600ff0c200320032d00c30c3a00830d2003410d3a00980d200320032d00c40c3a00840d2003410e3a00980d200320032d00c50c3a00850d2003410f3a00980d200320032d00c60c3a00860d200320032d00c70c3a00870d200341103a00980d200341113a00980d200320032d00c80c3a00880d200341123a00980d200320032d00c90c3a00890d200341133a00980d200320032d00ca0c3a008a0d200341143a00980d200320032d00cb0c3a008b0d200341153a00980d200320032d00cc0c3a008c0d200341163a00980d200320032d00cd0c3a008d0d200341173a00980d200320032d00ce0c3a008e0d200320032d00cf0c3a008f0d200341183a00980d200341193a00980d200320032d00d00c3a00900d2003411a3a00980d200320032d00d10c3a00910d2003411b3a00980d200320032d00d20c3a00920d2003411c3a00980d200320032d00d30c3a00930d2003411d3a00980d200320032d00d40c3a00940d2003411e3a00980d200320032d00d50c3a00950d2003411f3a00980d200320032d00d60c3a00960d200320032d00d70c3a00970d200341203a00980d200341a8056a41186a220620032903900d370300200341a8056a41106a220520032903880d370300200341a8056a41086a220920032903800d370300200320032903f80c3703a805200341f8026a41186a2006290300370300200341f8026a41106a2005290300370300200341f8026a41086a2009290300370300200320032903a8053703f8022003200341d80c6a41186a2903003703d00c2003200341d80c6a41106a2903003703c80c2003200341d80c6a41086a2903003703c00c200320032903d80c3703b80c20034180106a200341f8026a200341b80c6a10e504200341f80c6a200328028010220a20032802881010e604200341b80c6a41086a2001290300370300200341b80c6a41106a20022903003703002009200341a00d6a2903003703002005200341a80d6a2903003703002006200341b00d6a290300370300200341a8056a41206a2201200341b80d6a290300370300200320032903f80c3703b80c2003200341f80c6a41206a2903003703a80502400240024020032802900d2206450d0020032802940d2105200341e80f6a41106a2202200341b80c6a41106a290300370300200341e80f6a41086a2207200341b80c6a41086a290300370300200341d8076a41086a220d200341a8056a41086a290300370300200341d8076a41106a220b200341a8056a41106a290300370300200341d8076a41186a2210200341a8056a41186a290300370300200341d8076a41206a2001290300370300200320032903b80c3703e80f200320032903a8053703d8070240200328028410450d00200a10230b200341c80f6a41166a2002290300220f370100410e2109200341c80f6a410e6a2007290300370100200341a80f6a41166a2201200f370100200341a80f6a41106a200341c80f6a41106a290100370300200320032903e80f3701ce0f200341a80f6a41086a200341c80f6a41086a290100370300200320032901c80f3703a80f200341880a6a41106a22022001290100370300200341880a6a41086a200341a80f6a410e6a290100370300200320032901ae0f3703880a200341a40a6a2005360200200320063602a00a200341c80a6a200341d8076a41206a290300370300200341c00a6a2010290300370300200341b80a6a200b290300370300200341b00a6a200d290300370300200341880a6a41206a20032903d80737030041808028210141ac96c600210a02402002280200200c470d002003419c0a6a280200200e470d00200341ac0a6a2201200341c8006a412010a305450d0341808020210141d5a4c600210a410821090b41132102200541ffffff3f71450d01200610230c010b0240200328028410450d00200a10230b4180801c210141930e210241cfc6c600210a410821090b0240200441ffffff3f71450d00200810230b41032106410021050c0b0b20032903880a210f2003200341880a6a41086a29030022183703b0052003200f3703a8050240200f201884500d00200320013602b80c200341d8076a2001200341a8056a200341b80c6a10ff0220032903d8074201520d0020032903e007210f200341b00d6a200341d8076a41106a290300370300200341a80d6a200f370300200341f80c6a41086a41003a0000200341810d6a2001290000370000200341890d6a200141086a290000370000200341910d6a200141106a290000370000200341990d6a200141186a290000370000200341023a00f80c200341f80c6a10e0010b200341b80c6a41186a200341d80c6a41186a290300370300200341b80c6a41106a200341d80c6a41106a290300370300200341b80c6a41086a200341d80c6a41086a290300370300200320032903d80c3703b80c200341f80c6a200341f8026a200341b80c6a10e50420033502800d42208620032802f80c2201ad841011024020032802fc0c450d00200110230b2003419d0d6a20032903f802370000200341850d6a200341c8006a41086a2903003700002003418d0d6a200341c8006a41106a290300370000200341950d6a200341c8006a41186a290300370000200341a50d6a200341f8026a41086a290300370000200341ad0d6a200341f8026a41106a290300370000200341b50d6a200341f8026a41186a290300370000200341053a00fc0c200341093a00f80c200320032903483700fd0c200341c40d6a200e360200200341c00d6a200c360200200341f80c6a10e001024020032802a40a41ffffff3f71450d0020032802a00a10230b0240200441ffffff3f71450d00200810230b410021010c270b41002101200328028c0a220641ff01714104460d262006418080807871210520064180807c71210120064108762102200341940a6a2802002109200341880a6a41086a280200210a0c090b1033000b102a000b200610b40220061023410021010c1c0b200341940a6a280200210a200341880a6a41086a2802002101200328028c0a2105200610b402200610232005411876210c200541107621082005410876210e0c160b41de95c6002101410d21024103210641132108410021090c050b41eb95c6002101411121024113210841032109410321060c040b41fc95c6002101411221024103210641132108410421090c030b410021020b0240200541ffffff3f71450d00200810230b410021050b200041146a2009360200200041106a200a3602002000410c6a2001418080fc0771200641ff01717220057220024108744180fe0371723602000c080b4100210a200541ffffff3f71450d06200c10230c060b0240200620014105746a200341c8006a412010a30522090d0041ba96c6002101410f2102410121090c040b200341f80c6a41186a200341c8006a41186a290300370300200341f80c6a41106a200341c8006a41106a290300370300200341f80c6a41086a200341c8006a41086a290300370300200320032903483703f80c200341f80c6a210220082009411f7620016a2209490d020b024020082005470d00200341880a6a41186a20054101109a0120032802a00a21060b200620094105746a220141206a2001200820096b41057410a2051a200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200120022900003700002003200841016a3602a80a200341f80c6a200341880a6a41c80010a1051a2003200f3703d00c2003201f3a00cf0c2003201c3a00ce0c2003201b3b01cc0c2003201a3a00cb0c200320213a00ca0c200320223b01c80c200320233a00c70c200320243a00c60c200320203b01c40c200320253a00c30c200320273a00c20c200320283b01c00c200320293a00bf0c2003202a3a00be0c2003202b3b01bc0c2003202c3a00bb0c2003202d3a00ba0c2003202e3b01b80c200341a8056a200341f8026a200341b80c6a10e50420032802a8052101200320032802b0053602bc0c200320013602b80c200341f80c6a200341b80c6a10e204024020032802ac05450d00200110230b0240200341940d6a28020041ffffff3f71450d0020032802900d10230b2003419d0d6a20032903f802370000200341850d6a200341c8006a41086a2903003700002003418d0d6a200341c8006a41106a290300370000200341950d6a200341c8006a41186a290300370000200341a50d6a200341f8026a41086a290300370000200341ad0d6a200341f8026a41106a290300370000200341b50d6a200341f8026a41186a290300370000200341033a00fc0c200341093a00f80c200320032903483700fd0c200341c40d6a2031360200200341c00d6a2030360200200341f80c6a10e0010b0240200e41ffffff3f71450d00200c10230b410021010c180b200920081038000b0240200541ffffff3f71450d00200610230b41032106411321084100210a0b200e41ffffff3f71450d00200c10230b200041146a2002360200200041106a20013602002000410c6a200941ff0171411074200a41187472200841ff017141087472200641ff0171723602000b410121010c130b200341f80c6a200641b00210a1051a200341e2076a200341c8006a41086a290300370100200341ea076a200341d8006a290300370100200341f2076a200341e0006a29030037010020034180023b01d807200320032903483701da07200341a8056a200341f80c6a200341d8076a10cf0220032903880a21182003200341880a6a41086a29030022193703c00c200320183703b80c02402018201984500d002003200341ac0a6a22013602a80f200341d8076a2001200341b80c6a200341a80f6a10ff0220032903d8074201520d0020032903e0072118200341b00d6a200341d8076a41106a290300370300200341a80d6a2018370300200341f80c6a41086a41003a0000200341810d6a2001290000370000200341890d6a200141086a290000370000200341910d6a200141106a290000370000200341990d6a200141186a290000370000200341023a00f80c200341f80c6a10e0010b2003200f3703d00c200320073a00cf0c2003200d3a00ce0c2003200b3b01cc0c200320103a00cb0c200320113a00ca0c200320123b01c80c200320133a00c70c200320143a00c60c200320153b01c40c200320163a00c30c200320173a00c20c2003201d3b01c00c2003201e3a00bf0c2003201f3a00be0c200320213b01bc0c200320223a00bb0c200320233a00ba0c200320243b01b80c200341f80c6a200341c8006a200341b80c6a10e50420033502800d42208620032802f80c2201ad841011024020032802fc0c450d00200110230b200341f80c6a41186a200341d80c6a41186a290300370300200341f80c6a41106a200341d80c6a41106a290300370300200341f80c6a41086a200341d80c6a41086a290300370300200320032903d80c3703f80c20032f0148210220032d004a210520032d004b210920032f014c210a20032d004e210820032d004f210c20032f0150210e20032d0052210720032d0053210d20032f0154210b20032d0056211020032d0057211120032f0158211220032d005a211320032d005b211420032f015c211520032d005e211620032d005f21172003290360210f200320032900b5053703d8072003200341bc056a2800003600df070240024020032802a8054101460d00410421010c010b200341b4056a2d0000211e20032802ac05211d200320032800df073600bf0c200320032903d8073703b80c41042101201d4102460d00200320032800bf0c3600af0f200320032903b80c3703a80f201e21010b200341d8076a41086a221d200341f80c6a41086a290300370300200341d8076a41106a221e200341f80c6a41106a290300370300200341d8076a41186a221f200341f80c6a41186a290300370300200320032903f80c3703d807200320032903a80f3703e80f200320032800af0f3600ef0f200341b50d6a200f370000200341b40d6a20173a0000200341b30d6a20163a0000200341b10d6a20153b0000200341b00d6a20143a0000200341af0d6a20133a0000200341ad0d6a20123b0000200341ac0d6a20113a0000200341ab0d6a20103a0000200341a90d6a200b3b0000200341a80d6a200d3a0000200341a70d6a20073a0000200341a50d6a200e3b0000200341a40d6a200c3a0000200341a30d6a20083a0000200341a10d6a200a3b0000200341a00d6a20093a00002003419f0d6a20053a00002003419d0d6a20023b0000200341043a00fc0c200341093a00f80c200341850d6a201d2903003700002003418d0d6a201e290300370000200341950d6a201f290300370000200320032903d8073700fd0c200341c80d6a20013a0000200341c40d6a201a360200200341c00d6a201b360200200341bf0d6a200341ba0c6a2d00003a0000200341bd0d6a20032f00b80c3b0000200341d00d6a20032800ef0f360000200341c90d6a20032903e80f370000200341f80c6a10e001024020032802a40a41ffffff3f71450d0020032802a00a10230b202041ffffff3f71450d002004102320061023410021010c0a0b20061023410021010c090b200341f80c6a41186a200341d80c6a41186a290300370300200341f80c6a41106a200341d80c6a41106a290300370300200341f80c6a41086a200341d80c6a41086a290300370300200320032903d80c3703f80c024020082001490d0002402008200e470d00200341880a6a41186a200e4101109a0120032802a00a21090b200920014105746a220241206a2002200820016b41057410a2051a200241186a200341f80c6a41186a290300370000200241106a200341f80c6a41106a290300370000200241086a200341f80c6a41086a290300370000200220032903f80c3700002003200841016a3602a80a200341f80c6a200341880a6a41c80010a1051a2003200f3703d00c200320073a00cf0c2003200d3a00ce0c2003200b3b01cc0c200320103a00cb0c200320113a00ca0c200320123b01c80c200320133a00c70c200320143a00c60c200320153b01c40c200320163a00c30c200320173a00c20c2003201d3b01c00c2003201e3a00bf0c2003201f3a00be0c200320213b01bc0c200320223a00bb0c200320233a00ba0c200320243b01b80c200341d8076a200341c8006a200341b80c6a10e50420032802d8072101200320032802e0073602ac05200320013602a805200341f80c6a200341a8056a10e204024020032802dc07450d00200110230b0240200341940d6a28020041ffffff3f71450d0020032802900d10230b2003419d0d6a2003290348370000200341850d6a200341d80c6a41086a2903003700002003418d0d6a200341d80c6a41106a290300370000200341950d6a200341d80c6a41186a290300370000200341a50d6a200341c8006a41086a290300370000200341ad0d6a200341c8006a41106a290300370000200341b50d6a200341c8006a41186a290300370000200341033a00fc0c200341093a00f80c200320032903d80c3700fd0c200341c40d6a201a360200200341c00d6a201b360200200341f80c6a10e001410421050c020b200120081038000b41032105200e41ffffff3f71450d00200910230b0240202041ffffff3f71450d00200410230b4113210e4100210c0b200610b4020b200610230b200541ff01714104470d02410021010c030b200610b40220061023410321054113210e0b4100210c0240200941ffffff3f71450d00200410230b0b200041146a200a360200200041106a20013602002000410c6a200841ff0171411074200c41187472200e41ff017141087472200541ff017172360200410121010b200041086a20023602000c070b200041146a2009360200200041106a200a3602002000410c6a2001200541ff017172360200410121010b200041086a20023602000c050b200141b0026a21010c030b200141b0026a21010c020b200621010b200341f80c6a200341880a6a41ac0210a1051a0b024020062001460d0003402001109e032006200141b0026a2201470d000b0b02402007450d00200741b0026c450d00200410230b200341013a00fc0c200341093a00f80c200341f80c6a10e001410021010b200020013602002000410036020420034190106a24000bd69c0109067f047e0c7f027e037f017e027f0b7e0f7f230041b0106b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0c000102030e0d0c0b0a090807000b200341840e6a4101360200200342013702f40d200341a4c5c6003602f00d2003410436029406200341cccec60036029006200320034190066a3602800e200341f00d6a419ca8c700103a000b200341b8036a200141196a290000370300200341b0036a200141116a290000370300200341a8036a200141096a290000370300200320012900013703a00320022d000121040240024020022d0000220141024b0d00024020010e03000102000b200441ff0171450d010b200420014100477241ff01710d050b200341f0006a109105200341f00d6a41186a2205200341a0036a41186a290300370300200341f00d6a41106a2206200341a0036a41106a290300370300200341f00d6a41086a2207200341a0036a41086a290300370300200320032903a0033703f00d02402003280278220220032802742208470d00200341f0006a20024101109f0120032802742108200328027821020b2003280270220420024106746a2201420037030820014201370300200141106a4200370300200141186a4200370300200141206a20032903f00d370300200141286a2007290300370300200141306a2006290300370300200141386a20052903003703002003200241016a220536027841f4c7c600ad4280808080800184100c220129000021092001290008210a2001102341a084c700ad4280808080a00184100c2201290000210b2001290008210c200110232003200c3702a8062003200b3702a0062003200a370298062003200937029006200341f00d6a2004200510d40220034190066aad428080808080048420033502f80d42208620032802f00d2201ad84100e024020032802f40d450d00200110230b0240200841ffffff1f71450d00200410230b200341fc0d6a2002360200200341f80d6a41063a00002003410a3a00f00d200341f00d6a10e0010c130b200341a0036a200141046a41a00210a1051a4102210120022d00000d0220022d00014101470d02200241196a2d00002101200241186a2d00002104200241166a2f01002108200241156a2d00002105200241146a2d00002106200241126a2f01002107200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211820032002411a6a29010037038806200320013a008706200320043a008606200320083b018406200320053a008306200320063a008206200320073b0180062003200d3a00ff052003200e3a00fe052003200f3b01fc05200320103a00fb05200320113a00fa05200320123b01f805200320133a00f705200320143a00f605200320153b01f405200320163a00f305200320173a00f205200320183b01f005024020032802a803220141e4004b0d00200341086a2001ad42004280d0f29ce1c800420010a605200341f0006a200341f0056a109205200341f00d6a200328027022012003280278109305200341b80b6a200341f00d6a41a40210a1051a200341d0086a41086a22022003419d106a290000370300200341d0086a41106a2204200341a5106a290000370300200341d0086a41176a2208200341ac106a28000036000020032003290095103703d008200341086a41086a29030021192003290308211a0240024020032d00941022054102460d00200341f0086a200341b80b6a41a40210a1051a200341d0006a41176a2008280000360000200341d0006a41106a2004290300370300200341d0006a41086a2002290300370300200320032903d00837035002402003280274450d00200110230b200341f00d6a200341f0086a41a40210a1051a200341f00d6a41a4026a20053a000020034195106a20032903503700002003419d106a200341d0006a41086a290300370000200341a5106a200341d0006a41106a290300370000200341ac106a200341e7006a2800003600000240200341f00d6a41186a2802002206450d0020032802800e210141002102410021040340024002400240200141086a2205280200417f6a220841054b0d00024020080e06000101010100000b20020d01410021020c020b200241016a21020c010b200420026b220820064f0d07200341f0006a41186a2207200120024105746b220841186a220d290300370300200341f0006a41106a220e200841106a220f290300370300200341f0006a41086a2210200841086a22112903003703002003200829030037037020052903002109200141106a2212290300210a200141186a2213290300210b20082001290300370300200d200b370300200f200a37030020112009370300201320072903003703002012200e29030037030020052010290300370300200120032903703703000b200141206a21012006200441016a2204470d000b2002417f6a20064f0d002003200620026b3602880e0b2003418c0e6a2201108f052001200341a0036a41a00210a1051a20034190066a200341f00d6a41c00210a1051a20034190066a41086a290300210a200329039006210c0c010b02402003280274450d00200110230b200341a8066a41003602004200210c20034200370398062003420037039006200342083703a006200341ac066a200341a0036a41a00210a1051a4200210a0b2003201a4280c0caf384a3027c220937039006200320192009201a54ad7c220b3703980602402009200c58200b200a58200b200a5122071b0d002003200b200a7d2009200c54ad7d221a3703c00b20032009200c7d22193703b80b2003200341f0056a3602d0052019201a844200510d002003200341f0056a3602f0082003200341f0086a3602f80d2003200341d0056a3602f40d2003200341b80b6a3602f00d200341f0006a200341f0056a200341f00d6a10fd020240024020032802704101470d00200341fc006a2802002102200341f8006a280200210420032d0077210820032d0076210520032d0075210620032d007421010c010b410421010240200341f0006a41086a2903004201520d00200341f0006a41106a290300211a20032802f0082102200341a80e6a200341f0006a41186a290300370300200341a00e6a201a370300200341f00d6a41086a41003a0000200341f90d6a2002290000370000200341810e6a200241086a290000370000200341890e6a200241106a290000370000200341910e6a200241186a290000370000200341023a00f00d200341f00d6a10e0010b0b200141ff01714104460d000240200341a4066a28020041ffffff3f71450d0020032802a00610230b200341ac066a108f050c160b0240200c200958200a200b5820071b0d002003200a200b7d200c200954ad7d220a3703c00b2003200c20097d22093703b80b2009200a84500d002003200341f0056a3602f008200341f0006a200341f0056a200341b80b6a200341f0086a10ff0220032903704201520d0020032903782109200341a80e6a200341f0006a41106a290300370300200341a00e6a2009370300200341f00d6a41086a41003a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a200341f0056a41106a290300370000200341910e6a20034188066a290300370000200341023a00f00d200341f00d6a10e0010b200341f00d6a20034190066a41c00210a1051a200341f0056a200341f00d6a10940541002101200341f00d6a41086a41003a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a2903003700002003410a3a00f00d200341f00d6a10e0010c140b200341a0036a108f0541d6c5c6002104410d21024103210141142106410b21050c140b2001410c6a2802002108200141086a2802002104200141046a28020021054102210620022d00000d0f20022d00014101470d0f200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d0000211b200241046a2d0000211c200241026a2f0100211d20032002411a6a29010037038809200320013a008709200320063a008609200320073b0184092003200d3a0083092003200e3a0082092003200f3b018009200320103a00ff08200320113a00fe08200320123b01fc08200320133a00fb08200320143a00fa08200320153b01f808200320163a00f708200320173a00f608200320183b01f4082003201b3a00f3082003201c3a00f2082003201d3b01f008200341f00d6a200341f0086a109205200341286a20032802f00d220220032802f80d419ca8c70041004100108c0120032802282101024020032802f40d450d00200210230b41012107410321064114210d024020014101460d0041cfc6c60021104108210f0c110b0240200841e4004d0d0041d7c6c60021104112210f410021070c110b20034190066a200341f0086a109505200341f00d6a2003280290062202200328029806109605200341f00d6a41086a290300420020032802800e22011b210920032903f00d420020011b210a20032902840e210b0240200328029406450d00200210230b200b420020011b211e2001410120011b211f200341186a2008ad42004280c0a8ca9a3a420010a6050240200a200329031822195a2009200341186a41086a290300221a5a2009201a5122011b0d002003201a20097d2019200a54ad7d220b3703a80320032019200a7d220c3703a0032003200341f0086a3602b80b200c200b844200510d002003200341f0086a3602702003200341f0006a3602f80d2003200341b80b6a3602f40d2003200341a0036a3602f00d20034190066a200341f0086a200341f00d6a10fd02024002402003280290064101470d002003419c066a280200210f20034198066a280200211020032d009706210e20032d009606210720032d009506210d20032d00940621060c010b41042106024020034190066a41086a2903004201520d0020034190066a41106a290300210b20032802702102200341a80e6a20034190066a41186a290300370300200341a00e6a200b370300200341f00d6a41086a41003a0000200341f90d6a2002290000370000200341810e6a200241086a290000370000200341890e6a200241106a290000370000200341910e6a200241186a290000370000200341023a00f00d200341f00d6a10e0010b0b200641ff01714104460d00201e42ffffff3f83500d11201f10230c110b0240200a2019582009201a5820011b0d0020032009201a7d200a201954ad7d22093703a8032003200a20197d220a3703a003200a200984500d002003200341f0086a36027020034190066a200341f0086a200341a0036a200341f0006a10ff022003290390064201520d002003290398062109200341a80e6a20034190066a41106a290300370300200341a00e6a2009370300200341f00d6a41086a41003a0000200341f90d6a20032903f008370000200341810e6a200341f0086a41086a290300370000200341890e6a200341f0086a41106a290300370000200341910e6a20034188096a290300370000200341023a00f00d200341f00d6a10e0010b0240201e422088a74105742202450d00201f21010340200341f00d6a2001108b0520033502f80d42208620032802f00d2206ad841011024020032802f40d450d00200610230b200141206a2101200241606a22020d000b0b200341003602d805200342013703d005200341d0056a4100200841c4006c221b41c4006d109a0120032802d805211020032802d005211d024002400240024002400240201b450d002005201b6a2120201d20104105746a2102200341f00d6a41206a211c200341f00d6a41216a210820034190066a411f6a21114100210d0340200341b80b6a41186a22062005200d6a220141186a290200370300200341b80b6a41106a2207200141106a290200370300200341b80b6a41086a220e200141086a29020037030020034190066a41086a220f200141296a29000037030020034190066a41106a2212200141316a29000037030020034190066a41186a2213200141396a2900003703002011200141c0006a280000360000200320012902003703b80b2003200141216a29000037039006200141206a2d000022144106460d02200341a0036a41186a22152006290300370300200341a0036a41106a22162007290300370300200341a0036a41086a2217200e290300370300200320032903b80b3703a003200341f00d6a41186a2206200341f0086a41186a290300370300200341f00d6a41106a2207200341f0086a41106a290300370300200341f00d6a41086a2218200341f0086a41086a290300370300200320032903f0083703f00d200320143a00900e2008200329039006370000200841086a200f290300370000200841106a2012290300370000200841186a20132903003700002008411f6a2011280000360000200341f0056a200341a0036a108b0520033502f805210920032802f005210e412010212201450d15200120032903f00d370000200141186a2006290300370000200141106a2007290300370000200141086a2018290300370000200341f0006a201c10702003280270210f02400240200328027822060d00200641206a21070c010b200641206a22072006490d05200741c000200741c0004b1b22124100480d0520014120201210252201450d160b200141206a200f200610a1051a02402003280274450d00200f10230b2009422086200ead842007ad4220862001ad84100e20011023024020032802f405450d00200e10230b024020032d00900e4101470d0020032802980e450d0020032802940e10230b200341f0006a41086a20172903002209370300200341f0006a41106a2016290300220a370300200341f0006a41186a2015290300220b370300200320032903a003220c370370200241186a200b370000200241106a200a370000200241086a20093700002002200c370000201041016a2110200241206a2102201b200d41c4006a220d470d000b0b200320103602d8050c010b200320103602d805200141c4006a2020460d00200141e4006a2101201b200d6b41bc7f6a21020340024020012d00004101470d00200141086a280200450d00200141046a28020010230b200141c4006a2101200241bc7f6a22020d000b0b02402004450d00200441c4006c450d00200510230b20032802d405210e2010450d0e20034190066a200341f0086a109505201041057422064114722202417f4c0d022003350298062109200328029006210f200210212201450d01200120193700002001201a370008200341103602f80d200320023602f40d200320013602f00d2010200341f00d6a1061410020032802f80d22026b210520032802f00d210d20032802f40d2108201d21070340200721010240200820056a411f4b0d00200241206a22042002490d02200841017422072004200720044b1b22044100480d02024002400240024020080d00024020040d004101210d0c020b20041021210d0c030b20082004470d010b200421080c020b200d200820041025210d0b20042108200d450d130b200141206a2107200d20026a22042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a290000370000200541606a2105200241206a2102200641606a22060d000b2009422086200fad842002ad422086200dad84100e02402008450d00200d10230b0240200328029406450d00200f10230b200e41ffffff3f710d0f0c100b102c000b1033000b1032000b200820064184d9c4001030000b200341a0036a108f050c110b200041003602042000410c6a4102360200410121010c110b200141196a2900002109200141186a2d00002108200141176a2d00002105200141156a2f00002106200141146a2d00002107200141136a2d0000210d200141116a2f0000210e200141106a2d0000210f2001410f6a2d000021102001410d6a2f000021112001410c6a2d000021122001410b6a2d00002113200141096a2f00002114200141086a2d00002115200141076a2d00002116200141056a2f00002117200141046a2d00002118200141036a2d0000211b20022d0001210420012f0001211c0240024002400240024020022d0000220141024b0d00024020010e03000102000b200441ff0171450d010b4182a8082102200420014100477241ff01710d010b2003200937038806200320083a008706200320053a008606200320063b018406200320073a0083062003200d3a0082062003200e3b0180062003200f3a00ff05200320103a00fe05200320113b01fc05200320123a00fb05200320133a00fa05200320143b01f805200320153a00f705200320163a00f605200320173b01f405200320183a00f3052003201b3a00f2052003201c3b01f00520034190066a200341f0056a109505200341f00d6a20032802900622012003280298062202109605024020032802800e2208450d002002ad4220862001ad8410110b20032903f00d210920032802840e2104200341f80d6a290300210a200341880e6a280200210e0240200328029406450d00200110230b200341e00d6a200341f0056a109205200341f00d6a20032802e00d220220032802e80d2206109305024020032d009410220141024622050d002006ad4220862002ad8410110b200341b80b6a200341f00d6a41a40210a1051a200341980b6a41176a2206200341ac106a280000360000200341980b6a41106a2207200341a5106a290000370300200341980b6a41086a220d2003419d106a29000037030020032003290095103703980b200341f00d6a200341b80b6a41a40210a1051a200341d0056a41176a220f2006280000360000200341d0056a41106a22062007290300370300200341d0056a41086a2207200d290300370300200320032903980b3703d005024020050d00200341f0086a200341f00d6a41a40210a1051a200341d0086a41176a200f280000360000200341d0086a41106a2006290300370300200341d0086a41086a2007290300370300200320032903d0053703d0080b024020032802e40d450d00200210230b2004410020081b21052008410120081b2106024020014102460d002009420020081b210c200a420020081b211a200341a0036a41066a200341f0086a41a40210a1051a200341d0006a41176a2202200341d0086a41176a280000360000200341d0006a41106a2204200341d0086a41106a290300370300200341d0006a41086a2207200341d0086a41086a290300370300200320032903d008370350200341f0006a200341a0036a41aa0210a1051a200341306a41176a220d2002280000360000200341306a41106a22022004290300370300200341306a41086a220420072903003703002003200329035037033020034190066a200341f0006a41066a41a40210a1051a20034190066a41a4026a20013a0000200341b5086a2003290330370000200341bd086a2004290300370000200341c5086a2002290300370000200341cc086a200d28000036000020034190066a41086a2903002119200329039006210b20032802a006210702400240200341a8066a28020041057422020d00420021094200210a0c010b200741106a2101420021094200210a0340200141086a2903004200200141786a29030042015122041b200a7c2001290300420020041b220a20097c2209200a54ad7c210a200141206a2101200241606a22020d000b0b200e410020081b21012019201a7c200b200c7c220c200b54ad7c200a7c210a200c20097c221a200c54ad21090240200341a4066a28020041ffffff3f71450d00200710230b200a20097c210a200341ac066a108f05024020014105742202450d00200621010340200341f00d6a2001108b0520033502f80d42208620032802f00d2204ad841011024020032802f40d450d00200410230b200141206a2101200241606a22020d000b0b201a200a8450450d0242002121420021220c030b0240200541ffffff3f71450d00200610230b4183a80821020b20004100360204200041146a4108360200200041106a41c7c6c6003602002000410c6a2002360200410121010c120b200341d0056a200341f0056a109702200341f0006a20032802d005220220032802d80522011098022003290370211e4200210b20034200370370200341b8016a280200210420032d00bc01210802400240201e4201510d00200341f0086a41306a4200370300200341f0086a41286a4200370300200341f0086a41206a4200370300200341f0086a41186a420037030020034180096a4200370300200341f8086a4200370300200342003703f008420021194200210c42002109420021230c010b200341a8016a2903002121200341f0006a41306a2903002122200341f0006a41206a2903002119200341f0006a41186a290300210b200341b0016a290300212320032903800121092003290378210c200341f0086a41206a200341f0006a41286a290300370300200341f0086a41286a2022370300200341f0086a41306a202137030020034180096a200b37030020032019370388092003200c3703f008200320093703f8080b200341f0086a41186a2019200a2019200b201a562019200a562019200a511b22071b22227d200b201a200b20071b222154ad7d22243703002003200b20217d222537038009200341b80b6a41186a2024370300200341b80b6a41206a220e200341f0086a41206a290300370300200341b80b6a41286a220f200341f0086a41286a290300370300200341b80b6a41306a2210200341f0086a41306a290300370300200320253703c80b2003200c3703b80b200320093703c00b200920197c200c200b7c2226200c542207ad7c210b02400240427f200c20257c22192019200c54220d200920247c200dad7c221920095420192009511b220d1b22244280c8afa025544100427f2019200d1b2225501b0d00200341c80b6a290300212420102903002125200f2903002127200e290300212820032903c00b212920032903b80b212a4201211920032903d00b212b0c010b4200211902402024202584500d002024202510eb01200341a80e6a2025370300200341a00e6a2024370300200341f00d6a41086a41013a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a290300370000200341023a00f00d200341f00d6a10e0010b0b200b200951210d200b200954210e20034198016a2028370300200341a0016a202737030020034180016a2029370300200341a8016a202537030020034188016a20243703002003202b37039001200320233703b0012003202a370378200320084100201e420151220f1b3a00bc01200320044100200f1b3602b801200320194201512204ad3703700240024020040d002001ad4220862002ad8410110c010b200320013602f40d200320023602f00d200341f8006a200341f00d6a1098030b2007200e200d1b2101024020032802d405450d00200210230b427f200b20011b210b427f202620011b212420194201522101024002400240201e4201510d0020010d004103210220034190066a21010c010b201e4201522001410173720d0141042102200341a0036a21010b200141046a20023a0000200141056a20032903f005370000200141003a00002001410d6a200341f8056a290300370000200141156a20034180066a2903003700002001411d6a20034188066a290300370000200110e0010b2024200b844200520d00200341a80e6a2009370300200341a00e6a200c370300200341f00d6a41086a41003a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a290300370000200341023a00f00d200341f00d6a10e0010b2021202210eb01200341a80e6a200a370300200341a00e6a201a370300200341f00d6a41086a41023a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a2903003700002003410a3a00f00d200341f00d6a10e001200541ffffff3f71450d0d200610230c0d0b200141386a290300210c200141306a290300211a200141196a290000210b200141186a2d0000211d200141176a2d0000211f200141156a2f00002120200141146a2d0000212c200141136a2d0000212d200141116a2f0000212e200141106a2d0000212f2001410f6a2d000021302001410d6a2f000021312001410c6a2d000021322001410b6a2d00002133200141096a2f00002134200141086a2d00002135200141076a2d00002136200141056a2f00002137200141046a2d00002138200141036a2d00002139200141286a290300210a200141246a280200211c20012f0001213a2002411a6a2901002109200241196a2d00002104200241186a2d00002108200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211b41012101024020022d00000d0020022d000141014721010b200320093702a806200320043a00a706200320083a00a606200320053b01a406200320063a00a306200320073a00a2062003200d3b01a0062003200e3a009f062003200f3a009e06200320103b019c06200320113a009b06200320123a009a06200320133b019806200320143a009706200320153a009606200320163b019406200320173a009306200320183a0092062003201b3b0190060240024002400240024020010d00200341d0056a41186a20034190066a41186a29020037030041102101200341d0056a41106a20034190066a41106a290200370300200341d0056a41086a20034190066a41086a29020037030020032003290290063703d0052003200b370388062003201d3a0087062003201f3a008606200320203b0184062003202c3a0083062003202d3a0082062003202e3b0180062003202f3a00ff05200320303a00fe05200320313b01fc05200320323a00fb05200320333a00fa05200320343b01f805200320353a00f705200320363a00f605200320373b01f405200320383a00f305200320393a00f2052003203a3b01f0050240200a4201520d0041fcc5c6002102418080202104410321080c020b200341f00d6a10910520032802f00d21010240024002400240024020032802f80d201c4d0d002001201c4106746a22022903004201520d000240200341d0056a200241206a2202460d002002200341d0056a412010a3050d010b024020032802f40d41ffffff1f71450d00200110230b200341306a200341f0056a109205200341f00d6a200328023022012003280238109305200341b80b6a200341f00d6a41a40210a1051a200341d0086a41086a22022003419d106a290000370300200341d0086a41106a2204200341a5106a290000370300200341d0086a41176a2208200341ac106a28000036000020032003290095103703d008024020032d00941022054102460d00200341f0086a200341b80b6a41a40210a1051a200341d0006a41176a2008280000360000200341d0006a41106a2004290300370300200341d0006a41086a2002290300370300200320032903d00837035002402003280234450d00200110230b200341a0036a41066a200341f0086a41a40210a1051a200341f0006a200341a0036a41aa0210a1051a200341980b6a41176a2201200341d0006a41176a280000360000200341980b6a41106a2202200341d0006a41106a290300370300200341980b6a41086a2204200341d0006a41086a290300370300200320032903503703980b20034190066a200341f0006a41066a41a40210a1051a20034190066a41a4026a20053a0000200341b5086a20032903980b370000200341bd086a2004290300370000200341c5086a2002290300370000200341cc086a200128000036000020032802a006210541002101200341a8066a280200220641014b0d0220060e020403040b02402003280234450d00200110230b41e3c5c6002102410d2101418080282104410321080c060b024020032802f40d41ffffff1f71450d00200110230b41f0c5c6002102410c2101418080242104410321080c050b20062102034020012002410176220420016a2208200520084105746a280200201c4b1b2101200220046b220241014b0d000b0b200520014105746a22022802002204201c460d01200620012004201c496a2201490d040b02402006200341a4066a280200470d0020034190066a41106a2006410110970120032802a00621050b200520014105746a220241206a2002200620016b41057410a2051a200241186a200c370300200241106a201a3703002002200a3703082002201c3602002003200641016a3602a8060c050b200620014d0d03200520014105746a220141086a2104024020012903084201520d00200341f00d6a200341f0056a200341d0056a200141106a290300200141186a290300410010fe020b2004200a3703002002201c360200200141186a200c370300200141106a201a3703000c040b41022108410021040b20004100360204200041146a2001360200200041106a20023602002000410c6a20044180803c7120087241802872360200410121010c120b200120061038000b2001200641b08bc7001030000b200341f00d6a20034190066a41c00210a1051a200341f0056a200341f00d6a109405200341f00d6a41086a41053a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a2903003700002003419c0e6a201c3602002003410a3a00f00d200341f00d6a10e0010c0c0b410221040240024020022d00000d0020022d00014101470d00200141086a2903002109200141046a2802002108200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211b20032002411a6a2901003703880e200320013a00870e200320043a00860e200320053b01840e200320063a00830e200320073a00820e2003200d3b01800e2003200e3a00ff0d2003200f3a00fe0d200320103b01fc0d200320113a00fb0d200320123a00fa0d200320133b01f80d200320143a00f70d200320153a00f60d200320163b01f40d200320173a00f30d200320183a00f20d2003201b3b01f00d200341f0006a109105410321042003280270210102402003280278220520084d0d00200120084106746a22022903004201520d000240200341f00d6a200241206a2202460d002002200341f00d6a412010a3050d010b200120084106746a2009370318410421040b2003280274210841f4c7c600ad4280808080800184100c220229000021092002290008210a2002102341a084c700ad4280808080a00184100c2202290000210b2002290008210c200210232003200c3702a8062003200b3702a0062003200a370298062003200937029006200341a0036a2001200510d40220034190066aad428080808080048420033502a80342208620032802a0032202ad84100e024020032802a403450d00200210230b0240200841ffffff1f71450d00200110230b4100210120044104460d010b200041146a410c360200200041106a41f0c5c6003602002000410c6a20044180a82472360200410121010b200041003602040c0e0b410221040240024020022d00000d0020022d00014101470d00200141196a2900002109200141186a2d0000211c200141176a2d0000211d200141156a2f0000211f200141146a2d00002120200141136a2d0000212c200141116a2f0000212d200141106a2d0000212e2001410f6a2d0000212f2001410d6a2f000021302001410c6a2d000021312001410b6a2d00002132200141096a2f00002133200141086a2d00002134200141076a2d00002135200141056a2f00002136200141046a2d00002137200141036a2d00002138200141246a280200210420012f00012139200241196a2d00002101200241186a2d00002108200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211b20032002411a6a2901003703880e200320013a00870e200320083a00860e200320053b01840e200320063a00830e200320073a00820e2003200d3b01800e2003200e3a00ff0d2003200f3a00fe0d200320103b01fc0d200320113a00fb0d200320123a00fa0d200320133b01f80d200320143a00f70d200320153a00f60d200320163b01f40d200320173a00f30d200320183a00f20d2003201b3b01f00d200341f0006a109105200328027021020240024002402003280278220820044d0d00200220044106746a22012903004201510d010b4103210420034190066a21050c010b200320093702a8062003201c3a00a7062003201d3a00a6062003201f3b01a406200320203a00a3062003202c3a00a2062003202d3b01a0062003202e3a009f062003202f3a009e06200320303b019c06200320313a009b06200320323a009a06200320333b019806200320343a009706200320353a009606200320363b019406200320373a009306200320383a009206200320393b0190060240200341f00d6a200141206a2201460d002001200341f00d6a412010a305450d004103210420034190066a21050c010b200120343a0007200120353a0006200120363b0104200120373a0003200120383a0002200120393b01002001202e3a000f2001202f3a000e200120303b010c200120313a000b200120323a000a2001201c3a00172001201d3a00162001201f3b0114200120203a00132001202c3a0012200220044106746a220120333b01282001202d3b0130200120093703384104210420034190066a21050b2003280274210641f4c7c600ad4280808080800184100c22012900022109200128000a210720012f000e210d20012f0000210e2001102341a084c700ad4280808080a00184100c2201290000210a2001290008210b200110232005200e3b01002003200b3702a8062003200a3702a0062003200d3b019e062003200736019a062003200937019206200341a0036a2002200810d40220034190066aad428080808080048420033502a80342208620032802a0032201ad84100e024020032802a403450d00200110230b0240200641ffffff1f71450d00200210230b4100210120044104460d010b200041146a410c360200200041106a41f0c5c6003602002000410c6a20044180a82472360200410121010b200041003602040c0d0b410221040240024020022d00000d0020022d00014101470d00200141106a2903002109200141086a290300210a200141046a2802002108200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211b20032002411a6a2901003703880e200320013a00870e200320043a00860e200320053b01840e200320063a00830e200320073a00820e2003200d3b01800e2003200e3a00ff0d2003200f3a00fe0d200320103b01fc0d200320113a00fb0d200320123a00fa0d200320133b01f80d200320143a00f70d200320153a00f60d200320163b01f40d200320173a00f30d200320183a00f20d2003201b3b01f00d200341f0006a109105410321042003280270210102402003280278220520084d0d00200120084106746a22022903004201520d000240200341f00d6a200241206a2208460d002008200341f00d6a412010a3050d010b200241086a2202200a37030020022009370308410421040b2003280274210841f4c7c600ad4280808080800184100c220229000021092002290008210a2002102341a084c700ad4280808080a00184100c2202290000210b2002290008210c200210232003200c3702a8062003200b3702a0062003200a370298062003200937029006200341a0036a2001200510d40220034190066aad428080808080048420033502a80342208620032802a0032202ad84100e024020032802a403450d00200210230b0240200841ffffff1f71450d00200110230b4100210120044104460d010b200041146a410c360200200041106a41f0c5c6003602002000410c6a20044180a82472360200410121010b200041003602040c0c0b4102210402400240024020022d00000d0020022d00014101470d00200141046a280200210d200241196a2d00002101200241186a2d00002104200241166a2f01002108200241156a2d00002105200241146a2d00002106200241126a2f01002107200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211b20032002411a6a29010037038806200320013a008706200320043a008606200320083b018406200320053a008306200320063a008206200320073b0180062003200e3a00ff052003200f3a00fe05200320103b01fc05200320113a00fb05200320123a00fa05200320133b01f805200320143a00f705200320153a00f605200320163b01f405200320173a00f305200320183a00f2052003201b3b01f005200341d0056a200341f0056a109205200341f00d6a20032802d005220120032802d805109305200341b80b6a200341f00d6a41a40210a1051a200341d0086a41086a22022003419d106a290000370300200341d0086a41106a2204200341a5106a290000370300200341d0086a41176a2208200341ac106a28000036000020032003290095103703d0080240024002400240024020032d00941022054102460d00200341f0086a200341b80b6a41a40210a1051a200341d0006a41176a2008280000360000200341d0006a41106a2004290300370300200341d0006a41086a2002290300370300200320032903d008370350024020032802d405450d00200110230b200341a0036a41066a200341f0086a41a40210a1051a200341f0006a200341a0036a41aa0210a1051a200341980b6a41176a2201200341d0006a41176a280000360000200341980b6a41106a2202200341d0006a41106a29030037030041082108200341980b6a41086a2204200341d0006a41086a290300370300200320032903503703980b20034190066a200341f0006a41066a41a40210a1051a20034190066a41a4026a20053a0000200341b5086a20032903980b370000200341bd086a2004290300370000200341c5086a2002290300370000200341cc086a200128000036000041cfc6c600210541808004210620032802a006210e41002101200341a8066a280200220f41014b0d01200f0e020302030b024020032802d405450d00200110230b41a9c6c6002105410a2108418080142106410321040c050b200f2102034020012002410176220420016a2207200e20074105746a280200200d4b1b2101200220046b220241014b0d000b0b200e20014105746a280200200d470d00200f20014d0d04200e20014105746a220241186a2903002109200241106a290300210a2002290308210b2002200241206a2001417f73200f6a41057410a2051a2003200f417f6a3602a806200b4201510d01410e2108418cc6c60021054180801c21060b0240200341a4066a28020041ffffff3f71450d00200e10230b200341ac066a108f05410321040c020b2003200a370370200320093703780240200a200984500d002003200341f0056a3602b80b200341a0036a200341f0056a200341f0006a200341b80b6a10ff0220032903a0034201520d0020032903a8032109200341a80e6a200341a0036a41106a290300370300200341a00e6a2009370300200341f00d6a41086a41003a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a200341f0056a41106a290300370000200341910e6a20034188066a290300370000200341023a00f00d200341f00d6a10e0010b200341f00d6a20034190066a41c00210a1051a200341f0056a200341f00d6a109405200341f00d6a41086a41043a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a2903003700002003419c0e6a200d3602002003410a3a00f00d200341f00d6a10e0010c0b0b410021060b20004100360204200041146a2008360200200041106a20053602002000410c6a20064180801c7120047241802872360200410121010c0c0b2001200f103b000b410221040240024002400240024002400240024020022d00000d0020022d00014101470d00200141106a2903002109200141086a290300210a200141046a2802002107200241196a2d00002101200241186a2d00002104200241166a2f01002108200241156a2d00002105200241146a2d00002106200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211b20032002411a6a29010037038806200320013a008706200320043a008606200320083b018406200320053a008306200320063a0082062003200d3b0180062003200e3a00ff052003200f3a00fe05200320103b01fc05200320113a00fb05200320123a00fa05200320133b01f805200320143a00f705200320153a00f605200320163b01f405200320173a00f305200320183a00f2052003201b3b01f005200341306a10910541bdc6c6002101410a210241142108410321042003280230210d200328023820074d0d05200d20074106746a22052903004201520d0502402005290308200a58200541106a290300220a200958200a2009511b0d0041b3c6c6002101410421060c050b200341d0056a200341f0056a109205200341f00d6a20032802d005220120032802d805109305200341b80b6a200341f00d6a41a40210a1051a200341d0086a41086a2003419d106a290000370300200341d0086a41106a200341a5106a290000370300200341d0086a41176a2206200341ac106a28000036000020032003290095103703d00802400240024002400240024020032d009410220e4102460d00200541086a210f200341f0086a200341b80b6a41a40210a1051a200341d0006a41176a2006280000360000200341d0006a41106a2202200341d0086a41106a290300370300200341d0006a41086a2204200341d0086a41086a290300370300200320032903d008370350024020032802d405450d00200110230b200341a0036a41066a200341f0086a41a40210a1051a200341f0006a200341a0036a41aa0210a1051a200341980b6a41176a2201200341d0006a41176a280000360000200341980b6a41106a22082002290300370300200341980b6a41086a22022004290300370300200320032903503703980b20034190066a200341f0006a41066a41a40210a1051a20034190066a41a4026a200e3a0000200341b5086a20032903980b370000200341bd086a2002290300370000200341c5086a2008290300370000200341cc086a2001280000360000200f41086a2903002109200f290300210a20032802a006210e41002101200341a8066a280200220541014b0d0120050e020302030b024020032802d405450d00200110230b41a9c6c6002101410521060c090b20052102034020012002410176220420016a2208200e20084105746a28020020074b1b2101200220046b220241014b0d000b0b200e20014105746a221028020022022007460d012005200120022007496a2201490d040b02402005200341a4066a280200470d0020034190066a41106a2005410110970120032802a006210e0b200e20014105746a220241206a2002200520016b41057410a2051a200241186a2009370300200241106a200a37030020024201370308200220073602002003200541016a3602a8060c010b200520014d0d030240200e20014105746a2211280208417f6a221241054b0d00419ac6c6002101410f210241032104411421084106210620120e06050000000005050b201141086a420137030020102007360200201141186a2009370300201141106a200a3703000b200f29030021092003200f41086a290300220a370378200320093703702003200341f0056a3602f00802402009200a844200510d002003200341f0056a3602b80b2003200341b80b6a3602f80d2003200341f0086a3602f40d2003200341f0006a3602f00d200341a0036a200341f0056a200341f00d6a10fd020240024020032802a0034101470d00200341ac036a2802002102200341a8036a280200210120032d00a703210520032d00a603210620032d00a503210820032d00a40321040c010b410421040240200341a0036a41086a2903004201520d00200341a0036a41106a290300210920032802b80b2101200341a80e6a200341a0036a41186a290300370300200341a00e6a2009370300200341f00d6a41086a41003a0000200341f90d6a2001290000370000200341810e6a200141086a290000370000200341890e6a200141106a290000370000200341910e6a200141186a290000370000200341023a00f00d200341f00d6a10e0010b0b200441ff01714104470d040b200341f00d6a20034190066a41c00210a1051a200341f0056a200341f00d6a109405200341f00d6a41086a41033a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a2903003700002003419c0e6a20073602002003410a3a00f00d200341f00d6a10e001200328023441ffffff1f71450d0f200d10230c0f0b0c060b200120051038000b2001200541a08bc7001030000b0240200341a4066a28020041ffffff3f71450d00200e10230b200341ac066a108f050c020b0c010b410321060b200328023441ffffff1f71450d00200d10230b20004100360204200041146a2002360200200041106a20013602002000410c6a2005411874200641ff017141107472200841ff017141087472200441ff017172360200410121010c0a0b0240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002108200241156a2d00002105200241146a2d00002106200241126a2f01002107200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211820032002411a6a29010037038806200320013a008706200320043a008606200320083b018406200320053a008306200320063a008206200320073b0180062003200d3a00ff052003200e3a00fe052003200f3b01fc05200320103a00fb05200320113a00fa05200320123b01f805200320133a00f705200320143a00f605200320153b01f405200320163a00f305200320173a00f205200320183b01f00520034190066a200341f0056a109505200341f00d6a20032802900622012003280298062202109605024020032802800e2208450d002002ad4220862001ad8410110b20032903f00d210920032802840e2104200341f80d6a290300210a200341880e6a280200210e0240200328029406450d00200110230b200341e00d6a200341f0056a109205200341f00d6a20032802e00d220220032802e80d2206109305024020032d009410220141024622050d002006ad4220862002ad8410110b200341b80b6a200341f00d6a41a40210a1051a200341980b6a41176a2206200341ac106a280000360000200341980b6a41106a2207200341a5106a290000370300200341980b6a41086a220d2003419d106a29000037030020032003290095103703980b200341f00d6a200341b80b6a41a40210a1051a200341d0056a41176a220f2006280000360000200341d0056a41106a22062007290300370300200341d0056a41086a2207200d290300370300200320032903980b3703d005024020050d00200341f0086a200341f00d6a41a40210a1051a200341d0086a41176a200f280000360000200341d0086a41106a2006290300370300200341d0086a41086a2007290300370300200320032903d0053703d0080b024020032802e40d450d00200210230b2004410020081b21052008410120081b2106024020014102460d002009420020081b210c200a420020081b211a200341a0036a41066a200341f0086a41a40210a1051a200341d0006a41176a2202200341d0086a41176a280000360000200341d0006a41106a2204200341d0086a41106a290300370300200341d0006a41086a2207200341d0086a41086a290300370300200320032903d008370350200341f0006a200341a0036a41aa0210a1051a200341306a41176a220d2002280000360000200341306a41106a22022004290300370300200341306a41086a220420072903003703002003200329035037033020034190066a200341f0006a41066a41a40210a1051a20034190066a41a4026a20013a0000200341b5086a2003290330370000200341bd086a2004290300370000200341c5086a2002290300370000200341cc086a200d28000036000020034190066a41086a2903002119200329039006210b20032802a006210702400240200341a8066a28020041057422020d00420021094200210a0c010b200741106a2101420021094200210a0340200141086a2903004200200141786a29030042015122041b200a7c2001290300420020041b220a20097c2209200a54ad7c210a200141206a2101200241606a22020d000b0b200e410020081b21012019201a7c200b200c7c220c200b54ad7c200a7c210a200c20097c2209200c54ad210b0240200341a4066a28020041ffffff3f71450d00200710230b200a200b7c210a200341ac066a108f05024020014105742202450d00200621010340200341f00d6a2001108b0520033502f80d42208620032802f00d2204ad841011024020032802f40d450d00200410230b200141206a2101200241606a22020d000b0b200320093703a0032003200a3703a80302402009200a84500d002003200341f0056a36027020034190066a200341f0056a200341a0036a200341f0006a10ff022003290390064201520d00200329039806210b200341a80e6a20034190066a41106a290300370300200341a00e6a200b370300200341f00d6a41086a41003a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a200341f0056a41106a290300370000200341910e6a20034188066a290300370000200341023a00f00d200341f00d6a10e0010b200341a80e6a200a370300200341a00e6a2009370300200341f00d6a41086a41013a0000200341f90d6a20032903f005370000200341810e6a200341f0056a41086a290300370000200341890e6a20034180066a290300370000200341910e6a20034188066a2903003700002003410a3a00f00d200341f00d6a10e001200541ffffff3f71450d09200610230c090b0240200541ffffff3f71450d00200610230b4183a80821010c010b4182a80821010b20004100360204200041146a4108360200200041106a41c7c6c6003602002000410c6a2001360200410121010c090b200341f00d6a200341f0086a10950520033502f80d42208620032802f00d2201ad841011024020032802f40d450d00200110230b200e41ffffff3f71450d010b201d10230b201e42ffffff3f83500d03201f10230c030b102a000b0b02402008450d00200841c4006c2102200541286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010230b200141c4006a2101200241bc7f6a22020d000b0b02402004450d00200441c4006c450d00200510230b200641ff017122014104460d0020004100360204200041146a200f360200200041106a20103602002000410c6a200e411874200741ff017141107472200d41ff017141087472200172360200410121010c030b410021010b200020013602040c010b20004100360204200041146a2002360200200041106a20043602002000410c6a2008411874200541ff017141107472200641ff017141087472200141ff017172360200410121010b20002001360200200341b0106a24000bf06304147f017e037f027e230041b0046b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0a00010203040506070809000b200341b4016a4101360200200342013702a401200341a4c5c6003602a001200341043602f403200341cccec6003602f0032003200341f0036a3602b001200341a0016a419ca8c700103a000b200141246a2802002104200341c0006a41186a200141196a290000370300200341c0006a41106a200141116a290000370300200341c0006a41086a200141096a29000037030020032001290001370340410a2105410221060240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a290100370378200320013a0077200320063a0076200320073b0174200320083a0073200320093a00722003200a3b01702003200b3a006f2003200c3a006e2003200d3b016c2003200e3a006b2003200f3a006a200320103b0168200320113a0067200320123a0066200320133b0164200320143a0063200320153a0062200320163b016020034198046a200341e0006a10a604200341a0016a200328029804220120032802a00410e101200341f0036a41086a2202200341aa016a290100370300200341f0036a41106a2206200341b2016a290100370300200341f0036a41176a2207200341b9016a290000370000200320032901a2013703f0030240024020032d00a0014101470d0020032d00a101210820034180016a41176a200729000037000020034180016a41106a200629030037030020034180016a41086a2002290300370300200320032903f003370380010240200328029c04450d00200110230b200341d9036a20034180016a41086a290300370000200341e1036a20034180016a41106a290300370000200341d0036a41186a20034197016a290000370000200320083a00d00320032003290380013700d103200341d0036a200341c0006a412010a3050d01200341a0016a200441b00210a1051a200341fa036a200341c0006a41086a29030037010020034182046a200341c0006a41106a2903003701002003418a046a200341c0006a41186a29030037010020034180023b01f003200320032903403701f20320034180016a200341a0016a200341f0036a10cf022003280280014101460d030c240b200328029c04450d00200110230b410321060b200410b40241b6edc300210941802a210841002102410021070c220b2003280284014102460d2020034194016a280200210520034190016a28020021092003418c016a2802002206418080807871210220064180807c712107200641807e7121080c210b200341d0036a41186a200141196a290000370300200341d0036a41106a200141116a290000370300200341d0036a41086a200141096a290000370300200320012900013703d003200341f0036a41186a200141396a290000370300200341f0036a41106a200141316a290000370300200341f0036a41086a200141296a2900003703002003200141216a2900003703f00320022d000120022d0000410047720d07200341a0016a200341f0036a10a60420033502a801211720032802a0012102412010212201450d0c200120032903d003370000200141186a200341d0036a41186a2204290300370000200141106a200341d0036a41106a2206290300370000200141086a200341d0036a41086a220529030037000020174220862002ad842001ad4280808080800484100e20011023024020032802a401450d00200210230b200341c2016a20032903f003370100200341aa016a2005290300370100200341b2016a2006290300370100200341ba016a2004290300370100200341ca016a200341f0036a41086a290300370100200341d2016a200341f0036a41106a290300370100200341da016a200341f0036a41186a2903003701002003418b083b01a001200320032903d0033701a201200341a0016a10e0010c150b200141086a2802002107200141046a28020021094102210620022d00000d1b20022d00014101470d1b2001410c6a2802002118200141106a2802002119200141026a2f0100211a200241196a2d00002101200241186a2d00002104200241166a2f01002106200241156a2d00002105200241146a2d00002108200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703e803200320013a00e703200320043a00e603200320063b01e403200320053a00e303200320083a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341a0016a200341d0036a10a704200341106a20032802a001220120032802a801419ca8c70041004100108c0120032802102102024020032802a401450d00200110230b410121014103210641152105024020024101470d0041f3ecc300210441122102410621010c1d0b0240201a0d0041de95c6002104410d21020c1d0b41a6edc30021044110210241022101024020180d000c1d0b02402018201a4f0d000c1d0b410321060240201841094d0d00419cedc3002104410a2102410321010c1d0b201841016a210a2009210802400340200a417f6a220a4102490d012008200841206a220b412010a305210c4193edc30021044109210241042101200b2108200c4100480d000b0c1d0b20032018ad4200428090cad2c60e420010a60520032003290300221b4280a0e5b9c291017c22173703602003200341086a2903002017201b54ad7c221b3703682003200341d0036a360280012003200341d0036a3602402003200341c0006a3602a801200320034180016a3602a4012003200341e0006a3602a001200341f0036a200341d0036a200341a0016a10fd020240024020032802f0034101470d00200341fc036a2802002102200341f0036a41086a280200210420032d00f703210820032d00f603210120032d00f503210520032d00f40321060c010b410421060240200341f0036a41086a2903004201520d00200341f0036a41106a290300211c20032802402101200341d8016a200341f0036a41186a290300370300200341d0016a201c370300200341a0016a41086a41003a0000200341a9016a2001290000370000200341b1016a200141086a290000370000200341b9016a200141106a290000370000200341c1016a200141186a290000370000200341023a00a001200341a0016a10e0010b0b200641ff01714104470d1c200341f0036a200341d0036a10a70420033502f803211c20032802f003210e200341003602a801200342013703a001410410212201450d1a200341043602a401200320013602a00120012019360000200341043602a80120014104411410252201450d1a200120173700042001410c6a201b370000200320013602a00120034294808080c0023702a4012018200341a0016a10612018410574210c410020032802a801220b6b210d20032802a401210641002105410021010340200b20016a210802400240200d20066a20056a4120490d0020032802a00121022006210a0c010b200841206a22022008490d0e200641017422042002200420024b1b220a4100480d0e0240024020060d000240200a0d00410121020c020b200a102122020d010c1e0b20032802a00121022006200a460d0020022006200a10252202450d1d0b2003200a3602a401200320023602a001200a21060b2002200b6a20016a2202200920016a2204290000370000200241186a200441186a290000370000200241106a200441106a290000370000200241086a200441086a2900003700002003200841206a3602a801200541606a2105200c200141206a2201470d000b200b20016a210602400240200a200b6b20016b4102490d0020032802a0012102200a21040c010b200641026a22022006490d0d200a41017422042002200420024b1b22044100480d0d02400240200a0d00024020040d00410121020c020b200410212202450d1d0c010b20032802a0012102200a2004460d002002200a200410252202450d1c0b200320043602a401200320023602a0010b2002200b6a20016a201a3b0000201c422086200ead84200641026aad4220862002ad84100e02402004450d00200210230b024020032802f403450d00200e10230b0240200741ffffff3f71450d00200910230b200341aa016a200341d8036a290300370100200341b2016a200341e0036a290300370100200341ba016a200341e8036a2903003701002003410b3b01a001200320032903d0033701a201200341a0016a10e0010c140b200341e0006a41186a200141196a290000370300200341e0006a41106a200141116a290000370300200341e0006a41086a200141096a29000037030020032001290001370360410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002106200241156a2d00002105200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703e803200320013a00e703200320043a00e603200320063b01e403200320053a00e303200320073a00e203200320083b01e003200320093a00df032003200a3a00de032003200b3b01dc032003200c3a00db032003200d3a00da032003200e3b01d8032003200f3a00d703200320103a00d603200320113b01d403200320123a00d303200320133a00d203200320143b01d003200341a0016a200341e0006a10a704200341286a20032802a001220120032802a801419ca8c70041004100108c0120032802282106024020032802a401450d00200110230b410e21024103210141152104024020064101460d004185edc3002106410521050c020b200341a0016a200341e0006a200341d0036a10a804200341206a20032802a001220520032802a801419ca8c70041004100108c0120032802202106024020032802a401450d00200510230b024020064101470d0041e5ecc3002106410721050c020b2003420037034820034280a0e5b9c291013703402003200341d0036a360298042003200341d0036a36028001200320034180016a3602a801200320034198046a3602a4012003200341c0006a3602a001200341f0036a200341d0036a200341a0016a10fd020240024020032802f0034101470d00200341fc036a2802002102200341f8036a280200210620032d00f703210720032d00f603210520032d00f503210420032d00f40321010c010b410421010240200341f0036a41086a2903004201520d00200341f0036a41106a29030021172003280280012102200341d8016a200341f0036a41186a290300370300200341d0016a2017370300200341a0016a41086a41003a0000200341a9016a2002290000370000200341b1016a200241086a290000370000200341b9016a200241106a290000370000200341c1016a200241186a290000370000200341023a00a001200341a0016a10e0010b0b200141ff01714104470d01200341a0016a41186a4200370300200341a0016a41106a22044200370300200341a0016a41086a22014200370300200342003703a00141e4dec400ad4280808080e00084100c220229000021172001200241086a290000370300200320173703a0012002102341f3dec400ad4280808080e00084100c22022900002117200341c0006a41086a2206200241086a2900003703002003201737034020021023200420032903402217370300200341f0036a41086a2001290300370300200341f0036a41106a2017370300200341f0036a41186a2006290300370300200320032903a0013703f003200341186a200341f0036a412010cd01200328021c21022003280218210441002101200341bc016a4100360200200342003703a80120034280a0e5b9c291013703a001200342013702b40120032002410020041b3602b001200341f0036a200341e0006a200341d0036a10a80420032802f0032102200320032802f80336024420032002360240200341a0016a200341c0006a10a304024020032802f403450d00200210230b200341aa016a200341e0006a41086a290300370100200341b2016a200341e0006a41106a290300370100200341ba016a200341e0006a41186a290300370100200341c2016a20032903d003370100200341ca016a200341d0036a41086a290300370100200341d2016a200341d0036a41106a290300370100200341da016a200341d0036a41186a2903003701002003418b023b01a001200320032903603701a201200341a0016a10e001200041003602040c210b0b20004100360204200041146a2002360200200041106a20063602002000410c6a2007411874200541ff017141107472200441ff017141087472200141ff0171723602000c1c0b200341c0006a41186a200141196a290000370300200341c0006a41106a200141116a290000370300200341c0006a41086a200141096a29000037030020032001290001370340200341e0006a41186a200141396a290000370300200341e0006a41106a200141316a290000370300200341e0006a41086a200141296a2900003703002003200141216a2900003703604102210120022d00000d1620022d00014101470d16200241196a2d00002101200241186a2d00002104200241166a2f01002106200241156a2d00002105200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703e803200320013a00e703200320043a00e603200320063b01e403200320053a00e303200320073a00e203200320083b01e003200320093a00df032003200a3a00de032003200b3b01dc032003200c3a00db032003200d3a00da032003200e3b01d8032003200f3a00d703200320103a00d603200320113b01d403200320123a00d303200320133a00d203200320143b01d003200341f0036a200341c0006a10a704200341a0016a20032802f003220420032802f80310a90420032802f40321020240024020032802b4012207450d00200341bc016a280200210120032802b801210902402002450d00200410230b20034180016a200341c0006a200341e0006a10a804200341a0016a200328028001220220032802880110aa0441082104200341a0016a41086a290300211b20032903a001211c20032903b801211720032802b401210820032802b00121060240200328028401450d00200210230b20080d0141dbecc3002105410a21060c170b02402002450d00200410230b4185edc3002105410e210641032101410521040c180b20034188046a20173703002003201c3703f003200320083602840420032006360280042003201b3703f8032017a7210a41d2ecc30021054100210202400240200141014b0d00410921044109210620010e021101110b03402001410176220420026a22062002200720064105746a200341d0036a412010a3054101481b2102200120046b220141014b0d000b0b4109210441092106200720024105746a200341d0036a412010a3050d0f4100210102402017422088a7220541014b0d00024020050e020010000b200341a0016a41186a200341d0036a41186a290300370300200341a0016a41106a200341d0036a41106a290300370300200341a0016a41086a200341d0036a41086a290300370300200320032903d0033703a00141002104200341a0016a21020c120b2005210203402002410176220420016a22062001200820064105746a200341d0036a412010a3054101481b2101200220046b220241014b0d000c0f0b0b200341e0006a41186a200141196a290000370300200341e0006a41106a200141116a290000370300200341e0006a41086a200141096a29000037030020032001290001370360410e210441052106410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002105200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703e803200320013a00e703200320053a00e603200320073b01e403200320083a00e303200320093a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341f0036a200341e0006a10a704200341a0016a20032802f003220120032802f80310a904024020032802b4012205450d0020032802b801210720032802b0012108200341c0016a2f01002109024020032802f403450d00200110230b200341f0036a200341e0006a200341d0036a10a804200341a0016a20032802f003220220032802f80310aa0420032903b801211720032802b401210120032802b0012106024020032802f403450d00200210230b20010d0241dbecc3002102410a2104410821060c0e0b024020032802f403450d00200110230b410321010b4185edc30021020c0d0b200341a0016a200341d0036a10a604200341386a20032802a001220420032802a801419ca8c70041004100108c0120032802382102024020032802a401450d00200410230b024020024101470d00410c21044199ecc3002102410f21060c0b0b200341a0016a41186a4200370300200341a0016a41106a220b420037030041082104200341a0016a41086a22024200370300200342003703a00141e4dec400ad4280808080e00084100c220a290000211b2002200a41086a2900003703002003201b3703a001200a102341f3dec400ad4280808080e00084100c220a290000211b200341c0006a41086a220c200a41086a2900003703002003201b370340200a1023200b2003290340221b370300200341f0036a41086a2002290300370300200341f0036a41106a201b370300200341f0036a41186a200c290300370300200320032903a0013703f003200341306a200341f0036a412010cd010240200620086a220220064f0d0041f4acc5002102410e21060c0b0b024020022003280234410020032802301b4d0d00410b210441c7ecc3002102410a21060c0b0b024020092017422088a74d0d004109210441b0ecc3002102410c21060c0b0b200341a0016a200341d0036a10a60420033502a801211b20032802a0012104412010212202450d0820022003290360370000200241186a200341e0006a41186a2206290300370000200241106a200341e0006a41106a2208290300370000200241086a200341e0006a41086a2209290300370000201b4220862004ad842002ad4280808080800484100e20021023024020032802a401450d00200410230b200341d0036a109602200341aa016a2009290300370100200341b2016a2008290300370100200341ba016a2006290300370100200341c2016a20032903d003370100200341ca016a200341d0036a41086a290300370100200341d2016a200341d0036a41106a290300370100200341da016a200341d0036a41186a2903003701002003418b083b01a001200320032903603701a201200341a0016a10e0010240201742ffffff3f83500d00200110230b200741ffffff3f71450d11200510230c110b200341d0036a41186a200141196a290000370300200341d0036a41106a200141116a290000370300200341d0036a41086a200141096a290000370300200320012900013703d0030240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002106200241156a2d00002105200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a29010037038804200320013a008704200320043a008604200320063b018404200320053a008304200320073a008204200320083b018004200320093a00ff032003200a3a00fe032003200b3b01fc032003200c3a00fb032003200d3a00fa032003200e3b01f8032003200f3a00f703200320103a00f603200320113b01f403200320123a00f303200320133a00f203200320143b01f003200341e0006a200341f0036a200341d0036a10a804200341a0016a200328026022012003280268220210aa04024020032802b4012204450d002002ad4220862001ad841011200341a0016a41086a290300211720032903a001211b20032903b801211c02402003280264450d00200110230b41002101200341a0016a200341d0036a200341f0036a201b2017410010fe02200341aa016a200341f0036a41086a290300370100200341b2016a200341f0036a41106a290300370100200341ba016a200341f0036a41186a290300370100200341c2016a20032903d003370100200341ca016a200341d0036a41086a290300370100200341d2016a200341d0036a41106a290300370100200341da016a200341d0036a41186a2903003701002003418b063b01a001200320032903f0033701a201200341a0016a10e001201c42ffffff3f83500d1420041023200041003602040c1f0b02402003280264450d00200110230b4183aa2021010c010b4182aa2021010b20004100360204200041146a410a360200200041106a41dbecc3003602002000410c6a20013602000c190b41022101024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002106200241156a2d00002105200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703e803200320013a00e703200320043a00e603200320063b01e403200320053a00e303200320073a00e203200320083b01e003200320093a00df032003200a3a00de032003200b3b01dc032003200c3a00db032003200d3a00da032003200e3b01d8032003200f3a00d703200320103a00d603200320113b01d403200320123a00d303200320133a00d203200320143b01d00341aeb9c400ad4280808080800184100c22012900002117200341f0036a41086a200141086a290000370300200320173703f0032001102341a0bcc400ad4280808080800284100c220128000c210820012f000a210920012f0008210a2001280004210b2001280000210c20011023412010212201450d07200120032903d003370000200141186a200341d0036a41186a290300370000200141106a200341d0036a41106a290300370000200141086a200341d0036a41086a29030037000020032001ad4280808080800484100d22022900003703800120021023200341ac016a200141206a360200200341003a00b001200320013602a801200320034180016a41086a3602a401200320034180016a3602a001200341c0006a200341a0016a1065200110232003280248220541206a2202417f4c0d0320032802402107024002402002450d00200210212201450d092002410f4d0d01200221060c070b200241017422014110200141104b1b220610212201450d170c060b200241017422044110200441104b1b220641004e0d040c080b410021060c050b200341e0006a41186a200141196a290000370300200341e0006a41106a200141116a290000370300200341e0006a41086a200141096a290000370300200320012900013703600240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002106200241156a2d00002105200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703e803200320013a00e703200320043a00e603200320063b01e403200320053a00e303200320073a00e203200320083b01e003200320093a00df032003200a3a00de032003200b3b01dc032003200c3a00db032003200d3a00da032003200e3b01d8032003200f3a00d703200320103a00d603200320113b01d403200320123a00d303200320133a00d203200320143b01d003200341c0006a200341d0036a10a604200341a0016a20032802402202200328024810e1010240024020032d00a0014101460d0041002101200341003a00f0030c010b200341f0036a41196a200341a0016a41196a290000370000200341f0036a41096a200341a0016a41096a290000370000200341f0036a41116a200341a0016a41116a29000037000041012101200341013a00f003200320032900a1013700f1030b02402003280244450d00200210230b200341b9016a200341f8006a290300370000200341b1016a200341f0006a290300370000200341a9016a200341e8006a290300370000200320032903603700a101200341013a00a00102402001450d00200341f0036a410172200341a0016a410172412010a3050d00200341a0016a200341d0036a10a60420033502a80142208620032802a0012201ad841011024020032802a401450d00200110230b200341d0036a10a1020c110b41832a21010c010b41822a21010b20004100360204200041146a410a360200200041106a41b6edc3003602002000410c6a20013602000c170b2000410c6a4102360200200041003602040c160b1032000b20022006460d0020012002200610252201450d110b200120032903f003370000200141086a200341f0036a41086a2903003700000240024020064170714110460d00200621040c010b200641017422044120200441204b1b22044100480d0320062004460d0020012006200410252201450d110b2001200836001c200120093b001a2001200a3b00182001200b3600142001200c36001002400240200441606a2005490d00200421060c010b2005415f4b0d03200441017422062002200620024b1b22064100480d0320042006460d0020012004200610252201450d110b200141206a2007200510a1051a02402003280244450d00200710230b0240024020020d0041012104410021050c010b20022105200210212204450d020b20042001200210a1052104200341f4006a2002360200200341f0006a20063602002003200136026c200320023602682003200536026420032004360260200341a0016a2002ad4220862001ad841019108b0102400240024020032802a0012201450d0020032802a401210202400240200341a8016a280200220420032802682206490d00200328026022052001460d0120052001200610a305450d010b2002450d01200110230c010b200341ec006a2106200320043602a0042003200236029c042003200136029804200341a0016a2001200410aa04024020032802b40122010d0020034100360288012003420137038001200341cc006a4112360200200320063602a404200341123602442003200341a8046a3602482003200341a4046a360240200320034198046a3602a804200320034180016a3602ac0420034184046a4102360200200342023702f403200341c8e3c4003602f0032003200341c0006a36028004200341ac046a4184a5c200200341f0036a10311a20033502880142208620033502800184100a200328028401450d0020032802800110230b200341f0036a41086a220220034198046a41086a28020036020020032003290398043703f00302402003280270450d00200328026c10230b200620032903f003370200200641086a200228020036020020010d010b200341f0036a200341d0036a10a704200341a0016a20032802f003220220032802f803220410a904024020032802b4012201450d002004ad4220862002ad8410110b20032802f403210402402001450d00200341a8016a290300211720032903a001211b20032802b801210602402004450d00200210230b2003201b370340200320173703480240201b201784500d002003200341d0036a36028001200341f0036a200341d0036a200341c0006a20034180016a10ff0220032903f0034201520d0020032903f8032117200341d8016a200341f0036a41106a290300370300200341d0016a2017370300200341a0016a41086a41003a0000200341a9016a20032903d003370000200341b1016a200341d0036a41086a290300370000200341b9016a200341d0036a41106a290300370000200341c1016a200341e8036a290300370000200341023a00a001200341a0016a10e0010b200341aa016a200341d8036a290300370100200341b2016a200341e0036a290300370100200341ba016a200341e8036a2903003701002003418b0a3b01a001200320032903d0033701a201200341a0016a10e0010240200641ffffff3f71450d00200110230b02402003280264450d00200328026010230b2003280270450d0d200328026c10230c0d0b02402004450d00200210230b410e21024185edc30021044180801421060c010b410b210241a5ecc300210441808034210620032802b80141ffffff3f71450d00200110230b02402003280264450d00200328026010230b02402003280270450d00200328026c10230b410321010b20004100360204200041146a2002360200200041106a20043602002000410c6a20064180803c7120017241802a723602000c120b1033000b102c000b201742ffffff3f83500d00200110230b0240200741ffffff3f71450d00200510230b410321010b20004100360204200041146a2004360200200041106a20023602002000410c6a200641107420017241802a723602000c0d0b200820014105746a200341d0036a412010a30522040d01410e210641b9ecc3002105410b21040b200a41ffffff3f71450d05200810230c050b200341a0016a41186a200341d0036a41186a290300370300200341a0016a41106a200341d0036a41106a290300370300200341a0016a41086a200341d0036a41086a290300370300200320032903d0033703a001200341a0016a21022004411f7620016a220420054b0d030b02402005200a470d0020034184046a20054101109a0120032802840421080b200820044105746a220141206a2001200520046b41057410a2051a200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200120022900003700002003200541016a36028c04200341a0016a41186a2202200341f0036a41186a290300370300200341a0016a41106a200341f0036a41106a290300370300200341a0016a41086a200341f0036a41086a290300370300200320032903f0033703a00120034180016a200341c0006a200341e0006a10a8042003280280012101200320032802880136029c042003200136029804200341a0016a20034198046a10a3040240200328028401450d00200110230b0240200228020041ffffff3f71450d0020032802b40110230b200341c2016a2003290360370100200341aa016a200341c0006a41086a290300370100200341b2016a200341c0006a41106a290300370100200341ba016a200341c0006a41186a290300370100200341ca016a200341e0006a41086a290300370100200341d2016a200341e0006a41106a290300370100200341da016a200341e0006a41186a2903003701002003418b043b01a001200320032903403701a201200341fa016a200341d0036a41186a290300370100200341f2016a200341d0036a41106a290300370100200341ea016a200341d0036a41086a290300370100200341e2016a20032903d003370100200341a0016a10e001200941ffffff3f71450d00200710230b410021010b200020013602040c0a0b200420051038000b41032101200941ffffff3f71450d01200710230c010b0b200041146a2006360200200041106a2005360200200041003602042000410c6a200441ff017141107420017241802a723602000c030b102a000b0b0240200741ffffff3f71450d00200910230b20004100360204200041146a2002360200200041106a20043602002000410c6a2008411874200141ff017141107472200541ff017141087472200641ff0171723602000b410121010c020b410421064100210241002107410021080b20041023410021010240200641ff017122044104460d00200041146a2005360200200041106a20093602002000410c6a20022007418080fc07717220084180fe037172200472360200410121010b200041003602040b20002001360200200341b0046a24000bb10101027f024020002802082201450d0020002802002100200141246c210103400240024020002d0000220241044b0d0002400240024020020e050400010204040b2000410c6a280200450d03200041086a28020010230c030b2000410c6a280200450d02200041086a28020010230c020b2000410c6a280200450d01200041086a28020010230c010b200041086a280200450d00200041046a28020010230b200041246a21002001415c6a22010d000b0b0bfb0201037f230041206b2203240002400240200241c4006c41046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b20034100360208200320043602042003200536020020022003106102402002450d00200241c4006c210203400240024020012d00004101460d00200341003a00102003200341106a410110622003200141046a2802003602102003200341106a410410620c010b200341013a00102003200341106a41011062412010212204450d042003422037021420032004360210200341106a200141016a41201062200328021421042003200328021022052003280218106202402004450d00200510230b0240200141216a2d00004101460d00200341003a00102003200341106a410110620c010b200341013a00102003200341106a410110622003200141226a412010620b200141c4006a2101200241bc7f6a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1032000b1033000bfd0102027f027e200028024021020240410410212203450d002003200236000020002d0044210220034104410810252203450d00200320023a0004200041086a29030021042000290300210520034108411510252203450d00200320053700052003410d6a2004370000200041186a29030021042000290310210520034115412a10252203450d00200320053700152003411d6a2004370000200041286a2903002104200029032021052003412a41d40010252203450d00200320053700252003412d6a2004370000200320002903303700352003413d6a200041386a29030037000020012902002003ad4280808080d00884100e200310230f0b102a000b98980207087f017e027f027e057f0a7e287f230041b0116b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200200541154b0d16200141046a210720050e160102030405060708090a0b0c0d0e0f10111213141517010b200041163602000c450b2006450d4320042d0001210520012003417e6a22083602042001200441026a360200200541094b0d43410a2109024002400240024002400240024002400240024020050e0a00010203040506070809000b20084104490d4c2004280002210620012003417a6a3602042001200441066a3602002006418194ebdc034f0d4c410121090c080b2002200110880120022802000d4b200728020020022802042204490d4b2004417f4c0d1e0240024020040d00410121060c010b200410272206450d3420072802002004490d4b20062001280200200410a1051a200128020422032004490d202001200320046b3602042001200128020020046a3602000b2006450d4b2004ad220a422086200a84220a422088a7210b200aa7210c410221090c070b20084108490d4a2004290002210a2001200341766a36020420012004410a6a360200200a422088a7210b200aa7210c410321090c060b200241086a200110880120022802080d492007280200200228020c2204490d492004417f4c0d1c0240024020040d00410121060c010b200410272206450d3220072802002004490d4920062001280200200410a1051a200128020422032004490d1f2001200320046b3602042001200128020020046a3602000b2006450d492004ad220a422086200a84220a422088a7210b200aa7210c410421090c050b200241106a200110880120022802100d48200728020020022802142204490d482004417f4c0d1b0240024020040d00410121060c010b200410272206450d3120072802002004490d4820062001280200200410a1051a200128020422032004490d1f2001200320046b3602042001200128020020046a3602000b2006450d482004ad220a422086200a84220a422088a7210b200aa7210c410521090c040b2008450d4720042d0002210520012003417d6a22073602042001200441036a360200200541014b0d47410021060240024020050e020100010b20074104490d482004350003210a2001200341796a22053602042001200441076a36020020054104490d482004350007210d2001200341756a36020420012004410b6a360200200d422086200a84210a410121060b200a422088a7210b200aa7210c410621090c030b200241286a200110880120022802280d46200228022c220c200728020041186e22042004200c4b1bad42187e220a422088a70d19200aa72204417f4c0d190240024020040d00410421060c010b200410212206450d2f0b41002105200241003602d80c200220063602d00c2002200441186e3602d40c02400240024002400240200c450d000340200241206a200110880120022802200d05200728020020022802242204490d052004417f4c0d1f0240024020040d004101210b0c010b20041027220b450d3520072802002004490d05200b2001280200200410a1051a200128020422032004490d242001200320046b3602042001200128020020046a3602000b200241186a200110880120022802180d032007280200200228021c2203490d032003417f4c0d1f0240024020030d00410121090c010b200310272209450d3520072802002003490d0320092001280200200310a1051a200128020422082003490d252001200820036b3602042001200128020020036a3602000b2004ad220a422086200a84210a2003ad220d422086200d84210d0240200520022802d40c470d00200241d00c6a2005410110b00120022802d00c210620022802d80c21050b2006200541186c6a2204200936020c2004200a3702042004200b360200200441106a200d3702002002200541016a22053602d80c200c417f6a220c0d000b0b2006450d4a20022902d40c220a422088a7210b200aa7210c410721090c060b200910230b2004450d010b200b10230b02402005450d00200541186c21042006210103400240200141046a280200450d00200128020010230b0240200141106a280200450d002001410c6a28020010230b200141186a2101200441686a22040d000b0b20022802d40c2201450d46200141186c450d460c450b200241d00c6a2001109a0320022802d00c2206450d4541082109200241d00c6a41086a280200210b20022802d40c210c0c010b200241306a200110880120022802300d44200728020020022802342204490d442004417f4c0d170240024020040d00410121060c010b200410272206450d2d20072802002004490d4420062001280200200410a1051a200128020422032004490d1e2001200320046b3602042001200128020020046a3602000b2006450d442004ad220a422086200a84220a422088a7210b200aa7210c410921090b200041003602002000410c6a2006360200200041086a2009360200200041106a200bad422086200cad84370200200041186a200241800f6a41980210a1051a0c440b02402006450d0020012003417e6a3602042001200441026a3602000b200041163602000c430b2006450d3f20042d0001210520012003417e6a22063602042001200441026a36020020050d3f2006450d3f20042d0002210520012003417d6a22073602042001200441036a360200024002400240200541037122064103460d000240024020060e03030001030b2007450d4320042d0003210620012003417c6a3602042001200441046a3602002006410874200572220141ffff0371418002490d43200141fcff0371410276ad210a0c030b20074103490d42200441056a2d0000210620042f0003210720012003417a6a3602042001200441066a3602002007200641107472410874200572220141808004490d422001410276ad210a0c020b02402005410276220c41044b0d0002400240200c0e050002020201000b20074104490d43200428000321052001200341796a3602042001200441076a3602002005418080808004490d432005ad210a0c030b20074108490d422004290003210a2001200341756a36020420012004410b6a360200200a42ffffffffffffffff00560d020c420b200c41046a220641084b0d412003417c6a2103200441046a2104410021054200210a03402003417f460d422004417f6a310000210d20012003360204200120043602002003417f6a2103200441016a2104200d2005410374413871ad86200a84210a200541016a220541ff01712006490d000b200a427f4128200c4103746b413871ad88580d410c010b2005410276ad210a0b20004102360200200041086a200a370300200041106a200241800f6a41a00210a1051a0c420b02402006450d0020042d0001210520012003417e6a22063602042001200441026a360200200541034b0d0002400240024002400240024020050e0400010203000b20064104490d052004280002210620012003417a6a3602042001200441066a36020041012105410021034200210a4200210d4200210e410021010c030b41002105200241003a00f00c2003417e6a210c417d210602400340200c2005460d01200241d00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00f00c2006417f6a21062007210520074120470d000b200320076b220f417e6a4104490d0520022d00ef0c210920022900e70c210a20022800e30c210320022800df0c210820022800db0c211020022800d70c211120022800d30c210620022f00d10c210c20022d00d00c210b41022105200420076a220741026a28000021042001200f417a6a3602042001200741066a360200200a4280808080808080807f83210e200a428080807883210d200341808080787121010c030b200541ff0171450d04200241003a00f00c0c040b20064104490d032004280002210620012003417a6a3602042001200441066a36020041032105410021034200210a4200210d4200210e4100210141002109410021040c010b41002105200241003a00f00c2003417e6a210c417d21060340200c2005460d02200241d00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00f00c2006417f6a21062007210520074120470d000b41042105200320076b220f417e6a4104490d0220022d00ef0c210920022900e70c210a20022800e30c210320022800df0c210820022800db0c211020022800d70c211120022800d30c210620022f00d10c210c20022d00d00c210b200420076a220741026a28000021042001200f417a6a3602042001200741066a360200200a4280808080808080807f83210e200a428080807883210d200341808080787121010b200041003b0026200041003a00252000200c3b00062000200b3a0005200020053a000420004103360200200041286a2004360200200041246a20093a0000200041146a2008360200200041106a20103602002000410c6a2011360200200041086a2006360200200041186a2001200341ffffff0771723602002000411c6a200e200d42808080f8ffffffff008384200a42ffffff0783843702002000412c6a200241800f6a41840210a1051a0c430b200541ff0171450d00200241003a00f00c0b200041163602000c410b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541034b0d00024002400240024020050e0400010203000b41002105200241003a00f00c2003417e6a21072003417d6a21030240034020072005460d01200241d00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00f00c2003417f6a21032006210520064120470d000b20022d00ef0c210b20022900e70c210a20022800e30c210920022800df0c210820022800db0c211020022800d70c211120022800d30c210f20022f00d10c211220022d00d00c2113200241386a20011080022002290338a70d04200241c8006a290300210e2002290340211442002115410121010c400b200541ff0171450d03200241003a00f00c0c030b41002105200241003a00f00c2003417e6a21072003417d6a21030240034020072005460d01200241d00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00f00c2003417f6a21032006210520064120470d000b20022d00ef0c210b20022900e70c210a20022800e30c210920022800df0c210820022800db0c211020022800d70c211120022800d30c210f20022f00d10c211220022d00d00c2113200241e8006a20011080022002290368a70d03200241e8006a41106a290300210e20022903702114200241d0006a20011080022002290350a70d032002290358210d200241d0006a41106a29030022164280808080808080807f832117420021154102210142002118420021194200211a4200211b4200211c4200211d0c400b200541ff0171450d02200241003a00f00c0c020b41002105200241003a00f00c410220036b210c2003417d6a2106024002400340200c20056a450d01200241d00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00f00c2006417f6a21062007210520074120470d000b20022d00ef0c210b20022900e70c210a20022800e30c210920022800df0c210820022800db0c211020022800d70c211120022800d30c210f20022f00d10c211220022d00d00c211341002105200241003a00f00c200420076a210c200720036b41026a21030340200320056a450d02200241d00c6a20056a200c20056a220441026a2d00003a0000200120063602042001200441036a3602002002200541016a22043a00f00c2006417f6a21062004210520044120470d000b20022d00ef0c210620022900e70c210d20022800e30c210720022800df0c210c20022800db0c211e20022800d70c211f20022800d30c210420022f00d10c210520022d00d00c210320024180016a2001108002200229038001a70d0320024190016a290300211c200229038801220e42ffffff07832115200e42808080f8ffffffff00832119200e4280808080808080807f83211b2006ad42ff018321162007ad422086200cad84210e201ead422086201fad84211442002118410321014200211a4200211d420021170c400b200541ff0171450d02200241003a00f00c0c020b200541ff0171450d01200241003a00f00c0c010b41002105200241003a00f00c2003417e6a21072003417d6a21030240034020072005460d01200241d00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00f00c2003417f6a21032006210520064120470d000b20022d00ef0c210b20022900e70c210a20022800e30c210920022800df0c210820022800db0c211020022800d70c211120022800d30c210f20022f00d10c211220022d00d00c211320024198016a2001108002200229039801a70d01200241a8016a290300210e20022903a001211442002115410421010c3d0b200541ff0171450d00200241003a00f00c0b200041163602000c400b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241b0016a200110880120022802b0010d0020022802b4012206200728020041f0006e2204200420064b1bad42f0007e220a422088a70d12200aa72203417f4c0d120240024020030d004104210c0c010b20031021220c450d280b41002104200241003602b8042002200c3602b0042002200341f0006e3602b404024002402006450d00200241d00c6a41086a210b0340200241d00c6a2001109b0320022802d40c210320022802d00c2107200241a00a6a200b41e80010a1051a2003450d02200241b0056a200241a00a6a41e80010a1051a0240200420022802b404470d00200241b0046a2004410110b50120022802b004210c20022802b80421040b200c200441f0006c6a2205200336020420052007360200200541086a200241b0056a41e80010a1051a2002200441016a22043602b8042006417f6a22060d000b0b200c450d0120022902b404210a2000200c36020420004105360200200041086a200a370200200041106a200241800f6a41a00210a1051a0c410b02402004450d00200441f0006c2104200c41046a2101034020011096030240200141046a2802002203450d00200341246c450d00200128020010230b200141f0006a2101200441907f6a22040d000b0b20022802b4042201450d00200141f0006c450d00200c10230b200041163602000c3f0b2006450d3620042d0001210520012003417e6a22203602042001200441026a360200200541174b0d36410421130240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e180001024f030405060708090a0b0c0d0e0f10111213141516000b41002105200241003a00a00f2003417e6a210c2003417d6a210302400340200c2005460d01200241800f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00a00f2003417f6a21032006210520064120470d000b20022d009f0f211120022900970f210e20022800930f2110200228008f0f2109200228008b0f210820022800870f210c20022800830f210620022f00810f210f20022d00800f210b200241b8016a200110800220022903b801a70d4d20072802002204450d4d200241c8016a290300210d20022903c001210a200128020022032d0000211220012004417f6a360204410121132001200341016a360200201241024b0d4d20024190096a41106a200241d00c6a41106a29020037030020024190096a41086a200241d00c6a41086a290200370300200241f8086a41086a200241a00a6a41086a290300370300200241f8086a41106a200241a00a6a41106a290300370300200241c8086a41086a200241b0046a41086a290200370300200241c8086a41106a200241b0046a41106a290200370300200220022902d00c37039009200220022903a00a3703f808200220022902b0043703c808200241b0086a41106a200241a8096a41106a290300370300200241b0086a41086a200241a8096a41086a290300370300200220022903a8093703b008200e422088a72121200ea721220c4f0b200541ff0171450d4c200241003a00a00f0c4c0b200241d0016a200110800220022903d001a70d4b200241d0016a41106a290300210a20022903d801210d20024190096a41106a200241800f6a41106a29020037030020024190096a41086a200241800f6a41086a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008200d422088a72108200a422088a72110200da7210c200aa72109410221130c4d0b200241e8016a200110800220022903e801a70d4a200241e8016a41106a290300210a20022903f001210d20024190096a41106a200241800f6a41106a29020037030020024190096a41086a200241800f6a41086a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008200d422088a72108200a422088a72110200da7210c200aa72109410321130c4c0b20024180026a20011088012002280280020d49200228028402210620024190096a41106a200241800f6a41106a29020037030020024190096a41086a200241800f6a41086a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008410521130c4a0b200241a8096a200110cf0120022802a8092206450d4820024190096a41086a200241800f6a41086a29020037030020024190096a41106a200241800f6a41106a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241a8096a41086a280200210820022802ac09210c200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008410621130c4a0b410721130c490b2020450d4620042d0002210b20012003417d6a3602042001200441036a360200200b41024b0d4620024190096a41106a200241800f6a41106a2901003703004108211320024190096a41086a200241800f6a41086a290100370300200241f8086a41086a200241d00c6a41086a290100370300200241f8086a41106a200241d00c6a41106a290100370300200241c8086a41086a200241a00a6a41086a290100370300200241c8086a41106a200241a00a6a41106a290100370300200220022901800f37039009200220022901d00c3703f808200220022901a00a3703c808200241b0086a41106a200241b0046a41106a290100370300200241b0086a41086a200241b0046a41086a290100370300200220022901b0043703b0084100211041002109410021080c480b41002105200241003a00a00f2003417e6a21072003417d6a21030240034020072005460d01200241800f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00a00f2003417f6a21032006210520064120470d000b20024190096a41086a200241d00c6a41086a29000037030020024190096a41106a200241d00c6a41106a290000370300200241f8086a41086a200241a00a6a41086a290000370300200241f8086a41106a200241a00a6a41106a290000370300200220022900d00c37039009200220022900a00a3703f80820022d009f0f211120022800930f2110200228008f0f2109200228008b0f210820022800870f210c20022800830f210620022f00810f210f20022d00800f210b20022900970f210a200241c8086a41106a200241b0046a41106a290000370300200241c8086a41086a200241b0046a41086a290000370300200220022900b0043703c808200241b0086a41106a200241a8096a41106a290000370300200241b0086a41086a200241a8096a41086a290000370300200220022900a8093703b008200a422088a72121200aa72122410921130c430b200541ff0171450d45200241003a00a00f0c450b20024188026a20011088012002280288020d44200228028c02210620024190096a41106a200241800f6a41106a29020037030020024190096a41086a200241800f6a41086a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008410a21130c450b410b21130c450b410c21130c440b200241a8096a200110cf0120022802a8092206450d4120024190096a41086a200241800f6a41086a29020037030020024190096a41106a200241800f6a41106a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c80820022902ac09210a200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008200a422088a72108200aa7210c410d21130c430b41002105200241003a00a00f2003417e6a21072003417d6a21030240034020072005460d01200241800f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00a00f2003417f6a21032006210520064120470d000b20024190096a41086a200241d00c6a41086a29000037030020024190096a41106a200241d00c6a41106a2900003703002002200229008f0f220a3700af0a200220022900870f220d3700a70a200220022800830f22063600a30a200220022f00810f220f3b00a10a200220022d00800f220b3a00a00a200220022d009f0f22113a00bf0a200220022900970f220e3700b70a200220022900d00c37039009200241f8086a41106a200241b0046a41106a290000370300200241f8086a41086a200241b0046a41086a290000370300200220022900b0043703f808200241c8086a41106a200241a8096a41106a290000370300200241c8086a41086a200241a8096a41086a290000370300200220022900a8093703c808200241b0086a41106a200241880a6a41106a290000370300200241b0086a41086a200241880a6a41086a290000370300200220022900880a3703b008200e422088a72121200a422088a72110200d422088a72108200ea72122200aa72109200da7210c410e21130c3e0b200541ff0171450d40200241003a00a00f0c400b410f21130c410b20204104490d3e2004280002210620012003417a6a3602042001200441066a36020020024190026a20011088012002280290020d3e20072802002002280294024102742204490d3e2004417f4c0d180240024020040d004101210c0c010b20041027220c450d2e20072802002004490d21200c2001280200200410a1051a200128020422032004490d202001200320046b3602042001200128020020046a3602000b200c450d3e02402004ad220a422086200a84220a422088a722010d00200aa721010c3d0b0240200c2001724103710d00200aa722014103710d0020014102762208450d3d200a422288a721090c3e0b200aa7450d3e200c10230c3e0b20204104490d3d2004280002210620012003417a6a3602042001200441066a36020020024198026a20011088012002280298020d3d200228029c022210200728020041246e2204200420104b1bad42247e220a422088a70d17200aa72204417f4c0d170240024020040d004104210c0c010b20041021220c450d2d0b41002109200241003602900a2002200c3602880a2002200441246e220836028c0a0240024002402010450d0041002109410021110340200241003a00a00f201141016a21112007280200210b417f2103410021040340200b2004460d03200241800f6a20046a200128020022082d00003a00002001200b20036a3602042001200841016a3602002002200441016a22053a00a00f2003417f6a21032005210420054120470d000b200b20056b22044104490d0320022d009f0f210320022900970f210a20022800930f2105200228008f0f210b200228008b0f210f20022800870f211220022800830f211320022f00810f211e20022d00800f211f200828000121232001200841056a36020020012004417c6a36020402402009200228028c0a470d00200241880a6a2009410110a20120022802880a210c20022802900a21090b200c200941246c6a22042023360220200420033a001f2004200a370017200420053600132004200b36000f2004200f36000b20042012360007200420133600032004201e3b00012004201f3a00002002200941016a22093602900a20112010470d000b200228028c0a21080b200c450d3f20024190096a41106a200241d00c6a41106a29020037030020024190096a41086a200241d00c6a41086a290200370300200241f8086a41086a200241a00a6a41086a290200370300200241f8086a41106a200241a00a6a41106a290200370300200241c8086a41086a200241b0046a41086a290200370300200241c8086a41106a200241b0046a41106a290200370300200220022902d00c37039009200220022902a00a3703f808200220022902b0043703c808200241b0086a41106a200241a8096a41106a290200370300200241b0086a41086a200241a8096a41086a290200370300200220022902a8093703b008411121130c410b200441ff0171450d00200241003a00a00f0b200228028c0a2201450d3d200141246c450d3d200c10230c3d0b20204104490d3c2004280002210620012003417a6a3602042001200441066a36020020024190096a41086a200241800f6a41086a29020037030020024190096a41106a200241800f6a41106a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008411221130c3d0b41002105200241003a00a00f2003417e6a210c417d210602400340200c2005460d01200241800f6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00a00f2006417f6a21062007210520074120470d000b200320076b2203417e6a4104490d3c20022d009f0f211120022900970f210a20022800930f2110200228008f0f2109200228008b0f210820022800870f210c20022800830f210620022f00810f210f20022d00800f210b200420076a220441026a280000212420012003417a6a3602042001200441066a36020020024190096a41086a200241d00c6a41086a29020037030020024190096a41106a200241d00c6a41106a290200370300200241f8086a41086a200241a00a6a41086a290300370300200241f8086a41106a200241a00a6a41106a290300370300200241c8086a41086a200241b0046a41086a290200370300200241c8086a41106a200241b0046a41106a290200370300200220022902d00c37039009200220022903a00a3703f808200220022902b0043703c808200241b0086a41106a200241a8096a41106a290300370300200241b0086a41086a200241a8096a41086a290300370300200220022903a8093703b008200a422088a72121200aa72122411321130c390b200541ff0171450d3b200241003a00a00f0c3b0b200241a0026a200110800220022903a002a70d3a200241a0026a41106a290300210a20022903a802210d20024190096a41106a200241800f6a41106a29020037030020024190096a41086a200241800f6a41086a290200370300200241f8086a41086a200241d00c6a41086a290300370300200241f8086a41106a200241d00c6a41106a290300370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022903d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0046a41086a290300370300200220022903b0043703b008200d422088a72108200a422088a72110200da7210c200aa72109411421130c3c0b200241b8026a200110880120022802b8020d3920022802bc02210620024190096a41106a200241d00c6a41106a29020037030020024190096a41086a200241d00c6a41086a290200370300200241f8086a41086a200241a00a6a41086a290300370300200241f8086a41106a200241a00a6a41106a290300370300200241c8086a41086a200241b0046a41086a290200370300200241c8086a41106a200241b0046a41106a290200370300200220022902d00c37039009200220022903a00a3703f808200220022902b0043703c808200241b0086a41106a200241a8096a41106a290300370300200241b0086a41086a200241a8096a41086a290300370300200220022903a8093703b00842002115411521134100211041002109410021084100210c420021180c3b0b41002105200241003a00a00f2003417e6a21072003417d6a21030240034020072005460d01200241800f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00a00f2003417f6a21032006210520064120470d000b20024190096a41086a200241d00c6a41086a29000037030020024190096a41106a200241d00c6a41106a2900003703002002200229008f0f220a3700ef08200220022900870f220d3700e708200220022800830f22063600e308200220022f00810f220f3b00e108200220022d00800f220b3a00e008200220022900d00c3703900920022d009f0f211120022900970f210e200241f8086a41106a200241a00a6a41106a290000370300200241f8086a41086a200241a00a6a41086a290000370300200220022900a00a3703f808200241c8086a41106a200241b0046a41106a290000370300200241c8086a41086a200241b0046a41086a290000370300200220022900b0043703c808200241b0086a41106a200241a8096a41106a290000370300200241b0086a41086a200241a8096a41086a290000370300200220022900a8093703b008200e422088a72121200a422088a72110200d422088a72108200ea72122200aa72109200da7210c411621130c360b200541ff0171450d38200241003a00a00f0c380b200241c0026a200110880120022802c0020d37200728020020022802c4024101742204490d372004417f4c0d110240024020040d00410121060c010b200410272206450d2720072802002004490d3420062001280200200410a1051a200128020422032004490d1b2001200320046b3602042001200128020020046a3602000b2006450d3702402004ad220a422086200a84220a422088a722040d00200aa721040c320b024020062004724101710d00200aa722044101710d002004410176220c450d32200a422188a721080c330b200aa70d330c370b200241c8026a200110880120022802c8020d36200728020020022802cc024101742204490d362004417f4c0d100240024020040d00410121060c010b200410272206450d2620072802002004490d3320062001280200200410a1051a200128020422032004490d1b2001200320046b3602042001200128020020046a3602000b2006450d3602402004ad220a422086200a84220a422088a722040d00200aa721040c2f0b024020062004724101710d00200aa722044101710d002004410176220c450d2f200a422188a721080c300b200aa70d320c360b02402006450d0020012003417e6a3602042001200441026a3602000b200041163602000c3d0b2006450d1b20042d0001210520012003417e6a3602042001200441026a360200200541014b0d1b410021040240024020050e020001000b200241800f6a200110e50220022d00800f4101460d1c200241d00c6a200241800f6a41017241a00110a1051a200241d0026a200110880120022802d0020d1c200728020020022802d4022203490d1c2003417f4c0d0f0240024020030d00410121040c010b200310272204450d2520072802002003490d1c20042001280200200310a1051a200128020422052003490d1b2001200520036b3602042001200128020020036a3602000b2004450d1c2003ad220a422086200a84210a200241a00a6a200241d00c6a41a00110a1051a0b200241b0056a200241a00a6a41a00110a1051a200041086a200a3702002000200436020420004108360200200041106a200241b0056a41a00110a1051a200041b0016a200241b0046a41800110a1051a0c3c0b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241d8026a200110880120022802d8020d0020022802dc0221012000410936020020002001360204200041086a200241800f6a41a80210a1051a0c3c0b200041163602000c3b0b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241e0026a200110880120022802e0020d00200728020020022802e4022204490d002004417f4c0d0d02400240024020040d00410121030c010b200410272203450d2420072802002004490d0120032001280200200410a1051a200128020422052004490d1d2001200520046b3602042001200128020020046a3602000b2003450d01200020033602042000410a360200200041086a2004ad220a422086200a84370200200041106a200241800f6a41a00210a1051a0c3c0b200310230b200041163602000c3a0b02402006450d0020042d0001210520012003417e6a22063602042001200441026a36020020050d0020064104490d002004280002210520012003417a6a3602042001200441066a360200200241f8026a200110880120022802f8020d00200728020020022802fc022204490d002004417f4c0d0c0240024002400240024002400240024020040d00410121060c010b200410272206450d2820072802002004490d0120062001280200200410a1051a200128020422032004490d222001200320046b3602042001200128020020046a3602000b2006450d06200241f0026a20011088012004ad220a422086200a84220da72110024020022802f0020d0020022802f402220b2007280200410c6e22042004200b4b1bad420c7e220a422088a70d13200aa72204417f4c0d130240024020040d00410421090c010b200410212209450d290b41002103200241003602d80c200220093602d00c20022004410c6e22083602d40c024002400240200b450d00410021030340200241e8026a200110880120022802e8020d03200728020020022802ec022204490d032004417f4c0d170240024020040d004101210c0c010b20041027220c450d2d20072802002004490d03200c2001280200200410a1051a200128020422082004490d282001200820046b3602042001200128020020046a3602000b2004ad220a422086200a84210a0240200320022802d40c470d00200241d00c6a2003410110950120022802d00c210920022802d80c21030b20092003410c6c6a2204200a3702042004200c3602002002200341016a22033602d80c200b417f6a220b0d000b20022802d40c21080b2009450d022006450d09200728020022074104490d042001280200220b280000210f20012007417c6a22043602042001200b41046a36020020044104490d05200d422088a72112200b28000421132001200741786a22113602042001200b41086a36020041002104200241003a00900d200741776a2107034020112004460d07200241d00c6a20046a200b20046a220c41086a2d00003a0000200120073602042001200c41096a3602002002200441016a220c3a00900d2007417f6a2107200c2104200c41c000470d000b200c41ff017141c000490d072006450d09200228028c0d210120022f018a0d210420022d00890d210720022d00880d210c20022802840d210b20022802800d211120022802fc0c211e20022802f80c211f20022f01f60c212320022d00f50c212520022d00f40c212620022802f00c212720022802ec0c212820022d00e80c212920022903e00c210a20022802dc0c212a20022802d80c212b20022802d40c212c20022802d00c212d200020022f00e90c200241eb0c6a2d000041107472222e3b0041200020073a0061200020233b004e200020253a004d200020053602042000410b360200200041c3006a202e4110763a0000200041e4006a2001360200200041e2006a20043b0100200041e0006a200c3a0000200041dc006a200b360000200041d8006a2011360000200041d4006a201e360000200041d0006a201f360000200041cc006a20263a0000200041c8006a2027360000200041c4006a2028360000200041c0006a20293a0000200041386a200a370200200041346a202a360200200041306a202b3602002000412c6a202c360200200041286a202d360200200041246a2013360200200041206a200f3602002000411c6a2003360200200041186a2008360200200041146a2009360200200041106a20123602002000410c6a2010360200200041086a2006360200200041e8006a200241800f6a41c80110a1051a0c430b200c10230b02402003450d002003410c6c21042009210103400240200141046a280200450d00200128020010230b2001410c6a2101200441746a22040d000b0b20022802d40c2201450d002001410c6c450d00200910230b2010450d060b200610230c050b02402010450d00200610230b02402003450d002003410c6c21042009210103400240200141046a280200450d00200128020010230b2001410c6a2101200441746a22040d000b0b2008450d042008410c6c0d030c040b02402010450d00200610230b02402003450d002003410c6c21042009210103400240200141046a280200450d00200128020010230b2001410c6a2101200441746a22040d000b0b2008450d032008410c6c0d020c030b200441ff0171450d00200241003a00900d0b02402010450d00200610230b02402003450d002003410c6c21042009210103400240200141046a280200450d00200128020010230b2001410c6a2101200441746a22040d000b0b2008450d012008410c6c450d010b200910230b200041163602000c390b02402006450d0020012003417e6a3602042001200441026a3602000b200041163602000c380b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541014b0d0002400240024002400240024020050e020001000b200241b0056a2001109c0320022802b0052210450d05200241b8056a280200210f20022802b4052111200241d00c6a200241800f6a41c30110a1051a410121010c010b41002105200241003a00d0052003417e6a210c2003417d6a21030340200c2005460d02200241b0056a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d0052003417f6a21032006210520064120470d000b20022d00cf05212820022900c705210a20022800c305210920022800bf05210b20022800bb05210c20022800b705210620022800b305210520022f00b105210320022d00b0052104200241b0056a2001109d0320022d00b00522084103460d04200241a8096a200241b0056a41017241e00010a1051a200241b0056a2001109d0320022d00b0054103460d04200241b0046a200241b0056a41e10010a1051a200728020022114104490d042001280200220f280000211020012011417c6a3602042001200f41046a360200200241b0056a2001109a0320022802b0052211450d04200241b8056a280200211220022802b405210f2007280200221e4104490d032001280200222328000021132001201e417c6a22253602042001202341046a36020041002107200241003a00d005201e417b6a211e034020252007460d03200241b0056a20076a202320076a221f41046a2d00003a00002001201e3602042001201f41056a3602002002200741016a221f3a00d005201e417f6a211e201f2107201f4120470d000b20023100cf05211420022900c705210e20022800c305212720022800bf05212620022800bb05212520022800b705212320022800b305211f20022f00b105211e20022d00b0052107200241800f6a200241a8096a41e00010a1051a200241800f6a41e0006a200241b0046a41e10010a1051a200241d00c6a200241800f6a41c30110a1051a2028ad210d410221010b200241a00a6a200241d00c6a41c30110a1051a200041db006a200d3c0000200041d3006a200a3700002000413b6a20143c0000200041336a200e370000200041dc006a20083a0000200041cf006a2009360000200041cb006a200b360000200041c7006a200c360000200041c3006a20063600002000413f6a20053600002000413d6a20033b00002000413c6a20043a00002000412f6a20273600002000412b6a2026360000200041276a2025360000200041236a20233600002000411f6a201f3600002000411d6a201e3b00002000411c6a20073a0000200041186a2013360200200041146a2012360200200041106a200f3602002000410c6a2011360200200041086a2010360200200020013602042000410d360200200041dd006a200241a00a6a41c30110a1051a200041a8026a200241880a6a41086a290300370300200041a0026a20022903880a3703000c3b0b200541ff0171450d02200241003a00d0050c020b200741ff0171450d00200241003a00d0050b02402012450d002012410c6c21042011210103400240200141046a280200450d00200128020010230b2001410c6a2101200441746a22040d000b0b200f450d00200f410c6c450d00201110230b200041163602000c370b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d002000410e360200200041046a200241800f6a41ac0210a1051a0c370b200041163602000c360b2006450d2420042d0001210520012003417e6a222e3602042001200441026a3602004106210c200541064b0d244200210a02400240024002400240024002400240024020050e0700010203040805000b20024190036a20011088012002280290030d2c20072802002203450d2c200228029403210b200128020022052d0000210420012003417f6a3602042001200541016a360200200441014b0d2c410021090240024020040e020100010b410121090b20024188036a20011088012002280288030d2c2007280200200228028c032204490d2c2004417f4c0d0f02400240024020040d00410121080c010b200410272208450d2620072802002004490d0120082001280200200410a1051a200128020422032004490d222001200320046b3602042001200128020020046a3602000b2008450d2d20024180036a20011088012004ad220a422086200a84220aa7210f02402002280280030d0020072802002002280284032204490d002004417f4c0d1102400240024020040d00410121130c010b200410272213450d2820072802002004490d0120132001280200200410a1051a200128020422032004490d252001200320046b3602042001200128020020046a3602000b2013450d01200a422088a721112004ad220a422086200a84220d42808080807083210a200da721124101210c0c0a0b201310230b200f450d2d0b200810230c2c0b20024198036a20011088012002280298030d2b200228029c03210b4102210c0c040b202e4104490d2a2004280002210b20012003417a6a3602042001200441066a3602004103210c0c030b200241a8036a200110880120022802a8030d29200728020020022802ac032204490d292004417f4c0d0c02400240024020040d004101210b0c010b20041027220b450d2320072802002004490d01200b2001280200200410a1051a200128020422032004490d212001200320046b3602042001200128020020046a3602000b200b450d2a200241a0036a20011088012004ad220d422086200d84220da72108024020022802a0030d00200728020020022802a4032212490d002012417f4c0d0e02400240024020120d00410121110c010b201210272211450d2520072802002012490d0120112001280200201210a1051a200128020422042012490d242001200420126b3602042001200128020020126a3602000b2011450d01200d422088a7210f4104210c201221130c060b201110230b2008450d2a0b200b10230c290b200241b0036a200110880120022802b0030d2820022802b403211041002104200241003a00f00c20072802002107417f210302400240034020072004460d01200241d00c6a20046a200128020022062d00003a00002001200720036a3602042001200641016a3602002002200441016a22053a00f00c2003417f6a21032005210420054120470d000b20022d00ef0c211f20022900e70c210d20022800e30c211320022800df0c211120022800db0c210f20022800d70c210820022800d30c210b20022f00d10c211e20022d00d00c210941002104200241003a00f00c200720056b210c200720036a21030340200c2004460d02200241d00c6a20046a200620046a220541016a2d00003a0000200120033602042001200541026a3602002002200441016a22053a00f00c2003417f6a21032005210420054120470d000b200220022f00d10c3b00e108200220022d00d00c3a00e00820022800db0c2223411076212820234108762127200d42808080807083210a20022f01e00820022d00e20841107472210620022900e70c220e422088a7212c20022d00ef0c212d20022800e30c212a20022800df0c212920022800d70c212620022800d30c2125200ea7212b200da721124105210c0c050b200441ff0171450d29200241003a00f00c0c290b200441ff0171450d28200241003a00f00c0c280b200241b8036a200110880120022802b8030d2720022802bc03210b4107210c0b0b0b200020063b0025200020283b0032200020273a00312000201e3b0106200020093a00052000200c3a00042000410f360200200041276a20064110763a0000200041c8006a2010360200200041c4006a202d3a0000200041c0006a202c3600002000413c6a202b360000200041386a202a360000200041346a2029360000200041306a20233a00002000412c6a2026360000200041286a2025360000200041246a201f3a0000200041186a2013360200200041146a2011360200200041106a200f3602002000410c6a2008360200200041086a200b3602002000411c6a200a2012ad84370200200041cc006a200241800f6a41e40110a1051a0c350b2006450d2120042d0001210520012003417e6a22063602042001200441026a360200200541044b0d2102400240024002400240024002400240024020050e050001020304000b200241c0036a200110880120022802c0030d2920022802c4032206200728020041b0026e2204200420064b1bad42b0027e220a422088a70d0e200aa72203417f4c0d0e0240024020030d00410821050c010b200310212205450d240b41002104200241003602b804200220053602b0042002200341b0026e3602b404024002402006450d00200241800f6a410472210c0340200241800f6a200110990320022802800f2103200241d00c6a200c41ac0210a1051a20034116460d02200241a00a6a200241d00c6a41ac0210a1051a0240200420022802b404470d00200241b0046a2004410110ad0120022802b004210520022802b80421040b2005200441b0026c6a22072003360200200741046a200241a00a6a41ac0210a1051a2002200441016a22043602b8042006417f6a22060d000b0b2005450d2a20022902b404220a422088a72103200aa721044101211e41002107410021110c060b02402004450d00200441b0026c21042005210103402001109e03200141b0026a2101200441d07d6a22040d000b0b20022802b4042201450d29200141b0026c450d29200510230c290b20064102490d2820042f0002210920012003417c6a3602042001200441046a360200200241800f6a200110990320022802800f2101200241d00c6a200241800f6a41047241ac0210a1051a20014116460d28200241800f6a200241d00c6a41ac0210a1051a41b002102122050d030c290b20064102490d2720042f0002210920012003417c6a3602042001200441046a360200200241800f6a200110cf0120022802800f2205450d2720022802840f2104024020072802002206450d00200241880f6a28020021032001280200220b2d0000210c20012006417f6a22083602042001200b41016a360200200c41014b0d004100211302400240200c0e020100010b20084104490d01200b280001210720012006417b6a220c3602042001200b41056a360200200c4104490d01200b28000521122001200641776a3602042001200b41096a360200410121130b200241800f6a200110990320022802800f2106200241d00c6a200241800f6a41047241ac0210a1051a20064116460d06200241800f6a200241d00c6a41ac0210a1051a41b00210212201450d2920012006360200200141046a200241800f6a41ac0210a1051a4103211e0c040b200441ffffff3f71450d270c260b20064102490d2620042f0002210b20012003417c6a3602042001200441046a360200200241800f6a200110cf0120022802800f2206450d2620022802840f210c024020072802002204450d00200241880f6a2802002108200128020022052d0000210320012004417f6a22073602042001200541016a360200200341014b0d00410021100240024020030e020100010b20074104490d012005280001211120012004417b6a22033602042001200541056a36020020034104490d012005280005210f2001200441776a22073602042001200541096a360200410121100b41002103200241003a00a00f2007417f6a2104024003402004417f460d01200241800f6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a00f2004417f6a21042005210320054120470d000b20022900970f220a422088a7210120022d009f0f211f20022800930f2107200228008f0f2113200228008b0f210320022800870f210420022800830f210520022f00810f210920022d00800f2123200aa721124104211e0c050b0240200341ff0171450d00200241003a00a00f0b200c41ffffff3f71450d27200610230c270b200c41ffffff3f71450d26200610230c260b20064102490d2520042f0002210b20012003417c6a3602042001200441046a360200200241800f6a200110cf0120022802800f2206450d2520022802840f210c0240200728020022034104490d00200241880f6a280200210820012802002207280000211020012003417c6a22043602042001200741046a36020020044104490d00200728000421112001200341786a22093602042001200741086a36020041002104200241003a00a00f200341776a21030240034020092004460d01200241800f6a20046a200720046a220541086a2d00003a0000200120033602042001200541096a3602002002200441016a22053a00a00f2003417f6a21032005210420054120470d000b20022900970f220a422088a7210120022d009f0f211f20022800930f2107200228008f0f2113200228008b0f210320022800870f210420022800830f210520022f00810f210920022d00800f2123200aa721124105211e0c040b0240200441ff0171450d00200241003a00a00f0b200c41ffffff3f71450d26200610230c260b200c41ffffff3f71450d25200610230c250b20052001360200200541046a200241800f6a41ac0210a1051a4102211e0b0b200020233a00052000201e3a0004200041103602002000413c6a200f360200200041386a2011360200200041346a2010360200200041306a20083602002000412c6a200c360200200041286a2006360200200041266a200b3b0100200041246a201f3a0000200041206a20013602002000411c6a2012360200200041186a2007360200200041146a2013360200200041106a20033602002000410c6a2004360200200041086a2005360200200041066a20093b0100200041c0006a200241b0056a41f00110a1051a0c350b200441ffffff3f710d200c210b2006450d1e20042d0001210620012003417e6a222f3602042001200441026a3602002006410a4b0d1e410421304200211d0240024002400240024002400240024002400240024020060e0b0001022803040506070809000b41002105200241003a00a00f2003417e6a21072003417d6a21030240034020072005460d01200241800f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00a00f2003417f6a21032006210520064120470d000b200241c8086a41086a200241d00c6a41086a290000370300200241c8086a41106a200241d00c6a41106a290000370300200241b0086a41086a200241a00a6a41086a290000370300200241b0086a41106a200241a00a6a41106a290000370300200220022900d00c3703c808200220022900a00a3703b0082002418f0f6a290000210a2002419f0f6a310000210e20022800830f210c20022f00810f211320022d00800f211e20022900870f210d20022900970f211420024198086a41106a200241b0056a41106a29000037030020024198086a41086a200241b0056a41086a290000370300200220022900b0053703980820024180086a41106a200241b0046a41106a29000037030020024180086a41086a200241b0046a41086a290000370300200220022900b004370380082014422088200e42208684210e200d422088a72105200a422088a7210f200a4280feffff0f83420888a721312014a72110200da7210b200aa7210841012130410021120c280b200541ff0171450d28200241003a00a00f0c280b200241c8036a200110880120022802c8030d2720022802cc032206200728020041c8006e2204200420064b1bad42c8007e220a422088a70d0e200aa72204417f4c0d0e0240024020040d004104210c0c010b20041021220c450d240b41002105200241003602e8082002200c3602e0082002200441c8006e220b3602e4080240024002402006450d00200241d00c6a410c6a2113410021050340200241d00c6a2001109f030240024020022d00d00c22034106470d00410621030c010b200241a8096a41086a2209201341086a290200370300200241a8096a41106a2208201341106a290200370300200220132902003703a80920022802d80c210420022802d40c210b20022f01d20c211020022d00d10c2111200241800f6a2001109f03024020022d00800f4106470d00024020034101470d002004450d00200b10230b410621030c010b200241880a6a41106a2008290300370300200241880a6a41086a2009290300370300200241a00a6a41086a200241800f6a41086a290300370300200241a00a6a41106a200241800f6a41106a290300370300200241a00a6a41186a200241800f6a41186a290300370300200241a00a6a41206a200241800f6a41206a280200360200200220022903a8093703880a200220022903800f3703a00a2011211e2010211f20042123200b21250b20024190096a41086a2204200241880a6a41086a29030037030020024190096a41106a220b200241880a6a41106a290300370300200241b0056a41086a2209200241a00a6a41086a290300370300200241b0056a41106a2208200241a00a6a41106a290300370300200241b0056a41186a2210200241a00a6a41186a290300370300200241b0056a41206a2211200241a00a6a41206a280200360200200220022903880a37039009200220022903a00a3703b00520034106460d02200241f8086a41106a220f200b290300370300200241f8086a41086a220b2004290300370300200241b0046a41086a22122009290300370300200241b0046a41106a22092008290300370300200241b0046a41186a22082010290300370300200241b0046a41206a2210201128020036020020022002290390093703f808200220022903b0053703b0040240200520022802e408470d00200241e0086a2005410110a10120022802e008210c20022802e80821050b200c200541c8006c6a2204201e3a0001200420033a0000200441086a2023360000200441046a2025360000200441026a201f3b00002004410c6a20022903f808370000200441146a200b2903003700002004411c6a200f290300370000200441246a20022903b0043700002004412c6a2012290300370000200441346a20092903003700002004413c6a2008290300370000200441c4006a20102802003600002002200541016a22053602e8082006417f6a22060d000b20022802e408210b0b200c0d010c290b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b20022802e4082201450d28200141c8006c450d28200c10230c280b200241800f6a2001109f0302400240024002400240024002400240024020022d00800f22084106460d00200241a00f6a280200211f200241980f6a290300210d200241940f6a220428020021092002418c0f6a2203290200210e200241880f6a2206280200211020022802840f210f20022f00810f211320022d00830f211e200241800f6a2001109f0320022d00800f22124106460d012002419c0f6a222a290200211520042902002114200241800f6a41106a28020021282002418e0f6a2f010021292002418d0f6a2d0000212720032d000021262006280200211120022802840f212320023301820f211d20023100810f2117200241800f6a2001109f0320022d00800f22254106460d02200241b0046a41086a200241940f6a2204290200370300200241b0046a41106a202a29020037030020022002418c0f6a22032902003703b004200241800f6a41086a2206280200212a20022802840f212b20022f01820f212e20022d00810f212d200241800f6a2001109f0320022d00800f222c4106460d03200241b0056a41086a2004290200370300200241b0056a41106a2002419c0f6a2204290200370300200220032902003703b0052006280200213220022802840f213320022f01820f213420022d00810f2135200241800f6a2001109f0320022d00800f22364106460d06200241a00a6a41086a200241940f6a290200370300200241b00a6a200429020037030020022002418c0f6a2902003703a00a200241800f6a41086a280200213720022802840f213820072802002204450d0720022f01820f213920022d00810f213a200128020022032d0000210620012004417f6a22073602042001200341016a360200200641014b0d0742002118410021244200211920060e020504050b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d2f200b41c8006c450d2f200c10230c2f0b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d2e200b41c8006c450d2e200c10230c2e0b024020124101470d002011450d00202310230b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d2d200b41c8006c450d2d200c10230c2d0b024020254101470d00202a450d00202b10230b024020124101470d002011450d00202310230b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d2c200b41c8006c450d2c200c10230c2c0b2007450d0220032d0001210720012004417e6a22063602042001200341026a3602002006450d0220032d0002212420012004417d6a22063602042001200341036a3602002006450d0220032d0003212220012004417c6a22063602042001200341046a3602002006450d0220032d0004212120012004417b6a22063602042001200341056a3602002006450d0220032d0005212020012004417a6a22063602042001200341066a3602002006450d0220032d0006213b2001200441796a22063602042001200341076a3602002006450d0220032d0007213c2001200441786a22063602042001200341086a3602002006450d0220032d000821302001200441776a22063602042001200341096a3602002006450d0220032d0009213d2001200441766a220636020420012003410a6a3602002006450d0220032d000a213e2001200441756a220636020420012003410b6a3602002006450d0220032d000b213f2001200441746a220636020420012003410c6a3602002006450d0220032d000c21312001200441736a220636020420012003410d6a3602002006450d0220032d000d212f2001200441726a220636020420012003410e6a3602002006450d0220032d000e21402001200441716a220636020420012003410f6a3602002006450d0220032d000f21412001200441706a22063602042001200341106a3602002006450d0220032d0010214220012004416f6a22063602042001200341116a3602002006450d0220032d0011214320012004416e6a22063602042001200341126a3602002006450d0220032d0012214420012004416d6a22063602042001200341136a3602002006450d0220032d0013214520012004416c6a22063602042001200341146a3602002006450d022003310014211920012004416b6a3602042001200341156a360200203fad421086203ead42ff018342088684203dad42ff018384210a202fad42ff01834208862031ad42ff0183842040ad42ff0183421086842041ad42ff0183421886842042ad42ff0183422086842043ad42ff0183422886842044ad42ff0183423086842045ad4238868421182030ad423886203cad42ff018342308684203bad42ff0183422886842020ad42ff0183422086842021ad42ff0183421886842022ad42ff0183421086842024ad42ff0183420886842007ad42ff018384211a410121240b200241800f6a2001109f0320022d00800f22224106460d02200241d00c6a41086a2204200241940f6a290200370300200241d00c6a41106a22032002419c0f6a29020037030020022002418c0f6a22062902003703d00c200241800f6a41086a2207280200212120022802840f212020022f01820f213c20022d00810f213b200241800f6a2001109f0320022d00800f4106470d0b024020224101470d002021450d00202010230b024020364101470d002037450d00203810230b0240202c4101470d002032450d00203310230b024020254101470d00202a450d00202b10230b024020124101470d002011450d00202310230b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d2a200b41c8006c450d2a200c10230c2a0b0240202c4101470d002032450d00203310230b024020254101470d00202a450d00202b10230b024020124101470d002011450d00202310230b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d29200b41c8006c450d29200c10230c290b024020364101470d002037450d00203810230b0240202c4101470d002032450d00203310230b024020254101470d00202a450d00202b10230b024020124101470d002011450d00202310230b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d28200b41c8006c450d28200c10230c280b024020364101470d002037450d00203810230b0240202c4101470d002032450d00203310230b024020254101470d00202a450d00202b10230b024020124101470d002011450d00202310230b024020084101470d002010450d00200f10230b02402005450d00200c200541c8006c6a2104200c21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012004470d000b0b200b450d27200b41c8006c450d27200c10230c270b200241d0036a200110880120022802d0030d2620022802d403220b200728020041c4006e22042004200b4b1bad42c4007e220a422088a70d0d200aa72204417f4c0d0d0240024020040d004104210c0c010b20041021220c450d230b4100210620024100360280092002200c3602f8082002200441c4006e3602fc08024002400240200b450d00200241800f6a410172210841002109034041002103200241003a00a00f200941016a21092007280200417f6a210403402004417f460d03200241800f6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a00f2004417f6a21042005210320054120470d000b20022d009f0f210420022900970f210a20022800930f2103200228008f0f2105200228008b0f211020022800870f211120022800830f210f20022f00810f211220022d00800f2113200241800f6a2001109f0320022d00800f221e4106460d03200241d00c6a411f6a221f2008411f6a280000360000200241d00c6a41186a2223200841186a290000370300200241a00a6a41086a2225200841086a290000370300200241a00a6a41106a2226200841106a290000370300200241a00a6a41186a22272023290300370300200241a00a6a411f6a2223201f280000360000200220082900003703a00a200220033600f308200220053600ef08200220103600eb08200220113600e7082002200f3600e308200220123b00e108200220133a00e008200241b0056a411f6a22032023280000360000200241b0056a41186a22052027290300370300200241b0056a41106a22102026290300370300200241b0056a41086a22112025290300370300200220022903a00a3703b0052004ad210d0240200620022802fc08470d00200241f8086a20064101109b0120022802f808210c20022802800921060b200241e0086a41086a290300210e200241e0086a410f6a290000211420022903e0082115200c200641c4006c6a2204201e3a00202004200a370017200420153702002004411f6a200d3c00002004410f6a2014370000200441086a200e370200200420022903b005370021200441296a2011290300370000200441316a2010290300370000200441396a2005290300370000200441c0006a20032800003600002002200641016a2206360280092009200b470d000b0b200c450d2820022902fc08210a200241c8086a41106a200241b0046a41106a290200370300200241c8086a41086a200241b0046a41086a290200370300200241b0086a41086a200241a8096a41086a290300370300200241b0086a41106a200241a8096a41106a29030037030020024198086a41086a200241880a6a41086a29020037030020024198086a41106a200241880a6a41106a290200370300200220022902b0043703c808200220022903a8093703b008200220022902880a3703980820024180086a41106a20024190096a41106a29030037030020024180086a41086a20024190096a41086a290300370300200220022903900937038008200a422088a72105200aa7210b41032130410021120c270b200341ff0171450d00200241003a00a00f0b200241a00a6a411f6a200241d00c6a411f6a280000360000200241a00a6a41186a200241d00c6a41186a29030037030002402006450d00200641c4006c2104200c41286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010230b200141c4006a2101200441bc7f6a22040d000b0b20022802fc082201450d26200141c4006c450d26200c10230c260b200241f0036a200110880120022802f0030d2520022802f403210c200241d8036a200110800220022903d803a70d25200241d8036a41106a290300210a20022903e003210d200241c8086a41106a200241800f6a41106a290200370300200241c8086a41086a200241800f6a41086a290200370300200241b0086a41086a200241d00c6a41086a290300370300200241b0086a41106a200241d00c6a41106a29030037030020024198086a41086a200241a00a6a41086a29020037030020024198086a41106a200241a00a6a41106a290200370300200220022902800f3703c808200220022903d00c3703b008200220022902a00a3703980820024180086a41106a200241b0056a41106a29030037030020024180086a41086a200241b0056a41086a290300370300200220022903b00537038008200d422088a72105200a422088a7210f200a4280feffff0f83420888a72131200da7210b200aa7210841052130410021120c240b202f4104490d242004280002210c20012003417a6a360204410621302001200441066a360200200241c8086a41086a200241800f6a41086a290200370300200241c8086a41106a200241800f6a41106a290200370300200241b0086a41086a200241d00c6a41086a290300370300200241b0086a41106a200241d00c6a41106a29030037030020024198086a41086a200241a00a6a41086a29020037030020024198086a41106a200241a00a6a41106a290200370300200220022902800f3703c808200220022903d00c3703b008200220022902a00a3703980820024180086a41106a200241b0056a41106a29030037030020024180086a41086a200241b0056a41086a290300370300200220022903b00537038008410021054100213141002108410021120c230b20024190046a20011088012002280290040d23200228029404210c200241f8036a200110800220022903f803a70d23200241f8036a41106a290300210a200229038004210d200241c8086a41106a200241800f6a41106a290200370300200241c8086a41086a200241800f6a41086a290200370300200241b0086a41086a200241d00c6a41086a290300370300200241b0086a41106a200241d00c6a41106a29030037030020024198086a41086a200241a00a6a41086a29020037030020024198086a41106a200241a00a6a41106a290200370300200220022902800f3703c808200220022903d00c3703b008200220022902a00a3703980820024180086a41106a200241b0056a41106a29030037030020024180086a41086a200241b0056a41086a290300370300200220022903b00537038008200d422088a72105200a422088a7210f200a4280feffff0f83420888a72131200da7210b200aa7210841072130410021120c220b20024198046a20011088012002280298040d22200228029c04210941002103200241003a00a00f2007280200417f6a2104024003402004417f460d01200241800f6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a00f2004417f6a21042005210320054120470d000b41082130200241c8086a41086a200241d00c6a41086a290200370300200241c8086a41106a200241d00c6a41106a290200370300200241b0086a41086a200241a00a6a41086a290300370300200241b0086a41106a200241a00a6a41106a290300370300200220022902d00c3703c808200220022903a00a3703b0082002418f0f6a290000210a2002419f0f6a310000210e20022800830f210c20022f00810f211320022d00800f211e20022900870f210d20022900970f211420024198086a41106a200241b0046a41106a29020037030020024198086a41086a200241b0046a41086a290200370300200220022902b0043703980820024180086a41106a200241a8096a41106a29030037030020024180086a41086a200241a8096a41086a290300370300200220022903a809370380082014422088200e42208684210e200d422088a72105200a422088a7210f200a4280feffff0f83420888a721312014a72110200da7210b200aa72108410021120c220b200341ff0171450d22200241003a00a00f0c220b200241a0046a200110880120022802a0040d21200728020022044108490d2120022802a404210c20012802002203290000210a2001200441786a3602042001200341086a360200200a4280025a0d21200241c8086a41106a200241800f6a41106a290200370300200241c8086a41086a200241800f6a41086a290200370300200241b0086a41086a200241d00c6a41086a290300370300200241b0086a41106a200241d00c6a41106a29030037030020024198086a41086a200241a00a6a41086a29020037030020024198086a41106a200241a00a6a41106a290200370300200220022902800f3703c808200220022903d00c3703b008200220022902a00a3703980820024180086a41106a200241b0056a41106a29030037030020024180086a41086a200241b0056a41086a290300370300200220022903b00537038008200a422088a72105200aa7210b41092130410021120c200b200241a8046a200110880120022802a8040d2020022802ac04210941002104200241003a00a00f20072802002106417f21030240024002400240024002400240034020062004460d01200241800f6a20046a200128020022072d00003a00002001200620036a3602042001200741016a3602002002200441016a22053a00a00f2003417f6a21032005210420054120470d000b200241a00a6a411f6a200241800f6a411f6a310000220e3c0000200241a00a6a410f6a200241800f6a410f6a290000220a370000200220022900970f22153700b70a200220022900870f22183700a70a200220022800830f220c3600a30a200220022f00810f22133b00a10a200220022d00800f221e3a00a00a20062005460d2720072d000121042001200620036a22033602042001200741026a360200200441064b0d274200210d410021234100211120040e0725010203040506250b200441ff0171450d26200241003a00a00f0c260b20034110490d252007410a6a290000210d200729000221142001200620056b416f6a3602042001200741126a360200200da72123200d422088a721114201210d0c230b4202210d410021110c220b4203210d410021110c210b4204210d410021110c200b4205210d410021110c1f0b4206210d410021110c1e0b41002105200241003a00a00f2003417e6a21072003417d6a21030240034020072005460d01200241800f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00a00f2003417f6a21032006210520064120470d000b200241c8086a41086a200241d00c6a41086a290000370300200241c8086a41106a200241d00c6a41106a290000370300200241b0086a41086a200241a00a6a41086a290000370300200241b0086a41106a200241a00a6a41106a290000370300200220022900d00c3703c808200220022900a00a3703b0082002418f0f6a290000210a2002419f0f6a310000210e20022800830f210c20022f00810f211320022d00800f211e20022900870f210d20022900970f211420024198086a41106a200241b0056a41106a29000037030020024198086a41086a200241b0056a41086a290000370300200220022900b0053703980820024180086a41106a200241b0046a41106a29000037030020024180086a41086a200241b0046a41086a290000370300200220022900b004370380082014422088200e42208684210e200d422088a72105200a422088a7210f200a4280feffff0f83420888a721312014a72110200da7210b200aa72108410b2130410021120c1f0b200541ff0171450d1f200241003a00a00f0c1f0b2013201e411074722131200241c8086a41086a200241b0046a41086a290300370300200241c8086a41106a200241b0046a41106a290300370300200241b0086a41086a200241b0056a41086a290300370300200241b0086a41106a200241b0056a41106a290300370300200220022903b0043703c808200220022903b0053703b008200241980f6a290300211c200241800f6a41106a290300211b200241a00f6a280200213d2006280200213e2007280200213f20022903800f211620024198086a41106a200241a00a6a41106a29030037030020024198086a41086a200241a00a6a41086a290300370300200220022903a00a3703980820024180086a41106a200329030037030020024180086a41086a2004290300370300200220022903d00c37038008201d420886201784211d410221300c1d0b200241d00c6a200110a003024020022d00d00c410a460d00200241a00a6a200241d00c6a41c40010a1051a20004112360200200041046a200241a00a6a41c40010a1051a200041c8006a200241800f6a41e80110a1051a0c330b200041163602000c320b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541024b0d0041012107024002400240024020050e03020001020b41002105200241003a00f00c2003417e6a21072003417d6a21030240034020072005460d01200241d00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00f00c2003417f6a21032006210520064120470d000b20022d00ef0c210620022900e70c210a20022800e30c210c20022800df0c210b20022800db0c210920022800d70c210820022800d30c211020022f00d10c211120022d00d00c210f410221070c020b200541ff0171450d03200241003a00f00c0c030b41002105200241003a00f00c2003417e6a210c417d21060340200c2005460d02200241d00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00f00c2006417f6a21062007210520074120470d000b200320076b2203417e6a4110490d0220022d00ef0c210620022900e70c210a20022800e30c210c20022800df0c210b20022800db0c210920022800d70c210820022800d30c211020022f00d10c211120022d00d00c210f200420076a2204410a6a290000210e200441026a290000210d20012003416e6a22053602042001200441126a220736020020054110490d022004411a6a29000021152007290000211420012003415e6a22053602042001200441226a220736020020054104490d022007280000211220012003415a6a3602042001200441266a360200410321070b200020113b000a2000200f3a000920004113360200200041c8006a2015370200200041c0006a2014370200200041386a200e370200200041306a200d370200200041d0006a2012360200200041286a20063a0000200041206a200a3700002000411c6a200c360000200041186a200b360000200041146a2009360000200041106a20083600002000410c6a2010360000200041086a20073a0000200041d8006a200241800f6a41d80110a1051a0c330b200541ff0171450d00200241003a00f00c0b200041163602000c310b02402006450d0020012003417e6a3602042001200441026a3602000b200041163602000c300b200041163602000c2f0b200241d00c6a200110a10320022d00d00c4104470d16200041163602000c2e0b1032000b20042003418ca9c0001044000b20042003418ca9c0001044000b20042003418ca9c0001044000b20042003418ca9c0001044000b20032008418ca9c0001044000b20042003418ca9c0001044000b20042003418ca9c0001044000b200c10230c1d0b20042003418ca9c0001044000b20042003418ca9c0001044000b20032005418ca9c0001044000b200410230b200041163602000c200b20042005418ca9c0001044000b20042003418ca9c0001044000b20042008418ca9c0001044000b20042003418ca9c0001044000b20042003418ca9c0001044000b20042003418ca9c0001044000b20122004418ca9c0001044000b1033000b200241a00a6a41206a200241d00c6a41206a290300220a370300200241a00a6a41186a200241d00c6a41186a290300220d370300200241a00a6a41106a200241d00c6a41106a290300220e370300200241a00a6a41086a200241d00c6a41086a2903002214370300200220022903d00c22153703a00a20004115360200200020153702042000410c6a2014370200200041146a200e3702002000411c6a200d370200200041246a200a3702002000412c6a200241800f6a41840210a1051a0c170b200241c8086a41086a200241d00c6a41086a290200370300200241c8086a41106a200241d00c6a41106a290200370300200241b0086a41086a200241b0056a41086a290300370300200241b0086a41106a200241b0056a41106a29030037030020024198086a41086a200241b0046a41086a29020037030020024198086a41106a200241b0046a41106a290200370300200220022902d00c3703c808200220022903b0053703b008200220022902b0043703980820024180086a41106a200241a8096a41106a29030037030020024180086a41086a200241a8096a41086a290300370300200220022903a809370380082015422088200e42ff018342208684210e2014422888211d2014422088a721122018422088a72105200a422088a7210f200a4280feffff0f83420888a721312014a7211f2015a721102018a7210b200aa72108410a21300b200241e8076a41106a2201200241c8086a41106a290300370300200241e8076a41086a2204200241c8086a41086a290300370300200241d0076a41086a2203200241b0086a41086a290300370300200241d0076a41106a2206200241b0086a41106a290300370300200241b8076a41086a220720024198086a41086a290300370300200241b8076a41106a222f20024198086a41106a290300370300200220022903c8083703e807200220022903b0083703d00720022002290398083703b807200241a0076a41106a224020024180086a41106a290300370300200241a0076a41086a224120024180086a41086a29030037030020022002290380083703a007200041d8006a2015370200200041d0006a2014370200200041186a2031410874ad2008ad42ff0183843e0200200041106a2005ad422086200bad84370200200041e8006a202a360200200041e4006a202b3602002000202e3b00622000202d3a0061200041e0006a20253a0000200041cc006a2028360200200020293b014a200020273a0049200041c8006a20263a0000200041c4006a2011360200200041c0006a2023360200200041386a201d4228862012ad42ff018342208684201fad84370200200041306a200d3702002000412c6a2009360200200041246a200e370200200041206a20103602002000411c6a200f3602002000410c6a200c360200200020133b000a2000201e3a0009200041086a20303a00002000411136020020004188016a20333602002000418c016a2032360200200020343b008601200020353a00850120004184016a202c3a0000200041a8016a20363a00002000203a3a00a901200020393b00aa01200041b0016a2037360200200041ac016a2038360200200041fc006a2001290300370200200041f4006a2004290300370200200041ec006a20022903e80737020020004190016a20022903d00737020020004198016a2003290300370200200041a0016a2006290300370200200041cc016a20223a00002000203b3a00cd012000203c3b00ce01200041d4016a2021360200200041d0016a20203602002000419f026a200a4210883c00002000419d026a200a3d0000200041a8026a20193e0000200041a0026a20183700002000201a3700950220004188026a201c37020020004180026a201b37020020004194026a20243a0000200041ac026a410036020020004190026a203d360200200041fc016a203e360200200041f8016a203f360200200041f0016a2016370200200041c4016a202f290300370200200041bc016a2007290300370200200041b4016a20022903b807370200200041d8016a20022903a007370200200041e0016a2041290300370200200041e8016a20402903003702000c150b200041163602000c140b200510230b200041163602000c120b102a000b200041163602000c100b4100210c02402004450d00200610230b41022106410021080b41000d062006450d06200241800f6a200110820202400240024020022802800f450d00200241d00c6a200241800f6a41c00110a1051a200728020022034110490d012001280200220441086a29000021142004290000210e2001200441106a3602002001200341706a220536020420054110490d01200441186a2900002118200429001021152001200341606a22053602042001200441206a36020020054110490d01200441286a290000211a200429002021192001200341506a22053602042001200441306a36020020054104490d022004280030213920012003414c6a3602042001200441346a36020020024190096a41086a2002418c0d6a29020037030020024190096a41106a200241940d6a2902003703002002200241d00c6a41346a29020037039009200241f00c6a290300210d200241d00c6a41106a2d00002111200241e40c6a2802002124200241d00c6a41286a2d0000211e200241fc0c6a280200211f20022903e80c210a20022802d00c210920022802d40c211020022802d80c212220022802dc0c212120022d00e10c211220022f01e20c213a20022d00f90c212e20022f01fa0c213220022802800d2123200241f8086a41086a200241b00d6a290300370300200241f8086a41106a200241b80d6a290300370300200241c8086a41086a200241d40d6a290200370300200241c8086a41106a200241dc0d6a2902003703002002200241a80d6a2903003703f8082002200241cc0d6a2902003703c808200241a00d6a28020021262002419c0d6a2d00002125200241c40d6a2802002129200241c00d6a2d0000212820022802a40d212720022f019e0d213620022d009d0d213320022802c80d212a20022f01c20d213420022d00c10d2135200241b0086a41106a200241800e6a290300370300200241b0086a41086a200241f80d6a2903003703002002200241f00d6a2903003703b008200241e80d6a280200212c200241e40d6a2d0000212b200241880e6a290300211b20022802ec0d212d20022f01e60d213820022d00e50d2137411821130c0b0b200c0d040c080b200241d00c6a108302200c41808080807872418080808078470d030c070b200241d00c6a108302200c450d060c020b4100210c02402004450d00200610230b41022106410021080b41000d042006450d04200241800f6a200110820202400240024020022802800f450d00200241d00c6a200241800f6a41c00110a1051a200728020022034110490d012001280200220441086a29000021142004290000210e2001200441106a3602002001200341706a220536020420054110490d01200441186a2900002118200429001021152001200341606a22053602042001200441206a36020020054110490d01200441286a290000211a200429002021192001200341506a22053602042001200441306a36020020054104490d022004280030213920012003414c6a3602042001200441346a36020020024190096a41086a2002418c0d6a29020037030020024190096a41106a200241940d6a2902003703002002200241d00c6a41346a29020037039009200241f00c6a290300210d200241d00c6a41106a2d00002111200241e40c6a2802002124200241d00c6a41286a2d0000211e200241fc0c6a280200211f20022903e80c210a20022802d00c210920022802d40c211020022802d80c212220022802dc0c212120022d00e10c211220022f01e20c213a20022d00f90c212e20022f01fa0c213220022802800d2123200241f8086a41086a200241b00d6a290300370300200241f8086a41106a200241b80d6a290300370300200241c8086a41086a200241d40d6a290200370300200241c8086a41106a200241dc0d6a2902003703002002200241a80d6a2903003703f8082002200241cc0d6a2902003703c808200241a00d6a28020021262002419c0d6a2d00002125200241c40d6a2802002129200241c00d6a2d0000212820022802a40d212720022f019e0d213620022d009d0d213320022802c80d212a20022f01c20d213420022d00c10d2135200241b0086a41106a200241800e6a290300370300200241b0086a41086a200241f80d6a2903003703002002200241f00d6a2903003703b008200241e80d6a280200212c200241e40d6a2d0000212b200241880e6a290300211b20022802ec0d212d20022f01e60d213820022d00e50d2137411721130c090b200c0d020c060b200241d00c6a108302200c41808080807872418080808078470d010c050b200241d00c6a108302200c450d040b200610230c030b0c040b4100210802402001450d00200c10230b4104210c410021090b41000d00200c450d004110211320024190096a41106a200241800f6a41106a29020037030020024190096a41086a200241800f6a41086a290200370300200241f8086a41086a200241d00c6a41086a290200370300200241f8086a41106a200241d00c6a41106a290200370300200241c8086a41086a200241a00a6a41086a290200370300200241c8086a41106a200241a00a6a41106a290200370300200220022902800f37039009200220022902d00c3703f808200220022902a00a3703c808200241b0086a41106a200241b0046a41106a290200370300200241b0086a41086a200241b0046a41086a290200370300200220022902b0043703b0080c020b200041163602000c070b4100211041002109410021080b20024198086a41106a220120024190096a41106a29030037030020024198086a41086a220420024190096a41086a29030037030020024180086a41086a2203200241f8086a41086a29030037030020024180086a41106a2205200241f8086a41106a290300370300200241e8076a41086a2207200241c8086a41086a290300370300200241e8076a41106a2220200241c8086a41106a290300370300200220022903900937039808200220022903f80837038008200220022903c8083703e807200241d0076a41106a223b200241b0086a41106a290300370300200241d0076a41086a223c200241b0086a41086a290300370300200220022903b0083703d007200041386a200d370200200041306a200a370200200041186a2010ad4220862009ad84370200200041106a2008ad422086200cad84370200200041c8006a2023360200200041c4006a201f360200200020323b00422000202e3a0041200041c0006a201e3a00002000412c6a20243602002000203a3b012a200020123a0029200041286a20113a0000200041246a2021360200200041206a20223602002000410c6a20063602002000200f3b010a2000200b3a0009200041086a20133a000020004106360200200041e8006a2026360200200041ec006a2027360200200020363b0066200020333a0065200041e4006a20253a0000200041cc006a200229039808370200200041d4006a2004290300370200200041dc006a20012903003702002000418c016a202936020020004190016a202a360200200020343b008a01200020353a00890120004188016a20283a0000200041f0006a200229038008370200200041f8006a200329030037020020004180016a2005290300370200200041a4016a20202903003702002000419c016a200729030037020020004194016a20022903e807370200200041b4016a202d360200200041b0016a202c360200200020383b00ae01200020373a00ad01200041ac016a202b3a0000200041c8016a203b290300370200200041c0016a203c290300370200200041b8016a20022903d00737020020004188026a201a37020020004180026a2019370200200041f8016a2018370200200041f0016a2015370200200041e8016a2014370200200041e0016a200e370200200041d8016a2039360200200041d0016a201b370200200041a8026a200241b0056a41186a290300370300200041a0026a200241b0056a41106a29030037030020004198026a200241b0056a41086a29030037030020004190026a20022903b0053703000c050b42002118420021194200211a4200211b4200211c4200211d420021170b200020053b002a200020033a0029200020123b000a200020133a000920004104360200200041c0006a201d200d84370200200041386a200e370200200041306a20143702002000412c6a2004360000200041286a200b3a0000200041206a200a3700002000411c6a2009360000200041186a2008360000200041146a2010360000200041106a20113600002000410c6a200f360000200041086a20013a0000200041d0006a201b201984201584370200200041d8006a201c201a84201884370200200041c8006a2017201642ffffffffffffffff008384370200200041e0006a200241800f6a41d00110a1051a0c030b200041163602000c020b200610230b200041163602000b200241b0116a24000b990403037f017e047f230041206b22022400200241086a2001108801024002400240024002402002280208450d00200041003602000c010b200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d012005a72204417f4c0d010240024020040d00410421060c010b200410212206450d030b41002107200241003602182002200636021020022004410c6e3602140240024002402003450d0003402002200110880120022802000d03200128020420022802042204490d032004417f4c0d050240024020040d00410121080c010b200410272208450d0720012802042004490d0320082001280200200410a1051a200128020422092004490d082001200920046b3602042001200128020020046a3602000b2004ad22054220862005842105024020072002280214470d00200241106a2007410110950120022802102106200228021821070b20062007410c6c6a22042005370204200420083602002002200741016a22073602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c020b200810230b2000410036020002402007450d002007410c6c21012006210403400240200441046a280200450d00200428020010230b2004410c6a2104200141746a22010d000b0b20022802142204450d002004410c6c450d00200610230b200241206a24000f0b1032000b1033000b20042009418ca9c0001044000ba00a03077f037e057f230041d0026b2202240041002103200241003a00c8022001280204417f6a210402400240024002400240024003402004417f460d01200241a8026a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8022004417f6a21042005210320054120470d000b200241e8006a41086a200241a8026a41086a290300370300200241e8006a41106a200241a8026a41106a290300370300200241e8006a41186a200241a8026a41186a290300370300200220022903a8023703682002200110880120022802000d022002280204210641002104200241003a00c80220012802042107417f2103034020072004460d02200241a8026a20046a200128020022082d00003a00002001200720036a3602042001200841016a3602002002200441016a22053a00c8022003417f6a21032005210420054120470d000b200241a8016a41086a200241a8026a41086a2903002209370300200241a8016a41106a200241a8026a41106a290300220a370300200241a8016a41186a200241a8026a41186a290300220b37030020024188016a41086a200937030020024188016a41106a200a37030020024188016a41186a200b370300200220022903a80222093703a801200220093703880141002104200241003a00c802200720056b210c200720036a21030340200c2004460d04200241a8026a20046a200820046a220541016a2d00003a0000200120033602042001200541026a3602002002200441016a22053a00c8022003417f6a21032005210420054120470d000b200241e8016a41086a200241a8026a41086a2903002209370300200241e8016a41106a200241a8026a41106a290300220a370300200241e8016a41186a200241a8026a41186a290300220b370300200241c8016a41086a22042009370300200241c8016a41106a2203200a370300200241c8016a41186a2205200b370300200220022903a80222093703e801200220093703c801200241a8026a200110b00420022802a8022201450d04200241c8006a41086a2208200241e8006a41086a290300370300200241c8006a41106a2207200241e8006a41106a290300370300200241c8006a41186a220c200241e8006a41186a290300370300200241286a41086a220d20024188016a41086a290300370300200241286a41106a220e20024188016a41106a290300370300200241286a41186a220f20024188016a41186a29030037030020022002290368370348200220022903880137032820022902ac022109200241086a41186a22102005290300370300200241086a41106a22052003290300370300200241086a41086a22032004290300370300200220022903c801370308200020093702082000200136020420002006360200200041106a2002290348370200200041186a2008290300370200200041206a2007290300370200200041286a200c290300370200200041306a2002290328370200200041386a200d290300370200200041c0006a200e290300370200200041c8006a200f290300370200200041e8006a2010290300370200200041e0006a2005290300370200200041d8006a2003290300370200200041d0006a20022903083702000c050b0240200341ff0171450d00200241003a00c8020b200041003602040c040b0240200441ff0171450d00200241003a00c8020b200041003602040c030b200041003602040c020b0240200441ff0171450d00200241003a00c8020b200041003602040c010b200041003602040b200241d0026a24000bba3308037f017e217f027e1b7f067e0d7f027e230041e0076b22022400200241186a200110880102400240024002402002280218450d00200041003602000c010b200228021c220320012802044188026e2204200420034b1bad4288027e2205422088a70d022005a72204417f4c0d020240024020040d00410821060c010b200410212206450d020b2002410036022820022006360220200220044188026e360224024002402003450d004100210741002108034002400240200128020422094104490d002001280200220a280000210b20012009417c6a220c3602042001200a41046a36020041002104200241003a00b8072009417b6a21090240024002400240024002400240024002400240024002400240024002400240024002400340200c2004460d0120024198076a20046a200a20046a220d41046a2d00003a0000200120093602042001200d41056a3602002002200441016a220d3a00b8072009417f6a2109200d2104200d4120470d000b20024198056a41186a220e20024198076a41186a220f29030037030020024198056a41106a221020024198076a41106a221129030037030020024198056a41086a221220024198076a41086a2213290300370300200220022903980737039805200241106a200110880120022802100d12200128020420022802142209490d122009417f4c0d1920090d01410121140c020b200441ff0171450d11200241003a00b8070c110b200910272214450d1620012802042009490d0120142001280200200910a1051a200128020422042009490d072001200420096b3602042001200128020020096a3602000b2014450d0f41002104200241003a00b8072009ad22054220862005842205422088a721152005a721162001280204210c417f210902400340200c2004460d0120024198076a20046a2001280200220a2d00003a00002001200c20096a3602042001200a41016a3602002002200441016a220d3a00b8072009417f6a2109200d2104200d4120470d000b200241d8056a41186a2217200f290300370300200241d8056a41106a22182011290300370300200241d8056a41086a2219201329030037030020022002290398073703d80541002104200241003a00d807200d200c6b211a200c200d6b21090340201a20046a450d0320024198076a20046a200a20046a220d41016a2d00003a000020012009417f6a22093602042001200d41026a3602002002200441016a220d3a00d807200d2104200d41c000470d000b200241d8066a41386a221b20024198076a41386a221c290300370300200241d8066a41306a221d20024198076a41306a221e290300370300200241d8066a41286a221f20024198076a41286a2220290300370300200241d8066a41206a220c20024198076a41206a2221290300370300200241d8066a41186a221a200f290300370300200241d8066a41106a22222011290300370300200241d8066a41086a2223201329030037030020022002290398073703d80641002104200241003a00b807200a200d6a210a03402009450d0420024198076a20046a200a20046a220d41016a2d00003a000020012009417f6a22093602042001200d41026a3602002002200441016a220d3a00b807200d2104200d4120470d000b20024198066a41186a2224200f29030037030020024198066a41106a2225201129030037030020024198066a41086a2226201329030037030020022002290398073703980620094110490d05200a200d6a220441096a2900002127200441016a29000021282001200941706a3602042001200441116a36020020024198076a200110cb032002280298072209450d05200229029c0721054100210d200241003a00b8072001280204417f6a210403402004417f460d0520024198076a200d6a2001280200220a2d00003a0000200120043602042001200a41016a3602002002200d41016a220a3a00b8072004417f6a2104200a210d200a4120470d000b200241e0046a41186a2229200f290300370300200241e0046a41106a222a2011290300370300200241e0046a41086a222b2013290300370300200241c0046a41086a222c2012290300370300200241c0046a41106a222d2010290300370300200241c0046a41186a222e200e29030037030020022002290398073703e00420022002290398053703c004200241a0046a41186a222f2017290300370300200241a0046a41106a22302018290300370300200241a0046a41086a22312019290300370300200220022903d8053703a004200241e0036a41386a2232201b290300370300200241e0036a41306a2233201d290300370300200241e0036a41286a2234201f290300370300200241e0036a41206a2235200c290300370300200241e0036a41186a2236201a290300370300200241e0036a41106a22372022290300370300200241e0036a41086a22382023290300370300200220022903d8063703e003200241c0036a41186a22392024290300370300200241c0036a41106a223a2025290300370300200241c0036a41086a223b202629030037030020022002290398063703c003200241086a20011088012005422088a7213c2005a7213d2002280208450d060c0e0b0240200441ff0171450d00200241003a00b8070b2016450d0f0b201410230c0e0b0240200441ff0171450d00200241003a00d8070b2016450d0d201410230c0d0b0240200441ff0171450d00200241003a00b8070b2016450d0c201410230c0c0b0240200d41ff0171450d00200241003a00b8070b02402005422088a72204450d002004410474210d2009210403400240200441046a280200450d00200428020010230b200441106a2104200d41706a220d0d000b0b200542ffffffff0083500d00200910230b2016450d0a201410230c0a0b200228020c223e200128020441c1006e22042004203e4b1bad42c1007e2205422088a70d102005a72204417f4c0d100240024020040d004101213f0c010b20041021223f450d100b4100214020024100360290052002203f360288052002200441c1006e220436028c05024002400240024002400240024002400240203e450d00410021404100214103402001280204220d450d04200128020022422d000021042001200d417f6a22433602042001204241016a3602002004417f6a220441014b0d0402400240024020040e020001000b41002104200241003a00d807200d417e6a210d0240034020432004460d0120024198076a20046a204220046a220a41016a2d00003a00002001200d3602042001200a41026a3602002002200441016a220a3a00d807200d417f6a210d200a2104200a41c000470d000b201b201c2903002205370300201d201e2903002244370300201f20202903002245370300200c20212903002246370300201a200f290300224737030020262013290300370300202520112903003703002024204737030020024198066a41206a204637030020024198066a41286a204537030020024198066a41306a204437030020024198066a41386a20053703002002200229039807370398064100210d0c020b200441ff01710d050c060b41002104200241003a00d807200d417e6a210d034020432004460d0420024198076a20046a204220046a220a41016a2d00003a00002001200d3602042001200a41026a3602002002200441016a220a3a00d807200d417f6a210d200a2104200a41c000470d000b201b201c2903002205370300201d201e2903002244370300201f20202903002245370300200c20212903002246370300201a200f290300224737030020262013290300370300202520112903003703002024204737030020024198066a41206a204637030020024198066a41286a204537030020024198066a41306a204437030020024198066a41386a20053703002002200229039807370398064101210d0b204141016a2141200241d8056a41386a20024198066a41386a2903002205370300200241d8056a41306a20024198066a41306a2903002244370300200241d8056a41286a20024198066a41286a2903002245370300200241d8056a41206a20024198066a41206a29030022463703002017202429030022473703002018202529030022483703002019202629030022493703002012204937030020102048370300200e204737030020024198056a41206a220a204637030020024198056a41286a2242204537030020024198056a41306a2243204437030020024198056a41386a224a2005370300200220022903980622053703d805200220053703980502402040200228028c05470d0020024188056a20404101109d01200228028805213f20022802900521400b203f204041c1006c6a2204200d3a00002004200229039805370001200441096a2012290300370000200441116a2010290300370000200441196a200e290300370000200441216a200a290300370000200441296a2042290300370000200441316a2043290300370000200441396a204a2903003700002002204041016a2240360290052041203e470d000b200228028c0521040b203f450d0f2002200110880120022802000d072002280204220a41076a221b410376220d450d04200d1027221d450d172001280204200d490d06201d2001280200200d10a10521432001280204221f200d4f0d03200d201f418ca9c0001044000b200441ff0171450d010b200241003a00d8070b200228028c052204450d0c200441c1006c450d0c203f10230c0c0b2001201f200d6b36020420012001280200200d6a360200200d1021221f450d13200d2142204321430c010b419ca8c700211d4101211f41002142410121430b201f201d200d10a105211d2002200d3602dc07201b4188808080024f0d032002201b417871223e36028805201b41ffffffff014b0d0402400240200d0d004100211f0c010b4101211f200d4101460d00203e41786a41037641016a211f0b2002201f360298052002201d201f6a221f3602d805201f201d490d05201b41f8ffffff0171221b200a490d082002200a3602d805200a41ffffffff014b0d0620022042410374221f36029806201f200a490d07201d4101201b1b211b0240200d450d00204310230b201b450d01200a410374214b200c200241e0046a41206a280200360200201a20292903003703002022202a2903003703002023202b2903003703002026202c2903003703002025202d2903003703002024202e290300370300200220022903e0043703d806200220022903c004370398062017202f2903003703002018203029030037030020192031290300370300201c2032290300370300201e20332903003703002020203429030037030020212035290300370300200f20362903003703002011203729030037030020132038290300370300200220022903a0043703d805200220022903e00337039807200e20392903003703002010203a2903003703002012203b290300370300200220022903c00337039805201b214c2042214d2040214e2004214f203f2150201521512016215220142153200b2154203c2155203d215620282157202721580c0c0b201d10230b02402004450d00200441c1006c450d00203f10230b02402016450d00201410230b0240203c450d00203c410474210d2009210403400240200441046a280200450d00200428020010230b200441106a2104200d41706a220d0d000b0b203d41ffffffff0071450d090c080b20092004418ca9c0001044000b200241e4066a4101360200200241ac076a41023602002002420237029c07200241e0e9c20036029807200241dce9c2003602e006200241013602dc062002200241d8066a3602a8072002200241dc076a3602d80620024198076a419ca8c700103a000b200241e4066a4101360200200241ac076a41023602002002420237029c07200241ccc7c40036029807200241c8c7c4003602e006200241013602dc062002200241d8066a3602a807200220024188056a3602d80620024198076a419ca8c700103a000b20024198076a41146a411336020020024198076a410c6a4114360200200241d8066a41146a4103360200200241d8066a410c6a4103360200200241f4c7c4003602e006200241033602dc06200241dcc7c4003602d8062002411336029c072002201d36029806200220024198076a3602e8062002200241d8056a3602a807200220024198056a3602a007200220024198066a36029807200241d8066a419ca8c700103a000b200241e4066a4101360200200241ac076a41023602002002420237029c07200241f0e9c20036029807200241c8c7c4003602e006200241013602dc062002200241d8066a3602a8072002200241d8056a3602d80620024198076a419ca8c700103a000b200241e4066a4101360200200241ac076a41023602002002420237029c0720024180eac20036029807200241013602dc062002200241d8066a3602a807200220024198066a3602e0062002200241d8056a3602d80620024198076a419ca8c700103a000b4190eac2004126418c94c700102d000b02402016450d00201410230b0240203c450d00203c410474210d2009210403400240200441046a280200450d00200428020010230b200441106a2104200d41706a220d0d000b0b203d41ffffffff0071450d010b200910230b410021090b20024198036a41206a2204200241d8066a41206a28020036020020024198036a41186a220d200241d8066a41186a29030037030020024198036a41106a220a200241d8066a41106a29030037030020024198036a41086a220c200241d8066a41086a290300370300200241f8026a41086a220b20024198066a41086a290300370300200241f8026a41106a220f20024198066a41106a290300370300200241f8026a41186a221120024198066a41186a290300370300200220022903d8063703980320022002290398063703f802200241d8026a41186a2213200241d8056a41186a290300370300200241d8026a41106a220e200241d8056a41106a290300370300200241d8026a41086a2210200241d8056a41086a29030037030020024198026a41086a221220024198076a41086a29030037030020024198026a41106a221a20024198076a41106a29030037030020024198026a41186a221420024198076a41186a29030037030020024198026a41206a221620024198076a41206a29030037030020024198026a41286a221520024198076a41286a29030037030020024198026a41306a221720024198076a41306a29030037030020024198026a41386a221820024198076a41386a290300370300200220022903d8053703d802200220022903980737039802200241f8016a41186a221920024198056a41186a290300370300200241f8016a41106a221b20024198056a41106a290300370300200241f8016a41086a221d20024198056a41086a29030037030020022002290398053703f8012009450d02200841016a2108200241d0016a41206a221f2004280200360200200241d0016a41186a2222200d290300370300200241d0016a41106a220d200a290300370300200241d0016a41086a220a200c290300370300200241b0016a41086a220c200b290300370300200241b0016a41106a220b200f290300370300200241b0016a41186a220f201129030037030020022002290398033703d001200220022903f8023703b00120024190016a41186a2211201329030037030020024190016a41106a2213200e29030037030020024190016a41086a220e2010290300370300200241d0006a41086a22102012290300370300200241d0006a41106a2212201a290300370300200241d0006a41186a221a2014290300370300200241d0006a41206a22142016290300370300200241d0006a41286a22162015290300370300200241d0006a41306a22152017290300370300200241d0006a41386a22172018290300370300200220022903d802370390012002200229039802370350200241306a41186a22182019290300370300200241306a41106a2219201b290300370300200241306a41086a221b201d290300370300200220022903f801370330024020072002280224470d00200241206a2007410110990120022802202106200228022821070b200620074188026c6a220420583703082004205737030020042009360210200441186a2055360200200441146a2056360200200a2903002105200d290300212720222903002128201f280200210920022903d0012144200441cc006a2051360200200441c8006a2052360200200441c4006a2053360200200441c0006a20543602002004413c6a2009360200200441346a20283702002004412c6a2027370200200441246a20053702002004411c6a2044370200200441e8006a200f290300370200200441e0006a200b290300370200200441d8006a200c290300370200200441d0006a20022903b00137020020044188016a201129030037020020044180016a2013290300370200200441f8006a200e290300370200200441f0006a200229039001370200200441a8016a201a290300370200200441a0016a201229030037020020044198016a201029030037020020044190016a2002290350370200200441c0016a2015290300370200200441b8016a2016290300370200200441b0016a2014290300370200200441c8016a2017290300370200200441e8016a2018290300370200200441e0016a2019290300370200200441d8016a201b290300370200200441d0016a200229033037020020044184026a204d36020020044180026a204b360200200441fc016a204c360200200441f8016a204e360200200441f4016a204f360200200441f0016a20503602002002200741016a220736022820082003470d000b0b20002002290320370200200041086a200241206a41086a2802003602000c010b2000410036020002402007450d0020074188026c2109200621040340200410a20320044188026a2104200941f87d6a22090d000b0b20022802242204450d0020044188026c450d00200610230b200241e0076a24000f0b1033000b1032000bd10b010b7f230041d0016b2202240002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a3602002005417f6a220541024b0d000240024002400240024020050e03000102000b41002105200241003a00a8012003417f6a2106417e21070240034020062005460d0120024188016a20056a200420056a220841016a2d00003a00002001200320076a3602042001200841026a3602002002200541016a22083a00a8012007417f6a21072008210520084120470d000b200241c8006a41186a20024188016a41186a290300370300200241c8006a41106a20024188016a41106a290300370300200241c8006a41086a20024188016a41086a29030037030020022002290388013703482008417f7320036a2107200420086a41016a210841002106200241c8006a21050c030b200541ff0171450d04200241003a00a8010c040b41002105200241003a00a8012003417f6a2106417e21070240034020062005460d0120024188016a20056a200420056a220841016a2d00003a00002001200320076a3602042001200841026a3602002002200541016a22083a00a8012007417f6a21072008210520084120470d000b200241c8006a41186a20024188016a41186a290300370300200241c8006a41106a20024188016a41106a290300370300200241c8006a41086a20024188016a41086a29030037030020022002290388013703482008417f7320036a210741012106200420086a41016a2108200241c8006a21050c020b200541ff0171450d03200241003a00a8010c030b41002105200241003a00a8012003417f6a2106417e2107034020062005460d0220024188016a20056a200420056a220841016a2d00003a00002001200320076a3602042001200841026a3602002002200541016a22083a00a8012007417f6a21072008210520084120470d000b200241c8006a41186a20024188016a41186a290300370300200241c8006a41106a20024188016a41106a290300370300200241c8006a41086a20024188016a41086a29030037030020022002290388013703482008417f7320036a2107200420086a41016a210841022106200241c8006a21050b200241286a41186a200541186a290000370300200241286a41106a200541106a290000370300200241286a41086a200541086a2900003703002002200529000037032841002105200241003a00c8012007417f6a2103034020072005460d0320024188016a20056a200820056a22042d00003a0000200120033602042001200441016a3602002002200541016a22043a00c8012003417f6a210320042105200441c000470d000b200241c8006a41386a220120024188016a41386a290300370300200241c8006a41306a220520024188016a41306a290300370300200241c8006a41286a220320024188016a41286a290300370300200241c8006a41206a220420024188016a41206a290300370300200241c8006a41186a220720024188016a41186a290300370300200241c8006a41106a220820024188016a41106a290300370300200241c8006a41086a220920024188016a41086a290300370300200241086a41086a220a200241286a41086a290300370300200241086a41106a220b200241286a41106a290300370300200241086a41186a220c200241286a41186a290300370300200220022903880137034820022002290328370308200020063a000020002002290308370001200041096a200a290300370000200041116a200b290300370000200041196a200c290300370000200041216a2002290348370000200041296a2009290300370000200041316a2008290300370000200041396a2007290300370000200041c1006a2004290300370000200041c9006a2003290300370000200041d1006a2005290300370000200041d9006a20012903003700000c030b200541ff0171450d00200241003a00a8010b200041033a00000c010b0240200541ff0171450d00200241003a00c8010b200041033a00000b200241d0016a24000b9b1201037f024002402000280200220141144b0d000240024002400240024002400240024002400240024020010e15000c0c0c0c01020c030c04050c060c0708090a0c0c000b200041086a280200417e6a220141074b0d0b02400240024002400240024020010e080011010211030405000b200041106a280200450d102000410c6a28020010230f0b200041106a280200450d0f2000410c6a28020010230f0b200041106a280200450d0e2000410c6a28020010230f0b0240200041146a2802002202450d002000410c6a2802002101200241186c210203400240200141046a280200450d00200128020010230b0240200141106a280200450d002001410c6a28020010230b200141186a2101200241686a22020d000b0b200041106a2802002201450d0d200141186c450d0d200028020c10230f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d0c2001410c6c450d0c200028020c10230f0b200041106a280200450d0b2000410c6a28020010230f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a2101034020011096030240200141046a2802002203450d00200341246c450d00200128020010230b200141f0006a2101200241907f6a22020d000b0b200041086a2802002201450d0a200141f0006c450d0a200028020410230f0b0240200041086a2d0000220141174b0d000240024002400240024020010e180f0f0f0f0f0f000f0f0f0f0f0f010f0f02030f0f0f0f0f040f0b200041106a28020041ffffff3f71450d0e2000410c6a28020010230f0b200041106a28020041ffffff3f71450d0d2000410c6a28020010230f0b200041146a28020041ffffffff0371450d0c200041106a28020010230f0b200041146a2802002201450d0b200141246c450d0b200041106a28020010230f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010230b200041186a1083020f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010230b200041186a1083020f0b20002802042201450d08200041086a280200450d08200110230f0b200041086a280200450d07200028020410230f0b02402000410c6a280200450d00200041086a28020010230b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d062001410c6c450d06200028021410230f0b02402000280204220141014b0d00024020010e020700070b0240200041106a2802002202450d00200041086a280200210120024188026c21020340200110a20320014188026a2101200241f87d6a22020d000b0b2000410c6a2802002201450d0620014188026c450d06200028020810230f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d00200128020010230b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d052001410c6c450d05200028020c10230f0b20002d0004417f6a220141034b0d040240024020010e0400060601000b0240200041106a280200450d002000410c6a28020010230b2000411c6a280200450d05200041186a28020010230f0b02402000410c6a280200450d00200041086a28020010230b200041186a280200450d04200041146a28020010230f0b024020002d0004220141044b0d00024002400240024020010e050800010203080b0240200041106a2802002202450d00200041086a2802002101200241b0026c210203402001109e03200141b0026a2101200241d07d6a22020d000b0b2000410c6a2802002201450d07200141b0026c450d07200028020810230f0b200041086a2201280200109e03200128020010230f0b02402000410c6a28020041ffffff3f71450d00200041086a28020010230b200041206a2201280200109e03200128020010230f0b2000412c6a28020041ffffff3f71450d04200041286a28020010230f0b2000412c6a28020041ffffff3f71450d03200041286a28020010230f0b200041086a2d0000417e6a220141014b0d020240024020010e020001000b0240200041146a2802002202450d002000410c6a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b0240200041106a2802002201450d00200141c8006c450d00200028020c10230b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010230b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010230b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010230b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010230b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010230b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010230b200041f0016a2d00004101470d03200041f8016a280200450d03200041f4016a28020010230f0b0240200041146a2802002201450d00200141c4006c21022000410c6a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010230b200141c4006a2101200241bc7f6a22020d000b0b200041106a2802002201450d02200141c4006c450d02200028020c10230f0b20002d0004417f6a220141024b0d010240024020010e03000301000b200041286a2201280200109e03200128020010230f0b2000410c6a28020041ffffff3f71450d01200041086a28020010230c010b024020002d0004220141024b0d00024020010e03020002020b200041086a2201280200109e03200128020010230f0b200041286a2201280200109e03200128020010230f0b0b8611010a7f23004180016b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a2207360200200541254b0d014100210820050e261301010101010101010101010101010101010101010101010101010101010101010102030405130b200041063a00000c130b02402005417f6a41ff01714121490d00200041063a00000c130b02402005417f6a22090d0020012006360204200120073602004101210a410021094100210b410121080c120b0240024020091027220a450d0020012802042009490d01200a2001280200200910a1051a200128020422052009490d062001200520096b3602042001200128020020096a360200410121082009210b0c130b1033000b200041063a0000200a10230c120b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c100b41012101200541ff01710d040c0e0b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c0d0b41012101200541ff01710d040c0b0b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c0a0b41012101200541ff01710d040c080b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c070b41012101200541ff01710d040c050b20092005418ca9c0001044000b200241003a00780c090b200241003a00780c060b200241003a00780c030b200241003a00780b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410521080c070b200041063a00000c070b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410421080c050b200041063a00000c050b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410321080c030b200041063a00000c030b0b410221082002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b0124200220022903283703100c010b200041063a00000c010b200020083a0000200020022f01243b00012000410c6a2009360000200041086a200b360000200041046a200a360000200041106a2002290310370000200041216a20022f000d3b0000200041036a200241246a41026a2d00003a0000200041186a200241106a41086a290300370000200041206a200241106a41106a2d00003a0000200041236a2002410d6a41026a2d00003a00000b20024180016a24000bbc1e03077f047e017f230041e0056b2202240002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541084b0d0a20050e09010203040506070809010b2000410a3a00000c0a0b41002105200241003a00d0032003417f6a21062003417e6a2107024002400240034020062005460d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b200241c0006a41086a200241b0036a41086a290300370300200241c0006a41106a200241b0036a41106a290300370300200241c0006a41186a200241b0036a41186a290300370300200220022903b003370340200241b0036a200110990320022802b003210120024180016a200241b0036a41047241ac0210a1051a20014116460d01200241b0036a20024180016a41ac0210a1051a41b002102122040d02102a000b200541ff0171450d00200241003a00d0030b2000410a3a00000c0a0b20042001360200200441046a200241b0036a41ac0210a1051a200241206a41186a200241c0006a41186a2903002209370300200241206a41106a200241c0006a41106a290300220a370300200241206a41086a200241c0006a41086a290300220b37030020022002290340220c370320200041013a00002000200c370001200041096a200b370000200041116a200a370000200041196a2009370000200041216a20022f001d3b0000200041236a2002411f6a2d00003a0000200041246a2004360200200041286a2002290200370200200041306a200241086a290200370200200041386a200241106a290200370200200041c0006a200241186a2802003602000c090b41002105200241003a00d003410120036b21062003417e6a21070240024002400340200620056a450d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b20024180016a41086a200241b0036a41086a29030037030020024180016a41106a200241b0036a41106a29030037030020024180016a41186a200241b0036a41186a290300370300200220022903b0033703800141002105200241003a00d003200420086a2106200820036b41016a21080340200820056a450d02200241b0036a20056a200620056a220441016a2d00003a0000200120073602042001200441026a3602002002200541016a22043a00d0032007417f6a21072004210520044120470d000b200241206a41086a2201200241b0036a41086a290300370300200241206a41106a2204200241b0036a41106a290300370300200241206a41186a2205200241b0036a41186a290300370300200241c0006a41086a220720024180016a41086a290300370300200241c0006a41106a220820024180016a41106a290300370300200241c0006a41186a220320024180016a41186a290300370300200220022903b0033703202002200229038001370340200041023a000020002002290340370001200041096a2007290300370000200041116a2008290300370000200041196a2003290300370000200041216a2002290320370000200041296a2001290300370000200041316a2004290300370000200041396a2005290300370000200041c1006a20022f00003b0000200041c3006a200241026a2d00003a00000c0b0b200541ff0171450d01200241003a00d0030c010b200541ff0171450d00200241003a00d0030b2000410a3a00000c080b20024180016a200110cf010240024002402002280280012204450d002002280284012105200128020422074102490d0120024188016a2802002106200128020022082f0000210d20012007417e6a22033602042001200841026a36020020034104490d022008280002210320012007417a6a3602042001200841066a360200200041106a20033602002000410c6a2006360200200041086a2005360200200041046a2004360200200041026a200d3b0100200041033a0000200041146a20022902b0033702002000411c6a200241b0036a41086a290200370200200041246a200241b0036a41106a2902003702002000412c6a200241c8036a290200370200200041346a200241d0036a2902003702002000413c6a200241d8036a2902003702000c0a0b2000410a3a00000c090b2000410a3a0000200541ffffff3f71450d08200410230c080b2000410a3a0000200541ffffff3f71450d07200410230c070b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041043a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c070b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c060b41002105200241003a00d003410120036b21062003417e6a21070240024002400340200620056a450d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b20024180016a41086a200241b0036a41086a29030037030020024180016a41106a200241b0036a41106a29030037030020024180016a41186a200241b0036a41186a290300370300200220022903b0033703800141002105200241003a00d003200420086a2106200820036b41016a21080340200820056a450d02200241b0036a20056a200620056a220441016a2d00003a0000200120073602042001200441026a3602002002200541016a22043a00d0032007417f6a21072004210520044120470d000b200241206a41086a2201200241b0036a41086a290300370300200241206a41106a2204200241b0036a41106a290300370300200241206a41186a2205200241b0036a41186a290300370300200241c0006a41086a220720024180016a41086a290300370300200241c0006a41106a220820024180016a41106a290300370300200241c0006a41186a220320024180016a41186a290300370300200220022903b0033703202002200229038001370340200041053a000020002002290340370001200041096a2007290300370000200041116a2008290300370000200041196a2003290300370000200041216a2002290320370000200041296a2001290300370000200041316a2004290300370000200041396a2005290300370000200041c1006a20022f00003b0000200041c3006a200241026a2d00003a00000c080b200541ff0171450d01200241003a00d0030c010b200541ff0171450d00200241003a00d0030b2000410a3a00000c050b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041063a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c050b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c040b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041073a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c040b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c030b200041083a00000c020b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041093a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c020b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c010b2000410a3a00000b200241e0056a24000bfc0802067f047e230041b0056b22022400024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541024b0d0420050e03010203010b200041043a00000c050b20024180036a20011099032002280280032101200241d0006a20024180036a41047241ac0210a1051a024020014116460d0020024180036a200241d0006a41ac0210a1051a41b00210212205450d0420052001360200200541046a20024180036a41ac0210a1051a200041013a0000200020022f00103b0001200041036a200241126a2d00003a0000200041046a2005360200200041086a2002290230370200200041106a200241306a41086a290200370200200041186a200241306a41106a290200370200200041206a200241306a41186a2902003702000c050b200041043a00000c040b41002105200241003a00a0032003417f6a21062003417e6a21030240034020062005460d0120024180036a20056a200420056a220741016a2d00003a0000200120033602042001200741026a3602002002200541016a22073a00a0032003417f6a21032007210520074120470d000b200241306a41086a20024180036a41086a2903002208370300200241306a41106a20024180036a41106a2903002209370300200241306a41186a20024180036a41186a290300220a3703002002200229038003220b370330200041023a00002000200b370001200041096a2008370000200041116a2009370000200041196a200a370000200041216a2002280010360000200041246a200241136a2800003600000c040b0240200541ff0171450d00200241003a00a0030b200041043a00000c030b41002105200241003a00a0032003417f6a21062003417e6a210302400240034020062005460d0120024180036a20056a200420056a220741016a2d00003a0000200120033602042001200741026a3602002002200541016a22073a00a0032003417f6a21032007210520074120470d000b200241306a41086a20024180036a41086a290300370300200241306a41106a20024180036a41106a290300370300200241306a41186a20024180036a41186a290300370300200220022903800337033020024180036a20011099032002280280032101200241d0006a20024180036a41047241ac0210a1051a20014116460d0120024180036a200241d0006a41ac0210a1051a41b00210212205450d0320052001360200200541046a20024180036a41ac0210a1051a200241106a41186a200241306a41186a2903002208370300200241106a41106a200241306a41106a2903002209370300200241106a41086a200241306a41086a290300220a37030020022002290330220b370310200041033a00002000200b370001200041096a200a370000200041116a2009370000200041196a2008370000200041216a20022f000d3b0000200041236a2002410f6a2d00003a0000200041246a20053602000c040b200541ff0171450d00200241003a00a0030b200041043a00000c020b200041043a00000c010b102a000b200241b0056a24000bcc0101027f0240200041c8006a280200450d00200028024410230b0240200041186a2802002201450d00200028021021022001410474210103400240200241046a280200450d00200228020010230b200241106a2102200141706a22010d000b0b0240200041146a28020041ffffffff0071450d00200028021010230b0240200041f4016a2802002202450d00200241c1006c450d0020002802f00110230b20004180026a410036020020002802fc012102200041013602fc01024020004184026a280200450d00200210230b0bd90401057f230041106b22022400200241003a000502400240024002400240024020012802002203280204220420044100472205490d00200241056a20032802002206200510a1051a2003200420056b3602042003200620056a360200024020040d00410021040c050b024020022d0005220441037122034103460d000240024020030e03070001070b200241003b0106200220043a00064101210420012802002201280204220320034100472205490d04200241066a41017220012802002204200510a10521062001200320056b3602042001200420056a360200024020030d00200620056a22044100200241066a20046b41026a10a0051a0b20022f0106220441ff014d0d0220044102762103410021040c070b20024100360208200220043a0008200241086a4101722001280200220428020020042802042205410320054103491b220310a1052106200428020422012003490d042004200120036b3602042004200428020020036a3602000240200541024b0d00200620036a22044100200241086a20046b41046a10a0051a0b2002280208220341808004492104200341027621030c060b200441034d0d010b410121040c040b2002410036020c2002410c6a20012802002204280200220120042802042203410420034104491b220510a1051a2004200320056b3602042004200120056a3602000240200341034b0d002002410c6a20056a4100410420056b10a0051a0b200228020c22034180808080044921040c030b0c020b20032001418ca9c0001044000b20044102762103410021040b2000200336020420002004360200200241106a24000b890301077f41012102024002402001280208220341016a2204200128020422054d0d000c010b0240024002400240200320054f0d002001280200220620036a2d00002107200120043602080240200741037122084103460d0002400240024020080e03000102000b20074102762108410021020c070b0240200341026a220320054d0d000c070b200120033602082004417f460d03200620046a2d0000410874200772220141ffff0371418002490d06200141fcff03714102762108410021020c060b200341046a220320054b0d05200120033602082004417d4f0d03200620046a22012f0000200141026a2d000041107472410874200772220141808004492102200141027621080c050b0240200741034d0d000c050b200341056a220320054b0d04200120033602082004417c4f0d03200620046a28000022084180808080044921020c040b2003200541b0bbc0001030000b417f200341a0bbc0001044000b2004200341a0bbc0001044000b2004200341a0bbc0001044000b20002008360204200020023602000b850605027f027e017f027e027f230041a0016b220224002000280200210002400240024002400240024002400240200128020022034110710d00200041086a29030021042000290300210520034120710d0220054290ce005441002004501b450d012005a72103412721000c060b200041086a2903002105200029030021044180012100024003402000450d01200241206a20006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020044204882005423c8684220420054204882205844200520d000b0b20004181014f0d02200141a889c0004102200241206a20006a41800120006b104121000c060b41272100200241186a21060340200241106a200520044290ce00420010a7052002200229031022072006290300220842f0b17f427f10a605200241206a20006a2203417c6a200520022903007ca7220941ffff037141e4006e220a41017441ea84c0006a2f00003b00002003417e6a200a419c7f6c20096a41ffff037141017441ea84c0006a2f00003b0000200542ffc1d72f56210320044200522109200450210a2000417c6a2100200721052008210420032009200a1b0d000c040b0b4180012100024003402000450d01200241206a20006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b0b20004181014f0d01200141a889c0004102200241206a20006a41800120006b104121000c040b2000418001419889c0001044000b2000418001419889c0001044000b2007a721030b02400240200341e3004a0d00200321090c010b200241206a2000417e6a22006a2003200341ffff037141e4006e2209419c7f6c6a41ffff037141017441ea84c0006a2f00003b00000b024002402009410a480d00200241206a2000417e6a22006a200941017441ea84c0006a2f00003b00000c010b200241206a2000417f6a22006a200941306a3a00000b2001419ca8c7004100200241206a20006a412720006b104121000b200241a0016a240020000b1300200041003602042000419ca8c7003602000b13002000410136020420004188e6c2003602000be51b06037f017e077f017e277f027e230041a00d6b220324002003200236020c20032001360208200341206a41186a22044200370300200341206a41106a22024200370300200341206a41086a220142003703002003420037032041e4dec400ad4280808080e00084100c220529000021062001200541086a290000370300200320063703202005102341f3dec400ad4280808080e00084100c22072900002106200341106a41086a2205200741086a2900003703002003200637031020071023200220032903102206370300200341800d6a41086a22082001290300370300200341800d6a41106a22092006370300200341800d6a41186a220a2005290300370300200320032903203703800d2003200341800d6a412010cd012003280204210b2003280200210c2004420037030020024200370300200142003703002003420037032041abe3c200ad4280808080800384100c220729000021062001200741086a290000370300200320063703202007102341c3e3c200ad4280808080e00184100c220729000021062005200741086a29000037030020032006370310200710232002200329031022063703002008200129030037030020092006370300200a2005290300370300200320032903203703800d200341206a200341800d6a412010890220032802202201410120011b210d0240024002402003290224420020011b220e422088a722020d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b200341206a410041e00c10a0051a200b417f6a41d100704130200c1b2101200d41206a210f200d20024105746a21104100211141002112410021134100211441002115410021164100211741002118410021194100211a4100211b4100211c4100211d4100211e4100211f410021204100212141002122410021234100212441002125410021264100212741002128410021294100212a4100212b4100212c4100212d4100212e4100212f4100210b200d21024100213041d1002131024003402030210720022105024002402001450d00200141016a2101200521020340024020102002470d00200d21020b2002220541206a21022001417f6a22010d000b20050d010c030b024020052010460d00200541206a21020c010b200f2102200d21050b0240024002400240200328020c220141056a2204417f4c0d0020032802082132024002402004450d0020041021220c450d0320034100360218200320043602140c010b20034100360218200320043602142003410136021041011021220c450d08200341013602140b2003200c360210200c20073a0000200341013602182001200341106a10610240024020032802142233200328021822306b2001490d00200328021021042033210c0c010b203020016a22042030490d032033410174220c2004200c20044b1b220c4100480d030240024020330d000240200c0d00410121040c020b200c102122040d010c0a0b200328021021042033200c460d0020042033200c10252204450d090b2003200c360214200320043602100b200420306a2032200110a1051a2003203020016a2230360218412010212201450d0120012005290000370000200141186a2232200541186a290000370000200141106a2234200541106a290000370000200141086a2235200541086a29000037000002400240200c20306b411f4d0d00200c21330c010b203041206a22052030490d03200c41017422332005203320054b1b22334100480d0302400240200c0d00024020330d00410121040c020b203310212204450d0a0c010b200c2033460d002004200c203310252204450d090b20032033360214200320043602100b200420306a22052001290000370000200541186a2032290000370000200541106a2034290000370000200541086a20352900003700002003203041206a2205360218200110232005ad4220862004ad84101822012900002106200141086a2900002136200141106a2900002137200a200141186a2900003703002009203737030020082036370300200320063703800d2001102302402033450d00200410230b2031417f6a2131200741016a2130200341206a20074103704105746a220120032903800d370000200141186a200a290300370000200141106a2009290300370000200141086a20082903003700004100210503402007200741036e2204417d6c6a4102470d04200341206a20056a220141df006a2d0000220b2001411f6a2d0000220c71200b200c722001413f6a2d000071722128200141de006a2d0000220b2001411e6a2d0000220c71200b200c722001413e6a2d000071722127200141dd006a2d0000220b2001411d6a2d0000220c71200b200c722001413d6a2d000071722126200141dc006a2d0000220b2001411c6a2d0000220c71200b200c722001413c6a2d000071722125200141db006a2d0000220b2001411b6a2d0000220c71200b200c722001413b6a2d000071722124200141da006a2d0000220b2001411a6a2d0000220c71200b200c722001413a6a2d000071722123200141d9006a2d0000220b200141196a2d0000220c71200b200c72200141396a2d000071722122200141d8006a2d0000220b200141186a2d0000220c71200b200c72200141386a2d000071722121200141d7006a2d0000220b200141176a2d0000220c71200b200c72200141376a2d000071722120200141d6006a2d0000220b200141166a2d0000220c71200b200c72200141366a2d00007172211f200141d5006a2d0000220b200141156a2d0000220c71200b200c72200141356a2d00007172211e200141d4006a2d0000220b200141146a2d0000220c71200b200c72200141346a2d00007172211d200141d3006a2d0000220b200141136a2d0000220c71200b200c72200141336a2d00007172211c200141d2006a2d0000220b200141126a2d0000220c71200b200c72200141326a2d00007172211b200141d1006a2d0000220b200141116a2d0000220c71200b200c72200141316a2d00007172211a200141d0006a2d0000220b200141106a2d0000220c71200b200c72200141306a2d000071722119200141cf006a2d0000220b2001410f6a2d0000220c71200b200c722001412f6a2d000071722118200141ce006a2d0000220b2001410e6a2d0000220c71200b200c722001412e6a2d000071722117200141cd006a2d0000220b2001410d6a2d0000220c71200b200c722001412d6a2d000071722116200141cc006a2d0000220b2001410c6a2d0000220c71200b200c722001412c6a2d000071722115200141cb006a2d0000220b2001410b6a2d0000220c71200b200c722001412b6a2d000071722114200141ca006a2d0000220b2001410a6a2d0000220c71200b200c722001412a6a2d000071722113200141c9006a2d0000220b200141096a2d0000220c71200b200c72200141296a2d000071722112200141c8006a2d0000220b200141086a2d0000220c71200b200c72200141286a2d000071722111200141c7006a2d0000220b200141076a2d0000220c71200b200c72200141276a2d000071722129200141c6006a2d0000220b200141066a2d0000220c71200b200c72200141266a2d00007172212a200141c5006a2d0000220b200141056a2d0000220c71200b200c72200141256a2d00007172212b200141c4006a2d0000220b200141046a2d0000220c71200b200c72200141246a2d00007172212c200141c3006a2d0000220b200141036a2d0000220c71200b200c72200141236a2d00007172212d200141c2006a2d0000220b200141026a2d0000220c71200b200c72200141226a2d00007172212e200141c1006a2d0000220b200141016a2d0000220c71200b200c72200141216a2d00007172212f200141c0006a2d0000220b20012d0000220c71200b200c72200141206a2d00007172210b200541800c460d04200341206a20052004410574200741096e41e0006c6b6a6a220141ff006a20283a0000200141fe006a20273a0000200141fd006a20263a0000200141fc006a20253a0000200141fb006a20243a0000200141fa006a20233a0000200141f9006a20223a0000200141f8006a20213a0000200141f7006a20203a0000200141f6006a201f3a0000200141f5006a201e3a0000200141f4006a201d3a0000200141f3006a201c3a0000200141f2006a201b3a0000200141f1006a201a3a0000200141f0006a20193a0000200141ef006a20183a0000200141ee006a20173a0000200141ed006a20163a0000200141ec006a20153a0000200141eb006a20143a0000200141ea006a20133a0000200141e9006a20123a0000200141e8006a20113a0000200141e7006a20293a0000200141e6006a202a3a0000200141e5006a202b3a0000200141e4006a202c3a0000200141e3006a202d3a0000200141e2006a202e3a0000200141e1006a202f3a0000200141e0006a200b3a000020042107200541e0006a220541e00c470d000c040b0b1032000b1033000b102c000b4100210120310d000b0b200020283a001f200020273a001e200020263a001d200020253a001c200020243a001b200020233a001a200020223a0019200020213a0018200020203a00172000201f3a00162000201e3a00152000201d3a00142000201c3a00132000201b3a00122000201a3a0011200020193a0010200020183a000f200020173a000e200020163a000d200020153a000c200020143a000b200020133a000a200020123a0009200020113a0008200020293a00072000202a3a00062000202b3a00052000202c3a00042000202d3a00032000202e3a00022000202f3a00012000200b3a00000b0240200e42ffffff3f83500d00200d10230b200341a00d6a24000f0b102a000b13002000410136020420004198ebc2003602000b3400200041fee2c20036020420004100360200200041146a4105360200200041106a41e0ecc200360200200041086a420f3702000b130020004102360204200041f0f1c2003602000b2d01017f02404104102122020d001033000b20004284808080c00037020420002002360200200241e5003600000bf90403027f017e057f230041d0006b2202240041b9f4c200ad4280808080c00184100c22032900002104200241086a200341086a290000370300200220043703002003102341daf4c200ad4280808080800284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b130020004101360204200041ecf4c2003602000b3400200041b9f4c20036020420004100360200200041146a4103360200200041106a41c8f5c200360200200041086a420c3702000b3400200041abe3c20036020420004100360200200041146a4101360200200041106a41e0f9c200360200200041086a42183702000b130020004102360204200041c0fcc2003602000ba40301027f230041e0006b22032400200341003a00050240024002400240200041c000490d00200041808001490d012000418080808004490d0241052104200341053a0005200341033a0000200320003600010c030b41012104200341013a0005200320004102743a00000c020b41022104200341023a0005200320004102744101723b01000c010b41042104200341043a0005200320004102744102723602000b024002402001280200220028020822012002490d0020002802002100200320023602082003200436020c20042002470d0120002003200210a1051a200341e0006a24000f0b200220014190e3c2001043000b200341286a41146a410b360200200341346a410d360200200341106a41146a41033602002003200341086a36024020032003410c6a360244200341c8006a41146a4100360200200342033702142003418ca7c7003602102003410d36022c2003419ca8c7003602582003420137024c200341e0a7c7003602482003200341286a3602202003200341c8006a3602382003200341c4006a3602302003200341c0006a360228200341106a419ca8c700103a000b8cc2010f027f017e067f017e107f017e067f027e077f037e057f017e067f017e067f230041b00a6b2204240002400240024002400240024002400240200141ff01710d00200241ff01714102470d00200441d0076a41186a4200370300200441d0076a41106a22054200370300200441d0076a41086a22014200370300200442003703d00741b0dfc300ad4280808080a00184100c22022900002106200441b0066a41086a2207200241086a290000370300200420063703b0062002102320012007290300370300200420042903b0063703d00741a89ec700ad4280808080900184100c22022900002106200441d0016a41086a2208200241086a290000370300200420063703d00120021023200520042903d001220637030020044180046a41086a2202200129030037030020044180046a41106a2209200637030020044180046a41186a220a2008290300370300200420042903d00737038004200441386a20044180046a4120419ca8c70041004100108c0120042802384101460d01200a4200370300200942003703002002420037030020044200370380044196adc300ad4280808080900184100c220829000021062002200841086a29000037030020042006370380042008102341bce0c300ad4280808080e00084100c220829000021062001200841086a290000370300200420063703d00720081023200920042903d007220637030020072002290300370300200441b0066a41106a2006370300200441b0066a41186a200129030037030020042004290380043703b006200441d0076a200441b0066a10910320042802d0072201410420011b210b200341086a280200220c20042902d407420020011b220d422088a7220e4b0d03200c41ffffffff0371200c460d020c070b200041023a00000c040b20004183203b0100200041086a4112360200200041046a41f5fec200360200200041026a41003a00000c030b200c4102742201417f4c0d040240024002400240024020010d004104210f0c010b20011021220f450d010b41002102200441003602482004200f3602402004200141027622013602440240200e450d0020032802002210200c4188026c6a2111024002400240200c450d00200b200e412c6c6a210a4100211241012101200b210720102113034020132802402108024002400240024020014101710d00200220084f0d010b20134188026a2114200721010340200a2001460d02200128020021022001412c6a2207210120022008470d000b200741786a2802004102460d0220134198016a2007460d02200741586a201341f0006a412010a305450d0220004183203b0100200041086a410f360200200041046a41bbffc200360200200041026a41043a0000200441c0006a21010c050b20004183203b0100200041086a410f360200200041046a419cffc200360200200041026a41023a0000200441c0006a21010c040b20004183203b0100200041086a4110360200200041046a41abffc200360200200041026a41033a0000200441c0006a21010c030b024020132802182215450d0020132802102116200441d0076a200810c10320044180046a20042802d007220220042802d80710e501200428028404410020042802800441014622171b21012004280288042118024020042802d407450d00200210230b02400240200120156a22014101460d004105211941caffc200211a4109211b200141e4004b0d012018410020171b210220154104742117201641086a21010340200128020020026a2102200141106a2101201741706a22170d000b200241a09c014b0d010b200841e807490d012015410474210103402001450d02200141706a210120162d000c2102201641106a211620024102470d000b4106211941d3ffc200211a4114211b0b20004183203b0100200041086a201b360200200041046a201a360200200041026a20193a0000200441c0006a21010c030b20132802402102024020122004280244470d00200441c0006a2012410110792004280240210f200428024821120b200f20124102746a20023602002004201241016a2212360248410021012014211320142011470d000b0b200441d0076a41186a22074200370300200441d0076a41106a22084200370300200441d0076a41086a22014200370300200442003703d00741b0dfc300ad4280808080a00184100c22022900002106200441b0066a41086a220a200241086a290000370300200420063703b006200210232001200a290300370300200420042903b0063703d00741bcbac500ad4280808080b00184100c22022900002106200441d0016a41086a220a200241086a290000370300200420063703d00120021023200520042903d001370000200541086a200a29030037000020044180046a41086a200129030037030020044180046a41106a200829030037030020044180046a41186a2007290300370300200420042903d00737038004200441d0076a20044180046a10ad0220042802d007211420042902d4072106200441d0076a10c20320042802d407211c20042802d007211b20042802d8072101200441b0016a41186a200441f4076a290200370300200441b0016a41106a200441ec076a290200370300200441b0016a41086a200441e4076a290200370300200420042902dc073703b0012001200141ffffffff0171470d0a20014103742202417f4c0d0a0240024020020d00410421170c010b200210212217450d040b41002107200441003602d807200420173602d00720042002410376221d3602d407024020014103742201450d00201b20016a211241002107201b210f4100211303400240200f2802004101470d00024002400240200741014b0d000240024020070e020001000b200f2802042116410021010c030b200f2802042116410021010c010b200f28020421164100210120072102034020012002410176220820016a220a2017200a4103746a28020420164b1b2101200220086b220241014b0d000b0b0240201720014103746a28020422022016460d00200120022016496a21010b200720014f0d00200120071038000b0240200720042802d407470d00200441d0076a2007410110a50120042802d00721170b201720014103746a220241086a2002200720016b41037410a2051a20022016360204200220133602002004200741016a22073602d8070b201341016a21132012200f41086a220f470d000b20042802d407211d0b20044180046a41186a2202420037030020044180046a41106a2208420037030020044180046a41086a22014200370300200442003703800441e4dec400ad4280808080e00084100c220a290000211e2001200a41086a2900003703002004201e37038004200a102341f9dec400ad4280808080a00184100c220a290000211e200441d0076a41086a2216200a41086a2900003703002004201e3703d007200a1023200920042903d007370000200941086a2016290300370000200441b0066a41086a2001290300370300200441b0066a41106a2008290300370300200441b0066a41186a200229030037030020042004290380043703b006200441d0076a200441b0066a412010e10120042d00d007210a2002200441e9076a2900003703002008200441e1076a2900003703002001200441d9076a290000370300200420042900d1073703800402400240200a4101460d0020044190076a41186a420037030020044190076a41106a420037030020044190076a41086a420037030020044200370390070c010b20044190076a41186a200229030037030020044190076a41106a200829030037030020044190076a41086a20012903003703002004200429038004370390070b20044180046a41186a2202420037030020044180046a41106a2208420037030020044180046a41086a22014200370300200442003703800441db97c700ad4280808080f00084100c220a290000211e2001200a41086a2900003703002004201e37038004200a102341bcbcc300ad4280808080c00184100c2216290000211e200441d0076a41086a220a201641086a2900003703002004201e3703d00720161023200920042903d007370000200941086a2215200a290300370000200441b0066a41086a220f2001290300370300200441b0066a41106a22132008290300370300200441b0066a41186a2212200229030037030020042004290380043703b006200441306a200441b0066a412010cd012004280234211820042802302119200242003703002008420037030020014200370300200442003703800441e4dec400ad4280808080e00084100c2216290000211e2001201641086a2900003703002004201e370380042016102341f9dec400ad4280808080a00184100c2216290000211e200a201641086a2900003703002004201e3703d00720161023200920042903d0073700002015200a290300370000200f2001290300370300201320082903003703002012200229030037030020042004290380043703b006200441d0076a200441b0066a412010e10120042d00d007210a2002200441e9076a2900003703002008200441e1076a2900003703002001200441d9076a290000370300200420042900d107370380042018410020191b211602400240200a4101460d002012420037030020134200370300200f4200370300200442003703b0060c010b2012200229030037030020132008290300370300200f200129030037030020042004290380043703b0060b2006420020141b21062014410120141b211f200441d0016a410c6a200441b0066a41086a2220290300370200200441e4016a200441b0066a41106a2221290300370200200441ec016a200441b0066a41186a2222290300370200200420163602d001200420042903b0063702d4012004410036028807200442013703800741012123200c450d01201f41606a21242017410c6a2119200441d0076aad42808080808002842125200441b0066aad428080808080048421262006422088a72127200441d0076a4101722128200441d0076a41106a211a200441d9076a2129410121234100210c410021020240034041e7ffc20021134183a01c21124110211420022007460d0120104188026a212a2010280240210f2002210a024002400240024002400240024002400340024002402007200a4d0d002017200a41037422166a221528020421082007200a41016a22024d0d01201920166a2101034020012802002008470d02200141086a21012007200241016a2202470d000b200721020c010b200a200741a4aac0001030000b2002200a490d010240200720024f0d00200220074194aac0001043000b02402008200f460d002002210a20022007460d0b0c010b0b024020044190076a201041d0006a2208460d00200820044190076a412010a305450d0041f380c30021134183a0c0002112411521140c0a0b0240201041f8016a222b28020022132002200a6b220141017620014101716a4f0d0041f7ffc20021134183a0202112411621140c0a0b0240201320274d0d00418d80c30021134183a0242112411721140c0a0b0240201041cc006a22132802004180a0014d0d00419fabc30021134183a03821120c0a0b200441d0076a200f10c3030240024020042802d007222c450d0020042802d407212d2004200f3602b00720044180046a200441b0076a10af02200441b0066a20044180046a109702200441d0076a20042802b006220120042802b80610980220042903d007212e201a290300212f20042903d8072130024020042802b406450d00200110230b20132802002201417f4c0d162010280244210a0240024020010d0041002131410121120c010b20012131200110212212450d100b2012200a200110a105213220044180046a41186a223320104188016a29000037030020044180046a41106a223420104180016a29000037030020044180046a41086a2235201041f8006a2900003703002004201029007037038004201041086a2212290300211e20102903002136200441b0066a201041106a10c403200441d0076a41186a2237201041346a2238290000370300201a2010412c6a223929000037030020042802b006213a20042802b406213b20042802b806213c20304200202e42015122011b203654202f420020011b222e201e54202e201e511b450d0141e680c30021134183a03c2112410d21140c090b41d880c30021134183a0342112410e21140c0a0b2004200f3602d806200441b0076a200441d8066a10af0241002101200441003a00df06200441083a00de06200420363703b0062004201e3703b8062004200441b0076a3602f0060240024002402036201e8450450d004200211e420021360c010b2004200441b0076a3602e0062004200441e0066a3602e0072004200441de066a3602dc072004200441f0066a3602d8072004200441df066a3602d4072004200441b0066a3602d00720044180046a200441b0076a200441d0076a10c50302402004280280044101470d0042002136200429038804211e41012101200428028404210a0c020b20044180046a41286a290300213620042903a004211e410021012004290388044201520d00200429039004212e20042802e0062101200441d0076a41386a203329030037030020292001290000370000202941086a200141086a290000370000202941106a200141106a290000370000202941186a200141186a2900003700002004202e3703800841002101200441003a00d807200441023a00d007200441d0076a10e0010b0b0240024020010d0020374200370300201a4200370300200441d0076a41086a22014200370300200442003703d00741bdadc500ad4280808080800184222e100c220a290000212f2035200a41086a2900003703002004202f37038004200a10232001203529030037030020042004290380043703d00741c5adc500ad4280808080d00184222f100c220f2900002130200441e0066a41086a220a200f41086a290000370300200420303703e006200f1023201a20042903e006370000201a41086a2218200a290300370000202020012903003703002021201a29030037030020222037290300370300200420042903d0073703b006200441186a200441b0066a412010d701200441186a41106a29030021302004290320213d2004280218210f20374200370300201a420037030020014200370300200442003703d007202e100c2214290000212e2035201441086a2900003703002004202e37038004201410232001203529030037030020042004290380043703d007202f100c2214290000212e200a201441086a2900003703002004202e3703e00620141023201a20042903e0063700002018200a290300370000202020012903003703002021201a29030037030020222037290300370300200420042903d0073703b0062004420020304200200f1b222e20367d203d4200200f1b2236201e54ad7d222f2036201e7d221e203656202f202e56202f202e511b22011b3703d80720044200201e20011b3703d00720262025100e0c010b200a41ff01714104470d020b200441003602d807200442013703d0072010280240210a410410212201450d0f200441043602d407200420013602d0072001200a360000200441043602d807412010212201450d0d20012008290000370000200141186a2214200841186a290000370000200141106a2218200841106a290000370000200141086a223e200841086a2900003700000240024020042802d407220f20042802d80722086b4120490d0020042802d007210a0c010b200841206a220a2008490d0f200f410174223f200a203f200a4b1b223f4100480d0f02400240200f0d000240203f0d004101210a0c020b203f1021220a0d010c120b20042802d007210a200f203f460d00200a200f203f1025220a450d1120042802d80721080b2004203f3602d4072004200a3602d0070b200a20086a220a2001290000370000200a41186a2014290000370000200a41106a2018290000370000200a41086a203e2900003700002004200841206a3602d807200110232010280244211420132802002201200441d0076a10610240024020042802d407220f20042802d80722086b2001490d0020042802d007210a0c010b200820016a220a2008490d0f200f4101742213200a2013200a4b1b22134100480d0f02400240200f0d00024020130d004101210a0c020b20131021220a450d120c010b20042802d007210a200f2013460d00200a200f20131025220a450d1120042802d80721080b200420133602d4072004200a3602d0070b200a20086a2014200110a1051a2004200820016a22013602d8070240024020042802d407220a20016b4120490d0020042802d0072108200a210f0c010b200141206a22082001490d0f200a410174220f2008200f20084b1b220f4100480d0f02400240200a0d000240200f0d00410121080c020b200f10212208450d120c010b20042802d0072108200a200f460d002008200a200f10252208450d1120042802d80721010b2004200f3602d407200420083602d0070b200820016a220a201041f0006a2213290000370000200a41186a201341186a290000370000200a41106a201341106a290000370000200a41086a201341086a2900003700002004200141206a220a3602d8070240200f200a6b413f4b0d00200a41c0006a2201200a490d0f200f41017422132001201320014b1b22014100480d0f02400240200f0d00024020010d00410121080c020b200110212208450d120c010b200f2001460d002008200f200110252208450d1120042802d807210a0b200420013602d407200420083602d0070b2008200a6a220120104190016a2208290000370000200141386a200841386a290000370000200141306a200841306a290000370000200141286a200841286a290000370000200141206a200841206a290000370000200141186a200841186a290000370000200141106a200841106a290000370000200141086a200841086a2900003700002004200a41c0006a3602d807412010212201450d0d2001201041d0016a2208290000370000200141186a2213200841186a290000370000200141106a2214200841106a290000370000200141086a2218200841086a2900003700000240024020042802d407220f20042802d80722086b4120490d0020042802d007210a0c010b200841206a220a2008490d0f200f410174223e200a203e200a4b1b223e4100480d0f02400240200f0d000240203e0d004101210a0c020b203e1021220a450d120c010b20042802d007210a200f203e460d00200a200f203e1025220a450d1120042802d80721080b2004203e3602d4072004200a3602d0070b200a20086a220a2001290000370000200a41186a2013290000370000200a41106a2014290000370000200a41086a20182900003700002004200841206a3602d807200110232012290300211e201029030021360240024020042802d407220a20042802d80722016b4110490d0020042802d00721080c010b200141106a22082001490d0f200a410174220f2008200f20084b1b220f4100480d0f02400240200a0d000240200f0d00410121080c020b200f10212208450d120c010b20042802d0072108200a200f460d002008200a200f10252208450d1120042802d80721010b2004200f3602d407200420083602d0070b200820016a2208201e370008200820363700002004200141106a3602d8072010280210210120102802182208200441d0076a106102402008450d0020084104742112034002402001410c6a2d000022084103714103460d004100210a02400240024020080e03020001020b4101210a0c010b4102210a0b2004200a3a00f0060240024020042802d40720042802d8072208460d0020042802d007210f0c010b200841016a220f2008490d1220084101742213200f2013200f4b1b22134100480d120240024020080d0041002108024020130d004101210f0c020b20131021220f450d150c010b20042802d007210f20082013460d00200f200820131025220f450d1420042802d80721080b200420133602d4072004200f3602d0070b200f20086a200a3a00002004200841016a3602d8070b20012802002114200141086a2802002208200441d0076a10610240024020042802d407221320042802d807220a6b2008490d0020042802d007210f0c010b200a20086a220f200a490d1120134101742218200f2018200f4b1b22184100480d110240024020130d00024020180d004101210f0c020b20181021220f450d140c010b20042802d007210f20132018460d00200f201320181025220f450d1320042802d807210a0b200420183602d4072004200f3602d0070b200141106a2101200f200a6a2014200810a1051a2004200a20086a3602d807201241706a22120d000b0b412010212201450d0d2001201029001c370000200141186a22132038290000370000200141106a22122039290000370000200141086a2214201041246a2900003700000240024020042802d407220f20042802d80722086b4120490d0020042802d007210a0c010b200841206a220a2008490d0f200f4101742218200a2018200a4b1b22184100480d0f02400240200f0d00024020180d004101210a0c020b20181021220a450d120c010b20042802d007210a200f2018460d00200a200f20181025220a450d1120042802d80721080b200420183602d4072004200a3602d0070b200a20086a220a2001290000370000200a41186a2013290000370000200a41106a2012290000370000200a41086a20142900003700002004200841206a3602d8072001102320042802d4072108203320043502d80742208620042802d007220aad841018220141186a2900003703002034200141106a2900003703002035200141086a29000037030020042001290000370380042001102302402008450d00200a10230b41002138200441003602e006200441003602b007200241037420166b213e201028028002210120102802fc01211641002139410021144100211803402014417f6a210a202420144105746a2112034020014108490d064101210f200441013602d8062004200141037622133602f00602400240201341014b0d002001210841002101024020130e020002000b200441bc066a4101360200200441e4076a4102360200200442023702d4072004419c96c7003602d007200441013602b4062004200441b0066a3602e0072004200441f0066a3602b8062004200441d8066a3602b006200441d0076a419ca8c700103a000b2001410771220f41087221082016200f4107466a210f200141016a410771200141786a4178717221010b2016410120081b2113201241206a2112200a41016a210a200f2116410120084107717420132d000071450d000b202b28020020184d0d04200a41016a2114201841016a214020102802f001201841c1006c6a213f203e2108201521160340024020080d0041a480c3002113411721144183a02821120c080b200841786a210820162802002113201641086a21162013200a470d000b02400240203f2d00004101470d00200441b0076a210820390d012028200429038004370000202841086a2035290300370000202841106a2034290300370000202841186a2033290300370000200441013a00d007200441b0076a200441d0076a200441d0016a107620042802b00721390c010b200441e0066a210820380d002028200429038004370000202841086a2035290300370000202841106a2034290300370000202841186a2033290300370000200441003a00d007200441e0066a200441d0076a200441d0016a107620042802e00621380b200a20274f0d03200f211620402118203f41016a2008350208422086200835020084201210134101460d000b41bb80c3002113411021144183a02c21120c050b200a20024194aac0001044000b200a410876410874200a41ff0171722112201e422088a72114201ea721130c050b200a202741d084c3001030000b41f7ffc2002113411621144183a02021120c010b202b2802002018460d0141cb80c3002113410d21144183a03021120b02402039450d0020042802b407450d00203910230b2038450d0120042802e406450d01203810230c010b20372033290300370300201a2034290300370300200441d0076a41086a2208203529030037030020042004290380043703d0070240200c200428028407470d0020044180076a200c4101109a012004280280072123200428028807210c0b2023200c4105746a220120042903d007370000200141186a2037290300370000200141106a201a290300370000200141086a20082903003700002004200c41016a220c3602880702402039450d0020042802b407450d00203910230b02402038450d0020042802e406450d00203810230b02402031450d00203210230b0240202d450d00202c10230b0240203c450d00203c4104742108203a210103400240200141046a280200450d00200128020010230b200141106a2101200841706a22080d000b0b0240203b41ffffffff0071450d00203a10230b202a2110202a2011470d010c040b0b02402031450d00203210230b0240202d450d00202c10230b0240203c450d00203c4104742102203a210103400240200141046a280200450d00200128020010230b200141106a2101200241706a22020d000b0b203b41ffffffff0071450d00203a10230b024020042802840741ffffff3f71450d00202310230b0240201d41ffffffff0171450d00201710230b0240201c41ffffffff0171450d00201b10230b0240200642ffffff3f83500d00201f10230b200441f0006a41186a20044190016a41186a290200370300200441f0006a41106a20044190016a41106a290200370300200441f0006a41086a20044190016a41086a2902003703002004200429029001370370200041086a2014360200200041046a201336020020002012360200200441c0006a21010b200141046a28020041ffffffff0371450d06200128020010230c060b20044180046a41186a2202420037030020044180046a41106a2207420037030020044180046a41086a22014200370300200442003703800441e4dec400ad4280808080e00084100c2208290000211e2001200841086a2900003703002004201e370380042008102341f3dec400ad4280808080e00084100c220a290000211e200441d0076a41086a2208200a41086a2900003703002004201e3703d007200a1023200920042903d007370000200941086a2216200829030037000020202001290300370300202120072903003703002022200229030037030020042004290380043703b006200441106a200441b0066a412010cd012004280214210f20042802102113200242003703002007420037030020014200370300200442003703800441db97c700ad4280808080f00084100c220a290000211e2001200a41086a2900003703002004201e37038004200a102341bcbcc300ad4280808080c00184100c220a290000211e2008200a41086a2900003703002004201e3703d007200a1023200920042903d0073700002016200829030037000020202001290300370300202120072903003703002022200229030037030020042004290380043703b006200441086a200441b0066a412010cd01200428020c214020042802082141200441003602d807200442043703d007200441d0076a4100200e1079200e412c6c210820042802d007223220042802d80722074102746a2101200b2102034020012002280200360200200741016a2107200141046a21012002412c6a2102200841546a22080d000b20044190016a41086a200441b0016a41086a29030037030020044190016a41106a200441b0016a41106a29030037030020044190016a41186a200441b0016a41186a290300370300200420073602d807200420042903b0013703900120042902d40721302004280284072142200428028807212c0240201d41ffffffff0171450d00201710230b0240201c41ffffffff0171450d00201b10230b200f410020131b21310240200642ffffff3f83500d00201f10230b200441d0006a41086a20044190016a41086a2903002206370300200441d0006a41106a20044190016a41106a290300221e370300200441d0006a41186a20044190016a41186a290300223637030020042004290390012225370350200341086a280200210c2003280200211d200441b0016a41186a2036370300200441b0016a41106a201e370300200441b0016a41086a2006370300200420253703b00120044190076a2031413270224310ad032004280290072108200420042802980722013602e406200420083602e006200441b0076a2001ad4220862008ad8422061010108b0102400240024002400240024020042802b0072207450d0020042802b40721172004200441b0076a41086a28020022013602742004200736027002400240024020014104490d002004200741046a36027020042001417c6a220236027420024104490d002007350000211e2004200141786a220a3602742004200741086a360270200441003a00f0074100210102400340200441003a00f006200a2001460d01200441d0076a20016a200720016a220241086a2d00003a00002004200241096a3602702004200141016a22023a00f0072002210120024120470d000b20044180046a41086a200441d0076a41086a29030037030020044180046a41106a200441d0076a41106a29030037030020044180046a41186a200441d0076a41186a2903003703002004200a20026b360274200420042903d00737038004200441d0076a200441f0006a10c60320042802d007220a450d0120042802d4072116200441d0076a200441f0006a10cf0120042802d00722130d02201641ffffffff0371450d01200a10230c010b20044100360274200141ff0171450d00200441003a00f0070b4100210a200441003602880420044201370380042004410a360294012004200441e0066a36029001200420044180046a3602d00141012101200441e4076a4101360200200442013702d40720044180c5c6003602d007200420044190016a3602e007200441d0016a4184a5c200200441d0076a10311a20043502880442208620043502800484100a0240200428028404450d0020042802800410230b0c010b200441d0016a41086a20044180046a41086a290300370300200441d0016a41106a20044180046a41106a29030037030020042802d407210f410021010b02402017450d00200710230b2001450d010b2004280294070d010c040b2006101120042802940721010240200a450d0002402001450d00200810230b41b9f4c200ad4280808080c00184100c22012900002106200441b0066a41086a200141086a290000370300200420063703b0062001102341c5f4c200ad4280808080d00284100c22012900002106200441d0016a41086a200141086a290000370300200420063703d001200110232004201e3e02b0072004200441b0076aad4280808080c00084100d22012900003703900120011023200441dc076a200441b4076a360200200441003a00e007200420044190016a41086a3602d4072004200441b0076a3602d807200420044190016a3602d00720044180046a200441d0076a1065200428028804221741206a2202417f4c0d0d2004280280042109024002402002450d00200210212201450d082002410f4d0d01200221070c050b200241017422014110200141104b1b220710212201450d090c040b200241017422074110200741104b1b220741004e0d020c070b2001450d030b200810230c020b20022007460d0020012002200710252201450d050b200120042903b006370000200141086a200441b0066a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0420072008460d0020012007200810252201450d050b200120042903d001370010200141186a200441d0016a41086a2903003700000240200841606a20174f0d002017415f4b0d04200841017422072002200720024b1b22074100480d0420082007460d0020012008200710252201450d050b200141206a2009201710a1051a0240200428028404450d00200910230b2002ad4220862001ad841012200110230240201641ffffffff0371450d00200a10230b200f41ffffff3f71450d00201310230b200441d0076a41186a4200370300200441d0076a41106a22074200370300200441d0076a41086a22014200370300200442003703d00741db97c700ad4280808080f00084100c220229000021062001200241086a290000370300200420063703d0072002102341bbacc300ad4280808080a00184100c22022900002106200441d0016a41086a2208200241086a290000370300200420063703d00120021023200720042903d001220637030020044180046a41086a200129030037030020044180046a41106a200637030020044180046a41186a2008290300370300200420042903d00737038004200441d0076a20044180046a41201089020240024020042802d00722010d00200441003602f806200442013703f0060c010b200420042902d4073702f406200420013602f0060b0240202c200c202c200c491b223b450d0020044190076aad4280808080c00084212f20044190076a41046a213e20044190016a41086a2127200441d0076a41086a2129200441d0076a410472212d200441d0076a41146a213a200441d0076a4101722113200441b0076a41146a211a2004419c076a213f20044190076a4104722128200441d0016a41106a210e200441b0066a41106a2110200441c0096a212a200441a0096a211c200441e0086a211b200441c0086a2122200441a0086a2121200441ec076a2120200441d0076a41106a21354100211f034020044100360288072004420137038007201d201f4188026c6a220f2802fc012107200f4180026a2802002108200441b0066a41186a2215420037030020104200370300200441b0066a41086a22094200370300200442003703b00641db97c700ad4280808080f00084100c220129000021062009200141086a290000370300200420063703b0062001102341bbacc300ad4280808080a00184100c22012900002106200441e0066a41086a2202200141086a290000370300200420063703e00620011023201020042903e006370000201041086a200229030037000020044180046a41086a2214200929030037030020044180046a41106a2219201029030037030020044180046a41186a22112015290300370300200420042903b00637038004200441d0076a20044180046a41201089020240024020042802d00722010d004100210220044100360278200442013703700c010b200420042902d4072206370274200420013602702006a721020b200441d0016a41186a22184200370300200e4200370300200441d0016a41086a22124200370300200442003703d001418fcdc200ad4280808080f00084100c220129000021062012200141086a290000370300200420063703d0012001102341b8dbc100ad4280808080900184100c220129000021062014200141086a290000370300200420063703800420011023200e200429038004370000200e41086a2014290300370000202920122903003703002035200e290300370300200441d0076a41186a2018290300370300200420042903d0013703d00720044180046a200441d0076a10ba01203720042802900420042903800442025122011b2137024020010d0020044190016a203710b801200441d0076a2004280290012233200428029801222410bb012014202d41086a22342902003703002004202d290200370380040240024020042802d0074101460d002004410036029c0720044200370390070c010b20044190076a41086a20142903003703002004200429038004370390070b200441003602b807200420083602b407200420073602b0072004200441f0006a3602c407200420044180076a3602c0072004200441f0066a3602bc07200441d0076a200441b0076a201a10c703024020042d00d0074101470d0003402009201341086a29000022063703002010201341106a290000221e3703002015201341186a29000022363703002004201329000022253703b00620182036370300200e201e37030020122006370300200420253703d00102400240200428029407220a450d0020042802980721170c010b200441d0076a410041e00210a0051a20044180046a41286a2201410036020020044180046a41206a2202420037030020114200370300201942003703002014420037030020044200370380044194031021220a450d0941002117200a41003b0106200a4100360200200a41086a200441d0076a41e00210a1051a200a4190036a2001280200360200200a4188036a2002290300370200200a4180036a2011290300370200200a41f8026a2019290300370200200a41f0026a2014290300370200200a2004290380043702e80220044100360298072004200a360294070b024002400340200a41086a2102200a2f01062216410574210141002107024003402001450d01200441d0016a2002412010a3052208450d03200141606a2101200741016a2107200241206a21022008417f4a0d000b2007417f6a21160b02402017450d002017417f6a2117200a20164102746a4194036a280200210a0c010b0b2011201829030022063703002019200e290300221e370300201420122903002236370300200420042903d001222537038004203a2025370200203a41086a2036370200203a41106a201e370200203a41186a20063702002004203f3602e007200420163602dc07200420283602d8072004200a3602d407200441003602d007200441d0076a410010bc0121010c010b200a20074102746a41e8026a21010b2001200128020041146a360200200420042802900741146a36029007200441d0076a200441b0076a201a10c70320042d00d0074101460d000b0b203420044190076a41086a290300370200202d200429039007370200200441013602d0072004410036028804200442013703800420042802d4072102410410212201450d0620012002360000200420013602800420044284808080c00037028404202920044180046a10bd0120042802840421012024ad4220862033ad842004350288044220862004280280042202ad84100e02402001450d00200210230b024020042802d007450d00202910be010b0240200428029401450d00203310230b200428027421020b0240200241ffffff3f71450d00200428027010230b2009200f41d8006a2900003703002010200f41e0006a2900003703002015200f41e8006a2900003703002004200f2900503703b006200f41cc006a2802002201417f4c0d0a200f2802442102200f28024021070240024020010d00410021084101210a0c010b2001210820011021220a450d040b200a2002200110a1052102200441b0076a41186a220a200f4188016a290300370300200441b0076a41106a2217200f4180016a290300370300200441b0076a41086a2216200f41f8006a2903003703002014200f4198016a2900003703002019200f41a0016a2900003703002011200f41a8016a29000037030020044180046a41206a2233200f41b0016a29000037030020044180046a41286a2224200f41b8016a29000037030020044180046a41306a2234200f41c0016a29000037030020044180046a41386a223c200f41c8016a2900003703002004200f2903703703b0072004200f290090013703800420044190076a41186a2238200f41e8016a29000037030020044190076a41106a2239200f41e0016a29000037030020044190076a41086a222b200f41d8016a2900003703002004200f2900d00137039007200f41086a290300211e200f290300213620044190016a200f41106a10c4032018200f41346a2900002225370300200e200f412c6a29000022263703002012200f41246a290000222e370300200f29001c21062035200429039001370300203541086a202728020036020020202006370200202041086a202e370200202041106a2026370200202041186a20253702002004201e3703d807200420363703d007200420063703d0012004200736029008200420023602940820042008360298082004200136029c08202141186a2015290300370300202141106a2010290300370300202141086a2009290300370300202120042903b006370300202220042903b007370300202241086a2016290300370300202241106a2017290300370300202241186a200a290300370300201b200429038004370300201b41086a2014290300370300201b41106a2019290300370300201b41186a2011290300370300201b41206a2033290300370300201b41286a2024290300370300201b41306a2034290300370300201b41386a203c290300370300201c41186a2038290300370300201c41106a2039290300370300201c41086a202b290300370300201c200429039007370300202a41086a20044180076a41086a280200360200202a200429038007370200200442013702cc09200441003602d40941b9f4c200ad4280808080c00184100c220129000021062009200141086a290000370300200420063703b0062001102341c5f4c200ad4280808080d00284100c220129000021062012200141086a290000370300200420063703d0012001102320042031360290072004202f100d22012900003703900120011023200441003a0090042004203e36028c042004202736028404200420044190076a36028804200420044190016a36028004200441b0076a20044180046a1065412010212201450d0320012023201f4105746a2202290000370000200141186a2207200241186a290000370000200141106a2208200241106a290000370000200141086a220a200241086a290000370000412010212202450d0320022001290000370000200241186a22162007290000370000200241106a220f2008290000370000200241086a2218200a2900003700002001102320042802b807220841c0006a2215417f4c0d0a20042802b00721170240024002402015450d00201510212214450d062015410f4d0d01201521010c020b41102101411010212214450d070c010b201541017422014110200141104b1b22014100480d05024020152001470d00201521010c010b20142015200110252214450d060b201420042903b006370000201441086a20092903003700000240024020014170714110460d002001210a0c010b200141017422074120200741204b1b220a4100480d052001200a460d0020142001200a10252214450d060b200841206a2101201420042903d001370010201441186a201229030037000002400240200a41606a2008490d00200a21070c010b2008415f4b0d05200a41017422072001200720014b1b22074100480d05200a2007460d002014200a200710252214450d060b201441206a2017200810a1051a02400240200720016b411f4d0d00200721090c010b200141206a22082001490d052007410174220a2008200a20084b1b22094100480d05024020070d00024020090d00410121140c020b200910212214450d070c010b20072009460d0020142007200910252214450d060b201420016a22012002290000370000200141186a2016290000370000200141106a200f290000370000200141086a201829000037000020021023024020042802b407450d00201710230b20044100360288042004420137038004200441d0076a20044180046a10e10220042802c009211720042802c809220120044180046a106102402001450d0020014105742116410020042802880422026b210a200428028004210f200428028404210803402017210102402008200a6a411f4b0d00200241206a22072002490d07200841017422172007201720074b1b22074100480d07024002400240024020080d00024020070d004101210f0c020b20071021210f0c030b20082007470d010b200721080c020b200f200820071025210f0b20072108200f450d080b200141206a2117200f20026a22072001290000370000200741186a200141186a290000370000200741106a200141106a290000370000200741086a200141086a290000370000200a41606a210a200241206a2102201641606a22160d000b200420083602840420042002360288042004200f360280040b20042802cc09211720042802d409220120044180046a10610240024020010d0020042802880421022004280284042108200428028004210f0c010b20014105742116410020042802880422026b210a200428028004210f200428028404210803402017210102402008200a6a411f4b0d00200241206a22072002490d07200841017422172007201720074b1b22074100480d07024002400240024020080d00024020070d004101210f0c020b20071021210f0c030b20082007470d010b200721080c020b200f200820071025210f0b20072108200f450d080b200141206a2117200f20026a22072001290000370000200741186a200141186a290000370000200741106a200141106a290000370000200741086a200141086a290000370000200a41606a210a200241206a2102201641606a22160d000b200420083602840420042002360288042004200f360280040b2015ad4220862014ad842002ad422086200fad84100e02402008450d00200f10230b02402009450d00201410230b0240200428029808450d0020042802940810230b024020042802e8072202450d0020042802e00721012002410474210203400240200141046a280200450d00200128020010230b200141106a2101200241706a22020d000b0b024020042802e40741ffffffff0071450d0020042802e00710230b024020042802c40941ffffff3f71450d0020042802c00910230b201f41016a211f024020042802d00941ffffff3f71450d0020042802cc0910230b201f203b490d000b0b20044180046a204310ad0320043502880421062004280280042113200441003602d807200442013703d007410410212201450d03200441043602d407200420013602d00720012031360000200441043602d80720014104410810252201450d03200441083602d40720012040410020411b360004200420013602d007200441083602d80720014108412810252201450d03200120042903b001370008200141106a200441b8016a290300370000200141186a200441b0016a41106a290300370000200141206a200441b0016a41186a290300370000200441283602d407200420013602d007200441283602d8072030422088a72201200441d0076a106102402001450d0020014102742116410020042802d80722016b210220042802d40721082032210703402007280200210f02400240200820026a4104490d0020042802d007210a0c010b200141046a220a2001490d0520084101742217200a2017200a4b1b22174100480d050240024020080d00024020170d004101210a0c020b20171021220a450d080c010b20042802d007210a20082017460d00200a200820171025220a450d070b200420173602d4072004200a3602d007201721080b200741046a2107200a20016a200f3600002004200141046a22013602d8072002417c6a21022016417c6a22160d000b0b2023202c200441d0076a10c80320042802d407210120064220862013ad8420043502d80742208620042802d0072202ad84100e02402001450d00200210230b0240200428028404450d00201310230b024020042802f40641ffffff3f71450d0020042802f00610230b0240203042ffffffff0383500d00203210230b0240204241ffffff3f71450d00202310230b200441d0076a41186a22074200370300200441d0076a41106a22084200370300200441d0076a41086a22014200370300200442003703d00741b0dfc300ad4280808080a00184100c22022900002106200441b0066a41086a220a200241086a290000370300200420063703b006200210232001200a290300370300200420042903b0063703d00741fca2c300ad4280808080d00184100c22022900002106200441d0016a41086a220a200241086a290000370300200420063703d00120021023200520042903d001370000200541086a200a29030037000020044180046a41086a200129030037030020044180046a41106a200829030037030020044180046a41186a2007290300370300200420042903d00737038004200441d0076a20044180046a10c9030240024020042802d00722090d00410021102004410036029807200442043703900741042109410021160c010b20042902d4072106200420093602900720042006370294072006422088a721102006a721160b0240024002400240200c450d00201d200c4188026c6a2115200441b0076aad4280808080c00084211e200441b0076a41046a211820044190016a41086a2119200441d0076a410472211141b0dfc300ad4280808080a0018421360340200441d0076a201d280240221310ca0320042802d0072101200420042802d807360284042004200136028004201d280244201d41cc006a28020020044180046a10c802024020042802d407450d00200110230b0240201d2802182217450d00201d280210210120044180046a201310c103200441d0076a2004280280042216200428028804220f10e5014100210720042802d807410020042802d00741014622121b210e200141086a210220042802d40721142017410474220a21080340200228020020076a2107200241106a2102200841706a22080d000b20042007200e6a3602d807200441013602d00720042014410020121b20176a3602d4072004200f3602d401200420163602d0012011200441d0016a10e6010240200428028404450d00201610230b2036100c22022900002106200441b0066a41086a2207200241086a290000370300200420063703b0062002102341f0a1c300ad4280808080a00284100c22022900002106200441d0016a41086a220e200241086a290000370300200420063703d00120021023200420133602b0072004201e100d22022900003703900120021023200441003a00e007200420183602dc07200420193602d4072004200441b0076a3602d807200420044190016a3602d00720044180046a200441d0076a1065200428028804221641206a2202417f4c0d0e200428028004210f0240024002402002450d00200210212212450d0a2002410f4d0d01200221080c020b41102108411010212212450d0b0c010b200241017422084110200841104b1b22084100480d09024020022008470d00200221080c010b20122002200810252212450d0a0b201220042903b006370000201241086a20072903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0920082007460d0020122008200710252212450d0a0b201220042903d001370010201241186a200e29030037000002400240200741606a2016490d002007210e0c010b2016415f4b0d09200741017422082002200820024b1b220e4100480d092007200e460d0020122007200e10252212450d0a0b201241206a200f201610a1051a0240200428028404450d00200f10230b20044180046a2002ad4220862012ad8422061010108b010240024020042802800422070d00410410212202450d09200442043702d407200420023602d0074100200441d0076a106120042802d807210220042802d407210820042802d00721070c010b200428028804210220042802840421080b200420023602b807200420083602b407200420073602b00702400240024002400240024002400240024002400240024002402002450d00200441d0076a200720022017107520042802d0074101460d0420042802d407211620042802dc07220720042802d8072208460d032002200720086b6a220220174102746a2217417f4c0d1b20170d014101210f0c020b2017200441b0076a1061034002402001410c6a2d000022024103714103460d00024002400240024020020e03000102000b410021070c020b410121070c010b410221070b200420073a00f0060240024020042802b40720042802b8072202460d0020042802b00721080c010b200241016a22072002490d17200241017422082007200820074b1b22074100480d170240024020020d0041002102024020070d00410121080c020b200710212208450d1a0c010b20042802b007210820022007460d0020082002200710252208450d1920042802b80721020b200420073602b407200420083602b00720042d00f00621070b200820026a20073a00002004200241016a3602b8070b20012802002116200141086a2802002202200441b0076a10610240024020042802b407221720042802b80722076b2002490d0020042802b00721080c010b200720026a22082007490d162017410174220f2008200f20084b1b220f4100480d160240024020170d000240200f0d00410121080c020b200f10212208450d190c010b20042802b00721082017200f460d0020082017200f10252208450d1820042802b80721070b2004200f3602b407200420083602b0070b200141106a2101200820076a2016200210a1051a2004200720026a22023602b807200a41706a220a0d000c090b0b20171021220f450d120b200420173602b4062004200f3602b006200420023602b8062004200441b0066a3602d0072016200441d0076a200710b20320022007490d0220042802b80622172002490d0320042802b80722172008490d0420042802b006211620042802b007210f2004200220076b22023602e0062004201720086b221736027020022017470d05201620076a200f20086a200210a1051a034002402001410c6a2d000022024103714103460d00024002400240024020020e03000102000b410021070c020b410121070c010b410221070b200420073a00f0060240024020042802b40620042802b8062202460d0020042802b00621080c010b200241016a22072002490d15200241017422082007200820074b1b22074100480d150240024020020d0041002102024020070d00410121080c020b200710212208450d180c010b20042802b006210820022007460d0020082002200710252208450d1720042802b80621020b200420073602b406200420083602b00620042d00f00621070b200820026a20073a00002004200241016a3602b8060b20012802002116200141086a2802002202200441b0066a10610240024020042802b406221720042802b80622076b2002490d0020042802b00621080c010b200720026a22082007490d142017410174220f2008200f20084b1b220f4100480d140240024020170d000240200f0d00410121080c020b200f10212208450d170c010b20042802b00621082017200f460d0020082017200f10252208450d1620042802b80621070b2004200f3602b406200420083602b0060b200141106a2101200820076a2016200210a1051a2004200720026a22023602b806200a41706a220a0d000b20042802b406210720042802b006210120042802b407450d0720042802b00710230c070b2004200441b0076a3602d0072016200441d0076a200810b203034002402001410c6a2d000022024103714103460d00024002400240024020020e03000102000b410021070c020b410121070c010b410221070b200420073a00f0060240024020042802b40720042802b8072202460d0020042802b00721080c010b200241016a22072002490d14200241017422082007200820074b1b22074100480d140240024020020d0041002102024020070d00410121080c020b200710212208450d170c010b20042802b007210820022007460d0020082002200710252208450d1620042802b80721020b200420073602b407200420083602b00720042d00f00621070b200820026a20073a00002004200241016a3602b8070b20012802002116200141086a2802002202200441b0076a10610240024020042802b407221720042802b80722076b2002490d0020042802b00721080c010b200720026a22082007490d132017410174220f2008200f20084b1b220f4100480d130240024020170d000240200f0d00410121080c020b200f10212208450d160c010b20042802b00721082017200f460d0020082017200f10252208450d1520042802b80721070b2004200f3602b407200420083602b0070b200141106a2101200820076a2016200210a1051a2004200720026a22023602b807200a41706a220a450d060c000b0b20042802b407450d0620042802b00710230c060b2007200241c494c6001044000b2002201741c494c6001043000b2008201741d494c6001044000b20044180046a41146a410b3602002004418c046a410d360200200441d0016a41146a41033602002004200441e0066a360290012004200441f0006a3602b001200441d0076a41146a4100360200200442033702d4012004418ca7c7003602d0012004410d360284042004419ca8c7003602e007200442013702d407200441e0a7c7003602d007200420044180046a3602e0012004200441d0076a360290042004200441b0016a36028804200420044190016a36028004200441d0016a419ca8c700103a000b20042802b407210720042802b00721010b02402001450d0020062002ad4220862001ad84100e2007450d00200110230b200e450d010b201210230b41002101024002400240201041014b0d0020100e020201020b20102102034020012002410176220720016a22082013200920084102746a280200491b2101200220076b220241014b0d000b0b02402013200920014102746a2802002202470d0041e084c300ad4280808080c00484100a0c020b20102001201320024b6a2201490d040b02402010200428029407470d0020044190076a20104101107920042802900721090b200920014102746a220241046a2002201020016b41027410a2051a200220133602002004201041016a2210360298070b201d4188026a221d2015470d000b20042802940721160b200441d0076a41186a22024200370300200441d0076a41106a22074200370300200441d0076a41086a22014200370300200442003703d00741b0dfc300ad4280808080a001842206100c220a290000211e200441b0066a41086a2208200a41086a2900003703002004201e3703b006200a102320012008290300370300200420042903b0063703d00741fca2c300ad4280808080d00184221e100c22172900002136200441d0016a41086a220a201741086a290000370300200420363703d00120171023200520042903d001370000200541086a220f200a29030037000020044180046a41086a2213200129030037030020044180046a41106a2212200729030037030020044180046a41186a220e2002290300370300200420042903d00737038004200441203602d407200420044180046a3602d00720092010200441d0076a10d5020240201641ffffffff0371450d00200910230b200242003703002007420037030020014200370300200442003703d0072006100c221729000021062008201741086a290000370300200420063703b0062017102320012008290300370300200420042903b0063703d007201e100c22082900002106200a200841086a290000370300200420063703d00120081023200520042903d001370000200f200a2903003700002013200129030037030020122007290300370300200e2002290300370300200420042903d00737038004200441d0076a20044180046a10c90320042802d0072201410420011b2121024020042902d407420020011b2225422088a722200d00410021150c030b202120204102746a211b200441b0076aad4280808080c000842136200441b0076a41046a211d20044190016a41086a211f200441b0066a41086a2108200441d0076a41067221104100211541002114410021112021210f034020152119200441d0076a200f28020010c10320044180046a20042802d007220a20042802d80710e501200428028004410146210120042802840421022004280288042107024020042802d407450d00200a10230b2002410020011b210e2007410020011b21180240024020140d00410121010c010b200e20146a41e50049201820116a41a19c01497121010b201941016a21150240200e450d002001450d00200441d0076a200f28020010c10320043502d80742208620042802d0072201ad841011024020042802d407450d00200110230b41b0dfc300ad4280808080a00184100c220129000021062008200141086a290000370300200420063703b0062001102341f0a1c300ad4280808080a00284100c22012900002106200441d0016a41086a2213200141086a290000370300200420063703d001200110232004200f2802003602b00720042036100d22012900003703900120011023200441003a00e0072004201d3602dc072004201f3602d4072004200441b0076a3602d807200420044190016a3602d00720044180046a200441d0076a1065200428028804221741206a2202417f4c0d0d20042802800421160240024002402002450d00200210212201450d092002410f4d0d01200221070c020b41102107411010212201450d0a0c010b200241017422074110200741104b1b22074100480d08024020022007470d00200221070c010b20012002200710252201450d090b200120042903b006370000200141086a20082903003700000240024020074170714110460d002007210a0c010b2007410174220a4120200a41204b1b220a4100480d082007200a460d0020012007200a10252201450d090b200120042903d001370010200141186a20132903003700000240200a41606a20174f0d002017415f4b0d08200a41017422072002200720024b1b22074100480d08200a2007460d002001200a200710252201450d090b200141206a2016201710a1051a0240200428028404450d00201610230b200420023602b407200420013602b007200441d0016a2002ad4220862001ad84221e1010108b010240024020042802d00122070d00410021020c010b20042802d401210a200420042802d8013602b406200420073602b006200441d0076a200441b0066a10cb030240024020042802d00722020d00200441003602880420044201370380042004410a360294012004200441b0076a36029001200420044180046a36029007200441013602e407200442013702d40720044180c5c6003602d007200420044190016a3602e00720044190076a4184a5c200200441d0076a10311a20043502880442208620043502800484100a200428028404450d0120042802800410230c010b20042902d40721060b0240200a450d00200710230b024020020d00410021020c010b201e10110b200110232002410420021b221a2006420020021b2206422088a722014104746a210702400240024020010d00201a21010c010b201a2101034002402001410c6a2d000022134103470d00200141106a21010c020b200141046a280200210a20012802002102200141086a28020021172004200f280200221636029001200420173602b401200420023602b001200441d0016a200441b0016a109903024020042802d0014116460d0020044180046a200441d0016a41b00210a1051a4101211702400240024020134103710e03010200010b41002117410021120c010b200441d0076a20044190016a10af02200441b0076a41086a201041086a290100370300200441b0076a41106a201041106a290100370300200441b0076a41186a201041186a2f01003b0100200420102901003703b00720042801d207211620042f01d007210941012112410021170b200441d0076a20044180046a41b00210a1051a200820042903b007370200200841086a200441b0076a41086a290300370200200841106a200441b0076a41106a290300370200200841186a200441b0076a41186a280200360200200420163602b406200420093b01b206200420123a00b106200420173a00b00620044190076a200441d0076a200441b0066a10cf020b0240200a450d00200210230b200141106a22012007470d000c020b0b20072001460d000340200141106a21020240200141046a280200450d00200128020010230b2002210120072002470d000b0b0240200642ffffffff0083500d00201a10230b200e20146a221441e3004b0d03201820116a2211419f9c014b0d030b200f41046a220f201b470d000c020b0b200120101038000b20192020490d0020152020418485c3001044000b200441d0076a41186a22074200370300200441d0076a41106a22084200370300200441d0076a41086a22014200370300200442003703d00741b0dfc300ad4280808080a00184100c22022900002106200441b0066a41086a220a200241086a290000370300200420063703b006200210232001200a290300370300200420042903b0063703d00741fca2c300ad4280808080d00184100c22022900002106200441d0016a41086a220a200241086a290000370300200420063703d00120021023200520042903d001370000200541086a200a29030037000020044180046a41086a200129030037030020044180046a41106a200829030037030020044180046a41186a2007290300370300200420042903d00737038004202020156b220241027441046a2201417f4c0d080240024020010d00410121070c010b200110212207450d020b200441003602d807200420013602d407200420073602d0072002200441d0076a10610240024020020d0020042802d807210120042802d407211720042802d007210a0c010b202120154102746a2107202041027420154102746b2116410020042802d80722016b210820042802d407210203402007280200210f02400240200220086a4104490d0020042802d007210a200221170c010b200141046a220a2001490d0520024101742217200a2017200a4b1b22174100480d050240024020020d00024020170d004101210a0c020b20171021220a450d080c010b20042802d007210a20022017460d00200a200220171025220a450d070b200420173602d4072004200a3602d007201721020b200741046a2107200a20016a200f3600002004200141046a22013602d8072008417c6a21082016417c6a22160d000b0b20044180046aad42808080808004842001ad422086200aad84100e02402017450d00200a10230b0240202542ffffffff0383500d00202110230b200428024821022004280240210f200428024421010b200441d0076a41186a220a4200370300200441d0076a41106a22174200370300200441d0076a41086a22074200370300200442003703d00741b0dfc300ad4280808080a00184100c22082900002106200441b0066a41086a2216200841086a290000370300200420063703b0062008102320072016290300370300200420042903b0063703d00741a89ec700ad4280808080900184100c22082900002106200441d0016a41086a2216200841086a290000370300200420063703d00120081023200520042903d001370000200541086a201629030037000020044180046a41086a200729030037030020044180046a41106a201729030037030020044180046a41186a200a290300370300200420042903d00737038004200441203602d407200420044180046a3602d007200f2002200441d0076a10d5020240200141ffffffff0371450d00200f10230b200041043a00000240200da72201450d002001412c6c450d00200b10230b200328020021070240200c450d00200c4188026c2102200721010340200110a20320014188026a2101200241f87d6a22020d000b0b200341046a2802002201450d0620014188026c450d06200710230c060b1033000b102c000b102a000b20004183203b0100200041086a4115360200200041046a4187ffc200360200200041026a41013a00000b200da72201450d002001412c6c450d00200b10230b20032802002107024020032802082201450d0020014188026c2102200721010340200110a20320014188026a2101200241f87d6a22020d000b0b200341046a2802002201450d0020014188026c450d00200710230b200441b00a6a24000f0b1032000bad3409057f017e017f017e027f027e097f037e077f230041d0036b2203240020012800002104200341186a41186a2001411c6a290000370300200341186a41106a200141146a290000370300200341186a41086a2001410c6a290000370300200320012900043703182002280200210520034198036a41186a2206420037030020034198036a41106a2207420037030020034198036a41086a22014200370300200342003703980341db97c700ad4280808080f000842208100c2209290000210a2001200941086a2900003703002003200a370398032009102341bcbcc300ad4280808080c00184100c2209290000210a200341d8006a41086a220b200941086a2900003703002003200a3703582009102320072003290358220a370300200341f8026a41086a220c2001290300370300200341f8026a41106a200a370300200341f8026a41186a200b29030037030020032003290398033703f802200341106a200341f8026a412010cd01410021090240024002400240024002400240024002400240024002400240024020052003280214410020032802101b460d002008100c2201290000210a200341d0016a41086a200141086a2900003703002003200a3703d0012001102341e297c700ad4280808080a00284100c2201290000210a200c200141086a2900003703002003200a3703f80220011023200320053602bc032003200341bc036aad4280808080c00084100d22012900003703c00320011023200341d8006a410c6a200341c0036a360200200341003a00682003200341c0036a41086a36025c2003200341bc036a3602602003200341c0036a360258200341386a200341d8006a10652003280240220741206a2201417f4c0d042003280238210c024002402001450d0020011021220b450d052001410f4d0d01200121050c040b200141017422094110200941104b1b22051021220b0d030c0e0b200141017422094110200941104b1b220541004e0d010c0c0b200b4120360200200320043602582003200341186a36025c200341f0016a200341d8006a108803200341d8006a20032802f001220520032802f80110e1012001200341e1006a2900003703002007200341e9006a2900003703002006200341f1006a2900003703002003200329005937039803024020032d00584101470d00200341f8026a41186a20034198036a41186a290300370300200341f8026a41106a20034198036a41106a290300370300200341f8026a41086a20034198036a41086a29030037030020032003290398033703f802410121090b024020032802f401450d00200510230b0240024020090d00200041003602400c010b20034198036a41186a2201200341f8026a41186a290300220a37030020034198036a41106a2209200341f8026a41106a290300220837030020034198036a41086a2205200341f8026a41086a290300220d370300200320032903f802220e37039803200341d8006a41186a2207200a370300200341d8006a41106a220b2008370300200341d8006a41086a2206200d3703002003200e370358200341f0016a200341d8006a108f02200341c8026a41186a220c2001290300370300200341c8026a41106a22012009290300370300200341c8026a41086a2209200529030037030020032003290398033703c80202402003280290020d00200041003602400c010b2007200c290300370300200b200129030037030020062009290300370300200341d8006a41286a200341f0016a41086a29030037030020034188016a200341f0016a41106a29030037030020034190016a200341f0016a41186a29030037030020034198016a20034190026a290300370300200341a0016a200341f0016a41286a290300370300200320032903c802370358200320032903f0013703782000200341d8006a41d00010a1051a0b2002410c6a280200210f200228020421100c080b20012005460d00200b200120051025220b450d0b0b200b20032903d001370000200b41086a200341d0016a41086a2903003700000240024020054170714110460d00200521090c010b200541017422094120200941204b1b22094100480d0a20052009460d00200b200520091025220b450d0b0b200b20032903f802370010200b41186a200341f8026a41086a29030037000002400240200941606a2007490d00200921060c010b200741206a22052007490d0a200941017422062005200620054b1b22064100480d0a20092006460d00200b200920061025220b450d0b0b200b41206a200c200710a1051a0240200328023c450d00200c10230b200320013602c4032003200b3602c003200341d0016a2001ad422086200bad841010108b010240024020032802d00122050d00410021010c010b200341d8016a280200210720032802d401210c41002101200341003a0078024002400240034020072001460d01200341d8006a20016a200520016a2d00003a00002003200141016a22093a00782009210120094120470d000b200341f8026a41186a2201200341d8006a41186a290300370300200341f8026a41106a2211200341d8006a41106a290300370300200341f8026a41086a2212200341d8006a41086a290300370300200320032903583703f802200720096b41034d0d01200341f0016a41186a2001290300370300200341f0016a41106a2011290300370300200341f0016a41086a2012290300370300200320032903f8023703f001410121010c020b200141ff0171450d00200341003a00780b410021012003410036028003200342013703f8022003410a36023c2003200341c0036a3602382003200341f8026a3602bc03200341ec006a41013602002003420137025c20034180c5c6003602582003200341386a360268200341bc036a4184a5c200200341d8006a10311a20033502800342208620033502f80284100a20032802fc02450d0020032802f80210230b200c450d00200510230b200341d8006a41186a2209200341f0016a41186a290300370300200341d8006a41106a2205200341f0016a41106a290300370300200341d8006a41086a2207200341f0016a41086a290300370300200320032903f0013703582001450d07200341c8026a41186a2009290300370300200341c8026a41106a2005290300370300200341c8026a41086a2007290300370300200320032903583703c80202402006450d00200b10230b20034198036a41086a200341c8026a41086a290300220a37030020034198036a41106a200341c8026a41106a290300220837030020034198036a41186a200341c8026a41186a290300220d370300200320032903c802220e37039803200341386a41186a200d370300200341386a41106a2008370300200341386a41086a200a3703002003200e370338200341d0016a41186a200d370300200341d0016a41106a2008370300200341d0016a41086a200a3703002003200e3703d0012002410c6a280200210f20022802042110410110212209450d00200941003a000041004100350280804042adfed5e4d485fda8d8007e200341d8006aad7c421f89220a3e02808040200341d8006a41186a220541eedcc400ad428080808010841018220141186a290000370300200341d8006a41106a2207200141106a290000370300200341d8006a41086a220b200141086a2900003703002003200129000037035820011023200341f0016a41206a4100360200200341f0016a41186a420437030020034184026a419ca1c000360200200341f0016a412c6a428180808010370200200341ac026a200b290300370200200341b4026a2007290300370200200341bc026a200529030037020020034100360280022003200a3703f8012003418080c000ad3703f0012003200936029802200320032903583702a4020240200f450d002010200f410c6c6a2113200341f0016a41106a2114200341d8006a41077221152010210c0340200c2802082205417f4c0d03200c2802002101410021090240024020050d00410121074100210b0c010b2005210b200510212207450d030b20072001200510a10521070240200520032802a002470d00024020032802980222092007470d00410121090c010b20072009200510a3054521090b0240200b450d00200710230b024020090d0020034198036a41186a22072005ad4220862001ad841018220941186a29000037030020034198036a41106a220b200941106a29000037030020034198036a41086a2206200941086a290000370300200320092900003703980320091023200341c8026a41186a22112007290300370300200341c8026a41106a2207200b290300370300200341c8026a41086a220b200629030037030020032003290398033703c8020240024020050d0041012109410021160c010b20052116200510212209450d040b20092001200510a1052117024002400240200520032802a002470d0020032802980222012017460d0120172001200510a305450d010b200320032903f801220d20032903f001220a852208200a4218898520084210868520084225897c220842a0cbbf9599b5a19f0a7c220e201129030022188520032903c8022219200e8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85200b290300220e200842efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852007290300221a200842bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010a605200341d8006a41186a221b2018370300200341d8006a41106a221c201a370300200341d8006a41086a221d200e37030020032019370358200341086a29030020032903007c200d200a7c85220a421988a741ff0071221e410874201e722201411074200172211f200328028002220b200aa72220712107410021212003280288022106200328028402211203400240201220076a2800002211201f732201417f73200141fffdfb776a71418081828478712201450d0002400340200620016841037620076a200b7141306c6a2209200341d8006a460d012009200341d8006a412010a305450d012001417f6a2001712201450d020c000b0b200341f8026a41186a201541186a2d00003a0000200341f8026a41106a201541106a290000370300200341f8026a41086a201541086a290000370300200320152900003703f80202402009412c6a2201280200220741004a0d00200941206a210b0240200941246a2206280200450d00200b2802001023200128020021070b20062016360200200b20173602002001200741016a360200200941286a20053602000c050b2001200741016a3602002016450d040c030b202141046a222120076a200b712107201120114101747141808182847871450d000b200341f8026a41186a201b290300220a370300200341f8026a41106a201c2903002208370300200341f8026a41086a201d290300220d37030020032003290358220e3703f8022003200341f0016a3602bc03201b200a370300201c2008370300201d200d3703002003200e37035841002101202021090340200141046a22012009200b7122076a2109201220076a280000418081828478712206450d000b0240201220066841037620076a200b7122016a2c000022094100480d0020122012280200418081828478716841037622016a2d000021090b024020094101712207450d00200328028c020d00200341c0036a2014200341bc036a10dc02410021012003280284022112200328028002210b0340200141046a22012020200b7122096a2120201220096a280000418081828478712206450d000b201220066841037620096a200b7122016a2c00004100480d002012280200418081828478716841037621010b2003200328028c0220076b36028c022003280288022109201220016a201e3a00002001417c6a200b7120126a41046a201e3a00002009200141306c6a2201410136022c200120053602282001201636022420012017360220200141186a201b290300370200200141106a201c290300370200200141086a201d29030037020020012003290358370200200320032802900241016a360290020c020b2016450d010b201710230b200c410c6a220c2013470d000b0b200341d8006a200341f0016a41d80010a1051a200341c8016a200341d0016a41186a290300370300200341c0016a200341d0016a41106a290300370300200341b8016a200341d0016a41086a290300370300200320032903d0013703b001024002400240200341d8006a41d8006a22012003418c016a412010a305450d00200341f0016a41186a200141186a290000370300200341f0016a41106a200141106a290000370300200341f0016a41086a200141086a290000370300200320012900003703f001200341d8006a200341f0016a10ce042209450d01200928020c4101480d010b412410212209450d0220092004360000200320093602f001200342a4808080c0003702f4014120200341f0016a10610240024020032802f401220720032802f80122056b4120490d0020032802f00121092007210b0c010b200541206a22092005490d0c2007410174220b2009200b20094b1b220b4100480d0c0240024020070d000240200b0d00410121090c020b200b10212209450d0f0c010b20032802f00121092007200b460d0020092007200b10252209450d0e0b2003200b3602f401200320093602f0010b200920056a22072003290318370000200741186a200341186a41186a290300370000200741106a200341186a41106a290300370000200741086a200341186a41086a290300370000200341f0016a41106a200141086a290200370300200341f0016a41186a200141106a290200370300200341f0016a41206a200141186a290200370300200341f497c7003602f401200320012902003703f8012003200341d8006a3602f001200341003602a0032003200541206a36029c032003200936029803200341c8026a200341f0016a20034198036a1099050240200b450d00200910230b20032802c8024101470d01024020032802cc0222012d0000220941034b0d00024020090e0407070007070b200141086a280200450d06200141046a28020010230c060b200141286a280200450d05200141246a28020010230c050b200041003602400c060b20032802cc022209450d0402400240200341d0026a290300220a422088a741044f0d0041012105410021070c010b20092800002107410021050b0240200aa7450d00200910230b20050d04200320073602f802200341f0016a41106a200141086a290200370300200341f0016a41186a200141106a29020037030020034190026a200141186a290200370300200341f497c7003602f401200320012902003703f8012003200341d8006a3602f0012003420437029c032003200341f8026a36029803200341c8026a200341f0016a20034198036a109905024020032802c8024101470d00024020032802cc0222012d0000220941034b0d00024020090e0405050005050b200141086a280200450d04200141046a28020010230c040b200141286a280200450d03200141246a28020010230c030b024020032802cc0222050d00200041003602400c060b200341c8026a41086a290300210a200320053602d0012003200a422088a722073602d40141002101200341003a00e802024002400240034020072001460d01200341c8026a20016a200520016a22092d00003a00002003200941016a3602d0012003200141016a22093a00e8022009210120094120470d000b200341f8026a41086a2201200341c8026a41086a220b290300370300200341f8026a41106a2206200341c8026a41106a220c290300370300200341f8026a41186a2211200341c8026a41186a22122903003703002003200720096b3602d401200320032903c8023703f802200341c8026a200341d0016a10d00120032802e8022209450d01200341f0016a41186a22072011290300370300200341f0016a41106a22112006290300370300200341f0016a41086a22062001290300370300200341f0016a41286a2201200b290300370300200341f0016a41306a220b200c290300370300200341f0016a41386a220c201229030037030020034198036a41086a2212200341f4026a280200360200200320032903f8023703f001200320032903c802370390022003200341ec026a29020037039803200041386a200c290300370300200041306a200b290300370300200041286a2001290300370300200041206a200329039002370300200041186a2007290300370300200041106a2011290300370300200041086a2006290300370300200020032903f001370300200020093602402000200329039803370244200041cc006a20122802003602000c020b200341003602d401200141ff0171450d00200341003a00e8020b200041003602400b200aa7450d05200510230c050b1033000b1032000b20011023200041003602400c020b200110230b200041003602400b024020032802682205450d00200341ec006a280200220941046a2101200520096a41016a21072009280200417f7341808182847871210b200341f0006a28020021090240034002400240200b450d00200b21050c010b0340200120074f0d03200941c0016a210920012802002105200141046a220b21012005418081828478712205418081828478460d000b2005418081828478732105200b21010b2005417f6a200571210b200920056841037641306c6a220541246a280200450d00200528022010230c000b0b02402003280268220141086a200141056a490d00200141016aad42307e422088a71a0b200328026c10230b20034184016a280200450d0020032802800110230b0240200f450d00200f410c6c21092010210103400240200141046a280200450d00200128020010230b2001410c6a2101200941746a22090d000b0b200241086a2802002201450d012001410c6c450d01201010230c010b02402006450d00200b10230b200041003602402002280204210502402002410c6a2802002201450d002001410c6c21092005210103400240200141046a280200450d00200128020010230b2001410c6a2101200941746a22090d000b0b200241086a2802002201450d002001410c6c450d00200510230b200341d0036a24000f0b102c000b102a000bb10203027f017e027f230041106b220224000240024020012802082203ad42307e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510212206450d020b20024100360208200220063602002002200541306e36020420024100200310a4012002280208210502402003450d002001200341306c6a21062002280200200541306c6a21030340200320012903003703002003200141086a290300370308200341106a200141106a290300370300200341186a200141186a290300370300200341206a200141206a290300370300200341286a200141286a290300370300200341306a2103200541016a2105200141306a22012006470d000b0b20002002290300370200200041086a2005360200200241106a24000f0b1032000b1033000b930503027f017e057f230041d0006b220224004189e3c400ad4280808080800184100c22032900002104200241086a200341086a290000370300200220043703002003102341ac94c500ad4280808080a00284100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240411010212203450d0020032001290000370000200341086a200141086a29000037000020022003ad4280808080800284100d220129000037033020011023200241c4006a200341106a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b9a0302057f017e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b010240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10880102400240024020032802000d002003280224220420032802042205490d002005417f4c0d040240024020050d00410121060c010b200510272206450d06200620032802202207200510a1051a2003200420056b3602242003200720056a3602200b20060d010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b200041003602000c010b20002005ad2208422086200884370204200020063602000b2002450d00200110230b200341e0006a24000f0b1032000b1033000bec0403037f017e087f230041e0006b220224002002200110880102400240024002402002280200450d00200041003602000c010b20022802042203200128020441246e2204200420034b1bad42247e2205422088a70d012005a72204417f4c0d010240024020040d00410421060c010b200410212206450d030b4100210720024100360210200220063602082002200441246e36020c0240024002402003450d00410021080340200128020422094104490d03200841016a21082001280200220a280000210b20012009417c6a220c3602042001200a41046a36020041002104200241003a00582009417b6a21090340200c2004460d03200241386a20046a200a20046a220d41046a2d00003a0000200120093602042001200d41056a3602002002200441016a220d3a00582009417f6a2109200d2104200d4120470d000b200241186a41186a2209200241386a41186a290300370300200241186a41106a220d200241386a41106a290300370300200241186a41086a220a200241386a41086a2903003703002002200229033837031802402007200228020c470d00200241086a2007410110a20120022802082106200228021021070b2006200741246c6a2204200b360200200420022903183702042004410c6a200a290300370200200441146a200d2903003702002004411c6a20092903003702002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c020b200441ff0171450d00200241003a00580b20004100360200200228020c2204450d00200441246c450d00200610230b200241e0006a24000f0b1032000b1033000b9c0603027f017e077f230041d0006b220324004189e3c400ad4280808080800184100c22042900002105200341086a200441086a29000037030020032005370300200410234198e3c400ad4280808080e00284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023024002400240024002400240411010212204450d0020042001290000370000200441086a200141086a29000037000020032004ad4280808080800284100d220129000037033020011023200341c4006a200441106a360200200341003a0048200320043602402003200341306a41086a36023c2003200341306a360238200341206a200341386a106520041023200341386a20022802002002280208109e042003280228220641206a2207200328024022086a2201417f4c0d01200328023821092003280220210a024002402001450d00200110212204450d022001410f4d0d012001210b0c050b200141017422044110200441104b1b220b102122040d040c060b200141017422024110200241104b1b220b41004e0d020c040b1033000b1032000b2001200b460d0020042001200b10252204450d020b20042003290300370000200441086a200341086a29030037000002400240200b4170714110460d00200b21020c010b200b41017422024120200241204b1b22024100480d01200b2002460d002004200b200210252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200241606a2006490d002002210b0c010b200641206a220b2006490d012002410174220c200b200c200b4b1b220b4100480d012002200b460d0020042002200b10252204450d020b200441206a200a200610a1051a02400240200b20076b2008490d00200b21020c010b200720086a2007490d01200b41017422022001200220014b1b22024100480d01200b2002460d002004200b200210252204450d020b200420076a2009200810a1051a2000200136020820002002360204200020043602000240200328023c450d00200910230b02402003280224450d00200a10230b200341d0006a24000f0b102c000b102a000bc30802077f037e230041106b220224000240024002400240024002402001280208220341146a2204417f4c0d0002402004450d00200410212205450d022002410036020820022005360200200220043602042004410f4b0d04200441017422064110200641104b1b22064100480d0520042006460d0320052004200610252205450d060c030b200241003602082002410136020020022004360204200441017422044110200441104b1b2206102122050d020c050b1032000b1033000b20022006360204200220053602000b2005200129000c370000200541086a200141146a29000037000020024110360208200128020021072003200210610240024020022802042208200228020822066b2003490d0020022802002104200821050c010b200620036a22042006490d01200841017422052004200520044b1b22054100480d010240024020080d00024020050d00410121040c020b200510212204450d040c010b2002280200210420082005460d0020042008200510252204450d030b20022005360204200220043602000b200420066a2007200310a1051a2002200620036a2206360208200128021c210302400240200520066b4120490d00200641206a21080c010b200641206a22082006490d01200541017422012008200120084b1b22014100480d010240024020050d00024020010d00410121040c020b200110212204450d040c010b20052001460d0020042005200110252204450d030b20022001360204200220043602000b200420066a22012003290000370000200141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a290000370000200220083602082002200341206a36020c2002410c6a200210db012002200341306a36020c2002410c6a200210db01200341c0006a2802002101200341c8006a28020022032002106102402003450d00200341306c210603400240024020022802042205200228020822036b4120490d00200228020021040c010b200341206a22042003490d03200541017422082004200820044b1b22084100480d030240024020050d00024020080d00410121040c020b200810212204450d060c010b2002280200210420052008460d0020042005200810252204450d050b20022008360204200220043602000b200420036a2204200141106a290000370000200441186a200141286a290000370000200441106a200141206a290000370000200441086a200141186a2900003700002002200341206a3602082002200136020c2002410c6a200210db01200141306a2101200641506a22060d000b0b20022802042103200235020842208620022802002204ad84101822012900002109200141086a290000210a200141106a290000210b200041186a200141186a290000370000200041106a200b370000200041086a200a370000200020093700002001102302402003450d00200410230b200241106a24000f0b102c000b102a000bae0503027f017e047f230041d0006b220224004189e3c400ad4280808080800184100c22032900002104200241086a200341086a29000037030020022004370300200310234191e3c400ad4280808080f00084100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bbc0601087f230041106b2202240020024100360208200242013703000240412010212203450d00200241203602042002200336020020032000290000370000200341086a200041086a290000370000200341106a200041106a290000370000200341186a200041186a290000370000200241203602082002200041206a36020c2002410c6a200210db012002200041306a36020c2002410c6a200210db01200041c0006a2802002103200041c8006a280200220420021061024002402004450d00200441306c210503400240024020022802042206200228020822046b4120490d00200441206a2107200228020021080c010b200441206a22072004490d03200641017422082007200820074b1b22094100480d030240024020060d00024020090d00410121080c020b2009102122080d010c060b2002280200210820062009460d0020082006200910252208450d050b20022009360204200220083602000b200820046a2204200341106a290000370000200441186a200341286a290000370000200441106a200341206a290000370000200441086a200341186a290000370000200220073602082002200336020c2002410c6a200210db01200341306a2103200541506a22050d000b0b20002802502103200041d8006a2802002204200210610240024020040d002002280208210420022802042109200228020021050c010b200441057421004100200228020822046b210620022802042108034002400240200820066a4120490d0020022802002105200821090c010b200441206a22072004490d03200841017422052007200520074b1b22094100480d030240024020080d00024020090d00410121050c020b200910212205450d060c010b2002280200210520082009460d0020052008200910252205450d050b2002200936020420022005360200200921080b200520046a22072003290000370000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a2900003700002002200441206a2204360208200641606a2106200341206a2103200041606a22000d000b0b20012902002004ad4220862005ad84100e02402009450d00200510230b200241106a24000f0b102c000b102a000bc017021b7f057e23004180046b22032400024002400240024020012002460d00200341d4036a21040340200341f0036a200110bb0320034190036a20032802f003220520032802f80310b304200341d0026a41086a220620034190036a41086a290300370300200341d0026a41106a220720034190036a41106a290300370300200341d0026a41186a220820034190036a41186a290300370300200341d0026a41206a220920034190036a41206a290300370300200341d0026a41286a220a20034190036a41286a290300370300200341d0026a41306a220b20034190036a41306a290300370300200341d0026a41386a220c20034190036a41386a290300370300200341b0026a41086a220d200441086a290200370300200341b0026a41106a220e200441106a290200370300200341b0026a41186a220f200441186a28020036020020032003290390033703d002200320042902003703b002024020032802d0032210450d00200341f0016a41386a200c290300370300200341f0016a41306a200b290300370300200341f0016a41286a200a290300370300200341f0016a41206a2009290300370300200341f0016a41186a2008290300370300200341f0016a41106a2007290300370300200341f0016a41086a2006290300370300200341d0016a41086a200d290300370300200341d0016a41106a200e290300370300200341d0016a41186a200f280200360200200320032903d0023703f001200320032903b0023703d0010b024020032802f403450d00200510230b20100d022002200141206a2201470d000b0b20004100360208200042083702000c010b200341306a41386a2204200341f0016a41386a290300370300200341306a41306a2205200341f0016a41306a290300370300200341306a41286a2206200341f0016a41286a290300370300200341306a41206a2207200341f0016a41206a290300370300200341306a41186a2208200341f0016a41186a290300370300200341306a41106a2209200341f0016a41106a290300370300200341306a41086a220a200341f0016a41086a290300370300200341106a41086a220b200341d0016a41086a290300370300200341106a41106a220c200341d0016a41106a290300370300200341106a41186a220d200341d0016a41186a280200360200200320032903f001370330200320032903d00137031020034190016a41086a220e200a29030037030020034190016a41106a220a200929030037030020034190016a41186a2209200829030037030020034190016a41206a2208200729030037030020034190016a41286a2207200629030037030020034190016a41306a2206200529030037030020034190016a41386a22052004290300370300200341f0006a41086a2204200b290300370300200341f0006a41106a220b200c290300370300200341f0006a41186a220c200d28020036020020032003290330370390012003200329031037037020034190036a41086a220d200e29030037030020034190036a41106a220e200a29030037030020034190036a41186a220a200929030037030020034190036a41206a2209200829030037030020034190036a41286a2208200729030037030020034190036a41306a2207200629030037030020034190036a41386a22062005290300370300200320032903900137039003200341d0026a41086a22052004290300370300200341d0026a41106a2204200b290300370300200341d0026a41186a220b200c280200360200200320032903703703d00241e00010212211450d01201120032903900337030020112010360240201120032903d002370244201141386a2006290300370300201141306a2007290300370300201141286a2008290300370300201141206a2009290300370300201141186a200a290300370300201141106a200e290300370300201141086a200d290300370300201141cc006a2005290300370200201141d4006a2004290300370200201141dc006a200b2802003602002003428180808010370204200320113602000240200241606a2001460d00200141206a2109200241606a211220034190036a41c4006a2104410121130340200921010340200341f0036a200110bb0320034190036a20032802f003220820032802f80310b304200341d0026a41086a220520034190036a41086a2214290300370300200341d0026a41106a220620034190036a41106a2215290300370300200341d0026a41186a220720034190036a41186a2216290300370300200341d0026a41206a220920034190036a41206a2217290300370300200341d0026a41286a220a20034190036a41286a2218290300370300200341d0026a41306a220b20034190036a41306a2219290300370300200341d0026a41386a220c20034190036a41386a221a290300370300200341b0026a41086a220d200441086a290200370300200341b0026a41106a220e200441106a290200370300200341b0026a41186a220f200441186a28020036020020032003290390033703d002200320042902003703b002024020032802d0032210450d00200341f0016a41386a200c290300370300200341f0016a41306a200b290300370300200341f0016a41286a200a290300370300200341f0016a41206a2009290300370300200341f0016a41186a2007290300370300200341f0016a41106a2006290300370300200341f0016a41086a2005290300370300200341d0016a41086a200d290300370300200341d0016a41106a200e290300370300200341d0016a41186a200f280200360200200320032903d0023703f001200320032903b0023703d0010b024020032802f403450d00200810230b024020100d002002200141206a2201470d010c030b0b200341306a41386a2208200341f0016a41386a290300370300200341306a41306a2209200341f0016a41306a290300370300200341306a41286a220a200341f0016a41286a290300370300200341306a41206a220b200341f0016a41206a290300370300200341306a41186a220c200341f0016a41186a290300370300200341306a41106a220d200341f0016a41106a290300370300200341306a41086a220e200341f0016a41086a290300370300200341106a41086a220f200341d0016a41086a290300370300200341106a41106a221b200341d0016a41106a290300370300200341106a41186a221c200341d0016a41186a280200360200200320032903f001370330200320032903d00137031020034190016a41086a221d200e29030037030020034190016a41106a220e200d29030037030020034190016a41186a220d200c29030037030020034190016a41206a220c200b29030037030020034190016a41286a220b200a29030037030020034190016a41306a220a200929030037030020034190016a41386a22092008290300370300200341f0006a41086a2208200f290300370300200341f0006a41106a220f201b290300370300200341f0006a41186a221b201c2802003602002003200329033037039001200320032903103703702014201d2903003703002015200e2903003703002016200d2903003703002017200c2903003703002018200b2903003703002019200a290300370300201a2009290300370300200320032903900137039003200520082903003703002006200f2903003703002007201b280200360200200320032903703703d002024020132003280204470d00200320134101109601200328020021110b200141206a21092011201341e0006c6a2208200329039003370300200841106a2015290300370300200841086a20142903003703002019290300211e201a290300211f201829030021202017290300212120162903002122200841c0006a2010360200200841186a2022370300200841206a2021370300200841286a2020370300200841c4006a20032903d002370200200841386a201f370300200841306a201e370300200841cc006a2005290300370200200841d4006a2006290300370200200841dc006a20072802003602002003201341016a221336020820122001470d000b0b20002003290300370200200041086a200341086a2802003602000b20034180046a24000f0b1033000bef04010a7f230041106b220324000240024002400240200241246c41046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b20034100360208200320043602042003200536020020022003106102402002450d002001200241246c6a2106200328020421052003280208210203402001280200210402400240200520026b4104490d0020032802002107200521080c010b200241046a22082002490d05200541017422072008200720084b1b22084100480d050240024020050d00024020080d00410121070c020b2008102122070d010c080b2003280200210720052008460d0020072005200810252207450d070b20032008360204200320073602000b200720026a20043600002003200241046a2209360208412010212204450d03200441186a220a2001411c6a290000370000200441106a220b200141146a290000370000200441086a220c2001410c6a2900003700002004200141046a29000037000002400240200820096b4120490d00200241246a2102200821050c010b200941206a22022009490d05200841017422052002200520024b1b22054100480d050240024020080d00024020050d00410121070c020b200510212207450d080c010b20082005460d0020072008200510252207450d070b20032005360204200320073602000b200720096a22082004290000370000200841186a200a290000370000200841106a200b290000370000200841086a200c2900003700002003200236020820041023200141246a22012006470d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b1032000b1033000b102c000b102a000be503010a7f230041106b22032400024020014105744104722204417f4c0d000240200410212205450d002003410036020820032004360204200320053602002001200310610240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210620032802082105034020052104412010212201450d0220012000290000370000200141186a2209200041186a290000370000200141106a220a200041106a290000370000200141086a220b200041086a29000037000002400240200620046b4120490d00200441206a21050c010b024002400240200441206a22052004490d002006410174220c2005200c20054b1b220c4100480d000240024020060d000240200c0d00410121070c020b200c102121070c040b2006200c470d020b200c21060c030b102c000b20072006200c102521070b200c210620070d00102a000b200041206a2100200720046a22042001290000370000200441186a2009290000370000200441106a200a290000370000200441086a200b29000037000020011023200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100e02402006450d00200710230b200341106a24000f0b1033000b1032000bf70b04047f017e077f077e23004180016b220524004101210602400240024020002001200220032004108702450d00200541e0006a41186a4200370300200541e0006a41106a22074200370300200541e0006a41086a22064200370300200542003703604189e3c400ad4280808080800184100c220829000021092006200841086a29000037030020052009370360200810234193e4c400ad4280808080800284100c22082900002109200541c0006a41086a220a200841086a2900003703002005200937034020081023200720052903402209370300200541206a41086a2006290300370300200541206a41106a2009370300200541206a41186a200a29030037030020052005290360370320200541e0006a200541206a10ef03024002402005280260220b0d004100210c20054100360208200542043703004104210b4100210d0c010b2005200529026422093702042005200b3602002009422088a7210d2009a7210c0b2001ad42e0007e2209422088a70d012009a72206417f4c0d010240024020060d00410821080c010b200610212208450d030b20054100360218200520083602102005200641e0006e360214200541106a410020011096012005280218210e02402001450d002000200141e0006c6a210f2005280210200e41e0006c6a2106200141057441606a4105762110200541246a21010340200541e0006a41086a2208200041086a290300370300200541e0006a41106a2207200041106a290300370300200541e0006a41186a220a200041186a29030037030020052000290300370360200041206a2903002109200041286a2903002111200041306a2903002112200041386a2903002113200541d0006a200041c0006a10b503200541c0006a200041d0006a108e02200141086a200541c0006a41086a28020036020020012005290340370200200a2903002114200729030021152008290300211620052903602117200641386a2013370300200641306a2012370300200641286a2011370300200641206a2009370300200641086a201637030020062017370300200641106a2015370300200641c0006a2005290350370300200641c8006a200541d0006a41086a280200360200200641186a2014370300200641cc006a2005290220370200200641d4006a200541206a41086a290200370200200641e0006a2106200041e0006a2200200f470d000b200e20106a41016a210e0b200541e8006a200e36020020052005290310370360200341ffffffff03712003470d0120034102742206417f4c0d010240024020060d00410421000c010b200610212200450d030b200541003602282005200036022020052006410276360224200541206a4100200310792005280220200528022822064102746a2002200341027410a1051a200541c0006a41086a2201200620036a2206360200200541f4006a20063602002005200529032037026c0240200d200c470d002005200d410110a3012005280204210c2005280200210b2005280208210d0b200b200d411c6c6a22062005290360370200200541e0006a41086a22002903002109200541e0006a41106a2208290300211120062004360218200641106a2011370200200641086a20093702002005200d41016a2207360208200541e0006a41186a42003703002008420037030020004200370300200542003703604189e3c400ad4280808080800184100c220629000021092000200641086a29000037030020052009370360200610234193e4c400ad4280808080800284100c220629000021092001200641086a2900003703002005200937034020061023200820052903402209370300200541206a41086a2000290300370300200541206a41106a2009370300200541206a41186a20012903003703002005200529036037032002400240200b0d00200541206aad428080808080048410110c010b200541e0006a200b200710f103200541206aad4280808080800484200535026842208620052802602206ad84100e02402005280264450d00200610230b200b200710f003200c450d00200c411c6c450d00200b10230b410021060b20054180016a240020060f0b1032000b1033000bf90403027f017e057f230041d0006b2202240041b0dfc300ad4280808080a00184100c22032900002104200241086a200341086a290000370300200220043703002003102341b4a2c300ad4280808080e00284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000ba20b07057f017e047f027e047f017e077f230041e0006b22012400200141c0006a41186a22024200370300200141c0006a41106a22034200370300200141c0006a41086a22044200370300200142003703404196adc300ad4280808080900184100c220529000021062004200541086a290000370300200120063703402005102341bce0c300ad4280808080e00084100c22072900002106200141086a2205200741086a2900003703002001200637030020071023200320012903002206370300200141206a41086a22082004290300370300200141206a41106a22092006370300200141206a41186a220a200529030037030020012001290340370320200141c0006a200141206a10910320012802402107200129024421062002420037030020034200370300200442003703002001420037034041b0dfc300ad4280808080a00184100c2202290000210b2004200241086a2900003703002001200b3703402002102341bcbac500ad4280808080b00184100c2202290000210b2005200241086a2900003703002001200b3703002002102320032001290300220b370300200820042903003703002009200b370300200a2005290300370300200120012903403703202006420020071b220c422088a7210d200141c0006a200141206a10ad0220012902444200200128024022041b2206422088210b0240200642ffffff3f83500d002004410120041b10230b200ba721044100210e0240200d450d002004417f6a200d6e210e0b2007410420071b210f2001410036024820014204370340200141c0006a4100200410a5012001280248210802400240024002400240024020040d00200128024021090c010b2001280240220920084103746a21030240200e450d00200e200d6c210a410021050340410021070240200a20054d0d002005200e6e2207200d4f0d04200f2007412c6c6a2802002102410121070b20032007360200200341046a2002360200200341086a21032004200541016a2205470d000b200820056a21080c010b20042105034020034100360200200341086a21032005417f6a22050d000b200820046a21080b20012802442110200141c0006a419485c300411410a8034100210341204100412020044102746b2205200541204b1b22056bad422086200141c0006a20056aad84101822052900002106200541086a290000210b200541106a2900002111200141186a2212200541186a290000370300200141106a22132011370300200141086a2214200b3703002001200637030020051023200141206a41186a22152012290300370300200141206a41106a22162013290300370300200141206a41086a2217201429030037030020012001290300370320024041002004417f6a2205200520044b1b2202450d002001ad4280808080800484210b03402003411c71220541046a220741214f0d03200120056a2800002004410120041b220a70210702402005411c470d00200141c0006a41186a220d200b1018220541186a290000370300200141c0006a41106a220e200541106a290000370300200141c0006a41086a2218200541086a29000037030020012005290000370340200510232012200d2903003703002013200e29030037030020142018290300370300200120012903403703000b200a417f6a220520084f0d04200720084f0d05200920054103746a220529020021062005200920074103746a220729020037020020072006370200200341046a21032004417f6a21042002417f6a22020d000b0b2000200836020820002010360204200020093602002000200129032037000c200041146a20172903003700002000411c6a2016290300370000200041246a20152903003700000240200ca72204450d002004412c6c450d00200f10230b200141e0006a24000f0b2007200d41e8f6c3001030000b2007412041a885c3001043000b200520084184d9c4001030000b2007200841f8c5c4001030000b940503027f017e057f230041d0006b2202240041b0dfc300ad4280808080a00184100c22032900002104200241086a200341086a290000370300200220043703002003102341d0a1c300ad4280808080d00084100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422074110200741104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a2903003700000240200841606a20054f0d00200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a02402002280224450d00200610230b200241386a2003200110b70302400240200228023822010d00200041003602000c010b2000200229023c370204200020013602000b20031023200241d0006a24000f0b102c000b102a000bfd0201097f230041106b22022400024002402001280208220341ffffffff00712003470d0020034104742204417f4c0d00200128020021014104210502402004450d00200410212205450d020b20024100360208200220053602002002200441047636020420024100200310a0012002280208210602402003450d0020034104742107200228020020064104746a21032002410f6a21080340410221050240024002402001410c6a2d00004103710e03000102000b410021050c010b410121050b200141086a2802002204417f4c0d02200128020021090240024020040d004101210a0c010b20041021220a450d040b200141106a2101200a2009200410a10521092003410c6a20053a0000200341086a2004360200200341046a2004360200200320093602002003410d6a20022f000d3b00002003410f6a20082d00003a0000200341106a2103200641016a2106200741706a22070d000b0b20002002290300370200200041086a2006360200200241106a24000f0b1032000b1033000ba80e06077f027e037f0a7e017f037e230041d0026b2203240020022802102104200228020c21052002280208210620022802042107200228020021022003200110970220034180016a2003280200220820032802082209109802200329038001210a4200210b2003420037038001200341c8016a280200210c20032d00cc01210d02400240200a420151220e0d00200341106a41306a4200370300200341106a41286a4200370300200341106a41206a4200370300200341106a41186a4200370300200341206a4200370300200341186a4200370300200342003703104200210f4200211042002111420021120c010b200341b8016a290300211320034180016a41306a290300211420034180016a41206a290300210f20034180016a41186a290300210b200341c0016a290300211220032903900121112003290388012110200341106a41206a20034180016a41286a290300370300200341106a41286a2014370300200341106a41306a2013370300200341206a200b3703002003200f37032820032010370310200320113703180b02400240024002402010200229030022157d22142010562011200241086a29030022167d2010201554ad7d221320115620132011511b450d0041e1acc500ad4280808080b00284211141838a0c21040c010b02402010200b7c22174280c8afa0255441002011200f7c22182017200b54ad7c501b0d002014200b7c220b42ffc7afa025562013200f7c200b201454ad7c220b420052200b501b0d0020072d00004101460d0041c6acc500ad4280808080900184211141838a1421040c010b2015201684500d0120052d00002105200341c8006a2006280200109702200341e8016a20032802482206200328025010980220032903e801420151210720034198026a290300211520034190026a2903002116200341a8026a290300210b200341a0026a290300210f0240200328024c450d00200610230b200b420020071b210b200f420020071b210f0240200541ff01714101460d002015420020071b21152016420020071b2116024020054101710d002016210f2015210b0c010b2015200b2016200f562015200b562015200b511b22071b210b2016200f20071b210f0b200f201458200b201358200b2013511b0d0141fcacc500ad4280808080d00284211141838a0421040b20114280807c832115201142088842ff018321102011a7210e410121020c010b2003201437031020032013370318200241086a290300210f2002290300210b20042802002104200341c8006a41186a200341206a220241086a2903002215370300200341c8006a41206a2205200241106a290300370300200341f0006a2206200241186a290300370300200341f8006a2219200241206a2903003703002003201337035020032014370348200320022903002216370358427f20172017201054220220182002ad7c221020115420102011511b22021b427f201020021b8450210202400240427f201420167c221120112014542207201320157c2007ad7c221120135420112013511b22071b22104280c8afa025544100427f201120071b2211501b0d00200341c8006a41106a2903002110201929030021152006290300211720052903002116200329035021182003290348211a4201211b2003290360211c0c010b4200211b02402010201184500d002010201110eb01200341a0026a201137030020034198026a2010370300200341e8016a41086a41013a0000200341f1016a2004290000370000200341f9016a200441086a29000037000020034181026a200441106a29000037000020034189026a200441186a290000370000200341023a00e801200341e8016a10e0010b0b2002ad2111200341a8016a2016370300200341b0016a201737030020034190016a2018370300200341b8016a201537030020034198016a20103703002003201c3703a001200320123703c0012003201a3703880142012110410021022003200d4100200a42015122041b3a00cc012003200c410020041b3602c8012003201b4201512204ad37038001024020040d002009ad4220862008ad84101142002110420021150c010b200320093602ec01200320083602e80120034188016a200341e8016a109803420021150b02402003280204450d00200810230b024002402002450d0020002004360204200041086a2010420886200ead42ff018384201584370200410121020c010b024002400240200e41ff017122020d0020104200510d004103210e200341e8016a21020c010b2002450d0120104200520d014104210e20034180016a21020b200241046a200e3a0000200241003a0000200241056a20012900003700002002410d6a200141086a290000370000200241156a200141106a2900003700002002411d6a200141186a290000370000200210e0010b200041286a200f370300200041206a200b370300200041186a2013370300200041106a2014370300200041086a2011370300410021020b20002002360200200341d0026a24000bd20201077f230041206b22022400200241086a200110880102400240024002402002280208450d00200041003602000c010b200228020c220320012802044102762204200420034b1b22054102742204417f4c0d010240024020050d00410421060c010b200410212206450d030b41002104200241003602182002200536021420022006360210024002402003450d000340200128020422054104490d0220012802002207280000210820012005417c6a3602042001200741046a360200024020042002280214470d00200241106a20044101107920022802102106200228021821040b200620044102746a20083602002002200441016a22043602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b20004100360200200228021441ffffffff0371450d00200610230b200241206a24000f0b1032000b1033000bef0602077f047e230041f0006b22032400024002400240200128020422044108490d000340200128020021052003410136026c20032004410376220636020802400240200641014b0d004100210741012108024020060e020002000b200341346a4101360200200341dc006a41023602002003420237024c2003419c96c7003602482003410136022c2003200341286a3602582003200341086a3602302003200341ec006a360228200341c8006a419ca8c700103a000b200441016a410771200441786a4178717221072005410120041b2205200441077122044107466a2108200441087221040b2005410120041b2d000021062001200736020420012008360200200128020821050240024020064101200441077174710d00410021040c010b0240200128020c220628020820054d0d0020012802102104200341c8006a41186a2207200628020020054105746a220641186a290000370300200341c8006a41106a2208200641106a290000370300200341c8006a41086a2209200641086a29000037030020032006290000370348024020042802082206200441046a280200470d00200420064101109a01200428020821060b200428020020064105746a22062003290348370000200641186a2007290300370000200641106a2008290300370000200641086a20092903003700002004200428020841016a3602080b4100210402402002280200220628020820054d0d00200341c8006a41086a200628020020054105746a220441086a290000370300200341c8006a41106a200441106a290000370300200341c8006a41186a200441186a29000037030020032004290000370348410121040b200128020821050b2001200541016a360208200341286a41086a200341c8006a41086a290300370300200341286a41106a200341c8006a41106a290300370300200341286a41186a200341c8006a41186a2903003703002003200329034837032820040d022001280204220441084f0d000b0b200041003a00000c010b200341086a41186a200341286a41186a290300220a370300200341086a41106a200341286a41106a290300220b370300200341086a41086a200341286a41086a290300220c37030020032003290328220d370308200041196a200a370000200041116a200b370000200041096a200c3700002000200d370001200041013a00000b200341f0006a24000b820101017f200120021061024002402001450d00200141057421030340412010212201450d0220012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200220014120106220011023200041206a2100200341606a22030d000b0b0f0b1033000bbf0201027f230041e0006b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b0102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10c6030240024020022802480d0020024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c20024180c5c6003602482002200241386a360258200241c4006a4184a5c200200241c8006a10311a2002350230422086200235022884100a0240200228022c450d00200228022810230b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d00200110230b200241e0006a24000bf90403027f017e057f230041d0006b2202240041b0dfc300ad4280808080a00184100c22032900002104200241086a200341086a290000370300200220043703002003102341d0a1c300ad4280808080d00084100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bf70503087f017e017f230041306b22022400200241086a200110880102400240024002402002280208450d00200041003602000c010b41042103200228020c220420012802044104762205200520044b1b22064104742205417f4c0d0202402006450d00200510212203450d020b41002105200241003602182002200636021420022003360210024002402004450d00034002400240200128020422060d00410321070c010b200128020022072d0000210820012006417f6a3602042001200741016a3602000240200841024d0d00410321070c010b2002200110880102402002280200450d00410321070c010b02402001280204200228020422064f0d00410321070c010b2006417f4c0d06024002400240024020060d00410121090c010b200610272209450d0820012802042006490d0220092001280200200610a1051a200128020422072006490d012001200720066b3602042001200128020020066a3602000b410321072009450d022006ad220a422086200a84210a2002412a6a41026a2002412d6a41026a2d00003a0000200220022f002d3b012a2009210b200821070c020b20062007418ca9c0001044000b20091023410321070b200241266a41026a22062002412a6a41026a2d00003a0000200220022f012a3b012620074103460d02200241226a41026a220820062d00003a0000200220022f01263b0122024020052002280214470d00200241106a2005410110a00120022802102103200228021821050b200320054104746a220620073a000c2006200a3702042006200b360200200620022f01223b000d2006410f6a20082d00003a00002002200541016a22053602182004417f6a22040d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b2000410036020002402005450d00200541047421062003210503400240200541046a280200450d00200528020010230b200541106a2105200641706a22060d000b0b200228021441ffffffff0071450d00200310230b200241306a24000f0b1033000b1032000b130020004111360204200041b885c3003602000baf0203027f017e057f230041106b220224000240024020012802082203ad420c7e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410421060c010b200510212206450d020b200241003602082002200636020020022005410c6e3602042002410020031095012002280208210602402003450d0020012003410c6c6a210720022802002006410c6c6a21050340200141086a2802002203417f4c0d02200128020021080240024020030d00410121090c010b200310212209450d040b20092008200310a1052108200541086a2003360200200541046a2003360200200520083602002005410c6a2105200641016a21062001410c6a22012007470d000b0b20002002290300370200200041086a2006360200200241106a24000f0b1032000b1033000b8a0301037f230041d0006b22032400024002400240024020002d00000e03010200010b200341c8006a200041196a290000370300200341c0006a200041116a290000370300200341386a200041096a2900003703002003200029000137033041022104200341306a21050c020b200341c8006a200041196a290000370300200341c0006a200041116a290000370300200341386a200041096a2900003703002003200029000137033041002104200341306a21050c010b200341c8006a200041196a290000370300200341c0006a200041116a290000370300200341386a200041096a2900003703002003200029000137033041012104200341306a21050b200341216a200541186a290000370000200341196a200541106a290000370000200341116a200541086a290000370000200320043a000820032005290000370009200341306a200341086a20011076200041216a200335023842208620032802302205ad8420021013210002402003280234450d00200510230b200341d0006a24004106410220004101461b0bd70408027f017e037f017e017f027e037f017e230041f0006b2203240020012002844200522204ad2105024020040d00200341c0006a41186a22064200370300200341c0006a41106a22074200370300200341c0006a41086a220842003703002003420037034041bdadc500ad42808080808001842209100c220a290000210b200341e0006a41086a2204200a41086a2900003703002003200b370360200a1023200820042903003703002003200329036037034041c5adc500ad4280808080d00184220b100c220a290000210c2004200a41086a2900003703002003200c370360200a102320072003290360220c370300200341206a41086a220d2008290300370300200341206a41106a220e200c370300200341206a41186a220f200429030037030020032003290340370320200341086a200341206a412010d701200341086a41106a290300210c200329031021102003280208210a200642003703002007420037030020084200370300200342003703402009100c220629000021092004200641086a29000037030020032009370360200610232008200429030037030020032003290360370340200b100c220629000021092004200641086a2900003703002003200937036020061023200720032903602209370300200d2008290300370300200e2009370300200f2004290300370300200320032903403703202003200c4200200a1b370348200320104200200a1b370340200341206aad4280808080800484200341c0006aad4280808080800284100e0b2000200137030820002005370300200041106a2002370300200341f0006a24000b130020004103360204200041ac90c3003602000b34002000418c97c30036020420004100360200200041146a4101360200200041106a419097c300360200200041086a42043702000bf90403027f017e057f230041d0006b2202240041b0dfc300ad4280808080a00184100c22032900002104200241086a200341086a290000370300200220043703002003102341c4a1c300ad4280808080c00084100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b8b1304057f017e047f047e23004190086b22022400200241206a2001108801024002400240024002400240024020022802200d0020012802042203450d01200128020022042d0000210520012003417f6a3602042001200441016a360200200541ff00714104470d024100210620054118744118754100480d03420221070c040b200042033703680c050b200042033703680c040b200042033703680c030b200241003a00d0042003417f6a2108200321050240024002400240024002400240024002400240034020082006460d01200241b0046a20066a200420066a220941016a2d00003a000020012005417e6a3602042001200941026a3602002002200641016a22093a00d0042005417f6a21052009210620094120470d000b200241e8066a41186a200241b0046a41186a290300370300200241e8066a41106a200241b0046a41106a290300370300200241e8066a41086a200241b0046a41086a290300370300200220022903b0043703e8062003417f6a2009460d08200420096a220441016a2d0000210620012005417e6a3602042001200441026a360200200641024b0d0820060e03010203010b200641ff0171450d07200241003a00d0040c070b41002106200241003a00f0042003417e6a210a200920036b41026a210b200320096b417d6a210902400340200b20066a450d01200241b0046a20066a200420066a220841026a2d00003a0000200120093602042001200841036a3602002002200641016a22083a00f0042009417f6a2109200a417f6a210a20082106200841c000470d000b200241d0076a41386a200241b0046a41386a2903002207370300200241d0076a41306a200241b0046a41306a290300220c370300200241d0076a41286a200241b0046a41286a290300220d370300200241d0076a41206a200241b0046a41206a290300220e370300200241d0076a41186a200241b0046a41186a290300220f37030020024180026a41086a200241b0046a41086a29030037030020024180026a41106a200241b0046a41106a29030037030020024180026a41186a200f37030020024180026a41206a200e37030020024180026a41286a200d37030020024180026a41306a200c37030020024180026a41386a2007370300200220022903b00437038002200520086b417e6a2105200420086a41026a2109410021060c030b200641ff0171450d06200241003a00f004420221070c070b41002106200241003a00f0042003417e6a210a200920036b41026a210b200320096b417d6a210902400340200b20066a450d01200241b0046a20066a200420066a220841026a2d00003a0000200120093602042001200841036a3602002002200641016a22083a00f0042009417f6a2109200a417f6a210a20082106200841c000470d000b200241d0076a41386a200241b0046a41386a2903002207370300200241d0076a41306a200241b0046a41306a290300220c370300200241d0076a41286a200241b0046a41286a290300220d370300200241d0076a41206a200241b0046a41206a290300220e370300200241d0076a41186a200241b0046a41186a290300220f37030020024180026a41086a200241b0046a41086a29030037030020024180026a41106a200241b0046a41106a29030037030020024180026a41186a200f37030020024180026a41206a200e37030020024180026a41286a200d37030020024180026a41306a200c37030020024180026a41386a2007370300200220022903b00437038002200520086b417e6a2105200420086a41026a2109410121060c020b200641ff0171450d05200241003a00f004420221070c060b41002106200241003a00f1042003417e6a210a200920036b41026a210b200320096b417d6a21090340200b20066a450d02200241b0046a20066a200420066a220841026a2d00003a0000200120093602042001200841036a3602002002200641016a22083a00f1042009417f6a2109200a417f6a210a20082106200841c100470d000b20024180026a200241b0046a41c10010a1051a200520086b417e6a210541022106200420086a41026a21090b2002418f076a20024180026a41c10010a1051a2005450d032009310000210d20012005417f6a22043602042001200941016a360200200d50450d01420021070c020b200641ff0171450d02200241003a00f104420221070c030b2004450d012009310001210e20012005417e6a3602042001200941026a3602004202200d420f8386220c4204540d0142012107200e420886200d84420488200c420c88220d4201200d4201561b7e220d200c5a0d010b200241186a200110880120022802180d00200228021c2105200220011080022002290300a70d00200241106a290300210f2002290308210e200241d0076a41186a200241e8066a41186a290300370300200241d0076a41106a200241e8066a41106a290300370300200241d0076a41086a200241e8066a41086a290300370300200220022903e8063703d007200241b0046a2002418f076a41c10010a1051a200241f8016a41046a200241e2066a41046a2f01003b0100200220022801e2063602f8010c010b420221070b200241d8016a41186a2209200241d0076a41186a290300370300200241d8016a41106a2204200241d0076a41106a290300370300200241d8016a41086a2208200241d0076a41086a290300370300200220022903d0073703d80120024197016a200241b0046a41c10010a1051a20024190016a41046a2203200241f8016a41046a2f01003b0100200220022802f8013602900120074202510d01200241f0006a41186a2009290300370300200241f0006a41106a2004290300370300200241f0006a41086a2008290300370300200220022903d8013703702002412f6a20024197016a41c10010a1051a200241286a41046a20032f01003b010020022002280290013602280b200241b0046a200110990320022802b004210120024180026a200241b0046a41047241ac0210a1051a024020014116460d0020002002290370370300200020063a0020200041186a200241f0006a41186a290300370300200041106a200241f0006a41106a290300370300200041086a200241f0006a41086a290300370300200041216a2002412f6a41c10010a1051a200041e6006a200241286a41046a2f01003b01002000200228022836016220004188016a200f37030020004180016a200e37030020004198016a200136020020004190016a2005360200200041f8006a200d3703002000200c370370200020073703682000419c016a20024180026a41ac0210a1051a0c020b200042033703680c010b200042033703680b20024190086a24000bf90403027f017e057f230041d0006b2202240041e4dec400ad4280808080e00084100c22032900002104200241086a200341086a290000370300200220043703002003102341eadec400ad4280808080900184100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bc90402017f037e23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a2002ad4220862001ad84200441206a101c41014621000c020b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a2002ad4220862001ad84200441206a101341014621000c010b2002ad4220862001ad84101822012900002105200141086a2900002106200141106a2900002107200441186a200141186a290000370300200441106a2007370300200441086a2006370300200420053703002001102341012101200441206a200041016a2004108d014100210020042d00200d00200441c8006a41206a200441c1006a2d00003a0000200441c8006a41186a200441396a290000370300200441c8006a41106a200441316a290000370300200441c8006a41086a200441296a29000037030020042004290021370348200441c8006aad4280808080900484101822002900002105200041086a2900002106200041106a2900002107200441f0006a41186a200041186a290000370300200441f0006a41106a2007370300200441f0006a41086a200637030020042005370370200010230240200441f0006a2003460d00200441f0006a2003412010a3054521010b200121000b20044190016a240020000bba0502087f037e230041106b2202240002400240200141086a28020022034105744116722204417f4c0d000240200410212205450d00200520012802002206290000370000200541086a200641086a290000370000200241103602082002200436020420022005360200200141046a280200210720032002106102400240024020030d0020022802042106200228020821040c010b20034105742108200228020021092002280204210620022802082104034020072105024002402006200422036b4120490d00200341206a21040c010b200341206a22042003490d03200641017422072004200720044b1b22074100480d03024002400240024020060d00024020070d00410121090c020b2007102121090c030b20062007470d010b200721060c020b200920062007102521090b200721062009450d060b200541206a2107200920036a22032005290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a290000370000200841606a22080d000b2002200636020420022004360208200220093602000b20012f010c210802400240200620046b4102490d00200441026a210520022802002103200621070c010b200441026a22052004490d01200641017422032005200320054b1b22074100480d010240024020060d00024020070d00410121030c020b200710212203450d060c010b2002280200210320062007460d0020032006200710252203450d050b20022007360204200220033602000b200320046a20083b00002005ad4220862003ad8410182205290000210a200541086a290000210b200541106a290000210c200041186a200541186a290000370000200041106a200c370000200041086a200b3700002000200a3700002005102302402007450d00200310230b200241106a24000f0b102c000b1033000b1032000b102a000b130020004102360204200041a498c3003602000b3400200041b0dfc30036020420004100360200200041146a4107360200200041106a41c49cc300360200200041086a420a3702000b2c01017f02404108102122020d001033000b20024200370000200042888080808001370204200020023602000b2201017f230041106b220224002002410036020020002002108601200241106a24000bd60201057f230041206b2202240002400240024002400240024020012d0000417f6a220341024b0d0020030e03010203010b41f58ac7004128418c94c700102d000b41b00210212203450d032003200141046a28020010dc03200041013a0000200041046a20033602000c020b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c010b200241186a2204200141196a290000370300200241106a2205200141116a290000370300200241086a2206200141096a2900003703002002200129000137030041b00210212203450d012003200141246a28020010dc03200041246a2003360200200041033a0000200041196a2004290300370000200041116a2005290300370000200041096a2006290300370000200020022903003700010b200241206a24000f0b102a000b881703047f067e027f230041d0036b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e16001101020304051106070809110a0b0c0d0e0f101112000b200241a8016a200141086a10dd0320004100360200200041106a200241a8016a41086a290300370300200041086a20022903a8013703000c120b20004102360200200041086a200141086a2903003703000c110b02400240024002400240024020012d0004417f6a220341034b0d00200141046a210420030e0401020304010b41f58ac7004128418c94c700102d000b200141086a2802002103410121050c030b41022105200241086a41026a200441036a2d00003a0000200241a8016a41086a200141146a290200370300200241b8016a2001411c6a290200370300200241c0016a200141246a2d00003a0000200220042f00013b010820022001410c6a2902003703a801200141086a2802002103200141286a28020021010c020b200141086a2802002103410321050c010b2002410a6a200441036a2d00003a0000200241a8016a41086a200141146a290200370300200241b8016a2001411c6a290200370300200241c0016a200141246a2d00003a0000200220042f00013b010820022001410c6a2902003703a801200141086a2802002103200141286a2802002101410421050b200020053a0004200020022f01083b000520004103360200200041086a20033602002000410c6a20022903a801370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a200241a8016a41086a2903003702002000411c6a200241b8016a290300370200200041246a200241c0016a2802003602000c100b02400240024002400240024002400240200141086a22032d0000417f6a220441034b0d0020040e0401020304010b41f58ac7004128418c94c700102d000b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a801200141386a2903002106200141306a2903002107410121010c030b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a801200141c8006a2903002108200141c0006a2903002109200141386a2903002106200141306a2903002107410221010c030b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a8012002200341216a2800003602082002200341246a28000036000b200141c8006a3100002108200141c0006a2902002109200141386a2902002106200141306a2902002107200141d8006a290300210a200141d0006a290300210b410321010c030b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a801200141386a2903002106200141306a2903002107410421010b0b0b200020022903a8013700092000200228020836002920004104360200200041d8006a200a370300200041d0006a200b370300200041c8006a2008370300200041c0006a2009370300200041386a2006370300200041306a2007370300200041086a20013a00002000412c6a200228000b360000200041116a200241a8016a41086a290300370000200041196a200241b8016a290300370000200041216a200241c0016a2903003700000c0f0b200241a8016a200141046a10de03200041053602002000410c6a200241b0016a280200360200200020022903a8013702040c0e0b200241a8016a200141086a109202200041086a200241a8016a41880210a1051a200041063602000c0d0b02400240200128020422040d00410021030c010b200241a8016a41186a200141286a290000370300200241a8016a41106a200141206a290000370300200241b0016a200141186a290000370300200241a8016a41286a200141386a290000370300200241a8016a41306a200141c0006a290000370300200241a8016a41386a200141c8006a290000370300200241a8016a41c8006a200141d8006a290000370300200241a8016a41d0006a200141e0006a290000370300200241a8016a41d8006a200141e8006a2900003703002002200141106a2900003703a8012002200141306a2900003703c8012002200141d0006a2900003703e801200241a8016a41f8006a20014188016a290000370300200241a8016a41f0006a20014180016a290000370300200241a8016a41e8006a200141f8006a290000370300200241a8016a4198016a200141a8016a290000370300200241a8016a4190016a200141a0016a290000370300200241a8016a4188016a20014198016a2900003703002002200141f0006a29000037038802200220014190016a2900003703a8022001410c6a2802002201417f4c0d0e0240024020010d0020024200370308410121030c010b200110212203450d102002410036020c200220013602080b20032004200110a1051a2002200136020c20022903082106200241086a200241a8016a41a00110a1051a0b20002003360204200041086a2006370200200041106a200241086a41a00110a1051a200041083602000c0c0b20004109360200200020012802043602040c0b0b2001410c6a2802002203417f4c0d0b200128020421050240024020030d0041002101410121040c010b20032101200310212204450d0d0b20042005200310a10521042000410c6a2003360200200041086a2001360200200020043602042000410a3602000c0a0b200241a8016a200141046a10d702200041046a200241a8016a41e40010a1051a2000410b3602000c090b200241a8016a200141046a10df03200041046a200241a8016a419c0210a1051a2000410d3602000c080b2000410e3602000c070b200241a8016a200141046a10e003200041046a200241a8016a41c80010a1051a2000410f3602000c060b200241a8016a200141046a10e103200041103602002000413c6a200241e0016a280200360200200041346a200241d8016a2903003702002000412c6a200241d0016a290300370200200041246a200241c8016a2903003702002000411c6a200241c0016a290300370200200041146a200241a8016a41106a2903003702002000410c6a200241b0016a290300370200200020022903a8013702040c050b200241a8016a200141086a10e203200041086a200241a8016a41a80210a1051a200041113602000c040b200241a8016a200141046a10e303200041046a200241a8016a41c40010a1051a200041123602000c030b4102210c0240024002400240200141086a22032d0000417f6a220d41024b0d0041012104200d0e03030201030b41f58ac7004128418c94c700102d000b200141c8006a2903002107200141c0006a2903002106200141386a2903002109200141306a2903002108200141d0006a28020021054103210c0b200241c0016a200341196a290000370300200241b8016a200341116a290000370300200241b0016a200341096a290000370300200220032900013703a801200c21040b200020022903a8013700092000200228000836002920004113360200200041c8006a2007370300200041c0006a2006370300200041386a2009370300200041306a2008370300200041086a20043a0000200041d0006a2005360200200041116a200241a8016a41086a290300370000200041196a200241b8016a290300370000200041216a200241c0016a2903003700002000412c6a2002410b6a2800003600000c020b10e403000b200241a8016a200141046a10db0320004115360200200041246a200241c8016a2903003702002000411c6a200241c0016a290300370200200041146a200241b8016a2903003702002000410c6a200241b0016a290300370200200020022903a8013702040b200241d0036a24000f0b1032000b1033000bae0803047f017e077f230041206b22022400024002400240024002400240024002400240024002400240024002402001280200417f6a220341094b0d0020030e0a0102030405060708090a010b41f58ac7004128418c94c700102d000b20004101360200200020012802043602040c090b2001410c6a2802002203417f4c0d09200128020421010240024020030d0041002104410121050c010b20032104200310212205450d0b0b20052001200310a10521012000410c6a2003360200200041086a200436020020002001360204200041023602000c080b20004103360200200041086a200141086a2903003703000c070b2001410c6a2802002203417f4c0d07200128020421010240024020030d0041002104410121050c010b20032104200310212205450d090b20052001200310a10521012000410c6a2003360200200041086a200436020020002001360204200041043602000c060b2001410c6a2802002203417f4c0d06200128020421010240024020030d0041002104410121050c010b20032104200310212205450d080b20052001200310a10521012000410c6a2003360200200041086a200436020020002001360204200041053602000c050b20004106360200200020012902043702042000410c6a2001410c6a2802003602000c040b2001410c6a2802002204ad42187e2206422088a70d042006a72205417f4c0d04200128020421030240024020050d00410421010c010b200510212201450d060b20024100360218200220013602102002200541186e360214200241106a4100200410b0012002280218210702402004450d002003200441186c6a21082002280210200741186c6a21010340200341086a2802002204417f4c0d06200328020021050240024020040d00410021094101210a0c010b2004210920041021220a450d080b200a2005200410a105210a200341146a2802002205417f4c0d062003410c6a280200210b0240024020050d004100210c4101210d0c010b2005210c20051021220d450d080b200d200b200510a105210b200141146a2005360200200141106a200c3602002001410c6a200b360200200141086a2004360200200141046a20093602002001200a360200200141186a2101200741016a2107200341186a22032008470d000b0b200241086a20073602002002200229031022063703002000410c6a200736020020002006370204200041073602000c030b200241106a200141046a10cd03200041083602002000410c6a200241106a41086a280200360200200020022903103702040c020b2001410c6a2802002203417f4c0d02200128020421010240024020030d0041012104410021050c010b20032105200310212204450d040b20042001200310a10521012000410c6a2003360200200041086a200536020020002001360204200041093602000c010b2000410a3602000b200241206a24000f0b1032000b1033000bda0b03027f017e177f230041a0016b220224000240024020012802082203ad42f0007e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410421010c010b200510212201450d020b20024100360208200220013602002002200541f0006e36020420024100200310b5012002280208210502402003450d002006200341f0006c6a21072002280200200541f0006c6a21082005200341047441706a4104766a21090340200241d0006a41086a220a200641186a290000370300200241d0006a41106a220b200641206a290000370300200241d0006a41186a220c200641286a290000370300200241306a41086a220d200641386a29000037030020062900102104200241306a41106a220e200641c0006a290000370300200241306a41186a220f200641c8006a290000370300200241106a41186a2210200641e8006a290000370300200241106a41106a2211200641e0006a290000370300200241106a41086a2212200641d8006a290000370300200220043703502002200629003037033020022006290050370310200628020c2203ad42247e2204422088a70d022004a72205417f4c0d0220062802002113200628020421140240024020050d00410421010c010b200510212201450d040b20024100360278200220013602702002200541246e360274200241f0006a4100200310a2012002280278211502402003450d00200341246c21162002280270201541246c6a211741002105034002400240024002400240024002400240201420056a22032d00000e06010203040500010b2003410c6a2802002218417f4c0d0b200341046a28020021030240024020180d0041012101410021190c010b20182119201810212201450d0d0b200220012003201810a105360093014105211a0c050b2002200341046a28000036009b012002200341016a280000360298012002200341146a290000370380012002200341196a290000370085012002200228029801360290012002200228009b0136009301200341086a28000021192003410c6a2800002118200341106a28000021014100211a0c050b200341106a2802002201417f4c0d09200341086a280200211b200341016a28000021034101211a0240024020010d0041002118410121190c010b20012118200110212219450d0b0b2019201b200110a1051a20022003360290010c040b200341106a2802002201417f4c0d08200341086a280200211a200341016a28000021030240024020010d0041002118410121190c010b20012118200110212219450d0a0b2019201a200110a1051a20022003360290014102211a0c030b200341106a2802002201417f4c0d07200341086a280200211a200341016a28000021030240024020010d0041002118410121190c010b20012118200110212219450d090b2019201a200110a1051a20022003360290014103211a0c020b4104211a2002200341046a280200360093012003410c6a2802002118200341086a28020021190b0b201720056a2203201a3a0000200341016a200228029001360000200341046a200228009301360000200341106a20013602002003410c6a2018360200200341086a2019360200200341146a2002290380013702002003411c6a20024180016a41086a290300370200201541016a21152016200541246a2205470d000b0b20024180016a41086a2015360200200220022903702204370380012008410c6a20153602002008200437020420082002290350370210200841186a200a29030037020020082013360200200841206a200b290300370200200841286a200c29030037020020082002290330370230200841386a200d290300370200200841c0006a200e290300370200200841c8006a200f290300370200200841e8006a2010290300370200200841e0006a2011290300370200200841d8006a201229030037020020082002290310370250200841f0006a2108200641f0006a22062007470d000b200941016a21050b20002002290300370200200041086a2005360200200241a0016a24000f0b1032000b1033000baf1f07027f017e197f017e047f017e097f230041f0026b220224000240024002400240024002402001280200417f6a220341014b0d0020030e020102010b41f58ac7004128418c94c700102d000b2001410c6a2802002203ad4288027e2204422088a70d022004a72205417f4c0d02200128020421060240024020050d00410821010c010b200510212201450d040b20024100360288012002200136028001200220054188026e3602840120024180016a41002003109901200228028801210702402003450d00200620034188026c6a210820022802800120074188026c6a210920024190026a41086a210a20024190026a41106a210b20024190026a41186a210c0340200a200641d8006a290000370300200b200641e0006a290000370300200c200641e8006a2900003703002002200629005037039002200641cc006a280200220d417f4c0d04200628024421032006280240210e02400240200d0d004100210f410121010c010b200d210f200d10212201450d060b20012003200d10a1052110200241f0016a41186a221120064188016a290300370300200241f0016a41106a221220064180016a290300370300200241f0016a41086a2213200641f8006a290300370300200241b0016a41086a221420064190016a220341086a290000370300200241b0016a41106a2215200341106a290000370300200241b0016a41186a2216200341186a290000370300200241b0016a41206a2217200341206a290000370300200241b0016a41286a2218200341286a290000370300200241b0016a41306a2219200341306a290000370300200241b0016a41386a221a200341386a290000370300200220062903703703f001200220032900003703b00120024190016a41186a221b200641d0016a220341186a29000037030020024190016a41106a221c200341106a29000037030020024190016a41086a221d200341086a2900003703002002200329000037039001200641086a29030021042006290300211e200241c0006a200641106a10c403200241186a221f200641346a290000370300200241106a22202006412c6a290000370300200241086a2221200641246a2900003703002002200629001c37030020062802f8012222ad42c1007e2223422088a70d042023a72201417f4c0d0420062802f00121030240024020010d00410121050c010b200110212205450d060b20024100360268200220053602602002200141c1006e360264200241e0006a41002022109d012002280268212402402022450d002003202241c1006c6a21252002280260202441c1006c6a2101034020032d00002105200241b0026a41386a2226200341396a290000370300200241b0026a41306a2227200341316a290000370300200241b0026a41286a2228200341296a290000370300200241b0026a41206a2229200341216a290000370300200241b0026a41186a222a200341196a290000370300200241b0026a41106a222b200341116a290000370300200241b0026a41086a222c200341096a2900003703002002200341016a2900003703b002200120053a0000200141016a20022903b002370000200141096a202c290300370000200141116a202b290300370000200141196a202a290300370000200141216a2029290300370000200141296a2028290300370000200141316a2027290300370000200141396a2026290300370000200141c1006a2101200341c1006a22032025470d000b202420226a21240b200241b0026a41086a22052024360200200220022903603703b00220062802fc0121260240024020064180026a280200220141037622270d0041012127410021030c010b4101210302402027410820014107716b22284d0d0041024101202720286b22034107711b20034103766a21030b200310212227450d060b20272026200310a105212620092002290340370310200941186a200241c0006a41086a2802003602002009200229030037021c200920043703082009201e370300200941cc006a200d360200200941c8006a200f360200200920103602442009200e360240200941246a20212903003702002009200229039002370350200941d8006a200a2903003703002009412c6a2020290300370200200941346a201f290300370200200941e0006a200b290300370300200941e8006a200c29030037030020094188016a201129030037030020094180016a2012290300370300200941f8006a2013290300370300200920022903f001370370200920022903b0013703900120094198016a2014290300370300200941a0016a2015290300370300200941a8016a2016290300370300200941b0016a2017290300370300200941b8016a2018290300370300200941c0016a2019290300370300200941c8016a201a29030037030020094184026a200336020020094180026a2001360200200920263602fc01200941e8016a201b290300370300200941e0016a201c290300370300200941d8016a201d29030037030020092002290390013703d001200941f8016a2005280200360200200920022903b0023703f001200741016a210720094188026a210920064188026a22062008470d000b0b200241b8026a2007360200200220022903800122043703b0022000410c6a200736020020002004370204200041013602000c010b200241f0016a41186a200141d0006a290000370300200241f0016a41106a200141c8006a290000370300200241f0016a41086a200141c0006a2900003703002002200141386a2900003703f001200141046a21030240024002400240200141d8006a2d00000e03010200010b200241b0026a41186a200341ed006a290000370300200241b0026a41106a200341e5006a290000370300200241b0026a41086a200341dd006a2900003703002002200341d5006a2900003703b00241022126200241b0026a21050c020b200241b0026a41186a200341ed006a290000370300200241b0026a41106a200341e5006a290000370300200241b0026a41086a200341dd006a2900003703002002200341d5006a2900003703b00241002126200241b0026a21050c010b200241b0026a41186a200341ed006a290000370300200241b0026a41106a200341e5006a290000370300200241b0026a41086a200341dd006a2900003703002002200341d5006a2900003703b00241012126200241b0026a21050b20024190026a41186a200541186a29000037030020024190026a41106a200541106a29000037030020024190026a41086a200541086a2900003703002002200529000037039002200241b0026a41086a200341fd006a290000370300200241b0026a41106a20034185016a290000370300200241b0026a41186a2003418d016a290000370300200241d0026a20034195016a290000370300200241d8026a2003419d016a290000370300200241e0026a200341a5016a290000370300200241e8026a200341ad016a2900003703002002200341f5006a2900003703b002024002400240024020032d00b5010e03010200010b200241b0016a41186a200341ce016a290000370300200241b0016a41106a200341c6016a290000370300200241b0016a41086a200341be016a2900003703002002200341b6016a2900003703b00141022127200241b0016a21050c020b200241b0016a41186a200341ce016a290000370300200241b0016a41106a200341c6016a290000370300200241b0016a41086a200341be016a2900003703002002200341b6016a2900003703b00141002127200241b0016a21050c010b200241b0016a41186a200341ce016a290000370300200241b0016a41106a200341c6016a290000370300200241b0016a41086a200341be016a2900003703002002200341b6016a2900003703b00141012127200241b0016a21050b200241c0006a41186a2228200541186a290000370300200241c0006a41106a2229200541106a290000370300200241c0006a41086a222a200541086a29000037030020022005290000370340200241086a2205200341de016a290000370300200241106a222b200341e6016a290000370300200241186a222c200341ee016a290000370300200241206a2209200341f6016a290000370300200241286a2206200341fe016a290000370300200241306a222520034186026a290000370300200241386a220d2003418e026a2900003703002002200341d6016a2900003703002001280204210320024180016a200141086a10cd0320024190016a41086a2222200241f0016a41086a29030037030020024190016a41106a2224200241f0016a41106a29030037030020024190016a41186a2207200241f0016a41186a290300370300200241e0006a41086a220a20024190026a41086a290300370300200241e0006a41106a220b20024190026a41106a290300370300200241e0006a41186a220c20024190026a41186a290300370300200241b0016a41086a220e200241b0026a41086a290300370300200241b0016a41106a220f200241b0026a41106a290300370300200241b0016a41186a2210200241b0026a41186a290300370300200241b0016a41206a2211200241b0026a41206a290300370300200241b0016a41286a2212200241b0026a41286a290300370300200241b0016a41306a2213200241b0026a41306a290300370300200241b0016a41386a2214200241b0026a41386a290300370300200220022903f001370390012002200229039002370360200220022903b0023703b001200141146a280200211520002003360204200041086a200229038001370200200041106a20024180016a41086a280200360200200041146a2015360200200041386a200229039001370200200041c0006a2022290300370200200041c8006a2024290300370200200041d0006a2007290300370200200041186a200141186a290200370200200041206a200141206a290200370200200041286a200141286a290200370200200041306a200141306a290200370200200041d8006a20263a0000200041f1006a200c290300370000200041e9006a200b290300370000200041e1006a200a29030037000020002002290360370059200041b1016a2014290300370000200041a9016a2013290300370000200041a1016a201229030037000020004199016a201129030037000020004191016a201029030037000020004189016a200f29030037000020004181016a200e290300370000200020022903b001370079200020273a00b901200041d2016a2028290300370000200041ca016a2029290300370000200041c2016a202a290300370000200020022903403700ba0120004192026a200d2903003700002000418a026a202529030037000020004182026a2006290300370000200041fa016a2009290300370000200041f2016a202c290300370000200041ea016a202b290300370000200041e2016a2005290300370000200020022903003700da01200041023602000b200241f0026a24000f0b1032000b1033000bf50501087f024002400240024002400240024002400240024020012d0000417f6a220241064b0d0020020e0701020304050607010b41f58ac7004128418c94c700102d000b200141106a2802002202417f4c0d06200141086a2802002103200141046a280200210420012d000121050240024020020d0041002106410121070c010b20022106200210212207450d080b20072003200210a10521072001411c6a2802002203417f4c0d06200128021421010240024020030d0041002108410121090c010b20032108200310212209450d080b20092001200310a10521012000411c6a2003360200200041186a2008360200200041146a2001360200200041106a20023602002000410c6a2006360200200041086a2007360200200041046a2004360200200041013a00002000200541ff01714101463a00010f0b200041023a0000200041046a200141046a2802003602000f0b200041033a0000200041046a200141046a2802003602000f0b2001410c6a2802002202417f4c0d03200141046a28020021030240024020020d0041012104410021050c010b20022105200210212204450d050b20042003200210a1052104200141186a2802002203417f4c0d03200128021021010240024020030d0041012106410021070c010b20032107200310212206450d050b20062001200310a1052101200041186a2003360200200041146a2007360200200041106a20013602002000410c6a2002360200200041086a2005360200200041046a2004360200200041043a00000f0b20002001290001370001200041c4006a200141c4006a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a290000370000200041053a00000f0b200041063a00000f0b200041073a0000200041046a200141046a2802003602000f0b1032000b1033000b830703037f017e037f230041c0026b22022400024002400240024002400240024002400240024020012d0000417f6a220341044b0d0020030e050102030405010b41f58ac7004128418c94c700102d000b2001410c6a2802002204ad42b0027e2205422088a70d052005a72203417f4c0d05200141046a28020021010240024020030d00410821060c010b200310212206450d070b20024100360208200220063602002002200341b0026e36020420024100200410ad012002280208210702402004450d00200441b0026c21032002280200200741b0026c6a2106200441047441706a41047621040340200241106a200110dc032006200241106a41b00210a10541b0026a2106200141b0026a2101200341d07d6a22030d000b200720046a41016a21070b200241186a20073602002002200229030022053703102000410c6a2007360200200041046a2005370200200041013a00000c040b200141026a2f0100210641b00210212203450d062003200141046a28020010e304200041046a2003360200200041026a20063b0100200041023a00000c030b200141026a2f01002106200241106a200141046a108e02200141186a2802002107200141146a2802002104200141106a280200210841b00210212203450d0520032001411c6a28020010e304200041026a20063b01002000411c6a2003360200200041186a2007360200200041146a2004360200200041106a2008360200200041033a0000200041046a20022903103702002000410c6a200241186a2802003602000c020b200141226a2f01002103200241106a200141246a108e02200041226a20033b0100200041043a0000200041246a20022903103702002000412c6a200241186a280200360200200041386a200141386a280200360200200041306a200141306a29020037020020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c010b200141226a2f01002103200241106a200141246a108e02200041226a20033b0100200041053a0000200041246a20022903103702002000412c6a200241186a280200360200200041306a200141306a29020037020020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000b200241c0026a24000f0b1032000b1033000b102a000be24e03027f017e3a7f230041d0036b2202240002400240024002400240024002400240024002400240024002400240024020012d0000417f6a2203410a4b0d0020030e0b0102030405060708090a0b010b41f58ac7004128418c94c700102d000b200041013a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0a0b2001410c6a2802002203ad42c8007e2204422088a70d0a2004a72205417f4c0d0a200141046a28020021060240024020050d00410421070c010b200510212207450d0c0b41002108200241003602c003200220073602b8032002200541c8006e3602bc03200241b8036a4100200310a10120022802c003210902402003450d002006200341c8006c6a210a20022802b803200941c8006c6a210b0340410021074100210c024002400240024002400240200620086a22052d00000e06050102030400050b20024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541036a2d00003a00a2032002200541016a2f00003b01a0032002200541106a290000370388032005410c6a280000210d200541086a280000210e200541046a280000210f4105210c0c040b2005410c6a280200220d417f4c0d10200541046a28020021034101210c0240200d0d004100210e4101210f41012003200d10a1051a0c040b200d210e200d1021220f450d11200f2003200d10a1051a0c030b20024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541036a2d00003a00a2032002200541016a2f00003b01a0032002200541106a290000370388032005410c6a280000210d200541086a280000210e200541046a280000210f4102210c0c020b20024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00004103210c2002200541036a2d00003a00a2032002200541016a2f00003b01a0032002200541106a290000370388032005410c6a280000210d200541086a280000210e200541046a280000210f0c010b20024188036a41086a200541186a29000037030020024188036a41106a200541206a2d00003a00002002200541036a2d00003a00a2032002200541016a2f00003b01a0032002200541106a290000370388032005410c6a280000210d200541086a280000210e4104210c200541046a280000210f0b024002400240024002400240200541246a2d00000e06050102030400050b200241d8026a41026a200541276a2d00003a0000200241086a2005413c6a290000370300200241106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a290000370300200541306a28000021102005412c6a2800002111200541286a2800002112410521070c040b200541306a2802002210417f4c0d10200541286a280200210341012107024020100d00410021114101211241012003201010a1051a0c040b20102111201010212212450d1120122003201010a1051a0c030b41022107200241d8026a41026a200541276a2d00003a0000200241086a2005413c6a290000370300200241106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a290000370300200541306a28000021102005412c6a2800002111200541286a28000021120c020b200241d8026a41026a200541276a2d00003a0000200241086a2005413c6a290000370300200241106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a290000370300200541306a28000021102005412c6a2800002111200541286a2800002112410321070c010b200241d8026a41026a200541276a2d00003a0000200241086a2005413c6a290000370300200241106a200541c4006a2d00003a00002002200541256a2f00003b01d8022002200541346a290000370300200541306a28000021102005412c6a2800002111200541286a2800002112410421070b200b20086a2203200c3a0000200341016a20022f01a0033b0000200341036a20022d00a2033a00002003410c6a200d360000200341086a200e360000200341046a200f360000200341106a200229038803370000200341216a20022f00f0023b0000200341186a20024188036a41086a290300370000200341206a20024188036a41106a2d00003a0000200341236a200241f0026a41026a2d00003a0000200341246a20073a0000200341286a20123600002003412c6a2011360000200341306a2010360000200341256a20022f01d8023b0000200341276a200241d8026a41026a2d00003a0000200341346a20022903003700002003413c6a200241086a290300370000200341c4006a200241106a2d00003a0000200341c5006a20022f00c0023b0000200341c7006a200241c0026a41026a2d00003a0000200841c8006a2108200941016a2109200541c8006a200a470d000b0b20024180026a41086a2009360200200220022903b803370380024100210b41002113024002400240024002400240200141106a2d00000e06050102030400050b200241a4026a200141136a2d00003a000020024190026a41086a200141286a29000037030020024190026a41106a200141306a2d00003a00002002200141116a2f00003b01a2022002200141206a290000370390022001411c6a2800002103200141186a2800002114200141146a2800002109410521130c040b2001411c6a2802002203417f4c0d0e200141146a280200210541012113024020030d00410021144101210941012005200310a1051a0c040b20032114200310212209450d0f20092005200310a1051a0c030b41022113200241a2026a41026a200141136a2d00003a000020024190026a41086a200141286a29000037030020024190026a41106a200141306a2d00003a00002002200141116a2f00003b01a2022002200141206a290000370390022001411c6a2800002103200141186a2800002114200141146a28000021090c020b200241a4026a200141136a2d00003a000020024190026a41086a200141286a29000037030020024190026a41106a200141306a2d00003a00002002200141116a2f00003b01a2022002200141206a290000370390022001411c6a2800002103200141186a2800002114200141146a2800002109410321130c010b200241a4026a200141136a2d00003a000020024190026a41086a200141286a29000037030020024190026a41106a200141306a2d00003a00002002200141116a2f00003b01a2022002200141206a290000370390022001411c6a2800002103200141186a2800002114200141146a2800002109410421130b024002400240024002400240200141346a2d00000e06050102030400050b200241bc026a200141376a2d00003a0000200241b0026a200141cc006a290000370300200241b8026a200141d4006a2d00003a00002002200141356a2f00003b01ba022002200141c4006a2900003703a802200141c0006a28000021052001413c6a2800002115200141386a280000210f4105210b0c040b200141c0006a2802002205417f4c0d0e200141386a28020021084101210b024020050d00410021154101210f41012008200510a1051a0c040b2005211520051021220f450d0f200f2008200510a1051a0c030b4102210b200241ba026a41026a200141376a2d00003a0000200241b0026a200141cc006a290000370300200241b8026a200141d4006a2d00003a00002002200141356a2f00003b01ba022002200141c4006a2900003703a802200141c0006a28000021052001413c6a2800002115200141386a280000210f0c020b200241bc026a200141376a2d00003a0000200241b0026a200141cc006a290000370300200241b8026a200141d4006a2d00003a00002002200141356a2f00003b01ba022002200141c4006a2900003703a802200141c0006a28000021052001413c6a2800002115200141386a280000210f4103210b0c010b200241bc026a200141376a2d00003a0000200241b0026a200141cc006a290000370300200241b8026a200141d4006a2d00003a00002002200141356a2f00003b01ba022002200141c4006a2900003703a802200141c0006a28000021052001413c6a2800002115200141386a280000210f4104210b0b4100211641002117024002400240024002400240200141d8006a2d00000e06050102030400050b200241d4026a200141db006a2d00003a0000200241c8026a200141f0006a290000370300200241d0026a200141f8006a2d00003a00002002200141d9006a2f00003b01d2022002200141e8006a2900003703c002200141e4006a2800002108200141e0006a2800002118200141dc006a2800002112410521170c040b200141e4006a2802002208417f4c0d0e200141dc006a280200210741012117024020080d00410021184101211241012007200810a1051a0c040b20082118200810212212450d0f20122007200810a1051a0c030b41022117200241d2026a41026a200141db006a2d00003a0000200241c8026a200141f0006a290000370300200241d0026a200141f8006a2d00003a00002002200141d9006a2f00003b01d2022002200141e8006a2900003703c002200141e4006a2800002108200141e0006a2800002118200141dc006a28000021120c020b200241d4026a200141db006a2d00003a0000200241c8026a200141f0006a290000370300200241d0026a200141f8006a2d00003a00002002200141d9006a2f00003b01d2022002200141e8006a2900003703c002200141e4006a2800002108200141e0006a2800002118200141dc006a2800002112410321170c010b200241d4026a200141db006a2d00003a0000200241c8026a200141f0006a290000370300200241d0026a200141f8006a2d00003a00002002200141d9006a2f00003b01d2022002200141e8006a2900003703c002200141e4006a2800002108200141e0006a2800002118200141dc006a2800002112410421170b024002400240024002400240200141fc006a2d00000e06050102030400050b200241ec026a200141ff006a2d00003a0000200241e0026a20014194016a290000370300200241e8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ea0220022001418c016a2900003703d80220014188016a280000210720014184016a280000211920014180016a280000210e410521160c040b20014188016a2802002207417f4c0d0e20014180016a280200210c41012116024020070d00410021194101210e4101200c200710a1051a0c040b2007211920071021220e450d0f200e200c200710a1051a0c030b41022116200241ea026a41026a200141ff006a2d00003a0000200241e0026a20014194016a290000370300200241e8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ea0220022001418c016a2900003703d80220014188016a280000210720014184016a280000211920014180016a280000210e0c020b200241ec026a200141ff006a2d00003a0000200241e0026a20014194016a290000370300200241e8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ea0220022001418c016a2900003703d80220014188016a280000210720014184016a280000211920014180016a280000210e410321160c010b200241ec026a200141ff006a2d00003a0000200241e0026a20014194016a290000370300200241e8026a2001419c016a2d00003a00002002200141fd006a2f00003b01ea0220022001418c016a2900003703d80220014188016a280000210720014184016a280000211920014180016a280000210e410421160b4100211a4100211b024002400240024002400240200141a0016a2d00000e06050102030400050b20024186036a200141a3016a2d00003a0000200241f8026a200141b8016a29000037030020024180036a200141c0016a2d00003a00002002200141a1016a2f00003b0184032002200141b0016a2900003703f002200141ac016a280000210c200141a8016a280000211c200141a4016a28000021114105211b0c040b200141ac016a280200220c417f4c0d0e200141a4016a280200210d4101211b0240200c0d004100211c410121114101200d200c10a1051a0c040b200c211c200c10212211450d0f2011200d200c10a1051a0c030b4102211b20024184036a41026a200141a3016a2d00003a0000200241f8026a200141b8016a29000037030020024180036a200141c0016a2d00003a00002002200141a1016a2f00003b0184032002200141b0016a2900003703f002200141ac016a280000210c200141a8016a280000211c200141a4016a28000021110c020b20024186036a200141a3016a2d00003a0000200241f8026a200141b8016a29000037030020024180036a200141c0016a2d00003a00002002200141a1016a2f00003b0184032002200141b0016a2900003703f002200141ac016a280000210c200141a8016a280000211c200141a4016a28000021114103211b0c010b20024186036a200141a3016a2d00003a0000200241f8026a200141b8016a29000037030020024180036a200141c0016a2d00003a00002002200141a1016a2f00003b0184032002200141b0016a2900003703f002200141ac016a280000210c200141a8016a280000211c200141a4016a28000021114104211b0b02402001418c026a2d00004101470d0020024198036a2001419d026a28000036020020024190036a20014195026a29000037030020022001418d026a290000370388034101211a0b4100211d4100211e024002400240024002400240200141c4016a2d00000e06050102030400050b200241b4036a200141c7016a2d00003a0000200241a8036a200141dc016a290000370300200241b0036a200141e4016a2d00003a00002002200141c5016a2f00003b01b2032002200141d4016a2900003703a003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021064105211e0c040b200141d0016a280200220d417f4c0d0e200141c8016a28020021104101211e0240200d0d004100211f4101210641012010200d10a1051a0c040b200d211f200d10212206450d0f20062010200d10a1051a0c030b4102211e200241b2036a41026a200141c7016a2d00003a0000200241a8036a200141dc016a290000370300200241b0036a200141e4016a2d00003a00002002200141c5016a2f00003b01b2032002200141d4016a2900003703a003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021060c020b200241b4036a200141c7016a2d00003a0000200241a8036a200141dc016a290000370300200241b0036a200141e4016a2d00003a00002002200141c5016a2f00003b01b2032002200141d4016a2900003703a003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021064103211e0c010b200241b4036a200141c7016a2d00003a0000200241a8036a200141dc016a290000370300200241b0036a200141e4016a2d00003a00002002200141c5016a2f00003b01b2032002200141d4016a2900003703a003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021064104211e0b024002400240024002400240200141e8016a2d00000e06050102030400050b200241ce036a200141eb016a2d00003a0000200241c0036a20014180026a290000370300200241c8036a20014188026a2d00003a00002002200141e9016a2f00003b01cc032002200141f8016a2900003703b803200141f4016a2800002110200141f0016a2800002120200141ec016a280000210a4105211d0c040b200141f4016a2802002210417f4c0d0e200141ec016a28020021014101211d024020100d00410021204101210a41012001201010a1051a0c040b2010212020101021220a450d0f200a2001201010a1051a0c030b4102211d200241cc036a41026a200141eb016a2d00003a0000200241c0036a20014180026a290000370300200241c8036a20014188026a2d00003a00002002200141e9016a2f00003b01cc032002200141f8016a2900003703b803200141f4016a2800002110200141f0016a2800002120200141ec016a280000210a0c020b200241ce036a200141eb016a2d00003a0000200241c0036a20014180026a290000370300200241c8036a20014188026a2d00003a00002002200141e9016a2f00003b01cc032002200141f8016a2900003703b803200141f4016a2800002110200141f0016a2800002120200141ec016a280000210a4103211d0c010b200241ce036a200141eb016a2d00003a0000200241c0036a20014180026a290000370300200241c8036a20014188026a2d00003a00002002200141e9016a2f00003b01cc032002200141f8016a2900003703b803200141f4016a2800002110200141f0016a2800002120200141ec016a280000210a4104211d0b200241f0016a41086a220120024180026a41086a280200360200200241ec016a41026a2221200241a2026a41026a2d00003a0000200241d8016a41086a222220024190026a41086a290300370300200241d8016a41106a222320024190026a41106a2d00003a0000200241d4016a41026a22242002418d026a41026a2d00003a000020022002290380023703f001200220022f01a2023b01ec0120022002290390023703d801200220022f008d023b01d401200241d0016a41026a2225200241ba026a41026a2d00003a0000200241b8016a41086a2226200241a8026a41086a290300370300200241b8016a41106a2227200241a8026a41106a2d00003a0000200241b4016a41026a2228200241a5026a41026a2d00003a0000200241b0016a41026a2229200241d2026a41026a2d00003a0000200220022f01ba023b01d001200220022903a8023703b801200220022f00a5023b01b401200220022f01d2023b01b00120024198016a41106a222a200241c0026a41106a2d00003a000020024198016a41086a222b200241c0026a41086a29030037030020024194016a41026a222c200241bd026a41026a2d00003a000020024190016a41026a222d200241ea026a41026a2d00003a0000200241f8006a41106a222e200241d8026a41106a2d00003a0000200241f8006a41086a222f200241d8026a41086a290300370300200220022903c00237039801200220022f00bd023b019401200220022f01ea023b019001200220022903d802370378200241f4006a41026a2230200241d5026a41026a2d00003a0000200220022f00d5023b0174200241f0006a41026a223120024184036a41026a2d00003a0000200220022f0184033b0170200241d8006a41106a2232200241f0026a41106a2d00003a0000200241d8006a41086a2233200241f0026a41086a290300370300200220022903f002370358200241d4006a41026a2234200241ed026a41026a2d00003a0000200220022f00ed023b0154200241106a223520024188036a41106a280200360200200241086a223620024188036a41086a2903003703002002200229038803370300200241d0006a41026a2237200241b2036a41026a2d00003a0000200220022f01b2033b0150200241386a41106a2238200241a0036a41106a2d00003a0000200241386a41086a2239200241a0036a41086a290300370300200220022903a003370338200241346a41026a223a2002419d036a41026a2d00003a0000200220022f009d033b0134200241306a41026a223b200241cc036a41026a2d00003a0000200220022f01cc033b0130200241186a41106a223c200241b8036a41106a2d00003a0000200241186a41086a223d200241b8036a41086a290300370300200220022903b803370318200241146a41026a223e200241b5036a41026a2d00003a0000200220022f00b5033b0114200041106a20133a00002000410c6a2001280200360200200041046a20022903f0013702002000411c6a2003360000200041186a2014360000200041146a2009360000200041116a20022f01ec013b0000200041136a20212d00003a0000200041206a20022903d801370000200041286a2022290300370000200041306a20232d00003a0000200041336a20242d00003a0000200041316a20022f01d4013b0000200041346a200b3a0000200041376a20252d00003a0000200041356a20022f01d0013b0000200041c0006a20053600002000413c6a2015360000200041386a200f360000200041d4006a20272d00003a0000200041cc006a2026290300370000200041c4006a20022903b801370000200041d7006a20282d00003a0000200041d5006a20022f01b4013b0000200041d8006a20173a0000200041db006a20292d00003a0000200041d9006a20022f01b0013b0000200041e4006a2008360000200041e0006a2018360000200041dc006a2012360000200041f8006a202a2d00003a0000200041f0006a202b290300370000200041e8006a200229039801370000200041fb006a202c2d00003a0000200041f9006a20022f0194013b0000200041fc006a20163a0000200041ff006a202d2d00003a0000200041fd006a20022f0190013b000020004188016a200736000020004184016a201936000020004180016a200e3600002000419c016a202e2d00003a000020004194016a202f2903003700002000418c016a20022903783700002000419f016a20302d00003a00002000419d016a20022f01743b0000200041a0016a201b3a0000200041a3016a20312d00003a0000200041a1016a20022f01703b0000200041ac016a200c360000200041a8016a201c360000200041a4016a2011360000200041c0016a20322d00003a0000200041b8016a2033290300370000200041b0016a2002290358370000200041c3016a20342d00003a0000200041c1016a20022f01543b0000200041c4016a201e3a0000200041c7016a20372d00003a0000200041c5016a20022f01503b0000200041d0016a200d360000200041cc016a201f360000200041c8016a2006360000200041e4016a20382d00003a0000200041dc016a2039290300370000200041d4016a2002290338370000200041e7016a203a2d00003a0000200041e5016a20022f01343b0000200041e8016a201d3a0000200041eb016a203b2d00003a0000200041e9016a20022f01303b0000200041f4016a2010360000200041f0016a2020360000200041ec016a200a36000020004188026a203c2d00003a000020004180026a203d290300370000200041f8016a20022903183700002000418b026a203e2d00003a000020004189026a20022f01143b00002000418c026a201a3a00002000419d026a203528020036000020004195026a20362903003700002000418d026a2002290300370000200041a3026a20024188036a41026a2d00003a0000200041a1026a20022f0088033b0000200041023a00000c090b2001410c6a2802002203ad42c4007e2204422088a70d092004a72205417f4c0d09200141046a28020021060240024020050d00410421080c010b200510212208450d0b0b41002101200241003602c003200220083602b8032002200541c4006e3602bc03200241b8036a41002003109b0120022802c003210c02402003450d002006200341c4006c6a210a20022802b803200c41c4006c6a210b20024188036a41086a210d20024188036a41106a21100340200d200620016a220541176a29000037030020102005411f6a2d00003a0000200220052f01003b01a0032002200541026a2d00003a00a20320022005410f6a290000370388032005410b6a2800002109200541076a280000210f200541036a280000211241002108024002400240024002400240200541206a2d00000e06050102030400050b200241d8026a41026a200541236a2d00003a0000200241086a200541386a290000370300200241106a200541c0006a2d00003a00002002200541216a2f00003b01d8022002200541306a2900003703002005412c6a2800002107200541286a2800002111200541246a280000210e410521080c040b2005412c6a2802002207417f4c0d0f200541246a280200210341012108024020070d00410021114101210e41012003200710a1051a0c040b2007211120071021220e450d10200e2003200710a1051a0c030b41022108200241d8026a41026a200541236a2d00003a0000200241086a200541386a290000370300200241106a200541c0006a2d00003a00002002200541216a2f00003b01d8022002200541306a2900003703002005412c6a2800002107200541286a2800002111200541246a280000210e0c020b200241d8026a41026a200541236a2d00003a0000200241086a200541386a290000370300200241106a200541c0006a2d00003a00002002200541216a2f00003b01d8022002200541306a2900003703002005412c6a2800002107200541286a2800002111200541246a280000210e410321080c010b200241d8026a41026a200541236a2d00003a0000200241086a200541386a290000370300200241106a200541c0006a2d00003a00002002200541216a2f00003b01d8022002200541306a2900003703002005412c6a2800002107200541286a2800002111200541246a280000210e410421080b200b20016a220320022f01a0033b0100200341026a20022d00a2033a00002003410b6a2009360000200341076a200f360000200341036a20123600002003410f6a200229038803370000200341176a200d2903003700002003411f6a20102d00003a0000200341206a20083a0000200341216a20022f01d8023b0000200341236a200241d8026a41026a2d00003a00002003412c6a2007360000200341286a2011360000200341246a200e360000200341306a2002290300370000200341386a200241086a290300370000200341c0006a200241106a2d00003a0000200341c1006a20022f00f0023b0000200341c3006a200241f0026a41026a2d00003a0000200141c4006a2101200c41016a210c200541c4006a200a470d000b0b20024190036a200c360200200220022903b8032204370388032000410c6a200c360200200041046a2004370200200041033a00000c080b200041043a00000c070b200041053a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c060b200041063a0000200041046a200141046a2802003602000c050b200041073a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c040b200041083a000020002001290001370001200041246a200141246a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c030b200041093a0000200041086a200141086a290300370300200041046a200141046a2802003602000c020b2000410a3a000020002001290001370001200041386a200141386a290300370300200041306a200141306a290300370300200041246a200141246a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041286a200141286a3502003703000c010b2000410b3a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000b200241d0036a24000f0b1032000b1033000bec0601057f230041206b2202240002400240024002400240024002400240024002400240024020012d0000417f6a220341084b0d0020030e09010203040506070809010b41f58ac7004128418c94c700102d000b200241186a2204200141196a290000370300200241106a2205200141116a290000370300200241086a2206200141096a2900003703002002200129000137030041b00210212203450d092003200141246a28020010dc03200041246a2003360200200041013a0000200041196a2004290300370000200041116a2005290300370000200041096a2006290300370000200020022903003700010c080b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c070b2002200141046a108e02200041033a0000200041046a20022903003702002000410c6a200241086a280200360200200041106a200141106a280200360200200041026a200141026a2f01003b01000c060b200041043a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c050b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c040b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c030b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c020b200041083a00000c010b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000b200241206a24000f0b102a000b110041f58ac7004128418c94c700102d000b130020004101360204200041b8a9c3003602000b130020004105360204200041a8adc3003602000bad150f047f017e017f027e057f017e077f017e057f017e027f017e027f037e077f230041e0016b22012400200141c0016a41186a22024200370300200141c0016a41106a22034200370300200141c0016a41086a22044200370300200142003703c00141b0dfc300ad4280808080a001842205100c220629000021072004200641086a290000370300200120073703c0012006102341a89ec700ad42808080809001842208100c22062900002107200141d0006a41086a2209200641086a2900003703002001200737035020061023200320012903502207370300200141a0016a41086a220a2004290300370300200141a0016a41106a220b2007370300200141a0016a41186a220c2009290300370300200120012903c0013703a001200141c0016a200141a0016a10c903024020012802c001220d450d000240024020012902c401220e422088a7220f0d0041002110200d21110c010b200d41046a2111200d2802002112410121100b200141c0016a41186a22134200370300200141c0016a41106a22144200370300200141c0016a41086a22154200370300200142003703c0014196adc300ad42808080809001842216100c22062900002107200141f0006a41086a2217200641086a290000370300200120073703702006102320152017290300370300200120012903703703c00141bce0c300ad4280808080e00084100c220629000021072017200641086a2900003703002001200737037020061023201420012903702207370300200141a0016a41086a22182015290300370300200141a0016a41106a22192007370300200141a0016a41186a221a2017290300370300200120012903c0013703a001200141c0016a200141a0016a10910320012802c0012206410420061b211b024020012902c401420020061b221c422088a72206450d00200d200f4102746a211d201b2006412c6c6a211e200141a0016aad4280808080800484211f201b2106034020152006410c6a2902003703002014200641146a29020037030020132006411c6a290200370300200120062902043703c001200641246a280200220f4103460d01200641286a280200212020062802002121200141106a41186a20132903002207370300200141106a41106a20142903002222370300200141106a41086a20152903002223370300200120012903c0012224370310200141306a41186a22252007370300200141306a41106a22262022370300200141306a41086a222720233703002001202437033002400240024002400240024020104101470d0020122021460d010b200f4101470d03200141d0006a41186a220f2025290300370300200141d0006a41106a22282026290300370300200141d0006a41086a2226202729030037030020012001290330370350202041024b0d03201342003703002014420037030020154200370300200142003703c0012016100c222529000021072017202541086a290000370300200120073703702025102320152017290300370300200120012903703703c00141a4e2c300ad4280808080a001842222100c222529000021072017202541086a290000370300200120073703702025102320142001290370370000201441086a222920172903003700002018201529030037030020192014290300370300201a2013290300370300200120012903c0013703a001200141c0016a200141a0016a108f0320012802c001222a0d0141002125200141003602880120014204370380014104212a0c020b02402011201d470d0041002110201d21110c030b2011280200211241012110201141046a21110c020b20012902c40121072001202a3602800120012007370284012007422088a721250b201a200f2903003703002019202829030037030020182026290300370300200120012903503703a0010240024020254103490d0041032126200141033602880120254103460d01202a41246a210f2025410c6c415c6a212503400240200f41046a2802002227450d00202741246c450d00200f28020010230b200f410c6a210f202541746a22250d000c020b0b20014180016a2025410320256b222b109501200128028001222a2001280288012226410c6c6a210f02400240202b4102490d002025417e6a21250340200141003602c801200142043703c001200141c0016a4100410010a201201720012802c8012227360200200120012903c0012207370370200f41086a2027360200200f2007370200202641016a2126200f410c6a210f202541016a222720254f21282027212520280d000b202b450d010b200f4204370200200f4100360208202641016a21260b20012026360288010b202620204d0d012013201a2903003703002014201929030037030020152018290300370300200120012903a0013703c001202a2020410c6c6a220f41086a21250240200f2802082226200f41046a280200470d00200f2026410110a201202528020021260b200f280200202641246c6a220f20012903c001370204200f2021360200200f410c6a2015290300370200200f41146a2014290300370200200f411c6a20132903003702002025202528020041016a36020020014190016a41086a20014180016a41086a2802003602002001200129038001220737039001201342003703002014420037030020154200370300200142003703c0012016100c220f29000021232017200f41086a29000037030020012023370370200f102320152017290300370300200120012903703703c0012022100c220f29000021222017200f41086a29000037030020012022370370200f102320142001290370370000202920172903003700002018201529030037030020192014290300370300201a2013290300370300200120012903c0013703a00102402007a722270d00201f10110c010b200141203602c4012001200141a0016a3602c00120014190016a200141c0016a1090030240200128029801220f450d00200f410c6c21252027210f03400240200f41046a2802002226450d00202641246c450d00200f28020010230b200f410c6a210f202541746a22250d000b0b200128029401220f450d00200f410c6c450d00202710230b2006412c6a2206201e470d010c020b0b2020202641e8afc3001030000b0240201ca72206450d002006412c6c450d00201b10230b200e42ffffffff0383500d00200d10230b200242003703002003420037030020044200370300200142003703c00141b9f4c200ad4280808080c00184100c220629000021072004200641086a290000370300200120073703c001200610232008100c220629000021072009200641086a290000370300200120073703502006102320032001290350370000200341086a2009290300370000200a2004290300370300200b2003290300370300200c2002290300370300200120012903c0013703a001200141a0016aad42808080808004841011200242003703002003420037030020044200370300200142003703c0012005100c220629000021072004200641086a290000370300200120073703c001200610232008100c220629000021072009200641086a2900003703002001200737035020061023200320012903502207370300200a2004290300370300200b2007370300200c2009290300370300200120012903c0013703a001200141086a200141a0016a4120419ca8c70041004100108c01024020012802084101470d00200010e803200141e0016a24000f0b41ce83c3004131418c94c700102d000bc36008047f017e017f027e077f017e057f047e230041e0026b22012400200141e0006a41186a4200370300200141e0006a41106a22024200370300200141e0006a41086a220342003703002001420037036041ecf7c300ad4280808080f00184100c22042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004102320032006290300370300200120012903c00237036041fbf7c300ad4280808080d00184100c220429000021052006200441086a290000370300200120053703c00220041023200220012903c0022205370300200141a0026a41086a2003290300370300200141a0026a41106a2005370300200141a0026a41186a2006290300370300200120012903603703a002200141203602cc012001200141a0026a3602c801200141c0026a200141a0026aad2207428080808080048422081010108b010240024020012802c00222030d004102210620014102360294020c010b20012802c40221092001200628020022063602d401200120033602d0010240024020064104490d002001200341046a3602d00120012006417c6a22043602d40120044104490d002003280000210a2001200641786a3602d4012001200341086a3602d0012003280004210b200141e0006a200141d0016a1084042001280260220c450d0020012902642105410021060240024020012802d401220d0d000c010b2001200d417f6a220e3602d401200120012802d001220f41016a3602d0010240200f2d00004101460d000c010b200e4104490d002001200d417b6a3602d4012001200f41056a3602d001200f2800012104410121060b20012004360298022001200537028c022001200c360288022001200b360284022001200a360280020c010b200141003602e801200142013703e0012001410a3602d4022001200141c8016a3602d0022001200141e0016a3602dc01200141f4006a41013602002001420137026420014180c5c6003602602001200141d0026a360270200141dc016a4184a5c200200141e0006a10311a20013502e80142208620013502e00184100a024020012802e401450d0020012802e00110230b410221060b20012006360294022009450d00200310230b200141e0006a41106a220320014180026a41106a2209280200360200200141e0006a41086a220a20014180026a41086a220b29030037030020012001290380023703600240024002400240024002400240024020064102460d00200141e0016a41106a20032802002203360200200141e0016a41086a200a29030022103703002001200129036022053703e00120092003360200200b201037030020014198026a20043602002001200537038002200120063602940202402005a722032000470d00410121030240024020064101460d002001280284022106200141a0026a20014180026a41086a108504200141f0006a2006360200200141ec006a200141a0026a41086a280200360200200120012903a00237026441002103200141e0006a21060c010b2001280284022106200141a0026a20014180026a41086a108504200141f4006a2006360200200141e0006a41086a20012903a002370300200141f0006a200141a0026a41086a28020036020020012004360264200141e0006a21060b20062003360200200610f70320012802800221030b024020012802840220036a2000470d00200120014188026a220d3602642001410036026020014190026a28020041286c4105722206417f4c0d02200610212203450d03200341013a0000200120063602a402200120033602a002200141013602a80220012802880221062001280290022203200141a0026a10610240024020030d0020012802a802210320012802a002210b0c010b2006200341286c6a210c20012802a402210920012802a8022103034002400240200920036b4120490d00200341206a210420012802a002210b2009210a0c010b200341206a22042003490d072009410174220a2004200a20044b1b220a4100480d070240024020090d000240200a0d004101210b0c020b200a1021220b0d010c0d0b20012802a002210b2009200a460d00200b2009200a1025220b450d0c0b2001200a3602a4022001200b3602a0020b200b20036a22032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a290000370000200120043602a802200641206a290300210502400240200a20046b4108490d00200441086a2103200a21090c010b200441086a22032004490d07200a41017422092003200920034b1b22094100480d0702400240200a0d00024020090d004101210b0c020b20091021220b450d0d0c010b200a2009460d00200b200a20091025220b450d0c0b200120093602a4022001200b3602a0020b200b20046a2005370000200120033602a802200c200641286a2206470d000b0b20012802a402210641eeebc300ad4280808080c002842003ad422086200bad84100e02402006450d00200b10230b02402001280260450d00200141e8006a2802002206450d00200641286c450d00200128026410230b200141e0006a41086a2206200d290000370300200141e0006a41106a2204200d41086a28000036020020014100360264200141063a0060200141e0006a10e001200141e0006a41186a220a420037030020044200370300200642003703002001420037036041ecf7c300ad4280808080f00184100c22092900002105200141c0026a41086a2203200941086a290000370300200120053703c0022009102320062003290300370300200120012903c00237036041fbf7c300ad4280808080d00184100c220929000021052003200941086a290000370300200120053703c00220091023200220012903c002370000200241086a2003290300370000200141a0026a41086a2006290300370300200141a0026a41106a2004290300370300200141a0026a41186a200a290300370300200120012903603703a002200810110c010b2001418c026a2802002206450d00200641286c450d0020012802880210230b200141e0006a41186a22094200370300200141e0006a41106a220a4200370300200141e0006a41086a220342003703002001420037036041ecf7c300ad4280808080f00184100c22042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004102320032006290300370300200120012903c0023703604188f8c300ad4280808080d00084100c220429000021052006200441086a290000370300200120053703c00220041023200220012903c002370000200241086a2006290300370000200141a0026a41086a2003290300370300200141a0026a41106a200a290300370300200141a0026a41186a2009290300370300200120012903603703a002200141203602c4022001200141a0026a3602c002200141e0016a20081010108b0120012802e0012206450d0520012802e4012104024002400240200141e0016a41086a2802002209450d0020062d0000220a41034b0d0041002103024002400240200a0e0405000102050b2009417f6a4108490d0220062900012105410121030c040b410221030c020b2009417f6a4108490d0020062900012105410321030c020b200141003602880220014201370380022001410a3602d4022001200141c0026a3602d002200120014180026a3602d001200141f4006a41013602002001420137026420014180c5c6003602602001200141d0026a360270200141d0016a4184a5c200200141e0006a10311a20013502880242208620013502800284100a0240200128028402450d0020012802800210230b410421030b0b02402004450d00200610230b2003417f6a220641024b0d0520060e03040503040b1032000b1033000b102c000b2005422088a7210602402005a722032000470d002001410436026020012006360264200141e0006a10f7030b200620036a2000470d012001410036028002200141e0006a41186a22094200370300200141e0006a41106a220a4200370300200141e0006a41086a220342003703002001420037036041ecf7c300ad4280808080f00184100c22042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004102320032006290300370300200120012903c0023703604188f8c300ad4280808080d00084100c220429000021052006200441086a290000370300200120053703c00220041023200220012903c002370000200241086a2006290300370000200141a0026a41086a2003290300370300200141a0026a41106a200a290300370300200141a0026a41186a2009290300370300200120012903603703a002200141e0006a20014180026a1086042008200135026842208620012802602206ad84100e02402001280264450d00200610230b20014102360264200141063a0060200141e0006a10e0010c010b2005422088a7210602402005a722032000470d002001410336026020012006360264200141e0006a10f7030b200620036a2000470d002001410236028002200141e0006a41186a22094200370300200141e0006a41106a220a4200370300200141e0006a41086a220342003703002001420037036041ecf7c300ad4280808080f00184100c22042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004102320032006290300370300200120012903c0023703604188f8c300ad4280808080d00084100c220429000021052006200441086a290000370300200120053703c00220041023200220012903c002370000200241086a2006290300370000200141a0026a41086a2003290300370300200141a0026a41106a200a290300370300200141a0026a41186a2009290300370300200120012903603703a002200141e0006a20014180026a1086042008200135026842208620012802602206ad84100e02402001280264450d00200610230b20014101360264200141063a0060200141e0006a10e0010b200141e0006a41186a22044200370300200141e0006a41106a220d4200370300200141e0006a41086a220342003703002001420037036041fee2c200ad4280808080f001842205100c2209290000210820014180026a41086a2206200941086a29000037030020012008370380022009102320032006290300370300200120012903800237036041e1e6c200ad4280808080e00084100c220929000021082006200941086a290000370300200120083703800220091023200d2001290380022208370300200141a0026a41086a220a2003290300370300200141a0026a41106a220b2008370300200141a0026a41186a220c2006290300370300200120012903603703a002200141d8006a200141a0026a412010cd01200128025c210f0240200128025822024101470d002007428080808080048410110b20044200370300200d420037030020034200370300200142003703602005100c220929000021052006200941086a29000037030020012005370380022009102320032006290300370300200120012903800237036041f4bdc500ad4280808080b00184100c220929000021052006200941086a290000370300200120053703800220091023200d200129038002370000200d41086a2006290300370000200a2003290300370300200b200d290300370300200c2004290300370300200120012903603703a00202400240200141a0026a108103220641ff01714102460d0020064101710d010b41041021220a450d01200a4100360200200141e0006a41186a22044200370300200141e0006a41106a22094200370300200141e0006a41086a220342003703002001420037036041fee2c200ad4280808080f001842205100c220b290000210820014180026a41086a2206200b41086a2900003703002001200837038002200b102320032006290300370300200120012903800237036041a0e3c200ad4280808080b00184100c220b29000021082006200b41086a2900003703002001200837038002200b1023200d200129038002370000200d41086a220b2006290300370000200141a0026a41086a220c2003290300370300200141a0026a41106a22002009290300370300200141a0026a41186a220e2004290300370300200120012903603703a002200141203602642001200141a0026a360260200a4101200141e0006a10f603200a102341041021220a450d01200a4100360200200442003703002009420037030020034200370300200142003703602005100c221129000021082006201141086a29000037030020012008370380022011102320032006290300370300200120012903800237036041e7e6c200ad4280808080c00184100c221129000021082006201141086a290000370300200120083703800220111023200d200129038002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903603703a002200141203602642001200141a0026a360260200a4101200141e0006a10f603200a1023200442003703002009420037030020034200370300200142003703602005100c220a29000021082006200a41086a2900003703002001200837038002200a102320032006290300370300200120012903800237036041f3e6c200ad4280808080e00084100c220a29000021082006200a41086a2900003703002001200837038002200a1023200d200129038002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903603703a00220014100360260200742808080808004842208200141e0006aad22104280808080c00084100e200442003703002009420037030020034200370300200142003703602005100c220a29000021052006200a41086a2900003703002001200537038002200a102320032006290300370300200120012903800237036041f4bdc500ad4280808080b00184100c220a29000021052006200a41086a2900003703002001200537038002200a1023200d200129038002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903603703a002200141013a00602008201042808080801084100e0b200141e0006a41186a4200370300200141e0006a41106a22124200370300200141e0006a41086a220642003703002001420037036041fee2c200ad4280808080f00184100c220329000021052006200341086a290000370300200120053703602003102341a0e3c200ad4280808080b00184100c2203290000210520014180026a41086a2204200341086a29000037030020012005370380022003102320122001290380022205370300200141a0026a41086a2006290300370300200141a0026a41106a2005370300200141a0026a41186a2004290300370300200120012903603703a002200141e0006a200141a0026a10ed03024002402001280260220e0d0041002113200141003602c802200142043703c0024104210e410021110c010b2001200129026422053702c4022001200e3602c0022005422088a721112005a721130b200141e0006a41186a22094200370300200141e0006a41106a220a4200370300200141e0006a41086a220342003703002001420037036041fee2c200ad4280808080f00184100c2204290000210520014180026a41086a2206200441086a29000037030020012005370380022004102320032006290300370300200120012903800237036041e7e6c200ad4280808080c00184100c220429000021052006200441086a290000370300200120053703800220041023200d200129038002370000200d41086a2006290300370000200141a0026a41086a2003290300370300200141a0026a41106a200a290300370300200141a0026a41186a2009290300370300200120012903603703a002200141e0006a200141a0026a10ed03024002402001280260220a0d0041002114200141003602e801200142043703e0014104210a4100210c0c010b2001200129026422053702e4012001200a3602e0012005422088a7210c2005a721140b0240024002400240024020020d002011450d012011410274200e6a417c6a280200210f0b201141002011419c7f6a22062006201141016a4b1b2215490d01200141003602c8022015450d03200e20154102746a2100200e210203402002280200210b02400240024002400240200c41014b0d0041002106200c0e020201020b41002106200c2103034020062003410176220420066a2209200b200a20094102746a280200491b2106200320046b220341014b0d000b0b200b200a200641027422036a2802002204460d022006200b20044b6a21060c010b410021060b2001200636026041b0e7c200412e200141e0006a41e0e7c20041f0e7c2001034000b200c20064d0d03200a20036a2203200341046a2006417f73200c6a41027410a2051a2001200c417f6a220c3602e801200241046a22022000470d000c040b0b41f9e6c200412641a0e7c200104f000b20152011103c000b2006200c103b000b410021064100210b0240201120156b2203450d0002402015450d00200e200e20154102746a200341027410a2051a0b200120033602c8022003210b0b024002400240200c41014b0d00200c0e020201020b41002106200c2103034020062003410176220420066a2209200f200a20094102746a280200491b2106200320046b220341014b0d000b0b0240200f200a20064102746a2802002203460d002006200f20034b6a21060b200c20064f0d002006200c1038000b0240200c2014470d00200141e0016a20144101107920012802e001210a0b200a20064102746a220341046a2003200c20066b41027410a2051a2003200f3602002001200c41016a22033602e8010240200b2013470d00200141c0026a20134101107920012802c002210e20012802c802210b0b200e200b4102746a200f3602002001200b41016a220b3602c80202400240024002400240024002402003450d00200341017621062003410171450d01200320064d0d03200a20064102746a28020021000c020b4180e8c20041c300418c94c700102d000b200320064d0d0220032006417f6a22044d0d03200a20044102746a280200200a20064102746a2802006a41017621000b20012802c4022102200141e0006a41186a22094200370300200141e0006a41106a220a4200370300200141e0006a41086a220442003703002001420037036041fee2c200ad4280808080f001842205100c220c290000210820014180026a41086a2206200c41086a2900003703002001200837038002200c102320042006290300370300200120012903800237036041a0e3c200ad4280808080b00184100c220c29000021082006200c41086a2900003703002001200837038002200c1023200d200129038002370000200d41086a220f2006290300370000200141a0026a41086a22112004290300370300200141a0026a41106a2215200a290300370300200141a0026a41186a22132009290300370300200120012903603703a002200141203602642001200141a0026a360260200e200b200141e0006a10f6030240200241ffffffff0371450d00200e10230b20012802e401210e20012802e001210220094200370300200a420037030020044200370300200142003703602005100c220c29000021052006200c41086a2900003703002001200537038002200c102320042006290300370300200120012903800237036041e7e6c200ad4280808080c00184100c220c29000021052006200c41086a2900003703002001200537038002200c1023200d200129038002370000200f2006290300370000201120042903003703002015200a29030037030020132009290300370300200120012903603703a002200141203602642001200141a0026a36026020022003200141e0006a10f6030240200e41ffffffff0371450d00200210230b200141e0006a41186a22094200370300200141e0006a41106a22044200370300200141e0006a41086a220342003703002001420037036041fee2c200ad4280808080f00184100c220a290000210520014180026a41086a2206200a41086a2900003703002001200537038002200a102320032006290300370300200120012903800237036041f3e6c200ad4280808080e00084100c220a29000021052006200a41086a2900003703002001200537038002200a1023200d200129038002370000200d41086a2006290300370000200141a0026a41086a220a2003290300370300200141a0026a41106a220c2004290300370300200141a0026a41186a22022009290300370300200120012903603703a0022001200036026020074280808080800484200141e0006aad22084280808080c00084100e0240200b41e500470d002009420037030020044200370300200342003703002001420037036041e4dec400ad4280808080e00084100c220b29000021052003200b41086a29000037030020012005370360200b102341f3dec400ad4280808080e00084100c220b29000021052006200b41086a2900003703002001200537038002200b10232012200129038002370000201241086a2006290300370000200a2003290300370300200c200429030037030020022009290300370300200120012903603703a002200141d0006a200141a0026a412010cd010b20094200370300200442003703002003420037030020014200370360418fcdc200ad4280808080f000842210100c220929000021052006200941086a29000037030020012005370380022009102320032006290300370300200120012903800237036041b8dbc100ad42808080809001842216100c220929000021052006200941086a29000037030020012005370380022009102320042001290380022205370300200a2003290300370300200c200537030020022006290300370300200120012903603703a002200141e0006a200141a0026a10ba01024002402001290360427f7c4201560d00200141a0026a21020c010b20042903002117200141e0006a41186a220a4200370300200141e0006a41106a22094200370300200141e0006a41086a220642003703002001420037036041b494c700ad4280808080900184100c220329000021052006200341086a290000370300200120053703602003102341bd94c700ad42808080803084100c220b290000210520014180026a41086a2203200b41086a2900003703002001200537038002200b102320092001290380022205370300200141a0026a41086a220c2006290300370300200141a0026a41106a22022005370300200141a0026a41186a22002003290300370300200120012903603703a002200141c0006a200141a0026a10fa02200141306a2001290348420020012802401b221842e807802219420042e807420010a605200a42003703002009420037030020064200370300200142003703602010100c220b29000021052003200b41086a2900003703002001200537038002200b10232006200329030037030020012001290380023703602016100c220b29000021052003200b41086a2900003703002001200537038002200b10232004200129038002370000200441086a2003290300370000200c2006290300370300200220092903003703002000200a290300370300200120012903603703a00220012903302105200141306a41086a2903002110410410212206450d05200620173e000020064104410810252206450d05200641013a000420064108411010252206450d0520062005201820194298787e7c42ff07837c2216427f20102016200554ad7c501b370005200742808080808004842006ad4280808080d00184100e20061023200141a0026a21020b200141e0006a41186a22094200370300200141e0006a41106a22044200370300200141e0006a41086a220342003703002001420037036041fea6c600ad4280808080a001842205100c220629000021102003200641086a29000037030020012010370360200610234188a7c600ad4280808080e00084100c220a290000211020014180026a41086a2206200a41086a2900003703002001201037038002200a102320042001290380022210370300200141a0026a41086a220a2003290300370300200141a0026a41106a220b2010370300200141a0026a41186a220c2006290300370300200120012903603703a0022002ad428080808080048422101011200942003703002004420037030020034200370300200142003703602005100c220229000021052003200241086a29000037030020012005370360200210234198bdc600ad4280808080c00184100c220229000021052006200241086a29000037030020012005370380022002102320042001290380022205370300200a2003290300370300200b2005370300200c2006290300370300200120012903603703a002201010112009420037030020044200370300200342003703002001420037036041c599c500ad4280808080a00284100c220229000021052006200241086a29000037030020012005370380022002102320032006290300370300200120012903800237036041b09ac500ad4280808080900284100c220229000021052006200241086a29000037030020012005370380022002102320042001290380022205370300200a2003290300370300200b2005370300200c2006290300370300200120012903603703a002200141206a200141a0026a10fa02200129032821102001280220210b20014180026a41186a420037030020014180026a41106a220c420037030020064200370300200142003703800241e4dec400ad4280808080e00084100c220a29000021052006200a41086a2900003703002001200537038002200a102341e8ffc400ad4280808080b00284100c220a2900002105200141c0026a41086a2202200a41086a290000370300200120053703c002200a1023200c20012903c00222053703002003200629030037030020042005370300200920022903003703002001200129038002370360200141186a200141e0006a412010cd01200141086a200128021c410020012802181b22064180e59af70020064180e59af7004b22031b4180e59af700200620031b6bad220542002005420010a605200542a8c30180211620104200200b1b210542092001290308221042808090bbbad6adf00d7f20012903102010423f87521b211002400240200641ffe49af7004b0d0042ffffffffffffffffff00428080808080808080807f2005201620107d22167d22104200531b20102005427f5522062016427f554720062010427f5547711b22054280ec94a37c20054280ec94a37c551b21050c010b42ffffffffffffffffff00428080808080808080807f2005201620107c22167c22104200531b20102005427f5522062016427f554620062010427f5547711b21050b200141e0006a41186a220a4200370300200141e0006a41106a22094200370300200141e0006a41086a220642003703002001420037036041c599c500ad4280808080a00284100c220b290000211020014180026a41086a2203200b41086a2900003703002001201037038002200b102320062003290300370300200120012903800237036041b09ac500ad4280808080900284100c220b29000021102003200b41086a2900003703002001201037038002200b10232004200129038002370000200441086a2003290300370000200141a0026a41086a220b2006290300370300200141a0026a41106a220c2009290300370300200141a0026a41186a2202200a290300370300200120012903603703a0022001200537036020074280808080800484220520084280808080800184100e200a420037030020094200370300200642003703002001420037036041b494c700ad4280808080900184100c220429000021102006200441086a290000370300200120103703602004102341a89ec700ad4280808080900184100c220429000021102003200441086a29000037030020012010370380022004102320092001290380022210370300200b2006290300370300200c201037030020022003290300370300200120012903603703a002200141a0026a108103220641ff01714102460d03200510112006410171450d03200141e0006a41186a4200370300200141e0006a41106a22064200370300200141e0006a41086a220442003703002001420037036041a7b3c500ad4280808080c00084100c22092900002105200141c0026a41086a2203200941086a290000370300200120053703c0022009102320042003290300370300200120012903c00237036041f4bdc500ad4280808080b00184100c220929000021052003200941086a290000370300200120053703c00220091023200620012903c0022205370300200141a0026a41086a2004290300370300200141a0026a41106a2005370300200141a0026a41186a2003290300370300200120012903603703a002200141e0006a200141a0026a108704024020012d006022034102460d00200742808080808004841011200141e0016a41086a200141e9006a290000370300200141e0016a41106a200141f1006a290000370300200141e0016a41186a200141f9006a290000370300200120012900613703e0010240200341037122034103460d0020030e03010001010b20014180026a41186a200141e0016a41186a29030037030020014180026a41106a200141e0016a41106a29030037030020014180026a41086a200141e0016a41086a290300370300200120012903e00137038002200141e0006a41186a220a4200370300200141e0006a41106a220b4200370300200141e0006a41086a220442003703002001420037036041a7b3c500ad4280808080c00084100c22092900002105200141c0026a41086a2203200941086a290000370300200120053703c0022009102320042003290300370300200120012903c00237036041e0bcc500ad4280808080c00184100c220929000021052003200941086a290000370300200120053703c00220091023200620012903c002370000200641086a2003290300370000200141a0026a41086a2004290300370300200141a0026a41106a200b290300370300200141a0026a41186a200a290300370300200120012903603703a0022001200141a0026a412010cd0141002109200141e0006a2001280204410020012802001b220a108804200141a0026a2001280260220b20012802681089040240024020012802a00222040d00200141003602d802200142013703d00241012104410021030c010b200120012902a40222053702d402200120043602d0022005422088a721032005a721090b02402001280264450d00200b10230b024002402003418002490d00412010212203450d072003200129038002370000200341186a20014180026a41186a290300370000200341106a20014180026a41106a290300370000200341086a20014180026a41086a290300370000200141e0006a200a41016a220a10880420012802602104200120012802683602a402200120043602a00220034101200141a0026a109c0202402001280264450d00200410230b20031023200141e0006a41186a220b4200370300200141e0006a41106a220c4200370300200141e0006a41086a220442003703002001420037036041a7b3c500ad4280808080c00084100c22092900002105200141c0026a41086a2203200941086a290000370300200120053703c0022009102320042003290300370300200120012903c00237036041e0bcc500ad4280808080c00184100c220929000021052003200941086a290000370300200120053703c00220091023200620012903c002370000200641086a2003290300370000200141a0026a41086a2004290300370300200141a0026a41106a200c290300370300200141a0026a41186a200b290300370300200120012903603703a0022001200a3602602007428080808080048420084280808080c00084100e200141d0026a21030c010b200141e0006a41186a220b20014180026a41186a290300370300200141e0006a41106a220c20014180026a41106a290300370300200141e0006a41086a220220014180026a41086a2903003703002001200129038002370360024020032009470d00200141d0026a20094101109a0120012802d002210420012802d80221030b200420034105746a22092001290360370000200941186a200b290300370000200941106a200c290300370000200941086a20022903003700002001200341016a22093602d802200141e0006a200a10880420012802602103200120012802683602a402200120033602a00220042009200141a0026a109c0202402001280264450d00200310230b200141d0026a21030b200341046a28020041ffffff3f71450d00200328020010230b200141e0006a41186a220a4200370300200141e0006a41106a220b4200370300200141e0006a41086a220442003703002001420037036041a7b3c500ad4280808080c00084100c22092900002105200141c0026a41086a2203200941086a290000370300200120053703c0022009102320042003290300370300200120012903c00237036041abb3c500ad4280808080800184100c220929000021052003200941086a290000370300200120053703c00220091023200620012903c002370000200641086a2003290300370000200141a0026a41086a2004290300370300200141a0026a41106a200b290300370300200141a0026a41186a200a290300370300200120012903603703a002200742808080808004841011200141e0026a24000f0b2006200341c4e8c2001030000b2006200341d4e8c2001030000b2004200341e4e8c2001030000b41e093c700412b418c94c700102d000b102a000ba383020c047f017e017f017e037f017e097f017e1f7f047e067f027e230041800d6b2201240010ea030240024002400240024002400240024002400240024020004101460d00200141e8036a41186a4200370300200141e8036a41106a22024200370300200141e8036a41086a22034200370300200142003703e80341a7b3c500ad4280808080c00084100c220429000021052003200441086a290000370300200120053703e8032004102341a4bbc500ad4280808080b00184100c22042900002105200141d8076a41086a2206200441086a290000370300200120053703d80720041023200220012903d8072205370300200141c8036a41086a2003290300370300200141c8036a41106a2005370300200141c8036a41186a2006290300370300200120012903e8033703c803200141b8036a200141c8036a10fa02420020012903c003420020012802b8031b220510eb037d220720072005561b42d804540d00200141c00b6a41186a22084200370300200141c00b6a41106a22094200370300200141c00b6a41086a22034200370300200142003703c00b41db97c700ad4280808080f000842205100c220a290000210720014198066a41086a2204200a41086a2900003703002001200737039806200a10232003200429030037030020012001290398063703c00b41bcbcc300ad4280808080c001842207100c220a290000210b2004200a41086a2900003703002001200b37039806200a10232009200129039806220b370300200141a00a6a41086a220c2003290300370300200141a00a6a41106a220d200b370300200141a00a6a41186a220e2004290300370300200120012903c00b3703a00a200141b0036a200141a00a6a412010cd0120012802b403210f20012802b0032110200842003703002009420037030020034200370300200142003703c00b2005100c220a290000210b2004200a41086a2900003703002001200b37039806200a10232003200429030037030020012001290398063703c00b41d0bcc300ad4280808080d00184100c220a290000210b2004200a41086a2900003703002001200b37039806200a10232009200129039806220b370300200c2003290300370300200d200b370300200e2004290300370300200120012903c00b3703a00a200141a00a6a1081032111200842003703002009420037030020034200370300200142003703c00b2005100c220a290000210b2003200a41086a2900003703002001200b3703c00b200a10232007100c220a29000021072006200a41086a290000370300200120073703d807200a1023200920012903d80722073703002004200329030037030020014198066a41106a220a200737030020014198066a41186a220c2006290300370300200120012903c00b37039806200141a8036a20014198066a412010cd0120012802ac03211220012802a8032113200842003703002009420037030020034200370300200142003703c00b4180cdc200ad4280808080800184100c220d29000021072003200d41086a290000370300200120073703c00b200d102341d7a1c200ad4280808080c00084100c220d29000021072006200d41086a290000370300200120073703d807200d1023200920012903d807220737030020042003290300370300200a2007370300200c2006290300370300200120012903c00b37039806200141c00b6a20014198066a10ad0220012802c00b211420012902c40b2115200842003703002009420037030020034200370300200142003703c00b2005100c220829000021052003200841086a290000370300200120053703c00b2008102341bbacc300ad4280808080a00184100c220829000021052006200841086a290000370300200120053703d80720081023200920012903d807220537030020042003290300370300200a2005370300200c2006290300370300200120012903c00b37039806200141c00b6a20014198066a412010890220012802c00b2203410120031b211620012902c40b420020031b2205a721170240024002402005422088a72203450d002016200341057422186a2119200141dc056a211a200141c00b6a41206a210d20014190056a410472210a200141e8046a410472210441002108410221030340200141b8046a41186a201620086a220641186a220c290000370300200141b8046a41106a200641106a220e290000370300200141b8046a41086a200641086a221b290000370300200120062900003703b80420042006290000370000200441086a201b290000370000200441106a200e290000370000200441186a200c29000037000020012003417e6a220e3602e8044100210c0240200e200410ac020d0020014190056a41206a200141e8046a41206a28020036020020014190056a41186a200141e8046a41186a29030037030020014190056a41106a200141e8046a41106a29030037030020014190056a41086a200141e8046a41086a290300370300200120012903e80437039005200141c8036a41186a220c200a41186a221b290200370300200141c8036a41106a221c200a41106a221d290200370300200141c8036a41086a221e200a41086a221f2902003703002001200a2902003703c803200141c00b6a41186a220e201b290000370300200141c00b6a41106a221b201d290000370300200141c00b6a41086a221d201f2900003703002001200a2900003703c00b200141b8056a200141c00b6a108f02200141e8036a41186a221f200c290300370300200141e8036a41106a2220201c290300370300200141e8036a41086a221c201e290300370300200120012903c8033703e80320012802d805220c450d00200d20012903b805370300200d41186a200141b8056a41186a290300370300200d41106a200141b8056a41106a290300370300200d41086a200141b8056a41086a290300370300200e201f290300370300201b2020290300370300201d201c290300370300200141d8046a41086a221c201a41086a280200360200200120012903e8033703c00b2001201a2902003703d804200141a00a6a41386a221e200141c00b6a41386a290300370300200141a00a6a41306a221f200141c00b6a41306a290300370300200141a00a6a41286a2220200141c00b6a41286a290300370300200141a00a6a41206a2221200d290300370300200141a00a6a41186a2222200e290300370300200141a00a6a41106a220e201b290300370300200141a00a6a41086a221b201d290300370300200120012903c00b3703a00a20014198066a41386a201e29030037030020014198066a41306a201f29030037030020014198066a41286a202029030037030020014198066a41206a202129030037030020014198066a41186a202229030037030020014198066a41106a200e29030037030020014198066a41086a201b290300370300200120012903a00a3703980620014188066a41086a201c280200360200200120012903d804370388060b200141d8076a41086a20014198066a41086a290300370300200141d8076a41106a20014198066a41106a290300370300200141d8076a41186a20014198066a41186a290300370300200141d8076a41206a20014198066a41206a290300370300200141d8076a41286a20014198066a41286a290300370300200141d8076a41306a20014198066a41306a290300370300200141d8076a41386a20014198066a41386a290300370300200141f8056a41086a20014188066a41086a28020036020020012001290398063703d80720012001290388063703f805200c0d02200341016a21032018200841206a2208470d000b0b20014100360290042001420837038804201741ffffff3f71450d01201610230c010b20014180096a41386a2204200141d8076a41386a29030037030020014180096a41306a220a200141d8076a41306a29030037030020014180096a41286a220e200141d8076a41286a29030037030020014180096a41206a221b200141d8076a41206a29030037030020014180096a41186a221d200141d8076a41186a29030037030020014180096a41106a221c200141d8076a41106a29030037030020014180096a41086a221e200141d8076a41086a290300370300200141a8046a41086a221f200141f8056a41086a280200360200200120012903d80737038009200120012903f8053703a804200141e8056a41086a2220201f280200360200200120012903a8043703e805200141c00b6a41086a221f201e290300370300200141c00b6a41106a221e201c290300370300200141c00b6a41186a221c201d290300370300200141c00b6a41206a221a201b290300370300200141c00b6a41286a221b200e290300370300200141c00b6a41306a220e200a290300370300200141c00b6a41386a220a200429030037030020012001290380093703c00b20014198066a41086a22042020280200360200200120012903e8053703980641d0001021221d450d07201d20012903c00b370300201d200c360240201d200129039806370244201d41386a200a290300370300201d41306a200e290300370300201d41286a201b290300370300201d41206a201a290300370300201d41186a201c290300370300201d41106a201e290300370300201d41086a201f290300370300201d41cc006a2004280200360200200142818080801037029c042001201d360298040240201841606a2008460d00200641206a2104201820086b41606a211b200141dc056a211a20014190056a410472210a200141e8046a41047221060340200141b8046a41186a200441186a2208290000370300200141b8046a41106a200441106a220c290000370300200141b8046a41086a200441086a220e290000370300200120042900003703b80420042900002105200641186a200829000037000020062005370000200641086a200e290000370000200641106a200c29000037000020012003417f6a220c3602e804410021080240200c200610ac020d0020014190056a41206a200141e8046a41206a28020036020020014190056a41186a200141e8046a41186a29030037030020014190056a41106a200141e8046a41106a29030037030020014190056a41086a200141e8046a41086a290300370300200120012903e80437039005200141c8036a41186a2208200a41186a220e290200370300200141c8036a41106a221c200a41106a2218290200370300200141c8036a41086a221e200a41086a221f2902003703002001200a2902003703c803200141c00b6a41186a220c200e290000370300200141c00b6a41106a220e2018290000370300200141c00b6a41086a2218201f2900003703002001200a2900003703c00b200141b8056a200141c00b6a108f02200141e8036a41186a221f2008290300370300200141e8036a41106a2220201c290300370300200141e8036a41086a221c201e290300370300200120012903c8033703e80320012802d8052208450d00200d20012903b805370300200d41186a200141b8056a41186a290300370300200d41106a200141b8056a41106a290300370300200d41086a200141b8056a41086a290300370300200c201f290300370300200e20202903003703002018201c290300370300200141d8046a41086a221c201a41086a280200360200200120012903e8033703c00b2001201a2902003703d804200141a00a6a41386a221e200141c00b6a41386a290300370300200141a00a6a41306a221f200141c00b6a41306a290300370300200141a00a6a41286a2220200141c00b6a41286a290300370300200141a00a6a41206a2221200141c00b6a41206a290300370300200141a00a6a41186a2222200c290300370300200141a00a6a41106a220c200e290300370300200141a00a6a41086a220e2018290300370300200120012903c00b3703a00a20014198066a41386a201e29030037030020014198066a41306a201f29030037030020014198066a41286a202029030037030020014198066a41206a202129030037030020014198066a41186a202229030037030020014198066a41106a200c29030037030020014198066a41086a200e290300370300200120012903a00a3703980620014188066a41086a201c280200360200200120012903d804370388060b200141d8076a41086a20014198066a41086a290300370300200141d8076a41106a20014198066a41106a290300370300200141d8076a41186a20014198066a41186a290300370300200141d8076a41206a20014198066a41206a290300370300200141d8076a41286a20014198066a41286a290300370300200141d8076a41306a20014198066a41306a290300370300200141d8076a41386a20014198066a41386a290300370300200141f8056a41086a20014188066a41086a28020036020020012001290398063703d80720012001290388063703f805024020080d00200441206a2104200341016a2103201b41606a221b0d010c020b0b20014180096a41386a2223200141d8076a41386a221f29030037030020014180096a41306a2224200141d8076a41306a222029030037030020014180096a41286a2225200141d8076a41286a221a29030037030020014180096a41206a2226200141d8076a41206a222129030037030020014180096a41186a2227200141d8076a41186a222229030037030020014180096a41106a2228200141d8076a41106a222929030037030020014180096a41086a222a200141d8076a41086a222b290300370300200141a8046a41086a222c200141f8056a41086a222d280200360200200120012903d80737038009200120012903f8053703a804200141e8056a41086a222e202c280200360200200120012903a8043703e805200441206a2104200141dc056a212f20014190056a410472210a200141e8046a41047221064101210c410121300340200141c00b6a41086a2218202a290300370300200141c00b6a41106a221c2028290300370300200141c00b6a41186a221e2027290300370300200141c00b6a41206a22312026290300370300200141c00b6a41286a22322025290300370300200141c00b6a41306a22332024290300370300200141c00b6a41386a2234202329030037030020012001290380093703c00b20014198066a41086a221b202e280200360200200120012903e8053703980602402030200c470d0020014198046a200c410110b401200128029804211d0b201d203041d0006c6a220c20012903c00b370300201c2903002105201e29030021072031290300210b20322903002135203329030021362034290300213720182903002138200c2008360240200c41086a2038370300200c200129039806370244200c41cc006a201b280200360200200c41386a2037370300200c41306a2036370300200c41286a2035370300200c41206a200b370300200c41186a2007370300200c41106a20053703002001203041016a22303602a00420042019460d010340200141b8046a41186a200441186a2208290000370300200141b8046a41106a200441106a220c290000370300200141b8046a41086a200441086a220e290000370300200120042900003703b804200120033602e804200e2900002105200c29000021072004290000210b200641186a2008290000370000200641106a2007370000200641086a20053700002006200b3700004100210802402003200610ac020d0020014190056a41206a200141e8046a41206a28020036020020014190056a41186a200141e8046a41186a29030037030020014190056a41106a200141e8046a41106a29030037030020014190056a41086a200141e8046a41086a290300370300200120012903e80437039005200141c8036a41186a2208200a41186a220c290200370300200141c8036a41106a220e200a41106a2239290200370300200141c8036a41086a223a200a41086a223b2902003703002001200a2902003703c803201e200c290000370300201c20392900003703002018203b2900003703002001200a2900003703c00b200141b8056a200141c00b6a108f02200141e8036a41186a220c2008290300370300200141e8036a41106a2239200e290300370300200141e8036a41086a220e203a290300370300200120012903c8033703e80320012802d8052208450d00200d20012903b805370300200d41186a200141b8056a41186a290300370300200d41106a200141b8056a41106a290300370300200d41086a200141b8056a41086a290300370300201e200c290300370300201c20392903003703002018200e290300370300200141d8046a41086a220c202f41086a280200360200200120012903e8033703c00b2001202f2902003703d804200141a00a6a41386a220e2034290300370300200141a00a6a41306a22392033290300370300200141a00a6a41286a223a2032290300370300200141a00a6a41206a223b2031290300370300200141a00a6a41186a223c201e290300370300200141a00a6a41106a223d201c290300370300200141a00a6a41086a223e2018290300370300200120012903c00b3703a00a20014198066a41386a200e29030037030020014198066a41306a203929030037030020014198066a41286a203a29030037030020014198066a41206a203b29030037030020014198066a41186a203c29030037030020014198066a41106a203d290300370300201b203e290300370300200120012903a00a3703980620014188066a41086a200c280200360200200120012903d804370388060b202b201b290300370300202920014198066a41106a290300370300202220014198066a41186a290300370300202120014198066a41206a290300370300201a20014198066a41286a290300370300202020014198066a41306a290300370300201f20014198066a41386a290300370300202d20014188066a41086a28020036020020012001290398063703d80720012001290388063703f805024020080d00200341016a21032019200441206a2204470d010c030b0b2023201f290300370300202420202903003703002025201a290300370300202620212903003703002027202229030037030020282029290300370300202a202b290300370300202c202d280200360200200120012903d80737038009200120012903f8053703a804202e202c280200360200200120012903a8043703e805200441206a2104200341016a2103200128029c04210c0c000b0b0240201741ffffff3f71450d00201610230b20014188046a41086a20014198046a41086a2802003602002001200129039804370388040b200141c00b6a41186a22084200370300200141c00b6a41106a220a4200370300200141c00b6a41086a22034200370300200142003703c00b41db97c700ad4280808080f00084100c220429000021052003200441086a290000370300200120053703c00b2004102341bcbcc300ad4280808080c00184100c22042900002105200141d8076a41086a2206200441086a290000370300200120053703d80720041023200920012903d807370000200941086a200629030037000020014198066a41086a200329030037030020014198066a41106a200a29030037030020014198066a41186a2008290300370300200120012903c00b37039806200141a0036a20014198066a412010cd0120012802a403210420012802a00321084180cdc200ad4280808080800184100c22032900002105200141a00a6a41086a200341086a290000370300200120053703a00a2003102341d4bec200ad4280808080a00284100c220329000021052006200341086a290000370300200120053703d8072003102320012004410020081b3602b8052001200141b8056aad22054280808080c00084100d22032900003703800920031023200141cc0b6a200141bc056a360200200141003a00d00b200120014180096a41086a220d3602c40b2001200141b8056a3602c80b200120014180096a3602c00b20014198066a200141c00b6a106520012802a006220a41206a2204417f4c0d01200128029806210c0240024002402004450d00200410212203450d092004410f4d0d01200421060c020b200441017422034110200341104b1b2206102122030d010c0c0b200441017422064110200641104b1b22064100480d0a20042006460d0020032004200610252203450d0b0b200320012903a00a370000200341086a200141a00a6a41086a2903003700000240024020064170714110460d00200621080c010b200641017422084120200841204b1b22084100480d0a20062008460d0020032006200810252203450d0b0b200320012903d807370010200341186a200141d8076a41086a2903003700000240200841606a200a4f0d00200a415f4b0d0a200841017422062004200620044b1b22064100480d0a20082006460d0020032008200610252203450d0b0b200341206a200c200a10a1051a0240200128029c06450d00200c10230b2004ad4220862003ad84101220031023200141c00b6a41186a22084200370300200141c00b6a41106a220a4200370300200141c00b6a41086a22034200370300200142003703c00b41db97c700ad4280808080f00084100c220429000021072003200441086a290000370300200120073703c00b2004102341bcbcc300ad4280808080c00184100c22042900002107200141d8076a41086a2206200441086a290000370300200120073703d80720041023200920012903d807370000200941086a200629030037000020014198066a41086a200329030037030020014198066a41106a200a29030037030020014198066a41186a2008290300370300200120012903c00b3703980620014198036a20014198066a412010cd01200128029c03210420012802980321084180cdc200ad4280808080800184100c22032900002107200141a00a6a41086a200341086a290000370300200120073703a00a2003102341b4a5c200ad4280808080e00184100c220329000021072006200341086a290000370300200120073703d8072003102320012004410020081b3602b805200120054280808080c00084100d22032900003703800920031023200141cc0b6a200141bc056a360200200141003a00d00b2001200d3602c40b2001200141b8056a3602c80b200120014180096a3602c00b20014198066a200141c00b6a106520012802a006220a41206a2204417f4c0d01200128029806210c0240024002402004450d00200410212203450d092004410f4d0d01200421060c020b200441017422034110200341104b1b220610212203450d0c0c010b200441017422064110200641104b1b22064100480d0a20042006460d0020032004200610252203450d0b0b200320012903a00a370000200341086a200141a00a6a41086a2903003700000240024020064170714110460d00200621080c010b200641017422084120200841204b1b22084100480d0a20062008460d0020032006200810252203450d0b0b200320012903d807370010200341186a200141d8076a41086a2903003700000240200841606a200a4f0d00200a415f4b0d0a200841017422062004200620044b1b22064100480d0a20082006460d0020032008200610252203450d0b0b200341206a200c200a10a1051a0240200128029c06450d00200c10230b2015420020141b21052004ad4220862003ad841012200310230240024002400240024002400240200128029004450d00200141c00b6a20014188046a10ec03200141a3066a200141c00b6a41086a280200360000200120012903c00b37009b06200141073a00c00b200141cc0b6a20014198066a41076a290000370000200141023a00c40b20012001290098063700c50b200141c00b6a10e001200141a0056a20014188046a41086a28020036020020012005422088a722393602940520012012410020131b220a36029005200120012903880437039805200141e8056a20014190056a41086a10ec032001410036029006200142013703880620012802e805212b20012802ec05212d20012802f0052106410410212203450d0d2003200a36000020014284808080c0003702dc07200120033602d807200141c00b6a41b599c50010b60320014198066a20012802c00b220420012802c80b10b703200129029c06420020012802980622031b21072003410120031b2108024020012802c40b450d00200410230b200120074220883e029c062001200836029806200141c00b6a20014198066a10b803200141c00b6a41086a280200210420012802c40b210c20012802c00b2103200141c00b6a41b599c500200141d8076a10b90320014198066a20012802c00b220e20012802c80b1089022004410020031b210d200c410020031b210c200129029c06420020012802980622041b210b2003410420031b21032004410120041b2121024020012802c40b450d00200e10230b200141a0096a200d3602002001419c096a200c36020020014190096a200b37030020014180096a41086a200141d8076a41086a280200360200200120012903d8073703800920012003360298092001202136028c0902402007a7450d00200810230b2006450d01200b422088a7211b20014198096a211920014180096a410c6a2129202b200641d0006c6a2116200141c00b6a41d0006a211a200141c00b6a410c6a211d200141d8076a41c4006a211841002122202b210c0340200141c00b6a41386a2204200c220341386a290300370300200141c00b6a41306a2206200341306a290300370300200141c00b6a41286a2208200341286a290300370300200141c00b6a41206a220d200341206a290300370300200141c00b6a41186a220e200341186a290300370300200141c00b6a41106a221c200341106a290300370300200141c00b6a41086a221e200341086a290300370300200141d8046a41086a221f200341cc006a280200360200200120032903003703c00b2001200341c4006a2902003703d804200341d0006a210c200341c0006a2802002203450d03200141a00a6a41386a22202004290300370300200141a00a6a41306a22042006290300370300200141a00a6a41286a22062008290300370300200141a00a6a41206a2208200d290300370300200141a00a6a41186a220d200e290300370300200141a00a6a41106a220e201c290300370300200141a00a6a41086a221c201e290300370300200141a8046a41086a221e201f280200360200200120012903c00b3703a00a200120012903d8043703a804200141d8076a41386a2020290300370300200141d8076a41306a2004290300370300200141d8076a41286a2006290300370300200141d8076a41206a2008290300370300200141d8076a41186a200d290300370300200141d8076a41106a200e290300370300200141d8076a41086a201c290300370300200120012903a00a3703d8072001200336029808201820012903a804370200201841086a201e280200360200410410212203450d0e2003200a360000201d41002900b59945370000201d41086a41002900bd994537000020014284808080c0003702c40b200120033602c00b2001200141d8076a3602dc0b200141b8056a200141c00b6a10ba0320031023200141c00b6a200141b8056a10bb0320014190036a20012802c00b220420012802c80b419ca8c70041004100108c012001280290032103024020012802c40b450d00200410230b024002400240024020034101460d0020014198066a200141d8076a41d00010a1051a200141e8046a20014188066a108e02200141c00b6a20014198066a41d00010a1051a201a41086a200141e8046a41086a280200360200201a20012903e80437020020014198066a200141b8056a10bb032001280298062103200120012802a0063602ec04200120033602e804200141c00b6a200141e8046a10bc030240200128029c06450d00200310230b024020012802840c2203450d00200341306c450d0020012802800c10230b024020012802940c41ffffff3f71450d0020012802900c10230b200141b8046a41186a221c200141b8056a41186a290300370300200141b8046a41106a221e200141b8056a41106a290300370300200141b8046a41086a221f200141b8056a41086a290300370300200120012903b8053703b804200128029809210d41002103024020012802a009220e41014b0d000240200e0e020003000b200141c8036a41186a201c290300370300200141c8036a41106a201e290300370300200141c8036a41086a201f290300370300200120012903b8043703c803410021030c030b200e2104034020032004410176220620036a2208200d200841246c6a280200200a4b1b2103200420066b220441014b0d000c020b0b200128029c082203450d02200341306c450d0220012802980810230c020b0240200d200341246c6a2802002204200a460d0020032004200a496a21030b200141c8036a41186a201c290300370300200141c8036a41106a201e290300370300200141c8036a41086a201f290300370300200120012903b8043703c803200e20034f0d002003200e1038000b0240200e200128029c09470d002019200e410110a201200128029409211b200128029809210d0b200d200341246c6a220441246a2004200e20036b41246c10a2051a2004200a360200200420012903c8033702042004410c6a200141c8036a41086a290300370200200441146a200141c8036a41106a2903003702002004411c6a200141c8036a41186a2903003702002001200e41016a3602a009200141e8036a41186a2204201c290300370300200141e8036a41106a2206201e290300370300200141e8036a41086a2208201f290300370300200120012903b8043703e8030240201b200128029009470d002029201b4101109a01200128029409211b0b200128028c092221201b4105746a220320012903e803370000200341186a2004290300370000200341106a2006290300370000200341086a2008290300370000410121222001201b41016a221b360294090b200c2016470d000b2016210c0c020b200141013a00c40b200141073a00c00b200141c00b6a10e001200128028c042203450d05200341d0006c450d0520012802880410230c050b202d450d01202d41d0006c450d01202b10230c010b02402016200c460d000340200c220341d0006a210c0240200341c4006a2802002204450d00200441306c450d00200341c0006a28020010230b2016200c470d000b0b0240202d450d00202d41d0006c450d00202b10230b2022410171450d00200141f8056a20212021201b4105746a10bd03200141c00b6a41206a20014180096a41206a2802002203360200200141c00b6a41186a20014180096a41186a2903002207370300200141c00b6a41106a20014180096a41106a290300370300200141c00b6a41086a20014180096a41086a29030037030020012001290380093703c00b200141d8076a2007a72206200310be0320014198066a41b599c50010b6032001280298062103200120012802a0063602a40a200120033602a00a20012802d807220420012802e007200141a00a6a10c8020240200128029c06450d00200310230b024020012802dc07450d00200410230b20014198066a41b599c500200141c00b6a10b9032001280298062103200120012802a0063602dc07200120033602d80720012802cc0b2204200141d40b6a280200200141d8076a10bf030240200128029c06450d00200310230b024020012802c40b450d0020012802c00b10230b0240200141d00b6a28020041ffffff3f71450d00200410230b0240200141dc0b6a2802002203450d00200341246c450d00200610230b20012802f805220c0d010c020b200141003602f8050240200128028409450d0020012802800910230b024020012802900941ffffff3f71450d00202110230b200128029c092203450d01200341246c450d0120012802980910230c010b20012802fc05210e41002106024002402039410a6e417f7320014180066a28020022086a220420084b0d0020394101203941014b1b2203418094ebdc036e220620032006418094ebdc036c476a22064101200641014b1b220620034b0d0120012003200441036c220420032004491b20066ead428094ebdc037e200320066ead8042ffffffff0f834280bbb0217e428094ebdc0380a722033602c00b2001418094ebdc033602c40b200141c00b6a2003418094ebdc034b4102746a28020021060b200141003602c80b200142043703c00b200141c00b6a41002008107920012802c00b210d20012802c80b211b0240024020080d0020012802c40b2104200c4100200d201b200a10c00321060c010b200d201b4102746a210320082104034020032006360200200341046a21032004417f6a22040d000b20012802c40b2104200c2008200d201b20086a200a10c00321060b410410212203450d092003200a360000200141c80b6a4284808080c000370300200141d00b6a41002900b59945370300200141d80b6a41002900bd9945370300200141e00b6a20063a0000200120033602c40b200141043a00c00b200141c00b6a10e0010240200441ffffffff0371450d00200d10230b02402008450d00200841e0006c2104200c41d4006a210303400240200341706a2802002206450d00200641306c450d002003416c6a28020010230b0240200328020041ffffff3f71450d002003417c6a28020010230b200341e0006a2103200441a07f6a22040d000b0b0240200e450d00200e41e0006c450d00200c10230b20012802980521080240200141a0056a2802002203450d00200341d0006c2104200841c4006a21030340024020032802002206450d00200641306c450d002003417c6a28020010230b200341d0006a2103200441b07f6a22040d000b0b2001419c056a2802002203450d02200341d0006c450d02200810230c020b41f0a6c700411941f4aac700102d000b20012802980521080240200141a0056a2802002203450d00200341d0006c2104200841c4006a21030340024020032802002206450d00200641306c450d002003417c6a28020010230b200341d0006a2103200441b07f6a22040d000b0b02402001419c056a2802002203450d00200341d0006c450d00200810230b4193bbc000ad4280808080c00184100a4184bbc000ad4280808080f00184100a0b0240200542ffffff3f83500d002014410120141b10230b200f410020101b210c200141b8046a41186a4200370300200141b8046a41106a22064200370300200141b8046a41086a22034200370300200142003703b804418fcdc200ad4280808080f00084100c220429000021052003200441086a290000370300200120053703b8042004102341b8dbc100ad4280808080900184100c22042900002105200141d8076a41086a220e200441086a290000370300200120053703d80720041023200620012903d8072205370300200141c00b6a41086a22082003290300370300200141c00b6a41106a220a2005370300200141c00b6a41186a220d200e290300370300200120012903b8043703c00b20014198066a200141c00b6a10ba01024020012903980622054202510d0020012903a0062107200141c00b6a20014198066a41106a280200220e41016a10c20120014188036a20012802c00b220420012802c80b10cd01200128028c0321062001280288032103024020012802c40b450d00200410230b20034101470d002006200c41016a470d0020054201520d00200141e8036a41186a22044200370300200141e8036a41106a22064200370300200141e8036a41086a22034200370300200142003703e80341b494c700ad4280808080900184100c221b29000021052003201b41086a290000370300200120053703e803201b102341bd94c700ad42808080803084100c22162900002105200141d8076a41086a221b201641086a290000370300200120053703d80720161023200220012903d807370000200241086a221d201b290300370000200141c8036a41086a22182003290300370300200141c8036a41106a221c2006290300370300200141c8036a41186a221e2004290300370300200120012903e8033703c803200141f8026a200141c8036a10fa02200141d0026a200129038003420020012802f8021b220542e80780220b420042e807420010a605200141c00b6a200e10ca01200141e0026a20012802c00b221f20012802c80b10d70120012903d00222152005200b4298787e7c42ff07837c2205427f200141d0026a41086a2903002005201554ad7c501b20077d2135200141e0026a41106a290300420020012802e00222161b210520012903e802420020161b2115024020012802c40b450d00201f10230b200442003703002006420037030020034200370300200142003703e80341bdadc500ad4280808080800184100c221629000021072003201641086a290000370300200120073703e8032016102341c5adc500ad4280808080d00184100c22162900002107201b201641086a290000370300200120073703d80720161023200220012903d807370000201d201b29030037000020182003290300370300201c2006290300370300201e2004290300370300200120012903e8033703c803200141b8026a200141c8036a412010d701200141a8026a20012903c002420020012802b80222031b2207200141b8026a41106a290300420020031b220b428094ebdc03420010a70520014198026a20012903a8022237200141a8026a41086a29030022384280ec94a37c427f10a605200b200520152007562005200b562005200b511b22031b21052007201520031b211520012903980220077c21362035428086ebc7f5002035428086ebc7f500541b42058842ffffffff0f83428094ebdc037e4298ac9fd60380213f4100210441d87d210302400240034020014188026a2037203820034180cdc2006a3502002207420010a60520042015200129038802220b200720367e2207428094ebdc03802235a7417f2007428080808080c0b2cd3b541b200720354280ec94a37c7e7c4280cab5ee01566aad7c22075a200520014188026a41086a2903002007200b54ad7c220b5a2005200b5122061b6a210420152007542005200b5420061b0d01200341086a22030d000b200141f8016a2037203842e8aafa0b420010a60520014180026a29030020012903f8012207203642e8aafa0b7e2205428094ebdc0380220ba7417f2005428080808080c0b2cd3b541b2005200b4280ec94a37c7e7c4280cab5ee01566aad7c2205200754ad7c21070c010b02402004417f6a220320044d0d00200141f8006a2037203842c0f0f50b420010a60520014180016a2903002001290378220720364228802205a7417f203642c0f0f50b7e220b428080808080c0b2cd3b541b200b20054280ec94a37c7e7c4280cab5ee01566aad7c2205200754ad7c21070c010b02400240200341244b0d00200141e8016a203720382003410374220641d8cac2006a280200221bad2207420010a605200141c8016a201520012903e801220b200720367e2207428094ebdc03802235a7417f2007428080808080c0b2cd3b541b200720354280ec94a37c7e7c4280cab5ee01566aad7c220720152007562005200141e8016a41086a2903002007200b54ad7c220b562005200b511b22031b22352007201520031b22077d22152005200b20031b200b200520031b7d2035200754ad7d41002004410374221641d8cac2006a2802002204201b6b221b201b20044b1b22044101200441014b1bad2205420010a705200141b8016a20012903c8012207200141c8016a41086a29030022352005420010a605200141d8016a20372038200641dccac2006a2802002204ad2240420010a60520014188016a20354200201641dccac2006a28020022062004200620044b221b1b20042006201b1b6bad220b420010a605200141a8016a20074200200b420010a60520014198016a420042002007420010a605427f427f200141a8016a41086a29030022072001290388012001290398017c7c223520012903900120012903a00184420052203520075472221b1b2235427f20012903a801201b1b2207201520012903b8017d200b7e2005807c2205200754221bad7c220b201b200b203554200520075a1b221b1b2115427f2005201b1b210b200141d8016a41086a29030020012903d8012235204020367e2205428094ebdc03802207a7417f2005428080808080c0b2cd3b541b200520074280ec94a37c7e7c4280cab5ee01566aad7c2207203554ad7c2105200620044d2003730d014200200520157d2007200b54ad7d22152007200b7d220b200756201520055620152005511b22031b21074200200b20031b21050c020b2003412541f8f6c3001030000b427f200520157c2007200b7c220b2007542203ad7c22072003200720055420072005511b22031b2107427f200b20031b21050b200141e8006a20052007428094ebdc03420010a705200141d8006a20012903682207200141e8006a41086a290300220b4280ec94a37c427f10a605200141c8006a2007200b203f420010a60520014198066a200e10cb01200128029806210320013502a006210720012001290348220b203f200520012903587c7e2205428094ebdc03802215a7417f2005428080808080c0b2cd3b541b200520154280ec94a37c7e7c4280cab5ee01566aad7c22053703c00b2001200141c8006a41086a2903002005200b54ad7c3703c80b20074220862003ad84200141c00b6aad4280808080800284100e200128029c06450d00200310230b200d4200370300200a420037030020084200370300200142003703c00b41db97c700ad4280808080f00084100c2204290000210520014198066a41086a2203200441086a2900003703002001200537039806200410232008200329030037030020012001290398063703c00b41f8afc300ad4280808080a00184100c220429000021052003200441086a2900003703002001200537039806200410232009200129039806370000200941086a2003290300370000200141a00a6a41086a2008290300370300200141a00a6a41106a200a290300370300200141a00a6a41186a200d290300370300200120012903c00b3703a00a200141203602ec042001200141a00a6a3602e804200141b8056a200141a00a6aad428080808080048422151010108b010240024020012802b805220a0d00410021080c010b20012802bc05210d2001200141c0056a280200360294052001200a36029005200141c0006a20014190056a1088010240024020012802400d002001280244220e200128029405220641c0016e22032003200e4b1bad42c0017e2205422088a70d042005a72203417f4c0d040240024020030d00410121080c010b200310212208450d0a0b200141003602880920012008360280092001200341c0016e360284090240200e450d00200141c00b6a41206a211d200141d8076a4101722118410021164100211b0240034041002103200141003a00f807201b41016a211b02400340200141003a00b80420062003460d01200141d8076a20036a20012802900522042d00003a00002001200441016a360290052001200341016a22043a00f8072004210320044120470d000b200141e8036a41086a2203200141d8076a41086a290300370300200141e8036a41106a221c200141d8076a41106a290300370300200141e8036a41186a221e200141d8076a41186a290300370300200120012903d8073703e8032001200620046b36029405200141d8076a20014190056a10e50220012d00d8074101460d02200141c00b6a41186a201e290300370300200141c00b6a41106a201c290300370300200141c00b6a41086a2003290300370300200120012903e8033703c00b201d201841a00110a1051a20014198066a200141c00b6a41c00110a1051a02402016200128028409470d0020014180096a2016410110b101200128028009210820012802880921160b2008201641c0016c6a20014198066a41c00110a1051a2001201641016a221636028809201b200e460d0320012802940521060c010b0b2001410036029405200341ff0171450d00200141003a00f8070b02402001280284092203450d00200341c0016c450d00200810230b0c010b200129028409210520080d010b41002108200141003602a00620014201370398062001410a3602dc072001200141e8046a3602d807200120014198066a36028009200141d40b6a4101360200200142013702c40b20014180c5c6003602c00b2001200141d8076a3602d00b20014180096a4184a5c200200141c00b6a10311a20013502a00642208620013502980684100a200128029c06450d0020012802980610230b200d450d00200a10230b2011201141ff0171410247712121200141003602c80b200142013703c00b200141c00b6a41002005420020081b2236422088a7222241c0016c220e41c0016e109a012008410120081b211c20012802c80b210620012802c00b212002402022450d00202020064105746a2103200e2108201c2104034020032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200641016a2106200341206a2103200441c0016a2104200841c07e6a22080d000b0b20012802c40b212d200141c00b6a41186a220a4200370300200141c00b6a41106a22084200370300200141c00b6a41086a22044200370300200142003703c00b41db97c700ad4280808080f000842205100c220d290000210720014198066a41086a2203200d41086a2900003703002001200737039806200d10232004200329030037030020012001290398063703c00b41bbacc300ad4280808080a00184100c220d29000021072003200d41086a2900003703002001200737039806200d10232009200129039806370000200941086a220d2003290300370000200141a00a6a41086a221b2004290300370300200141a00a6a41106a22162008290300370300200141a00a6a41186a221d200a290300370300200120012903c00b3703a00a200141203602c40b2001200141a00a6a3602c00b20202006200141c00b6a109c0202402021450d00200a42003703002008420037030020044200370300200142003703c00b2005100c220629000021072003200641086a2900003703002001200737039806200610232004200329030037030020012001290398063703c00b41c0bdc300ad4280808080a00284100c220629000021072003200641086a2900003703002001200737039806200610232009200129039806370000200d2003290300370000201b200429030037030020162008290300370300201d200a290300370300200120012903c00b3703a00a200141c00b6a200141a00a6a10ed0320012802c00b2206450d002015101120012902c40b42ffffffff0383500d00200610230b200a42003703002008420037030020044200370300200142003703c00b2005100c220629000021052003200641086a2900003703002001200537039806200610232004200329030037030020012001290398063703c00b41bcbcc300ad4280808080c00184100c220629000021052003200641086a2900003703002001200537039806200610232009200129039806370000200d2003290300370000201b200429030037030020162008290300370300201d200a290300370300200120012903c00b3703a00a2001200c41016a221a3602c00b2015200141c00b6aad22374280808080c00084100e200141e8036a41186a22064200370300200141e8036a41106a220a4200370300200141e8036a41086a22034200370300200142003703e803418fcdc200ad4280808080f00084100c220429000021052003200441086a290000370300200120053703e8032004102341b8dbc100ad4280808080900184100c22042900002105200141d8076a41086a220d200441086a290000370300200120053703d80720041023200220012903d807370000200241086a200d290300370000200141c8036a41086a2003290300370300200141c8036a41106a200a290300370300200141c8036a41186a2006290300370300200120012903e8033703c803200141c00b6a200141c8036a10ba01200141c00b6a4100200828020041016a20012903c00b4202511b10c201200141386a20012802c00b220620012802c80b10cd01200128023c210420012802382103024020012802c40b450d00200610230b024020034101470d0002402004201a460d002004201a4f0d0141d9c1c000ad4280808080800684100a0b201a10e3010b200141e8036a41186a22084200370300200141e8036a41106a220a4200370300200141e8036a41086a22044200370300200142003703e803418fcdc200ad4280808080f00084100c22062900002105200141d8076a41086a2203200641086a290000370300200120053703d8072006102320042003290300370300200120012903d8073703e803418cdbc100ad4280808080a00184100c220629000021052003200641086a290000370300200120053703d80720061023200220012903d807370000200241086a2003290300370000200141c8036a41086a2004290300370300200141c8036a41106a200a290300370300200141c8036a41186a2008290300370300200120012903e8033703c803200141306a200141c8036a412010cd01200c41026a21030240024020012802304101460d00200141b8046a200310cc010c010b200141c00b6a200128023410c201200141286a20012802c00b220620012802c80b10cd01200128022c210a20012802282104024020012802c40b450d00200610230b024020040d00419fcfc000ad4280808080e00684100a4100210a0b200141e8036a41186a220c4200370300200141e8036a41106a220d4200370300200141e8036a41086a22064200370300200142003703e803418fcdc200ad4280808080f00084100c22082900002105200141d8076a41086a2204200841086a290000370300200120053703d8072008102320062004290300370300200120012903d8073703e80341fcdec100ad4280808080800184100c220829000021052004200841086a290000370300200120053703d80720081023200220012903d807370000200241086a2004290300370000200141c8036a41086a2006290300370300200141c8036a41106a200d290300370300200141c8036a41186a200c290300370300200120012903e8033703c80341002003200a6b2204200420034b1b21060240024002404100200141c8036a10f0012204200441ff01714104461b41ff0171220441034b0d00024020040e0400020103000b200641064f0d020b0240200641016a4106490d00200141e8036a41186a22084200370300200141e8036a41106a220a4200370300200141e8036a41086a22044200370300200142003703e803418fcdc200ad4280808080f00084100c22062900002105200141d8076a41086a2203200641086a290000370300200120053703d8072006102320042003290300370300200120012903d8073703e8034194e5c100ad4280808080d00284100c220629000021052003200641086a290000370300200120053703d80720061023200220012903d807370000200241086a2003290300370000200141c8036a41086a2004290300370300200141c8036a41106a200a290300370300200141c8036a41186a2008290300370300200120012903e8033703c803200141013a00b804200141c8036aad4280808080800484200141b8046aad42808080801084100e0b200141003602b8040c020b200141e8036a41186a220a4200370300200141e8036a41106a220c4200370300200141e8036a41086a22064200370300200142003703e803418fcdc200ad4280808080f00084100c22082900002105200141d8076a41086a2204200841086a290000370300200120053703d8072008102320062004290300370300200120012903d8073703e80341fcdec100ad4280808080800184100c220829000021052004200841086a290000370300200120053703d80720081023200220012903d807370000200241086a2004290300370000200141c8036a41086a2006290300370300200141c8036a41106a200c290300370300200141c8036a41186a200a290300370300200120012903e8033703c803200141c8036aad428080808080048410110b200141e8036a41186a220a4200370300200141e8036a41106a220c4200370300200141e8036a41086a22064200370300200142003703e803418fcdc200ad4280808080f00084100c22082900002105200141d8076a41086a2204200841086a290000370300200120053703d8072008102320062004290300370300200120012903d8073703e8034194e5c100ad4280808080d00284100c220829000021052004200841086a290000370300200120053703d80720081023200220012903d807370000200241086a2004290300370000200141c8036a41086a2006290300370300200141c8036a41106a200c290300370300200141c8036a41186a200a290300370300200120012903e8033703c803200141003a00b804200141c8036aad4280808080800484200141b8046aad42808080801084100e200141b8046a200310cc010b201c200e6a21030240024020012802b80422190d00200141c00b6a41186a4200370300200141c00b6a41106a22084200370300200141c00b6a41086a22044200370300200142003703c00b41db97c700ad4280808080f00084100c220629000021052004200641086a290000370300200120053703c00b2006102341bbacc300ad4280808080a00184100c22062900002105200141d8076a41086a220a200641086a290000370300200120053703d80720061023200820012903d807220537030020014198066a41086a200429030037030020014198066a41106a200537030020014198066a41186a200a290300370300200120012903c00b37039806200141c00b6a20014198066a412010890220012902c40b420020012802c00b22041b21352004410120041b212b410021020c010b4101210220012902bc0421352019212b0b200120023a008806200120033602cc032001201c3602c8032001200141c8036a3602ec03200120014188066a3602e803200141003602f004200142013703e804200141e8046a41002035422088a72203410574220641057510b10120012802f004211820012802e804211e02402003450d00201e201841c0016c6a21082018200641606a4105766a213920014198066a4101722116200141c00b6a41206a211d20014180096a4180016a211420014180096a41e0006a212920014180096a41c0006a211f20014180096a41206a2118202b21030340200341086a2900002105200341106a29000021072003290000210b200141b8056a41186a220a200341186a290000370300200141b8056a41106a220c2007370300200141b8056a41086a220d20053703002001200b3703b80520014190056a200141b8056a10860320014198066a200128029005221b20012802980510870320012d009806210e200141d8076a201641a00110a1051a410021040240200e4101470d00200141a00a6a200141d8076a41a00110a1051a410121040b0240200128029405450d00201b10230b0240024020040d0020014180096a410041a00110a0051a0c010b20014180096a200141a00a6a41a00110a1051a0b024020012802e8032d00000d0020012802ec03220e2802002204200e280204460d00200e200441c0016a3602000240024020014180096a200441206a220e460d00200e20014180096a412010a3050d010b02402018200441c0006a220e460d00200e2018412010a3050d010b0240201f200441e0006a220e460d00200e201f412010a3050d010b0240202920044180016a220e460d00200e2029412010a3050d010b2014200441a0016a2204460d0120042014412010a305450d010b20012802e80341013a00000b200341206a2103200141c00b6a41186a200a290300370300200141c00b6a41106a200c290300370300200141c00b6a41086a200d290300370300200120012903b8053703c00b201d20014180096a41a00110a1051a2008200141c00b6a41c00110a10541c0016a2108200641606a22060d000b203941016a21180b200120183602f0040240203542ffffff3f83500d00202b10230b2018ad42c0017e2205422088a70d012005a72203417f4c0d0120012802ec04211f20012d008806212b0240024020030d00410121040c010b200310212204450d070b200141003602a00620012004360298062001200341c0016e36029c0620014198066a4100201810b10120012802a006210d0240024020180d0020012802980621160c010b201e201841c0016c6a211b2001280298062216200d41c0016c6a210e200141c00b6a41a0016a2104200141c00b6a4180016a2106200141c00b6a41e0006a2108200141c00b6a41c0006a210a200141c00b6a41206a210c201e21030340200141c00b6a41186a200341186a290000370300200141c00b6a41106a200341106a290000370300200141c00b6a41086a200341086a290000370300200120032900003703c00b200c41186a200341386a290000370000200c41106a200341306a290000370000200c41086a200341286a290000370000200c200341206a290000370000200a200341c0006a290000370000200a41086a200341c8006a290000370000200a41106a200341d0006a290000370000200a41186a200341d8006a2900003700002008200341e0006a290000370000200841086a200341e8006a290000370000200841106a200341f0006a290000370000200841186a200341f8006a290000370000200620034180016a290000370000200641086a20034188016a290000370000200641106a20034190016a290000370000200641186a20034198016a2900003700002004200341a0016a290000370000200441086a200341a8016a290000370000200441186a200341b8016a290000370000200441106a200341b0016a290000370000200d41016a210d200e200141c00b6a41c00110a10541c0016a210e200341c0016a2203201b470d000b0b200128029c062129200141c00b6a41186a22084200370300200141c00b6a41106a220a4200370300200141c00b6a41086a22044200370300200142003703c00b41db97c700ad4280808080f00084100c2206290000210520014198066a41086a2203200641086a2900003703002001200537039806200610232004200329030037030020012001290398063703c00b41f8afc300ad4280808080a00184100c220629000021052003200641086a2900003703002001200537039806200610232009200129039806370000200941086a2003290300370000200141a00a6a41086a2004290300370300200141a00a6a41106a200a290300370300200141a00a6a41186a2008290300370300200120012903c00b3703a00a200d41c0016c4104722203417f4c0d01200310212204450d06200141003602c80b200120033602c40b200120043602c00b200d200141c00b6a106102400240200d0d0020012802c80b210320012802c40b210d20012802c00b21040c010b2016200d41c0016c6a211d410020012802c80b220c6b210820012802c40b210d410021060340200c20066a210a02400240200d20086a4120490d0020012802c00b2104200d210e0c010b200a41206a2203200a490d0c200d41017422042003200420034b1b220e4100480d0c02400240200d0d000240200e0d00410121040c020b200e10212204450d0f0c010b20012802c00b2104200d200e460d002004200d200e10252204450d0e0b2001200e3602c40b200120043602c00b0b2004200c6a20066a220d201620066a2203290000370000200d41186a200341186a290000370000200d41106a200341106a290000370000200d41086a200341086a2900003700002001200a41206a220d3602c80b02400240200e20086a41606a411f4d0d00200e210d0c010b200d41206a221b200d490d0c200e410174220d201b200d201b4b1b220d4100480d0c02400240200e0d000240200d0d00410121040c020b200d10212204450d0f0c010b200e200d460d002004200e200d10252204450d0e0b2001200d3602c40b200120043602c00b0b2004200c6a20066a220e41206a200341206a290000370000200e41386a200341386a290000370000200e41306a200341306a290000370000200e41286a200341286a2900003700002001200a41c0006a220e3602c80b02400240200d20086a41406a411f4d0d00200d210e0c010b200e41206a221b200e490d0c200d410174220e201b200e201b4b1b220e4100480d0c02400240200d0d000240200e0d00410121040c020b200e10212204450d0f0c010b200d200e460d002004200d200e10252204450d0e0b2001200e3602c40b200120043602c00b0b2004200c6a20066a220d41c0006a200341c0006a290000370000200d41d8006a200341d8006a290000370000200d41d0006a200341d0006a290000370000200d41c8006a200341c8006a2900003700002001200a41e0006a220d3602c80b02400240200e20086a41a07f6a411f4d0d00200e210d0c010b200d41206a221b200d490d0c200e410174220d201b200d201b4b1b220d4100480d0c02400240200e0d000240200d0d00410121040c020b200d10212204450d0f0c010b200e200d460d002004200e200d10252204450d0e0b2001200d3602c40b200120043602c00b0b2004200c6a20066a220e41e0006a200341e0006a290000370000200e41f8006a200341f8006a290000370000200e41f0006a200341f0006a290000370000200e41e8006a200341e8006a2900003700002001200a4180016a220e3602c80b02400240200d20086a41807f6a411f4d0d00200d210e0c010b200e41206a221b200e490d0c200d410174220e201b200e201b4b1b220e4100480d0c02400240200d0d000240200e0d00410121040c020b200e10212204450d0f0c010b200d200e460d002004200d200e10252204450d0e0b2001200e3602c40b200120043602c00b0b2004200c6a20066a220d4180016a20034180016a290000370000200d4198016a20034198016a290000370000200d4190016a20034190016a290000370000200d4188016a20034188016a2900003700002001200a41a0016a220d3602c80b02400240200e20086a41e07e6a411f4d0d00200e210d0c010b200d41206a221b200d490d0c200e410174220d201b200d201b4b1b220d4100480d0c02400240200e0d000240200d0d00410121040c020b200d10212204450d0f0c010b200e200d460d002004200e200d10252204450d0e0b2001200d3602c40b200120043602c00b0b2004200c6a20066a220e41a0016a200341a0016a290000370000200e41b8016a200341b8016a290000370000200e41b0016a200341b0016a290000370000200e41a8016a200341a8016a2900003700002001200a41c0016a3602c80b200841c07e6a2108200641c0016a2106200341c0016a201d470d000b200c20066a21030b20152003ad4220862004ad84100e0240200d450d00200410230b02402029450d00202941c0016c450d00201610230b200141c00b6a41186a22084200370300200141c00b6a41106a220a4200370300200141c00b6a41086a22044200370300200142003703c00b41db97c700ad4280808080f00084100c2206290000210520014198066a41086a2203200641086a2900003703002001200537039806200610232004200329030037030020012001290398063703c00b41d0bcc300ad4280808080d00184100c220629000021052003200641086a2900003703002001200537039806200610232009200129039806370000200941086a2003290300370000200141a00a6a41086a2004290300370300200141a00a6a41106a200a290300370300200141a00a6a41186a2008290300370300200120012903c00b3703a00a2001202b3a00c00b2015203742808080801084100e2001201a3602c40b200141053a00c00b200141c00b6a10e0012021201c2022201e201810ee030240201f450d00201f41c0016c450d00201e10230b02402002201945720d0020012802bc0441ffffff3f71450d00201910230b0240202d41ffffff3f71450d00202010230b2036a72203450d00200341c0016c450d00201c10230b200141c00b6a41186a221a4200370300200141c00b6a41106a221b4200370300200141c00b6a41086a220e4200370300200142003703c00b418fcdc200ad4280808080f00084220b100c22032900002105200e200341086a290000370300200120053703c00b2003102341ccc5c000ad42808080809002842215100c22032900002105200141d8076a41086a2209200341086a290000370300200120053703d80720031023201b20012903d807220537030020014198066a41086a2221200e29030037030020014198066a41106a2222200537030020014198066a41186a22192009290300370300200120012903c00b37039806200141206a20014198066a1088022001280220417d710d04201a4200370300201b4200370300200e4200370300200142003703c00b4189e3c400ad42808080808001842236100c22032900002105200e200341086a290000370300200120053703c00b200310234193e4c400ad42808080808002842237100c220329000021052009200341086a290000370300200120053703d80720031023201b20012903d807370000201b41086a20092903003700002021200e2903003703002022201b2903003703002019201a290300370300200120012903c00b37039806200141c00b6a20014198066a10ef03200120012802c00b2203410420031b22293602a00a20012902c40b420020031b2235422088a7220d450d0341002104202921034100210603400240024002402003280200200341086a22082802002003410c6a280200200341146a280200200341186a220a280200108702450d0020040d01410021040c020b200441016a21040c010b200620046b220c200d4f0d03200141c00b6a41186a22162003200441646c6a220c41186a221d280200360200200141c00b6a41106a2218200c41106a221c290200370300200141c00b6a41086a221e200c41086a221f2902003703002001200c2902003703c00b20082902002105200341106a22202902002107200a2802002102200c2003290200370200201d2002360200201c2007370200201f2005370200200a2016280200360200202020182903003702002008201e290300370200200320012903c00b3702000b2003411c6a2103200d200641016a2206460d030c000b0b1032000b200c200d4184d9c4001030000b2004450d00200d2004490d002029200d20046b220d411c6c6a200410f003203542ffffffff0f8321350b20012802a00a2103200141c00b6a41186a4200370300200141c00b6a41106a22084200370300200141c00b6a41086a22044200370300200142003703c00b2036100c220629000021052004200641086a290000370300200120053703c00b200610232037100c22062900002105200141d8076a41086a220a200641086a290000370300200120053703d80720061023200820012903d807220537030020014198066a41086a200429030037030020014198066a41106a200537030020014198066a41186a200a290300370300200120012903c00b37039806024020030d0020014198066aad428080808080048410110c010b2035a72104200141c00b6a2003200d10f10320014198066aad428080808080048420013502c80b42208620012802c00b2206ad84100e024020012802c40b450d00200610230b2003200d10f0032004450d002004411c6c450d00200310230b201a4200370300201b4200370300200e4200370300200142003703c00b200b100c22032900002105200141a00a6a41086a2204200341086a290000370300200120053703a00a20031023200e2004290300370300200120012903a00a3703c00b2015100c220329000021052009200341086a290000370300200120053703d80720031023201b20012903d80722053703002021200e2903003703002022200537030020192009290300370300200120012903c00b37039806200141186a20014198066a10880202402001280218417d710d00200141c00b6a41186a22064200370300200141c00b6a41106a22084200370300200141c00b6a41086a22034200370300200142003703c00b418fcdc200ad4280808080f00084100c22042900002105200141a00a6a41086a220a200441086a290000370300200120053703a00a200410232003200a290300370300200120012903a00a3703c00b4194e5c100ad4280808080d00284100c22042900002105200141d8076a41086a220a200441086a290000370300200120053703d80720041023201b20012903d807370000201b41086a200a29030037000020014198066a41086a200329030037030020014198066a41106a200829030037030020014198066a41186a2006290300370300200120012903c00b3703980620014198066a108103220341ff01714102460d002003410171450d0010eb03210520014198066a41186a420037030020014198066a41106a2206420037030020014198066a41086a22034200370300200142003703980641a7b3c500ad4280808080c00084100c220429000021072003200441086a29000037030020012007370398062004102341a4bbc500ad4280808080b00184100c22042900002107200141a00a6a41086a2208200441086a290000370300200120073703a00a20041023200620012903a00a2207370300200141d8076a41086a2003290300370300200141d8076a41106a2007370300200141d8076a41186a200829030037030020012001290398063703d807200141086a200141d8076a10fa02427f200542d8047c220720072005541b22052001290310420020012802081b7d22072005560d00417f20002007a7417f2007428080808010541b6a220320032000491b220320006b220420034b0d002004417f6a4195014b0d00418fcdc200ad4280808080f00084100c22032900002105200141a00a6a41086a2204200341086a290000370300200120053703a00a2003102341bbacc300ad4280808080a00184100c22032900002105200141d8076a41086a2206200341086a290000370300200120053703d80720031023412010212203450d01200320012903a00a370000200320012903d807370010200341086a2004290300370000200341186a22082006290300370000412010212204450d0120042003290000370000200441186a2008290000370000200441106a200341106a290000370000200441086a200341086a29000037000020014190056a41026a2206200141c00b6a41026a2d00003a0000200120012f00c00b3b01900520014180096a41106a42a08080808004370300200141003a0098092001200336028c09200142a080808080043702840920012004360280092001419b096a20062d00003a0000200120012f0190053b009909200141c00b6a20014180096a10d2010240024020012802c00b4101470d0020014198066a41186a2203200141dc0b6a29020037030020014198066a41106a200141d40b6a29020037030020014198066a41086a200141cc0b6a290200370300200120012902c40b3703980641201021220e450d03200e200129039806370000200e41186a2003290300370000200e41106a20014198066a41106a220a290300370000200e41086a20014198066a41086a220c29030037000020014281808080103702bc052001200e3602b805200141a00a6a41186a20014180096a41186a280200360200200141a00a6a41106a20014180096a41106a290300370300200141a00a6a41086a20014180096a41086a29030037030020012001290380093703a00a200141c00b6a200141a00a6a10d201024020012802c00b4101470d00200141c00b6a41047221034102210641202108410121040340200141d8076a41186a200341186a2902002205370300200141d8076a41106a200341106a2902002207370300200141d8076a41086a200341086a290200220b3703002001200329020022153703d80720014198066a41186a220d2005370300200a2007370300200c200b370300200120153703980602402006417f6a2004470d00200141b8056a20044101109a0120012802b805210e0b200e20086a2204200129039806370000200441186a200d290300370000200441106a200a290300370000200441086a200c290300370000200120063602c005200141c00b6a200141a00a6a10d20120012802c00b4101470d01200841206a2108200641016a210620012802bc0521040c000b0b024020012802a40a450d0020012802a00a10230b0240200141b00a6a280200450d0020012802ac0a10230b200141e8046a41086a200141b8056a41086a280200360200200120012903b8053703e8040c010b200141003602f004200142013703e8040240200128028409450d0020012802800910230b200128029009450d00200128028c0910230b418fcdc200ad4280808080f00084100c22032900002105200141a00a6a41086a2204200341086a290000370300200120053703a00a2003102341e2c4c000ad4280808080a00184100c22032900002105200141d8076a41086a2206200341086a290000370300200120053703d80720031023412010212203450d01200320012903a00a370000200320012903d807370010200341086a2004290300370000200341186a22082006290300370000412010212204450d0120042003290000370000200441186a2008290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141b8046a41026a2206200141c00b6a41026a2d00003a0000200120012f00c00b3b01b80420014180096a41106a42a08080808004370300200141003a0098092001200336028c09200142a080808080043702840920012004360280092001419b096a20062d00003a0000200120012f01b8043b009909200141c00b6a20014180096a10f2030240024020012d00f00b4102460d0020014198066a41186a200141c00b6a41186a29030037030020014198066a41106a200141c00b6a41106a29030037030020014198066a41086a200141c00b6a41086a290300370300200120012903c00b37039806024020012802e40b41ffffff3f71450d0020012802e00b10230b412010212209450d032009200129039806370000200941186a20014198066a41186a2208290300370000200941106a20014198066a41106a220a290300370000200941086a20014198066a41086a220c29030037000020014281808080103702bc05200120093602b805200141a00a6a41186a20014180096a41186a280200360200200141a00a6a41106a20014180096a41106a290300370300200141a00a6a41086a20014180096a41086a29030037030020012001290380093703a00a200141c00b6a200141a00a6a10f203024020012d00f00b4102460d0041202106410121040340200141d8076a41186a2203200141c00b6a41186a290300370300200141d8076a41106a220d200141c00b6a41106a290300370300200141d8076a41086a220e200141c00b6a41086a290300370300200120012903c00b3703d807024020012802e40b41ffffff3f71450d0020012802e00b10230b20082003290300370300200a200d290300370300200c200e290300370300200120012903d807370398060240200420012802bc05470d00200141b8056a20044101109a0120012802b80521090b200920066a2203200129039806370000200341186a2008290300370000200341106a200a290300370000200341086a200c2903003700002001200441016a22043602c005200641206a2106200141c00b6a200141a00a6a10f20320012d00f00b4102470d000b0b024020012802a40a450d0020012802a00a10230b0240200141b00a6a280200450d0020012802ac0a10230b20014190056a41086a200141b8056a41086a280200360200200120012903b805370390050c010b200141003602980520014201370390050240200128028409450d0020012802800910230b200128029009450d00200128028c0910230b024020012802f004220c41808004490d00024020012802940541ffffff3f71450d0020012802900510230b20012802ec0441ffffff3f71450d0120012802e80410230c010b200141c00b6a200141e8046a108e0220012802c40b210420012802c00b210320014190056a20012802980520012802c80b41057422064105752208109a01200128029005220e200128029805220a4105746a2003200610a1051a2001200a20086a2216360298050240200441ffffff3f71450d00200310230b20012802ec04211d20012802e8042109200141c00b6a41186a22044200370300200141c00b6a41106a22064200370300200141c00b6a41086a22034200370300200142003703c00b418fcdc200ad4280808080f000842205100c220a2900002107200141a00a6a41086a2208200a41086a290000370300200120073703a00a200a102320032008290300370300200120012903a00a3703c00b41a8c5c000ad4280808080a00284100c220d2900002107200141d8076a41086a220a200d41086a290000370300200120073703d807200d1023201b20012903d807370000201b41086a220d200a29030037000020014198066a41086a2218200329030037030020014198066a41106a221c200629030037030020014198066a41186a221e2004290300370300200120012903c00b37039806200141203602c40b200120014198066a3602c00b2009200c200141c00b6a109c020240201d41ffffff3f71450d00200910230b2001280294052109200442003703002006420037030020034200370300200142003703c00b2005100c220c29000021052008200c41086a290000370300200120053703a00a200c102320032008290300370300200120012903a00a3703c00b41bac5c000ad4280808080a00284100c22082900002105200a200841086a290000370300200120053703d80720081023201b20012903d807370000200d200a29030037000020182003290300370300201c2006290300370300201e2004290300370300200120012903c00b37039806200141203602c40b200120014198066a3602c00b200e2016200141c00b6a109c020240200941ffffff3f71450d00200e10230b200141c00b6a41186a22064200370300200141c00b6a41106a22084200370300200141c00b6a41086a22034200370300200142003703c00b418fcdc200ad4280808080f00084100c22042900002105200141a00a6a41086a220a200441086a290000370300200120053703a00a200410232003200a290300370300200120012903a00a3703c00b41ccc5c000ad4280808080900284100c22042900002105200141d8076a41086a220a200441086a290000370300200120053703d80720041023201b20012903d807370000201b41086a200a29030037000020014198066a41086a200329030037030020014198066a41106a200829030037030020014198066a41186a2006290300370300200120012903c00b37039806410110212203450d05200341013a000020034101410510252203450d052003200036000120014198066aad42808080808004842003ad4280808080d00084100e200310230b200141c00b6a41186a4200370300200141c00b6a41106a220e4200370300200141c00b6a41086a22034200370300200142003703c00b41fea6c600ad4280808080a00184100c220429000021052003200441086a290000370300200120053703c00b20041023419ca8c600ad4280808080e00084100c22042900002105200141d8076a41086a2206200441086a290000370300200120053703d80720041023200e20012903d807220537030020014198066a41086a200329030037030020014198066a41106a200537030020014198066a41186a2006290300370300200120012903c00b37039806200141c00b6a20014198066a10820320012802c00b2203410420031b210d0240024020012902c40b420020031b2205422088a7220641c4006c22030d004100210a0c010b200d20036a21044100210a200d210302400340024020032d00004101460d00200341046a28020020004f0d020b200a41016a210a2004200341c4006a2203470d000b0b200a20064b0d020b2006200a6b211b200542ffffffff0f832105200d200a41c4006c22046a210c200d210602400340024020040d00200c21030c020b200441bc7f6a210420062d00002108200641c4006a2203210620084102470d000b0b02400340200c2003460d0120032d00002104200341c4006a210320044102470d000b0b0240201b450d000240200a450d00200d200d200a41c4006c6a201b41c4006c10a2051a0b201bad42208620058421050b200141c00b6a41186a22064200370300200141c00b6a41106a22084200370300200141c00b6a41086a22034200370300200142003703c00b41fea6c600ad4280808080a00184100c220429000021072003200441086a290000370300200120073703c00b20041023419ca8c600ad4280808080e00084100c22042900002107200141d8076a41086a220a200441086a290000370300200120073703d80720041023200e20012903d807370000200e41086a200a29030037000020014198066a41086a200329030037030020014198066a41106a200829030037030020014198066a41186a2006290300370300200120012903c00b37039806200141c00b6a200d2005422088a710970320014198066aad220b4280808080800484220720013502c80b42208620012802c00b2204ad84100e2005a72103024020012802c40b450d00200410230b02402003450d00200341c4006c450d00200d10230b200141c00b6a41186a22064200370300200141c00b6a41106a22084200370300200141c00b6a41086a22044200370300200142003703c00b41fea6c600ad4280808080a00184100c220329000021052004200341086a290000370300200120053703c00b200310234198bdc600ad4280808080c00184100c22032900002105200141d8076a41086a220a200341086a290000370300200120053703d80720031023200e20012903d807370000200e41086a200a29030037000020014198066a41086a220a200429030037030020014198066a41106a220c200829030037030020014198066a41186a220d2006290300370300200120012903c00b37039806200141003a00b8042007200141b8046aad42808080801084100e20014198066a108503200141b8046a41186a220e200d290300370300200141b8046a41106a221b200c290300370300200141b8046a41086a2209200a29030037030020012001290398063703b804412410212203450d04200320012903b80437000020034114360220200341186a200e290300370000200341106a201b290300370000200341086a200929030037000020014281808080103702c40b200120033602c00b200141c00b6a10b9012006200d2903003703002008200c2903003703002004200a29030037030020012001290398063703c00b200141c00b6a10d102412010272203450d0041fba7c600ad4280808080f00084100c22042900002105200141d8076a41086a2206200441086a290000370300200120053703d80720041023200341086a2006290300370000200320012903d8073700004182a8c600ad4280808080b00184100c22042900002105200141a00a6a41086a2206200441086a290000370300200120053703a00a20041023200341186a2006290300370000200320012903a00a37001020012003412010cd010240024020012802004101470d002001280204211f2003ad4280808080800484101120031023201f450d01200b4280808080c0008421354100211c4100211803402001201836029806200141c00b6a41186a220920351018220341186a290000370300200141c00b6a41106a220a200341106a290000370300200141c00b6a41086a2216200341086a290000370300200120032900003703c00b2003102341c00010272203450d0341fba7c600ad4280808080f00084100c22042900002105200141d8076a41086a220c200441086a290000370300200120053703d80720041023200341086a200c290300370000200320012903d807370000418da8c600ad4280808080f00084100c22042900002105200141a00a6a41086a2206200441086a290000370300200120053703a00a20041023200341186a2006290300370000200320012903a00a370010200341386a2009290300370000200341306a200a290300370000200341286a2016290300370000200320012903c00b37002020014198066a200341c0001089020240200128029806221d450d002003ad428080808080088410110b20012802a0062104200128029c06211e20031023201d450d0202402004450d0020044105742108201c2106201d21030340200141d8076a41186a220d200341186a290000370300200141d8076a41106a220e200341106a290000370300200c200341086a290000370300200120032900003703d80720014198066a41186a420037030020014198066a41106a420037030020014198066a41086a420037030020014200370398060240200141d8076a20014198066a412010a305450d00200141a00a6a200141d8076a109702200141c00b6a20012802a00a221b20012802a80a109802200a290300420020012903c00b42015122041b210520012903c80b420020041b2107200141c00b6a41206a290300420020041b210b20012903d80b420020041b2115024020012802a40a450d00201b10230b427f200720157c2215201520075422042005200b7c2004ad7c220720055420072005511b22041b427f200720041b84500d002009200d290300370300200a200e2903003703002016200c290300370300200120012903d8073703c00b20014198066a200610fb0220013502a0062105200128029806210d411010212204450d0620044110412010252204450d0a200420012903c00b370000200441186a2009290300370000200441106a200a290300370000200441086a20162903003700002004412041c00010252204450d0a20044200370020200441286a42003700002005422086200dad842004ad4280808080800684100e20041023200128029c06450d00200d10230b200341206a2103200641016a2106200841606a22080d000b0b0240201e41ffffff3f71450d00201d10230b201c41c0006a211c201841016a2218201f470d000c020b0b200310230b10ea0320014198066a41186a2208420037030020014198066a41106a2203420037030020014198066a41086a22044200370300200142003703980641e4dec400ad4280808080e00084100c220629000021052004200641086a29000037030020012005370398062006102341f9dec400ad4280808080a00184100c22062900002105200141a00a6a41086a220a200641086a290000370300200120053703a00a20061023200320012903a00a2205370300200141d8076a41086a2004290300370300200141d8076a41106a2005370300200141d8076a41186a200a29030037030020012001290398063703d807200141c00b6a200141d8076a412010e10120012d00c00b21062008200141d90b6a2900003703002003200141d10b6a2900003703002004200141c90b6a290000370300200120012900c10b370398060240024020064101460d00200141c8036a41186a4200370300200141c8036a41106a4200370300200141c8036a41086a4200370300200142003703c8030c010b200141c8036a41186a2008290300370300200141c8036a41106a2003290300370300200141c8036a41086a200429030037030020012001290398063703c8030b20014198066a41186a2208420037030020014198066a41106a220a420037030020014198066a41086a22044200370300200142003703980641abe3c200ad4280808080800384100c220629000021052004200641086a29000037030020012005370398062006102341c3e3c200ad4280808080e00184100c22062900002105200141a00a6a41086a220c200641086a290000370300200120053703a00a20061023200320012903a00a370000200341086a200c290300370000200141d8076a41086a2004290300370300200141d8076a41106a200a290300370300200141d8076a41186a200829030037030020012001290398063703d807200141c00b6a200141d8076a4120108902024002400240024020012802c00b22040d0041002103200141003602a80a200142013703a00a200141e8036a41186a200141c8036a41186a290300370300200141e8036a41106a200141c8036a41106a290300370300200141e8036a41086a200141c8036a41086a290300370300200120012903c8033703e803200141e8036a21060c010b200120012902c40b22053702a40a200120043602a00a2005a7210a02402005422088a7220341d100490d0020014198066a41186a2208200141c8036a41186a29030037030020014198066a41106a220c200141c8036a41106a29030037030020014198066a41086a220d200141c8036a41086a290300370300200120012903c803370398062000417f6a41d10070220620034f0d06200420064105746a2206200129039806370000200641186a2008290300370000200641106a200c290300370000200641086a200d2903003700000c030b200141e8036a41186a200141c8036a41186a290300370300200141e8036a41106a200141c8036a41106a290300370300200141e8036a41086a200141c8036a41086a290300370300200120012903c8033703e803200141e8036a21062003200a470d010b200141a00a6a20034101109a0120012802a40a210a20012802a00a210420012802a80a21030b200420034105746a22082006290000370000200841186a200641186a290000370000200841106a200641106a290000370000200841086a200641086a2900003700002001200341016a22033602a80a0b20014198066a41186a420037030020014198066a41106a220c420037030020014198066a41086a22064200370300200142003703980641abe3c200ad4280808080800384100c220829000021052006200841086a29000037030020012005370398062008102341c3e3c200ad4280808080e00184100c22082900002105200141d8076a41086a220d200841086a290000370300200120053703d80720081023200c20012903d8072205370300200141e8036a41086a2006290300370300200141e8036a41106a2005370300200141e8036a41186a200d29030037030020012001290398063703e8030240024020040d00200141e8036aad428080808080048410110c010b200141203602c40b2001200141e8036a3602c00b20042003200141c00b6a10bf03200a41ffffff3f71450d00200410230b200141800d6a24000f0b1033000b200a2006103c000b2006200341e0fdc2001030000b102c000b102a000baa2309057f017e037f017e017f037e037f037e017f230041c0046b22002400200041f0016a41186a22014200370300200041f0016a41106a22024200370300200041f0016a41086a22034200370300200042003703f00141a7b3c500ad4280808080c00084100c22042900002105200041d0036a41086a2206200441086a290000370300200020053703d0032004102320032006290300370300200020002903d0033703f00141f4bdc500ad4280808080b00184100c220429000021052006200441086a290000370300200020053703d00320041023200220002903d0032205370300200041a0046a41086a2003290300370300200041a0046a41106a2005370300200041a0046a41186a2006290300370300200020002903f0013703a004200041f0016a200041a0046a108704024002400240024020002d00f0014102470d00200142003703002002420037030020034200370300200042003703f00141e4dec400ad4280808080e00084100c220629000021052003200641086a290000370300200020053703f001200610234191dfc400ad4280808080e00084100c2206290000210520004188016a41086a2204200641086a29000037030020002005370388012006102320022000290388012205370300200041e8026a41086a2003290300370300200041e8026a41106a2005370300200041e8026a41186a2004290300370300200020002903f0013703e802200041206a200041e8026a10f70202400240200028022022070d0041002108200041003602f002200042043703e8024202210941042107200041e8026a210a0c010b2000200029022422053702ec02200020073602e8022005a72108200041e8026a210a02402005422088a72203450d00200341246c21062007210302400340024020032d00004101470d00200341016a2800002104200341086a28020021012000200341106a28020036028c012000200136028801200441c28289aa04470d00200041f0016a20004188016a10f90320002903f00122094202520d020b200341246a21032006415c6a2206450d020c000b0b20002903f801210b200041206a20004180026a41e80010a1051a0c010b420221090b200a10960302402008450d00200841246c450d00200710230b20004188016a200041206a41e80010a1051a0240024020094202520d0041002101200041a0046a21070c010b200041e8026a20004188016a41e80010a1051a200041f0016a41186a22044200370300200041f0016a41106a22014200370300200041f0016a41086a22064200370300200042003703f00141a7b3c500ad4280808080c000842205100c2207290000210c200041d0036a41086a2203200741086a2900003703002000200c3703d0032007102320062003290300370300200020002903d0033703f0014188bbc500ad4280808080b00184220d100c2207290000210c2003200741086a2900003703002000200c3703d00320071023200220002903d003370000200241086a220e2003290300370000200041a0046a41086a22072006290300370300200041a0046a41106a22082001290300370300200041a0046a41186a220a2004290300370300200020002903f0013703a004200041106a200041a0046a10fa02024002402000280210450d002000290318500d00200041a0046aad4280808080800484210c200041a0046a21070c010b200442003703002001420037030020064200370300200042003703f0012005100c220f290000210c2003200f41086a2900003703002000200c3703d003200f102320062003290300370300200020002903d0033703f001200d100c220f290000210c2003200f41086a2900003703002000200c3703d003200f1023200220002903d003370000200e20032903003700002007200629030037030020082001290300370300200a2004290300370300200020002903f0013703a0042000200b3703f001200041a0046aad4280808080800484220c200041f0016aad4280808080800184100e200442003703002001420037030020064200370300200042003703f0012005100c220f290000210d2003200f41086a2900003703002000200d3703d003200f102320062003290300370300200020002903d0033703f00141bcbac500ad4280808080b00184100c220f290000210d2003200f41086a2900003703002000200d3703d003200f1023200220002903d003370000200e20032903003700002007200629030037030020082001290300370300200a2004290300370300200020002903f0013703a004200041f0016a200041a0046a10d10420002902f401210d20002802f001210f200442003703002001420037030020064200370300200042003703f0012005100c221029000021052003201041086a290000370300200020053703d0032010102320062003290300370300200020002903d0033703f00141c8bbc500ad4280808080a00184100c221029000021052003201041086a290000370300200020053703d00320101023200220002903d003370000200e20032903003700002007200629030037030020082001290300370300200a2004290300370300200020002903f0013703a004200041f0016a200041a0046a10970420002d00f0012103200a20004189026a290000370300200820004181026a2900003703002007200041f9016a290000370300200020002900f1013703a0040240024020034101460d0020004188046a420037030020004180046a4200370300200041f8036a4200370300200042003703f0030c010b200041f0036a41186a200041a0046a41186a290300370300200041f0036a41106a200041a0046a41106a290300370300200041f0036a41086a200041a0046a41086a290300370300200020002903a0043703f0030b200041d0036a41086a200041f0036a41086a2903002205370300200041d0036a41106a200041f0036a41106a2903002211370300200041d0036a41186a200041f0036a41186a2903002212370300200020002903f00322133703d003200041a0046a41186a2012370300200041a0046a41106a2011370300200041a0046a41086a2005370300200020133703a004200042013703f001200041003602f801410110212203450d05200f4108200f1b210e200041013602f401200020033602f001200341013a0000200041013602f801200d422088a74100200f1b2203200041f0016a10610240024020030d0020002802f80121060c010b200e200341286c6a210a20002802f401210120002802f8012106200e2103034002400240200120066b4120490d00200641206a210420002802f0012108200121070c010b200641206a22042006490d06200141017422072004200720044b1b22074100480d060240024020010d00024020070d00410121080c020b2007102122080d010c0a0b20002802f001210820012007460d0020082001200710252208450d090b200020073602f401200020083602f0010b200820066a22062003290000370000200641186a200341186a290000370000200641106a200341106a290000370000200641086a200341086a290000370000200020043602f801200341206a290300210502400240200720046b4108490d00200441086a2106200721010c010b200441086a22062004490d06200741017422012006200120064b1b22014100480d060240024020070d00024020010d00410121080c020b200110212208450d0a0c010b20072001460d0020082007200110252208450d090b200020013602f401200020083602f0010b200820046a2005370000200020063602f801200a200341286a2203470d000b0b0240024020002802f401220420066b4120490d0020002802f00121030c010b200641206a22032006490d04200441017422012003200120034b1b22014100480d040240024020040d00024020010d00410121030c020b200110212203450d080c010b20002802f001210320042001460d0020032004200110252203450d070b200020013602f401200020033602f0010b200320066a220320002903a004370000200341086a200041a0046a41086a290300370000200341186a200041a0046a41186a290300370000200341106a200041a0046a41106a290300370000200041fb036a200641206a360000200020002903f0013700f303200041fc016a200041f7036a290000370000200041c28289aa043600f101200041023a00f001200020002900f0033700f501200041f0016a10f8030240200da74100200f1b2203450d00200341286c450d00200e10230b200041a0046a21070b200041f0016a41186a22044200370300200041f0016a41106a22014200370300200041f0016a41086a22064200370300200042003703f00141a7b3c500ad4280808080c000842205100c2208290000210d200041d0036a41086a2203200841086a2900003703002000200d3703d0032008102320062003290300370300200020002903d0033703f00141a4bbc500ad4280808080b00184220d100c220829000021112003200841086a290000370300200020113703d00320081023200220002903d003370000200241086a22082003290300370000200041a0046a41086a220a2006290300370300200041a0046a41106a220e2001290300370300200041a0046a41186a220f2004290300370300200020002903f0013703a0042000200041a0046a10fa022000280200211420002903082111200442003703002001420037030020064200370300200042003703f0012005100c221029000021122003201041086a290000370300200020123703d0032010102320062003290300370300200020002903d0033703f00141abb3c500ad4280808080800184100c221029000021122003201041086a290000370300200020123703d00320101023200220002903d00337000020082003290300370000200a2006290300370300200e2001290300370300200f2004290300370300200020002903f0013703a00420004200200b201142017c420120141b7d22112011200b561b3e02f001200c200041f0016aad22114280808080c00084100e200442003703002001420037030020064200370300200042003703f0012005100c221029000021052003201041086a290000370300200020053703d0032010102320062003290300370300200020002903d0033703f001200d100c221029000021052003201041086a290000370300200020053703d00320101023200220002903d00337000020082003290300370000200a2006290300370300200e2001290300370300200f2004290300370300200020002903f0013703a0042000200b3703f001200c20114280808080800184100e4100210120094200520d00200041f0016a200041e8026a41e80010a1051a200041f0036a41186a2000418c026a290200370300200041f0036a41106a20004184026a290200370300200041f0036a41086a200041fc016a290200370300200020002902f4013703f003410121010b200041e8026a41186a200041f0036a41186a290300370300200041e8026a41106a200041f0036a41106a290300370300200041e8026a41086a200041f0036a41086a290300370300200020002903f0033703e802200041f0016a41186a22084200370300200041f0016a41106a220a4200370300200041f0016a41086a22064200370300200042003703f00141a7b3c500ad4280808080c00084100c22042900002105200041d0036a41086a2203200441086a290000370300200020053703d0032004102320062003290300370300200020002903d0033703f00141f4bdc500ad4280808080b00184100c220429000021052003200441086a290000370300200020053703d00320041023200220002903d003370000200241086a2003290300370000200041a0046a41086a2006290300370300200041a0046a41106a200a290300370300200041a0046a41186a2008290300370300200020002903f0013703a004410110212203450d020240024020010d00200341003a000042808080801021050c010b200341013a000020034101412110252203450d04200320002903e802370001200341196a20004180036a290300370000200341116a200041f8026a290300370000200341096a200041f0026a2903003700004280808080900421050b2007ad428080808080048420052003ad84100e200310230b200041c0046a24000f0b102c000b1033000b102a000b940405047f017e017f017e057f230041f0006b22002400200041c0006a41186a22014200370300200041c0006a41106a22024200370300200041c0006a41086a220342003703002000420037034041a7b3c500ad4280808080c000842204100c22052900002106200041e0006a41086a2207200541086a2900003703002000200637036020051023200320072903003703002000200029036037034041a4bac500ad4280808080a00184100c220529000021062007200541086a2900003703002000200637036020051023200220002903602206370300200041206a41086a22082003290300370300200041206a41106a22092006370300200041206a41186a220a200729030037030020002000290340370320200041106a200041206a10fa022000280210210b20002903182106200142003703002002420037030020034200370300200042003703402004100c220529000021042007200541086a290000370300200020043703602005102320032007290300370300200020002903603703404188bbc500ad4280808080b00184100c220529000021042007200541086a29000037030020002004370360200510232002200029036022043703002008200329030037030020092004370300200a2007290300370300200020002903403703202000200041206a10fa022000280200210720002903082104200041f0006a24002004420020071b200642d8047e4200200b1b7c0bfe0304027f017e067f077e230041c0006b220224000240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510212206450d020b20024100360208200220063602002002200541d0006e36020420024100200310b4012002280208210702402003450d002001200341d0006c6a21082002280200200741d0006c6a2105200341047441706a41047621090340200241206a41086a2203200141086a290300370300200241206a41106a2206200141106a290300370300200241206a41186a220a200141186a29030037030020022001290300370320200141206a2903002104200141286a290300210b200141306a290300210c200141386a290300210d200241106a200141c0006a10b503200a290300210e2006290300210f2003290300211020022903202111200541386a200d370300200541306a200c370300200541286a200b370300200541206a2004370300200541086a201037030020052011370300200541106a200f370300200541186a200e370300200541c0006a2002290310370300200541c8006a200241106a41086a280200360200200541d0006a2105200141d0006a22012008470d000b200720096a41016a21070b20002002290300370200200041086a2007360200200241c0006a24000f0b1032000b1033000b990402067f017e230041e0006b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b0102400240200228021022010d00200041003602000c010b200228021421032002200241186a280200360224200220013602202002200241206a1088010240024020022802000d002002280224220420022802044102742205490d0002400240024002402005417f4c0d000240024020050d00410121060c010b200510272206450d02200620022802202207200510a1051a2002200420056b3602242002200720056a3602200b2006450d0402402005ad22084220862008842208422088a722050d002008a721050c030b024020062005724103710d002008a722054103710d0020054102762204450d032008422288a721070c040b2008a7450d04200610230c040b1032000b1033000b4100210702402005450d00200610230b41002104410421060b41000d002006450d002000200436020420002006360200200041086a20073602000c010b20024100360230200242013703282002410a36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c20024180c5c6003602482002200241386a360258200241c4006a4184a5c200200241c8006a10311a2002350230422086200235022884100a0240200228022c450d00200228022810230b200041003602000b2003450d00200110230b200241e0006a24000bff740a067f017e057f017e047f027e017f027e037f017e230041f0026b220524000240410810212206450d0020062001200241c0016c6a220736020420062001360200024002400240024020000d00200541a8026a41186a22084200370300200541a8026a41106a22094200370300200541a8026a41086a22024200370300200542003703a80241ecf7c300ad4280808080f00184100c220a290000210b200541f8016a41086a220c200a41086a2900003703002005200b3703f801200a10232002200c290300370300200520052903f8013703a80241bcfec300ad4280808080c00184100c220a290000210b200c200a41086a2900003703002005200b3703f801200a1023200920052903f801220b370300200541d0026a41086a220d2002290300370300200541d0026a41106a220e200b370300200541d0026a41186a220f200c290300370300200520052903a8023703d002200541c8006a200541d0026a10fa022005290350210b20052802482110200842003703002009420037030020024200370300200542003703a80241db97c700ad4280808080f00084100c220a29000021112002200a41086a290000370300200520113703a802200a102341bcbcc300ad4280808080c00184100c220a2900002111200c200a41086a290000370300200520113703f801200a1023200920052903f8012211370300200d2002290300370300200e2011370300200f200c290300370300200520052903a8023703d002200541c0006a200541d0026a412010cd01200b420020101b2005280244410020052802401b109404200610230c010b0240024002402002450d002006200141c0016a3602002005200141226a2900003701aa0220052001412a6a2900003701b20220054198016a41086a220220052903b0023703002005200141326a2900003701ba0220054198016a41106a220c20052903b80237030020052001413a6a2800003601c20220052001413e6a2f00003b01c60220054198016a41186a220920052903c002370300200520012f00203b01a802200520052903a80237039801200541d0026a41186a220a2009290300370300200541d0026a41106a2209200c290300370300200541d0026a41086a220c200229030037030020052005290398013703d002200541f8016a41186a200a290300370300200541f8016a41106a2009290300370300200541f8016a41086a200c290300370300200520052903d0023703f801200628020420062802006b41c0016e41286c41286a2202417f4c0d05200210212212450d04201220052903f80137030020124201370320201241186a200541f8016a41186a2213290300370300201241106a200541f8016a41106a2214290300370300201241086a200541f8016a41086a22152903003703004101210c200541013602e001200520123602d8012005200241286e22023602dc01200628020022092006280204460d012006200941c0016a3602002005200941226a2900003701aa0220052009412a6a2900003701b20220054198016a41086a220e20052903b0023703002005200941326a2900003701ba0220054198016a41106a220f20052903b80237030020052009413a6a2800003601c20220052009413e6a2f00003b01c60220054198016a41186a221020052903c002370300200541003a00c8022005200941216a2d00003a00a902200520092d00203a00a802200520052903a80237039801200541d0026a41186a22092010290300370300200541d0026a41106a220a200f290300370300200541d0026a41086a2208200e29030037030020052005290398013703d0024102210c41c800210d034020132009290300220b3703002014200a2903002211370300201520082903002216370300200520052903d00222173703f8012009200b370300200a201137030020082016370300200520173703d0020240200c417f6a2002470d00200541d8016a2002200628020420062802006b41c0016e41016a10980120052802d80121120b2012200d6a221841606a220220052903d0023703002008290300210b200a29030021112009290300211620184201370300200241186a2016370300200241106a2011370300200241086a200b3703002005200c3602e0010240200628020022022006280204470d0020052802dc0121020c030b2006200241c0016a3602002005200241226a2900003701aa0220052002412a6a2900003701b202200e20052903b0023703002005200241326a2900003701ba02200f20052903b80237030020052002413a6a2800003601c20220052002413e6a2f00003b01c602201020052903c002370300200541003a00c8022005200241216a2d00003a00a902200520022d00203a00a802200520052903a8023703980120092010290300370300200a200f2903003703002008200e29030037030020052005290398013703d002200d41286a210d200c41016a210c20052802dc0121020c000b0b20061023410821124100210c410021020c010b200610230b200541a8026a41186a4200370300200541a8026a41106a22094200370300200541a8026a41086a220a4200370300200542003703a80241ecf7c300ad4280808080f00184100c2208290000210b200541f8016a41086a2206200841086a2900003703002005200b3703f80120081023200a2006290300370300200520052903f8013703a802418cfec300ad4280808080f00084100c2208290000210b2006200841086a2900003703002005200b3703f80120081023200920052903f801220b370300200541d0026a41086a200a290300370300200541d0026a41106a200b370300200541d0026a41186a2006290300370300200520052903a8023703d002200541a8026a200541d0026a412010e5010240024020052802a8024101460d002005200c3602b002200520023602ac02200520123602a802200541d0026a200541a8026a410041002005109504200541d0026aad4280808080800484210b0c010b200541d0026aad4280808080800484220b101120052902ac0221112005200c3602b002200520023602ac02200520123602a802200541d0026a200541a8026a2011a741012011422088a71095040b200541a8026a41186a220a4200370300200541a8026a41106a220c4200370300200541a8026a41086a22064200370300200542003703a80241ecf7c300ad4280808080f001842211100c22082900002116200541f8016a41086a2202200841086a290000370300200520163703f8012008102320062002290300370300200520052903f8013703a80241bcfec300ad4280808080c001842216100c220829000021172002200841086a290000370300200520173703f80120081023200920052903f801370000200941086a22102002290300370000200541d0026a41086a22082006290300370300200541d0026a41106a220d200c290300370300200541d0026a41186a220e200a290300370300200520052903a8023703d002200541306a200541d0026a10fa022005280230211820052903382117200a4200370300200c420037030020064200370300200542003703a8022011100c220f29000021112002200f41086a290000370300200520113703f801200f102320062002290300370300200520052903f8013703a8022016100c220f29000021112002200f41086a290000370300200520113703f801200f1023200920052903f8013700002010200229030037000020082006290300370300200d200c290300370300200e200a290300370300200520052903a8023703d0022005201742017c420120181b22113703a802200b200541a8026aad4280808080800184100e200a4200370300200c420037030020064200370300200542003703a80241db97c700ad4280808080f00084100c2209290000210b2006200941086a2900003703002005200b3703a8022009102341bcbcc300ad4280808080c00184100c2209290000210b2002200941086a2900003703002005200b3703f80120091023200c20052903f801220b37030020082006290300370300200d200b370300200e2002290300370300200520052903a8023703d002200541286a200541d0026a412010cd012011200528022c410020052802281b1094040b410810212202450d022002200736020420022001360200410810212206450d0220062003200441c0016c6a221436020420062003360200200541b8016a200241fcbfc400109604200541c8016a200641fcbfc40010960420052802d001211820052802cc01211220052802c801211020052802c001210920052802bc01210f20052802b801211520054198016a41186a220c420037030020054198016a41106a2213420037030020054198016a41086a22064200370300200542003703980141a7b3c500ad4280808080c00084220b100c220a2900002111200541d0026a41086a2202200a41086a290000370300200520113703d002200a102320062002290300370300200520052903d0023703980141a4bac500ad4280808080a001842216100c220a29000021112002200a41086a290000370300200520113703d002200a1023201320052903d0022211370300200541d8006a41086a220a2006290300370300200541d8006a41106a22082011370300200541d8006a41186a220d20022903003703002005200529039801370358200541186a200541d8006a10fa02024002400240024002402005290320420020052802181b221742017c22112017540d00200c420037030020134200370300200642003703002005420037039801200b100c220e29000021172002200e41086a290000370300200520173703d002200e102320062002290300370300200520052903d002370398012016100c220e29000021162002200e41086a290000370300200520163703d002200e1023201320052903d002370000201341086a22042002290300370000200a200629030037030020082013290300370300200d200c2903003703002005200529039801370358200520113703a802200541d8006aad42808080808004842219200541a8026aad22164280808080800184100e200c420037030020134200370300200642003703002005420037039801200b100c220e290000210b2002200e41086a2900003703002005200b3703d002200e102320062002290300370300200520052903d0023703980141bcbac500ad4280808080b00184100c220e290000210b2002200e41086a2900003703002005200b3703d002200e1023201320052903d00237000020042002290300370000200a200629030037030020082013290300370300200d200c2903003703002005200529039801370358200941286c4104722202417f4c0d06200210212206450d05200541003602b002200520023602ac02200520063602a8022009200541a8026a10610240024020090d0020052802b002210220052802a802210a0c010b2015200941286c6a210d20052802ac02210c20052802b002210220152106034002400240200c20026b4120490d0020052802a802210a200c21090c010b200241206a22092002490d07200c410174220a2009200a20094b1b22094100480d0702400240200c0d00024020090d004101210a0c020b20091021220a0d010c0c0b20052802a802210a200c2009460d00200a200c20091025220a450d0b0b200520093602ac022005200a3602a8020b200a20026a220c2006290000370000200c41186a200641186a290000370000200c41106a200641106a290000370000200c41086a200641086a2900003700002005200241206a22083602b002200641206a290300210b02400240200920086b4108490d00200241286a21022009210c0c010b200841086a22022008490d072009410174220c2002200c20024b1b220c4100480d070240024020090d000240200c0d004101210a0c020b200c1021220a450d0c0c010b2009200c460d00200a2009200c1025220a450d0b0b2005200c3602ac022005200a3602a8020b200a20086a200b370000200520023602b002200d200641286a2206470d000b0b20052802ac02210620192002ad422086200aad84100e02402006450d00200a10230b0240200f450d00200f41286c450d00201510230b0240201142017c220b2011540d0020054198016a41186a220c420037030020054198016a41106a2209420037030020054198016a41086a22024200370300200542003703980141a7b3c500ad4280808080c00084100c220a2900002111200541d0026a41086a2206200a41086a290000370300200520113703d002200a102320022006290300370300200520052903d0023703980141b8bcc500ad4280808080e00184100c220a29000021112006200a41086a290000370300200520113703d002200a1023201320052903d002370000201341086a2006290300370000200541d8006a41086a2002290300370300200541d8006a41106a2009290300370300200541d8006a41186a200c2903003703002005200529039801370358200541a8026a200541d8006a10970420052d00a8022106200c200541c1026a2900003703002009200541b9026a2900003703002002200541b1026a290000370300200520052900a902370398010240024020064101460d00200541f8006a41186a4200370300200541f8006a41106a4200370300200541f8006a41086a4200370300200542003703780c010b200541f8006a41186a200c290300370300200541f8006a41106a2009290300370300200541f8006a41086a200229030037030020052005290398013703780b20054198016a41186a220c420037030020054198016a41106a2209420037030020054198016a41086a22064200370300200542003703980141a7b3c500ad4280808080c000842211100c220a2900002117200541d0026a41086a2202200a41086a290000370300200520173703d002200a102320062002290300370300200520052903d0023703980141e0bcc500ad4280808080c001842217100c220a290000211a2002200a41086a2900003703002005201a3703d002200a1023201320052903d002370000201341086a22082002290300370000200541d8006a41086a220d2006290300370300200541d8006a41106a220e2009290300370300200541d8006a41186a220f200c2903003703002005200529039801370358200541106a200541d8006a412010cd012005280214211520052802102104200c4200370300200942003703002006420037030020054200370398012011100c220a29000021112002200a41086a290000370300200520113703d002200a102320062002290300370300200520052903d002370398012017100c220a29000021112002200a41086a290000370300200520113703d002200a1023201320052903d00237000020082002290300370000200d2006290300370300200e2009290300370300200f200c2903003703002005200529039801370358200541003602a802201920164280808080c00084100e200541d0026a41186a200541f8006a41186a290300370300200541d0026a41106a200541f8006a41106a2903003703002002200541f8006a41086a290300370300200520052903783703d002417f2015410020041b220841016a220220022008491b410d74412872220f417f4c0d07200f1021220d450d06200d20052903d002370000200d200b370020200d41186a200541d0026a41186a290300370000200d41106a200541d0026a41106a290300370000200d41086a200541d0026a41086a2903003700004128210e410021064100210202400340024002402002450d00200c2009470d01200a41ffffff3f71450d00200210230b200620084f0d02200541d8016a2006108804200541a8026a20052802d801220c20052802e0012209108904024020052802a8022202450d002009ad422086200cad8410110b20052902ac02420020021b210b2002410120021b2102024020052802dc01450d00200c10230b200641016a21062002200b422088a74105746a2109200ba7210a2002210c0c010b20054198016a41186a200c41186a221529000037030020054198016a41106a200c41106a220429000037030020054198016a41086a200c41086a221b2900003703002005200c29000037039801201b290000210b20042900002111200c2900002117200541d8006a41186a22042015290000370300200541d8006a41106a22152011370300200541d8006a41086a221b200b37030020052017370358200541a8026a41186a221c2004290300370300200541a8026a41106a22042015290300370300200541a8026a41086a221d201b290300370300200520052903583703a8020240200f200e6b411f4b0d00200e41206a2215200e490d08200f410174221b2015201b20154b1b22154100480d0802400240200f0d00024020150d004101210d0c020b20151021220d450d0d0c010b200f2015460d00200d200f20151025220d450d0c0b2015210f0b200c41206a210c200d200e6a221520052903a802370000201541186a201c290300370000201541106a2004290300370000201541086a201d290300370000200e41206a210e0c000b0b200ead422086200dad8410182202290000210b200241086a2900002111200241106a2900002117200541f8016a41186a200241186a290000370300200541f8016a41106a2017370300200541f8016a41086a20113703002005200b3703f801200210230240200f450d00200d10230b20054198016a41186a2209420037030020054198016a41106a220a420037030020054198016a41086a22064200370300200542003703980141a7b3c500ad4280808080c00084220b100c220c2900002111200541d0026a41086a2202200c41086a290000370300200520113703d002200c102320062002290300370300200520052903d0023703980141b8bcc500ad4280808080e00184100c220c29000021112002200c41086a290000370300200520113703d002200c1023201320052903d002370000201341086a2002290300370000200541d8006a41086a2006290300370300200541d8006a41106a200a290300370300200541d8006a41186a20092903003703002005200529039801370358412010212202450d06200220052903f801370000200241186a200541f8016a41186a290300370000200241106a200541f8016a41106a290300370000200241086a200541f8016a41086a29030037000020192002ad4280808080800484100e20021023200541d8016a41186a200541f8006a41186a2903002211370300200541d8016a41106a200541f8006a41106a2903002217370300200541d8016a41086a200541f8006a41086a290300221a37030020052005290378221e3703d801200541a8026a41186a22082011370300200541a8026a41106a220d2017370300200541a8026a41086a220e201a3703002005201e3703a80220054198016a41186a2209420037030020054198016a41106a220a420037030020054198016a41086a220642003703002005420037039801200b100c220c290000210b200541d0026a41086a2202200c41086a2900003703002005200b3703d002200c102320062002290300370300200520052903d0023703980141c8bbc500ad4280808080a00184100c220c290000210b2002200c41086a2900003703002005200b3703d002200c1023201320052903d002370000201341086a220f2002290300370000200541d8006a41086a22152006290300370300200541d8006a41106a2204200a290300370300200541d8006a41186a221b2009290300370300200520052903980137035841201021220c450d06200c20052903a802370000200c41186a2008290300370000200c41106a200d290300370000200c41086a200e2903003700002019200cad4280808080800484100e200c102320094200370300200a420037030020064200370300200542003703980141a7b3c500ad4280808080c00084100c220c290000210b2002200c41086a2900003703002005200b3703d002200c102320062002290300370300200520052903d0023703980141b8bcc500ad4280808080e00184100c220c290000210b2002200c41086a2900003703002005200b3703d002200c1023201320052903d002370000200f2002290300370000201520062903003703002004200a290300370300201b20092903003703002005200529039801370358200541a8026a200541d8006a10970420052d00a80221022009200541c1026a290000370300200a200541b9026a2900003703002006200541b1026a290000370300200520052900a902370398010240024020024101460d0020054190026a420037030020054188026a420037030020054180026a4200370300200542003703f8010c010b200541f8016a41186a20054198016a41186a290300370300200541f8016a41106a20054198016a41106a290300370300200541f8016a41086a20054198016a41086a29030037030020052005290398013703f8010b200541d0026a41186a200541f8016a41186a290300370300200541d0026a41106a200541f8016a41106a290300370300200541d0026a41086a200541f8016a41086a290300370300200520052903f8013703d002200541003602b002200542013703a802410110212202450d08200541013602ac02200520023602a802200241013a0000200541013602b0022018200541a8026a10610240024020180d0020052802b00221020c010b2010201841286c6a2118410020052802b002220e6b210820052802ac02210c410021020340200e20026a210d02400240200c20086a4120490d0020052802a802210a200c21090c010b200d41206a2206200d490d08200c41017422092006200920064b1b22094100480d0802400240200c0d00024020090d004101210a0c020b20091021220a450d0d0c010b20052802a802210a200c2009460d00200a200c20091025220a450d0c0b200520093602ac022005200a3602a8020b200a200e6a20026a220c201020026a2206290000370000200c41186a200641186a290000370000200c41106a200641106a290000370000200c41086a200641086a2900003700002005200d41206a220c3602b002200641206a290300210b02400240200920086a41606a41074d0d002009210c0c010b200c41086a220f200c490d082009410174220c200f200c200f4b1b220c4100480d080240024020090d000240200c0d004101210a0c020b200c1021220a450d0d0c010b2009200c460d00200a2009200c1025220a450d0c0b2005200c3602ac022005200a3602a8020b200a200e6a20026a41206a200b3700002005200d41286a3602b002200841586a2108200241286a21022018200641286a470d000b200e20026a21020b0240024020052802ac02220c20026b4120490d0020052802a80221060c010b200241206a22062002490d06200c41017422092006200920064b1b22094100480d0602400240200c0d00024020090d00410121060c020b200910212206450d0b0c010b20052802a8022106200c2009460d002006200c200910252206450d0a0b200520093602ac02200520063602a8020b200620026a220620052903d002370000200641086a200541d0026a41086a290300370000200641186a200541d0026a41186a290300370000200641106a200541d0026a41106a290300370000200541a3016a200241206a360000200520052903a80237009b01200541b4026a2005419f016a290000370000200541c28289aa043600a902200541023a00a80220052005290098013700ad02200541a8026a10f80302402012450d00201241286c450d00201010230b410810212206450d082006200736020420062001360200410810212215450d08201520143602042015200336020020054198016a41186a220c420037030020054198016a41106a2209420037030020054198016a41086a220a4200370300200542003703980141e4dec400ad4280808080e00084100c2202290000210b200a200241086a2900003703002005200b370398012002102341f3dec400ad4280808080e00084100c2208290000210b200541d0026a41086a2202200841086a2900003703002005200b3703d00220081023201320052903d002370000201341086a2002290300370000200541d8006a41086a200a290300370300200541d8006a41106a2009290300370300200541d8006a41186a200c2903003703002005200529039801370358200541086a200541d8006a412010cd012005280208210d200528020c210e200541f8016a41186a4200370300200541f8016a41106a22044200370300200541f8016a41086a220a4200370300200542003703f8014180cdc200ad4280808080800184100c2208290000210b2002200841086a2900003703002005200b3703d00220081023200a2002290300370300200520052903d0023703f80141c9a1c200ad4280808080e00184100c2208290000210b2002200841086a2900003703002005200b3703d00220081023200420052903d002220b370300200541a8026a41086a200a290300370300200541a8026a41106a200b370300200541a8026a41186a2002290300370300200520052903f8013703a8022005200e41ac026a41ac02200d1b3602d00220164280808080800484221a200541d0026aad4280808080c00084100e200628020022022006280204460d022006200241c0016a3602002005200241e2006a2900003701aa022005200241ea006a2900003701b20220054198016a41086a220a20052903b0023703002005200241f2006a2900003701ba02200920052903b8023703002005200241fa006a2800003601c2022005200241fe006a2f00003b01c602200c20052903c0023703002005200241e0006a2f00003b01a802200520052903a80237039801200541d0026a41186a2202200c290300370300200541d0026a41106a220c2009290300370300200541d0026a41086a2209200a29030037030020052005290398013703d002200541f8006a41186a2002290300370300200541f8006a41106a200c290300370300200541f8006a41086a22022009290300370300200520052903d002370378200628020420062802006b41c0016e41057441206a220910212212450d0620122005290378370000201241186a200541f8006a41186a290300370000201241106a200541f8006a41106a290300370000201241086a20022903003700004101210c200541013602e001200520123602d80120052009410576220f3602dc01200628020022022006280204460d032006200241c0016a3602002005200241e2006a2900003701aa022005200241ea006a2900003701b20220054198016a41086a220e20052903b0023703002005200241f2006a2900003701ba0220054198016a41106a221020052903b8023703002005200241fa006a2800003601c2022005200241fe006a2f00003b01c60220054198016a41186a221820052903c0023703002005200241e0006a2f00003b01a802200520052903a80237039801200541d0026a41186a22092018290300370300200541d0026a41106a220a2010290300370300200541d0026a41086a2208200e29030037030020052005290398013703d0024102210c4120210d0340200541f8016a41186a2009290300220b370300200541f8016a41106a200a2903002211370300200541f8016a41086a20082903002216370300200520052903d00222173703f8012009200b370300200a201137030020082016370300200520173703d0020240200c417f6a200f470d00200541d8016a200f200628020420062802006b41c0016e41016a109a0120052802d80121120b2012200d6a220220052903d002370000200241186a2009290300370000200241106a200a290300370000200241086a20082903003700002005200c3602e0010240200628020022022006280204470d0020052802dc01210f0c050b2006200241c0016a3602002005200241e2006a2900003701aa022005200241ea006a2900003701b202200e20052903b0023703002005200241f2006a2900003701ba02201020052903b8023703002005200241fa006a2800003601c2022005200241fe006a2f00003b01c602201820052903c0023703002005200241e0006a2f00003b01a802200520052903a8023703980120092018290300370300200a20102903003703002008200e29030037030020052005290398013703d002200d41206a210d200c41016a210c20052802dc01210f0c000b0b41cacec50041c90041a4cfc500104f000b41cacec50041c9004194cfc500104f000b200610234100210f410121124100210c0c010b200610230b200541f8016a41186a220a4200370300200541f8016a41106a22084200370300200541f8016a41086a22064200370300200542003703f8014180cdc200ad4280808080800184100c2209290000210b200541d0026a41086a2202200941086a2900003703002005200b3703d0022009102320062002290300370300200520052903d0023703f80141d7a1c200ad4280808080c00084100c2209290000210b2002200941086a2900003703002005200b3703d00220091023200420052903d002370000200441086a2002290300370000200541a8026a41086a2006290300370300200541a8026a41106a2008290300370300200541a8026a41186a200a290300370300200520052903f8013703a802200c41057422084104722202417f4c0d02200210212206450d01200541003602d802200520023602d402200520063602d002200c200541d0026a106102400240200c0d0020052802d802210620052802d402210920052802d002210e0c010b410020052802d80222066b210a20052802d002210e20052802d40221092012210d0340200d210202402009200a6a411f4b0d00200641206a220c2006490d032009410174220d200c200d200c4b1b220c4100480d03024002400240024020090d000240200c0d004101210e0c020b200c1021210e0c030b2009200c470d010b200c21090c020b200e2009200c1025210e0b200c2109200e450d060b200241206a210d200e20066a220c2002290000370000200c41186a200241186a290000370000200c41106a200241106a290000370000200c41086a200241086a290000370000200a41606a210a200641206a2106200841606a22080d000b200520093602d402200520063602d8022005200e3602d0020b201a2006ad422086200ead84100e02402009450d00200e10230b0240200f41ffffff3f71450d00201210230b20151023410810212206450d032006200736020420062001360200410810212215450d032015201436020420152003360200024002400240024002402000450d00200628020022022006280204460d012006200241c0016a360200200520024182016a2900003701aa0220052002418a016a2900003701b20220054198016a41086a220c20052903b002370300200520024192016a2900003701ba0220054198016a41106a220920052903b80237030020052002419a016a2800003601c20220052002419e016a2f00003b01c60220054198016a41186a220a20052903c002370300200520024180016a2f00003b01a802200520052903a80237039801200541d0026a41186a2202200a290300370300200541d0026a41106a220a2009290300370300200541d0026a41086a2209200c29030037030020052005290398013703d002200541f8006a41186a220c2002290300370300200541f8006a41106a2202200a290300370300200541f8006a41086a220a2009290300370300200520052903d002370378200628020420062802006b41c0016e41057441206a220910212212450d0620122005290378370000201241186a200c290300370000201241106a2002290300370000201241086a200a2903003700004101210c200541013602e001200520123602d80120052009410576220f3602dc01200628020022022006280204460d022006200241c0016a360200200520024182016a2900003701aa0220052002418a016a2900003701b20220054198016a41086a220e20052903b002370300200520024192016a2900003701ba0220054198016a41106a221020052903b80237030020052002419a016a2800003601c20220052002419e016a2f00003b01c60220054198016a41186a221820052903c002370300200520024180016a2f00003b01a802200520052903a80237039801200541d0026a41186a22092018290300370300200541d0026a41106a220a2010290300370300200541d0026a41086a2208200e29030037030020052005290398013703d0024102210c4120210d0340200541f8016a41186a2009290300220b370300200541f8016a41106a200a2903002211370300200541f8016a41086a20082903002216370300200520052903d00222173703f8012009200b370300200a201137030020082016370300200520173703d0020240200c417f6a200f470d00200541d8016a200f200628020420062802006b41c0016e41016a109a0120052802d80121120b2012200d6a220220052903d002370000200241186a2009290300370000200241106a200a290300370000200241086a20082903003700002005200c3602e0010240200628020022022006280204470d0020052802dc01210f0c040b2006200241c0016a360200200520024182016a2900003701aa0220052002418a016a2900003701b202200e20052903b002370300200520024192016a2900003701ba02201020052903b80237030020052002419a016a2800003601c20220052002419e016a2f00003b01c602201820052903c002370300200520024180016a2f00003b01a802200520052903a8023703980120092018290300370300200a20102903003703002008200e29030037030020052005290398013703d002200d41206a210d200c41016a210c20052802dc01210f0c000b0b20151023200610230c030b200610234100210f410121124100210c0c010b200610230b20054198016a41186a2209420037030020054198016a41106a220a420037030020054198016a41086a22024200370300200542003703980141b0dfc300ad4280808080a00184100c2206290000210b2002200641086a2900003703002005200b370398012006102341bcbac500ad4280808080b00184100c2206290000210b200541d0026a41086a2208200641086a2900003703002005200b3703d00220061023201320052903d002370000201341086a2008290300370000200541d8006a41086a2002290300370300200541d8006a41106a200a290300370300200541d8006a41186a20092903003703002005200529039801370358200c41057422084104722202417f4c0d03200210212206450d02200541003602b002200520023602ac02200520063602a802200c200541a8026a106102400240200c0d0020052802b002210620052802ac02210920052802a802210e0c010b410020052802b00222066b210a20052802a802210e20052802ac0221092012210d0340200d210202402009200a6a411f4b0d00200641206a220c2006490d042009410174220d200c200d200c4b1b220c4100480d04024002400240024020090d000240200c0d004101210e0c020b200c1021210e0c030b2009200c470d010b200c21090c020b200e2009200c1025210e0b200c2109200e450d070b200241206a210d200e20066a220c2002290000370000200c41186a200241186a290000370000200c41106a200241106a290000370000200c41086a200241086a290000370000200a41606a210a200641206a2106200841606a22080d000b200520093602ac02200520063602b0022005200e3602a8020b20192006ad422086200ead84100e02402009450d00200e10230b0240200f41ffffff3f71450d00201210230b201510230b410810212206450d032006200736020420062001360200410810212201450d032001201436020420012003360200024002400240024002402000450d00200628020022022006280204460d012006200241c0016a3602002005200241a2016a2900003701aa022005200241aa016a2900003701b20220054198016a41086a220c20052903b0023703002005200241b2016a2900003701ba0220054198016a41106a220920052903b8023703002005200241ba016a2800003601c2022005200241be016a2f00003b01c60220054198016a41186a220a20052903c0023703002005200241a0016a2f00003b01a802200520052903a80237039801200541d0026a41186a2202200a290300370300200541d0026a41106a220a2009290300370300200541d0026a41086a2209200c29030037030020052005290398013703d002200541f8006a41186a220c2002290300370300200541f8006a41106a2202200a290300370300200541f8006a41086a220a2009290300370300200520052903d002370378200628020420062802006b41c0016e41057441206a220910212212450d0620122005290378370000201241186a200c290300370000201241106a2002290300370000201241086a200a2903003700004101210c200541013602e001200520123602d80120052009410576220f3602dc01200628020022022006280204460d022006200241c0016a3602002005200241a2016a2900003701aa022005200241aa016a2900003701b20220054198016a41086a220e20052903b0023703002005200241b2016a2900003701ba0220054198016a41106a221020052903b8023703002005200241ba016a2800003601c2022005200241be016a2f00003b01c60220054198016a41186a221820052903c0023703002005200241a0016a2f00003b01a802200520052903a80237039801200541d0026a41186a22092018290300370300200541d0026a41106a220a2010290300370300200541d0026a41086a2208200e29030037030020052005290398013703d0024102210c4120210d0340200541f8016a41186a2009290300220b370300200541f8016a41106a200a2903002211370300200541f8016a41086a20082903002216370300200520052903d00222173703f8012009200b370300200a201137030020082016370300200520173703d0020240200c417f6a200f470d00200541d8016a200f200628020420062802006b41c0016e41016a109a0120052802d80121120b2012200d6a220220052903d002370000200241186a2009290300370000200241106a200a290300370000200241086a20082903003700002005200c3602e0010240200628020022022006280204470d0020052802dc01210f0c040b2006200241c0016a3602002005200241a2016a2900003701aa022005200241aa016a2900003701b202200e20052903b0023703002005200241b2016a2900003701ba02201020052903b8023703002005200241ba016a2800003601c2022005200241be016a2f00003b01c602201820052903c0023703002005200241a0016a2f00003b01a802200520052903a8023703980120092018290300370300200a20102903003703002008200e29030037030020052005290398013703d002200d41206a210d200c41016a210c20052802dc01210f0c000b0b20011023200610230c030b20061023410121124100210c4100210f0c010b200610230b20054198016a41186a2209420037030020054198016a41106a220a420037030020054198016a41086a220242003703002005420037039801419dcdc200ad4280808080a00284100c2206290000210b2002200641086a2900003703002005200b370398012006102341d7a1c200ad4280808080c00084100c2206290000210b200541d0026a41086a2208200641086a2900003703002005200b3703d00220061023201320052903d002370000201341086a2008290300370000200541d8006a41086a2002290300370300200541d8006a41106a200a290300370300200541d8006a41186a20092903003703002005200529039801370358200c41057422084104722202417f4c0d03200210212206450d02200541003602b002200520023602ac02200520063602a802200c200541a8026a106102400240200c0d0020052802b002210620052802ac02210920052802a802210e0c010b410020052802b00222066b210a20052802a802210e20052802ac0221092012210d0340200d210202402009200a6a411f4b0d00200641206a220c2006490d042009410174220d200c200d200c4b1b220c4100480d04024002400240024020090d000240200c0d004101210e0c020b200c1021210e0c030b2009200c470d010b200c21090c020b200e2009200c1025210e0b200c2109200e450d070b200241206a210d200e20066a220c2002290000370000200c41186a200241186a290000370000200c41106a200241106a290000370000200c41086a200241086a290000370000200a41606a210a200641206a2106200841606a22080d000b200520093602ac02200520063602b0022005200e3602a8020b20192006ad422086200ead84100e02402009450d00200e10230b0240200f41ffffff3f71450d00201210230b200110230b200541f0026a24000f0b102c000b1033000b1032000b102a000bdb1104047f017e137f047e23004180036b220224002002412036022420022001360220200241286a2001ad42808080808004841010108b010240024002400240200228022822030d00200041003602000c010b200228022c21042002200241306a28020036023c20022003360238200241186a200241386a1088010240024020022802180d00200228021c2205200228023c411c6e2201200120054b1bad421c7e2206422088a70d032006a72201417f4c0d030240024020010d00410421070c010b200110212207450d050b200241003602482002200736024020022001411c6e3602440240024002400240024002402005450d00200241a0026a41c4006a2108410021094100210a0340200241106a200241386a10880120022802100d062002280214220b200228023c41e0006e22012001200b4b1bad42e0007e2206422088a70d0a2006a72201417f4c0d0a0240024020010d004108210c0c010b20011021220c450d0c0b200241003602582002200c3602502002200141e0006e3602540240024002400240200b450d004100210d0340200241a0026a200241386a108304200241e0016a41386a2201200241a0026a41386a290300370300200241e0016a41306a220e200241a0026a41306a290300370300200241e0016a41286a220f200241a0026a41286a290300370300200241e0016a41206a2210200241a0026a41206a290300370300200241e0016a41186a2211200241a0026a41186a290300370300200241e0016a41106a2212200241a0026a41106a290300370300200241e0016a41086a2213200241a0026a41086a290300370300200241c0016a41086a2214200841086a290200370300200241c0016a41106a2215200841106a290200370300200241c0016a41186a2216200841186a280200360200200220022903a0023703e001200220082902003703c00120022802e0022217450d0220024180016a41386a2218200129030037030020024180016a41306a2219200e29030037030020024180016a41286a220e200f29030037030020024180016a41206a220f201029030037030020024180016a41186a2210201129030037030020024180016a41106a2211201229030037030020024180016a41086a22122013290300370300200241e0006a41086a22132014290300370300200241e0006a41106a22142015290300370300200241e0006a41186a22152016280200360200200220022903e00137038001200220022903c0013703600240200d2002280254470d00200241d0006a200d41011096012002280250210c2002280258210d0b200c200d41e0006c6a2201200229038001370300200141106a2011290300370300200141086a2012290300370300201929030021062018290300211a200e290300211b200f290300211c2010290300211d200141c0006a2017360200200141186a201d370300200141206a201c370300200141286a201b370300200141c4006a2002290360370200200141386a201a370300200141306a2006370300200141cc006a2013290300370200200141d4006a2014290300370200200141dc006a20152802003602002002200d41016a220d360258200b417f6a220b0d000b0b200c450d0920022902542106200241086a200241386a10880120022802080d06200228020c220b200228023c220d41027622012001200b4b1b2201410274220e417f4c0d0d20010d014104210f0c020b0240200d450d00200d41e0006c210d200c41d4006a210103400240200141706a2802002208450d00200841306c450d002001416c6a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141e0006a2101200d41a07f6a220d0d000b0b20022802542201450d08200141e0006c0d070c080b200e1021220f450d0c0b200241003602a802200220013602a4022002200f3602a0020240200b450d00410021010340200d4104490d042002200d417c6a220d36023c20022002280238220e41046a360238200e280000220e418094ebdc034b0d040240200120022802a402470d00200241a0026a20014101107920022802a002210f20022802a80221010b200f20014102746a200e3602002002200141016a22013602a802200b417f6a220b0d000b0b200f450d0320022902a402211a200d4104490d04200a41016a210a2002200d417c6a36023c20022002280238220141046a3602382001280000210d024020092002280244470d00200241c0006a2009410110a30120022802402107200228024821090b20072009411c6c6a2201200d360218200120063702042001200c360200200141106a201a3702002001410c6a200f3602002002200941016a2209360248200a2005470d000b0b2007450d0520002002290244370204200020073602000c060b20022802a40241ffffffff0371450d00200f10230b02402006422088a72201450d00200141e0006c210d200c41d4006a210103400240200141706a2802002208450d00200841306c450d002001416c6a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141e0006a2101200d41a07f6a220d0d000b0b2006a72201450d02200141e0006c0d010c020b0240201a42ffffffff0383500d00200f10230b02402006422088a72201450d00200141e0006c210d200c41d4006a210103400240200141706a2802002208450d00200841306c450d002001416c6a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141e0006a2101200d41a07f6a220d0d000b0b2006a72201450d01200141e0006c450d010b200c10230b2007200910f00320022802442201450d002001411c6c450d00200710230b200241003602e801200242013703e0012002410a360284012002200241206a360280012002200241e0016a3602c001200241b4026a4101360200200242013702a40220024180c5c6003602a002200220024180016a3602b002200241c0016a4184a5c200200241a0026a10311a20023502e80142208620023502e00184100a024020022802e401450d0020022802e00110230b200041003602000b2004450d00200310230b20024180036a24000f0b1032000b1033000bd90101037f02402001450d0020002001411c6c6a21020340024020002802082201450d00200141e0006c2103200028020041d4006a210103400240200141706a2802002204450d00200441306c450d002001416c6a28020010230b0240200128020041ffffff3f71450d002001417c6a28020010230b200141e0006a2101200341a07f6a22030d000b0b0240200041046a2802002201450d00200141e0006c450d00200028020010230b2000411c6a21010240200041106a28020041ffffffff0371450d00200028020c10230b2001210020012002470d000b0b0bfa0301067f230041106b22032400024002402002411c6c41046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b20034100360208200320043602042003200536020020022003106102402002450d0020012002411c6c6a2106034020012802002105200128020822022003106102402002450d002005200241e0006c6a2107034020032005412010622003200541206a36020c2003410c6a200310db012003200541306a36020c2003410c6a200310db0120052802402102200528024822042003106102402004450d00200441306c210403402003200241106a412010622003200236020c200241306a21022003410c6a200310db01200441506a22040d000b0b200541e0006a210820052802502102200528025822042003106102402004450d002004410574210403402003200241201062200241206a2102200441606a22040d000b0b2008210520082007470d000b0b2001411c6a2105200128020c2102200128021422042003106102402004450d002004410274210403402003200228020036020c20032003410c6a41041062200241046a21022004417c6a22040d000b0b2003200128021836020c20032003410c6a410410622005210120052006470d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b1032000b1033000ba90603067f017e047f230041f0006b22022400200241286a200141146a350200422086200135020c841019108b010240024020022802282203450d00200241086a2104200141106a2105034002400240200141086a22062802002207200229022c2208422088a722094b0d002001280200220a2003460d01200a2003200710a305450d010b2008a7450d02200310230c020b02402005280200450d00200128020c10230b2001200336020c2005200837020020022003200910a4020240024020022d00104102460d00200241186a41086a200441086a280200360200200220042902003703182002280204210b2002280200210c024020012d0018450d002001350214422086200135020c8410110b2001280214220920062802002203490d0102400240200920036b22094108490d00200941786a2107200128020c20036a41086a210a0c010b4100210702404100280298ab470d00419ca8c700210a0c010b41002107410028028880402103410028028480402109410028029cab472106200241e000360268200242de80808010370360200241c79ec00036025c20024213370254200241b49ec00036025020024200370348419ca8c700210a2002419ca8c70036024420024201370338200241ac9ec00036023420024113360230200241b49ec00036022c20024101360228200941a0a1c000200641024622061b200241286a200341b8a1c00020061b2802101102000b41002103200241003a00480240034020072003460d01200241286a20036a200a20036a2d00003a00002002200341016a22093a00482009210320094120470d000b20002002290328370000200041186a200241286a41186a290300370000200041106a200241286a41106a290300370000200041086a200241286a41086a2903003700002000200b3602242000200c36022020002002290318370228200041306a200241186a41086a2802003602000c050b0240200341ff0171450d00200241003a00480b200b41ffffff3f71450d00200c10230b200241286a2001350214422086200135020c841019108b01200228022822030d010c020b0b2003200941dc96c7001044000b200041023a00300b200241f0006a24000b13002000410236020420004184b0c3003602000b3400200041db97c70036020420004100360200200041146a4107360200200041106a41b8b7c300360200200041086a42073702000b2c01017f02404104102122020d001033000b20004284808080c00037020420002002360200200241003600000bb20201057f230041106b2203240002400240024002402001410274220441046a2205417f4c0d000240024020050d00410121060c010b200510212206450d020b2003410036020820032005360204200320063602002001200310610240024020032802042207200328020822016b2004490d0020032802002105200721060c010b200120046a22052001490d03200741017422062005200620054b1b22064100480d030240024020070d00024020060d00410121050c020b2006102122050d010c060b2003280200210520072006460d0020052007200610252205450d050b20032006360204200320053602000b200520016a2000200410a1051a2002290200200120046aad4220862005ad84100e02402006450d00200510230b200341106a24000f0b1032000b1033000b102c000b102a000b9111030b7f017e017f230041d0006b2201240020014100360230200142013703280240024002402000280200220241044b0d000240024002400240024020020e050001020304000b410110212202450d062001410136022c20012002360228200241013a000020014101360230200028020421032000410c6a2802002202200141286a10610240024020020d00200128023021020c010b2003200241286c6a21044100200128023022056b2106410021020340200520026a2107024002402006200128022c22086a4120490d00200128022821092008210a0c010b200741206a22092007490d082008410174220a2009200a20094b1b220a4100480d080240024020080d000240200a0d00410121090c020b200a102122090d010c0b0b200128022821092008200a460d0020092008200a10252209450d0a0b2001200a36022c200120093602280b200920056a20026a220b200320026a2208290000370000200b41186a200841186a290000370000200b41106a200841106a290000370000200b41086a200841086a2900003700002001200741206a220b360230200841206a290300210c0240200a20066a41606a41074b0d00200b41086a220d200b490d08200a410174220b200d200b200d4b1b220b4100480d0802400240200a0d000240200b0d00410121090c020b200b10212209450d0b0c010b200a200b460d002009200a200b10252209450d0a0b2001200b36022c200120093602280b200920056a20026a41206a200c3700002001200741286a360230200641586a2106200241286a21022004200841286a470d000b200520026a21020b200041106a280200210a02400240200128022c220920026b4104490d00200128022821080c010b200241046a22082002490d06200941017422062008200620084b1b22064100480d060240024020090d00024020060d00410121080c020b200610212208450d090c010b2001280228210820092006460d0020082009200610252208450d080b2001200636022c200120083602280b200820026a200a3600002001200241046a3602300c040b410110212202450d052001410136022c20012002360228200241023a0000200141013602302000280204210902400240200128022c2208417f6a4104490d00200128022821020c010b200841017422024105200241054b1b220a4100480d052001280228210202402008200a460d0020022008200a10252202450d070b2001200a36022c200120023602280b200220093600012001410536023020002802082102200041106a2802002208200141286a10610240024020080d002001280230210a0c010b2002200841286c6a210b2001280230210a034002400240200128022c2207200a6b4120490d00200a41206a210820012802282109200721060c010b200a41206a2208200a490d07200741017422092008200920084b1b22064100480d070240024020070d00024020060d00410121090c020b200610212209450d0a0c010b2001280228210920072006460d0020092007200610252209450d090b2001200636022c200120093602280b2009200a6a220a2002290000370000200a41186a200241186a290000370000200a41106a200241106a290000370000200a41086a200241086a29000037000020012008360230200241206a290300210c0240200620086b41074b0d00200841086a220a2008490d0720064101742207200a2007200a4b1b220a4100480d070240024020060d000240200a0d00410121090c020b200a10212209450d0a0c010b2006200a460d0020092006200a10252209450d090b2001200a36022c200120093602280b200920086a200c3700002001200841086a220a360230200b200241286a2202470d000b0b200041146a280200210902400240200128022c2208200a6b4104490d00200128022821020c010b200a41046a2202200a490d05200841017422062002200620024b1b22064100480d050240024020080d00024020060d00410121020c020b200610212202450d080c010b2001280228210220082006460d0020022008200610252202450d070b2001200636022c200120023602280b2002200a6a20093600002001200a41046a3602300c030b410110212202450d042001410136022c20012002360228200241033a000020014101360230200041086a290300210c02400240200128022c2208417f6a4108490d00200128022821020c010b200841017422024109200241094b1b22094100480d0420012802282102024020082009460d0020022008200910252202450d060b2001200936022c200120023602280b2002200c370001200141093602300c020b410110212202450d032001410136022c20012002360228200241043a0000200141013602302000280204210902400240200128022c2208417f6a4104490d00200128022821020c010b200841017422024105200241054b1b220a4100480d032001280228210202402008200a460d0020022008200a10252202450d050b2001200a36022c200120023602280b20022009360001200141053602300c010b410110212202450d022001410136022c20012002360228200241053a0000200141013602302000280204210902400240200128022c2208417f6a4104490d00200128022821020c010b200841017422024105200241054b1b220a4100480d022001280228210202402008200a460d0020022008200a10252202450d040b2001200a36022c200120023602280b20022009360001200141053602300b200141146a200141306a2802003600002001200129032837000c200141346a200141106a290000370000200141c6a4b9da04360029200141023a00282001200129000937002d200141286a10f80302402000280200220241014b0d000240024020020e020001000b200041086a2802002202450d01200241286c450d01200028020410230c010b2000410c6a2802002202450d00200241286c450d00200041086a28020010230b200141d0006a24000f0b102c000b102a000bd00703047f017e057f230041f0006b22012400200141c8006a41186a4200370300200141c8006a41106a22024200370300200141c8006a41086a220342003703002001420037034841e4dec400ad4280808080e00084100c220429000021052003200441086a29000037030020012005370348200410234191dfc400ad4280808080e00084100c22042900002105200141386a41086a2206200441086a2900003703002001200537033820041023200220012903382205370300200141186a41086a2003290300370300200141186a41106a2005370300200141186a41186a200629030037030020012001290348370318200141c8006a200141186a10f70202400240200128024822020d0041002106200141003602102001420437030841042102410021030c010b2001200129024c220537020c200120023602082005422088a721032005a721060b200141c8006a41206a2207200041206a280200360200200141c8006a41186a2208200041186a290200370300200141c8006a41106a2209200041106a290200370300200141c8006a41086a2204200041086a29020037030020012000290200370348024020032006470d00200141086a2003410110a201200128020c210620012802082102200128021021030b2002200341246c220a6a22002001290348370200200041206a2007280200360200200041186a2008290300370200200041106a2009290300370200200041086a20042903003702002001200341016a22003602102008420037030020094200370300200442003703002001420037034841e4dec400ad4280808080e00084100c220829000021052004200841086a29000037030020012005370348200810234191dfc400ad4280808080e00084100c22082900002105200141386a41086a2207200841086a2900003703002001200537033820081023200920012903382205370300200141186a41086a2004290300370300200141186a41106a2005370300200141186a41186a2007290300370300200120012903483703182001412036024c2001200141186a36024820022000200141c8006a10f802024020002003490d00200a41246a21032002210003400240024020002d0000220441044b0d0002400240024020040e050400010204040b2000410c6a280200450d03200041086a28020010230c030b2000410c6a280200450d02200041086a28020010230c020b2000410c6a280200450d01200041086a28020010230c010b200041086a280200450d00200041046a28020010230b200041246a21002003415c6a22030d000b0b02402006450d00200641246c450d00200210230b200141f0006a24000bed0803067f017e057f230041f0016b2202240002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005417f6a220541014b0d0320050e020102010b200042023703000c040b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a36020420012004410d6a36020041002105200241003a008801410d20036b2109200341726a2106024002400340200920056a450d01200241e8006a20056a200420056a220a410d6a2d00003a0000200120063602042001200a410e6a3602002002200541016a220a3a0088012006417f6a2106200a2105200a4120470d000b200241d0016a41186a200241e8006a41186a290300370300200241d0016a41106a200241e8006a41106a290300370300200241d0016a41086a200241e8006a41086a290300370300200220022903683703d00141002105200241003a00a8012004200a6a2109200a20036b410d6a210a0340200a20056a450d02200241e8006a20056a200920056a2204410d6a2d00003a00002001200636020420012004410e6a3602002002200541016a22043a00a8012006417f6a210620042105200441c000470d000b200241086a41386a2201200241e8006a41386a290300370300200241086a41306a2205200241e8006a41306a290300370300200241086a41286a2206200241e8006a41286a290300370300200241086a41206a2204200241e8006a41206a290300370300200241086a41186a220a200241e8006a41186a290300370300200241086a41106a2203200241e8006a41106a290300370300200241086a41086a2209200241e8006a41086a290300370300200241c8006a41086a220b200241d0016a41086a290300370300200241c8006a41106a220c200241d0016a41106a290300370300200241c8006a41186a220d200241d0016a41186a29030037030020022002290368370308200220022903d001370348200041106a20073602002000200837030820004200370300200020022903483702142000411c6a200b290300370200200041246a200c2903003702002000412c6a200d290300370200200020022903083702342000413c6a2009290300370200200041c4006a2003290300370200200041cc006a200a290300370200200041d4006a2004290300370200200041dc006a2006290300370200200041e4006a2005290300370200200041ec006a20012903003702000c060b200541ff0171450d01200241003a0088010c010b200541ff0171450d00200241003a00a8010b200042023703000c030b20064104490d012004280001210620012003417b6a22053602042001200441056a36020020054108490d0120004201370300200429000521082001200341736a36020420012004410d6a360200200041106a200636020020002008370308200041146a200241e8006a41e40010a1051a0c020b200042023703000c010b200042023703000b200241f0016a24000b130020004107360204200041dcc2c3003602000b340020004196adc30036020420004100360200200041146a4109360200200041106a4198d9c300360200200041086a42093702000b910101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120102122060d001033000b20062002290300370000200042a0808080800437020420002006360200200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000200241206a24000b2d01017f02404104102122020d001033000b20004284808080c00037020420002002360200200241e8073600000b13002000410436020420004188e9c3003602000bcd0505067f017e047f017e027f23004180026b22022400024002400240024002402000280200220320002802044f0d00200028020c2104200141086a2105200241a0016a4102722106024003402000200341016a360200200241186a2000280208280200220710f60220022d00184101460d0120022900192108200241086a200710880120022802080d012007280204200228020c2203490d012003417f4c0d0302400240024020030d00410121090c010b200310272209450d0820072802042003490d0120092007280200200310a1051a2007280204220a2003490d062007200a20036b3602042007200728020020036a3602000b20022008370310024002402001280200220b450d002001280204210c0c010b2006410041da0010a0051a200241186a410041840110a0051a41e4011021220b450d074100210c200b4100360200200b41046a200241a0016a41dc0010a1051a200b41e0006a200241186a41840110a1051a200141003602042001200b3602000b2003ad220d422086200d84210d024002400340200b41086a2107200b2f0106220e41037421034100210a024003402003450d01200241106a2007410810a305220f450d03200341786a2103200a41016a210a200741086a2107200f417f4a0d000b200a417f6a210e0b0240200c450d00200c417f6a210c200b200e4102746a41e4016a280200210b0c010b0b2002200837022c200220053602282002200e360224200220013602202002200b36021c200241003602182002200d3702a401200220093602a001200241186a200241a0016a1080040c010b200b200a410c6c6a220341e4006a2207280200210a2007200d370200200341e0006a22072802002103200720093602002003450d00200a450d00200310230b200028020022032000280204490d010c030b0b200910230b200441013a00000b20024180026a24000f0b1032000b2003200a418ca9c0001044000b102a000b1033000bc91305027f017e067f037e0a7f230041b0036b2202240020002802102203200328020041016a36020020002902142104200028020c2105200028020821062000280200210320002802042100200241f0016a41086a2207200141086a280200360200200220012902003703f001024002400240024002400240024020002f01062201410b490d00200241d0026a410272410041da0010a0051a200241386a410041840110a0051a41e40110212208450d0420084100360200200841046a200241d0026a41dc0010a1051a200841e0006a200241386a41840110a1052107200241386a41086a2209200041b0016a280200360200200220002902a8013703382000413f6a2d0000210a200041386a350000210b2000413c6a330000210c2000413e6a310000210d200841086a200041c0006a20002f010641796a220141037410a105210e2007200041b4016a2001410c6c10a1052107200041063b0106200820013b0106200241d0026a41086a2009280200360200200220022903383703d002200b200c200d4210868442208684210b0240024020054107490d002005410374200e6a41506a200e200541796a22094103746a220e200141ffff037120096b41037410a2051a200e20043700002005410c6c20076a220541b87f6a200541ac7f6a2205200841066a22012f010020096b410c6c10a2051a200541086a200241f0016a41086a280200360200200520022903f0013702000c010b200041086a20054103746a220741086a2007200041066a22012f010020056b41037410a2051a20072004370000200041e0006a2005410c6c6a2207410c6a200720012f010020056b410c6c10a2051a200741086a200241f0016a41086a280200360200200720022903f0013702000b200120012f010041016a3b0100200241286a41086a220f200241d0026a41086a22102802002205360200200241086a221120053602002002200a3a0017200220022903d00222043703282002200b3e02102002200b4230883c00162002200b4220883d01142002200437030020022903102104200028020022090d01410021120c020b200020054103746a220341106a200341086a2203200120056b41037410a2051a2003200437000020002005410c6c6a220341ec006a200341e0006a220120002f010620056b410c6c10a2051a200341e8006a2007280200360200200120022903f001370200200020002f010641016a3b01060c020b20002f01042113200241d0026a41027221144100210002400340200220093602242002200341016a2212360220200f20112802003602002002200229030037032820032000470d01201341ffff0371210702400240024020092f01062203410b490d002014410041da0010a0051a200241f0016a200241d0026a41dc0010a1051a200241386a410041b40110a0051a41940210212201450d0720014100360200200141046a200241f0016a41dc0010a1051a200141e0006a200241386a41b40110a10521002009290038210b200241386a41086a220e200941b0016a280200360200200220092902a801370338200141086a200941c0006a20092f0106220541796a220341037410a10521152000200941b4016a2003410c6c10a1052116200141e4016a20094180026a2005417a6a220a41027410a1052117200941063b0106200120033b01060240200a450d00410021032017210003402000280200220520033b010420052001360200200041046a2100200a200341016a2203470d000b0b2010200e280200220336020020022002290338220c3703d002200e20033602002002200c370338201341ffff037122004107490d0120152007417a6a22004103746a2015200741796a22034103746a220520012f010620036b41037410a2051a200520043700002007410c6c20166a220541b87f6a200541ac7f6a220520012f0106220a20036b410c6c10a2051a200541086a200f280200360200200520022903283702002001200a41016a22053b01062007410274221320176a416c6a201720004102746a220a200541ffff0371220720006b41027410a2051a200a200836020020072000490d02200120136a41cc016a2100034020002802002205200341016a22033b010420052001360200200041046a210020032007490d000c030b0b200941086a2205200741016a22004103746a200520074103746a2205200320076b220141037410a2051a2005200437000020092007410c6c6a220541ec006a200541e0006a220a2001410c6c10a2051a200541e8006a200241286a41086a280200360200200a20022903283702002009200341016a22033b01062007410274200941e4016a22056a41086a200520004102746a2205200341ffff0371220120006b41027410a2051a20052008360200201341ffff037120014f0d0520092000417f6a22034102746a41e8016a2100034020002802002205200341016a22033b010420052009360200200041046a210020032001490d000c060b0b200941086a2203200741016a220a4103746a200320074103746a220320092f0106220520076b221341037410a2051a20032004370000200941e0006a2007410c6c6a2203410c6a20032013410c6c10a2051a200341086a200f280200360200200320022903283702002009200541016a22033b010620074102742217200941e4016a22056a41086a2005200a4102746a2213200341ffff03712205200a6b41027410a2051a20132008360200200020054f0d00200920176a41e8016a2103034020032802002200200741016a22073b010420002009360200200341046a210320052007470d000b0b200241106a41086a200e280200220336020020112003360200200220022903382204370310200220043703000240200928020022030d0020012108200b21040c030b20092f0104211320032109200b21042001210820122100201221030c000b0b41ecdbc4004135418c94c700102d000b200241d0026a410272410041da0010a0051a200241f0016a200241d0026a41dc0010a1051a200241386a410041b40110a0051a41940210212203450d0120034100360200200341046a200241f0016a41dc0010a1051a200341e0006a200241386a41b40110a10521052003200628020022003602e4012006200336020020062006280204220141016a360204200041003b010420002003360200200241386a41086a200241086a2802003602002002200229030037033820012012470d0220032f01062200410a4b0d0320052000410c6c6a22052002290338370200200320004103746a41086a2004370000200541086a200241386a41086a2802003602002003200041016a22004102746a41e4016a2008360200200320003b0106200820003b0104200820033602000b200241b0036a24000f0b102a000b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000bb30301027f230041106b220224000240024020002d00004101460d00200241003a000e20012002410e6a4101106220002d0001220341094b0d010240024002400240024002400240024002400240024020030e0a00010203040506070809000b200241003a000f2002410f6a21000c090b200241013a000f2002410f6a21000c080b200241023a000f2002410f6a21000c070b200241033a000f2002410f6a21000c060b200241043a000f2002410f6a21000c050b200241053a000f2002410f6a21000c040b200241063a000f2002410f6a21000c030b200241073a000f20012002410f6a410110622002200041026a2d00003a000f2002410f6a21000c020b200241083a000f2002410f6a21000c010b200241093a000f2002410f6a21000b20012000410110620c010b200241013a000e20012002410e6a4101106220002d0001220341024b0d0002400240024020030e03000102000b200241003a000e20012002410e6a410110620c020b200241013a000e20012002410e6a410110620c010b200241023a000e20012002410e6a410110622002200041026a2d00003a000e20012002410e6a410110620b200241106a24000bbc0201057f024002400240200041046a2802002202200041086a28020022036b20012802042204200128020022056b22064f0d00200320066a22052003490d01200241017422042005200420054b1b22054100480d010240024020020d00024020050d00410121040c020b2005102122040d010c040b2000280200210420022005460d0020042002200510252204450d03200041086a28020021030b20002004360200200041046a200536020020012802002105200128020421040b024020052004460d00200028020021042001200541016a360200200420036a20052d00003a0000200341016a2103200128020022052001280204460d0003402001200541016a360200200420036a20052d00003a0000200341016a2103200128020022052001280204470d000b0b200041086a20033602000f0b102c000b102a000b9e06020a7f017e230041d0016b2202240041002103200241003a00c0012001280204417f6a2104024002400240024003402004417f460d01200241a0016a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c0012004417f6a21042005210320054120470d000b20024180016a41186a2204200241a0016a41186a220329030037030020024180016a41106a2205200241a0016a41106a220629030037030020024180016a41086a2207200241a0016a41086a2208290300370300200220022903a00137038001200241a0016a200110d00120022802c0012209450d01200241c0006a41186a220a2004290300370300200241c0006a41106a220b2005290300370300200241c0006a41086a22052007290300370300200241c0006a41286a22072008290300370300200241c0006a41306a22082006290300370300200241c0006a41386a220620032903003703002002200229038001370340200220022903a001370360200241c4016a2802002104200241a0016a41286a290300210c200241086a2005290300370300200241106a200b290300370300200241186a200a290300370300200241206a22032002290360370300200241286a22052007290300370300200241306a22072008290300370300200241386a2208200629030037030020022002290340370300200241c0006a200110cf012002280240450d02200241a0016a41086a2201200241c0006a41086a280200360200200220022903403703a001200041386a2008290300370300200041306a2007290300370300200041286a2005290300370300200041206a2003290300370300200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a29030037030020002002290300370300200041c8006a200c3703002000200436024420002009360240200041d0006a20022903a001370300200041d8006a20012802003602000c030b200341ff0171450d00200241003a00c0010b200041003602400c010b200041003602402004450d00200441306c450d00200910230b200241d0016a24000bbb0504037f017e087f037e23004180016b220224002002200110880102400240024002402002280200450d00200041003602000c010b20022802042203200128020441286e2204200420034b1bad42287e2205422088a70d012005a72204417f4c0d010240024020040d00410821060c010b200410212206450d030b4100210720024100360210200220063602082002200441286e36020c0240024002402003450d0041002108034041002104200241003a0078200841016a210820012802042109417f210a034020092004460d03200241d8006a20046a2001280200220b2d00003a000020012009200a6a3602042001200b41016a3602002002200441016a220c3a0078200a417f6a210a200c2104200c4120470d000b200241386a41186a2204200241d8006a41186a290300370300200241386a41106a220a200241d8006a41106a290300370300200241386a41086a220d200241d8006a41086a290300370300200220022903583703382009200c6b220c4108490d03200b29000121052001200b41096a3602002001200c41786a360204200241186a41086a220c200d290300370300200241186a41106a2209200a290300370300200241186a41186a220a20042903003703002002200229033837031802402007200228020c470d00200241086a2007410110980120022802082106200228021021070b2006200741286c6a22042002290318370300200c290300210e2009290300210f200a290300211020042005370320200441186a2010370300200441106a200f370300200441086a200e3703002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c020b200441ff0171450d00200241003a00780b20004100360200200228020c2204450d00200441286c450d00200610230b20024180016a24000f0b1032000b1033000bb70204027f017e027f037e230041106b220224000240024020012802082203ad42287e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510212206450d020b20024100360208200220063602002002200541286e3602042002410020031098012002280208210502402003450d00200341286c21062002280200200541286c6a21030340200141086a2903002104200141106a2903002107200141186a290300210820012903002109200341206a200141206a290300370300200341186a2008370300200341106a2007370300200341086a200437030020032009370300200341286a2103200541016a2105200141286a2101200641586a22060d000b0b20002002290300370200200041086a2005360200200241106a24000f0b1032000b1033000b8c0201037f024002400240024002400240024020012802000e0400010203000b41012102410110212201450d05200141003a0000410121030c040b410110212202450d04200241013a00002001280204210320024101410510252202450d042002200336000120012802082104410a210320024105410a10252201450d04200120043600050c020b41012102410110212201450d03200141023a0000410121030c020b410110212202450d02200241033a00002001280204210320024101410510252202450d022002200336000120012802082104410a210320024105410a10252201450d02200120043600050b410921020b2000200236020820002003360204200020013602000f0b102a000bd20402067f047e230041f0006b220224002002412036020420022001360200200241086a2001ad42808080808004841010108b0102400240200228020822030d00200041023a00000c010b200228020c210402400240200241106a2802002205450d0020032d0000220641014b0d004100210102400240024020060e020100010b41002101200241003a0068200341016a21072005417f6a2106034020062001460d02200241c8006a20016a200720016a2d00003a00002002200141016a22053a00682005210120054120470d000b200241186a41186a200241c8006a41186a290300370300200241186a41106a200241c8006a41106a290300370300200241186a41086a200241c8006a41086a29030037030020022002290348370318410121010b200241c8006a41186a200241186a41186a2903002208370300200241c8006a41106a200241186a41106a2903002209370300200241c8006a41086a200241186a41086a290300220a37030020022002290318220b370348200041196a2008370000200041116a2009370000200041096a200a3700002000200b3700010c020b200141ff0171450d00200241003a00680b20024100360220200242013703182002410a36023c200220023602382002200241186a360244200241dc006a41013602002002420137024c20024180c5c6003602482002200241386a360258200241c4006a4184a5c200200241c8006a10311a2002350220422086200235021884100a0240200228021c450d00200228021810230b410221010b200020013a00002004450d00200310230b200241f0006a24000bf90403027f017e057f230041d0006b2202240041a7b3c500ad4280808080c00084100c22032900002104200241086a200341086a290000370300200220043703002003102341b4bdc500ad4280808080900284100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b8a06010c7f23004190016b220324002003200236021420032001360210200341186a2002ad4220862001ad841010108b010240024002400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a1088010240024020032802080d00200328020c2206200328022c22074105762201200120064b1b22014105742202417f4c0d030240024020010d00410121080c010b200210212208450d050b41002109200341003602402003200136023c20032008360238024002402006450d004100210a03402007210b41002101200341003a008801200a41016a210a0340200b2001460d03200341e8006a20016a200328022822022d00003a00002003200241016a3602282003200141016a22023a0088012002210120024120470d000b200341c8006a41186a220c200341e8006a41186a290300370300200341c8006a41106a220d200341e8006a41106a290300370300200341c8006a41086a220e200341e8006a41086a2903003703002003200329036837034802402009200328023c470d00200341386a20094101109a0120032802382108200328024021090b200b20026b2107200820094105746a22012003290348370000200141186a200c290300370000200141106a200d290300370000200141086a200e2903003700002003200941016a2209360240200a2006470d000b2003200b20026b36022c0b2008450d012000200329023c370204200020083602000c020b2003410036022c0240200141ff0171450d00200341003a0088010b200328023c41ffffff3f71450d00200810230b20034100360250200342013703482003410a36023c2003200341106a3602382003200341c8006a360234200341fc006a41013602002003420137026c20034180c5c6003602682003200341386a360278200341346a4184a5c200200341e8006a10311a2003350250422086200335024884100a0240200328024c450d00200328024810230b200041003602000b2005450d00200410230b20034190016a24000f0b1032000b1033000bf90403027f017e057f230041d0006b22022400418df8c300ad4280808080900184100c22032900002104200241086a200341086a29000037030020022004370300200310234196f8c300ad4280808080e00084100c22032900002104200241106a41086a200341086a29000037030020022004370310200310232002200136022c20022002412c6aad4280808080c00084100d220329000037033020031023200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a10650240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d00200110212203450d032001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1032000b1033000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000be50f04107f017e067f017e230041b0106b220224000240024002400240024020012802082203200128020c460d00200241d00d6a41c0026a2104200241c00a6a41046a2105200241ed0d6a2106200241c00a6a41b0026a2107200241c00a6a41c0026a210820024180086a41046a2109200241106a41086a210a200241900d6a410d6a220b41076a210c03402001200341d8026a3602082003280200210d200241206a200341046a41c00210a1051a200a200341d0026a2903003703002002200341c8026a290300370310200341c4026a28020022034102460d012001280210210e20024180086a200241206a41c00210a1051a200241d00d6a200941bc0210a1051a20042002290310370300200441086a200a2903003703002002200336028c10200241c00a6a200241d00d6a10c9022001200128021420022802c00a6a220f3602142005200941bc0210a1051a200241b0056a41086a2210200a290300370300200220022903103703b005200241c0056a200241c00a6a41c00210a1051a20024180086a200241c0056a41c00210a1051a200241c00a6a200941bc0210a1051a200841086a22112010290300370300200820022903b005370300200220033602fc0c02400240024020022d00880d41c000490d00200e450d00200f20012802182802004b0d010b200241d00d6a200241c00a6a10dc034100210e200241003b01a80d200241900d6a200241d00d6a200241a80d6a10cf02024020022802f00c2210450d0020022802f80c2203417f4c0d070240024020030d004101210e410021110c010b2003211120031021220e450d090b200241003602d40d200220113602d00d200e2010200310a1051a200220033602d40d20022903d00d21120b0240024020022802fc0c4101460d004101211020022802f00c450d01200241d00d6a2007109d0420023502d80d42208620022802d00d2203ad84101120022802d40d450d01200310230c010b20022802800d21030240024020022802840d221041014b0d00200241003602fc0c0c010b200241013602fc0c20022010417f6a3602840d0b200128021c28020020036a2113024020022802f00c450d00200241a0106a2013108a04200241a80d6a20023502a81042208620022802a0102214ad841010108b010240024020022802a80d22150d00200241003602d80d200242083703d00d200241d00d6a4100410010ab0120022802d80d41d0026c220341d0026d211620022802d40d211720022802d00d211802402003450d00201641d0026c21102018210303400240200341bc026a2802004102460d000240200341b0026a2802002211450d00200341b4026a280200450d00201110230b2003109e030b200341d0026a2103201041b07d6a22100d000b0b41002111024020170d00410021030c020b0240201741d0026c0d00410021030c020b2018102341002111410021030c010b20022802ac0d2110200220022802b00d3602d40d200220153602d00d200241086a200241d00d6a108801024002402002280208450d0041012111419ca8c70021160c010b200228020c2116410021110b410121032010450d00201510230b024020022802a410450d00201410230b02402015452003720d0020022802ac0d450d00201510230b200241d00d6a2007109d0420023502d80d211920022802d00d2110410810212203450d092003201336000020034100201620111b36000420194220862010ad842003ad4280808080800184100e2003102320022802d40d450d00201010230b200241d00d6a200241c00a6a41d00210a1051a2013200241d00d6a4101108c040240200228028c104102460d0002402002280280102203450d00200228028410450d00200310230b200241d00d6a10b4020b410021100b200128021c28020021112002200b2900003703d00d2002200c2800003600d70d0240024020022802900d4101460d00410421030c010b20022d009c0d211520022802940d2113200220022800d70d3600af0d200220022903d00d3703a80d4104210320134102460d00200220022800af0d3600d70d200220022903a80d3703d00d201521030b200220022903d00d3703a010200220022800d70d3600a710200620022903a010370000200641076a20022800a710360000200220033a00ec0d200220123702e40d2002200e3602e00d2002200d3602dc0d200220113602d80d200241013602d40d2002410d3a00d00d200241d00d6a10e0012001280220200f36020002402010450d00024020022802f00c2203450d0020022802f40c450d00200310230b200241c00a6a10b4020b410421100c010b200241d00d6a200241c00a6a41bc0210a1051a200241a80d6a41086a220e2011290300370300200220082903003703a80d4104211020034103460d00200241c00a6a200241d00d6a41bc0210a1051a20024180086a41086a200e290300370300200220022903a80d37038008200321100b2001200128021041016a360210200241f0026a200241c00a6a41bc0210a1051a200241e0026a41086a20024180086a41086a29030037030020022002290380083703e00220104104470d0220012802082203200128020c470d000b0b200041033602bc020c010b200241d00d6a200241f0026a41bc0210a1051a200241c00a6a41086a2203200241e0026a41086a290300370300200220022903e0023703c00a2000200241d00d6a41bc0210a105220120103602bc02200120022903c00a3703c002200141c8026a20032903003703000b200241b0106a24000f0b1032000b1033000bc21903027f017e087f23004190016b22032400418df8c300ad4280808080900184100c22042900002105200341c0006a41086a200441086a29000037030020032005370340200410234196f8c300ad4280808080e00084100c22042900002105200341d8006a41086a200441086a2900003703002003200537035820041023200320003602082003200341086aad4280808080c00084100d22042900003703182004102320034184016a2003410c6a360200200341003a0088012003200341186a41086a36027c2003200341086a360280012003200341186a360278200341286a200341f8006a106502400240024002402003280230220641206a2204417f4c0d00200328022821070240024002402004450d00200410212208450d042004410f4d0d01200421090c020b2004410174220a4110200a41104b1b2209102122080d010c050b2004410174220a4110200a41104b1b22094100480d0320042009460d0020082004200910252208450d040b20082003290340370000200841086a200341c0006a41086a2903003700000240024020094170714110460d002009210a0c010b2009410174220a4120200a41204b1b220a4100480d032009200a460d0020082009200a10252208450d040b20082003290358370010200841186a200341d8006a41086a29030037000002400240200a41606a2006490d00200a210b0c010b200641206a22092006490d03200a410174220b2009200b20094b1b220b4100480d03200a200b460d002008200a200b10252208450d040b200841206a2007200610a1051a0240200328022c450d00200710230b200341d8006a2004ad4220862008ad8422051010108b010240024020032802580d00410410212204450d032003420437027c200320043602784100200341f8006a1061200341106a200328028001360200200320032903783703080c010b200341086a41086a200341d8006a41086a280200360200200320032903583703080b200341186a41086a200341086a41086a2802002204360200200320032903083703182001200241d0026c6a210a02400240024002400240024002402004450d00200341f8006a200328021820042002107520032802784101470d01200328021c450d04200328021810230c040b2002200341186a1061200a2001460d01200241d0026c210920012104034002400240200441bc026a2802004102470d0002400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0c200a41017422072006200720064b1b22074100480d0c02400240200a0d004100210a024020070d00410121060c020b200710212206450d0f0c010b20032802182106200a2007460d002006200a200710252206450d0e2003280220210a0b2003200736021c200320063602180b2006200a6a41003a00002003200a41016a3602200c010b02400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0b200a41017422072006200720064b1b22074100480d0b02400240200a0d004100210a024020070d00410121060c020b200710212206450d0e0c010b20032802182106200a2007460d002006200a200710252206450d0d2003280220210a0b2003200736021c200320063602180b2006200a6a41013a00002003200a41016a3602202004200341186a108d040b200441d0026a2104200941b07d6a22090d000c020b0b200328027c21070240024002400240024020034184016a2802002204200341f8006a41086a2802002209460d002003280220200420096b6a220620024102746a220c417f4c0d0a02400240200c0d004101210d0c010b200c1021220d450d0c0b2003200c36022c2003200d360228200320063602302003200341286a3602782007200341f8006a200410b20320062004490d01200328023022072006490d02200328022022072009490d032003280228210c2003280218210d2003200620046b22063602382003200720096b220736023c20062007470d04200c20046a200d20096a200610a1051a0240200a2001460d00200241d0026c210920012104034002400240200441bc026a2802004102470d0002400240200328022c2003280230220a460d00200328022821060c010b200a41016a2206200a490d11200a41017422072006200720064b1b22074100480d1102400240200a0d004100210a024020070d00410121060c020b200710212206450d140c010b20032802282106200a2007460d002006200a200710252206450d132003280230210a0b2003200736022c200320063602280b2006200a6a41003a00002003200a41016a3602300c010b02400240200328022c2003280230220a460d00200328022821060c010b200a41016a2206200a490d10200a41017422072006200720064b1b22074100480d1002400240200a0d004100210a024020070d00410121060c020b200710212206450d130c010b20032802282106200a2007460d002006200a200710252206450d122003280230210a0b2003200736022c200320063602280b2006200a6a41013a00002003200a41016a3602302004200341286a108d040b200441d0026a2104200941b07d6a22090d000b0b2003280230210a200328022c210920032802282104200328021c450d06200328021810230c060b2003200341186a3602782007200341f8006a200910b203200a2001460d04200241d0026c210920012104034002400240200441bc026a2802004102470d0002400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0f200a41017422072006200720064b1b22074100480d0f02400240200a0d004100210a024020070d00410121060c020b200710212206450d120c010b20032802182106200a2007460d002006200a200710252206450d112003280220210a0b2003200736021c200320063602180b2006200a6a41003a00002003200a41016a3602200c010b02400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0e200a41017422072006200720064b1b22074100480d0e02400240200a0d004100210a024020070d00410121060c020b200710212206450d110c010b20032802182106200a2007460d002006200a200710252206450d102003280220210a0b2003200736021c200320063602180b2006200a6a41013a00002003200a41016a3602202004200341186a108d040b200441d0026a2104200941b07d6a2209450d050c000b0b2004200641c494c6001044000b2006200741c494c6001043000b2009200741d494c6001044000b200341d8006a41146a410b360200200341e4006a410d360200200341c0006a41146a41033602002003200341386a36027020032003413c6a360274200341f8006a41146a4100360200200342033702442003418ca7c7003602402003410d36025c2003419ca8c700360288012003420137027c200341e0a7c7003602782003200341d8006a3602502003200341f8006a3602682003200341f4006a3602602003200341f0006a360258200341c0006a419ca8c700103a000b2003280220210a200328021c2109200328021821040b02402004450d002005200aad4220862004ad84100e02402009450d00200410230b200b450d03200810230c030b200b450d010b200810230b200341d8006a2000108a04200241d0026c4104722204417f4c0d01200335026021052003280258210820041021220a450d0220034100360280012003200436027c2003200a3602782002200341f8006a106102402002450d00200241d0026c210a034002400240200141bc026a2802004102470d0002400240200328027c2003280280012204460d00200328027821090c010b200441016a22092004490d08200441017422062009200620094b1b22064100480d080240024020040d0041002104024020060d00410121090c020b200610212209450d0b0c010b2003280278210920042006460d0020092004200610252209450d0a20032802800121040b2003200636027c200320093602780b200920046a41003a00002003200441016a360280010c010b02400240200328027c2003280280012204460d00200328027821090c010b200441016a22092004490d07200441017422062009200620094b1b22064100480d070240024020040d0041002104024020060d00410121090c020b200610212209450d0a0c010b2003280278210920042006460d0020092004200610252209450d0920032802800121040b2003200636027c200320093602780b200920046a41013a00002003200441016a360280012001200341f8006a108d040b200141d0026a2101200a41b07d6a220a0d000b0b200328027c210120054220862008ad8420033502800142208620032802782204ad84100e02402001450d00200410230b200328025c450d00200810230b20034190016a24000f0b1032000b1033000b102c000b102a000bec0101037f230041106b220224000240024020002802b00222030d00200241003a00072001200241076a41011062200241076a21030c010b200241013a00072001200241076a41011062200041b8026a2802002204200110612001200320041062200241076a21030b200220002d00c8023a000720012003410110622000200110dd020240024020002802bc024101460d00200241003a000720012003410110620c010b200241013a000720012003410110622002200041c0026a2802003602082001200241086a410410622002200041c4026a28020036020c20012002410c6a410410620b200241106a24000b1300200041013602042000419cf8c3003602000b3400200041ecf7c30036020420004100360200200041146a4106360200200041106a4188f9c300360200200041086a420f3702000b2c01017f02404108102122020d001033000b20004288808080800137020420002002360200200242003700000b2201017f230041106b220224002002410036020020002002108604200241106a24000b130020004109360204200041c882c4003602000b3400200041aeb9c40036020420004100360200200041146a4103360200200041106a41b8b9c400360200200041086a42083702000b8d0503027f017e067f230041e0006b2202240041ecf7c300ad4280808080f00184100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341f0fec300ad4280808080c00184100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023200220003703382002200241386aad4280808080800184100d220329000037034020031023200241d4006a200241386a41086a360200200241003a00582002200241c0006a41086a36024c2002200241386a3602502002200241c0006a360248200241286a200241c8006a10650240024002400240024002402002280230220541206a2206417f4c0d0020022802282107024002402006450d00200610212203450d032006410f4d0d01200621080c050b200641017422034110200341104b1b2208102122030d040c060b200641017422084110200841104b1b220841004e0d020c040b1032000b1033000b20062008460d0020032006200810252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821090c010b200841017422094120200941204b1b22094100480d0120082009460d0020032008200910252203450d020b20032002290318370010200341186a200241186a41086a2903003700000240200941606a20054f0d00200541206a22082005490d012009410174220a2008200a20084b1b22084100480d0120092008460d0020032009200810252203450d020b200341206a2007200510a1051a0240200228022c450d00200710230b200220013602482006ad4220862003ad84200241c8006aad4280808080c00084100e20031023200241e0006a24000f0b102c000b102a000be91305057f017e047f027e037f230041f0006b22052400200541c0006a41186a22064200370300200541c0006a41106a22074200370300200541c0006a41086a220842003703002005420037034041ecf7c300ad4280808080f00184100c2209290000210a200541e0006a41086a220b200941086a2900003703002005200a370360200910232008200b2903003703002005200529036037034041fbf7c300ad4280808080d00184100c2209290000210a200b200941086a2900003703002005200a3703602009102320072005290360220a370300200541206a41086a22092008290300370300200541206a41106a220c200a370300200541206a41186a220d200b29030037030020052005290340370320200541186a200541206a4120419ca8c70041004100108c01024002400240024002400240024020052802184101470d00410d210b41b8ebc3002108410221070c010b2006420037030020074200370300200842003703002005420037034041e4dec400ad4280808080e00084100c2206290000210a2008200641086a2900003703002005200a3703402006102341f3dec400ad4280808080e00084100c2206290000210a200b200641086a2900003703002005200a3703602006102320072005290360220a37030020092008290300370300200c200a370300200d200b29030037030020052005290340370320200541106a200541206a412010cd012005280214410020052802101b2109024020034101460d00200541206a210e0c030b200541c0006a41186a22064200370300200541c0006a41106a220c4200370300200541c0006a41086a220842003703002005420037034041ecf7c300ad4280808080f00184220f100c220d290000210a200541e0006a41086a220b200d41086a2900003703002005200a370360200d10232008200b2903003703002005200529036037034041f8fdc300ad4280808080a001842210100c220d290000210a200b200d41086a2900003703002005200a370360200d102320072005290360370000200741086a220d200b290300370000200541206a41086a220e2008290300370300200541206a41106a2211200c290300370300200541206a41186a2212200629030037030020052005290340370320200541086a200541206a412010cd012005280208450d01200528020c20094d0d014107210b41b1ebc3002108410321070b200041831a3b0100200041086a200b360200200041046a2008360200200041026a20073a0000200141046a280200220b450d02200b41286c450d02200128020010230c020b20064200370300200c42003703002008420037030020054200370340200f100c2213290000210a200b201341086a2900003703002005200a370360201310232008200b290300370300200520052903603703402010100c2213290000210a200b201341086a2900003703002005200a3703602013102320072005290360370000200d200b290300370000200e20082903003703002011200c29030037030020122006290300370300200520052903403703202005200920024101746a360240200541206aad4280808080800484200541c0006aad4280808080c00084100e200541206a210e0b200128020821082001280204210c2001280200210d200541c0006a41186a22114200370300200541c0006a41106a22124200370300200541c0006a41086a220142003703002005420037034041ecf7c300ad4280808080f00184100c2206290000210a200541e0006a41086a220b200641086a2900003703002005200a370360200610232001200b2903003703002005200529036037034041fbf7c300ad4280808080d00184100c2206290000210a200b200641086a2900003703002005200a3703602006102320072005290360370000200741086a200b290300370000200541206a41086a2001290300370300200541206a41106a2012290300370300200541206a41186a201129030037030020052005290340370320200541003602482005420137034041041021220b450d02200541043602442005200b360240200b200936000020054104360248200b410441081025220b450d0220054108360244200b20023600042005200b360240200541083602482008200541c0006a10612005280248210702402008450d00200d200841286c6a2106200d210b0340024002402005280244220220076b4120490d00200741206a210820052802402101200221090c010b200741206a22082007490d04200241017422012008200120084b1b22094100480d040240024020020d00024020090d00410121010c020b2009102122010d010c070b2005280240210120022009460d0020012002200910252201450d060b20052009360244200520013602400b200120076a2207200b290000370000200741186a200b41186a290000370000200741106a200b41106a290000370000200741086a200b41086a29000037000020052008360248200b41206a290300210a0240200920086b41074b0d00200841086a22072008490d04200941017422022007200220074b1b22074100480d040240024020090d00024020070d00410121010c020b200710212201450d070c010b20092007460d0020012009200710252201450d060b20052007360244200520013602400b200120086a200a3700002005200841086a22073602482006200b41286a220b470d000b0b2005280244210b0240024020034101460d0002400240200b2007460d00200528024021080c010b200741016a220b2007490d0420074101742208200b2008200b4b1b220b4100480d040240024020070d00410021070240200b0d00410121080c020b200b10212208450d070c010b200528024021082007200b460d0020082007200b10252208450d060b2005200b360244200520083602400b200820076a41003a00002005200741016a22073602480c010b02400240200b2007460d00200528024021080c010b200741016a220b2007490d0320074101742208200b2008200b4b1b220b4100480d030240024020070d00410021070240200b0d00410121080c020b200b10212208450d060c010b200528024021082007200b460d0020082007200b10252208450d050b2005200b360244200520083602400b200820076a41013a00002005200741016a22013602480240200b20016b41034b0d00200141046a22092001490d03200b41017422022009200220094b1b22094100480d0302400240200b0d00024020090d00410121080c020b200910212208450d060c010b200b2009460d002008200b200910252208450d050b20052009360244200520083602400b200820016a20043600002005200741056a22073602482005280244210b200528024021080b200ead42808080808004842007ad4220862008ad84100e0240200b450d00200810230b0240200c450d00200c41286c450d00200d10230b200041043a00000b200541f0006a24000f0b102c000b102a000baa0704057f017e0a7f027e23004180016b22032400200341306a2001200228020c220411020002400240024002402003280230450d00200341d8006a41106a200341306a41106a290300370300200341d8006a41086a200341306a41086a290300370300200341d8006a41186a200341306a41186a290300370300200341d8006a41206a200341306a41206a280200360200200341106a41086a200341e4006a290200370300200341106a41106a200341ec006a290200370300200341106a41186a200341f4006a290200370300200320032903303703582003200329025c370310200341d8006a200120022802102205110200417f2003280258220641016a220720072006491bad42287e2208422088a70d022008a72206417f4c0d02200610212209450d032009200329031037030020094201370320200941186a200341106a41186a220a290300370300200941106a200341106a41106a220b290300370300200941086a200341106a41086a220c29030037030020034101360208200320093602002003200641286e2207360204200341306a2001200411020002402003280230450d00200341d8006a41047221064102210d41c800210e0340200341d8006a41206a200341306a41206a280200360200200341d8006a41186a220f200341306a41186a290300370300200341d8006a41106a2210200341306a41106a290300370300200341d8006a41086a2211200341306a41086a29030037030020032003290330370358200c200641086a290200370300200b200641106a290200370300200a200641186a29020037030020032006290200370310200f200a2903003703002010200b2903003703002011200c290300370300200320032903103703580240200d417f6a2007470d00200341306a2001200511020020032007417f2003280230221241016a220920092012491b109801200328020021090b2009200e6a221241606a220720032903583703002011290300210820102903002113200f290300211420124201370300200741186a2014370300200741106a2013370300200741086a20083703002003200d360208200341306a200120041102002003280230450d01200e41286a210e200d41016a210d200328020421070c000b0b2001200228020011040002402002280204450d00200110230b20002003290300370200200041086a200341086a2802003602000c010b2000410036020820004208370200200120022802001104002002280204450d00200110230b20034180016a24000f0b1032000b1033000bd60302057f047e230041f0006b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b0102400240200228021022030d00200041003a00000c010b200241186a28020021042002280214210541002101200241003a006802400240034020042001460d01200241c8006a20016a200320016a2d00003a00002002200141016a22063a00682006210120064120470d000b200241206a41186a200241c8006a41186a2903002207370300200241206a41106a200241c8006a41106a2903002208370300200241206a41086a200241c8006a41086a290300220937030020022002290348220a370320200041196a2007370000200041116a2008370000200041096a20093700002000200a370001410121010c010b0240200141ff0171450d00200241003a00680b4100210120024100360228200242013703202002410a3602442002200241086a3602402002200241206a36026c200241dc006a41013602002002420137024c20024180c5c6003602482002200241c0006a360258200241ec006a4184a5c200200241c8006a10311a2002350228422086200235022084100a2002280224450d00200228022010230b200020013a00002005450d00200310230b200241f0006a24000b290020004101360204200041086a200128020420012802006b41c0016e2201360200200020013602000bf40101047f230041d0006b21020240200128020022032001280204470d00200041003602000f0b2001200341c0016a3602002002200341c2006a29000037012a2002200341ca006a290000370132200241106a220120022903303703002002200341d2006a29000037013a200241186a220420022903383703002002200341da006a2800003601422002200341de006a2f00003b0146200241206a220520022903403703002002200341c0006a2f00003b01282002200229032837030820002003360200200020022903083700042000410c6a2001290300370000200041146a20042903003700002000411c6a20052903003700000bf30801087f230041f0006b2103024002402001280200220420012802042205460d00200241016a210603402001200441c0016a2202360200200341003a0068200441c0006a2d00002107200341013a0068200320073a0048200441c1006a2d00002107200341023a0068200320073a0049200441c2006a2d00002107200341033a0068200320073a004a200441c3006a2d00002107200341043a0068200320073a004b200441c4006a2d00002107200341053a0068200320073a004c200441c5006a2d00002107200341063a0068200320073a004d200441c6006a2d00002107200341073a0068200320073a004e2003200441c7006a2d00003a004f200341083a0068200441c8006a2d00002107200341093a0068200320073a0050200441c9006a2d000021072003410a3a0068200320073a0051200441ca006a2d000021072003410b3a0068200320073a0052200441cb006a2d000021072003410c3a0068200320073a0053200441cc006a2d000021072003410d3a0068200320073a0054200441cd006a2d000021072003410e3a0068200320073a0055200441ce006a2d000021072003410f3a0068200320073a00562003200441cf006a2d00003a0057200341103a0068200441d0006a2d00002107200341113a0068200320073a0058200441d1006a2d00002107200341123a0068200320073a0059200441d2006a2d00002107200341133a0068200320073a005a200441d3006a2d00002107200341143a0068200320073a005b200441d4006a2d00002107200341153a0068200320073a005c200441d5006a2d00002107200341163a0068200320073a005d200441d6006a2d00002107200341173a0068200320073a005e2003200441d7006a2d00003a005f200341183a0068200441d8006a2d00002107200341193a0068200320073a0060200441d9006a2d000021072003411a3a0068200320073a0061200441da006a2d000021072003411b3a0068200320073a0062200441db006a2d000021072003411c3a0068200320073a0063200441dc006a2d000021072003411d3a0068200320073a0064200441dd006a2d000021072003411e3a0068200320073a0065200441de006a2d000021072003411f3a0068200320073a0066200441df006a2d00002107200341203a0068200320073a0067200341286a41086a22072003290350370300200341286a41106a22082003290358370300200341286a41186a2209200329036037030020032003290348370328200341086a41086a220a2007290300370300200341086a41106a22072008290300370300200341086a41186a2208200929030037030020032003290328370308200341c8006a41186a2008290300370300200341c8006a41106a2007290300370300200341c8006a41086a200a290300370300200320032903083703482006417f6a2206450d022002210420052002470d000b0b200041003602000f0b20002004360200200020032903483702042000410c6a200341d0006a290300370200200041146a200341d8006a2903003702002000411c6a200341e0006a2903003702000b34002000418df8c30036020420004100360200200041146a4102360200200041106a4194c2c400360200200041086a42093702000bc40201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d0020002d0000210420034120710d012004ad42ff01832001103e21000c020b20002d00002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d02200141a889c0004102200220006a4180016a410020006b104121000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d02200141a889c0004102200220006a4180016a410020006b104121000b20024180016a240020000f0b2004418001419889c0001044000b2004418001419889c0001044000ba20403027f017e057f230041306b22022400418df8c300ad4280808080900184100c22032900002104200241086a200341086a29000037030020022004370300200310234198c4c400ad4280808080e00084100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023200241206a20012802002001280208109e040240024002400240024002402002280228220541206a2203417f4c0d0020022802202106024002402003450d00200310212201450d032003410f4d0d01200321070c050b200341017422014110200141104b1b2207102122010d040c060b200341017422084110200841104b1b220741004e0d020c040b1032000b1033000b20032007460d0020012003200710252201450d020b20012002290300370000200141086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020012007200810252201450d020b20012002290310370010200141186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b200541206a22072005490d01200841017422092007200920074b1b22074100480d0120082007460d0020012008200710252201450d020b200141206a2006200510a1051a20002003360208200020073602042000200136020002402002280224450d00200610230b200241306a24000f0b102c000b102a000bf00201057f230041206b220324000240024002400240200241046a2204417f4c0d000240024020040d00410121050c010b200410212205450d020b200341003602102003200436020c200320053602082002200341086a106102400240200328020c2206200328021022056b2002490d0020032802082104200621070c010b200520026a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d00024020070d00410121040c020b2007102122040d010c060b2003280208210420062007460d0020042006200710252204450d050b2003200736020c200320043602080b200420056a2001200210a1051a2003200520026a2202ad4220862004ad84100d220529000037030020051023200341146a200420026a360200200341003a0018200320043602102003200341086a36020c200320033602082000200341086a106502402007450d00200410230b200341206a24000f0b1032000b1033000b102c000b102a000b88090b107f017e017f017e017f017e017f017e017f017e017f230041306b2202240002400240024020014108490d00200141017641feffffff07712203417f6a220420014f0d022001410d74200173220541117620057322054105742005732206417f2001417f6a677622077122054100200120052001491b6b220520014f0d01200241286a22082000200441306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e2903003703002013201029030037030020052002290300370300024020032001490d00200321040c030b2006410d7420067322044111762004732204410574200473220620077122044100200120042001491b6b220520014f0d01200241286a22082000200341306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e29030037030020132010290300370300200520022903003703002003410172220420014f0d022006410d742006732205411176200573220541057420057320077122054100200120052001491b6b220520014f0d01200241286a22032000200441306c6a220141286a2204290300370300200241206a2206200141206a2207290300370300200241186a2208200141186a2209290300370300200241106a220a200141106a220b290300370300200241086a220c200141086a220d290300370300200220012903003703002000200541306c6a22002903002112200041086a22052903002114200041106a220e2903002116200041186a220f2903002118200041206a2210290300211a2004200041286a22112903003703002007201a37030020092018370300200b2016370300200d2014370300200120123703002011200329030037030020102006290300370300200f2008290300370300200e200a2903003703002005200c290300370300200020022903003703000b200241306a24000f0b2005200141f8c5c4001030000b200420014184d9c4001030000bf20907077f027e0b7f017e017f027e017f230041306b22022400024020014101762203450d0003402003417f6a2203210402400240024003402004410174220541017221060240200541026a220520014f0d00200620014f0d02200520062000200641306c6a22072903002000200541306c6a220829030056200741086a2903002209200841086a290300220a562009200a511b1b21060b200620014f0d03200420014f0d022000200441306c6a22042903002000200641306c6a220529030056200441086a22072903002209200541086a2208290300220a562009200a511b450d03200241286a220b200441286a220c290300370300200241206a220d200441206a220e290300370300200241186a220f200441186a2210290300370300200241106a2211200441106a2212290300370300200241086a221320072903003703002002200429030037030020082903002109200541106a2214290300210a200541186a22152903002116200541206a2217290300211820052903002119200c200541286a221a290300370300200e2018370300201020163703002012200a3703002007200937030020042019370300201a200b2903003703002017200d2903003703002015200f290300370300201420112903003703002008201329030037030020052002290300370300200621040c000b0b2006200141a8c7c4001030000b2004200141b8c7c4001030000b20030d000b0b0240024020014102490d002001210703402007417f6a220720014f0d02200241286a220b200041286a2205290300370300200241206a220c200041206a2206290300370300200241186a220d200041186a2208290300370300200241106a220e200041106a2210290300370300200241086a220f200041086a2211290300370300200220002903003703002000200741306c6a22042903002109200441086a290300210a200441106a2903002116200441186a2903002118200441206a29030021192005200441286a2903003703002006201937030020082018370300201020163703002011200a3703002000200937030041002105024002400240034020042002290300370300200441286a200b290300370300200441206a200c290300370300200441186a200d290300370300200441106a200e290300370300200441086a200f2903003703002005410174220441017221060240200441026a220420074f0d00200620074f0d02200420062000200641306c6a22082903002000200441306c6a221029030056200841086a2903002209201041086a290300220a562009200a511b1b21060b200620074f0d03200520074f0d022000200541306c6a22052903002000200641306c6a220429030056200541086a22082903002209200441086a2210290300220a562009200a511b450d03200b200541286a2211290300370300200c200541206a2212290300370300200d200541186a2213290300370300200e200541106a2214290300370300200f20082903003703002002200529030037030020102903002109200441106a290300210a200441186a2903002116200441206a2903002118200429030021192011200441286a29030037030020122018370300201320163703002014200a3703002008200937030020052019370300200621050c000b0b2006200741a8c7c4001030000b2005200741b8c7c4001030000b200741014b0d000b0b200241306a24000f0b2007200141f8c5c4001030000bb80c050a7f017e017f037e0f7f230041306b22022400200041c07e6a21032001417f6a2104200041306a2105410021062001413249210741012108024003400240024020082001490d00410021090c010b410121092000200841306c220a6a220b290300220c200b41506a220d29030056200b41086a290300220e200d41086a290300220f56200e200f511b0d002005200a6a210903404101210b20042008460d03200841016a210820092903002210200c58210b200941086a290300220f200e51210d200f200e58210a200941306a21092010210c200f210e200b200a200d1b0d000b200820014921090b2008200146210b20070d0120082001460d010240024002400240024002402008417f6a220b20014f0d002009450d012000200b41306c6a2209290300210e20092000200841306c22116a220b290300370300200241286a220a200941286a2212290300370300200241206a2213200941206a2214290300370300200241186a2215200941186a2216290300370300200241106a2217200941106a2218290300370300200241086a2219200941086a220d290300370300200d200b41086a221a2903003703002018200b41106a221b2903003703002016200b41186a221c2903003703002014200b41206a221d2903003703002012200b41286a221e2903003703002002200e370300200b2002290300370300201e200a290300370300201d2013290300370300201c2015290300370300201b2017290300370300201a201929030037030020084102490d052009290300220c20002008417e6a221341306c6a220a29030058200d290300220e200a41086a221f290300220f58200e200f511b0d052009200a290300370300200d201f2903003703002009290310210f2018200a41106a2903003703002015201229030037030020172014290300370300201920162903003703002016200a41186a2903003703002014200a41206a2903003703002012200a41286a2903003703002002200f370300024020130d00410021130c050b200c20002008417d6a220d41306c6a220929030058200e200941086a290300220f58200e200f511b0d04200320116a2109034020094188016a200941d8006a29030037030020094180016a200941d0006a290300370300200941f8006a200941c8006a290300370300200941f0006a200941c0006a290300370300200941e8006a200941386a290300370300200941e0006a200941306a290300370300200d450d032009290300210f200941086a210a200941506a2109200d417f6a210d200c200f56200e200a290300220f56200e200f511b0d000b200d41016a21130c030b200b20014184d9c4001030000b2008200141f8c5c4001030000b410021130b2000201341306c6a210a0b200a200c370300200a200e3703082000201341306c6a22092002290300370310200941286a2015290300370300200941206a2017290300370300200941186a20192903003703000b200641016a21060240200120086b22144102490d00200b290330200b290300220c58200b41386a290300220f201a290300220e58200f200e511b0d00200b200b41306a2212290300370300201a201241086a290300370300200b290310210f201b201241106a2903003703002015201e2903003703002017201d2903003703002019201c290300370300201c201241186a290300370300201d201241206a290300370300201e201241286a2903003703002002200f3703004101211a024020144103490d00200b290360200c58200b41e8006a290300220f200e58200f200e511b0d00200b41e0006a21094103210a4102210d0340200d221a41306c200b6a221241506a220d2009290300370300200d41286a200941286a290300370300200d41206a200941206a290300370300200d41186a200941186a290300370300200d41106a200941106a290300370300200d41086a200941086a290300370300200a20144f0d01200a41306c2109200a210d200a41016a210a200b20096a2209290300200c56200941086a290300220f200e56200f200e511b0d000b0b2012200c3703002012200e370308200b201a41306c6a22092002290300370310200941286a2015290300370300200941206a2017290300370300200941186a20192903003703000b20064105470d000b4100210b0b200241306a2400200b0b8f0201027f20014180feff07714108762102024002402001410171450d00411f210341e5bac000210102400240200241ff01710e03000103000b41c100210341a4bac00021010c020b41c100210341e3b9c00021010c010b411f210341c4b9c0002101024002400240024002400240024002400240200241ff01710e0a00060102030405090708000b4120210341a4b9c00021010c080b4127210341c4b8c00021010c070b4117210341adb8c00021010c060b418eb8c00021010c050b4126210341e8b7c00021010c040b412b210341bdb7c00021010c030b4139210341ebb8c00021010c020b413b21034182b7c00021010c010b41d100210341b1b6c00021010b20002003360204200020013602000bfd0303037f027e047f230041106b220224002002410036020820024201370300200028021021030240410410212204450d0020024104360204200220043602002004200336000020024104360208200041086a29030021052000290300210620044104411410252204450d00200420063700042004410c6a200537000020024294808080c00237020420022004360200200028021421072000411c6a2802002200200210610240024020000d002002280208210320022802042108200228020021090c010b2000410574210a200228020021092002280204210820022802082103034020072100024002402008200322046b4120490d00200441206a21030c010b024002400240200441206a22032004490d00200841017422072003200720034b1b22074100480d000240024020080d00024020070d00410121090c020b2007102121090c040b20082007470d020b200721080c030b102c000b200920082007102521090b200721082009450d030b200041206a2107200920046a22042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200a41606a220a0d000b2002200836020420022003360208200220093602000b20012902002003ad4220862009ad84100e02402008450d00200910230b200241106a24000f0b102a000bfa0101067f23004180016b220224002001410c6a2802002103200141086a280200210420012802002205210602402005410471450d0020012005410872220636020020040d00200141086a4281808080a0013702000b2001200641047236020020002802002100410021060340200220066a41ff006a2000410f712207413072200741d7006a2007410a491b3a00002006417f6a2106200041047622000d000b024020064180016a2200418101490d002000418001419889c0001044000b200141a889c0004102200220066a4180016a410020066b104121062001200336020c200141086a20043602002001200536020020024180016a240020060bbd1103077f017e0e7f230041e0076b2203240041002104200341003602a803200320023602a403200320013602a0034101210541012106024002400240024002400240024002400240024002400240024002400240024002400240024002402002450d0041012107200341013602a803024020012d000022080d000c020b0240024002400240024002400240024002400240024002400240200841c00171220741c001460d0002402007418001460d0041012106200741c000470d0e410121072008413f712204413f470d0541022107414121044101210603402007417f6a20024f0d0f200320073602a803200120076a417f6a2d0000220841ff01470d05200441817e6a2104200741016a2207418302470d000b2007417f6a210741ffff032104410121090c0c0b4200210a410121072008413f712204413f470d0641022107414121044101210603402007417f6a20024f0d0e200320073602a803200120076a417f6a2d0000220841ff01470d06200441817e6a2104200741016a2207418302470d000b2007417f6a21074200210a0c010b428002210a410121072008413f712204413f470d0541022107414121044101210603402007417f6a20024f0d0d200320073602a803200120076a417f6a2d0000220841ff01470d02200441817e6a2104200741016a2207418302470d000b2007417f6a2107428002210a0b200a50210841ffff032104410121090c050b200820046b21040c030b200820046b21040b200441017122090d060c070b200820046b21040b200a50210820044101712209450d010b200720024f0d0141002106200120076a2d000041104f0d050b410121062007200441016a4101766a220b20024b0d042003200b3602a803200b41026a220420024b0d04200320043602a803200b417e4f0d012001200b6a2f0000210c410021044100210d024020080d00200341106a200341a0036a10a40320032802100d0520032802a803220e20032802146a220f20032802a4034b0d052003200f3602a8034101210d0b200341023602f402200341023602e802200341023602dc02200341023602d002200341023602c402200341023602b802200341023602ac02200341023602a00220034102360294022003410236028802200341023602fc01200341023602f001200341023602e401200341023602d801200341023602cc01200341023602c001200341c0016a210603400240200c41012004410f71747141ffff0371450d00200341086a200341a0036a10a4030240024020032802080d0020032802a8032210200328020c22116a220820032802a4034d0d010b410121060c070b200320083602a803200641086a2008360200200641046a2010360200200620114120473602000b2006410c6a2106200441016a22044110470d000b200341a0066a200341c0016a41c00110a1051a410421040c050b2007200241d4c9c40010300c060b200b200441b4c9c4001044000b200720024f0d0341002106200120076a2d000041104f0d010b410121062007200441016a4101766a220b20024b0d002003200b3602a8032003200341a0036a10a40320032802000d0020032802a803220d20032802046a220e20032802a4034b0d002003200e3602a803200341a0066a200341c0016a41c00110a1051a410121040c010b200341a0036a200341a0066a41c00110a1051a200020063a00010c0e0b200341a0036a200341a0066a41c00110a1051a200341c0016a41186a200f360200200341c0016a41146a200e360200200341c0016a41106a200d360200200341c0016a410c6a2009360200200341c0016a41086a200b360200200320073602c401200320043602c001200341c0016a411c6a200341a0036a41c00110a1052112410021054100211320040e050c020101030c0b2007200241c4c9c4001030000b000b200b2007490d01200b20024b0d02200e200d490d03200e20024b0d04200b20076b2114200120076a21152001200d6a2116200e200d6b2117410121130c090b200341023602d407200341023602c807200341023602bc07200341023602b007200341023602a40720034102360298072003410236028c072003410236028007200341023602f406200341023602e806200341023602dc06200341023602d006200341023602c406200341023602b806200341023602ac06200341023602a006410021060340410221080240201220066a2204280200410246220c0d0041002004200c1b220841086a2802002104200841046a28020021100240024020082802004101470d0020042010490d0841012108200420024d0d012004200241d8bcc0001043000b20042010490d0841002108200420024b0d090b200420106b2111200120106a21100b200341a0066a20066a22042008360200200441086a2011360200200441046a20103602002006410c6a220641c001460d080c000b0b2007200b41d0bdc0001044000b200b200241d0bdc0001043000b200d200e41e0bdc0001044000b200e200241e0bdc0001043000b2010200441d8bcc0001044000b2010200441e8bcc0001044000b2004200241e8bcc0001043000b02400240200d4101460d00410021080c010b200f200e490d03200f20024b0d04200f200e6b21062001200e6a21080b200b2007490d04200b20024b0d05200341a8066a280200211820032802a406211720032802a0062116200341186a200341ac066a41a80110a1051a200b20076b2114200120076a2115200341dc076a2802002110200341d8076a280200211120032802d407210c410421130b2000411c6a2018360200200041186a2017360200200041146a2016360200200041106a20093602002000410c6a2014360200200041086a2015360200200041046a2013360200200041206a200341186a41a80110a1051a200041d8016a2006360200200041d4016a2008360200200041d0016a2010360200200041cc016a2011360200200041c8016a200c3602000b200020053a0000200341e0076a24000f0b200e200f41f0bdc0001044000b200f200241f0bdc0001043000b2007200b41d0bdc0001044000b200b200241d0bdc0001043000bcc0503027f017e047f230041e0006b2202240041aeb9c400ad4280808080800184100c22032900002104200241086a41086a200341086a2900003703002002200437030820031023419cbdc400ad4280808080d00084100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100f22012900002104200241386a41086a200141086a2900003703002002200437033820011023200241d4006a200341206a360200200241003a0058200220033602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200310232002280230220541206a2201417f4c0d0120022802282106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000bae0503027f017e047f230041d0006b2202240041aeb9c400ad4280808080800184100c22032900002104200241086a200341086a290000370300200220043703002003102341c0bbc400ad4280808080b00184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000be40703027f017e067f230041e0006b2203240041aeb9c400ad4280808080800184100c22042900002105200341086a200441086a290000370300200320053703002004102341a0bcc400ad4280808080800284100c22042900002105200341106a41086a200441086a2900003703002003200537031020041023024002400240024002400240412010212204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad4280808080800484100d220129000037034020011023200341d4006a2201200441206a360200200341003a0058200320043602502003200341c0006a41086a220636024c2003200341c0006a360248200341206a200341c8006a106520041023412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad4280808080800484100d2202290000370340200210232001200441206a360200200341003a0058200320043602502003200636024c2003200341c0006a360248200341306a200341c8006a1065200410232003280228220741206a2202200328023822086a2201417f4c0d01200328023021092003280220210a024002402001450d00200110212204450d022001410f4d0d01200121060c050b200141017422044110200441104b1b2206102122040d040c060b200141017422064110200641104b1b220641004e0d020c040b1033000b1032000b20012006460d0020042001200610252204450d020b20042003290300370000200441086a200341086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062002200620024b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620026b2008490d002006210b0c010b200220086a2002490d012006410174220b2001200b20014b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420026a2009200810a1051a200020013602082000200b3602042000200436020002402003280234450d00200910230b02402003280224450d00200a10230b200341e0006a24000f0b102c000b102a000bb20403037f027e057f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00200041003602140c010b200328021421042003200341186a28020022023602242003200136022002400240024020024104490d002003200141046a36022020032002417c6a220536022420054110490d002001280000210520032002416c6a3602242003200141146a3602202001410c6a290000210620012900042107200341c8006a200341206a10cf0120032802482202450d00200328024c21082003280224220941024f0d01200841ffffff3f71450d00200210230b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b200041003602140c010b200341d0006a280200210a200341386a41046a200341286a41046a2f0100220b3b010020032003280128220c36023820032009417e6a36022420032003280220220941026a36022020092f000021092000200637030820002007370300200041206a20093b01002000411c6a200a3602002000200836021820002002360214200020053602102000200c360122200041266a200b3b01000b2004450d00200110230b200341e0006a24000ba00302037f037e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00200041003602140c010b200328021421042003200341186a28020022023602242003200136022002400240024020024104490d002003200141046a36022020032002417c6a220536022420054110490d002001280000210520032002416c6a3602242003200141146a3602202001410c6a290000210620012900042107200341c8006a200341206a10cf01200328024822020d010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b200041003602140c010b200329024c210820002006370308200020073703002000200837031820002002360214200020053602100b2004450d00200110230b200341e0006a24000bc20101047f230041106b2202240020002802002200280208210320002802002100410121042001280218419b9ec00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41e0e4c200105a1a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d0020022802002200280218419a9ec00041012000411c6a28020028020c11000021040b200241106a240020040b130020004104360204200041cccac4003602000b130020004110360204200041b4cec4003602000b950302087f017e230041106b220224000240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002006450d0020042d0001210720012003417e6a22063602042001200441026a3602002006450d0020042d0002210820012003417d6a22063602042001200441036a36020020060d010b200041003602040c010b20042d0003210620012003417c6a3602042001200441046a360200200241086a2001108801024020022802080d002001280204200228020c2204490d002004417f4c0d02024002400240024020040d00410121030c010b200410272203450d0120012802042004490d0220032001280200200410a1051a200128020422092004490d062001200920046b3602042001200128020020046a3602000b2003450d0220002004ad220a422086200a8437020820002003360204200020074108742005722008411074722006411874723602000c030b1033000b200310230b200041003602040b200241106a24000f0b1032000b20042009418ca9c0001044000bee0201047f024020002802082201450d002000280200220220014107746a21030340024020022d0000417c6a220041094b0d00024002400240024020000e0a00040102040404040403000b200241086a280200450d03200241046a28020010230c030b200241046a2802000d022002410c6a2802002200450d02200041286c450d02200241086a28020010230c020b200241046a2d00004102490d010240200241106a2802002200450d00200041d0006c2101200241086a28020041c4006a21000340024020002802002204450d00200441306c450d002000417c6a28020010230b200041d0006a2100200141b07f6a22010d000b0b2002410c6a2802002200450d01200041d0006c450d01200228020810230c010b200241046a280200450d00200241106a2802002200450d00200241146a280200450d00200010230b20024180016a21000240200241f4006a28020041ffffff3f71450d00200228027010230b2000210220002003470d000b0b0b880d05037f017e0b7f017e037f23004180016b22022400200241086a2001108801024002400240024002402002280208450d00200041003602000c010b200228020c2203200128020441246e2204200420034b1bad42247e2205422088a70d012005a72204417f4c0d010240024020040d00410421060c010b200410212206450d030b4100210720024100360218200220063602102002200441246e3602140240024002402003450d00200241cd006a2108200241eb006a220941056a210a4100210b03402001280204220c450d032001280200220d2d000021042001200c417f6a220e3602042001200d41016a360200200441074b0d030240024002400240024002400240024020040e08000b010b03040205000b2002200110880120022802000d0a200128020420022802042204490d0a2004417f4c0d0c0240024020040d004101210f41010d010c0c0b20041027220f450d0e20012802042004490d0a200f2001280200200410a105210c2001280204220d2004490d0f2001200d20046b3602042001200128020020046a360200200c450d0b0b200241c0006a41086a200241d8006a41086a29020037030020022002290258370340200f41087621104105210e420021052004210d0c050b41002104200241003a0078200c417e6a210c02400340200e2004460d01200241d8006a20046a200d20046a220f41016a2d00003a00002001200c3602042001200f41026a3602002002200441016a220f3a0078200c417f6a210c200f2104200f4120470d000b200220092900003703402002200a290000370045200228005f210d20022f0158210420022d005a210c200228005b210f20022900632111200841026a200241d5006a41026a2d00003a0000200820022f00553b00002011428080808070832105200f41087621102004200c41107472210c2011a721044100210e0c060b200441ff0171450d09200241003a00780c090b200241d8006a200110ae04200228025c220d450d0820022f015820022d005a41107472210c20022d005b210f200229036022114280808080708321052011a721044101210e0c040b200241d8006a200110ae04200228025c220d450d0720022f015820022d005a41107472210c20022d005b210f200229036022114280808080708321052011a721044102210e0c030b200241d8006a200110ae04200228025c220d450d0620022f015820022d005a41107472210c20022d005b210f200229036022114280808080708321052011a721044103210e0c020b200e450d05200d2d000121042001200c417e6a220f3602042001200d41026a36020020040d05200f450d05200d2d000221042001200c417d6a220e3602042001200d41036a360200200441014b0d054100210f0240024020040e020100010b200e4104490d06200d28000321122001200c41796a22043602042001200d41076a36020020044104490d06200d28000721132001200c41756a3602042001200d410b6a3602004101210f0b200241c0006a41086a200241d8006a41086a290200370300200220022902583703404104210e4200210541002110201321042012210d0b0b200b41016a210b200241306a41086a200241c0006a41086a2903002211370300200241206a41086a22142011370300200220022903402211370330200220113703202010410874200f41ff017172210f20052004ad842105024020072002280214470d00200241106a2007410110a20120022802102106200228021821070b2006200741246c6a2204200537000c2004200d3600082004200f3600042004200c3b00012004200e3a0000200441036a200c4110763a0000200420022903203700142004411c6a20142903003700002002200741016a2207360218200b2003470d000b0b20002002290310370200200041086a200241106a41086a2802003602000c020b200f10230b200241306a41086a200241c0006a41086a290300370300200220022903403703302000410036020002402007450d00200741246c21042006210103400240024020012d0000220c41044b0d00024002400240200c0e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012004415c6a22040d000b0b20022802142201450d00200141246c450d00200610230b20024180016a24000f0b1032000b1033000b2004200d418ca9c0001044000bfc0303037f017e037f230041e00a6b220224002002200110880102400240024002402002280200450d00200041003602000c010b20022802042203200128020441c8036e2204200420034b1bad42c8037e2205422088a70d012005a72206417f4c0d010240024020060d00410821070c010b200610212207450d030b4100210420024100360210200220073602082002200641c8036e36020c024002402003450d0020024198076a41f0006a2108034020024198076a200110d303200241b0066a20024198076a41e80010a1051a2002290380082105200241d8036a200841d80210a1051a20054203510d02200241f0026a200241b0066a41e80010a1051a200241186a200241d8036a41d80210a1051a02402004200228020c470d00200241086a200410ac0120022802082107200228021021040b2007200441c8036c6a200241f0026a41e80010a10522062005370368200641f0006a200241186a41d80210a1051a2002200441016a22043602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b2000410036020002402004450d00200441c8036c210320074198016a210403402004109e03200441c8036a2104200341b87c6a22030d000b0b200228020c2204450d00200441c8036c450d00200710230b200241e00a6a24000f0b1032000b1033000b8e0305037f017e037f017e017f230041c0006b22022400200241286a200110880102400240024002402002280228450d00200041003602000c010b200228022c2203200128020441186e2204200420034b1bad42187e2205422088a70d012005a72206417f4c0d010240024020060d00410821070c010b200610212207450d030b4100210420024100360238200220073602302002200641186e360234024002402003450d00200241206a21080340200241106a20011080022002290310a70d022008290300210520022903182109200241086a200110880120022802080d02200228020c210a024020042002280234470d00200241306a200410b20120022802382104200228023021070b2007200441186c6a2206200a36021020062005370308200620093703002002200441016a22043602382003417f6a22030d000b0b20002002290330370200200041086a200241306a41086a2802003602000c010b2000410036020020022802342204450d00200441186c450d00200710230b200241c0006a24000f0b1032000b1033000bb10201017f230041a0016b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822010d00200041003602400c010b200328020c21022003200341106a28020036027c20032001360278200341186a200341f8006a1083040240024020032802580d00200341003602880120034201370380012003410a360294012003200336029001200320034180016a36029c012003412c6a41013602002003420137021c20034180c5c600360218200320034190016a3602282003419c016a4184a5c200200341186a10311a20033502880142208620033502800184100a0240200328028401450d0020032802800110230b200041003602400c010b2000200341186a41e00010a1051a0b2002450d00200110230b200341a0016a24000b8709010f7f23004190036b2204240002400240200141046a28020022052f01062206410b490d002001280208210720012802002108200441306a410041e00210a0051a200441286a22064100360200200441206a22094200370300200441186a220a4200370300200441106a220b4200370300200441086a220c42003703002004420037030002404194031021220d450d00200d41003b0106200d4100360200200d41086a200441306a41e00210a105210e200d4190036a2006280200360200200d4188036a2009290300370200200d4180036a200a290300370200200d41f8026a200b290300370200200d41f0026a200c290300370200200d20042903003702e802200441306a41086a2209200541d0016a290000370300200441306a41106a220f200541d8016a290000370300200441306a41186a2210200541e0016a290000370300200420052900c8013703302005280280032111200e200541e8016a20052f010641796a220641057410a105210e200d41e8026a20054184036a200641027410a1052112200541063b0106200d20063b0106200a2010290300370300200b200f290300370300200c20092903003703002004200429033037030002400240200128020c22014107490d00200d41066a210a200e2001417a6a220c4105746a200e200141796a22014105746a220b200641ffff037120016b41057410a2051a200b41186a200241186a290000370000200b41106a200241106a290000370000200b41086a200241086a290000370000200b20022900003700002012200c4102746a2106201220014102746a21020c010b200541086a220a200141016a220b4105746a200a20014105746a2206200541066a220a2f010020016b41057410a2051a200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a29000037000020062002290000370000200541e8026a220620014102746a21022006200b4102746a2106200121010b20062002200a2f010020016b41027410a2051a20022003360200200041013a00002000200236023c200041386a4100360200200041346a200d360200200041306a20113602002000412c6a2007360000200041286a2005360000200041246a200836000020002004290300370001200041096a200441086a290300370000200041116a200441106a290300370000200041196a200441186a290300370000200a200a2f010041016a3b01000c020b102a000b200541086a220a200128020c220d41016a220b4105746a200a200d4105746a220a2006200d6b41057410a2051a200a41186a200241186a290000370000200a41106a200241106a290000370000200a41086a200241086a290000370000200a2002290000370000200541e8026a2202200b4102746a2002200d4102746a220220052f0106200d6b41027410a2051a20022003360200200520052f010641016a3b0106200441306a410b6a200141086a280000360000200041003a00002000200236023c200041106a200d3600002004200129000037003320002004290030370001200041086a200441376a2900003700000b20044190036a24000be60b020f7f047e23004180046b220624000240024020012802002207417f6a2005470d000240024002400240200141046a28020022082f01062209410b490d002001280208210a200641c0006a410272410041be0310a0051a41c4031021220b450d05200b4100360200200b41046a200641c0006a41c00310a1051a200641c0006a41186a220c200841e0016a290000370300200641c0006a41106a220d200841d8016a290000370300200641c0006a41086a220e200841d0016a290000370300200620082900c801370340200828028003210f200b41086a200841e8016a20082f0106221041796a220541057410a1052111200b41e8026a20084184036a200541027410a1052112200b4194036a200841b0036a2010417a6a221341027410a1052114200841063b0106200b20053b010602402013450d00410021052014211003402010280200220920053b01042009200b360200201041046a21102013200541016a2205470d000b0b200641206a41186a200c2903002215370300200641206a41106a200d2903002216370300200641206a41086a200e2903002217370300200620062903402218370320200641186a2015370300200641106a2016370300200641086a201737030020062018370300200128020c22054107490d0120112005417a6a22014105746a2011200541796a22104105746a2209200b2f010620106b41057410a2051a200941186a200241186a290000370000200941106a200241106a290000370000200941086a200241086a290000370000200920022900003700002012200141027422096a201220104102746a2213200b2f010620106b41027410a2051a20132003360200200b200b2f010641016a22133b01062005410274220220146a416c6a201420096a2205201341ffff037120016b41027410a2051a200520043602002001200b2f010622134b0d022002200b6a41fc026a2105034020052802002209201041016a22103b01042009200b360200200541046a210520102013490d000c030b0b200841086a2205200128020c221341016a22104105746a200520134105746a2205200920136b41057410a2051a200541186a200241186a290000370000200541106a200241106a290000370000200541086a200241086a29000037000020052002290000370000200841e8026a22092010410274220b6a2009201341027422056a220920082f010620136b41027410a2051a20092003360200200820082f010641016a22093b0106200520084194036a22026a41086a2002200b6a220b200941ffff037120106b41027410a2051a200b20043602000240201020082f0106220b4b0d00200820056a4198036a210520132110034020052802002209201041016a22103b010420092008360200200541046a21052010200b490d000b0b200041003a0000200041046a2001290200370200200041106a20133602002000410c6a200141086a2802003602000c020b200841086a2210200541016a22094105746a201020054105746a221020082f010620056b41057410a2051a201041186a200241186a290000370000201041106a200241106a290000370000201041086a200241086a29000037000020102002290000370000200841e8026a2213200941027422016a2013200541027422106a221320082f010620056b41027410a2051a20132003360200200820082f010641016a22133b0106201020084194036a22026a41086a200220016a2201201341ffff037120096b41027410a2051a20012004360200200520082f010622134f0d00200820106a4198036a2110034020102802002209200541016a22053b010420092008360200201041046a211020132005470d000b0b20002006290300370001200041013a00002000412c6a200a360200200041286a2008360200200041246a2007360200200041386a2007360200200041346a200b360200200041306a200f360200200041096a200641086a290300370000200041116a200641106a290300370000200041196a200641186a2903003700000b20064180046a24000f0b41ecdbc4004135418c94c700102d000b102a000bb30604017f017e017f047e230041a0016b220624000240200341ff0171450d00200641306a2001ad42004280c2d72f420010a605200641206a2002418094ebdc032002418094ebdc03491bad420042a08d06420010a605200641f0006a41186a4200370300200641f0006a41106a22014200370300200641f0006a41086a220242003703002006420037037041c599c500ad4280808080a00284100c220329000021072002200341086a290000370300200620073703702003102341b09ac500ad4280808080900284100c2203290000210720064190016a41086a2208200341086a29000037030020062007370390012003102320012006290390012207370300200641d0006a41086a2002290300370300200641d0006a41106a2007370300200641d0006a41186a200829030037030020062006290370370350200641206a41086a290300200641306a41086a2903007c2006290320220920062903307c2207200954ad7c2109200641c0006a200641d0006a10fa020240024020062802400d00410021024200210a0c010b2006290348220a4200552102200a427f550d00428080808080808080807f4200200a7d200a428080808080808080807f511b210a0b200641106a20072009200a428094ebdc0380220b420010a6052006200a200b4280ec94a37c7e7ca722033602702006418094ebdc0336027420062007428094ebdc03804200200641f0006a2003418094ebdc034b4102746a350200220a420010a605427f200641086a290300200641106a41086a2903007c2006290300220c20062903107c220b200c54ad7c200b200a2007428094ebdc03827e220a428094ebdc0380220ca7417f200a428080808080c0b2cd3b541b200a200c4280ec94a37c7e7c4280cab5ee01566aad7c220a200b54ad7c220b20097c200a20077c220c200a54ad7c42002009200b7d2007200a54ad7d220b2007200a7d220a200756200b200956200b2009511b22031b20021b200c4200200a20031b20021b22094280c8afa0257c2207200954ad7c220920057c200720047c22042007542202ad7c22072002200720095420072009511b22021b2105427f200420021b21040b2000200437030020002005370308200641a0016a24000bb62103027f017e037f230041106b2202240002402000280268220341024b0d0002400240024020030e03000102000b200241003a000020012002410110622002200041ec006a28020036020020012002410410620c020b200241013a000020012002410110620c010b200241023a000020012002410110620b024020002d00002203410e4b0d0002400240024002400240024002400240024002400240024002400240024020030e0f000102030405060708090a0b0c0d0e000b200241003a00002001200241011062200041046a2d0000220341044b0d0e0240024002400240024020030e050001020304000b200241003a00002001200241011062200041086a200110cb040c120b200241013a00002001200241011062200041146a210302400240024002400240200041086a2d00000e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a000020012002410110622002200041096a2d00003a0000200120024101106220022000410a6a2d00003a00000b20012002410110622003200110cb040c110b200241023a000020012002410110620c100b200241033a000020012002410110622001200041056a412010620c0f0b200241043a000020012002410110622001200041056a412010620c0e0b200241013a000020012002410110620240200041046a2d00004101460d00200241003a000020012002410110622001200041056a412010622002200041286a28020036020020012002410410620c0e0b200241013a000020012002410110622002200041086a28020036020020012002410410620c0d0b200241023a00002001200241011062200041086a2d0000220341044b0d0c02400240024002400240024020030e050001020304000b200241003a000020012002410110622001200041096a41201062200041306a29030021042002200041386a290300370308200220043703000c040b200241013a000020012002410110622001200041096a41201062200041306a29030021042002200041386a290300370308200220043703000c030b200241023a000020012002410110622001200041096a412010622001200041296a41201062200041d0006a29030021042002200041d8006a290300370308200220043703000c020b200241033a000020012002410110622001200041096a41201062200041306a29030021042002200041386a290300370308200220043703002001200241101062200041c0006a29030021042002200041c8006a290300370308200220043703000c010b200241043a000020012002410110622001200041096a41201062200041306a29030021042002200041386a290300370308200220043703000b20012002411010620c0c0b200241033a00002001200241011062200041086a2d0000220341064b0d0b024002400240024002400240024020030e0700010203040506000b200241003a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c110b200241013a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c100b200241023a0000200120024101106220022000410c6a28020036020020012002410410620c0f0b200241033a00002001200241011062200041096a2d0000220341024b0d0e02400240024020030e03000102000b200241003a000020012002410110620c100b200241013a000020012002410110620c0f0b200241023a000020012002410110620c0e0b200241043a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c0d0b200241053a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c0c0b200241063a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c0b0b200241043a00002001200241011062200241003a000020012002410110622001200041106a41101062200041046a28020021032000410c6a28020022052001106120012003200510622002200041206a2d00003a000020012002410110620c0a0b200241053a00002001200241011062200241003a000020012002410110622002200041046a28020036020020012002410410620c090b200241063a00002001200241011062200041046a280200220341024b0d0802400240024020030e03000102000b200241003a00002001200241011062200041086a2802002103200041106a2802002205200110612005450d0a2003200541286c6a2105034020012003412010622002200341206a29030037030020012002410810622005200341286a2203470d000c0b0b0b200241013a000020012002410110620c090b200241023a000020012002410110620c080b200241073a00002001200241011062200041046a2d0000220341024b0d0702400240024020030e03000102000b200241003a000020012002410110622001200041056a412010620c090b200241013a000020012002410110620c080b200241023a00002001200241011062200041086a2802002106200041106a2802002203200110612003450d072006200341d0006c6a2107034020012006412010622002200641206a3602002002200110db012002200641306a3602002002200110db01200628024021032006280248220520011061200641d0006a210602402005450d00200541306c210503402001200341106a41201062200220033602002002200110db01200341306a2103200541506a22050d000b0b20072006470d000c080b0b200241083a000020012002410110620240200041046a2802004101460d00200241003a000020012002410110622002200028020836020020012002410410620c070b200241013a000020012002410110622002200028020836020020012002410410620c060b200241093a00002001200241011062200041046a2d0000220341054b0d0502400240024002400240024020030e06000102030405000b200241003a000020012002410110622002200041086a2802003602002001200241041062024002400240024002402000410c6a2d00000e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a0000200120024101106220022000410d6a2d00003a0000200120024101106220022000410e6a2d00003a00000b20012002410110620c0a0b200241013a000020012002410110620c090b200241023a000020012002410110622001200041056a412010622001200041256a412010620c080b200241033a000020012002410110622001200041056a412010622002200041c8006a28020036020020012002410410622002200041cc006a28020036020020012002410410622001200041256a412010620c070b200241043a000020012002410110622001200041056a412010622002200041c8006a28020036020020012002410410622002200041cc006a28020036020020012002410410622001200041256a412010620240200041d0006a2d000022034104460d00200241013a000020012002410110620240024002400240024020030e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a000020012002410110622002200041d1006a2d00003a000020012002410110622002200041d2006a2d00003a00000b20012002410110620c070b200241003a000020012002410110620c060b200241053a000020012002410110622001200041056a412010622002200041c8006a28020036020020012002410410622002200041cc006a28020036020020012002410410622001200041256a412010620c050b2002410a3a00002001200241011062200041086a2d0000220341064b0d04024002400240024002400240024020030e0700010203040506000b200241003a000020012002410110622001200041096a412010620c0a0b200241013a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c090b200241023a000020012002410110622001200041096a41201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c080b200241033a000020012002410110622001200041096a4120106220022000412c6a28020036020020012002410410620c070b200241043a000020012002410110622001200041096a4120106220022000412c6a28020036020020012002410410620c060b200241053a000020012002410110622001200041096a4120106220022000412c6a28020036020020012002410410620c050b200241063a0000200120024101106220022000410c6a28020036020020012002410410620c040b2002410b3a0000200120024101106220002d0001220341054b0d03024002400240024002400240024020030e06000102030405000b200241003a00002001200241011062200041026a21030c050b200241013a000020012002410110622001200041026a41201062200041226a21030c040b200241023a000020012002410110622001200041026a412010622001200041226a41201062200041c2006a21030c030b200241033a000020012002410110622001200041026a41201062200041226a21030c020b200241043a000020012002410110622001200041026a41201062200041226a21030c010b200241053a00002001200241011062200041026a21030b20012003412010620c030b2002410c3a00002001200241011062200041096a21030240200041086a2d00004101460d00200241003a000020012002410110622001200341201062200041306a29030021042002200041386a2903003703082002200437030020012002411010620c030b200241013a0000200120024101106220012003412010620c020b2002410d3a000020012002410110620240200041046a2802004101460d00200241003a000020012002410110622002200041086a28020036020020012002410410620c020b200241013a000020012002410110622002200041086a280200360200200120024104106220022000410c6a280200360200200120024104106202400240200041106a28020022030d00200241003a000020012002410110620c010b200241013a00002001200241011062200041186a28020022052001106120012003200510620b024020002d001c22034104460d00200241013a000020012002410110620240024002400240024020030e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a0000200120024101106220022000411d6a2d00003a0000200120024101106220022000411e6a2d00003a00000b20012002410110620c020b200241003a000020012002410110620c010b2002410e3a0000200120024101106220002d0001220341024b0d0002400240024020030e03000102000b200241003a000020012002410110622002200041026a2d00003a000020012002410110620c020b200241013a000020012002410110622001200041026a412010620c010b200241023a000020012002410110622002200041026a2d00003a000020012002410110620b2000280270200041f8006a280200200110c803200241106a24000b9f0201037f024020002d0000417c6a220141094b0d00024002400240024020010e0a00040102040404040403000b200041086a280200450d03200041046a28020010230c030b200041046a2802000d022000410c6a2802002201450d02200141286c450d02200041086a28020010230f0b200041046a2d00004102490d010240200041106a2802002201450d00200141d0006c2102200041086a28020041c4006a21010340024020012802002203450d00200341306c450d002001417c6a28020010230b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d01200141d0006c450d01200028020810230f0b200041046a280200450d00200041106a2802002201450d00200041146a280200450d00200110230f0b0bf8f00102517f0d7e230041d0106b22012400200141003602102001410036020802400240200041086a22022802002203450d00200141f8076a4102722104200141fd026a2105200141d0026a41206a2106200141386a41206a2107200141f8076a41206a2108200141186a41186a2109200141186a41106a210a4100210b0340024002402002280200220c200b4d0d0020092000280200200b412c6c220d6a220e41246a290000370300200a200e411c6a290000370300200141186a41086a220f200e41146a2900003703002001200e29000c370318200e280200210c200e280208210e2001410036028008200142013703f807200141f8076a4100200e109a01200128028008211002400240200e41306c22110d0020012802f80721120c010b20012802f807221220104105746a210e0340200e200c290000370000200e41186a200c41186a290000370000200e41106a200c41106a290000370000200e41086a200c41086a290000370000201041016a2110200e41206a210e200c41306a210c201141506a22110d000b0b20012802fc07211320104102490d0102402010417f6a221420106c410176220c41ffffff1f71200c470d00200c410674220c417f4c0d00024002400240200c0d00410121150c010b200c10212215450d010b201241206a2116200c4106762117410021184100210c034002400240200c41016a221920104f0d002018410674211a2012200c4105746a21112014211b2016210e0340200141f8076a41186a221c201141186a290000370300200141f8076a41106a221d201141106a290000370300200141f8076a41086a221e201141086a290000370300200120112900003703f8072008200e290000370000200841086a200e41086a290000370000200841106a200e41106a290000370000200841186a200e41186a290000370000024020182017470d00024002400240201741016a220c2017490d002017410174221f200c201f200c4b1b220c41ffffff1f71200c470d00200c410674220c4100480d00024020170d00200c0d02410121150c030b20174106742217200c460d02024020170d00200c0d02410121150c030b20152017200c10252215450d0e0c020b102c000b200c10212215450d0c0b200c41067621170b2015201a6a220c20012903f807370000200c41386a200141f8076a41386a290300370000200c41306a200141f8076a41306a290300370000200c41286a200141f8076a41286a290300370000200c41206a2008290300370000200c41186a201c290300370000200c41106a201d290300370000200c41086a201e290300370000200e41206a210e201a41c0006a211a201841016a2118201b417f6a221b450d020c000b0b02402018450d00201520184106746a21202015211e02400340200141386a41386a201e41386a290000370300200141386a41306a201e41306a290000370300200141386a41286a201e41286a2900003703002007201e41206a290000370300200141386a41186a201e41186a220c290000370300200141386a41106a201e41106a220e290000370300200141386a41086a201e41086a22112900003703002001201e290000370338200141f8006a41186a2218200c290000370300200141f8006a41106a220c200e290000370300200141f8006a41086a220e20112900003703002001201e29000037037820014198016a41186a200741186a221129000037030020014198016a41106a200741106a221a29000037030020014198016a41086a200741086a221b2900003703002001200729000037039801200141d0026a41186a22192018290300370300200141d0026a41106a2221200c290300370300200141d0026a41086a2222200e29030037030020062007290000370000200641086a201b290000370000200641106a201a290000370000200641186a2011290000370000200120012903783703d002024002402001280208221b450d00200128020c211c0c010b200141f8076a410041c00510a0051a200141e8046a410041e00210a0051a41a8081021221b450d0c4100211c201b41003b0106201b4100360200201b41086a200141f8076a41c00510a1051a201b41c8056a200141e8046a41e00210a1051a2001410036020c2001201b3602080b201e41c0006a211e024002400240024002400240024002400240024002400240024003400240201b2f0106221a410674220e450d00201b41286a210c41002111034002400240200141d0026a200c41606a412010a3052218450d00201841004e0d012011211a0c030b2006200c412010a3052218450d04201841004e0d002011211a0c020b201141016a2111200c41c0006a210c200e41406a220e0d000b0b201c450d02201c417f6a211c201b201a4102746a41a8086a280200211b0c000b0b20022802002210200b4d0d032000280200221d200d6a220c28020841306c221a450d0a201b201141057422236a41c8056a211f200c280200210c4100211803404101210e0240200141f8006a200c460d00200c200141f8006a412010a305450d00024020014198016a200c470d004101210e0c010b200c20014198016a412010a30545210e0b200c41306a210c200e20186a2118201a41506a221a0d000b20184102470d0a2010412c6c210e0340201d210c200e450d0b0240200c410c6a2218201f460d00200e41546a210e200c412c6a211d2018201f412010a3050d010b0b0240200c41086a280200220e450d00200e41306c211a200141f8006a200c28020022186b211d20014198016a20186b21104100210c0340201d200c460d032018200c6a220e200141f8006a412010a305450d032010200c460d03200e20014198016a412010a305450d03201a200c41306a220c470d000b0b41082124410021250c070b200141b8016a41386a220c200141d0026a41386a290300370300200141b8016a41306a220e200141d0026a41306a290300370300200141b8016a41286a2211200141d0026a41286a290300370300200141b8016a41206a22182006290300370300200141b8016a41186a221c2019290300370300200141b8016a41106a221d2021290300370300200141b8016a41086a221f2022290300370300200120012903d0023703b8012001200128021041016a360210200141a0036a41386a2226200c290300370300200141a0036a41306a2227200e290300370300200141a0036a41286a22282011290300370300200141a0036a41206a22242018290300370300200141a0036a41186a2223201c290300370300200141a0036a41106a2225201d290300370300200141a0036a41086a2229201f290300370300200120012903b8013703a003200141d0076a41186a222a2009290300370300200141d0076a41106a222b200a290300370300200141d0076a41086a222c200f290300370300200120012903183703d0070240201b2f0106220e410b490d00200141f8076a410041c00510a0051a200141e8046a410041e00210a0051a41a8081021220c450d17200c41003b0106200c4100360200200c41086a200141f8076a41c00510a105210e200c41c8056a200141e8046a41e00210a1052118200141f8076a41086a221f201b41a3036a290000370300200141f8076a41106a2210201b41ab036a290000370300200141f8076a41186a2214201b41b3036a2900003703002008201b41bb036a290000370300200141f8076a41256a2216201b41c0036a2900003700002001201b4188036a2f00003b0188042001201b418a036a2d00003a008a042001201b419b036a2900003703f807201b418b036a280000212d201b418f036a280000212e201b4193036a280000212f201b4197036a2800002130200141c8046a41186a2231201b41a0076a290000370300200141c8046a41106a2232201b4198076a290000370300200141c8046a41086a2233201b4190076a2900003703002001201b290088073703c804200e201b41c8036a201b2f010641796a221141067410a105210e2018201b41a8076a201141057410a1052118201b41063b0106200c20113b0106200141e0036a41026a221c20012d008a043a0000200141e8046a41086a2234201f290300370300200141e8046a41106a22352010290300370300200141e8046a41186a22362014290300370300200141e8046a41206a22372008290300370300200141e8046a41256a22382016290000370000200120012f0188043b01e003200120012903f8073703e804200141a8046a41186a22392031290300370300200141a8046a41106a223a2032290300370300200141a8046a41086a223b2033290300370300200120012903c8043703a80402400240201a4107490d00200e201a417a6a221d4106746a200e201a41796a221a4106746a220e201141ffff0371201a6b41067410a2051a200e41386a2026290300370000200e41306a2027290300370000200e41286a2028290300370000200e41206a2024290300370000200e41186a2023290300370000200e41106a2025290300370000200e41086a2029290300370000200e20012903a0033700002018201d4105746a2018201a4105746a220e200c2f0106201a6b41057410a2051a200e41186a202a290300370000200e41106a202b290300370000200e41086a202c290300370000200e20012903d007370000200c200c2f010641016a3b01060c010b201b41086a220e201a41016a22114106746a200e201a4106746a220e201b2f0106201a6b41067410a2051a200e41386a2026290300370000200e41306a2027290300370000200e41286a2028290300370000200e41206a2024290300370000200e41186a2023290300370000200e41106a2025290300370000200e41086a2029290300370000200e20012903a003370000201b41c8056a220e20114105746a200e201a4105746a220e201b2f0106201a6b41057410a2051a200e41186a202a290300370000200e41106a202b290300370000200e41086a202c290300370000200e20012903d007370000201b201b2f010641016a3b01060b200520012903a804370000200141f4076a41026a220e201c2d00003a000020222034290300370300202120352903003703002019203629030037030020062037290300370300200141d0026a41256a22282038290000370000200541086a2211203b290300370000200541106a2218203a290300370000200541186a221a2039290300370000200120012f01e0033b01f407200120012903e8043703d002200141ac026a41026a223c200e2d00003a0000200141f8016a41086a223d2022290300370300200141f8016a41106a223e2021290300370300200141f8016a41186a223f2019290300370300200141f8016a41206a22402006290300370300200141f8016a41256a22412028290000370000200120012f01f4073b01ac02200120012903d0023703f801200141b0026a41186a2242201a290000370300200141b0026a41106a22432018290000370300200141b0026a41086a22442011290000370300200120052900003703b0020240201b28020022180d004100211d200141086a210e200c21180c0a0b201b2f0104212641002145200c2146034020014184046a41026a2247203c2d00003a00002022203d2903003703002021203e2903003703002019203f2903003703002006204029030037030020282041290000370000200120012f01ac023b018404200120012903f8013703d00220014188046a41186a2248204229030037030020014188046a41106a2249204329030037030020014188046a41086a224a2044290300370300200120012903b0023703880441000d03202641ffff0371211c02400240024020182f0106220c410b490d002004410041d20810a0051a41d8081021221a450d1b201a4100360200201a41046a200141f8076a41d40810a1051a200141d0076a41026a224b2018418a036a2d00003a0000201f201841a3036a2900003703002010201841ab036a2900003703002014201841b3036a2900003703002008201841bb036a2900003703002016201841c0036a290000370000200120184188036a2f00003b01d00720012018419b036a2900003703f8072018418b036a280000214c2018418f036a280000214d20184193036a280000214e20184197036a280000214f2031201841a0076a290000370300203220184198076a290000370300203320184190076a29000037030020012018290088073703c804201a41086a201841c8036a20182f0106220e41796a220c41067410a1052150201a41c8056a201841a8076a200c41057410a1052151201a41a8086a201841c4086a200e417a6a221d41027410a1052127201841063b0106201a200c3b01060240201d450d004100210c2027210e0340200e2802002211200c3b01042011201a360200200e41046a210e201d200c41016a220c470d000b0b2034201f29030037030020352010290300370300203620142903003703002037200829030037030020382016290000370000203b2033290300370300203a203229030037030020392031290300370300200120012f01d0073b01f407200120012903f8073703e804200120012903c8043703a8042001204b2d00003a00f607200141cc076a41026a221d20012d00f6073a0000201f203429030037030020102035290300370300201420362903003703002008203729030037030020162038290000370000200120012f01f4073b01cc07200120012903e8043703f807202a2039290300370300202b203a290300370300202c203b290300370300200120012903a8043703d007202641ffff037122264107490d012050201c417a6a22114106746a2050201c41796a220c4106746a220e201a2f0106200c6b41067410a2051a200e203036000f200e202f36000b200e202e360007200e202d360003200e41026a20472d00003a0000200e20012f0184043b0000200e20012903d002370013200e411b6a2022290300370000200e41236a2021290300370000200e412b6a2019290300370000200e41336a2006290300370000200e41386a2028290000370000205120114105746a2051200c4105746a220e201a2f01062226200c6b41057410a2051a200e41186a2048290300370000200e41106a2049290300370000200e41086a204a290300370000200e200129038804370000201a202641016a220e3b0106201c410274222d20276a416c6a202720114102746a2226200e41ffff0371221c20116b41027410a2051a20262046360200201c2011490d02201a202d6a4190086a210e0340200e2802002211200c41016a220c3b01042011201a360200200e41046a210e200c201c490d000c030b0b201841086a220e201c41016a22114106746a200e201c4106746a220e200c201c6b41067410a2051a200e203036000f200e202f36000b200e202e360007200e202d360003200e41026a20472d00003a0000200e20012f0184043b0000200e20012903d002370013200e411b6a2022290300370000200e41236a2021290300370000200e412b6a2019290300370000200e41336a2006290300370000200e41386a2028290000370000201841c8056a220c20114105746a200c201c4105746a220c20182f0106220e201c6b41057410a2051a200c41186a2048290300370000200c41106a2049290300370000200c41086a204a290300370000200c2001290388043700002018200e41016a220c3b0106201c410274201841a8086a220e6a41086a200e20114102746a220e200c41ffff0371221a20116b41027410a2051a200e20463602000240201c201a4f0d0020182011417f6a220c4102746a41ac086a210e0340200e2802002211200c41016a220c3b010420112018360200200e41046a210e200c201a490d000b0b41001a200141086a1a201b1a0c0d0b201841086a220c201c41016a220e4106746a200c201c4106746a220c20182f0106201c6b41067410a2051a200c203036000f200c202f36000b200c202e360007200c202d360003200c41026a20472d00003a0000200c20012f0184043b0000200c20012903d002370013200c411b6a2022290300370000200c41236a2021290300370000200c412b6a2019290300370000200c41336a2006290300370000200c41386a2028290000370000201841c8056a220c200e4105746a200c201c4105746a220c20182f01062211201c6b41057410a2051a200c41186a2048290300370000200c41106a2049290300370000200c41086a204a290300370000200c2001290388043700002018201141016a220c3b0106201c410274222d201841a8086a22116a41086a2011200e4102746a2227200c41ffff03712211200e6b41027410a2051a20272046360200202620114f0d002018202d6a41ac086a210c0340200c280200220e201c41016a221c3b0104200e2018360200200c41046a210c2011201c470d000b0b204541016a210c20014180046a41026a220e201d2d00003a00002029201f290300370300202520102903003703002023201429030037030020242008290300370300200141a0036a41256a22112016290000370000200141e0036a41086a221c202c290300370300200141e0036a41106a221d202b290300370300200141e0036a41186a2226202a290300370300200120012f01cc073b018004200120012903f8073703a003200120012903d0073703e003203c200e2d00003a0000203d2029290300370300203e2025290300370300203f20232903003703002040202429030037030020412011290000370000200120012f0180043b01ac02200120012903a0033703f801204220262903003703002043201d2903003703002044201c290300370300200120012903e0033703b00202402018280200220e0d00204d212e204e212f204f213020181a200141086a220e1a204c212d200c211d201a21180c0b0b20182f01042126200141086a1a204d212e204e212f204f213020181a204c212d200e2118201a2146200c21450c000b0b201b41086a220c201a41016a22114106746a200c201a4106746a220c200e201a6b41067410a2051a200c41386a2026290300370000200c41306a2027290300370000200c41286a2028290300370000200c41206a2024290300370000200c41186a2023290300370000200c41106a2025290300370000200c41086a2029290300370000200c20012903a003370000201b41c8056a220c20114105746a200c201a4105746a220c201b2f0106201a6b41057410a2051a200c41186a202a290300370000200c41106a202b290300370000200c41086a202c290300370000200c20012903d007370000201b201b2f010641016a3b01060c090b200141f8076a41086a22292018200c6a220e41086a290300370300200141f8076a41106a222a200e41106a290300370300200141f8076a41186a222b200e41186a2903003703002001200e2903003703f807200e41286a2903002152200e41206a2903002153413010212224450d0f20242053370320202420012903f807370300202441286a2052370300202441186a202b290300370300202441106a202a290300370300202441086a202929030037030020014281808080103702ec04200120243602e8040240201a41506a200c470d00410121250c060b200e41306a211d2018201a6a220e41506a21194101211a0340201d210c024002400340200141f8006a200c460d01200c200141f8006a412010a305450d0120014198016a200c460d01200c20014198016a412010a305450d01200e200c41306a220c470d000c020b0b200c41286a2903002152200c41206a2903002153200141d0076a41186a2210200c41186a290300370300200141d0076a41106a2214200c41106a290300370300200141d0076a41086a2216200c41086a2903003703002001200c2903003703d0070240201a20012802ec04470d00200141e8046a201a410110a40120012802e80421240b200c41306a211d2024201a41306c6a221820012903d00737030020162903002154201429030021552010290300215620182053370320201841286a2052370300201841186a2056370300201841106a2055370300201841086a20543703002001201a41016a221a3602f0042019200c470d010b0b20012802ec042125201a4102490d05201a4102470d0441e0001021221d450d0f200142023702fc012001201d3602f80102402002280200220c200b4d0d000240024002402000280200200d6a220c28020841306c221a0d004102210c0c010b200c280200210c41002118034002400240200141f8006a200c460d00200c200141f8006a412010a305210e20014198016a200c460d00200e450d00200c20014198016a412010a3050d010b200141c8046a41186a2210200c41186a290300370300200141c8046a41106a2214200c41106a290300370300200141c8046a41086a2216200c41086a2903003703002001200c2903003703c804200c41286a2903002152200c41206a29030021530240201820012802fc01470d00200141f8016a2018410110a40120012802f801211d20012802800221180b201d201841306c6a220e20012903c804370300201629030021542014290300215520102903002156200e2053370320200e41286a2052370300200e41186a2056370300200e41106a2055370300200e41086a20543703002001201841016a2218360280020b200c41306a210c201a41506a221a0d000b20184102460d0120012802fc01210c0b200c450d08200c41306c450d08201d10230c080b0240201d2024460d002024201d412010a305450d00200141f8076a41286a220c202441286a220e2903003703002008202441206a2218290300370300202b202441186a221a290300370300202a202441106a22102903003703002029202441086a2214290300370300200120242903003703f807200e202441d8006a22162903003703002018202441d0006a220e290300370300201a202441c8006a22182903003703002010202441c0006a221a2903003703002014202441386a2210290300370300202420242903303703002016200c290300370300200e20082903003703002018202b290300370300201a202a29030037030020102029290300370300202420012903f8073703300b2001427f3703f0042001427f3703e8044100211a200141003602c8042001410036028008200142083703f807200141f8076a4100410410a401202441e0006a211420012802f8072235200128028008221641306c6a211020012903f004215420012903e80421574100211803400240201d201a6a220c41206a2903002253205756200c41286a290300225220545620522054511b0d00200120533703e804200120183602c804200120523703f00420532157205221540b2010201a6a220e200c290300370300200c41086a2903002155200c41106a2903002156200c41186a2903002158200e41286a2052370300200e41206a2053370300200e41186a2058370300200e41106a2056370300200e41086a2055370300201841016a2118201a41306a221a41e000470d000b024020242014460d002010201a6a210c200141e8046a41086a290300215420012903e80421572024210e0340200e41306a211a0240200e41206a2903002253205756200e41286a290300225220545620522054511b0d00200120533703e804200120183602c804200120523703f00420532157205221540b200c200e290300370300200e41086a2903002155200e41106a2903002156200e41186a2903002158200c41286a2052370300200c41206a2053370300200c41186a2058370300200c41106a2056370300200c41086a2055370300200c41306a210c201841016a2118201a210e2014201a470d000b0b201620186a211620012802fc07212d200141003602c001200142043703b801200141003602a803200142043703a00320012802c804210c200141a0036a41004101107920012802a003222820012802a803220e4102746a200c3602002001200e41016a220c3602a80302400240024020012802c80422184102490d00200141b8016a41004101107920012802b80120012802c001220e4102746a201841017141037322183602002001200e41016a220e3602c0012018417e6a21180240200c20012802a403470d00200141a0036a200c4101107920012802a003212820012802a803210c0b2028200c4102746a20183602002001200c41016a22343602a80320012802c804417e6a210c200e20012802bc01470d02200141b8016a200e410110790c010b200141b8016a41004101107920012802b80120012802c001220e4102746a410120186b3602002001200e41016a220e3602c001410320186b21180240200c20012802a403470d00200141a0036a200c4101107920012802a003212820012802a803210c0b2028200c4102746a20183602002001200c41016a22343602a80320012802c80441026a210c200e20012802bc01470d01200141b8016a200e410110790b20012802c001210e0b20012802b8012227200e4102746a200c3602002001200e41016a220c3602c00141041021222c450d10200142013702d4022001202c3602d00220012802bc0121360240200c450d002027200c4102746a212620272122034002400240202228020022214102490d00202b201f41186a290000370300202a201f41106a2900003703002029201f41086a2900003703002001201f2900003703f8070c010b202b2009290300370300202a200a2903003703002029200f290300370300200120012903183703f8070b02402002280200220c450d0020002802002210200c412c6c6a21142035202141306c6a211a034002400240200141f8076a2010410c6a220c460d00200c200141f8076a412010a3050d010b2010280208210c0240201620214d0d00200c41306c210e4100211820102802002219210c02400340200e450d03201a200c460d01200c201a412010a305211d201841016a2118200e41506a210e200c41306a210c201d0d000b201d4541016a41017120186a417f6a21180b2019201841306c6a220c427f200c290320225220012903e8047c22532053205254220e200c41286a220c2903002252200141e8046a41086a2903007c200ead7c225320525420532052511b220e1b370320200c427f2053200e1b3703000c010b200c450d002021201641c4e6c4001030000b2010412c6a22102014470d000b0b202241046a22222026470d000b0b0240203641ffffffff0371450d00202710230b20012802a403212e0240024020340d00410021270c010b202820344102746a21364100212720282134034002400240203428020022224102490d00202b201f41186a290000370300202a201f41106a2900003703002029201f41086a2900003703002001201f2900003703f8070c010b202b2009290300370300202a200a2903003703002029200f290300370300200120012903183703f8070b02402002280200220c450d0020002802002210200c412c6c6a21192035202241306c6a211a034002400240200141f8076a2010410c6a220c460d00200c200141f8076a412010a3050d010b201041086a2226280200211402400240201620224d0d00201441306c210e4100211820102802002221210c02400340200e450d04201a200c460d01200c201a412010a305211d201841016a2118200e41506a210e200c41306a210c201d0d000b201d4541016a41017120186a417f6a21180b42002021201841306c6a220c290320225220012903e80422547d22532053205256200c41286a2903002253200141e8046a41086a2903007d2052205454ad7d225220535620522053511b220e1b225342002052200e1b225284500d01200c41206a220c2053370300200c20523703080c020b2014450d012022201641d4e6c4001030000b200c200c41306a20142018417f736a41306c10a2051a20262014417f6a3602000240202720012802d402470d00200141d0026a20274101107920012802d80221270b20012802d002222c20274102746a20223602002001202741016a22273602d8020b2010412c6a22102019470d000b0b203441046a22342036470d000b0b0240202e41ffffffff0371450d00202810230b202c417c6a21182027410274220c210e024003400240200e0d00410021180c020b200e417c6a210e201841046a221828020041014b0d000b0b20012802d402211d202c210e024003400240200c0d004100210c0c020b200c417c6a210c200e280200211a200e41046a210e201a4102490d000b4101210c0b0240201d41ffffffff0371450d00202c10230b024020180d00200c450d05201f2001290318370000201f41186a2009290300370000201f41106a200a290300370000201f41086a200f2903003700000c050b200c450d0420012001280210417f6a360210201b41086a210c02400240201c450d00201c417f6a210e200c20114106746a2118201b20114102746a41a8086a280200210c02400340200c2f01062111200e450d01200e417f6a210e200c20114102746a41a8086a280200210c0c000b0b200c410020111b221b41086a220e2011417f6a410020111b22114106746a220c2900002152200c2900082153200c2900102154200c41186a2900002155200c2900202156200c41286a2900002158200c41306a2900002157200c41386a290000215941012130200c200e201141016a221a4106746a2011417f73220e201b2f01066a41067410a2051a201b41c8056a221c20114105746a220c290000215a200c290008215b200c290010215c200c41186a290000215d200c201c201a4105746a200e201b2f01066a41057410a2051a201b201b2f0106417f6a3b0106201841386a2059370000201841306a2057370000201841286a205837000020182056370020201841186a2055370000201820543700102018205337000820182052370000201f41186a205d370000201f205c370010201f205b370008201f205a370000201b2f0106210c0c010b200c20114106746a200c201141016a220e4106746a2011417f73220c201b2f01066a41067410a2051a201b41c8056a221820236a2018200e4105746a200c201b2f01066a41057410a2051a201b201b2f0106417f6a220c3b0106410021300b200c41ffff037141044b0d0341002122200141086a210e201b210c410021190240024002400240024002400240024002400240024002400240024002400340200c280200221a450d1302400240200c33010422524200520d0041002121201a4100201a2f0106220c1b211a42002052422086200c1b200ead8421520c010b2052422086200ead844280808080707c2152410121210b02400240201a41a8086a220e2052422088a7221841016a220c41027422276a221c28020022102f0106221f200e201841027422236a2226280200221d2f010622146a222f410b490d0020210d05201f450d01201041c0006a2900002158201041386a2900002157201041306a2900002159201041286a290000215a201041206a2900002153201041186a2900002154201041106a290000215520102900082156201041086a201041c8006a201f41067441406a10a2051a201041e0056a290000215e201041d8056a290000215b201041d0056a290000215c20102900c805215d201041c8056a201041e8056a201f41057441606a10a2051a20190d034100211d0c040b201941016a2119201a2f01062116200141f8076a41386a222c201a41086a223420184106746a220e41386a290000370300200141f8076a41306a2236200e41306a290000370300200141f8076a41286a2228200e41286a2900003703002008200e41206a290000370300202b200e41186a290000370300202a200e41106a2900003703002029200e41086a2900003703002001200e2900003703f807200e2034200c4106746a20162018417f7322346a41067410a2051a201d41086a222e20144106746a220e41386a202c290300370000200e41306a2036290300370000200e41286a2028290300370000200e41206a2008290300370000200e41186a202b290300370000200e41106a202a290300370000200e41086a2029290300370000200e20012903f807370000202e201441016a22164106746a201041086a201f41067410a1051a201a2f0106212c200141d0076a41186a2236201a41c8056a222820184105746a220e41186a290000370300200141d0076a41106a2218200e41106a290000370300200141d0076a41086a222e200e41086a2900003703002001200e2900003703d007200e2028200c4105746a2034202c6a41057410a2051a201d41c8056a222c20144105746a220e41186a2036290300370000200e41106a2018290300370000200e41086a202e290300370000200e20012903d007370000202c20164105746a201041c8056a201f41057410a1051a201c202641086a412c20276b10a2051a0240200c201a2f0106221c4f0d00201a20236a41ac086a210e0340200e2802002218200c3b01042018201a360200200e41046a210e201c200c41016a220c470d000b201a2f0106211c0b201a201c417f6a3b0106201d201f201d2f01066a41016a3b0106024020194102490d00201d20164102746a41a8086a201041a8086a201f41027441046a10a1051a2016202f41026a4f0d00201f41016a2118201d20144102746a41ac086a210c2016210e0340200c280200221c200e3b0104201c201d360200200c41046a210c200e41016a210e2018417f6a22180d000b0b20101023024020222021417f73724101710d0020194101470d102016410020211b20116a2111201a20236a41a8086a280200211b0b2052a7210e201a220c2f01062218450d064101212220184105490d010c140b0b41d4dac4004120418c94c700102d000b20102802a808211d201041a8086a220c201041ac086a201f41027410a2051a4100210e201d41003602000340200c280200221c200e3b0104201c2010360200200c41046a210c201f200e41016a220e470d000b2019417f6a211c20102f0106211f0b2010201f417f6a3b0106201a20184106746a220c41206a220e2900002152200e2053370000200c41186a220e2900002153200e2054370000200c41106a220e2900002154200e2055370000200c41086a220e2900002155200e2056370000200c41c0006a220e2900002156200e2058370000200c41386a220e2900002158200e2057370000200c41306a220e2900002157200e2059370000200c41286a220c2900002159200c205a370000201a20184105746a220c41d8056a220e290000215a200e205b370000200c41d0056a220e290000215b200e205c370000200c41c8056a220e290000215c200e205d370000200c41e0056a220c290000215d200c205e3700002026280200210c02402019450d00201d450d052019417f6a201c470d06200c2f01062218410a4b0d07200c20184106746a220e41c0006a2056370000200e41386a2058370000200e41306a2057370000200e41286a2059370000200e41206a2052370000200e41186a2053370000200e41106a2054370000200e41086a2055370000200c20184105746a220e41e0056a205d370000200e41d8056a205a370000200e41d0056a205b370000200e41c8056a205c370000200c201841016a220e4102746a41a8086a2218201d360200200c200c2f010641016a3b010620182802002218200e3b01042018200c3602000c020b200c2f01062218410b4f0d07200c20184106746a220e41c0006a2056370000200e41386a2058370000200e41306a2057370000200e41286a2059370000200e41206a2052370000200e41186a2053370000200e41106a2054370000200e41086a2055370000200c20184105746a220e41d8056a205a370000200e41d0056a205b370000200e41c8056a205c370000200e41e0056a205d370000200c200c2f010641016a3b01060c010b0240024002402014450d00201d2014417f6a220e4105746a220c41e0056a290000215e200c41d8056a290000215b200c41d0056a290000215c200c41c8056a290000215d201d200e4106746a220c41c0006a2900002158200c41386a2900002157200c41306a2900002159200c41286a290000215a200c41206a2900002153200c41186a2900002154200c41106a2900002155200c41086a290000215620190d014100210e0c020b41d4dac4004120418c94c700102d000b201d20144102746a41a8086a280200220e41003602002019417f6a211f201d2f010621140b201d2014417f6a3b0106201a20184106746a220c41206a221d2900002152201d2053370000200c41186a221d2900002153201d2054370000200c41106a221d2900002154201d2055370000200c41086a221d2900002155201d2056370000200c41c0006a221d2900002156201d2058370000200c41386a221d2900002158201d2057370000200c41306a221d2900002157201d2059370000200c41286a220c2900002159200c205a370000201a20184105746a220c41d8056a2218290000215a2018205b370000200c41d0056a2218290000215b2018205c370000200c41c8056a2218290000215c2018205d370000200c41e0056a220c290000215d200c205e370000201c280200211802402019450d00200e450d082019417f6a201f470d09024020182f0106220c410a4b0d00201841c8006a201841086a200c41067410a2051a201841386a2058370000201841306a2057370000201841286a2059370000201841186a2053370000201841106a205437000020182055370008201841c0006a2056370000201841206a2052370000201841e8056a201841c8056a200c41057410a2051a201841e0056a205d370000201841d8056a205a370000201841d0056a205b3700002018205c3700c805201841ac086a201841a8086a220c20182f010641027441046a10a2051a2018200e3602a808201820182f010641016a220e3b0106200e41ffff037141016a211c4100210e0340200c280200221a200e3b0104201a2018360200200c41046a210c201c200e41016a220e470d000c030b0b41dcd9c4004127418c94c700102d000b20182f0106220c410b4f0d09201841c8006a201841086a200c41067410a2051a201841386a2058370000201841306a2057370000201841286a2059370000201841186a2053370000201841106a205437000020182055370008201841c0006a2056370000201841206a2052370000201841e8056a201841c8056a200c41057410a2051a201841e0056a205d370000201841d8056a205a370000201841d0056a205b3700002018205c3700c805201820182f010641016a3b01060b2022417f732021710d010c0e0b0240200e2802042218450d00200e280200221a2802a808210c200e2018417f6a360204200e200c360200200c4100360200201a10230c0e0b41b3dac4004121418c94c700102d000b2011201b2f0106490d084100210e024003400240201b280200220c0d00410021114100210c0c020b200e41016a210e201b2f01042111200c211b2011200c2f01064f0d000b0b201141016a21110240200e0d00200c211b0c0d0b200c20114102746a41a8086a280200211b41002111200e417f6a220c450d0c0340201b2802a808211b200c417f6a220c0d000c0d0b0b41d095c700412b41dcdbc400102d000b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000b41dcd9c4004127418c94c700102d000b41d095c700412b41f4dac400102d000b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000b41f58ac7004128418c94c700102d000b201141016a21110c030b200b200c41b4e6c4001030000b41ecdbc4004135418c94c700102d000b200b201041a4e6c4001030000b2030450d002011201b2f0106490d000340201b280200220c450d01201b2f0104210e200c211b200e200c2f01064f0d000b0b0240202d450d00202d41306c450d00203510230b20012802fc01220c450d00200c41306c450d0020012802f80110230b2025450d03202541306c450d03202410230c030b201f2001290318370000201f41186a2009290300370000201f41106a200a290300370000201f41086a200f2903003700000b2025450d01202541306c450d01202410230c010b2004410041d20810a0051a41d8081021220c450d0d200c4100360200200c41046a200141f8076a41d40810a1051a200c200e28020022113602a808200e200c360200200e200e280204221a41016a360204201141003b01042011200c360200200141d0026a41026a221c203c2d00003a0000201f203d2903003703002010203e2903003703002014203f2903003703002008204029030037030020162041290000370000200120012f01ac023b01d002200120012903f8013703f807203620422903003703002035204329030037030020342044290300370300200120012903b0023703e804201a201d470d01200c2f01062211410a4b0d03200c20114106746a220e410a6a201c2d00003a0000200e41086a20012f01d0023b0000200e41176a2030360000200e41136a202f360000200e410f6a202e360000200e410b6a202d360000200e41c0006a2016290000370000200e413b6a2008290300370000200e41236a201f290300370000200e411b6a20012903f807370000200e41336a2014290300370000200e412b6a2010290300370000200c20114105746a220e41e0056a2036290300370000200e41d8056a2035290300370000200e41d0056a2034290300370000200e41c8056a20012903e804370000200c201141016a220e4102746a41a8086a2018360200200c200e3b01062018200c3602002018200e3b010441001a201b1a0b201e2020470d010c030b0b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000b201741ffffff1f71450d05201510230c050b2014417f6a2114201641206a21162019210c0c000b0b1033000b1032000b200b200c4194e6c4001030000b200b41016a210b0240201341ffffff3f71450d00201210230b200b2003470d000b2001280208220c450d00200128021021170240200128020c220e450d000340200c2802a808210c200e417f6a220e0d000b0b02402017450d00410021080340024002400240200c450d002017417f6a21172008200c2f0106490d0141002111034002400240200c280200220e0d00410021084100210e0c010b201141016a2111200c2f010421080b200c1023200e210c2008200e2f01064f0d000b200841016a2108024020110d00200e210c0c030b200e20084102746a41a8086a280200210c410021082011417f6a220e450d020340200c2802a808210c200e417f6a220e0d000c030b0b41d095c700412b41c491c700102d000b200841016a21080b20170d000b0b200c450d00200c280200210e200c1023200e450d000340200e280200210c200e1023200c210e200c0d000b0b200141003602b004200141003602a80402402002280200220b450d00200141a8046a41086a21422000280200210c200141e8046a41186a2133200141d0076a41106a2146200141d0076a41086a2147200141d0026a41016a223b41286a2149203b41206a214a200141f5026a2145200b210e41002125024002400340200e20254d0d01200141d0076a41186a2248200c2025412c6c22416a220841246a29000037030020462008411c6a2900003703002047200841146a2900003703002001200829000c3703d00702402008280208450d00410021300340200141c8046a41186a200c20416a280200203041306c6a220c41186a220e290300370300200141c8046a41106a200c41106a2208290300370300200141c8046a41086a200c41086a22112903003703002001200c2903003703c804200141386a41186a221e2048290300370300200141386a41106a22152046290300370300200141386a41086a221f2047290300370300200120012903d007370338200141003a0058200141b8016a41186a2206200e290000370300200141b8016a41106a22102008290000370300200141b8016a41086a220720112900003703004101211d200141013a00d8012001200c2900003703b8010240024020012802a80422180d0041002118410021140c010b2018211a20012802ac04221b211c02400340201a41286a210c201a2f0106221d41216c210e41002111024002400340201121080240200e0d00201d21080c020b02400240200141386a200c41606a412010a3052211450d0041012117201141004e0d010c030b200c2d00002211450d03417f410120111b21170b200841016a2111200e415f6a210e200c41216a210c2017417f470d000b0b0240201c0d004101211d0c030b201c417f6a211c201a20084102746a41a0036a280200211a0c010b0b4100211d0b2018211a0340201a41286a210c201a2f0106221c41216c210e41002111024002400340201121080240200e0d00201c21080c020b02400240200141b8016a200c41606a412010a3052211450d0041012117201141004e0d010c030b200c2d000022114101460d03417f4101201141014b1b21170b200841016a2111200e415f6a210e200c41216a210c2017417f470d000b0b0240201b0d00410021140c030b201b417f6a211b201a20084102746a41a0036a280200211a0c010b0b201a20084102746a41f4026a21140b200141a0036a41186a2238201e290300370300200141a0036a41106a22392015290300370300200141a0036a41086a223a201f290300370300200120012903383703a003200141003a00c003024002402018450d0020012802ac04211a0c010b200141f8076a410041eb0210a0051a20494100360000204a4200370000203b41186a4200370000203b41106a4200370000203b41086a4200370000203b420037000041a00310212218450d074100211a201841003b010620184100360200201841086a200141f8076a41eb0210a1051a20184198036a204529000037000020184193036a200141d0026a41206a2900003700002018418b036a200141d0026a41186a29000037000020184183036a200141d0026a41106a290000370000201841fb026a200141d0026a41086a290000370000201820012900d0023700f302200141003602ac04200120183602a8040b024002400340201841286a210c20182f0106221b41216c210e4100211102400340201121080240200e0d00201b21080c020b02400240200141a0036a200c41606a412010a3052211450d0041012117201141004e0d010c030b200c2d00002211450d04417f410120111b21170b200841016a2111200e415f6a210e200c41216a210c2017417f470d000b0b0240201a450d00201a417f6a211a201820084102746a41a0036a28020021180c010b0b203320012903a003370000203341086a203a290300370000203341106a2039290300370000203341186a2038290300370000203341206a200141a0036a41206a2d00003a0000200120423602fc04200120083602f804200120183602f0044100210c200141003602ec042001200141a8046a3602f4040c010b200120423602fc04200120083602f804200120183602f0042001201a3602ec042001200141a8046a3602f4044101210c0b2001200c3602e804200141f8076a41086a2235201f290300370300200141f8076a41106a22362015290300370300200141f8076a41186a2228201e290300370300200141f8076a41206a221c200141386a41206a2d00003a0000200120012903383703f80741341021220c450d06200c4200370208200c428180808010370200200c20012903f807370210200c20012f00d0023b0031200c41186a2035290300370200200c41206a2036290300370200200c41286a2028290300370200200c41306a201c2d00003a0000200c41336a200141d0026a41026a221e2d00003a000002400240024002400240200141e8046a200c10ba04280200222428020041016a220c41014d0d002024200c3602002038200629030037030020392010290300370300203a2007290300370300200120012903b8013703a003200141013a00c0030240024020012802a8042218450d0020012802ac04211a0c010b200141f8076a410041eb0210a0051a20494100360000204a4200370000203b41186a4200370000203b41106a4200370000203b41086a4200370000203b420037000041a00310212218450d0c4100211a201841003b010620184100360200201841086a200141f8076a41eb0210a1051a20184198036a204529000037000020184193036a200141d0026a41206a2900003700002018418b036a200141d0026a41186a29000037000020184183036a200141d0026a41106a290000370000201841fb026a200141d0026a41086a290000370000201820012900d0023700f302200141003602ac04200120183602a8040b024002400340201841286a210c20182f0106221b41216c210e4100211102400340201121080240200e0d00201b21080c020b02400240200141a0036a200c41606a412010a3052211450d0041012117201141004e0d010c030b200c2d000022114101460d04417f4101201141014b1b21170b200841016a2111200e415f6a210e200c41216a210c2017417f470d000b0b0240201a450d00201a417f6a211a201820084102746a41a0036a28020021180c010b0b203320012903a003370000203341086a203a290300370000203341106a2039290300370000203341186a2038290300370000203341206a200141a0036a41206a2d00003a0000200120423602fc04200120083602f804200120183602f0044100210c200141003602ec042001200141a8046a3602f4040c010b200120423602fc04200120083602f804200120183602f0042001201a3602ec042001200141a8046a3602f4044101210c0b2001200c3602e804203520072903003703002036201029030037030020282006290300370300201c200141b8016a41206a2d00003a0000200120012903b8013703f80741341021220c450d0b200c4200370208200c428180808010370200200c20012903f807370210200c20012f00d0023b0031200c41186a2035290300370200200c41206a2036290300370200200c41286a2028290300370200200c41306a201c2d00003a0000200c41336a201e2d00003a0000200141e8046a200c10ba042802002223280200220e41016a220c41014d0d002023200c36020002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240201d450d0020140d03202428020041016a220c41014d0d172024200c36020020232802080d0a2023417f360208202328020c220c0d014100210c0c020b2014450d03200141f8076a202410bb042001280284082144200128028008214e20012802fc07213120012802f807213c200141f8076a202310bb042001280284082143200128028008214f20012802fc0721400240203c20012802f807223f460d00203c28020841016a220c41004c0d08203c200c360208203f280208220c41016a220e41004c0d09203f200e360208203c41106a203f41106a412010a3050d07203c2d0030203f2d0030470d07203f200c360208203c203c280208417f6a3602080b20402043410274222c6a211c20312044410274222b6a210c4100211d41002118202b450d0541002118201c2111200c2117034020402011460d0602402017417c6a2217280200220e2011417c6a22112802002208460d00200e28020841016a221a41004c0d0e200e201a3602082008280208221a41016a221b41004c0d0f2008201b360208200e41106a200841106a412010a3050d06200e2d003020082d0030470d062008201a360208200e200e280208417f6a3602080b201841016a211820312017470d000c060b0b200c200c280200417f6a3602000240202328020c220c2802000d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10d602200c28020c210e0b200e200e280204417f6a360204200c28020c220c2802040d00200c10230b202328020c220c200c280204417f6a360204202328020c220c2802040d00200c10230b202328020841016a210c0b2023200c3602080c150b200e417e4f0d132023200e41026a36020020242802080d072024417f36020802400240202428020c220c0d004100210c0c010b200c200c280200417f6a3602000240202428020c220c2802000d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10d602200c28020c210e0b200e200e280204417f6a360204200c28020c220c2802040d00200c10230b202428020c220c200c280204417f6a360204202428020c220c2802040d00200c10230b202428020841016a210c0b2024200c3602082024202336020c0c150b202428020041016a220c41014d0d122024200c36020020232802080d072023417f3602080240202328020c220c0d00202341003602080c140b200c200c280200417f6a3602000240202328020c220c2802000d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10d602200c28020c210e0b200e200e280204417f6a360204200c28020c220c2802040d00200c10230b202328020c220c200c280204417f6a360204202328020c220c2802040d00200c10230b2023202328020841016a3602080c130b2008201a360208200e200e280208417f6a3602080b2001410036028008200142043703f807204420186b210e0240204320186b221241016a2217450d002017201c20406b4102762208200820174b1b211d0b02400240200e0d00410021080c010b200e200c20316b41027622082008200e4b1b21080b0240201d20086a2208201d4f0d0041002111410421224100211e2040211a0240410041ff01710e030d0e000d0b410021080c0e0b200141f8076a41002008107920012802f8072222200128028008221e4102746a210802402017450d002040202c6a211b2043417f7320186a2117204021110340201b2011460d012011280200221828020041016a221a41014d0d122018201a36020020082018360200201e41016a211e200841046a2108201141046a2111201741016a221820174f211a20182117201a0d000b0b0240200e450d000240200c20316b4102762211200e4d0d002011200e417f736a220e20114f0d01200c200e4102746b417c6a210c0b200c2031460d000340200c417c6a220c280200220e28020041016a221141014d0d12200e20113602002008200e360200201e41016a211e200841046a21082031200c470d000b0b2001201e360280080c0e0b203f200c360208203c203c280208417f6a360208204fad4220862040ad842252204ead4220862031ad842253204420434b221e1b2254a7211d024020432044201e1b2215410274220e450d00201d200e6a211c41012117201d2108201d21110340024002402017450d00201c20086b41027620174d0d03200820174102746a21080c010b201c2008460d020b2011280200221828020041016a220c41014d0d112018200c3602002008280200220c2802080d09201141046a2111200c417f360208410021174100211a0240200c28020c221b450d00201b201b280200417f6a3602000240200c28020c221a2802000d000240201a28020c221b450d00201b201b280200417f6a360200201a28020c221b2802000d000240201b28020c450d00201b410c6a10d602201a28020c211b0b201b201b280204417f6a360204201a28020c221a2802040d00201a10230b200c28020c221a201a280204417f6a360204200c28020c221a2802040d00201a10230b200c28020841016a211a0b200841046a2108200c201a360208200c201836020c201c2011470d000b0b2015450d08024020442043201e1b22170d004100410041a4e7c4001030000b20532052201e1b2252a72218280200220828020041016a220c41014d0d0f2008200c360200201d280200220c2802080d09200c417f36020802400240200c28020c22110d00410021110c010b20112011280200417f6a3602000240200c28020c22112802000d000240201128020c221a450d00201a201a280200417f6a360200201128020c221a2802000d000240201a28020c450d00201a410c6a10d602201128020c211a0b201a201a280204417f6a360204201128020c22112802040d00201110230b200c28020c22112011280204417f6a360204200c28020c22112802040d00201110230b200c28020841016a21110b2052422088215220544220882153200c2011360208200c200836020c201741027421082018210c0340200c28020022112011280200417f6a3602000240200c28020022112802000d000240201128020c2217450d0020172017280200417f6a360200201128020c22172802000d000240201728020c450d002017410c6a10d602201128020c21170b20172017280204417f6a360204201128020c22112802040d00201110230b200c28020022112011280204417f6a360204200c28020022112802040d00201110230b200c41046a210c2008417c6a22080d000b02402052500d002052a7410274450d00201810230b201d210c0340200c28020022082008280200417f6a3602000240200c28020022082802000d000240200828020c2211450d0020112011280200417f6a360200200828020c22112802000d000240201128020c450d002011410c6a10d602200828020c21110b20112011280204417f6a360204200828020c22082802040d00200810230b200c28020022082008280204417f6a360204200c28020022082802040d00200810230b200c41046a210c200e417c6a220e0d000b02402053500d002053a7410274450d00201d10230b203f203f280200417f6a220c360200203041016a2130200c0d0e0240203f28020c220c450d00200c200c280200417f6a360200203f28020c220c2802000d000240200c28020c450d00200c410c6a10d602203f28020c210c0b200c200c280204417f6a360204203f28020c220c2802040d00200c10230b203f203f280204417f6a220c360204200c0d0e203f10230c0e0b41a795c700411820014188046a4184e7c40041c095c7001034000b41a795c700411820014188046a4184e7c40041c095c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b41a795c700411820014188046a4184e7c40041c095c7001034000b41a795c700411820014188046a4184e7c40041c095c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b410041004194e7c4001030000b41c394c700411020014188046a41fc95c70041d494c7001034000b410121080c010b410221080b034002400240024002400240024020080e03000103030b200e450d06200c20316b410276220841002008200e6b2218201820084b1b22084d0d06200c20084102746b417c6a220c2802002208280200221b41016a41014b0d010c080b0240024020170d00410021170c010b2017417f6a2117201c201a460d00201a280200220828020041016a221841014d0d08201a41046a211a200820183602004100211820080d040b200e450d05200c20316b410276220841002008200e6b2218201820084b1b22084d0d05200c20084102746b417c6a220c2802002208280200221b41016a41014d0d070b200e417f6a210e410221180c010b2017450d03201c201a460d03201a2802002208280200221b41016a41014d0d052017417f6a2117201a41046a211a410121180b2008201b41016a3602000b0240201e20012802fc07470d00024002400240024020180e03010200010b0240200e0d004100211b0c030b200e200c20316b410276221b201b200e4b1b211b0c020b4100211d4100211b02402017450d002017201c201a6b410276221b201b20174b1b211b0b0240200e450d00200e200c20316b410276221d201d200e4b1b211d0b417f201b201d6a221d201d201b491b211b0c010b024020170d004100211b0c010b2017201c201a6b410276221b201b20174b1b211b0b200141f8076a201e417f201b41016a221d201d201b491b107920012802f80721220b202220116a20083602002001201e41016a221e36028008201141046a2111024002400240201841ff01710e03000102000b410121080c020b410221080c010b410021080c000b0b20012802fc072151200141f8016a41186a224b4200370300200141f8016a41106a224c4200370300200141f8016a41086a224d4200370300200142003703f8012038420037030020394200370300203a4200370300200142003703a0034100211402400240201e0d00427f2154427f215541002126410021344100213241002127410021290c010b201e417f6a2110427f21544101210c41002126427f2155410021344100211b427f2158427f2152427f21530240024002400240024002400340200c211a2022201b4102746a220e280200220c28020841016a41004c0d010240200c2d00300d00200e280200220c28020841016a220e41004c0d03200c200e360208200141d0026a41186a221c200c41286a290000370300200141d0026a41106a221d200c41206a290000370300200141d0026a41086a2215200c41186a290000370300200c200c280208417f6a3602082001200c2900103703d002201e201a41002010201b4b1b220c4d0d042022200c4102746a280200220c28020841016a220e41004c0d05200c200e3602082033200c41286a290000370300200141e8046a41106a221f200c41206a290000370300200141e8046a41086a2206200c41186a290000370300200c200c280208417f6a3602082001200c2900103703e804201e201b201e201b1b417f6a220c4d0d062022200c4102746a280200220c28020841016a220e41004c0d07200c200e3602082028200c41286a2900003703002036200c41206a2900003703002035200c41186a290000370300200c200c280208417f6a3602082001200c2900103703f807200041086a280200412c6c220e2108200028020022112117024003402017210c2008450d010240200141d0026a200c410c6a2218460d00200841546a2108200c412c6a21172018200141d0026a412010a3050d010b0b200c41086a28020041306c2108200c280200211703402017210c2008450d010240200141e8046a200c460d00200841506a2108200c41306a2117200c200141e8046a412010a3050d010b0b2058200c41206a2903002257582052200c41286a29030022565820522056511b0d00204b2033290300370300204c201f290300370300204d2006290300370300203a20152903003703002039201d2903003703002038201c290300370300200120012903e8043703f801200120012903d0023703a003410121342057215420562155201b21262056215320572158205621520b03402011210c200e450d010240200141d0026a200c410c6a2208460d00200e41546a210e200c412c6a21112008200141d0026a412010a3050d010b0b200c41086a28020041306c210e200c280200210803402008210c200e450d010240200141f8076a200c460d00200e41506a210e200c41306a2108200c200141f8076a412010a3050d010b0b20542158205321522054200c41206a2903002257582053200c41286a29030022565820532056511b0d00204b2028290300370300204c2036290300370300204d2035290300370300203a20152903003703002039201d2903003703002038201c290300370300200120012903f8073703f801200120012903d0023703a003410021342057215420562155201b21262056215320572158205621520b0240201a201e470d00201e213220342127202621290c080b201a41016a210c201a211b0c000b0b41a795c700411820014188046a4184e7c40041c095c7001034000b41a795c700411820014188046a4184e7c40041c095c7001034000b200c201e41b4e7c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b200c201e41c4e7c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b200141003602d802200142043703d002202920276a21500240024020320d00410121214100210c0c010b201e417f6a21374101210c205041017121074100211441002110410121210240024002400240024002400240024002400340200c2119202220104102746a222a280200221c28020841016a220c41004c0d01201c200c3602080240201c2d00300d00201e2010417f6a203720101b223d4b222e450d032022203d4102746a222f280200222d28020841016a220c41004c0d04202d200c36020802400240200041086a223e280200220c0d002019210c2010211d0c010b20002802002218200c412c6c6a211b202d41106a211120102026462034457121164100211a2010211d034002400240201c41106a220c2018410c6a220e460d00200e200c412010a3050d010b201841086a2206280200221f41306c210e4100210820182802002215210c02400340200e450d022011200c460d01200c2011412010a3052117200841016a2108200e41506a210e200c41306a210c20170d000b20174541016a41017120086a417f6a21080b2015200841306c6a220c2903202153200c41286a2903002152024002400240201d410171450d0020070d01427f205220557c205320547c2256205354220ead7c2253200e205320525420532052511b220e1b2152427f2056200e1b21530c020b024020070d004200205220557d2053205454ad7d2256205320547d2258205356205620525620562052511b220e1b215242002058200e1b21530c020b427f205220557c205320547c2256205354220ead7c2253200e205320525420532052511b220e1b2152427f2056200e1b21530c010b4200205220557d2053205454ad7d2256205320547d2258205356205620525620562052511b220e1b215242002058200e1b21530b02402053205284500d00200c41206a220c2053370300200c20523703080c010b200c200c41306a201f2008417f736a41306c10a2051a2006201f417f6a36020041002127410020212025201a461b212102402016450d00202621292026211d0c010b201e20104d0d08202a280200220c28020041016a220e41014d0d10200c200e360200202e450d09202f280200220e28020041016a220841014d0d10200e20083602000240201420012802d402470d00200141d0026a2014410110a50120012802d80221140b20012802d00220144103746a2208200e3602042008200c3602002001201441016a22143602d80220342127202621292010211d0b02402018412c6a2218201b460d00201a41016a211a0c010b0b201d41016a210c0b201e200c41002037201d4b1b220c4d0d072022200c4102746a280200222e28020841016a220c41004c0d08202e200c3602080240203e280200220e450d0020002802002218200e412c6c6a21152010202646203441014671212f4100211a2022201041016a4100203720104b1b223d4102746a213e202e41106a2111201c41106a211b034002400240201b2018410c6a220c460d00200c201b412010a3050d010b201841086a2216280200220641306c210e410021082018280200221f210c02400340200e450d022011200c460d01200c2011412010a3052117200841016a2108200e41506a210e200c41306a210c20170d000b20174541016a41017120086a417f6a21080b201f200841306c6a220c2903202153200c41286a2903002152024002400240201d410171450d0020070d014200205220557d2053205454ad7d2256205320547d2258205356205620525620562052511b220e1b215242002058200e1b21530c020b024020070d00427f205220557c205320547c2256205354220ead7c2253200e205320525420532052511b220e1b2152427f2056200e1b21530c020b4200205220557d2053205454ad7d2256205320547d2258205356205620525620562052511b220e1b215242002058200e1b21530c010b427f205220557c205320547c2256205354220ead7c2253200e205320525420532052511b220e1b2152427f2056200e1b21530b02402053205284500d00200c41206a220c2053370300200c20523703080c010b200c200c41306a20062008417f736a41306c10a2051a20162006417f6a360200410020212025201a461b2121410121270240202f450d00202621292026211d0c010b201e20104d0d0c202a280200220c28020041016a220e41014d0d10200c200e360200201e203d4d0d0d203e280200220e28020041016a220841014d0d10200e20083602000240201420012802d402470d00200141d0026a2014410110a50120012802d80221140b20012802d00220144103746a2208200e3602042008200c3602002001201441016a22143602d80220342127202621292010211d0b201a41016a211a2018412c6a22182015470d000b202e280208210c0b202e200c417f6a360208202d202d280208417f6a360208201c280208210c0b201c200c417f6a360208024020192032470d00201e210c0c0b0b201941016a210c20192110201e20194b0d000b2019201e41d4e7c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b203d201e41e4e7c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b2010201e41f4e7c4001030000b203d201e4184e8c4001030000b200c201e4194e8c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b2010201e41a4e8c4001030000b203d201e41b4e8c4001030000b0240024020274101470d002029200c417f6a460d010b41c0001021220e450d0d200e20012903a003370000200e20012903f801370020200e41186a2038290300370000200e41106a2039290300370000200e41086a203a290300370000200e41286a204d290300370000200e41306a204c290300370000200e41386a204b29030037000002400240205020124b0d002043417f6a221b450d014100211102400240024002400240034020112043460d01204020114102746a2218280200220c280200220841016a221741014d0d0a200c2017360200200c28020841016a41004c0d02200c20083602002033200c41286a290000370300200141e8046a41106a200c41206a290000370300200141e8046a41086a200c41186a2900003703002001200c2900103703e8042043201141016a22114d0d03204020114102746a221a280200220c280200220841016a221741014d0d0a200c2017360200200c28020841016a41004c0d04200c20083602002028200c41286a2900003703002036200c41206a2900003703002035200c41186a2900003703002001200c2900103703f8074100210c02400340200c41c000460d01200e200c6a2108200c41206a210c2008200141e8046a412010a3050d000b4100210c0340200c41c000460d01200e200c6a2108200c41206a210c2008200141f8076a412010a3050d000c090b0b2018280200220828020041016a220c41014d0d0a2008200c360200201a280200220c2802080d05200c417f36020802400240200c28020c22170d00410021170c010b20172017280200417f6a3602000240200c28020c22172802000d000240201728020c2218450d0020182018280200417f6a360200201728020c22182802000d000240201828020c450d002018410c6a10d602201728020c21180b20182018280204417f6a360204201728020c22172802040d00201710230b200c28020c22172017280204417f6a360204200c28020c22172802040d00201710230b200c28020841016a21170b200c2017360208200c200836020c2011201b470d000c070b0b2043204341e4e8c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b2011204341f4e8c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b02402044417f6a221b450d004100211102400240024002400240034020112044460d01203120114102746a2218280200220c280200220841016a221741014d0d0a200c2017360200200c28020841016a41004c0d02200c20083602002033200c41286a290000370300200141e8046a41106a200c41206a290000370300200141e8046a41086a200c41186a2900003703002001200c2900103703e8042044201141016a22114d0d03203120114102746a221a280200220c280200220841016a221741014d0d0a200c2017360200200c28020841016a41004c0d04200c20083602002028200c41286a2900003703002036200c41206a2900003703002035200c41186a2900003703002001200c2900103703f8074100210c02400340200c41c000460d01200e200c6a2108200c41206a210c2008200141e8046a412010a3050d000b4100210c0340200c41c000460d01200e200c6a2108200c41206a210c2008200141f8076a412010a3050d000c080b0b2018280200220828020041016a220c41014d0d0a2008200c360200201a280200220c2802080d05200c417f36020802400240200c28020c22170d00410021170c010b20172017280200417f6a3602000240200c28020c22172802000d000240201728020c2218450d0020182018280200417f6a360200201728020c22182802000d000240201828020c450d002018410c6a10d602201728020c21180b20182018280204417f6a360204201728020c22172802040d00201710230b200c28020c22172017280204417f6a360204200c28020c22172802040d00201710230b200c28020841016a21170b200c2017360208200c200836020c2011201b470d000c060b0b2044204441c4e8c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b2011204441d4e8c4001030000b41a795c700411820014188046a4184e7c40041c095c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b202328020041016a220c41014d0d032023200c360200024020242802080d002024417f36020802400240202428020c220c0d004100210c0c010b200c200c280200417f6a3602000240202428020c220c2802000d000240200c28020c2208450d0020082008280200417f6a360200200c28020c22082802000d000240200828020c450d002008410c6a10d602200c28020c21080b20082008280204417f6a360204200c28020c220c2802040d00200c10230b202428020c220c200c280204417f6a360204202428020c220c2802040d00200c10230b202428020841016a210c0b2024200c3602082024202336020c200e10230c020b41c394c700411020014188046a41fc95c70041d494c7001034000b202428020041016a220c41014d0d022024200c360200024020232802080d002023417f36020802400240202328020c220c0d004100210c0c010b200c200c280200417f6a3602000240202328020c220c2802000d000240200c28020c2208450d0020082008280200417f6a360200200c28020c22082802000d000240200828020c450d002008410c6a10d602200c28020c21080b20082008280204417f6a360204200c28020c220c2802040d00200c10230b202328020c220c200c280204417f6a360204202328020c220c2802040d00200c10230b202328020841016a210c0b2023200c3602082023202436020c200e10230c010b41c394c700411020014188046a41fc95c70041d494c7001034000b20012802d002221820144103746a211120012802d402211b2018210e02400240024002402014450d0020182108024003402008280200220c450d010240024002400240200c200841046a280200220e10bc040d00200e200c10bc04450d03200e2802080d09200e417f360208200e28020c22170d01410021170c020b200c2802080d07200c417f36020802400240200c28020c22170d00410021170c010b20172017280200417f6a3602000240200c28020c22172802000d000240201728020c221a450d00201a201a280200417f6a360200201728020c221a2802000d000240201a28020c450d00201a410c6a10d602201728020c211a0b201a201a280204417f6a360204201728020c22172802040d00201710230b200c28020c22172017280204417f6a360204200c28020c22172802040d00201710230b200c28020841016a21170b200c2017360208200c410036020c0c020b20172017280200417f6a3602000240200e28020c22172802000d000240201728020c221a450d00201a201a280200417f6a360200201728020c221a2802000d000240201a28020c450d00201a410c6a10d602201728020c211a0b201a201a280204417f6a360204201728020c22172802040d00201710230b200e28020c22172017280204417f6a360204200e28020c22172802040d00201710230b200e28020841016a21170b200e2017360208200e410036020c0b200e200e280200417f6a2217360200024020170d000240200e28020c2217450d0020172017280200417f6a360200200e28020c22172802000d000240201728020c450d002017410c6a10d602200e28020c21170b20172017280204417f6a360204200e28020c22172802040d00201710230b200e200e280204417f6a221736020420170d00200e10230b200c200c280200417f6a220e3602000240200e0d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10d602200c28020c210e0b200e200e280204417f6a360204200c28020c220e2802040d00200e10230b200c200c280204417f6a220e360204200e0d00200c10230b200841086a22082011470d000c030b0b200841086a210e0b2011200e460d000340200e220c280200220e200e280200417f6a3602000240200c280200220e2802000d000240200e28020c2208450d0020082008280200417f6a360200200e28020c22082802000d000240200828020c450d002008410c6a10d602200e28020c21080b20082008280204417f6a360204200e28020c220e2802040d00200e10230b200c280200220e200e280204417f6a360204200c280200220e2802040d00200e10230b200c41086a210e200c41046a220c28020022082008280200417f6a3602000240200c28020022082802000d000240200828020c2217450d0020172017280200417f6a360200200828020c22172802000d000240201728020c450d002017410c6a10d602200828020c21170b20172017280204417f6a360204200828020c22082802040d00200810230b200c28020022082008280204417f6a360204200c280200220c2802040d00200c10230b2011200e470d000b0b0240201b41ffffffff0171450d00201810230b0240201e450d00201e410274210e2022210c0340200c28020022082008280200417f6a3602000240200c28020022082802000d000240200828020c2211450d0020112011280200417f6a360200200828020c22112802000d000240201128020c450d002011410c6a10d602200828020c21110b20112011280204417f6a360204200828020c22082802040d00200810230b200c28020022082008280204417f6a360204200c28020022082802040d00200810230b200c41046a210c200e417c6a220e0d000b0b0240205141ffffffff0371450d00202210230b02402043450d002040210c0340200c280200220e200e280200417f6a3602000240200c280200220e2802000d000240200e28020c2208450d0020082008280200417f6a360200200e28020c22082802000d000240200828020c450d002008410c6a10d602200e28020c21080b20082008280204417f6a360204200e28020c220e2802040d00200e10230b200c280200220e200e280204417f6a360204200c280200220e2802040d00200e10230b200c41046a210c202c417c6a222c0d000b0b0240204f41ffffffff0371450d00204010230b203f203f280200417f6a220c3602000240200c0d000240203f28020c220c450d00200c200c280200417f6a360200203f28020c220c2802000d000240200c28020c450d00200c410c6a10d602203f28020c210c0b200c200c280204417f6a360204203f28020c220c2802040d00200c10230b203f203f280204417f6a220c360204200c0d00203f10230b202141ff0171211102402044450d002031210c0340200c280200220e200e280200417f6a3602000240200c280200220e2802000d000240200e28020c2208450d0020082008280200417f6a360200200e28020c22082802000d000240200828020c450d002008410c6a10d602200e28020c21080b20082008280204417f6a360204200e28020c220e2802040d00200e10230b200c280200220e200e280204417f6a360204200c280200220e2802040d00200e10230b200c41046a210c202b417c6a222b0d000b0b203020116a2130204e41ffffffff0371450d02203110230c020b41c394c700411020014188046a41fc95c70041d494c7001034000b41c394c700411020014188046a41fc95c70041d494c7001034000b203c203c280200417f6a220c3602000240200c0d000240203c28020c220c450d00200c200c280200417f6a360200203c28020c220c2802000d000240200c28020c450d00200c410c6a10d602203c28020c210c0b200c200c280204417f6a360204203c28020c220c2802040d00200c10230b203c203c280204417f6a220c360204200c0d00203c10230b20232023280200417f6a220c3602000240200c0d000240202328020c220c450d00200c200c280200417f6a360200202328020c220c2802000d000240200c28020c450d00200c410c6a10d602202328020c210c0b200c200c280204417f6a360204202328020c220c2802040d00200c10230b20232023280204417f6a220c360204200c0d00202310230b20242024280200417f6a220c360200200c0d040240202428020c220c450d00200c200c280200417f6a360200202428020c220c2802000d000240200c28020c450d00200c410c6a10d602202428020c210c0b200c200c280204417f6a360204202428020c220c2802040d00200c10230b20242024280204417f6a220c360204200c0d040c030b00000b2023202436020c0b20232023280200417f6a220c3602000240200c0d000240202328020c220c450d00200c200c280200417f6a360200202328020c220c2802000d000240200c28020c450d00200c410c6a10d602202328020c210c0b200c200c280204417f6a360204202328020c220c2802040d00200c10230b20232023280204417f6a220c360204200c0d00202310230b203041016a213020242024280200417f6a220c360200200c0d010240202428020c220c450d00200c200c280200417f6a360200202428020c220c2802000d000240200c28020c450d00200c410c6a10d602202428020c210c0b200c200c280204417f6a360204202428020c220c2802040d00200c10230b20242024280204417f6a220c360204200c0d010b202410230b0240200041086a280200220e20254d0d002000280200220c20416a28020820304d0d020c010b0b2025200e41f4e6c4001030000b202541016a2225200b470d000b20012802a804220c450d0220012802b0042118024020012802ac04220e450d000340200c2802a003210c200e417f6a220e0d000b0b2018450d014100210802400340200c450d014100211102402008200c2f0106490d00034002400240200c280200220e0d00410021084100210e0c010b201141016a2111200c2f010421080b200c1023200e210c2008200e2f01064f0d000b200e210c0b200841016a210e200c20084102746a41f4026a2802002117200c200841216c6a41286a2d0000211a0240024020110d00200e21080c010b200c200e4102746a41a0036a280200210c410021082011417f6a220e450d000340200c2802a003210c200e417f6a220e0d000b0b201a41ff01714102460d032018417f6a211820172017280200417f6a220e3602000240200e0d000240201728020c220e450d00200e200e280200417f6a360200201728020c220e2802000d000240200e28020c450d00200e410c6a10d602201728020c210e0b200e200e280204417f6a360204201728020c220e2802040d00200e10230b20172017280204417f6a220e360204200e0d00201710230b20180d000c030b0b41d095c700412b41c491c700102d000b2025200e41e4e6c4001030000b200c450d00200c280200210e200c1023200e450d000340200e280200210c200e1023200c210e200c0d000b0b200141d0106a24000f0b102a000bdb21011d7f230041b0046b220224000240024002400240024002400240024020002802004101460d00200041146a2802002203200328020041016a360200200041106a28020021042000410c6a2802002105200041086a280200210320002802042106200241e0006a41206a2207200041386a2d00003a0000200241e0006a41186a2208200041306a290000370300200241e0006a41106a2209200041286a290000370300200241e0006a41086a220a200041206a2900003703002002200041186a29000037036020032f0106220b410b490d01200241c0016a410041eb0210a0051a200241d9006a4100360000200241306a41216a4200370000200241c9006a4200370000200241c1006a4200370000200241396a42003700002002420037003141a0031021220c450d05200c41003b0106200c4100360200200c41086a200241c0016a41eb0210a1052107200c4198036a200241d5006a290000370000200c4193036a200241306a41206a290000370000200c418b036a200241306a41186a290000370000200c4183036a200241306a41106a290000370000200c41fb026a200241306a41086a290000370000200c20022900303700f3022002200341ce016a2f00003b01182002200341d0016a2d00003a001a200341d1016a280000210d200341d5016a280000210e200341d9016a280000210f200341dd016a28000021102002200341e7016a2900003701c6012002200341e1016a2900003703c001200328028c0321112007200341ef016a20032f010641796a220041216c10a1052107200c41f4026a20034190036a200041027410a1052108200341063b0106200c20003b01062002412c6a41026a20022d001a3a0000200220022f01183b012c200220022903c001370330200220022901c6013701360240024020044107490d00200441216c20076a220741ba7e6a200741997e6a2207200041ffff0371200441796a22096b41216c10a2051a200741206a200241e0006a41206a2d00003a0000200741186a200241e0006a41186a290300370000200741106a200241e0006a41106a290300370000200741086a200241e0006a41086a29030037000020072002290360370000200441027420086a41686a2107200820094102746a2112200c41066a22002f010020096b21040c010b200341086a200441216c6a220741216a2007200341066a22002f010020046b41216c10a2051a200741206a200241e0006a41206a2d00003a0000200741186a200241e0006a41186a290300370000200741106a200241e0006a41106a290300370000200741086a200241e0006a41086a29030037000020072002290360370000200341f4026a20044102746a221241046a210720002f010020046b21040b20072012200441027410a2051a20122001360200200241146a41026a2002412c6a41026a22132d000022013a0000200020002f010041016a3b0100200241106a41026a221420013a000020022002290136370196012002200229033037039001200220022f012c22003b0114200220003b0110200220022903900137030020022002290196013701060240200328020022070d00410021000c040b20032f01042115200241c0016a4102722116200241306a41016a210a410021000340201320142d00003a0000200220022f01103b012c200220022903003703182002200229010637011e20062000470d03201541ffff0371210802400240024020072f01062200410b490d00200a41286a4100360000200a41206a4200370000200a41186a4200370000200a41106a4200370000200a41086a4200370000200a42003700002016410041ed0210a0051a200241e0006a41086a22004200370300200241e0006a41106a22034200370300200241e0006a41186a22044200370300200241e0006a41206a22094200370300200241e0006a41286a220b420037030020024190016a41256a2217200241306a41256a29000037000020024190016a41206a2218200241306a41206a29000037030020024190016a41186a2219200241306a41186a29000037030020024190016a41106a221a200241306a41106a29000037030020024190016a41086a221b200241306a41086a29000037030020024200370360200220022900303703900141d00310212201450d0920014100360200200141046a200241c0016a41ef0210a1051a20014198036a201729000037000020014193036a20182903003700002001418b036a201929030037000020014183036a201a290300370000200141fb026a201b29030037000020012002290390013700f302200120022903603702a003200141a8036a2000290300370200200141b0036a2003290300370200200141b8036a2004290300370200200141c0036a2009290300370200200141c8036a200b29030037020020024190016a41026a220b200741d0016a2d00003a00002002200741ce016a2f00003b0190012002200741e1016a2900003703c0012002200741e7016a2900003701c601200741d1016a2800002118200741d5016a2800002119200741d9016a280000211a200741dd016a280000211b200728028c03211c200141086a200741ef016a20072f0106220341796a220041216c10a105211d200141f4026a20074190036a200041027410a105211e200141a0036a200741bc036a2003417a6a220941027410a1052117200741063b0106200120003b010602402009450d00410021002017210303402003280200220420003b010420042001360200200341046a21032009200041016a2200470d000b0b200220022f01900122003b0130200220022903c001370360200220022901c6013701662002200b2d000022033a0032200b20033a0000200220003b019001200220022903603703c001200220022901663701c601201541ffff037122034107490d01200841216c201d6a220041ba7e6a200041997e6a220320012f0106200841796a22006b41216c10a2051a2003201036000f2003200f36000b2003200e3600072003200d360003200341026a20132d00003a0000200320022f012c3b000020032002290318370013200341196a200229011e370000201e2008417a6a220341027422046a201e20004102746a220920012f0106221520006b41027410a2051a200920113602002001201541016a22093b01062008410274221520176a416c6a201720046a2204200941ffff0371220820036b41027410a2051a2004200c36020020082003490d02200120156a4188036a2103034020032802002204200041016a22003b010420042001360200200341046a210320002008490d000c030b0b2007200841216c6a220341296a200341086a2201200020086b41216c10a2051a200341176a2010360000200341136a200f3600002003410f6a200e3600002003410b6a200d3600002003410a6a2002412c6a41026a2d00003a0000200120022f012c3b00002003411b6a2002290318370000200341216a200229011e370000200741f4026a2203200841016a220041027422016a2003200841027422046a220320072f0106220920086b41027410a2051a200320113602002007200941016a22033b01062004200741a0036a22086a41086a200820016a2201200341ffff0371220420006b41027410a2051a2001200c360200201541ffff037120044f0d0720072000417f6a22004102746a41a4036a2103034020032802002201200041016a22003b010420012007360200200341046a210320002004490d000c080b0b200741086a200841216c6a220041216a200020072f010620086b41216c10a2051a2000201036000f2000200f36000b2000200e3600072000200d360003200041026a20132d00003a0000200020022f012c3b000020002002290318370013200041196a200229011e370000200741f4026a2204200841016a220941027422156a2004200841027422006a220420072f0106221720086b41027410a2051a200420113602002007201741016a22043b01062000200741a0036a22176a41086a201720156a2215200441ffff0371220420096b41027410a2051a2015200c360200200320044f0d00200720006a41a4036a2100034020002802002203200841016a22083b010420032007360200200041046a210020042008470d000b0b200641016a21002014200b2d00003a0000200220022f0190013b0110200220022903c001370300200220022901c6013701060240200728020022030d002018210d201b2110201a210f2019210e2001210c201c21110c050b20072f010421152018210d201b2110201a210f2019210e20032107201c21112001210c200021060c000b0b20012001280200417f6a2203360200200041086a280200200041106a2802004102746a41f4026a211220030d030240200128020c2200450d0020002000280200417f6a360200200128020c22002802000d000240200028020c450d002000410c6a10d602200128020c21000b20002000280204417f6a360204200128020c22002802040d00200010230b20012001280204417f6a220036020420000d03200110230c030b2003200441216c6a220041296a200041086a220c200b20046b41216c10a2051a200041286a20072d00003a0000200041206a2008290300370000200041186a2009290300370000200041106a200a290300370000200c2002290360370000200320044102746a220041f8026a200041f4026a221220032f010620046b41027410a2051a20122001360200200320032f010641016a3b01060c020b41ecdbc4004135418c94c700102d000b200241b9016a4100360000200241b1016a4200370000200241a9016a4200370000200241a1016a420037000020024199016a42003700002002420037009101200241c0016a410272410041ed0210a0051a200241e0006a41086a22014200370300200241e0006a41106a22044200370300200241e0006a41186a22074200370300200241e0006a41206a2208420037030020024188016a22094200370300200241306a41256a220a20024190016a41256a290000370000200241306a41206a220b20024190016a41206a290000370300200241306a41186a220620024190016a41186a290000370300200241306a41106a221520024190016a41106a290000370300200241306a41086a221720024190016a41086a29000037030020024200370360200220022900900137033041d00310212203450d0120034100360200200341046a200241c0016a41ef0210a1051a20034198036a200a29000037000020034193036a200b2903003700002003418b036a200629030037000020034183036a2015290300370000200341fb026a2017290300370000200320022903303700f302200320022903603702a003200341a8036a2001290300370200200341b0036a2004290300370200200341b8036a2007290300370200200341c0036a2008290300370200200341c8036a20092903003702002003200528020022013602a0032005200336020020052005280204220441016a360204200141003b010420012003360200200241e0006a41026a200241106a41026a2d00003a0000200220022f01103b0160200220022903003703c001200220022901063701c60120042000470d0220032f01062201410a4b0d032003200141216c6a2200410a6a200241e0006a41026a2d00003a0000200041086a20022f01603b0000200041176a2010360000200041136a200f3600002000410f6a200e3600002000410b6a200d3600002000411b6a20022903c001370000200041216a20022901c6013700002003200141016a22004102746a41a0036a200c360200200320014102746a41f4026a2011360200200320003b0106200c20003b0104200c20033602000b200241b0046a240020120f0b102a000b4183dac4004130418c94c700102d000b41dcd9c4004127418c94c700102d000bab0b010c7f230041306b220224002002410036021020024204370308200241003602202002420437031802400240024002400240200128020041016a220341014d0d0020012003360200200241086a41004101107920022802082204200228021022034102746a20013602002002200341016a22053602102001280200220341016a41014d0d002001200341016a360200200241186a41004101107920022802182206200228022022034102746a20013602002002200341016a2207360220200128020041016a220841014d0d00200120083602000340200841016a220341014d0d0120012003360200200128020841016a220941004c0d0220012009360208200128020c2208450d0502402007450d002007410274210a200841106a210b20062109034002400240200928020022032008460d00200328020841016a220c41004c0d072003200c3602082008280208220c41016a220d41004c0d082008200d360208200341106a200b412010a3050d0120032d003020082d0030470d012008200c36020820032003280208417f6a3602080b20012802002103200128020821090c080b200941046a21092008200c36020820032003280208417f6a360208200a417c6a220a0d000b200128020c21080b200828020041016a220341014d0d012008200336020002402005200228020c470d00200241086a20054101107920022802082104200228021021050b200420054102746a20083602002002200541016a2205360210200128020c220328020041016a220841014d0d012003200836020020012001280200417f6a2208360200024020080d000240200128020c2208450d0020082008280200417f6a360200200128020c22082802000d000240200828020c450d002008410c6a10d602200128020c21080b20082008280204417f6a360204200128020c22082802040d00200810230b20012001280204417f6a220836020420080d00200110230b200328020041016a220841014d0d012003200836020002402007200228021c470d00200241186a20074101107920022802182106200228022021070b200620074102746a200336020020012001280208417f6a36020820012001280200417f6a22083602002002200741016a2207360220024020080d000240200128020c2208450d0020082008280200417f6a360200200128020c22082802000d000240200828020c450d002008410c6a10d602200128020c21080b20082008280204417f6a360204200128020c22082802040d00200810230b20012001280204417f6a220836020420080d00200110230b20032802002108200321010c000b0b00000b41a795c7004118200241286a418c96c70041c095c7001034000b41a795c7004118200241286a419ca5c20041c095c7001034000b41a795c7004118200241286a419ca5c20041c095c7001034000b20012003417f6a220336020020012009417f6a360208024020030d000240200128020c2203450d0020032003280200417f6a360200200128020c22032802000d000240200328020c450d002003410c6a10d602200128020c21030b20032003280204417f6a360204200128020c22032802040d00200310230b20012001280204417f6a220336020420030d00200110230b20002001360200200020022903083702042000410c6a200241106a28020036020002402007450d0020074102742108200621030340200328020022092009280200417f6a3602000240200328020022092802000d000240200928020c2201450d0020012001280200417f6a360200200928020c22012802000d000240200128020c450d002001410c6a10d602200928020c21010b20012001280204417f6a360204200928020c22092802040d00200910230b200328020022092009280204417f6a360204200328020022092802040d00200910230b200341046a21032008417c6a22080d000b0b0240200228021c41ffffffff0371450d00200610230b200241306a24000ba50201047f230041106b22022400410021030240024002400240024002400240200028020841016a220441004c0d00200028020c2205450d0620002004360208024020052001470d00410121030c060b200528020841016a220341004c0d01200520033602082001280208220441016a220341004c0d0220012003360208200541106a200141106a412010a3050d034101210320052d003020012d0030470d030c040b41a795c7004118200241086a418c96c70041c095c7001034000b41a795c7004118200241086a418c96c70041c095c7001034000b41a795c7004118200241086a418c96c70041c095c7001034000b410021030b2001200436020820052005280208417f6a360208200028020821040b20002004417f6a3602080b200241106a240020030b13002000410a360204200041f8e9c4003602000b3400200041e4dec40036020420004100360200200041146a410f360200200041106a41e8f4c400360200200041086a42063702000b2b01017f02404101102122020d001033000b200042818080801037020420002002360200200241003a00000b6301027f230041206b22022400200241003602082002420837030002404104102122030d001033000b20024204370214200220033602104100200241106a1061200041086a200228021836020020002002290310370200200210af04200241206a24000be00101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002400240412010212206450d0020062002290300370000200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000412010212203450d0120032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a29000037000020061023200042a0808080800437020420002003360200200241206a24000f0b1033000b102a000bae0101017f0240410410212202450d002002410036000020024104410810252202450d00200241003a000420024108411510252202450d00200242003700052002410d6a420037000020024115412a10252202450d00200242003700152002411d6a42003700002002412a41d40010252202450d002002420037003520024200370025200042d4808080d008370204200020023602002002413d6a42003700002002412d6a42003700000f0b102a000bcc0405067f017e017f017e047f230041e0006b22002400200041d7ddc400411010cd01200028020421010240200028020022024101470d0041d7ddc400ad428080808080028410110b200041306a41186a22034200370300200041306a41106a22044200370300200041306a41086a220542003703002000420037033041e4dec400ad4280808080e000842206100c22072900002108200041d0006a41086a2209200741086a2900003703002000200837035020071023200520092903003703002000200029035037033041d0ffc400ad4280808080e00184100c220729000021082009200741086a2900003703002000200837035020071023200420002903502208370300200041106a41086a220a2005290300370300200041106a41106a220b2008370300200041106a41186a220c20092903003703002000200029033037031020002001410020021b360230200041106aad4280808080800484200041306aad4280808080c00084100e20004101360208200342003703002004420037030020054200370300200042003703302006100c220729000021062009200741086a2900003703002000200637035020071023200520092903003703002000200029035037033041d483c500ad4280808080e00184100c220729000021062009200741086a2900003703002000200637035020071023200420002903502206370300200a2005290300370300200b2006370300200c200929030037030020002000290330370310200041203602342000200041106a360230200041086a200041306a10c402200041e0006a24000ba41d08047f017e017f017e047f017e047f017e230041f0016b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a80141e4dec400ad4280808080e000842205100c22062900002107200141c8016a41086a2208200641086a290000370300200120073703c8012006102320042008290300370300200120012903c8013703a80141d483c500ad4280808080e00184100c220629000021072008200641086a290000370300200120073703c80120061023200320012903c801220737030020014188016a41086a2206200429030037030020014188016a41106a2209200737030020014188016a41186a220a2008290300370300200120012903a8013703880120014188016aad428080808080048422071011200242003703002003420037030020044200370300200142003703a8012005100c220b290000210c2008200b41086a2900003703002001200c3703c801200b102320042008290300370300200120012903c8013703a80141d0ffc400ad4280808080e00184100c220b290000210c2008200b41086a2900003703002001200c3703c801200b1023200320012903c801220c370300200620042903003703002009200c370300200a2008290300370300200120012903a8013703880120071011200242003703002003420037030020044200370300200142003703a8012005100c220b290000210c2008200b41086a2900003703002001200c3703c801200b102320042008290300370300200120012903c8013703a80141e8ffc400ad4280808080b00284100c220b290000210c2008200b41086a2900003703002001200c3703c801200b1023200320012903c801220c370300200620042903003703002009200c370300200a2008290300370300200120012903a8013703880120071011200242003703002003420037030020044200370300200142003703a8012005100c220b290000210c2008200b41086a2900003703002001200c3703c801200b102320042008290300370300200120012903c8013703a801418c80c500ad4280808080800284100c220b290000210c2008200b41086a2900003703002001200c3703c801200b1023200320012903c801220c370300200620042903003703002009200c370300200a2008290300370300200120012903a8013703880120071011200242003703002003420037030020044200370300200142003703a8012005100c220b290000210c2008200b41086a2900003703002001200c3703c801200b102320042008290300370300200120012903c8013703a80141f3dec400ad4280808080e00084100c220b290000210c2008200b41086a2900003703002001200c3703c801200b1023200320012903c801220c370300200620042903003703002009200c370300200a2008290300370300200120012903a80137038801200120014188016a412010cd012001280204210d02402001280200220e4101470d00200710110b200242003703002003420037030020044200370300200142003703a8012005100c220b29000021052008200b41086a290000370300200120053703c801200b102320042008290300370300200120012903c8013703a80141f9dec400ad4280808080a00184100c220b29000021052008200b41086a290000370300200120053703c801200b1023200320012903c801370000200341086a20082903003700002006200429030037030020092003290300370300200a2002290300370300200120012903a80137038801200141c8016a20014188016a412010e101024002400240024020012d00c80122080d00200141c0016a200141e1016a290000370300200141b8016a200141d9016a290000370300200141b0016a200141d1016a290000370300200120012900c9013703a8010c010b20071011200141a8016a41186a2204200141e1016a290000370300200141a8016a41106a2202200141d9016a290000370300200141a8016a41086a2206200141d1016a290000370300200120012900c9013703a80120084101460d010b200141206a4200370300200141186a4200370300200141106a4200370300200142003703080c010b200141086a41186a2004290300370300200141086a41106a2002290300370300200141086a41086a2006290300370300200120012903a8013703080b200141a8016a41186a22064200370300200141a8016a41106a22094200370300200141a8016a41086a22044200370300200142003703a80141e4dec400ad4280808080e00084100c22022900002105200141c8016a41086a2208200241086a290000370300200120053703c8012002102320042008290300370300200120012903c8013703a8014191dfc400ad4280808080e00084100c220229000021052008200241086a290000370300200120053703c80120021023200320012903c801370000200341086a200829030037000020014188016a41086a200429030037030020014188016a41106a200929030037030020014188016a41186a2006290300370300200120012903a80137038801200141c8016a20014188016a10f7020240024020012802c801220f0d004100210a20014100360230200142043703284104210f410021100c010b200710112001200f360228200120012902cc01220537022c2005422088a7210a2005a721100b200d4100200e1b2106200141a8016a41186a22024200370300200141a8016a41106a22094200370300200141a8016a41086a22084200370300200142003703a80141e4dec400ad4280808080e00084100c220b2900002105200141c8016a41086a2204200b41086a290000370300200120053703c801200b102320082004290300370300200120012903c8013703a8014183dfc400ad4280808080e00184100c220b29000021052004200b41086a290000370300200120053703c801200b1023200320012903c801370000200341086a200429030037000020014188016a41086a200829030037030020014188016a41106a200929030037030020014188016a41186a2002290300370300200120012903a80137038801200141c8016a20014188016a412010e101024002400240024020012d00c80122030d002002200141e1016a2900003703002009200141d9016a2900003703002008200141d1016a290000370300200120012900c9013703a8010c010b200710112002200141e1016a2900003703002009200141d9016a2900003703002008200141d1016a290000370300200120012900c9013703a80120034101460d010b200141d0006a4200370300200141c8006a4200370300200141c0006a4200370300200142003703380c010b200141386a41186a200141a8016a41186a290300370300200141386a41106a200141a8016a41106a290300370300200141386a41086a200141a8016a41086a290300370300200120012903a8013703380b0240200641fb01490d00200641857e6a2208450d00200141c8016a200810d40320013502d00142208620012802c8012208ad84101120012802cc01450d00200810230b410121090240101a2207422088a72202450d002007a721090b41002108200141003a00e801200921030240024002400240034020022008460d01200141c8016a20086a20032d00003a00002001200841016a22043a00e801200341016a21032004210820044120470d000b200141d8006a41086a200141c8016a41086a290300370300200141d8006a41106a200141c8016a41106a290300370300200141d8006a41186a200141c8016a41186a290300370300200120012903c80137035802402002450d00200910230b412010212208450d0220082001290308370000200841186a2204200141086a41186a290300370000200841106a2202200141086a41106a290300370000200841086a2209200141086a41086a290300370000412010212203450d0320032008290000370000200341186a2004290000370000200341106a2002290000370000200341086a200929000037000020081023200141f8006a2003ad4280808080800484101b108b0120031023024020012802782204450d0020014180016a2802002102200128027c210b41002108200141003a00e801034020022008460d03200141c8016a20086a200420086a2d00003a00002001200841016a22033a00e8012003210820034120470d000b20014188016a41086a200141c8016a41086a2203290300220737030020014188016a41106a200141c8016a41106a2202290300220537030020014188016a41186a200141c8016a41186a2209290300220c370300200120012903c80122113703880120032007370300200220053703002009200c370300200120113703c801200141a8016a41026a220d20014185016a41026a2d00003a0000200120012f0085013b01a8010240200a2010470d00200141286a2010410110a2012001280228210f2001280230210a0b200f200a41246c6a220841003a0000200820012903c80137000120092903002107200229030021052003290300210c200820012f01a8013b0021200841236a200d2d00003a0000200841096a200c370000200841116a2005370000200841196a20073700002001200a41016a360230200b450d00200410230b200020012903083700102000200636020020002001290358370030200041286a200141086a41186a290300370000200041206a200141086a41106a290300370000200041186a200141086a41086a290300370000200041386a200141d8006a41086a290300370000200041c0006a200141d8006a41106a290300370000200041c8006a200141d8006a41186a290300370000200041e8006a200141386a41186a290300370000200041e0006a200141386a41106a290300370000200041d8006a200141386a41086a290300370000200020012903383700502000410c6a200141286a41086a28020036020020002001290328370204200141f0016a24000f0b0240200841ff0171450d00200141003a00e8010b41d08ec500412c200141c8016a41b0e3c40041fc8ec5001034000b0240200841ff0171450d00200141003a00e8010b41d08ec500412c200141c8016a41b0e3c400418c8fc5001034000b1033000b102a000bcf0405017f027e027f017e017f230041e0006b22032400200341306a20012902002204422088a72201200210c6040240024002400240024002402003290330a7220241ff01714101460d0042002105200341306a41186a4200370300200341306a41106a22064200370300200341306a41086a220242003703002003420037033041e4dec400ad4280808080e00084100c220729000021082002200741086a290000370300200320083703302007102341e8ffc400ad4280808080b00284100c22072900002108200341d0006a41086a2209200741086a2900003703002003200837035020071023200620032903502208370300200341106a41086a2002290300370300200341106a41106a2008370300200341106a41186a200929030037030020032003290330370310200341086a200341106a412010cd010240200141ff017122024102460d00417f200328020c410020032802081b2207418094ebdc034180afd0e50220021b22022004a7220620022006491b6a220620062007491b20024b0d050b200141ff01710e03010203010b200041013a0000200041036a20024118763a0000200020024108763b00010c040b200442ffffffff0f8321050c010b427f21050b200041003a0000200041306a41013a0000200041286a4200370200200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a2005370300200041316a2003280030360000200041346a200341336a2800003600000c010b200041800c3b0001200041013a0000200041036a41003a00000b200341e0006a24000b920303047f017e017f230041e0006b22032400200341306a41186a4200370300200341306a41106a22044200370300200341306a41086a220542003703002003420037033041e4dec400ad4280808080e00084100c220629000021072005200641086a2900003703002003200737033020061023418c80c500ad4280808080800284100c22062900002107200341d0006a41086a2208200641086a2900003703002003200737035020061023200420032903502207370300200341106a41086a2005290300370300200341106a41106a2007370300200341106a41186a200829030037030020032003290330370310200341086a200341106a412010cd014100210502400240417f200328020c410020032802081b220620026a220220022006491b22064280808080f28ba80942808080c0f588fe06200141ff01711b22072007428094ebdc038022074280ec94a37c7e7c4280cab5ee01562007a76a4b0d00200041046a20063602000c010b200041800c3b0001200041036a41003a0000410121050b200020053a0000200341e0006a24000b340020004189e3c40036020420004100360200200041146a4104360200200041106a41f88fc500360200200041086a42083702000b3400200041c599c50036020420004100360200200041146a4101360200200041106a41d899c500360200200041086a42123702000b130020004102360204200041dc9ac5003602000b3601017f02404110102122020d001033000b2002420037000820024280c2d72f370000200042908080808002370204200020023602000bb60101027f230041106b22022400200220002802003602082001200241086a410410620240024002400240024020002d0004220341024b0d0020030e03010203010b2002410f6a21030c030b200241003a000f20012002410f6a410110622002410f6a21030c020b200241013a000f20012002410f6a410110622002410f6a21030c010b200241023a000f20012002410f6a410110622002410f6a21030b200220002d00053a000f2001200341011062200241106a24000b130020004105360204200041c89dc5003602000bd10201037f230041206b220424000240024002400240024002402002200141346a2205460d0020022005412010a305450d00200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410ce0422020d010c040b200141306a2802002202417f4c0d01200128022821010240024020020d0041002105410121060c010b20022105200210212206450d030b20062001200210a1052101200041086a200236020020002005360204200020013602000c040b200228020c4101480d0220022802082201417f4c0d00200228020021020240024020010d0041002105410121060c010b20012105200110212206450d020b20062002200110a1052102200041086a200136020020002005360204200020023602000c030b1032000b1033000b200041003602000b200441206a24000bdb0303017f047e097f230041106b220224002002200041086a29030022032000290300220485220520044218898520054210868520054225897c220542a0cbbf9599b5a19f0a7c2206200129001885200129000020068542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852001290008200542efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852001290010200542bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010a605200241086a29030020022903007c200320047c85a722074119762208410874200872220841107420087221092000280210220a2007712108200041186a280200210b200041146a280200210c4100210d024003400240200c20086a280000220e2009732200417f73200041fffdfb776a71418081828478712200450d00024003402001200b20006841037620086a200a71220f41306c6a2207460d0120012007412010a305450d012000417f6a2000712200450d020c000b0b200b200f41306c6a41206a21000c020b200d41046a220d20086a200a712108200e200e4101747141808182847871450d000b410021000b200241106a240020000b8d0101037f230041206b220324004101210402402001200041346a2205460d0020012005412010a305450d00200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310ce0422010d00410021040c010b200128020c41004a21040b200341206a240020040b02000b8e0704057f017e087f037e230041a0016b220224002002412036020c20022001360208200241106a2001ad42808080808004841010108b010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1088010240024020022802000d00200228020422052002280224220641286e2201200120054b1bad42287e2207422088a70d032007a72201417f4c0d030240024020010d00410821080c010b200110212208450d050b4100210920024100360230200220083602282002200141286e36022c0240024002402005450d004100210a034041002101200241003a009801200a41016a210a034020062001460d03200241f8006a20016a2002280220220b2d00003a00002002200b41016a3602202002200141016a220c3a009801200c2101200c4120470d000b200241d8006a41086a220d200241f8006a41086a290300370300200241d8006a41106a220e200241f8006a41106a290300370300200241d8006a41186a220f200241f8006a41186a2903003703002002200229037837035820022006200c6b220136022420014108490d03200241386a41086a220c200d290300370300200241386a41106a220d200e290300370300200241386a41186a220e200f290300370300200220022903583703382002200b41096a3602202002200141786a2206360224200b290001210702402009200228022c470d00200241286a2009410110980120022802282108200228023021090b2008200941286c6a22012002290338370300200c2903002110200d2903002111200e290300211220012007370320200141186a2012370300200141106a2011370300200141086a20103703002002200941016a2209360230200a2005470d000b0b2008450d022000200229022c370204200020083602000c030b20024100360224200141ff0171450d00200241003a0098010b200228022c2201450d00200141286c450d00200810230b20024100360260200242013703582002410a36023c2002200241086a3602382002200241d8006a3602282002418c016a41013602002002420137027c20024180c5c6003602782002200241386a36028801200241286a4184a5c200200241f8006a10311a2002350260422086200235025884100a0240200228025c450d00200228025810230b200041003602000b2004450d00200310230b200241a0016a24000f0b1032000b1033000b3400200041a7b3c50036020420004100360200200041146a410a360200200041106a41b4b3c500360200200041086a42043702000b910101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120102122060d001033000b20062002290300370000200042a0808080800437020420002006360200200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000200241206a24000b130020004102360204200041acc9c5003602000b2d01017f02404108102122020d001033000b20004288808080800137020420002002360200200242f02e3700000b2d01017f02404108102122020d001033000b20004288808080800137020420002002360200200242d8043700000bcc0503027f017e047f230041e0006b2202240041bdadc500ad4280808080800184100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341d2adc500ad4280808080d00084100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100f22012900002104200241386a41086a200141086a2900003703002002200437033820011023200241d4006a200341206a360200200241003a0058200220033602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200310232002280230220541206a2201417f4c0d0120022802282106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000b13002000410536020420004190d0c5003602000b34002000419df5c50036020420004100360200200041146a4101360200200041106a41a4f5c500360200200041086a42073702000b9b0604067f017e027f057e230041f0006b220324002003200236021420032001360210200341186a2002ad4220862001ad841010108b010240024002400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a1088010240024020032802080d00200328020c2206200328022c4105762201200120064b1b22014105742202417f4c0d040240024020010d00410821070c010b200210212207450d040b41002102200341003602502003200136024c20032007360248024002402006450d000340200341306a200341286a10f6020240024020032d00304101460d0041032108200328022c22014110490d01200329003121092003200141706a220a36022c20032003280228220b41106a360228200a450d01200b41086a290000210c200b290000210d20032001416f6a36022c2003200b41116a36022841032108200b2d0010220141034f0d01200320032800303602402003200341306a41036a2800003600432009210e200d210f200c2110200121080c010b410321080b200320032802403602682003200328004336006b20084103460d022003200328006b3600632003200328026836026002402002200328024c470d00200341c8006a2002410110970120032802482107200328025021020b200720024105746a220120083a00182001200e370310200120032802603600192001411c6a2003280063360000200120103703082001200f3703002003200241016a22023602502006417f6a22060d000b0b2007450d012000200329024c370204200020073602000c020b200328024c41ffffff3f71450d00200710230b20034100360238200342013703302003410a3602442003200341106a3602402003200341306a360268200341dc006a41013602002003420137024c20034180c5c6003602482003200341c0006a360258200341e8006a4184a5c200200341c8006a10311a2003350238422086200335023084100a02402003280234450d00200328023010230b200041003602000b2005450d00200410230b200341f0006a24000f0b1033000b1032000bc5130c037f027e027f067e027f027e017f017e027f017e037f027e230041a0046b22032400200341106a2000109702200341206a2003280210220420032802182205109802200329032021064200210720034200370320200341e8006a280200210820032d006c21090240024020064201510d00200341f0006a41386a4200370300200341f0006a41306a4200370300200341f0006a41286a4200370300200341f0006a41206a4200370300200341f0006a41186a420037030020034180016a4200370300200341f8006a4200370300200342003703704200210a4200210b4200210c0c010b200341206a41386a290300210d200341206a41306a290300210e200341206a41206a290300210a200341206a41186a2903002107200341e0006a290300210f2003290330210c2003290328210b200341f0006a41206a200341206a41286a290300370300200341f0006a41286a200e370300200341f0006a41306a200d37030020034180016a20073703002003200a370388012003200f3703a8012003200b3703702003200c3703780b4200210d200341a8016a22104200370300200341f0006a41306a4200370300200341f0006a41286a221142003703002003420037039001200c200a7c2112200b20077c2213200b542214ad2115200341f0006a41106a211602402002450d00200241057421174200210d4200210f420021184200210e200121190340024002400240201941186a221a2d0000221b417f6a41ff017141014b0d002011200e201941086a290300220720182019290300220a56200e200756200e2007511b221b1b220e37030020032018200a201b1b221837039001201a2d0000221b4102460d010b201b41ff01710d01201941086a29030021072019290300210a0b2010200d2007200f200a56200d200756200d2007511b221b1b220d3703002003200f200a201b1b220f3703a0010b201941206a2119201741606a22170d000b0b201220157c2107200341b0016a41186a201641086a290300220a370300200341b0016a41206a221b201641106a290300370300200341b0016a41286a201641186a290300370300200341b0016a41306a201641206a29030037030020032016290300220e3703c0012003200b3703b0012003200c3703b80102400240427f200b200e7c220e200e200b542219200c200a7c2019ad7c220a200c54200a200c511b22191b220e4280c8afa025544100427f200a20191b220f501b0d00200341c0016a290300210e200341e0016a290300210f200341d8016a2903002118201b290300211220032903b801211520032903b001211c4201210a20032903c801211d0c010b4200210a0240200e200f84500d00200e200f10eb01200341f0036a200f370300200341e8036a200e370300200341b8036a41086a41013a0000200341c1036a2000290000370000200341c9036a200041086a290000370000200341d1036a200041106a290000370000200341d9036a200041186a290000370000200341023a00b803200341b8036a10e0010b0b2007200c5121192007200c54211b200341c8006a2012370300200341d0006a2018370300200341306a2015370300200341d8006a200f370300200341386a200e3703002003201d3703402003200d3703602003201c370328200320094100200642015122171b3a006c20032008410020171b3602682003200a4201512217ad3703200240024020170d002005ad4220862004ad8410110c010b200320053602bc03200320043602b803200341286a200341b8036a1098030b2014201b20191b211902402003280214450d00200410230b427f200720191b2107427f201320191b210d200a420152211902400240024020064201510d0020190d004103211b200341d0026a21190c010b20064201522019410173720d014104211b200341e8016a21190b201941046a201b3a0000201941003a0000201941056a20002900003700002019410d6a200041086a290000370000201941156a200041106a2900003700002019411d6a200041186a290000370000201910e0010b0240200d2007844200520d00200341f0036a200c370300200341e8036a200b370300200341b8036a41086a41003a0000200341c1036a2000290000370000200341c9036a200041086a290000370000200341d1036a200041106a290000370000200341d9036a200041186a290000370000200341023a00b803200341b8036a10e0010b200341b8036a200010d704200341086a20032802b803221920032802c003419ca8c70041004100108c0120032802082104024020032802bc03450d00201910230b0240024002400240024002402002450d00200341d0026a200010d70420024105744104722219417f4c0d0220033502d802210d20032802d002210520191021221b450d03200341003602c003200320193602bc032003201b3602b8032002200341b8036a10612002410574211120032802bc03211a20032802c0032117034002400240201a20176b4108490d0020032802b803211b201a21100c010b201741086a22192017490d06201a410174221b2019201b20194b1b22104100480d0602400240201a0d00024020100d004101211b0c020b20101021221b0d010c090b20032802b803211b201a2010460d00201b201a20101025221b450d080b200320103602bc032003201b3602b8030b201b20176a200141106a2900003700002003201741086a221a3602c003200141086a29030021072001290300210a024002402010201a6b410f4d0d00201021190c010b201a41106a2219201a490d06201041017422162019201620194b1b22194100480d060240024020100d00024020190d004101211b0c020b20191021221b450d090c010b20102019460d00201b201020191025221b450d080b200320193602bc032003201b3602b8030b201b201a6a221a2007370008201a200a3700002003201741186a22173602c003200141186a2d000021100240024020192017460d002019211a201721190c010b201941016a22172019490d062019410174221a2017201a20174b1b221a4100480d060240024020190d00410021190240201a0d004101211b0c020b201a1021221b450d090c010b2019201a460d00201b2019201a1025221b450d080b2003201a3602bc032003201b3602b8030b200141206a2101201b20196a20103a00002003201941016a22173602c003201141606a22110d000b20032802bc032119200d4220862005ad842017ad42208620032802b803221bad84100e02402019450d00201b10230b024020032802d402450d00200510230b20044101460d0120001096020c010b200341b8036a200010d70420033502c00342208620032802b8032219ad841011024020032802bc03450d00201910230b20044101470d00200010a1020b200341a0046a24000f0b1032000b1033000b102c000b102a000b130020004104360204200041fcf6c5003602000b3400200041bdadc50036020420004100360200200041146a4104360200200041106a41848bc600360200200041086a42083702000b830101017f0240411010212202450d00200242003700082002420037000020024110412010252202450d0020024200370010200241186a42003700002002412041c00010252202450d002002420037003020024200370020200042c0808080800837020420002002360200200241386a4200370000200241286a42003700000f0b102a000b130020004101360204200041bc93c6003602000b3701017f02404110102122020d001033000b2002420037000820024280c8afa025370000200042908080808002370204200020023602000ba60203017f017e047f230041106b22022400200029030021032002200041086a29030037030820022003370300200120024110106220002802102104200041186a28020022052001106102402005450d0020054104742105034002402004410c6a2d000022064103714103460d004100210702400240024020060e03020001020b410121070c010b410221070b200220073a000020012002410110620b20042802002107200441086a2802002206200110612001200720061062200441106a2104200541706a22050d000b0b02404120102122040d001033000b2004200029001c370000200441186a200041346a290000370000200441106a2000412c6a290000370000200441086a200041246a290000370000200120044120106220041023200241106a24000b960503037f027e057f230041106b220224002002410036020820024201370300200028021021030240410410212204450d0020024104360204200220043602002004200336000020024104360208200041146a280200210320044104410810252204450d0020024108360204200420033600042002200436020020024108360208200041086a29030021052000290300210620044108411810252204450d0020042006370008200441106a200537000020022004360200200242988080808003370204024041000d0020044118413810252204450d010b20042000290024370018200441206a2000412c6a290000370000200441286a200041346a290000370000200441306a2000413c6a29000037000020024138360204200220043602002002413836020820002802182104200041206a28020022002002106102400240024020000d002002280208210020022802042107200228020021080c010b200041057421094100200228020822006b210a2002280204210b034002400240200b200a6a4120490d0020022802002108200b21070c010b200041206a22032000490d03200b41017422082003200820034b1b22074100480d0302400240200b0d00024020070d00410121080c020b2007102122080d010c060b20022802002108200b2007460d002008200b200710252208450d050b20022007360204200220083602002007210b0b200820006a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002002200041206a2200360208200a41606a210a200441206a2104200941606a22090d000b0b20012902002000ad4220862008ad84100e02402007450d00200810230b200241106a24000f0b102c000b102a000b881703047f067e027f230041d0036b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e16001101020304051106070809110a0b0c0d0e0f101112000b200241a8016a200141086a10dd0320004100360200200041106a200241a8016a41086a290300370300200041086a20022903a8013703000c120b20004102360200200041086a200141086a2903003703000c110b02400240024002400240024020012d0004417f6a220341034b0d00200141046a210420030e0401020304010b41f58ac7004128418c94c700102d000b200141086a2802002103410121050c030b41022105200241086a41026a200441036a2d00003a0000200241a8016a41086a200141146a290200370300200241b8016a2001411c6a290200370300200241c0016a200141246a2d00003a0000200220042f00013b010820022001410c6a2902003703a801200141086a2802002103200141286a28020021010c020b200141086a2802002103410321050c010b2002410a6a200441036a2d00003a0000200241a8016a41086a200141146a290200370300200241b8016a2001411c6a290200370300200241c0016a200141246a2d00003a0000200220042f00013b010820022001410c6a2902003703a801200141086a2802002103200141286a2802002101410421050b200020053a0004200020022f01083b000520004103360200200041086a20033602002000410c6a20022903a801370200200041286a2001360200200041076a2002410a6a2d00003a0000200041146a200241a8016a41086a2903003702002000411c6a200241b8016a290300370200200041246a200241c0016a2802003602000c100b02400240024002400240024002400240200141086a22032d0000417f6a220441034b0d0020040e0401020304010b41f58ac7004128418c94c700102d000b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a801200141386a2903002106200141306a2903002107410121010c030b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a801200141c8006a2903002108200141c0006a2903002109200141386a2903002106200141306a2903002107410221010c030b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a8012002200341216a2800003602082002200341246a28000036000b200141c8006a3100002108200141c0006a2902002109200141386a2902002106200141306a2902002107200141d8006a290300210a200141d0006a290300210b410321010c030b200241b0016a200341096a290000370300200241b8016a200341116a290000370300200241c0016a200341196a290000370300200220032900013703a801200141386a2903002106200141306a2903002107410421010b0b0b200020022903a8013700092000200228020836002920004104360200200041d8006a200a370300200041d0006a200b370300200041c8006a2008370300200041c0006a2009370300200041386a2006370300200041306a2007370300200041086a20013a00002000412c6a200228000b360000200041116a200241a8016a41086a290300370000200041196a200241b8016a290300370000200041216a200241c0016a2903003700000c0f0b200241a8016a200141046a10de03200041053602002000410c6a200241b0016a280200360200200020022903a8013702040c0e0b200241a8016a200141086a109202200041086a200241a8016a41880210a1051a200041063602000c0d0b02400240200128020422040d00410021030c010b200241a8016a41186a200141286a290000370300200241a8016a41106a200141206a290000370300200241b0016a200141186a290000370300200241a8016a41286a200141386a290000370300200241a8016a41306a200141c0006a290000370300200241a8016a41386a200141c8006a290000370300200241a8016a41c8006a200141d8006a290000370300200241a8016a41d0006a200141e0006a290000370300200241a8016a41d8006a200141e8006a2900003703002002200141106a2900003703a8012002200141306a2900003703c8012002200141d0006a2900003703e801200241a8016a41f8006a20014188016a290000370300200241a8016a41f0006a20014180016a290000370300200241a8016a41e8006a200141f8006a290000370300200241a8016a4198016a200141a8016a290000370300200241a8016a4190016a200141a0016a290000370300200241a8016a4188016a20014198016a2900003703002002200141f0006a29000037038802200220014190016a2900003703a8022001410c6a2802002201417f4c0d0e0240024020010d0020024200370308410121030c010b200110212203450d102002410036020c200220013602080b20032004200110a1051a2002200136020c20022903082106200241086a200241a8016a41a00110a1051a0b20002003360204200041086a2006370200200041106a200241086a41a00110a1051a200041083602000c0c0b20004109360200200020012802043602040c0b0b2001410c6a2802002203417f4c0d0b200128020421050240024020030d0041002101410121040c010b20032101200310212204450d0d0b20042005200310a10521042000410c6a2003360200200041086a2001360200200020043602042000410a3602000c0a0b200241a8016a200141046a10d702200041046a200241a8016a41e40010a1051a2000410b3602000c090b200241a8016a200141046a10df03200041046a200241a8016a419c0210a1051a2000410d3602000c080b2000410e3602000c070b200241a8016a200141046a10e003200041046a200241a8016a41c80010a1051a2000410f3602000c060b200241a8016a200141046a10e103200041103602002000413c6a200241e0016a280200360200200041346a200241d8016a2903003702002000412c6a200241d0016a290300370200200041246a200241c8016a2903003702002000411c6a200241c0016a290300370200200041146a200241a8016a41106a2903003702002000410c6a200241b0016a290300370200200020022903a8013702040c050b200241a8016a200141086a10e203200041086a200241a8016a41a80210a1051a200041113602000c040b200241a8016a200141046a10e303200041046a200241a8016a41c40010a1051a200041123602000c030b4102210c0240024002400240200141086a22032d0000417f6a220d41024b0d0041012104200d0e03030201030b41f58ac7004128418c94c700102d000b200141c8006a2903002107200141c0006a2903002106200141386a2903002109200141306a2903002108200141d0006a28020021054103210c0b200241c0016a200341196a290000370300200241b8016a200341116a290000370300200241b0016a200341096a290000370300200220032900013703a801200c21040b200020022903a8013700092000200228000836002920004113360200200041c8006a2007370300200041c0006a2006370300200041386a2009370300200041306a2008370300200041086a20043a0000200041d0006a2005360200200041116a200241a8016a41086a290300370000200041196a200241b8016a290300370000200041216a200241c0016a2903003700002000412c6a2002410b6a2800003600000c020b10e403000b200241a8016a200141046a10db0320004115360200200041246a200241c8016a2903003702002000411c6a200241c0016a290300370200200041146a200241b8016a2903003702002000410c6a200241b0016a290300370200200020022903a8013702040b200241d0036a24000f0b1032000b1033000b8f0403027f017e077f230041306b22032400200341086a200141086a28020022043602002003200129020022053703002005a72106024002400240024020040d00410021070c010b200441057421084100210941002107200621010240034002402009450d0020092001412010a3054100480d004115210a41ed96c600210b4105210c0c020b024020012002412010a305220941004a0d004113210a41da96c600210b4106210c20022001460d022009450d02200741016a21070b20012109200141206a2101200841606a2208450d020c000b0b2000200c3a000620004183263b0104200041013602002000410c6a200a360200200041086a200b360200200328020441ffffff3f71450d01200610230c010b200341106a41186a200241186a290000370300200341106a41106a200241106a290000370300200341106a41086a200241086a2900003703002003200229000037031020042007490d01024020042003280204470d00200320044101109a01200328020021060b200620074105746a220141206a2001200420076b41057410a2051a200141186a200341106a41186a290300370000200141106a200341106a41106a290300370000200141086a200341106a41086a290300370000200120032903103700002003200441016a22013602082000410c6a200136020020002003290300370204200041003602000b200341306a24000f0b200720041038000b870803027f017e067f230041f0006b22032400419df5c500ad4280808080f00084100c22042900002105200341086a41086a200441086a290000370300200320053703082004102341fcf5c500ad4280808080900184100c22042900002105200341186a41086a200441086a2900003703002003200537031820041023024002400240024002400240412010212204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad4280808080800484100d220129000037034820011023200341e4006a2206200441206a360200200341003a0068200320043602602003200341c8006a41086a36025c2003200341c8006a360258200341286a200341d8006a106520041023412010212204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002004ad4280808080800484100f22012900002105200341c8006a41086a200141086a29000037030020032005370348200110232006200441206a360200200341003a0068200320043602602003200341c8006a41106a36025c2003200341c8006a360258200341386a200341d8006a1065200410232003280230220741206a2202200328024022086a2201417f4c0d01200328023821092003280228210a024002402001450d00200110212204450d022001410f4d0d01200121060c050b200141017422044110200441104b1b2206102122040d040c060b200141017422064110200641104b1b220641004e0d020c040b1033000b1032000b20012006460d0020042001200610252204450d020b20042003290308370000200441086a200341086a41086a2903003700000240024020064170714110460d002006210b0c010b2006410174220b4120200b41204b1b220b4100480d012006200b460d0020042006200b10252204450d020b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21060c010b2007415f4b0d01200b41017422062002200620024b1b22064100480d01200b2006460d002004200b200610252204450d020b200441206a200a200710a1051a02400240200620026b2008490d002006210b0c010b200220086a2002490d012006410174220b2001200b20014b1b220b4100480d01024020060d000240200b0d00410121040c020b200b10212204450d030c010b2006200b460d0020042006200b10252204450d020b200420026a2009200810a1051a200020013602082000200b360204200020043602000240200328023c450d00200910230b0240200328022c450d00200a10230b200341f0006a24000f0b102c000b102a000b850604067f027e027f057e23004190016b220324002003200236020420032001360200200341086a2002ad4220862001ad841010108b0102400240200328020822020d00200041003602180c010b200328020c21042003200341106a280200220136023c200320023602380240024020014104490d002003200241046a36023820032001417c6a220536023c20054104490d00200228000021062003200241086a3602382003200141786a220536023c20054110490d00200228000421072003200141686a220836023c2003200241186a360238200241106a29000021092002290008210a41002101200341003a0088010240034020082001460d01200341e8006a20016a200220016a220541186a2d00003a00002003200541196a3602382003200141016a22053a0088012005210120054120470d000b200341c8006a41086a2201200341e8006a41086a290300370300200341c8006a41106a220b200341e8006a41106a290300370300200341c8006a41186a220c200341e8006a41186a290300370300200320032903683703482003200820056b36023c200341e8006a200341386a10cf0120032802682205450d01200341186a41086a2001290300220d370300200341186a41106a200b290300220e370300200341186a41186a200c290300220f370300200320032903482210370318200329026c2111200020093703082000200a3703002000201137021c200020053602182000200736021420002006360210200041246a20103702002000412c6a200d370200200041346a200e3702002000413c6a200f3702000c020b2003410036023c200141ff0171450d00200341003a0088010b20034100360250200342013703482003410a36021c200320033602182003200341c8006a360244200341fc006a41013602002003420137026c20034180c5c6003602682003200341186a360278200341c4006a4184a5c200200341e8006a10311a2003350250422086200335024884100a0240200328024c450d00200328024810230b200041003602180b2004450d00200210230b20034190016a24000b13002000410c3602042000418497c6003602000b130020004108360204200041dc9fc6003602000b130020004104360204200041a4a8c6003602000b3400200041fba7c60036020420004100360200200041146a4101360200200041106a41f4b7c600360200200041086a42073702000b130020004101360204200041a4b9c6003602000b3400200041fea6c60036020420004100360200200041146a4103360200200041106a41a4bac600360200200041086a420a3702000b1300200041073602042000418cbec6003602000ba30c02097f027e230041e0006b22022400200241386a4100280298c942360200200241306a4100290290c942370300200241286a4100290288c942370300200241206a4100290280c942370300200241186a41002902f8c842370300200241106a41002902f0c842370300200241086a41002902e8c842370300200241002902e0c8423703002002410036024820024201370340200241d0006a200210900120022802502103024002400240024020022802442204200228024822056b20022802582206490d00410121070c010b200520066a22072005490d01200441017422082007200820074b1b22084100480d010240024020040d00024020080d00410121070c020b2008102122070d010c040b4101210720042008460d0041012004200810252207450d030b20022008360244200220073602400b200720056a2003200610a1051a2002200520066a36024802402002280254450d00200310230b200241d0006a200241106a109001200228025021080240024020022802442204200228024822056b20022802582203490d00200421060c010b200520036a22062005490d01200441017422092006200920064b1b22064100480d010240024020040d00024020060d00410121070c020b200610212207450d040c010b20042006460d0020072004200610252207450d030b20022006360244200220073602400b200720056a2008200310a1051a2002200520036a220336024802402002280254450d00200810230b02400240200620036b4104490d00200341046a21050c010b200341046a22052003490d01200641017422042005200420054b1b22044100480d010240024020060d00024020040d00410121070c020b200410212207450d040c010b20062004460d0020072006200410252207450d030b20022004360244200220073602400b200720036a41023600002002200536024820022802242103024002402002280244220620056b4104490d00200228024021070c010b200541046a22072005490d01200641017422042007200420074b1b22044100480d010240024020060d00024020040d00410121070c020b200410212207450d040c010b2002280240210720062004460d0020072006200410252207450d030b20022004360244200220073602400b200720056a20033600002002200541046a22063602482002280228210402402002280244220320066b41034b0d00200641046a22082006490d01200341017422092008200920084b1b22084100480d010240024020030d00024020080d00410121070c020b200810212207450d040c010b20032008460d0020072003200810252207450d030b20022008360244200220073602400b200720066a20043600002002200541086a360248200241306a2802002108200241386a200241346a200228022c4101461b2802002205200241c0006a10610240024020050d00200228024821040c010b20082005410c6c6a21092002280244210720022802482104034002400240200720046b4108490d00200441086a210520022802402103200721060c010b200441086a22052004490d03200741017422062005200620054b1b22064100480d030240024020070d00024020060d00410121030c020b200610212203450d060c010b2002280240210320072006460d0020032007200610252203450d050b20022006360244200220033602400b200320046a200829000037000020022005360248200841086a280200210402400240200620056b41034d0d00200621070c010b200541046a22072005490d032006410174220a2007200a20074b1b22074100480d030240024020060d00024020070d00410121030c020b200710212203450d060c010b20062007460d0020032006200710252203450d050b20022007360244200220033602400b200320056a20043600002002200541046a220436024820092008410c6a2208470d000b0b2004ad210b2002350240210c02402002280200450d00200241086a280200450d00200228020410230b200b422086210b02402002280210450d00200241186a280200450d00200241146a28020010230b200b200c84210b0240200228022c450d0020022802342205450d002005410c6c450d00200228023010230b200241e0006a2400200b0f0b102c000b102a000bd41c03057f017e037f230041f00d6b22022400024002402001450d00200220003602100c010b2002419ca8c7003602100b20022001360214200241900a6a200241106a109b030240024020022802940a2203450d00200241900a6a410c6a280200210120022802980a210420022802900a2100200241b8066a200241900a6a41106a41e00010a1051a200241900a6a200241106a10b10420022802900a0d0102402001450d00200141246c21002003210103400240024020012d0000220541044b0d0002400240024020050e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b2004450d00200441246c450d00200310230b200241a40a6a4102360200200241c4066a4104360200200242023702940a200241e8c1c6003602900a200241043602bc06200241e0c1c6003602b806200241003602fc022002419ca8c7003602f8022002200241b8066a3602a00a2002200241f8026a3602c006200241900a6a41f8c1c600103a000b200241f8026a41086a2205200241900a6a41086a280200360200200220022903900a3703f802200241900a6a200241b8066a41e00010a1051a200241286a200241900a6a41e00010a1051a200241186a41086a22062005280200360200200220022903f80237031820024188016a410c6a200136020020024188016a41086a20043602002002200336028c01200220003602880120024188016a41106a200241286a41e00010a105210120024180026a2006280200360200200220022903183703f80120024188016a10be020240024002402002280288012200450d0020024188026a2000417f6a10d403200241900a6a200228028802220020022802900210e101200241b8066a41086a200241990a6a290000370300200241b8066a41106a2205200241a10a6a290000370300200241b8066a41186a2204200241a90a6a290000370300200220022900910a3703b8060240024020022d00900a4101460d00200241f8026a41186a4200370300200241f8026a41106a420037030020024180036a4200370300200242003703f8020c010b200241f8026a41186a2004290300370300200241f8026a41106a2005290300370300200241f8026a41086a200241b8066a41086a290300370300200220022903b8063703f8020b0240200228028c02450d00200010230b200241f8026a2001412010a3050d0020024180026a280200210120022802f8012100200241003602c006200242043703b806200241b8066a4100200110950120022802c006210402402001450d00200141c8036c21052001410374210320022802b8062004410c6c6a21010340200220003602f802200241900a6a200241f8026a10b302200141086a200241900a6a41086a280200360200200120022903900a3702002001410c6a2101200041c8036a2100200541b87c6a22050d000b200341786a41037620046a41016a21040b200241f8026a41086a2004360200200220022903b80622073703f802200241b8066a41086a2004360200200220073703b806200241900a6a200241b8066a1085010240200241d8016a2201200241900a6a412010a305450d004196b5c000ad4280808080e00184100a2001ad4280808080800484101d200241900a6aad4280808080800484101d0b02402001200241900a6a412010a3050d00200241fc016a280200210620022802f8012103200228028002210520024188026a20024188016a41f00010a1051a2003200541c8036c6a21002002280288022108200321010240024002402005450d00200241b8066a41f0006a21042003210102400340200241d0056a200141e80010a1051a200141e8006a2903002107200241f8026a200141f0006a41d80210a1051a20074203510d01200241b8066a200241d0056a41e80010a1051a200220073703a0072004200241f8026a41d80210a1051a2002200241b8066a3602800a200241900a6a200241800a6a10b30220022802980a2105024020022802940a450d0020022802900a10230b200241900a6a200241b8066a41c80310a1051a200241003602d80d200241800a6a200241900a6a2005200241d80d6a10c50220022d00800a4101460d04200141c8036a22012000470d000c030b0b200141c8036a21010b20002001460d00034020014198016a109e032000200141c8036a2201470d000b0b02402006450d00200641c8036c450d00200310230b10c304200810e703200241900a6a10c404200220024188026a410c6a28020022043602e80d200228028c0221032002200241900a6a410c6a28020022013602ec0d20042001470d042004450d0320022802940a210641002105419debc300ad4280808080c0028421070340024002400240024002400240024002400240200320056a22012d00002208200620056a22002d0000470d0002400240024002400240024020080e06000102030405000b20032006460d0d200141016a200041016a412010a3050d050c060b024020032006460d00200141016a280000200041016a280000470d050b200141106a2802002208200041106a280200470d04200141086a2802002209200041086a280200220a460d0a2009200a200810a3050d040c0a0b024020032006460d00200141016a280000200041016a280000470d040b200141106a2802002208200041106a280200470d03200141086a2802002209200041086a280200220a460d082009200a200810a3050d030c080b024020032006460d00200141016a280000200041016a280000470d030b200141106a2802002208200041106a280200470d02200141086a2802002209200041086a280200220a460d062009200a200810a3050d020c060b200141046a2802002208200041046a280200470d012008450d04200141086a280200200041086a280200470d012001410c6a2802002000410c6a280200470d010c040b2001410c6a28020022082000410c6a280200470d00200141046a2802002209200041046a280200220a460d022009200a200810a305450d020b2007100a200241b8066a200110e00220023502c00642208620022802b8062208ad84101d024020022802bc06450d00200810230b200241b8066a200010e00220023502c00642208620022802b8062208ad84101d024020022802bc06450d00200810230b20012d000020002d00002208470d06024020080e06000605040302000b20032006460d070b200141016a200041016a412010a3050d050c060b2001410c6a28020022082000410c6a280200470d04200141046a2802002201200041046a2802002200460d0520012000200810a3050d040c050b200141046a2802002208200041046a280200470d032008450d04200141086a280200200041086a280200470d032001410c6a2802002000410c6a280200460d040c030b024020032006460d00200141016a280000200041016a280000470d030b200141106a2802002208200041106a280200470d02200141086a2802002201200041086a2802002200460d0320012000200810a3050d020c030b024020032006460d00200141016a280000200041016a280000470d020b200141106a2802002208200041106a280200470d01200141086a2802002201200041086a2802002200460d0220012000200810a3050d010c020b024020032006460d00200141016a280000200041016a280000470d010b200141106a2802002208200041106a280200470d00200141086a2802002201200041086a2802002200460d0120012000200810a305450d010b41e4b8c2004127418c94c700102d000b200541246a21052004417f6a22040d000c040b0b200241086a20022f00810a20022d00830a4110747210a2042002280208200228020c418c94c700102d000b41b7b8c2004124418c94c700102d000b419bb8c200411c418c94c700102d000b024020024188026a41306a2201200241900a6a41306a2200412010a305450d004196b5c000ad4280808080e00184100a2001ad4280808080800484101d2000ad4280808080800484101d0b024020012000412010a305450d00418bb9c2004128418c94c700102d000b0240200228029c0a2200450d0020022802940a2101200041246c210003400240024020012d0000220541044b0d0002400240024020050e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b0240200241980a6a2802002201450d00200141246c450d0020022802940a10230b02402002280294022200450d00200228028c022101200041246c210003400240024020012d0000220541044b0d0002400240024020050e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b024020024190026a2802002201450d00200141246c450d00200228028c0210230b200241f00d6a240042010f0b200241f8026a41146a410b360200200241f8026a410c6a410d360200200241d0056a41146a41033602002002200241e80d6a3602d80d2002200241ec0d6a3602800a200241b8066a41146a4100360200200242033702d4052002418ca7c7003602d0052002410d3602fc022002419ca8c7003602c806200242013702bc06200241dcb8c2003602b8062002200241f8026a3602e0052002200241b8066a360288032002200241800a6a360280032002200241d80d6a3602f802200241d0056a419ca8c700103a000bb10301037f23004180026b22022400024002402001450d00200220003602000c010b2002419ca8c7003602000b20022001360204200241f8006a2002109b030240200228027c450d00200241086a200241f8006a41f00010a1051a200241086a10be02200228020c21030240200241086a410c6a2802002201450d00200141246c21002003210103400240024020012d0000220441044b0d0002400240024020040e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b0240200241106a2802002201450d00200141246c450d00200310230b20024180026a240042010f0b200241f4016a41043602002002411c6a41023602002002420237020c200241e8c1c600360208200241043602ec01200241b4c2c6003602e801200241003602fc012002419ca8c7003602f8012002200241e8016a3602182002200241f8016a3602f001200241086a41f8c1c600103a000b8b3a020f7f017e230041d0006b2202240020024100360238200242043703300240410810212203450d0020034115360204200341afcdc200360200200241306a4100410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d002003410c360204200341e2dcc400360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d002003410c360204200341bedcc400360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d0020034108360204200341acdcc400360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d002003410a360204200341b4dcc400360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d002003410b360204200341a1dcc400360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d0020034118360204200341cadcc400360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d0020034116360204200341afabc300360200200241306a2002280238410110a501200228023020022802384103746a20032902003702002002200228023841016a36023820031023410810212203450d00200341193602042003418881c300360200200241306a2002280238410110a501200228023020022802384103746a200329020037020020022002280238220441016a22053602382003102320022802342106200228023021072002410036023820024204370330200241306a41002005410374220341037510950120022802382108024020052004490d00200720036a210920022802302008410c6c6a210320072105034020052802002204450d01200341086a200541046a280200360200200341046a2004360200200341003602002003410c6a2103200841016a2108200541086a22052009470d000b0b200220083602380240200641ffffffff0171450d00200710230b2002280234210a2002280230210b2002410036022820024201370320410410212203450d002002410436022420022003360220200341edcad18b063600002002410436022820022802202103024020022802244104470d0020034104410810252203450d0120024108360224200220033602200b2003410b3a0004200241053602284119200241206a106141c4cdc200210c02400340200c2802042106200c2802082204200241206a10610240024020022802242207200228022822096b2004490d0020022802202105200721030c010b200920046a22032009490d02200741017422052003200520034b1b22034100480d020240024020070d00024020030d00410121050c020b2003102122050d010c050b2002280220210520072003460d0020052007200310252205450d040b20022003360224200220053602200b200520096a2006200410a1051a2002200920046a220436022802400240200c28020c4102470d000240024020032004460d00200421030c010b200341016a22042003490d04200341017422092004200920044b1b22044100480d040240024020030d0041002103024020040d00410121050c020b200410212205450d070c010b20032004460d0020052003200410252205450d060b20022004360224200220053602200b200520036a41003a00002002200341016a22033602280c010b0240024020032004460d00200421030c010b200341016a22042003490d03200341017422092004200920044b1b22044100480d030240024020030d0041002103024020040d00410121050c020b200410212205450d060c010b20032004460d0020052003200410252205450d050b20022004360224200220053602200b200520036a41013a00002002200341016a36022802400240200c28020c4101470d00200c2802142107200c2802182203200241206a10610240024020022802242209200228022822056b2003490d00200228022021040c010b200520036a22042005490d05200941017422062004200620044b1b22064100480d050240024020090d00024020060d00410121040c020b200610212204450d080c010b2002280220210420092006460d0020042009200610252204450d070b20022006360224200220043602200b200420056a2007200310a1051a2002200520036a360228200c28022021030240200c28021c4101470d002003200c280228200241206a10640c020b2003200c41246a280200200241206a10640c010b200241306a200c2802101104002002280234210720022802382203200241206a10610240024020022802242209200228022822056b2003490d00200228022021040c010b200520036a22042005490d04200941017422062004200620044b1b22064100480d040240024020090d00024020060d00410121040c020b200610212204450d070c010b2002280220210420092006460d0020042009200610252204450d060b20022006360224200220043602200b200420056a2007200310a1051a2002200520036a360228200228024021040240200228023c4101460d0020042002280244200241206a10640c010b200420022802482203200241206a106402402003450d00200341d8006c21094100210503400240200420056a220341346a280200450d002003413c6a280200450d00200341386a28020010230b0240200341c4006a280200450d00200341cc006a28020041ffffffff0171450d00200341c8006a28020010230b2009200541d8006a2205470d000b0b20022802442203450d00200341d8006c450d00200410230b200228022821030b2002280224210502400240200c28022c4102470d000240024020052003460d00200228022021050c010b200341016a22052003490d04200341017422042005200420054b1b22044100480d040240024020030d0041002103024020040d00410121050c020b200410212205450d070c010b2002280220210520032004460d0020052003200410252205450d060b20022004360224200220053602200b200520036a41003a00002002200341016a22033602280c010b0240024020052003460d00200228022021050c010b200341016a22052003490d03200341017422042005200420054b1b22044100480d030240024020030d0041002103024020040d00410121050c020b200410212205450d060c010b2002280220210520032004460d0020052003200410252205450d050b20022004360224200220053602200b200520036a41013a00002002200341016a36022802400240200c28022c4101470d00200c2802302105200c2802382203200241206a10612003450d012003412c6c21062005411c6a21030340200341686a280200210d2003416c6a2802002205200241206a10610240024020022802242207200228022822046b2005490d00200228022021090c010b200420056a22092004490d062007410174220e2009200e20094b1b220e4100480d060240024020070d000240200e0d00410121090c020b200e10212209450d090c010b200228022021092007200e460d0020092007200e10252209450d080b2002200e360224200220093602200b200920046a200d200510a1051a2002200420056a360228200341706a200241206a10632003200241206a10602003412c6a2103200641546a22060d000c020b0b200241186a200c28023011040020022802182105200228021c2203200241206a10612003450d002003412c6c21062005411c6a21030340200341686a280200210d2003416c6a2802002205200241206a10610240024020022802242207200228022822046b2005490d00200228022021090c010b200420056a22092004490d052007410174220e2009200e20094b1b220e4100480d050240024020070d000240200e0d00410121090c020b200e10212209450d080c010b200228022021092007200e460d0020092007200e10252209450d070b2002200e360224200220093602200b200920046a200d200510a1051a2002200420056a360228200341706a200241206a10632003200241206a10602003412c6a2103200641546a22060d000b0b200228022821030b2002280224210502400240200c28023c4102470d000240024020052003460d00200228022021050c010b200341016a22052003490d04200341017422042005200420054b1b22044100480d040240024020030d0041002103024020040d00410121050c020b200410212205450d070c010b2002280220210520032004460d0020052003200410252205450d060b20022004360224200220053602200b200520036a41003a00002002200341016a3602280c010b0240024020052003460d00200228022021050c010b200341016a22052003490d03200341017422042005200420054b1b22044100480d030240024020030d0041002103024020040d00410121050c020b200410212205450d060c010b2002280220210520032004460d0020052003200410252205450d050b20022004360224200220053602200b200520036a41013a00002002200341016a3602280240200c28023c4101470d00200c2802402105200c2802482203200241206a10612003450d012003412c6c21062005411c6a21030340200341686a280200210d2003416c6a2802002205200241206a10610240024020022802242207200228022822046b2005490d00200228022021090c010b200420056a22092004490d052007410174220e2009200e20094b1b220e4100480d050240024020070d000240200e0d00410121090c020b200e10212209450d080c010b200228022021092007200e460d0020092007200e10252209450d070b2002200e360224200220093602200b200920046a200d200510a1051a2002200420056a360228200341706a200241206a10602003200241206a10602003412c6a2103200641546a22060d000c020b0b200241106a200c2802401104002002280210210520022802142203200241206a10612003450d002003412c6c21062005411c6a21030340200341686a280200210d2003416c6a2802002205200241206a10610240024020022802242207200228022822046b2005490d00200228022021090c010b200420056a22092004490d042007410174220e2009200e20094b1b220e4100480d040240024020070d000240200e0d00410121090c020b200e10212209450d070c010b200228022021092007200e460d0020092007200e10252209450d060b2002200e360224200220093602200b200920046a200d200510a1051a2002200420056a360228200341706a200241206a10602003200241206a10602003412c6a2103200641546a22060d000b0b02400240200c28024c4101470d00200c280250210f200c2802582203200241206a10612003450d01200341386c2110410021090340200f20096a220341046a280200210d200341086a2802002205200241206a10610240024020022802242206200228022822046b2005490d00200228022021070c010b200420056a22072004490d052006410174220e2007200e20074b1b220e4100480d050240024020060d000240200e0d00410121070c020b200e10212207450d080c010b200228022021072006200e460d0020072006200e10252207450d070b2002200e360224200220073602200b200720046a200d200510a1051a2002200420056a360228200341106a280200210d200341146a2802002205200241206a10610240024020022802242206200228022822046b2005490d00200228022021070c010b200420056a22072004490d052006410174220e2007200e20074b1b220e4100480d050240024020060d000240200e0d00410121070c020b200e10212207450d080c010b200228022021072006200e460d0020072006200e10252207450d070b2002200e360224200220073602200b200720046a200d200510a1051a2002200420056a36022802400240200341186a2802004101470d002003411c6a280200210d200341246a2802002205200241206a10610240024020022802242206200228022822046b2005490d00200228022021070c010b200420056a22072004490d072006410174220e2007200e20074b1b220e4100480d070240024020060d000240200e0d00410121070c020b200e10212207450d0a0c010b200228022021072006200e460d0020072006200e10252207450d090b2002200e360224200220073602200b200720046a200d200510a1051a2002200420056a3602280c010b200241306a2003411c6a280200200341206a28020028020c1102002002280230210620022802382205200241206a1061024002402002280224220d200228022822046b2005490d00200228022021070c010b200420056a22072004490d06200d410174220e2007200e20074b1b220e4100480d0602400240200d0d000240200e0d00410121070c020b200e10212207450d090c010b20022802202107200d200e460d002007200d200e10252207450d080b2002200e360224200220073602200b200720046a2006200510a1051a2002200420056a3602282002280234450d00200610230b200341286a200241206a10602010200941386a2209470d000c020b0b200241086a200c2802501104002002280208210f200228020c2203200241206a10612003450d00200341386c2110410021090340200f20096a220341046a280200210d200341086a2802002205200241206a10610240024020022802242206200228022822046b2005490d00200228022021070c010b200420056a22072004490d042006410174220e2007200e20074b1b220e4100480d040240024020060d000240200e0d00410121070c020b200e10212207450d070c010b200228022021072006200e460d0020072006200e10252207450d060b2002200e360224200220073602200b200720046a200d200510a1051a2002200420056a360228200341106a280200210d200341146a2802002205200241206a10610240024020022802242206200228022822046b2005490d00200228022021070c010b200420056a22072004490d042006410174220e2007200e20074b1b220e4100480d040240024020060d000240200e0d00410121070c020b200e10212207450d070c010b200228022021072006200e460d0020072006200e10252207450d060b2002200e360224200220073602200b200720046a200d200510a1051a2002200420056a36022802400240200341186a2802004101470d002003411c6a280200210d200341246a2802002205200241206a10610240024020022802242206200228022822046b2005490d00200228022021070c010b200420056a22072004490d062006410174220e2007200e20074b1b220e4100480d060240024020060d000240200e0d00410121070c020b200e10212207450d090c010b200228022021072006200e460d0020072006200e10252207450d080b2002200e360224200220073602200b200720046a200d200510a1051a2002200420056a3602280c010b200241306a2003411c6a280200200341206a28020028020c1102002002280230210620022802382205200241206a1061024002402002280224220d200228022822046b2005490d00200228022021070c010b200420056a22072004490d05200d410174220e2007200e20074b1b220e4100480d0502400240200d0d000240200e0d00410121070c020b200e10212207450d080c010b20022802202107200d200e460d002007200d200e10252207450d070b2002200e360224200220073602200b200720046a2006200510a1051a2002200420056a3602282002280234450d00200610230b200341286a200241206a10602010200941386a2209470d000b0b02400240200c28025c4101470d00200c2802602105200c2802682203200241206a10612003450d012003411c6c21062005410c6a21030340200341786a280200210d2003417c6a2802002205200241206a10610240024020022802242207200228022822046b2005490d00200228022021090c010b200420056a22092004490d052007410174220e2009200e20094b1b220e4100480d050240024020070d000240200e0d00410121090c020b200e10212209450d080c010b200228022021092007200e460d0020092007200e10252209450d070b2002200e360224200220093602200b200920046a200d200510a1051a2002200420056a3602282003200241206a10602003411c6a2103200641646a22060d000c020b0b2002200c2802601104002002280200210520022802042203200241206a10612003450d002003411c6c21062005410c6a21030340200341786a280200210d2003417c6a2802002205200241206a10610240024020022802242207200228022822046b2005490d00200228022021090c010b200420056a22092004490d042007410174220e2009200e20094b1b220e4100480d040240024020070d000240200e0d00410121090c020b200e10212209450d070c010b200228022021092007200e460d0020092007200e10252209450d060b2002200e360224200220093602200b200920046a200d200510a1051a2002200420056a3602282003200241206a10602003411c6a2103200641646a22060d000b0b200c41ec006a220c41d0e2c200470d000b02400240200228022420022802282203460d00200228022021050c010b200341016a22052003490d01200341017422042005200420054b1b22044100480d010240024020030d0041002103024020040d00410121050c020b200410212205450d040c010b2002280220210520032004460d0020052003200410252205450d030b20022004360224200220053602200b200520036a41043a00002002200341016a3602282008200241206a1061024002402008450d002008410c6c210d200b41086a210503402005417c6a280200210e20052802002203200241206a10610240024020022802242209200228022822046b2003490d0020022802202107200921060c010b200420036a22072004490d04200941017422062007200620074b1b22064100480d040240024020090d00024020060d00410121070c020b200610212207450d070c010b2002280220210720092006460d0020072009200610252207450d060b20022006360224200220073602200b200720046a200e200310a1051a2002200420036a22033602282005410c6a2105200d41746a220d0d000c020b0b2002280228210320022802242106200228022021070b0240200a450d00200a410c6c450d00200b10230b02400240200341046a2209417f4c0d000240024002400240024002400240024002402009450d00200910212205450d0a200341c000490d04200341808001490d0520034180808080044f0d01200941034d0d062009210d0c070b41012109410110212205450d0b200541033a00004105210d0c010b200541033a000002402009417f6a4104490d002009210d0c020b200941017422044105200441054b1b220d4100480d092009200d460d010b20052009200d10252205450d090b20052003360001410521040c040b200520034102743a0000410121042009210d0c030b02400240200941014d0d002009210d0c010b2009200941017422044102200441024b1b220d460d0020052009200d10252205450d070b41022104200520034102744101723b00000c020b200941017422044104200441044b1b220d4100480d042009200d460d0020052009200d10252205450d050b20052003410274410272360000410421040b0240200d20046b20034f0d00200420036a22092004490d03200d410174220e2009200e20094b1b22094100480d03200d2009460d002005200d200910252205450d040b200520046a2007200310a1051a200420036aad4220862005ad84211102402006450d00200710230b200241d0006a240020110f0b1032000b1033000b102c000b102a000bbb0601057f230041900b6b22022400024002402001450d00200220003602000c010b2002419ca8c7003602000b20022001360204200241b8076a200210d303024002400240024020022903a0084203510d00200241186a200241b8076a41c80310a1051a200241e0036a200241186a41c80310a1051a2002200241e0036a3602b807200241a8076a200241b8076a10b30220022802b0072101200241b8076a200241e0036a41c80310a1051a200241880b6a20022802b007360200200220022903a8073703800b200241086a200241b8076a2001200241800b6a10c5024101410220022d000822034101461b220010212201450d01200241003602c007200220003602bc07200220013602b8070240024020034101470d00200141013a0000200241013602c007200241086a410172200241b8076a10810420022802c007210020022802b80721010c010b200141003a0000200241013602c0070240024020022d000c22044104460d00200141013a000141022103200241023602c00702400240024002400240024020040e0400010203000b410021040c030b410121040c020b200241023a00e003410221040c020b200241033a00e0034104210020014102410410252201450d07200141033a0002200220013602b80720024284808080303702bc07200220022d000d22033a00e003024041010d004106210020014103410610252201450d08200241063602bc07200220013602b8070b200120033a000341042103200241043602c00720022d000e21040b200220043a00e0030b024020002003470d0041000d070240200020004101742205200041016a2206200520064b1b2205460d0020012000200510252201450d070b200220053602bc07200220013602b8070b200120036a20043a0000200341017221000c010b200141003a0001410221000b200220003602c0070b200241900b6a24002000ad4220862001ad840f0b200241246a4104360200200241f4036a4102360200200242023702e403200241e8c1c6003602e0032002410436021c200241ccc2c6003602182002410036020c2002419ca8c7003602082002200241186a3602f0032002200241086a360220200241e0036a41f8c1c600103a000b1033000b102a000b102c000bcb1305047f017e017f017e0b7f23004180026b2202240010c304200241106a41186a22034200370300200241106a41106a22044200370300200241106a41086a220542003703002002420037031041e4dec400ad4280808080e000842206100c220729000021082005200741086a290000370300200220083703102007102341f3dec400ad4280808080e00084100c22072900002108200241b0016a41086a2209200741086a290000370300200220083703b00120071023200420022903b0012208370300200241d0016a41086a220a2005290300370300200241d0016a41106a220b2008370300200241d0016a41186a220c2009290300370300200220022903103703d001200241086a200241d0016a412010cd0141002107200228020c410020022802081b10e703200342003703002004420037030020054200370300200242003703102006100c220d2900002108200241f0016a41086a220e200d41086a290000370300200220083703f001200d10232005200e290300370300200220022903f00137031041d0ffc400ad4280808080e00184100c220d2900002108200e200d41086a290000370300200220083703f001200d1023200420022903f0012208370300200a2005290300370300200b2008370300200c200e290300370300200220022903103703d0012002200241d0016a412010cd012002280204210d2002280200210f200241003602b801200242043703b001200241b0016a4100200d4100200f1b221010950120022802b801211102402010450d0020022802b0012011410c6c6a210d0340200241d0016a200710c702200241106a20022802d001221220022802d801221310b70302402002280210220f450d002013ad4220862012ad8410110b200741016a210720022902144200200f1b2108200f4101200f1b210f024020022802d401450d00201210230b200d200f360200200d41046a2008370200200d410c6a210d20102007470d000b201120106a21110b20024180016a41086a2011360200200220022903b001220837038001200520113602002002200837031020024190016a200241106a108501200241b0016a41186a20024190016a41186a290300370300200241b0016a41106a20024190016a41106a290300370300200920024190016a41086a29030037030020022002290390013703b001200342003703002004420037030020054200370300200242003703102006100c22072900002108200e200741086a290000370300200220083703f001200710232005200e290300370300200220022903f0013703104183dfc400ad4280808080e00184100c22072900002108200e200741086a290000370300200220083703f00120071023200420022903f001370000200441086a200e290300370000200a2005290300370300200b2004290300370300200c2003290300370300200220022903103703d001024002400240412010212207450d00200720022903b001370000200741186a200241b0016a41186a290300370000200741106a200241b0016a41106a290300370000200741086a200241b0016a41086a290300370000200241d0016aad42808080808004842007ad4280808080800484100e20071023200241106a10c404200241003602b801200242013703b001412010212207450d0020072002290320370000200741186a200241386a290300370000200741106a200241106a41206a290300370000200741086a200241106a41186a29030037000041201021220d450d02200241203602b4012002200d3602b001200d2007290000370000200d41086a200741086a290000370000200d41106a200741106a290000370000200d41186a200741186a290000370000200241203602b80120071023200241106a200241b0016a10ed01412010212207450d0020072002290340370000200741186a200241d8006a290300370000200741106a200241d0006a290300370000200741086a200241c8006a2903003700000240024020022802b401221020022802b80122136b4120490d00201341206a210d20022802b001210f201021120c010b201341206a220d2013490d022010410174220f200d200f200d4b1b22124100480d020240024020100d00024020120d004101210f0c020b20121021220f0d010c050b20022802b001210f20102012460d00200f201020121025220f450d040b200220123602b4012002200f3602b0010b200f20136a22132007290000370000201341186a200741186a290000370000201341106a200741106a290000370000201341086a200741086a2900003700002002200d3602b80120071023412010212207450d0020072002290360370000200741186a200241f8006a290300370000200741106a200241f0006a290300370000200741086a200241e8006a29030037000002402012200d6b411f4b0d00200d41206a2213200d490d02201241017422102013201020134b1b22134100480d020240024020120d00024020130d004101210f0c020b20131021220f450d050c010b20122013460d00200f201220131025220f450d040b200220133602b4012002200f3602b0010b200f200d6a220f2007290000370000200f41186a200741186a290000370000200f41106a200741106a290000370000200f41086a200741086a2900003700002002200d41206a3602b80120071023200228021421032002411c6a2802002211200241b0016a10610240024020110d0020022802b801210d20022802b00121050c010b201141246c210e20022802b401210f20022802b8012107200321130340200241d0016a201310e00220022802d001210402400240200f20076b20022802d8012210490d00200720106a210d20022802b0012105200f21120c010b200720106a220d2007490d04200f4101742212200d2012200d4b1b22124100480d0402400240200f0d00024020120d00410121050c020b201210212205450d070c010b20022802b0012105200f2012460d002005200f201210252205450d060b200220123602b401200220053602b0010b200520076a2004201010a1051a2002200d3602b801024020022802d401450d00200410230b201341246a21132012210f200d2107200e415c6a220e0d000b0b200dad42208621082005ad210602402011450d00201141246c210d2003210703400240024020072d0000220f41044b0d00024002400240200f0e050400010204040b2007410c6a280200450d03200741086a28020010230c030b2007410c6a280200450d02200741086a28020010230c020b2007410c6a280200450d01200741086a28020010230c010b200741086a280200450d00200741046a28020010230b200741246a2107200d415c6a220d0d000b0b200820068421080240200241186a2802002207450d00200741246c450d00200310230b20024180026a240020080f0b1033000b102c000b102a000bd81405017f017e017f017e0a7f230041a0066b22022400024002402001450d00200220003602180c010b2002419ca8c7003602180b2002200136021c200241106a200241186a1088010240024020022802100d00200228021421012002200241186a36029005200241003a008005200241003602f802200241003602f0022002200136025420024100360250200220024180056a36025c200220024190056a360258200241d0006a200241f0026a10ff03200241b8056a41086a20022802f8022201360200200220022903f00222033703b80520022d0080052100200241d0006a41086a22042001360200200220033703502000450d01200241d0006a10f5040b200241fc026a4104360200200241e4006a410236020020024202370254200241e8c1c600360250200241043602f402200241e4c2c6003602f002200241003602bc052002419ca8c7003602b8052002200241f0026a3602602002200241b8056a3602f802200241d0006a41f8c1c600103a000b200241206a41086a20042802002201360200200220022903502203370320200241306a41086a2001360200200220033703302002410036024820024208370340200241d0006a200241306a10730240024002400240024020022802504101460d00200241d0006a41086a22012903002103200241d0006a41186a4200370300200241d0006a41106a22044200370300200142003703002002420037035041b494c700ad4280808080900184100c220029000021052001200041086a290000370300200220053703502000102341bd94c700ad42808080803084100c22002900002105200241b8056a41086a2206200041086a290000370300200220053703b80520001023200420022903b8052205370300200241f0026a41086a2001290300370300200241f0026a41106a2005370300200241f0026a41186a2006290300370300200220022903503703f0022002200241f0026a10fa022002280200210020022903082105200241c0006a410010ac01200228024022072002280248220441c8036c6a220141023602980120014202370368200141a0016a2003200542b8177c42b81720001b220520032005561b3703002002200441016a22083602480240024020022802302209450d002002280234210a02400340200941086a210020092f0106220b4103742101410021040240024003402001450d0141c296c7002000410810a3052206450d02200141786a2101200441016a2104200041086a21002006417f4a0d000b2004417f6a210b0b200a450d02200a417f6a210a2009200b4102746a41e4016a28020021090c010b0b200941e0006a2004410c6c6a22012802084104490d0020012802002800002106200241d0006a41186a4200370300200241d0006a41106a22044200370300200241d0006a41086a220142003703002002420037035041fee2c200ad4280808080f00184100c220029000021032001200041086a290000370300200220033703502000102341a0e3c200ad4280808080b00184100c22002900002103200241b8056a41086a2209200041086a290000370300200220033703b80520001023200420022903b8052203370300200241f0026a41086a2001290300370300200241f0026a41106a2003370300200241f0026a41186a2009290300370300200220022903503703f002200241d0006a200241f0026a10ed0320022802502201410420011b21044100210002402002290254420020011b2203422088a72201450d00200141027420046a417c6a2201450d00200128020020064721000b0240200342ffffffff0383500d00200410230b2000450d00024020082002280244470d00200241c0006a200810ac0120022802402107200228024821080b2007200841c8036c6a200241f0026a41e80010a105220142023703682001419c016a20063602002001410936029801200120022903b805370370200141f8006a200241c0056a29030037030020014180016a200241c8056a29030037030020014188016a200241d0056a29030037030020014190016a200241d8056a290300370300200141a8016a200241d0006a41a00210a1051a2002200841016a22083602480b20022802302209450d002002280234210a0340200941086a210020092f0106220b4103742101410021040240024003402001450d0141f0fdc2002000410810a3052206450d02200141786a2101200441016a2104200041086a21002006417f4a0d000b2004417f6a210b0b200a450d02200a417f6a210a2009200b4102746a41e4016a28020021090c010b0b200220092004410c6c6a220141e8006a2802003602bc052002200141e0006a2802003602b805200241d0006a200241b8056a109c03200228025022000d0120024129360254200241a992c70036025041f8fdc2004125200241d0006a418084c30041a0fec2001034000b41b0fec200412a41a0fec200104f000b200241d0006a41086a280200210420022802542106200241d0006a200241f0026a418c0210a1051a024020082002280244470d00200241c0006a200810ac0120022802402107200228024821080b2007200841c8036c22096a200241b8056a41e80010a105220142023703682001200229039005370370200141f8006a20024190056a41086a29030037030020014180016a200241a0056a29030037030020014188016a200241a8056a29030037030020014190016a200241b0056a290300370300200141a8016a2004360200200141a4016a2006360200200141a0016a20003602002001428d8080801037039801200141ac016a200241d0006a418c0210a1051a200141c0036a20024180056a41086a290300370300200141b8036a2002290380053703002002280244210c200241306a10f504200941cc036a2201417f4c0d01200110212200450d02200241003602f802200220013602f402200220003602f002200841016a220d200241f0026a106102400240200d0d0020022802f802210020022802f002210b0c010b200841c8036c41c8036a210e20022802f402210420022802f8022101200721090340200220093602b805200241d0006a200241b8056a10b3022002280250210f02400240200420016b2002280258220a490d002001200a6a210020022802f002210b200421060c010b2001200a6a22002001490d06200441017422062000200620004b1b22064100480d060240024020040d00024020060d004101210b0c020b20061021220b0d010c090b20022802f002210b20042006460d00200b200420061025220b450d080b200220063602f4022002200b3602f0020b200b20016a200f200a10a1051a200220003602f80202402002280254450d00200f10230b200941c8036a21092006210420002101200e41b87c6a220e0d000b0b2000ad4220862103200bad21050240200d450d0020074198016a2101200841c8036c41c8036a210003402001109e03200141c8036a2101200041b87c6a22000d000b0b200320058421030240200c450d00200c41c8036c450d00200710230b200241a0066a240020030f0b200241f8026a200241dc006a290200370300200220022902543703f00241c3a3c7004128200241f0026a41eca3c70041fca3c7001034000b1032000b1033000b102c000b102a000be60203047f017e017f024020002802002201450d0020002802082102024020002802042200450d00034020012802e40121012000417f6a22000d000b0b02402002450d0041002103024003402001450d01410021040240200320012f0106490d00034002400240200128020022000d0041002103410021000c010b200441016a210420012f010421030b2001102320002101200320002f01064f0d000b200021010b200341016a210020012003410c6c6a220341e4006a2902002105200341e0006a28020021060240024020040d00200021030c010b200120004102746a41e4016a2802002101410021032004417f6a2200450d00034020012802e40121012000417f6a22000d000b0b2006450d022002417f6a210202402005a7450d00200610230b20020d000c020b0b41d095c700412b41c491c700102d000b2001450d0020012802002100200110232000450d00034020002802002101200010232001210020010d000b0b0bc82109087f017e0c7f017e017f037e017f017e017f230041e0026b22022400024002402001450d00200220003602180c010b2002419ca8c7003602180b2002200136021c200241f8006a200241186a109b0302400240200228027c2203450d0020024184016a28020021042002280280012105200241f8006a200241186a10b104200228027822060d0102402004450d00200441246c21002003210103400240024020012d0000220741044b0d0002400240024020070e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b2005450d00200541246c450d00200310230b2002418c026a41043602002002418c016a41023602002002420237027c200241e8c1c600360278200241043602840220024180c3c60036028002200241003602642002419ca8c700360260200220024180026a360288012002200241e0006a36028802200241f8006a41f8c1c600103a000b200241f8006a41086a22012802002108200228027c2109200241106a200241186a1088010240024020022802100d00200228021421002002200241186a360250200241003a0020200241003602880220024100360280022002200036027c200241003602782002200241206a360284012002200241d0006a36028001200241f8006a20024180026a10ff03200241e0006a41086a20022802880222003602002002200229038002220a37036020022d00202107200120003602002002200a3703782007450d01200241f8006a10f5040b2002418c026a41043602002002418c016a41023602002002420237027c200241e8c1c600360278200241043602840220024180c3c60036028002200241003602642002419ca8c700360260200220024180026a360288012002200241e0006a36028802200241f8006a41f8c1c600103a000b200241306a41086a200241f8006a41086a220b280200220136020020022002290378220a370330200241c0006a41086a20013602002002200a370340200241013b015c2002410036025820024100360250200241d0006a41086a210c0240024002400240024002402008450d002006200841c8036c6a210d20024180026a410272210e200241e0006a410472210f200241f8006a41106a2110200621110340201141e8006a2903004202520d01024020112802980141024722120d00024002400240024020022802402213450d0020112903a001210a200228024421140340201341086a210020132f010622154103742101410021070240024003402001450d0141d5b0c0002000410810a3052216450d02200141786a2101200741016a2107200041086a21002016417f4a0d000b2007417f6a21150b2014450d022014417f6a2114201320154102746a41e4016a28020021130c010b0b0240201341e0006a2007410c6c6a220128020841074b0d00201742808080807083422984210a41a992c70021140c020b200a42f02e8020012802002900002217510d034131211841ecb2c50021140c020b201742808080807083421c84210a41ddb0c00021140b200aa721180b0240024020022d005d450d004182a6c7002101413121000c010b200241d0006a10f5042002410036025820024100360250200242e2c289abb68edbb7f40037036020024180026a410272410041da0010a0051a200241f8006a410041840110a0051a41e40110212216450d0920164100360200201641046a20024180026a41dc0010a1051a201641e0006a200241f8006a41840110a1051a200241003602542002201636025020162f010622114103742113417f210041002101024002400340024020132001470d00201121000c020b200241e0006a201620016a41086a410810a3052207450d02200141086a2101200041016a2100200741004e0d000b0b200242e2c289abb68edbb7f40037028c012002200c3602880120022000360284012002201636027c200241003602782002200241d0006a3602800120024180026a201420181074200241f8006a20024180026a10800420024180023b015c200241206a41086a200241d0006a41086a290300370300200220022903503703200c060b41d5a5c7002101412d21000b2002200036027c2002200136027841eba4c7004122200241f8006a4190a5c70041a0a5c7001034000b20120d0020112903a0012119200241f8006a200241c0006a10730240024020022802784101460d00200229038001210a200241f8006a41186a2200420037030020104200370300200b42003703002002420037037841b494c700ad4280808080900184100c2201290000211a200b200141086a2900003703002002201a3703782001102341bd94c700ad42808080803084100c2201290000211a200241e0006a41086a2207200141086a2900003703002002201a3703602001102320102002290360370000201041086a200729030037000020024180026a41086a200b29030037030020024180026a41106a201029030037030020024180026a41186a20002903003703002002200229037837038002200220024180026a10fa0202402019200a42b0ea017c560d004200211a2019200229030842b8177c42b81720022802001b220a540d020c030b41b0a5c700ad4280808080d00484210a201b428080808070832018ad84211b4201211a4100211c0c010b200229038001210a200228027c211c4201211a201d4280808080708320023502880184221d211b0b2002201b3703702002201cad422086201a843703602002200a37036802400240024020022d005d450d00413121014182a6c70021000c010b024002400240201aa72215450d00200241d0006a10f5042002410036025820024100360250200242f4d2b59bc7ae98b8303703200c010b20022802502113200242f4d2b59bc7ae98b8303703202013450d00200228025421140c010b200e410041da0010a0051a200241f8006a410041840110a0051a41e40110212213450d0a4100211420134100360200201341046a20024180026a41dc0010a1051a201341e0006a200241f8006a41840110a1051a20024100360254200220133602500b200a422088a72112200aa7211e02400340201341086a210020132f01062218410374210141002107024003402001450d01200241206a2000410810a3052216450d03200141786a2101200741016a2107200041086a21002016417f4a0d000b2007417f6a21180b02402014450d002014417f6a2114201320184102746a41e4016a28020021130c010b0b200242f4d2b59bc7ae98b83037028c012002200c3602880120022018360284012002201336027c200241003602782002200241d0006a360280014101102121010240024020150d002001450d0c200141003a000020014101410910252201450d0c2001200a37000141092107410921000c010b2001450d0b200141013a000020024180026a200f10900120022802800221130240024020022802880222160d0041012107201641016a21000c010b201641016a22002016490d0920004102200041024b1b22074100480d0920014101200710252201450d0c0b200141016a2013201610a1051a200228028402450d00201310230b200220003602880220022007360284022002200136028002200241f8006a20024180026a1080042002201a3c005d200241003a005c20150d022015450d03201c450d032012450d03201e10230c030b412d210141d5a5c70021000b200220003602782002200136027c41eba4c7004122200241f8006a4190a5c70041a0a5c7001034000b200241206a41086a200241d0006a41086a29030037030020022002290350370320201c450d032012450d03201e10230c030b201141c8036a2211200d470d000b0b200241206a41086a200c290300370300200220022903503703200b200241c0006a10f50402402004450d00200441246c21002003210103400240024020012d0000220741044b0d0002400240024020070e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b02402005450d00200541246c450d00200310230b02402008450d00200841c8036c210020064198016a210103402001109e03200141c8036a2101200041b87c6a22000d000b0b02402009450d00200941c8036c450d00200610230b200241003602682002420137036020022d002c2100410110212201450d032002410136026420022001360260200120003a00002002410136026820022d002d210020014101410210252201450d032002410236026420022001360260200120003a00012002410236026820022802282200200241e0006a106102400240024020022802202201450d00024020022802242216450d002016210720012113034020132802e40121132007417f6a22070d000b200121070340200720072f01064102746a41e4016a28020021072016417f6a22160d000b200241f8006a2116201321010c020b200241f8006a2116200121070c010b410021012002410036027c200241f8006a21160c010b2002200736027c20024184016a20072f0106360200200241003602782002200241206a36028001200241206a21070b20024180026a41086a201641086a290200220a37030020022016290200221a37038002200241f8006a410c6a410036020020024190016a200a37030020022007360280012002200136027c200241003602782002201a3703880120022000360298012000450d01034020022000417f6a36029801200241f8006a410020011b2213280200210720132802082114024002400240201328020c2216201328020422002f01064f0d00200021010c010b0240034020002802002201450d01200741016a210720002f0104211620012100201620012f0106490d020c000b0b2014ad210a410021010c010b2016ad4220862014ad84210a0b200a422088a7221441016a2116200aa721180240024020070d00200121000c010b200120164102746a41e4016a2802002100410021162007417f6a2207450d00034020002802e40121002007417f6a22070d000b0b2013201636020c2013201836020820132000360204201341003602000240024020022802642216200228026822006b4108490d00200228026021070c010b200041086a22072000490d02201641017422132007201320074b1b22134100480d020240024020160d00024020130d00410121070c020b2013102122070d010c070b2002280260210720162013460d0020072016201310252207450d060b20022013360264200220073602600b200720006a200120144103746a41086a2900003700002002200041086a360268200141e0006a2014410c6c6a2201280200211320012802082201200241e0006a10610240024020022802642216200228026822006b2001490d00200228026021070c010b200020016a22072000490d02201641017422142007201420074b1b22144100480d020240024020160d00024020140d00410121070c020b201410212207450d070c010b2002280260210720162014460d0020072016201410252207450d060b20022014360264200220073602600b200720006a2013200110a1051a2002200020016a22013602682002280298012200450d03200228027c21010c000b0b102c000b20022802682101200228026021070b200241206a10f504200241e0026a24002001ad4220862007ad840f0b102a000bbf0101067f230041206b220224002002419ca8c700410010a80302400240412010212203450d0020032002290300370000200341186a2204200241186a290300370000200341106a2205200241106a290300370000200341086a2206200241086a290300370000412010212207450d0120072003290000370000200741186a2004290000370000200741106a2005290000370000200741086a200629000037000020031023200241206a24002007ad42808080808004840f0b1033000b102a000bc44705037f017e067f047e077f230041d0126b220224000240024020010d002002200136020c2002419ca8c7003602080c010b2002200136020c20022001417f6a36020c200220003602082002200041016a36020820002d000041034f0d00200241e00a6a200241086a10d303024002400240024002400240024002400240024020022903c80b4203510d00200241c8006a200241e00a6a41c80310a1051a20024190046a200241c8006a41c80310a1051a200220024190046a3602d807200241e00a6a200241d8076a10b30220022802e80a2103024020022802e40a450d0020022802e00a10230b200241e00a6a20024190046a41c80310a1051a200241d8076a200241e00a6a10c60241012101024020022d00d8074101460d00200241e00a6a200241d8076a41086a41800310a1051a200241a80e6a200241b00b6a220410c90220022903a80e210502400240024020022903800b4202520d00200241a0126a41206a22004200370300200241a0126a41186a22014280808080c000370300200241013a00c812200242043703b0122002427f3703a812200242003703a012200241d8076a41206a22064200370300200241d8076a41186a22074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241f00e6a200241a0126a200241d8076a109401200241a0126a41286a2208200241f00e6a41286a2903003703002000200241f00e6a41206a2903003703002001200241f00e6a41186a290300370300200241a0126a41106a2209200241f00e6a41106a290300370300200241a0126a41086a220a200241f00e6a41086a290300370300200220022903f00e3703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241a00f6a200241a0126a200241d8076a1094012008200241a00f6a41286a2903003703002000200241a00f6a41206a2903003703002001200241a00f6a41186a2903003703002009200241a00f6a41106a290300370300200a200241a00f6a41086a290300370300200220022903a00f3703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241d00f6a200241a0126a200241d8076a1094012008200241d00f6a41286a2903003703002000200241d00f6a41206a2903003703002001200241d00f6a41186a2903003703002009200241d00f6a41106a290300370300200a200241d00f6a41086a290300370300200220022903d00f3703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d80720024180106a200241a0126a200241d8076a109401200820024180106a41286a290300370300200020024180106a41206a290300370300200120024180106a41186a290300370300200920024180106a41106a290300370300200a20024180106a41086a29030037030020022002290380103703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241b0106a200241a0126a200241d8076a109401200241f0116a41286a200241b0106a41286a290300370300200241f0116a41206a220b200241b0106a41206a290300370300200241f0116a41186a220a200241b0106a41186a290300370300200241f0116a41106a200241b0106a41106a290300370300200241f0116a41086a200241b0106a41086a290300370300200220022903b0103703f011200220053703c011200241d8076a200241c0116a200310c504024020022d00d8074101470d0020022d00db07210720022f00d907210820022802801221060240200a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024184126a2802002200450d002000410c6c450d00200610230b200228028c122106024020024194126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024190126a2802002200450d002000410c6c450d00200610230b4101450d02200820074110747221000c090b200820024188086a2903003703002000200241d8076a41286a2903003703002001200629030037030020092007290300370300200241a0126a41086a2203200241d8076a41106a290300370300200220022903e0073703a012200241e0106a200241f0116a200241a0126a1094012008200241e0106a41286a2903003703002000200241e0106a41206a2903003703002001200241e0106a41186a2903003703002009200241e0106a41106a2903003703002003200241e0106a41086a290300370300200220022903e0103703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d80720024190116a200241a0126a200241d8076a109401200820024190116a41286a290300370300200020024190116a41206a290300370300200120024190116a41186a290300370300200920024190116a41106a290300370300200320024190116a41086a29030037030020022002290390113703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241c0116a200241a0126a200241d8076a1094012008200241c0116a41286a2903003703002000200241c0116a41206a2903003703002001200241c0116a41186a2903003703002009200241c0116a41106a2903003703002003200241c0116a41086a290300370300200220022903c0113703a0122006420037030020074280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241f0116a200241a0126a200241d8076a109401200241cc0e6a200241f0116a41086a290300370200200220022903f0113702c40e41000d0820024184126a2802002106200a2802002100200b280200210720024194126a28020021082002280280122109200228028c12210320022903981221050c020b200241a0126a41206a22004200370300200241a0126a41186a22014280808080c000370300200241013a00c812200242043703b012427f210c2002427f3703a812200242003703a012200220022800f0113602c0112002200241f3116a2800003600c311024020022802b00b410f470d00200241023a0013200241800e3b0011200241013a00100c090b200241d8076a41206a22074200370300200241d8076a41186a22064280808080c00037030020024184086a20022800c311360000200241013a008008200242043703e8072002427f3703e007200242003703d807200220022802c01136008108200241c00e6a200241a0126a200241d8076a109401200241a0126a41286a2208200241c00e6a41286a2903003703002000200241c00e6a41206a2903003703002001200241c00e6a41186a290300370300200241a0126a41106a2209200241c00e6a41106a290300370300200241a0126a41086a220a200241c00e6a41086a290300370300200220022903c00e3703a0122007420037030020064280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241f00e6a200241a0126a200241d8076a1094012008200241f00e6a41286a2903003703002000200241f00e6a41206a2903003703002001200241f00e6a41186a2903003703002009200241f00e6a41106a290300370300200a200241f00e6a41086a290300370300200220022903f00e3703a0122007420037030020064280808080c000370300200241013a008008200242043703e8072002427f3703e007200242003703d807200241a00f6a200241a0126a200241d8076a1094012008200241a00f6a41286a2903003703002000200241a00f6a41206a2903003703002001200241a00f6a41186a2903003703002009200241a00f6a41106a290300370300200a200241a00f6a41086a290300370300200220022903a00f3703a01220064200370300200241d8076a41106a22074200370300200241d8076a41086a22014200370300200242003703d80741e4dec400ad4280808080e00084100c2206290000210d200241f0116a41086a2200200641086a2900003703002002200d3703f0112006102320012000290300370300200220022903f0113703d80741f3dec400ad4280808080e00084100c2206290000210d200241c0116a41086a2208200641086a2900003703002002200d3703c01120061023200720022903c011220d37030020002001290300370300200241f0116a41106a2201200d370300200241f0116a41186a2008290300370300200220022903d8073703f0112002200241f0116a412010cd012002280204410020022802001bad210d024020022903800b4201520d0020022903880b220c4200510d05200d200241900b6a290300220e200e200d541b220f200c7c200f200e7d200c827d210c0b200241d8076a41206a4200370300200241d8076a41186a4280808080c000370300200241013a008008200242043703e807200242003703d80720024200200c200d7d220d200d200c561b3703e007200241d00f6a200241a0126a200241d8076a109401200241f0116a41286a200241d00f6a41286a290300370300200241f0116a41206a200241d00f6a41206a290300370300200241f0116a41186a200241d00f6a41186a2903003703002001200241d00f6a41106a2903003703002000200241d00f6a41086a290300370300200220022903d00f3703f011200241c0116a200241e00a6a109702200241d8076a20022802c011220020022802c811109802200241a0086a280200410020022903d8074201511b2101024020022802c411450d00200010230b0240024020022802a80b22062001490d00410c10212207450d0e410410212200450d0c20004104412010252200450d0e200020022903e00a370000200041186a200241e00a6a41186a290300370000200041106a200241e00a6a41106a290300370000200041086a200241e00a6a41086a2903003700002000412041c00010252200450d0e20002006360020200742c0808080c004370204200720003602000240024020012006490d0041002100410421010c010b410c10212201450d0f410410212200450d0d20004104412010252200450d0f200020022903e00a370000200041186a200241e00a6a41186a290300370000200041106a200241e00a6a41106a290300370000200041086a200241e00a6a41086a2903003700002000412041c00010252200450d0f20002006417f6a360020200142c0808080c00437020420012000360200410121000b200241a0126a41206a428180808010370300200241a0126a41186a2000360200200241b4126a2000360200200241cc126a20024193116a280000360000200241013a00c812200220073602bc12200220013602b0122002427f3703a81220022002280090113600c9122002200542ffffffff0f833703a01220024180106a200241f0116a200241a0126a109401200241f0116a41286a20024180106a41286a290300370300200241f0116a41206a20024180106a41206a290300370300200241f0116a41186a20024180106a41186a290300370300200241f0116a41106a20024180106a41106a290300370300200241f0116a41086a20024180106a41086a29030037030020022002290380103703f0110240024020054280808080f01f83428080808020520d00200241003a00db07418012210020024180123b00d907200241013a00d8070c010b200220053703c011200241d8076a200241c0116a200310c50420022d00d8074101470d0220022f00d90720022d00db074110747221000b200241013a0010200220003b0011200220004110763a00132002280280122106024020024188126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024184126a2802002200450d002000410c6c450d00200610230b200228028c122106024020024194126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b20024190126a2802002200450d0a2000410c6c450d0a200610230c0a0b200241003a001320024180063b0011200241013a00102002280280122106024020024188126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024184126a2802002200450d002000410c6c450d00200610230b200228028c122106024020024194126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b20024190126a2802002200450d092000410c6c450d09200610230c090b200241a0126a41286a220120024188086a2206290300370300200241a0126a41206a2207200241d8076a41286a2208290300370300200241a0126a41186a2209200241d8076a41206a220a290300370300200241a0126a41106a220b200241d8076a41186a2210290300370300200241a0126a41086a2211200241d8076a41106a2212290300370300200220022903e0073703a012200241b0106a200241f0116a200241a0126a109401200241f0116a41286a2213200241b0106a41286a290300370300200241f0116a41206a2214200241b0106a41206a290300370300200241f0116a41186a2200200241b0106a41186a290300370300200241f0116a41106a2215200241b0106a41106a290300370300200241f0116a41086a2216200241b0106a41086a290300370300200220022903b0103703f011200220053703c011200241d8076a20022903980b200241a00b6a290300200241e00a6a200241c0116a200310cc02024020022d00d8074101470d00200220022d00db073a0013200220022f00d9073b0011200241013a00102002280280122106024020002802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024184126a2802002200450d002000410c6c450d00200610230b200228028c122106024020024194126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b20024190126a2802002200450d092000410c6c450d09200610230c090b20012006290300370300200720082903003703002009200a290300370300200b201029030037030020112012290300370300200220022903e0073703a012200241e0106a200241f0116a200241a0126a1094012013200241e0106a41286a2903003703002014200241e0106a41206a2903003703002000200241e0106a41186a2903003703002015200241e0106a41106a2903003703002016200241e0106a41086a290300370300200220022903e0103703f011200241d8076a200410cd02024020022d00d8074101470d00200220022d00db073a0013200220022f00d9073b0011200241013a00102002280280122106024020024188126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024184126a2802002200450d002000410c6c450d00200610230b200228028c122106024020024194126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b20024190126a2802002200450d092000410c6c450d09200610230c090b200241a0126a41286a2200200241d8076a41306a2201290300370300200241a0126a41206a2206200241d8076a41286a2207290300370300200241a0126a41186a2208200241d8076a41206a2209290300370300200241a0126a41106a2203200241d8076a41186a220a290300370300200241a0126a41086a220b200241d8076a41106a2210290300370300200220022903e0073703a01220024190116a200241f0116a200241a0126a109401200241f0116a41286a20024190116a41286a290300370300200241f0116a41206a20024190116a41206a290300370300200241f0116a41186a221120024190116a41186a290300370300200241f0116a41106a20024190116a41106a290300370300200241f0116a41086a20024190116a41086a29030037030020022002290390113703f011200241d8076a200410ce0220022d00d8074101470d06200220022d00db073a0013200220022f00d9073b0011200241013a00102002280280122106024020112802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b024020024184126a2802002200450d002000410c6c450d00200610230b200228028c122106024020024194126a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b20024190126a2802002200450d082000410c6c450d08200610230c080b0b200241b80e6a200241cc0e6a290200370300200220022902c40e3703b00e0240024020022802b00b410b460d00200241003a00db07418102210120024181023b00d907200241013a00d8070c010b200241d8076a200241b40b6a10ab0220022d00d8074101470d0420022f00d90720022d00db074110747221010b200241013a0010200220013b0011200220014110763a001302402000450d002000410c6c21012009210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b02402006450d002006410c6c450d00200910230b02402008450d002008410c6c21012003210003400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b2007450d062007410c6c450d06200310230c060b200220022d00db073a0013200220022f00d9073b0011200241013a00100c060b200241d4006a4104360200200241a4046a41023602002002420237029404200241e8c1c600360290042002410436024c20024198c3c600360248200241003602dc072002419ca8c7003602d8072002200241c8006a3602a0042002200241d8076a36025020024190046a41f8c1c600103a000b4180b4c0004119419cb4c000102d000b200241c0116a41286a2201200241d8076a41306a290300370300200241c0116a41206a220a200241d8076a41286a220b290300370300200241c0116a41186a2210200241d8076a41206a2211290300370300200241c0116a41106a2212200241d8076a41186a2213290300370300200241c0116a41086a2214200241d8076a41106a2215290300370300200220022903e0073703c011200241a0126a41086a200241b00e6a41086a290300370300200241c4126a2008360200200241a0126a41206a2007360200200241a0126a41186a2000360200200241b4126a2006360200200220022903b00e3703a012200220053703c812200220033602bc12200220093602b012200b20012903003703002011200a2903003703002013201029030037030020152012290300370300200241d8076a41086a2014290300370300200220022903c0113703d807200241f0116a200241a0126a200241d8076a109401200241106a41086a20022903f011370300200241106a41106a200241f0116a41086a290300370300200241106a41186a200241f0116a41106a290300370300200241106a41206a200241f0116a41186a290300370300200241106a41286a200241f0116a41206a290300370300200241106a41306a200241f0116a41286a290300370300200241003a00100c020b2000200129030037030020062007290300370300200820092903003703002003200a290300370300200b2010290300370300200220022903e0073703a012200241c0116a200241f0116a200241a0126a109401200241106a41086a20022903c011370300200241106a41106a200241c0116a41086a290300370300200241106a41186a200241c0116a41106a290300370300200241106a41206a200241c0116a41186a290300370300200241106a41286a200241c0116a41206a290300370300200241106a41306a200241c0116a41286a290300370300200241003a00100c010b200241013a0010200220003b0011200220004110763a00130b200410b40220022d001021010b410110212200450d00200242013702e40a200220003602e00a02400240200141ff01714101470d00200041013a0000200241013602e80a200241106a410172200241e00a6a10810420022802e80a21000c010b200041003a0000200241013602e80a200241186a2903002105024020022802e40a2201417f6a41074b0d00200141017422064109200641094b1b22064100480d03024020012006460d0020002001200610252200450d050b200220063602e40a200220003602e00a0b20002005370001200241093602e80a200241286a2802002101200241306a2802002200200241e00a6a106102402000450d0020012000410c6c6a2104034020012802002109200141086a2802002200200241e00a6a10610240024020022802e40a220820022802e80a22066b2000490d0020022802e00a21070c010b200620006a22072006490d05200841017422032007200320074b1b22034100480d050240024020080d00024020030d00410121070c020b2003102122070d010c080b20022802e00a210720082003460d0020072008200310252207450d070b200220033602e40a200220073602e00a0b200720066a2009200010a1051a2002200620006a3602e80a2001410c6a22012004470d000b0b200241346a28020021012002413c6a2802002200200241e00a6a10610240024020000d0020022802e40a210920022802e80a21000c010b20012000410c6c6a2104034020012802002103200141086a2802002200200241e00a6a10610240024020022802e40a220720022802e80a22066b2000490d0020022802e00a2108200721090c010b200620006a22082006490d05200741017422092008200920084b1b22094100480d050240024020070d00024020090d00410121080c020b200910212208450d080c010b20022802e00a210820072009460d0020082007200910252208450d070b200220093602e40a200220083602e00a0b200820066a2003200010a1051a2002200620006a22003602e80a2001410c6a22012004470d000b0b200241206a290300210502400240200920006b4108490d0020022802e00a21010c010b200041086a22012000490d03200941017422062001200620014b1b22064100480d030240024020090d00024020060d00410121010c020b200610212201450d060c010b20022802e00a210120092006460d0020012009200610252201450d050b200220063602e40a200220013602e00a0b200120006a20053700002002200041086a22003602e80a200241c0006a2d00002106024020022802e40a2000470d00200041016a22072000490d03200041017422082007200820074b1b22074100480d030240024020000d0041002100024020070d00410121010c020b200710212201450d060c010b20002007460d0020012000200710252201450d050b200220073602e40a200220013602e00a0b200120006a20063a00002002200041016a22003602e80a0b2000ad42208620023502e00a842105024020022d00100d000240200241306a2802002201450d00200241286a28020021002001410c6c210103400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b02402002412c6a2802002200450d002000410c6c450d00200228022810230b02402002413c6a2802002201450d00200241346a28020021002001410c6c210103400240200041046a280200450d00200028020010230b2000410c6a2100200141746a22010d000b0b200241386a2802002200450d002000410c6c450d00200228023410230b200241d0126a240020050f0b1033000b102c000b102a000b2002419c046a4104360200200241f40a6a4102360200200242023702e40a200241e8c1c6003602e00a200241043602940420024198c3c600360290042002410036024c2002419ca8c700360248200220024190046a3602f00a2002200241c8006a36029804200241e00a6a41f8c1c600103a000ba5360a047f017e017f017e087f017e037f017e0d7f017e230022022103200241a0046b41607122022400024002402001450d00200220003602300c010b2002419ca8c7003602300b20022001360234200241a8026a200241306a109b03024002400240024002400240024020022802ac02450d00200241386a200241a8026a41f00010a1051a200241a8016a200241386a10bf022002280238200241c8006a20024188016a200241a8016a410010c2024100410028029cab472201410120011b36029cab470240200141014b0d000240024020010e020001000b410041e49fc00036028880404100419ca8c70036028480404100410236029cab470c010b0340410028029cab474101460d000b0b2002410020022802382201417f6a2200200020014b1b22043602b401101e4101470d01200241a8026a41186a22054200370300200241a8026a41106a22004200370300200241a8026a41086a22014200370300200242003703a8024180cdc200ad42808080808001842206100c220729000021082001200741086a290000370300200220083703a8022007102341c9a1c200ad4280808080e00184100c22092900002108200241e0016a41086a2207200941086a290000370300200220083703e00120091023200020022903e0012208370300200241c0036a41086a22092001290300370300200241c0036a41106a220a2008370300200241c0036a41186a220b2007290300370300200220022903a8023703c003200241286a200241c0036a412010cd010240200228022c410020022802281b220c20044d0d0041002107200241c0036a2100200241b8016a21010c060b200542003703002000420037030020014200370300200242003703a80241db97c700ad4280808080f00084100c220d29000021082001200d41086a290000370300200220083703a802200d102341bcbcc300ad4280808080c00184100c220d29000021082007200d41086a290000370300200220083703e001200d1023200020022903e001220837030020092001290300370300200a2008370300200b2007290300370300200220022903a8023703c003200241206a200241c0036a412010cd012002280224210e2002280220210f200542003703002000420037030020014200370300200242003703a8022006100c220529000021082001200541086a290000370300200220083703a8022005102341d7a1c200ad4280808080c00084100c220529000021082007200541086a290000370300200220083703e00120051023200020022903e001220837030020092001290300370300200a2008370300200b2007290300370300200220022903a8023703c003200241a8026a200241c0036a10ad0220022802a802211020022902ac022111200241a8026a41e9dabdf306108e0120022802a802210920022802ac02210a02400240024020022802b00222000d004101211241002113410021140c010b02400240024020004105742201410575220741ffffff3f712007470d0020014100480d0020010d01410121120c020b102c000b200110212212450d020b200920016a210b2000410574210520014105762113410021010340200920016a22002900002108200041086a2900002106200041106a2900002115201220016a220741186a200041186a290000370000200741106a2015370000200741086a2006370000200720083700002005200141206a2201470d000b200b20096b41606a41057641016a21140b0240200a41ffffff3f71450d00200910230b20144115490d0402404101450d0020144104744160712216417f4c0d000240201610212217450d00200241003602e801200242043703e001201241606a2118201241a07f6a211941042107410021014100211a2014211b0340201b210d4100211b4101210b0240200d417f6a2205450d00024002400240024002400240201220054105746a200d410574221c20126a41406a412010a3054100480d00200d417e6a210a2019201c6a21004100211b4100210903400240200a2009470d00200d210b0c080b200941016a2109200041206a2000412010a3052105200041606a21002005417f4a0d000b200941016a210b2009417f73200d6a21050c010b2019201c6a210002400340024020054101470d00410021050c020b2005417f6a2105200041206a2000412010a3052109200041606a210020094100480d000b0b200d2005490d01200d20144b0d02200d20056b220b410176220a450d002018201c6a2100201220054105746a21090340200241c0036a41186a221c200941186a220c290000370300200241c0036a41106a221d200941106a221e290000370300200241c0036a41086a221f200941086a221b290000370300200220092900003703c003200041086a22202900002108200041106a22212900002106200041186a2222290000211520092000290000370000200c2015370000201e2006370000201b20083700002022201c2903003700002021201d2903003700002020201f290300370000200020022903c003370000200041606a2100200941206a2109200a417f6a220a0d000b0b024020050d002005211b0c050b0240200b41094d0d002005211b0c050b200d20144b0d02200d20056b210a201220054105746a211c0340200d2005417f6a221b490d040240200d201b6b220b4102490d00201220054105746a22002012201b4105746a2205412010a305417f4a0d00200241a8026a41186a221f200541186a2209290000370300200241a8026a41106a2220200541106a220c290000370300200241a8026a41086a2221200541086a221d290000370300200220052900003703a80220052000290000370000201d200041086a290000370000200c200041106a2900003700002009200041186a2900003700004101211e0240200b4103490d00200541c0006a200241a8026a412010a305417f4a0d0041022109201c210002400340200041186a200041386a290000370000200041106a200041306a290000370000200041086a200041286a2900003700002000200041206a220c290000370000200a2009460d01200041c0006a211d2009211e200c2100200941016a2109201d200241a8026a412010a305417f4a0d020c000b0b2009211e0b2005201e4105746a220020022903a802370000200041186a201f290300370000200041106a2020290300370000200041086a20212903003700000b201b450d05201c41606a211c200a41016a210a201b2105200b410a4f0d050c000b0b2005200d41d089c7001044000b200d201441d089c7001043000b200d2005417f6a221b490d00200d201441e089c7001043000b201b200d41e089c7001044000b0240201a20022802e401470d00200241e0016a201a410110a50120022802e001210720022802e8012201211a0b2007201a4103746a2200200b3602042000201b3602002002200141016a22013602e8012001211a024020014102490d000240024003400240024002400240024020072001417f6a4103746a2200280200450d00200141037420076a220a41746a2802002205200028020422094b0d010b20014103490d022000280204210920072001417d6a221d4103746a28020421000c010b4102211a200141024d0d0620072001417d6a221d4103746a2802042200200920056a4d0d004103211a200141034d0d06200a41646a280200200020056a4b0d050b20002009490d010b2001417e6a211d0b02400240024002400240024002402001201d41016a221e4d0d002001201d4d0d012007201d41037422206a2201280204222120012802006a22012007201e41037422226a2200280200221f490d02200120144b0d032012201f4105746a221c2000280204220c41057422006a2109200141057421072001201f6b220a200c6b2201200c4f0d04201720092001410574220010a105220d20006a2105200c4101480d0520014101480d05201820076a21072009210103402007200141606a2209200541606a220a200a2009412010a305410048220b1b2200290000370000200741186a200041186a290000370000200741106a200041106a290000370000200741086a200041086a2900003700002005200a200b1b21050240201c20092001200b1b2201490d00200d21000c080b200741606a2107200d2100200d2005490d000c070b0b201e200141f089c7001030000b201d200141808ac7001030000b201f200141908ac7001044000b2001201441908ac7001043000b2017201c200010a105220d20006a21050240200c4101480d00200a200c4c0d00201220076a210b200d2100201c2101034020012009200020092000412010a305410048220a1b2207290000370000200141186a200741186a290000370000200141106a200741106a290000370000200141086a200741086a2900003700002000200041206a200a1b2100200141206a2101200941206a2009200a1b2209200b4f0d03200520004b0d000c030b0b201c2101200d21000c010b20092101200d21000b20012000200520006b41607110a1051a024020022802e8012201201d4d0d0020022802e001220720206a22002021200c6a3602042000201f3602002001201e4d0d02200720226a2200200041086a2001201e417f736a41037410a2051a20022001417f6a22013602e801200141014b0d010c030b0b201d200141a08ac7001030000b201e2001103b000b2001211a0b201b450d060c000b0b1033000b1032000b102a000b200241cc036a4104360200200241cc006a41023602002002420237023c200241e8c1c600360238200241043602c403200241b4c3c6003602c003200241003602e4012002419ca8c7003602e0012002200241c0036a3602482002200241e0016a3602c803200241386a41f8c1c600103a000b4100280298ab474105490d042002410f3602c4032002200241b4016a3602c003410028028880402101410028028480402100410028029cab472107200241e8026a41e902360200200241e0026a42df80808010370300200241dc026a41fca5c200360200200241d4026a4210370200200241d0026a41eca5c200360200200241c8026a4201370300200241b8026a4202370300200241a8026a41086a4108360200200241c4026a200241c0036a360200200241d4a5c2003602b402200241e4a5c2003602ac02200241053602a802200041a0a1c000200741024622071b200241a8026a200141b8a1c00020071b2802101102000c040b024020022802e40141ffffffff0171450d00200710230b2016450d01201710230c010b20144102490d0020122014417f6a22004105746a21054101210703400240024002400240201420002201417f6a2200490d00201420006b220a4102490d03201220014105746a2201201220004105746a2209412010a305417f4a0d03200241a8026a41186a220c200941186a220b290000370300200241a8026a41106a221d200941106a220d290000370300200241a8026a41086a221e200941086a221c290000370300200220092900003703a80220092001290000370000201c200141086a290000370000200d200141106a290000370000200b200141186a29000037000041012101200a4103490d02200941c0006a200241a8026a412010a305417f4a0d024100210a200521010340200141186a200141386a290000370000200141106a200141306a290000370000200141086a200141286a2900003700002001200141206a220d2900003700002007200a220b460d02200b417f6a210a200141c0006a211c200d2101201c200241a8026a412010a305417f4a0d020c000b0b2000201441c089c7001044000b4102200b6b21010b200920014105746a220120022903a802370000200141186a200c290300370000200141106a201d290300370000200141086a201e2903003700000b200541606a21052007417f6a210720000d000b0b200220043602d4012002200e4100200f1b22013602d001200220143602cc01200220133602c801200220123602c401200241003602c001200220043602dc03200220013602d803200220143602d403200220133602d003200220123602cc03200241003602c80320022010410120101b22073602c003200220073602b801200220072011420020101b2208422088a74105746a22013602c403200220013602bc012008a7210c200241c0036a2100200241b8016a21010b20024188026a41086a220a200141086a29020037030020024188026a41106a220b200141106a29020037030020024188026a41186a220d200141186a290200370300200241e0016a41086a221c200241a8026a41086a2209290200370300200241e0016a41106a221d200241a8026a41106a290200370300200241e0016a41186a221e200241a8026a41186a290200370300200241e0016a41206a221f200241a8026a41206a2802003602002002200129020037038802200220022902a8023703e001200241b8016a41206a2201200241c0036a41206a280200360200200241b8016a41186a221b200241c0036a41186a290200370300200241b8016a41106a2212200241c0036a41106a290200370300200241b8016a41086a2220200241c0036a41086a290200370300200220022902c0033703b8012009200c360200200220073602ac02200241013602a802200241b4026a2209200229038802370200200241bc026a2205200a290300370200200241c4026a220a200b290300370200200241cc026a200d290300370200200241003602d402200241d8026a20022903e001370300200241e0026a201c290300370300200241e8026a201d290300370300200241f0026a201e290300370300200241f8026a201f280200360200200241003602fc02200241a0036a200128020036020020024198036a201b29030037030020024190036a201229030037030020024188036a202029030037030020024180036a20022903b801370300200241dc026a2101200241fc026a211f200241d4026a211c200241e4026a210b200241ec026a210d41002107034002400240024002400240024002402007450d00200241186a201c10b0020240200228021822074108460d00200228021c211e0c020b024020022802d4022207450d00024020022802d80241ffffff3f71450d00200710230b20022802ec0241ffffff3f71450d0020022802e80210230b20012000290200370200200141086a200041086a290200370200200141106a200041106a290200370200200141186a200041186a2902003702002002200c3602d802200241003602d4020b200a2902002106200a20022903d80337020020052902002115200520022903d00337020020092902002111200920022903c803370200200241003602c00320022902ac022108200220022903c00322233702ac0202402008a72207450d0020022902cc02212320012011370200200b2015370200200d2006370200200220083702d402200220233702f4020c070b20022802fc02450d01200241106a201f10b0022002280214211e200228021021070b200741796a221d41014b0d030240201d0e020500050b20022802a802450d0220022802ac0221010c010b2023a721010b2001450d00024020022802b00241ffffff3f71450d00200110230b200241c4026a28020041ffffff3f71450d00200241c0026a28020010230b024020022802d4022201450d00024020022802d80241ffffff3f71450d00200110230b20022802ec0241ffffff3f71450d0020022802e80210230b20022802fc022201450d03024020024180036a28020041ffffff3f71450d00200110230b20024194036a28020041ffffff3f71450d0320024190036a28020010230c030b200220073602a8032002201e3602ac034100280298ab474104490d00200241153602bc032002410f3602b4032002200241a8036a3602b8032002200241b4016a3602b00341002802888040210741002802848040211d410028029cab47211e200241e00236028004200242df808080103703f803200241fca5c2003602f403200242103702ec03200241eca5c2003602e803200242023703e003200242023703d003200241c4a5c2003602cc03200241083602c803200241e4a5c2003602c403200241043602c003200741b8a1c000201e410246221e1b28021021072002200241b0036a3602dc03201d41a0a1c000201e1b200241c0036a20071102000b20022802d40221070c000b0b200241c0036a41186a4200370300200241c0036a41106a22074200370300200241c0036a41086a22014200370300200242003703c003418fcdc200ad4280808080f00084100c220029000021082001200041086a290000370300200220083703c0032000102341ccc5c000ad4280808080900284100c22002900002108200241e0016a41086a2209200041086a290000370300200220083703e00120001023200720022903e0012208370300200241a8026a41086a2001290300370300200241a8026a41106a2008370300200241a8026a41186a2009290300370300200220022903c0033703a802200241086a200241a8026a108802024020022802084101470d00200228020c2004470d00200241e0016a4100419c94c700ad42808080808003841014108b0102400240024020022802e0012201450d00200241e8016a2802004104490d004182ecc3002100200420012800002207490d014187ecc3002100200741056a20044f0d010b2002200436028802200220043602b801200241c0036a41086a200241e0016a41086a280200360200200220022903e0013703c003200241a8026a200241c0036a10860120022802ac0221014100419c94c700ad428080808080038420023502b00242208620022802a8022207ad84200241b8016aad4280808080c000841015210002402001450d00200710230b024020022802c0032201450d0020022802c403450d00200110230b20004101460d010c020b024020022802e401450d00200110230b20000d010b10fa040b20022802a8012109024020022802b0012201450d00200141246c21002009210103400240024020012d0000220741044b0d0002400240024020070e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b024020022802ac012201450d00200141246c450d00200910230b200228023c21090240200241386a410c6a2802002201450d00200141246c21002009210103400240024020012d0000220741044b0d0002400240024020070e050400010204040b2001410c6a280200450d03200141086a28020010230c030b2001410c6a280200450d02200141086a28020010230c020b2001410c6a280200450d01200141086a28020010230c010b200141086a280200450d00200141046a28020010230b200141246a21012000415c6a22000d000b0b0240200241c0006a2802002202450d00200241246c450d00200910230b2003240042010be36f0d027f017e087f017e017f027e037f027e0a7f027e0b7f037e1c7f230041d0066b22002400200041003602f004200042083703e8042000410036028005200042013703f804418fcdc200ad4280808080f00084100c22012900002102200041f8056a41086a2203200141086a290000370300200020023703f8052001102341bbacc300ad4280808080a00184100c22012900002102200041a8066a41086a2204200141086a290000370300200020023703a806200110230240024002400240024002400240412010212201450d00200120002903f805370000200120002903a806370010200141086a2003290300370000200141186a22052004290300370000412010212203450d0020032001290000370000200341186a2005290000370000200341106a200141106a290000370000200341086a200141086a290000370000200041b8056a41026a2204200041a0016a41026a2d00003a0000200020002f00a0013b01b805200041d8056a41106a42a0808080800437030041002106200041003a00f005200020013602e405200042a080808080043702dc05200020033602d805200041f3056a20042d00003a0000200020002f01b8053b00f105200041a0016a200041d8056a10d20141012107024002400240024020002802a0014101470d00200041a0016a410472210841012107410821094100210a034020004188056a41206a200841206a28020036020020004188056a41186a2201200841186a290200220237030020004188056a41106a2205200841106a290200220b37030020004188056a41086a220c200841086a290200220d37030020002008290200220e37038805200041f8056a41186a220f2002370300200041f8056a41106a2210200b370300200041f8056a41086a2211200d3703002000200e3703f805200041a0016a41186a22032001290300370300200041a0016a41106a22042005290300370300200041a0016a41086a2205200c29030037030020002000290388053703a001200041c0006a200041f8056a10d301200041c0006a41086a29030021022000290340210b41201021220c450d02200c20002903f805370000200c41186a200f290300370000200c41106a2010290300370000200c41086a2011290300370000200041a8066a41086a2005290300220d370300200041a8066a41106a2004290300220e370300200041a8066a41186a20032903002212370300200020002903a00122133703a806200320123703002004200e3703002005200d370300200020133703a0010240200a20002802ec04470d00200041e8046a200a4101109f0120002802e804210920002802f004210a0b2009200a4106746a220120023703082001200b370300200529030021022004290300210b2003290300210d20002903a001210e200141346a4281808080103702002001200c3602302001200e370310200141286a200d370300200141206a200b370300200141186a20023703002000200a41016a220a3602f0042003200f2903003703002004201029030037030020052011290300370300200020002903f8053703a0010240200620002802fc04470d00200041f8046a20064101109a0120002802f804210720002802800521060b200720064105746a220120002903a001370000200141186a2003290300370000200141106a2004290300370000200141086a20052903003700002000200641016a220636028005200041a0016a200041d8056a10d20120002802a0014101460d000b0b024020002802dc05450d0020002802d80510230b024020002802e805450d0020002802e40510230b418fcdc200ad4280808080f00084100c22012900002102200041f8056a41086a2203200141086a290000370300200020023703f8052001102341e2c4c000ad4280808080a00184100c22012900002102200041a8066a41086a2204200141086a290000370300200020023703a80620011023412010212201450d03200120002903f805370000200120002903a806370010200141086a2003290300370000200141186a22052004290300370000412010212203450d0320032001290000370000200341186a2005290000370000200341106a200141106a290000370000200341086a200141086a29000037000020004190016a41026a2205200041a0016a41026a2d00003a0000200020002f00a0013b019001200041a0016a41106a220442a08080808004370300200041003a00b801200020013602ac01200042a080808080043702a401200020033602a001200041bb016a20052d00003a0000200020002f0190013b00b901200041e8046a200041a0016a10d401200041a0016a41186a2206420037030020044200370300200041a0016a41086a22014200370300200042003703a001418fcdc200ad4280808080f000842202100c2205290000210b200041f8056a41086a2203200541086a2900003703002000200b3703f8052005102320012003290300370300200020002903f8053703a00141e4d8c100ad4280808080e00184100c220c290000210b200041a8066a41086a2205200c41086a2900003703002000200b3703a806200c1023200420002903a806220b37030020004188056a41086a2208200129030037030020004188056a41106a220a200b37030020004188056a41186a220f2005290300370300200020002903a00137038805200041386a20004188056a412010cd01200028023c211420002802382115200642003703002004420037030020014200370300200042003703a0012002100c220c29000021022003200c41086a290000370300200020023703f805200c102320012003290300370300200020002903f8053703a001418cd9c100ad4280808080d00284100c220329000021022005200341086a290000370300200020023703a80620031023200420002903a806220237030020082001290300370300200a2002370300200f2005290300370300200020002903a00137038805200041306a20004188056a412010cd01200028023421052000280230210c20002802fc04211620002802e804211720002802ec042118200028028005210120002802f00421192000410036027020004100360268201920016aad42e0007e2202422088a70d042002a72203417f4c0d044108210402402003450d00200310212204450d040b20054104200c1b221a41014b211b200041003602e005200020043602d8052000200341e0006e3602dc05200041003602b006200042083703a806200041a8066a41002001410574220541057510a90120002802b006211c02402001450d00200541606a410576211d20002802a806201c41d8006c6a210c200041d0016a2103200041c8016a210941002104200721010340200041b8056a41186a2206200141186a2208290000370300200041b8056a41106a220a200141106a220f290000370300200041b8056a41086a2210200141086a2211290000370300200020012900003703b80520004188056a41186a200829000037030020004188056a41106a200f29000037030020004188056a41086a20112900003703002000200129000037038805200041e8006a20004188056a200410d501200041a0016a41086a4200370300200041a0016a41106a4200370300200041a0016a41186a4200370300200041a0016a41206a420037030020094200370300200341186a2006290300370000200341106a200a290300370000200341086a2010290300370000200320002903b805370000200042003703a001200c200041a0016a41d00010a105220c41d0006a41003a0000200c41d8006a210c200141206a2101200441016a2104200541606a22050d000b201c201d6a41016a211c0b201a4101201b1b21012000201c3602b0060240201641ffffff3f71450d00200710230b200041f8056a41086a200041a8066a41086a2802002203360200200020002903a8063703f8050240024020032001490d00200041d8056a20002802e0052019410674220341067510960120002802d805210420002802e0052101200041b8016a200041c8066a360200200041b4016a200041f8056a3602002000201720036a3602ac01200020173602a801200020183602a401200020173602a0012000200041e8006a3602b00120004188056a41086a20013602002000200041e0056a36028c0520002004200141e0006c6a36028805200041a0016a20004188056a10d6012014410020151b2216ad42307e2202422088a70d062002a72203417f4c0d0620002802800621010240024020030d00410821070c010b200310212207450d060b200041003602a00620002007360298062000200341306e36029c062016412c6c2203417f4c0d060240024020030d00410421140c010b200310212214450d060b41002119200041003602582000201636025420002014360250410021152001201620012016491b221d0d010c030b024020002802fc052201450d00200141d8006c450d0020002802f80510230b024020002802e0052201450d00200141e0006c210320002802d80541346a21010340024020012802002204450d00200441c8006c450d002001417c6a28020010230b200141e0006a2101200341a07f6a22030d000b0b024020002802dc052201450d00200141e0006c450d0020002802d80510230b200041e8006a10be0102402019450d0020194106742103201741346a210103400240200128020041ffffff3f71450d002001417c6a28020010230b200141c0006a2101200341406a22030d000b0b410021070240201841ffffff1f710d000c040b201710230c030b200041a0016a41186a211a200041a0016a41106a2109200041a0016a41086a211b41002118034020002802f805210402402001450d00200141d8006c21032004210103400240200141d0006a2d00000d0002400240200141206a290300220b200141286a290300220d8450450d0042002102427f210b427f210d0c010b427f2102200041206a427f427f200b200d10a705200041206a41086a290300210d2000290320210b0b2001200b3703002001200d370308200141106a2002370300200141186a20023703000b200141d8006a2101200341a87f6a22030d000b0b0240024020002802e0052201450d0020002802d8052205200141e0006c6a210a0340024020052802382201450d00200141c8006c2104200528023041206a21010340200028028006220c200128020022034d0d04024020002802f805200341d8006c6a22032d00500d0020032903202202200341286a290300220b84500d00200041a0016a2005290310200541186a2903002005290300200541086a2903002002200b108201200320032903002202427f2002427f20002903a80120002802a001410146220c1b220d7c220b200b2002542206200341086a22082903002202427f2009290300200c1b220e7c2006ad7c220b200254200b2002511b220c1b200d200e845022061b37030020082002427f200b200c1b20061b3703000b200141c8006a2101200441b87f6a22040d000b0b200541e0006a2205200a470d000b20002802f80521040b201841016a211820002802800641d8006c2101200441a87f6a210303402001450d04200141a87f6a2101200341d8006a2103200441d0006a2105200441d8006a220c210420052d00000d000b02402001450d00200341186a2903002102200341106a290300210b200341086a290300210d2003290300210e4100210403400240200c20046a220541d0006a2d00000d00200541086a2903002212200d200e200d200b2002200529030022132012200541106a290300221e200541186a290300221f10800141ff017141014622061b210d2013200e20061b210e201f200220061b2102201e200b20061b210b2005200320061b21030b2001200441d8006a2204470d000b0b2003450d03200341013a0050024020002802e0052201450d0020002802d8052204200141e0006c6a21172003410c6a2110200341306a21110340200441e0006a211c024020042802382205450d0020042802302101200541c8006c210503400240024020102001460d00200141246a2011412010a3050d010b200441186a220c290300210e200341086a220629030021022004290310210d2003290300210b20032903102112200141186a200341186a2208290300370300200141106a20123703002001200242002002200e7d200b200d54ad7d2212200b200d7d2213200b56201220025620122002511b220a1b200d200e8450220f1b3703082001200b42002013200a1b200f1b370300200629030021022008290300210b2003290300210d20042003290310370320200441286a200b3703002004200d370310200c20023703000b200141c8006a2101200541b87f6a22050d000b0b201c2104201c2017470d000b0b201a200341c8006a2900003703002009200341c0006a290000370300201b200341386a290000370300200020032900303703a001200341286a29030021022003290320210b02402015200028029c06470d0020004198066a2015410110a401200028029806210720002802a00621150b2007201541306c6a220120002903a001370300201b290300210d2009290300210e201a29030021122001200b370320200141286a2002370300200141186a2012370300200141106a200e370300200141086a200d3703002000201541016a22153602a0062018201d4f0d0320002802800621010c010b0b2003200c41a4e4c4001030000b102a000b024020002802e0052201450d0020002802d8052210200141e0006c6a2116201541306c211c20004194056a221741186a2118201741106a211a201741086a211b4100211903402017201029003c3700002018201041d4006a290000370000201a201041cc006a290000370000201b201041c4006a29000037000020004100360290052000420237038805024020102802382201450d002010280230220a200141c8006c6a2111201041106a2109410021084102210f0340200a220641246a2104200641c8006a210a41002105201c210320072101024003402003450d01024020042001460d0020012004412010a305210c200541016a2105200341506a2103200141306a2101200c0d010b0b41ffff0321030240200920061081010d00410021032006290310201029032085200641186a290300201041286a29030085844200520d00200041a0016a42ffff0342002006290300200641086a2903002009290300200941086a290300108201427f20002903a80120002802a00141014622011b2202a7417f200242808004544100427f200041a0016a41106a29030020011b501b1b21030b200041a0016a41186a22042006413c6a290000370300200041a0016a41106a2205200641346a290000370300200041a0016a41086a220c2006412c6a290000370300200020062900243703a00102402008200028028c05470d0020004188056a2008410110af01200028028805210f20002802900521080b200f200841226c6a220120002903a001370100200c29030021022005290300210b2004290300210d200120033b0120200141186a200d370100200141106a200b370100200141086a20023701002000200841016a2208360290050b200a2011470d000b024002402008450d002008417f200841808004491b210c02400240200841226c22040d00410021030c010b200f41206a2101410021030340417f2003411074220320012f01004110746a220520052003491b4110762103200141226a21012004415e6a22040d000b0b200c41ffff03712201450d012003417f73220641ffff0371220320016e21050240200120034b0d00410021010340200f200120087041226c6a2203417f20032f0120411074220320054110746a220420042003491b4110763b0120200141016a22012008490d000b0b024020062005200c6c6b41ffff03712205450d00410021010340200f200120087041226c6a2203417f20032f01204110742203418080046a220420042003491b4110763b0120200141016a22012005490d000b0b200041a0016a41286a220320004188056a41286a280200360200200041a0016a41206a220420004188056a41206a290300370300200041a0016a41186a220520004188056a41186a290300370300200041a0016a41106a220c20004188056a41106a290300370300200041a0016a41086a220620004188056a41086a29030037030020002000290388053703a001024020192000280254470d00200041d0006a2019410110a60120002802502114200028025821190b20142019412c6c6a220120002903a001370200200141286a2003280200360200200141206a2004290300370200200141186a2005290300370200200141106a200c290300370200200141086a20062903003702002000201941016a22193602580c020b200028028c052201450d01200141226c450d01200f10230c010b41a0e5c400411941bce5c400102d000b201041e0006a22102016470d000b200028025421160b200028029c062105024020002802fc052201450d00200141d8006c450d0020002802f80510230b024020002802e0052201450d00200141e0006c210320002802d80541346a21010340024020012802002204450d00200441c8006c450d002001417c6a28020010230b200141e0006a2101200341a07f6a22030d000b0b024020002802dc052201450d00200141e0006c450d0020002802d80510230b200041e8006a10be010b2007450d06200041a0016a41186a220c4200370300200041a0016a41106a221d4200370300200041a0016a41086a22014200370300200042003703a001418fcdc200ad4280808080f00084220b100c220329000021022001200341086a290000370300200020023703a0012003102341a8c5c000ad4280808080a00284100c22042900002102200041a8066a41086a2203200441086a290000370300200020023703a80620041023201d20002903a806220237030020004188056a41086a2208200129030037030020004188056a41106a220a200237030020004188056a41186a220f2003290300370300200020002903a00137038805200041f8056a20004188056a412010890202400240024020002802f8052206450d00200020002902fc05220d370284012000200636028001200c4200370300201d420037030020014200370300200042003703a001200b100c220429000021022001200441086a290000370300200020023703a0012004102341bac5c000ad4280808080a00284100c220429000021022003200441086a290000370300200020023703a80620041023201d20002903a806370000201d41086a200329030037000020082001290300370300200a201d290300370300200f200c290300370300200020002903a00137038805200041f8056a20004188056a4120108902024020002802f8052201450d00200020002902fc05370294012000200136029001200041003602a801200042013703a001200041a0016a4100201541306c220441306d109a0120002802a801210902402004450d0020002802a00120094105746a2101200721030340200341086a2900002102200341106a290000210b2003290000210d200141186a200341186a290000370000200141106a200b370000200141086a20023700002001200d370000200941016a2109200141206a2101200341306a2103200441506a22040d000b0b200020093602a80102402005450d00200541306c450d00200710230b20002802a401212020002802a0012121200041003602b006200042043703a806200041a8066a41002019412c6c2203412c6d10a60120002802a806210420002802b0062101200020143602a8012000201420036a3602ac0120002016ad4220862014ad843703a0012000200041c8066a3602b00120004188056a41086a222220013602002000200041a8066a41086a222336028c05200020042001412c6c6a36028805200041a0016a20004188056a10a502200041e8046a41086a220120002802b006360200200020002903a8063703e804200041e8046a10b9042001280200210120002802ec04212420002802e80421252000410036028005200042043703f804200041f8046a41002001412c6c2203412c6d10a601202520036a21192000280280052107024020010d002025210f0c030b20002802f8042007412c6c6a2108200041d8056a41086a2117200041d8056a41106a2116200041d8056a41186a21182025210f0340200f220128020821042001280204211c2017200141146a29020037030020162001411c6a2902003703002018200141246a2902003703002000200129020c3703d8052001412c6a210f20012802002210450d03200041f8056a41186a221a2018290300370300200041f8056a41106a221b2016290300370300200041f8056a41086a22142017290300370300200020002903d8053703f8052010200441306c22036a210a0240024020030d00420021024200210b0c010b201041206a2101420021024200210b0340200141086a290300200b7c2001290300220b20027c2202200b54ad7c210b200141306a2101200341506a22030d000b0b024002400240200a2010460d00200441306c2103201021010340200141286a290300210d200141206a290300210e200041b8056a41186a2204200141186a290000370300200041b8056a41106a2205200141106a290000370300200041b8056a41086a220c200141086a290000370300200020012900003703b805200e200d2002200b109805220641ffff03710d02200141306a2101200341506a22030d000b0b4200210d41002101410221110240201c450d00201c41306c450d00201010234200210d0b42002112410021060c010b2023200c290300370300200041a8066a41106a22152005290300370300200041a8066a41186a22262004290300370300200020002903b805220d370388052000200d3703a806412210212211450d06201120002903a806370100201120063b0120201141186a2026290300370100201141106a2015290300370100201141086a2023290300370100200042818080801037029c0620002011360298062006ad210d0240024020034130470d00200d42ffff0383210d42002112410121060c010b200141306a2126200a41506a2127200d42ffff0383210d42002112410121060340200d21132026210102400340200141286a290300210d200141206a290300210e2004200141186a2900003703002005200141106a290000370300200c200141086a290000370300200020012900003703b805200e200d2002200b109805220341ffff03710d01200a200141306a2201470d000b2013210d0c020b2022200c290300220d37030020004188056a41106a2005290300220e37030020004188056a41186a2004290300221e370300200020002903b805221f37038805200041a0016a41186a2228201e370300200041a0016a41106a2229200e370300200041a0016a41086a222a200d3703002000201f3703a00120132003ad42ffff03837c220d201354ad210e02402006200028029c06470d0020004198066a2006410110af0120002802980621110b200141306a21262012200e7c21122011200641226c6a221520002903a001370100202a290300210e202929030021132028290300211e201520033b0120201541186a201e370100201541106a2013370100201541086a200e3701002000200641016a22063602a00620272001470d000b0b0240201c450d00201c41306c450d00201010230b200028029c0621010b0240024042ffff03200d7d220b42ffff035642002012200d42ffff0356ad7c7d220242005220025022031b4101470d00200d4281807c7c2202200d562012200d42ffff0354ad7d220b201256200d42feff03561b0d012006450d01200641226c20116a417e6a2203410020032f010041107422032002a7417f200242808004544100200b501b1b4110746b2204200420034b1b4110763b01000c010b2006450d00200641226c20116a417e6a2204417f20042f01004110742204200ba7417f200b4280800454410020031b1b4110746a220320032004491b4110763b01000b200041a0016a41186a2203201a290300370300200041a0016a41106a2204201b290300370300200041a0016a41086a22052014290300370300200020002903f8053703a001200820013602042008200636020820082011360200200820002903a00137020c200841146a20052903003702002008411c6a2004290300370200200841246a2003290300370200200741016a21072008412c6a2108200f2019470d000b20002007360280050c030b200d42ffffff3f83500d00200610230b02402005450d00200541306c450d00200710230b02402019450d002019412c6c21032014210103400240200141046a2802002204450d00200441226c450d00200128020010230b2001412c6a2101200341546a22030d000b0b2016450d072016412c6c450d07201410230c070b2000200736028005200f2019460d000340200f2201412c6a210f0240200141046a2802002203450d00200341306c450d00200128020010230b2019200f470d000b0b02402024450d002024412c6c450d00202510230b2007ad422c7e2202422088a70d012002a72201417f4c0d0120002802fc04211720002802f80421190240024020010d00410421030c010b200110212203450d010b200041003602b006200020033602a80620002001412c6e3602ac06200041a8066a4100200710a60120002802b00621010240024020070d0020002802a806211c0c010b20192007412c6c6a211120002802a806221c2001412c6c6a210620012007410274417c6a4102766a2116200041ac016a2108200041b8056a41186a210a200041b8056a41106a210f200041b8056a41086a21102019210c0340200a200c41246a290000370300200f200c411c6a2900003703002010200c41146a2900003703002000200c29000c3703b805200c2802082203ad42227e2202422088a70d032002a72204417f4c0d03200c28020021010240024020040d00410221050c010b200410212205450d030b200c412c6a210c200041003602900520002005360288052000200441226e36028c0520004188056a4100200310af01200028029005210402402003450d00200341226c2105200028028805200441226c6a21030340200141086a2901002102200141106a290100210b200141186a290100210d2001290100210e200341206a200141206a2f01003b0100200341186a200d370100200341106a200b370100200341086a20023701002003200e370100200341226a2103200441016a2104200141226a21012005415e6a22050d000b0b200041a0016a41086a22012004360200200020002903880522023703a001200841186a200a290300370000200841106a200f290300370000200841086a2010290300370000200820002903b805370000200641286a200041a0016a41286a280200360200200641206a200041a0016a41206a290300370200200641186a200041a0016a41186a290300370200200641106a200041a0016a41106a290300370200200641086a2001290300370200200620023702002006412c6a2106200c2011470d000b201641016a21010b20003502ac06210241002103200041003602b006200042043703a806200041a8066a41002001412c6c2204412c6d10a60120002802a806210520002802b00621012000201c3602a8012000201c20046a3602ac0120002002422086201cad843703a0012000200041c8066a3602b00120004188056a41086a20013602002000200041a8066a41086a220436028c05200020052001412c6c6a36028805200041a0016a20004188056a10a50220002802ac062110200041a0016a2021200920002802a806221c20002802b006221110d8012004200041a0016a41086a280200360200200020002903a00122023703a8060240024002402002a7220a450d00024020002802ac062204450d0020042101200a2103034020032802c80521032001417f6a22010d000b200a21010340200120012f01064102746a41c8056a28020021012004417f6a22040d000b200041a0016a21040c020b200041a0016a2104200a2103200a21010c010b200041003602a401200041a0016a21040c010b200020013602a401200041ac016a20012f0106360200200041003602a0012000200041a8066a3602a801200041a8066a21010b20004188056a41086a200441086a290200220237030020002004290200220b3703880520002802b006210f200041ac016a4100360200200041b8016a2002370300200020013602a801200020033602a401200041003602a0012000200b3703b0012000200f3602c00102400240200f0d00427f2112420021134200210d4200211e4200211f427f210e0c010b2000200f417f6a3602c001200041a0016a410020031b220c2802002104200c28020821060240024002400240200c28020c2205200c28020422012f01064f0d00200121030c010b034020012802002203450d02200441016a210420012f0104210520032101200520032f01064f0d000b0b2005ad4220862006ad8421020c010b2006ad2102410021030b2002422088a7220641016a21052002a721080240024020040d00200321010c010b200320054102746a41c8056a2802002101410021052004417f6a2204450d00034020012802c80521012004417f6a22040d000b0b200c200536020c200c2008360208200c2001360204200c4100360200200320064105746a41e8026a2101427f2112427f210e4200211e4200211f420021134200210d03402000200141086a290300220b420020012903002202420010a605200041106a200242002002420010a605427f200d427f200041106a41086a290300222b2000290300222c202c7c7c222c200b2000290308222d84202d84420052202c202b547222011b7c2013427f200029031020011b7c222b2013542201ad7c221320012013200d542013200d511b22011b210d427f202b20011b2113200b200e2002201254200b200e54200b200e511b22011b210e2002201220011b2112200b201f7c2002201e7c221e200254ad7c211f20002802c0012201450d0120002001417f6a3602c001200041a0016a410020002802a4011b220c2802002104200c2802082106024002400240200c28020c2205200c28020422012f01064f0d00200121030c010b0240034020012802002203450d01200441016a210420012f0104210520032101200520032f0106490d020c000b0b2006ad2102410021030c010b2005ad4220862006ad8421020b2002422088a7220641016a21052002a721080240024020040d00200321010c010b200320054102746a41c8056a2802002101410021052004417f6a2204450d00034020012802c80521012004417f6a22040d000b0b200c200536020c200c2008360208200c2001360204200c4100360200200320064105746a41e8026a21010c000b0b02400240200a450d000240024020002802ac0622030d00200a21010c010b20032101200a2104034020042802c80521042001417f6a22010d000b200a21010340200120012f01064102746a41c8056a28020021012003417f6a22030d000b2004210a0b200041bc016a20012f0106360200200041b8016a4100360200200041b4016a2001360200200041003602b001200042003703a8012000200a3602a401200041003602a0010c010b4100210f200041b4016a4100360200200041003602a4010b2000200f3602c001200041a0016a10a60202402011450d002011412c6c2103201c210103400240200141046a2802002204450d00200441306c450d00200128020010230b2001412c6a2101200341546a22030d000b0b02402010450d002010412c6c450d00201c10230b20002007360290052000201736028c052000201936028805200041a0016a20004188056a20004190016a20004180016a108402024020002d00a0014101470d00202041ffffff3f71450d05202110230c050b200920096a22012009490d012001417f4c0d01200041e0026a280200212e200041dc026a280200210a200041d8026a2802002124200041d4026a280200212f200041d0026a2802002126200041cc026a2802002129200041c8026a2802002130200041c4026a280200210f200041c0026a2802002131200041bc026a2802002132200041b8026a2802002110200041b4026a2802002133200041b0026a2802002134200041ac026a2802002111200041a8026a2802002135200041a4026a2802002136200041a0026a28020021072000419c026a280200213720004198026a280200213820004194026a280200211c20004190026a28020021392000418c026a280200213a20004188026a280200211920004184026a280200213b20004180026a280200213c200041fc016a2802002117200041f8016a280200213d200041f4016a280200213e200041f0016a2802002123200041ec016a280200212a200041e8016a280200213f200041e4016a2802002116200041e0016a2802002140200041dc016a2802002141200041d8016a2802002118200041d4016a2802002142200041d0016a2802002143200041cc016a280200211a200041c8016a2802002144200041c4016a2802002145200041c0016a2802002127200041bc016a2802002125200041b8016a2802002146200041b4016a280200211b200041b0016a2802002147200041ac016a2802002148200041a8016a280200212820002802a40121220240024020010d00410221080c010b200110212208450d010b200041003602900520002008360288052000200141017636028c052009450d02202120094105746a2149200028028801220941057421142000280280012115410021062021210c0340200c41086a2900002102200c41106a290000210b200c290000212b200041a0016a41186a200c41186a290000370300200041a0016a41106a200b370300200041a0016a41086a20023703002000202b3703a0012009450d04200c41206a210c41002103201421042015210102400340200041a0016a2001460d0120032001200041a0016a412010a30522054100476a21032005450d01200141206a2101200441606a22040d000c060b0b200341ffff034b0d0402402006200028028c05470d0020004188056a20064101109c01200028028805210820002802900521060b200820064101746a20033b01002000200641016a220636029005200c2049470d000c030b0b1033000b1032000b0240202041ffffff3f71450d00202110230b200041f6006a20004190056a280200360100200020002903880537016e024020002802940141ffffff3f71450d0020002802900110230b024020002802840141ffffff3f71450d0020002802800110230b200041d0006a41106a200041e8006a41106a2f01003b0100200041d0006a41086a200041e8006a41086a29010037030020002000290168370350200041f8056a41086a2205200041de006a280100360200200020002901563703f805200041a0016a41186a220c4200370300200041a0016a41106a22014200370300200041a0016a41086a22034200370300200042003703a001418fcdc200ad4280808080f00084100c220429000021022003200441086a290000370300200020023703a0012004102341b8dbc100ad4280808080900184100c22042900002102200041a8066a41086a2206200441086a290000370300200020023703a80620041023201d20002903a806370000201d41086a200629030037000020004188056a41086a2204200329030037030020004188056a41106a2203200129030037030020004188056a41186a2206200c290300370300200020002903a00137038805200041a0016a20004188056a10ba012001280200210120002903a0012102200041ab016a2005280200360000200020002903f8053700a301200020002900a0013703a8062000200041a7016a2900003700af06200041c0046a200d370300200041b8046a2013370300200041b0046a201f370300200041a8046a201e370300200041a0046a200e37030020004198046a2012370300200041c0026a41183a0000200041c8026a20002900af063700002000418c046a202e36020020004188046a200a36020020004184046a202436020020004180046a202f360200200041fc036a2026360200200041f8036a2029360200200041f4036a2030360200200041f0036a200f360200200041ec036a2031360200200041e8036a2032360200200041e4036a2010360200200041e0036a2033360200200041dc036a2034360200200041d8036a2011360200200041d4036a2035360200200041d0036a2036360200200041cc036a2007360200200041c8036a2037360200200041c4036a2038360200200041c0036a201c360200200041bc036a2039360200200041b8036a203a360200200041b4036a2019360200200041b0036a203b360200200041ac036a203c360200200041a8036a2017360200200041a4036a203d360200200041a0036a203e3602002000419c036a202336020020004198036a202a36020020004194036a203f36020020004190036a20163602002000418c036a204036020020004188036a204136020020004184036a201836020020004180036a2042360200200041fc026a2043360200200041f8026a201a360200200041f4026a2044360200200041f0026a2045360200200041ec026a2027360200200041e8026a2025360200200041e4026a2046360200200041e0026a201b360200200041dc026a2047360200200041d8026a2048360200200041d4026a2028360200200041d0026a2022360200200042023703880220004190046a4100200120024202511b360200200041063602b802200020002903a8063700c102200041e0046a2006290300370300200041d8046a2003290300370300200041d0046a2004290300370300200041c8046a2000290388053703002000200041a0016a3602d80520004188056a200041d8056a10b302200028028805200028028c052000280290051089011a200041b8026a10b4020c030b0240202041ffffff3f71450d00202110230b0240200028028c0541808080807872418080808078460d00200810230b0240202841ffffffff0171450d00202210230b0240201b450d00201b410c6c450d00204710230b0240202741ffffffff0071450d00202510230b0240201a450d00201a41146c450d00204410230b02402018450d00201841186c450d00204210230b02402016450d002016411c6c450d00204010230b0240202341ffffff3f71450d00202a10230b02402017450d00201741246c450d00203d10230b02402019450d00201941286c450d00203b10230b0240201c450d00201c412c6c450d00203910230b02402007450d00200741306c450d00203710230b02402011450d00201141346c450d00203510230b02402010450d00201041386c450d00203310230b0240200f450d00200f413c6c450d00203110230b0240202641ffffff1f71450d00202910230b200a450d00200a41c4006c450d00202410230b024020002802940141ffffff3f71450d0020002802900110230b20002802840141ffffff3f71450d0020002802800110230b200041d0006a41106a200041e8006a41106a2f01003b01000b200041d0066a24000ba90504047f017e057f017e230041d0006b22022400200241206a41186a4200370300200241206a41106a22034200370300200241206a41086a220442003703002002420037032041b0dfc300ad4280808080a00184100c220529000021062004200541086a290000370300200220063703202005102341bcbac500ad4280808080b00184100c22052900002106200241c0006a41086a2207200541086a2900003703002002200637034020051023200320022903402206370300200241086a2004290300370300200241106a2006370300200241186a200729030037030020022002290320370300200241206a200210ad02024020022902244200200228022022051b2206422088a722044105744104722203417f4c0d000240200310212207450d002005410120051b21082002410036022820022003360224200220073602202004200241206a10610240024020040d0020022802282103200228022021090c010b2004410574210a2002280220210920022802242107200228022821032008210b0340200b2104024002402007200322056b4120490d00200541206a21030c010b024002400240200541206a22032005490d002007410174220b2003200b20034b1b220b4100480d000240024020070d000240200b0d00410121090c020b200b102121090c040b2007200b470d020b200b21070c030b102c000b20092007200b102521090b200b210720090d00102a000b200441206a210b200920056a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a290000370000200a41606a220a0d000b2002200736022420022003360228200220093602200b2003ad4220862009ad84210c0240200642ffffff3f83500d00200810230b200241d0006a2400200c0f0b1033000b1032000bbe05020c7f017e230041306b22022400200210c203024002400240024002400240200228020822034103744104722204417f4c0d002002280204210520022802002106200410212207450d012002410036020820022004360204200220073602002003200210612003450d02200341037421082006210303400240024020032802004101460d0002400240200228020420022802082204460d00200228020021070c010b200441016a22072004490d07200441017422092007200920074b1b22094100480d070240024020040d0041002104024020090d00410121070c020b2009102122070d010c0b0b2002280200210720042009460d0020072004200910252207450d0a0b20022009360204200220073602000b200720046a41003a0000200441016a21040c010b024002402002280204220720022802082204460d00200228020021090c010b200441016a22072004490d06200441017422092007200920074b1b22074100480d060240024020040d0041002104024020070d00410121090c020b200710212209450d0a0c010b2002280200210920042007460d0020092004200710252209450d090b20022007360204200220093602000b200920046a41013a00002002200441016a220a360208200341046a280200210b02402007200a6b41034b0d00200a41046a220c200a490d062007410174220d200c200d200c4b1b220c4100480d060240024020070d000240200c0d00410121090c020b200c10212209450d0a0c010b2007200c460d0020092007200c10252209450d090b2002200c360204200220093602000b2009200a6a200b360000200441056a21040b200341086a210320022004360208200841786a22080d000c050b0b1032000b1033000b200228020821040c010b102c000b2004ad422086200235020084210e0240200541ffffffff0171450d00200610230b200241306a2400200e0f0b102a000bc80204047f017e017f017e230041d0006b22022400200241206a41186a4200370300200241206a41106a22034200370300200241206a41086a22044200370300200242003703204196adc300ad4280808080900184100c220529000021062004200541086a290000370300200220063703202005102341bce0c300ad4280808080e00084100c22052900002106200241c0006a41086a2207200541086a2900003703002002200637034020051023200320022903402206370300200241086a2004290300370300200241106a2006370300200241186a200729030037030020022002290320370300200241206a2002109103200241206a20022802202204410420041b22052002290224420020041b2206422088a710d3022002350228422086200235022084210802402006a72204450d002004412c6c450d00200510230b200241d0006a240020080b3f01017f0240410410212202450d002002418080800536000020024104410810252202450d0020024180a0013600042002ad42808080808001840f0b102a000bfd0503027f037e047f23004190016b2202240002400240024020014104490d0020022000419ca8c70020011b280000220110c303200228020022000d01410021000c020b2002411c6a4104360200200241c4006a410236020020024202370234200241e8c1c60036023020024104360214200241ccc3c60036021020024100360284012002419ca8c700360280012002200241106a360240200220024180016a360218200241306a41f8c1c600103a000b2002200136020c200241106a2002410c6a10af0220024180016a200241106a109702200241306a200228028001220320022802880110980220022903304201512101200241c0006a2903002104200229033821050240200228028401450d00200310230b2004420020011b21062005420020011b2104200241086a2802002103200228020421070b024002400240410110212201450d0020024201370234200220013602300240024020000d0041002103200141003a0000410121080c010b200141013a0000200241013602382003200241306a10610240024020022802342209200228023822086b2003490d00200228023021012009210a0c010b200820036a22012008490d032009410174220a2001200a20014b1b220a4100480d030240024020090d000240200a0d00410121010c020b200a102122010d010c060b200228023021012009200a460d0020012009200a10252201450d050b2002200a360234200220013602300b200120086a2000200310a1051a2002200820036a220336023802400240200a20036b4110490d00200341106a21080c010b200341106a22082003490d03200a41017422092008200920084b1b22094100480d0302400240200a0d00024020090d00410121010c020b200910212201450d060c010b200a2009460d002001200a200910252201450d050b20022009360234200220013602300b200120036a2203200637000820032004370000200021030b2008ad4220862001ad84210402402000450d002007450d00200310230b20024190016a240020040f0b1033000b102c000b102a000bd10603017f017e057f230041d0006b22022400024002400240024002400240024020014104490d002000419ca8c70020011b280000210041b0dfc300ad4280808080a00184100c22012900002103200241186a41086a200141086a290000370300200220033703182001102341c4a1c300ad4280808080c00084100c22012900002103200241286a41086a200141086a2900003703002002200337032820011023200220003602442002200241c4006aad4280808080c00084100d2201290000370348200110232002410c6a200241c4006a41046a3602002002200241c8006a41086a3602042002200241c4006a3602082002200241c8006a360200200241003a0010200241386a200210652002280240220441206a22004100480d0120022802382105024002402000450d00200010212201450d042000410f4d0d01200021060c060b200041017422014110200141104b1b2206102122010d050c070b200041017422064110200641104b1b220641004e0d030c050b200241346a4104360200200241146a410236020020024202370204200241e8c1c6003602002002410436022c200241ecc3c6003602282002410036021c2002419ca8c7003602182002200241286a3602102002200241186a360230200241f8c1c600103a000b1032000b1033000b20002006460d0020012000200610252201450d020b20012002290318370000200141086a200241186a41086a2903003700000240024020064170714110460d00200621070c010b200641017422074120200741204b1b22074100480d0120062007460d0020012006200710252201450d020b20012002290328370010200141186a200241286a41086a2903003700000240200741606a20044f0d00200441206a22062004490d01200741017422082006200820064b1b22064100480d0120072006460d0020012007200610252201450d020b200141206a2005200410a1051a0240200228023c450d00200510230b20022001200010b70302400240200228020022000d0041002100200241003602280c010b20022002290204220337022c200220003602282003a721060b200110232002200241286a1086012002350208422086200235020084210302402000450d002006450d00200010230b200241d0006a240020030f0b102c000b102a000b8f1907097f017e057f017e027f027e047f230041f0116b22022400024002402001450d00200220003602000c010b2002419ca8c7003602000b20022001360204200241c8036a200210b1040240024020022802c8032203450d002003200241c8036a41086a280200220441c8036c6a210520022802cc032106024002400240024020040d00200321070c010b200241c8036a4198016a2108200241f00a6a4198016a2109200241c8036a41f0006a210a200321070340200241e0026a200741e80010a1051a2007290368210b200241086a200741f0006a41d80210a1051a200741c8036a2107200b4203510d01200241c8036a200241e0026a41e80010a1051a2002200b3703b004200a200241086a41d80210a1051a2002200241c8036a3602f00a200241e00a6a200241f00a6a10b302200220022802e80a3602dc0a200220022802e00a220c3602d80a20024190076a200241d80a6a10d3030240024020022903f8074203520d00024020022802e40a450d00200c10230b200810b4020c010b200241f00a6a20024190076a41c80310a1051a410121004100210d024020022802880c2201410d470d00200228028c0c4101470d0020022802900c210e20022802940c210f0240024020022802980c22104188026c22010d004108210d420021110c010b20014188026dad42f0017e220b422088a70d06200ba722004100480d060240024020000d004108210d0c010b20001021220d450d090b200041f0016ead21110b200e20016a21124100211302400240024020100d00200e21010c010b4200210b200e2101200d21000340200141086a2903002114200141106a280200211020012903002115200241b80e6a200141146a41dc0110a1051a024020100d0020014188026a21010c020b20014184026a2802002116200141fc016a2802002117200141f4016a2802002118200141f0016a280200211920024194106a200241b80e6a41dc0110a1051a02402018450d00201841c1006c450d00201910230b02402016450d00201710230b2000201537030020002014370308200041106a2010360200200041146a20024194106a41dc0110a1051a200041f0016a2100200b4280808080107c210b201341016a211320014188026a22012012470d000b2011200b8421140c010b20112013ad42208684211420012012460d000340200110a203201220014188026a2201470d000b0b0240200f450d00200f4188026c450d00200e10230b4100210020022802880c21010b024002402001410d470d000240200228028c0c4101470d002000450d02024020022802980c2200450d0020022802900c210120004188026c21000340200110a20320014188026a2101200041f87d6a22000d000b0b20022802940c2201450d0220014188026c450d0220022802900c10230c020b0240200228029c0c2200450d0020022802940c21012000410c6c210003400240200141046a280200450d00200128020010230b2001410c6a2101200041746a22000d000b0b20022802980c2201450d012001410c6c450d0120022802940c10230c010b200910b4020b024020022802e40a450d00200c10230b200810b402200d0d030b20072005470d000b200521070b4100210d0b024020052007460d002003200441c8036c6a2101034020074198016a109e032001200741c8036a2207470d000b0b02402006450d00200641c8036c450d00200310230b0240024002400240200d0d00410121010c010b2014422088a741f0016c4105722201417f4c0d010b200110212200450d01200241003602f80a200220013602f40a200220003602f00a02400240200d0d00200041003a0000200241013602f80a0c010b200041013a0000200241013602f80a2014422088a72201200241f00a6a10612001450d00200141f0016c2105410021160340200d20166a220141c0006a28020021120240024020022802f40a220020022802f80a22186b4104490d0020022802f00a2107200021100c010b201841046a22072018490d05200041017422102007201020074b1b22104100480d050240024020000d00024020100d00410121070c020b2010102122070d010c090b20022802f00a210720002010460d0020072000201010252207450d080b200220103602f40a200220073602f00a0b200720186a20123600002002201841046a22123602f80a412010212200450d03200041186a2213200141e8006a290000370000200041106a2217200141e0006a290000370000200041086a2219200141d8006a2900003700002000200141d0006a29000037000002400240201020126b4120490d00201841246a21180c010b201241206a22182012490d052010410174220c2018200c20184b1b220c4100480d050240024020100d000240200c0d00410121070c020b200c10212207450d090c010b2010200c460d0020072010200c10252207450d080b2002200c3602f40a200220073602f00a0b200720126a22072000290000370000200741186a2013290000370000200741106a2017290000370000200741086a2019290000370000200220183602f80a20001023200141c4006a2802002113200141cc006a2802002207200241f00a6a10610240024020022802f40a221220022802f80a22186b2007490d0020022802f00a2100201221100c010b201820076a22002018490d05201241017422102000201020004b1b22104100480d050240024020120d00024020100d00410121000c020b201010212200450d090c010b20022802f00a210020122010460d0020002012201010252200450d080b200220103602f40a200220003602f00a0b200020186a2013200710a1051a2002201820076a22073602f80a02400240201020076b411f4d0d00201021180c010b200741206a22182007490d05201041017422122018201220184b1b22184100480d050240024020100d00024020180d00410121000c020b201810212200450d090c010b20102018460d0020002010201810252200450d080b200220183602f40a200220003602f00a0b200020076a2210200141f0006a290000370000201041186a20014188016a290000370000201041106a20014180016a290000370000201041086a200141f8006a2900003700002002200741206a22133602f80a02400240201820136b41c000490d00200741e0006a2110201821120c010b201341c0006a22102013490d05201841017422072010200720104b1b22124100480d050240024020180d00024020120d00410121000c020b201210212200450d090c010b20182012460d0020002018201210252200450d080b200220123602f40a200220003602f00a0b200020136a220720014190016a290000370000200741386a200141c8016a290000370000200741306a200141c0016a290000370000200741286a200141b8016a290000370000200741206a200141b0016a290000370000200741186a200141a8016a290000370000200741106a200141a0016a290000370000200741086a20014198016a290000370000200220103602f80a412010212207450d03200741186a2218200141e8016a290000370000200741106a2213200141e0016a290000370000200741086a2217200141d8016a2900003700002007200141d0016a2900003700000240201220106b411f4b0d00201041206a22192010490d052012410174220c2019200c20194b1b22194100480d050240024020120d00024020190d00410121000c020b201910212200450d090c010b20122019460d0020002012201910252200450d080b200220193602f40a200220003602f00a0b200020106a22002007290000370000200041186a2018290000370000200041106a2013290000370000200041086a20172900003700002002201041206a3602f80a200710232001200241f00a6a10e1042005201641f0016a2216470d000b0b20023502f80a42208620023502f00a84210b0240200d450d0002402014422088a72201450d00200d200141f0016c6a2110200d210703400240200741c8006a280200450d00200728024410230b0240200741186a2802002200450d00200728021021012000410474210003400240200141046a280200450d00200128020010230b200141106a2101200041706a22000d000b0b200741f0016a21010240200741146a28020041ffffffff0071450d00200728021010230b2001210720012010470d000b0b2014a72201450d00200141f0016c450d00200d10230b200241f0116a2400200b0f0b1032000b1033000b102c000b2002419c076a4104360200200241840b6a4102360200200242023702f40a200241e8c1c6003602f00a200241043602940720024184c4c600360290072002410036020c2002419ca8c700360208200220024190076a3602800b2002200241086a36029807200241f00a6a41f8c1c600103a000b102a000bf20603057f017e067f23004190016b22022400200241c8006a41186a22034200370300200241c8006a41106a22044200370300200241c8006a41086a220542003703002002420037034841db97c700ad4280808080f00084100c220629000021072005200641086a290000370300200220073703482006102341bcbcc300ad4280808080c00184100c22082900002107200241e8006a41086a2206200841086a2900003703002002200737036820081023200420022903682207370300200241286a41086a22082005290300370300200241286a41106a22092007370300200241286a41186a220a2006290300370300200220022903483703282002200241286a412010cd012002280204210b2002280200210c2003420037030020044200370300200542003703002002420037034841e4dec400ad4280808080e00084100c220d29000021072005200d41086a29000037030020022007370348200d102341f9dec400ad4280808080a00184100c220d29000021072006200d41086a29000037030020022007370368200d10232004200229036822073703002008200529030037030020092007370300200a200629030037030020022002290348370328200241e8006a200241286a412010e10120022d00682106200320024181016a2900003703002004200241f9006a2900003703002005200241f1006a290000370300200220022900693703480240024020064101460d00200a42003703002009420037030020084200370300200242003703280c010b200a20032903003703002009200429030037030020082005290300370300200220022903483703280b200241086a41086a200241286a41086a290300370300200241086a41106a200241286a41106a290300370300200241086a41186a200241286a41186a29030037030020022002290328370308024002400240410410212204450d002004200b4100200c1b360000412010212205450d0120052002290308370000200541186a2206200241086a41186a290300370000200541106a2203200241086a41106a290300370000200541086a2208200241086a41086a290300370000200441044124102522040d020b102a000b1033000b200420052900003700042004411c6a2006290000370000200441146a20032900003700002004410c6a20082900003700002005102320024190016a24002004ad4280808080c004840ba50a07027f017e047f017e017f047e027f230041e0006b220224002002411436020c200241eeebc300360208200241106a41eeebc300ad4280808080c002841010108b01024002400240024002400240200228021022030d0042002104410821050c010b200228021421062002200241186a2802002207360224200220033602200240024002402007450d0020022007417f6a3602242002200341016a36022020032d00002107200241c8006a200241206a10840420022802482208450d00200229024c2109200741ff01714101460d012009a72207450d00200741286c450d00200810230b20024100360230200242013703282002410a36023c2002200241086a3602382002200241286a36024441012107200241dc006a41013602002002420137024c20024180c5c6003602482002200241386a360258200241c4006a4184a5c200200241c8006a10311a2002350230422086200235022884100a0240200228022c450d00200228022810230b4102210a0c010b4101210a410021070b02402006450d00200310230b4108200820071b21054200200920071b210420070d00200a4101460d0020052802082203ad42287e2209422088a70d012009a72207417f4c0d01200528020021060240024020070d00410821050c010b200710212205450d030b02400240024002400240200741286e220820034f0d002008410174220a2003200a20034b1bad42287e2209422088a70d082009a7220a4100480d08200741274d0d01200841286c2207200a460d022007450d0120052007200a10252205450d090c020b2008ad210b20030d02420021090c030b200a10212205450d070b200a41286ead210b0b200341286c210a42002109410021080340200620086a22032903002104200341086a290300210c200341106a290300210d200341186a290300210e200520086a220741206a200341206a290300370300200741186a200e370300200741106a200d370300200741086a200c3703002007200437030020094280808080107c2109200a200841286a2208470d000b0b200b20098421040b2004422088a7220341286c4104722207417f4c0d00200710212208450d01200241003602502002200736024c200220083602482003200241c8006a10612002280250210702402003450d002005200341286c6a210f200228024c210620052103034002400240200620076b4120490d00200741206a2108200228024821102006210a0c010b200741206a22082007490d052006410174220a2008200a20084b1b220a4100480d050240024020060d000240200a0d00410121100c020b200a10212210450d080c010b200228024821102006200a460d0020102006200a10252210450d070b2002200a36024c200220103602480b201020076a22072003290000370000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a29000037000020022008360250200341206a290300210902400240200a20086b4108490d00200841086a2107200a21060c010b200841086a22072008490d05200a41017422062007200620074b1b22064100480d0502400240200a0d00024020060d00410121100c020b200610212210450d080c010b200a2006460d002010200a200610252210450d070b2002200636024c200220103602480b201020086a200937000020022007360250200f200341286a2203470d000b0b2007ad422086200235024884210902402004a72203450d00200341286c450d00200510230b200241e0006a240020090f0b1032000b1033000b102c000b102a000bb40f05047f017e017f017e077f23004190016b22022400200241c8006a41186a22034200370300200241c8006a41106a22044200370300200241c8006a41086a220542003703002002420037034841a7b3c500ad4280808080c000842206100c22072900002108200241286a41086a2209200741086a2900003703002002200837032820071023200520092903003703002002200229032837034841bcbac500ad4280808080b00184100c220729000021082009200741086a2900003703002002200837032820071023200420022903282208370300200241f0006a41086a220a2005290300370300200241f0006a41106a220b2008370300200241f0006a41186a220c200929030037030020022002290348370370200241c8006a200241f0006a10d10420022802482107200229024c2108200342003703002004420037030020054200370300200242003703482006100c220329000021062009200341086a2900003703002002200637032820031023200520092903003703002002200229032837034841c8bbc500ad4280808080a00184100c220329000021062009200341086a2900003703002002200637032820031023200420022903282206370300200a2005290300370300200b2006370300200c200929030037030020022002290348370370200241c8006a200241f0006a10970420022d00482105200c200241e1006a290000370300200b200241d9006a290000370300200a200241d1006a290000370300200220022900493703700240024020054101460d00200241286a41186a4200370300200241286a41106a420037030020094200370300200242003703280c010b200241286a41186a200c290300370300200241286a41106a200b2903003703002009200a290300370300200220022903703703280b200241086a41086a200241286a41086a290300370300200241086a41106a200241286a41106a290300370300200241086a41186a200241286a41186a2903003703002002200229032837030820024100360250200242013703480240410810212209450d002002410836024c20022009360248200942f02e3700002002410836025020094108411010252209450d00200942d8043700082002411036024c20022009360248200241103602500240024002404100450d00411021050c010b411041017422054118200541184b1b22054100480d010240024041100d002005102122090d010c040b41102005460d0020094110200510252209450d030b2002200536024c200220093602480b2009420137001020024118360250024020054138714118470d00200541017422044120200441204b1b22044100480d010240024020050d00200410212209450d040c010b20052004460d0020092005200410252209450d030b2002200436024c200220093602480b2007410820071b210d20094204370018200241203602502008420020071b2208422088a72209200241c8006a10612002280250210302402009450d00200d200941286c6a210e410020036b210b200228024c2104410021090340200320096a210c024002402004200b6a4120490d002002280248210a200421070c010b200c41206a2205200c490d03200441017422072005200720054b1b22074100480d030240024020040d00024020070d004101210a0c020b20071021220a450d060c010b2002280248210a20042007460d00200a200420071025220a450d050b2002200736024c2002200a3602480b200a20036a20096a2204200d20096a2205290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a2900003700002002200c41206a2204360250200541206a2903002106024002402007200b6a41606a41074d0d00200721040c010b200441086a220f2004490d0320074101742204200f2004200f4b1b22044100480d030240024020070d00024020040d004101210a0c020b20041021220a450d060c010b20072004460d00200a200720041025220a450d050b2002200436024c2002200a3602480b200a20036a20096a41206a20063700002002200c41286a360250200b41586a210b200941286a2109200e200541286a470d000b200320096a21030b02400240200228024c220420036b4120490d0020022802482105200421090c010b200341206a22092003490d01200441017422052009200520094b1b22094100480d010240024020040d00024020090d00410121050c020b200910212205450d040c010b2002280248210520042009460d0020052004200910252205450d030b2002200936024c200220053602480b200520036a22042002290308370000200441186a200241086a41186a290300370000200441106a200241086a41106a290300370000200441086a200241086a41086a2903003700002002200341206a22043602500240024020092004460d00200421090c010b200941016a22042009490d01200941017422072004200720044b1b22044100480d010240024020090d0041002109024020040d00410121050c020b200410212205450d040c010b20092004460d0020052009200410252205450d030b2002200436024c200220053602480b200520096a41013a0000200941016aad422086200235024884210602402008a72209450d00200941286c450d00200d10230b20024190016a240020060f0b102c000b102a000b2b02017e017f10eb03210202404108102122030d001033000b200320023700002003ad42808080808001840b9b0b04047f017e0a7f017e230041b0016b2202240020024188016a41186a420037030020024188016a41106a2203420037030020024188016a41086a220442003703002002420037038801419dcdc200ad4280808080a00284100c220529000021062004200541086a29000037030020022006370388012005102341d7a1c200ad4280808080c00084100c22052900002106200241e8006a41086a2207200541086a2900003703002002200637036820051023200320022903682206370300200241106a41086a2004290300370300200241106a41106a2006370300200241106a41186a20072903003703002002200229038801370310200241203602342002200241106a360230200241386a200241106aad42808080808004841010108b010240024002400240200228023822080d00410021070c010b200228023c21092002200241386a41086a28020036024c20022008360248200241086a200241c8006a1088010240024020022802080d00200228020c220a200228024c220b41057622042004200a4b1b22044105742205417f4c0d040240024020040d00410121070c010b200510212207450d040b4100210c200241003602602002200436025c2002200736025802400240200a450d004100210d0340200b210341002104200241003a00a801200d41016a210d034020032004460d0320024188016a20046a200228024822052d00003a00002002200541016a3602482002200441016a22053a00a8012005210420054120470d000b200241e8006a41186a220e20024188016a41186a290300370300200241e8006a41106a220f20024188016a41106a290300370300200241e8006a41086a221020024188016a41086a29030037030020022002290388013703680240200c200228025c470d00200241d8006a200c4101109a01200228025821072002280260210c0b200320056b210b2007200c4105746a22042002290368370000200441186a200e290300370000200441106a200f290300370000200441086a20102903003700002002200c41016a220c360260200d200a470d000b2002200320056b36024c0b200229025c21062007450d010c020b2002410036024c0240200441ff0171450d00200241003a00a8010b0240200228025c41ffffff3f71450d00200710230b0b4100210720024100360270200242013703682002410a36025c2002200241306a3602582002200241e8006a3602542002419c016a41013602002002420137028c0120024180c5c600360288012002200241d8006a36029801200241d4006a4184a5c20020024188016a10311a2002350270422086200235026884100a200228026c450d00200228026810230b2009450d00200810230b2006420020071b2206422088a7220441057422094104722205417f4c0d01200510212203450d002007410120071b210a20024100360290012002200536028c012002200336028801200420024188016a10610240024020040d002002280290012105200228028801210d0c010b410020022802900122056b2107200228028801210d200228028c012108200a210c0340200c21040240200820076a411f4b0d00024002400240200541206a22032005490d002008410174220c2003200c20034b1b22034100480d000240024020080d00024020030d004101210d0c020b20031021210d0c040b20082003470d020b200321080c030b102c000b200d200820031025210d0b20032108200d0d00102a000b200441206a210c200d20056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200741606a2107200541206a2105200941606a22090d000b2002200836028c0120022005360290012002200d360288010b2005ad422086200dad8421110240200642ffffff3f83500d00200a10230b200241b0016a240020110f0b1033000b1032000bf41705037f037e017f027e037f230041e0026b220224000240024020010d002002200136020c2002419ca8c7003602080c010b20022001417f6a36020c2002200041016a36020820002d0000220141014b0d004100210002400240024002400240024020010e020100010b2002200241086a10880120022802000d05200228020c220320022802042201490d052001417f4c0d010240024020010d00410121000c010b200110272200450d03200020022802082204200110a1051a2002200320016b36020c2002200420016a3602080b2000450d052001ad220542208620058421050b0240024020000d004100210342002106420021070c010b20054220882206a72201417f4c0d01024020010d0041012103420021070c010b200110212203450d0220032000200110a1051a200621070b200220033602b002200220064220862007843702b402200241e7e485f30636029002200241106a200241b0026a1086012002280214210420024190026a200235021842208620022802102208ad84101f22012900002106200141086a2900002109200141106a290000210a200241106a41186a220b200141186a290000370300200241106a41106a220c200a370300200241106a41086a220d20093703002002200637031020011023200241b0016a41186a200b290300370300200241b0016a41106a200c290300370300200241b0016a41086a200d290300370300200220022903103703b00102402004450d00200810230b02402003450d002007a7450d00200310230b0240024020000d004100210342002106420021070c010b20054220882206a72201417f4c0d01024020010d0041012103420021070c010b200110212203450d0220032000200110a1051a200621070b200220033602b002200220064220862007843702b402200241e2c289ab0636029002200241106a200241b0026a1086012002280214210420024190026a200235021842208620022802102208ad84102022012900002106200141086a2900002109200141106a290000210a200241106a41186a220b200141186a290000370300200241106a41106a220c200a370300200241106a41086a220d20093703002002200637031020011023200241d0016a41186a200b290300370300200241d0016a41106a200c290300370300200241d0016a41086a200d290300370300200220022903103703d00102402004450d00200810230b02402003450d002007a7450d00200310230b0240024020000d004100210342002106420021070c010b20054220882206a72201417f4c0d01024020010d0041012103420021070c010b200110212203450d0220032000200110a1051a200621070b200220033602b002200220064220862007843702b402200241e9dabdf30636029002200241106a200241b0026a1086012002280214210420024190026a200235021842208620022802102208ad84102022012900002106200141086a2900002109200141106a290000210a200241106a41186a220b200141186a290000370300200241106a41106a220c200a370300200241106a41086a220d20093703002002200637031020011023200241f0016a41186a200b290300370300200241f0016a41106a200c290300370300200241f0016a41086a200d290300370300200220022903103703f00102402004450d00200810230b02402003450d002007a7450d00200310230b0240024020000d004100210342002106420021070c010b20054220882206a72201417f4c0d01024020010d0041012103420021070c010b200110212203450d0220032000200110a1051a200621070b200220033602b002200220064220862007843702b402200241f0c2c98b063602d002200241106a200241b0026a10860120022802142104200241d0026a200235021842208620022802102208ad84102022012900002106200141086a2900002109200141106a290000210a200241106a41186a220b200141186a290000370300200241106a41106a220c200a370300200241106a41086a220d2009370300200220063703102001102320024190026a41186a200b29030037030020024190026a41106a200c29030037030020024190026a41086a200d290300370300200220022903103703900202402004450d00200810230b02402003450d002007a7450d00200310230b0240024020000d004200210741002103420021060c010b20054220882207a72201417f4c0d010240024020010d0042002107410121030c010b200110212203450d0320032000200110a1051a0b20054280808080708321060b200220033602d002200220062007843702d402200241e1ea91cb063602dc02200241106a200241d0026a10860120022802142104200241dc026a200235021842208620022802102208ad84102022012900002106200141086a2900002109200141106a290000210a200241106a41186a220b200141186a290000370300200241106a41106a220c200a370300200241106a41086a220d20093703002002200637031020011023200241b0026a41186a200b290300370300200241b0026a41106a200c290300370300200241b0026a41086a200d290300370300200220022903103703b00202402004450d00200810230b02402003450d002007a7450d00200310230b200241106a41086a2203200241b0016a41086a290300370300200241106a41106a2204200241b0016a41106a290300370300200241106a41186a220b200241b0016a41186a290300370300200241386a200241d0016a41086a290300370300200241c0006a200241d0016a41106a290300370300200241c8006a200241d0016a41186a290300370300200220022903b001370310200220022903d001370330200241e8006a200241f0016a41186a290300370300200241e0006a200241f0016a41106a290300370300200241d8006a200241f0016a41086a290300370300200241f8006a20024190026a41086a29030037030020024180016a20024190026a41106a29030037030020024188016a20024190026a41186a29030037030020024198016a200241b0026a41086a290300370300200241a0016a200241b0026a41106a290300370300200241a8016a200241b0026a41186a290300370300200220022903f0013703502002200229039002370370200220022903b00237039001412010212201450d0320012002290310370000200141186a200b290300370000200141106a2004290300370000200141086a20032903003700002001412041c00010252201450d032001200241106a41206a2203290000370020200141386a200341186a290000370000200141306a200341106a290000370000200141286a200341086a290000370000200141c00041800110252201450d032001200241106a41c0006a22032900003700402001200241f0006a2204290000370060200141d8006a200341186a290000370000200141d0006a200341106a290000370000200141c8006a200341086a290000370000200141e8006a200441086a290000370000200141f0006a200441106a290000370000200141f8006a200441186a290000370000200141800141800210252201450d03200120024190016a22032900003700800120014198016a200341186a29000037000020014190016a200341106a29000037000020014188016a200341086a29000037000002402000450d002005a7450d00200010230b41a40110212200450d01200242a4013702142002200036021041a001200241106a1061024002402002280214220b200228021822036b41a001490d00200341a0016a2104200228021021000c010b200341a0016a22042003490d03200b41017422002004200020044b1b220c4100480d0302400240200b0d000240200c0d00410121000c020b200c102122000d010c060b20022802102100200b200c460d002000200b200c10252200450d050b2002200c360214200220003602100b200020036a200141a00110a1051a20011023200241e0026a24002004ad4220862000ad840f0b1032000b1033000b102c000b102a000b200241bc026a4104360200200241246a410236020020024202370214200241e8c1c600360210200241043602b40220024198c4c6003602b00220024100360294022002419ca8c700360290022002200241b0026a360220200220024190026a3602b802200241106a41f8c1c600103a000bbd0d03037f017e077f23004180036b22022400024002402001450d00200220003602080c010b2002419ca8c7003602080b2002200136020c2002200241086a108801024002400240024020022802000d00200228020c220320022802042201490d0002402001417f4c0d000240024020010d00410121000c010b200110272200450d03200020022802082204200110a1051a2002200320016b36020c2002200420016a3602080b2000450d0120022001ad220542208620058422054220883e02dc02200220003602d802200241b0016a200241d8026a10e5020240024020022d00b0014101470d00410021060c010b200241106a200241b0016a41017241a00110a1051a200241b0016a200241106a41a00110a1051a200241003602e802200242043703e002412010212201450d03200120022903b001370000200141186a200241b0016a41186a290300370000200141106a200241b0016a41106a290300370000200141086a200241b0016a41086a290300370000200241e0026a4100410110a00120022802e402210720022802e002220620022802e80222044104746a220341e7e485f30636020c200342a08080808004370204200320013602002002200441016a22013602e802200241f0026a200241b0016a41206a1077024020012007470d00200241e0026a2007410110a00120022802e402210720022802e002210620022802e80221010b200620014104746a220320022903f002370200200341e2c289ab0636020c200341086a200241f0026a41086a2802003602002002200141016a22013602e802200241f0026a200241f0016a1077024020012007470d00200241e0026a2007410110a00120022802e402210720022802e002210620022802e80221010b200620014104746a220320022903f002370200200241f0026a41086a22042802002108200341e9dabdf30636020c200341086a20083602002002200141016a22013602e802200241f0026a20024190026a1077024020012007470d00200241e0026a2007410110a00120022802e402210720022802e002210620022802e80221010b200620014104746a220320022903f00237020020042802002104200341f0c2c98b0636020c200341086a20043602002002200141016a22013602e802200241f0026a200241b0026a1077024020012007470d00200241e0026a2007410110a00120022802e402210720022802e002210620022802e80221010b200620014104746a220320022903f002370200200241f0026a41086a2802002104200341e1ea91cb0636020c200341086a2004360200200141016a21090b02402005a7450d00200010230b0240024020060d00410121010c010b20094104744105722201417f4c0d010b200110212200450d02200241003602b801200220013602b401200220003602b0010240024020060d00200041003a000041012100200241013602b8010c010b200041013a0000200241013602b8012009200241b0016a1061024020090d0020022802b80121000c010b200620094104746a210a2006210103402001280200210b200141086a2802002200200241b0016a10610240024020022802b401220c20022802b80122086b2000490d0020022802b0012103200c21040c010b200820006a22032008490d06200c41017422042003200420034b1b22044100480d0602400240200c0d00024020040d00410121030c020b2004102122030d010c090b20022802b0012103200c2004460d002003200c200410252203450d080b200220043602b401200220033602b0010b200320086a200b200010a1051a2002200820006a22003602b8010240200420006b41034b0d00200041046a22082000490d062004410174220c2008200c20084b1b22084100480d060240024020040d00024020080d00410121030c020b200810212203450d090c010b20042008460d0020032004200810252203450d080b200220083602b401200220033602b0010b200320006a2001410c6a2800003600002002200041046a22003602b801200141106a2201200a470d000b0b2000ad42208620023502b00184210502402006450d0002402009450d00200941047421002006210103400240200141046a280200450d00200128020010230b200141106a2101200041706a22000d000b0b200741ffffffff0071450d00200610230b20024180036a240020050f0b1032000b2002411c6a4104360200200241c4016a4102360200200242023702b401200241e8c1c6003602b00120024104360214200241b8c4c600360210200241003602f4022002419ca8c7003602f0022002200241106a3602c0012002200241f0026a360218200241b0016a41f8c1c600103a000b1033000b102c000b102a000bb70302037f047e23004180016b2202240041002103200241003a00402000419ca8c70020011b210402400240034020012003460d01200241206a20036a200420036a2d00003a00002002200341016a22003a00402000210320004120470d000b200241186a200241206a41186a22032903002205370300200241106a200241206a41106a22002903002206370300200241086a200241206a41086a2201290300220737030020022002290320220837030020032005370300200020063703002001200737030020022008370320200241f0006a200241206a10f902200241206a20022802702203200228027810980220022903202105200241e8006a280200210002402002280274450d00200310230b4104102122030d011033000b0240200341ff0171450d00200241003a00400b200241346a41023602002002410c6a410436020020024202370224200241e8c1c60036022020024104360204200241d4c4c600360200200241003602742002419ca8c700360270200220023602302002200241f0006a360208200241206a41f8c1c600103a000b20032000410020054201511b36000020024180016a24002003ad4280808080c000840bac0505027f017e017f017e017f230041c0076b22022400024002402001450d00200220003602100c010b2002419ca8c7003602100b20022001360214200241f8036a200241106a10d30302400240024020022903e0044203510d00200241186a200241f8036a41c80310a1051a200228021422014104490d0120022802102200280000210320022001417c6a3602142002200041046a360210200241f8036a200241186a41c80310a1051a200241e0036a20024190056a220110c9022002200320022903e0032204a722052004422888a74200420010b604200241086a29030021042002290300210620022d00e4032100200110b402410410212201450d022001200536000002400240200041024d0d0041042103410421000c010b024002400240024020000e03000102000b410021000c020b410121000c010b410221000b200220003a00f8034108210320014104410810252201450d03200120003a0004410521000b200041107221050240200320006b410f4b0d002003200341017422072005200720054b1b2207460d0020012003200710252201450d030b200120006a2200200437000820002006370000200241c0076a24002005ad4220862001ad840f0b200241ec036a41043602002002412c6a41023602002002420237021c200241e8c1c600360218200241043602e403200241ecc4c6003602e003200241003602f4032002419ca8c7003602f0032002200241e0036a3602282002200241f0036a3602e803200241186a41f8c1c600103a000b200241ec036a41043602002002418c046a4102360200200242023702fc03200241e8c1c6003602f803200241043602e403200241ecc4c6003602e003200241003602f4032002419ca8c7003602f0032002200241e0036a360288042002200241f0036a3602e803200241f8036a41f8c1c600103a000b102a000bcc0503027f017e047f230041e0006b2202240041f4c7c600ad4280808080800184100c22032900002104200241086a41086a200341086a290000370300200220043703082003102341fcc7c600ad4280808080f00084100c22032900002104200241186a41086a200341086a2900003703002002200437031820031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100f22012900002104200241386a41086a200141086a2900003703002002200437033820011023200241d4006a200341206a360200200241003a0058200220033602502002200241386a41106a36024c2002200241386a360248200241286a200241c8006a1065200310232002280230220541206a2201417f4c0d0120022802282106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a2000200136020820002007360204200020033602000240200228022c450d00200610230b200241e0006a24000f0b102c000b102a000b13002000410b360204200041f8cec6003602000b3400200041f4c7c60036020420004100360200200041146a4104360200200041106a418080c700360200200041086a42083702000b6001027f230041106b2202240002404114102122030d001033000b200342003700082003420037000020024294808080800237020420022003360200410020021061200041086a200228020836020020002002290300370200200241106a24000b930301027f024020002802082201450d0020002802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010230b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010230b200241c8006a22022001470d000b0b0240200041046a2802002202450d00200241c8006c450d00200028020010230b024020002d000c4101470d00200041146a280200450d00200041106a28020010230b024020002d00304101470d00200041386a280200450d00200041346a28020010230b024020002d00544101470d00200041dc006a280200450d00200041d8006a28020010230b024020002d00784101470d0020004180016a280200450d00200041fc006a28020010230b024020002d009c014101470d00200041a4016a280200450d00200041a0016a28020010230b024020002d00c0014101470d00200041c8016a280200450d00200041c4016a28020010230b024020002d00e4014101470d00200041ec016a280200450d00200041e8016a28020010230b0bf112010b7f23004180016b22022400200241003a004002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802002203280204220420044100472205490d00200241c0006a20032802002206200510a1051a2003200420056b3602042003200620056a360200024020040d00410021062002410d6a2107200241106a2108200241246a21090c140b2002410d6a2107200241106a2108200241246a210920022d0040220a41254b0d0141002106200a0e261301010101010101010101010101010101010101010101010101010101010101010102030405130b200041063a00000c130b0240200a417f6a220441ff01714121490d00200041063a00000c130b024020040d00410121034100210441002105410121060c120b0240200410272203450d002003200128020022012802002001280204220a2004200a2004491b220510a105210b200128020422062005490d052001200620056b3602042001200128020020056a360200410121060240200a20044f0d00200b20056a22014100200b20046a20016b10a0051a0b200421050c120b1033000b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610a1051a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c100b41012101200441ff01710d040c0e0b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610a1051a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c0d0b41012101200441ff01710d040c0b0b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610a1051a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c0a0b41012101200441ff01710d040c080b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610a1051a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c070b41012101200441ff01710d040c050b20052006418ca9c0001044000b200241003a00780c090b200241003a00780c060b200241003a00780c030b200241003a00780b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410521060c070b200041063a00000c070b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410421060c050b200041063a00000c050b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410321060c030b200041063a00000c030b0b410221062002413c6a41026a220a200241d4006a41026a2d00003a0000200241286a41086a220b200241c0006a41086a290300370300200241286a41106a220c200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a200a2d00003a0000200241106a41086a200b290300370300200241106a41106a200c2d00003a0000200220022f013c3b0124200220022903283703100c010b200041063a00000c010b200020063a0000200020092f00003b00012000410c6a2004360000200041086a2005360000200041046a2003360000200041106a2008290000370000200041216a20072f00003b0000200041036a200941026a2d00003a0000200041186a200841086a290000370000200041206a200841106a2d00003a0000200041236a200741026a2d00003a00000b20024180016a24000b9e0c04047f017e0a7f037e230041b0026b2201240020014188026a41186a420037030020014188026a41106a2202420037030020014188026a41086a22034200370300200142003703880241f4c7c600ad4280808080800184100c220429000021052003200441086a29000037030020012005370388022004102341a084c700ad4280808080a00184100c22042900002105200141e8016a41086a2206200441086a290000370300200120053703e80120041023200220012903e8012205370300200141086a41086a2003290300370300200141086a41106a2005370300200141086a41186a200629030037030020012001290388023703082001412036022c2001200141086a360228200141306a200141086aad42808080808004841010108b010240024002400240200128023022070d00410021030c010b200128023421082001200141306a41086a280200360254200120073602502001200141d0006a1088010240024002402001280200450d0041002103200141003602400c010b200128020422092001280254220a4106762203200320094b1b22034106742204417f4c0d030240024020030d004108210b0c010b20041021220b450d050b4100210c200141003602602001200336025c2001200b36025802400240024002402009450d004100210d0340200a450d042001200a417f6a220436025420012001280250220241016a36025020022d0000220341014b0d04420021050240024020030e020100010b41002103200141003a00a802200a417f6a2106034020062003460d0420014188026a20036a200220036a220441016a2d00003a00002001200441026a3602502001200341016a22043a00a8022004210320044120470d000b200141e8016a41086a220620014188026a41086a290300370300200141e8016a41106a220e20014188026a41106a290300370300200141e8016a41186a220f20014188026a41186a29030037030020012001290388023703e80120012004417f73200a6a220336025420034110490d042001200220046a220341116a22023602502001200a20046b220a416f6a220436025420044108490d04200341096a2900002110200341016a29000021112001200a41676a22043602542001200341196a360250200229000022124280025a0d04200141a8016a41086a2006290300220537030020014188016a41186a200f29030037030020014188016a41106a200e29030037030020014188016a41086a2005370300200120012903e80122053703a8012001200537038801420121050b200d41016a210d200141e8006a41186a220220014188016a41186a290300370300200141e8006a41106a220620014188016a41106a290300370300200141e8006a41086a220a20014188016a41086a29030037030020012001290388013703680240200c200128025c470d00200141d8006a200c4101109f012001280258210b2001280260210c0b200b200c4106746a2203201137030820032005370300200341106a2010370300200341186a2012370300200341206a2001290368370300200341286a200a290300370300200341306a2006290300370300200341386a20022903003703002001200c41016a220c3602602004210a200d2009470d000b0b200141c0006a41086a200141d8006a41086a2802003602002001200129035822053703402005a72203450d03200129024421050c040b20014100360254200341ff0171450d00200141003a00a8020b200141a8016a41086a200141c8016a41086a290300370300200141a8016a41106a200141c8016a41106a2903003703000b4100210320014100360240200128025c41ffffff1f71450d00200b10230b200141003602f001200142013703e8012001410a3602cc012001200141286a3602c8012001200141e8016a3602a8012001419c026a41013602002001420137028c0220014180c5c600360288022001200141c8016a36029802200141a8016a4184a5c20020014188026a10311a20013502f00142208620013502e80184100a024020012802ec01450d0020012802e80110230b0b2008450d00200710230b0240024020030d0020004100360208200042083702000c010b20002005370204200020033602000b200141b0026a24000f0b1032000b1033000bae0503027f017e047f230041d0006b2202240041f4c7c600ad4280808080800184100c22032900002104200241086a200341086a290000370300200220043703002003102341e082c700ad4280808080a00184100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000b934f07087f017e017f017e017f027e4f7f230041f0066b220324002003200236021c20032001360218200341206a2002ad4220862001ad841010108b0102400240200328022022040d00200041023a00a4020c010b200328022421052003200341206a41086a280200360234200320043602302003200341306a3602a802200341106a200341a8026a10a3030240024020032802100d004108210602400240200328021422074180012007418001491b2201450d00200141057410212206450d010b200341003602a806200320013602a406200320063602a0060240024002400240024002402007450d00200341d0066a2108410021010340200341003602c806200341c8066a2003280230220920032802342202410420024104491b220a10a1051a20032002200a6b36023420032009200a6a3602300240200241034b0d00200341c8066a200a6a41004104200a6b10a0051a0b20033502c806210b200341003a00c806200328023422022002410047220a490d02200341c8066a20032802302209200a10a1051a20032002200a6b220c36023420032009200a6a220a36023002400240024020020d004200210d0c010b20032d00c806220241064b0d044200210d02400240024002400240024020020e0707000102030405070b200341c8066a200c4110200c4110491b22026a41004100411020026b22092002410f4b1b10a005210e200341c8066a200a200210a1051a2003200c20026b3602342003200a20026a3602300240200c410f4b0d00200e4100200910a0051a0b2008290300210f20032903c80621104201210d0c060b4202210d0c040b4203210d0c030b4204210d0c020b4205210d0c010b4206210d0b0b0240200120032802a406470d00200341a0066a2001410110970120032802a006210620032802a80621010b200620014105746a2202200d3703082002200b370300200241186a200f370300200241106a20103703002003200141016a22013602a8062007417f6a22070d000b0b2006450d0620032902a406210d200341d0066a220a4200370300200342003703c806200341c8066a2003280230220720032802342201411020014110491b220210a1051a2003200120026b3602342003200720026a36023002402001410f4b0d00200341c8066a20026a4100411020026b10a0051a0b200a290300210f20032903c8062110200341086a200341a8026a10a30320032802080d03200328020c2209413820094138491b22110d014104210a0c020b20032802a40641ffffff3f71450d0520061023410221010c060b201141c8006c1021220a450d030b41002102200341003602a0042003201136029c042003200a36029804024002400240024002400240024002402009450d00200341a0066a410c6a2112200341a0066a4101722113410021020340200341a0066a200341a8026a1090050240024020032d00a00622074106470d00410621070c010b2003419c066a41026a2208201341026a2d00003a000020034180066a41086a220e201241086a29020037030020034180066a41106a2214201241106a290200370300200320132f00003b019c06200320122902003703800620032802a406210c20032802a8062101200341c8066a200341a8026a109005024020032d00c8064106470d00024020074101470d002001450d00200c10230b410621070c010b200341fc056a41026a20082d00003a0000200341e0056a41086a200e290300370300200341e0056a41106a2014290300370300200341b8056a41086a200341c8066a41086a290300370300200341b8056a41106a200341c8066a41106a290300370300200341b8056a41186a200341c8066a41186a290300370300200341b8056a41206a200341c8066a41206a280200360200200320032f019c063b01fc0520032003290380063703e005200320032903c8063703b80520012115200c21160b200341b4056a41026a2201200341fc056a41026a2d00003a000020034198056a41086a220c200341e0056a41086a29030037030020034198056a41106a2208200341e0056a41106a290300370300200341f0046a41086a220e200341b8056a41086a290300370300200341f0046a41106a2214200341b8056a41106a290300370300200341f0046a41186a2217200341b8056a41186a290300370300200341f0046a41206a2218200341b8056a41206a280200360200200320032f01fc053b01b405200320032903e00537039805200320032903b8053703f00420074106460d02200341ec046a41026a221120012d00003a0000200341d0046a41086a2219200c290300370300200341d0046a41106a220c2008290300370300200341a8046a41086a2208200e290300370300200341a8046a41106a220e2014290300370300200341a8046a41186a22142017290300370300200341a8046a41206a22172018280200360200200320032f01b4053b01ec0420032003290398053703d004200320032903f0043703a80402402002200328029c04470d0020034198046a2002410110a101200328029804210a20032802a00421020b200a200241c8006c6a220120073a0000200141086a2015360000200141046a2016360000200141036a20112d00003a0000200120032f01ec043b0001200141146a20192903003700002001411c6a200c2903003700002001410c6a20032903d004370000200141246a20032903a804370000200141346a200e2903003700002001412c6a20082903003700002001413c6a2014290300370000200141c4006a20172802003600002003200241016a22023602a0042009417f6a22090d000b200328029c0421110b200a450d07200341c8066a200341a8026a10900520032d00c80622194106460d01200341b4056a41026a20032d00cb063a0000200341e0056a41086a200341dc066a2201290200370300200341e0056a41106a200341e4066a2207290200370300200320032f00c9063b01b4052003200341d4066a22092902003703e005200341c8066a41086a220c280200211220032802cc062115200341c8066a200341a8026a10900520032d00c80622164106460d02200341fc056a41026a20032d00cb063a000020034180066a41086a200129020037030020034180066a41106a2007290200370300200320032f00c9063b01fc052003200929020037038006200c280200211320032802cc06211a200341c8066a200341a8026a10900520032d00c806221b4106460d032003419c066a41026a20032d00cb063a0000200341a8046a41086a200341dc066a2201290200370300200341a8046a41106a200341e4066a2207290200370300200320032f00c9063b019c062003200341d4066a22092902003703a804200341c8066a41086a220c280200211c20032802cc06211d200341c8066a200341a8026a10900520032d00c806221e4106460d0420034198046a41026a20032d00cb063a0000200341f0046a41086a2001290200370300200341f0046a41106a2007290200370300200320032f00c9063b019804200320092902003703f004200c280200211f20032802cc062120200341c8066a200341a8026a10900520032d00c80622214106470d050240201e4101470d00201f450d00202010230b0240201b4101470d00201c450d00201d10230b024020164101470d002013450d00201a10230b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d07201141c8006c0d060c070b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b200328029c042201450d06200141c8006c0d050c060b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d05201141c8006c0d040c050b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d04201141c8006c0d030c040b024020164101470d002013450d00201a10230b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d03201141c8006c0d020c030b0240201b4101470d00201c450d00201d10230b024020164101470d002013450d00201a10230b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d02201141c8006c0d010c020b200341d2046a20032d00cb063a0000200341b8056a41086a200341dc066a290200370300200341c8056a200341e4066a290200370300200320032f00c9063b01d0042003200341d4066a2902003703b805200341c8066a41086a280200212220032802cc062123200341003a00c806024002402003280234220120014100472207490d00200341c8066a20032802302209200710a1051a2003200120076b220c3602342003200920076a22073602300240024020010d00410021010c010b20032d00c806220941014b0d0141002101024020090e020100010b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621240c010b41002124200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c80621250c010b41002125200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621260c010b41002126200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c80621270c010b41002127200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621280c010b41002128200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c80621290c010b41002129200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c806212a0c010b4100212a200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c806212b0c010b4100212b200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c806212c0c010b4100212c200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c806212d0c010b4100212d200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c806212e0c010b4100212e200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c806212f0c010b4100212f200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621300c010b41002130200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c80621310c010b41002131200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621320c010b41002132200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c80621330c010b41002133200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621340c010b41002134200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b220c3602342003200720016a2207360230024002402009450d0020032d00c80621350c010b41002135200341003a00c8060b200341003a00c806200c200c4100472201490d01200341c8066a2007200110a1051a2003200c20016b22093602342003200720016a220736023002400240200c450d0020032d00c80621360c010b41002136200341003a00c8060b200341003a00c806200920094100472201490d01200341c8066a2007200110a1051a2003200920016b3602342003200720016a360230024002402009450d0020032d00c80621370c010b41002137200341003a00c8060b410121010b200341c8066a200341a8026a10900520032d00c80622384106460d0120034198056a41026a220720032d00cb063a0000200341a0066a41086a2209200341dc066a290200370300200341a0066a41106a220c200341e4066a290200370300200320032f00c9063b0198052003200341d4066a2902003703a006200341c8066a41086a2208280200213920032802cc06213a200341c8066a200341a8026a10900520032d00c8064106470d04024020384101470d002039450d00203a10230b024020214101470d002022450d00202310230b0240201e4101470d00201f450d00202010230b0240201b4101470d00201c450d00201d10230b024020164101470d002013450d00201a10230b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d03201141c8006c0d020c030b024020214101470d002022450d00202310230b0240201e4101470d00201f450d00202010230b0240201b4101470d00201c450d00201d10230b024020164101470d002013450d00201a10230b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d02201141c8006c0d010c020b024020214101470d002022450d00202310230b0240201e4101470d00201f450d00202010230b0240201b4101470d00201c450d00201d10230b024020164101470d002013450d00201a10230b024020194101470d002012450d00201510230b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010230b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010230b200141c8006a22012002470d000b0b2011450d01201141c8006c450d010b200a10230b200d42ffffff3f83500d0220061023410221010c030b200341b0026a41206a220e200341c8066a41206a2214280200360200200341b0026a41186a2217200341c8066a41186a2218290300370300200341b0026a41106a223b200341c8066a41106a223c290300370300200341b0026a41086a223d200829030037030020034192046a41026a223e200341b4056a41026a223f2d00003a0000200341f8036a41086a2240200341e0056a41086a2241290300370300200341f8036a41106a2242200341e0056a41106a2243290300370300200320032903c8063703b002200320032f01b4053b019204200320032903e0053703f803200341f4036a41026a2244200341fc056a41026a22452d00003a0000200320032f01fc053b01f403200341d8036a41106a224620034180066a41106a2247290300370300200341d8036a41086a224820034180066a41086a224929030037030020032003290380063703d803200341d4036a41026a224a2003419c066a41026a224b2d00003a0000200320032f019c063b01d403200341b8036a41106a224c200341a8046a41106a224d290300370300200341b8036a41086a224e200341a8046a41086a224f290300370300200320032903a8043703b803200341b4036a41026a225020034198046a41026a22512d00003a0000200320032f0198043b01b40320034198036a41106a2252200341f0046a41106a225329030037030020034198036a41086a2254200341f0046a41086a2255290300370300200320032903f0043703980320034194036a41026a2256200341d0046a41026a22572d00003a0000200320032f01d0043b019403200341f8026a41106a2258200341b8056a41106a2259290300370300200341f8026a41086a225a200341b8056a41086a225b290300370300200320032903b8053703f802200341f4026a41026a225c20072d00003a0000200320032f0198053b01f402200341d8026a41106a225d200c290300370300200341d8026a41086a225e2009290300370300200320032903a0063703d802200341ac026a41026a225f20034195046a41026a2d00003a0000200320032f0095043b01ac022007203e2d00003a0000200320032f0192043b019805200c204229030037030020092040290300370300200320032903f8033703a006205720442d00003a0000200320032f01f4033b01d00420592046290300370300205b2048290300370300200320032903d8033703b8052051204a2d00003a0000200320032f01d4033b0198042053204c2903003703002055204e290300370300200320032903b8033703f004204b20502d00003a0000200320032f01b4033b019c06204d2052290300370300204f205429030037030020032003290398033703a804204520562d00003a0000200320032f0194033b01fc05204720582903003703002049205a290300370300200320032903f80237038006203f205c2d00003a0000200320032f01f4023b01b4052043205d2903003703002041205e290300370300200320032903d8023703e0052014200e28020036020020182017290300370300203c203b2903003703002008203d290300370300200320032903b0023703c806200341ec046a41026a205f2d00003a0000200320032f01ac023b01ec040c020b1033000b410221010b200341a4026a41026a20034198056a41026a2d00003a000020034188026a41086a200341a0066a41086a29030037030020034188026a41106a223b200341a0066a41106a220729030037030020034184026a41026a200341d0046a41026a2d00003a0000200341e8016a41086a200341b8056a41086a290300370300200341e8016a41106a223c200341b8056a41106a2209290300370300200320032f0198053b01a402200320032903a00637038802200320032f01d0043b018402200320032903b8053703e801200341e4016a41026a20034198046a41026a2d00003a0000200341c8016a41086a200341f0046a41086a290300370300200341c8016a41106a223d200341f0046a41106a220c290300370300200341c4016a41026a2003419c066a41026a2d00003a0000200341a8016a41086a200341a8046a41086a290300370300200341a8016a41106a223e200341a8046a41106a2208290300370300200320032f0198043b01e401200320032903f0043703c801200320032f019c063b01c401200320032903a8043703a801200341a4016a41026a200341fc056a41026a2d00003a000020034188016a41106a223f20034180066a41106a220e29030037030020034188016a41086a20034180066a41086a29030037030020034184016a41026a200341b4056a41026a2d00003a0000200341e8006a41106a2240200341e0056a41106a290300370300200341e8006a41086a200341e0056a41086a290300370300200320032f01fc053b01a401200320032903800637038801200320032f01b4053b018401200320032903e005370368200341c0006a41206a2241200341c8066a41206a2214280200360200200341c0006a41186a2242200341c8066a41186a2217290300370300200341c0006a41106a2243200341c8066a41106a2218290300370300200341c0006a41086a200341c8066a41086a290300370300200320032903c8063703402003413c6a41026a200341ec046a41026a2d00003a0000200320032f01ec043b013c0240024020014102470d00200341003602a806200342013703a0062003410a3602bc052003200341186a3602b8052003200341a0066a3602f004200341dc066a4101360200200342013702cc0620034180c5c6003602c8062003200341b8056a3602d806200341f0046a4184a5c200200341c8066a10311a20033502a80642208620033502a00684100a024020032802a406450d0020032802a00610230b410221010c010b200341e0056a41026a2244200341a4026a41026a2d00003a0000200341a0066a41086a224520034188026a41086a2903003703002007203b29030037030020034198056a41026a223b20034184026a41026a2d00003a0000200341b8056a41086a2246200341e8016a41086a2903003703002009203c290300370300200320032f01a4023b01e00520032003290388023703a006200320032f0184023b019805200320032903e8013703b805200341d0046a41026a223c200341e4016a41026a2d00003a0000200341f0046a41086a2247200341c8016a41086a290300370300200c203d290300370300200341f8036a41026a223d200341c4016a41026a2d00003a0000200341a8046a41086a2248200341a8016a41086a2903003703002008203e290300370300200320032f01e4013b01d004200320032903c8013703f004200320032f01c4013b01f803200320032903a8013703a804200341d8036a41026a223e200341a4016a41026a2d00003a0000200341b0026a41106a2249203f290300370300200341b0026a41086a223f20034188016a41086a290300370300200341b8036a41026a224a20034184016a41026a2d00003a0000200e204029030037030020034180066a41086a2240200341e8006a41086a290300370300200320032f01a4013b01d80320032003290388013703b002200320032f0184013b01b8032003200329036837038006201420412802003602002017204229030037030020182043290300370300200341c8066a41086a2241200341c0006a41086a290300370300200320032903403703c80620034198036a41026a22422003413c6a41026a2d00003a0000200320032f013c3b0198032000200f37030820002010370300200020193a002820002002360224200020113602202000200a36021c2000200d37021420002006360210200020123602302000201536022c200020032f01e0053b00292000412b6a20442d00003a0000200020032903a0063702342000413c6a2045290300370200200041c4006a2007290300370200200020163a004c200041cf006a203b2d00003a0000200020032f0198053b004d200020133602542000201a360250200041e8006a2009290300370200200041e0006a2046290300370200200020032903b8053702582000201b3a0070200041f3006a203c2d00003a0000200020032f01d0043b00712000201c3602782000201d3602742000418c016a200c29030037020020004184016a2047290300370200200020032903f00437027c2000201e3a00940120004197016a203d2d00003a0000200020032f01f8033b0095012000201f36029c012000202036029801200041b0016a2008290300370200200041a8016a2048290300370200200020032903a8043702a001200020213a00b801200041bb016a203e2d00003a0000200020032f01d8033b00b901200020223602c001200020233602bc01200041d4016a2049290300370200200041cc016a203f290300370200200020032903b0023702c401200020383a00dc01200041df016a204a2d00003a0000200020032f01b8033b00dd01200020393602e4012000203a3602e001200041f8016a200e290300370200200041f0016a204029030037020020002003290380063702e801200041a0026a201428020036020020004198026a201729030037020020004190026a201829030037020020004188026a2041290300370200200020032903c80637028002200041b8026a20373a0000200041b7026a20363a0000200041b6026a20353a0000200041b5026a20343a0000200041b4026a20333a0000200041b3026a20323a0000200041b2026a20313a0000200041b1026a20303a0000200041b0026a202f3a0000200041af026a202e3a0000200041ae026a202d3a0000200041ad026a202c3a0000200041ac026a202b3a0000200041ab026a202a3a0000200041aa026a20293a0000200041a9026a20283a0000200041a8026a20273a0000200041a7026a20263a0000200041a6026a20253a0000200020243a00a502200041bb026a20422d00003a0000200041b9026a20032f0198033b00000b200020013a00a4022005450d00200410230b200341f0066a24000be90404017f017e077f027e230041206b22022400200220001092052002350208210320022802002104200241003602182002420137031020012802102100200141186a2802002205200241106a10610240024002402005450d00200020054105746a21060340200028020021070240024020022802142208200228021822056b4104490d00200228021021090c010b200541046a22092005490d032008410174220a2009200a20094b1b220a4100480d030240024020080d000240200a0d00410121090c020b200a102122090d010c060b200228021021092008200a460d0020092008200a10252209450d050b2002200a360214200220093602100b200920056a20073600002002200541046a360218200041086a200241106a10e3022006200041206a2200470d000b0b200141086a290300210b2001290300210c0240024020022802142208200228021822006b4110490d00200041106a2105200228021021090c010b200041106a22052000490d01200841017422092005200920054b1b22074100480d010240024020080d00024020070d00410121090c020b200710212209450d040c010b2002280210210920082007460d0020092008200710252209450d030b20022007360214200220093602100b200920006a2200200b3700082000200c370000200220053602182001411c6a2200200241106a10e2022002280214210520034220862004ad84200235021842208620022802102209ad84100e02402005450d00200910230b02402002280204450d00200410230b0240200141146a28020041ffffff3f71450d00200128021010230b2000108f05200241206a24000f0b102c000b102a000bae0503027f017e047f230041d0006b2202240041f4c7c600ad4280808080800184100c22032900002104200241086a200341086a290000370300200220043703002003102341d083c700ad4280808080e00084100c22032900002104200241106a41086a200341086a2900003703002002200437031020031023024002400240024002400240412010212203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100d220129000037033020011023200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a1065200310232002280228220541206a2201417f4c0d0120022802202106024002402001450d00200110212203450d022001410f4d0d01200121070c050b200141017422034110200341104b1b2207102122030d040c060b200141017422084110200841104b1b220741004e0d020c040b1033000b1032000b20012007460d0020032001200710252203450d020b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0120072008460d0020032007200810252203450d020b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d01200841017422072001200720014b1b22074100480d0120082007460d0020032008200710252203450d020b200341206a2006200510a1051a20002001360208200020073602042000200336020002402002280224450d00200610230b200241d0006a24000f0b102c000b102a000bf80202027f037e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841010108b0102400240200328021022010d00200041003602100c010b200328021421042003200341106a41086a28020022023602242003200136022002400240024020024110490d002003200241706a3602242003200141106a360220200141086a290000210520012900002106200341c8006a200341206a10cf01200328024822020d010b20034100360230200342013703282003410a36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c20034180c5c6003602482003200341386a360258200341c4006a4184a5c200200341c8006a10311a2003350230422086200335022884100a0240200328022c450d00200328022810230b200041003602100c010b200329024c2107200020053703082000200637030020002007370214200020023602100b2004450d00200110230b200341e0006a24000b13002000410c360204200041a08cc7003602000bad0302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b220342ffff03420010a705200441286a20042903382206200441386a41086a290300220742ffff03420010a605200441186a20022003200620022004290328852003200441286a41086a2903008584420052ad7c22084201200842015620072008200654ad7c22064200522006501b22051b22082006420020051b220610a7050240024002402004290318220742808004544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2008200610a7052004290308220342808004544100200441086a41086a290300501b450d012007a741ffff037122050d0241f0a6c700411941f4aac700102d000b2004411136024c20044184abc7003602484188a9c70041de00200441c8006a41f8a8c70041e8a9c7001034000b2004411136024c20044184abc7003602484188a9c70041de00200441c8006a41f8a8c70041e4aac7001034000b200441d0006a24002003a741ffff037141ffff036c20056e0bde17021e7f037e230041e0036b22032400200228020821042002280200210520022802042106200341186a2207200141206a290000370300200341106a2208200141186a290000370300200341086a2209200141106a290000370300200320012900083703002006410174210a2003410772210b200341c8016a41186a210c200341c8016a410c6a210d200341c8016a41206a210e2001280204210f20012802002110200421024100211141002112024002400240024002400240024002400240024002400240024002400240024002400240024002400340200420126a22134101762101024002402013410171450d0020062001490d03200120064f0d05200341013a00d001200320053602c801200320013602cc012003200520016a2d000041f001713a00d1010c010b20062001490d03200341003a00d001200320013602cc01200320053602c8010b200341b8036a20102003200341c8016a200f28020c11050002400240024020032802b80322140d00200341c8016a41086a2202200341086a290300370300200341c8016a41106a2206200341106a290300370300200341c8016a41186a2213200341186a290300370300200320032903003703c8014130102122010d010c170b20032802bc032115200341c8016a201420032802c00310a50420032d00c8014101460d13201141016a21110c010b200120032903c80137000120012003290020370021200120114100473a0000200141096a2002290300370000200141116a2006290300370000200141196a2013290300370000200141286a200341276a29000037000020004101360200200020013602040c140b034020032802e401211620032802e001211720032802dc01211820032802d801211920032802d401211320032802d001211a20032802cc012101200341206a200e41a80110a1051a200328029403211b200328029003211c024002400240024020010e05150f000102150b410021010240201341017420196b221d200a20026b221b201b201d4b1b221e450d000340200220016a221b410176221c20064f0d0a201920016a221f410176222020134f0d0b2005201c6a2d0000221c410f71201c41f00171410476201b4101711b201a20206a2d0000221b410f71201b410476201f4101711b470d01200141016a2201201e490d000b0b02402001201d460d00200042003702002015450d180c170b201d21010c020b200320163602dc01200320173602d801200320183602d401200320193602d001200320133602cc012003201a3602c801200c200341206a41a80110a1051a02400240200a2002460d00200241017622012006490d0120012006418898c7001030000b02400240201c0d00410021010c010b201b417f4c0d1302400240201b0d00200342003703b80341012101410021020c010b201b10212201450d15200341003602bc032003201b3602b803201b21020b2001201c200210a1051a2003201b3602bc0320032903b80321210b20002001360204200041086a20213702000c0d0b0240200341c8016a200520016a2d00002201410f71200141047620024101711b410c6c6a220128020022184102470d00200041003602040c0d0b20012802042117200141086a28020021164101211d410121010c010b20032802a003211e200328029c03211d2003280298032101200320163602d001200320173602cc01200320183602c801200d200341206a41a80110a1051a20032001360284032003201b360280032003201c3602fc02410021010240201341017420196b2216200a20026b2218201820164b1b2217450d000340200220016a221b410176221c20064f0d0a201920016a221f410176222020134f0d0b2005201c6a2d0000221c410f71201c41f00171410476201b4101711b201a20206a2d0000221b410f71201b410476201f4101711b470d01200141016a22012017490d000b0b0240024002400240024020012016470d0020182016470d01201d0d02410021010c030b200041003602040c0e0b201620026a220141017622132006490d0220132006418898c7001030000b201e417f4c0d1202400240201e0d00200342003703b80341012101410021020c010b201e10212201450d14200341003602bc032003201e3602b803201e21020b2001201d200210a1051a2003201e3602bc0320032903b80321210b20002001360204200041086a20213702000c0b0b0240200341c8016a200520136a2d00002213410f71201341047620014101711b410c6c6a221328020022184102470d00200041003602040c0b0b201641016a211d201641016a210120132802042117201341086a28020021160b200120126a21122002201d6a210202402018450d00200341c8016a2017201610a50420032d00c8014101460d130c010b0b0240024020164120460d00200341c8016a41086a22192009290300370300200341c8016a41106a221a2008290300370300200c2007290300370300200320032903003703c8012016417f4c0d100240024020160d0041012101410021130c010b20162113201610212201450d120b20012017201310a105211b413010212201450d16200141043a0000200120032903c801370001200120032f00aa033b00212001201636002c200120133600282001201b360024200141096a2019290300370000200141116a201a290300370000200141196a200c290300370000200141236a200341aa036a41026a2d00003a0000410121130c010b201741026a2d000021132017410f6a2900002121201741176a29000021222017280003210120172f0000211920172900072123200c2017411f6a2d00003a0000200341c8016a41106a2022370300200341c8016a41086a2021370300200341aa036a41026a20133a0000200320233703c801200320193b01aa03410021130b200341dc036a41026a2219200341aa036a41026a2d00003a0000200341b8036a41086a221a200341c8016a41086a290300370300200341b8036a41106a221b200341c8016a41106a290300370300200341b8036a41186a221c200c280200360200200320032f01aa033b01dc03200320032903c8013703b803024020130d00200b20032903b803370000200b41086a201a290300370000200b41106a201b290300370000200b41186a201c2d00003a0000200320032f01dc033b010020032001360003200320192d00003a00022015450d01201410230c010b0b200041013602002000200136020420150d110c120b2001200641a8bcc0001043000b2001200641b8bcc0001043000b2001200641c8bcc0001030000b201c2006418898c7001030000b20202013418898c7001030000b201c2006418898c7001030000b20202013418898c7001030000b200041003602000c020b200041003602000c010b4100211e0240201341017420196b200a20026b2216470d004100211e41002101024002402016450d00410021010340201920016a221b410176221c20134f0d05200220016a221f410176222020064f0d06201a201c6a2d0000221c410f71201c41f00171410476201b4101711b200520206a2d0000221b410f71201b410476201f4101711b470d012016200141016a2201470d000c020b0b20012016470d010b2017417f4c0d040240024020170d00200342003703c8014101211e410021010c010b20171021221e450d06200341003602cc01200320173602c801201721010b201e2018200110a1051a200320173602cc0120032903c80121210b2000201e36020420004100360200200041086a20213702000b02402015450d00201410230b200341e0036a24000f0b201c2013418898c7001030000b20202006418898c7001030000b1032000b1033000b2000420037020020150d010c020b20032d00c9012102200341b8036a41086a2206200341086a290300370300200341b8036a41106a2213200341106a290300370300200341b8036a41186a2219200341186a290300370300200320032903003703b803413010212201450d02200141033a0000200120032903b803370001200120023a0021200120032901aa03370122200141096a2006290300370000200141116a2013290300370000200141196a2019290300370000200141286a200341b0036a29010037010020004101360200200020013602042015450d010b201410230b200341e0036a24000f0b102a000b8a0201057f024020002802102201450d00200041146a280200220241046a2103200120026a41016a21042002280200417f73418081828478712105200041186a280200210202400340024002402005450d00200521010c010b0340200320044f0d03200241c0016a210220032802002101200341046a220521032001418081828478712201418081828478460d000b2001418081828478732101200521030b2001417f6a2001712105200220016841037641306c6a220141246a280200450d00200128022010230c000b0b02402000280210220341086a200341056a490d00200341016aad42307e422088a71a0b200028021410230b02402000412c6a280200450d00200028022810230b0b130020004101360204200041f898c7003602000b3400200041b494c70036020420004100360200200041146a4102360200200041106a41d49cc700360200200041086a42093702000b130020004101360204200041a49fc7003602000b2d01017f02404108102122020d001033000b20004288808080800137020420002002360200200242b8173700000b1f0002402000280200450d00200041086a280200450d00200028020410230b0b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b3601017f02402002450d00200021030340200320012d00003a0000200341016a2103200141016a21012002417f6a22020d000b0b20000b7101017f0240024020012000490d002002450d01200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000c020b0b2002450d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030b5701017e02400240200341c000710d002003450d012001410020036b413f71ad8820022003413f71ad220486842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080b5701017e02400240200341c000710d002003450d0120012003413f71ad2204882002410020036b413f71ad86842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080b7501027e200020034220882205200142208822067e200320027e7c200420017e7c200342ffffffff0f832203200142ffffffff0f8322017e2204422088200320067e7c22034220887c200342ffffffff0f83200520017e7c22034220887c37030820002003422086200442ffffffff0f83843703000b3e01017f230041106b2205240020052001200220032004410010a905200529030021012000200541086a29030037030820002001370300200541106a24000b4c01017f230041206b22052400200542003703182005420037031020052001200220032004200541106a10a905200529031021012000200529031837030820002001370300200541206a24000be20502037f067e230041306b2206240002400240024002400240024002400240024002402002500d002003500d012004500d02200479a7200279a76b2207413f4b0d0341ff0020076b2108200741016a21070c080b02402004500d0020050d040c060b024002402005450d0020034200510d0620054200370308200520012003823703000c010b20034200510d050b200120038021010c060b2004500d030240024002402001500d0020047b4201510d01200479a7200279a76b2207413e4b0d0241ff0020076b2108200741016a21070c090b02402005450d0020054200370300200520022004823703080b200220048021010c070b02402005450d002005200137030020052004427f7c2002833703080b200220047a423f838821010c060b2005450d040c020b024020037b4201510d0041bf7f200379a7200279a76b22076b2108200741c1006a21070c060b02402005450d002005420037030820052003427f7c2001833703000b20034201510d06200641206a2001200220037aa710a505200641286a2903002102200629032021010c060b2005450d020b2005200137030020052002370308420021010c020b00000b420021010b420021020c010b200620012002200841ff007110a405200641106a20012002200741ff007110a505200641086a2903002102200641106a41086a2903002109200629030021012006290310210a0240024020070d004200210b4200210c0c010b4200210c4200210d03402009420186200a423f8884220b200b427f8520047c200a4201862002423f8884220a427f85220b20037c200b54ad7c423f87220b2004837d200a200b200383220e54ad7d2109200a200e7d210a420020024201862001423f8884842102200d2001420186842101200b420183220b210d2007417f6a22070d000b0b02402005450d002005200a370300200520093703080b200c20024201862001423f8884842102200b20014201868421010b2000200137030020002002370308200641306a24000b0bb4ab070300418080c0000b0c318d0596a0101000a010100000419080c0000b85ab076361706163697479206f766572666c6f7700000034001000170000006e020000050000007372632f6c6962616c6c6f632f7261775f7665632e727300db0010004600000068010000130000001600000004000000040000001700000018000000190000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f72001600000000000000010000001a000000c8001000130000004a020000050000007372632f6c6962616c6c6f632f666d742e72732f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962636f72652f666d742f6d6f642e72737372632f6c6962616c6c6f632f7665632e7273292073686f756c64206265203c206c656e2028697320000074011000140000008801100017000000180f1000010000002101100013000000f10300000d000000696e73657274696f6e20696e6465782028697320292073686f756c64206265203c3d206c656e202869732000c8011000120000003401100016000000180f1000010000002101100013000000210400000d00000072656d6f76616c20696e6465782028697320000004021000140000008801100017000000180f1000010000002101100013000000330500000d000000656e6420647261696e20696e6465782028697320380210002000000058021000120000001600000000000000010000001b000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e646578206973203030303130323033303430353036303730383039313031313132313331343135313631373138313932303231323232333234323532363237323832393330333133323333333433353336333733383339343034313432343334343435343634373438343935303531353235333534353535363537353835393630363136323633363436353636363736383639373037313732373337343735373637373738373938303831383238333834383538363837383838393930393139323933393439353936393739383939000044031000060000004a03100022000000696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468207c03100016000000920310000d000000736c69636520696e64657820737461727473206174202062757420656e64732061742000030e100016000000040800002f0000005b2e2e2e5d000000180410000b000000ed0d1000160000005704100001000000cb0d10000e000000d90d100004000000dd0d1000100000005704100001000000180410000b00000023041000260000004904100008000000510410000600000057041000010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f6620606096041000020000008004100016000000560400002400000080041000160000004c040000110000007372632f6c6962636f72652f666d742f6d6f642e72732e2eaa04100016000000540000001400000030787372632f6c6962636f72652f666d742f6e756d2e727300010305050606030706080809110a1c0b190c140d100e0d0f0410031212130916011705180219031a071c021d011f1620032b032c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff09ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f7475962f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab35280b80e003190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a06213f4c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b32d740c80d61a0c0580ff0580df0cee0d03848d033709815c1480b80880cb2a38030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d0006010103010402080809020a050b020e041001110212051311140115021702190d1c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f802f902fa02fb010c273b3e4e4f8f9e9e9f060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf79cc6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a561c1417094e041e0f430e19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d1339070a362c041080c03c64530c48090a46451b4808531d398107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2f7811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d8080d030d03740c59070c140c0438080a062808224e81540c15030305070919070709030d072980cb250a840600280a1000200000000a0000001c000000280a1000200000001a000000280000007372632f6c6962636f72652f756e69636f64652f7072696e7461626c652e72730003000083042000910560005d13a0001217a01e0c20e01eef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fea0359effe035fd016136010aa136240d6137ab0ee1382f182139301c6146f31ea14af06a614e4f6fa14e9dbc214f65d1e14f00da215000e0e15130e16153ece2a154d0e8e15420002e55f001bf55a80d100023000000520000003e00000000700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b03770f0120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c0109012801030139030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d031d021e02400201070801020b09012d03770222017603040209010603db0202013a010107010101010208060a020130113f0430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c63a01050001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990bb001360f3803310402024503240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002000101030405080802071e0494030037043208010e011605010f000701110207010201050007000400076d07006080f000000000a80d1000230000004b00000028000000a80d10002300000057000000160000007372632f6c6962636f72652f756e69636f64652f756e69636f64655f646174612e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f6620607372632f6c6962636f72652f7374722f6d6f642e7273426f72726f774572726f72426f72726f774d75744572726f7270616e69636b6564206174200000690e1000010000006a0e1000030000001cd4110000000000680e100001000000680e1000010000003a27272c2020202020000000940e10001a0000006a01000026000000030e100016000000c30700002f0000007372632f6c6962636f72652f7374722f7061747465726e2e72730000c00e10001b00000052000000050000007372632f6c6962636f72652f736c6963652f6d656d6368722e72732c20000000160000000c000000040000001c0000001d0000001e0000002c0a00001600000004000000040000001f000000200000002100000028280a2c290a5d5b030e100016000000800700002f000000a50f1000260000006672616d655f737570706f72743a3a686173682f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f737570706f72742f7372632f686173682e7273496e76616c696420726576657273653a2068617368206c656e67746820746f6f2073686f7274001600000004000000040000002200000023000000240000001600000000000000010000002500000026000000270000006d61782d77656967687461637475616c5f7765696768743d48617368207461626c65206361706163697479206f766572666c6f77401010005b000000500000001b0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6861736862726f776e2d302e362e332f7372632f7261772f6d6f642e727300ffffffff16000000000000000100000028000000290000002700000016000000000000000100000028000000290000002700000000000000541110000e00000000000000641110000100000000000000000000006c1110000100000000000000000000007411100006000000000000001cd411000000000000000000000000007c1110000100000000000000000000008411100007000000000000001cd411000000000000000000000000008c11100001000000000000004e6577417574686f7269746965730000071210000d000000e3111000240000005061757365640000bc11100027000000526573756d65640094111000280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e417574686f726974794c69737400000000401210000700000000000000481210000300000000000000000000006012100003000000000000004f6666656e636500f049110004000000f44911000e00000031cf1100040000007812100055000000cd12100053000000201310004700000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e206c61737420656c656d656e7420696e64696361746573206f6620746865206f6666656e636520776173206170706c69656420287472756529206f7220717565756564202866616c7365292e0000000000941310000a0000000000000050241000010000000000000000000000a013100002000000000000004e657753657373696f6e0000b0131000550000000514100022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e53746f72656452616e676574696d737461703054696d657374616d7020696e686572656e742064617461206973206e6f742070726f76696465642e496e76616c69642074696d657374616d7020696e686572656e74206461746120656e636f64696e672e009c1410006200000088000000120000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e302f7372632f636f6465632e72734572726f725377617070696e672064697361626c656426fb100042000000590300002200000026fb1000420000005303000020000000000000008c1510001400000000000000a0151000010000000000000000000000a8151000010000000000000000000000b01510001600000000000000a0151000010000000000000000000000c815100001000000000000005061726174687265616452656769737465726564baf01000060000000516100035000000506172617468726561644465726567697374657265640000d015100035000000205468652070617261746872656164206f662074686520737570706c696564204944207761732064652d726567697374657265642e204120706172617468726561642077617320726567697374657265643b20697473206e657720494420697320737570706c6965642e00004c16100069000000440000000d0000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e72730000000000000000000000617474656d707420746f20646976696465206279207a65726f0000004c161000690000006d000000090000004c161000690000007e000000090000004c161000690000009c0000001b0000004c16100069000000d40100001c0000004c16100069000000d50100001c00000063616e6e6f74206669742061206e756d62657220696e746f20753132380000004c1610006900000090000000090000001600000000000000010000002a0000001600000000000000010000002b00000072656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b20716564001600000008000000040000002c000000e517100070000000680000001b000000726573756c742063616e6e6f742066697420696e20753132382f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727362616265736c6f744241424520696e686572656e742064617461206e6f7420666f756e640000008c1810006e000000cd0000000d0000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e727300001600000000000000010000001a000000486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b2071656400004c1910007000000008010000090000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e72731600000000000000010000001a0000001cd411000000000072756e74696d6552756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e67000000617474656d707420746f20646976696465206279207a65726f0000002c1a10006a0000005f0000002b0000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e727348617368206e6f7420657175616cb41a100065000000f6030000130000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f72756e74696d652f7372632f7472616974732e7273426164206f726967696e43616e206e6f74206c6f6f6b75705472616e616374696f6e206469737061746368206973206d616e6461746f72793b207472616e73616374696f6e73206d6179206e6f742068617665206d616e6461746f727920646973706174636865732e412063616c6c20776173206c6162656c6c6564206173206d616e6461746f72792c2062757420726573756c74656420696e20616e204572726f722e5472616e73616374696f6e20776f756c642065786861757374732074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f724475706c69636174655265706f72744f6666656e63654572726f7200e424110066000000460000001f000000e4241100660000004f000000140000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32302e302f7372632f6e6962626c652f6e6962626c65736c6963652e7273000000c01d100065000000e10000000f000000c01d100065000000df0000000f000000c01d100065000000e10000003d000000781e1000570000004b00000042000000781e1000570000004a0000003e0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32302e302f7372632f6e6f64652e727300781e1000570000006b00000022000000781e1000570000009a00000032000000781e100057000000aa0000003e00000050687261676d656e426f67757353636f726550687261676d656e426f6775734564676550687261676d656e426f67757353656c66566f746550687261676d656e536c61736865644e6f6d696e6174696f6e50687261676d656e426f6775734e6f6d696e6174696f6e50687261676d656e426f6775734e6f6d696e61746f7250687261676d656e426f677573436f6d7061637450687261676d656e426f67757357696e6e657250687261676d656e426f67757357696e6e6572436f756e74536e617073686f74556e617661696c61626c6550687261676d656e5765616b5375626d697373696f6e50687261676d656e4561726c795375626d697373696f6e416c7265616479436c61696d65644e6f74536f72746564416e64556e69717565496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c65725761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e626f6e64626f6e645f6578747261756e626f6e6477697468647261775f756e626f6e64656476616c69646174656e6f6d696e6174656368696c6c7365745f70617965657365745f636f6e74726f6c6c65727365745f76616c696461746f725f636f756e74666f7263655f6e6f5f65726173666f7263655f6e65775f6572617365745f696e76756c6e657261626c6573666f7263655f756e7374616b65666f7263655f6e65775f6572615f616c7761797363616e63656c5f64656665727265645f736c6173687061796f75745f6e6f6d696e61746f727061796f75745f76616c696461746f727061796f75745f7374616b6572737265626f6e647365745f686973746f72795f6465707468726561705f73746173687375626d69745f656c656374696f6e5f736f6c7574696f6e7375626d69745f656c656374696f6e5f736f6c7574696f6e5f756e7369676e6564426f6e6465644c65646765724e6f6d696e61746f727356616c696461746f72536c617368496e4572614e6f6d696e61746f72536c617368496e457261536c617368696e675370616e735370616e536c617368536e617073686f7456616c696461746f7273536e617073686f744e6f6d696e61746f7273457261456c656374696f6e5374617475730000000000000014241000060000000000000064a511000200000000000000000000001c24100001000000000000000000000024241000050000000000000064a511000200000000000000000000002c241000010000000000000000000000342410001a000000000000005024100001000000000000000000000058241000020000000000000000000000682410000f00000000000000782410000100000000000000000000008024100001000000000000000000000056221000060000000000000064a5110002000000000000000000000088241000040000000000000000000000a8241000080000000000000064a51100020000000000000000000000b0241000010000000000000000000000b8241000090000000000000064a51100020000000000000000000000c4241000020000000000000052657761726400001f2710004f000000536c617368000000d6261000490000004f6c64536c617368696e675265706f727444697363617264656400007cff10000c0000007d26100047000000c4261000120000005374616b696e67456c656374696f6e006e2610000f0000002a261000440000006a251000230000001cd41100000000008d25100054000000e125100049000000556e626f6e646564452510002500000057697468647261776e000000d4241000570000002b2510001a00000020416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365602066726f6d2074686520756e6c6f636b696e672071756575652e20416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e20416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e204e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c2069742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e2041206e657720736574206f66207374616b6572732077617320656c656374656420776974682074686520676976656e20636f6d7075746174696f6e206d6574686f642e456c656374696f6e436f6d7075746520416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e20604163636f756e7449646020697320746865207374617368206163636f756e742e45726173526577617264506f696e74734572617356616c696461746f7252657761726445726173546f74616c5374616b654572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f657261517565756564456c65637465644572617356616c696461746f725072656673457261735374616b657273436c6970706564457261735374616b657273556e6170706c696564536c617368657300000000000000092110000400000000000000442c10000300000000000000000000008c2c10001100000000000000000000000d2110000a00000000000000142d10000100000000000000000000002c2d1000100000000000000000000000172110000600000000000000ac2d1000010000000000000000000000c42d10001a00000000000000000000001d21100011000000000000001cd41100000000000000000000000000942e10001200000000000000000000002e2110000800000000000000242f10000100000000000000000000003c2f10000b0000000000000000000000362110000800000000000000942f1000010000000000000000000000ac2f10000b00000000000000000000003e21100005000000000000001cd41100000000000000000000000000043010000b00000000000000000000004321100009000000000000005c301000010000000000000000000000743010000b00000000000000000000004c2110000e00000000000000cc301000010000000000000000000000e43010000b00000000000000000000005a21100013000000000000003c311000010000000000000000000000543110000100000000000000000000006d2110000d000000000000001cd411000000000000000000000000005c3110000500000000000000000000007a2110000d000000000000001cd4110000000000000000000000000084311000060000000000000000000000872110001100000000000000b4311000010000000000000000000000cc311000010000000000000000000000982110000d00000000000000d4311000010000000000000000000000ec311000010000000000000000000000a521100014000000000000001cd41100000000000000000000000000f4311000050000000000000000000000b921100015000000000000001c3210000200000000000000000000004c321000070000000000000000000000ce211000100000000000000084321000020000000000000000000000b43210001e0000000000000000000000de2110001000000000000000a4331000010000000000000000000000bc331000130000000000000000000000ee2110000e0000000000000054341000020000000000000000000000843410000d0000000000000000000000fc2110000600000000000000ac2d1000010000000000000000000000ec3410000600000000000000000000000222100011000000000000001c35100001000000000000000000000034351000030000000000000000000000132210000a00000000000000d43110000100000000000000000000004c3510000700000000000000000000001d221000180000000000000084351000040000000000000000000000e43510004a00000000000000000000003522100021000000000000008435100004000000000000000000000034381000050000000000000000000000f85310000a00000000000000d9b211002300000000000000817f1100050000000000000009b7110015000000000000008554100005000000000000008a54100011000000ac5d100059000000055e1000210000001cd4110000000000265e10004c0000001cd4110000000000725e1000490000001cd41100000000008e5d1000100000001cd41100000000005fb211000b000000bb5e10003500000065ca100008000000f05e10001a0000001cd41100000000000a5f1000540000005e5f100050000000c7b211000c000000000000009e5d10000e0000000000000009b7110015000000685c100059000000c15c10000d0000001cd4110000000000ce5c100054000000225d1000590000007b5d1000130000001cd411000000000011531000550000001cd41100000000008e5d1000100000001cd41100000000005fb211000b000000665310003a00000065ca1000080000004e5c100010000000c7b211000c00000000000000817f1100050000000000000009b71100150000006958100055000000be58100040000000fe581000490000001cd4110000000000475910005200000099591000300000001cd4110000000000c95910004f000000185a10004f000000675a10003f0000001cd411000000000030541000550000001cd4110000000000a65a1000120000001cd4110000000000b85a1000260000001cd41100000000005fb211000b000000de5a100050000000a0531000260000002e5b100059000000875b10005c000000e35b100054000000375c1000170000004e5c1000100000005e5c10000a0000004f5610004b0000001cd41100000000009a5610004d000000e7561000130000001cd411000000000030541000550000001cd4110000000000fa561000130000001cd41100000000000d5710001b0000001cd41100000000005fb211000b00000028571000550000007d57100051000000ce5710003d0000000b5810005e000000c653100032000000c7b211000c000000000000003c5610000500000000000000415610000e000000025610003a0000001cd4110000000000da521000370000001cd411000000000030541000550000001cd41100000000005fb211000b000000665310003a000000a053100026000000c653100032000000c7b211000c00000000000000d35510000700000000000000da55100028000000e2541000440000001cd4110000000000da521000370000001cd411000000000030541000550000001cd41100000000005fb211000b00000026551000490000006f5510002e0000009d55100036000000c7b211000c0000009b541000320000001cd4110000000000da521000370000001cd411000000000030541000550000001cd41100000000005fb211000b000000665310003a000000cd54100015000000c653100032000000c7b211000c000000000000008554100005000000000000008a54100011000000025410002e0000001cd4110000000000da521000370000001cd411000000000030541000550000001cd41100000000005fb211000b000000665310003a000000a053100026000000c653100032000000c7b211000c00000000000000f85310000a00000000000000d9b2110023000000b6521000240000001cd4110000000000da521000370000001cd411000000000011531000550000001cd41100000000005fb211000b000000665310003a000000a053100026000000c653100032000000c7b211000c000000000000009ab611000300000000000000aa5210000c0000008a521000200000005e5210002c0000001cd41100000000005fb211000b0000004e52100010000000c7b211000c000000d35110005300000026521000280000001cd41100000000005fb211000b0000004e52100010000000c7b211000c00000000000000115010000a000000000000007671110011000000a051100033000000000000009b51100005000000000000009db611000c000000585110004300000003511000410000001cd41100000000005fb211000b0000004451100014000000c7b211000c000000000000004a45100003000000000000004d4510000800000000000000f65010000d00000000000000d2de1000080000003350100051000000845010001c000000a0501000410000001cd41100000000005fb211000b000000e150100015000000c7b211000c000000000000004a45100003000000000000004d4510000800000000000000115010000a000000000000001b501000180000008149100058000000d949100057000000304a1000310000001cd41100000000003d4c1000290000001cd4110000000000664c10003f000000c94a100059000000224b10004c000000a54c100056000000fb4c100049000000444d100022000000664d100042000000a84d100048000000f04d1000280000001cd41100000000006e4b100057000000c54b10000e0000001cd4110000000000d34b1000510000001cd41100000000005fb211000b000000184e1000570000006f4e100027000000964e10004e000000e44e1000370000001b4f1000500000006b4f100052000000bd4f100054000000c7b211000c000000000000004a45100003000000000000004d451000080000008149100058000000d949100057000000304a1000310000001cd4110000000000614a1000290000001cd41100000000008a4a10003f000000c94a100059000000224b10004c0000001cd41100000000006e4b100057000000c54b10000e0000001cd4110000000000d34b1000510000001cd41100000000005fb211000b000000244c1000190000001b81110031000000c7b211000c00000000000000724910000f000000000000009db611000c000000000000004a45100003000000000000004d4510000800000090471000440000001cd4110000000000d447100053000000274810004a000000714810004d0000001cd4110000000000be48100056000000144910001e0000001cd41100000000005fb211000b00000032491000400000001b81110031000000c7b211000c000000df461000380000001cd41100000000005fb211000b000000174710003c000000534710003d000000c7b211000c00000000000000bd4610001100000000000000ce461000110000008f461000190000001cd4110000000000a846100015000000554510004e000000a345100058000000fb451000300000001cd41100000000002b461000240000001cd41100000000004f4610004000000000000000f944100007000000000000000045100013000000000000001345100013000000000000002645100012000000000000003845100005000000000000003d4510000d000000000000004a45100003000000000000004d4510000800000055391000380000001cd41100000000008d3910000d0000009a391000450000001cd4110000000000df391000210000001cd4110000000000003a10002b0000001cd41100000000002b3a10003d000000683a100054000000bc3a10000c0000001cd4110000000000c83a10004a0000001cd4110000000000123b10002a0000001cd41100000000003c3b1000320000001cd41100000000006e3b100053000000c13b100047000000083c10004c000000543c100054000000a83c100058000000003d1000260000001cd4110000000000263d1000180000001cd41100000000003e3d100039000000773d10003e000000b53d10002b000000e03d100055000000353e1000570000008c3e1000100000009c3e100043000000df3e10001b0000001cd4110000000000fa3e1000300000001cd41100000000002a3f100059000000833f100059000000dc3f1000500000002c401000270000001cd41100000000005fb211000b0000005340100059000000ac401000390000001cd4110000000000e5401000590000003e411000520000001cd411000000000090411000380000001cd4110000000000c841100027000000ef4110002600000015421000270000003c421000370000001cd41100000000007342100045000000b84210003f000000f74210004200000039431000450000001cd41100000000007e4310004f000000cd431000570000001cd4110000000000244410002300000047441000220000001cd4110000000000694410002b00000094441000270000001cd4110000000000bb4410003e000000c7b211000c0000005c381000300000001cd41100000000008c38100057000000e3381000580000003b3910001a00000020556e7369676e65642076657273696f6e206f6620607375626d69745f656c656374696f6e5f736f6c7574696f6e602e204e6f746520746861742074686973206d757374207061737320746865205b6056616c6964617465556e7369676e6564605d20636865636b207768696368206f6e6c7920616c6c6f7773207472616e73616374696f6e732066726f6d20746865206c6f63616c206e6f646520746f20626520696e636c756465642e20496e206f7468657220776f7264732c206f6e6c792074686520626c6f636b20617574686f722063616e20696e636c7564652061207472616e73616374696f6e20696e2074686520626c6f636b2e205375626d697420612070687261676d656e20726573756c7420746f2074686520636861696e2e2049662074686520736f6c7574696f6e3a20312e2069732076616c69642e20322e206861732061206265747465722073636f7265207468616e206120706f74656e7469616c6c79206578697374696e6720736f6c7574696f6e206f6e20636861696e2e207468656e2c2069742077696c6c206265205f7075745f206f6e20636861696e2e204120736f6c7574696f6e20636f6e7369737473206f662074776f20706965636573206f6620646174613a20312e206077696e6e657273603a206120666c617420766563746f72206f6620616c6c207468652077696e6e657273206f662074686520726f756e642e20322e206061737369676e6d656e7473603a2074686520636f6d706163742076657273696f6e206f6620616e2061737369676e6d656e7420766563746f72207468617420656e636f64657320746865206564676520202020776569676874732e20426f7468206f66207768696368206d617920626520636f6d7075746564207573696e67205b6070687261676d656e605d2c206f7220616e79206f7468657220616c676f726974686d2e204164646974696f6e616c6c792c20746865207375626d6974746572206d7573742070726f766964653a202d20546865206073636f7265602074686174207468657920636c61696d20746865697220736f6c7574696f6e206861732e20426f74682076616c696461746f727320616e64206e6f6d696e61746f72732077696c6c20626520726570726573656e74656420627920696e646963657320696e2074686520736f6c7574696f6e2e2054686520696e64696365732073686f756c6420726573706563742074686520636f72726573706f6e64696e6720747970657320285b6056616c696461746f72496e646578605d20616e64205b604e6f6d696e61746f72496e646578605d292e204d6f72656f7665722c20746865792073686f756c642062652076616c6964207768656e207573656420746f20696e64657820696e746f205b60536e617073686f7456616c696461746f7273605d20616e64205b60536e617073686f744e6f6d696e61746f7273605d2e20416e7920696e76616c696420696e6465782077696c6c2063617573652074686520736f6c7574696f6e20746f2062652072656a65637465642e2054686573652074776f2073746f72616765206974656d73206172652073657420647572696e672074686520656c656374696f6e2077696e646f7720616e64206d6179206265207573656420746f2064657465726d696e652074686520696e64696365732e204120736f6c7574696f6e2069732076616c69642069663a20302e204974206973207375626d6974746564207768656e205b60457261456c656374696f6e537461747573605d20697320604f70656e602e20312e2049747320636c61696d65642073636f726520697320657175616c20746f207468652073636f726520636f6d7075746564206f6e2d636861696e2e20322e2050726573656e74732074686520636f7272656374206e756d626572206f662077696e6e6572732e20332e20416c6c20696e6465786573206d7573742062652076616c7565206163636f7264696e6720746f2074686520736e617073686f7420766563746f72732e20416c6c20656467652076616c756573206d75737420202020616c736f20626520636f727265637420616e642073686f756c64206e6f74206f766572666c6f7720746865206772616e756c6172697479206f662074686520726174696f20747970652028692e652e20323536202020206f722062696c6c696f6e292e20342e20466f72206561636820656467652c20616c6c2074617267657473206172652061637475616c6c79206e6f6d696e617465642062792074686520766f7465722e20352e2048617320636f72726563742073656c662d766f7465732e204120736f6c7574696f6e732073636f726520697320636f6e736973746564206f66203320706172616d65746572733a20312e20606d696e207b20737570706f72742e746f74616c207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265206d6178696d697a65642e20322e206073756d207b20737570706f72742e746f74616c207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265206d696e696d697a65642e20332e206073756d207b20737570706f72742e746f74616c5e32207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265202020206d696e696d697a65642028746f20656e73757265206c6573732076617269616e63652920453a206e756d626572206f662065646765732e206d3a2073697a65206f662077696e6e657220636f6d6d69747465652e206e3a206e756d626572206f66206e6f6d696e61746f72732e20643a2065646765206465677265652028313620666f72206e6f772920763a206e756d626572206f66206f6e2d636861696e2076616c696461746f722063616e646964617465732e204e4f54453a20676976656e206120736f6c7574696f6e20776869636820697320726564756365642c2077652063616e20656e61626c652061206e657720636865636b2074686520656e7375726520607c457c203c206e202b206d602e20576520646f6e277420646f2074686973205f7965745f2c20627574206f7572206f6666636861696e20776f726b657220636f6465206578656375746573206974206e6f6e657468656c6573732e206d616a6f722073746570732028616c6c20646f6e6520696e2060636865636b5f616e645f7265706c6163655f736f6c7574696f6e60293a202d2053746f726167653a204f28312920726561642060456c656374696f6e537461747573602e202d2053746f726167653a204f2831292072656164206050687261676d656e53636f7265602e202d2053746f726167653a204f2831292072656164206056616c696461746f72436f756e74602e202d2053746f726167653a204f283129206c656e67746820726561642066726f6d2060536e617073686f7456616c696461746f7273602e202d2053746f726167653a204f287629207265616473206f6620604163636f756e7449646020746f2066657463682060736e617073686f745f76616c696461746f7273602e202d204d656d6f72793a204f286d2920697465726174696f6e7320746f206d61702077696e6e657220696e64657820746f2076616c696461746f722069642e202d2053746f726167653a204f286e2920726561647320604163636f756e7449646020746f2066657463682060736e617073686f745f6e6f6d696e61746f7273602e202d204d656d6f72793a204f286e202b206d2920726561647320746f206d617020696e64657820746f20604163636f756e7449646020666f7220756e2d636f6d706163742e202d2053746f726167653a204f286529206163636f756e7469642072656164732066726f6d20604e6f6d696e6174696f6e6020746f207265616420636f7272656374206e6f6d696e6174696f6e732e202d2053746f726167653a204f2865292063616c6c7320696e746f2060736c61736861626c655f62616c616e63655f6f665f657874656e6465646020746f20636f6e7665727420726174696f20746f207374616b65642e202d204d656d6f72793a206275696c645f737570706f72745f6d61702e204f2865292e202d204d656d6f72793a206576616c756174655f737570706f72743a204f2845292e202d2053746f726167653a204f2865292077726974657320746f2060517565756564456c6563746564602e202d2053746f726167653a204f28312920777269746520746f206051756575656453636f7265602054686520776569676874206f6620746869732063616c6c20697320312f31307468206f662074686520626c6f636b7320746f74616c207765696768742e77696e6e6572735665633c56616c696461746f72496e6465783e636f6d706163745f61737369676e6d656e7473436f6d7061637441737369676e6d656e747373636f726550687261676d656e53636f7265657261457261496e6465782052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e6365206973207a65726f2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c6566742e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e2053657420686973746f72795f64657074682076616c75652e204f726967696e206d75737420626520726f6f742e6e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e202d2054696d6520636f6d706c65786974793a204f2831292e20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e20506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e202d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f20202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e202d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e20546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966206974206973206e6f74206f6e65206f6620746865207374616b6572732e202d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e76616c696461746f725f7374617368202a2a546869732065787472696e7369632077696c6c2062652072656d6f76656420616674657220604d6967726174696f6e457261202b20486973746f727944657074686020686173207061737365642c20676976696e67206f70706f7274756e69747920666f7220757365727320746f20636c61696d20616c6c2072657761726473206265666f7265206d6f76696e6720746f2053696d706c65205061796f7574732e20416674657220746869732074696d652c20796f752073686f756c642075736520607061796f75745f7374616b6572736020696e73746561642e2a2a204d616b65206f6e652076616c696461746f722773207061796f757420666f72206f6e65206572612e202d206077686f602069732074686520636f6e74726f6c6c6572206163636f756e74206f66207468652076616c696461746f7220746f20706179206f75742e202d206065726160206d6179206e6f74206265206c6f776572207468616e206f6e6520666f6c6c6f77696e6720746865206d6f737420726563656e746c792070616964206572612e204966206974206973206869676865722c2020207468656e20697420696e6469636174657320616e20696e737472756374696f6e20746f20736b697020746865207061796f7574206f6620616c6c2070726576696f757320657261732e205741524e494e473a206f6e636520616e2065726120697320706179656420666f7220612076616c696461746f7220737563682076616c696461746f722063616e277420636c61696d20746865207061796f7574206f662070726576696f7573206572612e205741524e494e473a20496e636f727265637420617267756d656e747320686572652063616e20726573756c7420696e206c6f7373206f66207061796f75742e2042652076657279206361726566756c2e202d2054696d6520636f6d706c65786974793a204f2831292e204d616b65206f6e65206e6f6d696e61746f722773207061796f757420666f72206f6e65206572612e202d206077686f602069732074686520636f6e74726f6c6c6572206163636f756e74206f6620746865206e6f6d696e61746f7220746f20706179206f75742e202d206076616c696461746f72736020697320746865206c697374206f6620616c6c2076616c696461746f72732074686174206077686f6020686164206578706f7375726520746f20647572696e672060657261602c202020616c6f6e67736964652074686520696e646578206f66206077686f6020696e2074686520636c6970706564206578706f73757265206f66207468652076616c696461746f722e202020492e652e206561636820656c656d656e742069732061207475706c65206f66202020602876616c696461746f722c20696e646578206f66206077686f6020696e20636c6970706564206578706f73757265206f662076616c696461746f7229602e202020496620697420697320696e636f6d706c6574652c207468656e206c657373207468616e207468652066756c6c207265776172642077696c6c2062652070616964206f75742e2020204974206d757374206e6f742065786365656420604d41585f4e4f4d494e4154494f4e53602e202d204e756d626572206f662073746f726167652072656164206f6620604f2876616c696461746f727329603b206076616c696461746f7273602069732074686520617267756d656e74206f66207468652063616c6c2c202020616e6420697320626f756e64656420627920604d41585f4e4f4d494e4154494f4e53602e202d20456163682073746f72616765207265616420697320604f284e29602073697a6520616e64206465636f646520636f6d706c65786974793b20604e602069732074686520206d6178696d756d2020206e6f6d696e6174696f6e7320746861742063616e20626520676976656e20746f20612073696e676c652076616c696461746f722e202d20436f6d7075746174696f6e20636f6d706c65786974793a20604f284d41585f4e4f4d494e4154494f4e53202a206c6f674e29603b20604d41585f4e4f4d494e4154494f4e5360206973207468652020206d6178696d756d206e756d626572206f662076616c696461746f72732074686174206d6179206265206e6f6d696e6174656420627920612073696e676c65206e6f6d696e61746f722c206974206973202020626f756e646564206f6e6c792065636f6e6f6d6963616c6c792028616c6c206e6f6d696e61746f72732061726520726571756972656420746f20706c6163652061206d696e696d756d207374616b65292e76616c696461746f72735665633c28543a3a4163636f756e7449642c20753332293e2043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279206569746865722074686520726f6f74206f726967696e206f72207468652060543a3a536c61736843616e63656c4f726967696e602e2070617373696e67207468652065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e202d204f6e652073746f726167652077726974652e736c6173685f696e646963657320466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e202d204f6e652073746f7261676520777269746520466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e737461736820536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e20466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e2054686520696465616c206e756d626572206f662076616c696461746f72732e436f6d706163743c7533323e202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e636f6e74726f6c6c6572202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e706179656552657761726444657374696e6174696f6e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e202d20436f6e7461696e73206f6e6520726561642e204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f66206074617267657473602c2077686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e746172676574735665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e20456d697473206057697468647261776e602e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e20456d6974732060556e626f6e646564602e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e202d204f6e6520444220656e7472792e203c2f7765696768743e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e20456d6974732060426f6e646564602e6d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e000000000000106c10000c00000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd411001c6c100000000000000000002c6c100007000000000000000100000000000000646c10000e00000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd41100746c10000000000000000000846c1000010000000000000001000000000000008c6c10001500000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd41100a46c10000000000000000000b46c100001000000000000000100000000000000bc6c10000d00000000000000000000007671110011000000000000000000000000000000000000000000000000000000000000001cd41100cc6c10000000000000000000dc6c100003000000000000000100000000000000562210000600000001050000000000009db611000c000000000000009db611000c000000000000000000000000000000000000001cd411003c7210000000000000000000f46c1000010000000000000000000000000000005c2210000600000001020000000000009db611000c00000000000000fc6c100029000000000000000000000000000000000000001cd411003c7210000000000000000000286d100001000000000000000000000000000000306d10000500000001050000000000009db611000c000000000000008a54100011000000000000000000000000000000000000001cd41100386d10000000000000000000486d1000010000000000000001000000000000003bd610000a00000001050000000000009db611000c00000000000000415610000e000000000000000000000000000000000000001cd41100dc6e10000000000000000000506d100001000000000000000100000000000000622210000a00000001050000000000009db611000c00000000000000586d100019000000000000000000000000000000000000001cd41100746d10000000000000000000846d1000010000000000000000000000000000008c6d10000a00000000000000000000004d45100008000000000000000000000000000000000000000000000000000000000000001cd41100007310000000000000000000986d100004000000000000000000000000000000b86d1000090000000000000000000000c16d10000d000000000000000000000000000000000000000000000000000000000000001cd41100d06d10000000000000000000e06d100004000000000000000000000000000000006e10001500000001050000000000004d45100008000000000000007cff10000c000000000000000000000000000000000000001cd41100007310000000000000000000186e100001000000000000000000000000000000062810000b00000002050500000000004d45100008000000000000009db611000c00000000000000206e100024000000000000001cd41100746e10000000000000000000446e100006000000000000000100000000000000f42710001200000002050500000000004d45100008000000000000009db611000c00000000000000206e100024000000000000001cd41100746e10000000000000000000846e10000b000000000000000100000000000000e22710001200000002050500000000004d45100008000000000000009db611000c00000000000000415610000e000000000000001cd41100dc6e10000000000000000000ec6e1000050000000000000001000000000000007e2710001300000001050000000000004d4510000800000000000000de4d11000c000000000000000000000000000000000000001cd41100ec7010000000000000000000146f1000030000000000000000000000000000006e2710001000000001050000000000004d45100008000000000000002c6f10001d000000000000000000000000000000000000001cd411004c6f100000000000000000005c6f100002000000000000000100000000000000912710000e00000001050000000000004d4510000800000000000000de4d11000c000000000000000000000000000000000000001cd41100f46f100000000000000000006c6f1000020000000000000001000000000000007c6f1000080000000000000000000000846f100007000000000000000000000000000000000000000000000000000000000000001cd411008c6f100000000000000000009c6f100001000000000000000100000000000000a46f10001300000000000000000000005f3a110007000000000000000000000000000000000000000000000000000000000000001cd41100b86f10000000000000000000c86f100003000000000000000100000000000000e06f1000130000000000000000000000de4d11000c000000000000000000000000000000000000000000000000000000000000001cd41100f46f100000000000000000000470100002000000000000000100000000000000112810001000000001050000000000004d4510000800000000000000147010002f000000000000000000000000000000000000001cd4110044701000000000000000000054701000010000000000000001000000000000005c7010000a0000000000000000000000667010001d000000000000000000000000000000000000000000000000000000000000001cd4110084701000000000000000000094701000040000000000000001000000000000006c2210001300000002050500000000004d45100008000000000000009db611000c00000000000000b470100017000000000000001cd41100cc7010000000000000000000dc701000020000000000000000000000000000007f2210001300000002050500000000004d45100008000000000000009db611000c00000000000000de4d11000c000000000000001cd41100ec7010000000000000000000fc70100001000000000000000000000000000000922210000d00000001050000000000009db611000c000000000000000471100017000000000000000000000000000000000000001cd411001c71100000000000000000002c711000010000000000000000000000000000009f2210000900000001050000000000003471100023000000000000005771100022000000000000000000000000000000000000001cd411007c71100000000000000000008c711000020000000000000001000000000000009c7110001600000000000000000000004d45100008000000000000000000000000000000000000000000000000000000000000001cd41100007310000000000000000000b471100001000000000000000000000000000000a82210001200000000000000000000007671110011000000000000000000000000000000000000000000000000000000000000001cd41100cc7110000000000000000000bc71100002000000000000000000000000000000ba2210001200000000000000000000007671110011000000000000000000000000000000000000000000000000000000000000001cd41100cc7110000000000000000000dc71100002000000000000000000000000000000d52710000d0000000000000000000000ec7110002a000000000000000000000000000000000000000000000000000000000000001cd411003c72100000000000000000001872100003000000000000000000000000000000307210000b00000000000000000000003d4510000d000000000000000000000000000000000000000000000000000000000000001cd411003c72100000000000000000004c72100001000000000000000000000000000000cc221000110000000000000000000000547210001e000000000000000000000000000000000000000000000000000000000000001cd4110074721000000000000000000084721000020000000000000001000000000000009472100015000000000000000000000031cf110004000000000000000000000000000000000000000000000000000000000000001cd41100ac7210000000000000000000bc72100001000000000000000100000000000000a48711000e0000000000000000000000b287110008000000000000000000000000000000000000000000000000000000000000001cd41100c47210000000000000000000d472100004000000000000000100000000000000f47210000a00000000000000000000004d45100008000000000000000000000000000000000000000000000000000000000000001cd4110000731000000000000000000010731000010000000000000000000000486973746f727944657074681600000000000000010000002d00000048821000230000001cd41100000000006b8210004e0000001cd4110000000000b982100043000000fc8210002b000000278310004400000056616c696461746f72436f756e7400001600000000000000010000002e0000001e8210002a0000004d696e696d756d56616c696461746f72436f756e740000001600000000000000010000002f000000ce81100050000000496e76756c6e657261626c657300000016000000000000000100000030000000fa801000560000005081100053000000a38110002b000000ba801000400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00000069801000510000005061796565000000160000000000000001000000310000003080100039000000df7f1000510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e00000016000000000000000100000032000000867f10005900000043757272656e744572610000f67e1000170000001cd41100000000000d7f100059000000667f100020000000416374697665457261416374697665457261496e666f000016000000000000000100000032000000477e1000360000001cd41100000000007d7e10002e000000ab7e10004b00000045726173537461727453657373696f6e496e646578000000fb7d10004c0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3edd7d10001e0000001cd41100000000007d7b1000580000001cd4110000000000d57b10002a0000008d7d10005000000016000000000000000100000033000000ff7b1000260000001cd4110000000000257c1000560000007b7c100037000000b27c100047000000f97c10003d0000001cd4110000000000367d1000570000001cd4110000000000d57b10002a0000008d7d10005000000016000000000000000100000034000000397b1000440000001cd41100000000007d7b1000580000001cd4110000000000d57b10002a000000af7a1000420000001cd4110000000000f17a100048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e000000160000000000000001000000350000003b7a10002b000000667a100049000000b97910003b000000f479100047000000466f726365457261466f7263696e670016000000000000000100000031000000a479100015000000536c6173685265776172644672616374696f6e001600000000000000010000002e0000002d7910003e0000001cd41100000000006b7910003900000043616e63656c6564536c6173685061796f75740016000000000000000100000036000000ad78100045000000f27810003b0000005665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e00160000000000000001000000300000007c78100031000000426f6e646564457261735665633c28457261496e6465782c2053657373696f6e496e646578293e0016000000000000000100000030000000d2771000490000001cd41100000000001b781000320000004d7810002f0000002850657262696c6c2c2042616c616e63654f663c543e2900160000000000000001000000320000006577100051000000b67710001c000000160000000000000001000000320000000d77100058000000736c617368696e673a3a536c617368696e675370616e730016000000000000000100000032000000ea7610002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e000000160000000000000001000000370000006d7610004f000000bc7610002e0000004561726c69657374556e6170706c696564536c61736800002e7610003f000000d5751000590000008f751000460000001600000000000000010000003200000036751000590000008f75100046000000456c656374696f6e526573756c743c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00007874100059000000d174100058000000297510000d00000051756575656453636f726500160000000000000001000000320000004c7410002c000000456c656374696f6e5374617475733c543a3a426c6f636b4e756d6265723e000016000000000000000100000031000000df73100052000000317410001b000000497343757272656e7453657373696f6e46696e616c00000016000000000000000100000032000000b17310002e000000160000000000000001000000380000005673100033000000e48711001f0000001cd411000000000089731000280000004d696772617465457261000016000000000000000100000032000000187310003e0000002054686520657261207768657265207765206d696772617465642066726f6d204c617a79205061796f75747320746f2053696d706c65205061796f7574732054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e20546869732069732073657420746f2076332e302e3020666f72206e6577206e6574776f726b732e2054727565206966207468652063757272656e7420706c616e6e65642073657373696f6e2069732066696e616c2e20466c616720746f20636f6e74726f6c2074686520657865637574696f6e206f6620746865206f6666636861696e20656c656374696f6e2e205768656e20604f70656e285f29602c2077652061636365707420736f6c7574696f6e7320746f206265207375626d69747465642e205468652073636f7265206f66207468652063757272656e74205b60517565756564456c6563746564605d2e20546865206e6578742076616c696461746f72207365742e2041742074686520656e64206f6620616e206572612c206966207468697320697320617661696c61626c652028706f74656e7469616c6c792066726f6d2074686520726573756c74206f6620616e206f6666636861696e20776f726b6572292c20697420697320696d6d6564696174656c7920757365642e204f74686572776973652c20746865206f6e2d636861696e20656c656374696f6e2069732065786563757465642e20536e617073686f74206f66206e6f6d696e61746f72732061742074686520626567696e6e696e67206f66207468652063757272656e7420656c656374696f6e2077696e646f772e20546869732073686f756c64206f6e6c79206861766520612076616c7565207768656e205b60457261456c656374696f6e537461747573605d203d3d2060456c656374696f6e5374617475733a3a4f70656e285f29602e20536e617073686f74206f662076616c696461746f72732061742074686520626567696e6e696e67206f66207468652063757272656e7420656c656374696f6e2077696e646f772e20546869732073686f756c64206f6e6c7920546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e204d6f6465206f662065726120666f7263696e672e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e20284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e20546865206163746976652065726120697320746865206572612063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f206053657373696f6e496e746572666163653a3a76616c696461746f7273602e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e0000000000dc8310000e000000000000007cff10000c000000000000001cd41100ec8310000000000000000000fc831000010000000000000000000000048410000f000000000000004d45100008000000000000001cd4110014841000000000000000000024841000010000000000000053657373696f6e73506572457261000016000000000000000100000039000000658410001c000000426f6e64696e674475726174696f6e001600000000000000010000003a0000002c84100039000000204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e65786163746c79206f6e65206f6620606d617962655f76616c696461746f726020616e6420606d617962655f6e6f6d696e6174696f6e2e69735f736f6d656020697320747275652e2069735f76616c696461746f722069732066616c73653b206d617962655f6e6f6d696e6174696f6e20697320736f6d653b207165640000108510005d00000063090000220000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f7374616b696e672f7372632f6c69622e727300000000000000cc2010000d0000000000000064881000010000000000000000000000c420100008000000000000006c881000010000000000000000000000b72010000d0000000000000074881000010000000000000000000000aa2010000d000000000000007c8810000100000000000000000000009e2010000c0000000000000084881000010000000000000000000000902010000e000000000000008c8810000100000000000000000000007f2010001100000000000000948810000100000000000000000000006e20100011000000000000009c881000010000000000000000000000622010000c00000000000000a4881000010000000000000000000000552010000d00000000000000ac881000010000000000000000000000492010000c00000000000000b4881000010000000000000000000000372010001200000000000000bc8810000100000000000000000000001d2010001a00000000000000c48810000100000000000000000000000b2010001200000000000000cc881000010000000000000000000000fd1f10000e00000000000000d4881000010000000000000000000000e61f10001700000000000000dc881000010000000000000000000000d01f10001600000000000000e4881000010000000000000000000000bd1f10001300000000000000ec881000010000000000000000000000a51f10001800000000000000f4881000010000000000000000000000921f10001300000000000000fc8810000200000000000000000000007e1f100014000000000000000c891000020000000000000000000000681f100016000000000000001c891000010000000000000000000000511f1000170000000000000024891000010000000000000000000000381f100019000000000000002c891000020000000000000000000000231f100015000000000000003c891000010000000000000000000000121f1000110000000000000044891000010000000000000000000000001f100012000000000000004c8910000100000000000000df8e10001a000000ca8e100015000000b18e100019000000938e10001e0000007a8e100019000000698e100011000000478e100022000000148e100033000000ef8d100025000000c68d100029000000938d1000330000007c8d1000170000005d8d10001f0000003c8d100021000000f98c100043000000c08c100039000000808c1000400000004c8c100034000000208c10002c000000ba8b100058000000128c10000e000000398b100057000000908b10002a000000f48a100045000000a18a100053000000348a1000580000008c8a100015000000eb891000490000009a8910005100000054891000460000002054686520636c61696d65642073636f726520646f6573206e6f74206d61746368207769746820746865206f6e6520636f6d70757465642066726f6d2074686520646174612e20546865207375626d697474656420726573756c742068617320756e6b6e6f776e206564676573207468617420617265206e6f7420616d6f6e67207468652070726573656e7465642077696e6e6572732e20412073656c6620766f7465206d757374206f6e6c79206265206f726967696e617465642066726f6d20612076616c696461746f7220746f204f4e4c59207468656d73656c7665732e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f72732068617320616e2065646765207768696368206973207375626d6974746564206265666f726520746865206c617374206e6f6e2d7a65726f20736c617368206f6620746865207461726765742e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f72732068617320616e206564676520746f20776869636820746865792068617665206e6f7420766f746564206f6e20636861696e2e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f7273206973206e6f7420616e20616374697665206e6f6d696e61746f72206f6e20636861696e2e204572726f72207768696c65206275696c64696e67207468652061737369676e6d656e7420747970652066726f6d2074686520636f6d706163742e20546869732063616e2068617070656e20696620616e20696e64657820697320696e76616c69642c206f72206966207468652077656967687473205f6f766572666c6f775f2e204f6e65206f6620746865207375626d69747465642077696e6e657273206973206e6f7420616e206163746976652063616e646964617465206f6e20636861696e2028696e646578206973206f7574206f662072616e676520696e20736e617073686f74292e20496e636f7272656374206e756d626572206f662077696e6e65727320776572652070726573656e7465642e2054686520736e617073686f742064617461206f66207468652063757272656e742077696e646f77206973206d697373696e672e20546865207375626d697474656420726573756c74206973206e6f7420617320676f6f6420617320746865206f6e652073746f726564206f6e20636861696e2e20546865207375626d697474656420726573756c74206973207265636569766564206f7574206f6620746865206f70656e2077696e646f772e205265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e204974656d7320617265206e6f7420736f7274656420616e6420756e697175652e20496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e416d6f756e744c6f774e6f7456657374696e6776657374766573745f6f746865727665737465645f7472616e7366657200000000000000848f10000e0000000000000064a51100020000000000000000000000948f1000020000000000000000000000a48f1000100000000000000044a51100010000000000000000000000b48f1000010000000000000056657374696e6755706461746564000007901000560000005d9010004600000056657374696e67436f6d706c65746564bc8f10004b00000020416e206163636f756e742028676976656e2920686173206265636f6d652066756c6c79207665737465642e204e6f20667572746865722076657374696e672063616e2068617070656e2e2054686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e646963617465206d6f72652066756e64732061726520617661696c61626c652e205468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4475706c696361746564486561727462656174496e76616c69644b657968656172746265617448656172746265617441667465724b6579730000000000609110001100000000000000749110000100000000000000000000007c9110000100000000000000000000008491100007000000000000001cd411000000000000000000000000008c911000010000000000000000000000949110000b00000000000000a0911000010000000000000000000000a891100001000000000000004865617274626561745265636569766564000000799210000b0000004992100030000000416c6c476f6f64001492100035000000536f6d654f66666c696e6500fc91100018000000b09110004c0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e63652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460417574686f7269747949641600000004000000040000003b0000003c0000003d0000001600000000000000010000002a000000c090100009000000417574686f726564426c6f636b7300005b9310001600000023a11100020000005b931000160000007193100012000000696d6f6e6c696e6570616c6c65745f696d5f6f6e6c696e652f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e7273536b697070696e6720686561727462656174206174202e204e6f7420612076616c696461746f722e00939410001c000000659410002e000000339410001a0000004d94100018000000179410000a0000002194100012000000ff93100018000000e993100016000000cc9310001d0000004661696c656420746f206665746368206e6574776f726b2073746174654661696c656420746f2061637175697265206c6f636b4661696c656420746f207369676e20686561727462656174417574686f726974792020697320616c7265616479206f6e6c696e6548656172746265617420616c72656164792073656e74206174202e2057616974696e6720666f7220696e636c7573696f6e2e546f6f206561726c7920746f2073656e64206865617274626561742c206e657874206578706563746564206174204661696c656420746f207375626d6974207472616e73616374696f6e00fc9210005f000000fa010000340000007061726974792f696d2d6f6e6c696e652d6865617274626561742f00fc941000080000000495100020000000249510000b0000002f951000030000005b696e6465783a205d205265706f7274696e6720696d2d6f6e6c696e6520617420626c6f636b3a20202873657373696f6e3a20293a2000001cd41100000000001cd41100000000001600000004000000040000003e0000001600000004000000040000003e0000003c7761736d3a73747269707065643e00000000000c8f100004000000000000001cd41100000000000000000000000000f89510000d0000000000000000000000108f10000a00000000000000acaf1100010000000000000000000000609610001000000000000000000000001a8f10000f00000000000000e0961000020000000000000000000000109710000e000000000000004e9a10002f0000001cd41100000000007d9a1000580000008c9910001a0000001cd4110000000000a6991000350000001cd41100000000005fb211000b000000869811000a000000f79910001e000000159a100039000000bab211000d000000c7b211000c000000089910002f0000001cd4110000000000b09a1100340000001cd411000000000037991000550000008c9910001a0000001cd4110000000000a6991000350000001cd41100000000005fb211000b000000869811000a000000db9910001c000000f79910001e000000159a100039000000bab211000d000000c7b211000c00000000000000d3b211000600000000000000d9b211002300000000000000d79810000800000000000000df98100029000000809710001a0000001cd4110000000000b09a1100340000001cd41100000000009a97100045000000df971000400000001f9810003d0000001cd41100000000005c981000180000001cd41100000000005fb211000b0000007498100046000000ba9810001d000000c7b211000c00000020437265617465206120766573746564207472616e736665722e202d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732e202d2060616d6f756e74603a2054686520616d6f756e74206f662066756e647320746f207472616e7366657220616e642077696c6c206265207665737465642e202d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e20456d697473206056657374696e6743726561746564602e202d20437265617465732061206e65772073746f7261676520656e7472792c206275742069732070726f7465637465642062792061206d696e696d756d207472616e7366657209202020616d6f756e74206e656564656420746f20737563636565642e7363686564756c6556657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e20556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e202d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c206c6f636b656420756e6465722074686973206d6f64756c652e20456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e202d20557020746f206f6e65206163636f756e74206c6f6f6b75702e202d204f6e652062616c616e63652d6c6f636b206f7065726174696f6e2e202d204f6e652073746f7261676520726561642028636f64656320604f283129602920616e6420757020746f206f6e652072656d6f76616c2e20556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c0000000000000096a610000700000001020000000000009db611000c00000000000000df98100029000000000000000000000000000000000000001cd41100709f10000000000000000000309b1000010000000000000000000000389b10003600000020496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e000000000000a89b10001100000000000000de4d11000c000000000000001cd41100bc9b10000000000000000000cc9b100001000000000000004d696e5665737465645472616e736665720000001600000000000000010000003f000000d49b10004700000020546865206d696e696d756d20616d6f756e7420746f206265207472616e7366657272656420746f206372656174652061206e65772076657374696e67207363686564756c652e506172656e7420686173682073686f756c642062652076616c69642e5472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642e00b39c100032000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e53746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642e4e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e00000000000000c09010000900000000000000149d10000200000000000000000000001cd41100000000000000000000000000c09010000900000000000000449d100019000000000000005d9d10000a00000000000000679d10002f0000004865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e6174757265000000000000c99010000e0000000000000000000000285f11000e000000000000000000000000000000000000000000000000000000000000001cd41100909f10000000000000000000f89e100006000000000000000100000000000000d7901000040000000000000000000000289f100013000000000000000000000000000000000000000000000000000000000000001cd411003c9f100000000000000000004c9f100001000000000000000100000000000000549f10001200000002050500000000007cff10000c00000000000000669f10000900000000000000aa39110007000000000000001cd41100709f10000000000000000000809f100002000000000000000000000000000000b49210000e00000002050500000000007cff10000c0000000000000004df10000e000000000000001456110003000000000000001cd41100909f10000000000000000000a09f1000020000000000000001000000b7a010004c0000001cd411000000000003a110004400000047a11000340000007ba1100040000000bba110004e0000005665633c543a3a417574686f7269747949643e001600000000000000010000003000000083a010003400000052656365697665644865617274626561747341757468496e646578001600000000000000010000003200000027a010003c00000063a01000200000001600000000000000010000002e000000b09f100045000000f59f10003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f662060543a3a56616c696461746f7249646020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e2063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e7573657220646f6573206e6f74206861766520616e206578697374696e672076657374696e67207363686564756c653b20712e652e642e160000000c000000040000004000000060a210005d000000fd0000000d0000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f76657374696e672f7372632f6c69622e727300000000000000028f10000a0000000000000014a310000100000000000000000000002f56110017000000000000001ca31000010000000000000000000000f98e1000090000000000000024a310000100000000000000c5a31000220000006ea31000570000002ca310004200000020416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e20416e206578697374696e672076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e7420746861742063616e6e6f7420626520636c6f6262657265642e20546865206163636f756e7420676976656e206973206e6f742076657374696e672e0000000000b69010000a0000000000000020a41000010000000000000000000000a3901000130000000000000028a41000010000000000000046a410001900000030a4100016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e00000000009ca41000070000000000000000000000a3a410000e0000000000000002000000010000000100000000000000b4a410000c0000000000000077657374656e647061726974792d77657374656e64000000df6acb689907609b0200000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1502000000f78b278be53f454c02000000af2c0297a23e6d3d03000000ed99c5acb25eedf502000000cbca25e39f14238701000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8010000006772616e62616265696d6f6e70617261617564690000000040787d010065cd1d00e1f505d85aae1ec0542205b0508f1f38e4750488467020d853e903603c5121d0bf760338323222a8591903402013236039cd02480ef423a82a8f0268f8d42470955c02b8dab525c05a3302d8c4962648bd1102e0b27727a855f601e8a05828e8fedf0180773929c0cacd01586d1a2af8f1be019053fb2a50d8b201d00edc2be0fca80138edbc2c48f2a001e06d9d2d80669a01c80d7e2e500f9501c0575e2f08b6900140323f30e0278d0148202031b0418a0108a3ff3120e8870120bedf32f0fb85013856c03398698401f0fda03478218301b8d87f35d8178201d8c26036183d8101b8223e37508d800188d21c38c8fc7f0168b5f93898877f01a829d139d8297f0120d6ab3ab8db7e0168ae803b389d7e0100ca9a3b68957e01496d4f6e6c696e654772616e6470615374616b696e6756657374696e67417574686f72697479446973636f76657279526573747269637446756e6374696f6e616c69747900000000642f11000600000000000000410000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000430000000000000000000000000000004400000000000000000000000000000045000000000000000000000000000000abb110001800000000000000460000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000004400000000000000000000000000000044000000000000000000000000000000a7591100040000000000000047000000000000000000000000000000000000000000000000000000000000004400000000000000000000000200000000000000000000000000000000000000480000000000000000000000000000004400000000000000000000000000000034ca1100090000000000000049000000000000000000000000000000000000000000000000000000000000004a000000000000000000000002000000000000000000000000000000000000004b00000000000000000000000000000044000000000000000000000000000000fb93110007000000000000004c000000000000000000000000000000000000000000000000000000000000004d0000000000000000000000000000004e0000000000000000000000000000004400000000000000000000000000000044000000000000000000000000000000bd56110008000000000000004f0000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000510000000000000000000000000000005200000000000000000000000000000053000000000000000000000000000000c54c110012000000000000005400000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000000000000000000000000055000000000000000000000000000000440000000000000000000000000000007e9311000a000000000000005600000000000000000000000000000000000000000000000000000000000000570000000000000000000000020000000000000000000000000000000000000044000000000000000000000000000000580000000000000000000000000000008fa61000070000000000000059000000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000005b0000000000000000000000000000005c0000000000000000000000000000005d0000000000000000000000000000008931110008000000000000005e00000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000005f000000000000000000000000000000440000000000000000000000000000004400000000000000000000000000000050b110000a00000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000004400000000000000000000000000000044000000000000000000000000000000dbcb110007000000000000006000000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000006200000000000000000000000000000044000000000000000000000000000000630000000000000000000000000000007eb110000f0000000000000064000000000000000000000000000000000000000000000000000000000000006500000000000000000000000200000000000000000000000000000000000000660000000000000000000000000000006700000000000000000000000000000088a6100007000000000000006800000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000006a000000000000000000000000000000440000000000000000000000000000006b00000000000000000000000000000080a6100008000000000000006c000000000000000000000000000000000000000000000000000000000000006d0000000000000000000000000000006e000000000000000000000000000000440000000000000000000000000000006f0000000000000000000000000000009da610001200000002000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000002000000000000000000000000000000000000004400000000000000000000000000000044000000000000000000000000000000b0ef10000a0000000000000070000000000000000000000000000000000000000000000000000000000000007100000000000000000000000200000000000000000000000000000000000000440000000000000000000000000000007200000000000000000000000000000039ba10000c0000000000000073000000000000000000000000000000000000000000000000000000000000007400000000000000000000000200000000000000000000000000000000000000440000000000000000000000000000007500000000000000000000000000000096d6100009000000000000007600000000000000000000000000000000000000000000000000000000000000770000000000000000000000000000007800000000000000000000000000000044000000000000000000000000000000790000000000000000000000000000009d7a110007000000000000007a000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000007c000000000000000000000000000000440000000000000000000000000000007d000000000000000000000000000000f4a3110008000000000000007e000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000800000000000000000000000000000004400000000000000000000000000000081000000000000000000000000000000ae1c1100080000000000000082000000000000000000000000000000000000000000000000000000000000008300000000000000000000000000000084000000000000000000000000000000440000000000000000000000000000008500000000000000000000000000000096a61000070000000000000086000000000000000000000000000000000000000000000000000000000000008700000000000000000000000000000088000000000000000000000000000000890000000000000000000000000000008a0000000000000000000000000000000dfc100009000000000000008b00000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000008c00000000000000000000000000000044000000000000000000000000000000440000000000000000000000000000008ccb100004000000000000008d000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000008f00000000000000000000000000000044000000000000000000000000000000900000000000000000000000486973746f726963616c6d6f72655f6174746573746174696f6e73546f6f4d616e794174746573746174696f6e7346696e616c697479547261636b6572000000648a11006a000000910000000d000000526563656e7448696e747352616e646f6d6e657373436f6c6c656374697665466c697052616e646f6d4d6174657269616c42616448696e74416c72656164795570646174656466696e616c5f68696e742f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f72616e646f6d6e6573732d636f6c6c6563746976652d666c69702f7372632f6c69622e72731600000004000000040000009100000050726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b2071656400000000000000000000b8b210003d000000736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b2071656400000000000000000000000000000000000000000000006bb11000130000000000000024b3100001000000000000002cb3100035000000204d6f7265206174746573746174696f6e732063616e206265206164646564206f6e6c79206f6e636520696e206120626c6f636b2e5570646174654f72646572656448696e74734d656469616e616c77617973206174206c65617374206f6e6520726563656e742073616d706c653b207165640074b41000660000006e0000002b000000726563656e7420616e64206f72646572656420636f6e7461696e207468652073616d65206974656d733b2071656400001600000004000000040000000f00000074b4100066000000790000001b0000007072756e696e672064696374617465642062792077696e646f775f73697a6520776869636820697320616c776179732073617475726174656420617420313b207165640074b4100066000000940000001100000074b41000660000008e0000001900000074b41000660000008f000000190000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f66696e616c6974792d747261636b65722f7372632f6c69622e72730000000000047eb510000e0000008cb510000b00000036b510001300000064b510001a00000036b510001300000049b510001b000000617373657274696f6e206661696c65643a2062697473203c3d20726573756c742e6c656e28294361706163697479206f766572666c6f773a20206f766572666c6f777320616c6c6f636174696f6e2073697a6520206f766572666c6f7773206d6178696d756d206c656e67746820566563746f72206c656e67746820206f766572666c6f7773200000000000e6b110000a00000000000000c4b51000010000000000000000000000dcb5100002000000000000000000000044b61000040000000000000048b6100017000000ecb510003d00000029b610001b0000002048696e7420746861742074686520617574686f72206f66207468697320626c6f636b207468696e6b732074686520626573742066696e616c697a656420626c6f636b2069732074686520676976656e206e756d6265722e68696e74436f6d706163743c543a3a426c6f636b4e756d6265723e0000000000a0b110000b000000000000000000000018b8100013000000000000000000000000000000000000000000000000000000000000001cd4110034b8100000000000000000002cb810000100000000000000010000000000000067b310000c000000000000000000000018b8100013000000000000000000000000000000000000000000000000000000000000001cd4110034b81000000000000000000044b810000100000000000000010000000000000073b31000060000000000000000000000285f11000e000000000000000000000000000000000000000000000000000000000000001cd411004cb8100000000000000000005cb810000100000000000000010000000000000061b31000060000000000000000000000285f11000e000000000000000000000000000000000000000000000000000000000000001cd4110064b81000000000000000000074b8100001000000000000000000000000000000f45e11000b000000000000000000000031cf110004000000000000000000000000000000000000000000000000000000000000001cd4110034bc100000000000000000001cd411000000000000000000010000005665633c543a3a426c6f636b4e756d6265723e00dfb810000e00000016000000000000000100000030000000c9b81000160000001600000000000000010000002e000000bdb810000c000000160000000000000001000000320000007cb81000410000002046696e616c2068696e7420746f206170706c7920696e2074686520626c6f636b2e20604e6f6e6560206d65616e73202273616d6520617320706172656e74222e20546865206d656469616e2e204f72646572656420726563656e742068696e74732e20526563656e742068696e74732e0000000000000060b910000a00000000000000285f11000e000000000000001cd411006cb9100000000000000000007cb9100001000000000000000000000084b910000d00000000000000285f11000e000000000000001cd4110094b910000000000000000000a4b91000010000000000000057696e646f7753697a65000016000000000000000100000092000000f3b91000460000005265706f72744c6174656e637900000016000000000000000100000093000000acb9100047000000205468652064656c617920616674657220776869636820706f696e74207468696e6773206265636f6d6520737573706963696f75732e2044656661756c7420697320313030302e20546865206e756d626572206f6620726563656e742073616d706c657320746f206b6565702066726f6d207468697320636861696e2e2044656661756c74206973203130312e4174746573746174696f6e7350617261426c6f636b4174746573746174696f6e73526563656e7450617261426c6f636b730000000000005ab11000110000000000000098ba100001000000000000000000000094cc1000010000000000000000000000b0ba10000500000000000000b5ba1000100000005f6d6f72654d6f72654174746573746174696f6e73000000000000005aba1000100000000105000000000000285f11000e00000000000000d0bb100011000000000000000000000000000000000000001cd41100e4bb10000000000000000000f4bb10000200000000000000000000000000000045ba1000150000000205060000000000285f11000e0000000000000004bc1000040000000000000008bc100014000000000000001cd411001cbc100000000000000000002cbc10000100000000000000000000000000000028cf110009000000000000000000000031cf110004000000000000000000000000000000000000000000000000000000000000001cd4110034bc100000000000000000001cd41100000000000000000001000000496e636c75646564426c6f636b733c543e000000160000000000000001000000320000006ebc10003c000000aabc10003300000048617368426c6f636b4174746573746174696f6e733c543e1600000000000000010000003200000044bc10002a00000016000000000000000100000032000000204174746573746174696f6e73206f6e206120726563656e742070617261636861696e20626c6f636b2e2041206d617070696e672066726f6d206d6f64756c617220626c6f636b206e756d62657220286e2025204174746573746174696f6e506572696f642920746f2073657373696f6e20696e64657820616e6420746865206c697374206f662063616e646964617465206861736865732e00000000000000c3b110000e000000000000000000000038bd10000c000000000000000000000000000000000000000000000000000000000000001cd4110044bd1000000000000000000054bd10000300000000000000010000005665633c543a3a486173683e160000000000000001000000300000006cbd100058000000c4bd1000580000001cbe10001100000020536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e205468697320697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f6620746865206f6c6465737420686173682e0000001cd411000000000023a111000200000000000000d8b110000e0000000000000078be1000010000000000000000000000d1b11000070000000000000080be10000100000000000000acbe10003200000088be1000240000002046696e616c697a6564206865696768742061626f766520626c6f636b206e756d6265722046696e616c2068696e74206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b0000f0b110007000000053000000110000006e6577686561647350617261636861696e20686561647320636f756c64206e6f74206265206465636f6465642e00000026fb10004200000037040000140000004e6f2070617261636861696e20686561647320666f756e6420696e20696e686572656e7420646174612e7265706f72745f646f75626c655f766f74657365745f6865616473546f6f4d616e794865616455706461746573546f6f4d616e795061726143616e6469646174657348656164734f75744f664f72646572556e7265676973746572656450617261496e76616c6964436f6c6c61746f72517565756546756c6c496e76616c69644d6573736167654f726967696e4e6f56616c696461746f7247726f75704e6f74456e6f75676856616c6964697479566f746573566f74657345786365656473417574686f72697469657357726f6e6756616c696461746f72417474657374696e67496e76616c69645369676e6174757265556e746167676564566f746573506172656e744d69736d6174636843616e6e6f7450617946656573556e657870656374656452656c6179506172656e7456616c6964617465446f75626c65566f74655265706f727473526571756972655375646f7375646f7365745f6b65797375646f5f617300000000000044c1100005000000000000004cc1100001000000000000000000000054c110000100000000000000000000005cc110000a0000000000000044a5110001000000000000000000000068c1100001000000000000000000000070c110000a000000000000004cc1100001000000000000000000000054c110000100000000000000537564696400000031cf110004000000b6c11000180000004b65794368616e67656400007ac110003c0000005375646f4173446f6e6520546865207375646f6572206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e2041207375646f206a75737420746f6f6b20706c6163652e50617261636861696e206865616473206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b0016000000080000000400000094000000496e76616c69642f6f75746461746564206b6579206f776e6572736869702070726f6f662e4661696c656420746f207265706f7274206f6666656e636500000026fb100042000000e90300002f0000006f7264657265645f6e656564735f646973706174636820636f6e7461696e732069643f2126fb100042000000d20200001d00000076616c696461746f725f726f6c655f706169727326fb100042000000090300002f0000000000000075bf1000120000000000000094c4100001000000000000000000000087bf100015000000000000009cc410000100000000000000000000009cbf10000f00000000000000a4c41000010000000000000000000000abbf10001000000000000000acc41000010000000000000000000000bbbf10000f00000000000000b4c41000010000000000000000000000cabf10000900000000000000bcc41000010000000000000000000000d3bf10001400000000000000c4c41000010000000000000000000000e7bf10001000000000000000ccc41000010000000000000000000000f7bf10001600000000000000d4c410000100000000000000000000000dc010001700000000000000dcc4100001000000000000000000000024c010001700000000000000e4c410000100000000000000000000003bc010001000000000000000ecc410000100000000000000000000004bc010000d00000000000000f4c4100001000000000000000000000058c010000e00000000000000fcc410000100000000000000000000009fd51000100000000000000004c5100001000000000000000000000066c010000d000000000000000cc5100001000000000000000000000073c01000150000000000000014c510000100000000000000e2c7100038000000c3c710001f00000079c710004a0000004dc710002c0000003bc7100012000000f4c6100047000000d5c610001f000000b3c61000220000008ac61000290000004cc610003e00000013c6100039000000f2c5100021000000bec510003400000095c51000290000007cc51000190000004dc510002f0000001cc510003100000020556e65787065637465642072656c61792d706172656e7420666f7220612063616e64696461746520726563656970742e205061726120646f6573206e6f74206861766520656e6f7567682062616c616e636520746f2070617920666565732e204865616420646174612077617320746f6f206c617267652e2057726f6e6720706172656e74206865616420666f722070617261636861696e20726563656970742e20457874726120756e7461676765642076616c696469747920766f74657320616c6f6e6720776974682063616e6469646174652e20496e76616c6964207369676e61747572652066726f6d2061747465737465722e20417474657374696e672076616c696461746f72206e6f74206f6e207468697320636861696e27732076616c69646174696f6e20647574792e20546865206e756d626572206f66206174746573746174696f6e73206578636565647320746865206e756d626572206f6620617574686f7269746965732e204e6f7420656e6f7567682076616c696469747920766f74657320666f722063616e6469646174652e204e6f2076616c696461746f722067726f757020666f722070617261636861696e2e20546865206d657373616765206f726967696e20697320696e76616c69642e20546865206d6573736167652071756575652069732066756c6c2e204d657373616765732077696c6c206265206164646564207768656e2074686572652069732073706163652e20496e76616c696420636f6c6c61746f722e2043616e64696461746520697320666f7220616e20756e726567697374657265642070617261636861696e2e2050726f706f736564206865616473206d75737420626520617363656e64696e67206f726465722062792070617261636861696e20494420776974686f7574206475706c69636174652e20546f6f206d616e792070617261636861696e2063616e646964617465732e2050617261636861696e206865616473206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b2e000026fb100042000000990400003500000000000000acc010000400000000000000b0c81000010000000000000000000000c8c810000a0000000000000000000000b0c01000070000000000000018c9100001000000000000000000000030c91000090000000000000000000000b7c01000070000000000000078c91000020000000000000000000000a8c910000b0000000000000000000000c97711000400000000000000cd771100170000003ecb10004e0000001cd4110000000000b09a1100340000001cd41100000000005fb211000b00000065ca1000080000006dca10001900000086ca1000180000009eca100032000000c7b211000c000000000000009ab611000300000000000000d9b2110023000000d0ca10005d0000001cd4110000000000b09a1100340000001cd41100000000005fb211000b00000065ca1000080000006dca1000190000002dcb100011000000c7b211000c000000000000004c8111000300000000000000d9b211002300000000000000c97711000400000000000000cd7711001700000000ca10005400000054ca1000110000001cd4110000000000b09a1100340000001cd41100000000005fb211000b00000065ca1000080000006dca10001900000086ca1000180000009eca100032000000c7b211000c0000002041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d206120676976656e206163636f756e742e202d204f2831292e202d204c696d697465642073746f726167652072656164732e202d204f6e6520444220777269746520286576656e74292e202d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e202d204f6e65204442206368616e67652e2041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e5375646f00000000903811000300000000000000000000009db611000c000000000000000000000000000000000000000000000000000000000000001cd41100e8cb10000000000000000000f8cb10000100000000000000010000001600000000000000010000009500000000cc1000210000002054686520604163636f756e74496460206f6620746865207375646f206b65792e000000000000006cbf100009000000000000007ccc100001000000000000000000000094cc10000100000000000000000000005abf100012000000000000009ccc1000010000000000000000000000b4cc100004000000000000000000000028ce100005000000000000002dce100016000000e3cd100045000000000000006acd1000060000000000000070cd100073000000d4cc1000400000001cd411000000000014cd1000460000005acd1000100000002050726f7669646520612070726f6f66207468617420736f6d652076616c696461746f722068617320636f6d6d69746564206120646f75626c652d766f74652e205468652077656967687420697320303b20696e206f7264657220746f2061766f696420446f53206120605369676e6564457874656e73696f6e602076616c69646174696f6e20697320696d706c656d656e7465642e7265706f7274446f75626c65566f74655265706f72743c3c543a3a4b65794f776e657250726f6f6653797374656d2061730a20202020202020202020202020202020204b65794f776e657250726f6f6653797374656d3c284b65795479706549642c2056616c696461746f724964293e3e3a3a50726f6f663e2050726f766964652063616e64696461746520726563656970747320666f722070617261636861696e732c20696e20617363656e64696e67206f726465722062792069642e68656164735665633c417474657374656443616e6469646174653e00000000003c5d11000b0000000000000000000000acd0100010000000000000000000000000000000000000000000000000000000000000001cd411008cd110000000000000000000bcd0100001000000000000000100000000000000c4d01000040000000105000000000000baf010000600000000000000aa39110007000000000000000000000000000000000000001cd41100d8d010000000000000000000c8d0100001000000000000000000000000000000d0d01000050000000105000000000000baf010000600000000000000aa39110007000000000000000000000000000000000000001cd41100d8d010000000000000000000e8d0100001000000000000000000000000000000f0d01000120000000105000000000000baf01000060000000000000002d1100012000000000000000000000000000000000000001cd4110014d11000000000000000000024d110000200000000000000010000000000000034d11000160000000105000000000000baf0100006000000000000004ad110000a000000000000000000000000000000000000001cd4110054d11000000000000000000064d11000030000000000000001000000000000007cd110000d0000000000000000000000baef10000b000000000000000000000000000000000000000000000000000000000000001cd411008cd1100000000000000000009cd110000100000000000000010000000000000028cf1100090000000000000000000000baef10000b000000000000000000000000000000000000000000000000000000000000001cd41100a4d110000000000000000000b4d110000400000000000000000000005665633c56616c696461746f7249643e93d4100025000000436f64656dd41000260000004865616473000000160000000000000001000000960000003ad410003300000052656c6179446973706174636851756575655665633c5570776172644d6573736167653e16000000000000000100000030000000c1d310004700000008d410003200000052656c61794469737061746368517565756553697a65287533322c207533322916000000000000000100000097000000dbd21000510000002cd310005600000082d310003f0000004e6565647344697370617463680000001600000000000000010000003000000097d210004400000016000000000000000100000032000000d4d11000560000002ad21000520000001cd41100000000007cd210001b0000002060536f6d6560206966207468652070617261636861696e20686561647320676574207570646174656420696e207468697320626c6f636b2c20616c6f6e672077697468207468652070617261636861696e20494473207468617420646964207570646174652e204f72646572656420696e207468652073616d652077617920617320607265676973747261723a3a416374697665602028692e652e20627920506172614964292e20604e6f6e6560206966206e6f742079657420757064617465642e20546865206f726465726564206c697374206f662050617261496473207468617420686176652061206052656c6179446973706174636851756575656020656e7472792e2053697a65206f6620746865206469737061746368207175657565732e205365706172617465642066726f6d2061637475616c206461746120696e206f7264657220746f2061766f696420636f73746c79206465636f64696e67207768656e20636865636b696e6720726563656970742076616c69646974792e204669727374206974656d20696e207475706c652069732074686520636f756e74206f66206d65737361676573207365636f6e642069662074686520746f74616c206c656e6774682028696e20627974657329206f6620746865206d657373616765207061796c6f6164732e204d6573736167657320726561647920746f2062652064697370617463686564206f6e746f207468652072656c617920636861696e2e204974206973207375626a65637420746f20604d41585f4d4553534147455f434f554e546020616e64206057415445524d41524b5f4d4553534147455f53495a45602e20546865206865616473206f66207468652070617261636861696e7320726567697374657265642061742070726573656e742e205468652070617261636861696e7320726567697374657265642061742070726573656e742e20416c6c20617574686f72697469657327206b65797320617420746865206d6f6d656e742e00000000a1c010000b00000000000000d4d410000100000000000000dcd41000200000002053656e646572206d75737420626520746865205375646f206163636f756e7473776170646572656769737465725f7061726174687265616473656c6563745f7061726174687265616472656769737465725f706172617468726561647365745f7468726561645f636f756e74646572656769737465725f7061726172656769737465725f7061726150617261416c7265616479457869737473496e76616c6964436861696e4964496e76616c69645468726561644964436f6465546f6f4c617267654865616444617461546f6f4c617267654c696d697450617261746872656164436f6d6d697473000000d0d5100023000000605f5f49676e6f7265602063616e206e6576657220626520636f6e73747275637465644e6f4b6579734475706c6963617465644b65794e6f4173736f63696174656456616c696461746f724964496e76616c696450726f6f667365745f6b65797370757267655f6b65797356616c696461746f72734e6578744b6579734b65794f776e65722f686f6d652f6461766964642f6465762f706f6c6b61646f742d77657374656e642f72756e74696d652f636f6d6d6f6e2f7372632f7265676973747261722e7273526567697374726172446562746f727300000000000065d51000110000000000000034d7100001000000000000000000000076d510000e000000000000003cd7100001000000000000000000000084d510000f0000000000000044d7100001000000000000000000000093d510000c000000000000004cd710000100000000000000000000009fd51000100000000000000054d710000100000000000000bed710001a000000a8d710001600000091d710001700000079d71000180000005cd710001d00000020496e76616c69642070617261206865616420646174612073697a652e20496e76616c6964207061726120636f64652073697a652e20496e76616c696420706172617468726561642049442e20496e76616c69642070617261636861696e2049442e2050617261636861696e20616c7265616479206578697374732e55d6100041000000640200002d00000055d610004100000002020000110000005175657565644b65797300000000000029d6100008000000000000005cd810000200000000000000000000008cd810000c000000000000000000000031d610000a000000000000001cd41100000000000000000000000000ecd810000a0000000000000000000000b13811000400000000000000a9db10000700000000000000b0db10000500000000000000aa3911000700000041da10003a0000007bda1000480000006fd91000310000001cd4110000000000a0d91000350000001cd41100000000005fb211000b000000c3da100022000000e5da100016000000fbda10005900000054db100055000000c7b211000c0000003cd91000330000006fd91000310000001cd4110000000000a0d91000350000001cd41100000000005fb211000b000000d5d910001f000000f4d910001c00000010da100031000000c7b211000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d204f284e2920696e206e756d626572206f66206b65792074797065732e202d2052656d6f766573204e202b203120444220656e74726965732e202d20526564756365732073797374656d206163636f756e742072656673206279206f6e65206f6e20737563636573732e2053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d204f286c6f67206e2920696e206e756d626572206f66206163636f756e74732e202d204f6e6520657874726120444220656e7472792e202d20496e637265617365732073797374656d206163636f756e742072656673206279206f6e65206f6e20737563636573732069666620746865726520776572652070726576696f75736c79206e6f206b657973207365742e202020496e207468697320636173652c2070757267655f6b6579732077696c6c206e65656420746f2062652063616c6c6564206265666f726520746865206163636f756e742063616e2062652072656d6f7665642e543a3a4b65797370726f6f66000000000000003bd610000a000000000000000000000020de100013000000000000000000000000000000000000000000000000000000000000001cd41100c8ef1000000000000000000034de1000010000000000000001000000000000003cde10000c00000000000000000000007cff10000c000000000000000000000000000000000000000000000000000000000000001cd41100e4ef1000000000000000000048de10000100000000000000010000000000000050de10000d000000000000000000000031cf110004000000000000000000000000000000000000000000000000000000000000001cd4110060de1000000000000000000070de100002000000000000000100000000000000f8d710000a000000000000000000000080de10001e000000000000000000000000000000000000000000000000000000000000001cd41100a0de10000000000000000000b0de100002000000000000000100000000000000c0de1000120000000000000000000000d2de100008000000000000000000000000000000000000000000000000000000000000001cd41100dcde10000000000000000000ecde10000300000000000000010000000000000045d6100008000000010500000000000004df10000e00000000000000a9db100007000000000000000000000000000000000000001cd4110014df1000000000000000000024df1000010000000000000000000000000000004dd610000800000001050000000000002cdf1000140000000000000004df10000e000000000000000000000000000000000000001cd41100ecf01000000000000000000040df10000100000000000000000000005665633c543a3a56616c696461746f7249643e003ae110001f00000043757272656e74496e6465781ce110001e0000005175657565644368616e67656400000016000000000000000100000032000000a5e010004e000000f3e01000290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e0000160000000000000001000000300000001ee010004f0000006de010003800000044697361626c656456616c696461746f72735665633c7533323e000016000000000000000100000030000000b1df1000200000001cd4110000000000d1df10004d000000543a3a56616c696461746f7249640000160000000000000001000000320000008adf100027000000284b65795479706549642c205665633c75383e2948df10004200000020546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e0000000000000058d510000d0000000000000090e21000040000000000000000000000f0e2100005000000000000000000000049d510000f0000000000000018e3100001000000000000000000000030e3100001000000000000000000000039d51000100000000000000038e3100001000000000000000000000050e3100005000000000000000000000026d51000130000000000000078e31000020000000000000000000000a8e3100008000000000000000000000015d510001100000000000000e8e3100003000000000000000000000030e4100005000000000000000000000000d5100015000000000000001cd4110000000000000000000000000058e41000070000000000000000000000fcd41000040000000000000090e41000010000000000000000000000a8e41000080000000000000000000000bbeb100002000000000000001ae710000f00000000000000d2be110004000000000000008eec10000800000000000000a63911000400000000000000aa3911000700000000000000e9ea10001100000000000000aa39110007000000bdeb10003e000000fbeb1000230000001cd41100000000001eec10003d0000005bec10003300000000000000bbeb100002000000000000001ae710000f00000096eb1000250000000000000091eb100005000000000000001456110003000000faea1000500000001cd41100000000004aeb1000260000001cd411000000000070eb10002100000000000000a63911000400000000000000aa3911000700000000000000e9ea10001100000000000000aa3911000700000081e91000290000001cd4110000000000aae9100053000000fde910004e0000001cd41100000000004bea10004c00000097ea10004a000000e1ea1000080000000000000061e9100003000000000000001ae710000f0000000000000064e9100009000000000000006de910000a0000000000000077e910000a00000000000000344011000700000064e81000410000001cd4110000000000a5e8100050000000f5e81000570000004ce910001500000029e71000320000001cd41100000000005be71000480000001cd4110000000000a3e7100056000000f9e71000510000004ae810001a0000000000000015e7100005000000000000001ae710000f000000e8e410005900000041e51000590000009ae51000570000001cd4110000000000f1e510005800000049e610005000000099e6100056000000efe6100026000000205377617020612070617261636861696e207769746820616e6f746865722070617261636861696e206f7220706172617468726561642e20546865206f726967696e206d7573742062652061206050617261636861696e602e2054686520737761702077696c6c2068617070656e206f6e6c7920696620746865726520697320616c726561647920616e206f70706f7369746520737761702070656e64696e672e204966207468657265206973206e6f742c2074686520737761702077696c6c2062652073746f72656420696e207468652070656e64696e67207377617073206d61702c20726561647920666f722061206c6174657220636f6e6669726d61746f727920737761702e20546865206050617261496460732072656d61696e206d617070656420746f207468652073616d652068656164206461746120616e6420636f646520736f2065787465726e616c20636f64652063616e2072656c79206f6e20605061726149646020746f2062652061206c6f6e672d7465726d206964656e746966696572206f662061206e6f74696f6e616c202270617261636861696e222e20486f77657665722c207468656972207363686564756c696e6720696e666f2028692e652e2077686574686572207468657927726520612070617261746872656164206f722070617261636861696e292c2061756374696f6e20696e666f726d6174696f6e20616e64207468652061756374696f6e206465706f736974206172652073776974636865642e6f74686572436f6d706163743c5061726149643e20446572656769737465722061207061726174687265616420616e6420726574726965766520746865206465706f7369742e204d7573742062652073656e742066726f6d2061206050617261636861696e60206f726967696e2077686963682069732063757272656e746c79206120706172617468726561642e20456e737572652074686174206265666f72652063616c6c696e672074686973207468617420616e792066756e647320796f752077616e7420656d70746965642066726f6d2074686520706172617468726561642773206163636f756e74206973206d6f766564206f75743b20616674657220746869732069742077696c6c20626520696d706f737369626c6520746f207265747269657665207468656d2028776974686f757420676f7665726e616e636520696e74657276656e74696f6e292e20506c61636520612062696420666f722061207061726174687265616420746f2062652070726f6772657373656420696e20746865206e65787420626c6f636b2e20546869732069732061206b696e64206f66207370656369616c207472616e73616374696f6e20746861742073686f756c642062652068656176696c79207072696f726974697a656420696e20746865207472616e73616374696f6e20706f6f6c206163636f7264696e6720746f20746865206076616c7565603b206f6e6c792060546872656164436f756e7460206f66207468656d206d61792062652070726573656e74656420696e20616e792073696e676c6520626c6f636b2e5f69645f636f6c6c61746f72436f6c6c61746f7249645f686561645f686173682052656769737465722061207061726174687265616420666f7220696d6d656469617465207573652e204d7573742062652073656e742066726f6d2061205369676e6564206f726967696e20746861742069732061626c6520746f206861766520506172617468726561644465706f7369742072657365727665642e2060636f64656020616e642060696e697469616c5f686561645f646174616020617265207573656420746f20696e697469616c697a6520746865207061726174687265616427732073746174652e20556e6c696b65206072656769737465725f70617261602c20746869732066756e6374696f6e20646f657320636865636b207468617420746865206d6178696d756d20636f64652073697a6520616e64206865616420646174612073697a6520617265207265737065637465642c206173207061726174687265616420726567697374726174696f6e20697320616e2061746f6d696320616374696f6e2e696e697469616c5f686561645f6461746120526573657420746865206e756d626572206f6620706172617468726561647320746861742063616e2070617920746f206265207363686564756c656420696e20612073696e676c6520626c6f636b2e202d2060636f756e74603a20546865206e756d626572206f662070617261746872656164732e204d7573742062652063616c6c65642066726f6d20526f6f74206f726967696e2e636f756e74204465726567697374657220612070617261636861696e207769746820676976656e206964696420526567697374657220612070617261636861696e207769746820676976656e20636f64652e204d7573742062652063616c6c656420627920726f6f742e204661696c7320696620676976656e20494420697320616c726561647920757365642e20556e6c696b65207468652060526567697374726172602074726169742066756e6374696f6e206f66207468652073616d65206e616d652c207468697320636865636b732074686520636f646520616e642068656164206461746120616761696e73742073697a65206c696d6974732e50617261496e666f000000000000b0ef10000a0000000000000000000000baef10000b000000000000000000000000000000000000000000000000000000000000001cd41100c8ef100000000000000000001cd4110000000000000000000100000000000000d8ef10000b00000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd41100e4ef10000000000000000000f4ef100001000000000000000100000000000000fcef10000f00000000000000000000000bf010001e000000000000000000000000000000000000000000000000000000000000001cd4110030f1100000000000000000002cf01000020000000000000001000000000000003cf0100006000000000000000000000042f010002e000000000000000000000000000000000000000000000000000000000000001cd4110070f01000000000000000000080f0100006000000000000000100000000000000b0f010000a0000000000000000000000baf0100006000000000000000000000000000000000000000000000000000000000000001cd41100c0f010000000000000000000d0f0100002000000000000000100000000000000e0f010000b0000000105000000000000baf010000600000000000000baf0100006000000000000000000000000000000000000001cd41100ecf010000000000000000000fcf010000100000000000000000000000000000004f11000050000000105000000000000baf0100006000000000000008eec100008000000000000000000000000000000000000001cd411000cf1100000000000000000001cf110000100000000000000000000000000000024f110000a00000000000000000000000bf010001e000000000000000000000000000000000000000000000000000000000000001cd4110030f11000000000000000000040f11000010000000000000001000000000000009fd61000070000000105000000000000baf0100006000000000000009db611000c000000000000000000000000000000000000001cd4110048f11000000000000000000058f1100001000000000000000100000050617261636861696e735665633c5061726149643e00000016000000000000000100000030000000546872656164436f756e74001600000000000000010000002e00000058f410002d00000053656c6563746564546872656164735665633c5665633c285061726149642c20436f6c6c61746f724964293e3e000000b8f31000540000000cf410004c0000004163746976655665633c285061726149642c204f7074696f6e3c28436f6c6c61746f7249642c20526574726961626c65293e293e160000000000000001000000300000006cf2100057000000c3f21000580000001bf310005600000071f31000340000001cd4110000000000a5f31000130000004e6578744672656549645061726149641600000000000000010000009300000008f210004f00000057f210001500000050656e64696e67537761700016000000000000000100000032000000eff1100019000000506172617300000016000000000000000100000032000000c5f110002a000000526574727951756575650000160000000000000001000000300000008bf110003a0000001600000000000000010000009500000060f110002b0000002055736572732077686f20686176652070616964206120706172617468726561642773206465706f736974205468652063757272656e7420717565756520666f7220706172617468726561647320746861742073686f756c6420626520726574726965642e204d6170206f6620616c6c20726567697374657265642070617261746872656164732f636861696e732e2050656e64696e672073776170206f7065726174696f6e732e20546865206e65787420756e75736564205061726149642076616c75652e2053746172742074686973206869676820696e206f7264657220746f206b656570206c6f77206e756d6265727320666f722073797374656d2d6c6576656c20636861696e732e2050617261746872656164732f636861696e73207363686564756c656420666f7220657865637574696f6e207468697320626c6f636b2e2049662074686520636f6c6c61746f72204944206973207365742c207468656e206120706172746963756c617220636f6c6c61746f722068617320616c7265616479206265656e2063686f73656e20666f7220746865206e65787420626c6f636b2c20616e64206e6f206f7468657220636f6c6c61746f72206d61792070726f766964652074686520626c6f636b2e20496e2074686973206361736520776520616c6c6f772074686520706f73736962696c697479206f662074686520636f6d62696e6174696f6e206265696e67207265747269656420696e2061206c6174657220626c6f636b2c206578707265737365642062792060526574726961626c65602e204f726465726564206279205061726149642e20416e206172726179206f6620746865207175657565206f6620736574206f662074687265616473207363686564756c656420666f722074686520636f6d696e6720626c6f636b733b206f72646572656420627920617363656e64696e6720706172612049442e2054686572652063616e206265206e6f206475706c696361746573206f66207061726120494420696e2065616368206c697374206974656d2e20546865206e756d626572206f66207468726561647320746f207363686564756c652070657220626c6f636b2e000000000000001dd610000c00000000000000f8f4100001000000000000000000000006d61000170000000000000000f51000010000000000000000000000f9d510000d0000000000000008f51000010000000000000000000000f3d51000060000000000000010f51000010000000000000084f51000190000005cf510002800000042f510001a00000018f510002a000000204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e4469676573744974656d206e6f7420657175616c546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65647265706f72745f6d69736265686176696f723a6772616e6470615f617574686f726974696573666f726b2e726563656e746c792065786563757465642e416c726561647950726f78795374696c6c4163746976655468726573686f6c64416c7265616479566f756368656444656c6179506572696f644e6f74467269656e644e6f7453746172746564416c726561647953746172746564416c72656164795265636f76657261626c654e6f745265636f76657261626c654e6f74536f727465644d6178467269656e64734e6f74456e6f756768467269656e64734e6f74416c6c6f77656461735f7265636f76657265647365745f7265636f76657265646372656174655f7265636f76657279696e6974696174655f7265636f76657279766f7563685f7265636f76657279636c61696d5f7265636f76657279636c6f73655f7265636f7665727972656d6f76655f7265636f7665727963616e63656c5f7265636f76657265640000000000004cf810000f0000000000000044a511000100000000000000000000005cf8100001000000000000000000000064f810001100000000000000e452110002000000000000000000000078f8100001000000000000000000000080f810000f0000000000000090f81000030000000000000000000000a8f81000010000000000000000000000b0f810000e00000000000000e4521100020000000000000000000000c0f81000010000000000000000000000c8f810001000000000000000e4521100020000000000000000000000d8f81000010000000000000000000000e0f810000f0000000000000044a51100010000000000000000000000f0f8100001000000000000005265636f76657279437265617465640031fa1000320000005265636f76657279496e69746961746564000000f0f91000410000005265636f76657279566f7563686564009aa61100090000009aa61100090000009aa6110009000000a0f91000500000005265636f76657279436c6f736564000062f910003e0000004163636f756e745265636f76657265642bf91000370000005265636f7665727952656d6f76656400f8f81000330000002041207265636f766572792070726f6365737320686173206265656e2072656d6f76656420666f7220616e206163636f756e74204163636f756e745f3120686173206265656e207375636365737366756c6c79207265636f7665726564206279206163636f756e745f322041207265636f766572792070726f6365737320666f72206163636f756e745f31206279206163636f756e745f3220686173206265656e20636c6f7365642041207265636f766572792070726f6365737320666f72206163636f756e745f31206279206163636f756e745f3220686173206265656e20766f756368656420666f72206279206163636f756e745f332041207265636f766572792070726f6365737320686173206265656e20696e6974696174656420666f72206163636f756e745f31206279206163636f756e745f322041207265636f766572792070726f6365737320686173206265656e2073657420757020666f7220616e206163636f756e740000000000bcfa10000900000000000000c8fa10000100000000000000000000001cd41100000000000000000000000000d0fa10000a00000000000000dcfa10000300000000000000000000001cd4110000000000000000005363686564756c65640000001bfb10000b000000446973706174636865640000f4fa1000180000000cfb10000f000000a25411000e0000005461736b416464726573733c426c6f636b4e756d6265723e4f7074696f6e3c5665633c75383e3e426c6f636b4e756d6265722f686f6d652f6461766964642f6465762f706f6c6b61646f742d77657374656e642f72756e74696d652f636f6d6d6f6e2f7372632f70617261636861696e732e727326fb100042000000e70200002200000088fb10006400000033000000120000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f72756e74696d652f7372632f63757276652e72734772616e64706146696e616c69747950656e64696e674368616e676553746174655363686564756c65724167656e646100000000dcf51000120000000000000048fc100001000000000000000000000060fc100001000000000000000000000081fc10000700000000000000aa3911000700000068fc100019000000205265706f727420736f6d65206d69736265686176696f722e5f7265706f72740000000008fc100005000000000000000000000098fe10001b000000000000000000000000000000000000000000000000000000000000001cd41100b4fe10000000000000000000c4fe100001000000000000000100000000000000fbfb10000d0000000000000000000000ccfe100023000000000000000000000000000000000000000000000000000000000000001cd41100a41e11000000000000000000f0fe100001000000000000000000000000000000f8fe10000a0000000000000000000000285f11000e000000000000000000000000000000000000000000000000000000000000001cd4110088ff1000000000000000000004ff1000010000000000000000000000000000000cff100007000000000000000000000013ff100020000000000000000000000000000000000000000000000000000000000000001cd411003c221100000000000000000034ff1000010000000000000000000000000000003cff10000c000000000000000000000048ff100005000000000000000000000000000000000000000000000000000000000000001cd4110050ff1000000000000000000060ff10000200000000000000010000000000000070ff10000c000000010500000000000048ff100005000000000000007cff10000c000000000000000000000000000000000000001cd4110088ff1000000000000000000098ff100002000000000000000000000053746f72656453746174653c543a3a426c6f636b4e756d6265723e0016000000000000000100000098000000240111002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e00f3001100310000004e657874466f726365640000c40011002f0000005374616c6c656428543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d6265722900a00011002400000043757272656e74536574496453657449640000001600000000000000010000009900000018001100570000006f00110031000000536574496453657373696f6e53657373696f6e496e64657816000000000000000100000032000000a8ff100056000000feff10001a0000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e00000000c0f610000c00000000000000d4021100020000000000000000000000040311000d0000000000000000000000ccf610000d000000000000006c0311000200000000000000000000009c0311000d0000000000000000000000d9f610000f00000000000000040411000300000000000000000000004c0411001b0000000000000000000000e8f6100011000000000000005ca9110001000000000000000000000024051100160000000000000000000000f9f610000e000000000000006c031100020000000000000000000000d405110019000000000000000000000007f710000e000000000000005ca911000100000000000000000000009c06110014000000000000000000000015f710000e000000000000003c0711000100000000000000000000005407110014000000000000000000000023f710000f000000000000001cd41100000000000000000000000000f407110015000000000000000000000032f7100010000000000000005ca911000100000000000000000000009c0811000b0000000000000000000000f9bf110007000000000000009db611000c00000000000000c97711000400000000000000cd77110017000000ba1b1100290000001cd41100000000002c09110045000000710911003a0000001cd4110000000000ab0911000c000000e31b1100490000002c1c1100400000001cd41100000000005fb211000b0000001c781100250000006c1c110042000000c7b211000c00000000000000b61b110004000000000000009db611000c00000000000000570f110007000000000000009db611000c000000861a110047000000cd1a11001d0000001cd4110000000000ea1a1100320000001cd4110000000000ab0911000c0000001c1b11002e0000004a1b1100470000001cd41100000000005fb211000b000000911b110019000000aa1b11000c000000c7b211000c00000000000000731a110007000000000000007671110011000000000000005971110009000000000000006271110003000000000000007a1a11000c00000000000000285f11000e000000c9161100570000001cd4110000000000201711004c0000006c17110052000000be1711002f0000001cd4110000000000b09a1100340000001cd4110000000000ab0911000c000000ed1711004900000036181100350000006b1811004c000000b718110047000000fe18110025000000231911004f000000721911003a0000001cd41100000000005fb211000b000000ac1911001a000000c61911004b000000111a11003b00000087161100270000004c1a110027000000bab211000d0000001cd41100000000001c0d11001b000000c7b211000c000000771411003b0000001cd4110000000000b214110047000000f914110049000000421511002e0000001cd4110000000000b09a1100340000001cd4110000000000ab0911000c0000007015110045000000b5151100400000001cd41100000000005fb211000b000000f51511003e00000033161100540000008716110027000000a611110039000000ae1611001b000000bab211000d0000001cd41100000000001c0d11001b000000c7b211000c000000211211004a0000006b1211001a0000001cd4110000000000851211004a000000cf1211001d0000001cd4110000000000ab0911000c000000ec12110035000000211311004400000065131100150000001cd41100000000007a13110049000000c3131100090000001cd41100000000005fb211000b000000d81011003f00000017111100470000005e11110048000000cc1311003b0000000714110047000000df11110027000000bab211000d0000001cd41100000000004e14110029000000c7b211000c0000005e0f11003d0000001cd41100000000009b0f11004b000000e60f1100470000002d1011004c0000001cd4110000000000ab0911000c000000791011004b000000c4101100140000001cd41100000000005fb211000b000000d81011003f00000017111100470000005e11110048000000a611110039000000df11110027000000bab211000d0000001cd4110000000000061211001b000000c7b211000c00000000000000570f110007000000000000009db611000c000000370d1100450000007c0d11001a0000001cd4110000000000960d110048000000de0d11003e0000001cd4110000000000cb0b1100410000001c0e11003c0000001cd4110000000000ab0911000c000000580e1100440000001cd41100000000005fb211000b0000009c0e110021000000bd0e11004f0000000c0f110030000000bab211000d0000001cd41100000000003c0f11001b000000c7b211000c000000410a1100570000001cd4110000000000980a110045000000dd0a1100420000001cd41100000000001f0b110049000000680b1100260000008e0b11003d0000001cd4110000000000cb0b1100410000000c0c1100390000001cd41100000000005fb211000b000000450c1100180000005d0c11004a000000a70c11004e000000f50c110027000000bab211000d0000001cd41100000000001c0d11001b000000c7b211000c000000f4081100380000001cd41100000000002c09110045000000710911003a0000001cd4110000000000ab0911000c000000b7091100460000001cd41100000000005fb211000b000000fd09110044000000c7b211000c0000002043616e63656c20746865206162696c69747920746f20757365206061735f7265636f76657265646020666f7220606163636f756e74602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207265676973746572656420746f2062652061626c6520746f206d616b652063616c6c73206f6e20626568616c66206f6620746865207265636f7665726564206163636f756e742e20506172616d65746572733a202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f75206172652061626c6520746f2063616c6c206f6e2d626568616c662d6f662e202d204f6e652073746f72616765206d75746174696f6e20746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f2831292052656d6f766520746865207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205265636f7665726564206163636f756e747320617265207374696c6c2061636365737369626c652e204e4f54453a205468652075736572206d757374206d616b65207375726520746f2063616c6c2060636c6f73655f7265636f7665727960206f6e20616c6c20616374697665207265636f7665727920617474656d707473206265666f72652063616c6c696e6720746869732066756e6374696f6e20656c73652069742077696c6c206661696c2e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e20746865207265636f76657261626c65206163636f756e742077696c6c20756e72657365727665207468656972207265636f7665727920636f6e66696775726174696f6e206465706f7369742e202860436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732920546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061207265636f76657261626c65206163636f756e742028692e652e206861732061207265636f7665727920636f6e66696775726174696f6e292e204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f206765742074686520707265666978206974657261746f7220666f7220616374697665207265636f7665726965732e204f283129202d204f6e652073746f7261676520726561642f72656d6f766520746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652062616c616e63652063616c6c20746f20756e72657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2846202b2058292041732074686520636f6e74726f6c6c6572206f662061207265636f76657261626c65206163636f756e742c20636c6f736520616e20616374697665207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e2c20746865207265636f76657261626c65206163636f756e742077696c6c207265636569766520746865207265636f76657279206465706f73697420605265636f766572794465706f7369746020706c616365642062792074686520726573637565722e207265636f76657261626c65206163636f756e74207769746820616e20616374697665207265636f766572792070726f6365737320666f722069742e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f207265736375652074686973207265636f76657261626c65206163636f756e742e204b65793a205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f7261676520726561642f72656d6f766520746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652062616c616e63652063616c6c20746f20726570617472696174652072657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2856202b2058297265736375657220416c6c6f772061207375636365737366756c207265736375657220746f20636c61696d207468656972207265636f7665726564206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061202272657363756572222077686f20686173207375636365737366756c6c7920636f6d706c6574656420746865206163636f756e74207265636f766572792070726f636573733a20636f6c6c656374656420607468726573686f6c6460206f72206d6f726520766f75636865732c20776169746564206064656c61795f706572696f646020626c6f636b732073696e636520696e6974696174696f6e2e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f20636c61696d20686173206265656e207375636365737366756c6c792020207265636f766572656420627920796f752e204b65793a204620286c656e206f6620667269656e647320696e20636f6e666967292c205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f72616765207265616420746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652073746f72616765207265616420746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652073746f72616765207265616420746f20676574207468652063757272656e7420626c6f636b206e756d6265722e204f283129202d204f6e652073746f726167652077726974652e204f2831292c20436f646563204f2856292e20546f74616c20436f6d706c65786974793a204f2846202b20562920416c6c6f7720612022667269656e6422206f662061207265636f76657261626c65206163636f756e7420746f20766f75636820666f7220616e20616374697665207265636f766572792070726f6365737320666f722074686174206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520612022667269656e642220666f7220746865207265636f76657261626c65206163636f756e742e202d20606c6f7374603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f2072657363756520746865206c6f7374206163636f756e74207468617420796f7520202077616e7420746f20766f75636820666f722e2054686520636f6d62696e6174696f6e206f662074686573652074776f20706172616d6574657273206d75737420706f696e7420746f20616e20616374697665207265636f766572792070726f636573732e202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c6572206973206120667269656e642e204f286c6f674629202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c657220686173206e6f7420616c726561647920766f75636865642e204f286c6f67562920546f74616c20436f6d706c65786974793a204f2846202b206c6f6746202b2056202b206c6f67562920496e697469617465207468652070726f6365737320666f72207265636f766572696e672061207265636f76657261626c65206163636f756e742e205061796d656e743a20605265636f766572794465706f736974602062616c616e63652077696c6c20626520726573657276656420666f7220696e6974696174696e6720746865207265636f766572792070726f636573732e2054686973206465706f7369742077696c6c20616c7761797320626520726570617472696174656420746f20746865206163636f756e7420747279696e6720746f206265207265636f76657265642e205365652060636c6f73655f7265636f76657279602e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e2054686973206163636f756e742020206e6565647320746f206265207265636f76657261626c652028692e652e20686176652061207265636f7665727920636f6e66696775726174696f6e292e202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973207265636f76657261626c652e204f284629202d204f6e652073746f72616765207265616420746f20636865636b20746861742074686973207265636f766572792070726f63657373206861736e277420616c726561647920737461727465642e204f283129202d204f6e652063757272656e63792072657365727665206f7065726174696f6e2e204f285829202d204f6e652073746f726167652077726974652e204f2831292e204372656174652061207265636f7665727920636f6e66696775726174696f6e20666f7220796f7572206163636f756e742e2054686973206d616b657320796f7572206163636f756e74207265636f76657261626c652e205061796d656e743a2060436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732062616c616e63652077696c6c20626520726573657276656420666f722073746f72696e6720746865207265636f7665727920636f6e66696775726174696f6e2e2054686973206465706f7369742069732072657475726e656420696e2066756c6c207768656e2074686520757365722063616c6c73206072656d6f76655f7265636f76657279602e202d2060667269656e6473603a2041206c697374206f6620667269656e647320796f7520747275737420746f20766f75636820666f72207265636f7665727920617474656d7074732e20202053686f756c64206265206f72646572656420616e6420636f6e7461696e206e6f206475706c69636174652076616c7565732e202d20607468726573686f6c64603a20546865206e756d626572206f6620667269656e64732074686174206d75737420766f75636820666f722061207265636f7665727920617474656d70742020206265666f726520746865206163636f756e742063616e206265207265636f76657265642e2053686f756c64206265206c657373207468616e206f7220657175616c20746f202020746865206c656e677468206f6620746865206c697374206f6620667269656e64732e202d206064656c61795f706572696f64603a20546865206e756d626572206f6620626c6f636b732061667465722061207265636f7665727920617474656d707420697320696e697469616c697a656420202074686174206e6565647320746f2070617373206265666f726520746865206163636f756e742063616e206265207265636f76657265642e202d204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973206e6f7420616c7265616479207265636f76657261626c652e204f2831292e202d204120636865636b20746861742074686520667269656e6473206c69737420697320736f7274656420616e6420756e697175652e204f284629202d204f6e652073746f726167652077726974652e204f2831292e20436f646563204f2846292e667269656e647364656c61795f706572696f6420416c6c6f7720524f4f5420746f2062797061737320746865207265636f766572792070726f6365737320616e642073657420616e20612072657363756572206163636f756e7420666f722061206c6f7374206163636f756e74206469726563746c792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f524f4f545f2e202d20606c6f7374603a2054686520226c6f7374206163636f756e742220746f206265207265636f76657265642e202d206072657363756572603a20546865202272657363756572206163636f756e74222077686963682063616e2063616c6c20617320746865206c6f7374206163636f756e742e202d204f6e652073746f72616765207772697465204f283129202d204f6e65206576656e746c6f73742053656e6420612063616c6c207468726f7567682061207265636f7665726564206163636f756e742e202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f752077616e7420746f206d616b6520612063616c6c206f6e2d626568616c662d6f662e202d206063616c6c603a205468652063616c6c20796f752077616e7420746f206d616b65207769746820746865207265636f7665726564206163636f756e742e202d204f6e652073746f72616765206c6f6f6b757020746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f2831295265636f76657279000000000000c01d11000b00000001050000000000009db611000c00000000000000cb1d11003a000000000000000000000000000000000000001cd41100081e11000000000000000000181e110001000000000000000000000000000000201e11001000000002050500000000009db611000c000000000000009db611000c00000000000000301e11003a000000000000001cd411006c1e110000000000000000007c1e1100040000000000000000000000000000009c1e11000500000001020000000000009db611000c000000000000009db611000c000000000000000000000000000000000000001cd41100a41e11000000000000000000b41e11000300000000000000000000005265636f76657261626c655265636f76657279436f6e6669673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e00000016000000000000000100000032000000b81f1100420000004163746976655265636f7665726965734163746976655265636f766572793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e0000160000000000000001000000320000002e1f11001a0000001cd4110000000000481f1100450000008d1f11002b00000050726f787900000016000000000000000100000032000000cc1e1100240000001cd4110000000000f01e11003e00000020546865206c697374206f6620616c6c6f7765642070726f7879206163636f756e74732e204d61702066726f6d2074686520757365722077686f2063616e2061636365737320697420746f20746865207265636f7665726564206163636f756e742e20416374697665207265636f7665727920617474656d7074732e204669727374206163636f756e7420697320746865206163636f756e7420746f206265207265636f76657265642c20616e6420746865207365636f6e64206163636f756e7420697320746865207573657220747279696e6720746f207265636f76657220746865206163636f756e742e2054686520736574206f66207265636f76657261626c65206163636f756e747320616e64207468656972207265636f7665727920636f6e66696775726174696f6e2e00001600000008000000040000009a0000009b00000000000000000000009c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016fc1000060000000105000000000000285f11000e00000000000000c42111003a000000000000000000000000000000000000001cd41100002211000000000000000000102211000100000000000000010000000000000018221100060000000105000000000000aa39110007000000000000001e2211001b000000000000000000000000000000000000001cd411003c22110000000000000000004c2211000100000000000000000000005665633c4f7074696f6e3c5363686564756c65643c3c542061732054726169743e3a3a43616c6c2c20543a3a426c6f636b4e756d6265723e3e3e00001600000000000000010000003000000094221100530000004c6f6f6b75705461736b416464726573733c543a3a426c6f636b4e756d6265723e000000160000000000000001000000320000005422110040000000204c6f6f6b75702066726f6d206964656e7469747920746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e005c23110049000000920200001a000000942c11004800000002020000230000005c23110049000000a301000027000000010000000100000000000000000000000000000001000000617373657274696f6e206661696c65643a206d6964203c3d206c656e5c231100490000008e0200001d0000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962636f72652f736c6963652f736f72742e72730000005c23110049000000a1000000300000005c23110049000000a400000030000000ffffff1f87241100160000009d24110016000000542411002d0000008124110003000000842411000300000000000000200000000000000002000000000000000200000000000000030000000100000020000000080000000200000000000000000000000200000003000000020000002000000000000000020000000000000002000000000000000300000042697450747220726567696f6e2063616e6e6f7420777261702074686520616464726573732073706163653a20202b20203d204269745074722063616e6e6f7420616464726573732020626974733b20746865206d6178696d756d2069732000e424110066000000700000002e000000e4241100660000008f00000034000000e42411006600000068000000340000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f747269652f7372632f6e6f64655f636f6465632e7273000000000000d1f510000b00000000000000bc251100020000000000000000000000c5f510000c00000000000000cc251100020000000000000000000000b8f510000d00000000000000dc251100010000000000000000000000b1f510000700000000000000e42511000100000000000000c526110042000000072711002a00000057261100450000009c261100290000001c2611003b000000ec251100300000002043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e00000000000000b6f610000a00000000000000f4281100010000000000000000000000de8a11000d00000000000000fc281100010000000000000000000000a6f610001000000000000000042911000100000000000000000000009cf610000a000000000000000c29110001000000000000000000000093f6100009000000000000001429110001000000000000000000000085f610000e000000000000001c29110001000000000000000000000073f6100012000000000000002429110001000000000000000000000065f610000e000000000000002c2911000100000000000000000000005bf610000a000000000000003429110001000000000000000000000052f6100009000000000000003c29110001000000000000000000000047f610000b000000000000004429110001000000000000000000000039f610000e000000000000004c29110001000000000000000000000030f6100009000000000000005429110001000000000000000000000025f610000b000000000000005c2911000100000000000000000000007456110008000000000000006429110001000000000000000000000019f610000c00000000000000242911000100000000000000272c11003d000000032c110024000000ce2b110035000000a32b11002b000000702b110033000000482b1100280000001c2b11002c000000e42a110038000000b02a110034000000852a11002b0000003e2a1100470000000e2a110030000000d32911003b00000093291100400000006c291100270000002054686572652077617320616e206f766572666c6f7720696e20612063616c63756c6174696f6e20546865726520617265207374696c6c20616374697665207265636f7665727920617474656d7074732074686174206e65656420746f20626520636c6f73656420546865207468726573686f6c6420666f72207265636f766572696e672074686973206163636f756e7420686173206e6f74206265656e206d6574205468697320757365722068617320616c726561647920766f756368656420666f722074686973207265636f766572792054686520667269656e64206d757374207761697420756e74696c207468652064656c617920706572696f6420746f20766f75636820666f722074686973207265636f766572792054686973206163636f756e74206973206e6f74206120667269656e642077686f2063616e20766f7563682041207265636f766572792070726f6365737320686173206e6f74207374617274656420666f72207468697320726573637565722041207265636f766572792070726f636573732068617320616c7265616479207374617274656420666f722074686973206163636f756e742054686973206163636f756e7420697320616c72656164792073657420757020666f72207265636f766572792054686973206163636f756e74206973206e6f742073657420757020666f72207265636f7665727920467269656e6473206c697374206d75737420626520736f7274656420616e642066726565206f66206475706c69636174657320467269656e6473206c697374206d757374206265206c657373207468616e206d617820667269656e647320467269656e6473206c697374206d7573742062652067726561746572207468616e207a65726f20616e64207468726573686f6c64205468726573686f6c64206d7573742062652067726561746572207468616e207a65726f2055736572206973206e6f7420616c6c6f77656420746f206d616b6520612063616c6c206f6e20626568616c66206f662074686973206163636f756e743432110063000000720100003300000034321100630000007201000011000000942c11004800000001020000230000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962636f72652f736c6963652f6d6f642e7273617373657274696f6e206661696c65643a2073656c662e6c656e2829203c204341504143495459617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d2031617373657274696f6e206661696c65643a2073656c662e686569676874203e2030617373657274696f6e206661696c65643a2073656c662e6c656e2829203e2030842d110056000000a5040000520000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962616c6c6f632f636f6c6c656374696f6e732f62747265652f6e6f64652e72730000842d110056000000b60400004c000000617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d2031436865636b576569676874436865636b457261436865636b4e6f6e6365436865636b47656e657369734368617267655472616e73616374696f6e5061796d656e74436865636b56657273696f6e004e6f6e5a65726f526566436f756e744e6f6e44656661756c74436f6d706f736974654661696c6564546f4578747261637452756e74696d6556657273696f6e5370656356657273696f6e4e65656473546f496e637265617365496e76616c6964537065634e616d653a65787472696e7369635f696e64657866696c6c5f626c6f636b72656d61726b7365745f686561705f70616765737365745f636f64657365745f636f64655f776974686f75745f636865636b737365745f6368616e6765735f747269655f636f6e6669677365745f73746f726167656b696c6c5f73746f726167656b696c6c5f7072656669787375696369646553797374656d426c6f636b486173684e756d626572506172656e744861736845787472696e73696373526f6f744469676573740000000000743011001000000000000000843011000100000000000000000000008c301100010000000000000000000000943011000f00000000000000a4301100020000000000000000000000b4301100010000000000000000000000bc3011000b000000000000001cd41100000000000000000000000000c8301100010000000000000000000000d03011000a0000000000000044a51100010000000000000000000000dc301100010000000000000000000000e43011000d0000000000000044a51100010000000000000000000000f4301100010000000000000045787472696e73696353756363657373583111000c000000643111002500000045787472696e7369634661696c656400175611000d000000583111000c0000004331110015000000436f646555706461746564002e311100150000004e65774163636f756e740000133111001b0000004b696c6c65644163636f756e74000000fc3011001700000020416e206163636f756e7420776173207265617065642e2041206e6577206163636f756e742077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e4469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e4f6666656e6365735265706f727473436f6e63757272656e745265706f727473496e64657800001600000000000000010000001a0000004576656e74730000d83111002e000000063211000d0000004552524f523a2072657475726e6564206e6578745f6b657920686173206e6f2076616c75653a0a6b6579206973200a6e6578745f6b65792069732044656665727265644f6666656e636573003432110063000000980100001e0000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f70687261676d656e2f7372632f6c69622e7273000000000000000000617474656d707420746f20646976696465206279207a65726f000000cc32110048000000bb0100002d0000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962636f72652f6f70732f61726974682e727384341100660000007100000013000000843411006600000088000000180000008434110066000000b4000000190000008434110066000000ff00000042000000843411006600000013010000420000008434110066000000570100001500000084341100660000005c0100001e0000001600000000000000010000002a00000084341100660000005f0000001a00000084341100660000005f0000002c0000008434110066000000cc010000240000008434110066000000cd010000240000008434110066000000f1010000230000008434110066000000f30100002400000084341100660000001602000035000000843411006600000017020000350000008434110066000000200200002400000084341100660000004202000035000000843411006600000043020000350000008434110066000000580200002b000000843411006600000059020000280000008434110066000000630200002b000000843411006600000064020000280000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f70687261676d656e2f7372632f7265647563652e72734576656e74546f7069637300000000000000e72e11000a00000000000000b0361100010000000000000000000000c8361100010000000000000000000000f12e11000600000000000000d0361100010000000000000000000000e8361100010000000000000000000000f72e11000e00000000000000f036110001000000000000000000000008371100010000000000000000000000052f1100080000000000000010371100010000000000000000000000283711000100000000000000000000000d2f110017000000000000001037110001000000000000000000000030371100010000000000000000000000242f1100170000000000000038371100010000000000000000000000503711000100000000000000000000003b2f11000b000000000000005837110001000000000000000000000070371100010000000000000000000000462f11000c000000000000007837110001000000000000000000000090371100010000000000000000000000522f11000b0000000000000098371100010000000000000000000000b03711000100000000000000000000005d2f110007000000000000001cd41100000000000000000000000000b8371100020000000000000000000000593a110006000000000000005f3a110007000000173a11004200000000000000103a11000700000000000000aa39110007000000f53911001b00000000000000f039110005000000000000002e5d110003000000b13911003f00000000000000a63911000400000000000000aa391100070000008c3911001a0000004539110047000000000000001239110013000000000000002539110020000000ea3811002800000000000000d83811000500000000000000dd3811000d000000bd3811001b00000000000000b13811000400000000000000b538110008000000933811001e000000000000008a381100060000000000000090381100030000004538110045000000c8371100590000002138110024000000204b696c6c207468652073656e64696e67206163636f756e742c20617373756d696e6720746865726520617265206e6f207265666572656e636573206f75747374616e64696e6720616e642074686520636f6d706f73697465206461746120697320657175616c20746f206974732064656661756c742076616c75652e204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e7072656669784b6579204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e6b6579735665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e6974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e6368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e2053657420746865206e65772072756e74696d6520636f64652e636f64655665633c75383e2053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e7061676573204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f50657262696c6c000000000000088711000700000001020000000000009db611000c00000000000000903f110025000000000000000000000000000000000000001cd41100b83f11000000000000000000c83f110001000000000000000100000000000000d03f11000e00000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd411001c4011000000000000000000e03f110001000000000000000000000000000000e83f1100130000000000000000000000fb3f110006000000000000000000000000000000000000000000000000000000000000001cd411001c401100000000000000000004401100010000000000000000000000000000000c4011001000000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd411001c40110000000000000000002c401100010000000000000000000000000000006a2f1100090000000105000000000000285f11000e000000000000003440110007000000000000000000000000000000000000001cd411006c40110000000000000000003c40110001000000000000000100000000000000444011000d0000000105000000000000145611000300000000000000aa39110007000000000000000000000000000000000000001cd41100404a110000000000000000005440110001000000000000000100000000000000732f1100060000000000000000000000285f11000e000000000000000000000000000000000000000000000000000000000000001cd41100f840110000000000000000005c40110001000000000000000100000000000000792f11000a00000000000000000000003440110007000000000000000000000000000000000000000000000000000000000000001cd411006c40110000000000000000006440110001000000000000000100000000000000832f11000e00000000000000000000003440110007000000000000000000000000000000000000000000000000000000000000001cd411006c40110000000000000000007c40110001000000000000000100000000000000912f1100060000000000000000000000844011000b000000000000000000000000000000000000000000000000000000000000001cd41100904011000000000000000000a040110001000000000000000100000000000000c0311100060000000000000000000000a840110023000000000000000000000000000000000000000000000000000000000000001cd41100cc4011000000000000000000dc40110001000000000000000100000000000000e44011000a0000000000000000000000ee4011000a000000000000000000000000000000000000000000000000000000000000001cd41100f840110000000000000000000841110001000000000000000100000000000000ea3411000b00000001020000000000003440110007000000000000001041110021000000000000000000000000000000000000001cd41100344111000000000000000000444111000a00000000000000010000000000000094411100120000000000000000000000a641110016000000000000000000000000000000000000000000000000000000000000001cd41100bc4111000000000000000000cc41110001000000000000000000000000000000d44111000e0000000000000000000000e241110005000000000000000000000000000000000000000000000000000000000000001cd41100e84111000000000000000000f84111000100000000000000000000004163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e0000001600000000000000010000009d000000164711003a00000045787472696e736963436f756e740000e84611002e000000416c6c45787472696e73696373576569676874576569676874000000a346110045000000416c6c45787472696e736963734c656e160000000000000001000000320000005346110050000000543a3a48617368002d4611002600000045787472696e73696344617461000000de4511004f0000009c45110042000000804511001c0000001600000000000000010000009e0000003b451100450000004469676573744f663c543e0016000000000000000100000030000000ff4411003c0000005665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e001600000000000000010000009f000000d7441100280000004576656e74436f756e744576656e74496e6465781600000000000000010000002e000000a94411002e0000005665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e000000160000000000000001000000300000007742110049000000c0421100250000001cd4110000000000e54211005400000039431100510000008a431100390000001cd4110000000000c343110053000000164411005300000069441100400000004c61737452756e74696d65557067726164654c61737452756e74696d6555706772616465496e666f160000000000000001000000320000002242110055000000457865637574696f6e50686173655068617365001600000000000000010000003200000000421100220000002054686520657865637574696f6e207068617365206f662074686520626c6f636b2e2053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2045787472696e7369637320726f6f74206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e20546f74616c2077656967687420666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e4e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b207165649c4711005c000000750300001c0000009c4711005c0000007d030000110000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f73797374656d2f7372632f6c69622e72730000000091311100070000000105000000000000584911000d000000000000006549110034000000000000000000000000000000000000001cd411009c4911000000000000000000ac4911000100000000000000000000000000000013321100100000000000000000000000b449110019000000000000000000000000000000000000000000000000000000000000001cd41100d04911000000000000000000e04911000200000000000000010000000000000098311100160000000205050000000000f04911000400000000000000f44911000e00000000000000024a110012000000000000001cd41100144a11000000000000000000244a1100010000000000000001000000000000002c4a1100120000000105000000000000f04911000400000000000000aa39110007000000000000000000000000000000000000001cd41100404a11000000000000000000504a11000600000000000000010000005265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e00000016000000000000000100000032000000534c1100520000005665633c44656665727265644f6666656e63654f663c543e3e00000016000000000000000100000030000000e94b110059000000424c1100110000004b696e644f706171756554696d65536c6f745665633c5265706f727449644f663c543e3e160000000000000001000000300000009f4b11004a0000005265706f72747342794b696e64496e646578000016000000000000000100000030000000804a1100440000001cd4110000000000c44a11002f0000001cd4110000000000f34a110052000000454b11005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e204465666572726564207265706f72747320746861742068617665206265656e2072656a656374656420627920746865206f6666656e63652068616e646c657220616e64206e65656420746f206265207375626d69747465642061742061206c617465722074696d652e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e706172613a646f75626c652d766f7465696d2d6f6e6c696e653a6f66666c696e5472616e73616374696f6e5061796d656e740000000000304d1100110000000000000000000000414d11000a000000000000000000000000000000000000000000000000000000000000001cd411004c4d110000000000000000001cd411000000000000000000010000004e6578744665654d756c7469706c6965724d756c7469706c696572001600000000000000010000009900000000000000cc4d11001200000000000000de4d11000c000000000000001cd41100ec4d11000000000000000000fc4d1100010000000000000000000000044e11001200000000000000de4d11000c000000000000001cd41100184e11000000000000000000284e110001000000000000005472616e73616374696f6e4261736546656542616c616e63654f663c543e0000160000000000000001000000a0000000734e1100370000005472616e73616374696f6e427974654665650000160000000000000001000000a1000000304e110043000000205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b2074686520626173652e3a6865617070616765733a636f64653a6368616e6765735f74726965000000000000c82e11000f00000000000000544f1100020000000000000000000000ae2e11001a00000000000000644f1100020000000000000000000000912e11001d00000000000000744f11000300000000000000000000007e2e110013000000000000008c4f11000100000000000000000000006f2e11000f00000000000000944f110001000000000000000f51110045000000fa50110015000000a950110051000000fa501100150000002a5011003c0000001cd41100000000006650110043000000ea4f1100400000009c4f11004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e20546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d65626174636861735f73756261735f6d756c7469617070726f76655f61735f6d756c746963616e63656c5f61735f6d756c7469000000000000905211001000000000000000a0521100020000000000000000000000b0521100020000000000000000000000c05211000e000000000000001cd41100000000000000000000000000d0521100010000000000000000000000d85211000b00000000000000e4521100020000000000000000000000f4521100020000000000000000000000045311001000000000000000145311000300000000000000000000002c5311000200000000000000000000003c53110010000000000000004c5311000400000000000000000000006c5311000200000000000000000000007c5311001100000000000000145311000300000000000000000000009053110002000000000000004261746368496e7465727275707465641456110003000000175611000d000000ab5511005600000001561100130000004261746368436f6d706c65746564000078551100330000004e65774d756c7469736967009aa61100090000009aa6110009000000065511005200000058551100200000004d756c7469736967417070726f76616c9aa61100090000008c541100160000009aa6110009000000b054110056000000625411002a0000004d756c746973696745786563757465649aa61100090000008c541100160000009aa6110009000000a25411000e000000175411004b000000625411002a0000004d756c746973696743616e63656c6c6564000000a05311004c000000ec5311002b0000002041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e20466972737420706172616d20697320746865206163636f756e7420746861742069732063616e63656c6c696e672c20746869726420697320746865206d756c7469736967206163636f756e742e2041206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c20746869726420697320746865206d756c7469736967206163636f756e742e54696d65706f696e743c426c6f636b4e756d6265723e4469737061746368526573756c742041206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e20466972737420706172616d20697320746865206163636f756e7420746861742069732041206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c207365636f6e6420697320746865206d756c7469736967206163636f756e742e204261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e204261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061732077656c6c20617320746865206572726f722e75333244697370617463684572726f72446561644163636f756e744578697374696e6756657374696e675363686564756c654b656570416c6976654578697374656e7469616c4465706f736974496e73756666696369656e7442616c616e63654f766572666c6f774c69717569646974795265737472696374696f6e7356657374696e6742616c616e63657365745f62616c616e63657472616e736665725f6b6565705f616c69766542616c616e636573546f74616c49737375616e63654c6f636b730000000000b4571100070000000000000064a51100020000000000000000000000bc571100010000000000000000000000c4571100080000000000000064a51100020000000000000000000000cc571100020000000000000000000000dc5711000800000000000000e4571100030000000000000000000000fc571100010000000000000000000000045811000a00000000000000105811000300000000000000000000002858110001000000000000000000000030581100070000000000000064a51100020000000000000000000000385811000100000000000000456e646f776564003d5911002f000000447573744c6f7374ce581100500000001e5911001f0000005472616e736665729aa61100090000009aa611000900000009a7110007000000a85811002600000042616c616e636553657400009aa611000900000009a711000700000009a711000700000077581100310000004465706f73697400405811003700000020536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20412062616c616e6365207761732073657420627920726f6f74202877686f2c20667265652c207265736572766564292e205472616e7366657220737563636565646564202866726f6d2c20746f2c2076616c7565292e20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e74696d657374616d702073657420696e20626c6f636b20646f65736e2774206d6174636820736c6f7420696e207365616c506f7374496e666f3a20426162654c6174656e6573730000000000245d11000a00000000000000000000002e5d110003000000000000000000000000000000000000000000000000000000000000001cd41100b05d11000000000000000000345d1100010000000000000001000000000000003c5d11000b0000000000000000000000475d110027000000000000000000000000000000000000000000000000000000000000001cd41100705d11000000000000000000805d110001000000000000000100000000000000885d11000b00000000000000000000002e5d110003000000000000000000000000000000000000000000000000000000000000001cd41100b05d11000000000000000000945d110002000000000000000100000000000000a45d11000b00000000000000000000002e5d110003000000000000000000000000000000000000000000000000000000000000001cd41100b05d11000000000000000000c05d110001000000000000000100000000000000c85d11000a0000000000000000000000d25d110016000000000000000000000000000000000000000000000000000000000000001cd41100485e11000000000000000000e85d11000a000000000000000100000000000000385e11000e0000000000000000000000d25d110016000000000000000000000000000000000000000000000000000000000000001cd41100485e11000000000000000000585e110001000000000000000100000000000000605e11000c00000000000000000000001456110003000000000000000000000000000000000000000000000000000000000000001cd41100385f110000000000000000006c5e110009000000000000000100000000000000b45e1100110000000105000000000000145611000300000000000000c55e11001d000000000000000000000000000000000000001cd41100e45e110000000000000000001cd4110000000000000000000100000000000000f45e11000b0000000000000000000000ff5e110008000000000000000000000000000000000000000000000000000000000000001cd41100085f11000000000000000000185f110002000000000000000000000000000000ab591100080000000000000000000000285f11000e000000000000000000000000000000000000000000000000000000000000001cd41100385f11000000000000000000485f110005000000000000000100000045706f6368496e6465787536340000009664110015000000417574686f7269746965735665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e0000160000000000000001000000300000007b6411001b00000047656e65736973536c6f7400196411003e000000576411002400000043757272656e74536c6f740016000000000000000100000099000000046411001500000052616e646f6d6e6573737363686e6f72726b656c3a3a52616e646f6d6e6573733e6211002e0000001cd41100000000006c6211000b0000001cd41100000000007762110041000000b86211003e000000f6621100450000003b631100450000008063110041000000c1631100430000004e65787452616e646f6d6e6573730000160000000000000001000000a200000027621100170000005365676d656e74496e646578e26011001f0000001cd4110000000000016111003d0000003e611100400000007e611100250000001cd4110000000000a36111003b000000de611100420000002062110007000000556e646572436f6e737472756374696f6e5665633c7363686e6f72726b656c3a3a5261775652464f75747075743e000016000000000000000100000030000000496e697469616c697a65644d6179626556726600160000000000000001000000320000005b601100400000009b60110047000000543a3a426c6f636b4e756d62657200001600000000000000010000002e000000705f1100360000001cd4110000000000a65f110045000000eb5f1100440000002f6011002c00000020486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e6564207570206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636b20657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f63682072616e646f6d6e6573732e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e00000000001c6511000d000000000000002e5d110003000000000000001cd411002c65110000000000000000003c6511000200000000000000000000004c651100110000000000000004cf110009000000000000001cd4110060651100000000000000000070651100050000000000000045706f63684475726174696f6e000000160000000000000001000000a3000000c8661100430000000b6711003f0000004578706563746564426c6f636b54696d65000000160000000000000001000000a40000009865110041000000d9651100440000001d661100410000005e66110042000000a06611002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e20546865206e756d626572206f66202a2a736c6f74732a2a207468617420616e2065706f63682074616b65732e20576520636f75706c652073657373696f6e7320746f2065706f6368732c20692e652e2077652073746172742061206e65772073657373696f6e206f6e636520746865206e65772065706f636820626567696e732e65706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b2071656400b46711005a0000006a0100001b000000b46711005a00000072010000200000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f626162652f7372632f6c69622e7273000000000000545111000500000000000000ec6811000100000000000000000000000469110012000000000000000000000059511100060000000000000094691100020000000000000000000000c46911000700000000000000000000005f5111000800000000000000fc6911000400000000000000000000005c6a1100290000000000000000000000675111001000000000000000a46b1100040000000000000000000000046c1100200000000000000000000000775111000f00000000000000046d1100040000000000000000000000646d1100160000000000000000000000817a11000500000000000000867a11001700000041781100200000001cd4110000000000617811003b0000001cd41100000000009c7811001f0000001cd4110000000000bb7811003c0000001cd41100000000005fb211000b000000f778110029000000bab211000d000000c7b211000c0000001cd41100000000002079110056000000767911004d000000c379110056000000197a1100540000006d7a1100140000000000000034b611000500000000000000627111000300000000000000c97711000400000000000000cd77110017000000e4771100380000001cd4110000000000b09a1100340000001cd41100000000005fb211000b0000001c78110025000000c7b211000c000000000000005971110009000000000000006271110003000000000000006571110011000000000000007671110011000000000000005b7511000f000000000000006a7511002100000000000000c97711000400000000000000cd77110017000000ba71110056000000107211003f0000001cd41100000000008b7511002d0000001cd41100000000004f72110054000000a372110058000000fb7211000e0000001cd4110000000000b09a1100340000001cd41100000000009c6e110056000000f26e110051000000436f11001c00000009731100570000006073110055000000b573110036000000b8751100230000001cd4110000000000db7511004800000023761100470000001cd41100000000006a76110057000000c17611005600000017771100380000001cd41100000000005fb211000b0000004f771100150000001470110034000000487011005000000098701100520000006477110049000000ea7011003000000039741100360000006f7411003f000000bab211000d000000ad7711001c000000ae7411004c000000fa741100240000001e7511003d000000c7b211000c000000000000005971110009000000000000006271110003000000000000006571110011000000000000007671110011000000000000005b7511000f000000000000006a7511002100000000000000a97111000900000000000000b271110008000000ba71110056000000107211003f0000001cd41100000000004f72110054000000a372110058000000fb7211000e0000001cd4110000000000b09a1100340000001cd41100000000009c6e110056000000f26e110051000000436f11001c00000009731100570000006073110055000000b573110036000000d66f1100340000001cd4110000000000eb7311004e0000001cd41100000000005fb211000b0000000a7011000a000000147011003400000048701100500000009870110052000000ea7011003000000039741100360000006f7411003f000000bab211000d000000ae7411004c000000fa741100240000001e7511003d000000c7b211000c00000000000000597111000900000000000000627111000300000000000000657111001100000000000000767111001100000000000000877111000900000000000000907111001900000000000000a97111000900000000000000b271110008000000146e1100560000006a6e1100320000001cd4110000000000b09a1100340000001cd41100000000009c6e110056000000f26e110051000000436f11001c0000005f6f110058000000b76f11001f000000d66f1100340000001cd41100000000005fb211000b0000000a7011000a000000147011003400000048701100500000009870110052000000ea70110030000000bab211000d0000001a711100220000003c7111001d000000c7b211000c0000002043616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c7920666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e202d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869732064697370617463682e204d6179206e6f7420626520656d7074792e202d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e20666f7220746869732064697370617463682e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e202d20604f285329602e202d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e202d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f662020207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e202d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e202d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e202d2053746f726167653a2072656d6f766573206f6e65206974656d2e7468726573686f6c647531366f746865725f7369676e61746f726965735665633c543a3a4163636f756e7449643e74696d65706f696e7454696d65706f696e743c543a3a426c6f636b4e756d6265723e63616c6c5f686173685b75383b2033325d20526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e7420696620617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e205061796d656e743a20604d756c74697369674465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c757320607468726573686f6c64602074696d657320604d756c74697369674465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f722069732063616e63656c6c65642e202d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e204966206974206973206e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e204e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e202d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292e202d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e202d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c207769746820612020206465706f7369742074616b656e20666f7220697473206c69666574696d65206f66202020604d756c74697369674465706f73697442617365202b207468726573686f6c64202a204d756c74697369674465706f736974466163746f72602e6d617962655f74696d65706f696e744f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e2049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e202d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e204e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f207573652060617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f7468657277697365206f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642c206d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e202d20604f2853202b205a202b2043616c6c29602e202d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2e202d2054686520776569676874206f6620746865206063616c6c602e63616c6c426f783c3c542061732054726169743e3a3a43616c6c3e2053656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e202d2054686520776569676874206f6620746865206063616c6c60202b2031302c3030302e2053656e642061206261746368206f662064697370617463682063616c6c732e20546869732077696c6c206578656375746520756e74696c20746865206669727374206f6e65206661696c7320616e64207468656e2073746f702e204d61792062652063616c6c65642066726f6d20616e79206f726967696e2e202d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e202d205468652073756d206f66207468652077656967687473206f6620746865206063616c6c73602e20546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e2074686520604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d61646520616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c6574656460206576656e74206973206465706f73697465642e63616c6c735665633c3c542061732054726169743e3a3a43616c6c3e5574696c69747900000000fc7a11000900000002050200000000009db611000c00000000000000b27111000800000000000000057b110034000000000000001cd411003c7b110000000000000000004c7b11000100000000000000000000004d756c7469736967734d756c74697369673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e00000016000000000000000100000032000000547b1100250000002054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e000000000000006d92110008000000000000002c7c11000200000000000000000000005c7c11001800000000000000000000009f5611000b000000000000001c7d1100030000000000000000000000647d11000d0000000000000000000000799211000e00000000000000cc7d1100030000000000000000000000147e1100020000000000000000000000aa56110013000000000000002c7c1100020000000000000000000000247e11000600000000000000000000007d7f11000400000000000000d9b211002300000000000000817f11000500000000000000867f11001300000063811100360000001cd41100000000009981110042000000db811100480000002382110045000000688211002d0000001cd411000000000095821100460000001cd41100000000005fb211000b000000db8211004c00000027831100330000005a8311005a0000001cd4110000000000b4831100130000001cd4110000000000c7831100540000001b8411004b00000066841100350000009b84110058000000f384110052000000458511003e0000001cd4110000000000c7b211000c000000000000004c8111000300000000000000d9b2110023000000000000004f8111000800000000000000867f11001300000000000000578111000c00000000000000867f110013000000997f1100250000001cd4110000000000be7f110048000000068011004200000048801100460000008e801100400000001cd4110000000000ce8011002d0000001cd41100000000005fb211000b000000fb801100200000001b81110031000000c7b211000c00000000000000777f11000600000000000000d9b2110023000000000000007d7f11000400000000000000d9b211002300000000000000817f11000500000000000000867f110013000000187f1100540000006c7f11000b000000547e110054000000a87e1100100000001cd4110000000000b87e11002f0000001cd4110000000000e77e1100310000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e4d6f64756c652e68746d6c236d6574686f642e7472616e736665722045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e736f757263656465737476616c7565436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e77686f6e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e0000000000c55611000d0000000000000000000000e48611000a000000000000000000000000000000000000000000000000000000000000001cd41100f086110000000000000000000087110001000000000000000100000000000000088711000700000001020000000000009db611000c000000000000000f87110017000000000000000000000000000000000000001cd411002887110000000000000000003887110006000000000000000100000000000000d25611000500000001020000000000009db611000c00000000000000688711001c000000000000000000000000000000000000001cd411008487110000000000000000009487110002000000000000000100000000000000a48711000e0000000000000000000000b287110008000000000000000000000000000000000000000000000000000000000000001cd41100bc8711000000000000000000cc871100030000000000000001000000543a3a42616c616e636500001600000000000000010000003600000093891100260000004163636f756e744163636f756e74446174613c543a3a42616c616e63653e0000160000000000000001000000a5000000a28811001b0000001cd4110000000000bd8811005600000013891100300000001cd411000000000043891100500000005665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e160000000000000001000000300000002b8811002e000000598811004900000053746f7261676556657273696f6e52656c6561736573000016000000000000000100000031000000e48711001f0000001cd411000000000003881100280000002053746f726167652076657273696f6e206f66207468652070616c6c65742e20546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054484953204d4159204e4556455220424520494e204558495354454e434520414e4420594554204841564520412060746f74616c28292e69735f7a65726f2829602e2049662074686520746f74616c2069732065766572207a65726f2c207468656e2074686520656e747279202a4d5553542a2062652072656d6f7665642e204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e000000000000004f5611001200000000000000e48611000a000000000000001cd41100f48911000000000000000000048a11000100000000000000160000000000000001000000a00000000c8a11003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e000000648a11006a000000a700000009000000648a11006a000000a7000000350000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e302f7372632f656e636f64655f617070656e642e72736d6f646c70792f7574696c69737562615a65726f5468726573686f6c64546f6f4665775369676e61746f72696573546f6f4d616e795369676e61746f72696573556e657870656374656454696d65706f696e744e6f54696d65706f696e7457726f6e6754696d65706f696e74416c7265616479417070726f7665644e6f417070726f76616c734e656564656453656e646572496e5369676e61746f726965735369676e61746f726965734f75744f664f72646572000000000000de8a11000d00000000000000d48c11000100000000000000000000003a8b11000f00000000000000dc8c1100010000000000000000000000498b11001100000000000000e48c1100010000000000000000000000eb8a11001100000000000000ec8c1100010000000000000000000000fc8a11001200000000000000f48c11000100000000000000000000006d8b11001500000000000000fc8c11000100000000000000000000005a8b11001300000000000000048d11000100000000000000000000004fa3110008000000000000000c8d1100010000000000000000000000559211000800000000000000148d1100010000000000000000000000218b11000b000000000000001c8d11000100000000000000000000002c8b11000e00000000000000248d11000100000000000000000000000e8b110013000000000000002c8d11000100000000000000bd8f11001d000000918f11002c000000698f1100280000003e8f11002b000000128f11002c000000ce8e1100440000008a8e110044000000528e110038000000068e11004c000000be8d110048000000728d11004c000000348d11003e00000020412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e204120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e204e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e204f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e204d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e205468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e20546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e2054686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e2054686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e2043616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e2043616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e205468726573686f6c6420697320746f6f206c6f7720287a65726f292e000000000000915611000e00000000000000bc9011000100000000000000000000007c5611001500000000000000c4901100010000000000000000000000745611000800000000000000cc901100010000000000000000000000615611001300000000000000d49011000100000000000000000000004f5611001200000000000000dc901100010000000000000000000000465611000900000000000000e49011000100000000000000000000002f5611001700000000000000ec901100010000000000000000000000245611000b00000000000000f490110001000000000000001e92110027000000ec91110032000000cf9111001d000000b19111001e000000769111003b00000052911100240000001f91110033000000fc901100230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c756520476f7420616e206f766572666c6f7720616674657220616464696e67204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75654e6f745472616e73666572496e5573654e6f744f776e65724e6f7441737369676e6564636c61696d7472616e7366657266726565666f7263655f7472616e736665720000000000e09211000d00000000000000f092110002000000000000000000000000931100010000000000000000000000089311000a00000000000000149311000100000000000000000000001c9311000100000000000000496e64657841737369676e65640000009aa6110009000000549311000c000000609311001e000000496e64657846726565640000549311000c00000024931100300000002041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e4163636f756e74496e6465782041206163636f756e7420696e646578207761732061737369676e65642e417574686f7273686970417574686f724f6c64556e636c65556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e747365745f756e636c6573496e64696365734e657874456e756d536574456e756d5365744163636f756e7473556e636c6573000000000000689211000500000000000000d4941100010000000000000000000000ec9411001000000000000000000000006d92110008000000000000006c9511000200000000000000000000009c951100100000000000000000000000759211000400000000000000d49411000100000000000000000000001c961100100000000000000000000000799211000e000000000000006c9511000200000000000000000000009c96110010000000000000000000000034b611000500000000000000489b11000f000000579b1100270000001cd41100000000007e9b1100380000001cd4110000000000b09a1100340000001cd4110000000000b69b11003d0000001cd411000000000061981100250000001cd41100000000005fb211000b000000869811000a0000009098110027000000109a110019000000bab211000d000000c7b211000c000000000000009ab6110003000000000000009db611000c0000000000000034b611000500000000000000489b11000f000000299a110058000000819a11002f0000001cd4110000000000b09a1100340000001cd4110000000000e49a11004a00000009981100580000001cd411000000000061981100250000001cd41100000000005fb211000b000000869811000a00000090981100270000002e9b11001a000000bab211000d000000c7b211000c000000d6981100260000001cd4110000000000fc981100580000001cd411000000000054991100560000001cd4110000000000aa991100440000001cd4110000000000ee991100220000001cd41100000000005fb211000b000000869811000a0000009098110027000000109a110019000000bab211000d000000c7b211000c0000001c97110056000000729711003b0000001cd4110000000000ad971100320000001cd4110000000000df9711002a00000009981100580000001cd411000000000061981100250000001cd41100000000005fb211000b000000869811000a0000009098110027000000b79811001f000000bab211000d000000c7b211000c00000020466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e202d20604f283129602e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e543a3a4163636f756e74496e6465782041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e000000000014941100080000000102000000000000489b11000f000000000000004c9c11001c000000000000000000000000000000000000001cd41100689c11000000000000000000789c110001000000000000000000000028543a3a4163636f756e7449642c2042616c616e63654f663c543e2916000000000000000100000032000000809c11002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e000000000000f19311000a00000000000000d09c1100010000000000000000000000e89c1100010000000000000000000000099d11000a00000000000000139d11000e000000f09c1100190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e000000000000001c9411000600000000000000000000002c9e11003a000000000000000000000000000000000000000000000000000000000000001cd41100689e11000000000000000000789e110001000000000000000100000000000000889311000600000000000000000000009db611000c000000000000000000000000000000000000000000000000000000000000001cd41100809e11000000000000000000909e110001000000000000000000000000000000989e11000c000000000000000000000031cf110004000000000000000000000000000000000000000000000000000000000000001cd41100a49e11000000000000000000b49e11000100000000000000010000005665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e000016000000000000000100000030000000049f11000700000016000000000000000100000032000000eb9e110019000000446964536574556e636c657316000000000000000100000032000000bc9e11002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c65730000000000df9311001200000000000000d09f1100010000000000000000000000cf9311001000000000000000d89f1100010000000000000000000000c29311000d00000000000000e09f1100010000000000000000000000b69311000c00000000000000e89f1100010000000000000000000000aa9311000c00000000000000f09f1100010000000000000000000000969311001400000000000000f89f11000100000000000000000000008e931100080000000000000000a011000100000000000000bda01100230000009ca01100210000008ba011001100000075a011001600000055a011002000000036a011001f00000008a011002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e25a111000d00000008a111001b00000023a111000200000033d311003c000000310200000100000042616420696e70757420646174612070726f766964656420746f203a20657865637574655f626c6f636b00003ca1110010000000696e697469616c697a655f626c6f636b54a111000f0000006170706c795f65787472696e736963006ca1110013000000696e686572656e745f65787472696e736963730088a111000f000000636865636b5f696e686572656e747300a0a111001400000076616c69646174655f7472616e73616374696f6ebca111000f0000006f6666636861696e5f776f726b657200d4a11100150000006c6f63616c5f76616c69646174696f6e5f64617461000000f4a111000e00000070617261636861696e5f636f646500000ca21100090000006765745f686561647300000020a211001500000067656e65726174655f73657373696f6e5f6b65797300000040a21100130000006465636f64655f73657373696f6e5f6b657973005ca211000d0000006163636f756e745f6e6f6e636500000074a211000a00000071756572795f696e666f000088a211001a0000004552524f523a20436f72727570746564207374617465206174200000aca211002a000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a20546f6f4d616e794669656c6473496e76616c6964546172676574496e76616c6964496e646578496e76616c69644a756467656d656e744a756467656d656e74476976656e537469636b794a756467656d656e744e6f4964656e746974794665654368616e676564456d707479496e6465784e6f744e616d65644e6f74466f756e64546f6f4d616e795375624163636f756e74736164645f7265676973747261727365745f6964656e746974797365745f73756273636c6561725f6964656e74697479726571756573745f6a756467656d656e7463616e63656c5f726571756573747365745f6665657365745f6163636f756e745f69647365745f6669656c647370726f766964655f6a756467656d656e746b696c6c5f6964656e746974794964656e7469747953757065724f66000000000038a511000b0000000000000044a511000100000000000000000000004ca5110001000000000000000000000054a511000f0000000000000064a5110002000000000000000000000074a511000100000000000000000000007ca511000e0000000000000064a511000200000000000000000000008ca5110001000000000000000000000094a511001200000000000000a8a51100020000000000000000000000b8a51100010000000000000000000000c0a511001400000000000000a8a51100020000000000000000000000d4a511000100000000000000000000000ca311000e00000000000000a8a51100020000000000000000000000dca51100010000000000000000000000e4a511000e00000000000000f4a51100010000000000000000000000fca5110001000000000000004964656e74697479536574009aa611000900000010a711003c0000004964656e74697479436c6561726564009aa611000900000009a7110007000000d5a61100340000004964656e746974794b696c6c65640000a3a61100320000004a756467656d656e7452657175657374656400009aa61100090000001ba611000e00000072a61100280000004a756467656d656e74556e7265717565737465644fa611002300000029a6110026000000526567697374726172416464656400001ba611000e00000004a6110017000000204120726567697374726172207761732061646465642e526567697374726172496e6465782041206a756467656d656e742077617320676976656e2062792061207265676973747261722e2041206a756467656d656e74207265717565737420776173207265747261637465642e2041206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e4163636f756e7449642041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e2041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e42616c616e63652041206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e54a71100230000005f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e000000000069a311000d000000000000005ca9110001000000000000000000000074a911000d000000000000000000000076a311000c00000000000000dca91100010000000000000000000000f4a9110012000000000000000000000082a31100080000000000000084aa11000100000000000000000000009caa11001000000000000000000000008aa311000e000000000000001cd411000000000000000000000000001cab11000f000000000000000000000098a31100110000000000000094ab1100020000000000000000000000c4ab1100170000000000000000000000a9a311000e000000000000007cac110001000000000000000000000094ac1100110000000000000000000000b7a3110007000000000000001cad11000200000000000000000000004cad11000c0000000000000000000000bea311000e00000000000000acad1100020000000000000000000000dcad11000c0000000000000000000000cca311000a000000000000003cae11000200000000000000000000006cae11000c0000000000000000000000d6a311001100000000000000ccae110003000000000000000000000014af1100130000000000000000000000e7a311000d00000000000000acaf1100010000000000000000000000c4af1100130000000000000000000000f9bf110007000000000000009db611000c000000e2be11001f0000001cd411000000000001bf1100470000001cd411000000000048bf11002b0000001cd411000000000073bf1100260000001cd41100000000005fb211000b00000099bf110039000000d2bf110027000000bab211000d000000c7b211000c00000000000000d2be11000400000000000000d6be11000c00000035bd11004b0000001cd411000000000080bd110056000000d6bd1100150000001cd4110000000000c1ba1100590000001abb11000a0000001cd4110000000000ebbd1100240000001cd41100000000000fbe1100230000001cd41100000000005fb211000b00000032be11005700000090bc11002200000089be110049000000bab211000d000000c7b211000c0000000000000018bd110004000000000000001cbd11001900000068bb1100240000001cd41100000000008cbb110056000000e2bb11004c0000001cd4110000000000c1ba1100590000001abb11000a0000001cd41100000000002ebc1100270000001cd41100000000005fb211000b00000055bc11003b00000090bc110022000000b2bc11005000000002bd110016000000c7b211000c00000037ba11004e0000001cd411000000000085ba11003c0000001cd4110000000000c1ba1100590000001abb11000a0000001cd411000000000024bb1100270000001cd41100000000005fb211000b0000006ab21100120000007cb21100210000004bbb11001d000000bab211000d000000c7b211000c00000000000000f5b411000900000000000000feb41100170000000000000030ba1100070000000000000009b71100150000007cb81100260000001cd4110000000000a2b8110056000000f8b81100070000001cd411000000000078b711004e000000c6b71100150000001cd4110000000000ffb811004800000047b91100560000001cd41100000000009db911000d000000aab9110029000000d3b91100040000001cd4110000000000d7b911002a0000001cd41100000000005fb211000b00000070b411000e0000007cb211002100000001ba11002f000000bab211000d000000c7b211000c00000000000000f5b4110009000000000000001ba611000e0000001eb711001b0000001cd411000000000039b711003f0000001cd411000000000078b711004e000000c6b71100150000001cd4110000000000dbb71100520000001cd41100000000002db811002c0000001cd41100000000005fb211000b00000070b411000e0000007cb211002100000059b8110023000000bab211000d000000c7b211000c0000000000000034b611000500000000000000feb41100170000000000000006b71100030000000000000009b7110015000000a9b61100470000001cd41100000000002bb311005600000060b51100290000001cd411000000000089b511003e000000f0b61100160000001cd41100000000005fb211000b0000000bb611000a00000015b611001f000000c7b211000c0000000000000034b611000500000000000000feb4110017000000000000009ab6110003000000000000009db611000c0000004db61100300000001cd41100000000002bb311005600000060b51100290000001cd411000000000089b511003e0000007db611001d0000001cd41100000000005fb211000b0000000bb611000a00000015b611001f000000c7b211000c0000000000000034b611000500000000000000feb41100170000000000000039b6110006000000000000003fb611000e00000035b511002b0000001cd41100000000002bb311005600000060b51100290000001cd411000000000089b511003e000000c7b51100440000001cd41100000000005fb211000b0000000bb611000a00000015b611001f000000c7b211000c00000000000000f5b411000900000000000000feb411001700000000000000d3b211000600000000000000d9b21100230000000000000015b5110009000000000000001eb5110017000000fcb211002f0000001cd41100000000002bb311005600000081b311002d0000001cd4110000000000aeb3110049000000c5b11100560000001bb211001e000000f7b31100530000001cd41100000000004ab41100260000001cd41100000000005fb211000b00000070b411000e0000007eb4110022000000a0b4110026000000c6b411002f000000bab211000d000000c7b211000c00000000000000d3b211000600000000000000d9b21100230000005cb01100510000001cd4110000000000adb011005900000006b111005200000058b11100210000001cd411000000000079b111004c0000001cd4110000000000c5b11100560000001bb211001e0000001cd411000000000039b21100260000001cd41100000000005fb211000b0000006ab21100120000007cb21100210000009db211001d000000bab211000d000000c7b211000c0000002052656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e205061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c65642062792060536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564206d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e202d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e742020207769746820612072656769737465726564206964656e746974792e20456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e2023203c7765696768743e202d20604f2852202b2053202b205829602e202d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e202d206053202b2032602073746f72616765206d75746174696f6e732e202d204f6e65206576656e742e2023203c2f7765696768743e7461726765743c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652050726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74206f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e202d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e202d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e20456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e202d20604f2852202b205829602e202d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e202d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e7265675f696e646578436f6d706163743c526567697374726172496e6465783e6a756467656d656e744a756467656d656e743c42616c616e63654f663c543e3e2053657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e206f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e202d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e202d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e202d20604f285229602e202d204f6e652073746f72616765206d75746174696f6e20604f285229602e696e6465786669656c64734964656e746974794669656c6473204368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e202d20606e6577603a20746865206e6577206163636f756e742049442e6e6577543a3a4163636f756e74496420536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e202d2060666565603a20746865206e6577206665652e666565436f6d706163743c42616c616e63654f663c543e3e2043616e63656c20612070726576696f757320726571756573742e205061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e20456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e20526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e205061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7420676976656e2e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e202d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a206060606e6f636f6d70696c652053656c663a3a72656769737472617273287265675f696e646578292e756e7772617028292e6665652060606020456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e6d61785f66656520436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e7420616e642072657475726e20616c6c206465706f736974732e205061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e20456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e202d206053202b2032602073746f726167652064656c6574696f6e732e2053657420746865207375622d6163636f756e7473206f66207468652073656e6465722e205061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e656420616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e202d206073756273603a20546865206964656e746974792773207375622d6163636f756e74732e202d20604f285329602077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e202d204174206d6f73742074776f2062616c616e6365206f7065726174696f6e732e202d204174206d6f7374204f2832202a2053202b2031292073746f72616765206d75746174696f6e733b20636f64656320636f6d706c657869747920604f2831202a2053202b2053202a20312960293b2020206f6e652073746f726167652d6578697374732e737562735665633c28543a3a4163636f756e7449642c2044617461293e2053657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e20496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7420666f7220746865206e6577206465706f7369742e202d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e20456d69747320604964656e7469747953657460206966207375636365737366756c2e202d20604f2858202b205827202b2052296020776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e696e666f4964656e74697479496e666f2041646420612072656769737472617220746f207468652073797374656d2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605265676973747261724f726967696e60206f722060526f6f74602e202d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e20456d6974732060526567697374726172416464656460206966207375636365737366756c2e202d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e6163636f756e740000000060c111000a00000001050000000000009db611000c000000000000006ac111001a000000000000000000000000000000000000001cd4110084c11100000000000000000094c1110001000000000000000000000000000000fca311000700000001020000000000009db611000c000000000000009cc1110014000000000000000000000000000000000000001cd41100b0c111000000000000000000c0c1110002000000000000000000000000000000d0c111000600000001050000000000009db611000c00000000000000d6c1110021000000000000000000000000000000000000001cd41100f8c11100000000000000000008c211000300000000000000010000000000000020c211000a00000000000000000000002ac2110036000000000000000000000000000000000000000000000000000000000000001cd4110060c21100000000000000000070c211000400000000000000010000004964656e746974794f66526567697374726174696f6e3c42616c616e63654f663c543e3e1600000000000000010000003200000078c411004800000028543a3a4163636f756e7449642c20446174612916000000000000000100000032000000ccc311005800000024c4110054000000537562734f662842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e2900160000000000000001000000a600000057c311002e0000001cd411000000000085c3110047000000526567697374726172735665633c4f7074696f6e3c526567697374726172496e666f3c42616c616e63654f663c543e2c20543a3a4163636f756e7449643e3e3e1600000000000000010000003000000090c2110053000000e3c211002a0000001cd41100000000000dc311004a0000002054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e2054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e20416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e20546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e207468617420636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e20496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e30c5110045000000be0300002200000030c5110045000000da0300001500000030c5110045000000e80300001e00000030c5110045000000f10300001800000030c5110045000000f20300001900000030c5110045000000f50300001a00000030c5110045000000fb0300000d0000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962616c6c6f632f736c6963652e7273696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f6465000000c0c511005e0000008f0200001d000000c0c511005e00000039030000360000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f6964656e746974792f7372632f6c69622e727300000000000057a31100120000000000000070c711000100000000000000000000004fa31100080000000000000078c7110001000000000000000000000047a31100080000000000000080c711000100000000000000000000003da311000a0000000000000088c7110001000000000000000000000033a311000a0000000000000090c7110001000000000000000000000029a311000a0000000000000098c711000100000000000000000000001aa311000f00000000000000a0c711000100000000000000000000000ca311000e00000000000000a8c71100010000000000000000000000fca211001000000000000000b0c71100010000000000000000000000f0a211000c00000000000000b8c71100010000000000000000000000e3a211000d00000000000000c0c71100010000000000000000000000d6a211000d00000000000000c8c711000100000000000000a9c811001800000094c81100150000007fc811001500000072c811000d00000062c81100100000004fc81100130000003dc81100120000002cc811001100000019c811001300000003c8110016000000ecc7110017000000d0c711001c00000020546f6f206d616e79206164646974696f6e616c206669656c64732e205468652074617267657420697320696e76616c69642e2054686520696e64657820697320696e76616c69642e20496e76616c6964206a756467656d656e742e204a756467656d656e7420676976656e2e20537469636b79206a756467656d656e742e204e6f206964656e7469747920666f756e642e20466565206973206368616e6765642e20456d70747920696e6465782e204163636f756e742069736e2774206e616d65642e204163636f756e742069736e277420666f756e642e20546f6f206d616e7920737562732d6163636f756e74732e000000d4c8110055000000310600001b0000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962616c6c6f632f636f6c6c656374696f6e732f62747265652f6d61702e7273436f756c64206e6f74206465636f64652072657175657374656420696e686572656e74207479706521000064c911006b000000ae000000050000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f737570706f72742f7372632f73746f726167652f6d6967726174696f6e2e72730064c911006b000000af0000000500000054696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b002cd411004900000022000000090000007061726974792f7374616b696e672d656c656374696f6e2f54696d657374616d704e6f77736574616c726561647920626f72726f7765640064ca1100430000006e030000090000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962636f72652f63656c6c2e7273616c7265616479206d757461626c7920626f72726f7765640064ca1100430000001e0300000900000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565001600000000000000010000002b0000001600000000000000010000002a0000002ccb11000600000032cb110010000000496e64657820206f7574206f6620626f756e64733a2066696e616c6e756d000064c911006b00000047000000230000006ccb11006f00000075000000450000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f737570706f72742f7372632f73746f726167652f67656e657261746f722f6d61702e727353657373696f6e486973746f726963616c53657373696f6e73a70000005800000008000000a8000000a900000018cc11005d0000004d0000001c0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32302e302f7372632f6e6962626c652f6d6f642e72730000000000000040ca11000300000000000000a4cc1100010000000000000000000000bccc11000900000000000000000000003ece1100030000000000000041ce11001200000004cd1100160000001cd41100000000001acd11005600000070cd1100360000001cd4110000000000a6cd110051000000f7cd1100110000001cd411000000000008ce11003600000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e6e6f77436f6d706163743c543a3a4d6f6d656e743e00000000003dca110003000000000000000000000004cf110009000000000000000000000000000000000000000000000000000000000000001cd4110010cf1100000000000000000020cf11000100000000000000010000000000000028cf110009000000000000000000000031cf110004000000000000000000000000000000000000000000000000000000000000001cd4110038cf1100000000000000000048cf1100010000000000000001000000543a3a4d6f6d656e74000000160000000000000001000000990000007dcf110024000000446964557064617465626f6f6c0000001600000000000000010000003200000050cf11002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000dccf11000d0000000000000004cf110009000000000000001cd41100eccf11000000000000000000fccf110004000000000000004d696e696d756d506572696f64000000160000000000000001000000aa0000001cd011005a00000076d011005a000000d0d011005900000029d111001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e54696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b54696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b734765747320616e64206465636f6465732074696d657374616d7020696e686572656e74206461746100ab0000001000000004000000ac0000000cd211005f000000d00000001f0000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f6672616d652f74696d657374616d702f7372632f6c69622e72735468657265206973206f6e6c79206f6e6520666174616c206572726f723b207165640000001600000008000000040000009400000033d311003c000000dd0100000100000054696d657374616d7020746f6f2066617220696e2066757475726520746f20616363657074496e686572656e7420776974682073616d65206964656e74696669657220616c726561647920657869737473214e6f206f74686572206572726f72732061726520616363657074656420616674657220616e2068617264206572726f72212f686f6d652f6461766964642f6465762f706f6c6b61646f742d77657374656e642f72756e74696d652f77657374656e642f7372632f6c69622e727300617474656d707420746f20646976696465206279207a65726f000000a4d311002d000000d1d311000c000000ddd3110003000000617373657274696f6e206661696c65643a2060286c656674203d3d20726967687429600a20206c6566743a2060602c0a2072696768743a2060603a20e8d311003400000064657374696e6174696f6e20616e6420736f7572636520736c69636573206861766520646966666572656e74206c656e677468732cd411004900000028000000090000002f72757374632f366465653566313132366466643563393331346565356165396439656230313065333565663235372f7372632f6c6962636f72652f6d6163726f732f6d6f642e72730000001600000008000000040000002c00000071202f206365696c28712f246d617829203c20246d61782e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b207165640000f8d411006c00000064010000270000002f686f6d652f6461766964642f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316439373339372f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e7273f8d411006c0000006b01000027000000f8d411006c00000076010000210000004661696c656420746f20636f6e76657274004198abc7000b08000000000000000000f69f03046e616d6501ed9f03aa0500196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31012a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f3102246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f3103296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31041e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31051c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31061a6578745f73746f726167655f726561645f76657273696f6e5f3107376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f3108286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f3109216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f310a1d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f310b1c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f310c1e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f310d1d6578745f68617368696e675f74776f785f36345f76657273696f6e5f310e196578745f73746f726167655f7365745f76657273696f6e5f310f206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f3110196578745f73746f726167655f6765745f76657273696f6e5f31111b6578745f73746f726167655f636c6561725f76657273696f6e5f3112226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f3113236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f3214286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f3115346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f3116286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f3117226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f3118206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31191e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f311a1a6578745f73746f726167655f726f6f745f76657273696f6e5f311b226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f311c236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f311d1c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f311e236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f311f256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f3120256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31210c5f5f727573745f616c6c6f63220a5f5f72675f616c6c6f63230e5f5f727573745f6465616c6c6f63240c5f5f72675f6465616c6c6f63250e5f5f727573745f7265616c6c6f63260c5f5f72675f7265616c6c6f6327135f5f727573745f616c6c6f635f7a65726f656428115f5f72675f616c6c6f635f7a65726f65642909686173685f746573742a33616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68613566306535653834326364613163302b08727573745f6f6f6d2c34616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68333466326439363261306133656336382d29636f72653a3a70616e69636b696e673a3a70616e69633a3a68363666663863623431656237393339322e673c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c26542c636f72653a3a736c6963653a3a497465723c543e3e3e3a3a737065635f657874656e643a3a68643134313632623662636165643561392f25616c6c6f633a3a666d743a3a666f726d61743a3a68383765613432376665623761323738653036636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68303262666133616364666639366234373123636f72653a3a666d743a3a77726974653a3a68376435353637373938616236653862383248616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a616c6c6f636174655f696e3a3a7b7b636c6f737572657d7d3a3a68303333623066313762636138353139633348616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a616c6c6f636174655f696e3a3a7b7b636c6f737572657d7d3a3a68303030303461356163313563353166393433636f72653a3a6f7074696f6e3a3a6578706563745f6e6f6e655f6661696c65643a3a6835373432343139313566633864343931353a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6835653233323038336335343963653133363b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6861326264383531623736356263653636373a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6839653534623965393531623637353032383c616c6c6f633a3a7665633a3a5665633c543e3a3a696e736572743a3a6173736572745f6661696c65643a3a6837623736633238353166313361343339394e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a68353033646134666265376565343631353a2d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a68363561333939373462633735646131633b3c616c6c6f633a3a7665633a3a5665633c543e3a3a72656d6f76653a3a6173736572745f6661696c65643a3a68303134313932333463366237343964383c3f616c6c6f633a3a7665633a3a5665633c543e3a3a647261696e3a3a656e645f6173736572745f6661696c65643a3a68363563643736346262663266323636613d39636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a68646338643634393661373862643066333e2f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68393738396630323639633064616665643f11727573745f626567696e5f756e77696e6440313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68356430383831303839366462353536324135636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68333034343734646238383737386466344243636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68326165326132306532373661633532334334636f72653a3a736c6963653a3a736c6963655f696e6465785f6c656e5f6661696c3a3a68623532376436336130376365343861384436636f72653a3a736c6963653a3a736c6963655f696e6465785f6f726465725f6661696c3a3a6833666139386131373562356566303330452c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a6863376136613262346230386533623339462e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a686438346436643138336338303230356147323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6834666233316133633762663631626138484a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683362333865333364373738623631333949323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68353835643432366237393961616636664a47636f72653a3a756e69636f64653a3a756e69636f64655f646174613a3a6772617068656d655f657874656e643a3a6c6f6f6b75703a3a68313030666232373836323430336137394b32636f72653a3a756e69636f64653a3a7072696e7461626c653a3a636865636b3a3a68316533316630666162356466373231394c49636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a68613266303731633335633466623437354d453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68336136393861346565626438306261334e483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68363430343466643666663439646637354f2e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a683762353636393261313435626665656150303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683233386463363831353065393366393051323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683136393133643238656262376364396452533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6831653333623633613261643465323036532e636f72653a3a736c6963653a3a6d656d6368723a3a6d656d6368723a3a6834616435376236623738633262663264542f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a6861383962343039653035353263356439552e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a6833373932646664386336376430633834563a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6838323430376561663662663939633330573b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6865373233653834313363656164393266583a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68393630336533353761316331373136305939636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68653930303364656631636662623461315a37636f72653a3a666d743a3a6275696c646572733a3a44656275675365743a3a656e7472793a3a68666664653036363031663966383231615b443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68663066336439353534333334333736365c313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68653366393638646530643165353739635d8001636f72653a3a7374723a3a7472616974733a3a3c696d706c20636f72653a3a736c6963653a3a536c696365496e6465783c7374723e20666f7220636f72653a3a6f70733a3a72616e67653a3a52616e67653c7573697a653e3e3a3a696e6465783a3a7b7b636c6f737572657d7d3a3a68663163333665343366373434383062645e4a636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a557070657248657820666f72206933323e3a3a666d743a3a68306566613962626536663832373035625f3e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686363643639613534353464323764663160693c6672616d655f6d657461646174613a3a4465636f6465446966666572656e743c422c4f3e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6866393237336565633130363664363332616c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683831363537383736353164303031623962543c616c6c6f633a3a7665633a3a5665633c75383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743e3a3a77726974653a3a683831663631373464316234396461626263693c6672616d655f6d657461646174613a3a4465636f6465446966666572656e743c422c4f3e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683465323863386362363432393166663864483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683561636630613031653733626661643265513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6835666331623361363635616636646635663a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6866323433643738363163353565643432673b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6837363933613834333232363936333435683a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a683030336338373633653031613564393369503c6672616d655f737570706f72743a3a64656275673a3a57726974657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68393138666634306466623732653137666a4d3c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68373438616538653039663533353263346b493c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68353833383562353631393061373138346c323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68326437616361633934393938386663666d383c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68313635636264653130373738626661366e343c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68316537646531373862303632353066646f363c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a666c7573683a3a686330386661623861626464323931353670573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a683166393166363335356463663439333871513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6837343166373632333632653630396463724470616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a656e645f7370616e3a3a6834316632383830393436626164636130733a70616c6c65745f74696d657374616d703a3a657874726163745f696e686572656e745f646174613a3a683762343364383634633038303235643974453c737472206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a683738393536623938373434353332616675497061726974795f7363616c655f636f6465633a3a656e636f64655f617070656e643a3a657874726163745f6c656e6774685f646174613a3a68626562323562623531333530323231377649706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a6c6f63616c697a65645f7061796c6f61643a3a6833383634376435326266336530653564778f0173705f6170706c69636174696f6e5f63727970746f3a3a737232353531393a3a3c696d706c2073705f6170706c69636174696f6e5f63727970746f3a3a7472616974733a3a52756e74696d655075626c696320666f722073705f636f72653a3a737232353531393a3a5075626c69633e3a3a746f5f7261775f7665633a3a6830323336333330373665666133393437783a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a68653631613634643963353264626661337937616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68303338373933363166386665623939667a3773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a68643366623862373461373433306636307b3773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a68663562373933353463313266626130347c4473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a68396630616564646264323235393838647d4b3c73705f61726974686d657469633a3a62696775696e743a3a42696755696e7420617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a68616639346234613463396436613637337e303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68343338323065613565383161376164667f513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a68616337353132373437623231633331328001533c73705f61726974686d657469633a3a726174696f6e616c3132383a3a526174696f6e616c31323820617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a68333961353536316231313935646535328101583c73705f61726974686d657469633a3a726174696f6e616c3132383a3a526174696f6e616c31323820617320636f72653a3a636d703a3a5061727469616c45713e3a3a65713a3a683635663962613162653061386461663582014673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a68353631336631643166653764376130648301413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68653966306436343262373237303338338401323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683932383631623732643636373830303685015373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a683237353166653436323632626363663086013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683135393463663930333639613536363887014d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a683861323231326432316162643535363688016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683135633235363439303230313262373689015273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a68316138356633396338396461356432358a014273705f696f3a3a6c6f6767696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f673a3a68643061646133306361666263646662658b017c3c73705f72756e74696d655f696e746572666163653a3a706173735f62793a3a436f6465633c543e2061732073705f72756e74696d655f696e746572666163653a3a706173735f62793a3a506173734279496d706c3c543e3e3a3a66726f6d5f6666695f76616c75653a3a68386139333065303664303835323036318c014373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a68323232633565356466636531326539328d016073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a68613662616263396135373562666662668e015173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a68396538393663383766313161663966638f014a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a686161323163336361383964343539356390016b3c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e67206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a68383762316535643134643833353861369101573c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e6720617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68373962343532323633623762333434309201563c73705f72756e74696d653a3a44697370617463684572726f722061732073705f72756e74696d653a3a7472616974733a3a5072696e7461626c653e3a3a7072696e743a3a68653532633735643832376263393837379301473c73705f72756e74696d653a3a44697370617463684572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683432313763363131306163363733313694015373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6863313236323538333436393737316233950137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830656266303934386562353161656662960137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830323864626364336261323465376165970137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830346165646465316238656461656263980137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830366133316534643838346265663937990137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68306465323236643037383231376261659a0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68313063316434636466306162353034619b0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68313662656237383266336137616234359c0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68313663326163383733306431306163369d0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68313663653363616631623862326338309e0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68313738396537646266633964656364639f0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832343231303632316130363633613431a00137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832626236363631366531653331646535a10137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833333164323936613962353331396563a20137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833333361353236306363336133653431a30137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833386533343739656634333431376533a40137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833653333353535383965393733623366a50137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833663165663462316532393738643463a60137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834323334386532333735386132383464a70137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6835343137393662316566653439353563a80137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6836303065633731313864646564326161a90137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6836613366336437653962363163336139aa0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6837623362353933356564666635383661ab0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838346162383335386563333632626336ac0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838623162653838663535653931393433ad0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838663231386161646630656236373166ae0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839623230386430323934316635396236af0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839653933623431643436313532653334b00137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6862303866636166383838376464366631b10137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6863323036643834636438373161313330b20137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6863363432666365613430306632306639b30137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6863396339336238353137383466633263b40137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864626635386530323162353737343735b50137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864663937313135633231653236396233b60137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865353161616562636535656435633565b70137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6866303438623961346238326237373730b8015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839613863363232393032313264393064b9013b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6830306561316432343034306133643162ba01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838326239383031383336303662326137bb01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830333037303132623534363464613363bc014b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6863356536386137343264353734663234bd01723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6838373437626530383763326131616336be01613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6865313163353764643239336165356663bf01706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6833646134613838393766663064643263c001706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6838663461646337313934333639613966c1015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834363833636532653735653861323139c2015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836396462666264633533383163303834c3015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838656239386662656262336237313063c4015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863303635313435636430353265316237c5015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864343237313535616237363232323466c6015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865303539653965343561333634303634c7015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866656332313335656630373333386231c801746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6864666262356366663062653536636663c901386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835323363313333323765303438326266ca015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832333662383662323763363339323330cb015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864333534313630333032316663376433cc013570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a6832393366393663646338616233313366cd01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836323630366538656161663937626434ce014370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a6831316338326363633735366330333032cf01543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861643530643064653130303131663431d001860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a6836663235373639653330666264376361d101303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837343463396664633263333139396335d2018b013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61704974657261746f723c4b2c562c4861736865723e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835613263666334326538626534353165d3014270616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f663a3a6838353036356239653438636231353732d401533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6834656136343735313539303434623265d50148616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6833366165383765323137636162333536d601633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a666f6c643a3a6836386133653736323666303732306131d701386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864343765656537313161623363306134d8013173705f70687261676d656e3a3a6275696c645f737570706f72745f6d61703a3a6834303731633439383437383934643037d901513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6862313830303239316633366339643337da01706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6863373464656161333362323066343862db01723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6861303533613666646362636437316637dc012d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6838316566343264643165656634626237dd01706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6864336136306435333062353538646639de01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837346533313037313266323235383037df01706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6862363661636232386331343538373638e001416672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6576656e745f696e64657865643a3a6831623763393439636230613135666264e101386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836333338363337363464356338616463e201386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838613262346631303237346362646231e3013770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a6863616164396463616561326336306332e401386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864633430623162363962646439636237e501386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830636262636437363861393638306565e6014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6864396433363235356565353731636632e7015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833376533646636656631316233363531e801386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865633165366363623935343639343731e9013570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a6830303132353063623334393936663731ea01446672616d655f737570706f72743a3a7472616974733a3a43757272656e63793a3a7265736f6c76655f6372656174696e673a3a6839626266613262366431303362343436eb01456672616d655f737570706f72743a3a7472616974733a3a4f6e556e62616c616e6365643a3a6f6e5f756e62616c616e6365643a3a6863613939313838386631356433383831ec014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6833333738316434643864666436656234ed016f3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6834393865383166633130613134653763ee013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6832363132323231393639373462373631ef013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a656e737572655f6e65775f6572613a3a6830363535633030383037383564383039f001386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834623762623735643362636133653030f1013e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866623230626262373533363362393533f201723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862396436373939613536386130396334f301753c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261456c656374696f6e5374617475733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862666164653262383364383065643234f4016d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832306135316261636461633439373964f5013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834306363633634636639663264353439f601723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832383938303336373164343965363932f701743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834636163303865623366323366376130f801763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838303234326639353265353966306430f901763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832373364643466356232333461633036fa01713c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374496e76756c6e657261626c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834383238626465343434643963386536fb01793c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744d696e696d756d56616c696461746f72436f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838393031373062333438306562363634fc01703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832633761363061613730323930393431fd014770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6863303036396166623837663465643964fe019b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866386365323530313835643336366136ff019a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686430363465366535396131666639653180026c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683661333863376663326237613064633981028e0170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c573e3e3a3a656e636f64655f746f3a3a683533303135303263616637316232373482028b0170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c573e3e3a3a6465636f64653a3a683139663031303035363032313939363383022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a686534663835313733336437616337393984025b70616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c41636375726163793e3a3a66726f6d5f61737369676e6d656e743a3a68333032663139373933663437643236668502437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68636532646130613864366534613561328602ba013c70616c6c65745f7374616b696e673a3a53746173684f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3e3a3a636f6e766572743a3a68363063343330623233356162303131668702f4013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a54726169743e3a3a56616c696461746f7249642c203c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a54726169743e3a3a46756c6c4964656e74696669636174696f6e293e3e3a3a6f6e5f6f6666656e63653a3a68306361313930623832303762366565328802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68616361303163663938303839306638318902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68613030623436633335663836396138338a024a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a68396534353037353364356138363764328b024970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a68333931363230356161316237356234308c023570616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a64697361626c653a3a68633862643266363665303163343162358d025e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a68653061633232363038313230363733658e02443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68373332383233396561356330336530308f02d3023c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a54726169743e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a68303130306136653633333963356433399002386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683436646136656337363839323561623491026a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a68653733373063386438393865323662669202493c70616c6c65745f7374616b696e673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68323332316635313138326632383437309302623c70616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c573e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a683165363633373562633563343064313694025a3c70616c6c65745f7374616b696e673a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683432313735363364633661303461653295025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68643331336138303734346235613461669602336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e635f7265663a3a686130303164613161613336386361366397025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68363034626331623838346165653839399802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683937383334303861656239333735366699028d013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7365745f6c6f636b3a3a68386539383332376637323535393236369a023870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a68323333393139343937306562613430339b0290013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a72656d6f76655f6c6f636b3a3a68363961643363353963643762383465379c02437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68306466376134383931643832313030659d02746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a68356230373362656432643965646163649e025273705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c3a3a66726f6d5f726174696f6e616c5f617070726f78696d6174696f6e3a3a68373466396162323963616135663864389f023970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a6838393134303834366562636466316661a0024870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636865636b5f616e645f7265706c6163655f736f6c7574696f6e3a3a6862633632386362623665313235396437a102336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465635f7265663a3a6862653566623830666433656563346362a202b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6830613365386630326430373963633961a3025b70616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c41636375726163793e3a3a696e746f5f61737369676e6d656e743a3a6832633837316139373664333966626261a402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831303330643066333562623236623965a502633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a666f6c643a3a6831383937373036323634316465666333a602613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836383338636633653235316565353364a7025f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6836623635316564353564306138663366a8023a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6832313737373264343165626362333138a9023b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6833383163666139626161343636636633aa023a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6863336561646439653661643733643939ab026b3c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6831636137396631333866383436353632ac023d70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e655f6175783a3a6830616539396237623730316133373062ad02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835633933616362336564343535386339ae02706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6839353233663435373937333366353239af024873705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3a3a696e746f5f6163636f756e743a3a6838663264656433613038356665646366b002633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6837366338653630653661353637656362b102473c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830386439333236346161336261633561b20247636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207533323e3a3a666d743a3a6830363038633233636664376438363635b3023e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a6836333262383438636565646538616130b4022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6864623061353930353239353338636562b502583c70616c6c65745f696d5f6f6e6c696e653a3a4f6666636861696e4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861353839626230393239316431363836b602303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831366531613666633830663231663161b702443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835653461373432356165306430643935b802383c285431302c205431312920617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834616266313431303864333838623738b902303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836376630333365363637316261613236ba023c70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864393465373664343030643338633233bb023e70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836386163343933303665666639313563bc024770616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6830333237373033343137313633356264bd029d013c70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e5665737465645472616e7366657244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861323636306361373430326265616535be02726672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65733e3a3a696e697469616c697a655f626c6f636b3a3a6863643463666166376535353431346365bf02746672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65733e3a3a657874726163745f7072655f6469676573743a3a6833333765663764386636303130663635c0027a3c6672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a53746f726167654974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6834623438383235366462373035646664c1024b6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a72656769737465725f65787472615f7765696768745f756e636865636b65643a3a6835653737393733616231633161353561c202366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e697469616c697a653a3a6864613031323530616631313861366264c302763c285475706c65456c656d656e74302c205475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6834366136643866386634653361663664c402437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6837623966633166393539646134653835c5027a6672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65733e3a3a6170706c795f65787472696e7369635f776974685f6c656e3a3a6864316265623562356236616436623135c6029f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a6865613461663166653232626138326232c7025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832663965613735386464333938653866c802437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830643062366662623139376334383939c902683c77657374656e645f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6861396639393066333166633764643834ca024473705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3a3a7072655f64697370617463683a3a6861623030383763383361343632653335cb02406672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6833343336363434376463393039376432cc027d3c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4368617267655472616e73616374696f6e5061796d656e743c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a6838363463356664323865393665313137cd0283013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a4c696d697450617261746872656164436f6d6d6974733c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a6837323261396236303866393538333263ce0287013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a56616c6964617465446f75626c65566f74655265706f7274733c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a6862623064663361663631326263643333cf02583c77657374656e645f72756e74696d653a3a43616c6c2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6838666138646561643934626565386332d0023e70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864333161373836333434396133303730d1023f70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a6e6f74655f617574686f72736869703a3a6837633932623065653739323664613663d2024070616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6861343434663866616263636131316634d3023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6830386332653738326433666263646537d4023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6863636238336434663762386364653161d502437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6839626466333166383536626164373164d6022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6861653134343765363062363238366364d7024b3c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832336332343831363835316538353236d8023970616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a7570646174655f6c6f636b3a3a6839633661653839323364646139626539d9025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863396663333838316434633432343931da025f3c70616c6c65745f76657374696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6862373863376234626130326535616461db02613c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831366234633334383031333332626231dc023e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6838316634653564306332306135613264dd027477657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722077657374656e645f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a6863323263616264306266663465343537de023f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6833393733623236666363646331626466df02303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6863663361333164356334363164663335e0026f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6863306634346334343836663062306662e102a601706f6c6b61646f745f7072696d6974697665733a3a70617261636861696e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a70617261636861696e3a3a416272696467656443616e646964617465526563656970743e3a3a656e636f64655f746f3a3a6835356334383535666438393831653163e2027c70616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a656e636f64655f746f3a3a6830633764363063626239613466323632e302820170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4a756467656d656e743c42616c616e63653e3e3a3a656e636f64655f746f3a3a6834623163336531623136343735316437e40280017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c205230293e3a3a656e636f64655f746f3a3a6832346536616661646135336463363062e5027877657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722077657374656e645f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a6865633439393436613965326366353034e6024377657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f73797374656d3a3a6832346435333666366461626236393765e7024477657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f696e64696365733a3a6866633661353633616565366633633163e8024577657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f62616c616e6365733a3a6862613266663464313662636133306162e9024477657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f7374616b696e673a3a6865663235343139393034336237643632ea024577657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6f6666656e6365733a3a6832373630396165336130376336656566eb024477657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f73657373696f6e3a3a6835316263613032383363376262366239ec024477657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6772616e6470613a3a6866323865613437343165313139343763ed024677657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f696d5f6f6e6c696e653a3a6839663632353335613265353763333965ee024677657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f7265676973747261723a3a6861646565313332366263663535633066ef024477657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f7574696c6974793a3a6830303930363738613734656561613137f0024577657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6964656e746974793a3a6835653262356539656138366439626337f1024577657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f7265636f766572793a3a6865383166613666626239623061376438f2024477657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f76657374696e673a3a6837333163653763323138623361623564f3024677657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f7363686564756c65723a3a6837363662666335326661363563663061f4024177657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f7375646f3a3a6839633637393530383165366262336537f502763c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6862346132303338303264373132333332f602483c5b543b20385d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864353563616664363062633430326563f702386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865663632383331666261343036396334f802437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6836633163333262386138626638343838f9025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839663966373864363864396633666565fa02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863333337373430666433393630623433fb025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839363532613637656266613538623236fc02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838653163616234366630346464346137fd02b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6837333634333666396561646561363235fe029a013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a726570617472696174655f72657365727665643a3a6835303166306264353435643562646464ff02b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6861623766393830623235353766666639800385013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7472616e736665723a3a68373733613264663466313732333662668103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68353463376132386339303938376233308203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68613231343762633834306437623934388303437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68383133333565346536306663303139638403366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a626c6f636b5f686173683a3a683438316662646431653531353538666485033770616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a617574686f723a3a683766656462353664643538663166393186035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68613530343866373037373566633330618703386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683537326337326435633065653236366488035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683263316262303437373632373165613289036f3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68633437663333373962646235383435328a03a9013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a4d6f64756c653c543e20617320706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a5265676973747261723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a72656769737465725f706172613a3a68626334646437613537656663616563318b03ab013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a4d6f64756c653c543e20617320706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a5265676973747261723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a646572656769737465725f706172613a3a68393233373964346332643734633466348c035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68336162353738373235623434356239668d035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68383034363963653237356439336463618e03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68333361646264396262666638623762348f03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683530376333323962316161366330623390034a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a68616438303435353636616431346165669103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686464356539383932336635326661346692035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683732613563393362643335613263343393035a3c70616c6c65745f7574696c6974793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683964323632313336633738653139383494035b3c70616c6c65745f6964656e746974793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a686465633235643263656664336461316495035b3c70616c6c65745f7265636f766572793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68313664376163353764326230393465329603463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a686235313832343065303735343136356397033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683133353763646134656134386162346598034a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a683830373135613532616337396233316499037177657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722077657374656e645f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a68313535643236333238303832333366349a03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68373062323731633463656365646430369b03723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68366330316364386532326265373434639c03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68626635636437343038323133303739669d037d7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c205230293e3a3a6465636f64653a3a68386533346461656232333533316666639e032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68646230613539303532393533386365629f03573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863653164666161613635383031663332a0037470616c6c65745f7265636f766572793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7265636f766572793a3a43616c6c3c543e3e3a3a6465636f64653a3a6839373732326330333436613331623634a1036c70616c6c65745f7375646f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7375646f3a3a43616c6c3c543e3e3a3a6465636f64653a3a6831393365616535646134336231616563a2032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6864633736316466333637353061383365a3036b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830333763626638343266363865313530a4036b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866333066376131326331366538613331a503303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836323333386363366161636331313162a603723c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6839383030656631656236386433326130a703763c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a6174746573746174696f6e733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832646534653030616234303332616133a80390013c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a52616e646f6d6e6573733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a486173683e3e3a3a72616e646f6d3a3a6837663830396237633632663038356336a9034570616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863306465323763633639363361643032aa034770616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832396536373561316661656430643531ab035070616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6832333362353563326532376639653736ac039f013c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a57696e646f7753697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866323365663438333961643661336239ad035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861386534636262323531643562633462ae0353706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a6174746573746174696f6e733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6832623161363264346239326463643566af0355706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a6174746573746174696f6e733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839333737616233633638626537386130b0035170616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832323062623265313965303364616438b103683c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866396239653535633464646632623034b203703c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6833656664313965663539633034393536b3034c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a4d6f64756c653c543e3a3a7365745f68656164733a3a6861386530613062346134336265386265b40396013c70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a4b65794f776e657250726f6f6653797374656d3c2873705f636f72653a3a63727970746f3a3a4b65795479706549642c2044293e3e3a3a636865636b5f70726f6f663a3a6832653235396162666266613963626335b503443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837346661336532656565623661383130b6035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837313739326233386233306262323262b703386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838303435373830376663643664626639b803543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836643161643639623136373765376638b903706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6861303564303466386161633161343737ba03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6861633766366633643137333062363235bb035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834396163373630336132633863396561bc03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6866373433323432663234666461626131bd03513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6833663937646633666166623266626231be033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6832643539323066303437623832373765bf03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6831343164613565373239663538376330c0034670616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a7265706f72745f6f725f73746f72655f6f6666656e63653a3a6866666666353335636530396562306135c1035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836636637623266393962396233663564c20358706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a4d6f64756c653c543e3a3a63616c63756c6174655f647574795f726f737465723a3a6838633863616661666431316533653937c30351706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a4d6f64756c653c543e3a3a70617261636861696e5f686561643a3a6866373330386437333561623063383662c403443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832353339356239383562393539393232c503b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6833316637636639333137303431646531c603543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833653462646165353333303061353962c703673c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a6864353234353863663730303736363534c803483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6865643563323235333931663131626530c903386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864386164303463643931336565613233ca035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832303637616432333063353465383035cb03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864633332343762333263396233643564cc03743c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861343337656232666530663466633466cd03443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835663361393566313430653332373339ce035c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a446f75626c65566f74655265706f72743c50726f6f663e3a3a7665726966795f766f74653a3a6861376562626331643836346534376335cf03743c70616c6c65745f62616c616e6365733a3a696d62616c616e6365733a3a4e65676174697665496d62616c616e63653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a54727944726f703e3a3a7472795f64726f703a3a6834383137313033376235656238386432d0033970616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834656230353466396636383836333564d1033b70616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862613332386138623232346231656666d2035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862643066656461386639626461653561d3039c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861326463663262633531323432316437d4035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838333035633737643263333033616161d503553c73705f72756e74696d653a3a4d756c74695369676e61747572652061732073705f72756e74696d653a3a7472616974733a3a5665726966793e3a3a7665726966793a3a6839363539393963306538306538636638d603437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6834623535653535616163343638333533d70351706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836363739333134333232623130333332d80353706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838633233386639323365303030356534d9038f013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a5f5f4765744279746553747275637452656c61794469737061746368517565756553697a653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834323531343861623431656538356662da037d3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a5f5f47657442797465537472756374436f64653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832303138313937666634643530633961db03463c70616c6c65745f7375646f3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832316164313664663231656366373635dc03473c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830396565323463616234396531356234dd03473c6672616d655f73797374656d3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865633738353835643832376633376332de03443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837356233613430306536636366656339df035e3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261636861696e733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836366233326438393032353862393565e0035d3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838633762623133346463636265666535e103493c70616c6c65745f7574696c6974793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6862343633353532376530613737353732e2034a3c70616c6c65745f6964656e746974793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835363863663332663362336664636365e3034a3c70616c6c65745f7265636f766572793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6866336333643130653334383937326230e403463c70616c6c65745f626162653a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832376237653633303766306562373461e5035c3c70616c6c65745f7375646f3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6834376666373434353035626533613933e603733c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837636261346264646233356538633333e703723c285475706c65456c656d656e74302c205475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6866653166663835333730643764623566e803723c285475706c65456c656d656e74302c205475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6838643438393732346230623835373031e903763c285475706c65456c656d656e74302c205475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6836643730313435656138363465343039ea033870616c6c65745f626162653a3a4d6f64756c653c543e3a3a646f5f696e697469616c697a653a3a6863313639333265316539646334383938eb033e70616c6c65745f626162653a3a4d6f64756c653c543e3a3a63757272656e745f65706f63685f73746172743a3a6830373732396230316338653565366130ec03443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833666566643462626637303732633330ed03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835653966396662663031646530326135ee0397013c285475706c65456c656d656e74302c205475706c65456c656d656e74312c205475706c65456c656d656e74322c205475706c65456c656d656e74332c205475706c65456c656d656e7434292061732070616c6c65745f73657373696f6e3a3a53657373696f6e48616e646c65723c4149643e3e3a3a6f6e5f6e65775f73657373696f6e3a3a6836353964363235663337363135363964ef03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866343932383231643365316335353735f0032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6863376165663463396437633432616163f1033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6838373461333364643537303635343134f2038b013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61704974657261746f723c4b2c562c4861736865723e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6833356439313663346137373334666435f3033c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837323766346532336264313239626138f4033e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836643339383630666435366266343239f503703c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637443757272656e74496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866323632303134386538396238356430f603437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6831363262383630633164306337326235f7033970616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a6866643836333638366363376430386335f803376672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a6866363862646634616133346563646661f903a30173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5261775072654469676573743c5652464f75747075742c56524650726f6f663e3e3a3a6465636f64653a3a6830333933303135333438333235373930fa0350706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6830386666623339346561333630346461fb0352706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839373462373833353934393965396635fc037f3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a5f5f47657442797465537472756374446562746f72733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834303336323939353964653239363063fd0382013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7265676973747261723a3a5f5f476574427974655374727563744e6578744672656549643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830646663313362636630633061646461fe035f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866306164623565353834626362336665ff036f3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a686364393761623362373131396133653980044b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a68343431643131663731366137326133358104aa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a68323331373265323032653537383961668204533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a68363038633231326632616265363439638304960173705f7374616b696e673a3a6f6666656e63653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7374616b696e673a3a6f6666656e63653a3a4f6666656e636544657461696c733c5265706f727465722c4f6666656e6465723e3e3a3a6465636f64653a3a68613437393866343064653439303061368404543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68646633663261343163386261613465348504443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a683863636339343062306362326461653786043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68383461313935306432313861643133648704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683365363864386237313862336139653988045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68656138666363333238666335663862308904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68356439626539336639613564646565398a045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68346162373032646233626536646632328b04693c636f72653a3a697465723a3a61646170746572733a3a46696c7465724d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68316537386336383537656139643765318c0481016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a617070656e645f6f725f696e736572743a3a68313662663335633833616138626338648d048d0170616c6c65745f7363686564756c65723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7363686564756c65723a3a5363686564756c65643c43616c6c2c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a68653433633761653333393633396536338e043c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68383638326363643363393231316362308f043e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68393231663133383035633839353532339004703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68636634323434666662613066623262669104693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686561333837313265653039396463306192043d70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a686234303036343263393862656538643093043f70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68316633383262633566393734656531349404776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a683131626136396634666531663633653795043d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a68346230626131353835313565626135349604513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a68383030386234363334313736366663349704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68663433616639653630633134646565649804683c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a68303532623931626462366163383962329904633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68303237303534663136386436616238649a043e636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723a3a6e74683a3a68636166373230303961643530383139649b044070616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68656638623161623963346562366531659c04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68393965613964626233313864626662649d045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68353062383633386266393239623237309e04437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68663038333539633663383066643435329f0434636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6836663236633362653936356338383130a0042e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6838376264373861323363313663336637a1043c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6839376539366435393130356231373665a204363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6832653462386566633138613364666664a3044a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6837303430383466646230363130666231a404383c2a636f6e7374205420617320636f72653a3a666d743a3a506f696e7465723e3a3a666d743a3a6833323130373634663365323961666332a50439747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633a3a6465636f64653a3a6865363830636630653131393666356361a6045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838643466313333613261363564373933a7045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865313563316562623733306164316634a804706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6864333665663038336162643935306439a904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835396166326363663336343432656135aa04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862633264386630653765663965383663ab04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862336530636438653263363265663961ac045f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832613835633139653135326333316666ad04603c70616c6c65745f7265636f766572793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831643235333030336236393730363939ae047d7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c205230293e3a3a6465636f64653a3a6862363037633537366133313937353164af04463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6862343061306663613965623062383264b004543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835306461326334396234636335636137b104543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837323165353634373030363463613131b204543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838383937393538363832653038613330b304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863343866626435386461313934366139b404fa01616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4c6561663e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a456467653e3a3a696e736572743a3a6831643963333537383266356533646163b504fe01616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a496e7465726e616c3e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a456467653e3a3a696e736572743a3a6830353364366539336239383837616263b6045770616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4368617267655472616e73616374696f6e5061796d656e743c543e3a3a636f6d707574655f6665653a3a6866303163393331643264633538343163b704463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6862643231396366663430393464613462b8042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6836363336316239393639313432386636b9042e73705f70687261676d656e3a3a7265647563653a3a7265647563653a3a6861616365313962373439616434396339ba0448616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a456e7472793c4b2c563e3a3a6f725f696e736572743a3a6838343433373537626163643430666535bb043373705f70687261676d656e3a3a6e6f64653a3a4e6f64653c413e3a3a726f6f743a3a6835333134653065333036393035326365bc043b73705f70687261676d656e3a3a6e6f64653a3a4e6f64653c413e3a3a69735f706172656e745f6f663a3a6837383862373133313232633231633062bd043a6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836306137353232323565373536313839be043c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832393132643862623237633438393134bf04703c6672616d655f73797374656d3a3a5f5f47657442797465537472756374457865637574696f6e50686173653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865386566643232383530633436613638c004683c6672616d655f73797374656d3a3a5f5f476574427974655374727563744576656e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866346232323530323635313832383132c104703c6672616d655f73797374656d3a3a5f5f4765744279746553747275637445787472696e73696373526f6f743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866633536336237363561373862393638c204693c6672616d655f73797374656d3a3a5f5f476574427974655374727563744163636f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831303338316531376539373439363439c304446672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6e6f74655f66696e69736865645f65787472696e736963733a3a6864353664363839306333366264333562c404346672616d655f73797374656d3a3a4d6f64756c653c543e3a3a66696e616c697a653a3a6839356337303365386535333635343233c5043c6672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a646f5f76616c69646174653a3a6839626237313132646231333438326462c604436672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a636865636b5f626c6f636b5f6c656e6774683a3a6836663830333530626130343636663333c7043f70616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862353636633166313335386434333834c8044a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836303639353032623934626266303430c9045370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6839663866343432633235663333393765ca04aa013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866646530343262643633643235316663cb048a016672616d655f737570706f72743a3a776569676874733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f737570706f72743a3a776569676874733a3a4469737061746368496e666f3e3a3a656e636f64655f746f3a3a6831306364616566323763653735343065cc045d3c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6862326435663537313338323633386131cd04503c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c543e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a6765743a3a6838613035383333643833366661653239ce04366861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a6765743a3a6861623866333639343364643934376535cf04553c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c543e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a636f6e7461696e733a3a6830356231663661303965326333376463d0042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6830306331306537613566373265616235d104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863633262633663663830636432333566d2043b70616c6c65745f626162653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862306334336135396638323234653965d3046b3c70616c6c65745f626162653a3a5f5f4765744279746553747275637452616e646f6d6e6573733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830366261343130623232653865353937d4044470616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6838393236313637663639356438653362d5049a013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836383562353761346335663739373937d60496013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833343362383237656437623262616635d7045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839363265653638643836653666396432d8043c70616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6835656631313033396634366233306665d9043e70616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866666433366363636233393966306334da04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862323339613066636363656262336432db043d70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a7570646174655f6c6f636b733a3a6866323135316336323238386434656661dc043f70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6832303961663563336439373639663637dd044170616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6838613339336266633562383730643961de046e3c70616c6c65745f62616c616e6365733a3a5f5f476574427974655374727563744163636f756e743c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832316166346565313133633731626464df044a70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6831373634376137326664343566373038e004a3013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578697374656e7469616c4465706f73697444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865616135313935326363623131663239e104a201706f6c6b61646f745f7072696d6974697665733a3a70617261636861696e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a70617261636861696e3a3a43616e646964617465436f6d6d69746d656e74733e3a3a656e636f64655f746f3a3a6834613139353731633733653931336365e2044a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6836333734366230393430316636373732e304473c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830396565323463616234396531356234e4044670616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a656e737572655f736f727465645f616e645f696e736572743a3a6864383236356365626363643632353862e504706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6863393235333435303431386263613761e604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839303633626661383232643737356339e7045f3c70616c6c65745f7574696c6974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6836393962346366316666323234303265e804623c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6865336436363664656637653632396264e9043c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6838343234376161656662613766353934ea043e70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863346566393238373432643236646331eb043f70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6839323263626633633432633737626237ec044170616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865313266346335383331393639303634ed04623c70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861633033653861636538363961316532ee040c436f72655f76657273696f6eef0412436f72655f657865637574655f626c6f636bf00415436f72655f696e697469616c697a655f626c6f636bf104114d657461646174615f6d65746164617461f2041c426c6f636b4275696c6465725f6170706c795f65787472696e736963f3041b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bf40420426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373f504613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836303338663465646366326363336266f6041c426c6f636b4275696c6465725f636865636b5f696e686572656e7473f70418426c6f636b4275696c6465725f72616e646f6d5f73656564f8042b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6ef904214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572fa044f70616c6c65745f7374616b696e673a3a6f6666636861696e5f656c656374696f6e3a3a636f6d707574655f6f6666636861696e5f656c656374696f6e3a3a6834383334623634346166643238373665fb041850617261636861696e486f73745f76616c696461746f7273fc041950617261636861696e486f73745f647574795f726f73746572fd041f50617261636861696e486f73745f6163746976655f70617261636861696e73fe042850617261636861696e486f73745f676c6f62616c5f76616c69646174696f6e5f7363686564756c65ff042350617261636861696e486f73745f6c6f63616c5f76616c69646174696f6e5f6461746180051c50617261636861696e486f73745f70617261636861696e5f636f646581051750617261636861696e486f73745f6765745f686561647382051d50617261636861696e486f73745f7369676e696e675f636f6e7465787483051e4772616e6470614170695f6772616e6470615f617574686f726974696573840515426162654170695f636f6e66696775726174696f6e85051b426162654170695f63757272656e745f65706f63685f7374617274860521417574686f72697479446973636f766572794170695f617574686f72697469657387052153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b65797388051f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b65797389051d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e63658a05205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f8b055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68393835383237656637346337323137378c053d70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68653934616232383534663163656238308d053f70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68643633636233613865393830663564648e056b3c70616c6c65745f6964656e746974793a3a5f5f47657442797465537472756374537562734f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68316230653639333861336238653238378f052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68383165366232623438353063353134359005573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68616435393861323831653633643538379105766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a686330393131303234383639643737363592055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68346135366636343439346332373436399305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363638303138376461623132323336369405776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a686239663732623565326132653639396495055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68313763613266373339356137643932399605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68343833356166303561656432633263669705603c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a683264643764343333306362383263353298057a3c73705f61726974686d657469633a3a7065725f7468696e67733a3a5065725531362061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c5f617070726f78696d6174696f6e3a3a6862636531663964396162633362613864990538747269655f64623a3a6c6f6f6b75703a3a4c6f6f6b75703c4c2c513e3a3a6c6f6f6b5f75703a3a68343734383732396130333534363166659a052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68366537646636383631343332626234629b053e70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68306238396539363431393734303762649c054070616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68313563616332663836386539616632659d054970616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68383439306665633062363266306230379e059b013c70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653766393235383866303335336539619f052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6862623937363635666436376331643830a005066d656d736574a105066d656d637079a205076d656d6d6f7665a3050462636d70a405095f5f6173686c746933a505095f5f6c736872746933a605085f5f6d756c746933a705095f5f75646976746933a805095f5f756d6f64746933a9050c5f5f756469766d6f6474693400550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e34342e302d6e696768746c79202836646565356631313220323032302d30342d303629", - "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", - "0x0b76934f4cc08dee01012d059e1b83ee5e0621c4869aa60c02be9adcc98a0d1d": "0x10a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a72bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300174bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bd5e21ce53b32bef696d6f6e8072bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001": "0x9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950775c11433d27a3e6696d6f6e80a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f": "0x08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169034245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x00", - "0x3fba98689ebed1138735e0e7a5a790ab0b76934f4cc08dee01012d059e1b83ee": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb303adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x9fc415cce1d0b2eed702c9e05f476217d23b46a8723fd56f08cddad650be7c2da8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4fa8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4fa8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4fa8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x00", - "0x3a65787472696e7369635f696e646578": "0x00000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950cf58e078d2188b43617564698074bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e": "0xf268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d6dc0db87ce29bd36261626580a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f": "0x08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da99406b1b580f3fd70373207c005e38adff268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x000000000300407a10f35a000000000000000000000000000000000000000000000000000000407a10f35a0000000000000000000000407a10f35a00000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e696c69c865d348f61756469807ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a": "0xaebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da937af01a62f70176413143d943b7d30b9aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x000000000300407a10f35a000000000000000000000000000000000000000000000000000000407a10f35a0000000000000000000000407a10f35a00000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195093c237b163af4d50617564698072bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001": "0x9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195053c90cc3c184c72c6772616e80feca0be2c87141f6074b221c919c0161a1c468d9173c5c1be59b68fab9a0ff93": "0xaebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934", - "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00004de97f22e20d0000000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc60566b5cb12e1bb0dd3301e8ab40c6d0508264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x047374616b696e672000407a10f35a0000000000000000000002", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502c959753b2d73959696d6f6e8074bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e": "0xf268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195071eb6ac6f0e199fd7061726180a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f": "0x08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000005c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508f3986108b781adb6772616e809fc415cce1d0b2eed702c9e05f476217d23b46a8723fd56f08cddad650be7c2d": "0x08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d", - "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000": "0x0000e941cc6b01000000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dc878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503d7dc9205a149f6a6175646980306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9935ae9d4cb148940af99a366d100d5af02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ab7b30d24546522861756469804e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x20a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35010000000000000038757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f0100000000000000d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a0100000000000000764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe2101000000000000007c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd808130100000000000000bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b0100000000000000720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed783720100000000000000da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa83490100000000000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb319b9aeb2f5add22992ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f": "0xe1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2aee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950438ac98f6d864839696d6f6e80d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0x3a636f6465": "0x0061736d0100000001f9023560037f7f7f017f60027f7f017f60017f0060027f7f0060057f7f7f7f7f0060027f7f017e60047f7f7f7f0060037f7f7f0060017f017e60017e0060017e017e60027e7e0060037f7e7e0060017e017f60027f7e017f60037f7e7f017f6000017f60037f7f7e017e60000060017f017f60047f7e7e7e017f60027f7e017e6000017e60037e7e7f017e60047f7f7f7f017f60027e7f017f60057f7f7f7f7f017f60037e7e7f017f60047f7f7f7e0060047f7f7e7e0060047e7e7e7e017f60067f7f7f7f7f7f0060067f7f7f7e7e7f0060067f7f7e7f7f7f0060047f7f7f7f017e60057f7f7f7e7e0060087f7f7f7f7f7f7f7f0060077f7f7f7e7f7f7f0060067f7f7f7f7f7f017f600b7f7f7f7f7f7f7f7f7f7f7f0060077f7f7e7e7e7f7f0060077f7e7e7e7e7e7e0060037e7f7f017f60067f7f7e7e7f7f0060047f7e7f7f0060047e7f7e7f0060037e7e7f0060027f7e0060057f7e7e7f7f0060037f7e7e017f60047f7e7e7f0060057f7e7e7e7e0060067f7e7e7e7e7f0002bf0c2803656e76066d656d6f727902001303656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31000903656e761c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31000903656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31000903656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31000a03656e76206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f31000b03656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31000c03656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31000d03656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31000e03656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31000f03656e76286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31001003656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31000503656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31000e03656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000803656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31001103656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f32000f03656e76276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f31001203656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31000d03656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31000d03656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31000d03656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31000d03656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000203656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31001303656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31001003656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001403656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31001503656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31000c03656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31001603656e76226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f31001003656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31000a03656e761c6578745f73746f726167655f617070656e645f76657273696f6e5f31000b03656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31000a03656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31000903656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31000903656e761c6578745f73746f726167655f6578697374735f76657273696f6e5f31000d03656e76196578745f73746f726167655f6765745f76657273696f6e5f31000a03656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31000a03656e761a6578745f73746f726167655f726561645f76657273696f6e5f31001703656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31001603656e76196578745f73746f726167655f7365745f76657273696f6e5f31000b03ab08a90813030301020218030703031313020000131312121207030007040001010301030301190202081a1807000401010113130107070101070101001a01010001010000010001011b010301130707030303070307030303030103010301040302010302070701041c0403030107030303010103070307020107030303030207030303000701011d07030203030307070301030303030307030302120202030300070707070703030707030701020207040307040301070603070203070307021e07060101020107070707070707070707070707070706030403030201031302030303030303030101060601060602030707030201020303030307030703031a1f0303061207020202020202020202020101010312121212121212070702020303020303020707061302010303071d0307030703070c132001030203020207030307030202060607020706031803010707030302070302130207020203070604080303070603072102030306020306031803121202011f1f041f0703070607100703070703030303030303030303030203031803070722070303030702030203030303030303030307010702070707030307020507050702020303030303030703030303030303030303020303030303030303030303030303030303030303030303030303030307131303022307030302030403120707070703020307070203070702070303071d070307030303241e1d061d1f0103060203060303030303030303030303070703070702070307030812120706030703030702040202030302070303030703030307030703030307070303070703030303070307030307030703070303070703030307030307030707030307070303070707030302030303030303180701030303030101010103030303030303030505030312120210020505030505050303030303030305050525051003030106260503050205030307030303050703020505270105050505050302020303050205050305030705010506050505050305020507070503020505280202020302020302062912030400020202020207070103020202020307030703030303010204010401010303030202020202010701020301032a2b07020c072c01020302020303030310100202020c07030303020303010703020302030201030301020703030107070303011d030301030303020202020202030203020406010602040707032d0202020303030606070307000303060006032c0303030303030303030303030303030303030302030203030202032e010102020303020303030602020203032f030304030303020303030203020202030301030202030303030303020303030207022f03030204040202060702030707020203030203022f020302030302030303020202020307031d0603300301030702130703010303021301010301030703010101020202010103030331323333000000003233340407017001e601e6010619037f01418080c0000b7f0041e0d2c8000b7f0041e0d2c8000b07e40a28195f5f696e6469726563745f66756e6374696f6e5f7461626c6501000c436f72655f76657273696f6e00b90512436f72655f657865637574655f626c6f636b00ba0515436f72655f696e697469616c697a655f626c6f636b00c205114d657461646174615f6d6574616461746100c3051c426c6f636b4275696c6465725f6170706c795f65787472696e73696300c5051b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00c60520426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300c7051c426c6f636b4275696c6465725f636865636b5f696e686572656e747300cf0518426c6f636b4275696c6465725f72616e646f6d5f7365656400d0052b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00d105214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200d3051850617261636861696e486f73745f76616c696461746f727300da051e50617261636861696e486f73745f76616c696461746f725f67726f75707300dc052050617261636861696e486f73745f617661696c6162696c6974795f636f72657300de052250617261636861696e486f73745f66756c6c5f76616c69646174696f6e5f6461746100e5052750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f6461746100e9052650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f75747075747300ea052550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c6400ed051d50617261636861696e486f73745f76616c69646174696f6e5f636f646500ee052850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f646500ef052c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c69747900f0051e50617261636861696e486f73745f63616e6469646174655f6576656e747300f1051a50617261636861696e486f73745f73657373696f6e5f696e666f00f7051a50617261636861696e486f73745f646d715f636f6e74656e747300f9052c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e747300fa051e4772616e6470614170695f6772616e6470615f617574686f72697469657300fc05384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300ff05274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600810615426162654170695f636f6e66696775726174696f6e0083061b426162654170695f63757272656e745f65706f63685f737461727400840624426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600850635426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300860621417574686f72697479446973636f766572794170695f617574686f7269746965730088062153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b657973008a061f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b657973008d061d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365009006205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f0091060a5f5f646174615f656e6403010b5f5f686561705f62617365030209b703010041010be50148455d52b30853548101688a016aea01b5016d9802d401d701d901e701e80180029f0680088108ad059501b804ae05d3069c01d7059001b906ec058006f106b0056bbb06bc065e4b4142434c5f6162636465a701a9017d7f8001870185018601aa015b5ac603c201f2079f029d029c029a02b402b502b602ee07ed07aa02f507fb07cc07cb07cf07be019406930695069d089c08ab029e088b088a08ac028e089008920894088b078a078d07dc03db03ad02ee03a6049902ae02e004df04af02e304d607d507b002e607c206c106b102c306d706d606d4068608b2028308ad06ac06ab069708c2038208c101e807c607c507c2079f059c079b079a0788078707df06de06b302e006c403ef07c303d703d903ed03e204eb03ea03de03e703e803e503e403e203f007e103df03dd03f503f403f303f203f103f003ef03a805e104af05a005ae08d70796069706b608d8069d078c07dd04a807a9079e07a007a5079007a107a407a607a707c707ce07cd07d107d007d807ea07e907f407f307f107f807f707f6078708ca07d001eb07c9078d088c088f089308960895089a08990898089f08b408bb08bc08ba08c108c0080ae0d867a908b80402067f017e230041b0036b220124002001200041880210c9082201200141a8036a36028c022001200141a8036a3602880220014190026a200141086a22021028200141b0026a200141f8006a2203102802400240024020014190026a200141b0026a412010cc08450d00200141146a2802002204450d002001410c6a2802002100200441246c21040340024020002d00004101470d00024041a3b2c8002000460d00200041016a28000041c28289aa04470d010b200041086a28020021052001200041106a280200360294022001200536029002200141b0026a20014190026a102920012903b0024203510d0020014184016a2802002204450d0220012802c002210620012903b8022107200141fc006a2802002100200441246c21040340024020002d00004101470d00024041a3b2c8002000460d00200041016a28000041c28289aa04470d010b200041086a28020021052001200041106a280200360294022001200536029002200141b0026a20014190026a102920012903b0024203510d0020012903002007520d04200720012903b802520d04200620012802c002470d04200141b0026a200241f00010c9081a2001200141e8016a22003602a003200141b0026a2000102a450d05200141b0026a200341f00010c9081a200120003602a003200141b0026a2000102a21000c060b200041246a21002004415c6a22040d000c030b0b200041246a21002004415c6a22040d000b0b2001410c6a102b0b200141fc006a102b410021000b200141b0036a240020000bde0601057f230041206b2202240020024100360208200242013703000240412010322203450d002002422037021420022003360210200241106a41004120102f20022802102204200228021822056a22032001290010370000200341086a200141186a290000370000200341106a200141206a290000370000200341186a200141286a2900003700002002200541206a2203360218200220022802082003102f2002280200200228020822056a2004200310c9081a2002200520036a220536020802402002280214450d002004102c0b02400240024002402001280200220341c000490d00200341808001490d012003418080808004490d02200220054101102f200228020020022802086a41033a00002002200228020841016a2204360208200220044104102f200228020020022802086a2003360000200228020841046a21040c030b200220054101102f2002280200200228020822046a20034102743a0000200441016a21040c020b200220054102102f2002280200200228020822046a20034102744101723b0000200441026a21040c010b200220054104102f200228020020022802086a2003410274410272360000200228020841046a21040b20022004360208412010322203450d002002422037021420022003360210200241106a41004120102f20022802102205200228021822066a22032001290030370000200341086a200141386a290000370000200341106a200141c0006a290000370000200341186a200141c8006a2900003700002002200641206a2203360218200220042003102f2002280200200228020822046a2005200310c9081a2002200420036a36020802402002280214450d002005102c0b412010322203450d002002422037021420022003360210200241106a41004120102f20022802102204200228021822056a22032001290050370000200341086a200141d8006a290000370000200341106a200141e0006a290000370000200341186a200141e8006a2900003700002002200541206a2203360218200220022802082003102f2002280200200228020822056a2004200310c9081a2002200520036a36020802402002280214450d002004102c0b2002200141046a10aa05200020022802002002280208109a0102402002280204450d002002280200102c0b200241206a24000f0b1039000bc81303067f017e067f230041d0036b2202240002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005417f6a0e03010203040b200042033703000c040b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a220936020420012004410d6a36020041002105200241003a0028200341726a21030240034020092005460d01200241086a20056a200420056a2206410d6a2d00003a00002001200336020420012006410e6a3602002002200541016a22063a00282003417f6a21032006210520064120470d000b20024190036a41086a2204200241086a41086a29030037030020024190036a41106a2203200241086a41106a29030037030020024190036a41186a2209200241086a41186a2903003703002002200229030837039003410121050240200641ff01714120490d00200241f0026a41186a2009290300370300200241f0026a41106a2003290300370300200241f0026a41086a200429030037030020022002290390033703f002410021050b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b00220050d01200241f0016a41086a2205200241b0026a41086a290300370300200241f0016a41106a2204200241b0026a41106a290300370300200241f0016a41186a2203200241b0026a41186a290300370300200220022903b0023703f001200241086a200110980720022d00084101460d01200241a8016a2201200241c1006a290000370300200241a0016a2206200241396a29000037030020024198016a2209200241316a29000037030020024190016a220a200241296a290000370300200241f0006a41186a220b200241216a290000370300200241f0006a41106a220c200241196a290000370300200241f0006a41086a220d200241116a290000370300200241d0016a41086a220e2005290300370300200241d0016a41106a22052004290300370300200241d0016a41186a2204200329030037030020022002290009370370200220022903f0013703d001200241b0016a41186a22032004290300370300200241b0016a41106a22042005290300370300200241b0016a41086a2205200e290300370300200220022903d0013703b001200041106a20073602002000200837030820004200370300200020022903b0013702142000411c6a2005290300370200200041246a20042903003702002000412c6a2003290300370200200020022903703702342000413c6a200d290300370200200041c4006a200c290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a2009290300370200200041e4006a2006290300370200200041ec006a20012903003702000c050b0240200541ff0171450d00200241003a00280b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b0020b200042033703000c030b024020064104490d002004280001210620012003417b6a22053602042001200441056a36020020054108490d0020004201370300200429000521082001200341736a36020420012004410d6a360200200041106a200636020020002008370308200041146a200241086a41e40010c9081a0c030b200042033703000c020b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a220936020420012004410d6a36020041002105200241003a0028200341726a21030240034020092005460d01200241086a20056a200420056a2206410d6a2d00003a00002001200336020420012006410e6a3602002002200541016a22063a00282003417f6a21032006210520064120470d000b20024190036a41086a2204200241086a41086a29030037030020024190036a41106a2203200241086a41106a29030037030020024190036a41186a2209200241086a41186a2903003703002002200229030837039003410121050240200641ff01714120490d00200241f0026a41186a2009290300370300200241f0026a41106a2003290300370300200241f0026a41086a200429030037030020022002290390033703f002410021050b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b00220050d01200241f0016a41086a2205200241b0026a41086a290300370300200241f0016a41106a2204200241b0026a41106a290300370300200241f0016a41186a2203200241b0026a41186a290300370300200220022903b0023703f001200241086a200110980720022d00084101460d01200241a8016a2201200241c1006a290000370300200241a0016a2206200241396a29000037030020024198016a2209200241316a29000037030020024190016a220a200241296a290000370300200241f0006a41186a220b200241216a290000370300200241f0006a41106a220c200241196a290000370300200241f0006a41086a220d200241116a290000370300200241d0016a41086a220e2005290300370300200241d0016a41106a22052004290300370300200241d0016a41186a2204200329030037030020022002290009370370200220022903f0013703d001200241b0016a41186a22032004290300370300200241b0016a41106a22042005290300370300200241b0016a41086a2205200e290300370300200220022903d0013703b001200041106a20073602002000200837030820004202370300200020022903b0013702142000411c6a2005290300370200200041246a20042903003702002000412c6a2003290300370200200020022903703702342000413c6a200d290300370200200041c4006a200c290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a2009290300370200200041e4006a2006290300370200200041ec006a20012903003702000c030b0240200541ff0171450d00200241003a00280b200241b0026a41086a200241f0026a41086a290300370300200241b0026a41106a200241f0026a41106a290300370300200241b0026a41186a200241f0026a41186a290300370300200220022903f0023703b0020b200042033703000c010b200042033703000b200241d0036a24000bd70c04047f037e0d7f057e230041a0036b220224000240024002402000410c6a220328020022040d00200241d8016a411f6a200241e0026a411f6a280000360000200241d8016a41186a200241e0026a41186a290300370300200241d8016a41106a200241e0026a41106a290300370300200241d8016a41086a200241e0026a41086a290300370300200220022903e0023703d8010c010b20032004417f6a2204360200200241e0026a411f6a22052000280204200441246c6a220341206a280000360000200241e0026a41186a2204200341196a290000370300200241e0026a41086a200341096a2900002206370300200241e0026a41106a200341116a29000022073703002002200329000122083703e00220032d00002109200241d8016a411f6a22032005280000360000200241d8016a41186a22052004290300370300200241d8016a41106a22042007370300200241d8016a41086a220a2006370300200220083703d80120094106460d00200241b0016a411f6a220b2003280000360000200241b0016a41186a22032005290300370300200241b0016a41106a20042903002206370300200241b0016a41086a200a290300220737030020024188016a41096a200737000020024188016a41116a200637000020024188016a41196a200329030037000020024188016a41206a200b280000360000200220022903d80122063703b0012002200637008901200220093a0088010240024002400240024002400240024002400240024020094103470d0020024188016a41017228000041c28289aa04470d0820024198016a280200210520024190016a280200210a41002103200241003a0098020240034020052003460d01200241d8016a20036a200a20036a2d00003a00002002200341016a22043a00980220042103200441c000470d000b200241e0026a41386a2203200241d8016a41386a2205290300370300200241e0026a41306a220a200241d8016a41306a220b290300370300200241e0026a41286a220c200241d8016a41286a220d290300370300200241e0026a41206a220e200241d8016a41206a220f290300370300200241e0026a41186a2210200241d8016a41186a2211290300370300200241e0026a41106a2212200241d8016a41106a2213290300370300200241e0026a41086a2214200241d8016a41086a2215290300370300200220022903d8013703e002200441ff017141c000490d01200241a0026a41386a20032903002206370300200241a0026a41306a200a2903002207370300200241a0026a41286a200c2903002208370300200241a0026a41206a200e2903002216370300200241a0026a41186a20102903002217370300200241c8006a41086a22032014290300370300200241c8006a41106a22042012290300370300200241c8006a41186a220a2017370300200241c8006a41206a220c2016370300200241c8006a41286a220e2008370300200241c8006a41306a22102007370300200241c8006a41386a22122006370300200220022903e002370348200520122903002206370300200b20102903002207370300200d200e2903002208370300200f200c29030022163703002011200a290300221737030020132004290300221837030020152003290300221937030020022002290348221a3703d801200241086a41386a2006370300200241086a41306a2007370300200241086a41286a2008370300200241086a41206a2016370300200241086a41186a2017370300200241086a41106a2018370300200241086a41086a20193703002002201a37030820090e050602030406050b200341ff0171450d00200241003a0098020b20090e050a0506070a080b20024194016a280200450d0320024190016a280200102c0c030b20024194016a280200450d0220024190016a280200102c0c020b20024194016a280200450d0120024190016a280200102c0c010b20024190016a280200450d00200228028c01102c0b200241d8016a20001028200241086a200241d8016a41202001102d0d040c050b20024194016a280200450d0420024190016a280200102c0c040b20024194016a280200450d0320024190016a280200102c0c030b20024194016a280200450d0220024190016a280200102c0c020b20024190016a280200450d01200228028c01102c0c010b200041046a102b410121030c010b200041046a102b410021030b200241a0036a240020030bcb0101027f024020002802082201450d0020002802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a280200102c0c030b2002410c6a280200450d02200241086a280200102c0c020b2002410c6a280200450d01200241086a280200102c0c010b200241086a280200450d00200241046a280200102c0b200241246a21022001415c6a22010d000b0b024020002802042202450d0020002802002201450d00200241246c450d002001102c0b0b0600200010340b150020002002ad4220862001ad842003100e4101460bc50302027f017e20004201370200200041086a22024100360200024002400240024020012802000e03000102030b200041004101102f2000280200200228020022036a41013a00002002200341016a3602002000200141046a1030200020022802004120102f2000280200200228020022036a2200200141106a2900003700002002200341206a360200200041086a200141186a290000370000200041106a200141206a290000370000200041186a200141286a2900003700000f0b200041004101102f2000280200200228020022036a41023a00002002200341016a220336020020012802042101200020034104102f2000280200200228020022006a20013600002002200041046a3602000f0b200041004101102f2000280200200228020022036a41033a00002002200341016a2203360200200020034101102f2000280200200228020022036a41013a00002002200341016a2203360200200141086a2903002104200020034108102f2000280200200228020022036a20043700002002200341086a2203360200200141106a2903002104200020034108102f2000280200200228020022036a20043700002002200341086a3602002000200141186a2d000010310b0b9a0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b22014108200141084b1b210102402003450d0020014100480d0120002802002202450d0220022003200110352202450d030c040b200141004e0d010b103b000b2001103222020d010b1039000b20002002360200200041046a20013602000b0bd30102037f017e20012802002102200020012802082201108f0102402001450d002002200141286c6a2103200041086a220128020021040340200020044120102f200028020020012802006a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002001200128020041206a2204360200200241206a2903002105200020044108102f200028020020012802006a20053700002001200128020041086a22043602002003200241286a2202470d000b0b0ba301000240024002400240200141ff01710e03000102030b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41013a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41023a00002001200128020041016a3602000b0b0600200010330b0700200010b2080b0700200010b1080b0a0020002001200210360b2a01017f0240200210b2082203450d002003200020022001200120024b1b10c9081a200010b1080b20030b0600200010380b1d01017f0240200010b2082201450d0020014100200010cb081a0b20010b0500103a000b1700410141bcb5c800410741c4b5c800412210820100000b110041e8c4c8004111418080c000103c000b4701017f230041206b22032400200341146a4100360200200341c4b5c800360210200342013702042003200136021c200320003602182003200341186a360200200320021046000be00201067f230041206b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b0240024002400240024002400240200141146a2802000d00200621070c010b2004450d02410021054101210402402006410f4b0d00200341046a280200450d020b200620066a22072006490d010b2007417f4c0d02024020070d0041002105410121040c010b20072105200710322204450d030b20004100360208200020043602002000200536020420022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41bc80c000200241086a103e0d03200241206a24000f0b4100410041ac80c000103f000b103b000b1039000b41d480c0004133200241086a418881c000419881c0001040000b9006010a7f230041306b22032400200341246a2001360200200341033a00282003428080808080043703082003200036022020034100360218200341003602100240024002400240024020022802082204450d0020022802002105200228020422062002410c6a2802002207200720064b1b2208450d01200020052802002005280204200128020c1100000d03200541086a2100200241146a28020021092002280210210a2008210b034020032004411c6a2d00003a00282003200441046a290200422089370308200441186a28020021024100210741002101024002400240200441146a2802000e03010002010b024020022009490d002002200941d887c000103f000b2002410374210c41002101200a200c6a220c2802044101470d01200c28020028020021020b410121010b2003200236021420032001360210200441106a28020021020240024002402004410c6a2802000e03010002010b024020022009490d002002200941d887c000103f000b20024103742101200a20016a22012802044101470d01200128020028020021020b410121070b2003200236021c2003200736021802402004280200220220094f0d00200a20024103746a2202280200200341086a20022802041101000d05200b417f6a220b450d04200441206a2104200041046a210220002802002101200041086a2100200328022020012002280200200328022428020c110000450d010c050b0b2002200941e887c000103f000b2002280200210520022802042206200241146a2802002204200420064b1b2208450d0020022802102104200020052802002005280204200128020c1100000d02200541086a21002008210203402004280200200341086a200441046a2802001101000d032002417f6a2202450d02200441086a2104200041046a210120002802002107200041086a2100200328022020072001280200200328022428020c110000450d000c030b0b410021080b0240200620084d0d002003280220200520084103746a22042802002004280204200328022428020c1100000d010b410021040c010b410121040b200341306a240020040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341cc83c000360208200341023602242003200341206a360218200320033602282003200341046a360220200341086a20021046000b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c200541e0b3c800360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a20041046000be00101037f024002402000280200220041046a2802002203200041086a28020022046b2002490d00200028020021030c010b024002400240200420026a22052004490d00200341017422042005200420054b1b22044108200441084b1b210402402003450d0020044100480d0120002802002205450d02200520032004103521030c030b200441004e0d010b103b000b2004103221030b02402003450d0020002003360200200041046a2004360200200041086a28020021040c010b1039000b200320046a2001200210c9081a200041086a2200200028020020026a36020041000bf50401047f230041106b22022400200028020021000240024002400240024002400240024002400240024002402001418001490d002002410036020c2001418010490d0102402001418080044f0d0020022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c060b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c050b024020002802082203200041046a280200460d00200028020021040c040b200341016a22042003490d05200341017422052004200520044b1b22044108200441084b1b210502402003450d0020054100480d0620002802002204450d02200420032005103521040c030b20054100480d050c010b20022001413f71418001723a000d2002200141067641c001723a000c410221010c030b2005103221040b2004450d0520002004360200200041046a2005360200200028020821030b200420036a20013a00002000200028020841016a3602080c060b0240200041046a2802002204200041086a28020022036b2001490d00200028020021040c050b200320016a22052003490d00200441017422032005200320054b1b22034108200341084b1b210302402004450d0020034100480d0120002802002205450d02200520042003103521040c030b200341004e0d010b103b000b2003103221040b2004450d0020002004360200200041046a2003360200200041086a28020021030c010b1039000b200420036a2002410c6a200110c9081a200041086a2200200028020020016a3602000b200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41bc80c000200241086a103e2101200241206a240020010b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41023602002002420337020c200241bc82c000360208200241023602242002200241206a3602182002200241046a36022820022002360220200241086a41d482c0001046000b0b002000350200200110490b3401017f230041106b220224002002200136020c20022000360208200241dc83c000360204200241c4b5c8003602002002104a000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41023602002002420337020c2002419083c000360208200241023602242002200241206a3602182002200241046a36022820022002360220200241086a41a883c0001046000b0d0020002802001a037f0c000b0bd20203027f017e037f230041306b22022400412721030240024020004290ce005a0d00200021040c010b412721030340200241096a20036a2205417c6a20004290ce0080220442f0b17f7e20007ca7220641ffff037141e4006e2207410174419e84c0006a2f00003b00002005417e6a2007419c7f6c20066a41ffff0371410174419e84c0006a2f00003b00002003417c6a2103200042ffc1d72f5621052004210020050d000b0b02402004a7220541e3004c0d00200241096a2003417e6a22036a2004a7220641ffff037141e4006e2205419c7f6c20066a41ffff0371410174419e84c0006a2f00003b00000b024002402005410a480d00200241096a2003417e6a22036a2005410174419e84c0006a2f00003b00000c010b200241096a2003417f6a22036a200541306a3a00000b200141c4b5c8004100200241096a20036a412720036b104d2103200241306a240020030b6f01017f230041c0006b220124002001200036020c200141346a410136020020014201370224200141b4b5c8003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a103d410141bcb5c80041072001280210200128021810820100000b02000b0d0042bdd594d9d4dea9e7d2000bef0501067f20002802002205410171220620046a21070240024020054104710d00410021010c010b4100210802402002450d00200221092001210a03402008200a2d000041c00171418001466a2108200a41016a210a2009417f6a22090d000b0b200720026a20086b21070b412b418080c40020061b21080240024020002802084101460d004101210a2000200820012002104e0d012000280218200320042000411c6a28020028020c110000210a0c010b02402000410c6a280200220920074b0d004101210a2000200820012002104e0d012000280218200320042000411c6a28020028020c1100000f0b024002400240024002402005410871450d00200028020421052000413036020420002d002021064101210a200041013a00202000200820012002104e0d054100210a200920076b22092102410120002d0020220820084103461b4103710e0403020102030b4100210a200920076b22092105024002400240410120002d0020220720074103461b4103710e0402010001020b2009410176210a200941016a41017621050c010b410021052009210a0b200a41016a210a0340200a417f6a220a450d0420002802182000280204200028021c280210110100450d000b41010f0b2009410176210a200941016a41017621020c010b410021022009210a0b200a41016a210a02400340200a417f6a220a450d0120002802182000280204200028021c280210110100450d000b41010f0b200028020421094101210a200028021820032004200028021c28020c1100000d01200241016a2108200028021c210220002802182101024003402008417f6a2208450d014101210a2001200920022802101101000d030c000b0b200020063a00202000200536020441000f0b200028020421094101210a2000200820012002104e0d00200028021820032004200028021c28020c1100000d00200541016a2108200028021c210220002802182100034002402008417f6a22080d0041000f0b4101210a200020092002280210110100450d000b0b200a0b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341e885c000360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a20021046000b8d08010a7f200028021021030240024002400240200028020822044101460d0020034101460d012000280218200120022000411c6a28020028020c11000021030c030b20034101470d010b200120026a2105024002400240200041146a28020022060d0041002107200121080c010b41002107200121080340200520082203460d02200341016a2108024020032c00002209417f4a0d00200941ff017121090240024020082005470d004100210a2005210b0c010b20032d0001413f71210a200341026a2208210b0b200941e001490d0002400240200b2005470d004100210c2005210b0c010b200b2d0000413f71210c200b41016a2208210b0b200941f001490d0002400240200b2005470d004100210b0c010b200b41016a2108200b2d0000413f71210b0b200a410c742009411274418080f0007172200c41067472200b72418080c400460d030b200820036b20076a21072006417f6a22060d000b0b20052008460d00024020082c00002203417f4a0d0002400240200841016a2005470d0041002108200521060c010b200841026a210620082d0001413f7141067421080b200341ff017141e001490d000240024020062005470d0041002106200521090c010b200641016a210920062d0000413f7121060b200341ff017141f001490d00200341ff01712103200620087221080240024020092005470d00410021050c010b20092d0000413f7121050b20084106742003411274418080f0007172200572418080c400460d010b024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b0240024002402002450d004100210820022107200121030340200820032d000041c00171418001466a2108200341016a21032007417f6a22070d000b200220086b200028020c22054f0d014100210820022107200121030340200820032d000041c00171418001466a2108200341016a21032007417f6a22070d000c030b0b41002108200028020c22050d010b2000280218200120022000411c6a28020028020c1100000f0b41002103200820026b20056a22052107024002400240410020002d0020220820084103461b4103710e0402010001020b20054101762103200541016a41017621070c010b41002107200521030b200341016a2103024003402003417f6a2203450d0120002802182000280204200028021c280210110100450d000b41010f0b2000280204210841012103200028021820012002200028021c28020c1100000d00200741016a2103200028021c210720002802182100034002402003417f6a22030d0041000f0b200020082007280210110100450d000b41010f0b20030be00801067f230041f0006b220524002005200336020c20052002360208410121062001210702402001418102490d00410020016b2108418002210903400240200920014f0d0041002106200020096a2c000041bf7f4c0d00200921070c020b2009417f6a21074100210620094101460d01200820096a210a20072109200a4101470d000b0b200520073602142005200036021020054100410520061b36021c200541c4b5c80041aa86c00020061b3602180240024002400240200220014b22060d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b20052002360220024002402002450d0020022001470d010b200221060c030b200141016a210903400240200220014f0d00200020026a2c00004140480d00200541246a2109200221060c050b2002417f6a210620024101460d03200920024621032006210220030d030c000b0b20052002200320061b360228200541306a41146a4103360200200541c8006a41146a4104360200200541d4006a410436020020054203370234200541b086c0003602302005410236024c2005200541c8006a3602402005200541186a3602582005200541106a3602502005200541286a360248200541306a20041046000b200541e4006a4104360200200541c8006a41146a4104360200200541d4006a4102360200200541306a41146a410436020020054204370234200541c886c0003602302005410236024c2005200541c8006a3602402005200541186a3602602005200541106a36025820052005410c6a3602502005200541086a360248200541306a20041046000b200541246a21090b024020062001460d00410121030240024002400240200020066a22072c00002202417f4a0d0041002103200020016a220121000240200741016a2001460d00200741026a210020072d0001413f7121030b2002411f712107200241ff017141df014b0d01200320074106747221020c020b2005200241ff0171360224200541286a21010c020b410021082001210a024020002001460d00200041016a210a20002d0000413f7121080b200820034106747221030240200241ff017141f0014f0d0020032007410c747221020c010b410021020240200a2001460d00200a2d0000413f7121020b20034106742007411274418080f00071722002722202418080c400460d020b2005200236022441012103200541286a21012002418001490d00410221032002418010490d0041034104200241808004491b21030b200520063602282005200320066a36022c200541306a41146a4105360200200541ec006a4104360200200541e4006a4104360200200541c8006a41146a4106360200200541d4006a410736020020054205370234200541e886c00036023020052001360258200520093602502005410236024c2005200541c8006a3602402005200541186a3602682005200541106a3602602005200541206a360248200541306a20041046000b41ecd0c800412b2004103c000b100020012000280200200028020410500b800101037f230041206b22022400024002402000280200200110570d002001411c6a2802002103200128021821042002411c6a4100360200200241c4b5c8003602182002420137020c200241d087c00036020820042003200241086a103e450d010b200241206a240041010f0b2000280204200110572101200241206a240020010ba60403037f017e017f410121020240200128021841272001411c6a2802002802101101000d0041f4002103410221040240024002400240024002402000280200220041776a0e1f05010303000303030303030303030303030303030303030303040303030304020b41f2002103410221040c040b41ee002103410221040c030b200041dc00460d010b02400240024020001055450d00200041017267410276410773ad4280808080d0008421050c010b024020001056450d00410121040c020b200041017267410276410773ad4280808080d0008421050b410321040b200021030c010b20002103410221040b03402004210641dc002100410121024101210402400240024002400240024020060e0402010500020b02400240024002402005422088a741ff01710e06050302010006050b200542ffffffff8f608342808080803084210541f50021000c060b200542ffffffff8f608342808080802084210541fb0021000c050b413041d70020032005a72204410274411c7176410f712200410a491b20006a210002402004450d002005427f7c42ffffffff0f832005428080808070838421050c050b200542ffffffff8f60834280808080108421050c040b200542ffffffff8f6083210541fd0021000c030b41002104200321000c030b20012802184127200128021c2802101101000f0b200542ffffffff8f60834280808080c0008421050b410321040b20012802182000200128021c280210110100450d000b0b20020ba60301047f0240024002404100410f200041a49a04491b2201200141086a2201200141027441ac94c0006a280200410b742000410b7422014b1b2202200241046a2202200241027441ac94c0006a280200410b7420014b1b2202200241026a2202200241027441ac94c0006a280200410b7420014b1b2202200241016a2202200241027441ac94c0006a280200410b7420014b1b220241027441ac94c0006a280200410b74220320014620032001496a20026a2201411e4b0d0041b105210402402001411e460d00200141027441b094c0006a28020041157621040b4100210202402001417f6a220320014b0d002003411f4f0d03200341027441ac94c0006a28020041ffffff007121020b02402004200141027441ac94c0006a280200411576220141016a460d00200020026b2102200141b105200141b1054b1b21032004417f6a210441002100034020032001460d032000200141b895c0006a2d00006a220020024b0d012004200141016a2201470d000b200421010b20014101710f0b2001411f41ec9ac000103f000b200341b10541fc9ac000103f000b2003411f41a895c000103f000be20601077f0240024002400240024002400240024002400240200041808004490d00200041808008490d0141002101200041b5d9736a41b5db2b490d08200041e28b746a41e20b490d082000419fa8746a419f18490d08200041dee2746a410e490d08200041feffff0071419ef00a460d08200041a2b2756a4122490d08200041cb91756a410b490d08200041f08338490f0b20004180fe0371410876210241e988c000210341002104200041ff017121050340200341026a2106200420032d000122016a2107024020032d000022032002460d00200320024b0d082007210420062103200641bb89c000470d010c080b20072004490d02200741a2024b0d03200441cc89c0006a2103024003402001450d012001417f6a210120032d00002104200341016a210320042005470d000b410021010c090b2007210420062103200641bb89c000470d000c070b0b20004180fe0371410876210241b48ec000210341002104200041ff017121050340200341026a2106200420032d000122016a2107024020032d000022032002460d00200320024b0d062007210420062103200641808fc000470d010c060b20072004490d03200741af014b0d04200441808fc0006a2103024003402001450d012001417f6a210120032d00002104200341016a210320042005470d000b410021010c080b2007210420062103200641808fc000470d000c050b0b2004200741bc89c0001059000b200741a20241bc89c000104f000b2004200741bc89c0001059000b200741af0141bc89c000104f000b200041ffff0371210541af90c00021034101210102400340200341016a21000240024020032d0000220441187441187522074100480d00200021030c010b200041d293c000460d02200741ff007141087420032d0001722104200341026a21030b200520046b22054100480d0320014101732101200341d293c000470d000c030b0b41ecd0c800412b41a48ec000103c000b200041ffff0371210541ee8bc0002103410121010340200341016a21000240024020032d0000220441187441187522074100480d00200021030c010b200041a38ec000460d03200741ff007141087420032d0001722104200341026a21030b200520046b22054100480d0120014101732101200341a38ec000470d000b0b20014101710f0b41ecd0c800412b41a48ec000103c000ba50201037f23004180016b2202240002400240024002400240200128020022034110710d0020034120710d012000ad2001104921000c020b410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141a888c0004102200220036a4180016a410020036b104d21000c010b410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141a888c0004102200220036a4180016a410020036b104d21000b20024180016a240020000f0b2000418001419888c0001058000b2000418001419888c0001058000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341ac88c000360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a20021046000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341f893c000360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a20021046000b1c00200128021841ec9bc000410b2001411c6a28020028020c1100000b1c00200128021841f79bc000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a410136020020034201370214200341b4b5c8003602102003410436022c2003200341286a3602202003200341086a360228200341106a20021046000b140020002802002001200028020428020c1101000b1500200120002802002200280200200028020410500bf305010a7f230041206b220324000240024020020d00410021040c010b024002400340024020002802082d0000450d00200028020041c19cc0004104200028020428020c1100000d030b2003410a3602182003428a808080103703102003200236020c41002105200341003602082003200236020420032001360200200221060240024002400340200120056a210720032d001821080240024002400240200641074b0d002006450d01200220056b2109410021040340200720046a2d00002008460d042009200441016a2204470d000c020b0b024002400240410020076b4103712209450d00410021040340200720046a2d00002008460d062009200441016a2204470d000b2009200641786a220a4b0d020c010b200641786a210a410021090b200841818284086c210402400340200720096a220b41046a280200200473220c417f73200c41fffdfb776a71200b280200200473220b417f73200b41fffdfb776a7172418081828478710d01200941086a2209200a4d0d000b0b200920064b0d050b20062009460d00200620096b210b2001200920056a6a2107410021040340200720046a2d00002008460d02200b200441016a2204470d000b0b200320023602080c040b200920046a21040b2003200520046a220441016a2205360208024002402005450d0020022005490d00200120046a2d000020032d0018460d010b20022005490d03200220056b21060c010b0b200028020841013a0000200441016a21040c020b2009200641889dc0001058000b200028020841003a0000200221040b20002802042109200028020021080240024002402004450d0020022004460d000240200220044d0d00200120046a22072c000041bf7f4a0d020b200120024100200441c89cc0001051000b200820012004200928020c1100000d040c010b200820012004200928020c1100000d0320072c000041bf7f4c0d020b200120046a2101200220046b22020d000b410021040c020b200120022004200241d89cc0001051000b410121040b200341206a240020040bbb0302047f027e230041c0006b2205240041012106024020002d00040d0020002d000521070240200028020022082d00004104710d0041012106200828021841bb9dc00041b89dc000200741ff017122071b4102410320071b2008411c6a28020028020c1100000d014101210620002802002208280218200120022008411c6a28020028020c1100000d01410121062000280200220828021841f0b3c80041022008411c6a28020028020c1100000d0120032000280200200428020c11010021060c010b0240200741ff01710d0041012106200828021841bd9dc00041032008411c6a28020028020c1100000d01200028020021080b41012106200541013a0017200541346a41c09dc000360200200520082902183703082005200541176a360210200829020821092008290210210a200520082d00203a00382005200a37032820052009370320200520082902003703182005200541086a360230200541086a20012002105f0d00200541086a41f0b3c8004102105f0d002003200541186a200428020c1101000d00200528023041d89dc0004102200528023428020c11000021060b200041013a0005200020063a0004200541c0006a240020000b850201027f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b200020032001105f2101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc9dc000200241086a103e2101200241206a240020010b0d00200028020020012002105f0b8c0201027f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b200020032001105f2101200241106a240020010b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dc9dc000200241086a103e2101200241206a240020010bd30202047f027e230041c0006b2203240041012104024020002d00080d00200028020421050240200028020022062d00004104710d0041012104200628021841bb9dc00041f79dc00020051b4102410120051b2006411c6a28020028020c1100000d0120012000280200200228020c11010021040c010b024020050d0041012104200628021841f89dc00041022006411c6a28020028020c1100000d01200028020021060b41012104200341013a0017200341346a41c09dc000360200200320062902183703082003200341176a3602102006290208210720062902102108200320062d00203a00382003200837032820032007370320200320062902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041d89dc0004102200328023428020c11000021040b200020043a00082000200028020441016a360204200341c0006a240020000bd40202037f027e230041c0006b2203240041012104024020002d00040d0020002d000521040240200028020022052d00004104710d000240200441ff0171450d0041012104200528021841bb9dc00041022005411c6a28020028020c1100000d02200028020021050b20012005200228020c11010021040c010b0240200441ff01710d0041012104200528021841fb9dc00041012005411c6a28020028020c1100000d01200028020021050b41012104200341013a0017200341346a41c09dc000360200200320052902183703082003200341176a3602102005290208210620052902102107200320052d00203a00382003200737032820032006370320200320052902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041d89dc0004102200328023428020c11000021040b200041013a0005200020043a0004200341c0006a240020000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a103e2100200241206a240020000bd008020b7f017e4101210302400240200228021841222002411c6a2802002802101101000d000240024020010d00410021040c010b200020016a21054100210420002106200021074100210802400340200641016a210902400240024020062c0000220a417f4a0d000240024020092005470d004100210b200521060c010b20062d0001413f71210b200641026a220921060b200a411f7121030240200a41ff0171220a41df014b0d00200b200341067472210b0c020b0240024020062005470d004100210c2005210d0c010b20062d0000413f71210c200641016a2209210d0b200c200b41067472210b0240200a41f0014f0d00200b2003410c7472210b0c020b02400240200d2005470d004100210a200921060c010b200d41016a2106200d2d0000413f71210a0b200b4106742003411274418080f0007172200a72220b418080c400470d020c040b200a41ff0171210b0b200921060b4102210941f400210d02400240024002400240024002400240200b41776a0e1f06010303000303030303030303030303030303030303030303040303030304020b41f200210d0c050b41ee00210d0c040b200b41dc00460d010b0240200b10550d00200b10560d040b200b41017267410276410773ad4280808080d00084210e410321090c010b0b200b210d0b0240024020082004490d0002402004450d0020042001460d00200420014f0d01200020046a2c000041bf7f4c0d010b02402008450d0020082001460d00200820014f0d01200020086a2c000041bf7f4c0d010b2002280218200020046a200820046b200228021c28020c110000450d0141010f0b200020012004200841909ec0001051000b03402009210a4101210341dc00210441012109024002400240024002400240200a0e0402010500020b0240024002400240200e422088a741ff01710e06050302010006050b200e42ffffffff8f608342808080803084210e4103210941f50021040c070b200e42ffffffff8f608342808080802084210e4103210941fb0021040c060b413041d700200d200ea72209410274411c7176410f712204410a491b20046a210402402009450d00200e427f7c42ffffffff0f83200e4280808080708384210e0c050b200e42ffffffff8f608342808080801084210e0c040b200e42ffffffff8f6083210e4103210941fd0021040c040b41002109200d21040c030b410121090240200b418001490d0041022109200b418010490d0041034104200b41808004491b21090b200920086a21040c040b200e42ffffffff8f60834280808080c00084210e0b410321090b20022802182004200228021c280210110100450d000c050b0b200820076b20066a21082006210720052006470d000b0b2004450d0020042001460d00200420014f0d02200020046a2c000041bf7f4c0d020b410121032002280218200020046a200120046b200228021c28020c1100000d0020022802184122200228021c2802101101000f0b20030f0b200020012004200141809ec0001051000b870101027f23004180016b2202240020002d00002103410021000340200220006a41ff006a20034101714130723a00002000417f6a2100200341017641ff007122030d000b024020004180016a2203418101490d002003418001419888c0001058000b200141a09ec0004102200220006a4180016a410020006b104d210020024180016a240020000b900101037f23004180016b2202240020002802002103410021000340200220006a41ff006a2003410f712204413072200441376a2004410a491b3a00002000417f6a2100200341047622030d000b024020004180016a2203418101490d002003418001419888c0001058000b200141a888c0004102200220006a4180016a410020006b104d210020024180016a240020000ba50303047f027e027f230041d0006b220324000240024020004290ce005441002001501b450d002000a72104412721050c010b41272105200341206a21060340200341186a200020014290ce00420010c808200341086a200329031822072006290300220842f0b17f427f10ce08200341296a20056a2204417c6a200329030820007ca7220941ffff037141e4006e220a410174419e84c0006a2f00003b00002004417e6a200a419c7f6c20096a41ffff0371410174419e84c0006a2f00003b0000200042ffc1d72f56210420014200522109200150210a2005417c6a2105200721002008210120042009200a1b0d000b2007a721040b02400240200441e3004a0d00200421090c010b200341296a2005417e6a22056a200441ffff037141e4006e2209419c7f6c20046a41ffff0371410174419e84c0006a2f00003b00000b024002402009410a480d00200341296a2005417e6a22056a2009410174419e84c0006a2f00003b00000c010b200341296a2005417f6a22056a200941306a3a00000b200241c4b5c8004100200341296a20056a412720056b104d2105200341d0006a240020050b1c00200128021841a4afc00041052001411c6a28020028020c1100000bcf0401067e2000420037001720002001290320220242338842137e2001290300220342ffffffffffffff03837c220442137c4233882001290308220542ffffffffffffff038320034233887c22037c4233882001290310220642ffffffffffffff038320054233887c22057c4233882001290318220742ffffffffffffff038320064233887c22067c423388200242ffffffffffffff038320074233887c22077c42338842137e20047c22023c0000200020024228883c0005200020024220883c0004200020024218883c0003200020024210883c0002200020024208883c00012000200242338820037c22044225883c000b20002004421d883c000a200020044215883c000920002004420d883c0008200020044205883c00072000200442338820057c2203422a883c0012200020034222883c001120002003421a883c0010200020034212883c000f20002003420a883c000e200020034202883c000d2000200442ffffffffffffff038322044203862002423088420783843c00062000200342338820067c2202421f883c0017200020024227883c0018200020024217883c001620002002420f883c0015200020024207883c00142000200342ffffffffffffff038322054206862004422d88843c000c2000200242338820077c22034204883c001a20002003420c883c001b200020034214883c001c20002003421c883c001d200020034224883c001e2000200242ffffffffffffff038322024201862005423288843c00132000200342ffffffffffffff03832203422c883c001f200020034204862002422f88843c00190b7101027f230041c0006b2202240020022000106e200241206a2001106e41002101410121000340200241206a20016a2d0000200220016a2d0000732203410020036b72417f734180017141077610702000712100200141016a22014120470d000b200010702101200241c0006a240020010b1501017f230041106b220120003a000f20012d000f0bd00702017f147e230041f0016b2203240020012903202104200129031821052001290310210620012903082107200129030021080340200341b0016a200842002008420010ce0820034180016a20074200200442137e2209420010ce08200341c0006a200542137e220a42002006420010ce08200341e0016a200a42002005420010ce08200341f0006a200842002007420010ce08200341306a200642002009420010ce08200341e0006a200742002007420010ce08200341206a200842002006420010ce08200341d0016a200a42002004420010ce08200341c0016a200942002004420010ce08200341a0016a200842002005420010ce08200341106a200742002006420010ce082003200642002006420010ce0820034190016a200842002004420010ce08200341d0006a200742002005420010ce08200329039001220b20032903507c2206420186220c20032903007c220720032903a001220d20032903107c2208420186220e20032903c0017c22042003290320220f20032903d0017c2205420186221020032903607c22092003290370221120032903307c220a420186221220032903e0017c2213200329038001221420032903407c2215420186221620032903b0017c221742338820034180016a41086a290300200341c0006a41086a2903007c2015201454ad7c4201862015423f8884200341b0016a41086a2903007c2017201654ad7c420d86847c2215423388200341f0006a41086a290300200341306a41086a2903007c200a201154ad7c420186200a423f8884200341e0016a41086a2903007c2013201254ad7c2015201354ad7c420d86847c220a423388200341206a41086a290300200341d0016a41086a2903007c2005200f54ad7c4201862005423f8884200341e0006a41086a2903007c2009201054ad7c200a200954ad7c420d86847c2205423388200341a0016a41086a290300200341106a41086a2903007c2008200d54ad7c4201862008423f8884200341c0016a41086a2903007c2004200e54ad7c2005200454ad7c420d86847c220442338820034190016a41086a290300200341d0006a41086a2903007c2006200b54ad7c4201862006423f8884200341086a2903007c2007200c54ad7c2004200754ad7c420d868442137e201742ffffffffffffff03837c220642ffffffffffffff038321082006423388201542ffffffffffffff03837c2107200442ffffffffffffff03832104200542ffffffffffffff03832105200a42ffffffffffffff038321062002417f6a22020d000b2000200437032020002005370318200020063703102000200737030820002008370300200341f0016a24000bbbd40103017f297e037f230041d0c1006b22032400200341a8c1006a200241011071200341a0386a20022903002204420020032903a8412205420010ce08200341b0396a20032903c841220642002002290308220742137e2208420010ce08200341f0396a20032903c041220942002002290310220a42137e220b420010ce08200341b03a6a20032903b841220c42002002290318220d42137e220e420010ce08200341f03a6a20032903b041220f42002002290320221042137e2211420010ce08200341f0386a200f42002004420010ce08200341b0386a200542002007420010ce08200341c0396a20064200200b420010ce08200341803a6a20094200200e420010ce08200341c03a6a200c42002011420010ce0820034180396a200c42002004420010ce08200341803b6a200f42002007420010ce08200341c0386a20054200200a420010ce08200341d0396a20064200200e420010ce08200341903a6a200942002011420010ce0820034190396a200942002004420010ce08200341d03a6a200c42002007420010ce08200341903b6a200f4200200a420010ce08200341d0386a20054200200d420010ce08200341e0396a200642002011420010ce08200341a0396a200642002004420010ce08200341a03a6a200942002007420010ce08200341e03a6a200c4200200a420010ce08200341a03b6a200f4200200d420010ce08200341e0386a200542002010420010ce08200320032903d039221220032903c0387c220520032903903a7c22062003290380397c220920032903803b7c220c20032903c039221320032903b0387c220f20032903803a7c221420032903c03a7c221520032903f0387c221620032903b039221720032903a0387c221820032903f0397c221920032903b03a7c221a20032903f03a7c221b423388200341b0396a41086a290300200341a0386a41086a2903007c2018201754ad7c200341f0396a41086a2903007c2019201854ad7c200341b03a6a41086a2903007c201a201954ad7c200341f03a6a41086a2903007c201b201a54ad7c420d86847c2219423388200341c0396a41086a290300200341b0386a41086a2903007c200f201354ad7c200341803a6a41086a2903007c2014200f54ad7c200341c03a6a41086a2903007c2015201454ad7c200341f0386a41086a2903007c2016201554ad7c2019201654ad7c420d86847c220f42ffffffffffffff038322143703c03b200320032903e039221720032903d0387c22152003290390397c221620032903d03a7c221a20032903903b7c2213200f423388200341d0396a41086a290300200341c0386a41086a2903007c2005201254ad7c200341903a6a41086a2903007c2006200554ad7c20034180396a41086a2903007c2009200654ad7c200341803b6a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c220542ffffffffffffff038322183703c83b200320032903a039221220032903e0387c220620032903a03a7c220920032903e03a7c220c20032903a03b7c220f2005423388200341e0396a41086a290300200341d0386a41086a2903007c2015201754ad7c20034190396a41086a2903007c2016201554ad7c200341d03a6a41086a2903007c201a201654ad7c200341903b6a41086a2903007c2013201a54ad7c2005201354ad7c420d86847c220542ffffffffffffff0383221a3703d03b20032005423388200341a0396a41086a290300200341e0386a41086a2903007c2006201254ad7c200341a03a6a41086a2903007c2009200654ad7c200341e03a6a41086a2903007c200c200954ad7c200341a03b6a41086a2903007c200f200c54ad7c2005200f54ad7c420d868442137e201b42ffffffffffffff03837c220542ffffffffffffff0383220c3703b03b20032005423388201942ffffffffffffff03837c220f3703b83b200341a8c1006a200341b03b6a4101107120034190356a20032903a841220542002004420010ce08200341e0356a20032903c841220642002008420010ce08200341b0366a20032903c04122094200200b420010ce0820034180376a20032903b84122154200200e420010ce08200341d0376a20032903b041221642002011420010ce08200341e0376a201642002004420010ce08200341a0356a200542002007420010ce08200341f0356a20064200200b420010ce08200341c0366a20094200200e420010ce0820034190376a201542002011420010ce08200341a0376a201542002004420010ce08200341f0376a201642002007420010ce08200341b0356a20054200200a420010ce0820034180366a20064200200e420010ce08200341d0366a200942002011420010ce08200341e0366a200942002004420010ce08200341b0376a201542002007420010ce0820034180386a20164200200a420010ce08200341c0356a20054200200d420010ce0820034190366a200642002011420010ce08200341a0366a200642002004420010ce08200341f0366a200942002007420010ce08200341c0376a20154200200a420010ce0820034190386a20164200200d420010ce08200341d0356a200542002010420010ce08200341800d6a200c420020012903002211420010ce0820034190346a200f42137e42002001290320220e420010ce08200341d0336a200129031822054200201442137e220b420010ce0820034190336a200129031022064200201842137e2216420010ce08200341c0326a200129030822094200201a42137e2215420010ce08200341f00c6a20094200200c420010ce0820034180356a200f42002011420010ce0820034180346a200e4200200b420010ce08200341c0336a200542002016420010ce0820034180336a200642002015420010ce08200341e00c6a200c42002006420010ce08200341b0326a200f42002009420010ce08200341f0346a201142002014420010ce08200341f0336a200e42002016420010ce08200341b0336a200542002015420010ce08200341800c6a200c42002005420010ce08200341f0326a200f42002006420010ce08200341a0326a200942002014420010ce08200341e0346a201142002018420010ce08200341e0336a20154200200e420010ce08200341a00b6a200c4200200e420010ce08200341a0336a200f42002005420010ce08200341e0326a200642002014420010ce0820034190326a200942002018420010ce08200341d0346a201a42002011420010ce0820034180306a20032903a036221c20032903d0357c220c20032903f0367c220f20032903c0377c22142003290390387c2215200329039036221d20032903c0357c221620032903e0367c220b20032903b0377c22182003290380387c2219200329038036221e20032903b0357c221a20032903d0367c221b20032903a0377c221320032903f0377c220820032903f035221f20032903a0357c221220032903c0367c22172003290390377c222020032903e0377c222120032903e03522222003290390357c222320032903b0367c22242003290380377c222520032903d0377c2226423388200341e0356a41086a29030020034190356a41086a2903007c2023202254ad7c200341b0366a41086a2903007c2024202354ad7c20034180376a41086a2903007c2025202454ad7c200341d0376a41086a2903007c2026202554ad7c420d86847c2223423388200341f0356a41086a290300200341a0356a41086a2903007c2012201f54ad7c200341c0366a41086a2903007c2017201254ad7c20034190376a41086a2903007c2020201754ad7c200341e0376a41086a2903007c2021202054ad7c2023202154ad7c420d86847c221242338820034180366a41086a290300200341b0356a41086a2903007c201a201e54ad7c200341d0366a41086a2903007c201b201a54ad7c200341a0376a41086a2903007c2013201b54ad7c200341f0376a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a42338820034190366a41086a290300200341c0356a41086a2903007c2016201d54ad7c200341e0366a41086a2903007c200b201654ad7c200341b0376a41086a2903007c2018200b54ad7c20034180386a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2216423388200341a0366a41086a290300200341d0356a41086a2903007c200c201c54ad7c200341f0366a41086a2903007c200f200c54ad7c200341c0376a41086a2903007c2014200f54ad7c20034190386a41086a2903007c2015201454ad7c2016201554ad7c420d868442137e202642ffffffffffffff03837c220f42ffffffffffffff0383220c42002011420010ce08200341d0306a200f423388202342ffffffffffffff03837c220f42137e4200200e420010ce08200341f0306a201242ffffffffffffff0383221442137e221942002005420010ce08200341a0316a201a42ffffffffffffff0383220b42137e221842002006420010ce08200341e0316a201642ffffffffffffff0383221642137e221542002009420010ce08200341f02f6a200c42002009420010ce08200341c0306a200f42002011420010ce08200341e0306a20194200200e420010ce0820034190316a201842002005420010ce08200341d0316a201542002006420010ce08200341e02f6a200c42002006420010ce08200341b0306a200f42002009420010ce08200341c0346a201442002011420010ce0820034180316a20184200200e420010ce08200341c0316a201542002005420010ce08200341d02f6a200c42002005420010ce08200341a0306a200f42002006420010ce0820034180326a201442002009420010ce08200341b0346a200b42002011420010ce08200341b0316a20154200200e420010ce08200341c02f6a200c4200200e420010ce0820034190306a200f42002005420010ce08200341d0326a201442002006420010ce08200341f0316a200b42002009420010ce08200341a0346a201642002011420010ce082003200329038031221220032903c0347c220f20032903c0317c221420032903e02f7c221520032903b0307c2216200329039031221720032903e0307c220c20032903d0317c220b20032903f02f7c221820032903c0307c221920032903a031222020032903f0307c221a20032903e0317c221b2003290380307c221320032903d0307c2208423388200341a0316a41086a290300200341f0306a41086a2903007c201a202054ad7c200341e0316a41086a2903007c201b201a54ad7c20034180306a41086a2903007c2013201b54ad7c200341d0306a41086a2903007c2008201354ad7c420d86847c221a42338820034190316a41086a290300200341e0306a41086a2903007c200c201754ad7c200341d0316a41086a2903007c200b200c54ad7c200341f02f6a41086a2903007c2018200b54ad7c200341c0306a41086a2903007c2019201854ad7c201a201954ad7c420d86847c220b42ffffffffffffff0383220c3703e83b200320032903b03422172003290380327c221820032903b0317c221920032903d02f7c221b20032903a0307c2213200b42338820034180316a41086a290300200341c0346a41086a2903007c200f201254ad7c200341c0316a41086a2903007c2014200f54ad7c200341e02f6a41086a2903007c2015201454ad7c200341b0306a41086a2903007c2016201554ad7c200b201654ad7c420d86847c221442ffffffffffffff0383220f3703f03b200320032903f031222020032903d0327c221520032903a0347c221620032903c02f7c220b2003290390307c22122014423388200341b0346a41086a29030020034180326a41086a2903007c2018201754ad7c200341b0316a41086a2903007c2019201854ad7c200341d02f6a41086a2903007c201b201954ad7c200341a0306a41086a2903007c2013201b54ad7c2014201354ad7c420d86847c221842ffffffffffffff038322143703f83b20032018423388200341f0316a41086a290300200341d0326a41086a2903007c2015202054ad7c200341a0346a41086a2903007c2016201554ad7c200341c02f6a41086a2903007c200b201654ad7c20034190306a41086a2903007c2012200b54ad7c2018201254ad7c420d868442137e200842ffffffffffffff03837c221642ffffffffffffff038322153703d83b20032016423388201a42ffffffffffffff03837c22163703e03b200341803c6a200341d83b6a41011071200341a8c1006a200341803c6a41011071200341a83c6a200341a8c1006a41011071200341b02f6a20032903a83c220b42002015420010ce08200341b02c6a2014420020032903b03c221842137e420010ce08200341902d6a200f420020032903b83c221942137e2208420010ce08200341f02d6a200c420020032903c03c221b42137e2213420010ce08200341d02e6a2016420020032903c83c221242137e221a420010ce08200341a02f6a20164200200b420010ce08200341f02c6a201542002018420010ce08200341802d6a201442002008420010ce08200341e02d6a200f42002013420010ce08200341c02e6a200c4200201a420010ce08200341902f6a200c4200200b420010ce08200341e02c6a201642002018420010ce08200341c02d6a201542002019420010ce08200341d02d6a201442002013420010ce08200341b02e6a200f4200201a420010ce08200341802f6a200f4200200b420010ce08200341d02c6a200c42002018420010ce08200341b02d6a201642002019420010ce08200341902e6a20154200201b420010ce08200341a02e6a20144200201a420010ce08200341f02e6a20144200200b420010ce08200341c02c6a200f42002018420010ce08200341a02d6a200c42002019420010ce08200341802e6a20164200201b420010ce08200341e02e6a201542002012420010ce08200341e0296a20032903f02e222720032903e02e7c220b20032903c02c7c221820032903a02d7c221920032903802e7c221a20032903a02e222820032903902e7c221b20032903802f7c221320032903d02c7c220820032903b02d7c221220032903d02d222920032903c02d7c221720032903b02e7c222020032903902f7c222120032903e02c7c222320032903802d222a20032903f02c7c222420032903e02d7c222520032903c02e7c222620032903a02f7c221c20032903b02c222b20032903b02f7c221d20032903902d7c221e20032903f02d7c221f20032903d02e7c2222423388200341b02c6a41086a290300200341b02f6a41086a2903007c201d202b54ad7c200341902d6a41086a2903007c201e201d54ad7c200341f02d6a41086a2903007c201f201e54ad7c200341d02e6a41086a2903007c2022201f54ad7c420d86847c221d423388200341802d6a41086a290300200341f02c6a41086a2903007c2024202a54ad7c200341e02d6a41086a2903007c2025202454ad7c200341c02e6a41086a2903007c2026202554ad7c200341a02f6a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341d02d6a41086a290300200341c02d6a41086a2903007c2017202954ad7c200341b02e6a41086a2903007c2020201754ad7c200341902f6a41086a2903007c2021202054ad7c200341e02c6a41086a2903007c2023202154ad7c2024202354ad7c420d86847c2217423388200341a02e6a41086a290300200341902e6a41086a2903007c201b202854ad7c200341802f6a41086a2903007c2013201b54ad7c200341d02c6a41086a2903007c2008201354ad7c200341b02d6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b423388200341f02e6a41086a290300200341e02e6a41086a2903007c200b202754ad7c200341c02c6a41086a2903007c2018200b54ad7c200341a02d6a41086a2903007c2019201854ad7c200341802e6a41086a2903007c201a201954ad7c201b201a54ad7c420d868442137e202242ffffffffffffff03837c221842ffffffffffffff0383220b420020032903803c2213420010ce08200341b02a6a2018423388201d42ffffffffffffff03837c221842137e420020032903a03c2208420010ce08200341d02a6a202442ffffffffffffff0383221942137e2224420020032903983c2212420010ce08200341802b6a201742ffffffffffffff0383221a42137e2223420020032903903c2217420010ce08200341c02b6a201b42ffffffffffffff0383221b42137e2221420020032903883c2220420010ce08200341d0296a200b42002020420010ce08200341a02a6a201842002013420010ce08200341c02a6a202442002008420010ce08200341f02a6a202342002012420010ce08200341b02b6a202142002017420010ce08200341c0296a200b42002017420010ce08200341902a6a201842002020420010ce08200341d02b6a201942002013420010ce08200341e02a6a202342002008420010ce08200341a02b6a202142002012420010ce08200341b0296a200b42002012420010ce08200341802a6a201842002017420010ce08200341e02b6a201942002020420010ce08200341802c6a201a42002013420010ce08200341902b6a202142002008420010ce08200341a0296a200b42002008420010ce08200341f0296a201842002012420010ce08200341f02b6a201942002017420010ce08200341902c6a201a42002020420010ce08200341a02c6a201b42002013420010ce08200320032903e02a221e20032903d02b7c221320032903a02b7c220820032903c0297c221220032903902a7c221720032903f02a221f20032903c02a7c222020032903b02b7c222120032903d0297c222320032903a02a7c222420032903802b222220032903d02a7c222520032903c02b7c222620032903e0297c221c20032903b02a7c221d423388200341802b6a41086a290300200341d02a6a41086a2903007c2025202254ad7c200341c02b6a41086a2903007c2026202554ad7c200341e0296a41086a2903007c201c202654ad7c200341b02a6a41086a2903007c201d201c54ad7c420d86847c2225423388200341f02a6a41086a290300200341c02a6a41086a2903007c2020201f54ad7c200341b02b6a41086a2903007c2021202054ad7c200341d0296a41086a2903007c2023202154ad7c200341a02a6a41086a2903007c2024202354ad7c2025202454ad7c420d86847c222042ffffffffffffff03833703e03c200320032903802c221c20032903e02b7c222120032903902b7c222320032903b0297c222420032903802a7c22262020423388200341e02a6a41086a290300200341d02b6a41086a2903007c2013201e54ad7c200341a02b6a41086a2903007c2008201354ad7c200341c0296a41086a2903007c2012200854ad7c200341902a6a41086a2903007c2017201254ad7c2020201754ad7c420d86847c221342ffffffffffffff03833703e83c200320032903902c221e20032903f02b7c220820032903a02c7c221220032903a0297c221720032903f0297c22202013423388200341802c6a41086a290300200341e02b6a41086a2903007c2021201c54ad7c200341902b6a41086a2903007c2023202154ad7c200341b0296a41086a2903007c2024202354ad7c200341802a6a41086a2903007c2026202454ad7c2013202654ad7c420d86847c221342ffffffffffffff03833703f03c20032013423388200341902c6a41086a290300200341f02b6a41086a2903007c2008201e54ad7c200341a02c6a41086a2903007c2012200854ad7c200341a0296a41086a2903007c2017201254ad7c200341f0296a41086a2903007c2020201754ad7c2013202054ad7c420d868442137e201d42ffffffffffffff03837c221342ffffffffffffff03833703d03c20032013423388202542ffffffffffffff03837c3703d83c200341f83c6a200341d03c6a4101107120034190296a200b420020032903f83c2213420010ce0820034190266a201b420020032903803d220842137e420010ce08200341f0266a20032903883d221242137e22234200201a420010ce08200341d0276a20032903903d222042137e222142002019420010ce08200341b0286a2018420020032903983d222442137e2217420010ce0820034180296a201842002013420010ce08200341d0266a200b42002008420010ce08200341e0266a201b42002023420010ce08200341c0276a20214200201a420010ce08200341a0286a201742002019420010ce08200341f0286a201342002019420010ce08200341c0266a201842002008420010ce08200341a0276a200b42002012420010ce08200341b0276a20214200201b420010ce0820034190286a20174200201a420010ce08200341e0286a20134200201a420010ce08200341b0266a200842002019420010ce0820034190276a201842002012420010ce08200341f0276a200b42002020420010ce0820034180286a20174200201b420010ce08200341d0286a20134200201b420010ce08200341a0266a20084200201a420010ce0820034180276a201242002019420010ce08200341e0276a201842002020420010ce08200341c0286a200b42002024420010ce082003200329039028222520032903b0277c220b20032903f0287c221820032903a0277c221a20032903c0267c221b20032903c027222420032903e0267c221920032903a0287c221320032903d0267c22082003290380297c221220032903f02622262003290390267c221720032903d0277c22202003290390297c222120032903b0287c2223423388200341f0266a41086a29030020034190266a41086a2903007c2017202654ad7c200341d0276a41086a2903007c2020201754ad7c20034190296a41086a2903007c2021202054ad7c200341b0286a41086a2903007c2023202154ad7c420d86847c2220423388200341c0276a41086a290300200341e0266a41086a2903007c2019202454ad7c200341a0286a41086a2903007c2013201954ad7c200341d0266a41086a2903007c2008201354ad7c20034180296a41086a2903007c2012200854ad7c2020201254ad7c420d86847c221342ffffffffffffff038322193703b03d2003200329038028222620032903b0267c220820032903e0287c221220032903f0277c22212003290390277c2224201342338820034190286a41086a290300200341b0276a41086a2903007c200b202554ad7c200341f0286a41086a2903007c2018200b54ad7c200341a0276a41086a2903007c201a201854ad7c200341c0266a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff038322173703b83d2003200329038027222520032903a0267c221820032903d0287c221a20032903c0287c221b20032903e0277c2213200b42338820034180286a41086a290300200341b0266a41086a2903007c2008202654ad7c200341e0286a41086a2903007c2012200854ad7c200341f0276a41086a2903007c2021201254ad7c20034190276a41086a2903007c2024202154ad7c200b202454ad7c420d86847c220b42ffffffffffffff038322213703c03d2003200b42338820034180276a41086a290300200341a0266a41086a2903007c2018202554ad7c200341d0286a41086a2903007c201a201854ad7c200341c0286a41086a2903007c201b201a54ad7c200341e0276a41086a2903007c2013201b54ad7c200b201354ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703a03d20032018423388202042ffffffffffffff03837c22183703a83d200341c83d6a200341a03d6a41051071200341c0236a200b420020032903c83d221a420010ce08200341c0246a201842137e420020032903e83d221b420010ce0820034180256a201942137e2224420020032903e03d2213420010ce08200341c0256a201742137e2223420020032903d83d2208420010ce0820034180266a202142137e2220420020032903d03d2212420010ce08200341b0236a200b42002012420010ce0820034180246a20184200201a420010ce08200341b0246a20244200201b420010ce08200341f0246a202342002013420010ce08200341b0256a202042002008420010ce08200341a0236a200b42002008420010ce08200341f0256a201842002012420010ce08200341f0236a20194200201a420010ce08200341a0246a20234200201b420010ce08200341e0246a202042002013420010ce0820034190236a200b42002013420010ce08200341a0256a201842002008420010ce08200341e0256a201942002012420010ce08200341e0236a20174200201a420010ce0820034190246a20204200201b420010ce0820034180236a200b4200201b420010ce08200341d0246a201842002013420010ce0820034190256a201942002008420010ce08200341d0256a201742002012420010ce08200341d0236a20214200201a420010ce08200320032903a024222420032903f0237c220b20032903e0247c221820032903a0237c221a20032903f0257c221b20032903f024222520032903b0247c221920032903b0257c221320032903b0237c22082003290380247c221220032903c02522262003290380257c22172003290380267c222020032903c0237c222120032903c0247c2223423388200341c0256a41086a29030020034180256a41086a2903007c2017202654ad7c20034180266a41086a2903007c2020201754ad7c200341c0236a41086a2903007c2021202054ad7c200341c0246a41086a2903007c2023202154ad7c420d86847c2217423388200341f0246a41086a290300200341b0246a41086a2903007c2019202554ad7c200341b0256a41086a2903007c2013201954ad7c200341b0236a41086a2903007c2008201354ad7c20034180246a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703803e200320032903e023222520032903e0257c22082003290390247c22122003290390237c222020032903a0257c22212013423388200341a0246a41086a290300200341f0236a41086a2903007c200b202454ad7c200341e0246a41086a2903007c2018200b54ad7c200341a0236a41086a2903007c201a201854ad7c200341f0256a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703883e200320032903d025221c2003290390257c221820032903d0237c221a2003290380237c221320032903d0247c2224200b423388200341e0236a41086a290300200341e0256a41086a2903007c2008202554ad7c20034190246a41086a2903007c2012200854ad7c20034190236a41086a2903007c2020201254ad7c200341a0256a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff038322263703903e2003200b423388200341d0256a41086a29030020034190256a41086a2903007c2018201c54ad7c200341d0236a41086a2903007c201a201854ad7c20034180236a41086a2903007c2013201a54ad7c200341d0246a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703f03d20032018423388201742ffffffffffffff03837c22183703f83d200341983e6a200341f03d6a410a1071200341b0206a200b420020032903983e2208420010ce0820034180216a201842137e2228420020032903b83e2212420010ce08200341d0216a201942137e221c420020032903b03e2217420010ce08200341a0226a201b42137e2213420020032903a83e2220420010ce08200341f0226a202642137e221a420020032903a03e2221420010ce08200341e0226a200b42002021420010ce08200341a0206a201842002008420010ce08200341f0206a201c42002012420010ce08200341c0216a201342002017420010ce0820034190226a201a42002020420010ce0820034180226a200b42002020420010ce08200341d0226a201842002021420010ce0820034190206a201942002008420010ce08200341e0206a201342002012420010ce08200341b0216a201a42002017420010ce08200341a0216a200b42002017420010ce08200341f0216a201842002020420010ce08200341c0226a201942002021420010ce0820034180206a201b42002008420010ce08200341d0206a201a42002012420010ce08200341c0206a200b42002012420010ce0820034190216a201842002017420010ce08200341e0216a201942002020420010ce08200341b0226a201b42002021420010ce08200341f01f6a202642002008420010ce08200320032903e02022292003290390207c220820032903b0217c22122003290380227c222020032903d0227c222120032903c021222720032903f0207c22172003290390227c222320032903e0227c222420032903a0207c222520032903a022222a20032903d0217c221d20032903f0227c221e20032903b0207c221f2003290380217c2222423388200341a0226a41086a290300200341d0216a41086a2903007c201d202a54ad7c200341f0226a41086a2903007c201e201d54ad7c200341b0206a41086a2903007c201f201e54ad7c20034180216a41086a2903007c2022201f54ad7c420d86847c221e423388200341c0216a41086a290300200341f0206a41086a2903007c2017202754ad7c20034190226a41086a2903007c2023201754ad7c200341e0226a41086a2903007c2024202354ad7c200341a0206a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703d03e2003200329038020222a20032903c0227c222420032903d0207c222520032903a0217c221f20032903f0217c22272023423388200341e0206a41086a29030020034190206a41086a2903007c2008202954ad7c200341b0216a41086a2903007c2012200854ad7c20034180226a41086a2903007c2020201254ad7c200341d0226a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703d83e200320032903b022222920032903e0217c221220032903f01f7c222020032903c0207c22212003290390217c2223200842338820034180206a41086a290300200341c0226a41086a2903007c2024202a54ad7c200341d0206a41086a2903007c2025202454ad7c200341a0216a41086a2903007c201f202554ad7c200341f0216a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703e03e20032008423388200341b0226a41086a290300200341e0216a41086a2903007c2012202954ad7c200341f01f6a41086a2903007c2020201254ad7c200341c0206a41086a2903007c2021202054ad7c20034190216a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703c03e20032012423388201e42ffffffffffffff03837c22123703c83e200341e83e6a200341c03e6a41141071200341a01d6a2008420020032903e83e2220420010ce08200341f01d6a201242137e420020032903883f2221420010ce08200341c01e6a201742137e2227420020032903803f2223420010ce08200341901f6a201d42137e2222420020032903f83e2224420010ce08200341e01f6a201f42137e221e420020032903f03e2225420010ce08200341d01f6a200842002025420010ce08200341901d6a201242002020420010ce08200341e01d6a202742002021420010ce08200341b01e6a202242002023420010ce08200341801f6a201e42002024420010ce08200341f01e6a200842002024420010ce08200341c01f6a201242002025420010ce08200341801d6a201742002020420010ce08200341d01d6a202242002021420010ce08200341a01e6a201e42002023420010ce08200341901e6a200842002023420010ce08200341e01e6a201242002024420010ce08200341b01f6a201742002025420010ce08200341f01c6a201d42002020420010ce08200341c01d6a201e42002021420010ce08200341b01d6a200842002021420010ce08200341801e6a201242002023420010ce08200341d01e6a201742002024420010ce08200341a01f6a201d42002025420010ce08200341e01c6a201f42002020420010ce08200320032903d01d222720032903801d7c220820032903a01e7c221220032903f01e7c221720032903c01f7c222020032903b01e222920032903e01d7c222120032903801f7c222320032903d01f7c222420032903901d7c222520032903901f222a20032903c01e7c221d20032903e01f7c221e20032903a01d7c221f20032903f01d7c2222423388200341901f6a41086a290300200341c01e6a41086a2903007c201d202a54ad7c200341e01f6a41086a2903007c201e201d54ad7c200341a01d6a41086a2903007c201f201e54ad7c200341f01d6a41086a2903007c2022201f54ad7c420d86847c221d423388200341b01e6a41086a290300200341e01d6a41086a2903007c2021202954ad7c200341801f6a41086a2903007c2023202154ad7c200341d01f6a41086a2903007c2024202354ad7c200341901d6a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff03833703a03f200320032903f01c221f20032903b01f7c222320032903c01d7c222420032903901e7c222520032903e01e7c221e2021423388200341d01d6a41086a290300200341801d6a41086a2903007c2008202754ad7c200341a01e6a41086a2903007c2012200854ad7c200341f01e6a41086a2903007c2017201254ad7c200341c01f6a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff03833703a83f200320032903a01f222720032903d01e7c221220032903e01c7c221720032903b01d7c222020032903801e7c22212008423388200341f01c6a41086a290300200341b01f6a41086a2903007c2023201f54ad7c200341c01d6a41086a2903007c2024202354ad7c200341901e6a41086a2903007c2025202454ad7c200341e01e6a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703b03f20032008423388200341a01f6a41086a290300200341d01e6a41086a2903007c2012202754ad7c200341e01c6a41086a2903007c2017201254ad7c200341b01d6a41086a2903007c2020201754ad7c200341801e6a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703903f20032008423388201d42ffffffffffffff03837c3703983f200341b83f6a200341903f6a410a1071200341901a6a200b420020032903b83f2208420010ce08200341e01a6a2028420020032903d83f2212420010ce08200341b01b6a20032903d03f22174200201c420010ce08200341801c6a20032903c83f222042002013420010ce08200341d01c6a20032903c03f22214200201a420010ce08200341c01c6a20214200200b420010ce08200341801a6a201842002008420010ce08200341d01a6a20124200201c420010ce08200341a01b6a201742002013420010ce08200341f01b6a20204200201a420010ce08200341e01b6a20204200200b420010ce08200341b01c6a202142002018420010ce08200341f0196a200842002019420010ce08200341c01a6a201242002013420010ce08200341901b6a20174200201a420010ce08200341801b6a20174200200b420010ce08200341d01b6a202042002018420010ce08200341a01c6a202142002019420010ce08200341e0196a20084200201b420010ce08200341b01a6a20124200201a420010ce08200341a01a6a20124200200b420010ce08200341f01a6a201742002018420010ce08200341c01b6a202042002019420010ce08200341901c6a20214200201b420010ce08200341d0196a200842002026420010ce08200320032903c01a222420032903f0197c220b20032903901b7c221820032903e01b7c221a20032903b01c7c221b20032903801a222520032903d01a7c221920032903a01b7c221320032903f01b7c220820032903c01c7c221220032903b01b222620032903901a7c221720032903e01a7c222020032903801c7c222120032903d01c7c2223423388200341b01b6a41086a290300200341901a6a41086a2903007c2017202654ad7c200341e01a6a41086a2903007c2020201754ad7c200341801c6a41086a2903007c2021202054ad7c200341d01c6a41086a2903007c2023202154ad7c420d86847c2217423388200341801a6a41086a290300200341d01a6a41086a2903007c2019202554ad7c200341a01b6a41086a2903007c2013201954ad7c200341f01b6a41086a2903007c2008201354ad7c200341c01c6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703f03f200320032903b01a222520032903e0197c220820032903801b7c221220032903d01b7c222020032903a01c7c22212013423388200341c01a6a41086a290300200341f0196a41086a2903007c200b202454ad7c200341901b6a41086a2903007c2018200b54ad7c200341e01b6a41086a2903007c201a201854ad7c200341b01c6a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703f83f200320032903a01a221c20032903d0197c221820032903f01a7c221a20032903c01b7c221320032903901c7c2224200b423388200341b01a6a41086a290300200341e0196a41086a2903007c2008202554ad7c200341801b6a41086a2903007c2012200854ad7c200341d01b6a41086a2903007c2020201254ad7c200341a01c6a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff03832226370380402003200b423388200341a01a6a41086a290300200341d0196a41086a2903007c2018201c54ad7c200341f01a6a41086a2903007c201a201854ad7c200341c01b6a41086a2903007c2013201a54ad7c200341901c6a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703e03f20032018423388201742ffffffffffffff03837c22183703e83f20034188c0006a200341e03f6a4132107120034180176a200b42002003290388402208420010ce08200341d0176a201842137e2228420020032903a8402212420010ce08200341a0186a201942137e221c420020032903a0402217420010ce08200341f0186a201b42137e221342002003290398402220420010ce08200341c0196a202642137e221a42002003290390402221420010ce08200341b0196a200b42002021420010ce08200341f0166a201842002008420010ce08200341c0176a201c42002012420010ce0820034190186a201342002017420010ce08200341e0186a201a42002020420010ce08200341d0186a200b42002020420010ce08200341a0196a201842002021420010ce08200341e0166a201942002008420010ce08200341b0176a201342002012420010ce0820034180186a201a42002017420010ce08200341f0176a200b42002017420010ce08200341c0186a201842002020420010ce0820034190196a202142002019420010ce08200341d0166a201b42002008420010ce08200341a0176a201a42002012420010ce0820034190176a200b42002012420010ce08200341e0176a201842002017420010ce08200341b0186a201942002020420010ce0820034180196a201b42002021420010ce08200341c0166a202642002008420010ce08200320032903b017222920032903e0167c22082003290380187c221220032903d0187c222020032903a0197c2221200329039018222720032903c0177c221720032903e0187c222320032903b0197c222420032903f0167c222520032903f018222a20032903a0187c221d20032903c0197c221e2003290380177c221f20032903d0177c2222423388200341f0186a41086a290300200341a0186a41086a2903007c201d202a54ad7c200341c0196a41086a2903007c201e201d54ad7c20034180176a41086a2903007c201f201e54ad7c200341d0176a41086a2903007c2022201f54ad7c420d86847c221e42338820034190186a41086a290300200341c0176a41086a2903007c2017202754ad7c200341e0186a41086a2903007c2023201754ad7c200341b0196a41086a2903007c2024202354ad7c200341f0166a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703c040200320032903d016222a2003290390197c222420032903a0177c222520032903f0177c221f20032903c0187c22272023423388200341b0176a41086a290300200341e0166a41086a2903007c2008202954ad7c20034180186a41086a2903007c2012200854ad7c200341d0186a41086a2903007c2020201254ad7c200341a0196a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703c8402003200329038019222920032903b0187c221220032903c0167c22202003290390177c222120032903e0177c22232008423388200341d0166a41086a29030020034190196a41086a2903007c2024202a54ad7c200341a0176a41086a2903007c2025202454ad7c200341f0176a41086a2903007c201f202554ad7c200341c0186a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703d0402003200842338820034180196a41086a290300200341b0186a41086a2903007c2012202954ad7c200341c0166a41086a2903007c2020201254ad7c20034190176a41086a2903007c2021202054ad7c200341e0176a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703b04020032012423388201e42ffffffffffffff03837c22123703b840200341d8c0006a200341b0c0006a41e4001071200341f0136a2008420020032903d8402220420010ce08200341c0146a201242137e420020032903f8402221420010ce0820034190156a201742137e2227420020032903f0402223420010ce08200341e0156a201d42137e2222420020032903e8402224420010ce08200341b0166a201f42137e221e420020032903e0402225420010ce08200341a0166a200842002025420010ce08200341e0136a201242002020420010ce08200341b0146a202742002021420010ce0820034180156a202242002023420010ce08200341d0156a201e42002024420010ce08200341c0156a200842002024420010ce0820034190166a201242002025420010ce08200341d0136a201742002020420010ce08200341a0146a202242002021420010ce08200341f0146a201e42002023420010ce08200341e0146a200842002023420010ce08200341b0156a201242002024420010ce0820034180166a201742002025420010ce08200341c0136a201d42002020420010ce0820034190146a201e42002021420010ce0820034180146a200842002021420010ce08200341d0146a201242002023420010ce08200341a0156a201742002024420010ce08200341f0156a201d42002025420010ce08200341b0136a201f42002020420010ce08200320032903a014222720032903d0137c220820032903f0147c221220032903c0157c22172003290390167c2220200329038015222920032903b0147c222120032903d0157c222320032903a0167c222420032903e0137c222520032903e015222a2003290390157c221d20032903b0167c221e20032903f0137c221f20032903c0147c2222423388200341e0156a41086a29030020034190156a41086a2903007c201d202a54ad7c200341b0166a41086a2903007c201e201d54ad7c200341f0136a41086a2903007c201f201e54ad7c200341c0146a41086a2903007c2022201f54ad7c420d86847c221d42338820034180156a41086a290300200341b0146a41086a2903007c2021202954ad7c200341d0156a41086a2903007c2023202154ad7c200341a0166a41086a2903007c2024202354ad7c200341e0136a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff038337039041200320032903c013221f2003290380167c22232003290390147c222420032903e0147c222520032903b0157c221e2021423388200341a0146a41086a290300200341d0136a41086a2903007c2008202754ad7c200341f0146a41086a2903007c2012200854ad7c200341c0156a41086a2903007c2017201254ad7c20034190166a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff038337039841200320032903f015222720032903a0157c221220032903b0137c22172003290380147c222020032903d0147c22212008423388200341c0136a41086a29030020034180166a41086a2903007c2023201f54ad7c20034190146a41086a2903007c2024202354ad7c200341e0146a41086a2903007c2025202454ad7c200341b0156a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703a04120032008423388200341f0156a41086a290300200341a0156a41086a2903007c2012202754ad7c200341b0136a41086a2903007c2017201254ad7c20034180146a41086a2903007c2020201754ad7c200341d0146a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703804120032008423388201d42ffffffffffffff03837c37038841200341a8c1006a20034180c1006a41321071200341a0106a20032903a84122084200200b420010ce08200341f0106a20032903c841221242002028420010ce08200341c0116a20032903c04122174200201c420010ce0820034190126a20032903b841222042002013420010ce08200341e0126a20032903b04122214200201a420010ce08200341f0126a20214200200b420010ce08200341b0106a200842002018420010ce0820034180116a20124200201c420010ce08200341d0116a201742002013420010ce08200341a0126a20204200201a420010ce08200341b0126a20204200200b420010ce0820034180136a202142002018420010ce08200341c0106a200842002019420010ce0820034190116a201242002013420010ce08200341e0116a20174200201a420010ce08200341f0116a20174200200b420010ce08200341c0126a202042002018420010ce0820034190136a202142002019420010ce08200341d0106a20084200201b420010ce08200341a0116a20124200201a420010ce08200341b0116a20124200200b420010ce0820034180126a201742002018420010ce08200341d0126a202042002019420010ce08200341a0136a20214200201b420010ce08200341e0106a200842002026420010ce082003200329039011222420032903c0107c220b20032903e0117c221820032903b0127c22192003290380137c221a200329038011222520032903b0107c221b20032903d0117c221320032903a0127c220820032903f0127c221220032903f010222620032903a0107c221720032903c0117c22202003290390127c222120032903e0127c2223423388200341f0106a41086a290300200341a0106a41086a2903007c2017202654ad7c200341c0116a41086a2903007c2020201754ad7c20034190126a41086a2903007c2021202054ad7c200341e0126a41086a2903007c2023202154ad7c420d86847c221742338820034180116a41086a290300200341b0106a41086a2903007c201b202554ad7c200341d0116a41086a2903007c2013201b54ad7c200341a0126a41086a2903007c2008201354ad7c200341f0126a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b42ffffffffffffff038337039041200320032903a011222120032903d0107c221320032903f0117c220820032903c0127c22122003290390137c2220201b42338820034190116a41086a290300200341c0106a41086a2903007c200b202454ad7c200341e0116a41086a2903007c2018200b54ad7c200341b0126a41086a2903007c2019201854ad7c20034180136a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c220b42ffffffffffffff038337039841200320032903b011222420032903e0107c22182003290380127c221920032903d0127c221a20032903a0137c221b200b423388200341a0116a41086a290300200341d0106a41086a2903007c2013202154ad7c200341f0116a41086a2903007c2008201354ad7c200341c0126a41086a2903007c2012200854ad7c20034190136a41086a2903007c2020201254ad7c200b202054ad7c420d86847c220b42ffffffffffffff03833703a0412003200b423388200341b0116a41086a290300200341e0106a41086a2903007c2018202454ad7c20034180126a41086a2903007c2019201854ad7c200341d0126a41086a2903007c201a201954ad7c200341a0136a41086a2903007c201b201a54ad7c200b201b54ad7c420d868442137e202342ffffffffffffff03837c220b42ffffffffffffff0383370380412003200b423388201742ffffffffffffff03837c37038841200341a8c1006a20034180c1006a41021071200341900d6a2015420020032903a841220b420010ce0820034190106a2014420020032903b041221842137e420010ce08200341c00f6a200f420020032903b841221942137e2208420010ce08200341f00e6a200c420020032903c041221b42137e2213420010ce08200341a00e6a2016420020032903c841221242137e221a420010ce08200341a00d6a20164200200b420010ce0820034180106a201542002018420010ce08200341b00f6a201442002008420010ce08200341e00e6a200f42002013420010ce08200341900e6a200c4200201a420010ce08200341b00d6a200c4200200b420010ce08200341f00f6a201642002018420010ce08200341a00f6a201542002019420010ce08200341d00e6a201442002013420010ce08200341800e6a200f4200201a420010ce08200341c00d6a200f4200200b420010ce08200341e00f6a200c42002018420010ce08200341900f6a201642002019420010ce08200341c00e6a20154200201b420010ce08200341f00d6a20144200201a420010ce08200341d00d6a20144200200b420010ce08200341d00f6a200f42002018420010ce08200341800f6a200c42002019420010ce08200341b00e6a20164200201b420010ce08200341e00d6a201542002012420010ce08200341f0096a20032903d00f221c20032903800f7c220c20032903d00d7c220f20032903e00d7c221420032903b00e7c221520032903c00d221d20032903e00f7c221620032903f00d7c220b20032903c00e7c221820032903900f7c221920032903800e221e20032903b00d7c221a20032903d00e7c221b20032903a00f7c221320032903f00f7c220820032903e00e221f20032903900e7c221220032903b00f7c22172003290380107c222020032903a00d7c222120032903c00f222220032903f00e7c22232003290390107c222420032903900d7c222520032903a00e7c2226423388200341c00f6a41086a290300200341f00e6a41086a2903007c2023202254ad7c20034190106a41086a2903007c2024202354ad7c200341900d6a41086a2903007c2025202454ad7c200341a00e6a41086a2903007c2026202554ad7c420d86847c2223423388200341e00e6a41086a290300200341900e6a41086a2903007c2012201f54ad7c200341b00f6a41086a2903007c2017201254ad7c20034180106a41086a2903007c2020201754ad7c200341a00d6a41086a2903007c2021202054ad7c2023202154ad7c420d86847c2212423388200341800e6a41086a290300200341b00d6a41086a2903007c201a201e54ad7c200341d00e6a41086a2903007c201b201a54ad7c200341a00f6a41086a2903007c2013201b54ad7c200341f00f6a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a423388200341c00d6a41086a290300200341e00f6a41086a2903007c2016201d54ad7c200341f00d6a41086a2903007c200b201654ad7c200341c00e6a41086a2903007c2018200b54ad7c200341900f6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2218423388200341d00f6a41086a290300200341800f6a41086a2903007c200c201c54ad7c200341d00d6a41086a2903007c200f200c54ad7c200341e00d6a41086a2903007c2014200f54ad7c200341b00e6a41086a2903007c2015201454ad7c2018201554ad7c420d868442137e202642ffffffffffffff03837c222742ffffffffffffff0383220c420020032903e032222820032903d0347c220f20032903a00b7c22142003290390327c221520032903a0337c221620032903e033222920032903e0347c220b20032903800c7c221920032903a0327c221b20032903f0327c221320032903f033222a20032903f0347c220820032903b0337c221720032903e00c7c222020032903b0327c222120032903c033222b2003290380347c22242003290380337c222520032903f00c7c22262003290380357c221c200329039033222c20032903d0337c221d20032903800d7c221e20032903c0327c221f2003290390347c222242338820034190336a41086a290300200341d0336a41086a2903007c201d202c54ad7c200341800d6a41086a2903007c201e201d54ad7c200341c0326a41086a2903007c201f201e54ad7c20034190346a41086a2903007c2022201f54ad7c420d86847c221d423388200341c0336a41086a29030020034180346a41086a2903007c2024202b54ad7c20034180336a41086a2903007c2025202454ad7c200341f00c6a41086a2903007c2026202554ad7c20034180356a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341f0336a41086a290300200341f0346a41086a2903007c2008202a54ad7c200341b0336a41086a2903007c2017200854ad7c200341e00c6a41086a2903007c2020201754ad7c200341b0326a41086a2903007c2021202054ad7c2024202154ad7c420d86847c2208423388200341e0336a41086a290300200341e0346a41086a2903007c200b202954ad7c200341800c6a41086a2903007c2019200b54ad7c200341a0326a41086a2903007c201b201954ad7c200341f0326a41086a2903007c2013201b54ad7c2008201354ad7c420d86847c220b423388200341e0326a41086a290300200341d0346a41086a2903007c200f202854ad7c200341a00b6a41086a2903007c2014200f54ad7c20034190326a41086a2903007c2015201454ad7c200341a0336a41086a2903007c2016201554ad7c200b201654ad7c420d868442137e202242ffffffffffffff03837c221742ffffffffffffff0383220f420010ce08200341900b6a200b42ffffffffffffff0383221442002027423388202342ffffffffffffff03837c221542137e420010ce08200341f00b6a200842ffffffffffffff038322164200201242ffffffffffffff0383221942137e2208420010ce08200341d00c6a202442ffffffffffffff0383220b4200201a42ffffffffffffff0383221b42137e2213420010ce08200341c00a6a201842ffffffffffffff0383221242137e221a42002017423388201d42ffffffffffffff03837c2218420010ce08200341b00a6a200c42002018420010ce08200341e0096a20154200200f420010ce08200341800b6a201442002008420010ce08200341e00b6a201642002013420010ce08200341c00c6a200b4200201a420010ce08200341b00c6a200b4200200c420010ce08200341a00a6a201542002018420010ce08200341d0096a20194200200f420010ce08200341f00a6a201442002013420010ce08200341d00b6a20164200201a420010ce08200341c00b6a20164200200c420010ce08200341a00c6a200b42002015420010ce08200341900a6a201942002018420010ce08200341c0096a201b4200200f420010ce08200341e00a6a20144200201a420010ce08200341d00a6a20144200200c420010ce08200341b00b6a201642002015420010ce08200341900c6a200b42002019420010ce08200341800a6a201b42002018420010ce08200341b0096a20124200200f420010ce08200320032903f00a221220032903d0097c220c20032903d00b7c220f20032903b00c7c221420032903a00a7c221520032903e00b221720032903800b7c221620032903c00c7c220b20032903b00a7c221820032903e0097c221920032903d00c222020032903f00b7c221a20032903c00a7c221b20032903f0097c221320032903900b7c2208423388200341d00c6a41086a290300200341f00b6a41086a2903007c201a202054ad7c200341c00a6a41086a2903007c201b201a54ad7c200341f0096a41086a2903007c2013201b54ad7c200341900b6a41086a2903007c2008201354ad7c221b420d86847c221a423388200341e00b6a41086a290300200341800b6a41086a2903007c2016201754ad7c200341c00c6a41086a2903007c200b201654ad7c200341b00a6a41086a2903007c2018200b54ad7c200341e0096a41086a2903007c2019201854ad7c201b4233887c201a201954ad7c2213420d86847c221642ffffffffffffff03833703e840200320032903c009221720032903900a7c220b20032903e00a7c221820032903c00b7c221920032903a00c7c221b2016423388200341f00a6a41086a290300200341d0096a41086a2903007c200c201254ad7c200341d00b6a41086a2903007c200f200c54ad7c200341b00c6a41086a2903007c2014200f54ad7c200341a00a6a41086a2903007c2015201454ad7c20134233887c2016201554ad7c2213420d86847c220c42ffffffffffffff03833703f040200320032903800a221220032903900c7c220f20032903b0097c221420032903d00a7c221520032903b00b7c2216200c423388200341c0096a41086a290300200341900a6a41086a2903007c200b201754ad7c200341e00a6a41086a2903007c2018200b54ad7c200341c00b6a41086a2903007c2019201854ad7c200341a00c6a41086a2903007c201b201954ad7c20134233887c200c201b54ad7c220b420d86847c220c42ffffffffffffff03833703f8402003200c423388200341800a6a41086a290300200341900c6a41086a2903007c200f201254ad7c200341b0096a41086a2903007c2014200f54ad7c200341d00a6a41086a2903007c2015201454ad7c200341b00b6a41086a2903007c2016201554ad7c200b4233887c200c201654ad7c420d868442137e200842ffffffffffffff03837c220c42ffffffffffffff03833703d8402003200c423388201a42ffffffffffffff03837c3703e040200341a8c1006a200341d8c0006a41011071200341a0066a20032903a841220c42002004420010ce08200341a0096a20032903b041220f42137e42002010420010ce08200341d0086a20032903b841221442137e22184200200d420010ce0820034180086a20032903c041221642137e220b4200200a420010ce08200341b0076a20032903c841221942137e221542002007420010ce08200341b0066a200c42002007420010ce0820034190096a200f42002004420010ce08200341c0086a201842002010420010ce08200341f0076a200b4200200d420010ce08200341a0076a20154200200a420010ce08200341c0066a200c4200200a420010ce0820034180096a200f42002007420010ce08200341b0086a201442002004420010ce08200341e0076a200b42002010420010ce0820034190076a20154200200d420010ce08200341d0066a200c4200200d420010ce08200341f0086a200f4200200a420010ce08200341a0086a201442002007420010ce08200341d0076a201642002004420010ce0820034180076a201542002010420010ce08200341e0066a200c42002010420010ce08200341e0086a200f4200200d420010ce0820034190086a20144200200a420010ce08200341c0076a201642002007420010ce08200341f0066a201942002004420010ce08200320032903b00822102003290380097c220420032903e0077c22072003290390077c220a20032903c0067c220c20032903c008221a2003290390097c220f20032903f0077c221420032903a0077c221520032903b0067c221620032903d008221b20032903a0097c220b2003290380087c220d20032903a0067c221820032903b0077c2219423388200341d0086a41086a290300200341a0096a41086a2903007c200b201b54ad7c20034180086a41086a2903007c200d200b54ad7c200341a0066a41086a2903007c2018200d54ad7c200341b0076a41086a2903007c2019201854ad7c420d86847c220b423388200341c0086a41086a29030020034190096a41086a2903007c200f201a54ad7c200341f0076a41086a2903007c2014200f54ad7c200341a0076a41086a2903007c2015201454ad7c200341b0066a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42ffffffffffffff038337039041200320032903a008221820032903f0087c221420032903d0077c22152003290380077c221620032903d0067c220d200f423388200341b0086a41086a29030020034180096a41086a2903007c2004201054ad7c200341e0076a41086a2903007c2007200454ad7c20034190076a41086a2903007c200a200754ad7c200341c0066a41086a2903007c200c200a54ad7c200f200c54ad7c420d86847c220442ffffffffffffff0383370398412003200329039008221020032903e0087c220720032903c0077c220a20032903f0067c220c20032903e0067c220f2004423388200341a0086a41086a290300200341f0086a41086a2903007c2014201854ad7c200341d0076a41086a2903007c2015201454ad7c20034180076a41086a2903007c2016201554ad7c200341d0066a41086a2903007c200d201654ad7c2004200d54ad7c420d86847c220442ffffffffffffff03833703a0412003200442338820034190086a41086a290300200341e0086a41086a2903007c2007201054ad7c200341c0076a41086a2903007c200a200754ad7c200341f0066a41086a2903007c200c200a54ad7c200341e0066a41086a2903007c200f200c54ad7c2004200f54ad7c420d868442137e201942ffffffffffffff03837c220442ffffffffffffff03833703804120032004423388200b42ffffffffffffff03837c37038841200341b0c0006a20034180c1006a106e20034188c0006a2001106e410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f73418001714107761070202d71212d200241016a22024120470d000b202d1070212f200341a8c1006a41086a42f0ffffffffffff3f200141086a2903007d220442ffffffffffffff038342d0fdffffffffff3f20012903007d22074233887c370300200341a8c1006a41106a42f0ffffffffffff3f200141106a2903007d220a42ffffffffffffff038320044233887c370300200341a8c1006a41186a42f0ffffffffffff3f200141186a2903007d220442ffffffffffffff0383200a4233887c370300200341a8c1006a41206a42f0ffffffffffff3f200141206a2903007d220a42ffffffffffffff038320044233887c3703002003200a42338842137e200742ffffffffffffff03837c3703a841200341b0c0006a20034180c1006a106e20034188c0006a200341a8c1006a106e410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f73418001714107761070202d71212d200241016a22024120470d000b200341a0046a42f0ffffffffffff3f200e7d220742338842137e42d0fdffffffffff3f20117d220e42ffffffffffffff03837c2204420042b0c1bad0f4e48603420010ce08200341d0036a42f0ffffffffffff3f20057d220a423388200742ffffffffffffff03837c2207420042a7a7fbf49beaf607420010ce08200341f0046a42f0ffffffffffff3f20067d2211423388200a42ffffffffffffff03837c220a420042a0d69f90da80b1cb00420010ce08200341c0056a42f0ffffffffffff3f20097d2205423388201142ffffffffffffff03837c2211420042badf96dcb5c3bac700420010ce0820034190066a200542ffffffffffffff0383200e4233887c220e420042a7ecfac2b5f7ea19420010ce0820034180066a200e420042b0c1bad0f4e48603420010ce0820034190046a20044200429db1bce4dfb435420010ce08200341c0036a2007420042a0d69f90da80b1cb00420010ce08200341e0046a200a420042badf96dcb5c3bac700420010ce08200341b0056a2011420042a7ecfac2b5f7ea19420010ce08200341a0056a2011420042b0c1bad0f4e48603420010ce08200341f0056a200e4200429db1bce4dfb435420010ce0820034180046a2004420042e098f4e5e9ebfb03420010ce08200341b0036a2007420042badf96dcb5c3bac700420010ce08200341d0046a200a420042a7ecfac2b5f7ea19420010ce08200341c0046a200a420042b0c1bad0f4e48603420010ce0820034190056a20114200429db1bce4dfb435420010ce08200341e0056a200e420042e098f4e5e9ebfb03420010ce08200341f0036a20044200429e9981b4dab2e103420010ce08200341a0036a2007420042a7ecfac2b5f7ea19420010ce0820034190036a2007420042b0c1bad0f4e48603420010ce08200341b0046a200a4200429db1bce4dfb435420010ce0820034180056a2011420042e098f4e5e9ebfb03420010ce08200341d0056a200e4200429e9981b4dab2e103420010ce08200341e0036a20044200429df893c0a486ae01420010ce08200341c0036a41086a290300211820034190046a41086a290300211920032903c00321042003290390042109200341e0046a41086a290300211020032903e004210c200341b0056a41086a290300211a20032903b005210f20034180066a41086a290300211b2003290380062114200341d0036a41086a2903002113200341a0046a41086a290300210820032903d003210720032903a0042115200341f0046a41086a290300211220032903f0042116200341c0056a41086a290300211720032903c005210b20034190066a41086a2903002120200329039006210d20032903b003210a200329038004211120032903d004210e20032903a005210520032903f0052106202d10702101200320062005200e200a20117c22117c220e7c22057c22062014200f200c200420097c22097c220c7c220f7c2214200d200b2016200720157c22157c22167c220b7c220d423388202020172012201320087c2015200754ad7c7c2016201554ad7c7c200b201654ad7c7c200d200b54ad7c2215420d86847c2207423388201b201a2010201820197c2009200454ad7c7c200c200954ad7c7c200f200c54ad7c7c2014200f54ad7c20154233887c2007201454ad7c2215420d86847c220442ffffffffffffff03833703b841200320032903a003221620032903f0037c220920032903c0047c220c2003290390057c220f20032903e0057c22142004423388200341b0036a41086a29030020034180046a41086a2903007c2011200a54ad7c200341d0046a41086a2903007c200e201154ad7c200341a0056a41086a2903007c2005200e54ad7c200341f0056a41086a2903007c2006200554ad7c20154233887c2004200654ad7c2206420d86847c220442ffffffffffffff03833703c0412003200329039003221520032903e0037c220a20032903b0047c22112003290380057c220e20032903d0057c22052004423388200341a0036a41086a290300200341f0036a41086a2903007c2009201654ad7c200341c0046a41086a2903007c200c200954ad7c20034190056a41086a2903007c200f200c54ad7c200341e0056a41086a2903007c2014200f54ad7c20064233887c2004201454ad7c2206420d86847c220442ffffffffffffff03833703c8412003200442338820034190036a41086a290300200341e0036a41086a2903007c200a201554ad7c200341b0046a41086a2903007c2011200a54ad7c20034180056a41086a2903007c200e201154ad7c200341d0056a41086a2903007c2005200e54ad7c20064233887c2004200554ad7c420d868442137e200d42ffffffffffffff03837c220442ffffffffffffff03833703a84120032004423388200742ffffffffffffff03837c3703b041200341b0c0006a20034180c1006a106e20034188c0006a200341a8c1006a106e410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f73418001714107761070202d71212d200241016a22024120470d000b202d1070210220034180036a20032903d8402204420042b0c1bad0f4e48603420010ce08200320032903e040220742137e4200429df893c0a486ae01420010ce08200341e0006a20032903e840220a42137e22064200429e9981b4dab2e103420010ce08200341c0016a20032903f040220e42137e2205420042e098f4e5e9ebfb03420010ce08200341a0026a20032903f840220942137e22114200429db1bce4dfb435420010ce08200341f0026a20044200429db1bce4dfb435420010ce08200341c0006a2007420042b0c1bad0f4e48603420010ce08200341d0006a20064200429df893c0a486ae01420010ce08200341b0016a20054200429e9981b4dab2e103420010ce0820034190026a2011420042e098f4e5e9ebfb03420010ce08200341e0026a2004420042e098f4e5e9ebfb03420010ce08200341306a20074200429db1bce4dfb435420010ce0820034190016a200a420042b0c1bad0f4e48603420010ce08200341a0016a20054200429df893c0a486ae01420010ce0820034180026a20114200429e9981b4dab2e103420010ce08200341d0026a20044200429e9981b4dab2e103420010ce08200341206a2007420042e098f4e5e9ebfb03420010ce0820034180016a200a4200429db1bce4dfb435420010ce08200341e0016a200e420042b0c1bad0f4e48603420010ce08200341f0016a20114200429df893c0a486ae01420010ce08200341c0026a20044200429df893c0a486ae01420010ce08200341106a20074200429e9981b4dab2e103420010ce08200341f0006a200a420042e098f4e5e9ebfb03420010ce08200341d0016a200e4200429db1bce4dfb435420010ce08200341b0026a2009420042b0c1bad0f4e48603420010ce082003200420042003290370220820032903107c220720032903d0017c220a20032903b0027c221120032903c0027c220e200329038001221220032903207c220520032903e0017c220620032903f0017c220920032903d0027c220c200329039001221720032903307c220f20032903a0017c22142003290380027c221520032903e0027c22162003290350222020032903407c220b20032903b0017c220d2003290390027c221820032903f0027c22192003290360222120032903007c221020032903c0017c221a2003290380037c221b20032903a0027c2213423388200341e0006a41086a290300200341086a2903007c2010202154ad7c200341c0016a41086a2903007c201a201054ad7c20034180036a41086a2903007c201b201a54ad7c200341a0026a41086a2903007c2013201b54ad7c420d86847c2210423388200341d0006a41086a290300200341c0006a41086a2903007c200b202054ad7c200341b0016a41086a2903007c200d200b54ad7c20034190026a41086a2903007c2018200d54ad7c200341f0026a41086a2903007c2019201854ad7c2010201954ad7c420d86847c220b42338820034190016a41086a290300200341306a41086a2903007c200f201754ad7c200341a0016a41086a2903007c2014200f54ad7c20034180026a41086a2903007c2015201454ad7c200341e0026a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42338820034180016a41086a290300200341206a41086a2903007c2005201254ad7c200341e0016a41086a2903007c2006200554ad7c200341f0016a41086a2903007c2009200654ad7c200341d0026a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c2205423388200341f0006a41086a290300200341106a41086a2903007c2007200854ad7c200341d0016a41086a2903007c200a200754ad7c200341b0026a41086a2903007c2011200a54ad7c200341c0026a41086a2903007c200e201154ad7c2005200e54ad7c420d868442137e201342ffffffffffffff03837c221142ffffffffffffff038385420020022001721070ad42ff01837d22078385220a3703d84020032011423388201042ffffffffffffff03837c20032903e04022048520078320048522113703e0402003200542ffffffffffffff038320032903f840220485200783200485220e3703f8402003200f42ffffffffffffff038320032903f04022048520078320048522053703f0402003200b42ffffffffffffff038320032903e84022048520078320048522073703e84020034188c0006a200341d8c0006a106e200342f0ffffffffffff3f200e7d220642ffffffffffffff038342f0ffffffffffff3f20057d22094233887c200e85420020032d0088404101711070ad42ff01837d220483200e853703f8402003200942ffffffffffffff038342f0ffffffffffff3f20077d220e4233887c2005852004832005853703f0402003200e42ffffffffffffff038342f0ffffffffffff3f20117d220e4233887c2007852004832007853703e8402003200e42ffffffffffffff038342d0fdffffffffff3f200a7d22074233887c2011852004832011853703e0402003200642338842137e200742ffffffffffffff03837c200a85200483200a853703d84020002001202f7210703a0000200020032903d840370308200041106a20032903e040370300200041186a20032903e840370300200041206a20032903f040370300200041286a20032903f840370300200341d0c1006a24000bd003011a7e200131001221022001310011210320013100102104200131000f2105200131000d2106200131000e2107200131001f2108200131001e2109200131001d210a200131001c210b200131001b210c200131001a210d200131000c210e200131000b210f200131000a21102001310009211120013100072112200131000821132001310019211420013100182115200131001721162001310016211720013100132118200131001421192001310015211a200020013500002001310004422086842001310005422886842001310006221b4230868442ffffffffffffff038337030020002018201942088684201a4210868420174218868420164220868420154228868420144230868442018842ffffffffffffff03833703182000201b201242088684201342108684201142188684201042208684200f42288684200e4230868442038842ffffffffffffff038337030820002015201442088684200d42108684200c42188684200b42208684200a42288684200942308684200842388684420c8842ffffffffffffff03833703202000200e20064208868420074210868420054218868420044220868420034228868420024230868420184238868442068842ffffffffffffff03833703100ba5990104017f237e057f0d7e230041f02b6b22022400200242003703e028200242013703d828200242003703e828200242003703f028200242003703f828200241c82a6a200141011071200241c8256a20022903c82a2203420042b0c1bad0f4e48603420010ce08200241c8286a20022903d02a220442137e4200429df893c0a486ae01420010ce08200241f8276a20022903d82a220542137e22064200429e9981b4dab2e103420010ce08200241a8276a20022903e02a220742137e2208420042e098f4e5e9ebfb03420010ce08200241d8266a20022903e82a220942137e220a4200429db1bce4dfb435420010ce08200241d8256a20034200429db1bce4dfb435420010ce08200241b8286a2004420042b0c1bad0f4e48603420010ce08200241e8276a20064200429df893c0a486ae01420010ce0820024198276a20084200429e9981b4dab2e103420010ce08200241c8266a200a420042e098f4e5e9ebfb03420010ce08200241e8256a2003420042e098f4e5e9ebfb03420010ce08200241a8286a20044200429db1bce4dfb435420010ce08200241d8276a2005420042b0c1bad0f4e48603420010ce0820024188276a20084200429df893c0a486ae01420010ce08200241b8266a200a4200429e9981b4dab2e103420010ce08200241f8256a20034200429e9981b4dab2e103420010ce0820024198286a2004420042e098f4e5e9ebfb03420010ce08200241c8276a20054200429db1bce4dfb435420010ce08200241f8266a2007420042b0c1bad0f4e48603420010ce08200241a8266a200a4200429df893c0a486ae01420010ce0820024188266a20034200429df893c0a486ae01420010ce0820024188286a20044200429e9981b4dab2e103420010ce08200241b8276a2005420042e098f4e5e9ebfb03420010ce08200241e8266a20074200429db1bce4dfb435420010ce0820024198266a2009420042b0c1bad0f4e48603420010ce08200241b81d6a200229038826220b2002290398267c22032002290388287c220420022903b8277c220520022903e8267c220a20022903a826220c20022903f8267c220720022903f8257c22082002290398287c220620022903c8277c2209200229038827220d20022903d8277c220e20022903b8267c220f20022903e8257c221020022903a8287c221120022903e827221220022903b8287c22132002290398277c221420022903c8267c221520022903d8257c221620022903c828221720022903c8257c221820022903f8277c221920022903a8277c221a20022903d8267c221b423388200241c8286a41086a290300200241c8256a41086a2903007c2018201754ad7c200241f8276a41086a2903007c2019201854ad7c200241a8276a41086a2903007c201a201954ad7c200241d8266a41086a2903007c201b201a54ad7c420d86847c2218423388200241e8276a41086a290300200241b8286a41086a2903007c2013201254ad7c20024198276a41086a2903007c2014201354ad7c200241c8266a41086a2903007c2015201454ad7c200241d8256a41086a2903007c2016201554ad7c2018201654ad7c420d86847c221342338820024188276a41086a290300200241d8276a41086a2903007c200e200d54ad7c200241b8266a41086a2903007c200f200e54ad7c200241e8256a41086a2903007c2010200f54ad7c200241a8286a41086a2903007c2011201054ad7c2013201154ad7c420d86847c220e423388200241a8266a41086a290300200241f8266a41086a2903007c2007200c54ad7c200241f8256a41086a2903007c2008200754ad7c20024198286a41086a2903007c2006200854ad7c200241c8276a41086a2903007c2009200654ad7c200e200954ad7c420d86847c220742338820024188266a41086a29030020024198266a41086a2903007c2003200b54ad7c20024188286a41086a2903007c2004200354ad7c200241b8276a41086a2903007c2005200454ad7c200241e8266a41086a2903007c200a200554ad7c2007200a54ad7c420d868442137e201b42ffffffffffffff03837c220442ffffffffffffff0383220320022903d8287c2208420042f682ffa299b88202420010ce08200241d81c6a200742ffffffffffffff0383220720022903f8287c2206420042ddf396f0fbf7b9c300420010ce08200241e81c6a200e42ffffffffffffff0383220a20022903f0287c2209420042ccf7d9e9fbcee010420010ce0820024188236a201342ffffffffffffff0383220520022903e8287c220e4200428df582a3b0868004420010ce08200241e8216a2004423388201842ffffffffffffff03837c220420022903e0287c220f4200429aebd0c282f1c201420010ce08200241f8216a200f420042f682ffa299b88202420010ce08200241c81d6a2008420042cff887b5bcb5c603420010ce08200241c81c6a2006420042ccf7d9e9fbcee010420010ce08200241f81c6a20094200428df582a3b0868004420010ce0820024198236a200e4200429aebd0c282f1c201420010ce08200241a8236a200e420042f682ffa299b88202420010ce0820024188226a200f420042cff887b5bcb5c603420010ce08200241d81d6a2008420042848dc885f9eff000420010ce08200241b81c6a20064200428df582a3b0868004420010ce08200241881d6a20094200429aebd0c282f1c201420010ce08200241981d6a2009420042f682ffa299b88202420010ce08200241b8236a200e420042cff887b5bcb5c603420010ce0820024198226a200f420042848dc885f9eff000420010ce08200241e81d6a2008420042dfddd7d2ccf91a420010ce08200241a81c6a20064200429aebd0c282f1c201420010ce08200241981c6a2006420042f682ffa299b88202420010ce08200241a81d6a2009420042cff887b5bcb5c603420010ce08200241c8236a200e420042848dc885f9eff000420010ce08200241a8226a200f420042dfddd7d2ccf91a420010ce08200241f81d6a2008420042bed6acd4f2a00a420010ce08200220022903b81c221920022903d81d7c220820022903881d7c220620022903a8237c22092002290388227c220e20022903c81c221a20022903c81d7c220f20022903f81c7c22102002290398237c221120022903f8217c221320022903d81c221b20022903b81d7c221420022903e81c7c22152002290388237c221620022903e8217c2218423388200241d81c6a41086a290300200241b81d6a41086a2903007c2014201b54ad7c200241e81c6a41086a2903007c2015201454ad7c20024188236a41086a2903007c2016201554ad7c200241e8216a41086a2903007c2018201654ad7c420d86847c2214423388200241c81c6a41086a290300200241c81d6a41086a2903007c200f201a54ad7c200241f81c6a41086a2903007c2010200f54ad7c20024198236a41086a2903007c2011201054ad7c200241f8216a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f42ffffffffffffff038337039029200220022903a81c221620022903e81d7c221020022903981d7c221120022903b8237c22132002290398227c2215200f423388200241b81c6a41086a290300200241d81d6a41086a2903007c2008201954ad7c200241881d6a41086a2903007c2006200854ad7c200241a8236a41086a2903007c2009200654ad7c20024188226a41086a2903007c200e200954ad7c200f200e54ad7c420d86847c220842ffffffffffffff038337039829200220022903981c221920022903f81d7c220620022903a81d7c220920022903c8237c220e20022903a8227c220f2008423388200241a81c6a41086a290300200241e81d6a41086a2903007c2010201654ad7c200241981d6a41086a2903007c2011201054ad7c200241b8236a41086a2903007c2013201154ad7c20024198226a41086a2903007c2015201354ad7c2008201554ad7c420d86847c220842ffffffffffffff03833703a02920022008423388200241981c6a41086a290300200241f81d6a41086a2903007c2006201954ad7c200241a81d6a41086a2903007c2009200654ad7c200241c8236a41086a2903007c200e200954ad7c200241a8226a41086a2903007c200f200e54ad7c2008200f54ad7c420d868442137e201842ffffffffffffff03837c220842ffffffffffffff03833703802920022008423388201442ffffffffffffff03837c37038829200241d8216a2003420042a3f1e59aa1b9d301420010ce08200241f8226a200442137e221c420042ffed8af7ec86c802420010ce08200241e8236a200542137e2210420042bbf9809de6b8ce03420010ce0820024198246a200a42137e2211420042a9808780a6f4f902420010ce08200241d8246a200742137e2208420042bdddd5d88385ea00420010ce08200241c8216a2003420042bdddd5d88385ea00420010ce08200241e8226a2004420042a3f1e59aa1b9d301420010ce08200241d8236a2010420042ffed8af7ec86c802420010ce0820024188246a2011420042bbf9809de6b8ce03420010ce08200241c8246a2008420042a9808780a6f4f902420010ce08200241b8216a2003420042a9808780a6f4f902420010ce08200241d8226a2004420042bdddd5d88385ea00420010ce08200241e8246a2005420042a3f1e59aa1b9d301420010ce08200241f8236a2011420042ffed8af7ec86c802420010ce08200241b8246a2008420042bbf9809de6b8ce03420010ce08200241a8216a2003420042bbf9809de6b8ce03420010ce08200241c8226a2004420042a9808780a6f4f902420010ce08200241f8246a2005420042bdddd5d88385ea00420010ce0820024198256a200a420042a3f1e59aa1b9d301420010ce08200241a8246a2008420042ffed8af7ec86c802420010ce08200241d8206a2003420042ffed8af7ec86c802420010ce08200241b8226a2004420042bbf9809de6b8ce03420010ce0820024188256a2005420042a9808780a6f4f902420010ce08200241a8256a200a420042bdddd5d88385ea00420010ce08200241b8256a2007420042a3f1e59aa1b9d301420010ce08200241881e6a200342a3f1e59aa1b9d3017c2206420042efffffffffffffc30020022903d820221d20022903b8257c220920022903b8227c220e2002290388257c220f20022903a8257c221320022903a824221e2002290398257c221420022903a8217c221520022903c8227c221620022903f8247c221820022903f823221f20022903e8247c221920022903b8247c221a20022903b8217c221b20022903d8227c220b20022903d823222020022903e8227c220c2002290388247c220d20022903c8247c221220022903c8217c221720022903f822222120022903d8217c222220022903e8237c22232002290398247c222420022903d8247c2225423388200241f8226a41086a290300200241d8216a41086a2903007c2022202154ad7c200241e8236a41086a2903007c2023202254ad7c20024198246a41086a2903007c2024202354ad7c200241d8246a41086a2903007c2025202454ad7c420d86847c2222423388200241d8236a41086a290300200241e8226a41086a2903007c200c202054ad7c20024188246a41086a2903007c200d200c54ad7c200241c8246a41086a2903007c2012200d54ad7c200241c8216a41086a2903007c2017201254ad7c2022201754ad7c420d86847c220c423388200241f8236a41086a290300200241e8246a41086a2903007c2019201f54ad7c200241b8246a41086a2903007c201a201954ad7c200241b8216a41086a2903007c201b201a54ad7c200241d8226a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241a8246a41086a29030020024198256a41086a2903007c2014201e54ad7c200241a8216a41086a2903007c2015201454ad7c200241c8226a41086a2903007c2016201554ad7c200241f8246a41086a2903007c2018201654ad7c2019201854ad7c420d86847c221442ffffffffffffff03837d221542338842137e42bcfdffffffffffc3002014423388200241d8206a41086a290300200241b8256a41086a2903007c2009201d54ad7c200241b8226a41086a2903007c200e200954ad7c20024188256a41086a2903007c200f200e54ad7c200241a8256a41086a2903007c2013200f54ad7c2014201354ad7c420d868442137e202542ffffffffffffff03837c221342ffffffffffffff03837d221642ffffffffffffff03837c2209420010ce08200241881f6a201542ffffffffffffff038342efffffffffffffc300201942ffffffffffffff03837d220f4233887c220e4200201c4287f0dc94c6dfde0f7c420010ce0820024198216a200f42ffffffffffffff038342efffffffffffffc300200c42ffffffffffffff03837d22144233887c220f42002010428b868581d2a18c387c2215420010ce08200241c8206a201442ffffffffffffff038342efffffffffffffc3002013423388202242ffffffffffffff03837c7d22134233887c22104200201142e18392a796b7d2c4007c2214420010ce0820024188206a201342ffffffffffffff038320164233887c22114200200842eda9ced69582d9307c2208420010ce08200241981e6a201142002006420010ce08200241c81f6a20094200200442bdddd5d88385ea007c2213420010ce08200241f81e6a200e42002015420010ce0820024188216a200f42002014420010ce08200241b8206a201042002008420010ce08200241a81e6a201042002006420010ce08200241f81f6a201142002013420010ce08200241b81f6a20094200200542a9808780a6f4f9027c2215420010ce08200241e81e6a200e42002014420010ce08200241f8206a200f42002008420010ce08200241b81e6a200f42002006420010ce08200241a8206a201042002013420010ce08200241e81f6a201142002015420010ce08200241a81f6a20094200200a42bbf9809de6b8ce037c2214420010ce08200241d81e6a200e42002008420010ce08200241c81e6a200e42002006420010ce08200241e8206a200f42002013420010ce0820024198206a201042002015420010ce08200241d81f6a201142002014420010ce08200241981f6a20094200200742ffed8af7ec86c8027c420010ce08200220022903e81e221920022903b81f7c220820022903f8207c220620022903a81e7c220920022903f81f7c220e20022903f81e221a20022903c81f7c220f2002290388217c221020022903b8207c221120022903981e7c221320022903881f221b20022903881e7c22142002290398217c221520022903c8207c22162002290388207c2218423388200241881f6a41086a290300200241881e6a41086a2903007c2014201b54ad7c20024198216a41086a2903007c2015201454ad7c200241c8206a41086a2903007c2016201554ad7c20024188206a41086a2903007c2018201654ad7c420d86847c2214423388200241f81e6a41086a290300200241c81f6a41086a2903007c200f201a54ad7c20024188216a41086a2903007c2010200f54ad7c200241b8206a41086a2903007c2011201054ad7c200241981e6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f42ffffffffffffff03833703e029200220022903d81e221620022903a81f7c221020022903b81e7c221120022903a8207c221320022903e81f7c2215200f423388200241e81e6a41086a290300200241b81f6a41086a2903007c2008201954ad7c200241f8206a41086a2903007c2006200854ad7c200241a81e6a41086a2903007c2009200654ad7c200241f81f6a41086a2903007c200e200954ad7c200f200e54ad7c420d86847c220842ffffffffffffff03833703e829200220022903c81e221920022903981f7c220620022903e8207c22092002290398207c220e20022903d81f7c220f2008423388200241d81e6a41086a290300200241a81f6a41086a2903007c2010201654ad7c200241b81e6a41086a2903007c2011201054ad7c200241a8206a41086a2903007c2013201154ad7c200241e81f6a41086a2903007c2015201354ad7c2008201554ad7c420d86847c220842ffffffffffffff03833703f02920022008423388200241c81e6a41086a290300200241981f6a41086a2903007c2006201954ad7c200241e8206a41086a2903007c2009200654ad7c20024198206a41086a2903007c200e200954ad7c200241d81f6a41086a2903007c200f200e54ad7c2008200f54ad7c420d868442137e201842ffffffffffffff03837c220842ffffffffffffff03833703d02920022008423388201442ffffffffffffff03837c3703d829200241c82a6a20024180296a200241d0296a107220022d00c82a2126200241a02a6a41206a2227200241f02a6a2903002208370300200241a02a6a41186a2228200241c82a6a41206a2903002206370300200241a02a6a41106a2229200241c82a6a41186a2903002209370300200241a02a6a41086a222a200241c82a6a41106a290300220e370300200220022903d02a220f3703a02a20024188196a200129030022104200200f420010ce08200241881c6a200842002001290308221142137e420010ce08200241b81b6a200642002001290310221342137e2218420010ce08200241e81a6a200942002001290318221542137e2216420010ce08200241981a6a200e42002001290320221942137e2214420010ce0820024198196a200e42002010420010ce08200241f81b6a200f42002011420010ce08200241a81b6a200842002018420010ce08200241d81a6a200642002016420010ce08200241881a6a200942002014420010ce08200241a8196a200942002010420010ce08200241e81b6a200e42002011420010ce08200241981b6a200f42002013420010ce08200241c81a6a200842002016420010ce08200241f8196a200642002014420010ce08200241b8196a200642002010420010ce08200241d81b6a200942002011420010ce08200241881b6a200e42002013420010ce08200241b81a6a200f42002015420010ce08200241e8196a200842002014420010ce08200241c8196a200842002010420010ce08200241c81b6a200642002011420010ce08200241f81a6a200942002013420010ce08200241a81a6a200e42002015420010ce08200241d8196a200f42002019420010ce08200220022903c819222220022903d8197c220820022903c81b7c220620022903f81a7c220920022903a81a7c220e20022903e819222320022903b81a7c220f20022903b8197c221020022903d81b7c221120022903881b7c221320022903c81a222420022903981b7c221420022903f8197c221520022903a8197c221620022903e81b7c221820022903a81b222520022903f81b7c221920022903d81a7c221a20022903881a7c221b2002290398197c220b20022903881c221c2002290388197c220c20022903b81b7c220d20022903e81a7c221220022903981a7c2217423388200241881c6a41086a29030020024188196a41086a2903007c200c201c54ad7c200241b81b6a41086a2903007c200d200c54ad7c200241e81a6a41086a2903007c2012200d54ad7c200241981a6a41086a2903007c2017201254ad7c420d86847c220c423388200241a81b6a41086a290300200241f81b6a41086a2903007c2019202554ad7c200241d81a6a41086a2903007c201a201954ad7c200241881a6a41086a2903007c201b201a54ad7c20024198196a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241c81a6a41086a290300200241981b6a41086a2903007c2014202454ad7c200241f8196a41086a2903007c2015201454ad7c200241a8196a41086a2903007c2016201554ad7c200241e81b6a41086a2903007c2018201654ad7c2019201854ad7c420d86847c2214423388200241e8196a41086a290300200241b81a6a41086a2903007c200f202354ad7c200241b8196a41086a2903007c2010200f54ad7c200241d81b6a41086a2903007c2011201054ad7c200241881b6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220f423388200241c8196a41086a290300200241d8196a41086a2903007c2008202254ad7c200241c81b6a41086a2903007c2006200854ad7c200241f81a6a41086a2903007c2009200654ad7c200241a81a6a41086a2903007c200e200954ad7c200f200e54ad7c420d868442137e201742ffffffffffffff03837c220842ffffffffffffff03833703f82a20022008423388200c42ffffffffffffff03837c22063703802b2002200f42ffffffffffffff038322093703982b2002201442ffffffffffffff0383220e3703902b2002201942ffffffffffffff0383220f3703882b200241c82a6a200241f82a6a106e20022d00c82a4101711070417f73410171107021012002200642f0ffffffffffff3f20067d221142ffffffffffffff038342d0fdffffffffff3f20022903f82a22107d22134233887c8542002001ad42ff01837d22088320068522063703802b2002200942f0ffffffffffff3f20097d221442ffffffffffffff038342f0ffffffffffff3f200e7d22154233887c8520088320098522093703982b2002200f42f0ffffffffffff3f200f7d221642ffffffffffffff038320114233887c85200883200f85220f3703882b200220102010201442338842137e201342ffffffffffffff03837c852008838522103703f82a2002200e201542ffffffffffffff038320164233887c85200883200e85220e3703902b2026417f73410171220110702126202a202a290300221120068542002026ad42ff01837d220883201185370300202920292903002206200f85200883200685370300202820282903002206200e85200883200685370300202720272903002206200985200883200685370300200220022903a02a22062010852008832006853703a02a200110702101200241c80f6a200720022903f8287d42f0ffffffffffff3f7c221142338842137e200320022903d8287d42d0fdffffffffff3f7c220942ffffffffffffff03837c22084200200342ecffffffffffff038542002001ad42ff01837d22038342ecffffffffffff03852206420010ce08200241880d6a200742ffffffffffffff038520038342ffffffffffffff038522074200200420022903e0287d42f0ffffffffffff3f7c220f42ffffffffffffff038320094233887c220942137e420010ce08200241d80d6a200a42ffffffffffffff038520038342ffffffffffffff0385220e4200200520022903e8287d42f0ffffffffffff3f7c221042ffffffffffffff0383200f4233887c220f42137e2213420010ce08200241a80e6a200542ffffffffffffff038520038342ffffffffffffff038522054200200a20022903f0287d42f0ffffffffffff3f7c221442ffffffffffffff038320104233887c220a42137e2210420010ce08200241f80e6a200442ffffffffffffff038520038342ffffffffffffff038522034200201142ffffffffffffff038320144233887c221142137e2204420010ce08200241e80e6a200342002008420010ce08200241b80f6a200642002009420010ce08200241f80c6a200742002013420010ce08200241c80d6a200e42002010420010ce08200241980e6a200542002004420010ce08200241880e6a200542002008420010ce08200241d80e6a200342002009420010ce08200241a80f6a20064200200f420010ce08200241e80c6a200742002010420010ce08200241b80d6a200e42002004420010ce08200241a80d6a200e42002008420010ce08200241f80d6a200542002009420010ce08200241c80e6a20034200200f420010ce08200241980f6a20064200200a420010ce08200241880c6a200742002004420010ce08200241a80b6a200742002008420010ce08200241980d6a200e42002009420010ce08200241e80d6a20054200200f420010ce08200241b80e6a20034200200a420010ce08200241880f6a200642002011420010ce08200241f8096a20022903a80b220b20022903880f7c220320022903980d7c220420022903e80d7c220520022903b80e7c220a20022903880c220c20022903980f7c220720022903a80d7c220820022903f80d7c220620022903c80e7c220920022903e80c220d20022903a80f7c220e20022903b80d7c220f20022903880e7c221020022903d80e7c221120022903f80c221220022903b80f7c221320022903c80d7c221420022903980e7c221520022903e80e7c221620022903880d221720022903c80f7c221820022903d80d7c221920022903a80e7c221a20022903f80e7c221b423388200241880d6a41086a290300200241c80f6a41086a2903007c2018201754ad7c200241d80d6a41086a2903007c2019201854ad7c200241a80e6a41086a2903007c201a201954ad7c200241f80e6a41086a2903007c201b201a54ad7c420d86847c2218423388200241f80c6a41086a290300200241b80f6a41086a2903007c2013201254ad7c200241c80d6a41086a2903007c2014201354ad7c200241980e6a41086a2903007c2015201454ad7c200241e80e6a41086a2903007c2016201554ad7c2018201654ad7c420d86847c2213423388200241e80c6a41086a290300200241a80f6a41086a2903007c200e200d54ad7c200241b80d6a41086a2903007c200f200e54ad7c200241880e6a41086a2903007c2010200f54ad7c200241d80e6a41086a2903007c2011201054ad7c2013201154ad7c420d86847c220e423388200241880c6a41086a290300200241980f6a41086a2903007c2007200c54ad7c200241a80d6a41086a2903007c2008200754ad7c200241f80d6a41086a2903007c2006200854ad7c200241c80e6a41086a2903007c2009200654ad7c200e200954ad7c420d86847c2207423388200241a80b6a41086a290300200241880f6a41086a2903007c2003200b54ad7c200241980d6a41086a2903007c2004200354ad7c200241e80d6a41086a2903007c2005200454ad7c200241b80e6a41086a2903007c200a200554ad7c2007200a54ad7c420d868442137e201b42ffffffffffffff03837c220842ffffffffffffff03832203420042a09ab5a7a4d5d602420010ce08200241980b6a200742ffffffffffffff03832204420042efabafe6f7c88835420010ce08200241f80b6a200e42ffffffffffffff03832205420042f8fb9b94e0ed8617420010ce08200241d80c6a201342ffffffffffffff0383220a4200428b83d98ea38bdb0a420010ce08200241c80a6a2008423388201842ffffffffffffff03837c2207420042e6c09290d28a8b35420010ce08200241b80a6a2007420042a09ab5a7a4d5d602420010ce08200241e8096a2003420042b5cccc99bcc0e502420010ce08200241880b6a2004420042f8fb9b94e0ed8617420010ce08200241e80b6a20054200428b83d98ea38bdb0a420010ce08200241c80c6a200a420042e6c09290d28a8b35420010ce08200241b80c6a200a420042a09ab5a7a4d5d602420010ce08200241a80a6a2007420042b5cccc99bcc0e502420010ce08200241d8096a2003420042a8f2a9fabaa79b01420010ce08200241f80a6a20044200428b83d98ea38bdb0a420010ce08200241d80b6a2005420042e6c09290d28a8b35420010ce08200241c80b6a2005420042a09ab5a7a4d5d602420010ce08200241a80c6a200a420042b5cccc99bcc0e502420010ce08200241980a6a2007420042a8f2a9fabaa79b01420010ce08200241c8096a2003420042a9afa6f3e694c800420010ce08200241e80a6a2004420042e6c09290d28a8b35420010ce08200241d80a6a2004420042a09ab5a7a4d5d602420010ce08200241b80b6a2005420042b5cccc99bcc0e502420010ce08200241980c6a200a420042a8f2a9fabaa79b01420010ce08200241880a6a2007420042a9afa6f3e694c800420010ce08200241b8096a2003420042c2cdbdbdb3d1e502420010ce0820022903f029210f20022903e829210e20022903e029210520022903d829210320022903d0292104200241a02b6a200241a02a6a41011071200241c82b6a41106a220120292903002207370300200241c82b6a41086a202a290300220a200a7c220a3703002001200720077c2207370300200241c82b6a41186a2028290300220820087c2208370300200241c82b6a41206a2027290300220620067c2206370300200220022903a02a220920097c22093703c82b200241c8176a200442002009420010ce08200241b8176a20064200200342137e420010ce08200241c8166a20084200200542137e2213420010ce0820024188186a20074200200e42137e2211420010ce08200241b8166a200a4200200f42137e2210420010ce08200241c8186a200a42002004420010ce08200241d8176a200942002003420010ce08200241a8176a200642002013420010ce08200241d8166a200842002011420010ce08200241a8166a200742002010420010ce0820024198186a200742002004420010ce08200241d8186a200a42002003420010ce08200241e8176a200942002005420010ce0820024198176a200642002011420010ce0820024198166a200842002010420010ce08200241e8166a200842002004420010ce08200241a8186a200742002003420010ce08200241e8186a200a42002005420010ce08200241f8176a20094200200e420010ce08200241e8146a200642002010420010ce0820024188176a200642002004420010ce08200241f8166a200842002003420010ce08200241b8186a200742002005420010ce08200241f8186a200a4200200e420010ce08200241b8136a20094200200f420010ce08200241e8066a20022903d80a222220022903b8097c220a20022903b80b7c220720022903980c7c220820022903880a7c220620022903e80a222320022903c8097c220920022903c80b7c221020022903a80c7c221120022903980a7c221320022903f80a222420022903d8097c221420022903d80b7c221520022903b80c7c221620022903a80a7c221820022903880b222520022903e8097c221920022903e80b7c221a20022903c80c7c221b20022903b80a7c220b20022903980b221c20022903f8097c220c20022903f80b7c220d20022903d80c7c221220022903c80a7c2217423388200241980b6a41086a290300200241f8096a41086a2903007c200c201c54ad7c200241f80b6a41086a2903007c200d200c54ad7c200241d80c6a41086a2903007c2012200d54ad7c200241c80a6a41086a2903007c2017201254ad7c420d86847c220c423388200241880b6a41086a290300200241e8096a41086a2903007c2019202554ad7c200241e80b6a41086a2903007c201a201954ad7c200241c80c6a41086a2903007c201b201a54ad7c200241b80a6a41086a2903007c200b201b54ad7c200c200b54ad7c420d86847c2219423388200241f80a6a41086a290300200241d8096a41086a2903007c2014202454ad7c200241d80b6a41086a2903007c2015201454ad7c200241b80c6a41086a2903007c2016201554ad7c200241a80a6a41086a2903007c2018201654ad7c2019201854ad7c420d86847c2214423388200241e80a6a41086a290300200241c8096a41086a2903007c2009202354ad7c200241c80b6a41086a2903007c2010200954ad7c200241a80c6a41086a2903007c2011201054ad7c200241980a6a41086a2903007c2013201154ad7c2014201354ad7c420d86847c220942ffffffffffffff0383200f7d42f0ffffffffffff3f7c220f42338842137e2009423388200241d80a6a41086a290300200241b8096a41086a2903007c200a202254ad7c200241b80b6a41086a2903007c2007200a54ad7c200241980c6a41086a2903007c2008200754ad7c200241880a6a41086a2903007c2006200854ad7c2009200654ad7c420d868442137e201742ffffffffffffff03837c220742ffffffffffffff038320047d42d0fdffffffffff3f7c220842ffffffffffffff03837c22044200429bdceccb84d4fd03420010ce08200241b8076a200f42ffffffffffffff0383201442ffffffffffffff0383200e7d42f0ffffffffffff3f7c22064233887c220a420042969988cadca7b00e420010ce08200241a8096a200642ffffffffffffff0383201942ffffffffffffff038320057d42f0ffffffffffff3f7c22064233887c2205420042a88c8b81f5cabeca00420010ce08200241d8086a200642ffffffffffffff03832007423388200c42ffffffffffffff03837c20037d42f0ffffffffffff3f7c22074233887c2203420042c8ee859b8cd29829420010ce0820024188086a200742ffffffffffffff038320084233887c2207420042dcd78e98b19df320420010ce08200241f8076a20074200429bdceccb84d4fd03420010ce08200241d8066a2004420042d2dfded4f0ede000420010ce08200241a8076a200a420042a88c8b81f5cabeca00420010ce0820024198096a2005420042c8ee859b8cd29829420010ce08200241c8086a2003420042dcd78e98b19df320420010ce08200241b8086a20034200429bdceccb84d4fd03420010ce08200241e8076a2007420042d2dfded4f0ede000420010ce08200241c8066a2004420042b8ecf9b5ffe8f503420010ce0820024198076a200a420042c8ee859b8cd29829420010ce0820024188096a2005420042dcd78e98b19df320420010ce08200241f8086a20054200429bdceccb84d4fd03420010ce08200241a8086a2003420042d2dfded4f0ede000420010ce08200241d8076a2007420042b8ecf9b5ffe8f503420010ce0820024198056a200442004298c9f9f3f9c09502420010ce0820024188076a200a420042dcd78e98b19df320420010ce08200241f8066a200a4200429bdceccb84d4fd03420010ce08200241e8086a2005420042d2dfded4f0ede000420010ce0820024198086a2003420042b8ecf9b5ffe8f503420010ce08200241c8076a200742004298c9f9f3f9c09502420010ce08200241e8036a2004420042b4f0cadfb1d2dd01420010ce0820022903b82b212320022903b02b212420022903a82b212520022903c02b211c20022903a02b211d200242003703d02a200242013703c82a200242003703d82a200242003703e02a200242003703e82a200220022903a02b42017c22033703c82a200220022903a82b22043703d02a200220022903b02b22103703d82a200220022903b82b22153703e02a200241e8106a20034200200229038817221720022903b8137c220520022903f8167c220a20022903b8187c220720022903f8187c220820022903e814222220022903f8177c220620022903e8167c220920022903a8187c220e20022903e8187c220f200229039817221e20022903e8177c22112002290398167c22132002290398187c221420022903d8187c221620022903a817221f20022903d8177c221820022903d8167c221920022903a8167c221a20022903c8187c221b20022903b817222020022903c8177c220b20022903c8167c220c2002290388187c220d20022903b8167c2212423388200241b8176a41086a290300200241c8176a41086a2903007c200b202054ad7c200241c8166a41086a2903007c200c200b54ad7c20024188186a41086a2903007c200d200c54ad7c200241b8166a41086a2903007c2012200d54ad7c420d86847c220b423388200241a8176a41086a290300200241d8176a41086a2903007c2018201f54ad7c200241d8166a41086a2903007c2019201854ad7c200241a8166a41086a2903007c201a201954ad7c200241c8186a41086a2903007c201b201a54ad7c200b201b54ad7c420d86847c221942338820024198176a41086a290300200241e8176a41086a2903007c2011201e54ad7c20024198166a41086a2903007c2013201154ad7c20024198186a41086a2903007c2014201354ad7c200241d8186a41086a2903007c2016201454ad7c2019201654ad7c420d86847c2211423388200241e8146a41086a290300200241f8176a41086a2903007c2006202254ad7c200241e8166a41086a2903007c2009200654ad7c200241a8186a41086a2903007c200e200954ad7c200241e8186a41086a2903007c200f200e54ad7c2011200f54ad7c420d86847c220642338820024188176a41086a290300200241b8136a41086a2903007c2005201754ad7c200241f8166a41086a2903007c200a200554ad7c200241b8186a41086a2903007c2007200a54ad7c200241f8186a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e201242ffffffffffffff03837c220942ffffffffffffff03832205420010ce08200241a8136a200642ffffffffffffff0383220a4200200442137e222b420010ce08200241d8146a201142ffffffffffffff038322074200201042137e2218420010ce0820024188166a201942ffffffffffffff038322084200201542137e2216420010ce0820024188126a2009423388200b42ffffffffffffff03837c2206420020022903c02b221a42137e2211420010ce08200241f8116a200642002003420010ce08200241d8106a200542002004420010ce0820024198136a200a42002018420010ce08200241c8146a200742002016420010ce08200241f8156a200842002011420010ce08200241e8156a200842002003420010ce08200241e8116a200642002004420010ce08200241c8106a200542002010420010ce0820024188136a200a42002016420010ce08200241b8146a200742002011420010ce08200241a8146a200742002003420010ce08200241d8156a200842002004420010ce08200241d8116a200642002010420010ce08200241b8106a200542002015420010ce08200241f8126a200a42002011420010ce08200241e8126a200a42002003420010ce0820024198146a200742002004420010ce08200241c8156a200842002010420010ce08200241c8116a200642002015420010ce08200241a8106a20054200201a420010ce082000200229038813222c20022903c8107c221b20022903b8147c220b20022903e8157c220c20022903e8117c220d200229039813222220022903d8107c220920022903c8147c220e20022903f8157c220f20022903f8117c221320022903a813221e20022903e8107c221420022903d8147c22192002290388167c22122002290388127c2217423388200241a8136a41086a290300200241e8106a41086a2903007c2014201e54ad7c200241d8146a41086a2903007c2019201454ad7c20024188166a41086a2903007c2012201954ad7c20024188126a41086a2903007c2017201254ad7c420d86847c221242338820024198136a41086a290300200241d8106a41086a2903007c2009202254ad7c200241c8146a41086a2903007c200e200954ad7c200241f8156a41086a2903007c200f200e54ad7c200241f8116a41086a2903007c2013200f54ad7c2012201354ad7c420d86847c222242ffffffffffffff038337031020024198106a42f0ffffffffffff3f201c7d221442338842137e42d1fdffffffffff3f201d7d220e42ffffffffffffff03837c220942002005420010ce08200241d8126a200a420042f0ffffffffffff3f20257d220f42ffffffffffffff0383200e4233887c220e42137e420010ce0820024188146a2007420042f0ffffffffffff3f20247d221342ffffffffffffff0383200f4233887c220f42137e2224420010ce08200241b8156a2008420042f0ffffffffffff3f20237d221942ffffffffffffff038320134233887c221342137e2223420010ce08200241b8116a20064200201442ffffffffffffff038320194233887c221442137e2219420010ce08200241a8116a200642002009420010ce0820024188106a20054200200e420010ce08200241c8126a200a42002024420010ce08200241f8136a200742002023420010ce08200241a8156a200842002019420010ce0820024198156a200842002009420010ce0820024198116a20064200200e420010ce08200241f80f6a20054200200f420010ce08200241b8126a200a42002023420010ce08200241e8136a200742002019420010ce08200241d8136a200742002009420010ce0820024188156a20084200200e420010ce0820024188116a20064200200f420010ce08200241e80f6a200542002013420010ce08200241a8126a200a42002019420010ce0820004190016a20022903a812222d20022903e80f7c221920022903d8137c22232002290388157c22242002290388117c222520022903b812222e20022903f80f7c221c20022903e8137c221d2002290398157c221e2002290398117c221f20022903c812222f2002290388107c222020022903f8137c222120022903a8157c223020022903a8117c223120022903d81222322002290398107c22332002290388147c223420022903b8157c223520022903b8117c2236423388200241d8126a41086a29030020024198106a41086a2903007c2033203254ad7c20024188146a41086a2903007c2034203354ad7c200241b8156a41086a2903007c2035203454ad7c200241b8116a41086a2903007c2036203554ad7c420d86847c2233423388200241c8126a41086a29030020024188106a41086a2903007c2020202f54ad7c200241f8136a41086a2903007c2021202054ad7c200241a8156a41086a2903007c2030202154ad7c200241a8116a41086a2903007c2031203054ad7c2033203154ad7c420d86847c2220423388200241b8126a41086a290300200241f80f6a41086a2903007c201c202e54ad7c200241e8136a41086a2903007c201d201c54ad7c20024198156a41086a2903007c201e201d54ad7c20024198116a41086a2903007c201f201e54ad7c2020201f54ad7c420d86847c221c42ffffffffffffff0383370300200020022903f812223020022903b8107c221d20022903a8147c221e20022903d8157c221f20022903d8117c2221202242338820024188136a41086a290300200241c8106a41086a2903007c201b202c54ad7c200241b8146a41086a2903007c200b201b54ad7c200241e8156a41086a2903007c200c200b54ad7c200241e8116a41086a2903007c200d200c54ad7c2022200d54ad7c420d86847c221b42ffffffffffffff038337031820024198126a200a42002009420010ce08200241c8136a20074200200e420010ce08200241f8146a20084200200f420010ce08200241f8106a200642002013420010ce08200241d80f6a200542002014420010ce0820004198016a200229039812222c20022903d80f7c220b20022903c8137c220c20022903f8147c220d20022903f8107c2222201c423388200241a8126a41086a290300200241e80f6a41086a2903007c2019202d54ad7c200241d8136a41086a2903007c2023201954ad7c20024188156a41086a2903007c2024202354ad7c20024188116a41086a2903007c2025202454ad7c201c202554ad7c420d86847c222342ffffffffffffff0383370300200020022903e812221920022903a8107c22052002290398147c220a20022903c8157c220720022903c8117c2208201b423388200241f8126a41086a290300200241b8106a41086a2903007c201d203054ad7c200241a8146a41086a2903007c201e201d54ad7c200241d8156a41086a2903007c201f201e54ad7c200241d8116a41086a2903007c2021201f54ad7c201b202154ad7c420d86847c220642ffffffffffffff038337032020002006423388200241e8126a41086a290300200241a8106a41086a2903007c2005201954ad7c20024198146a41086a2903007c200a200554ad7c200241c8156a41086a2903007c2007200a54ad7c200241c8116a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e201742ffffffffffffff03837c220542ffffffffffffff038337030020002005423388201242ffffffffffffff03837c370308200241d8016a20022903f806222d20022903e8037c220520022903e8087c220a2002290398087c220720022903c8077c2208200229038807222e2002290398057c220620022903f8087c221920022903a8087c221b20022903d8077c2212200229039807222f20022903c8067c22172002290388097c222420022903b8087c222520022903e8077c221c20022903a807223220022903d8067c221d2002290398097c221e20022903c8087c221f20022903f8077c222120022903b807223720022903e8067c223020022903a8097c223120022903d8087c22342002290388087c2235423388200241b8076a41086a290300200241e8066a41086a2903007c2030203754ad7c200241a8096a41086a2903007c2031203054ad7c200241d8086a41086a2903007c2034203154ad7c20024188086a41086a2903007c2035203454ad7c420d86847c2230423388200241a8076a41086a290300200241d8066a41086a2903007c201d203254ad7c20024198096a41086a2903007c201e201d54ad7c200241c8086a41086a2903007c201f201e54ad7c200241f8076a41086a2903007c2021201f54ad7c2030202154ad7c420d86847c221d42338820024198076a41086a290300200241c8066a41086a2903007c2017202f54ad7c20024188096a41086a2903007c2024201754ad7c200241b8086a41086a2903007c2025202454ad7c200241e8076a41086a2903007c201c202554ad7c201d201c54ad7c420d86847c221742338820024188076a41086a29030020024198056a41086a2903007c2006202e54ad7c200241f8086a41086a2903007c2019200654ad7c200241a8086a41086a2903007c201b201954ad7c200241d8076a41086a2903007c2012201b54ad7c2017201254ad7c420d86847c2206423388200241f8066a41086a290300200241e8036a41086a2903007c2005202d54ad7c200241e8086a41086a2903007c200a200554ad7c20024198086a41086a2903007c2007200a54ad7c200241c8076a41086a2903007c2008200754ad7c2006200854ad7c420d868442137e203542ffffffffffffff03837c220a42ffffffffffffff0383220542002009420010ce08200241f8026a20144200200a423388203042ffffffffffffff03837c220a42137e420010ce08200241b8056a20134200201d42ffffffffffffff0383220742137e2212420010ce0820024198046a200f4200201742ffffffffffffff0383220842137e221b420010ce08200241386a200e4200200642ffffffffffffff0383220642137e2219420010ce08200241c8016a200e42002005420010ce08200241e8026a20094200200a420010ce08200241a8056a201442002012420010ce0820024188046a20134200201b420010ce08200241286a200f42002019420010ce08200241b8016a200f42002005420010ce08200241d8026a200e4200200a420010ce08200241c8056a200942002007420010ce08200241f8036a20144200201b420010ce08200241186a201342002019420010ce08200241a8016a201342002005420010ce08200241c8026a200f4200200a420010ce08200241d8056a200e42002007420010ce08200241a8046a200942002008420010ce08200241086a201442002019420010ce0820024198016a201442002005420010ce08200241b8026a20134200200a420010ce08200241e8056a200f42002007420010ce08200241b8046a200e42002008420010ce0820024188036a200942002006420010ce0820024188016a200342002005420010ce0820024198036a20064200202b420010ce08200241c8046a200842002018420010ce08200241f8056a200742002016420010ce08200241a8026a200a42002011420010ce0820024198026a200a42002003420010ce08200241f8006a200542002004420010ce08200241a8036a200642002018420010ce08200241d8046a200842002016420010ce0820024188066a200742002011420010ce0820024198066a200742002003420010ce0820024188026a200a42002004420010ce08200241e8006a200542002010420010ce08200241b8036a200642002016420010ce08200241e8046a200842002011420010ce08200241f8046a200842002003420010ce08200241a8066a200742002004420010ce08200241f8016a200a42002010420010ce08200241d8006a200542002015420010ce08200241c8036a200642002011420010ce08200241d8036a200642002003420010ce0820024188056a200842002004420010ce08200241b8066a200742002010420010ce08200241e8016a200a42002015420010ce08200241c8006a20054200201a420010ce0820004188016a202042ffffffffffffff03833703002000202342338820024198126a41086a290300200241d80f6a41086a2903007c200b202c54ad7c200241c8136a41086a2903007c200c200b54ad7c200241f8146a41086a2903007c200d200c54ad7c200241f8106a41086a2903007c2022200d54ad7c2023202254ad7c420d868442137e203642ffffffffffffff03837c220342ffffffffffffff038337037820004180016a2003423388203342ffffffffffffff03837c370300200041e0006a20022903b803221b20022903687c220320022903e8047c22042002290398067c22052002290388027c220a20022903a803221320022903787c220720022903d8047c22082002290388067c22062002290398027c220920022903980322142002290388017c220e20022903c8047c220f20022903f8057c221020022903a8027c221142338820024198036a41086a29030020024188016a41086a2903007c200e201454ad7c200241c8046a41086a2903007c200f200e54ad7c200241f8056a41086a2903007c2010200f54ad7c200241a8026a41086a2903007c2011201054ad7c420d86847c220e423388200241a8036a41086a290300200241f8006a41086a2903007c2007201354ad7c200241d8046a41086a2903007c2008200754ad7c20024188066a41086a2903007c2006200854ad7c20024198026a41086a2903007c2009200654ad7c200e200954ad7c420d86847c220742ffffffffffffff0383370300200041386a20022903f803220b20022903c8057c220820022903187c220620022903b8017c220920022903d8027c220f20022903a805220c20022903e8027c22102002290388047c221320022903287c221420022903c8017c221520022903f802220d20022903d8017c221620022903b8057c22182002290398047c221920022903387c221a423388200241f8026a41086a290300200241d8016a41086a2903007c2016200d54ad7c200241b8056a41086a2903007c2018201654ad7c20024198046a41086a2903007c2019201854ad7c200241386a41086a2903007c201a201954ad7c420d86847c2216423388200241a8056a41086a290300200241e8026a41086a2903007c2010200c54ad7c20024188046a41086a2903007c2013201054ad7c200241286a41086a2903007c2014201354ad7c200241c8016a41086a2903007c2015201454ad7c2016201554ad7c420d86847c221042ffffffffffffff0383370300200041e8006a20022903c803221920022903587c221320022903f8047c221420022903a8067c221520022903f8017c22182007423388200241b8036a41086a290300200241e8006a41086a2903007c2003201b54ad7c200241e8046a41086a2903007c2004200354ad7c20024198066a41086a2903007c2005200454ad7c20024188026a41086a2903007c200a200554ad7c2007200a54ad7c420d86847c220342ffffffffffffff0383370300200041c0006a2002290308221b20022903a8047c220420022903a8017c220520022903c8027c220a20022903d8057c22072010423388200241f8036a41086a290300200241c8056a41086a2903007c2008200b54ad7c200241186a41086a2903007c2006200854ad7c200241b8016a41086a2903007c2009200654ad7c200241d8026a41086a2903007c200f200954ad7c2010200f54ad7c420d86847c220842ffffffffffffff0383370300200041f0006a20022903d803220b20022903487c22062002290388057c220920022903b8067c220f20022903e8017c22102003423388200241c8036a41086a290300200241d8006a41086a2903007c2013201954ad7c200241f8046a41086a2903007c2014201354ad7c200241a8066a41086a2903007c2015201454ad7c200241f8016a41086a2903007c2018201554ad7c2003201854ad7c420d86847c220342ffffffffffffff0383370300200041c8006a20022903980122192002290388037c221320022903b8027c221420022903e8057c221520022903b8047c22182008423388200241086a41086a290300200241a8046a41086a2903007c2004201b54ad7c200241a8016a41086a2903007c2005200454ad7c200241c8026a41086a2903007c200a200554ad7c200241d8056a41086a2903007c2007200a54ad7c2008200754ad7c420d86847c220442ffffffffffffff038337030020002003423388200241d8036a41086a290300200241c8006a41086a2903007c2006200b54ad7c20024188056a41086a2903007c2009200654ad7c200241b8066a41086a2903007c200f200954ad7c200241e8016a41086a2903007c2010200f54ad7c2003201054ad7c420d868442137e201142ffffffffffffff03837c220342ffffffffffffff0383370350200041d8006a2003423388200e42ffffffffffffff03837c3703002000200442338820024198016a41086a29030020024188036a41086a2903007c2013201954ad7c200241b8026a41086a2903007c2014201354ad7c200241e8056a41086a2903007c2015201454ad7c200241b8046a41086a2903007c2018201554ad7c2004201854ad7c420d868442137e201a42ffffffffffffff03837c220342ffffffffffffff0383370328200041306a2003423388201642ffffffffffffff03837c370300200241f02b6a24000bd32004047f017e027f1c7e23004190066b2202240002400240024020012c001f4100480d0020024180056a41186a2203200141186a29000037030020024180056a41106a2204200141106a29000037030020024180056a41086a2205200141086a29000037030020022001290000220637038005200220022d009f0541ff00713a009f05200241c0056a41186a22074200370300200241c0056a41106a22084200370300200241c0056a41086a220142003703002002200231008205421086200231008105420886200642ff0183848422063703c005200220023100830542188620068422063703c005200220023100840542208620068422063703c005200220023100850542288620068422063703c005200220023100860542308620068422063703c00520022002310087054238862006843703c005200120012903002005310000842206370300200120023100890542088620068422063703002001200231008a0542108620068422063703002001200231008b0542188620068422063703002001200231008c0542208620068422063703002001200231008d0542288620068422063703002001200231008e0542308620068422063703002001200231008f0542388620068437030020082008290300200431000084220637030020082002310091054208862006842206370300200820023100920542108620068422063703002008200231009305421886200684220637030020082002310094054220862006842206370300200820023100950542288620068422063703002008200231009605423086200684220637030020082002310097054238862006842209370300200720072903002003310000842206370300200720023100990542088620068422063703002007200231009a0542108620068422063703002007200231009b0542188620068422063703002007200231009c0542208620068422063703002007200231009d0542288620068422063703002007200231009e0542308620068422063703002007200231009f05423886200684220a37030020024180036a20022903c005220b42ffffffffffffff07832206420042edcd87b9d697d207420010ce08200241c0026a2006420042dac89fe3dad6ee01420010ce0820024180026a2001290300220c420c864280e0ffffffffff0783200b42348884220b420042edcd87b9d697d207420010ce08200241b0026a20064200429bcad7d9feffff07420010ce08200241c0016a200b420042dac89fe3dad6ee01420010ce08200241d0036a200942188642808080f8ffffff0783200c42288884220c420042edcd87b9d697d207420010ce08200241a0026a2006420042ffffffffffffff07420010ce0820024180016a200b4200429bcad7d9feffff07420010ce08200241c0036a200c420042dac89fe3dad6ee01420010ce08200241a0046a200a422486428080808080feff07832009421c88842209420042edcd87b9d697d207420010ce0820024190026a2006420042ffffffffffff03420010ce08200241c0006a200b420042ffffffffffffff07420010ce08200241b0036a200c4200429bcad7d9feffff07420010ce0820024190046a2009420042dac89fe3dad6ee01420010ce08200241f0046a200a4210882206420042edcd87b9d697d207420010ce082002200b420042ffffffffffff03420010ce08200241a0036a200c420042ffffffffffffff07420010ce0820024180046a20094200429bcad7d9feffff07420010ce08200241e0046a2006420042dac89fe3dad6ee01420010ce0820024190036a200c420042ffffffffffff03420010ce08200241f0036a2009420042ffffffffffffff07420010ce08200241d0046a20064200429bcad7d9feffff07420010ce08200241e0036a2009420042ffffffffffff03420010ce08200241c0046a2006420042ffffffffffffff07420010ce08200241b0046a2006420042ffffffffffff03420010ce08200241f0026a200229038003220b429bfcd192b1b4c7027e42ffffffffffffff07832206420042eda7d7e7a5e39801420010ce08200241e0026a200642004281cbb5cef7c5fa06420010ce08200241f0016a200229038002220d20022903c0027c220c200b20022903f00222097c220b423488200241f0026a41086a29030020024180036a41086a2903007c200b200954ad7c220e420c86847c220920022903e0027c220a429bfcd192b1b4c7027e42ffffffffffffff0783220b420042eda7d7e7a5e39801420010ce08200241d0026a2006420042f9bdd300420010ce08200241e0016a200b42004281cbb5cef7c5fa06420010ce08200241b0016a20022903c001220f20022903b0027c221020022903d0037c221120022903d0027c221220022903e0017c221320022903f0012214200a7c2215423488200241f0016a41086a29030020024180026a41086a290300200241c0026a41086a2903007c200c200d54ad7c200e4234887c2009200c54ad7c200241e0026a41086a2903007c200a200954ad7c7c2015201454ad7c2216420c86847c2209429bfcd192b1b4c7027e42ffffffffffffff0783220c420042eda7d7e7a5e39801420010ce08200241d0016a200b420042f9bdd300420010ce08200241a0016a200c42004281cbb5cef7c5fa06420010ce08200241f0006a200229038001221720022903a0027c220a20022903c0037c220d20022903a0047c220e20022903d0017c221420022903a0017c221520022903b001221820097c2219423488200241b0016a41086a290300200241c0016a41086a290300200241b0026a41086a2903007c2010200f54ad7c200241d0036a41086a2903007c2011201054ad7c200241d0026a41086a2903007c2012201154ad7c200241e0016a41086a2903007c2013201254ad7c20164234887c2009201354ad7c7c2019201854ad7c221a420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff07832209420042eda7d7e7a5e39801420010ce0820024190016a200c420042f9bdd300420010ce08200241e0006a200942004281cbb5cef7c5fa06420010ce08200241306a2002290340221b2002290390027c221120022903b0037c22122002290390047c221320022903f0047c220f2006422c867c22162002290390017c221820022903607c22192002290370221c20107c221d423488200241f0006a41086a29030020024180016a41086a290300200241a0026a41086a2903007c200a201754ad7c200241c0036a41086a2903007c200d200a54ad7c200241a0046a41086a2903007c200e200d54ad7c200241d0016a41086a2903007c2014200e54ad7c200241a0016a41086a2903007c2015201454ad7c201a4234887c2010201554ad7c7c201d201c54ad7c221e420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff0783220a420042eda7d7e7a5e39801420010ce08200241d0006a2009420042f9bdd300420010ce08200241206a200a42004281cbb5cef7c5fa06420010ce08200241106a200a420042f9bdd300420010ce08200120022903f003221f2002290390037c220d20022903d0047c220e200c422c867c221420022903107c221520022903a003222020022903007c22172002290380047c221a20022903e0047c221c200b422c867c221d20022903507c222120022903207c22222002290330222320107c2224423488200241306a41086a290300200241c0006a41086a29030020024190026a41086a2903007c2011201b54ad7c200241b0036a41086a2903007c2012201154ad7c20024190046a41086a2903007c2013201254ad7c200241f0046a41086a2903007c200f201354ad7c20064214887c2016200f54ad7c20024190016a41086a2903007c2018201654ad7c200241e0006a41086a2903007c2019201854ad7c201e4234887c2010201954ad7c7c2024202354ad7c2210420c86847c2206423488200241a0036a41086a290300200241086a2903007c2017202054ad7c20024180046a41086a2903007c201a201754ad7c200241e0046a41086a2903007c201c201a54ad7c200b4214887c201d201c54ad7c200241d0006a41086a2903007c2021201d54ad7c200241206a41086a2903007c2022202154ad7c20104234887c2006202254ad7c2212420c86847c220b42ffffffffffffff0783200642ffffffffffffff07834293d8a898da9ce77e7c2206423f877c42ffb4cab188ba85797c221342ffffffffffffff0783200642ffffffffffffff0783200a422c86220f20022903b0047c220620022903c004221620022903e0037c22102009422c867c2211200b423488200241f0036a41086a29030020024190036a41086a2903007c200d201f54ad7c200241d0046a41086a2903007c200e200d54ad7c200c4214887c2014200e54ad7c200241106a41086a2903007c2015201454ad7c20124234887c200b201554ad7c220c420c86847c220b423488200241c0046a41086a290300200241e0036a41086a2903007c2010201654ad7c20094214887c2011201054ad7c200c4234887c200b201154ad7c2209420c86847c220c423488200a421488200241b0046a41086a2903007c2006200f54ad7c20094234887c200c200654ad7c420c8684200c42ffffffffffffff0783200b42ffffffffffffff07832013423f877c4287c2ac7f7c220c423f877c2209423f877c428080808080807c7c2210423f87220a42eda7d7e7a5e39801837c22064234887c200a4281cbb5cef7c5fa06837c220b42ffffffffffffff078322113703002008200c42ffffffffffffff0783200b4234887c200a42f9bdd300837c220c42ffffffffffffff078322123703002007200942ffffffffffffff0783200c4234887c220942ffffffffffffff07832213370300200241e0056a201042ffffffffffffff078320094234887c200a4280808080808004837c220a42ffffffffffffff07833703002002200642ffffffffffffff078322103703c0052002200a4228883c00bf052002200a4220883c00be052002200a4218883c00bd052002200a4210883c00bc052002200a4208883c00bb052002200a3c00ba0520022009422c883c00b905200220094224883c00b80520022009421c883c00b705200220094214883c00b60520022009420c883c00b505200220094204883c00b405200220134204862012423088843c00b3052002200c4228883c00b2052002200c4220883c00b1052002200c4218883c00b0052002200c4210883c00af052002200c4208883c00ae052002200c3c00ad052002200b422c883c00ac052002200b4224883c00ab052002200b421c883c00aa052002200b4214883c00a9052002200b420c883c00a8052002200b4204883c00a705200220114204862010423088843c00a605200220064228883c00a505200220064220883c00a405200220064218883c00a305200220064210883c00a205200220064208883c00a105200220063c00a0052006a72108200241a0056a410172210341002101410121070340200820024180056a20016a2d0000732208410020086b72417f7341800171410776107020077121072001411f460d02200320016a2d00002108200141016a21010c000b0b200041003a00000c010b4100210102402007107041ff01714101470d002000200229038005370001200041196a20024198056a290300370000200041116a20024190056a290300370000200041096a20024188056a290300370000410121010b200020013a00000b20024190066a24000bf61001087f230041c0006b2203240020012002107702402001450d002000200141f0006c6a2104200241086a210103402000220528020421062005280208220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a2207360200200528020c2106200220074101102f200228020020012802006a21070240024020064102470d00200741003a00002001200128020041016a3602000c010b200741013a00002001200128020041016a3602000240200528020c4101470d00200528021421062005280218220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a360200200528022021070240200528021c4101470d0020072005280228200210780c020b2007200541246a280200200210780c010b200341206a2005280210110200200328022421062003280228220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a360200200328023021080240200328022c4101460d0020082003280234200210780c010b2008200328023820021078024020032802382207450d00200741d8006c21094100210603400240200820066a220741346a280200450d002007413c6a280200450d00200741386a280200102c0b0240200741c4006a280200450d00200741cc006a28020041ffffffff0171450d00200741c8006a280200102c0b2009200641d8006a2206470d000b0b20032802342207450d00200741d8006c450d002008102c0b200528022c2107200220012802004101102f200228020020012802006a21060240024020074102470d00200641003a00002001200128020041016a3602000c010b200641013a00002001200128020041016a3602000240200528022c4101470d002005280230210620052802382207200210772007450d012007412c6c21082006411c6a21070340200741686a28020021092007416c6a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741706a107920022007107a2007412c6a2107200841546a22080d000c020b0b200341186a200528023011020020032802182106200328021c2207200210772007450d002007412c6c21082006411c6a21070340200741686a28020021092007416c6a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741706a107920022007107a2007412c6a2107200841546a22080d000b0b200528023c2107200220012802004101102f200228020020012802006a21060240024020074102470d00200641003a00002001200128020041016a3602000c010b200641013a00002001200128020041016a3602000240200528023c4101470d002005280240210620052802482207200210772007450d012007412c6c21082006411c6a21070340200741686a28020021092007416c6a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741706a107a20022007107a2007412c6a2107200841546a22080d000c020b0b200341106a20052802401102002003280210210620032802142207200210772007450d002007412c6c21082006411c6a21070340200741686a28020021092007416c6a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741706a107a20022007107a2007412c6a2107200841546a22080d000b0b02400240200528024c4101470d002005280250210020052802582207200210772007450d01200741386c210a410021080340200020086a220741046a2802002109200741086a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a360200200741106a2802002109200741146a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741186a107b2002200741286a107a200a200841386a2208470d000c020b0b200341086a200528025011020020032802082100200328020c2207200210772007450d00200741386c210a410021080340200020086a220741046a2802002109200741086a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a360200200741106a2802002109200741146a280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741186a107b2002200741286a107a200a200841386a2208470d000b0b200541f0006a210002400240200528025c4101470d002005280260210620052802682207200210772007450d012007411c6c2108200641086a210703402007417c6a28020021092007280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741046a107a2007411c6a2107200841646a22080d000c020b0b200320052802601102002003280200210620032802042207200210772007450d002007411c6c2108200641086a210703402007417c6a28020021092007280200220620021077200220012802002006102f200228020020012802006a2009200610c9081a2001200620012802006a3602002002200741046a107a2007411c6a2107200841646a22080d000b0b20052d006c2107200220012802004101102f200228020020012802006a20073a00002001200128020041016a36020020002004470d000b0b200341c0006a24000b960201027f024002400240200041c000490d00200041808001490d012000418080808004490d022001200141086a22022802004101102f200128020020022802006a41033a00002002200228020041016a2203360200200120034104102f200128020020022802006a20003600002002200228020041046a3602000f0b2001200141086a22022802004101102f200128020020022802006a20004102743a00002002200228020041016a3602000f0b2001200141086a22022802004102102f200128020020022802006a20004102744101723b00002002200228020041026a3602000f0b2001200141086a22022802004104102f200128020020022802006a20004102744102723600002002200228020041046a3602000bb90601057f20012002107702402001450d00200141d8006c2103410021040340200020046a220541046a2802002106200541086a2802002207200210772002200241086a22012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a2207360200200541d4006a2d00002106200220074101102f200228020020012802006a20064101463a00002001200128020041016a220736020002400240024002402005410c6a2d00000e03000102030b200220074101102f200228020020012802006a41003a00002001200128020041016a360200200541146a2802002106200541186a280200220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a3602000c020b200220074101102f200228020020012802006a41013a00002001200128020041016a36020020022005410d6a2d0000107c200541146a2802002106200541186a280200220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a360200200541206a2802002106200541246a280200220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a22073602002005410e6a2d00002106200220074101102f200228020020012802006a20063a00002001200128020041016a3602000c010b200220074101102f200228020020012802006a41023a00002001200128020041016a36020020022005410d6a2d0000107c200541146a2802002106200541186a280200220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a360200200541206a2802002106200541246a280200220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a3602002005412c6a2802002106200541306a280200220720021077200220012802002007102f200228020020012802006a2006200710c9081a2001200720012802006a36020020022005410e6a2d0000107c0b2002200541346a107b2002200541c4006a107a2003200441d8006a2204470d000b0b0b990301047f200128020421020240024020012802004101470d002001410c6a2802002201200010772001450d01200141186c2103200241146a2102200041086a21010340200241706a2802002104200241746a280200220520001077200020012802002005102f200028020020012802006a2004200510c9081a2001200520012802006a3602002002417c6a28020021042002280200220520001077200020012802002005102f200028020020012802006a2004200510c9081a2001200520012802006a360200200241186a2102200341686a22030d000c020b0b200141086a2802002201200010772001450d00200141186c2103200241146a2102200041086a21010340200241706a2802002104200241746a280200220520001077200020012802002005102f200028020020012802006a2004200510c9081a2001200520012802006a3602002002417c6a28020021042002280200220520001077200020012802002005102f200028020020012802006a2004200510c9081a2001200520012802006a360200200241186a2102200341686a22030d000b0b0b830201047f200128020421020240024020012802004101470d002001410c6a28020022012000107720014103742201450d01200220016a2103034020022802002104200241046a2802002201200010772000200041086a22052802002001102f200028020020052802006a2004200110c9081a2005200120052802006a360200200241086a22022003470d000c020b0b200141086a28020022012000107720014103742201450d00200220016a2103034020022802002104200241046a2802002201200010772000200041086a22052802002001102f200028020020052802006a2004200110c9081a2005200120052802006a360200200241086a22022003470d000b0b0bce0101037f230041106b220224000240024020012802004101470d00200128020421032001410c6a2802002201200010772000200041086a22042802002001102f200028020020042802006a2003200110c9081a2004200120042802006a3602000c010b20022001280204200141086a28020028020c1103002002280200210320022802082201200010772000200041086a22042802002001102f200028020020042802006a2003200110c9081a2004200120042802006a3602002002280204450d002003102c0b200241106a24000beb020002400240024002400240024002400240200141ff01710e0700010203040506070b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41013a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41023a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41033a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41043a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41053a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41063a00002001200128020041016a3602000b0b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41a49ec000200241086a103e2101200241206a240020010ba504010a7f20004201370200200041086a41003602002001410c6a28020021022001280208210320012802042104024002400240200128020022050d00200220036b410020031b21010c010b200420056b2106024020030d00200621010c010b2006200220036b6a220120064f0d000240024020042005460d00200541016a21010c010b2003450d0220022003460d024100210120032105200341016a21030b200041086a2107200041046a2108410121094100210a41002106034020052d0000210b02402006200a470d000240024020010d00200220036b410020031b21050c010b200420016b21052003450d00417f2005200220036b6a220920092005491b21050b2000200a417f200541016a220920092005491b102f200028020021090b200920066a200b3a00002007200641016a2206360200024002400240024020010d002001210b0c010b20012004470d014100210b0b2003450d0420032002460d0420032105200341016a21030c010b200141016a210b200121050b2008280200210a200b21010c000b0b200041002001102f2000280200200041086a28020022066a210102402005450d0020042005460d002004200620056b6a21060340200120052d00003a0000200141016a21012004200541016a2205470d000b0b02402003450d0020022003460d00200620036b21050340200120032d00003a0000200141016a21012002200341016a2203470d000b200220056a21060b200041086a20063602000b0b040041010bea0101027f230041c0006b2202240020024100360210200242013703082002410836021c20022001410c6a3602202002200241206a3602182002200241086a3602242002413c6a41013602002002420137022c200241b4b5c8003602282002200241186a360238200241246a41a49ec000200241286a103e1a41052103024002400240024002402001280200417f6a0e050001020304000b410121030c030b410221030c020b410321030c010b410421030b2003200141046a280200200141086a280200200228020820022802101082010240200228020c450d002002280208102c0b200241c0006a24000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a103e2101200241206a240020010b5601017f4104210502400240024002400240200041ff0171417f6a0e050001020304000b410021050c030b410121050c020b410221050c010b410321050b20052002ad4220862001ad842004ad4220862003ad8410050b9f0904017f017e017f087e230041b0046b22022400200141bc016a350200210320012802b8012104200241c0016a200141b80110c9081a024002400240200241e8016a2903004201510d0020022903c80121050c010b200241f0016a290300220620022903c8012205560d010b200521060b200220063703c801024002400240200241a0026a2903004201510d0020022903c80121050c010b200241a8026a290300220620022903c8012205560d010b200521060b200220063703c801024002400240200241d8026a2903004201510d0020022903c80121050c010b200241e0026a290300220620022903c8012205560d010b200521060b200220063703c80102402004450d002006428094ebdc038020037e2006428094ebdc038220037e2206428094ebdc038042ffffffff0f2006428080808080c0b2cd3b541b2006428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c21060240200241d8016a2903004201510d00200241e0016a42004200200241f0016a290300220320067d220520052003561b220320022903d0017d220520052003561b3703002002200241e8016a2903003703d8010b024020024190026a2903004201510d0020024198026a42004200200241a8026a290300220320067d220520052003561b220320024188026a2903007d220520052003561b3703002002200241a0026a290300370390020b200241c8026a2903004201510d00200241d0026a42004200200241e0026a290300220320067d220620062003561b2206200241c0026a2903007d220320032006561b3703002002200241d8026a2903003703c8020b200241f8026a200241c0016a41b80110c9081a02400240200229038003220620022903f8022203200241f8036a29030022077c580d002006420020024198046a290300220520024190046a2903005022011b540d00427e200241a8046a290300427f7c200241a0046a290300501b2007540d0020024188046a29030022085020024180046a2903002209420052710d00420020082009501b4200427f200520011b220520077d220820082005561b560d0020062003200241c0036a29030022097c580d0020064200200241e0036a2903002208200241f8026a41e0006a2903005022011b540d00427e200241f0036a290300427f7c200241e8036a290300501b2009540d00200241d0036a290300220a50200241c8036a290300220b420052710d004200200a200b501b4200427f200820011b220820097d220a200a2008561b560d0020062003200229038803220a7c580d0020064200200241a8036a290300220b200241a0036a2903005022011b540d00427e200241b8036a290300427f7c200241b0036a290300501b200a540d0020024198036a29030022065020024190036a290300220c420052710d0042002006200c501b4200427f200b20011b2206200a7d220b200b2006561b560d002006502006200a5620062003567172450d00200850200820095620082003567172450d002005502005200756200520035671720d010b200241013a00024188a1c00041e000200241026a4198a0c00041e8a1c0001040000b2000200241086a200241f8026a41b80110c90841b80110c9081a200241b0046a24000ba90803197e017f147e20002903c0012101200029039801210220002903702103200029034821042000290320210520002903b8012106200029039001210720002903682108200029034021092000290318210a20002903b001210b200029038801210c2000290360210d2000290338210e2000290310210f20002903a8012110200029038001211120002903582112200029033021132000290308211420002903a00121152000290378211620002903502117200029032821182000290300211941c07e211a0340200b200c200d200e200f85858585221b4201892015201620172018201985858585221c85221d201385211e20012006200720082009200a85858585221f201c42018985221c85212020012002200320042005858585852221420189201b85221b2009854237892222201f4201892010201120122013201485858585220985221f200f85423e892223427f8583201d201085420289222485210120222021200942018985220f20168542298922212003201c854227892225427f8583852110201b2006854238892226201f200c85420f892227427f8583201d201285420a89222885210c2028200f2018854224892229427f85832005201c85421b89222a852116200f2015854212892215201f200e85420689222b201d201485420189222c427f85838521032002201c85420889222d201b200885421989222e427f8583202b8521122004201c85421489221c201b200a85421c89220a427f8583201f200b85423d89220e852104200a200e427f8583201d201185422d89221d852109200f2017854203892214200e201d427f858385210e201d2014427f8583201c852113200a2014201c427f8583852118201b200785421589221d200f201985221c2020420e89221b427f858385210a201b201d427f8583201f200d85422b89221f85210f201d201f427f8583201e422c89221d852114201a41c8a3c0006a290300201c201f201d427f85838585211920262029202a427f858385221f2102201d201c427f8583201b85221d2105202120232024427f858385221c2106202a2026427f8583202785221b2107202c2015427f8583202d852226210820242021427f85832025852224210b202e2015202d427f8583852221210d202920272028427f8583852227211120252022427f858320238522222115202e202b427f8583202c8522232117201a41086a221a0d000b200020223703a00120002016370378200020233703502000201837032820002019370300200020103703a8012000202737038001200020123703582000201337033020002014370308200020243703b0012000200c37038801200020213703602000200e3703382000200f3703102000201c3703b8012000201b3703900120002026370368200020093703402000200a370318200020013703c0012000201f3703980120002003370370200020043703482000201d3703200b040041000b02000b02000be31901037f230041a0026b22032400200341086a41126a410041b60110cb081a200341166a4100280086a440360100200341002f00fca3403b010c200341002800f8a340360208200341002900fea34037010e200341086a1084012000200341086a41c80110c908220041003a00ca01200041003b01c801200041124100108901024020002d00c801220441c7014b0d00200020046a220420042d000041cd00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c8014f0d010b200020046a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041f200733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041ec00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041e900733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041ee00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004120733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d000041f600733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004131733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d0000412e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220441a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441c7014b0d010b200020046a220420042d00004130733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108401200041003b01c8010b20032002360204200041124100108901024020002d00c801220441c8014f0d00200020046a220420042d000041e400733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c8014f0d010b2000200441ff01716a220420042d000041ef00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041ed00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d0000412d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041f300733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b200041ca016a21052000200441ff01716a220420042d000041f000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010b200341123a00d701024020052d00004112460d00200341f0016a41146a4109360200200341f0016a410c6a410a36020020032005360288022003200341d7016a36028c02200341086a41146a4102360200200341086a410c6a410236020020034190026a410c6a410b3602002003410a3602f40120034184a5c0003602102003410236020c200341f4a4c0003602082003410b3602940220032005360290022003200341086a3602800220032003418c026a3602f801200320034188026a3602f001200320034190026a3602182003200341d7016a36029802200341d8016a41146a4103360200200342033702dc01200341c0bbc4003602d8012003200341f0016a3602e801200341d8016a41c4a5c0001046000b0240200441ff0171220541c7014b0d00200020056a220420042d000020032d0004733a0000200020002d00c80141016a22043a00c80102400240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200441ff017141c8014f0d010b2000200441ff01716a220420042d000020032d0005733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d0006733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d0007733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108401200041003b01c8010b200041024100108901024002402002450d0020002d00c80121040340200441ff0171220441c7014b0d02200020046a220420042d000020012d0000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002104200041003b01c8010b200141016a21012002417f6a22020d000b0b200341a0026a24000f0b200441c801418ca4c000103f000b200441ff017141c801418ca4c000103f000b200441ff017141c801418ca4c000103f000b200441c801418ca4c000103f000bbb0701027f230041f0006b22032400200320013a000b02400240024002400240024002400240024020020d002003200141087122023a000c20020d03200020013a00ca0120002d00c9012104200020002d00c801220241016a3a00c901200320013a0059200320043a0058200241c7014b0d02200020026a220120012d000020032d0058733a0000200020002d00c80141016a22023a00c801200241ff0171220141a601470d01200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002102200041003b01c8010c050b20002d00ca01200141ff0171470d030c050b200141c801490d030b200241ff017141c801418ca4c000103f000b200341386a41146a4109360200200341c4006a410a360200200341206a41146a410336020020032003410c6a360254200341a789c500360210200341d8006a41146a410036020020034203370224200341c0bbc4003602202003410a36023c200341c4b5c8003602682003420137025c200341d4a5c0003602582003200341386a3602302003200341d8006a3602482003200341106a3602402003200341d4006a360238200341206a41dca5c0001046000b200341386a41146a4109360200200341386a410c6a410a3602002003200041ca016a220036020c20032003410b6a360254200341d8006a41146a4102360200200341d8006a410c6a4102360200200341106a410c6a410b3602002003410a36023c20034184a5c0003602602003410236025c200341f4a4c0003602582003410b360214200320003602102003200341d8006a3602482003200341d4006a36024020032003410c6a3602382003200341106a36026820032003410b6a360218200341206a41146a410336020020034203370224200341c0bbc4003602202003200341386a360230200341206a41c4a5c0001046000b2000200241ff01716a220120012d000020032d0059733a0000200020002d00c80141016a22013a00c8010240200141ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002101200041003b01c8010b20032d000b412471450d00200141ff01712201450d00200141c7014b0d01200020016a220120012d000020002d00c901733a000020002d00c80141016a41ff0171220141c8014f0d02200020016a220120012d00004104733a0000200020002d00a701418001733a00a7012000108401200041003b01c8010b200341f0006a24000f0b200141c80141eca5c000103f000b200141c80141fca5c000103f000bc40201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d0020002d0000210420034120710d012004ad42ff01832001104921000c020b20002d00002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d02200141a888c0004102200220006a4180016a410020006b104d21000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d02200141a888c0004102200220006a4180016a410020006b104d21000b20024180016a240020000f0b2004418001419888c0001058000b2004418001419888c0001058000b8c0901027f230041f0006b2205240020052004360208200041124100108901024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000f20002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0008733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010c030b200141c801490d020c030b200641c801418ca4c000103f000b200541286a41146a4109360200200541286a410c6a410a3602002005200041ca016a220036024020052005410f6a360244200541c8006a41146a4102360200200541c8006a410c6a4102360200200541e0006a410c6a410b3602002005410a36022c20054184a5c0003602502005410236024c200541f4a4c0003602482005410b360264200520003602602005200541c8006a3602382005200541c4006a3602302005200541c0006a3602282005200541e0006a36025820052005410f6a360268200541106a41146a410336020020054203370214200541c0bbc4003602102005200541286a360220200541106a41c4a5c0001046000b2000200641ff01716a220620062d000020052d0009733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d000a733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d000b733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108401200041003b01c8010b200041024100108901024002402004450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020032d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010b200341016a21032004417f6a22040d000b0b200541f0006a24000f0b200641c801418ca4c000103f000b200641ff017141c801418ca4c000103f000bd40f01027f230041f0006b220424002004200337030020044108360208200041124100108901024002400240024002402002450d0020002d00c80121050340200541ff0171220541c7014b0d02200020056a220520052d000020012d0000733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010b200141016a21012002417f6a22020d000b0b200441123a000f20002d00ca014112470d0120002d00c801220541c7014b0d03200020056a220520052d000020042d0008733a0000200020002d00c80141016a22053a00c8010240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c030b200141c801490d020c030b200541c801418ca4c000103f000b200441286a41146a4109360200200441286a410c6a410a3602002004200041ca016a220036024020042004410f6a360244200441c8006a41146a4102360200200441c8006a410c6a4102360200200441e0006a410c6a410b3602002004410a36022c20044184a5c0003602502004410236024c200441f4a4c0003602482004410b360264200420003602602004200441c8006a3602382004200441c4006a3602302004200441c0006a3602282004200441e0006a36025820042004410f6a360268200441106a41146a410336020020044203370214200441c0bbc4003602102004200441286a360220200441106a41c4a5c0001046000b2000200541ff01716a220520052d000020042d0009733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000a733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000b733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108401200041003b01c8010b200041024100108901024020002d00c801220541c8014f0d00200020056a220520052d000020042d0000733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c8014f0d010b2000200541ff01716a220520052d000020042d0001733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0002733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0003733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0004733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0005733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0006733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0007733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108401200041003b01c8010b200441f0006a24000f0b200541ff017141c801418ca4c000103f000b200541ff017141c801418ca4c000103f000bae0901027f230041f0006b2205240020052004360208200041124100108901024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000f20002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0008733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010c030b200141c801490d020c030b200641c801418ca4c000103f000b200541286a41146a4109360200200541286a410c6a410a3602002005200041ca016a220036024020052005410f6a360244200541c8006a41146a4102360200200541c8006a410c6a4102360200200541e0006a410c6a410b3602002005410a36022c20054184a5c0003602502005410236024c200541f4a4c0003602482005410b360264200520003602602005200541c8006a3602382005200541c4006a3602302005200541c0006a3602282005200541e0006a36025820052005410f6a360268200541106a41146a410336020020054203370214200541c0bbc4003602102005200541286a360220200541106a41c4a5c0001046000b2000200641ff01716a220620062d000020052d0009733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d000a733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d000b733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108401200041003b01c8010b20004107410010890102402004450d0020002d00c8012106024002400340200641ff0171220641c7014b0d012003200020066a2d00003a000020002d00c801220641c7014b0d02200020066a41003a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010840141002106200041003b01c8010b200341016a21032004417f6a22040d000c030b0b200641c80141fca6c000103f000b200641c801418ca7c000103f000b200541f0006a24000f0b200641ff017141c801418ca4c000103f000bee0201027f02400240024020002f0100220241c000490d00200241808001490d012001200141086a22032802004104102f200128020020032802006a20024102744102723600002003200328020041046a22023602000c020b2001200141086a22032802004101102f200128020020032802006a20024102743a00002003200328020041016a22023602000c010b2001200141086a22032802004102102f200128020020032802006a20024102744101723b00002003200328020041026a22023602000b0240024020002f0102220041c000490d00200041808001490d01200120024104102f2001280200200141086a22012802006a20004102744102723600002001200128020041046a3602000f0b200120024101102f2001280200200141086a22012802006a20004102743a00002001200128020041016a3602000f0b200120024102102f2001280200200141086a22012802006a20004102744101723b00002001200128020041026a3602000b960201027f024002400240200141c000490d00200141808001490d012001418080808004490d022000200041086a22022802004101102f200028020020022802006a41033a00002002200228020041016a2203360200200020034104102f200028020020022802006a20013600002002200228020041046a3602000f0b2000200041086a22022802004101102f200028020020022802006a20014102743a00002002200228020041016a3602000f0b2000200041086a22022802004102102f200028020020022802006a20014102744101723b00002002200228020041026a3602000f0b2000200041086a22022802004104102f200028020020022802006a20014102744102723600002002200228020041046a3602000b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000b900201057f024002400240024002400240200041086a28020022032001490d002003200041046a280200470d03200341016a22042003490d05200341017422052004200520044b1b22044104200441044b1b220620066a22042006490d0520044100480d05200420064f41017421070240024002402000280200410020031b22060d002004450d010c040b20050d0120040d030b200721060c030b200620052004103522060d020c040b200120031044000b200410322206450d020b20002006360200200041046a20044101763602000b200028020020014101746a220441026a2004200320016b41017410ca081a200420023b0100200041086a200341016a3602000f0b2007450d001039000b103b000bb26d0b0b7f017e0e7f037e047f017e047f017e037f017e017f2000420137020041002102200041086a41003602000240024002400240200128020822030d0041042104410021050c010b20034104200341044b1b220641ffffffff017122072006470d01200641037422084100480d0120012802002105200820072006464102742008103222061b2109024020060d002009450d020c030b200520034103746a2107200341037441786a410376210a2006200820061b22042103034020052802002106200341046a200541046a2f01003b010020032006360200200341086a2103200541086a22052007470d000b200a41016a2105200941037621020b20002005108f0102402005450d002005410374210620042105034002400240024002402005280200220341c000490d00200341808001490d012003418080808004490d022000200041086a22032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002108200020074104102f200028020020032802006a20083600002003200328020041046a22073602000c030b2000200041086a22082802004101102f200028020020082802006a20034102743a00002008200828020041016a22073602000c020b2000200041086a22082802004102102f200028020020082802006a20034102744101723b00002008200828020041026a22073602000c010b2000200041086a22082802004104102f200028020020082802006a20034102744102723600002008200828020041046a22073602000b024002400240200541046a2f0100220341c000490d00200341808001490d01200020074104102f2000280200200041086a22072802006a20034102744102723600002007200728020041046a3602000c020b200020074101102f2000280200200041086a22072802006a20034102743a00002007200728020041016a3602000c010b200020074102102f2000280200200041086a22072802006a20034102744101723b00002007200728020041026a3602000b200541086a2105200641786a22060d000b0b02400240200141146a28020022030d004104210b4100210c410021050c010b20034104200341044b1bad420c7e220d422088a722060d01200da722074100480d01200128020c210520072006454102742007103222081b2109024020080d0020090d030c020b20052003410c6c6a21062003410c6c41746a410c6e210a2008200720081b220b2103034020032005290200370200200341086a200541086a2f01003b01002003410c6a21032005410c6a22052006470d000b200a41016a21052009410c6e210c0b20002005108f0102402005450d002005410c6c2107200041086a2105200b21030340200341046a210802400240024002402003280200220641c000490d00200641808001490d012006418080808004490d02200020052802004101102f200028020020052802006a41033a00002005200528020041016a220636020020032802002109200020064104102f200028020020052802006a20093600002005200528020041046a3602000c030b200020052802004101102f200028020020052802006a20064102743a00002005200528020041016a3602000c020b200020052802004102102f200028020020052802006a20064102744101723b00002005200528020041026a3602000c010b200020052802004104102f200028020020052802006a20064102744102723600002005200528020041046a3602000b20082000108e01024002400240200341086a2f0100220641c000490d00200641808001490d01200020052802004104102f200028020020052802006a20064102744102723600002005200528020041046a3602000c020b200020052802004101102f200028020020052802006a20064102743a00002005200528020041016a3602000c010b200020052802004102102f200028020020052802006a20064102744101723b00002005200528020041026a3602000b2003410c6a2103200741746a22070d000b0b4104210e02400240200141206a28020022030d004100210f410021050c010b20034104200341044b1b220641ffffffff007122082006470d01200641047422074100480d0120012802182105200720082006464102742007103222081b2109024020080d0020090d030c020b200520034104746a2106200341047441706a410476210a2008200720081b220e21030340200320052802003602002003410c6a2005410c6a2f01003b0100200341046a200541046a290200370200200341106a2103200541106a22052006470d000b200a41016a21052009410476210f0b20002005108f0102402005450d0020054104742107200041086a2105200e2103034002400240024002402003280200220641c000490d00200641808001490d012006418080808004490d02200020052802004101102f200028020020052802006a41033a00002005200528020041016a220636020020032802002108200020064104102f200028020020052802006a20083600002005200528020041046a3602000c030b200020052802004101102f200028020020052802006a20064102743a00002005200528020041016a3602000c020b200020052802004102102f200028020020052802006a20064102744101723b00002005200528020041026a3602000c010b200020052802004104102f200028020020052802006a20064102744102723600002005200528020041046a3602000b200341046a2000108e01200341086a2000108e010240024002402003410c6a2f0100220641c000490d00200641808001490d01200020052802004104102f200028020020052802006a20064102744102723600002005200528020041046a3602000c020b200020052802004101102f200028020020052802006a20064102743a00002005200528020041016a3602000c010b200020052802004102102f200028020020052802006a20064102744101723b00002005200528020041026a3602000b200341106a2103200741706a22070d000b0b024002402001412c6a28020022030d004104211041002111410021050c010b20034104200341044b1bad42147e220d422088a722060d01200da722074100480d012001280224210520072006454102742007103222081b2109024020080d0020090d030c020b2005200341146c6a2106200341146c416c6a41146e210a2008200720081b22102103034020032005280200360200200341106a200541106a2f01003b01002003410c6a2005410c6a280200360200200341046a200541046a290200370200200341146a2103200541146a22052006470d000b200a41016a2105200941146e21110b20002005108f0102402005450d00200541146c2107200041086a210520102103034002400240024002402003280200220641c000490d00200641808001490d012006418080808004490d02200020052802004101102f200028020020052802006a41033a00002005200528020041016a220636020020032802002108200020064104102f200028020020052802006a20083600002005200528020041046a3602000c030b200020052802004101102f200028020020052802006a20064102743a00002005200528020041016a3602000c020b200020052802004102102f200028020020052802006a20064102744101723b00002005200528020041026a3602000c010b200020052802004104102f200028020020052802006a20064102744102723600002005200528020041046a3602000b200341046a2000108e01200341086a2000108e012003410c6a2000108e01024002400240200341106a2f0100220641c000490d00200641808001490d01200020052802004104102f200028020020052802006a20064102744102723600002005200528020041046a3602000c020b200020052802004101102f200028020020052802006a20064102743a00002005200528020041016a3602000c010b200020052802004102102f200028020020052802006a20064102744101723b00002005200528020041026a3602000b200341146a21032007416c6a22070d000b0b02400240200141386a28020022030d004104210a41002112410021050c010b20034104200341044b1bad42187e220d422088a722060d01200da722074100480d012001280230210520072006454102742007103222081b2109024020080d0020090d030c020b2005200341186c6a2106200341186c41686a41186e21132008200720081b220a2103034020032005280200360200200341146a200541146a2f01003b01002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341186a2103200541186a22052006470d000b201341016a2105200941186e21120b20002005108f0102402005450d00200541186c210841002106200041086a210503400240024002400240200a20066a2203280200220741c000490d00200741808001490d012007418080808004490d02200020052802004101102f200028020020052802006a41033a00002005200528020041016a220736020020032802002109200020074104102f200028020020052802006a20093600002005200528020041046a3602000c030b200020052802004101102f200028020020052802006a20074102743a00002005200528020041016a3602000c020b200020052802004102102f200028020020052802006a20074102744101723b00002005200528020041026a3602000c010b200020052802004104102f200028020020052802006a20074102744102723600002005200528020041046a3602000b200341046a2000108e01200341086a2000108e012003410c6a2000108e01200341106a2000108e01024002400240200341146a2f0100220341c000490d00200341808001490d01200020052802004104102f200028020020052802006a20034102744102723600002005200528020041046a3602000c020b200020052802004101102f200028020020052802006a20034102743a00002005200528020041016a3602000c010b200020052802004102102f200028020020052802006a20034102744101723b00002005200528020041026a3602000b2008200641186a2206470d000b0b02400240200141c4006a28020022030d004104211341002114410021050c010b20034104200341044b1bad421c7e220d422088a722060d01200da722074100480d01200128023c210520072006454102742007103222081b2109024020080d0020090d030c020b20052003411c6c6a21062003411c6c41646a411c6e21152008200720081b22132103034020032005280200360200200341186a200541186a2f01003b0100200341146a200541146a2802003602002003410c6a2005410c6a290200370200200341046a200541046a2902003702002003411c6a21032005411c6a22052006470d000b201541016a21052009411c6e21140b20002005108f0102402005450d002005411c6c210841002106200041086a210503400240024002400240201320066a2203280200220741c000490d00200741808001490d012007418080808004490d02200020052802004101102f200028020020052802006a41033a00002005200528020041016a220736020020032802002109200020074104102f200028020020052802006a20093600002005200528020041046a3602000c030b200020052802004101102f200028020020052802006a20074102743a00002005200528020041016a3602000c020b200020052802004102102f200028020020052802006a20074102744101723b00002005200528020041026a3602000c010b200020052802004104102f200028020020052802006a20074102744102723600002005200528020041046a3602000b200341046a2000108e01200341086a2000108e012003410c6a2000108e01200341106a2000108e01200341146a2000108e01024002400240200341186a2f0100220341c000490d00200341808001490d01200020052802004104102f200028020020052802006a20034102744102723600002005200528020041046a3602000c020b200020052802004101102f200028020020052802006a20034102743a00002005200528020041016a3602000c010b200020052802004102102f200028020020052802006a20034102744101723b00002005200528020041026a3602000b20082006411c6a2206470d000b0b02400240200141d0006a28020022030d004104210841002116410021050c010b20034104200341044b1b220641ffffff3f7122082006470d01200641057422074100480d0120012802482105200720082006464102742007103222081b2109024020080d0020090d030c020b200520034105746a2106200341057441606a41057621152008200720081b220821030340200320052802003602002003411c6a2005411c6a2f01003b0100200341146a200541146a2902003702002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341206a2103200541206a22052006470d000b201541016a2105200941057621160b20002005108f0102402005450d002005410574210941002106200041086a210503400240024002400240200820066a2203280200220741c000490d00200741808001490d012007418080808004490d02200020052802004101102f200028020020052802006a41033a00002005200528020041016a220736020020032802002115200020074104102f200028020020052802006a20153600002005200528020041046a3602000c030b200020052802004101102f200028020020052802006a20074102743a00002005200528020041016a3602000c020b200020052802004102102f200028020020052802006a20074102744101723b00002005200528020041026a3602000c010b200020052802004104102f200028020020052802006a20074102744102723600002005200528020041046a3602000b200341046a2000108e01200341086a2000108e012003410c6a2000108e01200341106a2000108e01200341146a2000108e01200341186a2000108e010240024002402003411c6a2f0100220341c000490d00200341808001490d01200020052802004104102f200028020020052802006a20034102744102723600002005200528020041046a3602000c020b200020052802004101102f200028020020052802006a20034102743a00002005200528020041016a3602000c010b200020052802004102102f200028020020052802006a20034102744101723b00002005200528020041026a3602000b2009200641206a2206470d000b0b02400240200141dc006a28020022030d004104211541002117410021050c010b20034104200341044b1bad42247e220d422088a722060d01200da722074100480d012001280254210520072006454102742007103222091b2118024020090d0020180d030c020b2005200341246c6a2106200341246c415c6a41246e21192009200720091b22152103034020032005280200360200200341206a200541206a2f01003b01002003411c6a2005411c6a280200360200200341146a200541146a2902003702002003410c6a2005410c6a290200370200200341046a200541046a290200370200200341246a2103200541246a22052006470d000b201941016a2105201841246e21170b20002005108f0102402005450d00200541246c210941002106200041086a210303400240024002400240201520066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002118200020074104102f200028020020032802006a20183600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01024002400240200541206a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2009200641246a2206470d000b0b02400240200141e8006a28020022030d00410421184100211a410021050c010b20034104200341044b1bad42287e220d422088a722060d01200da722074100480d012001280260210520072006454102742007103222091b2119024020090d0020190d030c020b2005200341286c6a2106200341286c41586a41286e211b2009200720091b221821030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e20032005280200360200200341246a200541246a2f01003b01002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d370200200341286a2103200541286a22052006470d000b201b41016a2105201941286e211a0b20002005108f0102402005450d00200541286c210941002106200041086a210303400240024002400240201820066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002119200020074104102f200028020020032802006a20193600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01024002400240200541246a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2009200641286a2206470d000b0b02400240200141f4006a28020022030d00410421194100211f410021050c010b20034104200341044b1bad422c7e220d422088a722070d01200da722064100480d01200128026c210520062007454102742006103222091b211b024020090d00201b0d030c020b20052003412c6c6a21072003412c6c41546a412c6e21202009200620091b221921030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a280200210620032005280200360200200341286a200541286a2f01003b0100200341246a20063602002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d3702002003412c6a21032005412c6a22052007470d000b202041016a2105201b412c6e211f0b20002005108f0102402005450d002005412c6c210941002106200041086a210303400240024002400240201920066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a22073602002005280200211b200020074104102f200028020020032802006a201b3600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01024002400240200541286a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b20092006412c6a2206470d000b0b0240024020014180016a28020022030d004104211b41002121410021050c010b20034104200341044b1bad42307e220d422088a722070d01200da722064100480d012001280278210520062007454102742006103222091b2120024020090d0020200d030c020b2005200341306c6a2107200341306c41506a41306e21222009200620091b221b21030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a2902002123200528020021062003412c6a2005412c6a2f01003b0100200341246a20233702002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d37020020032006360200200341306a2103200541306a22052007470d000b202241016a2105202041306e21210b20002005108f0102402005450d00200541306c210941002106200041086a210303400240024002400240201b20066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002120200020074104102f200028020020032802006a20203600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01200541286a2000108e010240024002402005412c6a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2009200641306a2206470d000b0b024002402001418c016a28020022030d004104212041002124410021050c010b20034104200341044b1bad42347e220d422088a722070d01200da722064100480d01200128028401210520062007454102742006103222071b2122024020070d0020220d030c020b2005200341346c6a2109200341346c414c6a41346e21252007200620071b222021030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a29020021232005412c6a280200210620052802002107200341306a200541306a2f01003b01002003412c6a2006360200200341246a20233702002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d37020020032007360200200341346a2103200541346a22052009470d000b202541016a2105202241346e21240b20002005108f0102402005450d00200541346c210941002106200041086a210303400240024002400240202020066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002122200020074104102f200028020020032802006a20223600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01200541286a2000108e012005412c6a2000108e01024002400240200541306a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2009200641346a2206470d000b0b0240024020014198016a28020022030d004104212241002126410021050c010b20034104200341044b1bad42387e220d422088a722070d01200da722064100480d01200128029001210520062007454102742006103222091b2125024020090d0020250d030c020b2005200341386c6a2107200341386c41486a41386e21272009200620091b222221030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a29020021232005412c6a290200212820052802002106200341346a200541346a2f01003b01002003412c6a2028370200200341246a20233702002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d37020020032006360200200341386a2103200541386a22052007470d000b202741016a2105202541386e21260b20002005108f0102402005450d00200541386c210941002106200041086a210303400240024002400240202220066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002125200020074104102f200028020020032802006a20253600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01200541286a2000108e012005412c6a2000108e01200541306a2000108e01024002400240200541346a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2009200641386a2206470d000b0b02400240200141a4016a28020022030d004104212541002129410021050c010b20034104200341044b1bad423c7e220d422088a722070d01200da722064100480d01200128029c01210520062007454102742006103222071b2127024020070d0020270d030c020b20052003413c6c6a21092003413c6c41446a413c6e212a2007200620071b222521030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a29020021232005412c6a2902002128200541346a280200210620052802002107200341386a200541386a2f01003b0100200341346a20063602002003412c6a2028370200200341246a20233702002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d370200200320073602002003413c6a21032005413c6a22052009470d000b202a41016a21052027413c6e21290b20002005108f0102402005450d002005413c6c210941002106200041086a210303400240024002400240202520066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a220736020020052802002127200020074104102f200028020020032802006a20273600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01200541286a2000108e012005412c6a2000108e01200541306a2000108e01200541346a2000108e01024002400240200541386a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b20092006413c6a2206470d000b0b02400240200141b0016a28020022030d00410421094100212b410021050c010b20034104200341044b1b220641ffffff1f7122072006470d01200641067422094100480d0120012802a8012105200920072006464102742009103222061b2127024020060d0020270d030c020b200520034106746a2107200341067441406a410676212a2006200920061b220921030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a29020021232005412c6a2902002128200541346a290200212c200528020021062003413c6a2005413c6a2f01003b0100200341346a202c3702002003412c6a2028370200200341246a20233702002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d37020020032006360200200341c0006a2103200541c0006a22052007470d000b202a41016a21052027410676212b0b20002005108f0102402005450d002005410674212741002106200041086a210303400240024002400240200920066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a22073602002005280200212a200020074104102f200028020020032802006a202a3600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01200541286a2000108e012005412c6a2000108e01200541306a2000108e01200541346a2000108e01200541386a2000108e010240024002402005413c6a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2027200641c0006a2206470d000b0b02400240200141bc016a28020022030d00410421014100212d410021050c010b20034104200341044b1bad42c4007e220d422088a722070d01200da722064100480d0120012802b401210520062007454102742006103222071b212a024020070d00202a0d030c020b2005200341c4006c6a2127200341c4006c41bc7f6a41c4006e212d2007200620071b220121030340200541046a290200210d2005410c6a290200211c200541146a290200211d2005411c6a290200211e200541246a29020021232005412c6a2902002128200541346a290200212c2005413c6a280200210620052802002107200341c0006a200541c0006a2f01003b01002003413c6a2006360200200341346a202c3702002003412c6a2028370200200341246a20233702002003411c6a201e370200200341146a201d3702002003410c6a201c370200200341046a200d37020020032007360200200341c4006a2103200541c4006a22052027470d000b202d41016a2105202a41c4006e212d0b20002005108f0102402005450d00200541c4006c212741002106200041086a210303400240024002400240200120066a2205280200220741c000490d00200741808001490d012007418080808004490d02200020032802004101102f200028020020032802006a41033a00002003200328020041016a22073602002005280200212a200020074104102f200028020020032802006a202a3600002003200328020041046a3602000c030b200020032802004101102f200028020020032802006a20074102743a00002003200328020041016a3602000c020b200020032802004102102f200028020020032802006a20074102744101723b00002003200328020041026a3602000c010b200020032802004104102f200028020020032802006a20074102744102723600002003200328020041046a3602000b200541046a2000108e01200541086a2000108e012005410c6a2000108e01200541106a2000108e01200541146a2000108e01200541186a2000108e012005411c6a2000108e01200541206a2000108e01200541246a2000108e01200541286a2000108e012005412c6a2000108e01200541306a2000108e01200541346a2000108e01200541386a2000108e012005413c6a2000108e01024002400240200541c0006a2f0100220541c000490d00200541808001490d01200020032802004104102f200028020020032802006a20054102744102723600002003200328020041046a3602000c020b200020032802004101102f200028020020032802006a20054102743a00002003200328020041016a3602000c010b200020032802004102102f200028020020032802006a20054102744101723b00002003200328020041026a3602000b2027200641c4006a2206470d000b0b0240202d450d00202d41c4006c450d002001102c0b0240202b450d002009102c0b02402029450d002029413c6c450d002025102c0b02402026450d00202641386c450d002022102c0b02402024450d00202441346c450d002020102c0b02402021450d00202141306c450d00201b102c0b0240201f450d00201f412c6c450d002019102c0b0240201a450d00201a41286c450d002018102c0b02402017450d00201741246c450d002015102c0b02402016450d002008102c0b02402014450d002014411c6c450d002013102c0b02402012450d00201241186c450d00200a102c0b02402011450d00201141146c450d002010102c0b0240200f450d00200e102c0b0240200c450d00200c410c6c450d00200b102c0b02402002450d002004102c0b0f0b103b000b1039000bc5a90102127f017e02400240417f417f417f417f417f417f417f417f417f417f417f417f417f417f200141086a2802002202200141146a28020022036a220420042002491b2204200141206a28020022056a220620062004491b22042001412c6a28020022066a220720072004491b2204200141386a28020022086a220720072004491b2204200141c4006a28020022096a220720072004491b2204200141d0006a280200220a6a220720072004491b2204200141dc006a28020022076a220b200b2004491b2204200141e8006a280200220c6a220b200b2004491b2204200141f4006a280200220d6a220b200b2004491b220420014180016a280200220e6a220b200b2004491b22042001418c016a280200220f6a220b200b2004491b220420014198016a28020022106a220b200b2004491b2204200141a4016a28020022116a220b200b2004491b2204200141b0016a28020022126a220b200b2004491b220b200141bc016a2802002204720d00410021030c010b417f417f417f417f417f417f417f417f417f417f417f417f417f417f417f2002417f200320036a221320132003491b6a220320032002491b2203417f2005ad42037e2214a72014422088a71b6a220520052003491b2203417f2006410274200641ffffffff03712006471b6a220620062003491b2203417f2008ad42057e2214a72014422088a71b6a220620062003491b2203417f2009ad42067e2214a72014422088a71b6a220620062003491b2203417f200aad42077e2214a72014422088a71b6a220620062003491b2203417f2007410374200741ffffffff01712007471b6a220620062003491b2203417f200cad42097e2214a72014422088a71b6a220620062003491b2203417f200dad420a7e2214a72014422088a71b6a220620062003491b2203417f200ead420b7e2214a72014422088a71b6a220620062003491b2203417f200fad420c7e2214a72014422088a71b6a220620062003491b2203417f2010ad420d7e2214a72014422088a71b6a220620062003491b2203417f2011ad420e7e2214a72014422088a71b6a220620062003491b2203417f2012ad420f7e2214a72014422088a71b6a220620062003491b2203417f2004410474200441ffffffff00712004471b6a220620062003491b417f200b20046a22042004200b491b6e21030b02400240200320036a22042003490d002004417f4c0d000240024020040d004102210b0c010b20041032220b450d02200141086a28020021020b41002103200041003602082000200b3602002000200441017636020402402002450d002001280200220420024103746a21080340200441086a2105200441046a2f0100210741002104024002400240024020030e020201000b41002104034020042003410176220220046a2206200741ffff0371200b20064101746a2f0100491b2104200320026b220341014b0d000b0b200741ffff03712203200b20044101746a2f01002202460d012004200320024b6a21040b2000200420071091010b20052008460d01200028020821032000280200210b200521040c000b0b0240200141146a2802002204450d00200128020c22082004410c6c6a210903402000280200210620082f01042105410021040240024002400240200028020822030e020201000b4100210420032102034020042002410176220720046a220b200541ffff03712006200b4101746a2f0100491b2104200220076b220241014b0d000b0b200541ffff03712202200620044101746a2f01002207460d012004200220074b6a21040b20002004200510910120002802082103200028020021060b2008410c6a210520082f0108210b41002104024002400240024020030e020201000b41002104034020042003410176220220046a2207200b41ffff0371200620074101746a2f0100491b2104200320026b220341014b0d000b0b200b41ffff03712203200620044101746a2f01002202460d012004200320024b6a21040b20002004200b1091010b2005210820052009470d000b0b0240200141206a2802002204450d002001280218220820044104746a210903402000280200210320082f01042105410021020240024002400240200028020822040e020201000b4100210220042106034020022006410176220720026a220b200541ffff03712003200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200320024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082104200028020021030b20082f0108210541002102024002400240024020040e020201000b4100210220042106034020022006410176220720026a220b200541ffff03712003200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200320024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082104200028020021030b200841106a210520082f010c210b41002102024002400240024020040e020201000b41002102034020022004410176220620026a2207200b41ffff0371200320074101746a2f0100491b2102200420066b220441014b0d000b0b200b41ffff03712204200320024101746a2f01002203460d012002200420034b6a21020b20002002200b1091010b2005210820052009470d000b0b02402001412c6a2802002204450d0020012802242208200441146c6a210903402000280200210420082f01042105410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0108210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f010c210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b200841146a210520082f0110210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210820052009470d000b0b0240200141386a2802002204450d0020012802302208200441186c6a210903402000280200210420082f01042105410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0108210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f010c210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0110210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b200841186a210520082f0114210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210820052009470d000b0b0240200141c4006a2802002204450d00200128023c22082004411c6c6a210903402000280200210420082f01042105410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0108210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f010c210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0110210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0114210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b2008411c6a210520082f0118210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210820052009470d000b0b0240200141d0006a2802002204450d002001280248220820044105746a210903402000280200210420082f01042105410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0108210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f010c210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0110210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0114210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0118210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b200841206a210520082f011c210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210820052009470d000b0b0240200141dc006a2802002204450d0020012802542208200441246c6a210903402000280200210420082f01042105410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0108210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f010c210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0110210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0114210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f0118210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b20082f011c210541002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200541ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200541ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200510910120002802082103200028020021040b200841246a210520082f0120210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210820052009470d000b0b0240200141e8006a2802002204450d0020012802602205200441286c6a210903402000280200210420052f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b200541286a210820052f0124210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2008210520082009470d000b0b0240200141f4006a2802002204450d00200128026c22052004412c6c6a210903402000280200210420052f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b2005412c6a210820052f0128210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2008210520082009470d000b0b024020014180016a2802002204450d0020012802782205200441306c6a210903402000280200210420052f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0128210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b200541306a210820052f012c210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2008210520082009470d000b0b02402001418c016a2802002204450d002001280284012205200441346c6a210903402000280200210420052f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0128210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f012c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b200541346a210820052f0130210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2008210520082009470d000b0b024020014198016a2802002204450d002001280290012205200441386c6a210903402000280200210420052f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0128210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f012c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b20052f0130210841002102024002400240024020030e020201000b4100210220032106034020022006410176220720026a220b200841ffff03712004200b4101746a2f0100491b2102200620076b220641014b0d000b0b200841ffff03712206200420024101746a2f01002207460d012002200620074b6a21020b20002002200810910120002802082103200028020021040b200541386a210820052f0134210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2008210520082009470d000b0b0240200141a4016a2802002204450d00200128029c0122072004413c6c6a210903402000280200210420072f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0128210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f012c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0130210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0134210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b2007413c6a210520072f0138210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210720052009470d000b0b0240200141b0016a2802002204450d0020012802a801220720044106746a210903402000280200210420072f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0128210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f012c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0130210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0134210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0138210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b200741c0006a210520072f013c210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210720052009470d000b0b0240200141bc016a2802002204450d0020012802b4012207200441c4006c6a210103402000280200210420072f01042108410021020240024002400240200028020822030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0108210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f010c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0110210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0114210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0118210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f011c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0120210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0124210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0128210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f012c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0130210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0134210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f0138210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b20072f013c210841002102024002400240024020030e020201000b4100210220032106034020022006410176220b20026a2205200841ffff0371200420054101746a2f0100491b21022006200b6b220641014b0d000b0b200841ffff03712206200420024101746a2f0100220b460d0120022006200b4b6a21020b20002002200810910120002802082103200028020021040b200741c4006a210520072f0140210b41002102024002400240024020030e020201000b41002102034020022003410176220620026a2207200b41ffff0371200420074101746a2f0100491b2102200320066b220341014b0d000b0b200b41ffff03712203200420024101746a2f01002204460d012002200320044b6a21020b20002002200b1091010b2005210720052001470d000b0b0f0b103b000b1039000be70201027f4101210202402001280200220341c000490d0041022102200341808001490d00410441052003418080808004491b21020b0240200210322203450d002000200236020420002003360200200041086a220341003602000240024002402001280200220241c000490d00200241808001490d012002418080808004490d02200041004101102f2000280200200041086a220228020022036a41033a00002002200341016a220336020020012802002101200020034104102f2000280200200228020022006a20013600002002200041046a3602000f0b200041004101102f2000280200200328020022006a20024102743a00002003200041016a3602000f0b200041004102102f2000280200200041086a220028020022016a20024102744101723b00002000200141026a3602000f0b200041004104102f2000280200200041086a220028020022016a20024102744102723600002000200141046a3602000f0b1039000b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000bb80201077f41002102024002400240200141016a2203200028020422044d0d000240200041146a22052802002201200041106a280200470d00200141016a22022001490d03200141017422062002200620024b1b22024104200241044b1b220241ffffffff037122072002470d03200241027422064100480d032007200246410274210702400240024002400240200028020c410020011b22020d002006450d010c030b200141027422080d0120060d020b200721020c020b200220082006103522020d010c040b200610322202450d030b2000200236020c200041106a20064102763602000b200028020c220241046a2002200141027410ca081a2002200320046b36020020002003360204410121022005200141016a3602002000200028020041016a3602000b20020f0b2007450d001039000b103b000bfe0101057f0240024020012802002202450d002001280204210303402002418c016a210420022f018a012105410021010240034020052001460d0141baaec0002004410810cc082206450d04200441086a2104200141016a21012006417f4a0d000b2001417f6a21050b2003450d012003417f6a2103200220054102746a41e4016a28020021020c000b0b200041003602042000410c6a4128360200200041086a41c2aec000360200200041013602000f0b0240200241046a2001410c6c6a22012802084108490d00200041086a2001280200290000370300200041003602000f0b20004201370300200041086a41eaaec000ad42808080809005843702000b9c0301037f02400240200241046a2203417f4c0d0002400240024002400240024020030d002000200336020420004101360200200041086a220341003602000c010b200310322204450d062000200336020420002004360200200041086a22034100360200200241c000490d01200241808001490d022002418080808004490d030b200041004101102f2000280200200041086a220528020022046a41033a00002005200441016a2204360200200020044104102f2000280200200528020022046a20023600002005200441046a22043602000c030b200041004101102f2000280200200041086a220528020022046a20024102743a00002005200441016a22043602000c020b200041004102102f2000280200200041086a220528020022046a20024102744101723b00002005200441026a22043602000c010b200041004104102f2000280200200041086a220528020022046a20024102744102723600002005200441046a22043602000b200020042002102f2000280200200328020022006a2001200210c9081a2003200020026a3602000f0b103b000b1039000b880501067f230041106b22022400200241003602082002420137030020012802002103200128020822042002107702402004450d0020032004410c6c6a2105034020032802002106200341086a280200220420021077200220022802082004102f2002280200200228020822076a2006200410c9081a2002200720046a3602082003410c6a22032005470d000b0b200128020c2103200141146a28020022042002107702402004450d00200320044104746a210520022802082104034020032802002106200220044104102f200228020020022802086a20063600002002200228020841046a360208200341046a28020021062003410c6a280200220420021077200220022802082004102f2002280200200228020822076a2006200410c9081a2002200720046a2204360208200341106a22032005470d000b0b20012802182103200220022802084101102f200228020020022802086a21040240024020030d00200441003a0000200228020841016a21030c010b200441013a00002002200228020841016a360208200141206a280200220420021077200220022802082004102f2002280200200228020822066a2003200410c9081a200620046a21030b20022003360208200128022421042001412c6a280200220320021077200220022802082003102f2002280200200228020822066a2004200310c9081a2002200620036a220336020820012802302104200220034104102f200228020020022802086a20043600002002200228020841046a220336020820012802342104200220034104102f200228020020022802086a20043600002002200228020841046a2203360208200020022802002003109a0102402002280204450d002002280200102c0b200241106a24000b4c0020002002ad4220862001ad8410112201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102c0b940501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200120012903c801370308200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b370388034100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341bc9ec0006a2104200341016a210320042d000022024103470d010b0b200141d0026a4200370300200141c8026a200129038803370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a20012903900337030020014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a420037030020012001290398033703d801200142003703d00120014280e497d0123703c801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110c9081a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110c9081a200142818080808088debe01370380032000200141c8016a108301200141a0036a24000b0e002000280200350200200110490bd903020a7f017e230041306b22032400024002402002450d002000200028020c220441016a20027036020c200341086a41206a2205200141206a290200370300200341086a41186a2206200141186a290200370300200341086a41106a2207200141106a290200370300200341086a41086a2208200141086a29020037030020032001290200370308024020002802082201200041046a280200470d00024002400240200141016a22092001490d004101210a4100210b02402001410174220c2009200c20094b1b22094104200941044b1bad422c7e220d422088a70d00200da721024100210a4104210b0b200a0d0020024100480d002000280200410020011b22090d012002450d0220021032220b0d02200a450d050b103b000b02402001412c6c22010d002002450d0120021032220b0d010c040b2009200120021035220b450d030b2000200b360200200041046a2002412c6e360200200028020821010b20002802002001412c6c6a2201200329030837020020012004360228200141206a2005290300370200200141186a2006290300370200200141106a2007290300370200200141086a20082903003702002000200028020841016a360208200341306a24000f0b41b0afc000413941ecafc000103c000b1039000bbf2603047f077e247f230041b0026b220224000240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a36020020050e050102030406050b200042053703000c090b200042003703000c080b200241e0016a2001109f01024020022d00e0014109460d00200241a8016a41306a200241e0016a41306a2903002206370300200241a8016a41286a200241e0016a41286a2903002207370300200241a8016a41206a200241e0016a41206a2903002208370300200241a8016a41186a200241e0016a41186a2903002209370300200241a8016a41106a200241e0016a41106a290300220a370300200241a8016a41086a200241e0016a41086a290300220b370300200220022903e001220c3703a801200042013703002000200c370308200041106a200b370300200041186a200a370300200041206a2009370300200041286a2008370300200041306a2007370300200041386a2006370300200041c0006a200241a80110c9081a0c080b200042053703000c070b200241e0016a2001109f0120022d00e00122034109460d03200241ac026a41026a220d20022d00e3013a0000200220022f00e1013b01ac02200241e0016a41086a220e2802002104200241e0016a410c6a280200210f200241e0016a41106a22102903002106200241e0016a41186a22112802002112200241fc016a2802002113200241e0016a41206a22142802002115200241e0016a41246a2802002116200241e0016a41286a22172802002118200241e0016a412c6a2802002119200241e0016a41306a221a290300210720022802e4012105200241e0016a2001109f01024020022d00e0014109460d00200241a8016a41306a2201201a290300370300200241a8016a41286a221a2017290300370300200241a8016a41206a22172014290300370300200241a8016a41186a22142011290300370300200241a8016a41106a22112010290300370300200241a8016a41086a2210200e290300370300200241a8026a41026a220e200d2d00003a0000200220022903e0013703a801200220022f01ac023b01a802200020033a000820004202370300200041386a2007370300200041346a2019360200200041306a20183602002000412c6a2016360200200041286a2015360200200041246a2013360200200041206a2012360200200041186a2006370300200041146a200f360200200041106a20043602002000410c6a2005360200200020022f01a8023b00092000410b6a200e2d00003a0000200041c0006a20022903a801370300200041c8006a2010290300370300200041d0006a2011290300370300200041d8006a2014290300370300200041e0006a2017290300370300200041e8006a201a290300370300200041f0006a2001290300370300200041f8006a200241f00010c9081a0c070b2000420537030002400240024002402003417e6a0e060001020a0a030a0b20164101470d092018410020191b2201450d092019450d092001102c0c090b20054101470d0820044100200f1b2201450d08200f450d082001102c0c080b20124101470d072013410020151b2201450d072015450d072001102c0c070b2005410020041b2201450d062004450d062001102c0c060b20022001109f0120022d000022034109460d03200241a8026a41026a20022d00033a0000200220022f00013b01a802200241086a221228020021042002410c6a2216280200211a200241106a220f2903002106200241186a221528020021142002411c6a2219280200211b200241206a2213280200211c200241246a22182802002117200241286a220d280200211d2002412c6a220e280200211e200241306a221029030021072002280204210520022001109f010240024020022d000022114109460d00200241ac026a41026a20022d00033a0000200220022f00013b01ac02201228020021122016280200211f200f29030021082015280200210f201928020021202013280200211920182802002115200d2802002118200e2802002113201029030021092002280204211620022001109f0120022d00004109460d01200241e0016a41306a2201200241306a290300370300200241e0016a41286a220d200241286a290300370300200241e0016a41206a220e200241206a290300370300200241e0016a41186a2210200241186a290300370300200241e0016a41106a2221200241106a290300370300200241e0016a41086a2222200241086a290300370300200241a4026a41026a2223200241a8026a41026a2d00003a0000200220022903003703e001200220022f01a8023b01a402200241a0026a41026a2224200241ac026a41026a2d00003a0000200220022f01ac023b01a002200020033a000820004203370300200041c0006a20113a0000200041386a2007370300200041346a201e360200200041306a201d3602002000412c6a2017360200200041286a201c360200200041246a201b360200200041206a2014360200200041186a2006370300200041146a201a360200200041106a20043602002000410c6a2005360200200020022f01a4023b00092000410b6a20232d00003a0000200020022f01a0023b0041200041c3006a20242d00003a0000200041f0006a2009370300200041ec006a2013360200200041e8006a2018360200200041e4006a2015360200200041e0006a2019360200200041dc006a2020360200200041d8006a200f360200200041d0006a2008370300200041cc006a201f360200200041c8006a2012360200200041c4006a2016360200200041a8016a2001290300370300200041a0016a200d29030037030020004198016a200e29030037030020004190016a201029030037030020004188016a202129030037030020004180016a2022290300370300200041f8006a20022903e001370300200041e0016a200241a8016a41306a290300370300200041d8016a200241a8016a41286a290300370300200041d0016a200241a8016a41206a290300370300200041c8016a200241a8016a41186a290300370300200041c0016a200241a8016a41106a290300370300200041b8016a200241a8016a41086a290300370300200041b0016a20022903a8013703000c070b2000420537030002400240024002402003417e6a0e060001020a0a030a0b20174101470d09201d4100201e1b2201450d09201e450d092001102c0c090b20054101470d0820044100201a1b2201450d08201a450d082001102c0c080b20144101470d07201b4100201c1b2201450d07201c450d072001102c0c070b2005410020041b2201450d062004450d062001102c0c060b20004205370300024002400240024002402011417e6a0e06000102040403040b20154101470d032018410020131b2201450d032013450d032001102c0c030b20164101470d0220124100201f1b2201450d02201f450d022001102c0c020b200f4101470d012020410020191b2201450d012019450d012001102c0c010b2016410020121b2201450d002012450d002001102c0b02400240024002402003417e6a0e06000102090903090b20174101470d08201d4100201e1b2201450d08201e450d082001102c0c080b20054101470d0720044100201a1b2201450d07201a450d072001102c0c070b20144101470d06201b4100201c1b2201450d06201c450d062001102c0c060b2005410020041b2201450d052004450d052001102c0c050b200042053703000c040b20022001109f0120022d000022034109460d02200241a8026a41026a20022d00033a0000200220022f00013b01a802200241086a221228020021042002410c6a2216280200211a200241106a220f2903002106200241186a221528020021142002411c6a2219280200211b200241206a2213280200211c200241246a22182802002117200241286a220d280200211d2002412c6a220e280200211e200241306a221029030021072002280204210520022001109f0102400240024020022d000022114109460d00200241ac026a41026a20022d00033a0000200220022f00013b01ac02201228020021122016280200211f200f290300210820152802002115201928020021202013280200211320182802002119200d280200210d200e2802002118201029030021092002280204211620022001109f0120022d0000220f4109460d01200241a8016a41026a222520022d00033a0000200220022f00013b01a801200241086a2226280200210e2002410c6a2802002123200241106a2227290300210a200241186a222828020021212002411c6a2802002129200241206a222a2802002124200241246a2802002122200241286a222b280200212c2002412c6a280200212d200241306a222e290300210b2002280204211020022001109f0120022d00004109460d02200241e0016a41306a2201202e290300370300200241e0016a41286a222e202b290300370300200241e0016a41206a222b202a290300370300200241e0016a41186a222a2028290300370300200241e0016a41106a22282027290300370300200241e0016a41086a22272026290300370300200241a4026a41026a2226200241a8026a41026a2d00003a0000200220022903003703e001200220022f01a8023b01a402200241a0026a41026a222f200241ac026a41026a2d00003a0000200220022f01ac023b01a0022002419c026a41026a223020252d00003a0000200220022f01a8013b019c02200020033a000820004204370300200041c0006a20113a0000200041386a2007370300200041346a201e360200200041306a201d3602002000412c6a2017360200200041286a201c360200200041246a201b360200200041206a2014360200200041186a2006370300200041146a201a360200200041106a20043602002000410c6a2005360200200020022f01a4023b00092000410b6a20262d00003a0000200020022f01a0023b0041200041c3006a202f2d00003a0000200041f8006a200f3a0000200041f0006a2009370300200041ec006a2018360200200041e8006a200d360200200041e4006a2019360200200041e0006a2013360200200041dc006a2020360200200041d8006a2015360200200041d0006a2008370300200041cc006a201f360200200041c8006a2012360200200041c4006a2016360200200041fb006a20302d00003a0000200020022f019c023b0079200041a8016a200b370300200041a4016a202d360200200041a0016a202c3602002000419c016a202236020020004198016a202436020020004194016a202936020020004190016a202136020020004188016a200a37030020004184016a202336020020004180016a200e360200200041fc006a2010360200200041e0016a2001290300370300200041d8016a202e290300370300200041d0016a202b290300370300200041c8016a202a290300370300200041c0016a2028290300370300200041b8016a2027290300370300200041b0016a20022903e0013703000c060b2000420537030002400240024002402003417e6a0e06000102090903090b20174101470d08201d4100201e1b2201450d08201e450d082001102c0c080b20054101470d0720044100201a1b2201450d07201a450d072001102c0c070b20144101470d06201b4100201c1b2201450d06201c450d062001102c0c060b2005410020041b2201450d052004450d052001102c0c050b20004205370300024002400240024002402011417e6a0e06000102040403040b20194101470d03200d410020181b2201450d032018450d032001102c0c030b20164101470d0220124100201f1b2201450d02201f450d022001102c0c020b20154101470d012020410020131b2201450d012013450d012001102c0c010b2016410020121b2201450d002012450d002001102c0b02400240024002402003417e6a0e06000102080803080b20174101470d07201d4100201e1b2201450d07201e450d072001102c0c070b20054101470d0620044100201a1b2201450d06201a450d062001102c0c060b20144101470d05201b4100201c1b2201450d05201c450d052001102c0c050b2005410020041b2201450d042004450d042001102c0c040b2000420537030002400240024002400240200f417e6a0e06000102040403040b20224101470d03202c4100202d1b2201450d03202d450d032001102c0c030b20104101470d02200e410020231b2201450d022023450d022001102c0c020b20214101470d012029410020241b2201450d012024450d012001102c0c010b20104100200e1b2201450d00200e450d002001102c0b024002400240024002402011417e6a0e06000102040403040b20194101470d03200d410020181b2201450d032018450d032001102c0c030b20164101470d0220124100201f1b2201450d02201f450d022001102c0c020b20154101470d012020410020131b2201450d012013450d012001102c0c010b2016410020121b2201450d002012450d002001102c0b02400240024002402003417e6a0e06000102070703070b20174101470d06201d4100201e1b2201450d06201e450d062001102c0c060b20054101470d0520044100201a1b2201450d05201a450d052001102c0c050b20144101470d04201b4100201c1b2201450d04201c450d042001102c0c040b2005410020041b2201450d032004450d032001102c0c030b200042053703000c020b200042053703000c010b200042053703000b200241b0026a24000bc11a03097f047e017f230041a0026b2202240002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e090102030405060708090a0b200041093a00000c0d0b200041003a00000c0c0b20022001108702024020022802000d0020022802042101200041013a0000200020022f00b0013b0001200041046a2001360200200041086a2002290378370300200041036a200241b2016a2d00003a0000200041106a200241f8006a41086a290300370300200041186a200241f8006a41106a290300370300200041206a200241f8006a41186a290300370300200041286a200241f8006a41206a290300370300200041306a200241f8006a41286a2903003703000c0c0b200041093a00000c0b0b02402006450d0020042d0001210520012003417e6a22033602042001200441026a360200410021044100210741002108024002400240024020050e0403000102040b200241f8006a2001108a0220022802782209450d0320024180016a280200210a200228027c21062001280204210341012107410121080c020b41002107410221080c010b41032108410021070b200241003a0098012003417f6a21030240024003402003417f460d01200241f8006a20046a200128020022052d00003a0000200120033602042001200541016a3602002002200441016a22053a0098012003417f6a21032005210420054120470d000b200241b0016a41086a2201200241f8006a41086a290300370300200241b0016a41106a2203200241f8006a41106a290300370300200241b0016a41186a2204200241f8006a41186a290300370300200220022903783703b001200541ff0171411f4d0d01200241306a41086a2001290300220b370300200241306a41106a2003290300220c370300200241306a41186a2004290300220d370300200220022903b001220e370330200041023a00002000200e370001200041096a200b370000200041116a200c370000200041196a200d370000200041306a200a3600002000412c6a2006360000200041286a2009360000200041246a2008360000200041216a20022f00753b0000200041236a200241f5006a41026a2d00003a00000c0d0b200441ff0171450d00200241003a0098010b200041093a00002007450d0b2009410020061b2201450d0b2006450d0b2001102c0c0b0b200041093a00000c0a0b024002402006450d0020042d0001210620012003417e6a3602042001200441026a3602004100210541002109024002400240024020060e0403000102040b200241b0016a2001108a0220022802b0012204450d03200241b8016a280200210720022802b401210341012105410121090c020b41002105410221090c010b41032109410021050b200241086a200110c1042002290308a70d012002290310210b200041033a0000200020022f00503b0001200041186a200b370300200041106a20073600002000410c6a2003360000200041086a2004360000200041046a2009360000200041206a2002290378370300200041036a200241d2006a2d00003a0000200041286a200241f8006a41086a290300370300200041306a200241f8006a41106a2903003703000c0b0b200041093a00000c0a0b200041093a00002005450d092004410020031b2201450d092003450d092001102c0c090b02402006450d0020042d0001210720012003417e6a22033602042001200441026a360200410021044100210a024002400240024020070e0403000102040b200241f8006a2001108a0220022802782206450d0320024180016a2802002109200228027c210520012802042103410121044101210a0c020b410021044102210a0c010b4103210a410021040b200241003a008c012003450d08200128020022072d0000210820012003417f6a220f360204200241013a008c012001200741016a360200200220083a0078200f0d060c070b200041093a00000c080b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200020053a0001200041053a0000200041026a20022901783701002000410a6a20024180016a290100370100200041126a20024188016a2901003701002000411a6a20024190016a290100370100200041226a20024198016a2901003701002000412a6a200241a0016a290100370100200041306a200241a6016a2901003701000c080b200041093a00000c070b200241186a200110f70302402002290318a70d00200241186a41106a290300210b2002290320210c200041063a0000200020022800b001360001200041086a200c370300200041186a2002290378370300200041106a200b370300200041046a200241b3016a280000360000200041206a200241f8006a41086a290300370300200041286a200241f8006a41106a290300370300200041306a200241f8006a41186a2903003703000c070b200041093a00000c060b200241d0006a2001108a0202402002280250450d00200241bb016a200241d0006a41086a280200360000200220022903503700b301200041073a0000200020022900b001370001200041086a200241b0016a41076a290000370000200041106a2002290378370300200041186a200241f8006a41086a290300370300200041206a200241f8006a41106a290300370300200041286a200241f8006a41186a290300370300200041306a200241f8006a41206a2903003703000c060b200041093a00000c050b200041083a00000c040b200041093a00000c030b200128020022072d0000210820012003417e6a220f3602042001200741016a360200200241023a008c01200220083a0079200f450d00200128020022072d0000210820012003417d6a220f3602042001200741016a360200200241033a008c01200220083a007a200f450d00200128020022072d0000210820012003417c6a220f3602042001200741016a360200200241043a008c01200220083a007b200f450d00200128020022072d0000210820012003417b6a220f3602042001200741016a360200200241053a008c01200220083a007c200f450d00200128020022072d0000210820012003417a6a220f3602042001200741016a360200200241063a008c01200220083a007d200f450d00200128020022072d000021082001200341796a220f3602042001200741016a360200200241073a008c01200220083a007e200f450d00200128020022072d000021082001200341786a220f3602042001200741016a360200200241083a008c01200220083a007f200f450d00200128020022072d000021082001200341776a220f3602042001200741016a360200200241093a008c01200220083a008001200f450d00200128020022072d000021082001200341766a220f3602042001200741016a3602002002410a3a008c01200220083a008101200f450d00200128020022072d000021082001200341756a220f3602042001200741016a3602002002410b3a008c01200220083a008201200f450d00200128020022072d000021082001200341746a220f3602042001200741016a3602002002410c3a008c01200220083a008301200f450d00200128020022072d000021082001200341736a220f3602042001200741016a3602002002410d3a008c01200220083a008401200f450d00200128020022072d000021082001200341726a220f3602042001200741016a3602002002410e3a008c01200220083a008501200f450d00200128020022072d000021082001200341716a220f3602042001200741016a3602002002410f3a008c01200220083a008601200f450d00200128020022072d000021082001200341706a220f3602042001200741016a360200200241103a008c01200220083a008701200f450d00200128020022072d0000210820012003416f6a220f3602042001200741016a360200200241113a008c01200220083a008801200f450d00200128020022072d0000210820012003416e6a220f3602042001200741016a360200200241123a008c01200220083a008901200f450d00200128020022072d0000210820012003416d6a220f3602042001200741016a360200200241133a008c01200220083a008a01200f450d00200128020022042d0000210720012003416c6a3602042001200441016a360200200241b0016a41086a2201200241f8006a41086a290300370300200220073a008b01200241b0016a41106a2203200241f8006a41106a280200360200200241143a008c01200220022903783703b001200241d0006a41106a22042003280200360200200241d0006a41086a22032001290300370300200220022903b001370350200041043a000020002002290350370001200041096a2003290300370000200041116a2004280200360000200041246a2009360000200041206a20053600002000411c6a2006360000200041186a200a360000200041156a20022f00753b0000200041176a200241f7006a2d00003a0000200041286a2002290330370300200041306a200241306a41086a2903003703000c020b200241003a008c010b200041093a00002004450d002006410020051b2201450d002005450d002001102c0b200241a0026a24000bc42603057f077e237f230041b0026b2202240002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e050102030406050b200042053703000c090b200042003703000c080b200241e0016a200110a101024020022d00e0014109460d00200241a8016a41306a200241e0016a41306a2903002207370300200241a8016a41286a200241e0016a41286a2903002208370300200241a8016a41206a200241e0016a41206a2903002209370300200241a8016a41186a200241e0016a41186a290300220a370300200241a8016a41106a200241e0016a41106a290300220b370300200241a8016a41086a200241e0016a41086a290300220c370300200220022903e001220d3703a801200042013703002000200d370308200041106a200c370300200041186a200b370300200041206a200a370300200041286a2009370300200041306a2008370300200041386a2007370300200041c0006a200241a80110c9081a0c080b200042053703000c070b200241e0016a200110a10120022d00e00122034109460d03200241ac026a41026a220e20022d00e3013a0000200220022f00e1013b01ac02200241e0016a41086a220f2802002104200241e0016a410c6a2802002110200241e0016a41106a22112903002107200241e0016a41186a22122802002106200241fc016a2802002113200241e0016a41206a22142802002115200241e0016a41246a2802002116200241e0016a41286a22172802002118200241e0016a412c6a2802002119200241e0016a41306a221a290300210820022802e4012105200241e0016a200110a101024020022d00e0014109460d00200241a8016a41306a2201201a290300370300200241a8016a41286a221a2017290300370300200241a8016a41206a22172014290300370300200241a8016a41186a22142012290300370300200241a8016a41106a22122011290300370300200241a8016a41086a2211200f290300370300200241a8026a41026a220f200e2d00003a0000200220022903e0013703a801200220022f01ac023b01a802200020033a000820004202370300200041386a2008370300200041346a2019360200200041306a20183602002000412c6a2016360200200041286a2015360200200041246a2013360200200041206a2006360200200041186a2007370300200041146a2010360200200041106a20043602002000410c6a2005360200200020022f01a8023b00092000410b6a200f2d00003a0000200041c0006a20022903a801370300200041c8006a2011290300370300200041d0006a2012290300370300200041d8006a2014290300370300200041e0006a2017290300370300200041e8006a201a290300370300200041f0006a2001290300370300200041f8006a200241f00010c9081a0c070b2000420537030002400240024002402003417e6a0e060001020a0a030a0b20164101470d092018410020191b2200450d092019450d092000102c0c090b20054101470d082004410020101b2200450d082010450d082000102c0c080b20064101470d072013410020151b2200450d072015450d072000102c0c070b2005410020041b2200450d062004450d062000102c0c060b2002200110a10120022d000022034109460d03200241a8026a41026a20022d00033a0000200220022f00013b01a802200241086a220628020021042002410c6a2216280200211a200241106a22102903002107200241186a221528020021142002411c6a2219280200211b200241206a2213280200211c200241246a22182802002117200241286a220e280200211d2002412c6a220f280200211e200241306a22112903002108200228020421052002200110a1010240024020022d000022124109460d00200241ac026a41026a20022d00033a0000200220022f00013b01ac02200628020021062016280200211f2010290300210920152802002110201928020021202013280200211920182802002115200e2802002118200f28020021132011290300210a200228020421162002200110a10120022d00004109460d01200241e0016a41306a2201200241306a290300370300200241e0016a41286a220e200241286a290300370300200241e0016a41206a220f200241206a290300370300200241e0016a41186a2211200241186a290300370300200241e0016a41106a2221200241106a290300370300200241e0016a41086a2222200241086a290300370300200241a4026a41026a2223200241a8026a41026a2d00003a0000200220022903003703e001200220022f01a8023b01a402200241a0026a41026a2224200241ac026a41026a2d00003a0000200220022f01ac023b01a002200020033a000820004203370300200041c0006a20123a0000200041386a2008370300200041346a201e360200200041306a201d3602002000412c6a2017360200200041286a201c360200200041246a201b360200200041206a2014360200200041186a2007370300200041146a201a360200200041106a20043602002000410c6a2005360200200020022f01a4023b00092000410b6a20232d00003a0000200020022f01a0023b0041200041c3006a20242d00003a0000200041f0006a200a370300200041ec006a2013360200200041e8006a2018360200200041e4006a2015360200200041e0006a2019360200200041dc006a2020360200200041d8006a2010360200200041d0006a2009370300200041cc006a201f360200200041c8006a2006360200200041c4006a2016360200200041a8016a2001290300370300200041a0016a200e29030037030020004198016a200f29030037030020004190016a201129030037030020004188016a202129030037030020004180016a2022290300370300200041f8006a20022903e001370300200041e0016a200241a8016a41306a290300370300200041d8016a200241a8016a41286a290300370300200041d0016a200241a8016a41206a290300370300200041c8016a200241a8016a41186a290300370300200041c0016a200241a8016a41106a290300370300200041b8016a200241a8016a41086a290300370300200041b0016a20022903a8013703000c070b2000420537030002400240024002402003417e6a0e060001020a0a030a0b20174101470d09201d4100201e1b2200450d09201e450d092000102c0c090b20054101470d0820044100201a1b2200450d08201a450d082000102c0c080b20144101470d07201b4100201c1b2200450d07201c450d072000102c0c070b2005410020041b2200450d062004450d062000102c0c060b20004205370300024002400240024002402012417e6a0e06000102040403040b20154101470d032018410020131b2200450d032013450d032000102c0c030b20164101470d0220064100201f1b2200450d02201f450d022000102c0c020b20104101470d012020410020191b2200450d012019450d012000102c0c010b2016410020061b2200450d002006450d002000102c0b02400240024002402003417e6a0e06000102090903090b20174101470d08201d4100201e1b2200450d08201e450d082000102c0c080b20054101470d0720044100201a1b2200450d07201a450d072000102c0c070b20144101470d06201b4100201c1b2200450d06201c450d062000102c0c060b2005410020041b2200450d052004450d052000102c0c050b200042053703000c040b2002200110a10120022d000022034109460d02200241a8026a41026a20022d00033a0000200220022f00013b01a802200241086a220628020021042002410c6a2216280200211a200241106a22102903002107200241186a221528020021142002411c6a2219280200211b200241206a2213280200211c200241246a22182802002117200241286a220e280200211d2002412c6a220f280200211e200241306a22112903002108200228020421052002200110a10102400240024020022d000022124109460d00200241ac026a41026a20022d00033a0000200220022f00013b01ac02200628020021062016280200211f2010290300210920152802002115201928020021202013280200211320182802002119200e280200210e200f28020021182011290300210a200228020421162002200110a10120022d000022104109460d01200241a8016a41026a222520022d00033a0000200220022f00013b01a801200241086a2226280200210f2002410c6a2802002123200241106a2227290300210b200241186a222828020021212002411c6a2802002129200241206a222a2802002124200241246a2802002122200241286a222b280200212c2002412c6a280200212d200241306a222e290300210c200228020421112002200110a10120022d00004109460d02200241e0016a41306a2201202e290300370300200241e0016a41286a222e202b290300370300200241e0016a41206a222b202a290300370300200241e0016a41186a222a2028290300370300200241e0016a41106a22282027290300370300200241e0016a41086a22272026290300370300200241a4026a41026a2226200241a8026a41026a2d00003a0000200220022903003703e001200220022f01a8023b01a402200241a0026a41026a222f200241ac026a41026a2d00003a0000200220022f01ac023b01a0022002419c026a41026a223020252d00003a0000200220022f01a8013b019c02200020033a000820004204370300200041c0006a20123a0000200041386a2008370300200041346a201e360200200041306a201d3602002000412c6a2017360200200041286a201c360200200041246a201b360200200041206a2014360200200041186a2007370300200041146a201a360200200041106a20043602002000410c6a2005360200200020022f01a4023b00092000410b6a20262d00003a0000200020022f01a0023b0041200041c3006a202f2d00003a0000200041f8006a20103a0000200041f0006a200a370300200041ec006a2018360200200041e8006a200e360200200041e4006a2019360200200041e0006a2013360200200041dc006a2020360200200041d8006a2015360200200041d0006a2009370300200041cc006a201f360200200041c8006a2006360200200041c4006a2016360200200041fb006a20302d00003a0000200020022f019c023b0079200041a8016a200c370300200041a4016a202d360200200041a0016a202c3602002000419c016a202236020020004198016a202436020020004194016a202936020020004190016a202136020020004188016a200b37030020004184016a202336020020004180016a200f360200200041fc006a2011360200200041e0016a2001290300370300200041d8016a202e290300370300200041d0016a202b290300370300200041c8016a202a290300370300200041c0016a2028290300370300200041b8016a2027290300370300200041b0016a20022903e0013703000c060b2000420537030002400240024002402003417e6a0e06000102090903090b20174101470d08201d4100201e1b2200450d08201e450d082000102c0c080b20054101470d0720044100201a1b2200450d07201a450d072000102c0c070b20144101470d06201b4100201c1b2200450d06201c450d062000102c0c060b2005410020041b2200450d052004450d052000102c0c050b20004205370300024002400240024002402012417e6a0e06000102040403040b20194101470d03200e410020181b2200450d032018450d032000102c0c030b20164101470d0220064100201f1b2200450d02201f450d022000102c0c020b20154101470d012020410020131b2200450d012013450d012000102c0c010b2016410020061b2200450d002006450d002000102c0b02400240024002402003417e6a0e06000102080803080b20174101470d07201d4100201e1b2200450d07201e450d072000102c0c070b20054101470d0620044100201a1b2200450d06201a450d062000102c0c060b20144101470d05201b4100201c1b2200450d05201c450d052000102c0c050b2005410020041b2200450d042004450d042000102c0c040b20004205370300024002400240024002402010417e6a0e06000102040403040b20224101470d03202c4100202d1b2200450d03202d450d032000102c0c030b20114101470d02200f410020231b2200450d022023450d022000102c0c020b20214101470d012029410020241b2200450d012024450d012000102c0c010b20114100200f1b2200450d00200f450d002000102c0b024002400240024002402012417e6a0e06000102040403040b20194101470d03200e410020181b2200450d032018450d032000102c0c030b20164101470d0220064100201f1b2200450d02201f450d022000102c0c020b20154101470d012020410020131b2200450d012013450d012000102c0c010b2016410020061b2200450d002006450d002000102c0b02400240024002402003417e6a0e06000102070703070b20174101470d06201d4100201e1b2200450d06201e450d062000102c0c060b20054101470d0520044100201a1b2200450d05201a450d052000102c0c050b20144101470d04201b4100201c1b2200450d04201c450d042000102c0c040b2005410020041b2200450d032004450d032000102c0c030b200042053703000c020b200042053703000c010b200042053703000b200241b0026a24000b8c12020a7f027e230041b0026b22022400024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e090102030405060708090a0b200041093a00000c0a0b200041003a00000c090b2002200110b003024020022802000d0020022802042101200041013a0000200020022f00503b0001200041046a2001360200200041086a200229038801370300200041036a200241d2006a2d00003a0000200041106a20024188016a41086a290300370300200041186a20024188016a41106a290300370300200041206a20024188016a41186a290300370300200041286a20024188016a41206a290300370300200041306a20024188016a41286a2903003703000c090b200041093a00000c080b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004100210341002107410021080240024002400240024020060e0404000102050b20024188016a200110c6042002280288012209450d0420024190016a280200210a200228028c01210b41012107410121080c030b410221080c010b410321080b410021070b200241003a00a80102400340200128020022042802042205450d0120024188016a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00a80120034120470d000b200241d0006a41186a20024188016a41186a290300220c370300200241306a41086a220120024188016a41086a290300370300200241306a41106a220320024188016a41106a290300370300200241306a41186a2204200c3703002002200229038801370330200041023a000020002002290330370001200041096a2001290300370000200041116a2003290300370000200041196a2004290300370000200041306a200a3600002000412c6a200b360000200041286a2009360000200041246a2008360000200041216a20022f00703b0000200041236a200241f0006a41026a2d00003a00000c090b0240200341ff0171450d00200241003a00a8010b200041093a00002007450d0820094100200b1b2201450d08200b450d082001102c0c080b200041093a00000c070b02400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020041002105410021090240024002400240024020060e0404000102050b200241d0006a200110c60420022802502204450d04200241d8006a280200210b2002280254210341012105410121090c030b410221090c010b410321090b410021050b200241086a200110c5042002290308a70d012002290310210c200041033a0000200020022f00303b0001200041186a200c370300200041106a200b3600002000410c6a2003360000200041086a2004360000200041046a2009360000200041206a200229038801370300200041036a200241326a2d00003a0000200041286a20024188016a41086a290300370300200041306a20024188016a41106a2903003703000c080b200041093a00000c070b200041093a00002005450d062004410020031b2201450d062003450d062001102c0c060b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004100210341002107410021080240024002400240024020060e0404000102050b20024188016a200110c6042002280288012209450d0420024190016a280200210a200228028c01210b41012107410121080c030b410221080c010b410321080b410021070b200241003a009c0102400340200128020022042802042205450d0120024188016a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a009c0120034114470d000b200241306a41086a20024188016a41086a290300220c370300200241306a41106a20024188016a41106a28020022013602002002200229038801220d370330200041043a00002000200d370001200041096a200c370000200041116a2001360000200041246a200a360000200041206a200b3600002000411c6a2009360000200041186a2008360000200041156a20022f0085013b0000200041176a20024187016a2d00003a0000200041286a2002290370370300200041306a200241f0006a41086a2903003703000c070b0240200341ff0171450d00200241003a009c010b200041093a00002007450d0620094100200b1b2201450d06200b450d062001102c0c060b200041093a00000c050b0240200128020022012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200020053a0001200041053a0000200041026a2002290188013701002000410a6a20024190016a290100370100200041126a20024198016a2901003701002000411a6a200241a0016a290100370100200041226a200241a8016a2901003701002000412a6a200241b0016a290100370100200041306a200241b6016a2901003701000c050b200041093a00000c040b200241186a200110b10302402002290318a70d00200241186a41106a290300210c2002290320210d200041063a000020002002280050360001200041086a200d370300200041186a200229038801370300200041106a200c370300200041046a200241d3006a280000360000200041206a20024188016a41086a290300370300200041286a20024188016a41106a290300370300200041306a20024188016a41186a2903003703000c040b200041093a00000c030b200241306a200110c60402402002280230450d00200241db006a200241306a41086a28020036000020022002290330370053200041073a000020002002290050370001200041086a200241d0006a41076a290000370000200041106a200229038801370300200041186a20024188016a41086a290300370300200041206a20024188016a41106a290300370300200041286a20024188016a41186a290300370300200041306a20024188016a41206a2903003703000c030b200041093a00000c020b200041083a00000c010b200041093a00000b200241b0026a24000b961001027f0240024002400240024020002802000e0404000102030b024002400240024020002d0008417e6a0e06000102070703070b200028022c4101470d06200041346a2802002201450d0620002802302200450d062001450d062000102c0f0b200028020c4101470d05200041146a2802002201450d0520002802102200450d052001450d052000102c0f0b200041206a2802004101470d04200041286a2802002201450d0420002802242200450d042001450d042000102c0f0b200041106a2802002201450d03200028020c2200450d032001450d032000102c0f0b0240024002400240024020002d0008417e6a0e06000102040403040b200028022c4101470d03200041346a2802002201450d0320002802302202450d032001450d032002102c0c030b200028020c4101470d02200041146a2802002201450d0220002802102202450d022001450d022002102c0c020b200041206a2802004101470d01200041286a2802002201450d0120002802242202450d012001450d012002102c0c010b200041106a2802002201450d00200028020c2202450d002001450d002002102c0b0240024002400240200041c0006a2d0000417e6a0e06000102060603060b20002802644101470d05200041ec006a2802002201450d0520002802682200450d052001450d052000102c0f0b20002802444101470d04200041cc006a2802002201450d0420002802482200450d042001450d042000102c0f0b200041d8006a2802004101470d03200041e0006a2802002201450d03200028025c2200450d032001450d032000102c0f0b200041c8006a2802002201450d0220002802442200450d022001450d022000102c0f0b0240024002400240024020002d0008417e6a0e06000102040403040b200028022c4101470d03200041346a2802002201450d0320002802302202450d032001450d032002102c0c030b200028020c4101470d02200041146a2802002201450d0220002802102202450d022001450d022002102c0c020b200041206a2802004101470d01200041286a2802002201450d0120002802242202450d012001450d012002102c0c010b200041106a2802002201450d00200028020c2202450d002001450d002002102c0b02400240024002400240200041c0006a2d0000417e6a0e06000102040403040b20002802644101470d03200041ec006a2802002201450d0320002802682202450d032001450d032002102c0c030b20002802444101470d02200041cc006a2802002201450d0220002802482202450d022001450d022002102c0c020b200041d8006a2802004101470d01200041e0006a2802002201450d01200028025c2202450d012001450d012002102c0c010b200041c8006a2802002201450d0020002802442202450d002001450d002002102c0b0240024002400240200041f8006a2d0000417e6a0e06000102050503050b200028029c014101470d04200041a4016a2802002201450d0420002802a0012200450d042001450d042000102c0f0b200028027c4101470d0320004184016a2802002201450d032000280280012200450d032001450d032000102c0c030b20004190016a2802004101470d0220004198016a2802002201450d022000280294012200450d022001450d022000102c0f0b20004180016a2802002201450d01200028027c2200450d012001450d012000102c0f0b0240024002400240024020002d0008417e6a0e06000102040403040b200028022c4101470d03200041346a2802002201450d0320002802302202450d032001450d032002102c0c030b200028020c4101470d02200041146a2802002201450d0220002802102202450d022001450d022002102c0c020b200041206a2802004101470d01200041286a2802002201450d0120002802242202450d012001450d012002102c0c010b200041106a2802002201450d00200028020c2202450d002001450d002002102c0b02400240024002400240200041c0006a2d0000417e6a0e06000102040403040b20002802644101470d03200041ec006a2802002201450d0320002802682202450d032001450d032002102c0c030b20002802444101470d02200041cc006a2802002201450d0220002802482202450d022001450d022002102c0c020b200041d8006a2802004101470d01200041e0006a2802002201450d01200028025c2202450d012001450d012002102c0c010b200041c8006a2802002201450d0020002802442202450d002001450d002002102c0b02400240024002400240200041f8006a2d0000417e6a0e06000102040403040b200028029c014101470d03200041a4016a2802002201450d0320002802a0012202450d032001450d032002102c0c030b200028027c4101470d0220004184016a2802002201450d022000280280012202450d022001450d022002102c0c020b20004190016a2802004101470d0120004198016a2802002201450d012000280294012202450d012001450d012002102c0c010b20004180016a2802002201450d00200028027c2202450d002001450d002002102c0b0240024002400240200041b0016a2d0000417e6a0e06000102040403040b20002802d4014101470d03200041dc016a2802002201450d0320002802d8012200450d032001450d032000102c0f0b20002802b4014101470d02200041bc016a2802002201450d0220002802b8012200450d022001450d022000102c0f0b200041c8016a2802004101470d01200041d0016a2802002201450d0120002802cc012200450d012001450d012000102c0f0b200041b8016a2802002201450d0020002802b4012200450d002001450d002000102c0f0b0bc70401037f20022001108f0102402001450d0020014188026c2103200241086a210141002104034002400240024002400240024002400240200020046a22052802000e0700010203040506070b200220012802004101102f200228020020012802006a41003a00002001200128020041016a3602000c060b200220012802004101102f200228020020012802006a41013a00002001200128020041016a3602002002200541046a10a4012002200541106a10a5010c050b200220012802004101102f200228020020012802006a41023a00002001200128020041016a3602002002200541046a10a4012002200541206a10a501200541106a280200200541186a280200200210a3010c040b200220012802004101102f200228020020012802006a41033a00002001200128020041016a3602002002200541046a10a4012002200541106a10a4010c030b200220012802004101102f200228020020012802006a41043a00002001200128020041016a3602002002200541046a10a4012002200541206a10a501200541106a280200200541186a280200200210a3010c020b200220012802004101102f200228020020012802006a41053a00002001200128020041016a3602002002200541046a10a4012002200541206a10a501200541106a280200200541186a280200200210a3010c010b200220012802004101102f200228020020012802006a41063a00002001200128020041016a3602002002200541106a10a6012002200541186a10a5012002200541046a10a4010b200320044188026a2204470d000b0b0bbe0601037f230041106b2202240020012802002103200020012802082201108f0102402001450d0020014198026c2104200041086a21010340024002400240024002400240024002400240024002400240024020032802000e0c000102030405060708090a0b0c0b200020012802004101102f200028020020012802006a41003a00002001200128020041016a3602000c0b0b200020012802004101102f200028020020012802006a41013a00002001200128020041016a3602000c0a0b200020012802004101102f200028020020012802006a41023a00002001200128020041016a3602000c090b200020012802004101102f200028020020012802006a41033a00002001200128020041016a3602000c080b200020012802004101102f200028020020012802006a41043a00002001200128020041016a360200200341046a2802002003410c6a280200200010bb010c070b200020012802004101102f200028020020012802006a41053a00002001200128020041016a360200200341046a2802002003410c6a280200200010bb010c060b200020012802004101102f200028020020012802006a41063a00002001200128020041016a3602002000200341086a10a5010c050b200020012802004101102f200028020020012802006a41073a00002001200128020041016a3602002000200341086a10a5010c040b200020012802004101102f200028020020012802006a41083a00002001200128020041016a360200200341046a2802002003410c6a280200200010bb012002200341106a360208200241086a200010e9030c030b200020012802004101102f200028020020012802006a41093a00002001200128020041016a360200200341046a2802002003410c6a280200200010bb012000200341106a10b6070c020b200020012802004101102f200028020020012802006a410a3a00002001200128020041016a3602002000200341086a10a5012002200341f0016a36020c2002410c6a200010e9030c010b200020012802004101102f200028020020012802006a410b3a00002001200128020041016a3602002000200341086a10a5012000200341f0016a10b6070b20034198026a2103200441e87d6a22040d000b0b200241106a24000bf20201017f02400240024002400240024020012802000e050001020304050b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22022802004101102f200028020020022802006a41013a00002002200228020041016a3602002000200141086a10af070f0b2000200041086a22022802004101102f200028020020022802006a41023a00002002200228020041016a3602002000200141086a10af072000200141c0006a10af070f0b2000200041086a22022802004101102f200028020020022802006a41033a00002002200228020041016a3602002000200141086a10af072000200141c0006a10af072000200141f8006a10af070f0b2000200041086a22022802004101102f200028020020022802006a41043a00002002200228020041016a3602002000200141086a10af072000200141c0006a10af072000200141f8006a10af072000200141b0016a10af070b0bd20403017f017e047f230041e0006b22022400024002402001290300220342c000540d00024002400240200342808001540d002003428080808004540d014108200379a741037622046b4104490d022000200041086a22052802004101102f200028020020052802006a411320044102746b3a00002005200528020041016a2206360200200220012903002203370308200441786a21010340200020064101102f200028020020052802006a20033c00002005200528020041016a220636020020034208882103200141016a22042001492107200421012007450d000b200220033703082003500d04200241286a41146a4109360200200241346a410c360200200241106a41146a41033602002002200241086a360240200241f8fbc700360244200241c8006a41146a410036020020024203370214200241c0bbc4003602102002410c36022c200241c4b5c8003602582002420137024c200241b8bbc4003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a41d8bbc4001046000b2000200041086a22052802004102102f200028020020052802006a2003a74102744101723b00002005200528020041026a3602000c030b2000200041086a22052802004104102f200028020020052802006a2003a74102744102723600002005200528020041046a3602000c020b41efbac400413641a8bbc400103c000b2000200041086a22052802004101102f200028020020052802006a2003a74102743a00002005200528020041016a3602000b200241e0006a24000b100020002802002001200210a80141000bd70101037f02400240200041046a2802002203200041086a28020022046b2002490d00200028020021030c010b0240024002400240200420026a22052004490d00200341017422042005200420054b1b22044108200441084b1b210402402003450d0020044100480d0120002802002205450d0220052003200410352203450d030c040b200441004e0d010b103b000b2004103222030d010b1039000b20002003360200200041046a2004360200200041086a28020021040b200320046a2001200210c9081a200041086a2200200028020020026a3602000bf90101017f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002002410c6a200110a801200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41dcb7c000200241086a103e2101200241206a240020010bab2d0b057f027e087f017e037f037e027f027e147f057e047f23004180016b2204240002402001450d0041002105034020002802082206450d0120002802002207200641e0006c6a2108420021094200210a03404104210b4100210c02400240024002402007280238220d450d00200d41d8006c210e2007280230220f21060240024002400240024002400240024002400240024002400340200641306a2802002210280208221141016a41004c0d01200641d8006a2112201020113602080240201041f4006a2d00000d0020122106200e41a87f6a220e450d0e0c010b0b41041032220b450d0b200b20063602000240200e41d800470d00420021134101210c0c0e0b200f200d41d8006c6a221141a87f6a210d4101210c410121140240024002400240024002400240024002400240034020122106024002400240024002400340200641306a2802002210280208220e41016a41004c0d012010200e3602080240201041f4006a2d00000d002011200641d8006a2206470d010c060b0b2014200c470d03200c41016a2210200c490d12200c410174220e2010200e20104b1b22104104201041044b1b221041ffffffff037122122010470d122010410274220e4100480d1220122010464102742112200c4102742015200c1b2115024002400240200b4100200c1b22100d00200e450d010c040b20150d01200e0d030b2012210b0c030b20102015200e1035220b0d020c060b41fcaec8004118200441f8006a4198b9c0004194bbc0001040000b200e1032220b450d040b200e410276210c0b200641d8006a2112200b20144102746a2006360200201441016a2114200d2006470d010b0b420021132014410249220f0d17200b2014410274220d6a211642002117420021180240200d450d00200b21060340427f20182006280200221041286a2903007c2017201041206a2903007c22192017542210ad7c22172010201720185420172018511b22101b2118427f201920101b21172016200641046a2206470d000b0b2004410036026020044208370358200441d8006a4100201410ac0120042802602112200b2016470d01200420123602600c020b2012450d0b0c140b200428025820124104746a2106200b210e0340200e28020041306a2802002210280208221141016a41004c0d0520102011360208201029034021192006201041c8006a29030037030820062019370300201241016a2112200641106a21062016200e41046a220e470d000b20042012360260200b2016460d00200b21060340024020062802002210290320201041286a29030084500d0020102802302210280208220e41016a41004a0d0341fcaec8004118200441f8006a4198b9c0004184bbc0001040000b200641046a2106200d417c6a220d0d000b0b4108211a4100211b0c010b2010200e360208201041c8006a29030021192010290340211c41101032221a450d11200641046a2106201a201c370300201a2019370308200442818080801037026c2004201a3602684101210d410021110240034020162006460d0120062802002110200641046a220e21062010290320201041286a29030084500d0020102802302206280208221041016a41004c0d0520062010360208200641c8006a29030021192006290340211c0240200d200428026c470d00200441e8006a200d410110ac012004280268211a0b201a200d4104746a220620193703082006201c3703002004200d41016a220d360270201141106a2111200e21060c000b0b200428026c211b200d0d010b200741086a2903002119200729030021130c060b200d410474450d0202400240200d4101470d00201a21100c010b201a41106a2106201a21100340201020062010290300200629030056201041086a2903002219200641086a290300221c562019201c511b1b2110200641106a2106201141706a22110d000b0b2012410474220e450d03200428025821110240024020124101470d002011210e0c010b201141106a2106200e41706a21122011210e03402006200e200e290300200629030056200e41086a2903002219200641086a290300221c562019201c511b1b210e200641106a2106201241706a22120d000b0b427f420020102903002219200e29030022137d221c201c201956201041086a290300221c200e41086a2903007d2019201354ad7d2219201c562019201c511b22061b221d42002007290300221c20177d22132013201c56200741086a290300221320187d201c201754ad7d221820135620182013511b22101b7c22172017201d54220e4200201920061b22174200201820101b7c200ead7c221820175420182017511b22061b221320025a427f201820061b221920035a20192003511b0d05201b410474201e201b1b211e0240201a4100201b1b2206450d00201e450d002006102c0b200428025c2206410474201f20061b211f2006450d12201f450d122011102c0c120b41fcaec8004118200441f8006a41a0a4c70041aca6c7001040000b41fcaec8004118200441f8006a4198b9c0004184bbc0001040000b41f4b7c000413041a4b8c000105c000b41b4b8c000413241e8b8c000105c000b41fcaec8004118200441f8006a4198b9c0004194bbc0001040000b02400240200b20164622200d00200b21100340201028020028023022062802080d022006417f36020820064200200629034022182010280200220e290320221c7d22172017201856200641c8006a22122903002217200e41286a2903007d2018201c54ad7d221820175620182017511b220e1b370340201242002018200e1b3703002010280200220e4200370320200e41286a42003703002006200628020841016a3602082016201041046a2210470d000b0b20144115490d042014410176220641ffffffff03712006470d0120064102742221417f4c0d01202110322222450d0a2004410036027020044204370368200b417c6a2123200b41746a2124201421250340024002402025220d417f6a22250d004101210e410021250c010b024002400240024002400240024002400240024002400240200b20254102746a28020041306a2802002206280208221041016a41004c0d0020062010360208200b200d417e6a220f4102746a28020041306a2802002210280208220e41016a41004c0d01200641c8006a2903002118200629034021172010200e36020820172010290340542018201041c8006a29030022175420182017511b0d042024200d4102746a2106410021254100211203400240200f2012470d00200d210e0c0e0b200641046a28020041306a2802002210280208220e41016a41004c0d032010200e360208200628020041306a280200220e280208221141016a41004c0d04201041c8006a290300211820102903402117200e20113602082006417c6a2106201241016a21122017200e2903405a2018200e41c8006a29030022175a20182017511b0d000b201241016a210e2012417f73200d6a21250c050b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b2024200d41027422116a210602400340024020254101470d00410021250c020b200641046a28020041306a2802002210280208220e41016a41004c0d032010200e360208200628020041306a280200220e280208221241016a41004c0d04201041c8006a290300211820102903402117200e20123602082006417c6a21062025417f6a21252017200e290340542018200e41c8006a29030022175420182017511b0d000b0b200d2025490d03200d20144b0d04200d20256b220e4101762212450d00200b20254102746a2106202320116a21100340200628020021112006201028020036020020102011360200200641046a21062010417c6a21102012417f6a22120d000b0b2025450d06200e41094b0d06200d20144b0d04200d20256b210e2025417f6a2106202320254102746a21100340200d2006490d0b2010200e41016a220e10ad012006417f6a221220064f0d062010417c6a211020122106200e410a490d000c060b0b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b2025200d41b8a3c8001059000b200d201441b8a3c800104f000b200d2025417f6a2206490d05200d201441c8a3c800104f000b201241016a21250b024020042802702206200428026c470d00200441e8006a10ae01200428027021060b2004280268221020064103746a2212200e360204201220253602002004200641016a2206360270024020064102490d000240024002400340024002400240024020102006417f6a4103746a220e280200450d00200641037420106a220d41746a2802002211200e28020422124d0d00200641024d0d0820102006417d6a22264103746a280204220e201220116a4d0d01200641034d0d08200d41646a280200200e20116a4d0d010c080b20064103490d01200e280204211220102006417d6a22264103746a280204210e0b200e2012490d010b2006417e6a21260b0240024002400240024002400240024002402006202641016a22274d0d00200620264d0d012010202641037422286a2206280204222920062802006a220620102027410374222a6a2210280200222b490d02200620144b0d03200b202b4102746a222c2010280204222d41027422106a210e200641027421112006202b6b220d202d6b2206202d4f0d062022200e2006410274221010c908222e20106a211202400240202d4101480d00200641014e0d010b202e2106200e21100c080b202320116a2111200e211003402012417c6a220d28020041306a2802002206280208220e41016a41004c0d052006200e3602082010417c6a220f28020041306a280200220e280208222f41016a41004c0d06200641c8006a290300211820062903402117200e202f3602082011200f200d2017200e290340542018200e41c8006a29030022175420182017511b22061b2802003602002012200d20061b21120240202c200f201020061b2210490d00202e21060c090b2011417c6a2111202e21062012202e4b0d000c080b0b2027200641d8a3c800103f000b2026200641e8a3c800103f000b202b200641f8a3c8001059000b2006201441f8a3c800104f000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b2022202c201010c908220620106a211202400240202d4101480d00200d202d4a0d010b20062106202c21100c010b200b20116a212e20062106202c21100340200e28020041306a2802002211280208220d41016a41004c0d022011200d360208200628020041306a280200220d280208220f41016a41004c0d04201141c8006a290300211820112903402117200d200f3602082010200e20062017200d290340542018200d41c8006a29030022175420182017511b22111b2802003602002006200641046a20111b2106201041046a2110200e41046a200e20111b220e202e4f0d01201220064b0d000b0b20102006201220066b417c7110c9081a2004280270220620264d0d032004280268221020286a220e2029202d6a360204200e202b360200200620274d0d042010202a6a220e200e41086a20062027417f736a41037410ca081a20042006417f6a2206360270200641014d0d050c010b0b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b41fcaec8004118200441f8006a41a0bec00041c0bec0001040000b202620064188a4c800103f000b202720061047000b2025450d040c000b0b41d4afc8004110200441f8006a41f8b8c0004188b9c0001040000b103b000b2006200d41c8a3c8001059000b200428026c2206410374203020061b213002402006450d002030450d002010102c0b2021203120211b21312021450d012031450d012022102c0c010b200f0d002014417e6a210641022110200b20144102746a41786a210e034020142006490d02200e201010ad01200e417c6a210e201041016a21102006417f6a2206417f470d000b0b2014417f6a211102402020450d0042002118420021170c040b420021184100211042002117200b210e0340200e2802002802302206280208221241016a41004c0d0220062012360208200441386a200641c8006a290300223242002010ad2233420010ce08200441c8006a2006290340223442002033420010ce084200427f20042903482004290340420052200441c8006a41086a290300221c20042903387c221d201c547222061b221c20187d22352035201c56427f201d20061b221d20177d201c201854ad7d221c201d56201c201d511b22061b2007290300564200201c20061b221c200741086a290300221d56201c201d511b0d03201041016a2110427f201720327c201820347c221c2018542206ad7c22182006201820175420182017511b22061b2117427f201c20061b21182016200e41046a220e470d000c040b0b2006201441a8a3c8001058000b41fcaec8004118200441f8006a4198b9c00041a8b9c0001040000b42002033427f7c221c201c20335620104520101b1ba721110b02400240024002400240201420114d0d00200b20114102746a2802002802302206280208221041016a41004c0d0120062010360208200441186a200641c8006a29030022354200201141016a2211ad2233420010ce08200441286a2006290340223242002033420010ce084200427f200741086a290300221c20177c2007290300221720187c221d2017542206ad7c221820062018201c542018201c511b22061b2218427f200441286a41086a290300221720042903187c221c2004290320420052201c2017547222101b7d427f201d20061b2217427f200429032820101b221d54ad7d221c2017201d7d221d201756201c201856201c2018511b22061b21344200201d20061b21362014410274210e200b21120340200e450d0520122802002206450d0520062802302210280208220d41016a41004c0d032010200d360208200441086a203620342033420010c80820064200427f2004290308221820327c22172017201854220d200441086a41086a290300221820357c200dad7c221720185420172018511b220d1b22182010290340221c7d221d201d201856427f2017200d1b2217201041c8006a2903007d2018201c54ad7d221820175620182017511b22101b2217370320200641286a4200201820101b221c370300200628023022062802080d04201241046a2112200641003602082006427f2006290340221820177c221720172018542210200641c8006a220d2903002218201c7c2010ad7c221720185420172018511b22101b370340200d427f201720101b370300200e417c6a210e2011417f6a22110d000c050b0b41b8b9c000418a0141c4bac000105c000b41fcaec8004118200441f8006a4198b9c00041d4bac0001040000b41fcaec8004118200441f8006a4198b9c00041e4bac0001040000b41d4afc8004110200441f8006a41f8b8c00041f4bac0001040000b200c4102742037200c1b21370240200c450d002037450d00200b102c0b2004200710af01201b4104742038201b1b21380240201a4100201b1b2206450d002038450d002006102c0b200428025c2206410474203920061b21392004280258410020061b2206450d042039450d042006102c0c040b1039000b420021130b420021190b200c410274203a200c1b213a200b4100200c1b2206450d00203a450d002006102c0b2019200a20132009562019200a562019200a511b22061b210a2013200920061b2109200741e0006a22072008470d000b200541016a220520014f0d012009200258200a200358200a2003511b450d000b0b20044180016a24000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff007122042001470d02200141047422024100480d0220042001464103742104024002400240024002402000280200410020031b22010d002002450d010c030b200341047422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024104763602000b0f0b2004450d001039000b103b000bf00303047f027e037f230041106b2202240002400240024002400240024020014102490d00200028020441306a2802002203280208220441016a41004c0d0220032004360208200028020041306a2802002204280208220541016a41004c0d03200341c8006a29030021062003290340210720042005360208200720042903405a2006200441c8006a29030022075a20062007511b0d00200028020021082000200028020436020002400240200141034f0d00200041046a21040c010b2001417f6a2109200041046a21050340200541046a220428020041306a2802002200280208220341016a41004c0d0620002003360208200841306a2802002203280208220a41016a41004c0d07200041c8006a2903002106200029034021072003200a3602080240200720032903405a2006200341c8006a29030022075a20062007511b450d00200521040c020b2009450d0320052004280200360200200421052009417f6a22094101470d000b0b200420083602000b200241106a24000f0b20012001419ca5c800103f000b41fcaec8004118200241086a41a0bec00041c0bec0001040000b41fcaec8004118200241086a41a0bec00041c0bec0001040000b41fcaec8004118200241086a41a0bec00041c0bec0001040000b41fcaec8004118200241086a41a0bec00041c0bec0001040000bd80101047f024002400240200041046a28020020002802082201470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff017122042002470d02200241037422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141037422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034103763602000b0f0b2004450d001039000b103b000bd33909077f027e037f027e027f087e097f017e0a7f230041f0006b220224000240024002400240024002400240024002400240024002400240024002400240024002400240200141386a2802002203450d002001280230220441306a21052004200341d8006c22066a2107034020052802002203280208220441016a41004c0d05200541706a22082903002109200841086a290300210a20032004360208200341f4006a2d00004101460d02200541d8006a2105200641a87f6a22060d000b0b4108210b4100210c4100210d0c010b41101032220b450d09200541286a2105200b2009370300200b200a370308200242818080801037025c2002200b3602584101210c0240034020052007460d01200541306a2802002203280208220441016a41004c0d03200541286a2903002109200541206a290300210a20032004360208200541d8006a22042105200341f4006a2d00004101470d000240200c200228025c470d00200241d8006a200c410110ac012002280258210b0b200b200c4104746a220520093703082005200a3703002002200c41016a220c360260200421050c000b0b200228025c210d0b200b200c4104746a2106200141086a290300210e2001290300210f4200210a200b2105420021090340024020062005470d00410021044100210741082110200c450d10200f200a200a200f542009200e542009200e511b22111b2212200a200f20111b220a7d2213200e200920111b2009200e20111b7d2012200a54ad7d221484500d04200241286a20132014200cad2215420010c808200241186a201320142015420010c708410021042002410036024020024208370338200241386a41002006200b6b41047610cd04200241186a41086a2903002116200241286a41086a290300211720022903182118200229032821192002280240211a2002280238211b02402006200b460d00200b200c4104746a2108201b201a41186c6a2105200b2103034020032903002109200541106a200341086a290300370300200541086a200937030020052004360200200541186a2105200441016a21042008200341106a2203470d000b201a20046a211a0b2002201a360240201a4115490d07201a410176ad42187e2209422088a70d092009a7221c417f4c0d09201c1032221d450d0a4100211e2002410036025020024204370348201b41686a211f201b41406a2120201a212103400240024020212210417f6a22040d0041002121410121070c010b024002400240024002400240201b200441186c6a220541086a290300201041186c2222201b6a41586a2203290300220a54200541106a2903002212200341086a29030022095420122009511b0d002010417e6a2107202020226a210541002121410021030340024020072003470d00201021070c080b200a200529030022235a21042009200541086a2903002212512108200920125a2106200541686a2105200341016a21032023210a201221092004200620081b0d000b200341016a21072003417f7320106a21040c010b202020226a210502400340024020044101470d00410021040c020b200a200529030022235421032009200541086a290300221251210820092012542106200541686a21052004417f6a21042023210a201221092003200620081b0d000b0b20102004490d022010201a4b0d01201020046b22074101762208450d00201b200441186c6a2105201f20226a21030340200241d8006a41106a2206200541106a2222290300370300200241d8006a41086a2224200541086a222529030037030020022005290300370358200341106a22262903002109200341086a2227290300210a200520032903003703002025200a37030020222009370300202620062903003703002027202429030037030020032002290358370300200541186a2105200341686a21032008417f6a22080d000b0b024020040d00200421210c050b0240200741094d0d00200421210c050b2010201a4b0d02200420106b2108201b200441186c6a2122034020102004417f6a2221490d0c0240201020216b22074102490d00201b200441186c6a220441086a2203290300201b202141186c6a220541086a220629030022125a200441106a2224290300220a200541106a221e29030022095a200a2009511b0d00200528020021252005200429030037030020062003290300370300201e2024290300370300024020074103490d00410121032022210503400240200541206a2204290300201254200541286a2206290300220a200954200a2009511b0d00200521040c020b0240200820036a4101460d00200541106a2006290300370300200541086a20042903003703002005200541186a2204290300370300200421052008200341016a22036a0d010c020b0b20032007419ca5c800103f000b2004201237030820042025360200200441106a20093703000b2021450d04202241686a21222008417f6a2108202121042007410a490d000c040b0b2010201a41b8a3c800104f000b2004201041b8a3c8001059000b20102004417f6a2221490d082010201a41c8a3c800104f000b2002280250211e0b0240201e200228024c470d00200241c8006a10ce042002280250211e0b20022802482226201e4103746a22052007360204200520213602002002201e41016a22273602502027211e024020274102490d000340024002400240024020262027221e417f6a22274103746a2205280200450d00201e41037420266a220641746a2802002208200528020422034d0d00201e41024d0d052026201e417d6a22054103746a2802042204200320086a4d0d01201e41034d0d05200641646a280200200420086a4b0d050c010b201e4103490d01200528020421032026201e417d6a22054103746a28020421040b20042003490d010b201e417e6a21050b024002400240024002400240201e200541016a22284d0d00201e20054d0d01202620054103746a2229280204222a20292802006a2205202620284103746a222b280200222c490d022005201a4b0d03202941046a212d201b202c41186c6a2224202b280204222541186c22036a2104200541186c21062005202c6b220720256b220520254f0d04201d2004200541186c220310c908220720036a21080240024020254101480d00200541014e0d010b20042105200721030c060b201f20066a21062004210503402006200541686a2210200841686a2222200841706a2203290300200541706a220429030054200341086a2903002209200441086a290300220a542009200a511b22031b2204290300370300200641086a200441086a290300370300200641106a200441106a2903003703002008202220031b2108024020242010200520031b2205490d00200721030c070b200641686a21062007210320072008490d000c060b0b2028201e41d8a3c800103f000b2005201e41e8a3c800103f000b202c200541f8a3c8001059000b2005201a41f8a3c800104f000b201d2024200310c908222220036a21080240024020254101480d00200720254a0d010b20242105202221030c010b201b20066a211020222103202421050340200520042003200441086a290300200341086a29030054200441106a2903002209200341106a290300220a542009200a511b22061b2207290300370300200541086a200741086a290300370300200541106a200741106a2903003703002003200341186a20061b2103200541186a2105200441186a200420061b220420104f0d01200820034b0d000b0b20052003200820036b220420044118706b10c9081a202d202a20256a3602002029202c360200202b202b41086a201e2028417f736a41037410ca081a200220273602504101211e202741014b0d000b0b2021450d070c000b0b2009200541086a2903007c200a20052903007c2223200a542203ad7c2212200951210420122009542108200541106a21052023210a201221092003200820041b450d000b411e21074186a7c80021050c0f0b41fcaec8004118200241c8006a4188a4c30041f8a4c3001040000b41fcaec8004118200241c8006a4188a4c30041f8a4c3001040000b200c41ffffffff0071200c470d04200c4104742205417f4c0d04200510322203450d0520024100360260200220033602582002200541047636025c200241d8006a4100200c10cf0420022802582210200228026022054104746a200b200c41047410c9081a2005200c6a21040c0a0b2021201041c8a3c8001059000b0240200228024c41ffffffff0171450d002026102c0b201c4118702105201c4118490d01201c2005460d01201d102c0c010b201a4102490d00201b201a417f6a220841186c6a2110410021060340024002400240201a20082205417f6a2208490d00201a20086b22244102490d02201b200541186c6a220441086a2203290300201b200841186c6a220541086a220729030022125a200441106a2222290300220a200541106a221e29030022095a200a2009511b0d02200528020021252005200429030037030020072003290300370300201e202229030037030020244103490d012006417f6a2122410021032010210503400240200541206a2204290300201254200541286a2207290300220a200954200a2009511b0d00200521040c030b024020222003460d00200541106a2007290300370300200541086a20042903003703002005200541186a22042903003703002004210520062003417f6a2203470d010c030b0b410120036b2024419ca5c800103f000b2008201a41a8a3c8001058000b2004201237030820042025360200200441106a20093703000b201041686a21102006417f6a210620080d000b0b0240024002400240024002400240024002400240024002402011450d00200241086a200f200e2015420010c80841002105200241086a41086a29030021122002290308210e0240201320155441002014501b0d00410021052002280238210620022802402107200c21040340200720054d0d0c2006200541186c6a2203290308220920197c220a2009542208200341106a290300222320177c2008ad7c220920235420092023511b4101460d0b200341086a2203200a370300200320093703080240200a200e54200920125420092012511b0d00200541016a200c7021050b2004417f6a22040d000b0b20182016844200520d012002280240211a2002280238211b0c040b2002280240221a450d0a200c417f6a21042002280238221b41106a2903002123201b290308210f201320155441002014501b450d012018210a200421050c020b2002280238211b2002280240211a0340201a20054d0d07201b200541186c6a2203290308222342017c22092023542204200341106a29030022192004ad7c220a201954200920235a1b4101460d06200341086a220320093703002003200a37030802402009200e54200a201254200a2012511b0d00200541016a200c7021050b2018427f7c2209201854210320092118200920162003ad7c427f7c22168450450d000c030b0b200421050340201a20054d0d04201b200541186c6a220342002003290308220920197d220e200e200956200341106a2208290300220a20177d2009201954ad7d2212200a562012200a511b22031b200e20031b220e37030820084200201220031b201220031b2212370300200520042005417f6a2208200820054b1b200e200f56201220235620122023511b1b210520162017200a7d2019200954ad7d420020031b7c2018201920097d420020031b7c220a201854ad7c2116200a2118200c417f6a220c0d000b0b200a201684500d00200a21180340201a20054d0d0202400240201b200541186c6a22032903082209427f7c2219200956200341106a2903002217200950ad7d221220175620094200521b4101470d0020042005417f6a2203200320054b1b21050c010b200341086a2203201937030020032012370308200520042005417f6a2203200320054b1b2019200f56201220235620122023511b1b21052016200a427f7c2218200a54ad7c427f7c21162018210a0b20182016844200520d000b0b201a4115490d0b201a410176ad42187e2209422088a70d072009a72211417f4c0d0720111032221d450d084100211e2002410036025020024204370348201b41686a210c201b41b87f6a211f201a212103400240024020212210417f6a22040d0041002121410121070c010b024002400240024002400240201b200441186c6a280200201041186c2222201b6a41506a2802002205490d002010417e6a2107201f20226a210441002121410021030340024020072003470d00201021070c080b200341016a21032005200428020022084f2106200441686a21042008210520060d000b200341016a21072003417f7320106a21040c010b201f20226a210302400340024020044101470d00410021040c020b2004417f6a2104200520032802002208492106200341686a21032008210520060d000b0b20102004490d022010201a4b0d01201020046b22074101762208450d00201b200441186c6a2105200c20226a21030340200241d8006a41106a2206200541106a2222290300370300200241d8006a41086a2224200541086a222529030037030020022005290300370358200341106a22262903002109200341086a2227290300210a200520032903003703002025200a37030020222009370300202620062903003703002027202429030037030020032002290358370300200541186a2105200341686a21032008417f6a22080d000b0b024020040d00200421210c050b0240200741094d0d00200421210c050b2010201a4b0d02200420106b2108201b200441186c6a2122034020102004417f6a2221490d100240201020216b22074102490d00201b200441186c6a2205280200201b202141186c6a220328020022064f0d002003200529030037030020032903082109200341086a200541086a290300370300200341106a2203290300210a2003200541106a290300370300024020074103490d00410121032022210502400340200541186a220428020020064f0d02200820036a4101460d01200541106a200541286a290300370300200541086a200541206a29030037030020052004290300370300200421052008200341016a22036a0d000b200421050c010b20032007419ca5c800103f000b2005200937030820052006360200200541106a200a3703000b2021450d04202241686a21222008417f6a2108202121042007410a490d000c040b0b2010201a41b8a3c800104f000b2004201041b8a3c8001059000b20102004417f6a2221490d0c2010201a41c8a3c800104f000b2002280250211e0b0240201e200228024c470d00200241c8006a10ce042002280250211e0b20022802482226201e4103746a22052007360204200520213602002002201e41016a22273602502027211e024020274102490d000340024002400240024020262027221e417f6a22274103746a2205280200450d00201e41037420266a220641746a2802002208200528020422034d0d00201e41024d0d052026201e417d6a22054103746a2802042204200320086a4d0d01201e41034d0d05200641646a280200200420086a4b0d050c010b201e4103490d01200528020421032026201e417d6a22054103746a28020421040b20042003490d010b201e417e6a21050b024002400240024002400240201e200541016a22284d0d00201e20054d0d01202620054103746a2229280204222a20292802006a2205202620284103746a222b280200222c490d022005201a4b0d03202941046a212d201b202c41186c6a2224202b280204222541186c22036a2104200541186c21062005202c6b220720256b220520254f0d04201d2004200541186c220310c908222220036a21080240024020254101480d00200541014e0d010b20042105202221030c060b200c20066a21062004210503402006200541686a2203200841686a2204200428020020032802004922071b2210290300370300200641106a201041106a290300370300200641086a201041086a2903003703002008200420071b2108024020242003200520071b2205490d00202221030c070b200641686a21062022210320222008490d000c060b0b2028201e41d8a3c800103f000b2005201e41e8a3c800103f000b202c200541f8a3c8001059000b2005201a41f8a3c800104f000b201d2024200310c908222220036a21080240024020254101480d00200720254a0d010b20242105202221030c010b201b20066a211020222103202421050340200520042003200428020020032802004922061b2207290300370300200541106a200741106a290300370300200541086a200741086a2903003703002003200341186a20061b2103200541186a2105200441186a200420061b220420104f0d01200820034b0d000b0b20052003200820036b220420044118706b10c9081a202d202a20256a3602002029202c360200202b202b41086a201e2028417f736a41037410ca081a200220273602504101211e202741014b0d000b0b2021450d0b0c000b0b2005201a41fca8c800103f000b2005201a41dca8c800103f000b4184a8c800412641cca8c800105c000b2005201a41bca8c800103f000b4184a8c800412641aca8c800105c000b2005200741f4a7c800103f000b41a4a7c800413f41e4a7c800105c000b103b000b1039000b2021201041c8a3c8001059000b0240200228024c41ffffffff0171450d002026102c0b2011411870210520114118490d0120112005460d01201d102c0c010b201a4102490d00201b201a417f6a220841186c6a2110410021060340024002400240201a20082205417f6a2208490d00201a20086b22244102490d02201b200541186c6a2205280200201b200841186c6a220328020022074f0d022003200529030037030020032903082109200341086a200541086a290300370300200341106a2203290300210a2003200541106a29030037030020244103490d012006417f6a2122410021032010210502400340200541186a220428020020074f0d0320222003460d01200541106a200541286a290300370300200541086a200541206a290300370300200520042903003703002004210520062003417f6a2203470d000b200421050c020b410120036b2024419ca5c800103f000b2008201a41a8a3c8001058000b2005200937030820052007360200200541106a200a3703000b201041686a21102006417f6a210620080d000b0b200241003602602002420837035820022802382107200228023c2106200241d8006a41002002280240220510cf04200228026021042002280258211002402005450d00200541186c2108200741086a2105201020044104746a21030340200529030021092003200541086a29030037030820032009370300200541186a2105200441016a2104200341106a2103200841686a22080d000b0b200220043602602006450d00200641186c450d002007102c0b200228025c21070b201020044104746a212420012802302204200128023841d8006c6a210820102106024002400340200820042205460d020240200541306a2802002203280208220441016a41004c0d0020032004360208200541d8006a2104200341f4006a2d0000450d0120062024460d03200541d8006a220441586a28020022052802080d02200641086a29030021092006290300210a2005417f3602082005420020052903402212200441486a222229030022167d22232023201256200541c8006a22032903002223202241086a221e2903007d2012201654ad7d221220235620122023511b22251b37034020034200201220251b370300201e20093703002022200a3703002005200528020841016a3602082005427f200a200529034022127c220a200a201254222220092003290300220a7c2022ad7c2209200a542009200a511b22221b3703402003427f200920221b370300200641106a21060c010b0b41fcaec8004118200241c8006a4188a4c3004198a4c3001040000b41d4afc8004110200241c8006a41a8a4c30041b8a4c3001040000b41002105200741ffffffff0071450d002010102c0b0240200b4100200d1b2203450d00200d41ffffffff0071450d002003102c0b2000200736020420002005360200200241f0006a24000b6201037e024002402001280200410a460d00420021020c010b420021020240200141086a2903004200510d000c010b200141f8016a2903002103200141f0016a2903002104420121020b2000200437030820002002370300200041106a20033703000bc60603057f017e037f23004180016b22022400200241306a200128020c200141146a28020010b2010240024020022802302203450d002001410c6a2104200141086a21050340024002402005280200220620022902342207422088a722084b0d00200128020022092003460d0120092003200610cc08450d010b2007a7450d022003450d022003102c0c020b02402001280210450d002004280200102c0b200120073702102001200336020c200241086a2003200810b301024002400240024020022802082203450d0020022802102106200228020c210a024020012d001c450d00200128020c200128021410b4010b2001280214220920052802002208490d02200241086a200128020c20086a200920086b200320062001280218110400200228020c450d0120002002290308370200200041106a200241086a41106a280200360200200041086a200241086a41086a290300370200200a450d062003102c0c060b41002802d8d248450d022002410d3602242002200436022041002802d4d248210341002802d0d248210841002802dcd24821062002418a04360270200242e680808010370368200241e2bbc0003602642002421637025c200241ccbbc0003602582002420137035020024201370340200241a4bbc00036023c20024116360238200241ccbbc00036023420024101360230200341e0a3c000200641024622061b28021021032002200241206a36024c200841f8a3c00020061b200241306a20031103000c020b024041002802d8d248450d002002410e36022c2002410d360224200220043602202002200241f8006a36022841002802d4d248210841002802d0d248210641002802dcd24821092002419804360270200242e680808010370368200241e2bbc0003602642002421637025c200241ccbbc0003602582002420237035020024202370340200241bcbbc00036023c20024116360238200241ccbbc00036023420024101360230200841e0a3c000200941024622091b28021021082002200241206a36024c200641f8a3c00020091b200241306a20081103000b200a450d012003102c0c010b2008200941acbbc0001058000b200241306a200128020c200128021410b201200228023022030d000b0b200041003602040b20024180016a24000b130020002002ad4220862001ad84102310fc070b130020002002ad4220862001ad84102210fc070b0e002001ad4220862000ad84101f0bbd0101047f230041106b22022400200028020821032000280200210041012104200128021841fc9dc00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41dcedc60010671a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d0020022802002200280218419a92c10041012000411c6a28020028020c11000021040b200241106a240020040bbe0704057f017e037f037e230041b0016b22022400200241e0006a200128020c200141146a28020010b2010240024020022802602203450d002001410c6a2104200141086a21050340024002402005280200220620022902642207422088a722084b0d00200128020022092003460d0120092003200610cc08450d010b2007a7450d022003450d022003102c0c020b02402001280210450d002004280200102c0b200120073702102001200336020c200241286a2003200810b301024002400240024020022802282203450d0020022802302106200228022c210a024020012d001c450d00200128020c200128021410b4010b2001280214220920052802002208490d02200241286a200128020c20086a200920086b20032006200128021811040020022802284101460d01200241206a200241286a41246a2802002201360200200241186a200241286a411c6a2902002207370300200241106a200241286a41146a290200220b370300200241086a200241286a410c6a290200220c3703002002200229022c220d370300200041246a20013602002000411c6a2007370200200041146a200b3702002000410c6a200c3702002000200d37020420004101360200200a450d062003102c0c060b41002802d8d248450d022002410d3602042002200436020041002802d4d248210341002802d0d248210841002802dcd24821062002418a043602a001200242e68080801037039801200241e2bbc000360294012002421637028c01200241ccbbc00036028801200242013703800120024201370370200241a4bbc00036026c20024116360268200241ccbbc00036026420024101360260200341e0a3c000200641024622061b28021021032002200236027c200841f8a3c00020061b200241e0006a20031103000c020b024041002802d8d248450d002002410e36025c2002410d360254200220043602502002200241a8016a36025841002802d4d248210841002802d0d248210641002802dcd248210920024198043602a001200242e68080801037039801200241e2bbc000360294012002421637028c01200241ccbbc00036028801200242023703800120024202370370200241bcbbc00036026c20024116360268200241ccbbc00036026420024101360260200841e0a3c000200941024622091b28021021082002200241d0006a36027c200641f8a3c00020091b200241e0006a20081103000b200a450d012003102c0c010b2008200941acbbc0001058000b200241e0006a200128020c200128021410b201200228026022030d000b0b200041003602000b200241b0016a24000b960703057f017e037f230041a0016b22022400200241d0006a200128020c200141146a28020010b2010240024020022802502203450d002001410c6a2104200141086a21050340024002402005280200220620022902542207422088a722084b0d00200128020022092003460d0120092003200610cc08450d010b2007a7450d022003450d022003102c0c020b02402001280210450d002004280200102c0b200120073702102001200336020c20022003200810b301024002400240024020022802002203450d00200228020821062002280204210a024020012d001c450d00200128020c200128021410b4010b2001280214220920052802002208490d022002200128020c20086a200920086b2003200620012802181104002002280204450d0120002002290300370200200041386a200241386a280200360200200041306a200241306a290300370200200041286a200241286a290300370200200041206a200241206a290300370200200041186a200241186a290300370200200041106a200241106a290300370200200041086a200241086a290300370200200a450d062003102c0c060b41002802d8d248450d022002410d3602442002200436024041002802d4d248210341002802d0d248210841002802dcd24821062002418a0436029001200242e68080801037038801200241e2bbc000360284012002421637027c200241ccbbc0003602782002420137037020024201370360200241a4bbc00036025c20024116360258200241ccbbc00036025420024101360250200341e0a3c000200641024622061b28021021032002200241c0006a36026c200841f8a3c00020061b200241d0006a20031103000c020b024041002802d8d248450d002002410e36024c2002410d36024420022004360240200220024198016a36024841002802d4d248210841002802d0d248210641002802dcd2482109200241980436029001200242e68080801037038801200241e2bbc000360284012002421637027c200241ccbbc0003602782002420237037020024202370360200241bcbbc00036025c20024116360258200241ccbbc00036025420024101360250200841e0a3c000200941024622091b28021021082002200241c0006a36026c200641f8a3c00020091b200241d0006a20081103000b200a450d012003102c0c010b2008200941acbbc0001058000b200241d0006a200128020c200128021410b201200228025022030d000b0b200041003602040b200241a0016a24000ba00703057f017e037f230041a0016b22022400200241d0006a200128020c200141146a28020010b2010240024020022802502203450d002001410c6a2104200141086a21050340024002402005280200220620022902542207422088a722084b0d00200128020022092003460d0120092003200610cc08450d010b2007a7450d022003450d022003102c0c020b02402001280210450d002004280200102c0b200120073702102001200336020c200241086a2003200810b301024002400240024020022802082203450d0020022802102106200228020c210a024020012d001c450d00200128020c200128021410b4010b2001280214220920052802002208490d02200241086a200128020c20086a200920086b20032006200128021811040020022d00384102460d0120002002290308370200200041306a200241086a41306a280200360200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a290300370200200a450d062003102c0c060b41002802d8d248450d022002410d3602442002200436024041002802d4d248210341002802d0d248210841002802dcd24821062002418a0436029001200242e68080801037038801200241e2bbc000360284012002421637027c200241ccbbc0003602782002420137037020024201370360200241a4bbc00036025c20024116360258200241ccbbc00036025420024101360250200341e0a3c000200641024622061b28021021032002200241c0006a36026c200841f8a3c00020061b200241d0006a20031103000c020b024041002802d8d248450d002002410e36024c2002410d36024420022004360240200220024198016a36024841002802d4d248210841002802d0d248210641002802dcd2482109200241980436029001200242e68080801037038801200241e2bbc000360284012002421637027c200241ccbbc0003602782002420237037020024202370360200241bcbbc00036025c20024116360258200241ccbbc00036025420024101360250200841e0a3c000200941024622091b28021021082002200241c0006a36026c200641f8a3c00020091b200241d0006a20081103000b200a450d012003102c0c010b2008200941acbbc0001058000b200241d0006a200128020c200128021410b201200228025022030d000b0b200041023a00300b200241a0016a24000bb00603057f017e037f23004190036b220224002002200128020c200141146a28020010b2010240024020022802002203450d002001410c6a2104200141086a21050340024002402005280200220620022902042207422088a722084b0d00200128020022092003460d0120092003200610cc08450d010b2007a7450d022003450d022003102c0c020b02402001280210450d002004280200102c0b200120073702102001200336020c200241c0026a2003200810b301024002400240024020022802c0022203450d0020022802c802210620022802c402210a024020012d001c450d00200128020c200128021410b4010b2001280214220920052802002208490d022002200128020c20086a200920086b20032006200128021811040020022802ec01450d012000200241ac0210c9081a200a450d062003102c0c060b41002802d8d248450d022002410d3602b402200220043602b00241002802d4d248210341002802d0d248210841002802dcd24821062002418a04360240200242e680808010370338200241e2bbc0003602342002421637022c200241ccbbc0003602282002420137032020024201370310200241a4bbc00036020c20024116360208200241ccbbc00036020420024101360200200341e0a3c000200641024622061b28021021032002200241b0026a36021c200841f8a3c00020061b200220031103000c020b024041002802d8d248450d002002410e3602bc022002410d3602b402200220043602b002200220024188036a3602b80241002802d4d248210841002802d0d248210641002802dcd2482109200241980436028003200242e6808080103703f802200241e2bbc0003602f402200242163702ec02200241ccbbc0003602e802200242023703e002200242023703d002200241bcbbc0003602cc02200241163602c802200241ccbbc0003602c402200241013602c002200841e0a3c000200941024622091b28021021082002200241b0026a3602dc02200641f8a3c00020091b200241c0026a20081103000b200a450d012003102c0c010b2008200941acbbc0001058000b2002200128020c200128021410b201200228020022030d000b0b200041003602ec010b20024190036a24000bb90101037f20004201370200200041086a2202410036020020012802002103200041004104102f2000280200200228020022046a20033600002002200441046a3602002001280204210320002001410c6a2802002204108f0102402004450d0020032004410c6c6a210403402003280200200341086a280200200010bb012003410c6a22032004470d000b0b20012802102103200020022802004104102f2000280200200228020022006a20033600002002200041046a3602000bd10201027f0240024002400240200141c000490d00200141808001490d012001418080808004490d022002200241086a22032802004101102f200228020020032802006a41033a00002003200328020041016a2204360200200220044104102f200228020020032802006a20013600002003200328020041046a22043602000c030b2002200241086a22032802004101102f200228020020032802006a20014102743a00002003200328020041016a22043602000c020b2002200241086a22032802004102102f200228020020032802006a20014102744101723b00002003200328020041026a22043602000c010b2002200241086a22032802004104102f200228020020032802006a20014102744102723600002003200328020041046a22043602000b200220042001102f2002280200200241086a22022802006a2000200110c9081a2002200228020020016a3602000bf30203027f017e067f230041206b22022400024020014102490d00200041206a22032000412010cc08417f4a0d002000290000210420002003290000370000200241186a2205200041186a2206290000370300200241106a2207200041106a2208290000370300200241086a2209200041086a220a290000370300200a200341086a2900003700002008200341106a2900003700002006200341186a29000037000020022004370300024020014103490d002001417f6a2106200041206a210302400340200341206a22002002412010cc0841004e0d022006450d0120032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200021032006417f6a22064101470d000b200021030c010b20012001419ca5c800103f000b20032002290300370000200341186a2005290300370000200341106a2007290300370000200341086a20092903003700000b200241206a24000b930301067f230041106b2202240002400240024002400240024020014102490d0020002802042203280208220441016a41004c0d022003200436020820002802002204280208220541016a41004c0d032003280250210320042005360208200320042802504f0d00200028020021032000200028020436020002400240200141034f0d00200041046a21000c010b2001417f6a2106200041046a21040340200441046a22002802002205280208220741016a41004c0d06200520073602082003280208220741016a41004c0d072005280250210520032007360208024020052003280250490d00200421000c020b2006450d0320042000280200360200200021042006417f6a22064101470d000b0b200020033602000b200241106a24000f0b20012001419ca5c800103f000b41fcaec8004118200241086a41a0bec00041b0bec0001040000b41fcaec8004118200241086a41a0bec00041b0bec0001040000b41fcaec8004118200241086a41a0bec00041b0bec0001040000b41fcaec8004118200241086a41a0bec00041b0bec0001040000b130020004100360204200041c4b5c8003602000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a360210200041d0bec0001046000b7201047f230041106b220124002001410036020820014201370300200110c001200128020021022000200041086a220328020020012802082204102f200028020020032802006a2002200410c9081a2003200420032802006a36020002402001280204450d002002102c0b200141106a24000b340020004181dec70036020420004100360200200041146a4103360200200041106a41bcbfc000360200200041086a42033702000b2901017f230041106b2202240020024100360208200242043703002000200210c301200241106a24000bba0101047f02400240200128020822024104744104722203417f4c0d0020012802002101200310322204450d012000200336020420002004360200200041086a2203410036020020002002108f0102402002450d00200120024104746a2105034020012802002102200020032802004104102f2000280200200328020022046a20023600002003200441046a360200200141046a2802002001410c6a280200200010bb01200141106a22012005470d000b0b0f0b103b000b1039000bbb0f02077f017e230041d0016b220324000240024002400240200241086a220428020020004b0d00200341a8016a22004200370300200341a0016a2205420037030020034190016a41086a220642003703002003420037039001200341b0016a41c1dcc700410610c5012006200341b0016a41086a290000370300200320032900b00137039001200341286a4196a4c600410610c5012000200341286a41086a29000037030020052003290028370300200320034190016a412010c6012003280204210020032802002105200341086a410c6a200428020036020020032000410020051b22053602082003200229020037020c200341286a4181dec700410310c50120034190016a4198c2c000411910c50120032001360218200341c0016a200341186a410410c701200341c8006a410c6a200341186a41046a3602002003200341c0016a41086a36024c2003200341186a3602502003200341c0016a360248200341b0016a200341c8006a107e20032802b801220241206a2200417f4c0d020240024020000d00410121040c010b200010322204450d040b200341003602c801200320003602c401200320043602c001200341c0016a4100411010c80120032802c00120032802c80122006a22042003290028370000200441086a200341286a41086a2900003700002003200041106a22003602c801200341c0016a2000411010c80120032802c00120032802c80122006a2204200329009001370000200441086a20034190016a41086a22062900003700002003200041106a22003602c80120032802b0012104200341c0016a2000200210c80120032802c001220020032802c80122076a2004200210c9081a2003200720026a22023602c801024020032802b401450d002004102c0b200341c8006a2000200210c9012006200341d1006a29000037030020034190016a41106a200341d9006a29000037030020034190016a41186a2204200341e1006a29000037030020032003290049370390010240024020032d00484101460d00200341286a41186a4200370300200341386a4200370300200341306a4200370300200342003703280c010b200341286a41186a2004290300370300200341286a41106a20034190016a41106a290300370300200341286a41086a20034190016a41086a29030037030020032003290390013703280b20034190016a200341086a41047210ca01200341e4006a200341286a41186a2204290300370200200341dc006a200341286a41106a2206290300370200200341d4006a2207200341286a41086a2208290300370200200341f4006a20034190016a41086a2209290300370200200341fc006a20034190016a41106a29030037020020034184016a20034190016a41186a290300370200200320053602482003200329032837024c200320032903900137026c200341286a200341c8006a10cb01200341e1006a2004290300370000200341d9006a2006290300370000200341d1006a200829030037000020032003290328370049200341013a00482003200341c8006a410172360290012000200220034190016a10cc01024020032802c401450d002000102c0b2009200341086a41086a2903003703002003200329030837039001200341b0016a4181dec700410310c501200341286a41a4bfc000411510c501200320013602cc01200341186a200341cc016a410410c7012007200341cc016a41046a3602002003200341186a41086a36024c2003200341cc016a3602502003200341186a360248200341c0016a200341c8006a107e20032802c801220241206a2201417f4c0d020240024020010d00410121000c010b200110322200450d040b200341003602202003200136021c20032000360218200341186a4100411010c8012003280218200328022022016a220020032900b001370000200041086a200341b0016a41086a2900003700002003200141106a2201360220200341186a2001411010c8012003280218200328022022016a22002003290028370000200041086a200341286a41086a2900003700002003200141106a220036022020032802c0012101200341186a2000200210c80120032802182200200328022022046a2001200210c9081a2003200420026a2204360220024020032802c401450d002001102c0b200341c8006a2000200410cd0102400240200328024822010d0041002102200341003602302003420437032841042101410021060c010b2003200329024c220a37022c20032001360228200a422088a72102200aa721060b200341c8006a41086a220520034190016a41086a2903003703002003200329039001370348024020022006470d00200341286a200210ce0120032802302102200328022821010b200120024104746a22012003290348370200200141086a20052903003702002003200241016a22023602302005200236020020032003290328220a37034802400240200aa722050d002000200410b4010c010b20002004200341c8006a10cf010240200341d0006a2802002202450d0020024104742101200541046a210203400240200241046a280200450d002002280200102c0b200241106a2102200141706a22010d000b0b200328024c41ffffffff0071450d002005102c0b0240200328021c450d002000102c0b410021010c010b410121012002280204450d002002280200102c0b200341d0016a240020010f0b103b000b1039000b2c0020002002ad4220862001ad8410122201290000370000200041086a200141086a2900003700002001102c0b870201037f230041d0006b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b4100210120034100360220200342013703182003410f36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b4bcc3003602382003200341286a360248200341346a41dcb7c000200341386a103e1a200335022042208620033502188410000240200328021c450d002003280218102c0b0b2005450d002004102c0b2000200236020420002001360200200341d0006a24000b25002002ad4220862001ad841013210120004200370000200020012900003700002001102c0b930101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b22014108200141084b1b22014100480d002000280200410020031b2202450d012003450d0120022003200110352203450d020c030b103b000b2001103222030d010b1039000b20002003360200200041046a20013602000b0ba00902047f017e230041b0016b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003a00000c010b200341186a280200210220032802142104200341003a0060024002402002450d00200320012d00003a0040200341013a0060024020024101460d00200320012d00013a0041200341023a006020024102460d00200320012d00023a0042200341033a006020024103460d00200320012d00033a0043200341043a006020024104460d00200320012d00043a0044200341053a006020024105460d00200320012d00053a0045200341063a006020024106460d00200320012d00063a0046200341073a006020024107460d00200320012d00073a0047200341083a006020024108460d00200320012d00083a0048200341093a006020024109460d00200320012d00093a00492003410a3a00602002410a460d00200320012d000a3a004a2003410b3a00602002410b460d00200320012d000b3a004b2003410c3a00602002410c460d00200320012d000c3a004c2003410d3a00602002410d460d00200320012d000d3a004d2003410e3a00602002410e460d00200320012d000e3a004e2003410f3a00602002410f460d00200320012d000f3a004f200341103a006020024110460d00200320012d00103a0050200341113a006020024111460d00200320012d00113a0051200341123a006020024112460d00200320012d00123a0052200341133a006020024113460d00200320012d00133a0053200341143a006020024114460d00200320012d00143a0054200341153a006020024115460d00200320012d00153a0055200341163a006020024116460d00200320012d00163a0056200341173a006020024117460d00200320012d00173a0057200341183a006020024118460d00200320012d00183a0058200341193a006020024119460d00200320012d00193a00592003411a3a00602002411a460d00200320012d001a3a005a2003411b3a00602002411b460d00200320012d001b3a005b2003411c3a00602002411c460d00200320012d001c3a005c2003411d3a00602002411d460d00200320012d001d3a005d2003411e3a00602002411e460d00200320012d001e3a005e2003411f3a00602002411f460d00200341206a41106a2202200341c0006a41106a290300370300200341206a41086a2205200341c0006a41086a290300370300200320012d001f3a005f200341206a41186a2206200341c0006a41186a290300370300200341203a006020032003290340220737036820032007370320200041196a2006290300370000200041116a2002290300370000200041096a200529030037000020002003290320370001410121020c020b200341003a00600b20034100360270200342013703682003410f3602242003200341086a3602202003200341e8006a3602ac01200341d4006a410136020020034201370244200341b4bcc3003602402003200341206a360250200341ac016a41dcb7c000200341c0006a103e1a200335027042208620033502688410000240200328026c450d002003280268102c0b410021020b200020023a00002004450d002001102c0b200341b0016a24000ba20301047f230041106b22022400024002402001280208220341046a2204417f4c0d002001280200210102400240024002400240024020040d0020024100360208200242013703000c010b200410322205450d06200241003602082002200436020420022005360200200341c000490d01200341808001490d022003418080808004490d030b200241004101102f2002280200200228020822046a41033a00002002200441016a2204360208200220044104102f2002280200200228020822046a2003360000200441046a21040c030b200241004101102f2002280200200228020822046a20034102743a0000200441016a21040c020b200241004102102f2002280200200228020822046a20034102744101723b0000200441026a21040c010b200241004104102f2002280200200228020822046a2003410274410272360000200441046a21040b20022004360208200220042003102f20022802002204200228020822056a2001200310c9081a2002200520036a2203360208200020042003109a0102402002280204450d002004102c0b200241106a24000f0b103b000b1039000bd70301057f230041206b220224000240410410322203450d002002420437020420022003360200412010322203450d002002422037021420022003360210200241106a41004120102f20022802102204200228021822056a22032001290004370000200341086a2001410c6a290000370000200341106a200141146a290000370000200341186a2001411c6a2900003700002002200541206a2203360218200241002003102f2002280200200228020822056a2004200310c9081a2002200520036a220336020802402002280214450d002004102c0b20012802002104200220034104102f2002280200200228020822036a20043600002002200341046a2205360208412010322203450d002002422037021420022003360210200241106a41004120102f20022802102204200228021822066a22032001290024370000200341086a2001412c6a290000370000200341106a200141346a290000370000200341186a2001413c6a2900003700002002200641206a2201360218200220052001102f20022802002203200228020822056a2004200110c9081a2002200520016a220136020802402002280214450d002004102c0b200020032001109a0102402002280204450d002003102c0b200241206a24000f0b1039000bb00101047f230041106b22032400200228020021020240412010322204450d002003422037020420032004360200200341004120102f20032802002205200328020822066a22042002290000370000200441086a200241086a290000370000200441106a200241106a290000370000200441186a200241186a2900003700002003200641206a2202360208200020012005200210a70202402003280204450d002005102c0b200341106a24000f0b1039000b9e0502077f017e230041e0006b220324002003200236021420032001360210200341186a2001200210b30102400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a1087020240024020032802080d0041042106024002400240200328020c2202200328022c4104762201200120024b1b22074104742201417f4c0d0002402007450d00200110322206450d020b41002101200341003602402003200736023c2003200636023802402002450d000340200328022c22074104490d0420032802282208280000210920032007417c6a36022c2003200841046a360228200341c8006a200341286a108a0220032802482207450d04200329024c210a02402001200328023c470d00200341386a200110ce0120032802402101200328023821060b200620014104746a2201200736020420012009360200200141086a200a3702002003200328024041016a22013602402002417f6a22020d000b200328023821060b2006450d032000200329023c370204200020063602000c040b103b000b1039000b2003280238210702402001450d0020014104742102200741046a210103400240200141046a280200450d002001280200102c0b200141106a2101200241706a22020d000b0b200328023c41ffffffff0071450d002007102c0b20034100360240200342013703382003410f3602342003200341106a3602302003200341386a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341306a360258200341c4006a41dcb7c000200341c8006a103e1a200335024042208620033502388410000240200328023c450d002003280238102c0b200041003602000b2005450d002004102c0b200341e0006a24000bd30101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff007122042002470d02200241047422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141047422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034104763602000b0f0b2004450d001039000b103b000be70101047f230041106b2203240002400240200228020822044104744104722205417f4c0d0020022802002102200510322206450d0120034100360208200320053602042003200636020020032004108f0102402004450d00200220044104746a2106034020022802002104200320032802084104102f2003280200200328020822056a20043600002003200541046a360208200241046a2802002002410c6a280200200310bb01200241106a22022006470d000b0b2000200120032802002202200328020810a70202402003280204450d002002102c0b200341106a24000f0b103b000b1039000bec0101017f230041306b2202240002400240200028020022002802004101470d00200220002802043602002002200041086a280200360204200241146a41023602002002410236020c2001411c6a28020021002002200241046a36021020022002360208200128021821012002412c6a41023602002002420237021c200241fcafc0003602182002200241086a36022820012000200241186a103e21010c010b2001411c6a2802002100200128021821012002412c6a4100360200200241c4b5c8003602282002420137021c2002418cb0c00036021820012000200241186a103e21010b200241306a240020010bf9e7010c057f037e087f017e027f017e0e7f027e017f017e037f117e230041d00e6b22012400200141f8086a10d201200120012802f808410b70220236029c01200141980d6a22034200370300200141800d6a41106a22044200370300200141800d6a41086a22054200370300200142003703800d200141d80c6a41d4dcc700410810c5012005200141d80c6a41086a290000370300200120012900d80c3703800d200141880e6a41bba8c700410d10c5012003200141880e6a41086a290000370300200420012900880e37030020014180016a200141800d6a412010d30120014180016a41106a290300210620012903880121072001290380012108024002400240024002400240411010322203450d002003200742002008a722051b37030020032006420020051b370308200141f497c1003602cc08200120033602c808200141003602c00c200142083703b80c200141003602d00c200142013703c80c200141d0036a41e6dcc700410710c501200141c8066a418893c700410a10c501412010322203450d00200142203702a401200120033602a001200141a0016a4100411010c80120012802a00120012802a80122036a220520012900d003370000200541086a200141d0036a41086a2900003700002001200341106a22033602a801200141a0016a2003411010c80120012802a001220920012802a80122036a220520012900c806370000200541086a200141c8066a41086a2900003700002001200341106a22033602a8010240024002402003417f4c0d004101210502402003450d00200310322205450d040b4100210a2001410036028009200120033602fc08200120053602f808200141f8086a4100200310c80120012802f808200128028009220b6a2009200310c9081a2001418c096a200141a0016a41086a220c280200360200200141003a0094092001411036029009200141880e6a41186a2209200129039009370300200120012903a00137028409200141880e6a41106a200141f8086a41106a220529030022063703002001200b20036a36028009200141880e6a41086a2001290380092207370300200120012903f80822083703880e20014190056a41106a200637030020014190056a41086a200737030020014190056a41186a20092903003703002001200837039005200141f8086a20014190056a10b6014100210d024020012802f8084101470d00200141f8086a410472210e4100210d4108210f0340200141c8066a41206a200e41206a280200360200200141c8066a41186a2203200e41186a2902002206370300200141c8066a41106a220b200e41106a2902002207370300200141c8066a41086a2210200e41086a29020022083703002001200e29020022113703c806200141a0016a41186a22122006370300200141a0016a41106a22132007370300200c2008370300200120113703a001200141f8086a41186a220920032903003703002005200b290300370300200141f8086a41086a220b2010290300370300200120012903c8063703f80820012802c808200141a0016a20012802cc0828020c1105002106412010322210450d05201020012903a001370000201041186a2012290300370000201041106a2013290300370000201041086a200c290300370000200141d0036a41086a200b2903002207370300200141d0036a41106a20052903002208370300200141d0036a41186a20092903002211370300200120012903f80822143703d0032009201137030020052008370300200b2007370300200120143703f8080240200d20012802bc0c470d00200141b80c6a200d10d50120012802c00c210d20012802b80c210f0b200f200d41386c6a22032006370300200b2903002106200529030021072009290300210820012903f80821112003412c6a4281808080103702002003201036022820032011370308200341206a2008370300200341186a2007370300200341106a2006370300200120012802c00c41016a220d3602c00c2009201229030037030020052013290300370300200b200c290300370300200120012903a0013703f808024020012802d00c220320012802cc0c470d00200141c80c6a2003410110d60120012802d00c21030b20012802c80c20034105746a221020012903f808370000201041086a200b290300370000201041106a2005290300370000201041186a20092903003700002001200341016a220a3602d00c200141f8086a20014190056a10b60120012802f8084101460d000b0b0240200128029405450d00200128029005102c0b0240200141a0056a280200450d00200128029c05102c0b200141d0036a41e6dcc700410710c501200141c8066a41b18ec100410a10c501412010322203450d03200142203702a401200120033602a001200141a0016a4100411010c80120012802a00120012802a80122036a220520012900d003370000200541086a200141d0036a41086a2900003700002001200341106a22033602a801200141a0016a2003411010c80120012802a001220520012802a80122036a220920012900c806370000200941086a200141c8066a41086a2900003700002001200341106a22033602a8012003417f4c0d000240024020030d00410121090c010b200310322209450d040b2001410036028009200120033602fc08200120093602f808200141f8086a4100200310c80120012802f80820012802800922096a2005200310c9081a2001418c096a200141a0016a41086a2215280200360200200141003a0094092001411136029009200141d80c6a41186a2205200129039009370300200120012903a00137028409200141d80c6a41106a200141f8086a41106a221629030022063703002001200920036a36028009200141d80c6a41086a2001290380092207370300200120012903f80822083703d80c200141c8066a41106a2006370300200141c8066a41086a2007370300200141c8066a41186a2005290300370300200120083703c8062001200141c8086a3602e806200141f8086a200141c8066a10b801024020012d00a8094102460d000340200141d0036a41186a2217200141f8086a41186a22182903002206370300200141d0036a41106a221920162903002207370300200141d0036a41086a221a200141f8086a41086a221b2903002208370300200120012903f80822143703d003200128029809211c20012802a409211d200129029c092111200141e0026a41186a2006370300200141e0026a41106a2007370300200141e0026a41086a2008370300200120143703e00202402011422088a72210450d002010417f6a211241002109201c210341002105034002400240024020102005460d00200120033602800d200141880e6a200141800d6a10d80102400240024020012802940e220b450d0020012802900e210e024020012802980e220c450d00200c41ffffffff0371450d00200b102c0b200e201d4b0d010b02402009450d00200520096b220b20104f0d02200141800d6a41186a220e200320094105746b220b41186a220c290000370300200141800d6a41106a2213200b41106a220f290000370300200141800d6a41086a221e200b41086a221f2900003703002001200b2900003703800d200341086a22202900002106200341106a22212900002107200341186a22222900002108200b2003290000370000200c2008370000200f2007370000201f20063700002022200e290300370000202120132903003700002020201e290300370000200320012903800d3700000c040b4100210920122005470d040c060b200941016a21090c020b200b201041e48ac500103f000b2010201041f48ac500103f000b20122005470d002009417f6a20104f0d02201142ffffffff0f83201020096bad4220868421110c020b200541016a2105200341206a21030c000b0b200141a0016a41186a20172903002206370300200141a0016a41106a201929030022073703002015201a2903002208370300200120012903d00322143703a0012018200637030020162007370300201b2008370300200120143703f80820012802e8062203280200200141f8086a200328020428020c110500210620014190056a41186a2018290300220737030020014190056a41106a2016290300220837030020014190056a41086a201b2903002214370300200120012903f8082223370390052018200737030020162008370300201b2014370300200120233703f8080240200d20012802bc0c470d00200141b80c6a200d10d5010b20012802b80c200d41386c6a22032006370300200320012903f8083703082003201c360228200341106a201b290300370300200341186a2016290300370300200341206a20182903003703002003412c6a20113702002001200d41016a220d3602c00c200141f8086a200141c8066a10b80120012d00a8094102470d000b0b024020012802cc06450d0020012802c806102c0b0240200141c8066a41106a280200450d0020012802d406102c0b20014190096a22094200370300200141f8086a41106a22054200370300200141f8086a41086a22034200370300200142003703f808200141d0036a41e6dcc700410710c5012003200141d0036a41086a220b290000370300200120012900d0033703f808200141c8066a419cb8c200411510c5012009200141c8066a41086a2210290000370300200520012900c806370300200141f8006a200141f8086a412010c601024002400240200a200128027c410020012802781b220e4101200e41014b1b4f0d00024041002802d8d248450d0020014190096a420037030020014188096a22094200370300200141f8086a41086a22034200370300200142003703f808200141d0036a41e6dcc700410710c5012003200141d0036a41086a290000370300200120012900d0033703f808200141c8066a41ccbac200410a10c501200541086a200141c8066a41086a290000370000200520012900c806370000200141e0006a200141f8086a412010c601200141123602d403200120012903603703c8062001200141c8066a3602d00341002802d4d248210541002802d0d248210b41002802dcd2482110200141b8096a41f316360200200141b0096a42de80808010370300200141ac096a41acc5c300360200200141a4096a420e370200200141a0096a41e28fc100360200200141f8086a41206a4201370300200942023703002003410736020020014194096a200141d0036a3602002001419498c10036028409200141db8fc1003602fc08200141013602f808200b41f8a3c000201041024622031b200141f8086a200541e0a3c00020031b2802101103000b024020012802cc0c41ffffff3f71450d0020012802c80c102c0b20012802b80c2109024020012802c00c2203450d00200341386c2105200941286a210303400240200341046a28020041ffffff3f71450d002003280200102c0b200341386a2103200541486a22050d000b0b4100211020012802bc0c2203450d01200341386c450d012009102c0c010b2009420037030020014188096a220e420037030020034200370300200142003703f808200141d0036a41e6dcc700410710c5012003200b290000370300200120012900d0033703f808200141c8066a41f4b7c200410e10c501200541086a2010290000370000200520012900c806370000200141f0006a200141f8086a412010c601200128027421052001280270210c200b200141c80c6a41086a280200360200200120012903c80c3703d0032010200141b80c6a41086a280200360200200120012903b80c3703c806200141f8086a200141d0036a200141c8066a10da01200141d8086a41086a20032802002212360200200120012903f80822063703d808200141a80d6a41086a2001418c096a2802002213360200200120012902840922073703a80d200b2012360200200120063703d00320102013360200200120073703c806200141f8086a20054100200c1b220c200141d0036a200141c8066a10db01200141a0016a41086a20092802003602002001200e2903003703a0012003280200211a20012802fc0821160240024020012802f8084101470d002016210b201a21100c010b20014184096a2802002105200141c80d6a41086a200141a0016a41086a280200360200200120012903a0013703c80d200141c80d6a20024200420010ab01201620054102746a21120240024002400240024002400240024002400240200c0d00201621032016210b0c010b201621032016210b20122016460d0020054102742110201621032016210b024003402003220941046a210320092802002205450d022005280208220e41016a41004c0d032005200e36020802400240200541f4006a2d00000d0020052005280200417f6a220936020020090d01200541046a22092009280200417f6a220936020020090d012005102c0c010b200b2005360200200b41046a210b200c417f6a220c450d020b2010417c6a22100d000b201221030c010b200941046a21030b0240201220036b2205450d00200541027541027421050340200328020022092009280200417f6a3602000240200328020022092802000d00200941046a22092009280200417f6a3602002003280200220941046a2802000d002009102c0b200341046a21032005417c6a22050d000b0b200b20166b221541027522184115490d032018410176220341ffffffff03712003470d0b2003410274220a417f4c0d0b200a1032221b450d0e2001410036028009200142043703f8082016417c6a2117201641746a211941042105410021032018211c02400340201c21134100211c4101210b02402013417f6a220e450d000240024002400240024002400240024002400240024002402016200e4102746a2802002209280208220b41016a41004c0d002009200b36020820162013417e6a22124102746a280200220b280208221041016a41004c0d0120092802502109200b20103602082009200b280250490d04201920134102746a21094100211c410021100340024020122010470d002013210b0c0e0b200941046a280200220b280208220e41016a41004c0d03200b200e3602082009280200220e280208220c41016a41004c0d04200b280250210b200e200c3602082009417c6a2109201041016a2110200b200e2802504f0d000b201041016a210b2010417f7320136a210e0c050b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b2019201341027422126a2109024003400240200e4101470d004100210e0c020b200941046a280200220b280208221041016a41004c0d03200b201036020820092802002210280208220c41016a41004c0d04200b280250210b2010200c3602082009417c6a2109200e417f6a210e200b2010280250490d000b0b2013200e490d03201320184b0d042013200e6b220b410176220c450d00201720126a21092016200e4102746a21100340201028020021122010200928020036020020092012360200201041046a21102009417c6a2109200c417f6a220c0d000b0b0240200e0d00200e211c0c070b0240200b41094d0d00200e211c0c070b201320184b0d042013200e6b210b200e417f6a21092017200e4102746a2110034020132009490d0b2010200b41016a220b10bd012009417f6a220e20094f0d062010417c6a2110200e2109200b410a490d000c060b0b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b200e201341b8a3c8001059000b2013201841b8a3c800104f000b2013200e417f6a2209490d052013201841c8a3c800104f000b200e41016a211c0b0240200320012802fc08470d00200141f8086a10ae01200128028009210320012802f80821050b200520034103746a2209200b3602042009201c3602002001200341016a2203360280090240024020034102490d0020012802f808210503400240024002400240024020052003417f6a4103746a2209280200450d00200341037420056a220e41746a28020022102009280204220b4b0d010b20034103490d022009280204210b20052003417d6a221f4103746a28020421090c010b200341024d0d0420052003417d6a221f4103746a2802042209200b20106a4d0d00200341034d0d04200e41646a280200200920106a4b0d040b2009200b490d010b2003417e6a211f0b0240024002400240024002400240024002402003201f41016a22204d0d002003201f4d0d012005201f41037422226a2203280204221d20032802006a220320052020410374220d6a22052802002221490d02200320184b0d03201620214102746a220f2005280204221e41027422056a210920034102742110200320216b220e201e6b2203201e4f0d06201b20092003410274220510c908221220056a210b201e4101480d0720034101480d07201720106a2110200921050340200b417c6a22032802002209280208220e41016a41004c0d052009200e3602082005417c6a220e280200220c280208221341016a41004c0d0620092802502109200c20133602082010200e20032009200c2802504922091b280200360200200b200320091b210b0240200f200e200520091b2205490d00201221030c0a0b2010417c6a211020122103200b20124b0d000c090b0b2020200341d8a3c800103f000b201f200341e8a3c800103f000b2021200341f8a3c8001059000b2003201841f8a3c800104f000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b201b200f200510c908220320056a210b0240201e4101480d00200e201e4c0d00201620106a211220032103200f210502400240034020092802002210280208220e41016a41004c0d012010200e3602082003280200220e280208220c41016a41004c0d0220102802502110200e200c3602082005200920032010200e2802504922101b2802003602002003200341046a20101b2103200541046a2105200941046a200920101b220920124f0d05200b20034b0d000c050b0b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b41fcaec8004118200141d0036a41a0bec00041b0bec0001040000b20032103200f21050c010b20122103200921050b20052003200b20036b417c7110c9081a2001280280092203201f4d0d0220012802f808220520226a2209201d201e6a36020420092021360200200320204d0d042005200d6a2209200941086a20032020417f736a41037410ca081a20012003417f6a220336028009200341014b0d000b0b201c450d050c010b0b201f20034188a4c800103f000b202020031047000b41fcaec8004118200141d0036a41948bc50041a48bc5001040000b2009201341c8a3c8001059000b024020012802fc0841ffffffff0171450d0020012802f808102c0b200a450d01201b102c0c010b20184102490d002018417e6a210341022105201841027420166a41786a2109034020182003490d022009200510bd012009417c6a2109200541016a21052003417f6a2203417f470d000b0b20012802d00d210520012802cc0d2109200120012802c80d22033602880d200120093602840d200120033602800d20012003200541e0006c6a222036028c0d024002402005450d00200141f8086a41346a2105024002400340200141c8066a41286a220b200341286a290300370300200141c8066a41206a2210200341206a290300370300200141c8066a41186a220e200341186a290300370300200141c8066a41106a220c200341106a290300370300200141c8066a41086a2212200341086a290300370300200120032903003703c806200341306a2802002109200141e0026a41086a22132003413c6a290200370300200141e0026a41106a220f200341c4006a290200370300200141e0026a41186a221e200341cc006a2902003703002001200341346a2902003703e0022009450d01200341d4006a280200211f200341d8006a2902002106200141f8086a41286a200b290300370300200141f8086a41206a2010290300370300200141f8086a41186a200e290300370300200141f8086a41106a200c290300370300200141f8086a41086a2012290300370300200120012903c8063703f808200120093602a809200520012903e002370200200541086a2013290300370200200541106a200f290300370200200541186a201e290300370200200120063703d0092001201f3602cc09200141d0036a200141f8086a10dc01024020012802d00322090d00200341e0006a22032020470d010c030b0b20014190056a41086a2205200141d0036a41146a290200370300200141a0056a220b200141d0036a411c6a290200370300200141a8056a2210200141d0036a41246a2902003703002001200341e0006a3602880d2001200141dc036a29020037039005200141d0036a41086a280200210320012802d403210e412c1032221d450d0d201d2003360208201d200e360204201d2009360200201d20012903900537020c201d41146a2005290300370200201d411c6a200b290300370200201d41246a201029030037020020014281808080103702ec0d2001201d3602e80d2005200141800d6a41086a2903002206370300200120012903800d37039005024002402006a72209200128029c052222470d00410121130c010b200141d0036a410c6a210d200141f8086a41346a2105410121130340200941e0006a2109024002400340200141c8066a41286a2210200941a07f6a220341286a290300370300200141c8066a41206a220e200341206a290300370300200141c8066a41186a220c200341186a290300370300200141c8066a41106a2212200341106a290300370300200141c8066a41086a220f200341086a290300370300200120032903003703c806200341306a280200210b200141e0026a41086a221e2003413c6a290200370300200141e0026a41106a221f200341c4006a290200370300200141e0026a41186a2220200341cc006a2902003703002001200341346a2902003703e002200b450d01200341d4006a2802002121200341d8006a2902002106200141f8086a41286a2010290300370300200141f8086a41206a200e290300370300200141f8086a41186a2210200c290300370300200141f8086a41106a220e2012290300370300200141f8086a41086a220c200f290300370300200120012903c8063703f8082001200b3602a809200520012903e002370200200541086a201e290300370200200541106a201f290300370200200541186a2020290300370200200120063703d009200120213602cc09200141d0036a200141f8086a10dc0120012802d003220b0d02200941e0006a2109200341e0006a2022470d000b202221090b20012009360298050c020b200141880e6a41086a200d41086a2902002206370300200141880e6a41106a200d41106a2902002207370300200141880e6a41186a200d41186a29020022083703002001200d29020022113703880e20012802d803211220012802d403210f20102008370300200e2007370300200c2006370300200120113703f8080240201320012802ec0d470d00200141e80d6a2013410110dd0120012802e80d211d0b201d2013412c6c6a2203200f3602042003200b360200200341086a20123602002003410c6a20012903f808370200200341146a200c2903003702002003411c6a200e290300370200200341246a20102903003702002001201341016a22133602f00d20222009470d000b20012022360298050b20014190056a10de0120012802e80d212120012802ec0d21220c030b200341e0006a21200b200120203602880d0b200141800d6a10de014100212241042121410021130b2013412c6c210320212105024003402003450d01200341546a2103200141e8006a200510df012005412c6a21052001280268220b450d000b200128026c211002402013450d002013412c6c21052021210303400240200341046a2802002209450d00200941226c450d002003280200102c0b2003412c6a2103200541546a22050d000b0b02402022450d002022412c6c450d002021102c0b02402015450d0020184102742105201621030340200328020022092009280200417f6a3602000240200328020022092802000d00200941046a22092009280200417f6a3602002003280200220941046a2802000d002009102c0b200341046a21032005417c6a22050d000b0b201a450d042016450d04201a41ffffffff0371450d042016102c0c040b200141003602d006200142083703c806200141c8066a4100201810e00120012802d006210b02400240201841027422050d00201621030c010b201620056a211d2018410274211020012802c806200b41306c6a2105200141800d6a41186a210e200141800d6a41106a210c200141800d6a41086a211220162109024003400240200928020022030d00200941046a21030c020b200328020841016a220f41004c0d042003200f360208200e200341ec006a290000370300200c200341e4006a2900003703002012200341dc006a2900003703002001200341d4006a2900003703800d2003280208220f41016a221e41004c0d052003201e360208200e2903002106200c2903002107201229030021082003200f417f6a360208200141f8086a41086a220f2008370300200141f8086a41106a221e2007370300200141f8086a41186a221f2006370300200120012903800d3703f808200341c8006a29030021062003290340210720032003280200417f6a2220360200024020200d00200341046a22202020280200417f6a222036020020200d002003102c0b200941046a2109200520012903f808370300200f2903002108201e2903002111201f2903002114200541286a2006370300200541206a2007370300200541186a2014370300200541106a2011370300200541086a2008370300200541306a2105200b41016a210b2010417c6a22100d000b201d21030b201d20036b220541027521180b2001200b3602d00602402005450d00201841027421050340200328020022092009280200417f6a3602000240200328020022092802000d00200941046a22092009280200417f6a3602002003280200220941046a2802000d002009102c0b200341046a21032005417c6a22050d000b0b0240201a450d002016450d00201a41ffffffff0371450d002016102c0b20012902cc06210620012802c80621100c050b2003201841a8a3c8001058000b41fcaec8004118200141d0036a41a0a4c70041b0a4c7001040000b41fcaec8004118200141d0036a41a0a4c70041c0a4c7001040000b200120103602cc062001200b3602c8064100211041002802d8d248450d00200141043602ec0d2001200141c8066a3602e80d41002802d4d248210341002802d0d248210541002802dcd2482109200141b8096a41fc16360200200141b0096a42de80808010370300200141ac096a41acc5c300360200200141a4096a420e370200200141a0096a41e28fc10036020020014198096a420137030020014188096a420137030020014180096a410736020020014194096a200141e80d6a3602002001418c98c10036028409200141db8fc1003602fc08200141013602f808200541f8a3c000200941024622091b200141f8086a200341e0a3c00020091b2802101103000c010b0b20012802c80820012802cc08280200110200024020012802cc08280204450d0020012802c808102c0b02400240024002402010450d00200141f8086a109b010240200141f8086a41186a2903004200510d002001420020014198096a290300220742809ce8af6d7c220820082007561b37038803200141800d6a41186a4200370300200141900d6a22054200370300200141800d6a41086a22034200370300200142003703800d200141d80c6a41e6dcc700410710c5012003200141d80c6a41086a2209290000370300200120012900d80c3703800d200141880e6a41ec8ec100411210c501200441086a220b200141880e6a41086a220e290000370000200420012900880e370000200141f8086a200141800d6a10e1010240024020012802f808220c450d00200120012902fc08370294032001200c36029003200141980d6a42003703002005420037030020034200370300200142003703800d200141d80c6a41e6dcc700410710c50120032009290000370300200120012900d80c3703800d200141880e6a41fe8ec100411210c501200b200e290000370000200420012900880e370000200141f8086a200141800d6a10e101024020012802f8082203450d00200120012902fc0822243702a403200120033602a00320012f0198032102200141003602b803200142013703b003200141b0036a41002006422088a741306c220b41306d10d6012006a7210e20012802b80321090240200b450d0020012802b00320094105746a2103201021050340200541086a2900002106200541106a290000210720052900002108200341186a200541186a290000370000200341106a2007370000200341086a200637000020032008370000200941016a2109200341206a2103200541306a2105200b41506a220b0d000b0b200120093602b8030240200e450d00200e41306c450d002010102c0b2001201336028009200120223602fc08200120213602f808200141980d6a4200370300200141800d6a41106a4200370300200141800d6a41086a22034200370300200142003703800d200141d80c6a41d4dcc700410810c5012003200141d80c6a41086a290000370300200120012900d80c3703800d200141880e6a41bba8c700410d10c501200441086a200141880e6a41086a290000370000200420012900880e370000200141c8006a200141800d6a412010d301200141c8006a41106a29030021062001290350210720012903482108411010322203450d0b2003200742002008a722051b37030020032006420020051b370308200141c0036a200141f8086a200310e201200141c0036a10e30120012802c003221520012802c8032203412c6c6a211720012802c40321250240024020030d00201521122015210e0c010b200141880e6a41086a2120200141880e6a41106a2121200141880e6a41186a21222015211203402012220e280208210b200e280204211e2020200e41146a221d2902003703002021200e411c6a220d2902003703002022200e41246a22162902003703002001200e29020c3703880e200e412c6a2112200e280200220f450d0120014190056a41186a2218202229030037030020014190056a41106a221b202129030037030020014190056a41086a221c2020290300370300200120012903880e3703900502400240200b41306c22100d0042002107420021060c010b200f41206a21034200210720102105420021060340427f2006200341086a2903007c200720032903007c22082007542209ad7c22072009200720065420072006511b22091b2106427f200820091b2107200341306a2103200541506a22050d000b0b024002400240200b41306c2205450d00200f20106a2113200f21030340200341286a2903002108200341206a2903002111200341086a2900002114200341106a290000212320032900002126200141800d6a41186a2209200341186a290000370300200141800d6a41106a220b2023370300200141800d6a41086a22102014370300200120263703800d201120082007200610e401220c41ffff03710d02200341306a2103200541506a22050d000b0b41002103410221050240201e450d00201e41306c450d00200f102c0b4100210c0c010b200141d0036a41086a22192010290300370300200141d0036a41106a221a200b290300370300200141d0036a41186a220a2009290300370300200120012903800d22083703c806200120083703d00341221032221f450d0e201f20012903d003370100201f200c3b0120201f41186a200a290300370100201f41106a201a290300370100201f41086a201929030037010020014281808080103702dc0c2001201f3602d80c0240024020054130470d004101210c0c010b200341306a211a201341506a210a4101210c0340201a210302400340200341286a2903002108200341206a29030021112009200341186a290000370300200b200341106a2900003703002010200341086a290000370300200120032900003703800d201120082007200610e401220541ffff03710d012013200341306a2203470d000c030b0b200141c8066a41086a20102903002208370300200141c8066a41106a200b2903002211370300200141c8066a41186a20092903002214370300200120012903800d22233703c806200141f8086a41186a22272014370300200141f8086a41106a22282011370300200141f8086a41086a22292008370300200120233703f8080240200c20012802dc0c470d00200141d80c6a200c410110e50120012802d80c211f0b200341306a211a201f200c41226c6a221920012903f808370100202929030021082028290300211120272903002114201920053b0120201941186a2014370100201941106a2011370100201941086a20083701002001200c41016a220c3602e00c200a2003470d000b0b0240201e450d00201e41306c450d00200f102c0b20012802dc0c210320012802d80c21050b200141f8086a41186a22092018290300370300200141f8086a41106a220b201b290300370300200141f8086a41086a2210201c29030037030020012001290390053703f808200e2003360204200e200c360208200e2005360200200e20012903f80837020c201d2010290300370200200d200b2903003702002016200929030037020020122017470d000b2012210e201721120b20244220882107201720126b2203412c6d210502402003450d002005412c6c210303400240201241046a2802002205450d00200541306c450d002012280200102c0b2012412c6a2112200341546a22030d000b0b2007a7211c200e20156b2209412c6d2205412c6c21032005ad4220862025ad8421062015210503402003450d03200341546a2103200141c0006a200510df012005412c6a21052001280240220b450d000b2001280244ad210602402009450d0020152103034020032205412c6a21030240200541046a2802002209450d00200941226c450d002005280200102c0b200e2003470d000b0b20064220862106200bad210702402025450d002025412c6c450d002015102c0b20062007842106410321090c0d0b20012802940341ffffff3f71450d00200128029003102c0b02402006a72203450d00200341306c450d002010102c0b02402013450d002013412c6c21052021210303400240200341046a2802002209450d00200941226c450d002003280200102c0b2003412c6a2103200541546a22050d000b0b410621094101210320220d030c0a0b200120063702cc06200120153602c806200141f8086a200141c8066a200141a0036a20014190036a10e60120014180096a290300210620012802fc08210920012802f8084101460d0a2006422088212a200141b80a6a2802002110200141b00a6a290300212b200141ac0a6a280200210e200141a40a6a290200212c200141a00a6a280200210c200141980a6a290300212d200141940a6a28020021122001418c0a6a290200212e200141880a6a2802002113200141800a6a290300212f200141fc096a280200210f200141f4096a2902002130200141f0096a280200211e200141e8096a2903002131200141e4096a280200211f200141dc096a2902002132200141d8096a2802002120200141d0096a2903002133200141cc096a2802002121200141c4096a2902002134200141c0096a2802002122200141b8096a2903002135200141b4096a280200211d200141ac096a2902002136200141a8096a280200210d200141a0096a29030021372001419c096a280200211620014194096a290200213820014190096a280200211820014188096a290300213920012802b803211b41002105201c450d042001290388032108200742f8ad377e2002ad4280bce9007e7c2123201bad221142c0f0f50b7e2126201142a8ada6047e213a201c210302402024422188a7220b450d00427f2023200742d0fec82f7e7c203a7c20074280c2d72f7e7c20267c22114280a7f2a6017c2214201420114280a3c3c7007c541b2111201c21050340024002400240417f201120085220112008541b41016a0e03000901000b02402005200b6a220320054f0d00200521030c040b2003201c490d01200521030c030b2005200b6b220320054d0d00200521030c020b20032005460d06427f20232003ad221142d0fec82f7e7c203a7c20114280c2d72f7e7c20267c22114280a7f2a6017c2214201420114280a3c3c7007c541b211120032105200b410176220b0d000b0b024003402003220541016a2203201c4b0d01427f20232003ad221142d0fec82f7e7c203a7c20114280c2d72f7e7c20267c22114280a7f2a6017c2214201420114280a3c3c7007c541b2008540d000b0b410021172005417f6a20054b0d0303400240427f20232005ad221142d0fec82f7e7c203a7c20114280c2d72f7e7c20267c22114280a7f2a6017c2214201420114280a3c3c7007c541b2008560d00200521170c050b2005417e6a21032005417f6a220b21052003200b4d0d000c040b0b4192bdc000413e41d0bdc000105c000b200041043602000c0b0b2021450d062022412c6c450d062021102c0c090b201c20172017201c4b1b21050b202aa72103200120053602cc030240024041002802d8d24841034b0d00417f417f417f417f417f417f417f417f417f417f417f417f417f417f417f200320186a220b200b2003491b220320166a220b200b2003491b2203200d6a220b200b2003491b2203201d6a220b200b2003491b220320226a220b200b2003491b220320216a220b200b2003491b220320206a220b200b2003491b2203201f6a220b200b2003491b2203201e6a220b200b2003491b2203200f6a220b200b2003491b220320136a220b200b2003491b220320126a220b200b2003491b2203200c6a220b200b2003491b2203200e6a220b200b2003491b220320106a220b200b2003491b21030c010b200141c8066a411c6a4113360200200141dc066a4113360200200141d4066a41143602002001427f427f200742f8ad377e2002ad4280bce9007e7c417f417f417f417f417f417f417f417f417f417f417f417f417f417f417f200320186a220520052003491b220320166a220520052003491b2203200d6a220520052003491b2203201d6a220520052003491b220320226a220520052003491b220320216a220520052003491b220320206a220520052003491b2203201f6a220520052003491b2203201e6a220520052003491b2203200f6a220520052003491b220320136a220520052003491b220320126a220520052003491b2203200c6a220520052003491b2203200e6a220520052003491b220320106a220520052003491b2203ad220742d0fec82f7e7c201bad220842a8ada6047e7c20074280c2d72f7e7c4280a3c3c7007c2207200842c0f0f50b7e7c220820082007541b2207428084afdf007c220820082007541b3703d003200141143602cc062001200336029005200120014190056a3602e0062001200141cc036a3602d8062001200141d0036a3602d006200120014188036a3602c80641002802d4d248210541002802d0d248210b41002802dcd248211b200141b8096a419103360200200141b0096a42ec80808010370300200141ac096a41f1c7c000360200200141a4096a4221370200200141a0096a41d0c7c00036020020014198096a420437030020014188096a420437030020014180096a4107360200200141f8086a411c6a200141c8066a36020020014188c6c00036028409200141db8fc1003602fc08200141043602f808200b41f8a3c000201b410246221b1b200141f8086a200541e0a3c000201b1b28021011030020012802cc0321050b200141b40a6a2010360200200141a80a6a200e3602002001419c0a6a200c360200200141900a6a2012360200200141840a6a2013360200200141f8096a200f360200200141ec096a201e360200200141e0096a201f360200200141d4096a2020360200200141c8096a2021360200200141bc096a2022360200200141b0096a201d360200200141a4096a200d36020020014198096a20163602002001418c096a20183602002001202b3702ac0a2001202c3703a00a2001202d3702940a2001202e3703880a2001202f3702fc09200120303703f009200120313702e409200120323703d809200120333702cc09200120343703c009200120353702b409200120363703a8092001203737029c0920012038370390092001203937028409200120063702fc08200120093602f80820014184096a2115024002400240024002400240200320056b221a20034b0d00201a450d00200141980d6a4200370300200141800d6a41106a4200370300200141800d6a41086a22034200370300200142003703800d200141d80c6a41d4dcc700410810c5012003200141d80c6a41086a290000370300200120012900d80c3703800d200141880e6a41bba8c700410d10c501200441086a200141880e6a41086a290000370000200420012900880e370000200141286a200141800d6a412010d301200141286a41106a29030021062001290330210720012903282108411010322203450d092003200742002008a722051b37030020032006420020051b370308200141f497c1003602cc0c200120033602c80c200141d80c6a41e6dcc700410710c501200141880e6a41b18ec100410a10c501412010322203450d09200142203702840d200120033602800d200141800d6a4100411010c80120012802800d20012802880d22036a220520012900d80c370000200541086a200141d80c6a41086a2900003700002001200341106a22033602880d200141800d6a2003411010c80120012802800d220520012802880d22036a220920012900880e370000200941086a200141880e6a41086a2900003700002001200341106a22033602880d2003417f4c0d060240024020030d00410121090c010b200310322209450d0a0b200141003602900e2001200336028c0e200120093602880e200141880e6a4100200310c80120012802880e20012802900e22096a2005200310c9081a2001419c0e6a200141800d6a41086a220b280200360200200141003a00a40e200141113602a00e200141d8086a41186a220520012903a00e370300200120012903800d3702940e200141d8086a41106a200141880e6a41106a221029030022063703002001200920036a3602900e200141d8086a41086a20012903900e2207370300200120012903880e22083703d808200141d80c6a41106a2006370300200141d80c6a41086a2007370300200141d80c6a41186a2005290300370300200120083703d80c2001200141c80c6a3602f80c200141880e6a200141d80c6a10b80120012d00b80e4102460d03200141e80d6a41186a200141880e6a41186a2903002206370300200141e80d6a41106a20102903002207370300200141e80d6a41086a200141880e6a41086a2903002208370300200141c80d6a41086a2008370300200141c80d6a41106a2007370300200141c80d6a41186a2006370300200120012903880e22113703e80d200120113703c80d20012802a80e210920012802ac0e2103200141800d6a41186a2006370300200141800d6a41106a2007370300200b2008370300200120113703800d20012802f80c2205280200200141800d6a200528020428020c110500210602402003450d002009450d00200341ffffff3f71450d002009102c0b41281032221d450d09201d20012903c80d370300201d2006370320201d41186a200141c80d6a41186a221f290300370300201d41106a200141c80d6a41106a2220290300370300201d41086a200141c80d6a41086a2221290300370300200141800d6a41206a200141d80c6a41206a280200360200200141800d6a41186a200141d80c6a41186a290300370300200141800d6a41106a200141d80c6a41106a290300370300200141800d6a41086a200141d80c6a41086a290300370300200120012903d80c3703800d200141880e6a200141800d6a10b8010240024020012d00b80e4102470d00410121194101211b0c010b41c8002105410121194101211b0340201f200141880e6a41186a220929030022063703002020200141880e6a41106a220b29030022073703002021200141880e6a41086a22102903002208370300200141a80d6a41086a220e2008370300200141a80d6a41106a220c2007370300200141a80d6a41186a22122006370300200120012903880e22113703c80d200120113703a80d20012802a80e210f20012802ac0e2103200141e80d6a41186a2006370300200141e80d6a41106a2007370300200141e80d6a41086a2008370300200120113703e80d20012802a00d2213280200200141e80d6a201328020428020c110500210602402003450d00200f450d00200341ffffff3f71450d00200f102c0b20092012290300370300200b200c2903003703002010200e290300370300200120012903a80d3703880e0240201b2019470d00201941016a22032019490d092019410174220e2003200e20034b1b22034104200341044b1bad42287e2207422088a70d0941000d092007a722034100480d09201941286c201e20191b211e024002400240201d410020191b220e0d0020030d014108211d0c020b0240201e0d0020030d014108211d0c020b200e201e20031035221d450d0e0c010b20031032221d450d0d0b200341286e21190b201d20056a220e41606a220320012903880e37030020102903002107200b290300210820092903002111200e2006370300200341186a2011370300200341106a2008370300200341086a2007370300200541286a2105201b41016a211b200141880e6a200141800d6a10b80120012d00b80e4102470d000b0b024020012802840d450d0020012802800d102c0b0240200141900d6a280200450d00200128028c0d102c0b201b4115490d02201b410176ad42287e2206422088a70d062006a72228417f4c0d06202810322217450d09200141003602880d200142043703800d201d41586a210a201d41a87f6a2127201b212203402022210e41002122410121100240200e417f6a2209450d00024002400240024002400240201d200941286c6a41206a290300200e41286c220c201d6a41506a2903002206540d00200e417e6a210b2027200c6a2105410021224100210303400240200b2003470d00200e21100c080b200341016a21032006200529030022075a2109200541586a21052007210620090d000b200341016a21102003417f73200e6a21090c010b2027200c6a210302400340024020094101470d00410021090c020b2009417f6a2109200620032903002207542105200341586a21032007210620050d000b0b200e2009490d02200e201b4b0d01200e20096b2210410176220b450d00200a200c6a2103201d200941286c6a21050340200141a80d6a41186a220c200541186a2212290300370300200141a80d6a41106a2213200541106a220f290300370300200141a80d6a41086a221e200541086a221f290300370300200120052903003703a80d200341206a22202903002106200341086a22212903002107200341106a22222903002108200329030021112012200341186a220d290300370300200f2008370300201f200737030020052011370300200541206a2212290300210720122006370300200320012903a80d3703002021201e29030037030020222013290300370300200d200c29030037030020202007370300200341586a2103200541286a2105200b417f6a220b0d000b0b024020090d00200921220c050b0240201041094d0d00200921220c050b200e201b4b0d02200e20096b210b201d200941286c6a210c0340200e2009417f6a2222490d040240200e20226b22104102490d00201d200941286c6a220341206a2212290300201d202241286c6a220541206a22092903005a0d00200141880e6a41186a2213200541186a220f290300370300200141880e6a41106a221e200541106a221f290300370300200141880e6a41086a2220200541086a2221290300370300200120052903003703880e20092903002106200520032903003703002021200341086a290300370300201f200341106a290300370300200f200341186a29030037030020092012290300370300024020104103490d00200b417f6a211241002105200c210302400340200341c8006a220929030020065a0d02200b2005460d01200341206a2009290300370300200341186a200341c0006a290300370300200341106a200341386a290300370300200341086a200341306a2903003703002003200341286a2209290300370300200921032012200541016a2205470d000b200921030c010b200541016a2010419ca5c800103f000b200320012903880e37030020032006370320200341186a2013290300370300200341106a201e290300370300200341086a20202903003703000b2022450d05200b41016a210b200c41586a210c202221092010410a4f0d050c000b0b200e201b41b8a3c800104f000b2009200e41b8a3c8001059000b200e2009417f6a2222490d00200e201b41c8a3c800104f000b2022200e41c8a3c8001059000b024020012802880d220320012802840d470d00200141800d6a10ae0120012802880d21030b20012802800d220520034103746a22092010360204200920223602002001200341016a22033602880d024020034102490d0002400340024002400240024020052003417f6a4103746a2209280200450d00200341037420056a220e41746a28020022102009280204220b4d0d00200341024d0d0620052003417d6a221f4103746a2802042209200b20106a4d0d01200341034d0d06200e41646a280200200920106a4d0d010c060b20034103490d012009280204210b20052003417d6a221f4103746a28020421090b2009200b490d010b2003417e6a211f0b0240024002400240024002402003201f41016a22204d0d002003201f4d0d012005201f410374220d6a2203280204221620032802006a22032005202041037422186a22052802002221490d022003201b4b0d03201d202141286c6a220f2005280204221e41286c22056a2109200341286c210b200320216b2210201e6b2203201e4f0d0420172009200341286c220510c908220c20056a211302400240201e4101480d00200341014e0d010b200c2112200921050c060b200a200b6a2103200921052013210b034002400240200b41786a290300200941786a290300540d00200b41586a221321102009210e0c010b200b2110200941586a2205210e2009210b0b2003200b41586a2209290300370300200341206a200941206a290300370300200341186a200941186a290300370300200341106a200941106a290300370300200341086a200941086a29030037030002402010200c4b0d00200c21120c070b200341586a21032010210b200e2109200c2112200f200e490d000c060b0b2020200341d8a3c800103f000b201f200341e8a3c800103f000b2021200341f8a3c8001059000b2003201b41f8a3c800104f000b2017200f200510c908220320056a211302400240201e4101480d002010201e4a0d010b20032112200f21050c010b201d200b6a210e2003211220032103200f2105034002400240200941206a290300200341206a290300540d00200341286a2212210b200921100c010b200941286a21102003210b200921030b20052003290300370300200541206a200341206a290300370300200541186a200341186a290300370300200541106a200341106a290300370300200541086a200341086a290300370300200541286a2105200b20134f0d01200b2103201021092010200e490d000b0b20052012201320126b220320034128706b10c9081a024020012802880d2203201f4d0d0020012802800d2205200d6a22092016201e6a36020420092021360200200320204d0d02200520186a2209200941086a20032020417f736a41037410ca081a20012003417f6a22033602880d200341014d0d030c010b0b201f20034188a4c800103f000b202020031047000b2022450d020c000b0b024041002802d8d2484103490d00200141c5003602840d200141d8c6c0003602800d41002802d4d248210341002802d0d248210541002802dcd2482109200141c80e6a41b502360200200141c00e6a42ec80808010370300200141bc0e6a41f1c7c000360200200141b40e6a4221370200200141b00e6a41d0c7c000360200200141a80e6a4201370300200141980e6a4201370300200141900e6a4107360200200141a40e6a200141e80d6a360200200141b4b5c8003602940e200141db8fc10036028c0e200141033602880e200141043602ec0d200341e0a3c000200941024622091b28021021032001200141800d6a3602e80d200541f8a3c00020091b200141880e6a20031103000b20012902fc08210620012802f8082109200141c8066a201541b40110c9081a0c040b024020012802840d41ffffffff0171450d002005102c0b20284128490d022017102c0c020b201b4102490d01201d201b417f6a220941286c6a210e4100210b0340024002400240201b20092203417f6a2209490d00201b20096b22124102490d02201d200341286c6a220341206a220c290300201d200941286c6a220541206a22102903005a0d02200141880e6a41186a2213200541186a220f290300370300200141880e6a41106a221e200541106a221f290300370300200141880e6a41086a2220200541086a2221290300370300200120052903003703880e20102903002106200520032903003703002021200341086a290300370300201f200341106a290300370300200f200341186a2903003703002010200c29030037030020124103490d01200b417f6a210c41002105200e210302400340200341c8006a221029030020065a0d03200c2005460d01200341206a2010290300370300200341186a200341c0006a290300370300200341106a200341386a290300370300200341086a200341306a2903003703002003200341286a221029030037030020102103200b2005417f6a2205470d000b201021030c020b410120056b2012419ca5c800103f000b2009201b41a8a3c8001058000b200320012903880e37030020032006370320200341186a2013290300370300200341106a201e290300370300200341086a20202903003703000b200b417f6a210b200e41586a210e20090d000c020b0b024020012802dc0c450d0020012802d80c102c0b0240200141e80c6a280200450d0020012802e40c102c0b410021194108211d4100211b0b200141003602c80d4100210c0240201d201b41286c6a2213201d460d004100210c201d210b034041012109024020012802a8032205450d00200541057441606a41057641016a21104100210320012802a003210502400340200b2005460d012005200b412010cc08450d01200541206a2105410121092010200341016a2203470d000c020b0b410021090b2001200b41206a3602e80d0240024002400240024002400240024002400240024002400240024002400240024020090d00200b41286a210b200120033602d80c0240200128028009220e450d00200e41037441786a41037641016a21104100210920012802f8082105034020052802002003460d03200541086a21052010200941016a2209470d000b0b0240200128028c092212450d002012410c6c41746a21092012410274417c6a41027641016a210e410021102001280284092105034020052802002003460d04200941746a21092005410c6a2105200e201041016a2210470d000b0b0240200128029809220e450d00200e41047441706a41047641016a2110410021092001280290092105034020052802002003460d05200541106a21052010200941016a2209470d000b0b024020012802a4092212450d00201241146c416c6a21092012410274417c6a41027641016a210e41002110200128029c092105034020052802002003460d062009416c6a2109200541146a2105200e201041016a2210470d000b0b024020012802b0092212450d00201241186c41686a2109201241037441786a41037641016a210e4100211020012802a8092105034020052802002003460d07200941686a2109200541186a2105200e201041016a2210470d000b0b024020012802bc092212450d002012411c6c41646a21092012410274417c6a41027641016a210e4100211020012802b4092105034020052802002003460d08200941646a21092005411c6a2105200e201041016a2210470d000b0b024020012802c809220e450d00200e41057441606a41057641016a21104100210920012802c0092105034020052802002003460d09200541206a21052010200941016a2209470d000b0b024020012802d4092212450d00201241246c415c6a21092012410274417c6a41027641016a210e4100211020012802cc092105034020052802002003460d0a2009415c6a2109200541246a2105200e201041016a2210470d000b0b024020012802e0092212450d00201241286c41586a2109201241037441786a41037641016a210e4100211020012802d8092105034020052802002003460d0b200941586a2109200541286a2105200e201041016a2210470d000b0b024020012802ec092212450d002012412c6c41546a21092012410274417c6a41027641016a210e4100211020012802e4092105034020052802002003460d0c200941546a21092005412c6a2105200e201041016a2210470d000b0b024020012802f8092212450d00201241306c41506a2109201241047441706a41047641016a210e4100211020012802f0092105034020052802002003460d0d200941506a2109200541306a2105200e201041016a2210470d000b0b024020012802840a2212450d00201241346c414c6a21092012410274417c6a41027641016a210e4100211020012802fc092105034020052802002003460d0e2009414c6a2109200541346a2105200e201041016a2210470d000b0b024020012802900a2212450d00201241386c41486a2109201241037441786a41037641016a210e4100211020012802880a2105034020052802002003460d0f200941486a2109200541386a2105200e201041016a2210470d000b0b0240200128029c0a2212450d002012413c6c41446a21092012410274417c6a41027641016a210e4100211020012802940a2105034020052802002003460d10200941446a21092005413c6a2105200e201041016a2210470d000b0b02400240024020012802a80a220e450d00200e41067441406a41067641016a21104100210920012802a00a2105034020052802002003460d02200541c0006a21052010200941016a2209470d000b0b20012802b40a2212450d12201241c4006c41bc7f6a21092012410274417c6a41027641016a210e4100211020012802ac0a2105034020052802002003460d02200941bc7f6a2109200541c4006a2105200e201041016a2210470d000c130b0b2005200541c0006a200e2009417f736a41067410ca081a2001200e417f6a3602a80a0c100b2005200541c4006a200910ca081a20012012417f6a3602b40a0c0f0b02402019450d00201941286c450d00201d102c0b20012802c80c20012802cc0c280200110200024020012802cc0c280204450d0020012802c80c102c0b200141f8086a10e90120014190056a200141c8066a41b40110c9081a410921090c180b2005200541086a200e2009417f736a41037410ca081a2001200e417f6a360280090c0d0b20052005410c6a200910ca081a20012012417f6a36028c090c0c0b2005200541106a200e2009417f736a41047410ca081a2001200e417f6a360298090c0b0b2005200541146a200910ca081a20012012417f6a3602a4090c0a0b2005200541186a200910ca081a20012012417f6a3602b0090c090b20052005411c6a200910ca081a20012012417f6a3602bc090c080b2005200541206a200e2009417f736a41057410ca081a2001200e417f6a3602c8090c070b2005200541246a200910ca081a20012012417f6a3602d4090c060b2005200541286a200910ca081a20012012417f6a3602e0090c050b20052005412c6a200910ca081a20012012417f6a3602ec090c040b2005200541306a200910ca081a20012012417f6a3602f8090c030b2005200541346a200910ca081a20012012417f6a3602840a0c020b2005200541386a200910ca081a20012012417f6a3602900a0c010b20052005413c6a200910ca081a20012012417f6a36029c0a0b024041002802d8d2484105490d002001410c36028c0d200141023602840d2001200141e80d6a3602880d2001200141d80c6a3602800d41002802d4d248210341002802d0d248210541002802dcd24821092001419d023602c80e200142ec808080103703c00e200141f1c7c0003602bc0e200142213702b40e200141d0c7c0003602b00e200142023703a80e200142033703980e200141a8c6c0003602940e200141073602900e200141db8fc10036028c0e200141053602880e200341e0a3c000200941024622091b28021021032001200141800d6a3602a40e200541f8a3c00020091b200141880e6a20031103000b200120012802c80d41016a220c3602c80d0b200b2013460d01200c201a490d000b0b024041002802d8d2484102490d002001418c0d6a4102360200200141023602840d2001417f417f417f417f417f417f417f417f417f417f417f417f417f417f417f2001280280092203200128028c096a220520052003491b22032001280298096a220520052003491b220320012802a4096a220520052003491b220320012802b0096a220520052003491b220320012802bc096a220520052003491b220320012802c8096a220520052003491b220320012802d4096a220520052003491b220320012802e0096a220520052003491b220320012802ec096a220520052003491b220320012802f8096a220520052003491b220320012802840a6a220520052003491b220320012802900a6a220520052003491b2203200128029c0a6a220520052003491b220320012802a80a6a220520052003491b220320012802b40a6a220520052003491b200c6a3602d80c2001200141d80c6a3602880d2001200141c80d6a3602800d41002802d4d248210341002802d0d248210541002802dcd2482109200141c80e6a41ab02360200200141c00e6a42ec80808010370300200141bc0e6a41f1c7c000360200200141b40e6a4221370200200141b00e6a41d0c7c000360200200141a80e6a4202370300200141980e6a4203370300200141900e6a4107360200200141a40e6a200141800d6a360200200141c0c6c0003602940e200141db8fc10036028c0e200141023602880e200541f8a3c000200941024622091b200141880e6a200341e0a3c00020091b2802101103000b20012902fc08210620012802f8082109200141c8066a201541b40110c9081a02402019450d00201941286c450d00201d102c0b20012802c80c20012802cc0c28020011020020012802cc0c280204450d0020012802c80c102c0b20014190056a200141c8066a41b40110c9081a200120093602d003200120063702d403200141dc036a20014190056a41b40110c9081a2006422088a7220341ffffffff01712003470d0020034103742205417f4c0d000240024020050d004104210b0c010b20051032220b450d040b200141003602d0062001200b3602c806200120054103763602cc06200141c8066a4100200310eb0120012802c80620012802d00622054103746a2009200341037410c9081a2001200520036a3602d006200141e4036a2802002203ad420c7e2206422088a70d002006a72205417f4c0d0020012802dc03210b4104210902402005450d00200510322209450d040b2001410036029008200120093602880820012005410c6e36028c0820014188086a4100200310ec012001280288082001280290082205410c6c6a200b2003410c6c10c9081a2001200520036a36029008200141f0036a280200220341ffffffff00712003470d0020034104742205417f4c0d0020012802e803210b4104210902402005450d00200510322209450d040b200141003602a00820012009360298082001200541047636029c0820014198086a4100200310ed0120012802980820012802a00822054104746a200b200341047410c9081a2001200520036a3602a008200141fc036a2802002203ad42147e2206422088a70d002006a72205417f4c0d0020012802f40321090240024020050d004104210b0c010b20051032220b450d040b200141003602b0082001200b3602a8082001200541146e3602ac08200141a8086a4100200310ee0120012802a80820012802b008220541146c6a2009200341146c10c9081a2001200520036a3602b00820014188046a2802002203ad42187e2206422088a70d002006a72205417f4c0d0020012802800421090240024020050d004104210b0c010b20051032220b450d040b200141003602c0082001200b3602b8082001200541186e3602bc08200141b8086a4100200310ef0120012802b80820012802c008220541186c6a2009200341186c10c9081a2001200520036a3602c00820014194046a2802002203ad421c7e2206422088a70d002006a72205417f4c0d00200128028c0421090240024020050d004104210b0c010b20051032220b450d040b200141003602d0082001200b3602c80820012005411c6e3602cc08200141c8086a4100200310f00120012802c80820012802d0082205411c6c6a20092003411c6c10c9081a2001200520036a3602d008200141a0046a280200220341ffffff3f712003470d0020034105742205417f4c0d0020012802980421090240024020050d004104210b0c010b20051032220b450d040b200141003602c00c2001200b3602b80c200120054105763602bc0c200141b80c6a4100200310f10120012802b80c20012802c00c22054105746a2009200341057410c9081a2001200520036a3602c00c200141ac046a2802002203ad42247e2206422088a70d002006a72205417f4c0d0020012802a40421090240024020050d004104210b0c010b20051032220b450d040b200141003602d00c2001200b3602c80c2001200541246e3602cc0c200141c80c6a4100200310f20120012802c80c20012802d00c220541246c6a2009200341246c10c9081a2001200520036a3602d00c200141b8046a2802002203ad42287e2206422088a70d002006a72205417f4c0d0020012802b00421090240024020050d004104210b0c010b20051032220b450d040b200141003602e0082001200b3602d8082001200541286e3602dc08200141d8086a4100200310f30120012802d80820012802e008220541286c6a2009200341286c10c9081a2001200520036a3602e008200141c4046a2802002203ad422c7e2206422088a70d002006a72205417f4c0d0020012802bc0421090240024020050d004104210b0c010b20051032220b450d040b200141003602b00d2001200b3602a80d20012005412c6e3602ac0d200141a80d6a4100200310dd0120012802a80d20012802b00d2205412c6c6a20092003412c6c10c9081a2001200520036a3602b00d200141d0046a2802002203ad42307e2206422088a70d002006a72205417f4c0d0020012802c80421090240024020050d004104210b0c010b20051032220b450d040b200141003602d00d2001200b3602c80d2001200541306e3602cc0d200141c80d6a4100200310f40120012802c80d20012802d00d220541306c6a2009200341306c10c9081a2001200520036a3602d00d200141dc046a2802002203ad42347e2206422088a70d002006a72205417f4c0d0020012802d40421090240024020050d004104210b0c010b20051032220b450d040b200141003602f00d2001200b3602e80d2001200541346e3602ec0d200141e80d6a4100200310f50120012802e80d20012802f00d220541346c6a2009200341346c10c9081a2001200520036a3602f00d200141e8046a2802002203ad42387e2206422088a70d002006a72205417f4c0d0020012802e00421090240024020050d004104210b0c010b20051032220b450d040b200141003602e00c2001200b3602d80c2001200541386e3602dc0c200141d80c6a4100200310f60120012802d80c20012802e00c220541386c6a2009200341386c10c9081a2001200520036a3602e00c200141f4046a2802002203ad423c7e2206422088a70d002006a72205417f4c0d0020012802ec0421090240024020050d004104210b0c010b20051032220b450d040b200141003602880d2001200b3602800d20012005413c6e3602840d200141800d6a4100200310f70120012802800d20012802880d2205413c6c6a20092003413c6c10c9081a2001200520036a3602880d20014180056a280200220341ffffff1f712003470d0020034106742205417f4c0d0020012802f80421090240024020050d004104210b0c010b20051032220b450d040b200141003602900e2001200b3602880e2001200541067636028c0e200141880e6a4100200310f80120012802880e20012802900e22054106746a2009200341067410c9081a2001200520036a3602900e2001418c056a2802002203ad42c4007e2206422088a70d002006a72205417f4c0d0020012802840521090240024020050d004104210b0c010b20051032220b450d040b20014100360280092001200b3602f8082001200541c4006e3602fc08200141f8086a4100200310f90120012802f808200128028009220541c4006c6a2009200341c4006c10c9081a200141dc066a20014188086a41086a280200360200200141e8066a20014198086a41086a280200360200200141f4066a200141a8086a41086a28020036020020014180076a200141b8086a41086a280200360200200141c8066a41c4006a200141c8086a41086a2802003602002001200520036a3602800920012001290388083702d40620012001290398083703e006200120012903a8083702ec06200120012903b8083703f806200120012903c8083702840720014198076a200141b80c6a41086a280200360200200141a4076a200141c80c6a41086a280200360200200141b0076a200141d8086a41086a280200360200200141bc076a200141a80d6a41086a280200360200200141c8076a200141c80d6a41086a280200360200200120012903b80c37039007200120012903c80c37029c07200120012903d8083703a807200120012903a80d3702b407200120012903c80d3703c007200141d4076a200141e80d6a41086a280200360200200141e0076a200141d80c6a41086a280200360200200141ec076a200141800d6a41086a280200360200200141f8076a200141880e6a41086a220528020036020020014184086a200128028009360200200120012903e80d3702cc07200120012903d80c3703d807200120012903800d3702e407200120012903880e3703f007200120012903f8083702fc07200141f8086a200141c8066a41c00110c9081a200141880e6a200141f8086a200141a0036a20014190036a10fa01024020012802880e4101460d00200141940e6a2802002213ad422c7e2206422088a70d012006a72203417f4c0d012005280200210f200128028c0e211e0240024020030d00410421050c010b200310322205450d050b200141003602f00d200120053602e80d20012003412c6e3602ec0d200141e80d6a4100201310dd0120012802f00d210b02402013450d002013412c6c211020012802e80d200b412c6c6a2103200141f8086a410c6a2109201e21050340200141800d6a41186a220e200541246a290000370300200141800d6a41106a220c2005411c6a290000370300200141800d6a41086a2212200541146a29000037030020012005410c6a2900003703800d200141f8086a200510fb01200941186a200e290300370000200941106a200c290300370000200941086a2012290300370000200920012903800d370000200341286a200141f8086a41286a280200360200200341206a200141f8086a41206a290300370200200341186a200141f8086a41186a290300370200200341106a200141f8086a41106a290300370200200341086a200141f8086a41086a290300370200200320012903f808370200200b41016a210b2003412c6a21032005412c6a2105201041546a22100d000b0b2001200b3602f00d200141980d6a4200370300200141800d6a41106a4200370300200141800d6a41086a22034200370300200142003703800d200141d80c6a41d4dcc700410810c5012003200141d80c6a41086a290000370300200120012900d80c3703800d200141880e6a41bba8c700410d10c501200441086a200141880e6a41086a290000370000200420012900880e370000200141106a200141800d6a412010d301200141106a41106a29030021062001290318210720012903102108411010322203450d042003200742002008a722051b37030020032006420020051b370308200141c80d6a200141e80d6a200310e201200141f8086a20012802b003221220012802b803220e20012802c80d220b20012802d00d220310fc010240024020012d00f8084101460d00200120012802fc083602800d2001200141f8086a41086a2903003702840d20014190056a200141800d6a10fd01200141880e6a41086a200141800d6a41086a280200360200200120012903800d3703880e200141f8086a200141880e6a10fe01200141f8086a10ff0102402003450d002003412c6c2105200b210303400240200341046a2802002209450d00200941306c450d002003280200102c0b2003412c6a2103200541546a22050d000b0b024020012802cc0d2203450d002003412c6c450d00200b102c0b02402013450d002013412c6c2105201e210303400240200341046a2802002209450d00200941226c450d002003280200102c0b2003412c6a2103200541546a22050d000b0b0240200f450d00200f412c6c450d00201e102c0b200e200e6a2203200e490d032003417f4c0d030240024020030d004102210b0c010b20031032220b450d070b2003410176211020012802b4032113200e0d01410021050c050b02402003450d002003412c6c2105200b210303400240200341046a2802002209450d00200941306c450d002003280200102c0b2003412c6a2103200541546a22050d000b0b024020012802cc0d2203450d002003412c6c450d00200b102c0b02402013450d002013412c6c2105201e210303400240200341046a2802002209450d00200941226c450d002003280200102c0b2003412c6a2103200541546a22050d000b0b0240200f450d00200f412c6c450d00201e102c0b200141d0036a10e901410421090c070b2012200e4105746a211e410021052012210c0340200c41086a2900002106200c41106a2900002107200c2900002108200141f8086a41186a200c41186a290000370300200141f8086a41106a2007370300200141f8086a41086a2006370300200120083703f8082001280298032203450d03200c41206a210c200341057441606a41057641016a210e41002109200128029003210302400340200141f8086a2003460d012003200141f8086a412010cc08450d01200341206a2103200e200941016a2209470d000c050b0b200941ffff034b0d03024020052010470d0020054101742210200541016a2203201020034b1b22034104200341044b1b220e200e6a2203200e490d0341000d0320034100480d032010200f20051b210f024002400240200b410020051b220b0d0020030d014102210b0c020b0240200f0d0020030d014102210b0c020b200b200f20031035220b450d080c010b20031032220b450d070b200341017621100b200b20054101746a20093b0100200541016a2105200c201e460d040c000b0b200141f8086a41086a200141940e6a2802003602002001200129028c0e3703f80841c0cdc800412b200141f8086a41a0c7c00041b0c7c0001040000b103b000b02402013450d00201341ffffff3f71450d002012102c0b02402010450d00200b450d00201041ffffffff0771450d00200b102c0b200141d0036a10e901410821090c040b0240201341ffffff3f71450d002012102c0b200141d0066a20014190056a41106a290300370300200141c8066a41106a20014190056a41186a290300370300200141c8066a41186a20014190056a41206a290300370300200141c8066a41206a200141b8056a29030037030020012001290398053703c8062001290390052106200141f8086a200141d0036a41c00110c9081a024020012802a40341ffffff3f71450d0020012802a003102c0b024020012802940341ffffff3f71450d00200128029003102c0b410021030c040b1039000b0c020b20012802b40341ffffff3f71450d0020012802b003102c0b024020012802a40341ffffff3f71450d0020012802a003102c0b024020012802940341ffffff3f71450d00200128029003102c0b410121030b200141e0026a41086a220e200141c8066a41086a290300370300200141e0026a41106a220c200141c8066a41106a290300370300200141e0026a41186a2212200141c8066a41186a290300370300200141e0026a41206a2213200141c8066a41206a290300370300200120012903c8063703e002200141a0016a200141f8086a41c00110c9081a02402003450d0020002006370204200020093602000c010b200141c8066a200141a0016a41c00110c9081a20014190056a41106a200e29030037030020014190056a41186a200c29030037030020014190056a41206a201229030037030020014190056a41286a220920132903003703002001200637039005200120012903e00237039805024041002802d8d2484103490d00200141dc036a4115360200200141023602d403200120014190056a3602d80320012001419c016a3602d00341002802d4d248210341002802d0d248210e41002802dcd248210c200141b8096a418001360200200141b0096a42ec80808010370300200141ac096a41f1c7c000360200200141a4096a4221370200200141f8086a41286a41d0c7c00036020020014198096a420237030020014188096a420237030020014180096a410736020020014194096a200141d0036a360200200141c0c7c00036028409200141db8fc1003602fc08200141033602f808200e41f8a3c000200c410246220c1b200141f8086a200341e0a3c000200c1b2802101103000b200141800d6a41186a4200370300200141800d6a41106a4200370300200141800d6a41086a22034200370300200142003703800d200141d80c6a41e6dcc700410710c5012003200141d80c6a41086a290000370300200120012900d80c3703800d200141880e6a41ccbac200410a10c501200441086a200141880e6a41086a2203290000370000200420012900880e370000200141086a200141800d6a412010c601200128020c210e2001280208210c20014186096a20014190056a41086a2903003701002001418e096a20014190056a41106a29030037010020014196096a20014190056a41186a2903003701002001419e096a20014190056a41206a290300370100200141f8086a412e6a20092903002206370100200141a0016a412e6a2209200637010020012001290390053701fe08200141a0016a41086a2212200141f8086a41086a290100370300200141a0016a41106a2213200141f8086a41106a290100370300200141a0016a41186a220f200141f8086a41186a290100370300200141a0016a41206a221e200141f8086a41206a290100370300200141a0016a41286a221f200141f8086a41286a290100370300200120012901f8083703a001200141f8086a200141d0036a41e80010c9081a200141980a6a41183a0000200141a40a6a2005360200200141a00a6a20103602002001419c0a6a200b360200200141f0096a2003290300370300200141f8096a200141880e6a41106a290300370300200141800a6a200141880e6a41186a290300370300200141880a6a200141880e6a41206a2903003703002001419b0a6a200141820d6a2d00003a0000200142023703e009200141063602900a200120012903880e3703e809200120012f00800d3b00990a200141a80a6a200141c8066a41c00110c9081a200141f00b6a20023b0100200141ec0b6a201c360200200141e80b6a200e4100200c1b360200200141fa0b6a2012290300370100200141820c6a20132903003701002001418a0c6a200f290300370100200141920c6a201e2903003701002001419a0c6a201f290300370100200141a00c6a2009290100370100200141a80c6a20012903e002370300200141b00c6a200141e0026a41086a290300370300200120012903a0013701f20b2001200141f8086a3602d003200141880e6a200141d0036a108102200141d0036a41086a2003280200360200200120012903880e3703d003200141d0036a1082022103200141900a6a10830220004105410a20031b3602000b200141d00e6a24000b4401017f2000101b2201290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002001102c0ba00202017f037e230041d0006b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b20034100360220200342013703182003410f36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b4bcc3003602382003200341286a360248200341346a41dcb7c000200341386a103e1a200335022042208620033502188410000240200328021c450d002003280218102c0b420021040b2002450d002001102c0b2000200637030820002004370300200041106a2005370300200341d0006a24000bcb0702027f047e230041c0026b2205240020052004360214200520033602100240024020024108490d00200141086a2101200241786a21040c010b4100210441c4b5c800210141002802d8d248450d00200541263602e401200541e59ec0003602e0014100210441002802d4d248210241002802d0d248210341002802dcd2482106200541d8016a41e900360200200541d0016a42df80808010370300200541cc016a419e9fc000360200200541c4016a4213370200200541c0016a418b9fc000360200200541b8016a4201370300200541a8016a4201370300200541a0016a4113360200200541b4016a20054180026a360200200541b4b5c8003602a4012005418b9fc00036029c0120054101360298012005410436028402200241e0a3c000200641024622061b28021021022005200541e0016a36028002200341f8a3c00020061b20054198016a20021103000b41002102200541003a00b8010240024002400240034020042002460d0120054198016a20026a200120026a2d00003a00002005200241016a22033a00b8012003210220034120470d000b20054180026a41086a220220054198016a41086a29030037030020054180026a41106a220420054198016a41106a29030037030020054180026a41186a220120054198016a41186a290300370300200520052903980137038002200341ff0171411f4d0d01200541d8006a41086a20022903002207370300200541d8006a41106a20042903002208370300200541d8006a41186a20012903002209370300200541386a41186a2009370300200541386a41106a2008370300200541386a41086a2007370300200520052903800222073703782005200737035820052007370338200541086a200541106a10870220052802080d02200528020c2102200541186a41086a200541386a41086a2903002207370300200541186a41106a200541386a41106a2903002208370300200541186a41186a200541386a41186a290300220937030020052005290338220a3703182005418094ebdc0336029c01200520023602980120054198016a2002418094ebdc034b4102746a28020021022000411c6a2009370200200041146a20083702002000410c6a20073702002000200a370204200041246a2002360200200041003602000c030b200241ff0171450d00200541003a00b8010b200541d8006a41086a200541f8006a41086a290300370300200541d8006a41106a200541f8006a41106a290300370300200541d8006a41186a200541f8006a41186a29030037030020052005290378370358200041013602000c010b200041013602000b200541c0026a24000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42387e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b200141386c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241386e3602000b0f0b2005450d001039000b103b000bd40101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffff3f7122042001470d02200141057422024100480d0220042001462104024002400240024002402000280200410020031b22010d002002450d010c030b200341057422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024105763602000b0f0b2004450d001039000b103b000be70803027f037e027f23004190026b2205240020052004360204200520033602000240024020024108490d00200141086a2101200241786a21040c010b4100210441c4b5c800210141002802d8d248450d00200541263602b401200541e59ec0003602b0014100210441002802d4d248210241002802d0d248210341002802dcd2482106200541a8016a41e900360200200541a0016a42df808080103703002005419c016a419e9fc00036020020054194016a421337020020054190016a418b9fc00036020020054188016a4201370300200541f8006a4201370300200541f0006a411336020020054184016a200541d0016a360200200541b4b5c8003602742005418b9fc00036026c20054101360268200541043602d401200241e0a3c000200641024622061b28021021022005200541b0016a3602d001200341f8a3c00020061b200541e8006a20021103000b41002102200541003a008801024002400240024002400240024002400240034020042002460d01200541e8006a20026a200120026a2d00003a00002005200241016a22033a0088012003210220034120470d000b200541d0016a41086a2202200541e8006a41086a290300370300200541d0016a41106a2204200541e8006a41106a290300370300200541d0016a41186a2201200541e8006a41186a290300370300200520052903683703d001200341ff0171411f4d0d01200541286a41086a20022903002207370300200541286a41106a20042903002208370300200541286a41186a20012903002209370300200541086a41186a2009370300200541086a41106a2008370300200541086a41086a2007370300200520052903d00122073703482005200737032820052007370308200541e8006a200510ca0320052802682202450d05200528026c2103200528020422044104490d02200541f0006a280200210a20052802002201280000210b20052004417c6a22063602042005200141046a22013602002006450d0320012d0000210620052004417b6a3602042005200141016a3602004100210420060e020706030b200241ff0171450d00200541003a0088010b200541286a41086a200541c8006a41086a290300370300200541286a41106a200541c8006a41106a290300370300200541286a41186a200541c8006a41186a29030037030020052005290348370328200041023a00300c060b200341ffffff3f710d010c020b200341ffffff3f71450d010b2002102c0b200541c8006a41026a200541b0016a41026a2d00003a0000200520052f01b0013b0148200041023a00300c020b410121040b200541c8006a41026a2201200541d0016a41026a2d00003a0000200520052f00d0013b0148200041186a200541086a41186a290300370000200041106a200541086a41106a290300370000200041086a200541086a41086a29030037000020002005290308370000200020043a00302000200b36022c2000200a3602282000200336022420002002360220200020052f01483b0031200041336a20012d00003a00000b20054190026a24000bc50301067f230041d0006b22022400200241306a41e6dcc700410710c501200241086a41d192c100410d10c501200241c0006a200128020010e402024002402002280248220141206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b200241003602282002200336022420022004360220200241206a4100411010c8012002280220200228022822036a22042002290030370000200441086a200241306a41086a22052900003700002002200341106a2203360228200241206a2003411010c8012002280220200228022822036a22042002290008370000200441086a200241086a41086a22062900003700002002200341106a220436022820022802402103200241206a2004200110c80120022802202204200228022822076a2003200110c9081a2002200720016a220136022802402002280244450d002003102c0b200241086a2004200110d2032005200628020036020020022002290308370330024020022802142201450d002000200229033037020020002002290318370210200041086a200241306a41086a2802003602000b2000200136020c02402002280224450d002004102c0b200241d0006a24000f0b103b000b1039000ba90201027f230041106b220224000240024020002802004101470d0020022001280218419bbcc30041042001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41a4bcc30010661a20022d0008210120022802042203450d01200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d010b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010b200220013a00080c010b2001280218419fbcc30041042001411c6a28020028020c11000021010b200241106a2400200141ff01714100470ba53c04157f047e1b7f017e230041d0066b220324004100210420034100360208200341003602002003410036021820034204370310200128020021052001280204210602400240024002400240024002400240024002400240024020012802082201450d0020014104200141044b1b220741ffffffff037122082007470d01200741027422094100480d01200920082007464102742009103222071b2108024020070d002008450d020c0c0b200520014105746a210a200320084102763602142003280218210420032007200920071b2201360210200120044102746a210b200341e0006a41046a210c200341be066a210d4100210e2005210f0340200341206a41186a2201200f41186a2207290000370300200341206a41106a2209200f41106a2208290000370300200341206a41086a2210200f41086a22112900003703002003200f290000370320200341c0006a41186a22122007290000370300200341c0006a41106a22132008290000370300200341c0006a41086a221420112900003703002003200f290000370340200341c0056a41186a22152001290300370300200341c0056a41106a22162009290300370300200341c0056a41086a22172010290300370300200320032903203703c0050240024020032802002210450d00200328020421110c010b41940310322210450d0d41002111201041003602002010200329029806370204201041003b01322010410c6a20034198066a41086a290200370200201041146a20034198066a41106a2902003702002010411c6a20034198066a41186a290200370200201041246a20034198066a41206a2902003702002010412a6a200d290100370100201041346a200341e0006a41e00210c9081a20034100360204200320103602000b200f41206a210f024002400340201041346a210720102f01322108410021010240034020082001460d01200341c0056a2007412010cc082209450d03200741206a2107200141016a21012009417f4a0d000b2001417f6a21080b02402011450d002011417f6a2111201020084102746a4194036a28020021100c010b0b200341f0056a41186a20152903002218370300200341f0056a41106a20162903002219370300200341f0056a41086a2017290300221a370300200320032903c005221b3703f005200341e0046a41186a221c2018370300200341e0046a41106a221d2019370300200341e0046a41086a221e201a3703002003201b3703e0040240024020102f01322207410b490d00410021114104210102400240200841054f0d00200821090c010b4105210141052109024002402008417b6a0e020201000b200841796a210941012111410621010c010b41002109410121110b41940310322207450d104100211f200741003602002007200329029806370204200741003b01322007410c6a20034198066a41086a2220290200370200200741146a20034198066a41106a22212902003702002007411c6a20034198066a41186a2222290200370200200741246a20034198066a41206a22232902003702002007412a6a200d290100370100200741346a200341e0006a41e00210c90821242017201041346a222520014105746a220841086a2900003703002016200841106a2900003703002015200841186a290000370300200320082900003703c005201041046a222620014102746a280200212720242025200141016a22284105746a20102f01322001417f736a220841057410c9081a200741046a202620284102746a200841027410c9081a201020013b0132200720083b0132200341e0006a41186a22242015290300370300200341e0006a41106a22252016290300370300200341e0006a41086a22262017290300370300200320032903c0053703602007201020111b220141346a2208200941016a22114105746a200820094105746a220820012f013220096b41057410ca081a200841186a201c290300370000200841106a201d290300370000200841086a201e290300370000200820032903e004370000200141046a220820114102746a200820094102746a220820012f013220096b41027410ca081a2008200e36020020034190056a41186a222920242903002218370300200120012f013241016a3b013220034190056a41106a222a2025290300221937030020034190056a41086a222b2026290300221a37030020032003290360221b37039005200341b0046a41186a222c2018370300200341b0046a41106a222d2019370300200341b0046a41086a222e201a3703002003201b3703b004024020102802002201450d004100211f03402007212f20272130201021072001211020072f01302111201c202c290300370300201d202d290300370300201e202e290300370300200320032903b0043703e00441000d0c02400240024020102f01322207410b490d004100213141042108024020114105490d0020112108024002402011417b6a0e020201000b201141796a211141012131410621080c010b4100211141012131410521080b41c40310322207450d15201f41016a211f41002101200741003602002007200329029806370204200741003b01322007410c6a2020290200370200200741146a20212902003702002007411c6a2022290200370200200741246a20232902003702002007412a6a200d290100370100200741346a200341e0006a41900310c90821322015201041346a222820084105746a220941186a2900003703002016200941106a2900003703002017200941086a290000370300200320092900003703c005201041046a223320084102746a280200212720322028200841016a22344105746a20102f013222352008417f736a220941057410c9082132200741046a2033203441027422346a200941027410c9082136201020083b0132200720093b0132202420152903003703002025201629030037030020262017290300370300200320032903c00537036020074194036a201020346a4194036a203520086b41027410c908213402400340200720014102746a4194036a280200220820013b0130200820073602002001200120094922086a220120094b0d0120080d000b0b202920242903002218370300202a20252903002219370300202b2026290300221a37030020032003290360221b3703900520242018370300202520193703002026201a3703002003201b3703602031450d012011410274220820346a41086a2034201141016a220141027422286a220920072f013220116b41027410ca081a2009202f360200203220014105746a203220114105746a220920072f013220116b41057410ca081a200941186a201c290300370000200941106a201d290300370000200941086a201e290300370000200920032903e004370000203620286a203620086a220920072f013220116b41027410ca081a20092030360200200720072f013241016a22093b01322001200941ffff037122094b0d020340200720014102746a4194036a280200220820013b013020082007360200200120012009496a220820094b0d03200120094f2111200821012011450d000c030b0b2011410274220920104194036a22086a41086a2008201141016a220141027422156a2208200720116b2216410274221710ca081a2008202f360200201041346a220720014105746a200720114105746a2207201641057410ca081a200741186a201c290300370000200741106a201d290300370000200741086a201e290300370000200720032903e004370000201041046a220720156a200720096a2207201710ca081a20072030360200201020102f013241016a22073b01322011200741ffff037122074f0d050340201020014102746a4194036a280200220920013b013020092010360200200120012007496a220920074b0d06200120074f2108200921012008450d000c060b0b2011410274220820104194036a22096a41086a2009201141016a220141027422316a220920102f013220116b41027410ca081a2009202f360200202820014105746a202820114105746a220920102f013220116b41057410ca081a200941186a201c290300370000200941106a201d290300370000200941086a201e290300370000200920032903e004370000203320316a203320086a220920102f013220116b41027410ca081a20092030360200201020102f013241016a22093b01322001200941ffff037122094b0d000340201020014102746a4194036a280200220820013b0130200820103602002001200120094922086a220120094b0d0120080d000b0b202c2024290300370300202d2025290300370300202e2026290300370300200320032903603703b004201028020022010d000b0b20034180046a41186a202c290300221837030020034180046a41106a202d290300221937030020034180046a41086a202e290300221a370300200320032903b004221b3703800420152018370300201620193703002017201a3703002003201b3703c0052003280200450d0941c40310322201450d10200141003602002001200329029806370204200141003b01322001410c6a2020290200370200200141146a20212902003702002001411c6a2022290200370200200141246a20232902003702002001412a6a200d290100370100200141346a200341e0006a41900310c9081a20012003280200220936029403200941003b01302003200136020020032003280204220841016a36020420092001360200202420152903003703002025201629030037030020262017290300370300200320032903c0053703602008201f470d0820012f01322209410a4b0d072001200941016a22103b0132200120094105746a220841346a20032903603700002008413c6a2026290300370000200841c4006a2025290300370000200841cc006a2024290300370000200120094102746a41046a2027360200200120104102746a4194036a200736020020072001360200200720103b01302003200328020841016a36020820071a201f1a0c030b201041346a2201200841016a22094105746a200120084105746a2201200720086b41057410ca081a200141186a201c290300370000200141106a201d290300370000200141086a201e290300370000200120032903e004370000201041046a220120094102746a200120084102746a220120102f013220086b41027410ca081a2001200e360200201020102f013241016a3b01320b2003200328020841016a3602080c010b201020014102746a41046a200e3602000b200c410041c40010cb081a20034198066a41186a2207201229030037030020034198066a41106a2209201329030037030020034198066a41086a22082014290300370300200320032903403703980641f80010322201450d0c2001410036020820014281808080103703002001410c6a200341e0006a41c80010c9081a200141003a0074200141ec006a2007290300370200200141e4006a2009290300370200200141dc006a20082903003702002001200329039806370254200120032f00c0053b0075200141f7006a200341c0056a41026a2d00003a0000200b2001360200200e41016a210e200441016a2104200b41046a210b200f200a470d000b0b200320043602180240200641ffffff3f71450d002005102c0b200228020821012002280204211420022802002113200341346a200341106a36020020032013360228200320143602242003201336022020032013200141386c22106a221636022c20032003360230201321092001450d08200341e0006a41346a2115200341206a41106a211220034198066a412c6a2108201321090340200341f0056a41086a220f2009220141086a290300370300200341f0056a41106a2211200141106a290300370300200341f0056a41186a220b200141186a290300370300200341f0056a41206a220e200141206a290300370300200320012903003703f0052003200141386a2209360228200141286a2802002107200341f0036a41086a2204200141346a28020036020020032001412c6a2902003703f0032007450d0820034198066a41206a200e29030037030020034198066a41186a200b29030037030020034198066a41106a201129030037030020034198066a41086a200f290300370300200820032903f003370200200841086a2004280200360200200320032903f00537039806200320073602c006200341e0006a201220034198066a10cc04024020032802900122070d00201041486a22100d010c090b0b200341c0056a41286a2201200341e0006a41286a290300370300200341c0056a41206a2209200341e0006a41206a290300370300200341c0056a41186a2208200341e0006a41186a290300370300200341c0056a41106a2210200341e0006a41106a290300370300200341c0056a41086a220f200341e0006a41086a29030037030020034180046a41086a2211201541086a29020037030020034180046a41106a220b201541106a29020037030020034180046a41186a220e201541186a29020037030020034180046a41206a2204201541206a29020037030020034180046a41286a2212201541286a280200360200200320032903603703c005200320152902003703800420034190056a41086a2213201129030037030020034190056a41106a2211200b29030037030020034190056a41186a220b200e29030037030020034190056a41206a220e200429030037030020034190056a41286a22042012280200360200200341e0046a41086a2212200f290300370300200341e0046a41106a220f2010290300370300200341e0046a41186a22102008290300370300200341e0046a41206a22142009290300370300200341e0046a41286a22092001290300370300200320032903800437039005200320032903c0053703e004200341b0046a41286a22012004280200360200200341b0046a41206a2204200e290300370300200341b0046a41186a220e200b290300370300200341b0046a41106a220b2011290300370300200341b0046a41086a2211201329030037030020032003290390053703b00441e00010322208450d0a200820032903e00437030020082007360230200820032903b004370234200841286a2009290300370300200841206a2014290300370300200841186a2010290300370300200841106a200f290300370300200841086a20122903003703002008413c6a2011290300370200200841c4006a200b290300370200200841cc006a200e290300370200200841d4006a2004290300370200200841dc006a2001280200360200200341c0006a41086a200341206a41086a2903002218370300200341c0006a41106a2214200341206a41106a2903003703002003200329032037034002402018a72209200328024c2212470d0041012113410121150c070b20034198066a412c6a2110200341e0006a41346a211741012113410121150340200341f0056a41186a220f2009220141186a290300370300200341f0056a41206a2211200141206a2903003703002003200141386a2209360248200341f0056a41086a220b200141086a290300370300200341f0056a41106a220e200141106a290300370300200320012903003703f005200141286a2802002107200341f0036a41086a2204200141346a28020036020020032001412c6a2902003703f0032007450d0620034198066a41206a2216201129030037030020034198066a41186a2211200f29030037030020034198066a41106a220f200e29030037030020034198066a41086a220e200b290300370300201020032903f003370200201041086a2004280200360200200320032903f00537039806200320073602c006200341e0006a201420034198066a10cc04024020032802900122070d0020122009470d010c070b200341c0056a41286a2201200341e0006a41286a2209290300370300200341c0056a41206a2226200341e0006a41206a220b290300370300200341c0056a41186a220a200341e0006a41186a2204290300370300200341c0056a41106a220c200341e0006a41106a2212290300370300200341c0056a41086a2228200341e0006a41086a222529030037030020034180046a41086a2233201741086a29020037030020034180046a41106a220d201741106a29020037030020034180046a41186a221c201741186a29020037030020034180046a41206a221d201741206a29020037030020034180046a41286a221e201741286a280200360200200320032903603703c005200320172902003703800420034190056a41086a2231203329030037030020034190056a41106a2233200d29030037030020034190056a41186a220d201c29030037030020034190056a41206a221c201d29030037030020034190056a41286a221d201e280200360200200341e0046a41086a221e2028290300370300200341e0046a41106a2228200c290300370300200341e0046a41186a220c200a290300370300200341e0046a41206a220a2026290300370300200341e0046a41286a22262001290300370300200320032903800437039005200320032903c0053703e004200341b0046a41286a2201201d280200360200200341b0046a41206a221d201c290300370300200341b0046a41186a221c200d290300370300200341b0046a41106a220d2033290300370300200341b0046a41086a2233203129030037030020032003290390053703b0042025201e290300370300201220282903003703002004200c290300370300200b200a29030037030020092026290300370300200320032903e004370360200e2033290300370300200f200d2903003703002011201c2903003703002016201d29030037030020034198066a41286a22262001280200360200200320032903b004370398060240024020152013470d00201341016a22012013490d032013410174220a2001200a20014b1b22014104200141044b1bad42e0007e2218422088a7220a0d032018a722014100480d03200a45410374210a201341e0006c202420131b2124024002400240024002402008410020131b22080d002001450d010c030b20240d0120010d020b200a21080c020b200820242001103522080d010c030b200110322208450d020b200141e0006e21130b2008201541e0006c6a2201200329036037030020092903002118202529030021192012290300211a2004290300211b200b290300213720012007360230200141206a2037370300200141186a201b370300200141106a201a370300200141086a2019370300200141286a2018370300200141346a2003290398063702002001413c6a200e290300370200200141c4006a200f290300370200200141cc006a2011290300370200200141d4006a2016290300370200200141dc006a2026280200360200201541016a211520032802482209200328024c2212470d010c080b0b200a0d0a0b103b000b41e0cec80041204180cfc800103c000b419ecec800413041d0cec800103c000b41ecd0c800412b41bcd2c800103c000b41a5d0c800413541dcd0c800103c000b200141386a21090b201220096b220141386d210702402001450d00200741386c2107200941286a210103400240200141046a28020041ffffff3f71450d002001280200102c0b200141386a2101200741486a22070d000b0b20032802404100200328024422011b2207450d02200141386c450d022007102c0c020b200141386a21090b201620096b220141386d210702402001450d00200741386c2107200941286a210103400240200141046a28020041ffffff3f71450d002001280200102c0b200141386a2101200741486a22070d000b0b410821084100211502402014450d00201441386c450d002013102c0b410021130b200020032903103702002000200836020c200041146a2015360200200041106a2013360200200041086a200341106a41086a2802003602004100210902400240200328020022070d00410021014100210b0c010b2003280208210b200328020421082007210103402008450d012008417f6a2108200720072f01324102746a4194036a280200210720012802940321010c000b0b200341a8056a210e20034190056a41106a210420034190056a41086a2112024002400340200b450d012001450d0202400240200920012f01324f0d00200121070c010b20102111200f2109034002400240200128020022070d0041002107201121080c010b20012f01302109200841016a220821110b2001102c20072101200821102009210f200920072f01324f0d000b0b200e200720094105746a220141cc006a2900003703002004200141c4006a29000037030020122001413c6a2900003703002003200141346a29000037039005200941016a21090240024020080d00200721010c010b200720094102746a4194036a280200210102402008417f6a2207450d00034020012802940321012007417f6a22070d000b0b410021090b200b417f6a210b410021080c000b0b02402001450d00200128020021072001102c2007450d000340200728020021012007102c2001210720010d000b0b200341d0066a24000f0b41ecd0c800412b4198d1c800103c000b1039000be01b09087f027e057f017e027f017e017f047e047f230041b0016b220424000240200241086a22052802002206200120062001491b2207450d0041002108024002400240024003402002280200210902402006450d002006410274210a2009210b02400340200b28020022012802080d012001417f3602080240200141f4006a2d00000d0002402001290330220c200141386a290300220d844200520d00200142013703202001427f370310200141286a4200370300200141186a427f3703000c010b200441086a427f427f200c200d10c8082001427f370320200141286a427f370300200141186a200441086a41086a290300370300200120042903083703100b200b41046a210b20014100360208200a417c6a220a0d000c020b0b41d4afc8004110200441186a41c0cec40041d0cec4001040000b2003280200220e2003280208220f41e0006c6a21100240200f450d00200e21110340024020112802382201450d00200141d8006c2112201128023041306a210b02400340200b28020022012802080d01417f210a2001417f3602080240200141f4006a2d00000d002001290330220c200141386a290300220d84500d00200441186a2011290310201141186a2903002011290300201141086a290300200c200d109c0620012001290310220c427f200c427f20042903202004280218410146220a1b22137c220d200d200c542214200141186a2215290300220c427f200441186a41106a290300200a1b22167c2014ad7c220d200c54200d200c511b220a1b20132016845022141b3703102015200c427f200d200a1b20141b3703002001280208210a0b2001200a41016a360208200b41d8006a210b201241a87f6a2212450d020c000b0b41d4afc8004110200441186a41c0cec40041f0cec4001040000b201141e0006a22112010470d000b0b200841016a21172009417c6a210a2009200641027422016a211503402001450d06200a41046a220a280200220b280208221241016a41004c0d05200b20123602082001417c6a2101200b41f4006a2d00000d000b200a2802002212280208220b41016a41004c0d032012200b36020802402001450d00200a41046a210b201241286a2903002113201241186a290300211820122903202116201229031021190340200b2802002201280208221241016a41004c0d04200120123602080240200141f4006a2d00000d0020012012360208200141186a290300210c2001290310210d0240024002400240024020162001290320221a852013200141286a290300221b8584500d002016201384500d04201a201b84500d0520044190016a2019201810e106200441a0016a201a201b10e106200441186a41086a220120044190016a41086a22122802003602002004200429039001370318200441f0006a200441186a200441a0016a10e206024020042802a40141ffffffff0371450d0020042802a001102c0b20044190016a200d200c10e106200441a0016a2016201310e10620012012280200360200200420042903900137031820044180016a200441186a200441a0016a10e206024020042802a40141ffffffff0371450d0020042802a001102c0b2004280270211c2004280278221d0d0141012106410021120c020b2019200d542018200c542018200c511b0d042019200d852018200c858442005221110c020b201d4102742211417c6a41027641016a211441002112201c21010240034020012802000d01200141046a210141012106201241016a21122011417c6a22110d000b201421120c010b410021060b200428028001211e02400240024002400240200428028801221f450d00201e201f4102746a210941002111201f2114201e2101034020012802000d022014417f6a2114201141016a2111200141046a22012009470d000b0b410121114100210920060d010c030b410121092006450d010b410020096b21110c010b201d2012490d07417f201f20116b2211201d20126b22064720062011491b22110d00201c20124102746a21092014200620142006491b41016a211441002112034002402014417f6a22140d00410021110c020b200120126a2111200920126a2106201241046a2112417f20062802002206201128020022114720062011491b2211450d000b0b024020042802840141ffffffff0371450d00201e102c0b200428027441ffffffff0371450d00201c102c0b20114101470d010b200d2119200c2118201a2116201b2113200b210a0b200b41046a220b2015470d000b0b200a450d050240200a280200220b2802080d00417f2101200b417f360208200b2008360250200b41f4006a41013a00000240200f450d00200b41206a210f200b41106a41c4006a21080340200e220a41e0006a210e0240200a2802382212450d00200a2802302101201241d8006c2112034002400240200f2001460d00200141346a2008412010cc080d010b200a41186a22112903002116200b41186a2214290300210c200a2903102113200b290310210d200b2903202118200141186a200b41286a2215290300370300200141106a20183703002001200c4200200c20167d200d201354ad7d2218200d20137d221a200d562018200c562018200c511b22061b20132016845022091b3703082001200d4200201a20061b20091b3703002014290300210c2015290300210d200b2903102113200a200b290320370320200a41286a200d370300200a20133703102011200c3703000b200141d8006a2101201241a87f6a22120d000b0b200e2010470d000b200b28020821010b200b200141016a36020820172007460d0620052802002106201721080c010b0b41d4afc8004110200441186a41c0cec4004180cfc4001040000b2012201d4194b0c8001058000b41fcaec8004118200441186a41a0a4c70041aca7c7001040000b41fcaec8004118200441186a41d8bcc30041bca7c7001040000b41fcaec8004118200441186a41e0cec40041aca7c7001040000b20032802002201200328020841e0006c6a210f200441286a21150240034002400240024002402001220a200f460d00200a41386a2209280200220b450d03200a2802302101200b41d8006c211203400240200141306a2211280200220b280208221441016a41004a0d0041fcaec8004118200441186a41e0cec4004190cfc4001040000b200b201436020802400240200b41f4006a2d00000d00200141286a4200370300200141206a42003703000c010b200441186a200a290300200a41086a2903002001290300200141086a290300200a290310200a41186a290300109c062004290320210c200141286a427f20152903002004280218410146220b1b370300200141206a427f200c200b1b3703000b2011280200220b2802080d02200b417f360208200141206a290300210c200141286a290300210d200b4100360208200b427f200c200b29034022137c220c200c2013542211200d200b41c8006a2214290300220c7c2011ad7c220d200c54200d200c511b22111b3703402014427f200d20111b370300200141d8006a2101201241a87f6a2212450d030c000b0b200441186a41086a2201200241086a280200360200200441186a41146a200341086a2802003602002000410036020020002002290200370204200420032902003702242000410c6a2001290300370200200041146a200441286a2903003702000c040b41d4afc8004110200441186a41c0cec40041a0cfc4001040000b20092802002211450d00200a28023021012011417f6a2114410021124100210b02400340024002400240024002402011200b460d00200141206a290300200141286a29030084500d0102402012450d00200b20126b220620114f0d03200441186a2001201241a87f6c6a220641d80010c9081a2006200141d80010ca081a2001200441186a41d80010c9081a0c040b410021122014200b470d040c070b2011201141f48ac500103f000b201241016a21120c010b2006201141e48ac500103f000b2014200b460d020b200b41016a210b200141d8006a21010c000b0b2012450d002009280200220b201120126b2201490d0020092001360200200b2001460d00201141a87f6c200b20126a41d8006c6a210b200a280230201141d8006c6a201241a87f6c6a41306a21010340200128020022122012280200417f6a3602000240200128020022122802000d00201241046a22122012280200417f6a3602002001280200221241046a2802000d002012102c0b200141d8006a2101200b41a87f6a220b0d000b0b200a41e0006a21012004200a10af012004280200220b450d000b200428020421012000200b36020420004101360200200041086a200136020020032802002114024020032802082201450d002014200141e0006c6a211120142101034002402001221241386a2802002201450d00200141d8006c210b201228023041306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102c0b200141d8006a2101200b41a87f6a220b0d000b0b201241e0006a21010240201241346a280200220b450d002012280230220a450d00200b41d8006c450d00200a102c0b20012011470d000b0b024020032802042201450d00200141e0006c450d002014102c0b200228020021120240200241086a2802002201450d002001410274210b2012210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102c0b200141046a2101200b417c6a220b0d000b0b200228020441ffffffff0371450d002012102c0b200441b0016a24000be30f06037f017e017f017e0c7f027e23004190026b22022400200141346a2802002103200141386a2802002104200141086a29030021052001280230210620012903002107200241186a200141d4006a290000370300200241106a200141cc006a290000370300200241086a200141c4006a2900003703002002200129003c37030020022005370328200220073703202006200441d8006c22086a21092006210102400240024002402004450d004100210a200241a0016a41086a210b200241a0016a41106a210c200241a0016a41186a210d024002400340200b2006200a6a2201413c6a290200370300200c200141c4006a290200370300200d200141cc006a290200370300200241a0016a41206a220e200141d4006a2802003602002002200141346a2902003703a001200141306a280200220f450d02200141286a2903002105200141206a2903002107200241e8016a41206a200e280200360200200241e8016a41186a220e200d290300370300200241e8016a41106a2210200c290300370300200241e8016a41086a2211200b290300370300200220022903a0013703e80102400240200720052002290320200241206a41086a29030010e401221241ffff03710d004100210e0c010b200241c8016a41186a200e290300370300200241c8016a41106a2010290300370300200241c8016a41086a2011290300370300200220022903e8013703c8014101210e201221130b200f200f280200417f6a2210360200024020100d00200f41046a22102010280200417f6a221036020020100d00200f102c0b200e0d012008200a41d8006a220a470d000b200921010c020b200241c0006a41086a220f200241c8016a41086a290300370300200241c0006a41106a220b200241c8016a41106a290300370300200241c0006a41186a220c200241c8016a41186a290300370300200220022903c801220537036020022005370340412210322208450d0420082002290340370100200820133b0120200841186a200c290300370100200841106a200b290300370100200841086a200f2903003701002002428180808010370234200220083602302002200936024c2002200141d8006a220b36024820022003360244200220063602402002200241206a36025002400240200441d8006c41a87f6a200a470d00410121040c010b200241a0016a41086a210a200241a0016a41106a210c200241a0016a41186a210d4101210403402002200b220141d8006a220b360248200141306a280200210f200141286a2903002105200141206a2903002107200a2001413c6a290200370300200c200141c4006a290200370300200d200141cc006a290200370300200241a0016a41206a220e200141d4006a2802003602002002200141346a2902003703a00102400240200f450d00200241e8016a41206a200e280200360200200241e8016a41186a2211200d290300370300200241e8016a41106a2212200c290300370300200241e8016a41086a2206200a290300370300200220022903a0013703e80102400240200720052002290320200241206a41086a29030010e401221041ffff03710d004100210e0c010b200241c8016a41186a2011290300370300200241c8016a41106a2012290300370300200241c8016a41086a2006290300370300200220022903e8013703c8014101210e201021130b200f200f280200417f6a2210360200024020100d00200f41046a22102010280200417f6a221036020020100d00200f102c0b200e0d012009200b470d020b200141d8006a210b0c020b200241e0006a41086a200241c8016a41086a2903002205370300200241e0006a41106a200241c8016a41106a2903002207370300200241e0006a41186a200241c8016a41186a2903002214370300200220022903c8012215370360201120143703002012200737030020062005370300200220153703e801024020042002280234470d00200241306a2004410110e501200228023021080b2008200441226c6a220120022903e801370100201229030021052011290300210720062903002114200120133b0120200141086a2014370100200141186a2007370100200141106a20053701002002200441016a22043602382002280248220b200228024c2209470d000b0b2009200b6b220141d8006d210f02402001450d00200f41d8006c210f200b41306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102c0b200141d8006a2101200f41a87f6a220f0d000b0b024020022802404100200228024422011b220f450d00200141d8006c450d00200f102c0b2002280230210f2002280234210120040d02200041003602002001450d03200f450d03200141226c450d03200f102c0c030b200141d8006a21010b024020092001460d000340200141306a220f280200220a200a280200417f6a360200200141d8006a21010240200f280200220a2802000d00200a41046a220a200a280200417f6a360200200f280200220f41046a2802000d00200f102c0b20092001470d000b0b02402003450d00200341d8006c450d002006102c0b200041003602000c010b200020013602042000200f360200200041086a20043602002000410c6a2002290300370000200041146a200241086a2903003700002000411c6a200241106a290300370000200041246a200241186a2903003700000b20024190026a24000f0b1039000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad422c7e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b2003412c6c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a2001412c6e3602000b0f0b2005450d001039000b103b000b8b0201057f2000410c6a280200200028020822016b220241e0006d210302402002450d002001200341e0006c6a2104034002402001220541386a2802002201450d00200141d8006c2102200528023041306a21010340200128020022032003280200417f6a3602000240200128020022032802000d00200341046a22032003280200417f6a3602002001280200220341046a2802000d002003102c0b200141d8006a2101200241a87f6a22020d000b0b200541e0006a21010240200541346a2802002202450d0020052802302203450d00200241d8006c450d002003102c0b20012004470d000b0b024020002802042201450d0020002802002202450d00200141e0006c450d002002102c0b0ba42d03167f017e077f230041c0006b2202240020024100360208200242023703002001280200210320022001280208220410d00420022802082105200228020021060240200441226c2207450d00200341206a2104200620054101746a21060340200620042f01003b0100200441226a2104200541016a2105200641026a21062007415e6a22070d000b200228020021060b200220053602082002410036021820024204370310200241106a41002005109502200228021821082002280210210302402005450d0020054101742105200320084102746a21040340200420062f0100360200200841016a2108200441046a2104200641026a21062005417e6a22050d000b0b2002200836021820084102742106410021092003210402400240024002400240024002400240024002400240024002400340024020060d00024020080d004104210a4100210b410021050c0e0b41ffff032009200941ffff034922061b200941ffff0320061b6b220c450d02410021062002410036022820024204370320200241206a4100200810eb0120084102742105200c200870210d200c20086e210e200228022822074103742002280220220f6a41786a210403402004410c6a2003280200360200200441086a22042006360200200641016a2106200341046a21032005417c6a22050d000b2002200720066a221036022820104115490d052010410176220641ffffffff01712006470d0820064103742211417f4c0d08201110322212450d07410021062002410036023820024204370330200f41786a2113200f416c6a2114201021150340024002402015220a417f6a22040d00410021154101210b0c010b024002400240024002400240200f20044103746a41046a280200200a4103742216200f6a41746a2802002205490d00200a417e6a2117201420166a210741002115410021040340024020172004470d00200a210b0c080b200441016a21042005200728020022034f210b200741786a210720032105200b0d000b200441016a210b2004417f73200a6a21040c010b201420166a210702400340024020044101470d00410021040c020b2004417f6a210420052007280200220349210b200741786a210720032105200b0d000b0b200a2004490d02200a20104b0d01200a20046b220b4101762203450d00200f20044103746a2105201320166a21070340200529020021182005200729020037020020072018370200200541086a2105200741786a21072003417f6a22030d000b0b024020040d00200421150c050b0240200b41094d0d00200421150c050b200a20104b0d02200a20046b2105200f20044103746a2117201320166a21190340200a2004417f6a2215490d0a0240200a20156b220b4102490d00200f20044103746a220641046a280200200f20154103746a220441046a28020022034f0d0020043502002118200420062902003702000240200b4103490d002005417f6a21164100210420172106024003402006410c6a28020020034f0d0220052004460d012006200641086a2207290200370200200721062016200441016a2204470d000b201921060c010b200441016a200b419ca5c800103f000b20062003ad4220862018843702000b2015450d04200541016a2105201741786a211720152104200b410a490d000c040b0b200a201041b8a3c800104f000b2004200a41b8a3c8001059000b200a2004417f6a2215490d06200a201041c8a3c800104f000b200228023821060b024020062002280234470d00200241306a10ae01200228023821060b2002280230221620064103746a2204200b360204200420153602002002200641016a2206360238024020064102490d00024002400240024002400340024002400240024020162006417f6a4103746a2204280200450d00200641037420166a220341746a2802002207200428020422054d0d00200641024d0d0a20162006417d6a221a4103746a2802042204200520076a4d0d01200641034d0d0a200341646a280200200420076a4b0d0a0c010b20064103490d012004280204210520162006417d6a221a4103746a28020421040b20042005490d010b2006417e6a211a0b02402006201a41016a221b4d0d002006201a4d0d022016201a410374221c6a2206280204221d20062802006a22062016201b410374221e6a2204280200221f490d03200620104b0d04200f201f4103746a220a2004280204221941037422046a210720064103742103024002402006201f6b220b20196b220620194f0d00201220072006410374220410c908221720046a21050240024020194101480d00200641014e0d010b20172104200721060c020b201320036a210320072106024003402003200641786a2207200541786a220b2005417c6a2802002006417c6a2802004922041b2902003702002005200b20041b2105200a2007200620041b22064f0d01200341786a2103200520174b0d000b0b20022802302116201721040c010b2012200a200410c908220620046a21050240024020194101480d00200b20194a0d010b20062104200a21060c010b200f20036a210b20062104200a21060340200620072004200741046a280200200441046a2802004922031b2902003702002004200441086a20031b2104200641086a2106200741086a200720031b2207200b4f0d01200520044b0d000b0b20062004200520046b41787110c9081a20022802382206201a4d0d052016201c6a2206201d20196a3602042006201f36020020022802382206201b4d0d0620022802302216201e6a2204200441086a2006201b417f736a41037410ca081a20022006417f6a2206360238200641014d0d070c010b0b201b200641d8a3c800103f000b201a200641e8a3c800103f000b201f200641f8a3c8001059000b2006201041f8a3c800104f000b201a20064188a4c800103f000b201b20061047000b2015450d050c000b0b2006417c6a2106200920042802006a22052009492107200441046a2104200521092007450d000b024020022802104100200228021422061b2204450d00200641ffffffff0371450d002004102c0b411e210b4186a7c80021060c0c0b200841ffffffff03712008470d0520084102742206417f4c0d05200610322204450d04200241003602382002200436023020022006410276360234200241306a410020081095022002280230220a200228023822064102746a2003200841027410c9081a200620086a21050c090b2015200a41c8a3c8001059000b0240200228023441ffffffff0171450d002016102c0b2011450d012012102c0c010b20104102490d002010417f6a210741002103200421170340024002400240201020072206417f6a2207490d00201020076b22194102490d02200f20064103746a220641046a280200200f20074103746a220541046a280200220a4f0d02200535020021182005200629020037020020194103490d012003417f6a21164100210520172106024003402006410c6a280200200a4f0d0320162005460d012006200641086a220b290200370200200b210620032005417f6a2205470d000b200421060c020b410120056b2019419ca5c800103f000b2007201041a8a3c8001058000b2006200aad4220862018843702000b2003417f6a2103201741786a211720070d000b0b02400240024002400240024002400240024002400240024002400240200941ffff034f0d0041ffff0320086e21034100210602402008200c4b0d00410021062002280228210a200821050340200a20064d0d0e200228022020064103746a2207280204220b200e6a2204200b490d0d200741046a2004360200024020042003490d00200641016a20087021060b2005417f6a22050d000b0b200d0d012002280228211c200228022021150c040b2002280228221c450d0c2008417f6a210320022802202215280204210a2008200c4d0d01200321060c020b2002280228211c0340201c20064d0d092002280220221520064103746a2205280204220741016a22042007490d08200541046a2004360200024020042003490d00200641016a20087021060b200d417f6a220d0d000c030b0b200321060340201c20064d0d06201520064103746a2204410020042802042204200e6b2205200520044b22071b200520071b22053602042002280228221c20064d0d05200d200e20046b410020071b6a210d200620032006417f6a2204200420064b1b2005200a4b1b21062008417f6a22080d000b0b200d450d000340201c20064d0d03024002402015200641037422056a22072802042204417f6a220b20044d0d0020032006417f6a2204200420064b1b21060c010b200741046a200b3602002002280228221c20064d0d03200620032006417f6a2204200420064b1b2002280220221520056a280204200a4b1b2106200d417f6a210d0b200d0d000b0b201c4115490d0c201c410176220641ffffffff01712006470d0a20064103742212417f4c0d0a20121032221d450d092002410036023820024204370330201541786a211e201541686a2110201c211f0340201f210a4100211f4101210b0240200a417f6a2206450d00024002400240024002400240201520064103746a280200200a410374221620156a41706a2802002204490d00200a417e6a210b201020166a21054100211f4100210603400240200b2006470d00200a210b0c080b200641016a21062004200528020022074f2103200541786a21052007210420030d000b200641016a210b2006417f73200a6a21060c010b201020166a210502400340024020064101470d00410021060c020b2006417f6a2106200420052802002207492103200541786a21052007210420030d000b0b200a2006490d02200a201c4b0d01200a20066b220b4101762207450d00201520064103746a2104201e20166a21050340200429020021182004200529020037020020052018370200200441086a2104200541786a21052007417f6a22070d000b0b024020060d002006211f0c050b0240200b41094d0d002006211f0c050b200a201c4b0d02200a20066b2107201520064103746a2117201e20166a21190340200a2006417f6a221f490d040240200a201f6b220b4102490d00201520064103746a22062802002015201f4103746a220428020022034f0d0020043502042118200420062902003702000240200b4103490d002007417f6a2116410021042017210602400340200641086a220528020020034f0d0220072004460d0120062005290200370200200521062016200441016a2204470d000b201921060c010b200441016a200b419ca5c800103f000b200620184220862003ad843702000b201f450d05200741016a2107201741786a2117201f2106200b410a4f0d050c000b0b200a201c41b8a3c800104f000b2006200a41b8a3c8001059000b200a2006417f6a221f490d00200a201c41c8a3c800104f000b201f200a41c8a3c8001059000b0240200228023822062002280234470d00200241306a10ae01200228023821060b2002280230220420064103746a2205200b3602042005201f3602002002200641016a2206360238024020064102490d0002400340024002400240024020042006417f6a4103746a2205280200450d00200641037420046a220b41746a2802002203200528020422074d0d00200641024d0d0620042006417d6a22194103746a2802042205200720036a4d0d01200641034d0d06200b41646a280200200520036a4d0d010c060b20064103490d012005280204210720042006417d6a22194103746a28020421050b20052007490d010b2006417e6a21190b0240024002400240024002402006201941016a221a4d0d00200620194d0d012004201941037422086a2206280204220920062802006a22062004201a410374220f6a2204280200221b490d022006201c4b0d032015201b4103746a22172004280204221641037422046a2105200641037421032006201b6b220b20166b220620164f0d04201d20052006410374220410c908220a20046a21070240024020164101480d00200641014e0d010b200a2106200521040c060b201e20036a21032005210403402003200441786a2206200741786a22052005280200200628020049220b1b29020037020020072005200b1b21070240201720062004200b1b2204490d00200a21060c070b200341786a2103200a21062007200a4b0d000c060b0b201a200641d8a3c800103f000b2019200641e8a3c800103f000b201b200641f8a3c8001059000b2006201c41f8a3c800104f000b201d2017200410c908220620046a21070240024020164101480d00200b20164a0d010b20062106201721040c010b201520036a210b20062106201721040340200420052006200528020020062802004922031b2902003702002006200641086a20031b2106200441086a2104200541086a200520031b2205200b4f0d01200720064b0d000b0b20042006200720066b41787110c9081a02402002280238220620194d0d002002280230220420086a2205200920166a3602042005201b3602002006201a4d0d022004200f6a2205200541086a2006201a417f736a41037410ca081a20022006417f6a2206360238200641014d0d030c010b0b201920064188a4c800103f000b201a20061047000b201f450d0c0c000b0b2006201c418ca9c800103f000b2006201c41fca8c800103f000b2006201c41eca8c800103f000b2006201c41dca8c800103f000b4184a8c800412641cca8c800105c000b2006201c41bca8c800103f000b4184a8c800412641aca8c800105c000b2006200a41f4a7c800103f000b41a4a7c800413f41e4a7c800105c000b1039000b103b000b0240200228023441ffffffff0171450d002004102c0b2012450d01201d102c0c010b201c4102490d00410021032015201c417f6a22074103746a2219210a0340024002400240201c20072206417f6a2207490d00201c20076b22164102490d02201520064103746a2206280200201520074103746a2204280200220b4f0d02200435020421182004200629020037020020164103490d012003417f6a211741002104200a210602400340200641086a2205280200200b4f0d0320172004460d01200620052902003702002005210620032004417f6a2204470d000b201921060c020b410120046b2016419ca5c800103f000b2007201c41a8a3c8001058000b20062018422086200bad843702000b2003417f6a2103200a41786a210a20070d000b0b2002410036023820024204370330200228022021032002280224210b200241306a410020022802282206109502200228023821052002280230210a02402006450d0020064103742107200a20054102746a2106200321040340200620043502043e0200200541016a2105200641046a2106200441086a2104200741786a22070d000b0b20022005360238200b41ffffffff0171450d002003102c0b2002280234210b0b2002410036023820024202370330200241306a2005410274220641027510d0042002280238210502402006450d00200a20066a2103200228023020054101746a2106200a21040340200620042802002207417f200741808004491b3b0100200541016a2105200641026a21062003200441046a2204470d000b0b200220053602380240200b41ffffffff0371450d00200a102c0b2002280234210720022802302103024020022802104100200228021422061b2204450d00200641ffffffff0371450d002004102c0b02402005410174410175220620012802082204200420064b1b2205450d00200128020041206a2106200321040340200620042f01003b0100200441026a2104200641226a21062005417f6a22050d000b0b410021062003410020071b2204450d00200741ffffffff0771450d002004102c0b024020022802004100200228020422041b2205450d00200441ffffffff0771450d002005102c0b2000200b36020420002006360200200241c0006a24000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42307e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341306c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141306e3602000b0f0b2005450d001039000b103b000bb60201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10ca030240024020022802480d0020024100360230200242013703282002410f36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235023042208620023502288410000240200228022c450d002002280228102c0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102c0b200241e0006a24000b920e07117f017e0c7f017e017f037e027f230041f0026b220324002001280200220420012802082205412c6c6a21062001280204210702400240024020050d0020042108200421090c010b20034180016a410c6a210a20034180016a410472210b200341d8006a41086a210c200341d8006a41106a210d200341d8006a41186a210e200341d8006a41206a210f200421080340200c20082209410c6a290200370300200d200941146a2210290200370300200e2009411c6a2211290200370300200f200941246a2212290200370300200320092902043703582009412c6a210820092802002213450d01200b2003290358370200200b41086a200c290300370200200b41106a200d290300370200200b41186a200e290300370200200b41206a200f29030037020020032013360280012002200a10d7032114200341b0016a41086a2215200a41086a290200370300200341b0016a41106a2216200a41106a290200370300200341b0016a41186a2217200a41186a2902003703002003200a2902003703b00120032802840121182003280288012101200342003703d801200320143703d00102400240200141226c2205450d00201320056a2119201321010340200141206a2f0100211a200341d0026a41186a221b200141186a290000370300200341d0026a41106a221c200141106a290000370300200341d0026a41086a221d200141086a290000370300200320012900003703d0020240201a450d00200341f0016a41086a221e201d290300370300200341f0016a41106a221f201c290300370300200341f0016a41186a2220201b290300370300200320032903d002222137039002200320213703f001201442ffff03822121413010322222450d06200341c8006a2014420042ffff03420010c808200341386a2003290348200341c8006a41086a290300201aad420010ce08202220032903f001370300202241186a2020290300370300202241106a201f290300370300202241086a201e2903003703002022200329033822142021a7201a6c221a41ffff036e417f201a4180807c491b201a41ffff037041ffff014b6aad42ffff03837c2221370320202241286a200341386a41086a2903002021201454ad7c37030020034281808080103702e401200320223602e001200320193602fc012003200141226a22013602f801200320183602f401200320133602f0012003200341d0016a360280024101211a024020054122460d000340200141206a2f01002105201b200141186a290000370300201c200141106a290000370300201d200141086a290000370300200320012900003703d00202402005450d00200341086a20032903d0012214200341d0016a41086a290300222142ffff03420010c708200341286a2014202142ffff03420010c808200341186a2003290328200341286a41086a2903002005ad420010ce0820034190026a41086a201d290300221437030020034190026a41106a201c290300222137030020034190026a41186a201b29030022233703002003200141226a3602f801200320032903d002222437039002201b2023370300201c2021370300201d2014370300200320243703d002200341186a41086a29030020032903182214200328020820056c220141ffff036e417f20014180807c491b200141ffff037041ffff014b6aad42ffff03837c2221201454ad7c21140240201a20032802e401470d00200341e0016a201a410110e00120032802e00121220b2022201a41306c6a220120032903d002370300201c2903002123201b2903002124201d290300212520012021370320200141086a2025370300200141286a2014370300200141186a2024370300200141106a20233703002003201a41016a221a3602e80120032802f801220120032802fc012219470d010c020b2019200141226a2201470d000b200320193602f8010b20032802f401220141226c202620011b2126024020032802f001410020011b2201450d002026450d002001102c0b20032802e40121010c030b200141226a21012005415e6a22050d000b0b201841226c202720181b2127410021014108212202402018450d002027450d002013102c0b4100211a0b200341d0026a41186a22052017290300370300200341d0026a41106a221b2016290300370300200341d0026a41086a221c2015290300370300200320032903b0013703d002200920013602042009201a36020820092022360200200920032903d00237020c2010201c2903003702002011201b2903003702002012200529030037020020082006470d000b20082109200621080b200620086b2201412c6d210502402001450d002005412c6c210103400240200841046a2802002205450d002008280200221a450d00200541226c450d00201a102c0b2008412c6a2108200141546a22010d000b0b20002007360204200020043602002000200920046b412c6d3602082002102c200341f0026a24000f0b1039000bc9da01074d7f057e017f027e047f067e067f230041a00e6b220124004100210220014100360284022001410036020820014100360200024002400240024002400240200041086a220328020022040d00410021050c010b20014188056a41c0006a2106200141d80d6a41206a2107200141c0006a41206a210820014188056a41206a2109200141106a41106a210a200141106a41186a210b4100210c034002400240024020032802002205200c4d0d00200141106a41086a220d2000280200200c412c6c220e6a220f41146a290000370300200a200f411c6a290000370300200b200f41246a2900003703002001200f29000c3703102001410036023820014201370330200f2802002105200141306a4100200f280208220f10d60120012802382110200128023021110240200f41306c2212450d00201120104105746a210f0340200f2005290000370000200f41186a200541186a290000370000200f41106a200541106a290000370000200f41086a200541086a290000370000201041016a2110200f41206a210f200541306a2105201241506a22120d000b0b200120103602380240201041014b0d0041002113410121140c030b2010417f6a20106c410176220541ffffff1f712005470d0120054106742205417f4c0d01410121154101211402402005450d00200510322214450d070b417f21162010417f6a2117201141206a211820054106762113410021194100211a03400240201a220541016a221a20104f0d0002400240200520104f0d0020102015201020154b1b20166a211b201120054105746a211c201a2010201a20104b1b211d2019410674211e2019410174211f410021122018210f02400340200141c8046a41186a2205201c41186a290000370300200141c8046a41106a2220201c41106a290000370300200141c8046a41086a2221201c41086a2900003703002001201c2900003703c8040240024002400240201b2012460d0020014188056a41186a2222200529030037030020014188056a41106a2223202029030037030020014188056a41086a22202021290300370300200120012903c804370388052009200f290000370000200941086a200f41086a290000370000200941106a200f41106a290000370000200941186a200f41186a290000370000201920126a22052013470d03200541016a22212005490d0b201f2021201f20214b1b22214104202141044b1b222141ffffff1f7122242021470d0b202141067422134100480d0b20242021462121201e202520051b21250240024002402014410020051b22050d002013450d010c040b20250d0120130d030b202121140c030b200520252013103522140d020c050b201d201041dc85c400103f000b201310322214450d030b201341067621130b2014201e6a2205200129038805370000200541386a20014188056a41386a290300370000200541306a20014188056a41306a290300370000200541286a20014188056a41286a290300370000200541206a2009290300370000200541186a2022290300370000200541106a2023290300370000200541086a2020290300370000200f41206a210f201e41c0006a211e201f41026a211f2017201241016a2212460d030c000b0b20210d0a0c050b2005201041cc85c400103f000b201920126a21190b2017417f6a21172016417f6a2116201541016a2115201841206a2118201a2010470d000b2019450d02201420194106746a2126201421210340200141c0006a41386a202141386a290000370300200141c0006a41306a202141306a290000370300200141c0006a41286a202141286a2900003703002008202141206a290000370300200141c0006a41186a202141186a2205290000370300200141c0006a41106a202141106a220f290000370300200141c0006a41086a202141086a22122900003703002001202129000037034020014180016a41186a221c200529000037030020014180016a41106a2205200f29000037030020014180016a41086a220f20122900003703002001202129000037038001200141a0016a41186a200841186a2212290000370300200141a0016a41106a200841106a221e290000370300200141a0016a41086a200841086a221f290000370300200120082900003703a001200141d80d6a41186a2222201c290300370300200141d80d6a41106a22232005290300370300200141d80d6a41086a2224200f29030037030020072008290000370000200741086a201f290000370000200741106a201e290000370000200741186a201229000037000020012001290380013703d80d024002402001280200221e450d00200128020421200c010b41a8081032221e450d0841002120201e41003b0106201e4100360200201e41086a20014188056a41a00810c9081a200141003602042001201e3602000b202141c0006a21210340201e41286a2105201e41086a2117201e2f0106211c4100210f0340024002400240024002400240024002400240024002400240024002400240024002400240201c200f460d0002400240200141d80d6a200541606a412010cc082212450d002012417f4c0d010c130b20072005412010cc082212450d02201241004e0d120b200f211c0b2020450d012020417f6a2120201e201c4102746a41a8086a280200211e0c120b20032802002219200c4d0d0620002802002222200e6a220528020841306c221f450d0e201e200f41057422276a41c8056a2123200528020021054100211c034041012112024020014180016a2005460d00200520014180016a412010cc08450d000240200141a0016a2005470d00410121120c010b2005200141a0016a412010cc084521120b200541306a21052012201c6a211c201f41506a221f0d000b201c4102470d0e2019412c6c21120340202221052012450d0f02402005410c6a221c2023460d00201241546a21122005412c6a2122201c2023412010cc080d010b0b0240200541086a2802002212450d002005280200221f201241306c22226a211c20014180016a201f6b2119200141a0016a201f6b211b41002112034020192012460d03201f20126a220520014180016a412010cc08450d03201b2012460d032005200141a0016a412010cc08450d032022201241306a2212470d000b0b41002118410821150c0c0b200141c0016a41386a2205200141d80d6a41386a2220290300370300200141c0016a41306a220f200141d80d6a41306a2219290300370300200141c0016a41286a2212200141d80d6a41286a221b290300370300200141c0016a41206a221f2007290300370300200141c0016a41186a22102022290300370300200141c0016a41106a221a2023290300370300200141c0016a41086a22152024290300370300200120012903d80d3703c001202020052903003703002019200f290300370300201b20122903003703002007201f290300370300202220102903003703002023201a29030037030020242015290300370300200120012903c0013703d80d20014188036a41186a2228200b29030037030020014188036a41106a2229200a29030037030020014188036a41086a222a200d290300370300200120012903103703880302400240201e2f0106220f410b490d004100212b4104211202400240201c41054f0d00201c211f0c010b410521124105211f02400240201c417b6a0e020201000b201c41796a211f4101212b410621120c010b4100211f4101212b0b41a8081032220f450d1a4100212c200f41003b0106200f4100360200200f41086a20014188056a41a00810c908211c20014188056a41386a2210201720124106746a220541386a29000037030020014188056a41306a221a200541306a29000037030020014188056a41286a2215200541286a2900003703002009200541206a29000037030020014188056a41186a2216200541186a29000037030020014188056a41106a2218200541106a29000037030020014188056a41086a2211200541086a2900003703002001200529000037038805200141e8046a41186a221d201e41c8056a222d20124105746a220541186a290000370300200141e8046a41106a222e200541106a290000370300200141e8046a41086a2227200541086a290000370300200120052900003703e804201c2017201241016a222f4106746a201e2f01062012417f736a220541067410c9081a200f41c8056a202d202f4105746a200541057410c9081a201e20123b0106200f20053b0106200620012903e804370000200641086a22302027290300370000200641106a2231202e290300370000200641186a2232201d290300370000200141c8036a41086a222f2011290300370300200141c8036a41106a22332018290300370300200141c8036a41186a22342016290300370300200141c8036a41206a22352009290300370300200141c8036a41286a22362015290300370300200141c8036a41306a2237201a290300370300200141c8036a41386a2238201029030037030020012001290388053703c803200141c8046a41186a22392032290200370300200141c8046a41106a223a2031290200370300200141c8046a41086a223b2030290200370300200120062902003703c804200141a8046a41186a223c2039290300370300200141a8046a41106a223d203a290300370300200141a8046a41086a223e203b290300370300200120012903c8043703a804200f201e202b1b221241086a2205201f41016a221c4106746a2005201f4106746a220520122f0106201f6b41067410ca081a200541386a2020290300370000200541306a2019290300370000200541286a201b290300370000200541206a2007290300370000200541186a2022290300370000200541106a2023290300370000200541086a2024290300370000200520012903d80d370000201241c8056a2205201c4105746a2005201f4105746a220520122f0106201f6b41057410ca081a200541186a2028290300370000200541106a2029290300370000200541086a202a2903003700002005200129038803370000201220122f010641016a3b010620014188046a41186a223f203c29030037030020014188046a41106a2240203d29030037030020014188046a41086a2241203e290300370300200120012903a80437038804202a202f290300370300202920332903003703002028203429030037030020014188036a41206a2242203529030037030020014188036a41286a2243203629030037030020014188036a41306a2244203729030037030020014188036a41386a22452038290300370300200120012903c80337038803200141e8026a41086a22462041290300370300200141e8026a41106a22472040290300370300200141e8026a41186a2248203f29030037030020012001290388043703e8020240201e2802002205450d004100212c0340200f2149201e210f2005211e200f2f0104211f203820452903003703002037204429030037030020362043290300370300203520422903003703002034202829030037030020332029290300370300202f202a29030037030020012001290388033703c803203f20482903003703002040204729030037030020412046290300370300200120012903e8023703880441000d08024002400240201e2f0106220f410b490d004100214a4104211c0240201f4105490d00201f211c02400240201f417b6a0e020201000b201f41796a211f4101214a4106211c0c010b4100211f4101214a4105211c0b41d8081032220f450d1f202c41016a212c41002105200f41003b0106200f4100360200200f41086a20014188056a41d00810c908214b2010201e41086a2217201c4106746a221241386a290000370300201a201241306a2900003703002015201241286a2900003703002009201241206a2900003703002016201241186a2900003703002018201241106a2900003703002011201241086a2900003703002001201229000037038805201d201e41c8056a222b201c4105746a221241186a290000370300202e201241106a2900003703002027201241086a290000370300200120122900003703e804204b2017201c41016a222d4106746a201e2f0106224c201c417f736a221241067410c908214b200f41c8056a202b202d4105746a201241057410c908214d201e201c3b0106200f20123b0106200620012903e804370000203020272903003700002031202e2903003700002032201d290300370000202020102903003703002019201a290300370300201b20152903003703002007200929030037030020222016290300370300202320182903003703002024201129030037030020012001290388053703d80d20392032290200370300203a2031290200370300203b2030290200370300200120062902003703c804200f41a8086a201e202d4102746a41a8086a204c201c6b41027410c908212d02400340200f20054102746a41a8086a280200221c20053b0104201c200f36020020052005201249221c6a220520124b0d01201c0d000b0b20102020290300370300201a20192903003703002015201b29030037030020092007290300370300201620222903003703002018202329030037030020112024290300370300203e203b290300370300203d203a290300370300203c2039290300370300200120012903d80d37038805200120012903c8043703a804202020102903003703002019201a290300370300201b20152903003703002007200929030037030020222016290300370300202320182903003703002024201129030037030020012001290388053703d80d201d203c290300370300202e203d2903003703002027203e290300370300200120012903a8043703e804204a450d01201f410274202d6a41086a202d201f41016a22054102746a2212200f2f0106201f6b41027410ca081a20122049360200204b20054106746a204b201f4106746a2212200f2f0106201f6b41067410ca081a201241386a2038290300370000201241306a2037290300370000201241286a2036290300370000201241206a2035290300370000201241186a2034290300370000201241106a2033290300370000201241086a202f290300370000201220012903c803370000204d20054105746a204d201f4105746a2212200f2f0106201f6b41057410ca081a201241186a203f290300370000201241106a2040290300370000201241086a20412903003700002012200129038804370000200f200f2f010641016a22123b01062005201241ffff037122124b0d020340200f20054102746a41a8086a280200221c20053b0104201c200f360200200520052012496a221c20124b0d03200520124f211f201c2105201f450d000c030b0b201f410274201e41a8086a22126a41086a2012201f41016a22054102746a2212200f201f6b221c41027410ca081a20122049360200201e41086a221220054106746a2012201f4106746a2212201c41067410ca081a201241386a2038290300370000201241306a2037290300370000201241286a2036290300370000201241206a2035290300370000201241186a2034290300370000201241106a2033290300370000201241086a202f290300370000201220012903c803370000201e41c8056a221220054105746a2012201f4105746a2212201c41057410ca081a201241186a203f290300370000201241106a2040290300370000201241086a20412903003700002012200129038804370000201e200f41016a22123b0106201f200f4b0d05201241ffff0371210f0340201e20054102746a41a8086a280200221220053b01042012201e36020020052005200f496a2212200f4b0d062005200f4f211c20122105201c450d000c060b0b201f410274201e41a8086a22126a41086a2012201f41016a22054102746a2212201e2f0106201f6b41027410ca081a20122049360200201720054106746a2017201f4106746a2212201e2f0106201f6b41067410ca081a201241386a2038290300370000201241306a2037290300370000201241286a2036290300370000201241206a2035290300370000201241186a2034290300370000201241106a2033290300370000201241086a202f290300370000201220012903c803370000202b20054105746a202b201f4105746a2212201e2f0106201f6b41057410ca081a201241186a203f290300370000201241106a2040290300370000201241086a20412903003700002012200129038804370000201e201e2f010641016a22123b01062005201241ffff037122124b0d000340201e20054102746a41a8086a280200221c20053b0104201c201e36020020052005201249221c6a220520124b0d01201c0d000b0b20452020290300370300204420192903003703002043201b290300370300204220072903003703002028202229030037030020292023290300370300202a2024290300370300204620272903003703002047202e2903003703002048201d290300370300200120012903d80d37038803200120012903e8043703e802201e28020022050d000b0b200141a8026a41386a22052045290300370300200141a8026a41306a22122044290300370300200141a8026a41286a221c2043290300370300200141a8026a41206a221e2042290300370300200141a8026a41186a221f2028290300370300200141a8026a41106a22172029290300370300200141a8026a41086a221d202a29030037030020014188026a41086a222e204629030037030020014188026a41106a2227204729030037030020014188026a41186a222b204829030037030020012001290388033703a802200120012903e802370388022024201d290300370300202320172903003703002022201f2903003703002007201e290300370300201b201c2903003703002019201229030037030020202005290300370300200120012903a8023703d80d202a202e290300370300202920272903003703002028202b29030037030020012001290388023703880320012802002212450d0541d80810322205450d1a200541003b010620054100360200200541086a20014188056a41d00810c9081a200520123602a80820012001280204221c41016a360204201241003b0104200120053602002012200536020020102020290300370300201a20192903003703002015201b29030037030020092007290300370300201620222903003703002018202329030037030020112024290300370300200120012903d80d370388052034202829030037030020332029290300370300202f202a29030037030020012001290388033703c803201c202c470d0420052f0106221c410a4b0d032005201c4106746a221241086a200129038805370000201241106a2011290300370000201241186a2018290300370000201241206a2016290300370000201241286a2009290300370000201241306a2015290300370000201241386a201a290300370000201241c0006a20102903003700002005201c4105746a221241c8056a20012903c803370000201241d0056a202f290300370000201241d8056a2033290300370000201241e0056a20342903003700002005201c41016a22123b0106200520124102746a41a8086a200f360200200f2005360200200f20123b01042001200128020841016a360208202c1a0c0f0b2017201c41016a22124106746a2017201c4106746a2205200f201c6b41067410ca081a200541386a2020290300370000200541306a2019290300370000200541286a201b290300370000200541206a2007290300370000200541186a2022290300370000200541106a2023290300370000200541086a2024290300370000200520012903d80d370000201e41c8056a220520124105746a2005201c4105746a2205201e2f0106201c6b41057410ca081a200541186a2028290300370000200541106a2029290300370000200541086a202a2903003700002005200129038803370000201e201e2f010641016a3b01060b2001200128020841016a3602080c0d0b20014188056a41086a2211201f20126a220541086a29030037030020014188056a41106a221d200541106a29030037030020014188056a41186a222e200541186a2903003703002001200529030037038805200541286a290300214e200541206a290300214f413010322215450d172015204f3703202015200129038805370300201541286a204e370300201541186a202e290300370300201541106a201d290300370300201541086a201129030037030020014281808080103702cc03200120153602c8032001201c3602dc0d2001200541306a22053602d80d2001200141a0016a3602e40d200120014180016a3602e00d0240202241506a2012470d0020012802cc0321180c0b0b4101211f024003402001200541306a22123602d80d024020014180016a2005460d00200520014180016a412010cc08450d00200141a0016a2005460d002005200141a0016a412010cc08450d0020122105201c2012470d010c020b200541286a290300214e200541206a290300214f202e200541186a290300370300201d200541106a2903003703002011200541086a29030037030020012005290300370388050240201f20012802cc03470d00200141c8036a201f410110e00120012802c80321150b2015201f41306c6a2205200129038805370300201d2903002150202e2903002151201129030021522005204f370320200541086a2052370300200541286a204e370300200541186a2051370300200541106a20503703002001201f41016a221f3602d00320012802d80d2205201c470d000b0b20012802cc032118201f4102490d0a201f4102470d0741e00010322219450d17200142023702ac04200120193602a804024020032802002205200c4d0d000240024002400240024002402000280200200e6a220528020841306c2222450d00200528020021054100211c03400240024020014180016a2005460d00200520014180016a412010cc08450d00200141a0016a2005460d002005200141a0016a412010cc080d010b200141c8046a41186a221b200541186a290300370300200141c8046a41106a2210200541106a290300370300200141c8046a41086a221a200541086a290300370300200120052903003703c804200541286a290300214e200541206a290300214f0240201c20012802ac04470d00200141a8046a201c410110e00120012802a804211920012802b004211c0b2019201c41306c6a221220012903c804370300201a290300215020102903002151201b29030021522012204f370320201241286a204e370300201241186a2052370300201241106a2051370300201241086a20503703002001201c41016a221c3602b0040b200541306a2105202241506a22220d000b201c4102470d00201f450d0520192015460d0420152019412010cc08450d04201f0e020102030b20012802ac04220541306c205320051b21532019410020051b2205450d112053450d112005102c0c110b4100410041e48ac500103f000b41014101419c86c400103f000b20014188056a41286a2205201541286a22122903003703002009201541206a221c290300370300202e201541186a2222290300370300201d201541106a221b2903003703002011201541086a221029030037030020012015290300370388052012201541d8006a221a290300370300201c201541d0006a22122903003703002022201541c8006a221c290300370300201b201541c0006a22222903003703002010201541386a221b29030037030020152015290330370300201a200529030037030020122009290300370300201c202e2903003703002022201d290300370300201b201129030037030020152001290388053703300b2001427f3703e00d2001427f3703d80d2001410036028804200141003602d004200142083703c8042015201f41306c6a211002400240024020190d0020150d01410021050c020b024020150d00410221050c020b201020156b41306e41026a21050c010b201020156b41306e21050b4100211f200141c8046a4100200510e00120012802c80420012802d004221b41306c6a210502402019450d002024290300215020012903d80d2154410021224100211f03400240201920226a221241206a290300224f205456201241286a290300224e205056204e2050511b0d002001204f3703d80d2001201f360288042001204e3703e00d204f2154204e21500b200520226a221c2012290300370300201241086a2903002151201241106a2903002152201241186a2903002155201c41286a204e370300201c41206a204f370300201c41186a2055370300201c41106a2052370300201c41086a2051370300201f41016a211f202241306a222241e000470d000b200520226a2105201b201f6a211b0b02402015450d0020102015460d002024290300215020012903d80d2154201521120340201241306a211c0240201241206a290300224f205456201241286a290300224e205056204e2050511b0d002001204f3703d80d2001201f360288042001204e3703e00d204f2154204e21500b20052012290300370300201241086a2903002151201241106a2903002152201241186a2903002155200541286a204e370300200541206a204f370300200541186a2055370300200541106a2052370300200541086a2051370300200541306a2105201f41016a211f201b41016a211b201c21122010201c470d000b0b2001201b3602d004200141003602b002200142043703a80220014100360290032001420437038803200128028804210520014188036a10c406200128028803221c20012802900322124102746a20053602002001201241016a22053602900302400240200128028804221f4102490d00200141a8026a10c40620012802a802222220012802b00222124102746a201f410171410373221f3602002001201241016a22123602b002201f417e6a211f02402005200128028c03470d0020014188036a10c4062001280290032105200128028803211c0b201c20054102746a201f3602002001200541016a36029003200128028804417e6a21050240201220012802ac02470d00200141a8026a10c40620012802b002211220012802a80221220b202220124102746a20053602000c010b200141a8026a10c40620012802a802222220012802b00222124102746a4101201f6b3602002001201241016a22123602b0024103201f6b211f02402005200128028c03470d0020014188036a10c4062001280290032105200128028803211c0b201c20054102746a201f3602002001200541016a3602900320012802880441026a21050240201220012802ac02470d00200141a8026a10c40620012802b002211220012802a80221220b202220124102746a20053602000b2001201241016a22053602b002410410322212450d19200142013702cc03200120123602c80320012802a802212d20012802ac02212b024002402005450d00202d20054102746a2116202d211a034002400240201a28020022124102490d00202e202341186a290000370300201d202341106a2900003703002011202341086a29000037030020012023290000370388050c010b202e200b290300370300201d200a2903003703002011200d29030037030020012001290310370388050b024020032802002205450d002000280200221b2005412c6c6a211003400240024020014188056a201b410c6a2205460d00200520014188056a412010cc080d010b201b280208221c450d00201b2802002105201c41306c211f4100212220012802d00421190340201920124d0d060240200520012802c804201241306c6a221c460d002005201c412010cc08450d00200541306a2105202241016a2122201f41506a221f0d010c020b0b200541206a221c427f201c290300224e20012903d80d7c224f204f204e54221c200541286a2205290300224e20242903007c201cad7c224f204e54204f204e511b221c1b3703002005427f204f201c1b3703000b201b412c6a221b2010470d000b0b201a41046a221a2016470d000b0b202b4102742056202b1b21560240202b450d002056450d00202d102c0b2001280288032129200128028c032128024002402001280290032205450d00202920054102746a212d2029212b034002400240202b28020022124102490d00202e202341186a290000370300201d202341106a2900003703002011202341086a29000037030020012023290000370388050c010b202e200b290300370300201d200a2903003703002011200d29030037030020012001290310370388050b024020032802002205450d002000280200221b2005412c6c6a211a03400240024020014188056a201b410c6a2205460d00200520014188056a412010cc080d010b201b41086a22162802002210450d00201b2802002105201041306c41506a211c4100212220012802d00421190340201920124d0d060240200520012802c804201241306c6a221f460d002005201f412010cc08450d00200541306a2105202241016a2122201c41506a221c4150470d010c020b0b0240200541206a221f290300224f20012903d80d225158200541286a2222290300224e2024290300225058204e2050511b0d0020224200204e20507d204f205154ad7d2250204f20517d2251204f562050204e562050204e511b22051b370300201f4200205120051b3703000c010b2005200541306a201c10ca081a20162010417f6a360200024020012802d003220520012802cc03470d00200141c8036a10c40620012802d00321050b20012802c80320054102746a2012360200200120012802d00341016a3602d003200120012802840241016a360284020b201b412c6a221b201a470d000b0b202b41046a222b202d470d000b0b2028410274205720281b215702402028450d002057450d002029102c0b20012802c8032219417c6a211c20012802d0034102742205211202400340024020120d004100211c0c020b2012417c6a2112201c41046a221c28020041014b0d000b0b20012802cc032122201921120240024003402005450d012005417c6a21052012280200211f201241046a2112201f4102490d000b2022410274205820221b215802402022450d002058450d002019102c0b201c0d0120232001290310370000202341186a200b290300370000202341106a200a290300370000202341086a200d2903003700000c0c0b2022410274205920221b215902402022450d002059450d002019102c0b201c0d0b41cc86c400412941f886c400103c000b024002402020450d002020417f6a2112201e200f4106746a221c41086a211f201e200f4102746a41a8086a28020021050240034020052f0106210f2012450d012012417f6a21122005200f4102746a41a8086a28020021050c000b0b20054100200f1b221e41086a2212200f417f6a4100200f1b220f4106746a2205290000214e2005290008214f20052900102150200541186a290000215120052900202152200541286a2900002155200541306a2900002154200541386a290000215a4101213320052012200f41016a22204106746a200f417f732212201e2f01066a41067410ca081a201e41c8056a2222200f4105746a2205290000215b2005290008215c2005290010215d200541186a290000215e2005202220204105746a2012201e2f01066a41057410ca081a201e201e2f0106417f6a3b0106201c41c0006a205a370000201c41386a2054370000201c41306a2055370000201c41286a2052370000201f41186a2051370000201f2050370010201f204f370008201f204e370000202341186a205e3700002023205d3700102023205c3700082023205b370000201e2f010621050c010b2017200f4106746a2017200f41016a22054106746a200f417f732212201e2f01066a41067410ca081a201e41c8056a221c20276a201c20054105746a2012201e2f01066a41057410ca081a201e201e2f0106417f6a22053b0106410021330b4101212f200541ffff037141044b0d094100211b4101212f41012110201e2120034020202802002205450d0a0240024020202f010422120d004100211f2005410020052f01061b2120410021240c010b2012417f6a211f41012124200521200b0240024002400240024002400240024002400240024002400240202041a8086a2212201f41016a22054102746a221a28020022192f010622232012201f41027422276a2216280200221c2f010622226a410b490d0020240d03201941c0006a290000214e201941386a290000214f201941306a2900002150201941206a2900002151201941186a2900002152201941106a2900002155201929002821542019290008215a201941086a201941c8006a202341067441406a10ca081a201941e0056a290000215b201941d8056a290000215c201941d0056a290000215d20192900c805215e201941c8056a201941e8056a202341057441606a10ca081a201b0d01410021220c020b201b41016a211b20202f0106211720014188056a41386a222b202041086a222d201f4106746a221241386a29000037030020014188056a41306a2228201241306a29000037030020014188056a41286a2229201241286a2900003703002009201241206a290000370300202e201241186a290000370300201d201241106a2900003703002011201241086a29000037030020012012290000370388052012202d20054106746a2017201f417f73222d6a41067410ca081a201c41086a222a20224106746a221241386a202b290300370000201241306a2028290300370000201241286a2029290300370000201241206a2009290300370000201241186a202e290300370000201241106a201d290300370000201241086a20112903003700002012200129038805370000202a202241016a22174106746a201941086a202341067410c9081a20202f0106212b200141e8046a41186a2228202041c8056a2229201f4105746a221241186a290000370300200141e8046a41106a221f201241106a290000370300200141e8046a41086a222a201241086a290000370300200120122900003703e8042012202920054105746a202d202b6a41057410ca081a201c41c8056a222b20224105746a221241186a2028290300370000201241106a201f290300370000201241086a202a290300370000201220012903e804370000202b20174105746a201941c8056a202341057410c9081a201a201641086a20202f01062005417f736a41027441046a10ca081a0240200520202f010622224f0d00202720206a41ac086a211203402012280200221f20053b0104201f2020360200201241046a21122022200541016a2205470d000b20202f010621220b20202022417f6a3b0106201c2023201c2f01066a41016a3b0106201b41014d0d0b201c20174102746a41a8086a201941a8086a202341027441046a10c9081a201720236a2112201721050340201c20054102746a41a8086a280200221f20053b0104201f201c36020020052005201249221f6a220520124b0d0c201f450d0c0c000b0b20192802a8082122201941a8086a2205201941ac086a202341027410ca081a2022410036020002402023450d004100211203402005280200221c20123b0104201c2019360200200541046a21052023201241016a2212470d000b0b201b417f6a211c20192f010621230b20192023417f6a3b01062020201f4106746a220541206a2212290000215f20122051370000200541186a2212290000215120122052370000200541106a2212290000215220122055370000200541086a221229000021552012205a370000200541c0006a2212290000215a2012204e370000200541386a2212290000214e2012204f370000200541306a2212290000214f20122050370000200541286a22052900002150200520543700002020201f4105746a220541d8056a221229000021542012205c370000200541d0056a2212290000215c2012205d370000200541c8056a2212290000215d2012205e370000200541e0056a2205290000215e2005205b370000201628020021050240201b450d002022450d03201b417f6a201c470d0420052f0106221c410a4b0d052005201c41016a221f3b01062005201c4106746a221241c0006a205a370000201241386a204e370000201241306a204f370000201241286a2050370000201241206a205f370000201241186a2051370000201241106a2052370000201241086a20553700002005201c4105746a221241e0056a205e370000201241d8056a2054370000201241d0056a205c370000201241c8056a205d3700002005201f4102746a41a8086a20223602002022201f3b0104202220053602000c020b20052f0106221c410b4f0d052005201c41016a3b01062005201c4106746a221241c0006a205a370000201241386a204e370000201241306a204f370000201241286a2050370000201241206a205f370000201241186a2051370000201241106a2052370000201241086a20553700002005201c4105746a220541e0056a205e370000200541d8056a2054370000200541d0056a205c370000200541c8056a205d3700000c010b201c2022417f6a22124105746a220541e0056a290000214e200541d8056a290000214f200541d0056a2900002150200541c8056a2900002151201c20124106746a220541c0006a2900002152200541386a2900002155200541306a2900002154200541286a290000215a200541206a290000215b200541186a290000215c200541106a290000215d200541086a290000215e02400240201b0d00410021230c010b201c20224102746a41a8086a28020022234100360200201b417f6a2119201c2f010621220b201c2022417f6a3b01062020201f4106746a220541206a2212290000215f2012205b370000200541186a2212290000215b2012205c370000200541106a2212290000215c2012205d370000200541086a2212290000215d2012205e370000200541c0006a2212290000215e20122052370000200541386a2212290000215220122055370000200541306a2212290000215520122054370000200541286a220529000021542005205a3700002020201f4105746a220541d8056a2212290000215a2012204f370000200541d0056a2212290000214f20122050370000200541c8056a2212290000215020122051370000200541e0056a220529000021512005204e370000201a28020021120240201b450d002023450d06201b417f6a2019470d07024020122f01062205410a4b0d00201241c8006a201241086a200541067410ca081a201241386a2052370000201241306a205537000020122054370028201241186a205b370000201241106a205c3700002012205d370008201241c0006a205e370000201241206a205f370000201241e8056a201241c8056a20122f010641057410ca081a201241e0056a2051370000201241d8056a205a370000201241d0056a204f370000201220503700c805201241ac086a201241a8086a20122f010641027441046a10ca081a201220233602a808201220122f010641016a22053b0106200541ffff0371211c410021050340201220054102746a41a8086a280200221f20053b0104201f201236020020052005201c496a221f201c4b0d032005201c4f2120201f21052020450d000c030b0b41ecbec40041274194bfc400103c000b201241c8006a201241086a20122f010641067410ca081a201241c0006a205e370000201241386a2052370000201241306a205537000020122054370028201241206a205f370000201241186a205b370000201241106a205c3700002012205d370008201241e8056a201241c8056a20122f010641057410ca081a201241e0056a2051370000201241d8056a205a370000201241d0056a204f370000201220503700c805201220122f010641016a3b01060b2010202471450d12200f201e2f0106490d0641002112024003400240201e28020022050d00410021050c020b201241016a2112201e2f0104210f2005211e200f20052f01064f0d000b200f41016a210f0b024020120d002005211e0c130b2005200f4102746a41a8086a280200211e02402012417f6a2205450d000340201e2802a808211e2005417f6a22050d000b0b4100210f0c120b41ecd0c800412b41a4bfc400103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b41e0cec80041204188bec400103c000b41ecd0c800412b41ccbec400103c000b419ecec800413041dcbec400103c000b4101212f200f41016a210f0c0b0b2019102c024002402010417f732024417f73724101710d00201b4101470d01202020276a41a8086a280200211e2017410020241b200f6a210f0b024020202f010622050d004100212f0c0c0b4100211020054105490d010c0b0b0b41d5a1c800412841f8bdc400103c000b2012201941bc86c400103f000b2012201941ac86c400103f000b41004100418c86c400103f000b200c200541fc85c400103f000b41e0cec80041204180cfc800103c000b419ecec800413041d0cec800103c000b41ecd0c800412b41bcd2c800103c000b41a5d0c800413541dcd0c800103c000b200c201941ec85c400103f000b02402033450d00200f201e2f0106490d000340201e2802002205450d01201e2f0104210f2005211e200f20052f01064f0d000b0b20012001280208417f6a360208202f0d0020012802002205450d022001280204220f450d032001200f417f6a360204200120052802a808220f360200200f41003602002005102c0b20012802cc04220541306c206020051b2160024020012802c804410020051b2205450d002060450d002005102c0b20012802ac04220541306c206120051b216120012802a804410020051b2205450d002061450d002005102c0b201841306c206220181b21622015410020181b2205450d042062450d042005102c0c040b41ecd0c800412b41ac9ec800103c000b4198bec400412141bcbec400103c000b20232001290310370000202341186a200b290300370000202341106a200a290300370000202341086a200d2903003700000b201841306c206320181b21632015410020181b2205450d002063450d002005102c0b20212026460d060c030b200f41016a210f200541c0006a21050c000b0b0b0b200c200541bc85c400103f000b103b000b2013410674206420131b216402402013450d002064450d002014102c0b200c41016a210c20012802342205410574206520051b216502402001280230410020051b2205450d002065450d002005102c0b200c2004470d000b02402001280200220f0d00410021050c010b2001280208211f20012802042109200f210503402009450d022009417f6a2109200f200f2f01064102746a41a8086a280200210f20052802a80821050c000b0b4100211f0b20014180056a2114200141f8046a2120200141e8046a41086a2121024002400340201f450d012005450d0202400240200220052f01064f0d002005210f0c010b2012211e201c21020340024002402005280200220f0d004100210f201e21090c010b20052f01042102200941016a2209211e0b2005102c200f2105200921122002211c2002200f2f01064f0d000b0b2014200f20024105746a220541e0056a2900003703002020200541d8056a2900003703002021200541d0056a2900003703002001200541c8056a2900003703e804200241016a21020240024020090d00200f21050c010b200f20024102746a41a8086a280200210502402009417f6a220f450d00034020052802a8082105200f417f6a220f0d000b0b410021020b201f417f6a211f410021090c000b0b02402005450d002005280200210f2005102c200f450d000340200f2802002105200f102c2005210f20050d000b0b2001410036028002200141003602f002200141003602e802200041086a22152802002231450d022015280200210f20014188056a4104722108200141e8046a41106a2106200141e8046a41186a212f20014188036a41206a21284100211c024003402001201c36028402200f201c4d0d01201c41016a2130200141e8046a41086a223320002802002205201c412c6c6a220941146a29000037030020062009411c6a290000370300202f200941246a2900003703002001200929000c3703e8044100212e034002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402005201c412c6c6a2205280208202e4d0d00200141c8046a41186a2005280200202e41306c6a220541186a2209290300370300200141c8046a41106a200541106a2212290300370300200141c8046a41086a200541086a221e290300370300200120052903003703c804200141c0016a41186a221f202f290300370300200141c0016a41106a22142006290300370300200141c0016a41086a22202033290300370300200120012903e8043703c001200141003a00e001200141a8026a41186a220f2009290000370300200141a8026a41106a22092012290000370300200141a8026a41086a2212201e290000370300200120052900003703a802200141013a00c802200141e8026a200141c0016a10c506211e200141e8026a200141a8026a10c5062121200141d80d6a41186a2216202f290300370300200141d80d6a41106a22182006290300370300200141d80d6a41086a22112033290300370300200120012903e8043703d80d200141003a00f80d20014188056a200141e8026a200141d80d6a10c606202820012d00e0013a000020014188036a41186a2227201f29030037030020014188036a41106a222b201429030037030020014188036a41086a222d2020290300370300200120012903c00137038803024002402001280288054101460d00200141d80d6a41306a200841306a280200360200200141d80d6a41286a200841286a290200370300200141d80d6a41206a200841206a2902003703002016200841186a2902003703002018200841106a2902003703002011200841086a290200370300200120082902003703d80d200141c8036a41086a221f202d290300370300200141c8036a41106a2214202b290300370300200141c8036a41186a22202027290300370300200141c8036a41206a222220282d00003a000020012001290388033703c803413410322205450d2b200542003702082005428180808010370200200520012903c803370210200520012f00403b0031200541186a201f290300370200200541206a2014290300370200200541286a2020290300370200200541306a20222d00003a0000200541336a200141c0006a41026a2d00003a0000200141d80d6a200510c70621050c010b2001280290052001280294054102746a41046a21050b2005280200222428020041016a220541014d0d1f202420053602002016200f2903003703002018200929030037030020112012290300370300200120012903a8023703d80d200141013a00f80d20014188056a200141e8026a200141d80d6a10c6062028200141a8026a41206a2d00003a00002027200f290300370300202b2009290300370300202d2012290300370300200120012903a80237038803024002402001280288054101460d00200141d80d6a41306a200841306a280200360200200141d80d6a41286a200841286a290200370300200141d80d6a41206a200841206a2902003703002016200841186a2902003703002018200841106a2902003703002011200841086a290200370300200120082902003703d80d200141c8036a41086a220f202d290300370300200141c8036a41106a2209202b290300370300200141c8036a41186a22122027290300370300200141c8036a41206a221f20282d00003a000020012001290388033703c803413410322205450d2b200542003702082005428180808010370200200520012903c803370210200520012f00403b0031200541186a200f290300370200200541206a2009290300370200200541286a2012290300370200200541306a201f2d00003a0000200541336a200141c0006a41026a2d00003a0000200141d80d6a200510c70621050c010b2001280290052001280294054102746a41046a21050b2005280200221b280200220f41016a220541014d0d1f201b200536020002400240024002400240024002400240201e0d0020210d01202428020041016a220541014d0d2720242005360200201b2802080d0b201b417f3602080240201b28020c2205450d0020052005280200417f6a360200201b28020c22052802000d002005410c6a10c806201b28020c41046a22052005280200417f6a360200201b28020c220541046a2802000d002005102c0b201b202436020c201b201b28020841016a3602080c2b0b2021450d0120014188056a202410c90620012802940521352001280290052136200128028c05211d200128028805212a20014188056a201b10c906200128029405214a2001280290052137200128028c0521290240202a2001280288052234460d00202a28020841016a220541004c0d09202a20053602082034280208220541016a220f41004c0d0a2034200f360208202a41106a203441106a412010cc08210f202a2d003021092034200536020820342d00302105202a202a280208417f6a360208200f0d05200941ff0171200541ff0171470d050b2029204a410274221a6a2121201d203541027422026a210920020d024100211e0c030b200f417e4f0d25201b200f41026a36020020242802080d0a2024417f3602080240202428020c2205450d0020052005280200417f6a360200202428020c22052802000d002005410c6a10c806202428020c41046a22052005280200417f6a360200202428020c220541046a2802000d002005102c0b2024201b36020c2024202428020841016a3602080c290b202428020041016a220541014d0d2420242005360200201b2802080d0a201b417f3602080240201b28020c2205450d0020052005280200417f6a360200201b28020c22052802000d002005410c6a10c806201b28020c41046a22052005280200417f6a360200201b28020c220541046a2802000d002005102c0b201b202436020c201b201b28020841016a3602080c280b204a41ffffffff037121224100211e202121122009211c0340024020292012470d002022211e0c020b0240201c417c6a221c28020022052012417c6a2212280200220f460d00200528020841016a221f41004c0d0c2005201f360208200f280208221f41016a221441004c0d0d200f2014360208200541106a200f41106a412010cc08211420052d00302120200f201f360208200f2d0030210f20052005280208417f6a36020820140d02202041ff0171200f41ff0171470d020b201e41016a211e201d201c470d000b0b200141003602900420014204370388042035201e6b2114204a201e6b224641016a210f024002402029450d00200f202120296b41027622052005200f4b1b4100200f1b20142009201d6b4102762205200520144b1b410020141b6a21050c010b20142009201d6b4102762205200520144b1b410020141b21050b20014188046a4100200510950220012802880420012802900422204102746a210502402029450d00200f450d002029201a6a211f204a417f73201e6a2112204a20206a201e6b41016a21212029210f0340201f200f460d01200f280200221c28020041016a221e41014d0d24201c201e3602002005201c360200202041016a2120200541046a2105200f41046a210f201241016a221c20124f211e201c2112201e0d000b202121200b02402014450d0002402009201d6b410276220f20144d0d00200f2014417f736a2212200f4f0d01200920124102746b417c6a201d2012200f491b21090b2009201d460d0003402009417c6a2209280200220f28020041016a221241014d0d24200f20123602002005200f360200202041016a2120200541046a2105201d2009470d000b0b20012020360290042001427f3703b0042001427f3703a804200141c0006a41186a22384200370300200141c0006a41106a223f4200370300200141c0006a41086a224042003703002001420037034020274200370300202b4200370300202d42003703002001420037038803410021252001410036020020014100360230200120014188046a360210200120014188046a36028001410021074100212c4100211002402020450d00427f21514100212c200128028804212141002110427f214e427f214f202021074100211f03402007201f4d0d0f2021201f4102746a22092802002205280208220f41016a41004c0d10201f41016a21142005200f360208024020052d00300d002001280290042205201f4d0d122009280200220528020841016a220f41004c0d132005200f360208200141c8036a41186a2222200541286a290000370300200141c8036a41106a2223200541206a290000370300200141c8036a41086a2213200541186a29000037030020052005280208417f6a360208200120052900103703c8032001280290042205201441002005417f6a201f4b1b220f4d0d142021200f4102746a280200220528020841016a220f41004c0d152005200f3602082016200541286a2900003703002018200541206a2900003703002011200541186a29000037030020052005280208417f6a360208200120052900103703d80d2001280290042205201f2005201f1b417f6a220f4d0d162021200f4102746a280200220528020841016a220f41004c0d172005200f36020820014188056a41186a2207200541286a29000037030020014188056a41106a2219200541206a29000037030020014188056a41086a2217200541186a29000037030020052005280208417f6a36020820012005290010370388052015280200412c6c220f210920002802002212211c02400340201c21052009450d010240200141c8036a2005410c6a221e460d00200941546a21092005412c6a211c201e200141c8036a412010cc080d010b0b200541086a28020041306c21092005280200211c0340201c21052009450d010240200141d80d6a2005460d00200941506a2109200541306a211c2005200141d80d6a412010cc080d010b0b2051200541206a290300225258204f200541286a290300225058204f2050511b0d0020402011290300370300203f201829030037030020382016290300370300202d2013290300370300202b202329030037030020272022290300370300200120523703a804200120012903d80d370340200120012903c803370388032001201f360200200120503703b0044101212c20014101360230201f2110205221512050214e2050214f0b034020122105200f450d010240200141c8036a2005410c6a2209460d00200f41546a210f2005412c6a21122009200141c8036a412010cc080d010b0b200541086a28020041306c210f20052802002109034020092105200f450d01024020014188056a2005460d00200f41506a210f200541306a2109200520014188056a412010cc080d010b0b204e214f2051200541206a290300225258204e200541286a290300225058204e2050511b0d0020402017290300370300203f201929030037030020382007290300370300202d2013290300370300202b202329030037030020272022290300370300200120523703a8042001200129038805370340200120012903c803370388032001201f360200200120503703b0044100212c20014100360230201f2110205221512050214e2050214f0b20012802900421072014211f20142020470d000b0b200141003602d003200142043703c803202c20106a21454101211720070d01410021050c210b2037ad4220862029ad84224e2036ad422086201dad84224f2035204a4b22201b2250a721140240204a203520201b2221410274220f450d002014200f6a211f410121054100211c2014210920142112034002400240201c4101710d00201f20096b41027620054d0d03200920054102746a21090c010b201f2009460d020b2012280200221c28020041016a220541014d0d23201c2005360200200928020022052802080d0c201241046a21122005417f3602080240200528020c221e450d00201e201e280200417f6a360200200528020c221e2802000d00201e410c6a10c806200528020c41046a221e201e280200417f6a360200200528020c221e41046a2802000d00201e102c0b200941046a21092005201c36020c4101211c2005200528020841016a36020841002105201f2012470d000b0b2021450d0b2035204a20201b221e0d014100410041b887c400103f000b204541017121134100212520072105410021200340200120203602a001200520204d0d14200128028804221220204102746a280200220528020841016a220f41004c0d15202041016a21192005200f3602082001200541086a220936028c0220012005410c6a36028802024020052d00300d0020202105024020200d0020012802800141086a28020021050b200128029004220f2005417f6a22054d0d17201220054102746a280200220528020841016a220f41004c0d182005200f3602082001200541086a3602dc0d20012005410c6a3602d80d02400240201528020022050d00201921050c010b2000280200221f2005412c6c6a21224100211403400240024020012802880241046a2205201f410c6a220f460d00200f2005412010cc080d010b201f41086a22232802002221450d00202141306c211e20012802d80d41046a221c201f28020022096b2112410021054100210f0240034020122005460d01200920056a201c412010cc08450d01200f41016a210f201e200541306a2205470d000c020b0b200920056a220f41286a2209290300214e200f41206a2212290300214f200141a8046a41086a290300215120012903a80421500240024002402020410171450d0020130d01427f204e20517c204f20507c2250204f54221cad7c224f201c204f204e54204f204e511b221c1b214e427f2050201c1b214f0c020b024020130d004200204e20517d204f205054ad7d2251204f20507d2250204f562051204e562051204e511b221c1b214e42002050201c1b214f0c020b427f204e20517c204f20507c2250204f54221cad7c224f201c204f204e54204f204e511b221c1b214e427f2050201c1b214f0c010b4200204e20517d204f205054ad7d2251204f20507d2250204f562051204e562051204e511b221c1b214e42002050201c1b214f0b0240204f204e84500d002009204e3703002012204f3703000c010b2001280284022109200f200f41306a201e20056b41506a10ca081a20232021417f6a360200200120012802800241016a360280024100201720092014461b2117024020012802a001222020012802002210470d0020012802300d00202021100c010b200128029004220520204d0d1c20012802880420204102746a280200220528020041016a220f41014d0d252005200f3602002020210f024020200d0020012802800141086a280200210f0b2001280290042209200f417f6a220f4d0d1d200128028804200f4102746a280200220f28020041016a220941014d0d25200f20093602000240202520012802cc03470d00200141c8036a10ae0120012802d00321250b20012802c80320254103746a2209200f360204200920053602002001202541016a22253602d0030b201441016a2114201f412c6a221f2022470d000b202041016a21050b200128029004220f20054100200128021041086a280200417f6a20204b1b22054d0d1b20012802880420054102746a280200220528020841016a220f41004c0d1c2005200f3602082001200541086a220936028c0520012005410c6a36028805024020152802002205450d002000280200221f2005412c6c6a21224100211403400240024020012802880241046a2205201f410c6a220f460d00200f2005412010cc080d010b201f41086a22232802002221450d00202141306c211e20012802880541046a221c201f28020022096b2112410021054100210f0240034020122005460d01200920056a201c412010cc08450d01200f41016a210f201e200541306a2205470d000c020b0b200920056a220f41286a2209290300214e200f41206a2212290300214f200141a8046a41086a290300215120012903a80421500240024002402020410171450d0020130d014200204e20517d204f205054ad7d2251204f20507d2250204f562051204e562051204e511b221c1b214e42002050201c1b214f0c020b024020130d00427f204e20517c204f20507c2250204f54221cad7c224f201c204f204e54204f204e511b221c1b214e427f2050201c1b214f0c020b4200204e20517d204f205054ad7d2251204f20507d2250204f562051204e562051204e511b221c1b214e42002050201c1b214f0c010b427f204e20517c204f20507c2250204f54221cad7c224f201c204f204e54204f204e511b221c1b214e427f2050201c1b214f0b0240204f204e84500d002009204e3703002012204f3703000c010b2001280284022109200f200f41306a201e20056b41506a10ca081a20232021417f6a360200200120012802800241016a360280024100201720092014461b2117024020012802a001222020012802002210470d0020012802304101470d00202021100c010b200128029004220520204d0d2020012802880420204102746a280200220528020041016a220f41014d0d252005200f3602002001280290042209202041016a4100200128021041086a280200417f6a20204b1b220f4d0d21200128028804200f4102746a280200220f28020041016a220941014d0d25200f20093602000240202520012802cc03470d00200141c8036a10ae0120012802d00321250b20012802c80320254103746a2209200f360204200920053602002001202541016a22253602d0030b201441016a2114201f412c6a221f2022470d000b200128028c052209280200210f0b2009200f417f6a36020020012802dc0d22052005280200417f6a360200200128028c022209280200210f0b2009200f417f6a36020020012802900421052019212020192007460d1f0c000b0b204f204e20201b224ea7221c280200220928020041016a220541014d0d1f20092005360200201428020022052802080d1c2005417f3602080240200528020c2212450d0020122012280200417f6a360200200528020c22122802000d002012410c6a10c806200528020c41046a22122012280200417f6a360200200528020c221241046a2802000d002012102c0b204e422088214e2050422088214f2005200936020c2005200528020841016a360208201e4102742109201c21050340200528020022122012280200417f6a3602000240200528020022122802000d002012410c6a10c806200528020041046a22122012280200417f6a3602002005280200221241046a2802000d002012102c0b200541046a21052009417c6a22090d000b2048204ea7410274204e5022051b214802404100201c20051b2205450d002048450d002005102c0b201421050340200528020022092009280200417f6a3602000240200528020022092802000d002009410c6a10c806200528020041046a22092009280200417f6a3602002005280200220941046a2802000d002009102c0b200541046a2105200f417c6a220f0d000b2047204fa7410274204f5022051b2147024020050d002047450d002014102c0b20342034280200417f6a220f36020041012105200f0d222034410c6a10c806203441046a220f200f280200417f6a220f360200200f0d222034102c0c220b2030211c20302031470d2520012802e8022205450d2920012802f002211c20012802ec02210f200521090240034020052f01322112200f450d01200f417f6a210f200520124102746a41a0036a280200210520092802a00321090c000b0b200141ec0d6a2012360200200141e80d6a20053602002001200f3602e40d200141003602e00d200120093602dc0d2001200f3602d80d0c2a0b41fcaec8004118200141980e6a41d887c4004198e9c4001040000b41fcaec8004118200141980e6a41d887c40041a8e9c4001040000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b41fcaec8004118200141980e6a41d887c4004198e9c4001040000b41fcaec8004118200141980e6a41d887c40041a8e9c4001040000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b4100410041a887c400103f000b201f200741c887c400103f000b41fcaec8004118200141980e6a41d887c40041e887c4001040000b201f200541f887c400103f000b41fcaec8004118200141980e6a41d887c400418888c4001040000b200f2005419888c400103f000b41fcaec8004118200141980e6a41d887c40041a888c4001040000b200f200541b888c400103f000b41fcaec8004118200141980e6a41d887c40041c888c4001040000b2020200541d888c400103f000b41fcaec8004118200141980e6a41d887c40041e888c4001040000b2005200f41f888c400103f000b41fcaec8004118200141980e6a41d887c400418889c4001040000b20202005419889c400103f000b200f200941a889c400103f000b2005200f41b889c400103f000b41fcaec8004118200141980e6a41d887c40041c889c4001040000b2020200541d889c400103f000b200f200941e889c400103f000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b2001280230212c0b024020102005417f6a470d00202c4101460d030b41c0001032220f450d0a200f200129038803370000200f2001290340370020200f41186a2027290300370000200f41106a202b290300370000200f41086a202d290300370000200f41286a2040290300370000200f41306a203f290300370000200f41386a203829030037000002400240204520464b0d00204a417f6a2221450d01204a4101204a41014b1b417f6a212020014188056a200f6b211c200141d80d6a200f6b21124100211e024002400240024002400340201e2209204a460d01202920094102746a221f280200220528020041016a221e41014d0d082005201e360200200528020841016a221e41004c0d022005201e3602082016200541286a2900003703002018200541206a2900003703002011200541186a29000037030020052005280208417f6a360208200120052900103703d80d20052005280200417f6a221e3602000240201e0d002005410c6a10c806200541046a221e201e280200417f6a221e360200201e0d002005102c0b200941016a211e20092020460d032029201e4102746a2214280200220528020041016a220941014d0d0820052009360200200528020841016a220941004c0d042005200936020820014188056a41186a200541286a29000037030020014188056a41106a200541206a29000037030020014188056a41086a200541186a29000037030020052005280208417f6a360208200120052900103703880520052005280200417f6a2209360200024020090d002005410c6a10c806200541046a22092009280200417f6a220936020020090d002005102c0b4100210502400340200541c000460d01024020122005460d00200f20056a2109200541206a21052009200141d80d6a412010cc080d010b0b410021050340200541c000460d01201c2005460d09200f20056a2109200541206a2105200920014188056a412010cc080d000c090b0b201f280200220928020041016a220541014d0d0820092005360200201428020022052802080d052005417f3602080240200528020c221f450d00201f201f280200417f6a360200200528020c221f2802000d00201f410c6a10c806200528020c41046a221f201f280200417f6a360200200528020c221f41046a2802000d00201f102c0b2005200936020c2005200528020841016a360208201e2021470d000c070b0b204a204a41b88ac400103f000b41fcaec8004118200141980e6a41d887c40041c88ac4001040000b201e204a41d88ac400103f000b41fcaec8004118200141980e6a41d887c40041e88ac4001040000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b02402035417f6a2221450d0020354101203541014b1b417f6a212020014188056a200f6b211c200141d80d6a200f6b21124100211e024002400240024002400340201e22092035460d01201d20094102746a221f280200220528020041016a221e41014d0d082005201e360200200528020841016a221e41004c0d022005201e3602082016200541286a2900003703002018200541206a2900003703002011200541186a29000037030020052005280208417f6a360208200120052900103703d80d20052005280200417f6a221e3602000240201e0d002005410c6a10c806200541046a221e201e280200417f6a221e360200201e0d002005102c0b200941016a211e20092020460d03201d201e4102746a2214280200220528020041016a220941014d0d0820052009360200200528020841016a220941004c0d042005200936020820014188056a41186a200541286a29000037030020014188056a41106a200541206a29000037030020014188056a41086a200541186a29000037030020052005280208417f6a360208200120052900103703880520052005280200417f6a2209360200024020090d002005410c6a10c806200541046a22092009280200417f6a220936020020090d002005102c0b4100210502400340200541c000460d01024020122005460d00200f20056a2109200541206a21052009200141d80d6a412010cc080d010b0b410021050340200541c000460d01201c2005460d08200f20056a2109200541206a2105200920014188056a412010cc080d000c080b0b201f280200220928020041016a220541014d0d0820092005360200201428020022052802080d052005417f3602080240200528020c221f450d00201f201f280200417f6a360200200528020c221f2802000d00201f410c6a10c806200528020c41046a221f201f280200417f6a360200200528020c221f41046a2802000d00201f102c0b2005200936020c2005200528020841016a360208201e2021470d000c060b0b2035203541f889c400103f000b41fcaec8004118200141980e6a41d887c40041888ac4001040000b201e203541988ac400103f000b41fcaec8004118200141980e6a41d887c40041a88ac4001040000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b201b28020041016a220541014d0d01201b2005360200024020242802080d002024417f3602080240202428020c2205450d0020052005280200417f6a360200202428020c22052802000d002005410c6a10c806202428020c41046a22052005280200417f6a360200202428020c220541046a2802000d002005102c0b2024201b36020c2024202428020841016a360208200f102c0c040b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b202428020041016a220541014d0d0020242005360200201b2802080d01201b417f3602080240201b28020c2205450d0020052005280200417f6a360200201b28020c22052802000d002005410c6a10c806201b28020c41046a22052005280200417f6a360200201b28020c220541046a2802000d002005102c0b201b202436020c201b201b28020841016a360208200f102c0c020b00000b41d4afc8004110200141980e6a41a8ebc40041c8ebc4001040000b20012802c803221f20254103746a211220012802cc03211e201f210f02400240024002402025450d00201f21090240034020092802002205450d01024002402005200941046a280200220f10ca060d00200f200510ca06450d01200f2802080d07200f417f3602080240200f28020c221c450d00201c201c280200417f6a360200200f28020c221c2802000d00201c410c6a10c806200f28020c41046a221c201c280200417f6a360200200f28020c221c41046a2802000d00201c102c0b200f410036020c200f200f28020841016a3602080c010b20052802080d052005417f3602080240200528020c221c450d00201c201c280200417f6a360200200528020c221c2802000d00201c410c6a10c806200528020c41046a221c201c280200417f6a360200200528020c221c41046a2802000d00201c102c0b2005410036020c2005200528020841016a3602080b200f200f280200417f6a221c3602000240201c0d00200f410c6a10c806200f41046a221c201c280200417f6a221c360200201c0d00200f102c0b20052005280200417f6a220f3602000240200f0d002005410c6a10c806200541046a220f200f280200417f6a220f360200200f0d002005102c0b200941086a22092012470d000c030b0b200941086a210f0b2012200f460d000340200f2205280200220f200f280200417f6a36020002402005280200220f2802000d00200f410c6a10c806200528020041046a220f200f280200417f6a3602002005280200220f41046a2802000d00200f102c0b200541086a210f200541046a220528020022092009280200417f6a3602000240200528020022092802000d002009410c6a10c806200528020041046a22092009280200417f6a3602002005280200220541046a2802000d002005102c0b2012200f470d000b0b201e4103742044201e1b21440240201e450d002044450d00201f102c0b0240200128029004220f450d002001280288042105200f410274210f0340200528020022092009280200417f6a3602000240200528020022092802000d002009410c6a10c806200528020041046a22092009280200417f6a3602002005280200220941046a2802000d002009102c0b200541046a2105200f417c6a220f0d000b0b200128028c042205410274204320051b21430240200128028804410020051b2205450d002043450d002005102c0b0240204a450d002029210503402005280200220f200f280200417f6a36020002402005280200220f2802000d00200f410c6a10c806200528020041046a220f200f280200417f6a3602002005280200220f41046a2802000d00200f102c0b200541046a2105201a417c6a221a0d000b0b2037410274204220371b214202402029410020371b2205450d002042450d002005102c0b20342034280200417f6a2205360200024020050d002034410c6a10c806203441046a22052005280200417f6a220536020020050d002034102c0b02402035450d00201d210503402005280200220f200f280200417f6a36020002402005280200220f2802000d00200f410c6a10c806200528020041046a220f200f280200417f6a3602002005280200220f41046a2802000d00200f102c0b200541046a21052002417c6a22020d000b0b201741ff017121052036410274204120361b21412036450d022041450d02201d102c0c020b41d4afc8004110200141980e6a41a8ebc40041b8ebc4001040000b41d4afc8004110200141980e6a41a8ebc40041b8ebc4001040000b202a202a280200417f6a220f3602000240200f0d00202a410c6a10c806202a41046a220f200f280200417f6a220f360200200f0d00202a102c0b201b201b280200417f6a220f3602000240200f0d00201b410c6a10c806201b41046a220f200f280200417f6a220f360200200f0d00201b102c0b20242024280200417f6a220f3602000240200f0d002024410c6a10c806202441046a220f200f280200417f6a220f360200200f0d002024102c0b200128028402211c0c010b201b201b280200417f6a2205360200024020050d00201b410c6a10c806201b41046a22052005280200417f6a220536020020050d00201b102c0b20242024280200417f6a2205360200024020050d002024410c6a10c806202441046a22052005280200417f6a220536020020050d002024102c0b410121050b202e20056a212e200028020021052015280200220f201c4b0d000b0b201c200f419887c400103f000b201c200f418887c400103f000b41ecd0c800412b4198d1c800103c000b1039000b4100211c200141e80d6a4100360200200141003602dc0d0b2001201c3602f00d20014188056a200141d80d6a10cb06024020012d00a8054102460d00034020012802ac0522052005280200417f6a220f3602000240200f0d002005410c6a10c806200541046a220f200f280200417f6a220f360200200f0d002005102c0b20014188056a200141d80d6a10cb0620012d00a8054102470d000b0b024020012802dc0d220f450d00200f2802002105200f102c2005450d0003402005280200210f2005102c200f2105200f0d000b0b200141a00e6a24000ba50302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b220342ffff03420010c808200441286a2002200342ffff03420010c708200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220710c8080240024002402004290318220842808004544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200710c8082004290308220342808004544100200441086a41086a290300501b450d012008a741ffff037122050d0241f0bcc3004119419cbdc300103c000b2004411136024c20044194aac80036024841a5aac80041de00200441c8006a418cbdc300419cbdc3001040000b2004411136024c20044194aac80036024841a5aac80041de00200441c8006a418cbdc300419cbdc3001040000b200441d0006a24002003a741ffff037141ffff036c20056e0bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42227e2204422088a722020d022004a722014100480d022002454101742105024002400240024002402000280200410020031b22020d002001450d010c030b200341226c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141226e3602000b0f0b2005450d001039000b103b000bc7ae0103187f057e9e017f23004180026b22042400200441b8016a4200370300200441b0016a4280808080c000370300200441a0016a420037030020044198016a4280808080c00037030020044188016a420037030020044180016a4280808080c000370300200441f0006a4200370300200441e8006a4280808080c000370300200441d8006a4200370300200441d0006a4280808080c000370300200441c0006a4200370300200441386a4280808080c000370300200441286a4200370300200441206a4280808080c000370300200441106a4200370300200442043703a8012004420437039001200442043703782004420437036020044204370348200442043703302004420437031820044280808080c000370308200442043703002001280200220520012802082206412c6c22076a210820012802042109200521010240024002402006450d00200441b4016a210a200441a8016a210b2004419c016a210c20044190016a210d20044184016a210e200441f8006a210f200441ec006a2110200441e0006a2111200441d4006a2112200441c8006a21132004413c6a2114200441306a2115200441246a2116200441186a21172004410c6a2118200741546a2106200441e0016a41086a2119200441e0016a41106a211a200441e0016a41186a211b2005210703402007290204211c2019200741146a290200370300201a2007411c6a290200370300201b200741246a2902003703002004200729020c3703e0012007412c6a210120072802002207450d01200441c0016a41186a201b290300221d370300200441c0016a41106a201a290300221e370300200441c0016a41086a2019290300221f370300200420042903e00122203703c001201b201d370300201a201e3703002019201f370300200420203703e00102400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240201c422088a70e11000105060708090a0b0c0d0e0f10111213020b201ca7222141226c202220211b21222007410020211b2207450d242022450d242007102c0c240b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c230b20032802082221450d02202141057441606a41057641016a21252003280200212141002123034020072021460d0220212007412010cc08450d02202141206a21212025202341016a2223470d000c030b0b20004281808080103702000c210b202341ffff034b2221450d1e0b20004281808080203702000c1f0b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c1f0b024020032802082221450d00202141057441606a41057641016a212520032802002121410021230240034020072021460d0120212007412010cc08450d01202141206a21212025202341016a2223470d000c020b0b202341ffff034b2221450d1c0b20004281808080203702000c1e0b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c1e0b024020032802082221450d00202141057441606a41057641016a212520032802002121410021230240034020072021460d0120212007412010cc08450d01202141206a21212025202341016a2223470d000c020b0b202341ffff034b2221450d1a0b20004281808080203702000c1d0b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c1d0b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d180b20004281808080203702000c1c0b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c1c0b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d160b20004281808080203702000c1b0b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c1b0b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d140b20004281808080203702000c1a0b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c1a0b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d120b20004281808080203702000c190b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c190b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d100b20004281808080203702000c180b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c180b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d0e0b20004281808080203702000c170b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c170b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d0c0b20004281808080203702000c160b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c160b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d0a0b20004281808080203702000c150b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c150b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d080b20004281808080203702000c140b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c140b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d060b20004281808080203702000c130b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c130b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d040b20004281808080203702000c120b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c120b024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d020b20004281808080203702000c110b0240024020022802082221450d00202141057441606a41057641016a212320022802002121410021240340200441e0016a2021460d022021200441e0016a412010cc08450d02202141206a21212023202441016a2224470d000b0b20004281808080203702000c110b0240024020032802082221450d00202141057441606a41057641016a212320032802002121410021250240034020072021460d0120212007412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2026202520211b2126200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2029202520211b2129200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b202b202520211b212b200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b202d202520211b212d20074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b202f202520211b212f200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2031202520211b2131200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2033202520211b2133200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2035202520211b213520074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2037202520211b2137200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2039202520211b2139200741d4026a2127200741d2026a2f0100213a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b203b202520211b213b200741f6026a2127200741f4026a2f0100213c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b203d202520211b213d20074198036a212720074196036a2f0100213e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b203f202520211b213f200741ba036a2127200741b8036a2f010021402003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2041202520211b2141200741dc036a2127200741da036a2f010021422003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2043202520211b2143200741fe036a2127200741fc036a2f010021442003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c110b2045202520211b2145024020042802bc01222120042802b801470d00200a2021410110f90120042802bc0121210b20042802b401202141c4006c6a222120453b0140202120263b0104202120243602002021413e6a20443b01002021413c6a20433b01002021413a6a20423b0100202141386a20413b0100202141366a20403b0100202141346a203f3b0100202141326a203e3b0100202141306a203d3b01002021412e6a203c3b01002021412c6a203b3b01002021412a6a203a3b0100202141286a20393b0100202141266a20383b0100202141246a20373b0100202141226a20363b0100202141206a20353b01002021411e6a20343b01002021411c6a20333b01002021411a6a20323b0100202141186a20313b0100202141166a20303b0100202141146a202f3b0100202141126a202e3b0100202141106a202d3b01002021410e6a202c3b01002021410c6a202b3b01002021410a6a202a3b0100202141086a20293b0100202141066a20283b0100200420042802bc0141016a3602bc010c0f0b2046202520211b2146200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2047202520211b2147200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2048202520211b2148200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2049202520211b214920074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b204a202520211b214a200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b204b202520211b214b200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b204c202520211b214c200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b204d202520211b214d20074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b204e202520211b214e200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b204f202520211b214f200741d4026a2127200741d2026a2f0100213a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2050202520211b2150200741f6026a2127200741f4026a2f0100213c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2051202520211b215120074198036a212720074196036a2f0100213e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2052202520211b2152200741ba036a2127200741b8036a2f010021402003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2053202520211b2153200741dc036a2127200741da036a2f010021422003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c100b2054202520211b2154024020042802b001222120042802ac01470d00200b2021410110f80120042802b00121210b20042802a80120214106746a222120543b013c202120463b0104202120243602002021413a6a20423b0100202141386a20533b0100202141366a20403b0100202141346a20523b0100202141326a203e3b0100202141306a20513b01002021412e6a203c3b01002021412c6a20503b01002021412a6a203a3b0100202141286a204f3b0100202141266a20383b0100202141246a204e3b0100202141226a20363b0100202141206a204d3b01002021411e6a20343b01002021411c6a204c3b01002021411a6a20323b0100202141186a204b3b0100202141166a20303b0100202141146a204a3b0100202141126a202e3b0100202141106a20493b01002021410e6a202c3b01002021410c6a20483b01002021410a6a202a3b0100202141086a20473b0100202141066a20283b0100200420042802b00141016a3602b0010c0e0b2055202520211b2155200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2056202520211b2156200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2057202520211b2157200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2058202520211b215820074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2059202520211b2159200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b205a202520211b215a200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b205b202520211b215b200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b205c202520211b215c20074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b205d202520211b215d200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b205e202520211b215e200741d4026a2127200741d2026a2f0100213a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b205f202520211b215f200741f6026a2127200741f4026a2f0100213c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2060202520211b216020074198036a212720074196036a2f0100213e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2061202520211b2161200741ba036a2127200741b8036a2f010021402003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0f0b2062202520211b2162024020042802a401222120042802a001470d00200c2021410110f70120042802a40121210b200428029c012021413c6c6a222120623b0138202120553b010420212024360200202141366a20403b0100202141346a20613b0100202141326a203e3b0100202141306a20603b01002021412e6a203c3b01002021412c6a205f3b01002021412a6a203a3b0100202141286a205e3b0100202141266a20383b0100202141246a205d3b0100202141226a20363b0100202141206a205c3b01002021411e6a20343b01002021411c6a205b3b01002021411a6a20323b0100202141186a205a3b0100202141166a20303b0100202141146a20593b0100202141126a202e3b0100202141106a20583b01002021410e6a202c3b01002021410c6a20573b01002021410a6a202a3b0100202141086a20563b0100202141066a20283b0100200420042802a40141016a3602a4010c0d0b2063202520211b2163200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b2064202520211b2164200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b2065202520211b2165200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b2066202520211b216620074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b2067202520211b2167200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b2068202520211b2168200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b2069202520211b2169200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b206a202520211b216a20074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b206b202520211b216b200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b206c202520211b216c200741d4026a2127200741d2026a2f0100213a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b206d202520211b216d200741f6026a2127200741f4026a2f0100213c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b206e202520211b216e20074198036a212720074196036a2f0100213e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0e0b206f202520211b216f02402004280298012221200428029401470d00200d2021410110f60120042802980121210b200428029001202141386c6a2221206f3b0134202120633b010420212024360200202141326a203e3b0100202141306a206e3b01002021412e6a203c3b01002021412c6a206d3b01002021412a6a203a3b0100202141286a206c3b0100202141266a20383b0100202141246a206b3b0100202141226a20363b0100202141206a206a3b01002021411e6a20343b01002021411c6a20693b01002021411a6a20323b0100202141186a20683b0100202141166a20303b0100202141146a20673b0100202141126a202e3b0100202141106a20663b01002021410e6a202c3b01002021410c6a20653b01002021410a6a202a3b0100202141086a20643b0100202141066a20283b0100200420042802980141016a360298010c0c0b2070202520211b2170200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2071202520211b2171200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2072202520211b2172200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2073202520211b217320074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2074202520211b2174200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2075202520211b2175200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2076202520211b2176200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2077202520211b217720074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2078202520211b2178200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b2079202520211b2179200741d4026a2127200741d2026a2f0100213a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b207a202520211b217a200741f6026a2127200741f4026a2f0100213c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0d0b207b202520211b217b0240200428028c012221200428028801470d00200e2021410110f501200428028c0121210b200428028401202141346c6a2221207b3b0130202120703b0104202120243602002021412e6a203c3b01002021412c6a207a3b01002021412a6a203a3b0100202141286a20793b0100202141266a20383b0100202141246a20783b0100202141226a20363b0100202141206a20773b01002021411e6a20343b01002021411c6a20763b01002021411a6a20323b0100202141186a20753b0100202141166a20303b0100202141146a20743b0100202141126a202e3b0100202141106a20733b01002021410e6a202c3b01002021410c6a20723b01002021410a6a202a3b0100202141086a20713b0100202141066a20283b01002004200428028c0141016a36028c010c0b0b207c202520211b217c200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b207d202520211b217d200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b207e202520211b217e200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b207f202520211b217f20074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208001202520211b218001200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208101202520211b218101200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208201202520211b218201200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208301202520211b21830120074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208401202520211b218401200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208501202520211b218501200741d4026a2127200741d2026a2f0100213a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0c0b208601202520211b21860102402004280280012221200428027c470d00200f2021410110f40120042802800121210b2004280278202141306c6a22212086013b012c2021207c3b0104202120243602002021412a6a203a3b0100202141286a2085013b0100202141266a20383b0100202141246a2084013b0100202141226a20363b0100202141206a2083013b01002021411e6a20343b01002021411c6a2082013b01002021411a6a20323b0100202141186a2081013b0100202141166a20303b0100202141146a2080013b0100202141126a202e3b0100202141106a207f3b01002021410e6a202c3b01002021410c6a207e3b01002021410a6a202a3b0100202141086a207d3b0100202141066a20283b0100200420042802800141016a360280010c0a0b208701202520211b218701200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208801202520211b218801200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208901202520211b218901200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208a01202520211b218a0120074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208b01202520211b218b01200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208c01202520211b218c01200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208d01202520211b218d01200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208e01202520211b218e0120074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b208f01202520211b218f01200741b2026a2127200741b0026a2f010021382003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0b0b209001202520211b2190010240200428027422212004280270470d0020102021410110dd01200428027421210b200428026c2021412c6c6a22212090013b012820212087013b010420212024360200202141266a20383b0100202141246a208f013b0100202141226a20363b0100202141206a208e013b01002021411e6a20343b01002021411c6a208d013b01002021411a6a20323b0100202141186a208c013b0100202141166a20303b0100202141146a208b013b0100202141126a202e3b0100202141106a208a013b01002021410e6a202c3b01002021410c6a2089013b01002021410a6a202a3b0100202141086a2088013b0100202141066a20283b01002004200428027441016a3602740c090b209101202520211b219101200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209201202520211b219201200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209301202520211b219301200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209401202520211b21940120074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209501202520211b219501200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209601202520211b219601200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209701202520211b219701200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209801202520211b21980120074190026a21272007418e026a2f010021362003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c0a0b209901202520211b2199010240200428026822212004280264470d0020112021410110f301200428026821210b2004280260202141286c6a22212099013b012420212091013b010420212024360200202141226a20363b0100202141206a2098013b01002021411e6a20343b01002021411c6a2097013b01002021411a6a20323b0100202141186a2096013b0100202141166a20303b0100202141146a2095013b0100202141126a202e3b0100202141106a2094013b01002021410e6a202c3b01002021410c6a2093013b01002021410a6a202a3b0100202141086a2092013b0100202141066a20283b01002004200428026841016a3602680c080b209a01202520211b219a01200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b209b01202520211b219b01200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b209c01202520211b219c01200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b209d01202520211b219d0120074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b209e01202520211b219e01200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b209f01202520211b219f01200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b20a001202520211b21a001200741ee016a2127200741ec016a2f010021342003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c090b20a101202520211b21a1010240200428025c22212004280258470d0020122021410110f201200428025c21210b2004280254202141246c6a222120a1013b01202021209a013b0104202120243602002021411e6a20343b01002021411c6a20a0013b01002021411a6a20323b0100202141186a209f013b0100202141166a20303b0100202141146a209e013b0100202141126a202e3b0100202141106a209d013b01002021410e6a202c3b01002021410c6a209c013b01002021410a6a202a3b0100202141086a209b013b0100202141066a20283b01002004200428025c41016a36025c0c070b20a201202520211b21a201200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c080b20a301202520211b21a301200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c080b20a401202520211b21a401200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c080b20a501202520211b21a50120074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c080b20a601202520211b21a601200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c080b20a701202520211b21a701200741cc016a2127200741ca016a2f010021322003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c080b20a801202520211b21a801024020042802502221200428024c470d0020132021410110f101200428025021210b200428024820214105746a222120a8013b011c202120a2013b0104202120243602002021411a6a20323b0100202141186a20a7013b0100202141166a20303b0100202141146a20a6013b0100202141126a202e3b0100202141106a20a5013b01002021410e6a202c3b01002021410c6a20a4013b01002021410a6a202a3b0100202141086a20a3013b0100202141066a20283b01002004200428025041016a3602500c060b20a901202520211b21a901200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c070b20aa01202520211b21aa01200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c070b20ab01202520211b21ab01200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c070b20ac01202520211b21ac0120074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c070b20ad01202520211b21ad01200741aa016a2127200741a8016a2f010021302003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c070b20ae01202520211b21ae010240200428024422212004280240470d0020142021410110f001200428024421210b200428023c2021411c6c6a222120ae013b0118202120a9013b010420212024360200202141166a20303b0100202141146a20ad013b0100202141126a202e3b0100202141106a20ac013b01002021410e6a202c3b01002021410c6a20ab013b01002021410a6a202a3b0100202141086a20aa013b0100202141066a20283b01002004200428024441016a3602440c050b20af01202520211b21af01200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c060b20b001202520211b21b001200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c060b20b101202520211b21b101200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c060b20b201202520211b21b20120074188016a212720074186016a2f0100212e2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c060b20b301202520211b21b3010240200428023822212004280234470d0020152021410110ef01200428023821210b2004280230202141186c6a222120b3013b0114202120af013b010420212024360200202141126a202e3b0100202141106a20b2013b01002021410e6a202c3b01002021410c6a20b1013b01002021410a6a202a3b0100202141086a20b0013b0100202141066a20283b01002004200428023841016a3602380c040b20b401202520211b21b401200741226a21272003280200212120072f0120212841002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c050b20b501202520211b21b501200741c4006a2127200741c2006a2f0100212a2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c050b20b601202520211b21b601200741e6006a2127200741e4006a2f0100212c2003280200212141002125024002400240034020272021460d0120212027412010cc08450d01202141206a21212023202541016a2225470d000c020b0b202541ffff034b2221450d010b20004281808080203702000c050b20b701202520211b21b7010240200428022c22212004280228470d0020162021410110ee01200428022c21210b2004280224202141146c6a222120b7013b0110202120b4013b0104202120243602002021410e6a202c3b01002021410c6a20b6013b01002021410a6a202a3b0100202141086a20b5013b0100202141066a20283b01002004200428022c41016a36022c0c030b20b801202320211b21b801200741226a21272003280200212120072f0120212841002123024002400240034020272021460d0120212027412010cc08450d01202141206a21212025202341016a2223470d000c020b0b202341ffff034b2221450d010b20004281808080203702000c040b20b901202320211b21b901200741c4006a2127200741c2006a2f0100212a2003280200212141002123024002400240034020272021460d0120212027412010cc08450d01202141206a21212025202341016a2223470d000c020b0b202341ffff034b2221450d010b20004281808080203702000c040b20ba01202320211b21ba01024020042802202221200428021c470d0020172021410110ed01200428022021210b200428021820214104746a222120ba013b010c202120b8013b0104202120243602002021410a6a202a3b0100202141086a20b9013b0100202141066a20283b01002004200428022041016a3602200c020b20bb01202320211b21bb01200741226a21272003280200212120072f0120212841002123024002400240034020272021460d0120212027412010cc08450d01202141206a21212025202341016a2223470d000c020b0b202341ffff034b2221450d010b20004281808080203702000c030b20bc01202320211b21bc010240200428021422212004280210470d0020182021410110ec01200428021421210b200428020c2021410c6c6a222120bc013b0108202120bb013b010420212024360200202141066a20283b01002004200428021441016a3602140c010b20bd01202320211b21bd010240200428020822212004280204470d0020042021410110eb01200428020821210b200428020020214103746a222120bd013b0104202120243602002004200428020841016a3602080b201ca7222141226c20be0120211b21be012007410020211b2207450d0120be01450d012007102c0c010b024020074100201ca722191b2207450d00201941226c450d002007102c0b024020082001460d0003400240200141046a2802002207450d00200741226c450d002001280200102c0b2001412c6a2101200641546a22060d000b0b02402009450d002009412c6c450d002005102c0b200410e9010c040b200641546a21062001210720012008470d000c020b0b20082001460d00034020012206412c6a21010240200641046a2802002207450d00200741226c450d002006280200102c0b20082001470d000b0b02402009450d002009412c6c450d002005102c0b200041046a200441c00110c9081a200041003602000b20044180026a24000bb30201037f23004180016b2202240002400240024002400240200128020022034110710d002000280200210420034120710d012004ad2001104921000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a888c0004102200220006a4180016a410020006b104d21000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a888c0004102200220006a4180016a410020006b104d21000b20024180016a240020000f0b2004418001419888c0001058000b2004418001419888c0001058000bca0202027f017e23004180016b2202240002400240024002400240200128020022034110710d002000290300210420034120710d0120042001104921000c020b20002903002104418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141a888c0004102200220006a41800120006b104d21000c010b418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141a888c0004102200220006a41800120006b104d21000b20024180016a240020000f0b2000418001419888c0001058000b2000418001419888c0001058000bf50401027f024020002802042201450d0020002802002202450d002001410374450d002002102c0b0240200041106a2802002201450d00200028020c2202450d002001410c6c450d002002102c0b02402000411c6a2802002201450d0020002802182202450d002001410474450d002002102c0b0240200041286a2802002201450d0020002802242202450d00200141146c450d002002102c0b0240200041346a2802002201450d0020002802302202450d00200141186c450d002002102c0b0240200041c0006a2802002201450d00200028023c2202450d002001411c6c450d002002102c0b0240200041cc006a2802002201450d0020002802482202450d002001410574450d002002102c0b0240200041d8006a2802002201450d0020002802542202450d00200141246c450d002002102c0b0240200041e4006a2802002201450d0020002802602202450d00200141286c450d002002102c0b0240200041f0006a2802002201450d00200028026c2202450d002001412c6c450d002002102c0b0240200041fc006a2802002201450d0020002802782202450d00200141306c450d002002102c0b024020004188016a2802002201450d002000280284012202450d00200141346c450d002002102c0b024020004194016a2802002201450d002000280290012202450d00200141386c450d002002102c0b0240200041a0016a2802002201450d00200028029c012202450d002001413c6c450d002002102c0b0240200041ac016a2802002201450d0020002802a8012202450d00200141ffffff1f71450d002002102c0b0240200041b8016a2802002201450d0020002802b4012200450d00200141c4006c450d002000102c0b0bd10202027f017e23004180016b220224002000280200210002400240024002400240200128020022034110710d002000290300210420034120710d0120042001104921000c020b20002903002104418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141a888c0004102200220006a41800120006b104d21000c010b418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141a888c0004102200220006a41800120006b104d21000b20024180016a240020000f0b2000418001419888c0001058000b2000418001419888c0001058000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff017122042001470d02200141037422024100480d0220042001464102742104024002400240024002402000280200410020031b22010d002002450d010c030b200341037422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024103763602000b0f0b2004450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad420c7e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b2003410c6c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a2001410c6e3602000b0f0b2005450d001039000b103b000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff007122042001470d02200141047422024100480d0220042001464102742104024002400240024002402000280200410020031b22010d002002450d010c030b200341047422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024104763602000b0f0b2004450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42147e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341146c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141146e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42187e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341186c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141186e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad421c7e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b2003411c6c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a2001411c6e3602000b0f0b2005450d001039000b103b000bd70101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffff3f7122042001470d02200141057422024100480d0220042001464102742104024002400240024002402000280200410020031b22010d002002450d010c030b200341057422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024105763602000b0f0b2004450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42247e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341246c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141246e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42287e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341286c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141286e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42307e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341306c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141306e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42347e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341346c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141346e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42387e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341386c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141386e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad423c7e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b2003413c6c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a2001413c6e3602000b0f0b2005450d001039000b103b000bd70101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffff1f7122042001470d02200141067422024100480d0220042001464102742104024002400240024002402000280200410020031b22010d002002450d010c030b200341067422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024106763602000b0f0b2004450d001039000b103b000bd90103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42c4007e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341c4006c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141c4006e3602000b0f0b2005450d001039000b103b000bb4a80214077f017e017f017e057f017e087f017e017f017e087f017e027f017e017f017e017f017e017f027e230041d0026b2204240020042003360204410021052004410036021020044204370308200128020421062001280200210702400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802082203450d002003410374210841002105200441f0006a41106a21092007210a03404100210302402002280208200a290200220ba7220c4d0d00200441a8026a41026a2002280200200c4105746a220341026a2d00003a0000200441f0006a41086a200341176a29000037030020092003411f6a2d00003a0000200420032f00003b01a8022004200329000f3703702003290007210d2003280003210e410121030b4102210f200441cc016a41026a200441a8026a41026a2d00003a0000200441e8016a41086a2210200441f0006a41086a2211290300370300200441e8016a41106a221220092d00003a0000200420042f01a8023b01cc01200420042903703703e8014101210c02402003450d00200441306a41026a200441cc016a41026a2d00003a000020044180026a41086a201029030037030020044180026a41106a20122d00003a0000200420042f01cc013b0130200420042903e801370380024100210c200d2113200e210f0b200441c4016a41026a2203200441306a41026a22142d00003a0000200441d0016a41086a221520044180026a41086a2216290300370300200441d0016a41106a221720044180026a41106a22182d00003a0000200420042f01303b01c40120042004290380023703d001200c0d02200441ec006a41026a221920032d00003a0000200441b0016a41086a221a2015290300370300200441b0016a41106a221b20172d00003a0000200420042f01c4013b016c200420042903d0013703b001412210322203450d0a4100210c024020042802042215280208200b422088a741ffff037122174d0d002014201528020020174105746a220c41026a2d00003a00002011200c41176a2900003703002009200c411f6a2d00003a00002004200c2f00003b01302004200c29000f370370200c290007211c200c280003211d4101210c0b41022115200441cc016a41026a200441306a41026a2d00003a000020102011290300370300201220092d00003a0000200420042f01303b01cc01200420042903703703e801410121110240200c450d00200441186a41026a200441cc016a41026a2d00003a000020162010290300370300201820122d00003a0000200420042f01cc013b0118200420042903e8013703800241002111201c211e201d21150b200441c8016a41026a220c200441186a41026a2d00003a0000200441a8026a41086a22102016290300370300200441a8026a41106a221220182d00003a0000200420042f01183b01c80120042004290380023703a80220110d05200320042f01c8013b00002003201e37000720032015360003200320042903a80237000f200341ffff033b0120200341026a200c2d00003a0000200341176a20102903003700002003411f6a20122d00003a0000200420042f016c3b0168200420192d00003a006a200441c8006a41106a2210201b2d00003a0000200441c8006a41086a2212201a290300370300200420042903b00137034802402005200428020c470d00200441086a2005410110dd01200428021021050b200a41086a210a20042802082005412c6c6a220c428180808010370204200c2003360200200c20042f01683b010c200c410e6a20042d006a3a0000200c41136a2013370000200c410f6a200f360000200c411b6a2004290348370000200c41236a2012290300370000200c412b6a20102d00003a00002004200541016a2205360210200841786a22080d000b0b0240200641ffffffff0171450d002007102c0b200128020c211f200141106a280200212002400240200141146a2802002203450d00201f2003410c6c6a2121200441f0006a41106a210a201f21090340200941066a2f0100221841ffff03460d02200941086a2f01002108200941046a2f0100211541002103024020022802082009280200220c4d0d00200441a8026a41026a2002280200200c4105746a220341026a2d00003a0000200441f0006a41086a200341176a290000370300200a2003411f6a2d00003a0000200420032f00003b01a8022004200329000f3703702003290007210d20032800032122410121030b41022117200441cc016a41026a200441a8026a41026a2d00003a0000200441e8016a41086a220c200441f0006a41086a2212290300370300200441e8016a41106a2210200a2d00003a0000200420042f01a8023b01cc01200420042903703703e8014101211602402003450d00200441d0016a41026a200441cc016a41026a2d00003a000020044180026a41086a200c29030037030020044180026a41106a20102d00003a0000200420042f01cc013b01d001200420042903e8013703800241002116200d210b202221170b200441e0006a41026a2203200441d0016a41026a2d00003a0000200441c8006a41086a221920044180026a41086a220f290300370300200441c8006a41106a221a20044180026a41106a22112d00003a0000200420042f01d0013b0160200420042903800237034820160d04200441c4006a41026a221d20032d00003a0000200441306a41086a22072019290300370300200441306a41106a2206201a2d00003a0000200420042f01603b01442004200429034837033041c40010322203450d0b4100211602402004280204221a280208221b20154d0d00200441a8026a41026a201a28020020154105746a221641026a2d00003a00002012201641176a290000370300200a2016411f6a2d00003a0000200420162f00003b01a8022004201629000f3703702016290007211c20162800032123410121160b41022119200441cc016a41026a200441a8026a41026a2d00003a0000200c20122903003703002010200a2d00003a0000200420042f01a8023b01cc01200420042903703703e8014101211502402016450d00200441c8016a41026a200441cc016a41026a2d00003a0000200f200c290300370300201120102d00003a0000200420042f01cc013b01c801200420042903e8013703800241002115201c2113202321190b200441e8006a41026a2216200441c8016a41026a22242d00003a0000200441d0016a41086a2214200f290300370300200441d0016a41106a220e20112d00003a0000200420042f01c8013b016820042004290380023703d00120150d05200441e4006a41026a222520162d00003a0000200441b0016a41086a22262014290300370300200441b0016a41106a2214200e2d00003a0000200420042f01683b0164200420042903d0013703b001410021150240201b20084d0d002024201a28020020084105746a221641026a2d00003a00002012201641176a290000370300200a2016411f6a2d00003a0000200420162f00003b01c8012004201629000f3703702016290007212720162800032128410121150b41022116200441cc016a41026a200441c8016a41026a2d00003a0000200c20122903003703002010200a2d00003a0000200420042f01c8013b01cc01200420042903703703e8014101211202402015450d00200441c4016a41026a200441cc016a41026a2d00003a0000200f200c290300370300201120102d00003a0000200420042f01cc013b01c401200420042903e80137038002410021122027211e202821160b200441ec006a41026a220c200441c4016a41026a2d00003a0000200441a8026a41086a2210200f290300370300200441a8026a41106a220f20112d00003a0000200420042f01c4013b016c20042004290380023703a80220120d0f200320042f01643b01002003201337000720032019360003200320042903b00137000f200320183b0120200320042f016c3b0022200341026a20252d00003a0000200341176a20262903003700002003411f6a20142d00003a0000200341246a200c2d00003a00002003201e3700292003201636002520032018417f733b0142200320042903a802370031200341396a2010290300370000200341c1006a200f2d00003a0000200441186a41086a22102007290300370300200441186a41106a221220062d00003a0000200420042f01443b012c2004201d2d00003a002e2004200429033037031802402005200428020c470d00200441086a2005410110dd01200428021021050b20042802082005412c6c6a220c428280808020370204200c2003360200200c20042f012c3b010c200c410e6a20042d002e3a0000200c41136a200b370000200c410f6a2017360000200c411b6a2004290318370000200c41236a2010290300370000200c412b6a20122d00003a00002004200541016a22053602102009410c6a22092021470d000b0b02402020450d002020410c6c450d00201f102c0b200128021821282001411c6a2802002121200141206a2802002203450d08202820034104746a2123200441bc016a211d200441f0006a4102722111200441306a41086a21262028210802400240034020082f010c21192008280200211a20042008290204370330200441003b016c200441043602b001200420263602ec012004200441b0016a3602f8012004200441046a3602f4012004200441ec006a3602f0012004200441306a3602e801200441f0006a200441e8016a10b9040240024020042f01704101470d00412210322209450d0e20092011290100370100200941206a201141206a22162f01003b0100200941186a201141186a2218290100370100200941106a201141106a2215290100370100200941086a201141086a221729010037010020044281808080103702d401200420093602d001200441a8026a41106a200441e8016a41106a280200360200200441a8026a41086a200441e8016a41086a290300370300200420042903e8013703a802200441f0006a200441a8026a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20162f01003b010020044180026a41186a2210201829010037030020044180026a41106a2212201529010037030020044180026a41086a220f201729010037030020042011290100370380020240200c2003470d00200441d0016a2003410110e50120042802d00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602d801200541226a2105200441f0006a200441a8026a10b90420042802d401210320042f01704101460d000c020b0b41002103410221094100210c0b024020042802b00122054104460d0020042902b401210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c0b0b200420093602482004200cad4220862003ad8437024c024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441b0016a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01b0012004200529000f3703702005290007210d20052800032124410121050b41022117200441cc016a41026a200441b0016a41026a2d00003a0000200441e8016a41086a2218200441f0006a41086a2219290300370300200441e8016a41106a2215200441f0006a41106a221b2d00003a0000200420042f01b0013b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201829030037030020044180026a41106a20152d00003a0000200420042f01cc013b0118200420042903e8013703800241002110200d2113202421170b200441c8016a41026a2216200441186a41026a22252d00003a0000200441a8026a41086a220520044180026a41086a2214290300370300200441a8026a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703a80220100d022012417f732107200441c4016a41026a221020162d00003a0000200441d0016a41086a22122005290300370300200441d0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903a8023703d0010240200c2003470d00200441c8006a200c410110e5012004280250210c200428024821090b2009200c41226c6a2203201337000720102d0000210920042f01c401210620032017360003200320063b0100200341026a20093a0000200320042903d00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602504100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007211c20032800032122410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201820192903003703002015201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002016200441cc016a41026a2d00003a000020142018290300370300200e20152d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c201c211e202221090b201020162d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703a802200c0d03200841106a2108201d20042f01c4013b0000200441b0016a41086a200441c8006a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a0000200420042903483703b001200420042903a8023703d00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a220320042903b001370200200341136a201e3700002003410f6a20093600002003411b6a20042903d001370000200341076a20042900b701370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020082023470d010c0c0b0b200042013702000c080b2000201736020420004101360200200041086a20133702000c070b2000200936020420004101360200200041086a201e370200200428024c21030c060b200042013702000c0d0b2000200f36020420004101360200200041086a20133702000c030b2000201736020420004101360200200041086a200b3702000c0b0b2000201936020420004101360200200041086a20133702002003102c0c0a0b2000201536020420004101360200200041086a201e3702002003102c0b0240200641ffffffff0171450d002007102c0b2004280208210902402005450d002005412c6c210c2009210303400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b0240200428020c2203450d002003412c6c450d002009102c0b200141106a2802002203450d09200128020c220c450d092003410c6c450d09200c102c0c090b2004280248410020031b220c450d00200341226c450d00200c102c0b0240202141ffffffff0071450d002028102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d082003412c6c450d08200c102c0c080b0240202141ffffffff0071450d002028102c0b20012802242121200141286a280200211f02402001412c6a2802002203450d002021200341146c6a2128200441b0016a410c6a211d200441f0006a4102722111200441306a410c6a2126200441306a41086a2124202121080240024002400240034020082f011021192008280200211a2008290104210b20242008410c6a2801003602002004200b370330200441003b016c200441043602b001200420263602ec012004200441b0016a3602f8012004200441046a3602f4012004200441ec006a3602f0012004200441306a3602e801200441f0006a200441e8016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22162f01003b0100200941186a201141186a2218290100370100200941106a201141106a2215290100370100200941086a201141086a221729010037010020044281808080103702d401200420093602d001200441a8026a41106a200441e8016a41106a280200360200200441a8026a41086a200441e8016a41086a290300370300200420042903e8013703a802200441f0006a200441a8026a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20162f01003b010020044180026a41186a2210201829010037030020044180026a41106a2212201529010037030020044180026a41086a220f201729010037030020042011290100370380020240200c2003470d00200441d0016a2003410110e50120042802d00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602d801200541226a2105200441f0006a200441a8026a10b90420042802d401210320042f01704101460d000c020b0b41002103410221094100210c0b024020042802b00122054104460d0020042902b401210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602482004200cad4220862003ad8437024c024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441b0016a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01b0012004200529000f3703702005290007210d20052800032122410121050b41022117200441cc016a41026a200441b0016a41026a2d00003a0000200441e8016a41086a2218200441f0006a41086a2219290300370300200441e8016a41106a2215200441f0006a41106a221b2d00003a0000200420042f01b0013b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201829030037030020044180026a41106a20152d00003a0000200420042f01cc013b0118200420042903e8013703800241002110200d2113202221170b200441c8016a41026a2216200441186a41026a22252d00003a0000200441a8026a41086a220520044180026a41086a2214290300370300200441a8026a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703a80220100d022012417f732107200441c4016a41026a221020162d00003a0000200441d0016a41086a22122005290300370300200441d0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903a8023703d0010240200c2003470d00200441c8006a200c410110e5012004280250210c200428024821090b2009200c41226c6a2203201337000720102d0000210920042f01c401210620032017360003200320063b0100200341026a20093a0000200320042903d00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602504100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007211c20032800032123410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201820192903003703002015201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002016200441cc016a41026a2d00003a000020142018290300370300200e20152d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c201c211e202321090b201020162d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703a802200c0d03200841146a2108201d20042f01c4013b0000200441b0016a41086a200441c8006a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a0000200420042903483703b001200420042903a8023703d00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a220320042903b001370200200341136a201e3700002003410f6a20093600002003411b6a20042903d001370000200341076a20042900b701370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020082028470d010c060b0b200042013702000c020b2000201736020420004101360200200041086a20133702000c010b2000200936020420004101360200200041086a201e370200200428024c21030b2004280248410020031b220c450d00200341226c450d00200c102c0b0240201f450d00201f41146c450d002021102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d092003412c6c450d09200c102c0c090b0240201f450d00201f41146c450d002021102c0b20012802302121200141346a280200211f0240200141386a2802002203450d002021200341186c6a2128200441c8006a410c6a211d200441f0006a4102722111200441b0016a41106a2126200441b0016a41086a2124202121080240024002400240034020082f011421192008280200211a2008290104210b20242008410c6a2901003703002004200b3703b001200441003b016c20044104360248200420263602ec012004200441c8006a3602f8012004200441046a3602f4012004200441ec006a3602f0012004200441b0016a3602e801200441f0006a200441e8016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22162f01003b0100200941186a201141186a2218290100370100200941106a201141106a2215290100370100200941086a201141086a221729010037010020044281808080103702d401200420093602d001200441a8026a41106a200441e8016a41106a280200360200200441a8026a41086a200441e8016a41086a290300370300200420042903e8013703a802200441f0006a200441a8026a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20162f01003b010020044180026a41186a2210201829010037030020044180026a41106a2212201529010037030020044180026a41086a220f201729010037030020042011290100370380020240200c2003470d00200441d0016a2003410110e50120042802d00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602d801200541226a2105200441f0006a200441a8026a10b90420042802d401210320042f01704101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f3703702005290007210d20052800032122410121050b41022117200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a2218200441f0006a41086a2219290300370300200441e8016a41106a2215200441f0006a41106a221b2d00003a0000200420042f01483b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201829030037030020044180026a41106a20152d00003a0000200420042f01cc013b0118200420042903e8013703800241002110200d2113202221170b200441c8016a41026a2216200441186a41026a22252d00003a0000200441a8026a41086a220520044180026a41086a2214290300370300200441a8026a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703a80220100d022012417f732107200441c4016a41026a221020162d00003a0000200441d0016a41086a22122005290300370300200441d0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903a8023703d0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203201337000720102d0000210920042f01c401210620032017360003200320063b0100200341026a20093a0000200320042903d00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007211c20032800032123410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201820192903003703002015201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002016200441cc016a41026a2d00003a000020142018290300370300200e20152d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c201c211e202321090b201020162d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703a802200c0d03200841186a2108201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903a8023703d00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a201e3700002003410f6a20093600002003411b6a20042903d001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020082028470d010c060b0b200042013702000c020b2000201736020420004101360200200041086a20133702000c010b2000200936020420004101360200200041086a201e370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240201f450d00201f41186c450d002021102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d0a2003412c6c450d0a200c102c0c0a0b0240201f450d00201f41186c450d002021102c0b200128023c211f200141c0006a28020021200240200141c4006a2802002203450d00201f2003411c6c6a2121200441c8006a410c6a211d200441f0006a4102722111200441d0016a41146a2126200441d0016a41106a2124200441d0016a41086a2122201f21080240024002400240034020082f011821192008280200211a2008410c6a290100210b200829010421132024200841146a2801003602002022200b370300200420133703d001200441003b016c20044104360248200420263602ec012004200441c8006a3602f8012004200441046a3602f4012004200441ec006a3602f0012004200441d0016a3602e801200441f0006a200441e8016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22162f01003b0100200941186a201141186a2218290100370100200941106a201141106a2215290100370100200941086a201141086a221729010037010020044281808080103702b401200420093602b001200441a8026a41106a200441e8016a41106a280200360200200441a8026a41086a200441e8016a41086a290300370300200420042903e8013703a802200441f0006a200441a8026a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20162f01003b010020044180026a41186a2210201829010037030020044180026a41106a2212201529010037030020044180026a41086a220f201729010037030020042011290100370380020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a2105200441f0006a200441a8026a10b90420042802b401210320042f01704101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f3703702005290007211c20052800032123410121050b41022117200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a2218200441f0006a41086a2219290300370300200441e8016a41106a2215200441f0006a41106a221b2d00003a0000200420042f01483b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201829030037030020044180026a41106a20152d00003a0000200420042f01cc013b0118200420042903e8013703800241002110201c211e202321170b200441c8016a41026a2216200441186a41026a22252d00003a0000200441a8026a41086a220520044180026a41086a2214290300370300200441a8026a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703a80220100d022012417f732107200441c4016a41026a221020162d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903a8023703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203201e37000720102d0000210920042f01c401210620032017360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007212720032800032128410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201820192903003703002015201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002016200441cc016a41026a2d00003a000020142018290300370300200e20152d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c2027210d202821090b201020162d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703a802200c0d032008411c6a2108201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903a8023703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a200d3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020082021470d010c060b0b200042013702000c020b2000201736020420004101360200200041086a201e3702000c010b2000200936020420004101360200200041086a200d370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b02402020450d002020411c6c450d00201f102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d0b2003412c6c450d0b200c102c0c0b0b02402020450d002020411c6c450d00201f102c0b2001280248211f200141cc006a28020021200240200141d0006a2802002203450d00201f20034105746a2121200441c8006a410c6a211d200441f0006a4102722111200441a8026a41186a2126200441a8026a41106a2124200441a8026a41086a2122201f21080240024002400240034020082f011c21192008280200211a2008410c6a290100210b200829010421132024200841146a2901003703002022200b370300200420133703a802200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441a8026a3602d001200441f0006a200441d0016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22162f01003b0100200941186a201141186a2218290100370100200941106a201141106a2215290100370100200941086a201141086a221729010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e801200441f0006a200441e8016a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20162f01003b010020044180026a41186a2210201829010037030020044180026a41106a2212201529010037030020044180026a41086a220f201729010037030020042011290100370380020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a2105200441f0006a200441e8016a10b90420042802b401210320042f01704101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f3703702005290007211c20052800032123410121050b41022117200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a2218200441f0006a41086a2219290300370300200441e8016a41106a2215200441f0006a41106a221b2d00003a0000200420042f01483b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201829030037030020044180026a41106a20152d00003a0000200420042f01cc013b0118200420042903e8013703800241002110201c211e202321170b200441c8016a41026a2216200441186a41026a22252d00003a0000200441d0016a41086a220520044180026a41086a2214290300370300200441d0016a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703d00120100d022012417f732107200441c4016a41026a221020162d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203201e37000720102d0000210920042f01c401210620032017360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007212720032800032128410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201820192903003703002015201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002016200441cc016a41026a2d00003a000020142018290300370300200e20152d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c2027210d202821090b201020162d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703d001200c0d03200841206a2108201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a200d3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020082021470d010c060b0b200042013702000c020b2000201736020420004101360200200041086a201e3702000c010b2000200936020420004101360200200041086a200d370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202041ffffff3f71450d00201f102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d0c2003412c6c450d0c200c102c0c0c0b0240202041ffffff3f71450d00201f102c0b20012802542120200141d8006a28020021290240200141dc006a2802002203450d002020200341246c6a211f200441c8006a410c6a211d200441f0006a4102722111200441a8026a411c6a2126200441a8026a41186a2124200441a8026a41106a2122200441a8026a41086a2123202021160240024002400240034020162f012021192016280200211a2016410c6a290100210b201641146a29010021132016290104211e20242016411c6a280100360200202220133703002023200b3703002004201e3703a802200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441a8026a3602d001200441f0006a200441d0016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22182f01003b0100200941186a201141186a2215290100370100200941106a201141106a2217290100370100200941086a201141086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e801200441f0006a200441e8016a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20182f01003b010020044180026a41186a2210201529010037030020044180026a41106a2212201729010037030020044180026a41086a220f200829010037030020042011290100370380020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a2105200441f0006a200441e8016a10b90420042802b401210320042f01704101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f3703702005290007212720052800032128410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a2215200441f0006a41086a2219290300370300200441e8016a41106a2217200441f0006a41106a221b2d00003a0000200420042f01483b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201529030037030020044180026a41106a20172d00003a0000200420042f01cc013b0118200420042903e80137038002410021102027210d202821080b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a220520044180026a41086a2214290300370300200441d0016a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203200d37000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007212a20032800032121410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c202a211c202121090b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703d001200c0d03201641246a2116201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a201c3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a3602102016201f470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a200d3702000c010b2000200936020420004101360200200041086a201c370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b02402029450d00202941246c450d002020102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d0d2003412c6c450d0d200c102c0c0d0b02402029450d00202941246c450d002020102c0b20012802602120200141e4006a28020021290240200141e8006a2802002203450d002020200341286c6a211f200441c8006a410c6a211d200441f0006a4102722111200441a8026a41206a2126200441a8026a41186a2124200441a8026a41106a2122200441a8026a41086a2123202021160240024002400240034020162f012421192016280200211a2016410c6a290100210b201641146a29010021132016290104211e20242016411c6a290100370300202220133703002023200b3703002004201e3703a802200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441a8026a3602d001200441f0006a200441d0016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22182f01003b0100200941186a201141186a2215290100370100200941106a201141106a2217290100370100200941086a201141086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e801200441f0006a200441e8016a10b9044101210c4101210320042f01704101470d0141012103412221054101210c034020044180026a41206a220a20182f01003b010020044180026a41186a2210201529010037030020044180026a41106a2212201729010037030020044180026a41086a220f200829010037030020042011290100370380020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a2203200429038002370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a2105200441f0006a200441e8016a10b90420042802b401210320042f01704101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f3703702005290007212720052800032128410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a2215200441f0006a41086a2219290300370300200441e8016a41106a2217200441f0006a41106a221b2d00003a0000200420042f01483b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a000020044180026a41086a201529030037030020044180026a41106a20172d00003a0000200420042f01cc013b0118200420042903e80137038002410021102027210d202821080b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a220520044180026a41086a2214290300370300200441d0016a41106a220a20044180026a41106a220e2d00003a0000200420042f01183b01c80120042004290380023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203200d37000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007212a20032800032121410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e801370380024100210c202a211c202121090b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c40120042004290380023703d001200c0d03201641286a2116201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a201c3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a3602102016201f470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a200d3702000c010b2000200936020420004101360200200041086a201c370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b02402029450d00202941286c450d002020102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d0e2003412c6c450d0e200c102c0c0e0b02402029450d00202941286c450d002020102c0b200128026c2129200141f0006a280200212b0240200141f4006a2802002203450d0020292003412c6c6a2120200441c8006a410c6a211d200441f0006a410272211120044180026a41246a212620044180026a41206a212420044180026a41186a212220044180026a41106a212320044180026a41086a2128202921160240024002400240034020162f012821192016280200211a2016410c6a290100210b201641146a29010021132016411c6a290100211e2016290104210d2024201641246a2801003602002022201e370300202320133703002028200b3703002004200d37038002200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d801200420044180026a3602d001200441f0006a200441d0016a10b9040240024020042f01704101470d00412210322209450d0820092011290100370100200941206a201141206a22182f01003b0100200941186a201141186a2215290100370100200941106a201141106a2217290100370100200941086a201141086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e801200441f0006a200441e8016a10b9044101210c4101210320042f01704101470d0141012103412221054101210c0340200441a8026a41206a220a20182f01003b0100200441a8026a41186a22102015290100370300200441a8026a41106a22122017290100370300200441a8026a41086a220f2008290100370300200420112901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a220320042903a802370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a2105200441f0006a200441e8016a10b90420042802b401210320042f01704101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a0000200441f0006a41086a200541176a290000370300200441f0006a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f3703702005290007212a20052800032121410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a2215200441f0006a41086a2219290300370300200441e8016a41106a2217200441f0006a41106a221b2d00003a0000200420042f01483b01cc01200420042903703703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2015290300370300200441a8026a41106a20172d00003a0000200420042f01cc013b0118200420042903e8013703a80241002110202a211c202121080b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a2205200441a8026a41086a2214290300370300200441d0016a41106a220a200441a8026a41106a220e2d00003a0000200420042f01183b01c801200420042903a8023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203201c37000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f3703702003290007212c2003280003211f410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc01200420042903703703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c202c2127201f21090b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d032016412c6a2116201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a20273700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020162020470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a201c3702000c010b2000200936020420004101360200200041086a2027370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202b450d00202b412c6c450d002029102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d0f2003412c6c450d0f200c102c0c0f0b0240202b450d00202b412c6c450d002029102c0b20012802782129200141fc006a280200212b024020014180016a2802002203450d002029200341306c6a2120200441c8006a410c6a211d20044180026a410272211120044198016a2126200441f0006a41206a2124200441f0006a41186a2122200441f0006a41106a2123200441f0006a41086a2128202921160240024002400240034020162f012c21192016280200211a2016410c6a290100210b201641146a29010021132016411c6a290100211e2016290104210d2024201641246a2901003703002022201e370300202320133703002028200b3703002004200d370370200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441f0006a3602d00120044180026a200441d0016a10b9040240024020042f0180024101470d00412210322209450d0820092011290100370100200941206a201141206a22182f01003b0100200941186a201141186a2215290100370100200941106a201141106a2217290100370100200941086a201141086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e80120044180026a200441e8016a10b9044101210c4101210320042f0180024101470d0141012103412221054101210c0340200441a8026a41206a220a20182f01003b0100200441a8026a41186a22102015290100370300200441a8026a41106a22122017290100370300200441a8026a41086a220f2008290100370300200420112901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a220320042903a802370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a210520044180026a200441e8016a10b90420042802b401210320042f0180024101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a000020044180026a41086a200541176a29000037030020044180026a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f370380022005290007212a20052800032121410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a221520044180026a41086a2219290300370300200441e8016a41106a221720044180026a41106a221b2d00003a0000200420042f01483b01cc0120042004290380023703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2015290300370300200441a8026a41106a20172d00003a0000200420042f01cc013b0118200420042903e8013703a8024100211020212108202a211c0b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a2205200441a8026a41086a2214290300370300200441d0016a41106a220a200441a8026a41106a220e2d00003a0000200420042f01183b01c801200420042903a8023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203201c37000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f370380022003290007212c2003280003211f410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc0120042004290380023703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c201f2109202c21270b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d03201641306a2116201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a20273700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020162020470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a201c3702000c010b2000200936020420004101360200200041086a2027370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202b450d00202b41306c450d002029102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d102003412c6c450d10200c102c0c100b0240202b450d00202b41306c450d002029102c0b200128028401212b20014188016a280200212d02402001418c016a2802002203450d00202b200341346c6a2129200441c8006a410c6a211d20044180026a4102722116200441f0006a412c6a212620044198016a2124200441f0006a41206a2122200441f0006a41186a2123200441f0006a41106a2128200441f0006a41086a2121202b21110240024002400240034020112f013021192011280200211a2011410c6a290100210b201141146a29010021132011411c6a290100211e201141246a290100210d2011290104211c20242011412c6a2801003602002022200d3703002023201e370300202820133703002021200b3703002004201c370370200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441f0006a3602d00120044180026a200441d0016a10b9040240024020042f0180024101470d00412210322209450d0820092016290100370100200941206a201641206a22182f01003b0100200941186a201641186a2215290100370100200941106a201641106a2217290100370100200941086a201641086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e80120044180026a200441e8016a10b9044101210c4101210320042f0180024101470d0141012103412221054101210c0340200441a8026a41206a220a20182f01003b0100200441a8026a41186a22102015290100370300200441a8026a41106a22122017290100370300200441a8026a41086a220f2008290100370300200420162901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a220320042903a802370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a210520044180026a200441e8016a10b90420042802b401210320042f0180024101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a000020044180026a41086a200541176a29000037030020044180026a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f370380022005290007212c2005280003211f410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a221520044180026a41086a2219290300370300200441e8016a41106a221720044180026a41106a221b2d00003a0000200420042f01483b01cc0120042004290380023703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2015290300370300200441a8026a41106a20172d00003a0000200420042f01cc013b0118200420042903e8013703a80241002110201f2108202c21270b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a2205200441a8026a41086a2214290300370300200441d0016a41106a220a200441a8026a41106a220e2d00003a0000200420042f01183b01c801200420042903a8023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203202737000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f370380022003290007212e20032800032120410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc0120042004290380023703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c20202109202e212a0b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d03201141346a2111201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a202a3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020112029470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a20273702000c010b2000200936020420004101360200200041086a202a370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202d450d00202d41346c450d00202b102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d112003412c6c450d11200c102c0c110b0240202d450d00202d41346c450d00202b102c0b200128029001212d20014194016a280200212b024020014198016a2802002203450d00202d200341386c6a2129200441c8006a410c6a211d20044180026a4102722116200441a0016a212620044198016a2124200441f0006a41206a2122200441f0006a41186a2123200441f0006a41106a2128200441f0006a41086a2121202d21110240024002400240034020112f013421192011280200211a2011410c6a290100210b201141146a29010021132011411c6a290100211e201141246a290100210d2011290104211c20242011412c6a2901003703002022200d3703002023201e370300202820133703002021200b3703002004201c370370200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441f0006a3602d00120044180026a200441d0016a10b9040240024020042f0180024101470d00412210322209450d0820092016290100370100200941206a201641206a22182f01003b0100200941186a201641186a2215290100370100200941106a201641106a2217290100370100200941086a201641086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e80120044180026a200441e8016a10b9044101210c4101210320042f0180024101470d0141012103412221054101210c0340200441a8026a41206a220a20182f01003b0100200441a8026a41186a22102015290100370300200441a8026a41106a22122017290100370300200441a8026a41086a220f2008290100370300200420162901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a220320042903a802370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a210520044180026a200441e8016a10b90420042802b401210320042f0180024101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a000020044180026a41086a200541176a29000037030020044180026a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f370380022005290007212c2005280003211f410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a221520044180026a41086a2219290300370300200441e8016a41106a221720044180026a41106a221b2d00003a0000200420042f01483b01cc0120042004290380023703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2015290300370300200441a8026a41106a20172d00003a0000200420042f01cc013b0118200420042903e8013703a80241002110201f2108202c21270b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a2205200441a8026a41086a2214290300370300200441d0016a41106a220a200441a8026a41106a220e2d00003a0000200420042f01183b01c801200420042903a8023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203202737000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f370380022003290007212e20032800032120410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc0120042004290380023703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c20202109202e212a0b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d03201141386a2111201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a202a3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a36021020112029470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a20273702000c010b2000200936020420004101360200200041086a202a370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202b450d00202b41386c450d00202d102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d122003412c6c450d12200c102c0c120b0240202b450d00202b41386c450d00202d102c0b200128029c01212f200141a0016a280200212d0240200141a4016a2802002203450d00202f2003413c6c6a212b200441c8006a410c6a211d20044180026a4102722116200441f0006a41346a2126200441a0016a212420044198016a2122200441f0006a41206a2123200441f0006a41186a2128200441f0006a41106a2121200441f0006a41086a211f202f21110240024002400240034020112f013821192011280200211a2011410c6a290100210b201141146a29010021132011411c6a290100211e201141246a290100210d2011412c6a290100211c201129010421272024201141346a2801003602002022201c3703002023200d3703002028201e37030020212013370300201f200b37030020042027370370200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441f0006a3602d00120044180026a200441d0016a10b9040240024020042f0180024101470d00412210322209450d0820092016290100370100200941206a201641206a22182f01003b0100200941186a201641186a2215290100370100200941106a201641106a2217290100370100200941086a201641086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e80120044180026a200441e8016a10b9044101210c4101210320042f0180024101470d0141012103412221054101210c0340200441a8026a41206a220a20182f01003b0100200441a8026a41186a22102015290100370300200441a8026a41106a22122017290100370300200441a8026a41086a220f2008290100370300200420162901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a220320042903a802370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a210520044180026a200441e8016a10b90420042802b401210320042f0180024101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a000020044180026a41086a200541176a29000037030020044180026a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f370380022005290007212e20052800032120410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a221520044180026a41086a2219290300370300200441e8016a41106a221720044180026a41106a221b2d00003a0000200420042f01483b01cc0120042004290380023703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2015290300370300200441a8026a41106a20172d00003a0000200420042f01cc013b0118200420042903e8013703a8024100211020202108202e212a0b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a2205200441a8026a41086a2214290300370300200441d0016a41106a220a200441a8026a41106a220e2d00003a0000200420042f01183b01c801200420042903a8023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203202a37000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f370380022003290007213020032800032129410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc0120042004290380023703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c202921092030212c0b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d032011413c6a2111201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a202c3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a3602102011202b470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a202a3702000c010b2000200936020420004101360200200041086a202c370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202d450d00202d413c6c450d00202f102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d132003412c6c450d13200c102c0c130b0240202d450d00202d413c6c450d00202f102c0b20012802a801212d200141ac016a280200212f0240200141b0016a2802002203450d00202d20034106746a212b200441c8006a410c6a211d20044180026a4102722116200441a8016a2126200441a0016a212420044198016a2122200441f0006a41206a2123200441f0006a41186a2128200441f0006a41106a2121200441f0006a41086a211f202d21110240024002400240034020112f013c21192011280200211a2011410c6a290100210b201141146a29010021132011411c6a290100211e201141246a290100210d2011412c6a290100211c201129010421272024201141346a2901003703002022201c3703002023200d3703002028201e37030020212013370300201f200b37030020042027370370200441003b016c20044104360248200420263602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441f0006a3602d00120044180026a200441d0016a10b9040240024020042f0180024101470d00412210322209450d0820092016290100370100200941206a201641206a22182f01003b0100200941186a201641186a2215290100370100200941106a201641106a2217290100370100200941086a201641086a220829010037010020044281808080103702b401200420093602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e80120044180026a200441e8016a10b9044101210c4101210320042f0180024101470d0141012103412221054101210c0340200441a8026a41206a220a20182f01003b0100200441a8026a41186a22102015290100370300200441a8026a41106a22122017290100370300200441a8026a41086a220f2008290100370300200420162901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121090b200920056a220320042903a802370100200341206a200a2f01003b0100200341186a2010290300370100200341106a2012290300370100200341086a200f2903003701002004200c41016a220c3602b801200541226a210520044180026a200441e8016a10b90420042802b401210320042f0180024101460d000c020b0b41002103410221094100210c0b0240200428024822054104460d00200429024c210b02402009410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c050b200420093602302004200cad4220862003ad84370234024020042f016c221241ffff03460d004100210502402004280204220a28020820194d0d00200441c8006a41026a200a28020020194105746a220541026a2d00003a000020044180026a41086a200541176a29000037030020044180026a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f370380022005290007212e20052800032120410121050b41022108200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a221520044180026a41086a2219290300370300200441e8016a41106a221720044180026a41106a221b2d00003a0000200420042f01483b01cc0120042004290380023703e8014101211002402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2015290300370300200441a8026a41106a20172d00003a0000200420042f01cc013b0118200420042903e8013703a8024100211020202108202e212a0b200441c8016a41026a2218200441186a41026a22252d00003a0000200441d0016a41086a2205200441a8026a41086a2214290300370300200441d0016a41106a220a200441a8026a41106a220e2d00003a0000200420042f01183b01c801200420042903a8023703d00120100d022012417f732107200441c4016a41026a221020182d00003a0000200441b0016a41086a22122005290300370300200441b0016a41106a220f200a2d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021090b2009200c41226c6a2203202a37000720102d0000210920042f01c401210620032008360003200320063b0100200341026a20093a0000200320042903b00137000f200f2d000021092012290300210b200320073b0120200341176a200b3700002003411f6a20093a00002004200c41016a3602384100210302402002280208201a4d0d0020252002280200201a4105746a220341026a2d00003a00002019200341176a290000370300201b2003411f6a2d00003a0000200420032f00003b01182004200329000f370380022003290007213020032800032129410121030b41022109200441cc016a41026a200441186a41026a2d00003a0000201520192903003703002017201b2d00003a0000200420042f01183b01cc0120042004290380023703e8014101210c02402003450d002018200441cc016a41026a2d00003a000020142015290300370300200e20172d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c202921092030212c0b201020182d00003a000020052014290300370300200a200e2d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d03201141c0006a2111201d20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200201d41026a20102d00003a000020122005290300370300200f200a2d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a202c3700002003410f6a20093600002003411b6a20042903b001370000200341076a200429004f370000200341236a20122903003700002003412b6a200f2d00003a00002004200c41016a3602102011202b470d010c060b0b200042013702000c020b2000200836020420004101360200200041086a202a3702000c010b2000200936020420004101360200200041086a202c370200200428023421030b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202f41ffffff1f71450d00202d102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d142003412c6c450d14200c102c0c140b0240202f41ffffff1f71450d00202d102c0b20012802b401212d200141b8016a280200212f200141bc016a2802002203450d03202d200341c4006c6a212b200441c8006a410c6a210e20044180026a4102722111200441f0006a413c6a2125200441a8016a2126200441a0016a212420044198016a2122200441f0006a41206a2123200441f0006a41186a2128200441f0006a41106a2121200441f0006a41086a211f202d210f024002400340200f2f01402108200f2802002119200f410c6a290100210b200f41146a2901002113200f411c6a290100211e200f41246a290100210d200f412c6a290100211c200f41346a2901002127200f290104212a2026200f413c6a280100360200202420273703002022201c3703002023200d3703002028201e37030020212013370300201f200b3703002004202a370370200441003b016c20044104360248200420253602d4012004200441c8006a3602e0012004200441046a3602dc012004200441ec006a3602d8012004200441f0006a3602d00120044180026a200441d0016a10b9040240024020042f0180024101470d00412210322201450d0520012011290100370100200141206a201141206a22162f01003b0100200141186a201141186a2218290100370100200141106a201141106a2215290100370100200141086a201141086a221729010037010020044281808080103702b401200420013602b001200441e8016a41106a200441d0016a41106a280200360200200441e8016a41086a200441d0016a41086a290300370300200420042903d0013703e80120044180026a200441e8016a10b9044101210c4101210320042f0180024101470d0141012103412221054101210c0340200441a8026a41206a220920162f01003b0100200441a8026a41186a220a2018290100370300200441a8026a41106a22102015290100370300200441a8026a41086a22122017290100370300200420112901003703a8020240200c2003470d00200441b0016a2003410110e50120042802b00121010b200120056a220320042903a802370100200341206a20092f01003b0100200341186a200a290300370100200341106a2010290300370100200341086a20122903003701002004200c41016a220c3602b801200541226a210520044180026a200441e8016a10b90420042802b401210320042f0180024101460d000c020b0b41002103410221014100210c0b0240200428024822054104460d00200429024c210b02402001410020031b220c450d00200341226c450d00200c102c0b2000200536020420004101360200200041086a200b3702000c060b200420013602302004200cad4220862003ad84370234024020042f016c221041ffff03460d004100210502402004280204220928020820084d0d00200441c8006a41026a200928020020084105746a220541026a2d00003a000020044180026a41086a200541176a29000037030020044180026a41106a2005411f6a2d00003a0000200420052f00003b01482004200529000f370380022005290007213020052800032120410121050b41022117200441cc016a41026a200441c8006a41026a2d00003a0000200441e8016a41086a221820044180026a41086a2208290300370300200441e8016a41106a221520044180026a41106a221a2d00003a0000200420042f01483b01cc0120042004290380023703e8014101210a02402005450d00200441186a41026a200441cc016a41026a2d00003a0000200441a8026a41086a2018290300370300200441a8026a41106a20152d00003a0000200420042f01cc013b0118200420042903e8013703a8024100210a202021172030212c0b200441c8016a41026a2216200441186a41026a22062d00003a0000200441d0016a41086a2205200441a8026a41086a221b290300370300200441d0016a41106a2209200441a8026a41106a22142d00003a0000200420042f01183b01c801200420042903a8023703d001200a0d022010417f73211d200441c4016a41026a220a20162d00003a0000200441b0016a41086a22102005290300370300200441b0016a41106a221220092d00003a0000200420042f01c8013b01c401200420042903d0013703b0010240200c2003470d00200441306a200c410110e5012004280238210c200428023021010b2001200c41226c6a2203202c370007200a2d0000210120042f01c401210720032017360003200320073b0100200341026a20013a0000200320042903b00137000f20122d000021012010290300210b2003201d3b0120200341176a200b3700002003411f6a20013a00002004200c41016a360238410021030240200228020820194d0d002006200228020020194105746a220341026a2d00003a00002008200341176a290000370300201a2003411f6a2d00003a0000200420032f00003b01182004200329000f370380022003290007213120032800032129410121030b41022101200441cc016a41026a200441186a41026a2d00003a0000201820082903003703002015201a2d00003a0000200420042f01183b01cc0120042004290380023703e8014101210c02402003450d002016200441cc016a41026a2d00003a0000201b2018290300370300201420152d00003a0000200420042f01cc013b01c801200420042903e8013703a8024100210c202921012031212e0b200a20162d00003a00002005201b290300370300200920142d00003a0000200420042f01c8013b01c401200420042903a8023703d001200c0d03200f41c4006a210f200e20042f01c4013b0000200441c8006a41086a200441306a41086a280200360200200e41026a200a2d00003a000020102005290300370300201220092d00003a000020042004290330370348200420042903d0013703b00102402004280210220c200428020c470d00200441086a200c410110dd012004280210210c0b2004280208200c412c6c6a22032004290348370200200341136a202e3700002003410f6a20013600002003411b6a20042903b001370000200341076a200429004f370000200341236a20102903003700002003412b6a20122d00003a00002004200c41016a360210200f202b470d010c070b0b200042013702000c030b2000201736020420004101360200200041086a202c3702000c020b2000200136020420004101360200200041086a202e370200200428023421030c010b1039000b2004280230410020031b220c450d00200341226c450d00200c102c0b0240202f450d00202f41c4006c450d00202d102c0b02402004280210220c450d0020042802082103200c412c6c210c03400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b20042802084100200428020c22031b220c450d112003412c6c450d11200c102c0c110b0240202f450d00202f41c4006c450d00202d102c0b20002004290308370204200041003602002000410c6a200441106a2802003602000c100b2000201636020420004101360200200041086a201e3702002003102c0b02402020450d002020410c6c450d00201f102c0b2004280208210902402005450d002005412c6c210c2009210303400240200341046a2802002205450d00200541226c450d002003280200102c0b2003412c6a2103200c41546a220c0d000b0b200428020c2203450d002003412c6c450d002009102c0b2001411c6a2802002203450d002001280218220c450d002003410474450d00200c102c0b200141286a2802002203450d002001280224220c450d00200341146c450d00200c102c0b200141346a2802002203450d002001280230220c450d00200341186c450d00200c102c0b200141c0006a2802002203450d00200128023c220c450d002003411c6c450d00200c102c0b200141cc006a2802002203450d002001280248220c450d002003410574450d00200c102c0b200141d8006a2802002203450d002001280254220c450d00200341246c450d00200c102c0b200141e4006a2802002203450d002001280260220c450d00200341286c450d00200c102c0b200141f0006a2802002203450d00200128026c220c450d002003412c6c450d00200c102c0b200141fc006a2802002203450d002001280278220c450d00200341306c450d00200c102c0b20014188016a2802002203450d00200128028401220c450d00200341346c450d00200c102c0b20014194016a2802002203450d00200128029001220c450d00200341386c450d00200c102c0b200141a0016a2802002203450d00200128029c01220c450d002003413c6c450d00200c102c0b200141ac016a2802002203450d0020012802a801220c450d00200341ffffff1f71450d00200c102c0b200141b8016a2802002203450d0020012802b401220c450d00200341c4006c450d00200c102c0b200441d0026a24000ba20204017f017e027f037e0240024020012802082202ad42227e2203422088a70d002003a72204417f4c0d00200128020021010240024020040d00410221050c010b200410322205450d020b20002005360200200041086a22054100360200200041046a200441226e36020020004100200210e5012005280200210402402002450d00200241226c21022000280200200441226c6a21000340200141086a2901002103200141106a2901002106200141186a290100210720012901002108200041206a200141206a2f01003b0100200041186a2007370100200041106a2006370100200041086a200337010020002008370100200041226a2100200441016a2104200141226a21012002415e6a22020d000b0b200520043602000f0b103b000b1039000beb25030a7f087e257f23004180086b22052400024002400240024002400240024020020d0041002106410021070c010b200120024105746a21084100210641002107034020054200370308200542003703002005410036021820054208370310200541d0046a41186a2209200141186a290000370300200541d0046a41106a220a200141106a290000370300200541d0046a41086a220b200141086a290000370300200520012900003703d004024020070d0041c80510322207450d074100210c2007200541c0006a41e00210c908220241003b01e602200241003602e002200241e8026a200541f0046a41e00210c9081a0b200541f0046a200c2007200541d0046a108d0220052802fc04210220052802f804210d0240024020052802f0044101470d0020052802f404210e200541206a41186a2009290300220f370300200541206a41106a200a2903002210370300200541206a41086a200b2903002211370300200520052903d0042212370320200541186a2903002113200529031021142005290308211520052903002116200541f8036a41186a2217200f370300200541f8036a41106a22182010370300200541f8036a41086a22192011370300200520123703f8030240024002400240200d2f01e602221a410b490d004100211b4104211c02400240200241054f0d002002211a0c010b4105211c4105211a024002402002417b6a0e020201000b200241796a211a4101211b4106211c0c010b4100211a4101211b0b41c8051032221d450d0c201d200541c0006a41e00210c908221e41003b01e602201e41003602e002201e41e8026a200541f0046a41e00210c908211f200541c0006a41186a2220200d41e8026a2221201c41057422226a222341186a290000370300200541c0006a41106a2224202341106a290000370300200541c0006a41086a2225202341086a29000037030020054198046a41086a2226200d20226a220241106a29030037030020054198046a41106a2227200241186a2903003703002005202329000037034020052002290308370398042002280200212820022802042129201f2021202241206a22026a200d2f01e602201c417f736a2223410574222210c9081a201e200d20026a202210c9082102200d201c3b01e60220092020290300220f370300200220233b01e602200a20242903002210370300200b202529030022113703002005200529034022123703d004200541b0046a41186a222a200f370300200541b0046a41106a222b2010370300200541b0046a41086a222c2011370300200520123703b0042002200d201b1b220241e8026a221c201a410574221e41206a22236a201c201e6a221c20022f01e602201a6b41057410ca081a201c41186a2017290300370000201c41106a2018290300370000201c41086a2019290300370000201c20052903f803370000200220236a2002201e6a221c20022f01e602201a6b41057410ca081a201c41186a2013370300201c2014370310201c2015370308201c2016370300200541d8036a41086a221b202c290300370300200541d8036a41106a2222202b290300370300200541d8036a41186a221c202a290300370300200220022f01e60241016a3b01e602200520052903b0043703d803200541c0036a41086a222d2026290300370300200541c0036a41106a222e202729030037030020052005290398043703c003200541a0036a41086a222f201b290300370300200541a0036a41106a22302022290300370300200541a0036a41186a2231201c290300370300200520052903d8033703a003200d2802e00222020d014100210e0c020b200d41e8026a221c2002410574221e41206a22236a201c201e6a221c201a20026b41057410ca081a201c41186a2017290300370000201c41106a2018290300370000201c41086a2019290300370000201c20052903f803370000200d20236a200d201e6a221c200d2f01e60220026b41057410ca081a201c41186a2013370300201c2014370310201c2015370308201c2016370300200d200d2f01e60241016a3b01e6020c020b4100211c03402028213220292133201d2134200d211a2002210d201a2f01e402212320172031290300370300201820302903003703002019202f290300370300200520052903a0033703f8032027202e2903003703002026202d290300370300200520052903c00337039804200e201c470d0a024002400240200d2f01e602221c410b490d00410021354104211e024020234105490d002023211e024002402023417b6a0e020201000b202341796a2123410121354106211e0c010b41002123410121354105211e0b41f8051032221d450d0e200e41016a210e41002102201d200541c0006a41e00210c908221f41003b01e602201f41003602e002201f41e8026a200541f0046a41900310c90821362020200d41e8026a2221201e410574221a6a221c41186a2900003703002024201c41106a2900003703002025201c41086a2900003703002005201c290000370340200d201a6a221c2802002128201c28020421292022201c41186a290300370300201b201c41106a2903003703002005201c2903083703d80320362021201e41016a2237410574221c6a200d2f01e6022238201e417f736a221a410574223910c908213a201f200d201c6a203910c908211c200d201e3b01e602200541f0046a41186a221f2020290300220f370300201c201a3b01e602200541f0046a41106a223620242903002210370300200541f0046a41086a2239202529030022113703002005200529034022123703f0042009200f370300200a2010370300200b2011370300200520123703d004202420222903003703002025201b290300370300200520052903d803370340201c41c8056a200d20374102746a41c8056a2038201e6b41027410c908213702400340201c20024102746a41c8056a280200221e20023b01e402201e201c3602e00220022002201a49221e6a2202201a4b0d01201e0d000b0b20222024290300370300201b2025290300370300202c200b290300220f370300202b200a2903002210370300202a20092903002211370300200520052903403703d803200520052903d00422123703b004201f2011370300203620103703002039200f370300200520123703f004202420222903003703002025201b290300370300200520052903d8033703402035450d01202341027420376a41086a2037202341016a22024102746a221a201c2f01e60220236b41027410ca081a201a2034360200203a2002410574221e6a203a202341057422216a221a201c2f01e60220236b41057410ca081a201a41186a2017290300370000201a41106a2018290300370000201a41086a2019290300370000201a20052903f803370000201c201e6a201c20216a221a201c2f01e60220236b41057410ca081a201a2033360204201a2032360200201a200529039804370308201a41106a2026290300370300201a41186a2027290300370300201c201c2f01e60241016a221a3b01e6022002201a41ffff0371221a4b0d020340201c20024102746a41c8056a280200221e20023b01e402201e201c3602e00220022002201a496a221e201a4b0d032002201a4f2123201e21022023450d000c030b0b2023410274200d41c8056a221a6a41086a201a202341016a22024102746a221a201c20236b221e41027410ca081a201a2034360200200d41e8026a221c2002410574221a6a201c202341057422246a221c201e410574221e10ca081a201c41186a2017290300370000201c41106a2018290300370000201c41086a2019290300370000201c20052903f803370000200d201a6a200d20246a221c201e10ca081a201c2033360204201c2032360200201c200529039804370308201c41106a2026290300370300201c41186a2027290300370300200d200d2f01e60241016a221c3b01e6022023201c41ffff0371221c4f0d040340200d20024102746a41c8056a280200221a20023b01e402201a200d3602e00220022002201c496a221a201c4b0d052002201c4f211e201a2102201e450d000c050b0b2023410274200d41c8056a221c6a41086a201c202341016a22024102746a221c200d2f01e60220236b41027410ca081a201c203436020020212002410574221a6a20212023410574221e6a221c200d2f01e60220236b41057410ca081a201c41186a2017290300370000201c41106a2018290300370000201c41086a2019290300370000201c20052903f803370000200d201a6a200d201e6a221c200d2f01e60220236b41057410ca081a201c2033360204201c2032360200201c200529039804370308201c41106a2026290300370300201c41186a2027290300370300200d200d2f01e60241016a221c3b01e6022002201c41ffff0371221c4b0d000340200d20024102746a41c8056a280200221a20023b01e402201a200d3602e00220022002201c49221a6a2202201c4b0d01201a0d000b0b202e2024290300370300202d2025290300370300202f2039290300370300203020362903003703002031201f290300370300200520052903403703c003200520052903f0043703a003200e211c200d2802e00222020d000b0b2022202e290300370300201b202d290300220f370300202c202f290300370300202b2030290300370300202a2031290300370300200520052903c00322103703d803200520052903a0033703b0042019200f37030020182022290300370300200520103703f803200b202c290300370300200a202b2903003703002009202a290300370300200520052903b0043703d0042007450d0741f80510322202450d092002200541c0006a41e00210c908220241003b01e602200241003602e002200241e8026a200541f0046a41900310c9081a200220073602c805200741003b01e402200720023602e002200541f0046a41186a221e2009290300370300200541f0046a41106a220d200a290300370300200541f0046a41086a2223200b290300370300200520052903d0043703f0042024201829030037030020252019290300370300200520052903f803370340200c200e470d0620022f01e602221c410a4b0d05200c41016a210c2002201c41016a221a3b01e6022002201c4105746a221c2029360204201c2028360200201c2005290340370308201c41e8026a20052903f004370000201c41f0026a2023290300370000201c41f8026a200d290300370000201c4180036a201e290300370000201c41106a2025290300370300201c41186a20242903003703002002201a4102746a41c8056a201d360200201d201a3b01e402201d20023602e002200221070b2005410036028005200641016a21060c010b200d20024105746a2202290310210f2002200529031037031020022903082110200220052903083703082002290300211120022005290300370300200241186a220229030021122002200541186a290300370300200541f0046a41186a20123703002005200f37038005200520103703f804200520113703f004200fa7221c450d00200528028405220241306c203b20021b213b201c410020021b2202450d00203b450d002002102c0b200141206a22012008470d000b0b024002402004450d0020032004412c6c6a211f03400240200328020841306c2202450d002003280200221b20026a21222003410c6a211a201b211c0340024002402007450d00200541f0046a200c2007201c108d0220052802f0044101470d01201c211b0b201b41086a290000210f201b41106a2900002110201b2900002111200041196a201b41186a290000370000200041116a2010370000200041096a200f37000020002011370001200041013a0000200520063602482005200c36024420052007360240200541f0046a200541c0006a10fe01200541f0046a10ff010c050b20052802f80420052802fc044105746a2202427f2002290300220f201c41206a221e2903007c22102010200f54220d200241086a2223290300220f201c41286a22242903007c200dad7c2210200f542010200f511b220d1b3703002023427f2010200d1b370300200541f0046a41186a201a41186a290000220f370300200541f0046a41106a201a41106a2900002210370300200541f0046a41086a201a41086a29000022113703002005201a29000022123703f00420242903002113201e2903002114200541c0006a41186a2224200f370300200541c0006a41106a22252010370300200541c0006a41086a220e201137030020052012370340200241186a211e200241106a212302402002280218220d200241146a280200470d002023200d410110e001201e280200210d0b2023280200200d41306c6a2202200529034037030020022014370320200241186a2024290300370300200241106a2025290300370300200241086a200e290300370300200241286a2013370300201e201e28020041016a360200201c41306a221c2022470d000b0b2003412c6a2203201f470d000b0b200041003a00002000410c6a2006360200200041086a200c360200200041046a20073602000b20054180086a24000f0b41e0cec80041204180cfc800103c000b419ecec800413041d0cec800103c000b41ecd0c800412b41bcd2c800103c000b41a5d0c800413541dcd0c800103c000b1039000be50706047f017e017f067e027f047e230041c0006b2202240002400240200128020022030d004100210341002104410021010c010b20012802042205ad4220862106200321040240034020032f01e60221072005450d0120064280808080707c21062005417f6a2105200320074102746a41c8056a280200210320042802c80521040c000b0b200128020821010b200241346a2007360200200241306a2003360200200220013602382002200637032820022004360224200220053602200240024020010d00427f2108420021094200210a4200210b4200210c427f210d0c010b20022001417f6a220e360238200241206a410020041b220128020021040240024020012802082207200128020422032f01e6024f0d00200321050c010b0340024020032802e00222050d00410021050c020b200441016a210420032f01e402210720052103200720052f01e6024f0d000b0b200741016a210f0240024020040d00200521030c010b2005200f4102746a41c8056a280200210302402004417f6a2204450d00034020032802c80521032004417f6a22040d000b0b4100210f0b20012003360204200141003602002001200f360208200520074105746a2103427f2108427f210d4200210b4200210c420021094200210a03402002200341086a2903002206420020032903002210420010ce08200241106a201042002010420010ce08427f200a427f200241106a41086a29030022112002290300221220127c7c22122006200229030822138420138442005220122011547222031b7c2009427f200229031020031b7c22112009542203ad7c220920032009200a542009200a511b22031b210a427f201120031b21092006200d20102008542006200d542006200d511b22031b210d2010200820031b2108427f200c20067c200b20107c2210200b542203ad7c220620032006200c542006200c511b22031b210c427f201020031b210b200e450d012002200e417f6a220e360238200241206a410020022802241b220128020021040240024020012802082207200128020422032f01e6024f0d00200321050c010b0340024020032802e00222050d00410021050c020b200441016a210420032f01e402210720052103200720052f01e6024f0d000b0b200741016a210f0240024020040d00200521030c010b2005200f4102746a41c8056a280200210302402004417f6a2204450d00034020032802c80521032004417f6a22040d000b0b4100210f0b20012003360204200141003602002001200f360208200520074105746a21030c000b0b200020093703202000200b37031020002008370300200041286a200a370300200041186a200c3703002000200d370308200241c0006a24000ba70101047f0240200128020022020d0020004100360204200041106a4100360200200041003602180f0b2001280204210320012802082104200221010240034020022f01e60221052003450d012003417f6a2103200220054102746a41c8056a280200210220012802c80521010c000b0b2000200336020c200041003602082000200136020420002003360200200041146a2005360200200041106a2002360200200020043602180b8e0101037f230041c0006b220124002001200010c1070240200141306a2802002202450d000340024020012802342203450d00200341306c450d002002102c0b2001200010c107200128023022020d000b0b024020002802042202450d0020022802e00221032002102c2003450d00034020032802e00221022003102c2002210320020d000b0b200141c0006a24000bc00101037f230041106b2202240041012103200128021841fc9dc00041012001411c6a28020028020c1100002104200241003a0005200220043a0004200220013602002002200036020c20022002410c6a41ecedc600106721012002200041106a36020c20012002410c6a41ecedc600106721012002200041206a36020c20012002410c6a41ecedc60010671a024020022d00040d0020022802002200280218419a92c10041012000411c6a28020028020c11000021030b200241106a240020030bd60f01077f230041c0006b220224000240024041c20310322203450d0020002003360200200041046a220442c20337020020004100410210c8012000280200200041086a220528020022036a41003b00002005200341026a22033602002004280200210402400240200128020022012903684202520d00024020032004470d0020002003410110c801200041086a28020021030b200028020020036a41043a0000200041086a2203200328020041016a3602000c010b024020032004470d0020002003410110c801200041086a28020021030b200141e8006a2106200028020020036a4184013a0000200041086a2203200328020041016a2204360200200020044120102f200028020020032802006a22042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002003200328020041206a2205360200200141206a2104024002400240024020012d00200e03000102030b200020054101102f200028020020032802006a41003a00002003200328020041016a22053602002000200541c000102f200028020020032802006a22052004290001370000200541386a200441396a290000370000200541306a200441316a290000370000200541286a200441296a290000370000200541206a200441216a290000370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041c0006a3602000c020b200020054101102f200028020020032802006a41013a00002003200328020041016a22053602002000200541c000102f200028020020032802006a22052004290001370000200541386a200441396a290000370000200541306a200441316a290000370000200541286a200441296a290000370000200541206a200441216a290000370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041c0006a3602000c010b200020054101102f200028020020032802006a41023a00002003200328020041016a22053602002000200541c100102f200028020020032802006a200441016a41c10010c9081a2003200328020041c1006a3602000b2006200010b5030b20014198016a200010b403200041086a2802002101410410322203450d002002420437020420022003360200024002400240024041012001417e6a220120014101461b410020011b220341c000490d00200341808001490d012003418080808004490d02200241004101102f2002280200200228020822016a41033a00002002200141016a2201360208200220014104102f20022802002201200228020822046a2003360000200441046a21030c030b200241004101102f20022802002201200228020822046a20034102743a0000200441016a21030c020b200241004102102f20022802002201200228020822046a20034102744101723b0000200441026a21030c010b200241004104102f20022802002201200228020822046a2003410274410272360000200441046a21030b20022003360208200041086a2205280200220641014d0d01200241286a200120036a2204360200200220003602204100210320054100360200200241023602102002411c6a2000280200220541026a22073602002002200136022420022006417e6a220636021420022007360218200241246a21070240024002402006450d00034020012004460d032002200141016a360224200520036a20012d00003a00002000200028020841016a36020820034101460d02200341016a210320022802242101200228022821040c000b0b2000200710be070c010b024020022802282205200228022422016b2203450d002002280220220420022802142206200228021022006a200310c80120042802002208200020036a22036a200820006a200610ca081a20022003360210200428020822062003460d00200620016a417f73200520006a6a2103200428020020066a2100034020012005460d022002200141016a360224200020012d00003a00002004200428020841016a3602082003450d01200041016a21002003417f6a210320022802242101200228022821050c000b0b2002410036023820024201370330200241306a200710be072002280234210620022802302107024020022802382201450d0020022802202203200228021420022802106a200110c801200328020022042002280210220020016a22036a200420006a200228021410ca081a200220033602102002280220220428020822082003460d00200820006b2105200428020020086a21032007210003402001450d01200320002d00003a00002004200428020841016a360208200041016a2100200341016a210320052001417f6a2201470d000b0b2006450d002007102c0b02402002280218200228021c2201460d00200220013602180b2002411c6a2802002103200228021821010240034020032001460d012002200141016a22013602180c000b0b024020022802142201450d000240200228021022042002280220220541086a22002802002203460d002005280200220520036a200520046a200110ca081a200228021421010b2000200120036a3602000b024020022802004100200228020422011b2203450d002001450d002003102c0b200241c0006a24000f0b1039000b4102200641d089c500104f000b850103027f017e027f230041106b22012400024002400240200035020842208620002802002202ad84101c2203428080808010540d00410021042003a722052d00000e020201000b41f2b3c800412e200141086a41a0b4c80041b0b4c8001040000b410121040b2005102c0240200041046a280200450d002002102c0b200141106a240020040bcb0e01057f02400240024002400240024002400240024002400240024020002802000e1800010b0b0b02030b0405060b0b0b070b0b0b0b0b0b0b08090a0b024002400240024002400240200041086a280200417e6a0e080010010210030405100b200041106a2802002201450d0f2000410c6a2802002200450d0f2001450d0f2000102c0f0b200041106a2802002201450d0e2000410c6a2802002200450d0e2001450d0e2000102c0f0b200041106a2802002201450d0d2000410c6a2802002200450d0d2001450d0d2000102c0f0b2000410c6a10c1020f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d0b200028020c2200450d0b2001410c6c450d0b2000102c0f0b200041106a2802002201450d0a2000410c6a2802002200450d0a2001450d0a2000102c0f0b02400240200041086a2802000e020b00010b2000412c6a102b2000419c016a102b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0a20002802102200450d0a2001410c6c450d0a2000102c0f0b2000412c6a102b2000419c016a102b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0920002802102200450d092001410c6c450d092000102c0f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a210103402001102b200141f0006a2101200241907f6a22020d000b0b200041086a2802002201450d0820002802042200450d08200141f0006c450d082000102c0f0b02400240024002400240200041086a2d00000e180c0c0c0c0c0c000c0c0c0c0c0c0c0c010c0c020c0c0c0c03040b200041106a2802002201450d0b2000410c6a2802002200450d0b200141ffffff3f71450d0b2000102c0f0b200041106a2802002201450d0a2000410c6a2802002200450d0a200141ffffff3f71450d0a2000102c0f0b200041146a2802002201450d09200041106a2802002200450d09200141ffffffff0371450d092000102c0f0b0240200041106a2802002201450d002000410c6a2802002202450d00200141ffffffff0771450d002002102c0b200041186a10e9010f0b0240200041106a2802002201450d002000410c6a2802002202450d00200141ffffffff0771450d002002102c0b200041186a10e9010f0b20002802042201450d06200041086a280200450d062001102c0f0b02400240200041086a280200417f6a0e020001070b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0620002802102200450d062001410c6c450d062000102c0f0b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0520002802102200450d052001410c6c450d052000102c0f0b02402000410c6a2802002201450d00200041086a2802002202450d002001450d002002102c0b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d0420002802142200450d042001410c6c450d042000102c0f0b02402000410c6a2802002202450d0020002802042201200241d0006c6a21030340200141046a41003602002001280200210420014101360200200141086a2802002202200520021b210502402002450d002005450d002004102c0b200141d0006a22012003470d000b0b0240200041086a2802002201450d0020002802042202450d00200141d0006c450d002002102c0b200041106a10c2020f0b20002802044101470d020240200041106a2802002201450d002000410c6a2802002202450d002001450d002002102c0b2000411c6a2802002201450d02200041186a2802002200450d022001450d022000102c0f0b02400240200041086a280200417f6a0e03000301030b0240200041146a2802002201450d00200041106a2802002202450d002001450d002002102c0b200041206a2802002201450d022000411c6a2802002200450d022001450d022000102c0c020b200041106a10c5020f0b024002400240200041086a2d00000e0403000103020b2000410c6a22012802001083022001280200102c0f0b2000410c6a22012802001083022001280200102c0f0b2000412c6a22012802001083022001280200102c0f0b0bc60601057f230041106b220224000240024002400240024002400240024020012d00000e06010402030500010b20004201370200200041086a22034100360200200041004101102f200028020020032802006a41003a00002003200328020041016a360200200141046a2802002001410c6a280200200010bb010c050b20004201370200200041086a22034100360200200041004101102f200028020020032802006a41023a00002003200328020041016a360200412010322204450d052002422037020420022004360200200241004120102f20022802002205200228020822066a22042001290001370000200441086a200141096a290000370000200441106a200141116a290000370000200441186a200141196a2900003700002002200641206a2201360208200020032802002001102f200028020020032802006a2005200110c9081a2003200328020020016a3602002002280204450d042005102c0c040b20004201370200200041086a22034100360200200041004101102f200028020020032802006a41043a00002003200328020041016a2204360200200020044104102f200028020020032802006a20012800013600002003200328020041046a360200200141086a280200200141106a280200200010bb010c030b20004201370200200041086a22034100360200200041004101102f200028020020032802006a41053a00002003200328020041016a2204360200200020044104102f200028020020032802006a20012800013600002003200328020041046a360200200141086a280200200141106a280200200010bb010c020b20004201370200200041086a22034100360200200041004101102f200028020020032802006a41063a00002003200328020041016a2204360200200020044104102f200028020020032802006a20012800013600002003200328020041046a360200200141086a280200200141106a280200200010bb010c010b20004201370200200041086a22034100360200200041004101102f200028020020032802006a41073a00002003200328020041016a2204360200200020044101102f200028020020032802006a41003a00002003200328020041016a3602002000200141046a1085020b200241106a24000f0b1039000bc20101037f200128020021022000200041086a22032802004101102f200028020020032802006a21040240024020024101460d00200441003a0000200328020041016a21030c010b200441013a00002003200328020041016a220236020020012802042104200020024104102f200028020020032802006a20043600002003200328020041046a2202360200200141086a2802002101200020024104102f200028020020032802006a2001360000200328020041046a21030b200041086a20033602000bbf0e05037f017e0a7f017e037f230041e0016b22022400200241186a20011087020240024020022802180d000240200228021c2203200128020441246e2204200420034b1bad42247e2205422088a70d002005a72204417f4c0d0002400240024020040d00410421060c010b200410322206450d010b4100210720024100360228200220063602202002200441246e36022402402003450d00200241dd006a2108200241ab016a220941056a210a4100210b0340024002402001280204220c450d002001280200220d2d000021042001200c417f6a220e3602042001200d41016a3602000240024002400240024002400240024020040e080508000802030104080b41002104200241003a00b801200c417e6a210c02400340200e2004460d0120024198016a20046a200d20046a220f41016a2d00003a00002001200c3602042001200f41026a3602002002200441016a220f3a00b801200c417f6a210c200f2104200f4120460d080c000b0b200441ff0171450d07200241003a00b8010c070b20024198016a200110880220022d0098014101460d06200228009901210c200241106a200110870220022802100d062001280204220d20022802142204490d062004417f4c0d0b0240024020040d004101210f0c010b20041037220f450d0b2001280204210d0b02400240200d2004490d00200f2001280200200410c908210d2001280204220e20044f0d012004200e4194afc0001058000b2004450d072004450d07200f102c0c070b2001200e20046b3602042001200128020020046a360200200d450d062004ad22054220862005842210428080808070832105200c41187621042010a7210d4101210e0c070b20024198016a200110880220022d0098014101460d05200228009901210c2002200110870220022802000d052001280204220d20022802042204490d052004417f4c0d0a0240024020040d004101210f0c010b20041037220f450d0a2001280204210d0b02400240200d2004490d00200f2001280200200410c908210d2001280204220e20044f0d012004200e4194afc0001058000b2004450d062004450d06200f102c0c060b2001200e20046b3602042001200128020020046a360200200d450d052004ad22054220862005842210428080808070832105200c41187621042010a7210d4102210e0c060b20024198016a200110880220022d0098014101460d04200228009901210c200241086a200110870220022802080d042001280204220d200228020c2204490d042004417f4c0d090240024020040d004101210f0c010b20041037220f450d092001280204210d0b02400240200d2004490d00200f2001280200200410c908210d2001280204220e20044f0d012004200e4194afc0001058000b2004450d052004450d05200f102c0c050b2001200e20046b3602042001200128020020046a360200200d450d042004ad22054220862005842210428080808070832105200c41187621042010a7210d4103210e0c050b200e450d03200d2d000121042001200c417e6a3602042001200d41026a36020020040d03200241d0016a200110890220022802d00122044102460d03200241d0006a41086a20024198016a41086a290200370300200220022902980137035020022802d801210d20022802d401210f4104210e42002105410021110c010b200241d0016a2001108a0220022802d0012204450d0220022802d801210d20022802d401210f200241d0006a41086a20024198016a41086a2902003703002002200229029801370350200441087621114105210e420021050b0c020b200220092900003703d0012002200a2900003700d501200220022903d0013703c001200220022900d5013700c501200f41ff0171411f4d0d0020022f01980120022d009a0141107472210c200228009b012104200228009f01210f20022900a3012110200220022900c50137008d01200220022903c001370388012002200229008d0137007d2002200229038801370378200220022903783703682002200229007d37006d2002200229006d37005520022002290368370350200820022f00653b0000200841026a200241e5006a41026a2d00003a00002010428080808070832105200441087621112010a7210d4100210e0c010b200241206a102b0c050b200b41016a210b200241c0006a41086a200241d0006a41086a2903002210370300200241306a41086a22122010370300200220022903502210370340200220103703302011410874200441ff01717221132005200dad842105024020072002280224470d00200241206a2007410110f20120022802282107200228022021060b2006200741246c6a2204200537000c2004200f360008200420133600042004200c3b00012004200e3a0000200441036a200c4110763a0000200420022903303700142004411c6a20122903003700002002200741016a2207360228200b2003470d000b200228022021060b2006450d0220002002290224370204200020063602000c030b1039000b103b000b200041003602000b200241e0016a24000bcf0201067f0240024020012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d01200341036a2d0000210620032f0001210720012002417c6a3602042001200341046a3602002007200641107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000ba80201057f230041106b220241003a000c02400240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013a000c2001200441016a360200200220053a000820060d01200041013a00000c020b200041013a00000f0b200128020022042d0000210520012003417e6a22063602042001200441016a360200200241023a000c200220053a0009024002402006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200241033a000c200220053a000a2006450d01200041003a0000200128020022042d0000210520012003417c6a3602042001200441016a360200200220053a000b200020022802083600010f0b200041013a00000c010b200041013a00000b200241003a000c0bc40101047f024002400240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a36020020040e020203010b200041023602000f0b200041023602000f0b200041003602000f0b024020054104490d002003280001210520012002417b6a22043602042001200341056a36020020044104490d002000200536020420004101360200200328000521042001200241776a3602042001200341096a360200200041086a20043602000f0b200041023602000b840202047f017e230041106b22022400200241086a2001108702024002402002280208450d00200041003602000c010b024020012802042203200228020c2204490d00024002402004417f4c0d000240024020040d00410121050c010b200410372205450d02200128020421030b0240024020032004490d0020052001280200200410c90821032001280204220520044f0d01200420054194afc0001058000b2005410020041b2201450d032004450d032001102c0c030b2001200520046b3602042001200128020020046a3602002003450d0220002004ad2206422086200684370204200020033602000c030b103b000b1039000b200041003602000b200241106a24000bfd0201027f02402000280200220220012802002203460d00417f410120022003491b0f0b02400240024002400240024020020d000240200041086a2802002202200141086a2802002203460d00417f410120022003491b0f0b410021032002417f6a0e0405030201040b0240200028020420012802042001410c6a28020022012000410c6a2802002200200020014b1b10cc082202450d00417f410120024100481b0f0b417f200020014720002001491b21030c030b200041106a200141106a108c02220341ff01710d02200041c8006a200141c8006a108c02220341ff01710d0220004180016a20014180016a108c02220341ff01710d02200041b8016a200141b8016a108c020f0b200041106a200141106a108c02220341ff01710d01200041c8006a200141c8006a108c02220341ff01710d0120004180016a20014180016a108c020f0b200041106a200141106a108c02220341ff01710d00200041c8006a200141c8006a108c020f0b20030f0b200041106a200141106a108c020b8d0603027f047e017f024020002d0000220220012d00002203460d00417f410120022003491b0f0b41002103024002400240024002400240024002402002417f6a0e0707050403020100060b0240200041046a280200200141046a2802002001410c6a28020022012000410c6a2802002200200020014b1b10cc082202450d00417f410120024100481b0f0b417f200020014720002001491b21030c050b417f200041086a2903002204200141086a290300220585200041106a2903002206200141106a290300220785844200522004200554200620075420062007511b1b0f0b417f20002d0001220020012d000122014720002001491b0f0b0240200041186a2802002202200141186a2802002203460d00417f410120022003491b0f0b024020024101470d0002402000411c6a2802002001411c6a280200200141246a2802002202200041246a2802002208200820024b1b10cc082203450d00417f410120034100481b0f0b41ff01210320082002490d03200820024722030d030b41002103200041016a200141016a411410cc082200450d02417f410120004100481b0f0b0240200041046a2802002202200141046a2802002203460d00417f410120022003491b0f0b024020024101470d000240200041086a280200200141086a280200200141106a2802002202200041106a2802002208200820024b1b10cc082203450d00417f410120034100481b0f0b41ff01210320082002490d02200820024722030d020b417f200041186a2903002206200141186a29030022075220062007541b0f0b0240200041246a2802002202200141246a2802002203460d00417f410120022003491b0f0b024020024101470d000240200041286a280200200141286a280200200141306a2802002202200041306a2802002208200820024b1b10cc082203450d00417f410120034100481b0f0b41ff01210320082002490d01200820024722030d010b41002103200041016a200141016a412010cc082200450d00417f410120004100481b0f0b20030f0b417f200041046a2802002200200141046a28020022014720002001491b0bb50101047f02400340200241e8026a210420022f01e60221054100210602400240034020052006460d0120032004412010cc082207450d02200441206a2104200641016a21062007417f4a0d000b2006417f6a21050b2001450d022001417f6a2101200220054102746a41c8056a28020021020c010b0b20002001360204200041003602002000410c6a2006360200200041086a20023602000f0b200042013702002000410c6a2005360200200041086a20023602000bbd0101047f0240034020022f018e182104410021052002210602400240034020042005460d01200541016a210520032006108f02210720064198026a21060240200741187441187541016a0e03000301000b0b2005417f6a21040b2001450d022001417f6a2101200220044102746a4190186a28020021020c010b0b20002001360204200041003602002000410c6a2005417f6a360200200041086a20023602000f0b200042013702002000410c6a2004360200200041086a20023602000bfe0202027f047e024020002001108b02220241ff01710d00024020002d00f001220320012d00f0012202460d00417f410120032002491b0f0b410021020240024002400240024002402003417f6a0e06000504030201060b417f200041f8016a2903002204200141f8016a29030022058520004180026a290300220620014180026a290300220785844200522004200554200620075420062007511b1b21020c050b0240200041f4016a280200200141f4016a280200200141fc016a2802002201200041fc016a2802002200200020014b1b10cc082202450d00417f410120024100481b0f0b417f200020014720002001491b0f0b200041f1016a200141f1016a412010cc082200450d03417f410120004100481b0f0b200041f1016a200141f1016a411010cc082200450d02417f410120004100481b0f0b200041f1016a200141f1016a410810cc082200450d01417f410120004100481b0f0b200041f1016a200141f1016a410410cc082200450d00417f410120004100481b0f0b20020bb30101047f02400340200241346a210420022f013221054100210602400240034020052006460d0120032004412010cc082207450d02200441206a2104200641016a21062007417f4a0d000b2006417f6a21050b2001450d022001417f6a2101200220054102746a4194036a28020021020c010b0b20002001360204200041003602002000410c6a2006360200200041086a20023602000f0b200042013702002000410c6a2005360200200041086a20023602000bb50101047f024003402002418c016a210420022f018a0121054100210602400240034020052006460d0120032004410810cc082207450d02200441086a2104200641016a21062007417f4a0d000b2006417f6a21050b2001450d022001417f6a2101200220054102746a41e4016a28020021020c010b0b20002001360204200041003602002000410c6a2006360200200041086a20023602000f0b200042013702002000410c6a2005360200200041086a20023602000b891304067f017e0f7f047e230041a0036b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a420037030020014200370320200141206a41eddcc700410810c501200141c0026a41f1cbc000411010c5012002200141c0026a41086a290000370300200320012900c002370300200141203602442001200141206a360240200141c8006a200141206a412010b30102400240200128024822040d00410021020c010b200128024c21052001200141c8006a41086a28020036025c20012004360258200141186a200141d8006a1087020240024020012802180d0002400240024002400240200128021c2206200128025c411c6e2202200220064b1bad421c7e2207422088a70d002007a72203417f4c0d000240024020030d00410421020c010b200310322202450d020b200141003602682001200236026020012003411c6e36026402402006450d00200141c0026a41c4006a21034100210802400240024002400340200141106a200141d8006a10870220012802100d0a20012802142209200128025c41e0006e2202200220094b1bad42e0007e2207422088a70d062007a72202417f4c0d060240024020020d004108210a0c010b20021032220a450d080b200141003602782001200a3602702001200241e0006e36027402400240024002402009450d00410021020340200141c0026a200141d8006a10930220014180026a41386a220b200141c0026a41386a29030037030020014180026a41306a220c200141c0026a41306a29030037030020014180026a41286a220d200141c0026a41286a29030037030020014180026a41206a220e200141c0026a41206a29030037030020014180026a41186a220f200141c0026a41186a29030037030020014180026a41106a2210200141c0026a41106a29030037030020014180026a41086a2211200141c0026a41086a290300370300200141e0016a41086a2212200341086a290200370300200141e0016a41106a2213200341106a290200370300200141e0016a41186a2214200341186a280200360200200120012903c00237038002200120032902003703e0012001280280032215450d02200141a0016a41386a2216200b290300370300200141a0016a41306a220b200c290300370300200141a0016a41286a220c200d290300370300200141a0016a41206a220d200e290300370300200141a0016a41186a220e200f290300370300200141a0016a41106a220f2010290300370300200141a0016a41086a2210201129030037030020014180016a41086a2211201229030037030020014180016a41106a2212201329030037030020014180016a41186a2213201428020036020020012001290380023703a001200120012903e00137038001024020022001280274470d00200141f0006a20024101109402200128027821022001280270210a0b200a200241e0006c6a220220012903a001370300200241106a200f290300370300200241086a2010290300370300200b290300210720162903002117200c2903002118200d2903002119200e290300211a200241c0006a2015360200200241186a201a370300200241206a2019370300200241286a2018370300200241c4006a200129038001370200200241386a2017370300200241306a2007370300200241cc006a2011290300370200200241d4006a2012290300370200200241dc006a20132802003602002001200128027841016a22023602782009417f6a22090d000b2001280270210a0b200a450d0d20012902742107200141086a200141d8006a10870220012802080d05200128020c220b200128025c41027622022002200b4b1b22024102742209417f4c0d0920020d014104210e0c020b2001280270210b2002450d0b200241e0006c2103200b41d4006a21020c0a0b20091032220e450d080b200141003602c802200120023602c4022001200e3602c0020240200b450d00410021020340200128025c220c4104490d032001280258220d28000021092001200c417c6a36025c2001200d41046a3602582009418094ebdc034b0d030240200220012802c402470d00200141c0026a2002410110950220012802c802210220012802c002210e0b200e20024102746a20093602002001200241016a22023602c802200b417f6a220b0d000b20012802c002210e0b200e450d0220012902c4022117200128025c22024104490d03200841016a210820012802582209280000210c20012002417c6a36025c2001200941046a36025802402001280268220b2001280264470d00200141e0006a200b1096022001280268210b0b20012802602202200b411c6c6a2209200c360218200920073702042009200a360200200941106a20173702002009410c6a200e3602002001200b41016a36026820082006470d000b200129026421070c0b0b20012802c40241ffffffff0371450d0020012802c002102c0b02402007422088a72202450d00200241e0006c2103200a41d4006a210203400240200241706a2802002209450d00200941306c450d002002416c6a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241e0006a2102200341a07f6a22030d000b0b2007a72202450d07200241e0006c0d010c070b02402017a72202450d00200241ffffffff0371450d00200e102c0b02402007422088a72202450d00200241e0006c2103200a41d4006a210203400240200241706a2802002209450d00200941306c450d002002416c6a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241e0006a2102200341a07f6a22030d000b0b2007a72202450d06200241e0006c450d060b200a102c0c050b2001290264210720020d060c050b103b000b1039000b03400240200241706a2802002209450d00200941306c450d002002416c6a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241e0006a2102200341a07f6a22030d000b0b20012802742202450d00200241e0006c450d00200b102c0b200141e0006a1097020b41002102200141003602880220014201370380022001410f3602a4012001200141c0006a3602a001200120014180026a3602e001200141d4026a4101360200200142013702c402200141b4bcc3003602c0022001200141a0016a3602d002200141e0016a41dcb7c000200141c0026a103e1a200135028802422086200135028002841000200128028402450d00200128028002102c0b2005450d002004102c0b0240024020020d0020004100360208200042043702000c010b20002007370204200020023602000b200141a0036a24000b9c0803097f087e037f23004180036b2202240041002103200241003a0090022001280204417f6a2104024002400240024003402004417f460d01200241f0016a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a0090022004417f6a21042005210320054120470d000b200241c0026a41086a2204200241f0016a41086a290300370300200241c0026a41106a2203200241f0016a41106a290300370300200241c0026a41186a2206200241f0016a41186a290300370300200220022903f0013703c002200541ff0171411f4b0d010c020b200341ff0171450d01200241003a0090020c010b200241d0016a41086a2004290300370300200241d0016a41106a2003290300370300200241d0016a41186a2006290300370300200220022903c0023703d001200241f0016a200110f6032002280290022203450d0020024190016a41186a2206200241d0016a41186a29030037030020024190016a41106a2207200241d0016a41106a29030037030020024190016a41086a2204200241d0016a41086a29030037030020024190016a41286a2208200241f0016a41086a29030037030020024190016a41306a2209200241f0016a41106a29030037030020024190016a41386a220a200241f0016a41186a290300370300200220022903d00137039001200220022903f0013703b00120024194026a2802002105200241f0016a41286a290300210b200241d0006a41086a2004290300220c370300200241d0006a41106a2007290300220d370300200241d0006a41186a2006290300220e370300200241d0006a41206a20022903b001220f370300200241d0006a41286a20082903002210370300200241d0006a41306a20092903002211370300200241d0006a41386a2206200a29030037030020022002290390012212370350200241106a41306a22072011370300200241106a41286a22082010370300200241106a41206a2209200f370300200241106a41186a220a200e370300200241106a41106a2213200d370300200241106a41086a2214200c370300200241106a41386a221520062903003703002002201237031020024190016a200110ca030240200228029001450d00200241086a220120042802003602002002200229039001370300200041386a2015290300370300200041306a2007290300370300200041286a2008290300370300200041206a2009290300370300200041186a200a290300370300200041106a2013290300370300200041086a201429030037030020002002290310370300200041c8006a200b3703002000200536024420002003360240200041d0006a2002290300370300200041d8006a20012802003602000c020b200041003602402005450d01200541306c450d012003102c0c010b200041003602400b20024180036a24000bd90103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42e0007e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341e0006c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141e0006e3602000b0f0b2005450d001039000b103b000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff037122042001470d02200141027422024100480d0220042001464102742104024002400240024002402000280200410020031b22010d002002450d010c030b200341027422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024102763602000b0f0b2004450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad421c7e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b2001411c6c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a2002411c6e3602000b0f0b2005450d001039000b103b000b950201067f024020002802082201450d00200028020022022001411c6c6a21030340024020022802082201450d00200141e0006c2104200228020041d4006a210103400240200141706a2802002205450d002001416c6a2802002206450d00200541306c450d002006102c0b024020012802002205450d002001417c6a2802002206450d002005410574450d002006102c0b200141e0006a2101200441a07f6a22040d000b0b024020022802042201450d00200141e0006c450d002002280200102c0b2002411c6a21010240200241106a28020041ffffffff0371450d00200228020c102c0b2001210220012003470d000b0b024020002802042201450d0020002802002204450d002001411c6c450d002004102c0b0bbd0101047f230041106b22022400200028020421032000280200210041012104200128021841fc9dc00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41dcedc60010671a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d0020022802002200280218419a92c10041012000411c6a28020028020c11000021040b200241106a240020040b3400200041eddcc70036020420004100360200200041146a4104360200200041106a4184ccc000360200200041086a42083702000b2901017f230041106b22022400200241003602082002420137030020002002109b02200241106a24000ba80301047f024002402001280208220241046a2203417f4c0d002001280200210102400240024002400240024020030d002000200336020420004101360200200041086a220341003602000c010b200310322204450d062000200336020420002004360200200041086a22034100360200200241c000490d01200241808001490d022002418080808004490d030b200041004101102f2000280200200041086a220528020022046a41033a00002005200441016a2204360200200020044104102f2000280200200528020022046a20023600002005200441046a22043602000c030b200041004101102f2000280200200041086a220528020022046a20024102743a00002005200441016a22043602000c020b200041004102102f2000280200200041086a220528020022046a20024102744101723b00002005200441026a22043602000c010b200041004104102f2000280200200041086a220528020022046a20024102744102723600002005200441046a22043602000b200020042002102f2000280200200328020022006a2001200210c9081a2003200020026a3602000f0b103b000b1039000b2701017f02404104103222020d001039000b200042043702042000200236020020004100108f010b3001017f230041106b220224002002410036020820024204370300200041044100109e022002109702200241106a24000bd50401077f024002402002411c6c41046a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b2000200336020420002004360200200041086a2204410036020020002002108f0102402002450d0020012002411c6c6a2105034020012802002106200020012802082202108f0102402002450d002006200241e0006c6a21070340200020042802004120102f2000280200200428020022036a22022006290000370000200241186a200641186a290000370000200241106a200641106a290000370000200241086a200641086a2900003700002004200341206a360200200641206a200010f80320062802502102200020062802582203108f01200641e0006a210602402003450d0020034105742108200428020021030340200020034120102f2000280200200428020022096a22032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a2900003700002004200941206a2203360200200241206a2102200841606a22080d000b0b20062007470d000b0b2001411c6a2106200128020c2102200020012802142203108f010240024020030d00200428020021030c010b2003410274210820042802002103034020022802002109200020034104102f2000280200200428020022036a20093600002004200341046a2203360200200241046a21022008417c6a22080d000b0b20012802182102200020034104102f2000280200200428020022036a20023600002004200341046a3602002006210120062005470d000b0b0f0b103b000b1039000bb90101027f230041e0006b22022400200241c0006a41003602000240410110322203450d002000420137020420002003360200200041004101102f2000280200200041086a220028020022036a41003a00002000200341016a360200024020022802402200450d000240200241c4006a2802002203450d00200341306c450d002000102c0b20022802504100200241d4006a28020022001b2203450d00200041ffffff3f71450d002003102c0b200241e0006a24000f0b1039000b910701057f230041f0006b22032400200341086a41eddcc700410810c501200341186a4180d0c000411610c501200341286a200110a102024002402002280208220141046a2204417f4c0d002002280200210202400240024002400240024020040d0020034100360250200342013703480c010b200410322205450d06200341003602502003200436024c20032005360248200141c000490d01200141808001490d022001418080808004490d030b200341c8006a41004101102f2003280248200328025022046a41033a00002003200441016a2204360250200341c8006a20044104102f2003280248200328025022046a20013600002003200441046a2204360250200341c8006a21050c030b200341c8006a41004101102f2003280248200328025022046a20014102743a00002003200441016a2204360250200341c8006a21050c020b200341c8006a41004102102f2003280248200328025022046a20014102744101723b00002003200441026a2204360250200341c8006a21050c010b200341c8006a41004104102f2003280248200328025022046a20014102744102723600002003200441046a2204360250200341c8006a21050b200520042001102f20032802482204200328025022056a2002200110c9081a2003200520016a2201360250200341d8006a2004200110c701200341ec006a200420016a360200200320043602682003200341e0006a3602642003200341d8006a360260200341386a200341e0006a107e0240200328024c450d002004102c0b20032802302204200328024022026a41206a2201417f4c0d000240024020010d00410121050c010b200110322205450d020b2000200136020420002005360200200041086a2201410036020020004100411010c8012000280200200128020022056a220620032900083700002001200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200128020022056a220620032900183700002001200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200410c8012000280200200128020022066a2005200410c9081a2001200620046a22063602002003280238210420002006200210c8012000280200200128020022006a2004200210c9081a2001200020026a3602000240200328023c450d002004102c0b0240200328022c450d002005102c0b200341f0006a24000f0b103b000b1039000bc10101047f230041306b220224000240411010322203450d002002421037020c20022003360208200241086a41004110102f20022802082203200228021022046a22052001290000370000200541086a200141086a2900003700002002200441106a2201360210200241186a2003200110c7012002412c6a200320016a360200200220033602282002200241186a41086a3602242002200241186a3602202000200241206a107e0240200228020c450d002003102c0b200241306a24000f0b1039000b8f0401057f230041e0006b22022400200241086a41eddcc700410810c501200241186a41e4cec000410710c50102400240412010322203450d002002422037023c20022003360238200241386a41004120102f20022802382203200228024022046a22052001290000370000200541086a200141086a290000370000200541106a200141106a290000370000200541186a200141186a2900003700002002200441206a2201360240200241c8006a2003200110c701200241dc006a200320016a360200200220033602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107e0240200228023c450d002003102c0b2002280230220341206a2201417f4c0d010240024020010d00410121050c010b200110322205450d010b2000200136020420002005360200200041086a2201410036020020004100411010c8012000280200200128020022056a220420022900083700002001200541106a2205360200200441086a200241086a41086a29000037000020002005411010c8012000280200200128020022056a220420022900183700002001200541106a2206360200200441086a200241186a41086a2900003700002002280228210520002006200310c8012000280200200128020022006a2005200310c9081a2001200020036a3602000240200228022c450d002005102c0b200241e0006a24000f0b1039000b103b000bf10904017f017e067f077e23004180016b2205240020052000200120022003200410a402024002400240024020052802000d00410121010c010b200541106a1092022001ad42e0007e2206422088a70d012006a72207417f4c0d010240024020070d00410821080c010b200710322208450d030b20054100360228200520083602202005200741e0006e360224200541206a410020011094022005280228210702402001450d002000200141e0006c6a21092005280220200741e0006c6a2101200541e4006a21080340200541c0006a41086a220a200041086a290300370300200541c0006a41106a220b200041106a290300370300200541c0006a41186a220c200041186a29030037030020052000290300370340200041206a2903002106200041286a290300210d200041306a290300210e200041386a290300210f200541306a200041c0006a10a502200541f0006a200041d0006a10a602200841086a200541f0006a41086a28020036020020082005290370370200200c2903002110200b2903002111200a290300211220052903402113200141386a200f370300200141306a200e370300200141286a200d370300200141206a2006370300200141086a201237030020012013370300200141106a2011370300200141c0006a2005290330370300200141c8006a200541306a41086a280200360200200141186a2010370300200141cc006a2005290260370200200141d4006a200541e0006a41086a290200370200200141e0006a2101200741016a2107200041e0006a22002009470d000b0b20052007360228200341ffffffff03712003470d0120034102742201417f4c0d010240024020010d00410421000c010b200110322200450d030b200541003602682005200036026020052001410276360264200541e0006a410020031095022005280260200528026822014102746a2002200341027410c9081a200541d4006a200120036a360200200541c0006a41086a2207200541206a41086a280200360200200520052903203703402005200529036037024c0240200528021822012005280214470d00200541106a2001109602200528021821010b20052802102001411c6c6a2200200529034037020020002004360218200041086a2007290300370200200041106a200541c0006a41106a22002903003702002005200141016a2201360218200541f0006a41086a2001360200200520052903102206370370024002402006a722010d00200541d8006a2201420037030020004200370300200541c0006a41086a2207420037030020054200370340200541e0006a41eddcc700410810c5012007200541e0006a41086a220829000037030020052005290060370340200541e0006a41f1cbc000411010c5012001200829000037030020002005290060370300200541c0006a412010b4010c010b200541d8006a2207420037030020004200370300200541c0006a41086a2208420037030020054200370340200541e0006a41eddcc700410810c5012008200541e0006a41086a220a29000037030020052005290060370340200541e0006a41f1cbc000411010c5012007200a29000037030020002005290060370300200541e0006a2001200541f0006a41086a280200109e02200541c0006a412020052802602201200528026810a70202402005280264450d002001102c0b200541f0006a1097020b410021010b20054180016a240020010f0b103b000b1039000b8b4012067f017e017f017e047f017e037f017e077f047e027f017e017f017e037f017e017f017e230041d0036b22062400200641e8026a22074200370300200641e0026a22084200370300200641d0026a41086a22094200370300200642003703d002200641c0026a41e6dcc700410710c5012009200641c0026a41086a220a290000370300200620062900c0023703d002200641b0036a41a08ec100411110c5012007200641b0036a41086a220b290000370300200820062900b003370300200641d8016a200641d0026a1089040240024020062802d801417d71450d004201210c0c010b200742003703002008420037030020094200370300200642003703d002200641c0026a41e6dcc700410710c5012009200a290000370300200620062900c0023703d002200641b0036a4180c0c200411310c501200841086a200b290000370000200820062900b003370000200641203602c4022006200641d0026a3602c002200641b0036a200641d0026a412010b3010240024020062802b00322090d004100210d0c010b20062802b403210702400240200641b8036a2802004104490d004101210d2009280000220b418194ebdc03490d010b4100210d200641003602e801200642013703e0012006410f3602c4032006200641c0026a3602c0032006200641e0016a3602b00220064194036a41013602002006420137028403200641b4bcc300360280032006200641c0036a36029003200641b0026a41dcb7c00020064180036a103e1a20063502e80142208620063502e00184100020062802e401450d0020062802e001102c0b2007450d002009102c0b4200210c200641e8026a4200370300200641d0026a41106a4200370300200641d0026a41086a22094200370300200642003703d002200641c0026a41e6dcc700410710c5012009200641c0026a41086a290000370300200620062900c0023703d002200641b0036a4188bbc200410910c501200841086a200641b0036a41086a2209290000370000200820062900b00337000020064180036a200641d0026a10cb0342c0f0f50b210e2006290380034202510d0020064180036a41106a280200210f200641b0026a41e6dcc700410710c50120064180036a41d0bbc200411510c5012006200f3602c002200641b0036a200641c0026a410410c701200641dc026a200641c0026a41046a360200200620093602d4022006200641c0026a3602d8022006200641b0036a3602d002200641e0016a200641d0026a107e02400240024020062802e801220941206a2207417f4c0d000240024020070d004101210a0c010b20071032220a450d020b200641003602d802200620073602d4022006200a3602d002200641d0026a4100411010c80120062802d00220062802d80222076a220a20062900b002370000200a41086a200641b0026a41086a2900003700002006200741106a22073602d802200641d0026a2007411010c80120062802d00220062802d80222076a220a200629008003370000200a41086a20064180036a41086a2900003700002006200741106a220a3602d80220062802e0012107200641d0026a200a200910c80120062802d002220a20062802d80222106a2007200910c9081a2006201020096a22093602d802024020062802e401450d002007102c0b200641d0016a200a200910c60120062802d401210720062802d0012109024020062802d402450d00200a102c0b0240024020090d0041c983c300ad4280808080e0068410004100200f41646a22092009200f4b1b2111428084afdf00210e200f21100c010b4100200f41646a22092009200f4b1b2111428084afdf00210e0240200720054b0d00200f21100c010b200641e8026a4200370300200641e0026a4200370300200641d0026a41086a22094200370300200642003703d002200641c0026a41e6dcc700410710c5012009200641c0026a41086a290000370300200620062900c0023703d002200641b0036a41c8c1c200410a10c501200841086a200641b0036a41086a290000370000200820062900b00337000020064180036a200641d0026a108a042006280280032209410420091b2212200629028403420020091b2213422088a741037422096a210703402009450d04200941786a21092007417c6a210a200741786a2107200a28020020054b0d000b201220096a280200211042c0f4a4eb00210e2013a72209450d00200941ffffffff0171450d002012102c0b200b4100200d1b2114200641d0026a41186a220d4200370300200641d0026a41106a22124200370300200641d0026a41086a220b4200370300200642003703d002200641c0026a41e6dcc700410710c501200b200641c0026a41086a2215290000370300200620062900c0023703d002200641b0036a4188c4c200411610c501200841086a2209200641b0036a41086a2216290000370000200820062900b003370000200641c8016a200641d0026a412010c60120062802cc01210720062802c8012105200d420037030020124200370300200b4200370300200642003703d002200641c0026a41e6dcc700410710c501200b2015290000370300200620062900c0023703d002200641b0036a4188c4c200411610c50120092016290000370000200820062900b00337000020062007200f20054101461b36028003200641d0026a412020064180036a410410a702200d420037030020124200370300200b4200370300200642003703d002200641c0026a41e6dcc700410710c501200b2015290000370300200620062900c0023703d002200641b0036a41ccb8c200410d10c50120092016290000370000200820062900b00337000020064180036a200641d0026a10e101200629028403420020062802800322081b2217422088a7410574211820042002200220044b1b21192008410120081b211a20064180026a41046a211b20064190026a41086a211c20064180036a41106a211d41002102034020022019200220194b1b21042001200241e0006c6a210a0340024020022004470d004200210c2017a72208450d06200841ffffff3f71450d06201a102c0c060b200241016a211e2001200241e0006c6a210520182109201a2108024003402009450d010240200a2008460d00200941606a210920082005412010cc082107200841206a210820070d010b0b200a41e0006a210a201e21020c010b0b200320024102746a2802002108200642003703880220064200370380022006420037039802200642003703900220064188016a2005290330220c200541386a2903002213428094ebdc03420010c70820064198016a200c2013428094ebdc03420010c808200641f8006a20062903980120064198016a41086a2903002008ad221f420010ce08200641a8016a2005290320220c200541286a2903002213428094ebdc03420010c708200641b8016a200c2013428094ebdc03420010c808200641e8006a20062903b801200641b8016a41086a290300201f420010ce08200629038801201f7e2213428094ebdc038021202013428094ebdc038221210240024002400240024002402006290368420020062903a801201f7e220c428094ebdc0380a7417f200c428080808080c0b2cd3b541b200c428094ebdc03824280cab5ee01566a2209ad7d85200641e8006a41086a29030042002009410047ad7d8584500d002006290378210c200641f8006a41086a2903002122200641c0026a2010200510d00320062802c0022109200620062802c80222073602b402200620093602b002200641b0036a2009200710b3010240024020062802b003220a0d0041002107202421230c010b20062802b40321020240024020062802b80322044104490d00200a2800002223418094ebdc034b0d00202321072004417c6a410f4b0d010b200641003602880320064201370380032006410f3602c4032006200641b0026a3602c003200620064180036a3602a003200641013602e402200642013702d402200641b4bcc3003602d0022006200641c0036a3602e002200641a0036a41dcb7c000200641d0026a103e1a2006350288034220862006350280038410000240200628028403450d00200628028003102c0b41002107202421230b2002450d00200a102c0b024020062802c402450d002009102c0b200820074d0d0320064180036a2010200510d003200628028803210a2006280280032109411010322202450d08200642103702d402200620023602d002200641d0026a41004104102f20062802d00220062802d80222026a20083600002006200241046a22083602d802200641d0026a20084110102f20062802d002220820062802d80222026a22042022200c2020a7417f2013428080808080c0b2cd3b541b20214280cab5ee01566aad7c2213200c54ad7c220c370008200420133700002006200241106a22023602d8022009200a2008200210a702024020062802d402450d002008102c0b0240200628028403450d002009102c0b200641b0036a41e6dcc700410710c50120064180036a41d192c100410d10c501200641c0026a200510e40220062802c802220841206a2209417f4c0d0720090d014101210a0c020b200642003703b802200642003703b002200642003703c802200642003703c002200641b0036a41e6dcc700410710c50120064180036a41d192c100410d10c501200641c0036a200510e40220062802c803220941206a2208417f4c0d060240024020080d00410121070c010b200810322207450d080b200641003602a803200620083602a403200620073602a003200641a0036a4100411010c80120062802a00320062802a80322086a220720062900b003370000200741086a20162900003700002006200841106a22083602a803200641a0036a2008411010c80120062802a00320062802a80322076a2208200629008003370000200841086a20064180036a41086a22082900003700002006200741106a220a3602a80320062802c0032107200641a0036a200a200910c80120062802a003220a20062802a80322026a2007200910c9081a2006200220096a22093602a803024020062802c403450d002007102c0b20064180036a200a200910d203200641c0036a41086a2207200828020036020020062006290380033703c0030240200628028c032209450d0020162007280200360200200620062903c0033703b00320062903900321250b024020062802a403450d00200a102c0b0240024020090d00200642003703900320064280808080c0003703880320062011360284032006410036028003200520064180036a10d4030c010b20082016280200360200200620062903b0033703800320062025370390032006200936028c030b200b200629038003370200200b41086a2008290300370200200b41106a201d290300370200200641003a00fc02200620053602d402200620113602d002200620143602f8022006200641c0026a3602f4022006200641b0026a3602f00220064180036a200641d0026a2010108b0402402006280288034102460d0020062802800320062802d802470d002006200b200f10960120062d00fc02410047723a00fc02200510d6032005108c0441ff017122094102460d002009410171450d0020064180036a41186a22074200370300201d4200370300200842003703002006420037038003200641b0036a41e6dcc700410710c50120082016290000370300200620062900b00337038003200641b0036a41d8bfc200410810c501201d41086a22052016290000370000201d20062900b0033700000240410020064180036a108d042209200941ff01714104461b41ff0171417f6a0e03010001000b20074200370300201d4200370300200842003703002006420037038003200641b0036a41e6dcc700410710c50120082016290000370300200620062900b00337038003200641b0036a41d8bfc200410810c50120052016290000370000201d20062900b00337000020064180036a4101108e040b200641d0026a108f040c030b20091032220a450d060b200641003602b802200620093602b4022006200a3602b002200641b0026a4100411010c80120062802b00220062802b80222096a220a20062900b003370000200a41086a20162900003700002006200941106a22093602b802200641b0026a2009411010c80120062802b00220062802b80222096a220a200629008003370000200a41086a20064180036a41086a220a2900003700002006200941106a22023602b80220062802c0022109200641b0026a2002200810c80120062802b002220220062802b80222046a2009200810c9081a2006200420086a22083602b802024020062802c402450d002009102c0b20064180036a2002200810d203200641c0036a41086a2226200a28020036020020062006290380033703c0030240200628028c032208450d0020162026280200360200200620062903c0033703b00320062903900321270b024020062802b402450d002002102c0b0240024020080d00200642003703900320064280808080c0003703880320062011360284032006410036028003200520064180036a10d4030c010b200a2016280200360200200620062903b0033703800320062027370390032006200836028c030b200b200629038003370200200b41086a2228200a290300370200200b41106a2229201d290300370200200641003a00fc02200620053602d402200620113602d002200620143602f802200620064190026a3602f402200620064180026a3602f002200641e0006a200641d0026a20102013200c109004024020062802604101470d00200628026420062802d802470d002006200b200f10960120062d00fc02410047723a00fc02200510d6032005108c0441ff017122084102460d002008410171450d0020064180036a41186a22094200370300201d4200370300200a42003703002006420037038003200641b0036a41e6dcc700410710c501200a2016290000370300200620062900b00337038003200641b0036a41d8bfc200410810c501201d41086a22022016290000370000201d20062900b0033700000240410020064180036a108d042208200841ff01714104461b41ff0171417f6a0e03010001000b20094200370300201d4200370300200a42003703002006420037038003200641b0036a41e6dcc700410710c501200a2016290000370300200620062900b00337038003200641b0036a41d8bfc200410810c50120022016290000370000201d20062900b00337000020064180036a4101108e040b200641d0026a108f04200641003602a802200642083703a002200642003703c802200642003703c002200641a0026a4100200541c8006a220828020010e00102400240200828020022080d004200211320062802a802210920062802a0022102420021200c010b200841306c2124200528024041106a21082007ad21220340200642003703b803200642003703b003200641386a200841706a2209290300220c200941086a2903002213428094ebdc03420010c708200641286a200c2013428094ebdc03420010c808200641186a2006290328220c200641286a41086a29030022132022420010ce08200641086a200c2013201f420010ce08200641d0026a2010200810d103200641c8006a20062802d002220720062802d80210d3014200200641086a41086a2903002006290308221320062903382220201f7e220c428094ebdc0380a7417f200c428080808080c0b2cd3b541b200c428094ebdc03824280cab5ee01566aad7c220c201354ad7c2213200641186a41086a29030020062903182221202020227e2220428094ebdc0380a7417f2020428080808080c0b2cd3b541b2020428094ebdc03824280cab5ee01566aad7c2220202154ad7c7d200c202054ad7d2221200c20207d2220200c56202120135620212013511b22091b21134200202020091b210c200641c8006a41106a29030021202006290350212120062802482109024020062802d402450d002007102c0b20064180036a2010200810d1032006280288032102200628028003210720062021420020091b2221200c7c220c3703d00220062020420020091b20137c200c202154ad7c22133703d80220072002200641d0026a411010a7020240200628028403450d002007102c0b200641b0026a41e6dcc700410710c50120064180036a41d192c100410d10c501200641c0036a200810e40220062802c803220941206a2207417f4c0d060240024020070d00410121020c010b200710322202450d080b200641003602a803200620073602a403200620023602a003200641a0036a4100411010c80120062802a00320062802a80322076a220220062900b002370000200241086a200641b0026a41086a22042900003700002006200741106a22073602a803200641a0036a2007411010c80120062802a00320062802a80322076a2202200629008003370000200241086a200a2900003700002006200741106a22023602a80320062802c0032107200641a0036a2002200910c80120062802a003220220062802a803222a6a2007200910c9081a2006202a20096a22093602a803024020062802c403450d002007102c0b20064180036a2002200910d2032026200a28020036020020062006290380033703c0030240200628028c032209450d0020042026280200360200200620062903c0033703b002200629039003212b0b024020062802a403450d002002102c0b0240024020090d00200642003703900320064280808080c0003703880320062011360284032006410036028003200820064180036a10d4030c010b200a2004280200360200200620062903b002370380032006202b370390032006200936028c030b200b2006290380033702002028200a2903003702002029201d290300370200200641003a00fc02200620083602d402200620113602d002200620143602f8022006200641b0036a3602f4022006200641c0026a3602f0022006200641d0026a2010200c2013109004024020062802004101470d00200628020420062802d802470d002006200b200f10960120062d00fc02410047723a00fc020b200641d0026a108f04200841086a290000210c200841106a290000211320082900002120200d200841186a29000037030020122013370300200b200c370300200620203703d0022016290300210c20062903b0032113024020062802a802220720062802a402470d00200641a0026a2007410110e00120062802a80221070b20062802a0022202200741306c6a22092013370320200920062903d002370300200941286a200c370300200941086a200b290300370300200941106a2012290300370300200941186a200d2903003703002006200741016a22093602a802200841306a2108202441506a22240d000b2015290300212020062903c00221130b200641e0016a41086a2208200541086a290300370300200641e0016a41106a2207200541106a290300370300200641e0016a41186a2204200541186a290300370300200620052903003703e00120020d020b202321240b200e42808c8d9e027c210e201e21020c010b20064180026a41086a2903002121200629038002210c201c290300211f200629039002212220062802a4022124200641d0026a200541d0006a10a60220062802d802210520062802d402212a20062802d002212620064180036a41186a22282004290300370300201d2007290300370300200a2008290300370300200620062903e00137038003200641c0026a41e6dcc700410710c501200641b0036a41f0c0c200411010c5012006200f3602800220064190026a20064180026a410410c7012006201b3602dc022006201c3602d402200620064180026a3602d802200620064190026a3602d002200641b0026a200641d0026a107e20062802b802220841206a2207417f4c0d010240024020070d00410121040c010b200710322204450d030b200c20137c2213200c54212920064100360298022006200736029402200620043602900220064190026a4100411010c80120062802900220062802980222076a220420062900c002370000200441086a20152900003700002006200741106a22073602980220064190026a2007411010c80120062802900220062802980222076a220420062900b003370000200441086a20162900003700002006200741106a22043602980220062802b002210720064190026a2004200810c8012006280290022204200628029802222c6a2007200810c9081a2006202c20086a220836029802024020062802b402450d002007102c0b2009ad210c202120207c21202029ad2121200641d0026a200420081091040240024020062802d00222080d0041002107200641003602b803200642083703b00341082108410021040c010b200620062902d402222d3702b403200620083602b003202d422088a72107202da721040b200c42c097e8b2017e210c202020217c2120200d20282903003703002012201d290300370300200b200a29030037030020062006290380033703d002024020072004470d00200641b0036a200710920420062802b803210720062802b00321080b200c200e7c210c2008200741d8006c22046a220820133703102008201f370308200820223703002008202636022c20082002360220200841186a2020370300200841346a2005360200200841306a202a360200200841286a2009360200200841246a2024360200200820062903d002370338200841c0006a200b290300370300200841c8006a2012290300370300200841d0006a200d2903003703002006200741016a22083602b803200628029802210920062802900221050240024020062802b003220a0d002005200910b4010c010b20062802b4032102200641d0026a200a200810e3032005200920062802d002220720062802d80210a702024020062802d402450d002007102c0b02402008450d00200a41306a2108200441d8006a210903400240200841746a2802002207450d00200741306c450d00200841706a280200102c0b024020082802002207450d00200741ffffff3f71450d002008417c6a280200102c0b200841d8006a2108200941a87f6a22090d000b0b2002450d00200241d8006c450d00200a102c0b200c42c097e8b2017c210c0240200628029402450d002005102c0b200c42c0b2cd3b7c210e20232124201e21020c000b0b103b000b1039000b4200210c42c0d1e123210e2013a72208450d00200841ffffffff0171450d002012102c0b2000200e3703082000200c370300200641d0036a24000b9b0203017f017e027f0240024020012802082202ad42307e2203422088a70d002003a72204417f4c0d00200128020021014108210502402004450d00200410322205450d020b20002005360200200041086a22054100360200200041046a200441306e36020020004100200210e0012005280200210402402002450d002001200241306c6a21052000280200200441306c6a21020340200220012903003703002002200141086a290300370308200241106a200141106a290300370300200241186a200141186a290300370300200241206a200141206a290300370300200241286a200141286a290300370300200241306a2102200441016a2104200141306a22012005470d000b0b200041086a20043602000f0b103b000b1039000bfd0101037f024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d00200128020021010240024020030d00410121040c010b200310322204450d020b20002004360200200041086a22044100360200200041046a200341057636020020004100200210d6012004280200210302402002450d0020024105742102200028020020034105746a2100034020002001290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a290000370000200341016a2103200041206a2100200141206a2101200241606a22020d000b0b200420033602000f0b103b000b1039000b18002001ad4220862000ad842003ad4220862002ad8410260b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a36021020004180d6c0001046000bc00101027f4100210341c4b5c80021040240024002400240024002400240200241e6e485f3064a0d00200241f0c2c98b06460d03200241e2c289ab06460d01200241e1ea91cb06470d06200141a0016a21040c050b200241e9dabdf306460d01200241e1e69df306460d03200241e7e485f306470d0541202103200121040c050b41202103200141206a21040c040b200141c0006a21040c020b200141e0006a21040c010b20014180016a21040b412021030b20002003360204200020043602000b130020004105360204200041c0e1c6003602000b130020004103360204200041b899c8003602000b130020004108360204200041b0cdc7003602000b130020004109360204200041c8f6c2003602000b130020004101360204200041f4a9c0003602000b130020004101360204200041ecacc0003602000b1300200041033602042000419ca7c0003602000b1300200041033602042000418881c4003602000b130020004103360204200041809cc7003602000b130020004103360204200041e4cac4003602000b040041010b040041010b040041010bf02705017f027e017f017e0e7f230041d0016b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e190102030405060708090a0b0c0d0e0f10111213141516171800010b02400240024002400240200141086a2d00000e050001020304000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a4190cdc4001046000b200241c0016a2001410c6a280200220110b70220022903c0012103200241086a200110b70220022d00102101200041003a0009200020013a0008200020034290ce007c3703000c1b0b200141106a2903002103200241086a2001410c6a28020010b70220022d00102101200041003a0009200020013a0008200020033703000c1a0b200041003b0108200042003703000c190b200241c0016a2001412c6a280200220110b70220022903c0012103200241086a200110b70220022d00102101200041003a0009200020013a00082000427f200342d080ce3b7c220420042003541b3703000c180b02400240024002400240024002400240024002400240200141086a2802000e0b000102030405060708090a000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41dce5c6001046000b2001410c6a3502002103200241086a109b0120022903102104200041003b0108200020032004428094ebdc03807e20032004428094ebdc03827e2203428094ebdc038042ffffffff0f2003428080808080c0b2cd3b541b2003428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c3703000c200b200041003b010820004288b6f8003703000c1f0b200041013b010820004280b283313703000c1e0b200241086a109b0120022903102103200041013b0108200020033703000c1d0b200241086a109b0120022903102103200041013b0108200020033703000c1c0b200041013b0108200042f898e5f0003703000c1b0b200041013b01082000200141146a35020042e8ad8a307e3703000c1a0b200041013b01082000200141146a35020022034288b8247e20034280c2d72f7e7c42b88882017c3703000c190b200041013b01082000417f200141186a280200220141016a220520052001491bad220342a8a7347e20034280c2d72f7e7c42a0f3d2057c3703000c180b200041013b0108200042a887df113703000c170b024002400240200141086a2802000e03000102000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41a4f0c5001046000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c170b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c160b200041023b0108200042d0aa8acd003703000c150b02400240024002400240024020012d00040e06000102030405000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41f49cc8001046000b200041003b01082000429883a1d5003703000c180b200041003b0108200042f0ebfa93013703000c170b200041003b0108200042a89de5d2003703000c160b200041003b0108200042d082f88e013703000c150b200041003b0108200042c8fdffd0003703000c140b02400240024002400240200141086a2d00000e050001020304000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41cca7c7001046000b200041003b01082000428089bce8003703000c160b200041003b0108200042a8e6a6d1003703000c150b200041003b0108200042909ac6a3013703000c140b200041003b0108200042a097c2da003703000c130b200041023b0108200042003703000c120b0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d00000e19000102030405060708090a0b0c0d0e0f101112131415161718000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41dc85c3001046000b200041003b0108200042b894eea9023703000c280b200041003b01082000428889dfb4013703000c270b200041003b0108200042e091edec013703000c260b200041003b010820002001410c6a350200220342f0d2ee017e20034280c2d72f7e7c42d881a689047c3703000c250b200041003b0108200042f8ebba83013703000c240b200041003b01082000200141146a35020042f8b10c7e42f0dcff93017c3703000c230b200041003b0108200042f8c29e83013703000c220b200041003b0108200042a8d6ffc3003703000c210b200041003b0108200042d0edd9c4013703000c200b200041003b010820004290a0a3313703000c1f0b200041003b010820004290a0a3313703000c1e0b200041003b010820004290a0a3313703000c1d0b200041003b0108200042c8d4c3313703000c1c0b200041003b0108200042b892bf313703000c1b0b200041003b01082000200141146a35020042a8c6007e42d8fbd0317c3703000c1a0b200041003b010820002001412c6a35020022034280aaec017e20034280c2d72f7e7c42d8aae7d3037c3703000c190b200041003b0108200042889cc1313703000c180b200041003b01082000200141186a35020042f0b1cc107e42c0e2d19c167c3703000c170b200041003b010820004290df898ffb003703000c160b200041003b0108200042b0b7fbd7013703000c150b200041003b01082000200141106a350200220342e8cfaf127e20034280cee4cd027e7c4280e9c9d6017c3703000c140b200041003b010820002001412c6a35020022034290f2ee017e20034280c2d72f7e7c42e88ac4dd037c3703000c130b200141146a3502002103200141dc016a3502002104200141e0016a3301002106200141d4016a2802002105200141c8016a2802002107200141bc016a2802002108200141b0016a2802002109200141a4016a280200210a20014198016a280200210b2001418c016a280200210c20014180016a280200210d200141f4006a280200210e200141e8006a280200210f200141dc006a2802002110200141d0006a2802002111200141c4006a2802002112200141386a28020021132001412c6a2802002114200141206a2802002101200041003b01082000427f427f200442f8ad377e20064280bce9007e7c417f2005417f2007417f2008417f2009417f200a417f200b417f200c417f200d417f200e417f200f417f2010417f2011417f2012417f2013417f200120146a221420142001491b22016a221320132001491b22016a221220122001491b22016a221120112001491b22016a221020102001491b22016a220f200f2001491b22016a220e200e2001491b22016a220d200d2001491b22016a220c200c2001491b22016a220b200b2001491b22016a220a200a2001491b22016a220920092001491b22016a220820082001491b22016a220720072001491b22016a220520052001491bad220442d0fec82f7e7c200342a8ada6047e7c20044280c2d72f7e7c4280a3c3c7007c2204200342c0f0f50b7e7c220320032004541b2203428084afdf007c220420042003541b3703000c120b200141146a3502002103200141dc016a3502002104200141e0016a3301002106200141d4016a2802002105200141c8016a2802002107200141bc016a2802002108200141b0016a2802002109200141a4016a280200210a20014198016a280200210b2001418c016a280200210c20014180016a280200210d200141f4006a280200210e200141e8006a280200210f200141dc006a2802002110200141d0006a2802002111200141c4006a2802002112200141386a28020021132001412c6a2802002114200141206a2802002101200041003b01082000427f427f200442f8ad377e20064280bce9007e7c417f2005417f2007417f2008417f2009417f200a417f200b417f200c417f200d417f200e417f200f417f2010417f2011417f2012417f2013417f200120146a221420142001491b22016a221320132001491b22016a221220122001491b22016a221120112001491b22016a221020102001491b22016a220f200f2001491b22016a220e200e2001491b22016a220d200d2001491b22016a220c200c2001491b22016a220b200b2001491b22016a220a200a2001491b22016a220920092001491b22016a220820082001491b22016a220720072001491b22016a220520052001491bad220442d0fec82f7e7c200342a8ada6047e7c20044280c2d72f7e7c4280a3c3c7007c2204200342c0f0f50b7e7c220320032004541b2203428084afdf007c220420042003541b3703000c110b10a802000b200041003b0108200042e8f1fbde0242b0cf95a00220012802041b3703000c0f0b0240024002400240200141086a2802000e0400010203000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a418889c6001046000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c100b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c0f0b200041003b0108200042c0cf8e313703000c0e0b200041003b01082000200141286a35020042f8ae0d7e2001411c6a35020042e8ad1d7e7c42f895f495017c3703000c0d0b10b802000b0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2802000e25000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41e88bc4001046000b200041013b0108200042e8073703000c2e0b200041013b0108200042e8073703000c2d0b200041013b0108200042e8073703000c2c0b200041013b0108200042e8073703000c2b0b200041013b0108200042e8073703000c2a0b200041013b0108200042e8073703000c290b200041013b0108200042e8073703000c280b200041013b0108200042e8073703000c270b200041013b0108200042e8073703000c260b200041013b0108200042e8073703000c250b200041013b0108200042e8073703000c240b200041013b0108200042e8073703000c230b200041013b0108200042e8073703000c220b200041013b0108200042e8073703000c210b200041013b0108200042e8073703000c200b200041013b0108200042e8073703000c1f0b200041013b0108200042e8073703000c1e0b200041013b0108200042e8073703000c1d0b200041013b0108200042e8073703000c1c0b200041013b0108200042e8073703000c1b0b200041013b0108200042e8073703000c1a0b200041013b0108200042e8073703000c190b200041013b0108200042e8073703000c180b200041013b0108200042e8073703000c170b200041013b0108200042e8073703000c160b200041013b0108200042e8073703000c150b200041013b0108200042e8073703000c140b200041013b0108200042e8073703000c130b200041013b0108200042e8073703000c120b200041013b0108200042e8073703000c110b200041013b0108200042e8073703000c100b200041013b0108200042e8073703000c0f0b200041013b0108200042e8073703000c0e0b200041013b0108200042e8073703000c0d0b200041013b0108200042e8073703000c0c0b200041013b0108200042e8073703000c0b0b10b902000b200041023b01082000428094ebdc033703000c090b10ba02000b10bb02000b10bc02000b10bf01000b10bd02000b024002400240024020012802040e0400010203000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41b48bc5001046000b200041003b0108200042003703000c050b200041003b0108200042003703000c040b200041003b0108200042003703000c030b10be02000b02400240024002400240024020012802040e06000102030405000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a4190f1c4001046000b200041003b0108200042003703000c050b200041003b0108200042003703000c040b200041003b0108200042003703000c030b200041003b0108200042003703000c020b200041003b0108200042003703000c010b02400240024002400240200141086a2802000e050001020304000b2002411c6a41013602002002420137020c200241eccdc800360208200241043602c401200241ec9cc8003602c0012002200241c0016a360218200241086a41d8cfc4001046000b200041013b0108200042e8073703000c030b200041013b0108200042e8073703000c020b200041013b0108200042e8073703000c010b200041013b0108200042e8073703000b200241d0016a24000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a360210200041dce7c3001046000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a360210200041b4f9c6001046000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a360210200041e4e7c7001046000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a36021020004198f5c0001046000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a36021020004188eec6001046000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a360210200041cc8fc6001046000b4d01017f230041206b22002400200041146a410136020020004201370204200041eccdc8003602002000410436021c200041ec9cc8003602182000200041186a360210200041acbdc3001046000bce1201027f230041d0026b2203240002400240200228022422042802082001200428020c28020c110100450d002003200141a80210c908220441a8026a41206a200241206a290200370300200441a8026a41186a200241186a290200370300200441a8026a41106a200241106a290200370300200441a8026a41086a200241086a290200370300200420022902003703a80220002004200441a8026a10c0020c010b2000420037030820004201370300200041206a41023a0000200041186a41003a000020042004280200417f6a2202360200024020020d002004280208200428020c2802001102000240200428020c280204450d002004280208102c0b200441046a22022002280200417f6a220236020020020d002004102c0b0240024002400240024002400240024002400240024020012802000e1800010b0b0b02030b0405060b0b0b070b0b0b0b0b0b0b08090a0b024002400240024002400240200141086a280200417e6a0e080010010210030405100b200141106a280200450d0f2001410c6a280200102c0c0f0b200141106a280200450d0e2001410c6a280200102c0c0e0b200141106a280200450d0d2001410c6a280200102c0c0d0b2001410c6a10c1020c0c0b0240200141146a2802002204450d002001410c6a28020021022004410c6c210403400240200241046a280200450d002002280200102c0b2002410c6a2102200441746a22040d000b0b200141106a2802002202450d0b2002410c6c450d0b200128020c102c0c0b0b200141106a280200450d0a2001410c6a280200102c0c0a0b02400240200141086a2802000e020b00010b2001412c6a102b2001419c016a102b0240200141186a2802002204450d00200141106a28020021022004410c6c210403400240200241046a280200450d002002280200102c0b2002410c6a2102200441746a22040d000b0b200141146a2802002202450d0a2002410c6c450d0a2001280210102c0c0a0b2001412c6a102b2001419c016a102b0240200141186a2802002204450d00200141106a28020021022004410c6c210403400240200241046a280200450d002002280200102c0b2002410c6a2102200441746a22040d000b0b200141146a2802002202450d092002410c6c450d092001280210102c0c090b02402001410c6a2802002202450d00200241f0006c2104200128020441046a210203402002102b200241f0006a2102200441907f6a22040d000b0b200141086a2802002202450d08200241f0006c450d082001280204102c0c080b02400240024002400240200141086a2d00000e180c0c0c0c0c0c000c0c0c0c0c0c0c0c010c0c020c0c0c0c03040b200141106a28020041ffffff3f71450d0b2001410c6a280200102c0c0b0b200141106a28020041ffffff3f71450d0a2001410c6a280200102c0c0a0b200141146a28020041ffffffff0371450d09200141106a280200102c0c090b0240200141106a28020041808080807872418080808078460d002001410c6a280200102c0b200141186a10e9010c080b0240200141106a28020041808080807872418080808078460d002001410c6a280200102c0b200141186a10e9010c070b20012802042202450d06200141086a280200450d062002102c0c060b02400240200141086a280200417f6a0e020001070b0240200141186a2802002204450d00200141106a28020021022004410c6c210403400240200241046a280200450d002002280200102c0b2002410c6a2102200441746a22040d000b0b200141146a2802002202450d062002410c6c450d062001280210102c0c060b0240200141186a2802002204450d00200141106a28020021022004410c6c210403400240200241046a280200450d002002280200102c0b2002410c6a2102200441746a22040d000b0b200141146a2802002202450d052002410c6c450d052001280210102c0c050b02402001410c6a280200450d00200141086a280200102c0b02402001411c6a2802002204450d00200141146a28020021022004410c6c210403400240200241046a280200450d002002280200102c0b2002410c6a2102200441746a22040d000b0b200141186a2802002202450d042002410c6c450d042001280214102c0c040b02402001410c6a2802002204450d0020012802042202200441d0006c6a21000340200241046a410036020020022802002104200241013602000240200241086a280200450d002004102c0b200241d0006a22022000470d000b0b0240200141086a2802002202450d00200241d0006c450d002001280204102c0b200141106a10c2020c030b20012802044101470d020240200141106a280200450d002001410c6a280200102c0b2001411c6a280200450d02200141186a280200102c0c020b02400240200141086a280200417f6a0e03000301030b0240200141146a280200450d00200141106a280200102c0b200141206a280200450d022001411c6a280200102c0c020b0240024002400240024002400240200141106a2d00000e0700010203040506080b200141146a2802002001411c6a28020010c3020240200141186a2802002202450d0020024198026c450d002001280214102c0b200141206a280200200141286a28020010c402200141246a2802002202450d0720024188026c450d072001280220102c0c070b200141146a2802002001411c6a28020010c3020240200141186a2802002202450d0020024198026c450d002001280214102c0b200141206a280200200141286a28020010c402200141246a2802002202450d0620024188026c450d062001280220102c0c060b200141146a2802002001411c6a28020010c3020240200141186a2802002202450d0020024198026c450d002001280214102c0b200141206a280200200141286a28020010c402200141246a2802002202450d0520024188026c450d052001280220102c0c050b200141146a2802002001411c6a28020010c302200141186a2802002202450d0420024198026c450d042001280214102c0c040b200141186a280200450d03200141146a280200102c0c030b200141186a10a201200141146a220228020010c5022002280200102c0c020b200141186a10a201200141146a220228020010c5022002280200102c0c010b024002400240200141086a2d00000e0403000103020b2001410c6a22022802001083022002280200102c0c020b2001410c6a22022802001083022002280200102c0c010b2001412c6a22022802001083022002280200102c0b200341d0026a24000b888203050c7f0e7e027f077e127f230041f0116b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e190203040506070801090a0b010c010d01010101010e010f1000020b200341800c6a41086a2204200141186a290300370300200341800c6a41106a2205200141206a290300370300200341800c6a41186a2206200141286a2802003602002003200141106a2903003703800c2001410c6a2802002107200141086a2d000021082001412c6a280200210920012d000b210a20012f0009210b200341800e6a41206a2201200241206a290200370300200341800e6a41186a220c200241186a290200370300200341800e6a41106a220d200241106a290200370300200341800e6a41086a220e200241086a290200370300200320022902003703800e0240024002400240024020080e050001020304000b200341d40f6a4101360200200342013702c40f200341eccdc8003602c00f200341043602e406200341ec9cc8003602e0062003200341e0066a3602d00f200341c00f6a4190cdc4001046000b200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903800e3703c00f200341e0066a200341c00f6a10c602200341b0066a41086a200341e0066a41096a290000370300200341b0066a41106a200341e0066a41116a290000370300200341b0066a41186a200341e0066a41196a290000370300200320032900e1063703b00620032d00e0064101460d13200341a00c6a41186a200341b0066a41186a290300370300200341a00c6a41106a200341b0066a41106a290300370300200341a00c6a41086a200341b0066a41086a290300370300200320032903b0063703a00c200341a0096a41186a22014200370300200341a0096a41106a22024200370300200341a0096a41086a22084200370300200342003703a009200341800a6a41afdec700410410c5012008200341800a6a41086a290000370300200320032900800a3703a009200341900a6a41f8b4c600410310c5012001200341900a6a41086a290000370300200220032900900a370300200341c00f6a200341a0096a412010c90120032d00c00f2101200341e8086a41186a2202200341c00f6a41196a290000370300200341e8086a41106a2208200341c00f6a41116a290000370300200341e8086a41086a220c200341c00f6a41096a290000370300200320032900c10f3703e8080240024020014101460d00200341e0066a41186a4200370300200341e0066a41106a4200370300200341e0066a41086a4200370300200342003703e0060c010b200341e0066a41186a2002290300370300200341e0066a41106a2008290300370300200341e0066a41086a200c290300370300200320032903e8083703e0060b0240200341a00c6a200341e0066a412010cc080d00200341c00f6a200741a80210c9081a200341003b01e006200341d8026a200341e0066a10c702200341e0066a200341c00f6a200341d8026a10c002200341e0066a41206a2d0000210120032f008107210220032903e006210f20032903e80621102003290284072111200341cb0f6a20034183076a2d00003a0000200341cc0f6a2011370200200341c00f6a41086a4104200120104202511b4104200f4201511b3a0000200341d40f6a20032902c00a370200200341c00f6a411c6a200341c00a6a41086a290200370200200341e40f6a200341d00a6a280200360200200320023b00c90f200341003a00c40f200341093602c00f200320032f00d8023b00c50f2003200341da026a2d00003a00c70f200341c00f6a10c8022007102c2003200341f3046a2800003600e30d200320032800f0043602e00d200041186a41013a000020004200370308200020032802e00d3600192000411c6a20032800e30d360000200042003703000c5e0b410321010c5c0b200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903800e3703c00f200341e0066a200341c00f6a10c602200341b0066a41086a200341e0066a41096a290000370300200341b0066a41106a200341e0066a41116a290000370300200341b0066a41186a200341e0066a41196a290000370300200320032900e1063703b00620032d00e0064101460d13200341a00c6a41186a200341b0066a41186a290300370300200341a00c6a41106a200341b0066a41106a290300370300200341a00c6a41086a200341b0066a41086a290300370300200320032903b0063703a00c200341a0096a41186a22014200370300200341a0096a41106a22024200370300200341a0096a41086a22084200370300200342003703a009200341800a6a41afdec700410410c5012008200341800a6a41086a290000370300200320032900800a3703a009200341900a6a41f8b4c600410310c5012001200341900a6a41086a290000370300200220032900900a370300200341c00f6a200341a0096a412010c90120032d00c00f2101200341e8086a41186a2202200341c00f6a41196a290000370300200341e8086a41106a2208200341c00f6a41116a290000370300200341e8086a41086a220c200341c00f6a41096a290000370300200320032900c10f3703e8080240024020014101460d00200341e0066a41186a4200370300200341e0066a41106a4200370300200341e0066a41086a4200370300200342003703e0060c010b200341e0066a41186a2002290300370300200341e0066a41106a2008290300370300200341e0066a41086a200c290300370300200320032903e8083703e0060b0240200341a00c6a200341e0066a412010cc080d00200341c00f6a200741a80210c9081a200341003b01e006200341d8026a200341e0066a10c702200341e0066a200341c00f6a200341d8026a10c002200341e0066a41206a2d0000210120032f008107210220032903e006210f20032903e80621102003290284072111200341cb0f6a20034183076a2d00003a0000200341cc0f6a2011370200200341c00f6a41086a4104200120104202511b4104200f4201511b3a0000200341d40f6a20032902c00a370200200341c00f6a411c6a200341c00a6a41086a290200370200200341e40f6a200341d00a6a280200360200200320023b00c90f200341003a00c40f200341093602c00f200320032f00d8023b00c50f2003200341da026a2d00003a00c70f200341c00f6a10c8022007102c2003200341f3046a2800003600e30d200320032800f0043602e00d200041186a41013a000020004200370308200020032802e00d3600192000411c6a20032800e30d360000200042003703000c5d0b410321010c5a0b200341a00a6a41186a20062d00003a0000200341a00a6a41106a2005290300370300200341a00a6a41086a2004290300370300200320032903800c3703a00a200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903800e3703c00f200341e0066a200341c00f6a10c602200341e00d6a41086a200341e0066a41106a290300370300200341e00d6a41106a200341e0066a41186a290300370300200341e00d6a41186a200341e0066a41206a2d00003a00002003200341e0066a41086a2903003703e00d20032d00e0064101460d1320032f00e106210120032d00e306210220032802e4062108200341e7026a200341e00d6a41086a290300370000200341ef026a200341e00d6a41106a290300370000200341f7026a200341e00d6a41186a2d00003a0000200320083600db02200320023a00da02200320013b01d802200320032903e00d3700df02200341a0096a41186a22024200370300200341a0096a41106a22014200370300200341a0096a41086a22084200370300200342003703a009200341800a6a41afdec700410410c5012008200341800a6a41086a290000370300200320032900800a3703a009200341900a6a41f8b4c600410310c5012002200341900a6a41086a290000370300200120032900900a370300200341c00f6a200341a0096a412010c90120032d00c00f2102200341e8086a41186a2208200341d90f6a290000370300200341e8086a41106a220c200341d10f6a290000370300200341e8086a41086a220d200341c90f6a290000370300200320032900c10f3703e8080240024020024101460d00200341e0066a41186a4200370300200341e0066a41106a4200370300200341e0066a41086a4200370300200342003703e0060c010b200341e0066a41186a2008290300370300200341e0066a41106a200c290300370300200341e0066a41086a200d290300370300200320032903e8083703e0060b0240200341d8026a200341e0066a412010cc08450d00410321010c590b200341cf0a6a200341a00a6a41086a290300370000200341d70a6a200341a00a6a41106a290300370000200341df0a6a200341a00a6a41186a2d00003a0000200320032903a00a3700c70a200341f0046a41086a200341c00a6a41086a290300370300200341f0046a41106a200341c00a6a41106a290300370300200341f0046a41186a200341c00a6a41186a290300370300200320073600c30a2003200a3a00c20a2003200b3b01c00a200320032903c00a3703f004200341a0096a41186a4200370300200341a0096a41106a4200370300200341a0096a41086a22024200370300200342003703a009200341800a6a41afdec700410410c5012002200341800a6a41086a290000370300200320032900800a3703a009200341900a6a41f8b4c600410310c501200141086a200341900a6a41086a290000370000200120032900900a370000200341c00f6a200341a0096a412010c90120032d00c00f2101200341e8086a41186a2202200341d90f6a290000370300200341e8086a41106a2207200341d10f6a290000370300200341e8086a41086a2208200341c90f6a290000370300200320032900c10f3703e8080240024020014101460d00200341e00d6a41186a4200370300200341e00d6a41106a4200370300200341e00d6a41086a4200370300200342003703e00d0c010b200341e00d6a41186a2002290300370300200341e00d6a41106a2007290300370300200341e00d6a41086a2008290300370300200320032903e8083703e00d0b200341cd0f6a200341e00d6a41086a290300370000200341d50f6a200341e00d6a41106a290300370000200341dd0f6a200341e00d6a41186a290300370000200341013a00c40f200341093602c00f200320032903e00d3700c50f200341c00f6a10c802200341c00f6a41186a200341f0046a41186a290300370300200341c00f6a41106a200341f0046a41106a290300370300200341c00f6a41086a200341f0046a41086a290300370300200320032903f0043703c00f200341b0066a41186a22014200370300200341b0066a41106a22024200370300200341b0066a41086a22074200370300200342003703b006200341900a6a41afdec700410410c5012007200341900a6a41086a290000370300200320032900900a3703b006200341e8086a41f8b4c600410310c5012001200341e8086a41086a290000370300200220032900e808370300200341b0066a4120200341c00f6a10c902200320032800a00c3602e0042003200341a00c6a41036a2800003600e304200041186a41013a000020004200370308200020032802e0043600192000411c6a20032800e304360000200042003703000c5b0b200341a00a6a41186a20062d00003a0000200341a00a6a41106a2005290300370300200341a00a6a41086a2004290300370300200320032903800c3703a00a200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903800e3703c00f200341e0066a200341c00f6a10c602200341c00a6a41086a200341e0066a41096a290000370300200341c00a6a41106a200341e0066a41116a290000370300200341c00a6a41186a200341e0066a41196a290000370300200320032900e1063703c00a0240024020032d00e0064101460d00200341a00c6a41186a200341c00a6a41186a290300370300200341a00c6a41106a200341c00a6a41106a290300370300200341a00c6a41086a200341c00a6a41086a290300370300200320032903c00a3703a00c200341a0096a41186a22014200370300200341a0096a41106a22024200370300200341a0096a41086a22084200370300200342003703a009200341800a6a41afdec700410410c5012008200341800a6a41086a290000370300200320032900800a3703a009200341900a6a41f8b4c600410310c5012001200341900a6a41086a290000370300200220032900900a370300200341c00f6a200341a0096a412010c90120032d00c00f2101200341e8086a41186a2202200341c00f6a41196a290000370300200341e8086a41106a2208200341c00f6a41116a290000370300200341e8086a41086a220c200341c00f6a41096a290000370300200320032900c10f3703e8080240024020014101460d00200341e0066a41186a4200370300200341e0066a41106a4200370300200341e0066a41086a4200370300200342003703e0060c010b200341e0066a41186a2002290300370300200341e0066a41106a2008290300370300200341e0066a41086a200c290300370300200320032903e8083703e0060b0240200341a00c6a200341e0066a412010cc08450d0020091083022009102c410321010c020b200341bf066a200341a00a6a41086a290300370000200341c7066a200341a00a6a41106a290300370000200341cf066a200341a00a6a41186a2d00003a0000200320032903a00a3700b706200341e00d6a41086a2201200341b0066a41086a290300370300200341e00d6a41106a2202200341b0066a41106a290300370300200341e00d6a41186a2208200341b0066a41186a290300370300200320073600b3062003200a3a00b2062003200b3b01b006200320032903b0063703e00d200341c00f6a200941a80210c9081a200341ea066a2001290300370100200341f2066a2002290300370100200341fa066a200829030037010020034180023b01e006200320032903e00d3701e206200341d8026a200341e0066a10c702200341e0066a200341c00f6a200341d8026a10c002200341e0066a41206a2d0000210120032f008107210220032903e006210f20032903e80621102003290284072111200341cb0f6a20034183076a2d00003a0000200341cc0f6a2011370200200341c00f6a41086a4104200120104202511b4104200f4201511b3a0000200341d40f6a20032902c00a370200200341c00f6a411c6a200341c00a6a41086a290200370200200341e40f6a200341c00a6a41106a280200360200200320023b00c90f200341093602c00f200320032f00d8023b00c50f200341023a00c40f2003200341d8026a41026a2d00003a00c70f200341c00f6a10c8022009102c200320032800e0043602f0092003200341e3046a2800003600f309200041186a41013a000020004200370308200020032802f0093600192000411c6a20032800f309360000200042003703000c5c0b20091083022009102c410221010b200320032800e0043602f0092003200341e3046a2800003600f309200041186a41003a000020004200370308200020032802f0093600192000411c6a20032800f309360000200041286a410b360000200041b4bfc4003600242000411b3b0021200041206a20013a0000200042013703000c5a0b000b200341e0066a41106a200141186a290300370300200341e0066a41086a200141106a2903003703002003200141086a2903003703e006200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f2000200341e0066a200341c00f6a10ca020c580b2001411c6a2802002106200141186a2802002107200141146a280200210c200141106a28020021082001410c6a2802002109200141086a280200210d200341d8026a200141206a41880210c9081a200341a00c6a41206a2201200241206a290200370300200341a00c6a41186a220e200241186a290200370300200341a00c6a41106a2204200241106a290200370300200341a00c6a41086a2205200241086a290200370300200320022902003703a00c024002400240200d0e03000102000b200341c00f6a41146a4101360200200342013702c40f200341eccdc8003602c00f200341043602e406200341ec9cc8003602e0062003200341e0066a3602d00f200341c00f6a41a4f0c5001046000b200341e0066a200341d8026a41880210c9081a200341c00f6a41206a2001290300370300200341c00f6a41186a200e290300370300200341c00f6a41106a2004290300370300200341c00f6a41086a2005290300370300200320032903a00c3703c00f200341c00a6a200341c00f6a10c602200341e8086a41086a200341c90a6a2201290000370300200341e8086a41106a200341d10a6a2202290000370300200341e8086a41186a200341d90a6a220d290000370300200320032900c10a3703e80802400240024020032d00c00a4101470d00200341a00e6a41023a0000200341980e6a41003a0000200342003703880e200342013703800e02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b0240200c450d002008450d00200c410c6c450d002008102c0b200341ec066a102b200341dc076a102b200341a80e6a2102200341880e6a210141002107410221080c010b200341a0096a41186a200341e8086a41186a290300220f370300200341a0096a41106a200341e8086a41106a2903002210370300200341a0096a41086a200341e8086a41086a2903002211370300200320032903e80822123703a009200d200f3700002002201037000020012011370000200320123700c10a200341013a00c00a200341c00f6a200341e0066a41880210c9081a200341fc046a2007360200200341f0046a41086a200c3602002003200636028005200320083602f404200320093602f004200341800e6a200341c00a6a200341c00f6a200341f0046a10cb0220032903800e4201520d01200341a80e6a2102200341800e6a41086a2101200341a00e6a2d0000210820032d00980e210720032903900e210f0b200320012800113602f0092003200141146a2800003600f30920012f0019210c20012d001b210d200128001c210e200228000021022001280224210120032903880e2110200041186a20073a0000200041106a200f37030020002010370308200020032802f0093600192000411c6a20032800f3093600002000412c6a2001360200200041286a20023600002000200e3600242000200d3a00232000200c3b0021200041206a20083a0000200042013703000c590b200320032800990e3602f0092003200341800e6a411c6a2800003600f30920032903880e210f20032903900e2110200041186a20032d00980e3a0000200041106a20103703002000200f370308200020032802f0093600192000411c6a20032800f309360000200042003703000c580b200341e0066a200341d8026a41880210c9081a200341c00f6a41206a2001290300370300200341c00f6a41186a200e290300370300200341c00f6a41106a2004290300370300200341c00f6a41086a2005290300370300200320032903a00c3703c00f024002400240200341c00f6a10cc02450d00200341a00e6a41023a0000200341980e6a41003a0000200342003703880e200342013703800e02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b0240200c450d002008450d00200c410c6c450d002008102c0b200341ec066a102b200341dc076a102b200341a80e6a2102200341880e6a210141002107410221080c010b200341c00f6a10cd02200341d90a6a200341c00f6a41186a290300370000200341d10a6a200341c00f6a41106a290300370000200341c90a6a200341c00f6a41086a290300370000200341013a00c00a200320032903c00f3700c10a200341c00f6a200341e0066a41880210c9081a200341fc046a2007360200200341f0046a41086a200c3602002003200636028005200320083602f404200320093602f004200341800e6a200341c00a6a200341c00f6a200341f0046a10cb0220032903800e4201520d01200341a80e6a2102200341800e6a41086a2101200341a00e6a2d0000210820032d00980e210720032903900e210f0b200320012800113602e0042003200141146a2800003600e30420012f0019210c20012d001b210d200128001c210e200228000021022001280224210120032903880e2110200041186a20073a0000200041106a200f37030020002010370308200020032802e0043600192000411c6a20032800e3043600002000412c6a2001360200200041286a20023600002000200e3600242000200d3a00232000200c3b0021200041206a20083a0000200042013703000c580b200320032800990e3602e0042003200341800e6a411c6a2800003600e30420032903880e210f20032903900e2110200041186a20032d00980e3a0000200041106a20103703002000200f370308200020032802e0043600192000411c6a20032800e304360000200042003703000c570b200141086a290300210f200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f02400240200341c00f6a10cc020d00200341e8086a41186a22024200370300200341e8086a41106a22014200370300200341e8086a41086a22074200370300200342003703e808200341800a6a41cbdcc700410910c5012007200341800a6a41086a290000370300200320032900800a3703e808200341900a6a4194d8c300410910c5012002200341900a6a41086a290000370300200120032900900a370300200341e8086a412010ce020d11200341e8086a41186a22074200370300200341f8086a22084200370300200341e8086a41086a22024200370300200342003703e808200341800a6a41cbdcc700410910c5012002200341800a6a41086a220c290000370300200320032900800a3703e808200341900a6a41f8d7c300410310c501200141086a220d200341900a6a41086a220e290000370000200120032900900a3700002003200341e8086a10cf0220032903082210500d012003280200450d01201042b8177c200f580d0141dcddc30041ce0041acdec300103c000b2000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c570b200742003703002008420037030020024200370300200342003703e808200341800a6a41cbdcc700410910c5012002200c290000370300200320032900800a3703e808200341900a6a41f8d7c300410310c501200d200e290000370000200120032900900a3700002003200f3703c00f200341e8086a4120200341c00f6a410810a702200742003703002008420037030020024200370300200342003703e808200341800a6a41cbdcc700410910c5012002200c290000370300200320032900800a3703e808200341900a6a4194d8c300410910c501200d200e290000370000200120032900900a370000200341013a00a00c200341e8086a4120200341a00c6a410110a702200041186a41003a000020004200370308200020032800d0093600192000411c6a200341d0096a41036a280000360000200042003703000c560b200341e0046a41086a220e2001411d6a290000370300200320012900153703e0042001410d6a2900002110200141286a2802002104200141056a290000210f20012d0004210d20012d00252105200341c00a6a41206a2201200241206a290200370300200341c00a6a41186a2207200241186a290200370300200341c00a6a41106a2208200241106a290200370300200341c00a6a41086a220c200241086a290200370300200320022902003703c00a200f421888a72102024002400240024002400240200d0e06000102030405000b200341d40f6a4101360200200342013702c40f200341eccdc8003602c00f200341043602e406200341ec9cc8003602e0062003200341e0066a3602d00f200341c00f6a41f49cc8001046000b200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903c00a3703c00f200341e0066a200341c00f6a10c602200341a00a6a41086a200341e0066a41106a290300370300200341a00a6a41106a200341e0066a41186a290300370300200341a00a6a41186a200341e0066a41206a2d00003a00002003200341e0066a41086a2903003703a00a20032d00e0064101460d1320032f00e106210120032d00e306210720032802e4062108200341d8026a410f6a200341a00a6a41086a290300370000200341d8026a41176a200341a00a6a41106a290300370000200341d8026a411f6a200341a00a6a41186a2d00003a0000200320083600db02200320073a00da02200320013b01d802200320032903a00a3700df02200341800e6a200210d002200341c00f6a20032802800e220820032802880e220c10d102200341e00d6a41086a2207200341c00f6a411f6a290000370300200341e00d6a41106a220d200341e70f6a290000370300200341e00d6a41186a220e200341ef0f6a2d00003a0000200320032900d70f3703e00d200320032800f10f3602e0062003200341f40f6a2800003600e306200341c00f6a41086a290300210f20032903c00f2110024020032d00f00f22014102460d0020032800d30f210420032d00d20f210520032f01d00f2106200341b0066a410f6a2007290300370000200341b0066a41176a200d290300370000200341b0066a411f6a200e2d00003a0000200320043600b306200320053a00b206200320063b01b006200320032903e00d3700b706200320032802e0063602c809200320032800e3063600cb090b0240024020014102470d00200341b0066a41186a200341d8026a41186a290300370300200341b0066a41106a200341d8026a41106a290300370300200341b0066a41086a200341d8026a41086a290300370300200320032903d8023703b0064200210f4280a094a58d1d2110200341e0066a200341d8026a4280a094a58d1d420010d202410021010c010b200341e0066a410310d3020b0240024020032d00e00622074104470d00200341f40f6a20032800cb09360000200341c00f6a41186a200341b8066a290300370300200341e00f6a200341b0066a41106a290300370300200341e80f6a200341b0066a41186a290300370300200320103703c00f200320032903b0063703d00f200320013a00f00f200320032802c8093600f10f2003200f3703c80f2008200c200341c00f6a10d40220032f00e10620032d00e3064110747221010c010b20032f00e10620032d00e3064110747221010b20032902e406210f024020032802840e450d002008102c0b20074104470d55200341e80f6a2002360200200341cd0f6a200341e0026a290300370000200341d50f6a200341e8026a290300370000200341dd0f6a200341d8026a41186a290300370000200341003a00c40f200341013602c00f200320032903d8023700c50f200341c00f6a10c802200041186a41003a000020004200370308200020032800a00c3600192000411c6a200341a30c6a280000360000200042003703000c590b200341a0096a41186a200e290300370300200320103703a8092003200f3703a009200320032903e0043703b009200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903c00a3703c00f200341e0066a200341c00f6a10c602200341e00d6a41086a200341e0066a41106a290300370300200341e00d6a41106a200341e0066a41186a290300370300200341e00d6a41186a200341e0066a41206a2d00003a00002003200341e0066a41086a2903003703e00d20032d00e0064101460d1320032f00e106210120032d00e306210220032802e40621072003418f0c6a200341e00d6a41086a290300370000200341970c6a200341f00d6a2903003700002003419f0c6a200341e00d6a41186a2d00003a0000200320073600830c200320023a00820c200320013b01800c200320032903e00d3700870c0240200341800c6a200341a0096a412010cc08450d00200341d0096a200410d002200341c00f6a20032802d009220220032802d809220710d102200341800e6a41086a200341e80f6a290300370300200320032903e00f3703800e200320032800f10f3602e0062003200341f40f6a2800003600e306200341c00f6a41186a290300211320032903d00f211420032903c80f211120032903c00f2112024020032d00f00f220841024622010d00200341a00a6a41086a200341800e6a41086a290300370300200320032903800e3703a00a200320032802e0063602c809200320032800e3063600cb090b200341e0066a41086a220c200341a00a6a41086a290300370300200320032903a00a3703e00620010d15200341f0046a41086a200c2903002215370300200320032903e00622163703f004200341c8066a2015370300200320133703b806200320143703b006200320163703c00620084101710d16200341b0066a200341800c6a412010cc080d1a0240201220118450450d0042002113420021140c4f0b02400240200341800c6a200341a0096a412010cc08450d00200341800a6a41c1dcc700410610c501200341900a6a41acc8c700410710c501200341c00f6a200341a0096a10d50220032802c80f220141206a2208417f4c0d190240024020080d004101210c0c010b20081032220c450d1b0b200341003602f809200320083602f4092003200c3602f009200341f0096a4100411010c80120032802f00920032802f80922086a220c20032900800a370000200c41086a200341800a6a41086a2900003700002003200841106a22083602f809200341f0096a2008411010c80120032802f00920032802f80922086a220c20032900900a370000200c41086a200341900a6a41086a2900003700002003200841106a22083602f80920032802c00f210c200341f0096a2008200110c80120032802f009220820032802f809220d6a200c200110c9081a2003200d20016a22013602f809024020032802c40f450d00200c102c0b200341d8026a2008200110d60220032903d8022117200342003703d802200341a4036a2802002105200341a0036a280200210602400240024020174201520d00200341d8026a41186a290300211520032903e802211620032903e0022118200341d8026a41286a2903002119200341d8026a41306a290300211a200329039803211b20032903f802211c200341800e6a41306a20034190036a290300370300200341800e6a41286a201a370300200341800e6a41206a2019370300200341900e6a20153703002003201c3703980e200320163703880e200320183703800e2003201b3703b80e2003200341800e6a3602fc09200341900a6a41c1dcc700410610c501200341e8086a41acc8c700410710c501200341c00f6a200341800c6a10d50220032802c80f220c41206a220d417f4c0d1c02400240200d0d004101210e0c010b200d1032220e450d1e0b41002109200341003602f8042003200d3602f4042003200e3602f004200341f0046a4100411010c80120032802f00420032802f804220d6a220e20032900900a370000200e41086a200341900a6a41086a2900003700002003200d41106a220d3602f804200341f0046a200d411010c80120032802f00420032802f804220d6a220e20032900e808370000200e41086a200341e8086a41086a2900003700002003200d41106a220d3602f80420032802c00f210e200341f0046a200d200c10c80120032802f004220d20032802f804220a6a200e200c10c9081a2003200a200c6a220c3602f804024020032802c40f450d00200e102c0b200341e0066a200d200c10d60220032903e006211b42002115200342003703e006200341ac076a280200210b200341a8076a280200211d02400240201b4201510d004101211e420021164200211f42002120420021214200212242002119420021180c010b20034198076a290300212220034190076a290300212120034188076a290300212020034180076a2903002115200341e0066a41186a290300211620032903f006211820032903e8062119410121094100211e20032903a007211f0b0240024020032903900e221a201220162016201256201520115620152011511b220e1b221c7c2223201a54220a200341800e6a41186a290300221a20112015200e1b22247c200aad7c2225201a542025201a511b4101470d00200341c00f6a410310d70220032902c40f22154280807c8321162015420888a7210c20032802c00f21092015a7210e4101210a0c010b200341800e6a41186a2025370300200320233703900e200341d00c6a220a2022370300200341c80c6a22262021370300200341a00c6a41186a201520247d2016201c54ad7d221a370300200320203703c00c20032016201c7d22163703b00c200320193703a00c200320183703a80c02400240427f201920167c22152015201954220e2018201a7c200ead7c221520185420152018511b220e1b22254280c8afa025544100427f2015200e1b2215501b0d00200341b00c6a2903002115200a29030021162026290300211a200341c00c6a290300212520032903a80c212020032903a00c21214201212320032903b80c21220c010b0240024020192016842018201a848450450d00420021230c010b42002123200341e8086a41186a220e4200370300200341e8086a41106a220a4200370300200341e8086a41086a22264200370300200342003703e808200341800a6a41d4dcc700410810c5012026200341800a6a41086a2227290000370300200320032900800a3703e808200341900a6a41bba8c700410d10c501200e200341900a6a41086a2228290000370300200a20032900900a370300200341286a200341e8086a412010d301200341286a41106a29030021162003290330211a20032802282129200e4200370300200a420037030020264200370300200342003703e808200341800a6a41d4dcc700410810c50120262027290000370300200320032900800a3703e808200341900a6a41bba8c700410d10c501200e2028290000370300200a20032900900a370300200342002016420020291b221620157d201a420020291b221a202554ad7d2220201a20257d2221201a56202020165620202016511b220e1b3703c80f200342002021200e1b3703c00f200341e8086a4120200341c00f6a411010a702200341f80f6a2015370300200341f00f6a2025370300200341c00f6a41086a41013a0000200341d10f6a200341800c6a41086a290300370000200341d90f6a200341800c6a41106a290300370000200341e10f6a200341800c6a41186a290300370000200341023602c00f200320032903800c3700c90f200341c00f6a10c8020b0b201b420151210e20034188076a202537030020034190076a201a370300200341f0066a202037030020034198076a2016370300200341f8066a201537030020032022370380072003201f3703a007200320213703e8064100210a2003200b410020091b3602ac072003201d410020091b3602a807200320234201512209ad3703e0060240024020090d00200d200c10b401420021164100210c0c010b200d200c200341e8066a10d802420021164101210c0b0b024020032802f404450d00200d102c0b024002400240200a0d000240200c41ff0171220c450d00200e41ff0171450d020b200c0d02200e41ff0171450d02200341c00f6a41086a41043a0000200341d10f6a200341800c6a41086a290300370000200341d90f6a200341900c6a290300370000200341e10f6a200341980c6a290300370000200320032903800c3700c90f200341003602c00f200341c00f6a10c8020c020b200341e80d6a200cad42ff0183420886200ead42ff018384201684370300200320093602e40d4101210d200341013602e00d410021090c030b200341c00f6a41086a41033a0000200341d10f6a200341800c6a41086a290300370000200341d90f6a200341900c6a290300370000200341e10f6a200341980c6a290300370000200320032903800c3700c90f200341003602c00f200341c00f6a10c8020b0240201e450d00200341f80f6a2018370300200341f00f6a2019370300200341c00f6a41086a41003a0000200341d10f6a200341800c6a41086a290300370000200341d90f6a200341900c6a290300370000200341e10f6a200341980c6a290300370000200341023602c00f200320032903800c3700c90f200341c00f6a10c8020b200341f00d6a2024370300200341e80d6a201c37030041002109200341003602e00d4101210d4100210c0c020b200341b80e6a4200370300200341b00e6a4200370300200341a80e6a4200370300200341a00e6a4200370300200341800e6a41186a4200370300200341900e6a4200370300200341800e6a41086a4200370300200342003703800e2003200341800e6a3602fc09200341c00f6a410810d702200341ec0d6a200341c00f6a41086a28020036020041012109200341013602e00d200320032903c00f3702e40d4100210d0b4101210c0b200341a00c6a41086a220e200341800e6a41186a290300370300200341a00c6a41106a220a200341800e6a41206a290300370300200341a00c6a41186a220b200341800e6a41286a290300370300200341a00c6a41206a221d200341800e6a41306a290300370300200320032903900e3703a00c200341800e6a41086a290300211520032903800e211602400240200c450d00200341e00d6a41086a29030022174280807c83211a2017420888a7210120032802e40d210d2017a7210c4101210e0c010b200341b80e6a2903002125200341e00d6a41106a2903002119200341e00d6a41086a2903002118200341e0066a41186a200e290300221b370300200341e0066a41206a200a290300370300200341e0066a41286a200b290300370300200341e0066a41306a201d290300370300200320032903a00c221c3703f006200320163703e006200320153703e80602400240427f2016201c7c221a201a201654220c2015201b7c200cad7c221a201554201a2015511b220c1b22244280c8afa025544100427f201a200c1b221a501b0d00200341f0066a290300211a20034190076a290300211b20034188076a290300211c20034180076a290300212420032903e806211f20032903e00621204201212120032903f80621220c010b024002402016201c842015201b848450450d00420021210c010b42002121200341f0046a41186a220e4200370300200341f0046a41106a220a4200370300200341f0046a41086a220b4200370300200342003703f004200341c00f6a41d4dcc700410810c501200b200341c00f6a41086a220c290000370300200320032900c00f3703f004200341c00f6a41bba8c700410d10c501200e200c290000370300200a20032900c00f370300200341106a200341f0046a412010d301200341106a41106a290300211b2003290318211c2003280210211d200e4200370300200a4200370300200b4200370300200342003703f004200341c00f6a41d4dcc700410810c501200b200c290000370300200320032900c00f3703f004200341c00f6a41bba8c700410d10c501200e200c290000370300200a20032900c00f37030020034200201b4200201d1b221b201a7d201c4200201d1b221c202454ad7d221f201c20247d2220201c56201f201b56201f201b511b220e1b3703c80f200342002020200e1b3703c00f200341f0046a4120200341c00f6a411010a702200341f80f6a201a370300200341f00f6a2024370300200c41013a0000200341d10f6a20032903a809370000200341d90f6a200341a0096a41106a290300370000200341e10f6a200341a0096a41186a290300370000200341023602c00f200320032903a0093700c90f200341c00f6a10c8020b0b2017420151210c20034180036a202437030020034188036a201c370300200341e8026a201f37030020034190036a201b370300200341f0026a201a370300200320223703f8022003202537039803200320203703e0024100210e200320054100200d1b3602a403200320064100200d1b3602a00320032021420151220dad3703d80202400240200d0d002008200110b4014200211a410021010c010b20082001200341e0026a10d8024200211a410121010b0b024020032802f409450d002008102c0b200e0d010240200141ff01712201450d00200c41ff0171450d1c0b20010d4f200c41ff0171450d4f200341c80f6a41043a0000200341d10f6a20032903a809370000200341d90f6a200341b0096a290300370000200341e10f6a200341b8096a290300370000200320032903a0093700c90f200341003602c00f200341c00f6a10c8020c4f0b200341e00d6a41c1dcc700410610c501200341c00f6a41acc8c700410710c501200341e0066a200341800c6a10d50220032802e806220141206a2208417f4c0d180240024020080d004101210c0c010b20081032220c450d1a0b200341003602e002200320083602dc022003200c3602d802200341d8026a4100411010c80120032802d80220032802e00222086a220c20032900e00d370000200c41086a200341e00d6a41086a2900003700002003200841106a22083602e002200341d8026a2008411010c80120032802d80220032802e00222086a220c20032900c00f370000200c41086a200341c00f6a41086a2900003700002003200841106a220c3602e00220032802e0062108200341d8026a200c200110c80120032802d802220c20032802e002220d6a2008200110c9081a2003200d20016a22013602e002024020032802e406450d002008102c0b200341c00f6a200c200110d602200341e00f6a290300420020032903c00f42015122011b2114200341d80f6a290300420020011b2113024020032802dc02450d00200c102c0b4200201120147d2012201354ad7d2214201220137d2213201256201420115620142011511b22011b21144200201320011b21130c4f0b2003200d3602e00920032001ad42ff0183420886200cad42ff018384201a843702e4090c4c0b20034190096a410410d30220032d0090094104460d500c520b200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903c00a3703c00f200341e0066a200341c00f6a10c602200341e00d6a41086a200341e0066a41106a290300370300200341e00d6a41106a200341e0066a41186a290300370300200341e00d6a41186a200341e0066a41206a2d00003a00002003200341e0066a41086a2903003703e00d20032d00e0064101460d1b20032f00e106210120032d00e306210720032802e4062108200341e7026a200341e00d6a41086a290300370000200341ef026a200341f00d6a290300370000200341f7026a200341e00d6a41186a2d00003a0000200320083600db02200320073a00da02200320013b01d802200320032903e00d3700df02200341a00c6a200210d002200341c00f6a20032802a00c220820032802a80c220c10d102200341800e6a41086a2207200341e80f6a290300370300200320032903e00f3703800e200341c00f6a41186a290300210f20032903d00f211020032903c80f211120032903c00f2112024020032d00f00f220d41024622010d00200341a00a6a41086a2007290300370300200320032903800e3703a00a0b200341e0066a41086a200341a00a6a41086a290300370300200320032903a00a3703e00620010d19200341f0046a41086a200341e0066a41086a2903002213370300200320032903e00622143703f004200341d80f6a20133703002003200f3703c80f200320103703c00f200320143703d00f200d4101710d1a0240200341c00f6a200341d8026a412010cc080d00200341d8026a2012201110d902200341043a00800e0c460b200341800e6a410210d3020c440b200341d8026a41086a200e290300370300200320032903e0043703d802200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903c00a3703c00f200341c00f6a10da020d1b200341a00c6a200410d002200341c00f6a20032802a00c220120032802a80c220210d102200341f0046a41086a2208200341e80f6a290300370300200320032903e00f3703f004200320032800f10f3602e0062003200341f40f6a2800003600e306200341d80f6a290300211120032903d00f211220032903c80f211320032903c00f2114024020032d00f00f41024622070d00200341800e6a41086a2008290300370300200320032903f0043703800e200320032802e0063602c809200320032800e3063600cb090b200341e0066a41086a200341800e6a41086a290300370300200320032903800e3703e006024020070d00200341d80f6a200341e8066a290300370300200320032903e0063703d00f200320123703c00f200320113703c80f200341c00f6a2014201310d9020b200341c00f6a41186a2010370300200341e00f6a20032903d802370300200341f40f6a20032800cb09360000200341e80f6a2207200341e0026a22082903003703002003200f3703d00f200342003703c80f200342003703c00f200320053a00f00f200320032802c8093600f10f20012002200341c00f6a10d402024020032802a40c450d002001102c0b200341cd0f6a201037000020072004360200200341dd0f6a20082903003700002003200f3700c50f200341003a00c40f200341013602c00f200320032903d8023700d50f200341c00f6a10c802200041186a41003a000020004200370308200020032800f0093600192000411c6a200341f3096a280000360000200042003703000c560b200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903c00a3703c00f200341e0066a200341c00f6a10c602200341e00d6a41086a200341e0066a41106a290300370300200341e00d6a41106a200341e0066a41186a290300370300200341e00d6a41186a200341e0066a41206a2d00003a00002003200341e0066a41086a2903003703e00d20032d00e0064101460d1e20032f00e106210120032d00e306210720032802e4062108200341af0c6a200341e00d6a41086a290300370000200341b70c6a200341f00d6a290300370000200341bf0c6a200341e00d6a41186a2d00003a0000200320083600a30c200320073a00a20c200320013b01a00c200320032903e00d3700a70c200341a0096a200210d002200341c00f6a20032802a009220820032802a809220c10d102200341800e6a41086a2207200341e80f6a290300370300200320032903e00f3703800e200320032800f10f3602e0062003200341f40f6a2800003600e306200341c00f6a41186a290300210f20032903d00f211020032903c80f211120032903c00f2112024020032d00f00f220d41024622010d00200341a00a6a41086a2007290300370300200320032903800e3703a00a200320032802e0063602c809200320032800e3063600cb090b200341e0066a41086a200341a00a6a41086a290300370300200320032903a00a3703e00620010d1b200341f0046a41086a200341e0066a41086a2903002213370300200320032903e00622143703f004200341980e6a20133703002003200f3703880e200320103703800e200320143703900e200d4101710d1c0240200341800e6a200341a00c6a412010cc080d00420021130240201220118450450d0042002111420021190c3f0b200341e0066a41c1dcc700410610c501200341c00f6a41acc8c700410710c501200341d8026a200341a00c6a10d50220032802e002220141206a2207417f4c0d140240024020070d004101210e0c010b20071032220e450d160b4100210d200341003602b806200320073602b4062003200e3602b006200341b0066a4100411010c80120032802b00620032802b80622076a220e20032900e006370000200e41086a200341e0066a41086a2900003700002003200741106a22073602b806200341b0066a2007411010c80120032802b00620032802b80622076a220e20032900c00f370000200e41086a200341c00f6a41086a2900003700002003200741106a22073602b80620032802d802210e200341b0066a2007200110c80120032802b006220720032802b80622046a200e200110c9081a2003200420016a22013602b806024020032802dc02450d00200e102c0b200341e0066a2007200110d60220032903e00621184200211a200342003703e006200341ac076a280200210e200341a8076a28020021040240024020184201510d0041012105420021194200211b4200211c420021154200211642002117420021140c010b20034198076a290300211b200341e0066a41306a2903002119200341e0066a41286a290300211a20034180076a2903002116200341e0066a41186a290300211520032903f006211420032903e80621174101210d4100210520032903a007211c0b200341d8026a41286a2019370300200341d8026a41306a201b370300200341d8026a41186a2016201120162015201256201620115620162011511b22061b22197d20152012201520061b221154ad7d22163703002003201a3703f8022003201520117d22153703e802200320173703d802200320143703e00202400240427f201720157c221220122017542206201420167c2006ad7c221220145420122014511b22061b221a4280c8afa025544100427f201220061b221b501b0d00200341e8026a290300211520034188036a290300211620034180036a290300211a200341f8026a290300211b20032903e002212520032903d80221244201211220032903f002211f0c010b02400240201720158420142016848450450d00420021120c010b42002112200341f0046a41186a22064200370300200341f0046a41106a22094200370300200341f0046a41086a220a4200370300200342003703f004200341e00d6a41d4dcc700410810c501200a200341e00d6a41086a221e290000370300200320032900e00d3703f004200341c00f6a41bba8c700410d10c5012006200341c00f6a41086a220b290000370300200920032900c00f370300200341d8006a200341f0046a412010d301200341d8006a41106a2903002115200329036021162003280258211d2006420037030020094200370300200a4200370300200342003703f004200341e00d6a41d4dcc700410810c501200a201e290000370300200320032900e00d3703f004200341c00f6a41bba8c700410d10c5012006200b290000370300200920032900c00f3703002003420020154200201d1b2215201b7d20164200201d1b2216201a54ad7d22252016201a7d2224201656202520155620252015511b22061b3703c80f20034200202420061b3703c00f200341f0046a4120200341c00f6a411010a702200341f80f6a201b370300200341f00f6a201a370300200b41013a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341a00c6a41106a290300370000200341e10f6a200341a00c6a41186a290300370000200341023602c00f200320032903a00c3700c90f200341c00f6a10c8020b0b20034188076a201b37030020034190076a201a370300200341f0066a202537030020034198076a2016370300200341f8066a20153703002003201f370380072003201c3703a007200320243703e8062003200e4100200d1b3602ac07200320044100200d1b3602a80720032012420151220dad3703e00602400240200d0d002007200110b4010c010b20072001200341e8066a10d8020b024020032802b406450d002007102c0b024020184201510d0020124201510d1f0b20184201520d3d20124201510d3d200341c00f6a41086a41043a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341b80c6a290300370000200320032903a00c3700c90f200341003602c00f200341c00f6a10c8020c3d0b200341800c6a410210d3020c3b0b200341800c6a41086a2207200141186a290000370300200341800c6a41106a2208200141206a290000370300200341800c6a41186a220c200141286a2d00003a00002003200141106a2900003703800c200320012800293602a00920032001412c6a2800003600a309200141386a290300210f200141306a2903002110200141c8006a2903002112200141c0006a2903002111200141d8006a2903002113200141d0006a29030021142001410c6a2800002106200141086a2d0000210d20012d000b210920012f0009210a200341800e6a41206a2201200241206a290200370300200341800e6a41186a220e200241186a290200370300200341800e6a41106a2204200241106a290200370300200341800e6a41086a2205200241086a290200370300200320022902003703800e02400240024002400240200d0e050001020304000b200341d40f6a4101360200200342013702c40f200341eccdc8003602c00f200341043602e406200341ec9cc8003602e0062003200341e0066a3602d00f200341c00f6a41cca7c7001046000b200341a00c6a41186a200c2d00003a0000200341a00c6a41106a2008290300370300200341a00c6a41086a2007290300370300200320032903800c3703a00c200341c00f6a41206a2001290300370300200341c00f6a41186a200e290300370300200341c00f6a41106a2004290300370300200341c00f6a41086a2005290300370300200320032903800e3703c00f200341e0066a200341c00f6a10c602200341f0046a41086a200341e9066a290000370300200341f0046a41106a200341f1066a290000370300200341f0046a41186a200341f9066a290000370300200320032900e1063703f00402400240024020032d00e0064101470d0041002102410221010c010b200341d8026a41186a200341f0046a41186a290300370300200341d8026a41106a200341f0046a41106a290300370300200341d8026a41086a200341f0046a41086a290300370300200320032903f0043703d802200341cf0a6a200341a00c6a41086a290300370000200341d70a6a200341a00c6a41106a290300370000200341df0a6a200341a00c6a41186a2d00003a0000200320032903a00c3700c70a200341c00f6a41086a200341c00a6a41086a290300370300200341c00f6a41106a200341c00a6a41106a290300370300200341c00f6a41186a200341c00a6a41186a290300370300200320063600c30a200320093a00c20a2003200a3b01c00a200320032903c00a3703c00f200341e0066a200341d8026a200341c00f6a2010200f410110db0220032d00e00622014104460d0120032902e406210f20032f00e10620032d00e3064110747241087421020b2000200f37002420004200370308200041206a2002200172360000200041186a41003a0000200042013703000c580b200042003703082000200328008909360019200041186a41003a00002000411c6a2003418c096a280000360000200042003703000c570b200341a00a6a41186a200c2d00003a0000200341a00a6a41106a2008290300370300200341a00a6a41086a2007290300370300200320032903800c3703a00a200341c00f6a41206a2001290300370300200341c00f6a41186a200e290300370300200341c00f6a41106a2004290300370300200341c00f6a41086a2005290300370300200320032903800e3703c00f200341c00f6a10da020d21200341cf0a6a200341a00a6a41086a290300370000200341d70a6a200341a00a6a41106a290300370000200341df0a6a200341a00a6a41186a2d00003a0000200320032903a00a3700c70a200341a00c6a41086a200341c00a6a41086a290300370300200341a00c6a41106a200341c00a6a41106a290300370300200341a00c6a41186a200341c00a6a41186a290300370300200320063600c30a200320093a00c20a2003200a3b01c00a200320032903c00a3703a00c200341800a6a41c1dcc700410610c501200341900a6a41acc8c700410710c501200341c00f6a200341a00c6a10d50220032802c80f220241206a2207417f4c0d140240024020070d004101210c0c010b20071032220c450d160b201120107c22134280c8afa0255441002012200f7c2013201154ad7c501b210141002108200341003602c80a200320073602c40a2003200c3602c00a200341c00a6a4100411010c80120032802c00a20032802c80a22076a220c20032900800a370000200c41086a200341800a6a41086a2900003700002003200741106a22073602c80a200341c00a6a2007411010c80120032802c00a20032802c80a22076a220c20032900900a370000200c41086a200341900a6a41086a2900003700002003200741106a22073602c80a20032802c00f210c200341c00a6a2007200210c80120032802c00a220720032802c80a220d6a200c200210c9081a2003200d20026a22023602c80a024020032802c40f450d00200c102c0b4200200f20011b210f4200201020011b2110200341e0066a2007200210d60220032903e006211742002118200342003703e006200341ac076a280200210c200341a8076a280200210d0240024020174201510d004101210e420021194200211a4200211b420021154200211342002116420021140c010b20034198076a290300211a20034190076a290300211920034188076a290300211820034180076a2903002113200341f8066a290300211520032903f006211420032903e8062116410121084100210e20032903a007211b0b4200201220011b21124200201120011b21112010201656200f201456200f20145122011b0d202010201654200f20145420011b450d3b200341f80d6a22014200370300200341e00d6a41106a22044200370300200341e00d6a41086a22054200370300200342003703e00d200341800a6a41d4dcc700410810c5012005200341800a6a41086a2209290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200341900a6a41086a220a290000370300200420032900900a370300200341d0016a200341e00d6a412010d301200341d0016a41106a290300211c20032903d801212520032802d0012106200142003703002004420037030020054200370300200342003703e00d200341800a6a41d4dcc700410810c50120052009290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200a290000370300200420032900900a37030020034200201c420020061b221c2016201054ad200f20147d7c7c2025420020061b2214201620107d222554ad7d2216201420257d22252014562016201c562016201c511b22011b3703c80f20034200202520011b3703c00f200341e00d6a4120200341c00f6a411010a7020c3b0b200341a00a6a41186a200c2d00003a0000200341a00a6a41106a2008290300370300200341a00a6a41086a2007290300370300200320032903800c3703a00a200341b0066a411f6a20123c0000200341b0066a410f6a200f370000200320113700c706200320103700b706200320032800a3093600b306200320032802a0093602b006200341c00f6a41206a2001290300370300200341c00f6a41186a200e290300370300200341c00f6a41106a2004290300370300200341c00f6a41086a2005290300370300200320032903800e3703c00f024002400240200341c00f6a10da02450d00410221020c010b200341f0046a410f6a200341a00a6a41086a29030037000020034187056a200341a00a6a41106a290300370000200341f0046a411f6a200341a00a6a41186a2d00003a0000200320032903a00a3700f704200341e0066a41086a200341f0046a41086a290300370300200341e0066a41106a200341f0046a41106a290300370300200341e0066a41186a200341f0046a41186a290300370300200320063600f304200320093a00f2042003200a3b01f004200320032903f0043703e006200341c00f6a41086a200341b0066a41086a290300370300200341c00f6a41106a200341b0066a41106a290300370300200341c00f6a41186a200341b0066a41186a290300370300200320032903b0063703c00f200341d8026a200341e0066a200341c00f6a20142013410110db0220032d00d80222024104460d0120032f00d90220032d00db0241107472210120032902dc02210f0b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20023a0000200041186a41003a0000200042013703000c560b20004200370308200020032800f009360019200041186a41003a00002000411c6a200341f3096a280000360000200042003703000c550b200341e00d6a41186a200c2d00003a0000200341e00d6a41106a2008290300370300200341e00d6a41086a2007290300370300200320032903800c3703e00d200341c00f6a41206a2001290300370300200341c00f6a41186a200e290300370300200341c00f6a41106a2004290300370300200341c00f6a41086a2005290300370300200320032903800e3703c00f200341e0066a200341c00f6a10c602200341f0046a41086a200341e9066a290000370300200341f0046a41106a200341f1066a290000370300200341f0046a41186a200341f9066a290000370300200320032900e1063703f00402400240024020032d00e0064101470d00410221020c010b200341d8026a41186a200341f0046a41186a290300370300200341d8026a41106a200341f0046a41106a290300370300200341d8026a41086a200341f0046a41086a290300370300200320032903f0043703d802200341cf0a6a200341e00d6a41086a290300370000200341d70a6a200341e00d6a41106a290300370000200341df0a6a200341e00d6a41186a2d00003a0000200320032903e00d3700c70a200341c00f6a41086a200341c00a6a41086a290300370300200341c00f6a41106a200341c00a6a41106a290300370300200341c00f6a41186a200341c00a6a41186a290300370300200320063600c30a200320093a00c20a2003200a3b01c00a200320032903c00a3703c00f200341e0066a200341d8026a200341c00f6a2010200f410010db0220032d00e00622024104460d0120032f00e10620032d00e30641107472210120032902e406210f0b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20023a0000200041186a41003a0000200042013703000c550b20004200370308200020032800d009360019200041186a41003a00002000411c6a200341d3096a280000360000200042003703000c540b2001410c6a2802002107200141086a28020021052001280204210d200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f024002400240200341c00f6a10cc020d002007410a4b0d01200341e00d6a41186a22084200370300200341e00d6a41106a22284200370300200341e00d6a41086a22014200370300200342003703e00d200341c00f6a41dcdcc700410a10c5012001200341c00f6a41086a2202290000370300200320032900c00f3703e00d200341c00f6a41b0e4c400410c10c50120082002290000370300202820032900c00f370300200341e00d6a412010dc0241ff0171220c4102460d02200c410171450d02200341e0046a410210dd020c390b200341023a00e0040c380b200341e0046a410310dd020c370b200842003703002028420037030020014200370300200342003703e00d200341c00f6a41dcdcc700410a10c50120012002290000370300200320032900c00f3703e00d200341c00f6a41b0e4c400410c10c501202841086a2002290000370000202820032900c00f370000200341013a00a00c200341e00d6a4120200341a00c6a410110a702200341a0096a41186a22014200370300200341a0096a41106a222a4200370300200341a0096a41086a22024200370300200342003703a009200341800a6a41c1dcc700410610c5012002200341800a6a41086a290000370300200320032900800a3703a009200341900a6a4196a4c600410610c5012001200341900a6a41086a290000370300202a20032900900a370300200341f0016a200341a0096a412010c60120032802f401410020032802f0011b2108200341a00a6a10de02024020032802a80a220220032802a40a470d00200341a00a6a200210df0220032802a80a21020b20032802a00a222b200241c4006c6a220141003a0000200120032f00d8023b000120012008360204200120032902c00f370208200141036a200341d8026a41026a2d00003a0000200141106a200341c00f6a41086a222c290200370200200141186a200341c00f6a41106a222d290200370200200141206a200341c00f6a41186a290200370200200141286a200341c00f6a41206a290200370200200141306a200341c00f6a41286a290200370200200141386a200341c00f6a41306a290200370200200141c0006a200341c00f6a41386a2802003602002003200241016a22093602a80a200d200741f0006c22016a211d024020070d00200d21070c350b200d41f4006a2108200141907f6a210c200341b0066a4107722126200341e00d6a4107722127200341d8026a410172210a200341a0096a41046a212e200341800c6a41086a212f200341800a6a41046a2130200341a0096a41086a2104200341c00f6a4104722131200341a0096a41186a210b200d21070340200728020421012007280200210e200341c00f6a200741086a41e80010c9081a200741f0006a21072001450d35200341e0066a200341c00f6a41e80010c9081a200320013602c40f2003200e3602c00f202c200341e0066a41e80010c9081a200b4200370300200341a0096a41106a221e420037030020044200370300200342003703a009200341800a6a41c1dcc700410610c5012004200341800a6a41086a2232290000370300200320032900800a3703a009200341900a6a4196a4c600410610c501202a41086a200341900a6a41086a2229290000370000202a20032900900a370000200341e8016a200341a0096a412010c60120032802e801210120032802ec012102200341a00c6a200341c00f6a102802400240200e450d00200e2002410020011b22334d0d01200341d8026a410510dd02200341f0046a41086a200341c00a6a41086a290200370300200341f0046a41106a200341c00a6a41106a2f01003b01002003200341d8026a41086a2800003600f309200320032800dd023602f009200320032902c00a3703f004200320032802f0093602e009200320032800f3093600e3090c360b200341d8026a410410dd02200341f0046a41086a200341c00a6a41086a290200370300200341f0046a41106a200341c00a6a41106a2f01003b01002003200341d8026a41086a2800003600f309200320032800dd023602f009200320032902c00a3703f004200320032802f0093602e009200320032800f3093600e3090c350b200341900a6a41c1dcc700410610c501200341e8086a41fda3c600410910c5012003200e417f6a3602800a200341a0096a200341800a6a410410c701200320303602ec0d200320043602e40d2003200341800a6a3602e80d2003200341a0096a3602e00d200341800c6a200341e00d6a107e20032802880c220141206a2202417f4c0d120240024020020d00410121060c010b200210322206450d140b200341003602e80d200320023602e40d200320063602e00d200341e00d6a4100411010c80120032802e00d20032802e80d22026a220620032900900a370000200641086a20292900003700002003200241106a22023602e80d200341e00d6a2002411010c80120032802e00d20032802e80d22026a220620032900e808370000200641086a200341e8086a41086a22342900003700002003200241106a22063602e80d20032802800c2102200341e00d6a2006200110c80120032802e00d220620032802e80d22356a2002200110c9081a2003203520016a22013602e80d024020032802840c450d002002102c0b200341d8026a2006200110c9012004200a41086a2235290000370300201e200a41106a2236290000370300200b200a41186a22372900003703002003200a2900003703a0090240024020032d00d8024101460d00200341800e6a41186a4200370300200341800e6a41106a4200370300200341800e6a41086a4200370300200342003703800e0c010b200341800e6a41186a200b290300370300200341800e6a41106a201e290300370300200341800e6a41086a2004290300370300200320032903a0093703800e0b024020032802e40d450d002006102c0b200341800e6a202d412010cc080d20200e2033490d21024002402009450d00200941c4006c2102202b41016a2101034002402001417f6a2d00004101470d0041012106200341a00c6a2001460d032001200341a00c6a412010cc08450d030b200141c4006a2101200241bc7f6a22020d000b0b410021060b200341800a6a41c1dcc700410610c501200341900a6a41fda3c600410910c5012003200e3602a009200341800c6a200341a0096a410410c7012003202e36028c0e2003202f3602840e2003200341a0096a3602880e2003200341800c6a3602800e200341e00d6a200341800e6a107e20032802e80d220141206a2202417f4c0d120240024020020d004101210e0c010b20021032220e450d140b200341003602880c200320023602840c2003200e3602800c200341800c6a4100411010c80120032802800c20032802880c22026a220e20032900800a370000200e41086a20322900003700002003200241106a22023602880c200341800c6a2002411010c80120032802800c20032802880c22026a220e20032900900a370000200e41086a20292900003700002003200241106a220e3602880c20032802e00d2102200341800c6a200e200110c80120032802800c220e20032802880c22296a2002200110c9081a2003202920016a22013602880c024020032802e40d450d002002102c0b200341d8026a200e200110c90120042035290000370300201e2036290000370300200b20372900003703002003200a2900003703a0090240024020032d00d8024101460d00200341800e6a41186a4200370300200341800e6a41106a4200370300200341800e6a41086a4200370300200342003703800e0c010b200341800e6a41186a200b290300370300200341800e6a41106a201e290300370300200341800e6a41086a2004290300370300200320032903a0093703800e0b024020032802840c450d00200e102c0b2006200341800e6a200341a00c6a412010cc0845720d22200341f0046a41086a2202200341c00a6a41086a2206290200370300200341f0046a41106a220e200341c00a6a41106a22292f01003b0100200320032802f0093602e009200320032800f3093600e309200320032902c00a3703f004200320032800e3093600e30d200320032802e0093602e00d202720032903f004370000202741086a2002290300370000202741106a200e2f01003b0000202620032903e00d370000202641086a200341e00d6a41086a290300370000202641106a200341e00d6a41106a290300370000202641186a200341e00d6a41186a2d00003a0000200341a00c6a200341c00f6a1028200341800e6a41186a22324200370300200341800e6a41106a22334200370300200341800e6a41086a22354200370300200342003703800e200341e8086a41186a22364200370300200341e8086a41106a2237420037030020344200370300200342003703e80841c80010322201450d13200341a0096a10cd022001410236022020014101360244200141186a200b290300370200200141106a201e290300370200200141086a2004290300370200200120032903a009370200200120032903e8083700242001412c6a2034290300370000200141346a20372903003700002001413c6a2036290300370000200320013602d80220034282808080203702dc02200341d8026a10e002200341d8026a41186a2032290300370300200341d8026a41106a2033290300370300200341d8026a41086a2035290300370300200320032903800e3703d802200341d8026a10e1022006200341a00c6a41086a2903003703002029200341a00c6a41106a290300370300200341c00a6a41186a221e200341a00c6a41186a2903003703002002200341b0066a41086a290300370300200e200341b0066a41106a290300370300200341f0046a41186a2234200341b0066a41186a290300370300200320032903a00c3703c00a200320032903b0063703f0040240200920032802a40a470d00200341a00a6a200910df0220032802a80a210920032802a00a212b0b202b200941c4006c6a220141013a0000200120032903c00a370001200141096a2006290300370000200141116a2029290300370000200141196a201e290300370000200141003a0021200120032903f0043700222001412a6a2002290300370000200141326a200e2903003700002001413a6a2034290300370000200320032802a80a41016a22093602a80a2031102b200c41907f6a210c200841f0006a21082007201d470d000c360b0b200341c00f6a200141086a41900210c9081a200341e0066a41206a200241206a290200370300200341e0066a41186a200241186a290200370300200341e0066a41106a200241106a290200370300200341e0066a41086a200241086a290200370300200320022902003703e0062000200341c00f6a200341e0066a10e2020c520b200141086a280200210b20012802042109200341f0046a200141106a41c00110c9081a200341b0066a41206a2201200241206a290200370300200341b0066a41186a2207200241186a290200370300200341b0066a41106a2208200241106a290200370300200341b0066a41086a220c200241086a290200370300200320022902003703b00602402009450d00200341c00a6a200341f0046a41c00110c9081a200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903b0063703c00f200341e0066a200341c00f6a10c602200341e00d6a41086a200341e9066a290000370300200341e00d6a41106a200341f1066a290000370300200341e00d6a41186a200341f9066a290000370300200320032900e1063703e00d0240024020032d00e0064101460d00200341800c6a41186a2201200341e00d6a41186a2208290300370300200341800c6a41106a2202200341e00d6a41106a290300370300200341800c6a41086a2207200341e00d6a41086a290300370300200320032903e00d3703800c200341a00c6a200341c00a6a41c00110c9081a200341e0066a41186a2001290300370300200341e0066a41106a2002290300370300200341e0066a41086a2007290300370300200320032903800c3703e006200341c00f6a200341e0066a10e30220032d00c00f4101460d01410121014280808080f002210f419fa5c30021020c320b410221020240200b0d000c330b2009102c0c320b200341ef026a2201200341d90f6a290000370000200341d8026a41106a2202200341d20f6a290100370300200341e90d6a200341ca0f6a290100370000200341f10d6a200229030037000020082001290000370000200320032d00c10f3a00e00d200320032901c20f3700e10d200341800e6a200341a00c6a41c00110c9081a200341800a6a41ffdcc700410710c501200341900a6a4190b5c300410810c501200341c00f6a200341e00d6a10e40220032802c80f220141206a2202417f4c0d100240024020020d00410121070c010b200210322207450d120b200341003602a809200320023602a409200320073602a009200341a0096a4100411010c80120032802a00920032802a80922026a220720032900800a370000200741086a200341800a6a41086a2900003700002003200241106a22023602a809200341a0096a2002411010c80120032802a00920032802a80922026a220720032900900a370000200741086a200341900a6a41086a2900003700002003200241106a22073602a80920032802c00f2102200341a0096a2007200110c80120032802a009220720032802a80922086a2002200110c9081a2003200820016a22013602a809024020032802c40f450d002002102c0b200341c00f6a2007200110e50220032d00c00f2101200341d8026a200341c00f6a41017241c00110c9081a0240024020014101460d00200341003a00e0060c010b200341013a00e006200341e0066a410172200341d8026a41c00110c9081a0b024020032802a409450d002007102c0b200341e0066a410172210a200341c00f6a4101722101416821080340200341b0026a200341800e6a20084187d7c0006a280000220210a90220032802b0022107200320032802b402220c3602e002200320073602dc02200320023602d802200341a00a6a200341d8026a10e602200341c00f6a20032802a00a220d20032802a80a10c901200341e8086a41086a220e200141086a290000370300200341e8086a41106a2204200141106a290000370300200341e8086a41186a2205200141186a290000370300200320012900003703e8080240024020032d00c00f4101470d00200341a0096a41186a22062005290300370300200341a0096a41106a22052004290300370300200341a0096a41086a2204200e290300370300200320032903e8083703a009024020032802a40a450d00200d102c0b200341c00f6a41186a2006290300370300200341c00f6a41106a2005290300370300200341c00f6a41086a2004290300370300200320032903a0093703c00f200341c00f6a200341e00d6a412010cc08450d01410221014280808080d001210f4192a5c30021020c330b20032802a40a450d00200d102c0b0240024020032d00e0064101470d00200341a8026a200a200210a90220032802a802220d450d000240200c20032802ac02220e470d002007200d460d022007200d200c10cc08450d020b2003200e3602c80f2003200d3602c40f200320023602c00f200341d8026a200341c00f6a10e60220032802d802220d20032802e00210b40120032802dc02450d00200d102c0b2003200341e00d6a3602a0092003200c3602c80f200320073602c40f200320023602c00f200341d8026a200341c00f6a10e60220032802d802220220032802e002200341a0096a10cc0120032802dc02450d002002102c0b200841046a22080d000b200341800a6a41ffdcc700410710c501200341900a6a4190b5c300410810c501200341c00f6a200341e00d6a10e40220032802c80f220141206a2202417f4c0d100240024020020d00410121070c010b200210322207450d120b200341003602e002200320023602dc02200320073602d802200341d8026a4100411010c80120032802d80220032802e00222026a220720032900800a370000200741086a200341800a6a41086a2900003700002003200241106a22023602e002200341d8026a2002411010c80120032802d80220032802e00222026a220720032900900a370000200741086a200341900a6a41086a2900003700002003200241106a22073602e00220032802c00f2102200341d8026a2007200110c80120032802d802220720032802e00222086a2002200110c9081a2003200820016a22083602e002024020032802c40f450d002002102c0b200341003602c80f200342013703c00f200341c00f6a41004120102f20032802c00f20032802c80f22026a220120032903800e370000200141086a200341800e6a41086a290300370000200141106a200341800e6a41106a290300370000200141186a200341800e6a41186a2903003700002003200241206a22013602c80f200341c00f6a20014120102f20032802c00f20032802c80f22026a220120032903a00e370000200141086a200341a80e6a290300370000200141106a200341b00e6a290300370000200141186a200341b80e6a2903003700002003200241206a22013602c80f200341c00f6a20014120102f20032802c00f20032802c80f22026a220120032903c00e370000200141086a200341c80e6a290300370000200141106a200341d00e6a290300370000200141186a200341d80e6a2903003700002003200241206a22013602c80f200341c00f6a20014120102f20032802c00f20032802c80f22026a220120032903e00e370000200141086a200341e80e6a290300370000200141106a200341f00e6a290300370000200141186a200341f80e6a2903003700002003200241206a22013602c80f200341c00f6a20014120102f20032802c00f20032802c80f22026a220120032903800f370000200141086a200341880f6a290300370000200141106a200341900f6a290300370000200141186a200341980f6a2903003700002003200241206a22013602c80f200341c00f6a20014120102f20032802c00f220220032802c80f220c6a220120032903a00f370000200141086a200341a80f6a290300370000200141106a200341b00f6a290300370000200141186a200341b80f6a2903003700002003200c41206a22013602c80f200720082002200110a702024020032802c40f450d002002102c0b024020032802dc02450d002007102c0b024020032d00e0060d00200341800c6a10e7020b0240200b450d002009102c0b20004200370308200020032800f009360019200041186a41003a00002000411c6a200341f3096a280000360000200042003703000c520b200341c00f6a41206a2001290300370300200341c00f6a41186a2007290300370300200341c00f6a41106a2008290300370300200341c00f6a41086a200c290300370300200320032903b0063703c00f200341e0066a200341c00f6a10c602200341e8086a41086a200341e9066a290000370300200341e8086a41106a200341f1066a290000370300200341e8086a41186a200341f9066a290000370300200320032900e1063703e808024002400240024020032d00e0064101460d00200341c00a6a41186a200341e8086a41186a290300220f370300200341c00a6a41106a200341e8086a41106a2903002210370300200341c00a6a41086a200341e8086a41086a2903002211370300200320032903e80822123703c00a200341e0066a41186a200f370300200341e0066a41106a2010370300200341e0066a41086a2011370300200320123703e006200341c00f6a200341e0066a10e30220032d00c00f4101470d01200341ef026a2201200341d90f6a290000370000200341d8026a41106a2202200341d20f6a290100370300200341a90c6a200341ca0f6a290100370000200341b10c6a2002290300370000200341a00c6a41186a2001290000370000200320032d00c10f3a00a00c200320032901c20f3700a10c200341800a6a41ffdcc700410710c501200341900a6a4190b5c300410810c501200341c00f6a200341a00c6a10e40220032802c80f220141206a2202417f4c0d130240024020020d00410121070c010b200210322207450d150b200341003602e80d200320023602e40d200320073602e00d200341e00d6a4100411010c80120032802e00d20032802e80d22026a220720032900800a370000200741086a200341800a6a41086a2900003700002003200241106a22023602e80d200341e00d6a2002411010c80120032802e00d20032802e80d22026a220720032900900a370000200741086a200341900a6a41086a2900003700002003200241106a22023602e80d20032802c00f2107200341e00d6a2002200110c80120032802e00d220220032802e80d22086a2007200110c9081a2003200820016a22013602e80d024020032802c40f450d002007102c0b200341c00f6a2002200110e502024020032d00c00f2207450d002002200110b4010b20032d00c10f2101200341d8026a200341c00f6a41027241bf0110c9081a024020074101470d00200341800e6a200341d8026a41bf0110c9081a024020032802e40d450d002002102c0b200320013a00e006200341e0066a410172200341800e6a41bf0110c9081a200341a0026a200341e0066a41e7e485f30610a902200320032903a0023702c40f200341e7e485f3063602c00f200341d8026a200341c00f6a10e60220032802d802220120032802e00210b401024020032802dc02450d002001102c0b20034198026a200341e0066a41e2c289ab0610a90220032003290398023702c40f200341e2c289ab063602c00f200341d8026a200341c00f6a10e60220032802d802220120032802e00210b401024020032802dc02450d002001102c0b20034190026a200341e0066a41e9dabdf30610a90220032003290390023702c40f200341e9dabdf3063602c00f200341d8026a200341c00f6a10e60220032802d802220120032802e00210b401024020032802dc02450d002001102c0b20034188026a200341e0066a41f0c2c98b0610a90220032003290388023702c40f200341f0c2c98b063602c00f200341d8026a200341c00f6a10e60220032802d802220120032802e00210b401024020032802dc02450d002001102c0b20034180026a200341e0066a41e1e69df30610a90220032003290380023702c40f200341e1e69df3063602c00f200341d8026a200341c00f6a10e60220032802d802220120032802e00210b401024020032802dc02450d002001102c0b200341f8016a200341e0066a41e1ea91cb0610a902200320032903f8013702c40f200341e1ea91cb063602c00f200341d8026a200341c00f6a10e60220032802d802220120032802e00210b401024020032802dc02450d002001102c0b200341c00a6a10e802200041186a41003a000020004200370308200020032800d0093600192000411c6a200341d3096a280000360000200042003703000c560b024020032802e40d450d002002102c0b410321014280808080e000210f41c2a5c30021020c020b410221020c020b410121014280808080f002210f419fa5c30021020b200f2002ad84210f2001410874410a722101410321020b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20023a0000200041186a41003a0000200042013703000c510b2001411c6a2802002109200141186a2802002104200141146a2802002105200141106a28020021072001410c6a2802002106200141086a2802002108200341d8026a200141206a41800210c9081a200341a00c6a41206a2201200241206a290200370300200341a00c6a41186a220c200241186a290200370300200341a00c6a41106a220d200241106a290200370300200341a00c6a41086a220e200241086a290200370300200320022902003703a00c024002400240024020080e0400010203000b200341c00f6a41146a4101360200200342013702c40f200341eccdc8003602c00f200341043602e406200341ec9cc8003602e0062003200341e0066a3602d00f200341c00f6a418889c6001046000b200341e0066a200341d8026a41800210c9081a200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903a00c3703c00f200341c00a6a200341c00f6a10c602200341e8086a41086a200341c90a6a2201290000370300200341e8086a41106a200341d10a6a2202290000370300200341e8086a41186a200341d90a6a2208290000370300200320032900c10a3703e80802400240024020032d00c00a4101470d00200341a00e6a41023a0000200341980e6a41003a0000200342003703880e200342013703800e02402004450d002004410c6c21022007210103400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b02402005450d002007450d002005410c6c450d002007102c0b200341a80e6a2102200341880e6a210141002107410221080c010b200341a0096a41186a200341e8086a41186a290300220f370300200341a0096a41106a200341e8086a41106a2903002210370300200341a0096a41086a200341e8086a41086a2903002211370300200320032903e80822123703a0092008200f3700002002201037000020012011370000200320123700c10a200341013a00c00a200341c00f6a200341e0066a41800210c9081a200341fc046a2004360200200341f0046a41086a20053602002003200936028005200320073602f404200320063602f004200341800e6a200341c00a6a200341c00f6a200341f0046a10e90220032903800e4201520d01200341a80e6a2102200341800e6a41086a2101200341a00e6a2d0000210820032d00980e21070b200320012800113602f0092003200141146a2800003600f30920012f0019210c20012d001b210d200128001c210e200228000021022001280224210120032903880e210f20032903900e2110200041186a20073a0000200041106a20103703002000200f370308200020032802f0093600192000411c6a20032800f3093600002000412c6a2001360200200041286a20023600002000200e3600242000200d3a00232000200c3b0021200041206a20083a0000200042013703000c530b200320032800990e3602f0092003200341800e6a411c6a2800003600f30920032903880e210f20032903900e2110200041186a20032d00980e3a0000200041106a20103703002000200f370308200020032802f0093600192000411c6a20032800f309360000200042003703000c520b200341e0066a200341d8026a41800210c9081a200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903a00c3703c00f024002400240200341c00f6a10cc02450d00200341a00e6a41023a0000200341980e6a41003a0000200342003703880e200342013703800e02402004450d002004410c6c21022007210103400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b02402005450d002007450d002005410c6c450d002007102c0b200341a80e6a2102200341880e6a210141002107410221080c010b200341c00f6a10cd02200341d90a6a200341c00f6a41186a290300370000200341d10a6a200341c00f6a41106a290300370000200341c90a6a200341c00f6a41086a290300370000200341013a00c00a200320032903c00f3700c10a200341c00f6a200341e0066a41800210c9081a200341fc046a2004360200200341f0046a41086a20053602002003200936028005200320073602f404200320063602f004200341800e6a200341c00a6a200341c00f6a200341f0046a10e90220032903800e4201520d01200341a80e6a2102200341800e6a41086a2101200341a00e6a2d0000210820032d00980e21070b200320012800113602e0042003200141146a2800003600e30420012f0019210c20012d001b210d200128001c210e200228000021022001280224210120032903880e210f20032903900e2110200041186a20073a0000200041106a20103703002000200f370308200020032802e0043600192000411c6a20032800e3043600002000412c6a2001360200200041286a20023600002000200e3600242000200d3a00232000200c3b0021200041206a20083a0000200042013703000c520b200320032800990e3602e0042003200341800e6a411c6a2800003600e30420032903880e210f20032903900e2110200041186a20032d00980e3a0000200041106a20103703002000200f370308200020032802e0043600192000411c6a20032800e304360000200042003703000c510b200341c00f6a41206a2001290300370300200341c00f6a41186a200c290300370300200341c00f6a41106a200d290300370300200341c00f6a41086a200e290300370300200320032903a00c3703c00f0240200341c00f6a10da02450d002000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c510b200341e8086a41186a22014200370300200341f8086a22024200370300200341e8086a41086a22084200370300200342003703e808200341800a6a41b4f0c500410f10c5012008200341800a6a41086a290000370300200320032900800a3703e808200341900a6a418884c600410710c5012001200341900a6a41086a290000370300200220032900900a370300200341e8086a41202006200710ea02200041186a41003a000020004200370308200020032800d0093600192000411c6a200341d3096a280000360000200042003703000c500b200141246a280200210c2001411c6a2802002107200141186a2802002104200141146a2802002108200141106a28020021062001410c6a2802002105200141086a280200210e200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f024002400240200341c00f6a10cc02450d004200210f4102210c420021100c010b200341e8086a41186a22014200370300200341e8086a41106a22024200370300200341e8086a41086a220d4200370300200342003703e808200341800a6a41ffdcc700410710c501200d200341800a6a41086a290000370300200320032900800a3703e808200341900a6a41b8b3c300410c10c5012001200341900a6a41086a290000370300200220032900900a370300200341b8026a200341e8086a412010c601200341c00f6a20032802bc02410020032802b8021b220a200c10eb0220032802c00f220120032802c80f10ce02210d024020032802c40f450d002001102c0b200341800e6a10ec02200d417f7320032802800e2209200c4105746a410020032802880e200c4b1b2201410047710d01024020032802840e41ffffff3f71450d002009102c0b4280808080b0024280808080a001200d1b21104183f3c300ad41f9f2c300ad200d1b210f4103210c0b02402005450d00200e450d00200e102c0b02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b02402004450d002008450d002004410c6c450d002008102c0b20004200370308200041236a41003a000020002010200f84370024200041206a200c3a0000200041186a41003a00002000200d410874410c723b0021200042013703000c500b200141086a290000210f200141106a290000211020012900002111200341a0096a41186a200141186a2900002212370300200341a0096a41106a2010370300200341a0096a41086a200f370300200320113703a009200341cd0f6a200f370000200341d50f6a2010370000200341dd0f6a2012370000200341003a00c40f200341073602c00f200320113700c50f200341c00f6a10c802200341003602e002200342013703d802200e2006200341d8026a10bb01200341d8026a2007108f0102402007450d0020082007410c6c6a21022008210103402001280200200141086a280200200341d8026a10bb012001410c6a22012002470d000b0b200341e0066a200a200c10eb0220032802e002220141046a2202417f4c0d0d20032802d802210c20032802e806210620032802e006210d02400240024002400240024020020d00200341003602c80f200342013703c00f0c010b20021032220a450d13200341003602c80f200320023602c40f2003200a3602c00f200141c000490d01200141808001490d022001418080808004490d030b200341c00f6a41004101102f20032802c00f20032802c80f22026a41033a00002003200241016a22023602c80f200341c00f6a20024104102f20032802c00f20032802c80f22026a20013600002003200241046a22023602c80f200341c00f6a210a0c030b200320014102743a00a00c200341c00f6a41004101102f20032802c00f20032802c80f22026a20032d00a00c3a00002003200241016a22023602c80f200341c00f6a210a0c020b200341c00f6a41004102102f20032802c00f20032802c80f22026a20014102744101723b00002003200241026a22023602c80f200341c00f6a210a0c010b200341c00f6a41004104102f20032802c00f20032802c80f22026a20014102744102723600002003200241046a22023602c80f200341c00f6a210a0b200a20022001102f20032802c00f220220032802c80f220a6a200c200110c9081a2003200a20016a22013602c80f200d20062002200110a702024020032802c40f450d002002102c0b024020032802e406450d00200d102c0b024020032802dc02450d00200c102c0b024020032802840e41ffffff3f71450d002009102c0b02402005450d00200e450d00200e102c0b02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b02402004450d002008450d002004410c6c450d002008102c0b20004200370308200020032800d009360019200041186a41003a00002000411c6a200341d3096a280000360000200042003703000c4f0b200341e0066a41106a200141186a290300370300200341e0066a41086a200141106a2903003703002003200141086a2903003703e006200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f2000200341e0066a200341c00f6a10ed020c4e0b200341e0066a41106a200141146a290200370300200341e0066a41086a2001410c6a2207290200370300200320012902043703e006200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f200341800e6a41086a2007280200360200200320012902043703800e200341d8026a41086a200341e0066a41146a280200360200200320032902ec063703d802200341a00c6a200341c00f6a200341800e6a200341d8026a10ee02024020032d00a00c22014104460d0020032902a40c210f20032f00a10c2102200041236a20032d00a30c3a0000200020023b00212000200f370024200041206a20013a0000200041186a41003a000020004200370308200042013703000c4e0b20004200370308200020032800d009360019200041186a41003a00002000411c6a200341d3096a280000360000200042003703000c4d0b200141106a28020021052001410c6a2802002104200141086a280200210e20012802042101200341e0066a41206a2207200241206a290200370300200341e0066a41186a2208200241186a290200370300200341e0066a41106a220c200241106a290200370300200341e0066a41086a220d200241086a290200370300200320022902003703e0060240024002402001417f6a0e03000102000b200341c00f6a41206a2007290300370300200341c00f6a41186a2008290300370300200341c00f6a41106a200c290300370300200341c00f6a41086a200d290300370300200320032903e0063703c00f200341c0026a200341c00f6a10ef0220032802c0020d1d024020032802c402200e2004200510f002220141ff01714110470d00200341043a00d8020c2c0b200341d8026a200110f10220032d00d80222014104460d2b0c2a0b200341c00f6a41206a2007290300370300200341c00f6a41186a2008290300370300200341c00f6a41106a200c290300370300200341c00f6a41086a200d290300370300200320032903e0063703c00f200341c8026a200341c00f6a10ef0220032802c8020d1d024020032802cc02200e10f202220141ff01714110470d00200341043a00d8020c290b200341d8026a200110f10220032d00d80222014104460d280c270b200341c00f6a41206a2007290300370300200341c00f6a41186a2008290300370300200341c00f6a41106a200c290300370300200341c00f6a41086a200d290300370300200320032903e0063703c00f200341d0026a200341c00f6a10ef0220032802d0020d1d0240024020032802d4022202200e46220c0d00410d210120022004470d010b200341800a6a4187dec700410410c501200341900a6a41acb1c500410c10c501200341003602e002200342013703d802200341d8026a41004104102f20032802d80220032802e00222016a200e3600002003200141046a22013602e002200341d8026a20014104102f20032802d802220120032802e00222076a20043600002003200741046a22073602e002200341c00a6a2001200710c701200341c00f6a410c6a200120076a360200200320013602c80f2003200341c80a6a3602c40f2003200341c00a6a3602c00f200341800e6a200341c00f6a107e024020032802dc02450d002001102c0b20032802880e220141206a2207417f4c0d0b0240024020070d00410121080c010b200710322208450d0d0b200341003602e002200320073602dc02200320083602d802200341d8026a4100411010c80120032802d80220032802e00222076a220820032900800a370000200841086a200341800a6a41086a2900003700002003200741106a22073602e002200341d8026a2007411010c80120032802d80220032802e00222076a220820032900900a370000200841086a200341900a6a41086a2900003700002003200741106a22083602e00220032802800e2107200341d8026a2008200110c80120032802d802220820032802e002220d6a2007200110c9081a2003200d20016a22013602e002024020032802840e450d002007102c0b200341c00f6a2008200110f30220032d00f40f2107024020032802dc02450d002008102c0b410e2101200741ff01714102460d00200341800a6a4187dec700410410c501200341900a6a41f8afc500411810c501200341003602e002200342013703d802200341d8026a41004104102f20032802d80220032802e00222016a200e3600002003200141046a22013602e002200341d8026a20014104102f20032802d802220120032802e00222076a20043600002003200741046a22073602e002200341a0096a2001200710c701200341cc0f6a200120076a360200200320013602c80f2003200341a8096a3602c40f2003200341a0096a3602c00f200341800e6a200341c00f6a107e024020032802dc02450d002001102c0b20032802880e220141206a2207417f4c0d0b0240024020070d004101210d0c010b20071032220d450d0d0b41002108200341003602e002200320073602dc022003200d3602d802200341d8026a4100411010c80120032802d80220032802e00222076a220d20032900800a370000200d41086a200341800a6a41086a2900003700002003200741106a22073602e002200341d8026a2007411010c80120032802d80220032802e00222076a220d20032900900a370000200d41086a200341900a6a41086a2900003700002003200741106a220d3602e00220032802800e2107200341d8026a200d200110c80120032802d802220d20032802e00222056a2007200110c9081a2003200520016a22013602e002024020032802840e450d002007102c0b200341c00f6a200d200110b301024020032802c00f2201450d004101210820032802c40f450d002001102c0b024020032802dc02450d00200d102c0b410f210120080d00200341800a6a4187dec700410410c501200341900a6a41f8afc500411810c501200341003602e002200342013703d802200341d8026a41004104102f20032802d80220032802e00222016a200e3600002003200141046a22013602e002200341d8026a20014104102f20032802d802220120032802e00222076a20043600002003200741046a22073602e002200341800c6a2001200710c701200341cc0f6a200120076a360200200320013602c80f2003200341880c6a3602c40f2003200341800c6a3602c00f200341800e6a200341c00f6a107e024020032802dc02450d002001102c0b20032802880e220141206a2207417f4c0d0b0240024020070d00410121080c010b200710322208450d0d0b200341003602c80f200320073602c40f200320083602c00f200341c00f6a4100411010c80120032802c00f20032802c80f22076a220820032900800a370000200841086a200341800a6a41086a2900003700002003200741106a22073602c80f200341c00f6a2007411010c80120032802c00f20032802c80f22076a220820032900900a370000200841086a200341900a6a41086a2900003700002003200741106a22083602c80f20032802800e2107200341c00f6a2008200110c80120032802c00f220820032802c80f220d6a2007200110c9081a2003200d20016a22013602c80f024020032802840e450d002007102c0b2008200141c4b5c800410010a702024020032802c40f450d002008102c0b200341a0096a41186a22074200370300200341a0096a41106a22084200370300200341a0096a41086a22014200370300200342003703a009200341900a6a4187dec700410410c5012001200341900a6a41086a220d290000370300200320032900900a3703a009200341e8086a41d8b0c500411c10c5012007200341e8086a41086a2201290000370300200820032900e808370300200341003602e002200342013703d802200341d8026a41004104102f20032802d80220032802e00222076a200e3600002003200741046a22073602e002200341d8026a20074104102f20032802d80220032802e00222076a20043600002003200741046a22083602e002200341c00f6a41086a22072008360200200320032903d8023703c00f200341a0096a4120200341c00f6a10f402200341e8086a41186a22084200370300200341e8086a41106a2205420037030020014200370300200342003703e808200341800a6a41ac95c400410d10c5012001200341800a6a41086a290000370300200320032900800a3703e808200341900a6a41c695c400410c10c5012008200d290000370300200520032900900a370300200341c00f6a200341e8086a10f502200341c0106a28020021012003280298102108200341c00f6a410c6a20043602002007200e360200200341003602e002200342013703d802200341093a00c00f200320023602c40f200341c00f6a200341d8026a10f602200341c00f6a10f702200720032802e002360200200320032903d8023703c00f4100200120084102461b2004200e200c1b200341c00f6a10c4011a200341043a00a00c0c260b200341a00c6a200110f10220032d00a00c22014104460d250c240b200341e0066a41186a2001411c6a290200370300200341e0066a41106a200141146a290200370300200341e0066a41086a2001410c6a290200370300200320012902043703e006200341c00f6a41206a200241206a290200370300200341c00f6a41186a200241186a290200370300200341c00f6a41106a200241106a290200370300200341c00f6a41086a200241086a290200370300200320022902003703c00f2000200341e0066a200341c00f6a10f8020c4b0b200141286a280200211d200141246a280200210a200141206a28020021092001411c6a2802002104200141186a280200210b200141146a2802002105200141106a280200210e2001410c6a2802002106200141086a2802002107200341e0066a2001412c6a41d40110c9081a200341800e6a41206a2201200241206a290200370300200341800e6a41186a2208200241186a290200370300200341800e6a41106a220c200241106a290200370300200341800e6a41086a220d200241086a290200370300200320022902003703800e02400240024002402007417f6a0e0400010203000b200341c00f6a41206a2001290300370300200341c00f6a41186a2008290300370300200341c00f6a41106a200c290300370300200341c00f6a41086a200d290300370300200320032903800e3703c00f024002400240200341c00f6a10da02450d004182b4082101420021104200210f0c010b4183b408210142808080809002210f0240200a41084f0d0041acf5c400ad21100c010b200441b6f7c400460d0120042900004280c2cdeb16510d0141acf5c400ad21100b02402005450d00200e450d00200e102c0b02402009450d002004450d002004102c0b200042003703082000200f201084370024200041206a2001360000200041186a41003a0000200042013703000c4e0b200341d40f6a200a360200200341d00f6a20093602002003201d3602d80f200320043602cc0f2003200b3602c80f200320053602c40f2003200e3602c00f2006200341c00f6a10f902200041186a41003a00002000420037030820002003280089093600192000411c6a2003418c096a280000360000200042003703000c4d0b200341c00f6a41206a2001290300370300200341c00f6a41186a2008290300370300200341c00f6a41106a200c290300370300200341c00f6a41086a200d290300370300200320032903800e3703c00f0240200341c00f6a10da02450d0020004200370308200041206a41023a0000200041186a41003a0000200042013703000c4d0b200610fa02200041186a41003a000020004200370308200020032800b0063600192000411c6a200341b3066a280000360000200042003703000c4c0b200341c00f6a41186a201d360200200341c00f6a41146a200a360200200341c00f6a41106a2009360200200341c00f6a410c6a2004360200200341c00f6a41086a200b360200200320053602c40f2003200e3602c00f200341c00f6a411c6a200341e0066a41d40110c9081a200341d8026a41206a2001290300370300200341d8026a41186a2008290300370300200341d8026a41106a200c290300370300200341d8026a41086a200d290300370300200320032903800e3703d80202400240024002400240200341d8026a10da02450d004200210f410221020c010b200610fb020d014280808080f001210f410321020b200341c00f6a10fc0241f4d1c400ad2110410021010c010b200341e8086a41186a22014200370300200341f8086a22024200370300200341e8086a41086a22074200370300200342003703e808200341800a6a41ac95c400410d10c5012007200341800a6a41086a290000370300200320032900800a3703e808200341900a6a41c695c400410c10c5012001200341900a6a41086a290000370300200220032900900a370300200341d8026a200341e8086a10f502200341d8036a280200210220032802b0032107200341003602e002200342013703d802200341003a00a00c41012101200341d8026a41004101102f20032802d80220032802e0026a20032d00a00c3a0000200320032802e00241016a3602e002200341c00f6a200341d8026a10f6024100200220074102461b2006200341d8026a10c4012102200341c00f6a10fc022002450d01418cd2c400ad2110410321024280808080d002210f0b20004200370308200041236a41003a0000200041206a20023a0000200041186a41003a000020002001410874411a723b00212000200f4280808080f00383201084370024200042013703000c4c0b20004200370308200020032800f009360019200041186a41003a00002000411c6a200341f3096a280000360000200042003703000c4b0b200341c00f6a41206a2001290300370300200341c00f6a41186a2008290300370300200341c00f6a41106a200c290300370300200341c00f6a41086a200d290300370300200320032903800e3703c00f200341c00f6a10da020d1c2006200e2005200b10f002220141ff01714110470d1d0240200e200610f202220141ff01714110470d00200341043a00d8020c210b200341d8026a200110f1020c1e0b410221010c480b410221010c460b410221010c440b419cddc300413041ccddc300103c000b410221070c410b200341023a0090090c3f0b200341e0096a410110d3020c360b200341e0096a410510d3020c350b103b000b1039000b200341c80f6a41033a0000200341d10f6a20032903a809370000200341d90f6a200341b0096a290300370000200341e10f6a200341b8096a290300370000200320032903a0093700c90f200341003602c00f200341c00f6a10c8020c330b200341e0096a410210d3020c310b200341800e6a410110d3020c2a0b200341800e6a410510d3020c290b410221070c2c0b2000420037002420004200370308200041206a41023a0000200041186a41003a0000200042013703000c3a0b200341800c6a410110d3020c1f0b200341800c6a410510d3020c1e0b200341c00f6a41086a41033a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341b80c6a290300370000200320032903a00c3700c90f200341003602c00f200341c00f6a10c8020c1e0b410221070c210b200341f80d6a22014200370300200341e00d6a41106a22044200370300200341e00d6a41086a22054200370300200342003703e00d200341800a6a41d4dcc700410810c5012005200341800a6a41086a2209290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200341900a6a41086a220a290000370300200420032900900a370300200341b8016a200341e00d6a412010d301200341b8016a41106a290300211c20032903c001212520032802b8012106200142003703002004420037030020054200370300200342003703e00d200341800a6a41d4dcc700410810c50120052009290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200a290000370300200420032900900a3703002003427f201c420020061b221c200f20147d2010201654ad7d7c2025420020061b2214201020167d7c22162014542201ad7c221420012014201c542014201c511b22011b3703c80f2003427f201620011b3703c00f200341e00d6a4120200341c00f6a411010a7020c1a0b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c340b200341d8026a410110dd02200341f0046a41086a200341c00a6a41086a290200370300200341f0046a41106a200341c00a6a41106a2f01003b01002003200341d8026a41086a2800003600f309200320032800dd023602f009200320032902c00a3703f004200320032802f0093602e009200320032800f3093600e3090c130b200341d8026a410710dd02200341f0046a41086a200341c00a6a41086a290200370300200341f0046a41106a200341c00a6a41106a2f01003b01002003200341d8026a41086a2800003600f309200320032800dd023602f009200320032902c00a3703f004200320032802f0093602e009200320032800f3093600e3090c120b200341d8026a410610dd02200341f0046a41086a200341c00a6a41086a290200370300200341f0046a41106a200341c00a6a41106a2f01003b01002003200341d8026a41086a2800003600f309200320032800dd023602f009200320032902c00a3703f004200320032802f0093602e009200320032800f3093600e3090c110b41022101200341023a00d8020c0c0b41022101200341023a00d8020c090b41022101200341023a00a00c0c060b41022101200341023a00d8020c020b200341d8026a200110f1020b20032d00d80222014104460d010b20032902dc02210f20032f00d9022102200041236a20032d00db023a0000200020023b00212000200f370024200041206a20013a0000200041186a41003a0000200042003703084201210f0c010b4200210f20004200370308200020032800d009360019200041186a41003a00002000411c6a200341d3096a2800003600000b2000200f3703000c280b20032902a40c210f20032f00a10c2102200041236a20032d00a30c3a0000200020023b00212000200f370024200041206a20013a0000200041186a41003a000020004200370308200042013703000c270b20004200370308200020032800d009360019200041186a41003a00002000411c6a200341d3096a280000360000200042003703000c260b20032902dc02210f20032f00d9022102200041236a20032d00db023a0000200020023b00212000200f370024200041206a20013a0000200041186a41003a000020004200370308200042013703000c250b20004200370308200020032800f009360019200041186a41003a00002000411c6a200341f3096a280000360000200042003703000c240b20032902dc02210f20032f00d9022102200041236a20032d00db023a0000200020023b00212000200f370024200041206a20013a0000200041186a41003a000020004200370308200042013703000c230b20004200370308200020032800b006360019200041186a41003a00002000411c6a200341b3066a280000360000200042003703000c220b200f2002ad84210f2001410874410a72210141032102200b450d002009102c0b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20023a0000200041186a41003a0000200042013703000c200b20032800d902210120032d00d8022102200341e8046a20032800e309360000200320013600e104200320023a00e004200320032802e0093600e5042031102b0240201d2007460d0003402008102b200841f0006a2108200c41907f6a220c0d000b0b02402005450d00200541f0006c450d00200d102c0b20032802a40a2201450d03200141c4006c450d0320032802a00a102c0c030b201d2007460d000340200741046a102b201d200741f0006a2207470d000b0b02402005450d00200541f0006c450d00200d102c0b200341f80d6a4200370300200341f00d6a4200370300200341e00d6a41086a22014200370300200342003703e00d200341c00f6a41dcdcc700410a10c5012001200341c00f6a41086a2202290000370300200320032900c00f3703e00d200341c00f6a41d3dec400410610c501202841086a2002290000370000202820032900c00f370000200341c00f6a20032802a00a2202200910fd02200341e00d6a412020032802c00f220120032802c80f10a702024020032802c40f450d002001102c0b200341043a00e00420032802a40a2201450d01200141c4006c450d012002102c0c010b02402007450d00200741f0006c2102200d41046a210103402001102b200141f0006a2101200241907f6a22020d000b0b2005450d00200d450d00200541f0006c450d00200d102c0b024020032d00e00422014104460d0020032902e404210f20032f00e1042102200041236a20032d00e3043a0000200020023b00212000200f370024200041206a20013a0000200041186a41003a000020004200370308200042013703000c1c0b20004200370308200020032800d009360019200041186a41003a00002000411c6a200341d3096a280000360000200042003703000c1b0b0240024020112015562012201356201220135122011b0d002011201554201220135420011b450d01200341f80d6a22014200370300200341e00d6a41106a22044200370300200341e00d6a41086a22054200370300200342003703e00d200341800a6a41d4dcc700410810c5012005200341800a6a41086a2209290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200341900a6a41086a220a290000370300200420032900900a370300200341a0016a200341e00d6a412010d301200341a0016a41106a290300211420032903a801211620032802a0012106200142003703002004420037030020054200370300200342003703e00d200341800a6a41d4dcc700410810c50120052009290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200a290000370300200420032900900a370300200342002014420020061b22142015201154ad201220137d7c7c2016420020061b2213201520117d221654ad7d2215201320167d2216201356201520145620152014511b22011b3703c80f20034200201620011b3703c00f200341e00d6a4120200341c00f6a411010a7020c010b200341f80d6a22014200370300200341e00d6a41106a22044200370300200341e00d6a41086a22054200370300200342003703e00d200341800a6a41d4dcc700410810c5012005200341800a6a41086a2209290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200341900a6a41086a220a290000370300200420032900900a37030020034188016a200341e00d6a412010d30120034188016a41106a290300211420032903900121162003280288012106200142003703002004420037030020054200370300200342003703e00d200341800a6a41d4dcc700410810c50120052009290000370300200320032900800a3703e00d200341900a6a41bba8c700410d10c5012001200a290000370300200420032900900a3703002003427f2014420020061b2214201220137d2011201554ad7d7c2016420020061b2213201120157d7c22152013542201ad7c22132001201320145420132014511b22011b3703c80f2003427f201520011b3703c00f200341e00d6a4120200341c00f6a411010a7020b20034180036a2204201937030020034188036a2205201a370300200320183703f802200320123703f002200320113703e802200320103703d8022003200f3703e00202400240427f201020117c221320132010542201200f20127c2001ad7c2213200f542013200f511b22011b22144280c8afa025544100427f201320011b2215501b0d00200341e8026a29030021142005290300211520042903002116200341f8026a290300211820032903e002211920032903d802211a4201211320032903f002211c0c010b024002402010201184200f2012848450450d00420021130c010b42002113200341e8086a41186a22014200370300200341e8086a41106a22044200370300200341e8086a41086a22054200370300200342003703e808200341800a6a41d4dcc700410810c5012005200341800a6a41086a2209290000370300200320032900800a3703e808200341900a6a41bba8c700410d10c5012001200341900a6a41086a220a290000370300200420032900900a370300200341f0006a200341e8086a412010d301200341f0006a41106a29030021162003290378211820032802702106200142003703002004420037030020054200370300200342003703e808200341800a6a41d4dcc700410810c50120052009290000370300200320032900800a3703e808200341900a6a41bba8c700410d10c5012001200a290000370300200420032900900a370300200342002016420020061b221620157d2018420020061b2218201454ad7d2219201820147d221a201856201920165620192016511b22011b3703c80f20034200201a20011b3703c00f200341e8086a4120200341c00f6a411010a702200341f80f6a2015370300200341f00f6a2014370300200341c00f6a41086a41013a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341a00c6a41106a290300370000200341e10f6a200341a00c6a41186a290300370000200341023602c00f200320032903a00c3700c90f200341c00f6a10c8020b0b20034188076a201837030020034190076a2016370300200341f0066a201937030020034198076a2015370300200341f8066a20143703002003201c370380072003201b3703a0072003201a3703e8062003200c410020081b3602ac072003200d410020081b3602a807200320134201512201ad3703e0060240024020010d002007200210b4010c010b20072002200341e8066a10d8020b024020032802c40a450d002007102c0b02400240024020174201510d0020134201510d010b20174201520d0120134201510d01200341c00f6a41086a41043a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341b80c6a290300370000200320032903a00c3700c90f200341003602c00f200341c00f6a10c8020c010b200341c00f6a41086a41033a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341b80c6a290300370000200320032903a00c3700c90f200341003602c00f200341c00f6a10c8020b0240200e450d00200341f80f6a200f370300200341f00f6a2010370300200341c00f6a41086a41003a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341b80c6a290300370000200341023602c00f200320032903a00c3700c90f200341c00f6a10c8020b20034188106a201237030020034180106a2011370300200341f80f6a200f370300200341f00f6a2010370300200341c00f6a41086a41033a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341a00c6a41186a290300370000200341023602c00f200320032903a00c3700c90f200341c00f6a10c802200041186a41003a000020004200370308200020032800b0063600192000411c6a200341b0066a41036a280000360000200042003703000c1a0b024020032d00800c22074104470d004101210141022107201221130c030b20032f00810c20032d00830c41107472210120032902840c210f0c030b2005450d00200341f80f6a2014370300200341f00f6a2017370300200341c00f6a41086a41003a0000200341d10f6a200341a00c6a41086a290300370000200341d90f6a200341b00c6a290300370000200341e10f6a200341b80c6a290300370000200341023602c00f200320032903a00c3700c90f200341c00f6a10c8020b20034188056a22014200370300200341f0046a41106a22074200370300200341f0046a41086a220d4200370300200342003703f004200341e00d6a41d4dcc700410810c501200d200341e00d6a41086a2204290000370300200320032900e00d3703f004200341c00f6a41bba8c700410d10c5012001200341c00f6a41086a2205290000370300200720032900c00f370300200341c0006a200341f0046a412010d301200341c0006a41106a2903002112200329034821142003280240210e2001420037030020074200370300200d4200370300200342003703f004200341e00d6a41d4dcc700410810c501200d2004290000370300200320032900e00d3703f004200341c00f6a41bba8c700410d10c50120012005290000370300200720032900c00f3703002003420020124200200e1b221220197d20144200200e1b2214201154ad7d2215201420117d2211201456201520125620152012511b22011b3703c80f20034200201120011b3703c00f200341f0046a4120200341c00f6a411010a702200341a00a6a41086a200341900e6a220141086a290300370300200341043a00800c200320012903003703a00a4100210141012107420021110b200341e00f6a20032903a00a370300200341f40f6a20032800cb09360000200341e80f6a200341a80a6a290300370300200341d80f6a200f370300200320133703c00f200320073a00f00f200320032802c8093600f10f200320113703c80f200320103703d00f024002402001450d002008200c10b4010c010b2008200c200341c00f6a10d4020b20032f00810c20032d00830c41107472210120032902840c210f410421070b024020032802a409450d002008102c0b20074104460d010b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20073a0000200041186a41003a0000200042013703000c140b200341e80f6a2002360200200341cd0f6a200341a80c6a290300370000200341d50f6a200341b00c6a290300370000200341dd0f6a200341a00c6a41186a290300370000200341023a00c40f200341013602c00f200320032903a00c3700c50f200341c00f6a10c802200041186a41003a000020004200370308200020032800d0093600192000411c6a200341d3096a280000360000200042003703000c130b20032d00800e22074104470d010b2008200c10b40120032f00810e20032d00830e41107472210120032902840e210f410421070c010b20032f00810e20032d00830e41107472210120032902840e210f0b024020032802a40c450d002008102c0b20074104460d010b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20073a0000200041186a41003a0000200042013703000c0e0b200341c80f6a2002360200200341013a00c40f200341013602c00f200341c00f6a10c802200041186a41003a000020004200370308200020032800b0063600192000411c6a200341b3066a280000360000200042003703000c0d0b024020032d00e00922014104470d0041012108410221012014210f201321100c030b20032f00e10920032d00e30941107472210720032902e409210f0c030b02402009450d00200341f80f6a2015370300200341f00f6a2016370300200341c80f6a41003a0000200341d10f6a20032903a809370000200341d90f6a200341b0096a290300370000200341e10f6a200341b8096a290300370000200341023602c00f200320032903a0093700c90f200341c00f6a10c8020b200341e00d6a41186a200341800c6a41186a2903002213370300200341e00d6a41106a200341800c6a41106a2903002214370300200341e00d6a41086a200341800c6a41086a2903002215370300200320032903800c22163703e00d20034198106a201937030020034190106a2018370300200341c00f6a41086a41073a0000200341d10f6a2015370000200341d90f6a2014370000200341e10f6a2013370000200341f10f6a20032903a809370000200341f90f6a200341a0096a41106a29030037000020034181106a200341a0096a41186a290300370000200341023602c00f200320163700c90f200320032903a0093700e90f200341013a008910201120197d2012201854ad7d2114201220187d2113200341c00f6a10c8020b200341a80a6a200341b8096a290300370300200320032903b0093703a00a200341043a00e0094200201120147d2012201354ad7d2214201220137d2213201256201420115620142011511b22011b21114200201320011b211241002101410021080b200341e00f6a20032903a00a370300200341f40f6a20032800cb09360000200341e80f6a200341a80a6a290300370300200341d80f6a2010370300200320123703c00f200320013a00f00f200320032802c8093600f10f200320113703c80f2003200f3703d00f024002402008450d002002200710b4010c010b20022007200341c00f6a10d4020b20032f00e10920032d00e30941107472210720032902e409210f410421010b024020032802d409450d002002102c0b20014104470d01200341cd0f6a20032903a809370000200341e80f6a2004360200200341d50f6a200341b0096a290300370000200341dd0f6a200341b8096a290300370000200341003a00c40f200341013602c00f200320032903a0093700c50f200341c00f6a10c802200341043a0090090b200042003703082000200328008909360019200041186a41003a00002000411c6a2003418c096a280000360000200042003703000c070b2003200f37029409200320013a009009200320073b009109200320074110763a0093090b200329029409210f0b20032802900921012000200f370024200041206a2001360000200041186a41003a000020004200370308200042013703000c040b200020013b00212000200f37002420004200370308200041236a20014110763a0000200041206a20073a0000200041186a41003a0000200042013703000c030b200320032800a00c3602e0042003200341a30c6a2800003600e304200041186a41003a000020004200370308200020032802e0043600192000411c6a20032800e304360000200041286a410b360000200041b4bfc4003600242000411b3b0021200041206a20013a0000200042013703000c020b20071083022007102c2003200341f3046a2800003600e30d200320032800f0043602e00d200041186a41003a000020004200370308200020032802e00d3600192000411c6a20032800e30d360000200041286a410b360000200041b4bfc4003600242000411b3b0021200041206a20013a0000200042013703000c010b20071083022007102c2003200341f3046a2800003600e30d200320032800f0043602e00d200041186a41003a000020004200370308200020032802e00d3600192000411c6a20032800e30d360000200041286a410b360000200041b4bfc4003600242000411b3b0021200041206a20013a0000200042013703000b200341f0116a24000b820101027f024020002802082201450d0020002802002102200141186c210103400240200241046a280200450d002002280200102c0b0240200241106a280200450d002002410c6a280200102c0b200241186a2102200141686a22010d000b0b024020002802042202450d0020002802002201450d00200241186c450d002001102c0b0bf80301077f024020002802082201450d0020002802002202200141b4026c6a2103034002402002220441ec016a2802002201450d0020042802e40121022001410c6c210103400240200241046a280200450d002002280200102c0b2002410c6a2102200141746a22010d000b0b0240200441e8016a2802002202450d0020042802e4012201450d002002410c6c450d002001102c0b0240200441f8016a2802002202450d0020024104742101200441f0016a28020041046a210203400240200241046a280200450d002002280200102c0b200241106a2102200141706a22010d000b0b0240200441f4016a2802002202450d0020042802f0012201450d002002410474450d002001102c0b0240200441fc016a2802002201450d0020044180026a2802002202200520021b21052002450d002005450d002001102c0b02402004418c026a2802002202450d0020044188026a2802002201450d002002450d002001102c0b0240200441a0026a2802002202450d00200241c1006c450d00200428029c02102c0b200441b4026a2102200441ac026a410036020020042802a8022106200441013602a802200441b0026a2802002201200720011b210702402001450d002007450d002006102c0b20022003470d000b0b024020002802042202450d0020002802002201450d00200241b4026c450d002001102c0b0ba70201027f02402001450d0020014198026c2102410021010340024002400240024002400240024002400240200020016a22032802000e0b0808080800010203040506070b200341086a280200450d07200341046a280200102c0c070b200341086a280200450d06200341046a280200102c0c060b200341086a10f5060c050b200341086a10f5060c040b200341086a280200450d03200341046a280200102c0c030b0240200341086a280200450d00200341046a280200102c0b200341106a2d00004106490d02200341186a280200450d02200341146a280200102c0c020b200341086a10f5060c010b200341086a10f506200341f0016a2d00004106490d00200341f8016a280200450d00200341f4016a280200102c0b200220014198026a2201470d000b0b0b850501047f02402001450d0020014188026c21024100210303400240024002400240024002400240200020036a22012802000e06060001020304050b200141046a22042802002001410c6a28020010c3020240200141086a2802002205450d0020054198026c450d002004280200102c0b200141106a10f5060c050b200141046a22042802002001410c6a28020010c3020240200141086a2802002205450d0020054198026c450d002004280200102c0b200141206a10f506200141106a2205280200200141186a28020010c402200141146a2802002201450d0420014188026c450d042005280200102c0c040b200141046a22042802002001410c6a28020010c3020240200141086a2802002205450d0020054198026c450d002004280200102c0b200141106a2205280200200141186a28020010c302200141146a2802002201450d0320014198026c450d032005280200102c0c030b200141046a22042802002001410c6a28020010c3020240200141086a2802002205450d0020054198026c450d002004280200102c0b200141206a10f506200141106a2205280200200141186a28020010c402200141146a2802002201450d0220014188026c450d022005280200102c0c020b200141046a22042802002001410c6a28020010c3020240200141086a2802002205450d0020054198026c450d002004280200102c0b200141206a10f506200141106a2205280200200141186a28020010c402200141146a2802002201450d0120014188026c450d012005280200102c0c010b200141186a10f506200141046a22052802002001410c6a28020010c302200141086a2802002201450d0020014198026c450d002005280200102c0b200220034188026a2203470d000b0b0b960401027f0240024002400240024002400240024020002d00000e0700010203040506070b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0620002802102200450d0620014188026c450d062000102c0f0b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0520002802102200450d0520014188026c450d052000102c0f0b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0420002802102200450d0420014188026c450d042000102c0f0b200041046a2802002000410c6a28020010c302200041086a2802002201450d0320002802042200450d0320014198026c450d032000102c0f0b200041086a2802002201450d02200041046a2802002200450d022001450d022000102c0f0b200041086a10f506200041046a220028020010c5022000280200102c0f0b200041086a10f506200041046a220028020010c5022000280200102c0b0bbe06030d7f017e037f230041306b220224002002200141026a2f01003b012e2002200141066a2f01003b012c20022001410a6a2f01003b012a200141046a2d00002103200141056a2d00002104200141086a2d00002105200141096a2d000021062001410c6a2d000021072001410d6a2d0000210820012d0001210920012d0000210a20022001410e6a2f01003b0128200141116a2d0000210b200141106a2d0000210c2002200141126a2f01003b0126200141156a2d0000210d200141146a2d0000210e2002200141166a2f01003b01242001411a6a290100210f200141196a2d00002110200141186a2d000021112001280224210120022f012e211202400240200a0d0020012001280200417f6a220a360200200220123b0122200220022f012c3b0120200220022f012a3b011e200220022f01283b011c200220022f01263b011a200220022f01243b01182002200f3703080240200a0d002001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a220a200a280200417f6a220a360200200a0d002001102c0b0240200941ff01714101460d00200041013a00000c020b200020022f01223b0001200041046a20043a0000200041036a20033a0000200041086a20063a0000200041076a20053a0000200041056a20022f01203b00002000410c6a20083a00002000410b6a20073a0000200041096a20022f011e3b0000200041106a200b3a00002000410f6a200c3a00002000410d6a20022f011c3b0000200041146a200d3a0000200041136a200e3a0000200041116a20022f011a3b0000200041186a20103a0000200041176a20113a0000200041003a0000200041156a20022f01183b0000200041196a20022903083700000c010b200220123b0120200220022f012c3b011e200220022f012a3b011c200220022f01283b011a200220022f01263b01182002200f37020c200220103a000b200220113a000a200220022f01243b0108200041013a000020012001280200417f6a220036020020000d002001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22002000280200417f6a220036020020000d002001102c0b200241306a24000bfd0202057f017e230041306b22022400200241086a41206a2203200141206a280200360200200241086a41186a2204200141186a290200370300200241086a41106a2205200141106a290200370300200241086a41086a2206200141086a290200370300200220012902003703080240411010322201450d00200020022903082207370200200141a0d7c00036020c20014101360208200142818080801037020020002001360224200041086a2006290300370200200041106a2005290300370200200041186a2004290300370200200041206a2003280200360200024020002d00012007a741ff017172450d00411010322203450d0120034188d7c00036020c20034101360208200342818080801037020020012001280200417f6a2204360200024020040d002001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22042004280200417f6a220436020020040d002001102c0b200020033602240b200241306a24000f0b1039000bcb0b010c7f230041a0036b22012400200141e0026a22024200370300200141d8026a22034200370300200141c8026a41086a22044200370300200142003703c802200141e8026a41c1dcc700410610c5012004200141e8026a41086a2205290000370300200120012900e8023703c802200141e8026a4196a4c600410610c50120022005290000370300200320012900e802370300200141106a200141c8026a412010c601024002402001280210450d002001280214450d00200141e0026a22064200370300200141d8026a22074200370300200141c8026a41086a22024200370300200142003703c802200141e8026a41c1dcc700410610c5012002200141e8026a41086a2204290000370300200120012900e8023703c802200141e8026a41b0d1c600410e10c501200341086a22082004290000370000200320012900e802370000200141203602fc022001200141c8026a3602f80220014180036a200141c8026a412010b3010240024020012802800322090d00410321050c010b200128028403210a02400240024020014180036a41086a280200220b450d00410121050240024020092d00000e03000401020b200b417f6a4104490d012009280001210c410021050c030b410221050c010b200141003602f002200142013703e8022001410f360294032001200141f8026a360290032001200141e8026a36029c032001412c6a41013602002001420137021c200141b4bcc300360218200120014190036a3602282001419c036a41dcb7c000200141186a103e1a20013502f00242208620013502e802841000024020012802ec02450d0020012802e802102c0b410321050b0b200a450d002009102c0b200141003602d002200142013703c802200141c8026a4100410010d601200141b4026a200c36020020014102200520054103461b22053602b002200141186a200041980210c9081a200141c0026a20012802d002360200200120012903c8023703b802200642003703002007420037030020024200370300200142003703c802200141e8026a41c1dcc700410610c50120022004290000370300200120012900e8023703c802200141e8026a4190cfc600410a10c50120082004290000370000200320012900e802370000200141086a200141c8026a412010c601024002400240200128020c410020012802081b220241016a22002002490d00200141b8026a210c200141e0026a22064200370300200141d8026a22074200370300200141c8026a41086a22044200370300200142003703c802200141e8026a41c1dcc700410610c5012004200141e8026a41086a2202290000370300200120012900e8023703c802200141e8026a4190cfc600410a10c501200341086a22082002290000370000200320012900e802370000200120003602e802200141c8026a4120200141e8026a410410a702200642003703002007420037030020044200370300200142003703c802200141e8026a41c1dcc700410610c50120042002290000370300200120012900e8023703c802200141e8026a41baa4c600410610c50120082002290000370000200320012900e802370000200141003602880320014201370380030240024020050e03030001040b20014180036a41004101102f2001280280032001280288036a41013a0000200120012802880341016a360288030c030b20014180036a41004101102f2001280280032001280288036a41023a0000200120012802880341016a360288030c020b200141186a10f4050c030b20014180036a41004101102f2001280280032001280288036a41003a0000200120012802880341016a22033602880320012802b402210420014180036a20034104102f2001280280032001280288036a2004360000200120012802880341046a360288030b200141186a20014180036a10ec0720014180036a200c10b307200220014180036a41086a28020036020020012001290380033703e802200141c8026a4120200141e8026a10f402200141186a10f4050c010b200010f3050b200141a0036a24000ba90101047f230041106b220324000240412010322204450d002003422037020420032004360200200341004120102f20032802002205200328020822066a22042002290000370000200441086a200241086a290000370000200441106a200241106a290000370000200441186a200241186a2900003700002003200641206a2202360208200020012005200210a70202402003280204450d002005102c0b200341106a24000f0b1039000bb54106057f017e0e7f027e027f067e230041b0036b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402001280200417f6a0e0a00010203090807060504000b20022d0001210420022d00002101200228022422022002280200417f6a22053602000240024020010d00024020050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200441ff01710d012000420037030820002003280078360019200041186a41003a00002000411c6a200341fb006a280000360000200042003703000c170b20050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b20034190036a41026a200341286a41026a2d000022023a0000200320032f002822013b019003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c150b20022d0001210620022d00002105200228022422022002280200417f6a2204360200200141086a2802002107200128020421010240024020050d00024020040d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22052005280200417f6a220536020020050d002002102c0b200641ff01714101470d0102402007450d002001450d002001102c0b2000420037030820002003280078360019200041186a41003a00002000411c6a200341fb006a280000360000200042003703000c160b20040d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22052005280200417f6a220536020020050d002002102c0b02402007450d002001450d002001102c0b20034190036a41026a200341286a41026a2d000022023a0000200320032f002822013b019003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c140b200141086a290300210820022d0001210420022d00002101200228022422022002280200417f6a220536020002400240024020010d00024020050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200441ff01710d014108103222020d020c170b20050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200341a0036a41026a20034190036a41026a2d000022023a0000200320032f00900322013b01a003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c140b2003420837027c20032002360278200341f8006a41004108102f2003280278220220032802800122016a20083700002003200141086a22013602800141deecc600410a2002200110a7020240200328027c450d002002102c0b200041186a41003a000020004200370308200020032800283600192000411c6a2003412b6a280000360000200042003703000c130b20022d0001210920022d00002104200228022422022002280200417f6a2207360200200141086a28020021062001280204210502400240024020040d002001410c6a2802002104024020070d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200941ff0171450d02410221010c010b4102210120070d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22042004280200417f6a220436020020040d002002102c0b0c120b200341e0006a41002902ecde47370300200341d8006a41002902e4de47370300200341d0006a41002902dcde47370300200341c8006a41002902d4de47370300200341c0006a41002902ccde47370300200341386a41002902c4de47370300200341286a41086a41002902bcde47370300200341002902b4de47370328200341a0036a2004ad4220862005ad84100310fc0720032802a0032202450d0d20032802a40321012003200341a0036a41086a28020036021c2003200236021820034190036a200341186a108a022003280290032207450d0c20034198036a220a280200210b200328029403210920034190036a200341186a108a020240024002400240200328029003220c450d00200328029403210d200328021c220e4104490d01200a280200210f2003280218220a28000021102003200a41046a3602182003200e417c6a221136021c20114104490d022003200a41086a360218200a28000421122003200e41786a221136021c20114104490d0b2003200e41746a36021c2003200a410c6a360218200a28000821132003200341186a10870220032802000d0e20032802042211200328021c410c6e220a200a20114b1bad420c7e2208422088a7450d030c140b20090d0e0c0f0b0240200d450d00200c102c0b20090d0d0c0e0b0240200d450d00200c102c0b20090d0c0c0d0b2008a7220a417f4c0d1002400240200a0d00410421140c010b200a10322214450d140b200a410c6ead210802402011450d000340200341003a009803200328021c220a450d0b2003280218220e2d000021152003200a417f6a221636021c200320153a009003200341013a0098032003200e41016a3602182016450d0a2003280218220e2d000021152003200a417e6a221636021c2003200e41016a360218200341023a009803200320153a0091032016450d0a2003280218220e2d000021152003200a417d6a221636021c2003200e41016a360218200341033a009803200320153a0092032016450d0a2003280218220e2d000021152003200a417c6a221636021c2003200e41016a360218200341043a009803200320153a0093032016450d0a2003280218220e2d000021152003200a417b6a221636021c2003200e41016a360218200341053a009803200320153a0094032016450d0a2003280218220e2d000021152003200a417a6a221636021c2003200e41016a360218200341063a009803200320153a0095032016450d0a2003280218220e2d000021152003200a41796a221636021c2003200e41016a360218200341073a009803200320153a0096032016450d0a20032003280218220e2d00003a0097032003200e41016a3602182003200a41786a221536021c20154104490d0b2003290390032117200e28000121152003200a41746a36021c2003200e41056a36021802402008422088a7220a2008a7470d00200a41016a220e200a490d13200a4101742216200e200e2016491b220e4104200e41044b1bad420c7e2218422088a70d1341000d132018a7220e4100480d13200a410c6c2019200a1b211902400240024020144100200a1b220a0d00200e0d01410421140c020b024020190d00200e0d01410421140c020b200a2019200e10352214450d180c010b200e10322214450d170b200842808080807083200e410c6ead8421080b20142008422088a7410c6c6a220a2015360208200a201737020020084280808080107c21082011417f6a22110d000b0b2014450d0a2008a7210a0240200328021c41044f0d000240200a450d00200a410c6c450d002014102c0b0240200d450d00200c102c0b2009450d0d0c0c0b2008422088a7210e2003280218280000211102402001450d002002102c0b200341b0016a200e360200200341ac016a200a360200200341a8016a201436020020034194016a200f36020020034190016a200d3602002003418c016a200c360200200341f8006a410c6a200b360200200341f8006a41086a2009360200200320113602b401200341013602a401200320133602a0012003201236029c01200320103602980120034101360288012003200736027c2003410136027802400240200b200341286a410c6a200341286a41086a20032802284101461b280200470d00200328022c22022007460d0120072002200b10cc08450d010b200341e8006a410110a2050c070b02402012200328024c4b0d00200341e8006a410210a2050c070b200341043a0068200341f8006a10ff02200341286a10ff02200341266a20032d006b3a0000200320032f00693b01240c0f0b2002411a6a2901002108200241196a2d00002107200241186a2d00002106200241166a2f01002109200241156a2d0000210c200241146a2d0000210a200241126a2f0100210d200241116a2d0000210e200241106a2d0000210b2002410e6a2f010021112002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002114200241096a2d00002112200241086a2d00002115200241066a2f01002116200241056a2d00002119200241046a2d00002113200241026a2f0100211a20022d0001210420022d00002101200228022422022002280200417f6a22053602000240024002400240024002400240024020010d00024020050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200441ff01714101470d0120032008370340200320073a003f200320063a003e200320093b013c2003200c3a003b2003200a3a003a2003200d3b01382003200e3a00372003200b3a0036200320113b01342003200f3a0033200320103a0032200320143b0130200320123a002f200320153a002e200320163b012c200320193a002b200320133a002a2003201a3b012820034190036a41c1dcc700410610c501200341f8006a41acc8c700410710c501200341a0036a200341286a10d50220032802a803220241206a2201417f4c0d170240024020010d00410121050c010b200110322205450d1b0b200341003602702003200136026c20032005360268200341e8006a4100411010c8012003280268200328027022016a2205200329009003370000200541086a20034190036a41086a2900003700002003200141106a2201360270200341e8006a2001411010c8012003280268200328027022016a22052003290078370000200541086a200341f8006a41086a2900003700002003200141106a220536027020032802a0032101200341e8006a2005200210c80120032802682205200328027022046a2001200210c9081a2003200420026a2202360270024020032802a403450d002001102c0b200341f8006a2005200210d602200341b8016a290300211b200341b0016a290300211c200341a8016a290300211d200341a0016a290300211e20034198016a290300211f20034190016a2903002120200341f8006a41106a2903002117200341c4016a28020021022003290380012118200329037821080240200328026c450d002005102c0b0240200842015222010d0020020d030b0240024020010d0020182017844200520d010b20084201520d05201e202084201c84201d201f84201b8484500d050b200341186a410410a2050c030b20050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200341023a00180c040b200341186a410510a2050b20032d00184104460d01200329021c21080c020b20034190036a41c1dcc700410610c501200341f8006a41acc8c700410710c501200341a0036a200341286a10d50220032802a803220241206a2201417f4c0d120240024020010d00410121050c010b200110322205450d160b200341003602702003200136026c20032005360268200341e8006a4100411010c8012003280268200328027022016a2205200329009003370000200541086a20034190036a41086a2900003700002003200141106a2201360270200341e8006a2001411010c8012003280268200328027022016a22052003290078370000200541086a200341f8006a41086a2900003700002003200141106a220536027020032802a0032101200341e8006a2005200210c80120032802682205200328027022046a2001200210c9081a2003200420026a2202360270024020032802a403450d002001102c0b2005200210ce0221020240200328026c450d002005102c0b02402002450d0020034190036a41c1dcc700410610c501200341f8006a41acc8c700410710c501200341a0036a200341286a10d50220032802a803220241206a2201417f4c0d130240024020010d00410121050c010b200110322205450d170b200341003602702003200136026c20032005360268200341e8006a4100411010c8012003280268200328027022016a2205200329009003370000200541086a20034190036a41086a2900003700002003200141106a2201360270200341e8006a2001411010c8012003280268200328027022016a22052003290078370000200541086a200341f8006a41086a2900003700002003200141106a220136027020032802a0032105200341e8006a2001200210c80120032802682201200328027022046a2005200210c9081a2003200420026a2202360270024020032802a403450d002005102c0b200341f8006a2001200210d6020240200329037842015222050d002001200210b4010b2005200341c4016a280200457221020240200328026c450d002001102c0b20020d0041002802d8d2484104490d002003413c3602a403200341faecc6003602a00341002802d4d248210241002802d0d248210141002802dcd2482105200341b8016a41be09360200200341b0016a42dd80808010370300200341ac016a41b8a2c600360200200341a4016a420c370200200341a0016a41bcedc60036020020034198016a420137030020034188016a420137030020034180016a410636020020034194016a20034190036a360200200341b4b5c80036028401200341b6edc60036027c200341043602782003410436029403200241e0a3c000200541024622051b28021021022003200341a0036a36029003200141f8a3c00020051b200341f8006a20021103000b200341f8006a41086a41043a000020034189016a200341286a41086a29030037000020034191016a200341386a29030037000020034199016a200341c0006a290300370000200320032903283700810120034100360278200341f8006a10c802200341043a00180b420021082000420037030820002003280078360019200041186a41003a00002000411c6a200341fb006a2800003600000c010b2003280218210220002008370024200041206a2002360000200041186a41003a000020004200370308420121080b200020083703000c110b20022d0001210920022d00002104200228022422022002280200417f6a2207360200200141086a2802002106200128020421050240024020040d002001410c6a2802002101024020070d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22042004280200417f6a220436020020040d002002102c0b200941ff01710d0120052001109d0402402006450d002005450d002005102c0b2000420037030820002003280078360019200041186a41003a00002000411c6a200341fb006a280000360000200042003703000c120b20070d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b02402006450d002005450d002005102c0b20034190036a41026a200341286a41026a2d000022023a0000200320032f002822013b019003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c100b20022d0001210c20022d00002106200228022422022002280200417f6a22093602002001410c6a2802002104200141086a2802002107200128020421050240024020060d00024020090d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200c41ff01710d0102402004450d0020052004410c6c6a21012005210203402002280200200241086a28020010b4012002410c6a22022001470d000b2004410c6c21012005210203400240200241046a280200450d002002280200102c0b2002410c6a2102200141746a22010d000b0b02402007450d002005450d002007410c6c450d002005102c0b2000420037030820002003280078360019200041186a41003a00002000411c6a200341fb006a280000360000200042003703000c110b20090d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b02402004450d002004410c6c21012005210203400240200241046a280200450d002002280200102c0b2002410c6a2102200141746a22010d000b0b02402007450d002005450d002007410c6c450d002005102c0b20034190036a41026a200341286a41026a2d000022023a0000200320032f002822013b019003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0f0b20034180016a2001410c6a28020036020020022d0000210520022d00012107200228022422022002280200417f6a2204360200200320012902043703780240024020050d00024020040d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200741ff01710d0102402003280280012201450d0020032802782202200141186c6a210103402002280200200241086a2802002002410c6a280200200241146a28020010a702200241186a22022001470d000b0b200341f8006a10c102200041186a41003a000020004200370308200020032800283600192000411c6a2003412b6a280000360000200042003703000c100b20040d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200341f8006a10c102200341a0036a41026a20034190036a41026a2d000022023a0000200320032f00900322013b01a003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0e0b2001410c6a2802002106200141086a28020021092001280204210720022d0001210420022d00002101200228022422022002280200417f6a2205360200024002400240024020010d00024020050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200441ff01710d0120074101460d0241edecc600410d10b4010c030b20050d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200341a0036a41026a20034190036a41026a2d000022023a0000200320032f00900322013b01a003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0f0b200341003602800120034201370378200341f8006a41004104102f200328027820032802800122026a20093600002003200241046a220236028001200341f8006a20024104102f2003280278220220032802800122016a20063600002003200141046a22013602800141edecc600410d2002200110a702200328027c450d002002102c0b20034184016a200636020020034180016a20093602002003200736027c200341043a0078200341f8006a109a06200041186a41003a000020004200370308200020032800283600192000411c6a2003412b6a280000360000200042003703000c0d0b20022d0001210920022d00002104200228022422022002280200417f6a2207360200200141086a2802002106200128020421050240024020040d002001410c6a2802002101024020070d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22042004280200417f6a220436020020040d002002102c0b200941ff01710d0141e8ecc60041052005200110a70220034180016a41023a000020034100360278200341f8006a10c80202402006450d002005450d002005102c0b2000420037030820002003280028360019200041186a41003a00002000411c6a2003412b6a280000360000200042003703000c0e0b20070d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b02402006450d002005450d002005102c0b200341a0036a41026a20034190036a41026a2d000022023a0000200320032f00900322013b01a003200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0c0b200341f8006a10ff020c070b0240200d450d00200c102c0b20090d030c040b200341003a0098030b2008a7220a450d002014450d00200a410c6c450d002014102c0b0240200d450d00200c102c0b2009450d010b2007102c0b2001450d002002102c0b200341e8006a410310a2050b200341286a10ff02200341246a41026a220220032d006b3a0000200320032f00693b012420032d006822014104460d00200329026c2108200341146a41026a20022d00003a0000200320032f01243b01140c020b41e8ecc60041052005200410a70220034180016a41023a000020034100360278200341f8006a10c80202402006450d002005450d002005102c0b2000420037030820002003280009360019200041186a41003a00002000411c6a2003410c6a280000360000200042003703000c020b103b000b02402006450d002005450d002005102c0b200341106a41026a200341146a41026a2d000022023a0000200320032f011422053b0110200041206a20013a0000200041186a41003a000020004200370308200020053b0021200041236a20023a000020002008370024200042013703000b200341b0036a24000f0b1039000bfc4608017f017e057f017e017f037e147f017e230041f0076b22042400200441206a41186a20024180026a290000370300200441206a41106a200241f8016a290000370300200441206a41086a200241f0016a290000370300200420022900e80137032020022903002105200441d8056a200241880210c9081a0240024002400240024002400240024002400240200441d8056a10270d00200441d8056a410110a90520004201370300200041286a200441d8056a41206a290300370300200041206a200441d8056a41186a290300370300200041186a200441d8056a41106a290300370300200041106a200441d8056a41086a290300370300200020042903d8053703080c010b2003280210210620032802002107200441d8056a41186a22024200370300200441d8056a41106a22084200370300200441d8056a41086a22094200370300200442003703d805200441e0016a41c7dcc700410410c5012009200441e0016a41086a220a290000370300200420042900e0013703d805200441e0016a41bcd6c500410b10c5012002200a290000370300200820042900e001370300200441106a200441d8056a10cf0202402007420020052004290318420020042802101b7d220b200b2005561b220b42d80480a7417f200b428080808080cb00541b470d0020044184036a200441206a41086a2903003702002004418c036a200441206a41106a29030037020020044194036a200441206a41186a290300370200200441e2c289ab063602f802200420042903203702fc0220044190016a41106a200341106a28020036020020044190016a41086a200341086a2902003703002004200329020037039001200441c8036a200441f8026a20044190016a10ce06200428028804450d02200441d8056a41066a200441c8036a41d00010c9081a200441e0016a200441d8056a41d60010c9081a200441c0006a200441e0016a41066a41d00010c9081a20044190016a200441c0006a41d00010c9081a4101210341002109024020012d00004101470d00200441d8056a41186a2202200141196a290000370300200441d8056a41106a2208200141116a290000370300200441d8056a41086a2209200141096a290000370300200420012900013703d805412010322203450d09200320042903d805370000200341186a2002290300370000200341106a2008290300370000200341086a2009290300370000410121090b200420053703e001200441e0016a41086a20044190016a41d00010c9082102200420063602bc02200420073602b80241d00010322208450d0820044198046a41086a2201200241086a29030037030020044198046a41106a220a200241106a29030037030020044198046a41186a220c200241186a2903003703002004200229030037039804200441e0016a41286a290300210b20044190026a290300210d200441e0016a41386a290300210e200441a0026a290300210f200441d8056a200441e0016a41c8006a10a502200841386a200f3703002008200e370330200841286a200d3703002008200b370320200841186a200c290300370300200841106a200a290300370300200841086a20012903003703002008200429039804370300200820042903d805370340200841c8006a200441d8056a41086a280200360200200420093602c802200420093602c402200420033602c002410810322202450d08200442083702cc05200420023602c805200441c8056a41004108102f20042802c80520042802d00522026a20053700002004200241086a3602d005200441f8026a41eddcc700410810c501200441c8036a41d4d0c000411210c501200441d8056a41ddd5c00010a10220042802e005220241206a2203417f4c0d050240024020030d00410121010c010b200310322201450d090b20044100360290052004200336028c05200420013602880520044188056a4100411010c80120042802880520042802900522036a220120042900f802370000200141086a200441f8026a41086a2900003700002004200341106a22033602900520044188056a2003411010c80120042802880520042802900522036a220120042900c803370000200141086a200441c8036a41086a2900003700002004200341106a22013602900520042802d805210320044188056a2001200210c801200428028805220120042802900522096a2003200210c9081a2004200920026a220236029005024020042802dc05450d002003102c0b200441d8056a2001200210f60420042902dc05420020042802d80522021b210b2002410120021b210c0240200428028c05450d002001102c0b2004200b4220883e02dc042004200c3602d804200441086a200441d8046a10870220042802080d03200428020c221020042802dc0441286e2202200220104b1bad42287e220d422088a70d05200da72202417f4c0d050240024020020d00410821110c010b200210322211450d090b200441003602f004200420113602e8042004200241286e22023602ec04410021120240024002402010450d0041002113034020042802dc0422034108490d03201341016a211320042802d8042209290000210d2004200341786a220a3602dc042004200941086a3602d80441002102200441003a00f805200341776a21030340200a2002460d03200441d8056a20026a200920026a220141086a2d00003a00002004200141096a3602d8042004200241016a22013a00f805200420033602dc042003417f6a21032001210220014120470d000b200441c8036a41186a2202200441d8056a41186a290300370300200441c8036a41106a2203200441d8056a41106a290300370300200441c8036a41086a2209200441d8056a41086a290300370300200420042903d8053703c803200141ff01714120490d0320044188056a41086a2009290300220e370300200441d0026a41186a22012002290300370300200441d0026a41106a22022003290300370300200441d0026a41086a2203200e370300200420042903c803220e370388052004200e3703d002200441b8046a41186a22092001290300370300200441b8046a41106a22012002290300370300200441b8046a41086a220a2003290300370300200420042903d0023703b8040240201220042802ec04470d00200441e8046a201210940520042802f004211220042802e80421110b2011201241286c6a2202200d370300200220042903b804370308200241106a200a290300370300200241186a2001290300370300200241206a20092903003703002004201241016a22123602f00420132010470d000b20042802ec04210220042802e80421110b2002410020111b21092012410020111b21012011410820111b21030c060b200241ff0171450d00200441003a00f8050b20042802ec042202450d03200241286c450d0320042802e804102c0c030b200441d8056a410210a90520004201370300200041286a200441d8056a41206a290300370300200041206a200441d8056a41186a290300370300200041186a200441d8056a41106a290300370300200041106a200441e0056a290300370300200020042903d8053703080b2003280204210102402003410c6a2802002202450d002002410c6c21002001210203400240200241046a280200450d002002280200102c0b2002410c6a2102200041746a22000d000b0b200341086a2802002202450d052002410c6c450d052001102c0c050b200441d8056a410210a90520004201370300200041286a200441d8056a41206a290300370300200041206a200441d8056a41186a290300370300200041186a200441d8056a41106a290300370300200041106a200441d8056a41086a290300370300200020042903d8053703080c040b4108210341002101410021090b200441d8056a41ddd5c000200441c8056a10a002200441c8036a20042802d805220a20042802e00510fc0420042902cc03420020042802c80322021b210d2002410120021b2114024020042802dc05450d00200a102c0b200441d0026a41206a2001360200200441ec026a2009360200200441d0026a41106a200d370300200441d0026a41086a200441c8056a41086a280200360200200420042903c8053703d002200420033602e802200420143602dc02200d422088210d0240200ba7450d00200c102c0b200da72115200441d8056a41086a200841086a290300370300200441d8056a41106a200841106a290300370300200441d8056a41186a200841186a290300370300200441d8056a41206a200841206a290300370300200441d8056a41286a2202200841286a290300370300200441d8056a41306a2203200841306a290300370300200441d8056a41386a2201200841386a290300370300200441c8036a41086a200841cc006a280200360200200420082903003703d805200420082902443703c80302400240200828024022090d00410021090c010b20044188056a41386a220a200129030037030020044188056a41306a2201200329030037030020044188056a41286a2203200229030037030020044188056a41206a2202200441d8056a41206a29030037030020044188056a41186a220c200441d8056a41186a29030037030020044188056a41106a2211200441d8056a41106a29030037030020044188056a41086a2212200441d8056a41086a290300370300200441e8046a41086a2210200441c8036a41086a280200360200200420042903d80537038805200420042903c8033703e804200441f8026a41386a200a290300370300200441f8026a41306a2001290300370300200441f8026a41286a2003290300370300200441f8026a41186a200c290300370300200441f8026a41106a2011290300370300200441f8026a41086a2012290300370300200441b8036a2009360200200420022903003703980320042004290388053703f802200441bc036a220220042903e804370200200241086a2010280200360200410810322202450d04200442083702dc05200420023602d805200441d8056a41004108102f20042802d805220120042802e00522026a2005370000200441d8056a410c6a220341002900ddd540370000200341086a41002900e5d5403700002004200241086a3602e0052004200441f8026a3602f405200441b8046a200441d8056a10bf06024020042802dc05450d002001102c0b200441d8056a200441b8046a10a20220042802d805220320042802e00510ce022102024020042802dc05450d002003102c0b02400240024020020d00200441c8036a200441f8026a41d00010c9081a20044198046a200441c0026a10a602200441d8056a200441c8036a41d00010c9081a200441d8056a41d0006a220241086a20044198046a41086a2802003602002002200429039804370200200441c8036a200441b8046a10a20220042802c803220220042802d003200441d8056a109205024020042802cc03450d002002102c0b0240200428029c062202450d00200241306c450d00200428029806102c0b024020042802ac0641ffffff3f71450d0020042802a806102c0b200441c8036a41186a2211200441b8046a41186a290300370300200441c8036a41106a2212200441b8046a41106a290300370300200441c8036a41086a2210200441b8046a41086a290300370300200420042903b8043703c8034100210220042802e802210a0240024020042802f002220c0e020103000b41002102200c2103034020022003410176220120026a2209200a200941286c6a2903002005561b2102200320016b220341014b0d000c030b0b200441d8056a41186a2011290300370300200441d8056a41106a2012290300370300200441d8056a41086a2010290300370300200420042903c8033703d805410021030c020b4100210920042802bc032202450d02200241306c450d0220042802b803102c0c020b200a200241286c6a290300210b200441d8056a41186a2011290300370300200441d8056a41106a2012290300370300200441d8056a41086a2010290300370300200420042903c8033703d805200c20022002200b2005546a200b2005511b22034f0d002003200c1044000b0240200c20042802ec02470d00200441d0026a41186a200c10940520042802e402211520042802e802210a0b200a200341286c6a220241286a2002200c20036b41286c10ca081a20022005370300200220042903d805370308200241106a200441d8056a41086a2203290300370300200241186a200441d8056a41106a2201290300370300200241206a200441d8056a41186a220a290300370300410121092004200c41016a3602f002200a200441c8036a41186a2903003703002001200441c8036a41106a2903003703002003200441c8036a41086a290300370300200420042903c8033703d8050240201520042802e002470d00200441d0026a410c6a2015410110d60120042802e40221150b20042802dc02221420154105746a220220042903d805370000200241186a200a290300370000200241106a2001290300370000200241086a20032903003700002004201541016a22153602e4020b200841d0006a220220026b220341d0006d210102402003450d00200141d0006c2103200241c0006a210203400240200241046a2802002201450d00200141306c450d002002280200102c0b200241d0006a2102200341b07f6a22030d000b0b2008102c024020090d00200441d0026a10d4074100210c0c020b0240024002402015450d00201541057421082004419c066a2102201421030340200441c8056a200310a202200441d8056a20042802c805220920042802d00510e804200441c8036a41086a220a200441d8056a41086a290300370300200441c8036a41106a220c200441d8056a41106a290300370300200441c8036a41186a2211200441d8056a41186a290300370300200441c8036a41206a2212200441d8056a41206a290300370300200441c8036a41286a2210200441d8056a41286a290300370300200441c8036a41306a2213200441d8056a41306a290300370300200441c8036a41386a2216200441d8056a41386a290300370300200441b8046a41086a2217200241086a290200370300200441b8046a41106a2218200241106a290200370300200441b8046a41186a2219200241186a280200360200200420042903d8053703c803200420022902003703b80402402004280298062201450d00200441f8026a41386a2016290300370300200441f8026a41306a2013290300370300200441f8026a41286a2010290300370300200441f8026a41206a2012290300370300200441f8026a41186a2011290300370300200441f8026a41106a200c290300370300200441f8026a41086a200a29030037030020044198046a41086a201729030037030020044198046a41106a201829030037030020044198046a41186a2019280200360200200420042903c8033703f802200420042903b804370398040b024020042802cc05450d002009102c0b20010d02200341206a2103200841606a22080d000b0b4108210c4200210d0c010b20044188056a41386a2202200441f8026a41386a29030037030020044188056a41306a2209200441f8026a41306a29030037030020044188056a41286a220a200441f8026a41286a29030037030020044188056a41206a220c200441f8026a41206a29030037030020044188056a41186a2211200441f8026a41186a29030037030020044188056a41106a2212200441f8026a41106a29030037030020044188056a41086a2210200441f8026a41086a290300370300200441e8046a41086a221320044198046a41086a290300370300200441e8046a41106a221620044198046a41106a290300370300200441e8046a41186a221720044198046a41186a280200360200200420042903f8023703880520042004290398043703e80441e0001032221a450d04201a200429038805370300201a2001360240201a20042903e804370244201a41386a2002290300370300201a41306a2009290300370300201a41286a200a290300370300201a41206a200c290300370300201a41186a2011290300370300201a41106a2012290300370300201a41086a2010290300370300201a41cc006a2013290300370200201a41d4006a2016290300370200201a41dc006a201728020036020020044281808080103702dc042004201a3602d804024020084120460d00200341206a2111201420154105746a221b41606a211c200441d8056a41c4006a21024101211d0340201121030340200441c8056a200310a202200441d8056a20042802c805220c20042802d00510e804200441c8036a41086a2208200441d8056a41086a2219290300370300200441c8036a41106a2209200441d8056a41106a2215290300370300200441c8036a41186a220a200441d8056a41186a2214290300370300200441c8036a41206a2211200441d8056a41206a221e290300370300200441c8036a41286a2212200441d8056a41286a221f290300370300200441c8036a41306a2210200441d8056a41306a2220290300370300200441c8036a41386a2213200441d8056a41386a2221290300370300200441b8046a41086a2216200241086a290200370300200441b8046a41106a2217200241106a290200370300200441b8046a41186a2218200241186a280200360200200420042903d8053703c803200420022902003703b80402402004280298062201450d00200441f8026a41386a2013290300370300200441f8026a41306a2010290300370300200441f8026a41286a2012290300370300200441f8026a41206a2011290300370300200441f8026a41186a200a290300370300200441f8026a41106a2009290300370300200441f8026a41086a200829030037030020044198046a41086a201629030037030020044198046a41106a201729030037030020044198046a41186a2018280200360200200420042903c8033703f802200420042903b804370398040b024020042802cc05450d00200c102c0b024020010d00201b200341206a2203470d010c030b0b20044188056a41386a220c200441f8026a41386a29030037030020044188056a41306a2211200441f8026a41306a29030037030020044188056a41286a2212200441f8026a41286a29030037030020044188056a41206a2210200441f8026a41206a29030037030020044188056a41186a2213200441f8026a41186a29030037030020044188056a41106a2216200441f8026a41106a29030037030020044188056a41086a2217200441f8026a41086a290300370300200441e8046a41086a221820044198046a41086a290300370300200441e8046a41106a222220044198046a41106a290300370300200441e8046a41186a222320044198046a41186a280200360200200420042903f8023703880520042004290398043703e804201920172903003703002015201629030037030020142013290300370300201e2010290300370300201f2012290300370300202020112903003703002021200c29030037030020042004290388053703d8052008201829030037030020092022290300370300200a2023280200360200200420042903e8043703c8030240201d20042802dc04470d00200441d8046a201d410110940220042802d804211a0b200341206a2111201a201d41e0006c6a220c20042903d805370300200c41106a2015290300370300200c41086a20192903003703002020290300210b2021290300210d201f290300210e201e290300210f20142903002124200c41c0006a2001360200200c41186a2024370300200c41206a200f370300200c41286a200e370300200c41c4006a20042903c803370200200c41386a200d370300200c41306a200b370300200c41cc006a2008290300370200200c41d4006a2009290300370200200c41dc006a200a2802003602002004201d41016a221d3602e004201c2003470d000b0b20042802d804210c20042902dc04210d0b200441d8056a41206a200441d0026a41206a2802002203360200200441d8056a41186a200441d0026a41186a290300220b370300200441d8056a41106a200441d0026a41106a290300370300200441d8056a41086a200441d0026a41086a290300370300200420042903d0023703d805200341286c4104722202417f4c0d00200210322201450d03200441003602a0042004200236029c04200420013602980420044198046a2003108f0102402003450d00200ba72202200341286c6a210a20042802a004210303402002290300210b20044198046a20034108102f20042802980420042802a00422036a200b3700002004200341086a22083602a004412010322203450d05200442203702cc03200420033602c803200441c8036a41004120102f20042802c803220120042802d00322096a2203200241086a290000370000200341086a200241106a290000370000200341106a200241186a290000370000200341186a200241206a2900003700002004200941206a22033602d00320044198046a20082003102f20042802980420042802a00422086a2001200310c9081a2004200820036a22033602a004024020042802cc03450d002001102c0b200241286a2202200a470d000b0b200441f8026a41eddcc700410810c501200441c8036a41d4d0c000411210c50120044188056a41ddd5c00010a102200428029005220241206a2203417f4c0d000240024020030d00410121010c010b200310322201450d040b200441003602c004200420033602bc04200420013602b804200441b8046a4100411010c80120042802b80420042802c00422036a220120042900f802370000200141086a200441f8026a41086a2900003700002004200341106a22033602c004200441b8046a2003411010c80120042802b80420042802c00422036a220120042900c803370000200141086a200441c8036a41086a2900003700002004200341106a22013602c0042004280288052103200441b8046a2001200210c80120042802b804220120042802c00422086a2003200210c9081a2004200820026a22023602c0040240200428028c05450d002003102c0b2001200220044198046a108a03024020042802bc04450d002001102c0b0240200428029c04450d00200428029804102c0b200441c8036a41ddd5c000200441d8056a10a00220042802c803220220042802d003200441e4056a108d05024020042802cc03450d002002102c0b200441d8056a10d4070c010b103b000b024020042802c40241ffffff3f71450d0020042802c002102c0b0240200c0d000240200441ac026a2802002202450d00200241306c450d00200441a8026a280200102c0b200441d8056a410310a90520004201370300200041286a200441d8056a41206a290300370300200041206a200441d8056a41186a290300370300200041186a200441d8056a41106a290300370300200041106a200441e0056a290300370300200020042903d8053703080c010b20064101200641014b1b2202418094ebdc036e2002418094ebdc03704100476a22034101200341014b1b220320024b0d022004410036028003200442043703f802200441f8026a4100200d422088a722081095022002200841036c220120022001491b20036ead428094ebdc037e200220036ead8042ffffffff0f83220b200b7e220b42808090bbbad6adf00d200b42808090bbbad6adf00d541b428094ebdc0380210b20042802800321090240024020080d0020042802f802210a0c010b200ba7210120042802f802220a20094102746a210220082103034020022001360200200241046a21022003417f6a22030d000b200920086a21090b2004200936028003200c2008200a2009200710a3022102410810322203450d01200442083702cc03200420033602c803200441c8036a41004108102f20042802c80320042802d00322036a2005370000200441c8036a41146a41002900e5d5403702002004200341086a3602d003200441002900ddd5403702d403200441e4056a20042903d003370200200441d8056a41146a200441d8036a290300370200200441f4056a200441e0036a280200360200200441f8056a20023a0000200441043602d805200420042903c8033702dc05200441d8056a10c802024020042802fc0241ffffffff0371450d00200a102c0b02402008450d00200841e0006c2103200c41d4006a210203400240200241706a2802002201450d00200141306c450d002002416c6a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241e0006a2102200341a07f6a22030d000b0b0240200da72202450d00200241e0006c450d00200c102c0b0240200441ac026a2802002202450d00200241306c450d00200441a8026a280200102c0b2000420037030820004200370300200041186a41013a0000200441f0076a24000f0b200441f0076a24000f0b1039000b41f0bcc300411941f8acc800103c000bcc0101037f200028022422012001280200417f6a220236020020002d0001210302400240024020002d00000d004100210020020d022001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22022002280200417f6a22023602002002450d010c020b4101210020020d012001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22022002280200417f6a220236020020020d010b2001102c0b200341ff01714102472000720bc90803067f017e027f230041e0016b22012400200141c0006a41186a22024200370300200141c0006a41106a22034200370300200141c0006a41086a2204420037030020014200370340200141306a41dcdcc700410a10c5012004200141306a41086a220529000037030020012001290030370340200141306a41cddec400410610c5012002200529000037030020032001290030370300200141e8006a200141c0006a412010c90120012d00682105200220014181016a2900003703002003200141f9006a2900003703002004200141f1006a290000370300200120012900693703400240024020054101470d0020002001290340370000200041186a2002290300370000200041106a2003290300370000200041086a20042903003700000c010b200110890702400240200128020841246c2203450d002001280200220220036a2203415c6a21060340024020022d00004101460d002003200241246a2202470d010c020b200241016a2800002104200241086a28020021052001200241106a280200360244200120053602400240200441c28289aa04460d0020062002462104200241246a21022004450d010c020b0b200141e8006a200141c0006a102920012903684203510d00200141e8006a41106a22022802002103200141e8006a41186a2204420037030020024200370300200141e8006a41086a420037030020014200370368200141e8006a41ffdcc700410710c501200141c0006a418893c700410a10c5012004200141c0006a41086a29000037030020022001290040370300200141c0006a200141e8006a10e1014101210420012802402202410120021b2105024020032001290244420020021b2207422088a74f0d00200141106a41186a200520034105746a220241186a290000370300200141106a41106a200241106a290000370300200141106a41086a200241086a29000037030020012002290000370310410021040b02402007a72202450d00200241ffffff3f71450d002005102c0b2004450d010b20004200370000200041186a4200370000200041106a4200370000200041086a42003700002001102b0c010b200141e8006a41186a2202200141106a41186a290300370300200141e8006a41106a2203200141106a41106a290300370300200141e8006a41086a2204200141106a41086a290300370300200120012903103703682001200141e8006a360264200141c0006a41186a22054200370300200141c0006a41106a22064200370300200141c0006a41086a2208420037030020014200370340200141306a41dcdcc700410a10c5012008200141306a41086a220929000037030020012001290030370340200141306a41cddec400410610c5012005200929000037030020062001290030370300200141c0006a4120200141e4006a10cc01200041186a2002290300370000200041106a2003290300370000200041086a2004290300370000200020012903683700002001102b0b200141e0016a24000b11002001ad4220862000ad8410214101460b900204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b420021030b2004450d002001102c0b2000200537030820002003370300200241d0006a24000b8e0301057f230041d0006b22022400200241de96c800410710c501200241106a41c097c800410810c5012002200136022c200241306a2002412c6a410410c904200241cc006a2002412c6a41046a3602002002200241c0006a36024420022002412c6a3602482002200241306a360240200241206a200241c0006a107e024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b200110322204450d020b2000200136020420002004360200200041086a2201410036020020004100411010c8012000280200200128020022046a220520022900003700002001200441106a2204360200200541086a200241086a29000037000020002004411010c8012000280200200128020022046a220520022900103700002001200441106a2206360200200541086a200241106a41086a2900003700002002280220210420002006200310c8012000280200200128020022006a2004200310c9081a2001200020036a36020002402002280224450d002004102c0b200241d0006a24000f0b103b000b1039000b8d0b02027f067e230041d0016b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041023a00300c010b200341186a280200210220032802142104200341003a008801024002402002450d00200320012d00003a0068200341013a008801024020024101460d00200320012d00013a0069200341023a00880120024102460d00200320012d00023a006a200341033a00880120024103460d00200320012d00033a006b200341043a00880120024104460d00200320012d00043a006c200341053a00880120024105460d00200320012d00053a006d200341063a00880120024106460d00200320012d00063a006e200341073a00880120024107460d00200320012d00073a006f200341083a00880120024108460d00200320012d00083a0070200341093a00880120024109460d00200320012d00093a00712003410a3a0088012002410a460d00200320012d000a3a00722003410b3a0088012002410b460d00200320012d000b3a00732003410c3a0088012002410c460d00200320012d000c3a00742003410d3a0088012002410d460d00200320012d000d3a00752003410e3a0088012002410e460d00200320012d000e3a00762003410f3a0088012002410f460d00200320012d000f3a0077200341103a00880120024110460d00200320012d00103a0078200341113a00880120024111460d00200320012d00113a0079200341123a00880120024112460d00200320012d00123a007a200341133a00880120024113460d00200320012d00133a007b200341143a00880120024114460d00200320012d00143a007c200341153a00880120024115460d00200320012d00153a007d200341163a00880120024116460d00200320012d00163a007e200341173a00880120024117460d00200320012d00173a007f200341183a00880120024118460d00200320012d00183a008001200341193a00880120024119460d00200320012d00193a0081012003411a3a0088012002411a460d00200320012d001a3a0082012003411b3a0088012002411b460d00200320012d001b3a0083012003411c3a0088012002411c460d00200320012d001c3a0084012003411d3a0088012002411d460d00200320012d001d3a0085012003411e3a0088012002411e460d00200320012d001e3a0086012003411f3a0088012002411f460d00200341c8006a41106a200341e8006a41106a290300370300200341c8006a41086a200341e8006a41086a290300370300200320012d001f3a008701200341c8006a41186a200341e8006a41186a290300370300200341203a0088012003200329036822053703900120032005370348200241606a22024110490d0120024110460d01200141286a290000210520012900202106410021020240024020012d00300e020100030b410121020b200341206a41186a200341c8006a41186a2903002207370300200341206a41106a200341c8006a41106a2903002208370300200341206a41086a200341c8006a41086a290300220937030020032003290348220a370320200320032800413602682003200341c4006a28000036006b20002005370308200020063703002000200a370310200041186a2009370300200041206a2008370300200041286a2007370300200041346a200328006b360000200020032802683600310c020b200341003a0088010b200341003602980120034201370390012003410f36024c2003200341086a360248200320034190016a360220200341fc006a41013602002003420137026c200341b4bcc3003602682003200341c8006a360278200341206a41dcb7c000200341e8006a103e1a2003350298014220862003350290018410000240200328029401450d00200328029001102c0b410221020b200020023a00302004450d002001102c0b200341d0016a24000b821507067f027e037f097e027f017e017f23004180046b22042400200441306a41c1dcc700410610c501200441e8016a41acc8c700410710c50120044190016a200110d502024002400240024002400240200428029801220541206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b41002108200441003602282004200636022420042007360220200441206a4100411010c8012004280220200428022822066a22072004290030370000200741086a200441306a41086a2900003700002004200641106a2206360228200441206a2006411010c8012004280220200428022822066a220720042900e801370000200741086a200441e8016a41086a2900003700002004200641106a22063602282004280290012107200441206a2006200510c80120042802202206200428022822096a2007200510c9081a2004200920056a22053602280240200428029401450d002007102c0b200441306a2006200510d6022004290330210a4200210b20044200370330200441fc006a280200210c200441f8006a280200210d02400240200a4201510d004101210e4200210f4200211042002111420021124200211342002114420021150c010b200441e8006a2903002110200441e0006a290300210f200441d8006a290300210b200441d0006a2903002113200441c8006a29030021122004290340211520042903382114410121084100210e200429037021110b201420027d2216201456201520037d2014200254ad7d221720155620172015511b0d02024002400240201220027c22152012542207201320037c2007ad7c221420135420142013511b0d002002200384500d0220044190016a41c1dcc700410610c501200441e8016a41acc8c700410710c501200441d8016a200110d50220042802e001220741206a2209417f4c0d030240024020090d00410121180c010b200910322218450d050b200441003602d001200420093602cc01200420183602c801200441c8016a4100411010c80120042802c80120042802d00122096a2218200429009001370000201841086a20044190016a41086a2900003700002004200941106a22093602d001200441c8016a2009411010c80120042802c80120042802d00122096a221820042900e801370000201841086a200441e8016a41086a2900003700002004200941106a22183602d00120042802d8012109200441c8016a2018200710c80120042802c801221820042802d00122196a2009200710c9081a2004201920076a22073602d001024020042802dc01450d002009102c0b200441e8016a2018200710d60220044198026a290300420020042903e80142015122071b211320044190026a290300420020071b2112024020042802cc01450d002018102c0b02402012201656201320175620132017511b0d00200441043a0080010c080b20044180016a410210d70220152112201421130c010b20044180016a410310d7020b20162114201721150c040b200441043a0080010c040b103b000b1039000b20044180016a410410d7020b024020042d0080014104470d00201421162015211720132114201221150c010b20042902840122174280807c8321132017420888a7210820042802800121052017a72109410121070c010b200441b8016a2209200f370300200441a8016a2014370300200441c0016a221820103703002004200b3703b001200420153703a0012004201637039001200420173703980102400240427f201620157c221320132016542207201720147c2007ad7c221320175420132017511b22071b22124280c8afa025544100427f201320071b2213501b0d00200441a0016a29030021142018290300211520092903002113200441b0016a2903002112200429039801210b200429039001210f4201211020042903a801211a0c010b02400240201620158420172014848450450d00420021100c010b42002110200441e8016a41186a22094200370300200441e8016a41106a22184200370300200441e8016a41086a22074200370300200442003703e801200441d8016a41d4dcc700410810c5012007200441d8016a41086a2219290000370300200420042900d8013703e801200441d8016a41bba8c700410d10c50120092019290000370300201820042900d801370300200441086a200441e8016a412010d301200441086a41106a2903002114200429031021152004280208211b200942003703002018420037030020074200370300200442003703e801200441d8016a41d4dcc700410810c50120072019290000370300200420042900d8013703e801200441d8016a41bba8c700410d10c50120092019290000370300201820042900d8013703002004420020144200201b1b221420137d20154200201b1b2215201254ad7d220b201520127d220f201556200b201456200b2014511b22091b3703e00120044200200f20091b3703d801200441e8016a4120200441d8016a411010a702200441a0026a201337030020044198026a2012370300200741013a0000200441f9016a200141086a29000037000020044181026a200141106a29000037000020044189026a200141186a290000370000200441023602e801200420012900003700f101200441e8016a10c8020b0b200a4201512109200441d8006a2012370300200441e0006a2013370300200441c0006a200b370300200441e8006a2015370300200441c8006a20143703002004201a370350200420113703702004200f370338410021072004200c410020081b36027c2004200d410020081b360278200420104201512208ad3703300240024020080d002006200510b401420021132016211420172115410021080c010b20062005200441386a10d802420021134101210820162114201721150b0b02402004280224450d002006102c0b0240024002400240024020070d000240200841ff01712205450d00200941ff0171450d020b20050d02200941ff0171450d02200441e8016a41086a41043a0000200441f9016a200141086a29000037000020044181026a200141106a29000037000020044189026a200141186a290000370000200441003602e801200420012900003700f101200441e8016a10c8020c020b200541ff01714104460d02200020053a0000200041036a20054118763a0000200020054108763b0001200041046a2008ad42ff01834208862009ad42ff0183842013843700000c030b200441e8016a41086a41033a0000200441f9016a200141086a29000037000020044181026a200141106a29000037000020044189026a200141186a290000370000200441003602e801200420012900003700f101200441e8016a10c8020b200e450d00200441a0026a201537030020044198026a2014370300200441e8016a41086a41003a0000200441f9016a200141086a29000037000020044181026a200141106a29000037000020044189026a200141186a290000370000200441023602e801200420012900003700f101200441e8016a10c8020b200441a0026a200337030020044198026a2002370300200441e8016a41086a41053a0000200441f9016a200141086a29000037000020044181026a200141106a29000037000020044189026a200141186a290000370000200441023602e801200420012900003700f101200441e8016a10c802200041043a00000b20044180046a24000bf10101047f230041c0006b2202240041fcfdc70021034109210441042105024002400240024002400240200141ff01710e06000102030405000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41c8fcc7001046000b41f1fdc7002103410b2104410021050c030b41e9fdc700210341082104410121050c020b41e4fdc700210341052104410221050c010b41d9fdc7002103410b2104410321050b20004183063b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b980202037f027e230041106b220324000240411110322204450d002003421137020420032004360200200341004120102f2003280200200328020822056a22042002290010370000200441086a200241186a290000370000200441106a200241206a290000370000200441186a200241286a2900003700002003200541206a2204360208200241086a290300210620022903002107200320044110102f2003280200200328020822046a22052006370008200520073700002003200441106a220436020820022d00302105200320044101102f20032802002202200328020822046a20053a00002003200441016a2204360208200020012002200410a70202402003280204450d002002102c0b200341106a24000f0b1039000bde0101047f230041306b220224000240412010322203450d002002422037020420022003360200200241004120102f20022802002203200228020822046a22052001290000370000200541086a200141086a290000370000200541106a200141106a290000370000200541186a200141186a2900003700002002200441206a2201360208200241106a2003200110c9042002412c6a200320016a360200200220033602282002200241106a41106a3602242002200241106a3602202000200241206a107e02402002280204450d002003102c0b200241306a24000f0b1039000bd20303027f017e017f230041d0006b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044104490d002004417c714104460d00200441786a4110490d00200441686a4110490d00200441586a4110490d00200441486a410f4b0d010b20034100360220200342013703182003410f36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b4bcc3003602382003200341286a360248200341346a41dcb7c000200341386a103e1a200335022042208620033502188410000240200328021c450d002003280218102c0b420021050c010b2001280000210420012800042106200141106a290000210520002001290008370308200041386a2001290038370300200041286a2001290028370300200041186a2001290018370300200041106a2005370300200041cc006a2006360200200041c8006a2004360200200041c0006a200141c0006a290000370300200041306a200141306a290000370300200041206a200141206a290000370300420121050b200020053703002002450d002001102c0b200341d0006a24000bb00201047f230041c0006b2202240041c4aac7002103410b210441072105024002400240024002400240024002400240200141ff01710e09000102030405060708000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41c4a9c7001046000b41b6aac7002103410e2104410021050c060b41a1aac700210341152104410121050c050b4199aac700210341082104410221050c040b4186aac700210341132104410321050c030b41f4a9c700210341122104410421050c020b41eba9c700210341092104410521050c010b41d4a9c700210341172104410621050b20004183083b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000ba30101037f230041106b22032400200341003602082003420137030020022802402104200341004104102f2003280200200328020822056a20043600002003200541046a220436020820022802442105200320044104102f2003280200200328020822046a20053600002003200441046a360208200320021087052000200120032802002202200328020810a70202402003280204450d002002102c0b200341106a24000bdb0f07067f027e017f077e017f037e047f230041e0036b2203240002402001200284500d00200341306a41c1dcc700410610c501200341c8016a41acc8c700410710c50120034180016a200010d5020240024002400240200328028801220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b41002107200341003602282003200536022420032006360220200341206a4100411010c8012003280220200328022822056a22062003290030370000200641086a200341306a41086a2900003700002003200541106a2205360228200341206a2005411010c8012003280220200328022822056a220620032900c801370000200641086a200341c8016a41086a2900003700002003200541106a22053602282003280280012106200341206a2005200410c80120032802202205200328022822086a2006200410c9081a2003200820046a22043602280240200328028401450d002006102c0b200341306a2005200410d602200329033021094200210a20034200370330200341fc006a2802002106200341f8006a28020021080240024020094201510d004101210b4200210c4200210d4200210e4200210f4200211042002111420021120c010b200341e8006a290300210d200341306a41306a290300210c200341306a41286a290300210a200341d0006a2903002110200341306a41186a290300210f2003290340211220032903382111410121074100210b2003290370210e0b20034180016a41286a200c37030020034180016a41306a200d37030020034180016a41186a201020022010200f200156201020025620102002511b22131b220c7d200f2001200f20131b220154ad7d220d3703002003200a3703a0012003200f20017d220a370390012003427f2012200c7c201120017c220f2011542213ad7c22022013200220125420022012511b22131b2202370388012003427f200f20131b220f3703800102400240427f200f200a7c22102010200f5422132002200d7c2013ad7c221020025420102002511b22131b22124280c8afa025544100427f201020131b2211501b0d0020034190016a2903002112200341b0016a2903002111200341a8016a290300210a200341a0016a290300210d200329038801211420032903800121154201211020032903980121160c010b02400240200f200a842002200d848450450d00420021100c010b42002110200341c8016a41186a22174200370300200341c8016a41106a22184200370300200341c8016a41086a22134200370300200342003703c801200341b8016a41d4dcc700410810c5012013200341b8016a41086a2219290000370300200320032900b8013703c801200341b8016a41bba8c700410d10c50120172019290000370300201820032900b801370300200341086a200341c8016a412010d301200341086a41106a290300210a2003290310210d2003280208211a201742003703002018420037030020134200370300200342003703c801200341b8016a41d4dcc700410810c50120132019290000370300200320032900b8013703c801200341b8016a41bba8c700410d10c50120172019290000370300201820032900b80137030020034200200a4200201a1b220a20117d200d4200201a1b220d201254ad7d2214200d20127d2215200d562014200a562014200a511b22171b3703c00120034200201520171b3703b801200341c8016a4120200341b8016a411010a70220034180026a2011370300200341f8016a2012370300201341013a0000200341d9016a200041086a290000370000200341e1016a200041106a290000370000200341e9016a200041186a290000370000200341023602c801200320002900003700d101200341c8016a10c8020b0b200341d8006a200d370300200341e0006a200a370300200341c0006a2014370300200341e8006a2011370300200341c8006a2012370300200320163703502003200e3703702003201537033820032006410020071b36027c20032008410020071b360278200320104201512207ad3703300240024020070d002005200410b4010c010b20052004200341386a10d8020b02402003280224450d002005102c0b024020094201510d0020104201510d030b20094201520d0320104201510d03200341c8016a41086a41043a0000200341d9016a200041086a290000370000200341e1016a200041106a290000370000200341e9016a200041186a290000370000200341003602c801200320002900003700d101200341c8016a10c8020c030b103b000b1039000b200341c8016a41086a41033a0000200341d9016a200041086a290000370000200341e1016a200041106a290000370000200341e9016a200041186a290000370000200341003602c801200320002900003700d101200341c8016a10c8020b0240200b450d0020034180026a2002370300200341f8016a200f370300200341c8016a41086a41003a0000200341d9016a200041086a290000370000200341e1016a200041106a290000370000200341e9016a200041186a290000370000200341023602c801200320002900003700d101200341c8016a10c8020b20034180026a200c370300200341f8016a2001370300200341c8016a41086a41063a0000200341d9016a200041086a290000370000200341e1016a200041106a290000370000200341e9016a200041186a290000370000200341023602c801200320002900003700d101200341c8016a10c8020b200341e0036a24000bcc0101037f200028022422012001280200417f6a220236020020002d0001210302400240024020002d00000d004100210020020d022001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22022002280200417f6a22023602002002450d010c020b4101210020020d012001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22022002280200417f6a220236020020020d010b2001102c0b200341ff01714100472000720bdc2b0a067f027e057f057e027f027e027f087e047f027e230041d0056b220624000240024002400240024002400240024002400240024002402003200484500d0020012002460d0020012002412010cc08450d00200641d0016a41c1dcc700410610c501200641a8036a41acc8c700410710c501200641b8036a200210d50220062802c003220741206a2208417f4c0d010240024020080d00410121090c010b200810322209450d030b200641003602382006200836023420062009360230200641306a4100411010c8012006280230200628023822086a220920062900d001370000200941086a200641d0016a41086a2900003700002006200841106a2208360238200641306a2008411010c8012006280230200628023822086a220920062900a803370000200941086a200641a8036a41086a2900003700002006200841106a220936023820062802b8032108200641306a2009200710c801200628023022092006280238220a6a2008200710c9081a2006200a20076a220b360238024020062802bc03450d002008102c0b200641c0006a2009200b10d6022006290340210c4200210d200642003703402006418c016a280200210e20064188016a280200210f02400240200c42015122100d00200641c8016a4200370300200641c0016a4200370300200641b8016a4200370300200641b0016a420037030020064190016a41186a4200370300200641a0016a420037030020064198016a42003703002006420037039001410021114101211242002113420021140c010b200641c0006a41186a290300210c2006290350211420062903482113200641c0006a41286a2903002115200641c0006a41306a2903002116200629038001210d2006290360211720064190016a41306a200641f8006a29030037030020064190016a41286a2016370300200641b0016a2015370300200641a0016a200c370300200620173703a801200620143703980120062013370390012006200d3703c80141012111410021120b200641d0026a41c1dcc700410610c501200641b8036a41acc8c700410710c501200641f0016a200110d50220062802f801220741206a2208417f4c0d010240024020080d004101210a0c010b20081032220a450d030b41002118200641003602e801200620083602e4012006200a3602e001200641e0016a4100411010c80120062802e00120062802e80122086a220a20062900d002370000200a41086a200641d0026a41086a2900003700002006200841106a22083602e801200641e0016a2008411010c80120062802e00120062802e80122086a220a20062900b803370000200a41086a200641b8036a41086a2900003700002006200841106a22083602e80120062802f001210a200641e0016a2008200710c80120062802e001220820062802e80122196a200a200710c9081a2006201920076a22073602e801024020062802f401450d00200a102c0b200641f0016a2008200710d60220062903f001211a4200211b200642003703f001200641bc026a2802002119200641b8026a280200211c02400240201a4201510d004101211d4201211e4200211f4200212042002121420021224200212342002116420021170c010b20064188026a2903002123200629038002211720062903f8012116200641a8026a2903002121200641a0026a290300212020064198026a290300211f200629039002211b410121184200211e4100211d20062903b00221220b201620037d2224201656201720047d2016200354ad7d220c201756200c2017511b0d03201320037c2225201354220a201420047c200aad7c221520145420152014511b0d0420062025370390012006201537039801024002400240427f202520062903a0017c22162016202554220a2015200641a8016a2903007c200aad7c221620155420162015511b220a1b4280c8afa025544100427f2016200a1b501b0d00200641d0026a41c1dcc700410610c501200641b8036a41acc8c700410710c501200641a8036a200110d50220062802b003220a41206a2226417f4c0d040240024020260d00410121270c010b202610322227450d060b200641003602d801200620263602d401200620273602d001200641d0016a4100411010c80120062802d00120062802d80122266a222720062900d002370000202741086a200641d0026a41086a2900003700002006202641106a22263602d801200641d0016a2026411010c80120062802d00120062802d80122266a222720062900b803370000202741086a200641b8036a41086a2900003700002006202641106a22273602d80120062802a8032126200641d0016a2027200a10c80120062802d001222720062802d80122286a2026200a10c9081a20062028200a6a220a3602d801024020062802ac03450d002026102c0b200641b8036a2027200a10d602200641e8036a290300420020062903b803420151220a1b2116200641e0036a2903004200200a1b2117024020062802d401450d002027102c0b20172024562016200c562016200c511b0d012006200629009903370388032006200641a0036a28000036008f030c020b200641c0026a410510d7020c090b20064198036a410210d702200620062900990337038803200620064198036a41086a28000036008f0320062d009803220a4104470d060b024002402005450d00200641d0026a41c1dcc700410610c501200641b8036a41acc8c700410710c501200641a8036a200110d50220062802b003220541206a220a417f4c0d0302400240200a0d00410121260c010b200a10322226450d050b200641003602d8012006200a3602d401200620263602d001200641d0016a4100411010c80120062802d00120062802d801220a6a222620062900d002370000202641086a200641d0026a41086a2900003700002006200a41106a220a3602d801200641d0016a200a411010c80120062802d00120062802d801220a6a222620062900b803370000202641086a200641b8036a41086a2900003700002006200a41106a22263602d80120062802a803210a200641d0016a2026200510c80120062802d001222620062802d80122276a200a200510c9081a2006202720056a22053602d801024020062802ac03450d00200a102c0b200641b8036a2026200510d60220064184046a280200210520062903b8032116024020062802d401450d002026102c0b202442ffc7afa02556200c420052200c501b0d0120164201520d012005450d010c080b20244280c8afa025544100200c501b0d070b200641043a00c0020c080b200041043a00000c0a0b103b000b1039000b200641c0026a410410d7022013212520142115201621242017210c0c030b200641c0026a410310d70220132125201421150c020b200641c0026a41086a200628008f033600002006200a3a00c00220062006290388033700c1020c030b200641c0026a410610d7020b20062d00c0024104470d010b200641f0026a201f370300200641f8026a202037030020064180036a20213703002006201b3703e802200620233703e002200620243703d0022006200c3703d80202400240427f202420237c221620162024542205200c201b7c2005ad7c2216200c542016200c511b22051b22174280c8afa025544100427f201620051b2216501b0d00200641e0026a290300211620062903d802211720062903d0022114420121130c010b024002402024202384200c201b848450450d00420021130c010b42002113200641b8036a41186a220a4200370300200641b8036a41106a22264200370300200641b8036a41086a22054200370300200642003703b803200641d0016a41d4dcc700410810c5012005200641d0016a41086a2228290000370300200620062900d0013703b803200641a8036a41bba8c700410d10c501200a200641a8036a41086a2229290000370300202620062900a803370300200641186a200641b8036a412010d301200641186a41106a29030021142006290320212320062802182127200a42003703002026420037030020054200370300200642003703b803200641d0016a41d4dcc700410810c50120052028290000370300200620062900d0013703b803200641a8036a41bba8c700410d10c501200a2029290000370300202620062900a803370300200642002014420020271b221420167d2023420020271b2223201754ad7d222a202320177d222b202356202a201456202a2014511b220a1b3703b00320064200202b200a1b3703a803200641b8036a4120200641a8036a411010a702200641f0036a2016370300200641e8036a2017370300200541013a0000200641c9036a200141086a290000370000200641d1036a200141106a290000370000200641d9036a200141186a290000370000200641023602b803200620012900003700c103200641b8036a10c8020b0b201a420151210520064198026a201f370300200641a0026a202037030020064180026a2017370300200641a8026a202137030020064188026a20163703002006201b37039002200620223703b002200620143703f8014100210a20062019410020181b3602bc022006201c410020181b3602b802200620134201512218ad3703f0010240024020180d002008200710b40142002116410021180c010b20082007200641f8016a10d80242002116410121180b0c010b20062902c402220c4280807c832116200c420888a7211820062802c0022107200ca721054101210a0b024020062802e401450d002008102c0b0240024002400240200a0d000240201841ff01712207450d00200541ff0171450d020b20070d02200541ff0171450d02200641b8036a41086a41043a0000200641c9036a200141086a290000370000200641d1036a200141106a290000370000200641d9036a200141186a290000370000200641003602b803200620012900003700c103200641b8036a10c8020c020b2018ad42ff01834208862005ad42ff018384201684211e200741807e7121080c020b200641b8036a41086a41033a0000200641c9036a200141086a290000370000200641d1036a200141106a290000370000200641d9036a200141186a290000370000200641003602b803200620012900003700c103200641b8036a10c8020b4104210741002108201d450d00200641f0036a200c370300200641e8036a202437030041002108200641b8036a41086a41003a0000200641c9036a200141086a290000370000200641d1036a200141106a290000370000200641d9036a200141186a290000370000200641023602b803200620012900003700c103200641b8036a10c8024201211e0b200641d0026a41206a220520064190016a41306a290300370300200641d0026a41186a220a20064190016a41286a290300370300200641e0026a221820064190016a41206a290300370300200641d8026a221920064190016a41186a290300370300200620062903a0013703d00202400240200741ff017122074104460d00201e4280807c83210c20082007722107201e420888a72105201ea72110410121080c010b200641f0016a41186a20192903002216370300200641f0016a41206a2018290300370300200641f0016a41286a200a290300370300200641f0016a41306a2005290300370300200620062903d002221737038002200620253703f001200620153703f80102400240427f202520177c220c200c2025542207201520167c2007ad7c220c201554200c2015511b22071b22244280c8afa025544100427f200c20071b220c501b0d0020064180026a290300210c200641a0026a290300211620064198026a290300211720064190026a290300212420062903f801211420062903f001211b42012113200629038802211e0c010b02400240202520178420152016848450450d00420021130c010b42002113200641b8036a41186a22084200370300200641b8036a41106a22054200370300200641b8036a41086a22074200370300200642003703b803200641a8036a41d4dcc700410810c5012007200641a8036a41086a220a290000370300200620062900a8033703b803200641a8036a41bba8c700410d10c5012008200a290000370300200520062900a8033703002006200641b8036a412010d301200641106a29030021162006290308211720062802002118200842003703002005420037030020074200370300200642003703b803200641a8036a41d4dcc700410810c5012007200a290000370300200620062900a8033703b803200641a8036a41bba8c700410d10c5012008200a290000370300200520062900a803370300200642002016420020181b2216200c7d2017420020181b2217202454ad7d2214201720247d221b201756201420165620142016511b22081b3703b00320064200201b20081b3703a803200641b8036a4120200641a8036a411010a702200641f0036a200c370300200641e8036a2024370300200741013a0000200641c9036a200241086a290000370000200641d1036a200241106a290000370000200641d9036a200241186a290000370000200641023602b803200620022900003700c103200641b8036a10c8020b0b200641e8006a2024370300200641f0006a2017370300200641d0006a2014370300200641f8006a2016370300200641d8006a200c3703002006201e3703602006200d370380012006201b370348410021082006200e410020111b36028c012006200f410020111b36028801200620134201512207ad3703400240024020070d002009200b10b4014200210c410021050c010b2009200b200641c8006a10d8024200210c410121050b0b02402006280234450d002009102c0b024002400240024020080d000240200541ff01712207450d00201041ff0171450d020b20070d02201041ff0171450d02200641b8036a41086a41043a0000200641c9036a200241086a290000370000200641d1036a200241106a290000370000200641d9036a200241186a290000370000200641003602b803200620022900003700c103200641b8036a10c8020c020b200741ff01714104460d02200020073a0000200041036a20074118763a0000200020074108763b0001200041046a2005ad42ff01834208862010ad42ff018384200c843700000c030b200641b8036a41086a41033a0000200641c9036a200241086a290000370000200641d1036a200241106a290000370000200641d9036a200241186a290000370000200641003602b803200620022900003700c103200641b8036a10c8020b2012450d00200641f0036a2015370300200641e8036a2025370300200641b8036a41086a41003a0000200641c9036a200241086a290000370000200641d1036a200241106a290000370000200641d9036a200241186a290000370000200641023602b803200620022900003700c103200641b8036a10c8020b20064190046a200437030020064188046a2003370300200641b8036a41086a41023a0000200641c9036a200141086a290000370000200641d1036a200141106a290000370000200641d9036a200141186a290000370000200641e9036a200241086a290000370000200641f1036a200241106a290000370000200641f9036a200241186a290000370000200641023602b803200620012900003700c103200620022900003700e103200641b8036a10c802200041043a00000b200641d0056a24000b830201027f230041d0006b220224002002200136020420022000360200200241086a2000200110b30102400240200228020822010d00410221000c010b200228020c210302400240200241106a280200450d0041002100024020012d00000e020200010b410121000c010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b410221000b2003450d002001102c0b200241d0006a240020000b9b0201047f230041c0006b2202240041a8e0c4002103410621044108210502400240024002400240024002400240200141ff01710e080001020304050607000b2002413c6a41013602002002420137022c200241eccdc80036022820024104360224200241c0fcc7003602202002200241206a360238200241286a41dcdec4001046000b4196e0c400210341122105410021040c050b4186e0c400210341102105410121040c040b41f9dfc4002103410d2105410221040c030b41eddfc4002103410c2105410321040c020b41e1dfc4002103410c2105410421040c010b41cddfc400210341142105410521040b200041830c3b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000ba21707077f017e0c7f017e027f017e077f23004190046b22012400200141286a22024200370300200141206a22034200370300200141106a41086a420037030020014200370310200141106a41dcdcc700410a10c501200141a8036a41d3dec400410610c5012002200141a8036a41086a290000370300200320012900a803370300200141203602342001200141106a360230200141386a200141106a412010b30102400240200128023822040d00410021050c010b200128023c21062001200141386a41086a28020036024c20012004360248200141086a200141c8006a1087020240024020012802080d00024002400240200128020c2207200128024c41c4006e2202200220074b1bad42c4007e2208422088a70d002008a72202417f4c0d0002400240024020020d00410421050c010b200210322205450d010b20014100360258200120053602502001200241c4006e360254024002402007450d00200141a8036a41077221094100210a4100210b03400240024002400240200128024c220c450d002001280248220d2d000021022001200c417f6a220e36024c2001200d41016a3602480240024020020e020001020b200e4104490d012001419c026a41026a200141d0036a41026a2d00003a000020014180026a41086a200141f0036a41086a29020037030020014180026a41106a200141f0036a41106a29020037030020014180026a41186a200141f0036a41186a2d00003a0000200141e0016a41086a200141a8036a41086a290100370300200141e0016a41106a200141a8036a41106a290100370300200141e0016a41186a200141a8036a41186a290100370300200120012f00d0033b019c02200120012902f00337038002200120012901a8033703e001200d280001210f2001200c417b6a36024c2001200d41056a36024841002110410021030c040b41002103200141003a00c803200c417e6a211002400340200e20032202460d01200141a8036a20026a200d20026a220341016a2d00003a00002001200341026a3602482001200241016a22033a00c8032001201036024c2010417f6a211020034120460d030c000b0b200241ff0171450d02200141003a00c8030c020b200141dc016a41026a2001419c026a41026a2d00003a0000200141c0016a41086a20014180026a41086a290300370300200141c0016a41106a20014180026a41106a290300370300200141c0016a41186a20014180026a41186a2d00003a0000200141a0016a41086a200141e0016a41086a290300370300200141a0016a41106a200141e0016a41106a290300370300200141a0016a41186a200141e0016a41186a290300370300200120012f019c023b01dc0120012001290380023703c001200120012903e0013703a0010c050b200141c0026a41026a221120012d00aa0322123a0000200141e8026a41026a20123a0000200141f0036a41086a2213200941086a2900002208370300200141f0036a41106a2214200941106a2900002215370300200141f0036a41186a2216200941186a2d000022123a0000200120012f01a80322173b01c002200120173b01e8022001200929000022183703f00320012800ab032119200141d0036a41186a221720123a0000200141d0036a41106a22122015370300200141d0036a41086a221a2008370300200120183703d003200341ff0171411f4d0d00200141e4026a41026a20112d000022113a000020014188036a41086a221b201a290300220837030020014188036a41106a221c2012290300221537030020014188036a41186a221d20172d000022123a0000200141bc026a41026a221a20113a0000200120012f01c00222173b01e402200120012903d003221837038803200120173b01bc02200141a0026a41186a221720123a0000200141a0026a41106a22112015370300200141a0026a41086a221e2008370300200120183703a002200e2003460d00200d20036a220e41016a2d0000210d2001201036024c2001200e41026a36024841002110410021120240024002400240200d0e020100040b4100210d200141003a00c8032003200c6b41026a2112200c20026b417c6a210203402012200d6a450d02200141a8036a200d6a200e200d6a220341026a2d00003a00002001200341036a3602482001200d41016a22033a00c8032001200236024c2002417f6a21022003210d20034120470d000b2016200141a8036a41186a2903003703002014200141a8036a41106a2903003703002013200141a8036a41086a290300370300200120012903a8033703f003200341ff01714120490d02201b20132903002208370300200141e8026a41186a22022016290300370300200141e8026a41106a22032014290300370300200141e8026a41086a220d2008370300200120012903f003220837038803200120083703e802200141c0026a41186a2002290300370300200141c0026a41106a2003290300370300200141c0026a41086a200d290300370300200120012903e8023703c002410121120b200141e0016a41186a200141c0026a41186a290300370300200141e0016a41106a200141c0026a41106a290300370300200141e0016a41086a200141c0026a41086a2903003703002001419c026a41026a201a2d00003a000020014180026a41086a201e29030037030020014180026a41106a201129030037030020014180026a41186a20172d00003a0000200120012903c0023703e001200120012f01bc023b019c02200120012903a00237038002410121032012211f2019210f0c030b200d41ff0171450d00200141003a00c8030b200141e8026a41186a201d290300370300200141e8026a41106a201c2903003703000b41022103410121100b200141dc016a41026a22022001419c026a41026a2d00003a0000200141c0016a41086a220d20014180026a41086a290300370300200141c0016a41106a220e20014180026a41106a290300370300200141c0016a41186a220c20014180026a41186a2d00003a0000200141a0016a41086a2212200141e0016a41086a290300370300200141a0016a41106a2217200141e0016a41106a290300370300200141a0016a41186a2211200141e0016a41186a290300370300200120012f019c023b01dc0120012001290380023703c001200120012903e0013703a00120100d02200b41016a210b2001419c016a41026a221020022d00003a000020014180016a41086a221a200d29030037030020014180016a41106a220d200e29030037030020014180016a41186a220e200c2d00003a0000200141e0006a41086a220c2012290300370300200141e0006a41106a22122017290300370300200141e0006a41186a22172011290300370300200120012f01dc013b019c01200120012903c00137038001200120012903a0013703600240200a2001280254470d00200141d0006a200a10df022001280258210a200128025021050b2005200a41c4006c6a220220033a00002002200f360004200241036a20102d00003a0000200220012f019c013b0001200e2d00002103200d2903002108201a290300211520012903800121182002201f3a002120022018370008200241106a2015370000200241186a2008370000200241206a20033a0000200220012903603700222002413a6a2017290300370000200241326a20122903003700002002412a6a200c2903003700002001200a41016a220a360258200b2007470d000b200128025021050b200129025421082005450d050c060b20012802542202450d03200241c4006c0d020c030b1039000b103b000b2001280250102c0b0b41002105200141003602f803200142013703f0032001410f3602d4032001200141306a3602d0032001200141f0036a36028803200141bc036a4101360200200142013702ac03200141b4bcc3003602a8032001200141d0036a3602b80320014188036a41dcb7c000200141a8036a103e1a20013502f80342208620013502f00384100020012802f403450d0020012802f003102c0b2006450d002004102c0b0240024020050d0020004100360208200042043702000c010b20002008370204200020053602000b20014190046a24000bd40103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42c4007e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141c4006c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241c4006e3602000b0f0b2005450d001039000b103b000b830b020f7f057e230041e0036b22012400200141e0006a22024200370300200141c8006a41106a22034200370300200141c8006a41086a420037030020014200370348200141c8006a41e6dcc700410710c501200141286a4188bbc200410910c5012002200141286a41086a29000037030020032001290028370300200141a8036a200141c8006a10cb03024002400240024020012903a8034202510d00200141a8036a41106a2802002102200028020821032000280204210420002802002105200141286a41e6dcc700410710c501200141a8036a419b92c100411010c501200120023602dc03200141086a200141dc036a410410c701200141d4006a200141dc036a41046a3602002001200141086a41086a36024c2001200141dc036a3602502001200141086a360248200141186a200141c8006a107e2001280220220041206a2202417f4c0d020240024020020d00410121060c010b200210322206450d040b200141003602102001200236020c20012006360208200141086a4100411010c8012001280208200128021022026a22062001290028370000200641086a200141286a41086a2900003700002001200241106a2202360210200141086a2002411010c8012001280208200128021022026a220620012900a803370000200641086a200141a8036a41086a22062900003700002001200241106a220736021020012802182102200141086a2007200010c80120012802082208200128021022076a2002200010c9081a2001200720006a22093602100240200128021c450d002002102c0b200141c8006a2008200910cc032006200141c8006a410c6a2902003703002001200129024c3703a8030240024020012802484101460d00200141186a410c6a4100360200200142003703180c010b200141186a41086a200141a8036a41086a290300370300200120012903a8033703180b02402003450d00200341246c2106200141c8006a41106a2107200141186a410472210a200141ce036a210b200521000340200041206a2802002103200141286a41186a220c200041186a290000370300200141286a41106a220d200041106a290000370300200141286a41086a220e200041086a2900003703002001200029000037032802400240200128021c2202450d002001280220210f0c010b41940310322202450d064100210f20024100360200200220012902a803370204200241003b01322002410c6a200141a8036a41086a290200370200200241146a200141a8036a41106a2902003702002002411c6a200141a8036a41186a290200370200200241246a200141a8036a41206a2902003702002002412a6a200b290100370100200241346a200141c8006a41e00210c9081a200141003602202001200236021c0b200141c8006a200f2002200141286a1090020240024020012802484101470d00200141a8036a41086a200e2903002210370300200141a8036a41106a200d2903002211370300200141a8036a41186a200c29030022123703002001200129032822133703a803200129024c21142001280254210220072013370200200741086a2010370200200741106a2011370200200741186a20123702002001200a3602542001200236025020012014370348200141c8006a410010cd0321020c010b200128025020012802544102746a41046a21020b200041246a21002002200228020020036a3602002001200128021820036a3602182006415c6a22060d000b0b02402004450d00200441246c450d002005102c0b200141d4006a200141186a41086a2903003702002001200129031837024c2001410136024820082009200141c8006a41047210ce03200141c8006a41086a10cf03200128020c450d012008102c0c010b20002802042202450d00200241246c450d002000280200102c0b200141e0036a24000f0b103b000b1039000b8b0601067f23004190016b22012400200141d8006a41186a22024200370300200141d8006a41106a22034200370300200141d8006a41086a2204420037030020014200370358200141d8006a41ffdcc700410710c50120014180016a41b8b3c300410c10c501200220014180016a41086a2900003703002003200129008001370300200141106a200141d8006a412010c60120012802142105200128021021062002200041186a2900003703002003200041106a2900003703002004200041086a29000037030020012000290000370358200141286a418dddc700410810c501200141386a41abedc300410e10c50120012005410020061b36027c200141186a200141fc006a410410c70120014180016a410c6a200141fc006a41046a3602002001200141186a41086a360284012001200141fc006a360288012001200141186a36028001200141c8006a20014180016a107e20014180016a200141d8006a10e402024002402001280250220020012802880122026a41206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b200141003602202001200336021c20012004360218200141186a4100411010c8012001280218200128022022036a22042001290028370000200441086a200141286a41086a2900003700002001200341106a2203360220200141186a2003411010c8012001280218200128022022036a22042001290038370000200441086a200141386a41086a2900003700002001200341106a220436022020012802482103200141186a2004200010c8012001280218200128022022046a2003200010c9081a2001200420006a22003602202001280280012104200141186a2000200210c80120012802182200200128022022056a2004200210c9081a2001200520026a22023602200240200128028401450d002004102c0b0240200128024c450d002003102c0b200141086a2000200210c6012001200128020c41016a410120012802081b36025820002002200141d8006a410410a7020240200128021c450d002000102c0b20014190016a24000f0b103b000b1039000bff8a0308017f027e067f027e017f057e117f037e230041e00a6b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e19000102030405060708090a0b0c0d0e0f101112131d1c1b1a19000b200341dc086a4101360200200342013702cc08200341eccdc8003602c808200341043602ec04200341ec9cc8003602e8042003200341e8046a3602d808200341c8086a41dc85c3001046000b200141d0006a2903002104200141c8006a290300210520034198046a41186a200141196a29000037030020034198046a41106a200141116a29000037030020034198046a41086a200141096a2900003703002003200129000137039804200341e8076a41206a200141c1006a2d00003a0000200341e8076a41186a200141396a290000370300200341e8076a41106a200141316a290000370300200341e8076a41086a200141296a2900003703002003200141216a2900003703e807200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c808200341e8046a200341c8086a10c602200341b8076a41086a2202200341e8046a41096a290000370300200341b8076a41106a2201200341e8046a41116a290000370300200341b8076a41186a2206200341e8046a41196a290000370300200320032900e9043703b80720032d00e8044101460d16200341c0046a41186a2006290300370300200341c0046a41106a2001290300370300200341c0046a41086a2002290300370300200320032903b8073703c00420034198086a41e6dcc700410710c501200341d8066a419099c100410610c501200341c8086a200341c0046a10e40220032802d008220241206a2201417f4c0d2f0240024020010d00410121060c010b200110322206450d310b200341003602f004200320013602ec04200320063602e804200341e8046a4100411010c80120032802e80420032802f00422016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602f004200341e8046a2001411010c80120032802e80420032802f00422016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602f00420032802c8082101200341e8046a2006200210c80120032802e804220620032802f00422076a2001200210c9081a2003200720026a22023602f004024020032802cc08450d002001102c0b2006200210ce022102024020032802ec04450d002006102c0b02402002450d00200341f8066a410310a8040c3b0b200341e8046a41086a20034198046a41086a290300370300200341e8046a41106a20034198046a41106a290300370300200341e8046a41186a20034198046a41186a29030037030020032003290398043703e80420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a200341e8046a10d50220032802d008220241206a2201417f4c0d2f0240024020010d00410121060c010b200110322206450d310b200341003602c007200320013602bc07200320063602b807200341b8076a4100411010c80120032802b80720032802c00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602c007200341b8076a2001411010c80120032802b80720032802c00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602c00720032802c8082101200341b8076a2006200210c80120032802b807220620032802c00722076a2001200210c9081a2003200720026a22023602c007024020032802cc08450d002001102c0b2006200210ce022102024020032802bc07450d002006102c0b02402002450d00200341f8066a410410a8040c3b0b0240200542ffc7afa0255620044200522004501b0d00200341f8066a410810a8040c3b0b2003200341e8046a3602a80620034198086a41e6dcc700410710c501200341d8066a419099c100410610c501200341c8086a200341c0046a10e40220032802d008220241206a2201417f4c0d2f0240024020010d00410121060c010b200110322206450d310b200341003602c007200320013602bc07200320063602b807200341b8076a4100411010c80120032802b80720032802c00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602c007200341b8076a2001411010c80120032802b80720032802c00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602c00720032802c8082101200341b8076a2006200210c80120032802b807220620032802c00722076a2001200210c9081a2003200720026a22023602c007024020032802cc08450d002001102c0b20062002200341a8066a10cc01024020032802bc07450d002006102c0b200341c8086a41206a200341e8076a41206a2d00003a0000200341c8086a41186a200341e8076a41186a290300370300200341c8086a41106a200341e8076a41106a290300370300200341c8086a41086a200341e8076a41086a290300370300200320032903e8073703c80820034198086a41e6dcc700410710c501200341d8066a41e0b9c200410510c501200341b8076a200341c0046a10e40220032802c007220241206a2201417f4c0d2f0240024020010d00410121060c010b200110322206450d310b200341003602b006200320013602ac06200320063602a806200341a8066a4100411010c80120032802a80620032802b00622016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602b006200341a8066a2001411010c80120032802a80620032802b00622016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602b00620032802b8072101200341a8066a2006200210c80120032802a806220620032802b00622076a2001200210c9081a2003200720026a22023602b006024020032802bc07450d002001102c0b20062002200341c8086a10aa04024020032802ac06450d002006102c0b200341c0046a10e702200341f0066a22024200370300200341e8066a22014200370300200341d8066a41086a22064200370300200342003703d80620034198086a41e6dcc700410710c501200620034198086a41086a220729000037030020032003290098083703d806200341a8066a41ccbac200410a10c5012002200341a8066a41086a2208290000370300200120032900a806370300200341086a200341d8066a412010c601200328020c21092003280208210a200242003703002001420037030020064200370300200342003703d80620034198086a41e6dcc700410710c5012006200729000037030020032003290098083703d806200341a8066a41a0b7c200410c10c50120022008290000370300200120032900a8063703002003200341d8066a412010c6012003280204210720032802002108200341b8076a41c1dcc700410610c501200341c8086a41acc8c700410710c501200341a8066a200341c0046a10d50220032802b006220241206a2201417f4c0d2f0240024020010d004101210b0c010b20011032220b450d310b20094100200a1b2206200741d40020081b6b220820064b2109200341003602a0072003200136029c072003200b3602980720034198076a4100411010c80120032802980720032802a00722016a220720032900b807370000200741086a200341b8076a41086a2900003700002003200141106a22013602a00720034198076a2001411010c80120032802980720032802a00722016a220720032900c808370000200741086a200341c8086a41086a2900003700002003200141106a22073602a00720032802a806210120034198076a2007200210c801200328029807220720032802a007220a6a2001200210c9081a2003200a20026a220a3602a007024020032802ac06450d002001102c0b4100200820091b2102200341c8086a2007200a10d602200341c8086a41106a290300420020032903c80842015122011b210c20032903d008420020011b210d0240200328029c07450d002007102c0b200341c8086a41086a41063a0000200341d9086a200341c0046a41086a2201290300370000200341e1086a200341c0046a41106a2207290300370000200341e9086a200341c0046a41186a220829030037000020034180096a2209200c2004200d200554200c200454200c2004511b220a1b2204370300200341f8086a200d2005200a1b2205370300200341033602c808200320032903c0043700d108200341c8086a10c802200341a8066a41186a220a2008290300370300200341a8066a41106a220b2007290300370300200341a8066a41086a220e2001290300370300200320032903c0043703a806200341003602c007200342043703b807200341b8076a41004100200620026b2208200820064b1b10950220032802c00721070240200620024d0d0020032802b80720074102746a2101034020012002360200200141046a21012006200241016a2202470d000b200820076a21070b200341c8086a41186a2004370300200341f0086a4100360200200341fc086a200736020020034188096a200e29030037030020034190096a200b29030037030020034198096a200a290300370300200320053703d808200320053703c808200320032903a80637038009200342083703e808200320032903b8073702f408200320043703d008200342f3e885db96cddbb3203703980720034198076a20092005200410ab0420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a200341e8046a10d50220032802c007220241206a2201417f4c0d2f0240024020010d00410121060c010b200110322206450d310b200341003602b006200320013602ac06200320063602a806200341a8066a4100411010c80120032802a80620032802b00622016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602b006200341a8066a2001411010c80120032802a80620032802b00622016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602b00620032802b8072101200341a8066a2006200210c80120032802a806220620032802b00622076a2001200210c9081a2003200720026a22023602b006024020032802bc07450d002001102c0b20062002200341c8086a10ac04024020032802ac06450d002006102c0b024020032802ec082202450d00200241186c450d0020032802e808102c0b0240200341f8086a28020041ffffffff0371450d0020032802f408102c0b200341043a00f8060c3c0b200141106a2903002104200141086a2903002105200341e8076a41206a2208200241206a280200360200200341e8076a41186a2209200241186a290200370300200341e8076a41106a220a200241106a290200370300200341e8076a41086a220b200241086a290200370300200320022902003703e80720022802242102200341d8066a41186a22014200370300200341d8066a41106a22064200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012001200341a8066a41086a2207290000370300200620032900a806370300200341106a200341d8066a10890402400240024002402003280210417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c6022007200341f1046a290000370300200341a8066a41106a200341e8046a41116a290000370300200341a8066a41186a20034181056a290000370300200320032900e9043703a80620032d00e8044101470d01200341023a00e8030c030b200341e8036a411d10a80420022002280200417f6a220136020020010d012002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d012002102c0c010b20034198076a41186a200341a8066a41186a29030037030020034198076a41106a200341a8066a41106a29030037030020034198076a41086a200341a8066a41086a290300370300200320032903a8063703980720034198086a41e6dcc700410710c501200341d8066a419099c100410610c501200341c8086a20034198076a10e40220032802d008220241206a2201417f4c0d300240024020010d00410121060c010b200110322206450d320b41002107200341003602b006200320013602ac06200320063602a806200341a8066a4100411010c80120032802a80620032802b00622016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602b006200341a8066a2001411010c80120032802a80620032802b00622016a220620032900d806370000200641086a200341d8066a41086a22082900003700002003200141106a22063602b00620032802c8082101200341a8066a2006200210c80120032802a806220620032802b00622096a2001200210c9081a2003200920026a22023602b006024020032802cc08450d002001102c0b200341c8086a2006200210c9012008200341c8086a41096a290000370300200341d8066a41106a200341c8086a41116a290000370300200341f0066a2201200341e1086a290000370300200320032900c9083703d806024020032d00c8084101470d00200341f0046a200341d8066a41096a290000370300200341f8046a200341d8066a41116a290000370300200341ff046a2001290000370000200320032900d9063703e80420032d00d8062102410121070b024020032802ac06450d002006102c0b02402007450d00200341f8066a41176a2201200341e8046a41176a290000370000200341f8066a41106a2206200341e8046a41106a290300370300200341b8076a41086a200341e8046a41086a290300220c370300200341b8076a41106a22072006290300370300200341b8076a41176a22062001290000370000200320032903e804220d3703b807200320023a009804200341b0046a2006290000370000200341a9046a2007290300370000200341a1046a200c3700002003200d3700990420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198046a10d50220032802c007220241206a2201417f4c0d310240024020010d00410121060c010b200110322206450d330b2003410036028007200320013602fc06200320063602f806200341f8066a4100411010c80120032802f80620032802800722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a220136028007200341f8066a2001411010c80120032802f80620032802800722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602800720032802b8072101200341f8066a2006200210c80120032802f806220620032802800722076a2001200210c9081a2003200720026a220236028007024020032802bc07450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a22012003419c096a2802003602002003200341fc086a2902003703b807024002400240024020032802e8082207450d00200341c8086a41186a290300210c200341c8086a41086a290300210d200341f8086a2802002108200341f4086a2802002109200341f0086a280200210a20032903d808210f20032903c808211020032802ec08210b200341a8066a41206a2001280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a2201200341b8076a41086a290300370300200320032903b8073703a806024020032802fc06450d002006102c0b200341c0046a41086a22062001290300370300200341c0046a41106a22012002290300370300200341c0046a41186a2202200341a8066a41186a290300370300200341c0046a41206a220e200341a8066a41206a280200360200200341e8046a41186a200c37030020034198056a200836020020034190056a200a3602002003418c056a200b360200200320032903a8063703c0042003200f3703f804200320103703e804200320093602940520032007360288052003200d3703f004200341bc056a200e280200360200200341b4056a2002290300370200200341ac056a2001290300370200200341a4056a20062903003702002003419c056a20032903c004370200200341b8076a41c1dcc700410610c501200341c8086a41acc8c700410710c501200341a8066a20034198076a10d50220032802b006220241206a2201417f4c0d350240024020010d00410121060c010b200110322206450d370b200341003602c804200320013602c404200320063602c004200341c0046a4100411010c80120032802c00420032802c80422016a220620032900b807370000200641086a200341b8076a41086a2900003700002003200141106a22013602c804200341c0046a2001411010c80120032802c00420032802c80422016a220620032900c808370000200641086a200341c8086a41086a2900003700002003200141106a22063602c80420032802a8062101200341c0046a2006200210c80120032802c004220620032802c80422076a2001200210c9081a2003200720026a22023602c804024020032802ac06450d002001102c0b200341c8086a2006200210d602200341c8086a41106a290300420020032903c80842015122021b210c20032903d008420020021b210d024020032802c404450d002006102c0b200d20032903e804220f7d2210200d56200c200341f0046a29030022117d200d200f54ad7d220d200c56200d200c511b450d010240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d02200328029405102c0c020b024020032802fc06450d002006102c0b200341e8036a410110a8040c040b200341e8046a41186a22022903002112200320032903f8042213200520102010200556200d200456200d2004511b22011b22057c220c3703f804200220122004200d20011b22047c200c201354ad7c220d37030020032005200f7c220f3703e8042003200420117c200f200554ad7c3703f004200c4280c8afa025544100200d501b0d01200341c8086a41386a2004370300200341f8086a2005370300200341c8086a41086a41063a0000200341d9086a20034198076a41086a290300370000200341e1086a200341a8076a290300370000200341e9086a20034198076a41186a290300370000200341033602c80820032003290398073700d108200341c8086a10c802200342f3e885db96cddbb3203703a806200341a8066a200341e8046a41386a20032903e804200341e8046a41086a29030010ab0420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a20034198046a10d50220032802d008220241206a2201417f4c0d330240024020010d00410121060c010b200110322206450d350b200341003602c007200320013602bc07200320063602b807200341b8076a4100411010c80120032802b80720032802c00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602c007200341b8076a2001411010c80120032802b80720032802c00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602c00720032802c8082101200341b8076a2006200210c80120032802b807220620032802c00722076a2001200210c9081a2003200720026a22023602c007024020032802cc08450d002001102c0b20062002200341e8046a10ac04024020032802bc07450d002006102c0b0240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d00200328029405102c0b200341043a00e8030c3c0b200341e8036a410810a8040240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d01200328029405102c0c010b200341e8036a410210a8040b20032d00e8034104460d3920032902ec0321040b20032802e803210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c3c0b200141106a2903002104200141086a2903002105200341e8076a41206a2208200241206a280200360200200341e8076a41186a2209200241186a290200370300200341e8076a41106a220a200241106a290200370300200341e8076a41086a220b200241086a290200370300200320022902003703e80720022802242102200341d8066a41186a22064200370300200341d8066a41106a22014200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012006200341a8066a41086a2207290000370300200120032900a806370300200341206a200341d8066a108904024002402003280220417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c6022007200341f1046a290000370300200341a8066a41106a200341e8046a41116a290000370300200341a8066a41186a20034181056a290000370300200320032900e9043703a80620032d00e8044101470d01200341023a00f8060c370b200341f8066a411d10a80420022002280200417f6a220136020020010d352002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d352002102c0c350b20034198046a41186a200341a8066a41186a29030037030020034198046a41106a200341a8066a41106a29030037030020034198046a41086a200341a8066a41086a290300370300200320032903a8063703980420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198046a10d50220032802c007220241206a2206417f4c0d2d0240024020060d00410121070c010b200610322207450d2f0b200341003602a0072003200636029c07200320073602980720034198076a4100411010c80120032802980720032802a00722066a2207200329009808370000200741086a20034198086a41086a2900003700002003200641106a22063602a00720034198076a2006411010c80120032802980720032802a00722066a220720032900d806370000200741086a200341d8066a41086a2900003700002003200641106a22073602a00720032802b807210620034198076a2007200210c801200328029807220720032802a00722086a2006200210c9081a2003200820026a22023602a007024020032802bc07450d002006102c0b200341c8086a2007200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220920034194096a290200370300200341b8076a41206a220a2003419c096a2802003602002003200341fc086a2902003703b8070240024020032802e8082206450d00200341c8086a41186a290300210c200341c8086a41086a290300210f200341f8086a280200210b200341f4086a280200210e200341f0086a280200210820032903d808210d20032903c808211020032802ec082102200341a8066a41206a200a280200360200200341a8066a41186a2009290300370300200341a8066a41106a2209200341b8076a41106a290300370300200341a8066a41086a220a200341b8076a41086a290300370300200320032903b8073703a8060240200328029c07450d002007102c0b200341c0046a41086a2207200a290300370300200341c0046a41106a220a2009290300370300200341c0046a41186a2209200341a8066a41186a290300370300200341c0046a41206a2214200341a8066a41206a280200360200200341e8046a41186a200c37030020034198056a200b36020020034190056a20083602002003418c056a2002360200200320032903a8063703c0042003200d3703f804200320103703e8042003200e3602940520032006360288052003200f3703f004200341bc056a2014280200360200200341b4056a2009290300370200200341ac056a200a290300370200200341a4056a20072903003702002003419c056a20032903c0043702002008411f4b0d010240200d2005200d200554200c200454200c2004511b22071b2205200c200420071b220484500d00200341e8046a41186a4200200c20047d200d200554ad7d220f200d20057d22104280c8afa025544100200f501b22021b37030020034200201020021b3703f804200341d8066a41186a4200370300200341e8066a4200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41ccbac200410a10c501200141086a200341a8066a41086a290000370000200120032900a806370000200341186a200341d8066a412010c601200c200420021b2104200d200520021b2105200328021c411c6a411c20032802181b210102402003280290052202200328028c05470d00200341e8046a41206a200210ad04200328029005210220032802880521060b2006200241186c6a22022004370308200220053703002002200136021041012106200320032802900541016a36029005200342f3e885db96cddbb3203703a806200341a8066a200341a0056a20032903e804200341e8046a41086a29030010ab0420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a20034198046a10d50220032802d008220241206a2201417f4c0d3002402001450d00200110322206450d320b200341003602c007200320013602bc07200320063602b807200341b8076a4100411010c80120032802b80720032802c00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602c007200341b8076a2001411010c80120032802b80720032802c00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602c00720032802c8082101200341b8076a2006200210c80120032802b807220620032802c00722076a2001200210c9081a2003200720026a22023602c007024020032802cc08450d002001102c0b20062002200341e8046a10ac04024020032802bc07450d002006102c0b20034180096a2004370300200341f8086a2005370300200341d0086a41073a0000200341d9086a200341a8056a290300370000200341e1086a200341b0056a290300370000200341e9086a200341b8056a290300370000200341033602c808200320032903a0053700d108200341c8086a10c802200328028c0521020b02402002450d00200241186c450d00200328028805102c0b024020032802980541ffffffff0371450d00200328029405102c0b200341043a00f8060c380b0240200328029c07450d002007102c0b200341f8066a410110a8040c350b200341f8066a410910a8040240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d34200328029405102c0c340b200141046a280200210e200341e8076a41206a2208200241206a280200360200200341e8076a41186a2209200241186a290200370300200341e8076a41106a220a200241106a290200370300200341e8076a41086a220b200241086a290200370300200320022902003703e80720022802242102200341d8066a41186a22064200370300200341d8066a41106a22014200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012006200341a8066a41086a290000370300200120032900a806370300200341306a200341d8066a1089040240024002402003280230417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c602200341b8076a41086a200341f1046a290000370300200341b8076a41106a200341e8046a41116a290000370300200341b8076a41186a20034181056a290000370300200320032900e9043703b80720032d00e8044101470d01410221010c020b200341c8086a411d10a80420034192046a20032d00cb083a0000200320032f00c9083b01900420032d00c808210120032902cc08210420022002280200417f6a220636020020060d012002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22062006280200417f6a220636020020060d012002102c0c010b20034198046a41186a200341b8076a41186a29030037030020034198046a41106a200341b8076a41106a29030037030020034198046a41086a200341b8076a41086a290300370300200320032903b8073703980420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198046a10d50220032802c007220241206a2206417f4c0d2d0240024020060d00410121070c010b200610322207450d2f0b200341003602a0072003200636029c07200320073602980720034198076a4100411010c80120032802980720032802a00722066a2207200329009808370000200741086a20034198086a41086a2900003700002003200641106a22063602a00720034198076a2006411010c80120032802980720032802a00722066a220720032900d806370000200741086a200341d8066a41086a2900003700002003200641106a22073602a00720032802b807210620034198076a2007200210c801200328029807220720032802a00722086a2006200210c9081a2003200820026a22023602a007024020032802bc07450d002006102c0b200341c8086a2007200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220620034194096a290200370300200341b8076a41206a22082003419c096a2802003602002003200341fc086a2902003703b80702400240024020032802e8082209450d00200341c8086a41186a2903002104200341c8086a41086a290300210f200341f8086a280200210a200341f4086a2802002115200341f0086a280200210220032903d808210520032903c808211020032802ec08210b200341a8066a41206a2008280200360200200341a8066a41186a2006290300370300200341a8066a41106a2208200341b8076a41106a2216290300370300200341a8066a41086a2206200341b8076a41086a2217290300370300200320032903b8073703a8060240200328029c07450d002007102c0b200341c0046a41086a22072006290300370300200341c0046a41106a22182008290300370300200341c0046a41186a2208200341a8066a41186a2219290300370300200341c0046a41206a221a200341a8066a41206a280200360200200341e8046a41186a2214200437030020034198056a200a36020020034190056a20023602002003418c056a200b360200200320032903a8063703c004200320053703f804200320103703e804200320153602940520032009360288052003200f3703f004200341bc056a201a280200360200200341b4056a2008290300370200200341ac056a2018290300370200200341a4056a20072903003702002003419c056a220820032903c004370200200341b8076a41186a200341b8056a2903003703002016200341b0056a2903003703002017200341a8056a290300370300200320032903a0053703b807200341d8066a41186a4200370300200341d8066a41106a4200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41ccbac200410a10c501200141086a2006290000370000200120032900a806370000200341286a200341d8066a412010c60120032802284101460d0120102105200f210c0c020b0240200328029c07450d002007102c0b200341c8086a410110a80420034192046a20032d00cb083a0000200320032f00c9083b01900420032d00c808210120032902cc0821040c020b200328022c2107200341c8086a41086a22162008280200360200200341a8066a41086a2217200341a0056a220a41086a2218290300370300200341a8066a41106a221a200a41106a221b2903003703002019200a41186a29030037030020032003290294053703c8082003200a2903003703a80620034194056a21152014290300211120032903f80421120240024020020d0020102105200f210c200921010c010b2009200241186c6a210820102105200f210c20092102200921010340200241086a290300210d20022903002104024002402007200241106a2802002206490d004200200c200d7d2005200454ad7d220d200520047d2204200556200d200c56200d200c511b22061b210c4200200420061b21050c010b20012004370300200120063602102001200d370308200141186a21010b200241186a22022008470d000b0b201520032903c808370200200a20032903a806370300200341e8046a41186a2011370300201541086a201628020036020020182017290300370300201b201a290300370300200a41186a200341a8066a41186a290300370300200320123703f804200320053703e8042003200b36028c052003200c3703f00420032009360288052003200120096b41186d2202360290050b024002400240024020020d0020032903f8044281c8afa0255441002014290300501b0d010b200342f3e885db96cddbb3203703c004200341c0046a200341a0056a2005200c10ab0420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a20034198046a10d50220032802d008220241206a2201417f4c0d300240024020010d00410121060c010b200110322206450d320b200341003602b006200320013602ac06200320063602a806200341a8066a4100411010c80120032802a80620032802b00622016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602b006200341a8066a2001411010c80120032802a80620032802b00622016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602b00620032802c8082101200341a8066a2006200210c80120032802a806220620032802b00622076a2001200210c9081a2003200720026a22023602b006024020032802cc08450d002001102c0b20062002200341e8046a10ac04024020032802ac06450d002006102c0b200ead4298ec037e42f8b7b1ed017c21054201210c0c010b200341c8086a200341b8076a200e10ae0420034198076a41026a220220032d00cb083a0000200320032f00c9083b01980720032d00c80822014104470d01200342f3e885db96cddbb3203703f806200341f8066a200341b8076a10af044200210c0b0240201020032903e804220d58200f200341e8046a41086a290300220458200f2004511b0d00200341f8086a2010200d7d370300200341c8086a41086a41083a0000200341d9086a200341b8076a41086a290300370000200341e1086a200341c8076a290300370000200341e9086a200341d0076a29030037000020034180096a200f20047d2010200d54ad7d370300200341033602c808200320032903b8073700d108200341c8086a10c8020b0240200328028c052202450d00200241186c450d00200328028805102c0b024020032802980541ffffffff0371450d00200328029405102c0b200320032800e8033602f8032003200341eb036a2800003600fb03200041186a41003a0000200041106a20053703002000200c370308200020032802f8033600192000411c6a20032800fb03360000200042003703000c3c0b20032902cc08210420034190046a41026a20022d00003a0000200320032f0198073b0190040240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d00200328029405102c0b20034188046a41026a220220034190046a41026a2d00003a0000200320032800e8033602f803200320032f0190043b0188042003200341eb036a2800003600fb03200041186a41003a000020004200370308200020032802f8033600192000411c6a20032800fb03360000200041206a20013a000020002004370024200020032f0188043b0021200041236a20022d00003a0000200042013703000c3a0b200141046a280200210e200341e8076a41206a2208200241206a280200360200200341e8076a41186a2209200241186a290200370300200341e8076a41106a220a200241106a290200370300200341e8076a41086a220b200241086a290200370300200320022902003703e80720022802242102200341d8066a41186a22014200370300200341d8066a41106a22064200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012001200341a8066a41086a2207290000370300200620032900a806370300200341386a200341d8066a10890402400240024002402003280238417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c6022007200341f1046a290000370300200341a8066a41106a200341e8046a41116a290000370300200341a8066a41186a20034181056a290000370300200320032900e9043703a80620032d00e8044101470d01200341023a00f8060c030b200341f8066a411d10a80420022002280200417f6a220136020020010d012002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d012002102c0c010b20034198046a41186a200341a8066a41186a29030037030020034198046a41106a200341a8066a41106a29030037030020034198046a41086a200341a8066a41086a290300370300200320032903a8063703980420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198046a10d50220032802c007220241206a2201417f4c0d2d0240024020010d00410121060c010b200110322206450d2f0b200341003602a0072003200136029c07200320063602980720034198076a4100411010c80120032802980720032802a00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602a00720034198076a2001411010c80120032802980720032802a00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602a00720032802b807210120034198076a2006200210c801200328029807220620032802a00722076a2001200210c9081a2003200720026a22023602a007024020032802bc07450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a220a2003419c096a2802003602002003200341fc086a2902003703b807024020032802e8082207450d00200341c8086a41186a2903002104200341c8086a41086a2903002105200341f8086a2802002108200341f4086a2802002109200341f0086a280200210b20032903d808210c20032903c808210d20032802ec082101200341a8066a41206a200a280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a220a200341b8076a41086a290300370300200320032903b8073703a8060240200328029c07450d002006102c0b200341c0046a41086a2206200a290300370300200341c0046a41106a220a2002290300370300200341c0046a41186a2202200341a8066a41186a290300370300200341c0046a41206a2214200341a8066a41206a280200360200200341e8046a41186a200437030020034198056a200836020020034190056a200b3602002003418c056a2001360200200320032903a8063703c0042003200c3703f8042003200d3703e80420032009360294052003200736028805200320053703f004200341bc056a2014280200360200200341b4056a2002290300370200200341ac056a200a290300370200200341a4056a20062903003702002003419c056a20032903c00437020020034198086a41e6dcc700410710c501200341d8066a41b18ec100410a10c501200341c8086a200341a0056a220b10e40220032802d008220241206a2206417f4c0d2e0240024020060d004101210a0c010b20061032220a450d300b200341003602c007200320063602bc072003200a3602b807200341b8076a4100411010c80120032802b80720032802c00722066a220a200329009808370000200a41086a20034198086a41086a2900003700002003200641106a22063602c007200341b8076a2006411010c80120032802b80720032802c00722066a220a20032900d806370000200a41086a200341d8066a41086a2900003700002003200641106a220a3602c00720032802c8082106200341b8076a200a200210c80120032802b807220a20032802c00722146a2006200210c9081a2003201420026a22023602c007024020032802cc08450d002006102c0b200a200210b401024020032802bc07450d00200a102c0b20034198086a41e6dcc700410710c501200341d8066a418893c700410a10c501200341c8086a200b10e40220032802d008220241206a2206417f4c0d2e0240024020060d004101210a0c010b20061032220a450d300b200341003602c007200320063602bc072003200a3602b807200341b8076a4100411010c80120032802b80720032802c00722066a220a200329009808370000200a41086a20034198086a41086a2900003700002003200641106a22063602c007200341b8076a2006411010c80120032802b80720032802c00722066a220a20032900d806370000200a41086a200341d8066a41086a2900003700002003200641106a220a3602c00720032802c8082106200341b8076a200a200210c80120032802b807220a20032802c007220b6a2006200210c9081a2003200b20026a22023602c007024020032802cc08450d002006102c0b200341003a00cd080240024002400240200e41c000490d00200e41808001490d01200e418080808004490d0241052106200341053a00cd08200341033a00c8082003200e3600c9080c030b41012106200341013a00cd082003200e4102743a00c8080c020b41022106200341023a00cd082003200e4102744101723b01c8080c010b41042106200341043a00cd082003200e4102744102723602c8080b200a2002200341c8086a200610a702024020032d00cd08450d00200341003a00cd080b024020032802bc07450d00200a102c0b02402001450d00200141186c450d002007102c0b0240200841ffffffff0371450d002009102c0b200341043a00f8060c340b0240200328029c07450d002006102c0b200341f8066a410110a8040b20032d00f8064104460d3220032902fc0621040b20032802f806210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c390b200341e8076a41206a2209200241206a280200360200200341e8076a41186a220a200241186a290200370300200341e8076a41106a220b200241106a290200370300200341e8076a41086a220e200241086a290200370300200320022902003703e807200141046a2802002107200141086a28020021082001410c6a280200211820022802242102200341d8066a41186a22014200370300200341d8066a41106a22174200370300200341d8066a41086a22064200370300200342003703d80620034198086a41e6dcc700410710c501200620034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012001200341a8066a41086a2206290000370300201720032900a806370300200341c8006a200341d8066a10890402402003280248417d710d00200341c8086a41206a2009280200360200200341c8086a41186a200a290300370300200341c8086a41106a200b290300370300200341c8086a41086a200e290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c6022006200341f1046a290000370300200341a8066a41106a200341e8046a41116a290000370300200341a8066a41186a20034181056a290000370300200320032900e9043703a806024020032d00e8044101470d00200341023a00f806024020080d000c310b2007450d2f200841ffffff3f71450d2f2007102c0c2f0b20034198076a41186a200341a8066a41186a29030037030020034198076a41106a200341a8066a41106a29030037030020034198076a41086a200341a8066a41086a290300370300200320032903a8063703980720034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198076a10d50220032802c007220241206a2201417f4c0d2b0240024020010d00410121060c010b200110322206450d2d0b200341003602a0042003200136029c04200320063602980420034198046a4100411010c80120032802980420032802a00422016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602a00420034198046a2001411010c80120032802980420032802a00422016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602a00420032802b807210120034198046a2006200210c801200328029804220620032802a00422096a2001200210c9081a2003200920026a22023602a004024020032802bc07450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a220a2003419c096a2802003602002003200341fc086a2902003703b8070240024020032802e8082201450d00200341c8086a41186a2903002104200341c8086a41086a2903002105200341f8086a280200210b200341f4086a280200210e200341f0086a280200211420032903d808210c20032903c808210d20032802ec082109200341a8066a41206a200a280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a220a200341b8076a41086a290300370300200320032903b8073703a8060240200328029c04450d002006102c0b200341c0046a41086a2215200a290300370300200341c0046a41106a220a2002290300370300200341c0046a41186a2202200341a8066a41186a2206290300370300200341c0046a41206a2216200341a8066a41206a280200360200200341e8046a41186a200437030020034198056a200b36020020034190056a20143602002003418c056a2009360200200320032903a8063703c0042003200c3703f8042003200d3703e8042003200e360294052003200136028805200320053703f004200341bc056a2016280200360200200341b4056a2002290300370200200341ac056a200a290300370200200341a4056a20152903003702002003419c056a20032903c00437020020180d01200341f8066a410510a80402402009450d00200941186c450d002001102c0b200b41ffffffff0371450d2f200e102c0c2f0b0240200328029c04450d002006102c0b200341f8066a410110a8040c2e0b200741186a2900002105200741106a290000210c20072900002104200341c8086a41086a2201200741086a290000220d370300200341a8066a41086a2209200d370300200341a8066a41106a220a200c37030020062005370300200320043703c808200320043703a80620022006290300370300200341c0046a41106a2206200a290300370300200341c0046a41086a220a2009290300370300200320032903a8063703c00420034198046a41186a2209200229030037030020034198046a41106a2202200629030037030020034198046a41086a2206200a290300370300200320032903c00437039804200341c8086a41186a2009290300370300200341c8086a41106a220b20022903003703002001200629030037030020032003290398043703c80841201032220a450d2c200a20032903c808370000200a41186a200341c8086a41186a2209290300370000200a41106a200b290300370000200a41086a200129030037000020034281808080103702dc062003200a3602d806024020184101470d00410121020c2b0b200341b8076a41086a2214200741286a290000370300200341b8076a41106a2215200741306a290000370300200341b8076a41186a2216200741386a290000370300200320072900203703b807201841057421184102210241c000210141012106034020092016290300370300200341c8086a41106a220b2015290300370300200341c8086a41086a220e2014290300370300200320032903b8073703c80802402002417f6a2006470d00200341d8066a2006410110d60120032802d806210a0b200a20016a41606a220620032903c808370000200641186a2009290300370000200641106a200b290300370000200641086a200e290300370000200320023602e00620024110460d2b20182001460d2b2014200720016a220641086a2900003703002015200641106a2900003703002016200641186a290000370300200320062900003703b807200141206a2101200241016a210220032802dc0621060c000b0b200341f8066a411d10a80402402008450d002007450d00200841ffffff3f71450d002007102c0b20022002280200417f6a220136020020010d2d2002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d2d2002102c0c2d0b200341e8076a41206a2208200241206a280200360200200341e8076a41186a2209200241186a290200370300200341e8076a41106a220a200241106a290200370300200341e8076a41086a220b200241086a290200370300200320022902003703e80720022802242102200341d8066a41186a22014200370300200341d8066a41106a22064200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012001200341a8066a41086a2207290000370300200620032900a806370300200341d0006a200341d8066a10890402400240024002402003280250417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c6022007200341f1046a290000370300200341a8066a41106a200341e8046a41116a290000370300200341a8066a41186a20034181056a290000370300200320032900e9043703a80620032d00e8044101470d01200341023a00f8060c030b200341f8066a411d10a80420022002280200417f6a220136020020010d012002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d012002102c0c010b20034198046a41186a200341a8066a41186a29030037030020034198046a41106a200341a8066a41106a29030037030020034198046a41086a200341a8066a41086a290300370300200320032903a8063703980420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198046a10d50220032802c007220241206a2201417f4c0d2b0240024020010d00410121060c010b200110322206450d2d0b200341003602a0072003200136029c07200320063602980720034198076a4100411010c80120032802980720032802a00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602a00720034198076a2001411010c80120032802980720032802a00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602a00720032802b807210120034198076a2006200210c801200328029807220620032802a00722076a2001200210c9081a2003200720026a22023602a007024020032802bc07450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a220a2003419c096a2802003602002003200341fc086a2902003703b807024020032802e8082207450d00200341c8086a41186a2903002104200341c8086a41086a2903002105200341f8086a2802002108200341f4086a2802002109200341f0086a280200210b20032903d808210c20032903c808210d20032802ec082101200341a8066a41206a200a280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a220a200341b8076a41086a290300370300200320032903b8073703a8060240200328029c07450d002006102c0b200341c0046a41086a2206200a290300370300200341c0046a41106a220a2002290300370300200341c0046a41186a2202200341a8066a41186a290300370300200341c0046a41206a220e200341a8066a41206a280200360200200341e8046a41186a200437030020034198056a200836020020034190056a200b3602002003418c056a2001360200200320032903a8063703c0042003200c3703f8042003200d3703e80420032009360294052003200736028805200320053703f004200341bc056a200e280200360200200341b4056a2002290300370200200341ac056a200a290300370200200341a4056a20062903003702002003419c056a20032903c00437020020034198086a41e6dcc700410710c501200341d8066a418893c700410a10c501200341c8086a200341a0056a220b10e40220032802d008220241206a2206417f4c0d2c0240024020060d004101210a0c010b20061032220a450d2e0b200341003602c007200320063602bc072003200a3602b807200341b8076a4100411010c80120032802b80720032802c00722066a220a200329009808370000200a41086a20034198086a41086a2900003700002003200641106a22063602c007200341b8076a2006411010c80120032802b80720032802c00722066a220a20032900d806370000200a41086a200341d8066a41086a2900003700002003200641106a220a3602c00720032802c8082106200341b8076a200a200210c80120032802b807220a20032802c007220e6a2006200210c9081a2003200e20026a22023602c007024020032802cc08450d002006102c0b200a200210b401024020032802bc07450d00200a102c0b20034198086a41e6dcc700410710c501200341d8066a41b18ec100410a10c501200341c8086a200b10e40220032802d008220241206a2206417f4c0d2c0240024020060d004101210a0c010b20061032220a450d2e0b200341003602c007200320063602bc072003200a3602b807200341b8076a4100411010c80120032802b80720032802c00722066a220a200329009808370000200a41086a20034198086a41086a2900003700002003200641106a22063602c007200341b8076a2006411010c80120032802b80720032802c00722066a220a20032900d806370000200a41086a200341d8066a41086a2900003700002003200641106a220a3602c00720032802c8082106200341b8076a200a200210c80120032802b807220a20032802c007220b6a2006200210c9081a2003200b20026a22023602c007024020032802cc08450d002006102c0b200a200210b401024020032802bc07450d00200a102c0b02402001450d00200141186c450d002007102c0b0240200841ffffffff0371450d002009102c0b200341043a00f8060c2a0b0240200328029c07450d002006102c0b200341f8066a410110a8040b20032d00f8064104460d2820032902fc0621040b20032802f806210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c370b200341e8076a41206a200141216a2d00003a0000200341e8076a41186a200141196a290000370300200341e8076a41106a200141116a290000370300200341e8076a41086a200141096a290000370300200320012900013703e807200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c808200341e8046a200341c8086a10c602200341d8066a41086a2202200341e8046a41096a290000370300200341d8066a41106a2201200341e8046a41116a290000370300200341d8066a41186a2206200341e8046a41196a290000370300200320032900e9043703d80620032d00e8044101460d0e20034198046a41186a200629030037030020034198046a41106a200129030037030020034198046a41086a2002290300370300200320032903d8063703980420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a20034198046a10d50220032802c007220241206a2201417f4c0d280240024020010d00410121060c010b200110322206450d2a0b200341003602a0072003200136029c07200320063602980720034198076a4100411010c80120032802980720032802a00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602a00720034198076a2001411010c80120032802980720032802a00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602a00720032802b807210120034198076a2006200210c801200328029807220620032802a00722076a2001200210c9081a2003200720026a22023602a007024020032802bc07450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a220a2003419c096a2802003602002003200341fc086a2902003703b807024020032802e8082207450d00200341c8086a41186a2903002104200341c8086a41086a2903002105200341f8086a2802002108200341f4086a2802002109200341f0086a280200210b20032903d808210c20032903c808210d20032802ec082101200341a8066a41206a200a280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a220a200341b8076a41086a290300370300200320032903b8073703a8060240200328029c07450d002006102c0b200341c0046a41086a2206200a290300370300200341c0046a41106a220a2002290300370300200341c0046a41186a2202200341a8066a41186a290300370300200341c0046a41206a220e200341a8066a41206a280200360200200341e8046a41186a200437030020034198056a200836020020034190056a200b3602002003418c056a2001360200200320032903a8063703c0042003200c3703f8042003200d3703e80420032009360294052003200736028805200320053703f004200341bc056a200e280200360200200341b4056a2002290300370200200341ac056a200a290300370200200341a4056a20062903003702002003419c056a20032903c004370200200341c8086a41206a200341e8076a41206a2d00003a0000200341c8086a41186a200341e8076a41186a290300370300200341c8086a41106a200341e8076a41106a290300370300200341c8086a41086a200341e8076a41086a290300370300200320032903e8073703c80820034198086a41e6dcc700410710c501200341d8066a41e0b9c200410510c501200341b8076a200341a0056a10e40220032802c007220241206a2206417f4c0d290240024020060d004101210a0c010b20061032220a450d2b0b200341003602b006200320063602ac062003200a3602a806200341a8066a4100411010c80120032802a80620032802b00622066a220a200329009808370000200a41086a20034198086a41086a2900003700002003200641106a22063602b006200341a8066a2006411010c80120032802a80620032802b00622066a220a20032900d806370000200a41086a200341d8066a41086a2900003700002003200641106a220a3602b00620032802b8072106200341a8066a200a200210c80120032802a806220a20032802b006220b6a2006200210c9081a2003200b20026a22023602b006024020032802bc07450d002006102c0b200a2002200341c8086a10aa04024020032802ac06450d00200a102c0b02402001450d00200141186c450d002007102c0b0240200841ffffffff0371450d002009102c0b200341043a00f8060c260b0240200328029c07450d002006102c0b200341f8066a410110a80420032d00f8064104460d2520032902fc0621040c240b20034198046a41186a200141196a29000037030020034198046a41106a200141116a29000037030020034198046a41086a200141096a2900003703002003200129000137039804200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c808200341e8046a200341c8086a10c602200341a8066a41086a2202200341e8046a41096a290000370300200341a8066a41106a2201200341e8046a41116a290000370300200341a8066a41186a2206200341e8046a41196a290000370300200320032900e9043703a80620032d00e8044101460d0c200341c0046a41186a2006290300370300200341c0046a41106a2001290300370300200341c0046a41086a2002290300370300200320032903a8063703c00420034198086a41e6dcc700410710c501200341d8066a419099c100410610c501200341e8046a200341c0046a10e40220032802f004220241206a2201417f4c0d270240024020010d00410121060c010b200110322206450d290b200341003602f007200320013602ec07200320063602e807200341e8076a4100411010c80120032802e80720032802f00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602f007200341e8076a2001411010c80120032802e80720032802f00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22013602f00720032802e8042106200341e8076a2001200210c80120032802e807220120032802f00722076a2006200210c9081a2003200720026a22023602f007024020032802ec04450d002006102c0b200341c8086a2001200210c901200341e8046a41086a200341d2086a290100370300200341e8046a41106a200341da086a290100370300200341e8046a41176a2202200341e1086a290000370000200320032901ca083703e80402400240024020032d00c8084101470d0020032d00c9082106200341f8066a41176a2002290000370000200341f8066a41106a2202200341e8046a41106a290300370300200341f8066a41086a2207200341e8046a41086a290300370300200320032903e8043703f806024020032802ec07450d002001102c0b200341b8076a41176a2201200341f8066a41176a290000370000200341b8076a41106a22082002290300370300200341b1066a2007290300370000200341b9066a2008290300370000200341a8066a41186a2001290000370000200320063a00a806200320032903f8063700a906200341e8076a41086a20034198046a41086a290300370300200341e8076a41106a20034198046a41106a290300370300200341e8076a41186a20034198046a41186a29030037030020032003290398043703e80720034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a200341e8076a10d50220032802d008220241206a2201417f4c0d2a20010d01410121060c020b024020032802ec07450d002001102c0b200341e8036a410210a8040c220b200110322206450d290b200341003602f004200320013602ec04200320063602e804200341e8046a4100411010c80120032802e80420032802f00422016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602f004200341e8046a2001411010c80120032802e80420032802f00422016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602f00420032802c8082101200341e8046a2006200210c80120032802e804220620032802f00422076a2001200210c9081a2003200720026a22023602f004024020032802cc08450d002001102c0b2006200210ce022102024020032802ec04450d002006102c0b02402002450d00200341e8036a410410a8040c210b200341e8076a200341a8066a412010cc08450d1f2003200341e8076a3602b80720034198086a41e6dcc700410710c501200341d8066a419099c100410610c501200341c8086a200341c0046a10e40220032802d008220241206a2201417f4c0d270240024020010d00410121060c010b200110322206450d290b200341003602f004200320013602ec04200320063602e804200341e8046a4100411010c80120032802e80420032802f00422016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602f004200341e8046a2001411010c80120032802e80420032802f00422016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602f00420032802c8082101200341e8046a2006200210c80120032802e804220620032802f00422076a2001200210c9081a2003200720026a22023602f004024020032802cc08450d002001102c0b20062002200341b8076a10cc01024020032802ec04450d002006102c0b20034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a200341a8066a10d50220032802d008220241206a2201417f4c0d270240024020010d00410121060c010b200110322206450d290b200341003602a0072003200136029c07200320063602980720034198076a4100411010c80120032802980720032802a00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602a00720034198076a2001411010c80120032802980720032802a00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22013602a00720032802c808210620034198076a2001200210c801200328029807220120032802a00722076a2006200210c9081a2003200720026a22023602a007024020032802cc08450d002006102c0b200341c8086a2001200210d803024020032802e8082206450d002001200210b4010b200341b8076a41086a220220034184096a290200370300200341b8076a41106a22072003418c096a290200370300200341b8076a41186a220820034194096a290200370300200341b8076a41206a22092003419c096a2802003602002003200341fc086a2902003703b80702402006450d00200341c8086a41186a2903002104200341c8086a41086a2903002105200341f8086a280200210a200341f4086a280200210b200341f0086a280200210e20032903d808210c20032903c808210d20032802ec082114200341e8046a41206a2009280200360200200341e8046a41186a2008290300370300200341e8046a41106a2007290300370300200341e8046a41086a2002290300370300200320032903b8073703e8040240200328029c07450d002001102c0b200341c8086a41186a2004370300200341f8086a200a360200200341f0086a200e360200200341ec086a2014360200200341fc086a20032903e80437020020034184096a200341f0046a2903003702002003418c096a200341e8046a41106a29030037020020034194096a200341e8046a41186a2903003702002003419c096a200341e8046a41206a2802003602002003200c3703d808200320053703d0082003200d3703c8082003200b3602f408200320063602e80820034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a200341e8076a10d50220032802c007220241206a2201417f4c0d280240024020010d00410121060c010b200110322206450d2a0b200341c8086a41206a2107200341c8086a41106a2108200341003602a0072003200136029c07200320063602980720034198076a4100411010c80120032802980720032802a00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602a00720034198076a2001411010c80120032802980720032802a00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602a00720032802b807210120034198076a2006200210c801200328029807220620032802a00722096a2001200210c9081a2003200920026a22093602a007024020032802bc07450d002001102c0b200341003602c007200342013703b807200341b8076a41004120102f20032802b80720032802c00722016a2202200329038009370000200241086a20034188096a290300370000200241106a20034190096a290300370000200241186a20034198096a2903003700002003200141206a3602c0072003200341c8086a3602d806200341d8066a200341b8076a10e903200320083602d806200341d8066a200341b8076a10e903200341b8076a200710b00420032802f40820032802fc08200341b8076a10d5032006200920032802b807220220032802c00710a702024020032802bc07450d002002102c0b0240200328029c07450d002006102c0b024020032802ec082202450d00200241186c450d0020032802e808102c0b20032802f80841ffffffff0371450d2020032802f408102c0c200b200328029c07450d1f2001102c0c1f0b200141046a2802002101200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da02450d00200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c350b200341d8066a41186a22024200370300200341d8066a41106a22064200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41f4b7c200410e10c5012002200341a8066a41086a290000370300200620032900a806370300200320013602c808200341d8066a4120200341c8086a410410a702200041186a41003a000020004200370308200020032800e8043600192000411c6a200341eb046a280000360000200042003703000c340b200141046a2802002107200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da02450d00200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c340b200341d8066a41186a22024200370300200341d8066a41106a22014200370300200341d8066a41086a22064200370300200342003703d80620034198086a41e6dcc700410710c501200620034198086a41086a220829000037030020032003290098083703d806200341a8066a41f4b7c200410e10c5012002200341a8066a41086a2209290000370300200120032900a806370300200341d8006a200341d8066a412010c601200328025c210a2003280258210b200242003703002001420037030020064200370300200342003703d80620034198086a41e6dcc700410710c5012006200829000037030020032003290098083703d806200341a8066a41f4b7c200410e10c50120022009290000370300200120032900a8063703002003200a4100200b1b20076a3602c808200341d8066a4120200341c8086a410410a702200041186a41003a000020004200370308200020032800e8043600192000411c6a200341eb046a280000360000200042003703000c330b20012d00012101200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da020d00200341d8066a41186a22024200370300200341d8066a41106a22064200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a220829000037030020032003290098083703d806200341a8066a41f4b7c200410e10c5012002200341a8066a41086a2209290000370300200620032900a806370300200341e0006a200341d8066a412010c6012003280264210a2003280260210b200242003703002006420037030020074200370300200342003703d80620034198086a41e6dcc700410710c5012007200829000037030020032003290098083703d806200341a8066a41f4b7c200410e10c50120022009290000370300200620032900a8063703002003200a4100200b1b220241e4006e20016c200241e4007020016c220141e4006e41ff0120014180c801491b200141e4007041324b6a41ff01716a20026a3602c808200341d8066a4120200341c8086a410410a702200041186a41003a000020004200370308200020032800e8043600192000411c6a200341eb046a280000360000200042003703000c330b200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c320b200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da02450d00200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c320b200341d8066a41186a22024200370300200341d8066a41106a22014200370300200341d8066a41086a22064200370300200342003703d80620034198086a41e6dcc700410710c501200620034198086a41086a29000037030020032003290098083703d806200341a8066a41d8bfc200410810c5012002200341a8066a41086a290000370300200120032900a806370300200341d8066a4102108e04200041186a41003a000020004200370308200020032800e8043600192000411c6a200341eb046a280000360000200042003703000c310b200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da02450d00200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c310b200341d8066a41186a22024200370300200341d8066a41106a22014200370300200341d8066a41086a22064200370300200342003703d80620034198086a41e6dcc700410710c501200620034198086a41086a29000037030020032003290098083703d806200341a8066a41d8bfc200410810c5012002200341a8066a41086a290000370300200120032900a806370300200341d8066a4101108e04200041186a41003a000020004200370308200020032800e8043600192000411c6a200341eb046a280000360000200042003703000c300b2001410c6a2802002107200141086a2802002106200141046a2802002101200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da020d00200320073602d008200320013602c808200320063602cc08200341d8066a41186a22024200370300200341d8066a41106a22074200370300200341d8066a41086a22084200370300200342003703d80620034198086a41e6dcc700410710c501200820034198086a41086a29000037030020032003290098083703d806200341a8066a41ccb8c200410d10c5012002200341a8066a41086a290000370300200720032900a806370300200341d8066a200341c8086a10b1040240200641ffffff3f71450d002001102c0b200041186a41003a000020004200370308200020032800e8043600192000411c6a200341eb046a280000360000200042003703000c300b02402006450d002001450d00200641ffffff3f71450d002001102c0b200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c2f0b200141246a2802002106200341e8046a41186a200141196a290000370300200341e8046a41106a200141116a290000370300200341e8046a41086a200141096a290000370300200320012900013703e804200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c808200341c8086a10da020d04200341c8086a200341e8046a200610ae0420034198076a41026a220120032d00cb083a0000200320032f00c9083b019807024020032d00c80822024104460d0020032902cc082104200341a8066a41026a20012d00003a0000200320032f0198073b01a8060c180b200342f3e885db96cddbb3203703e807200341e8076a200341e8046a10af04200041186a41003a000020004200370308200020032800b8073600192000411c6a200341bb076a280000360000200042003703000c2e0b200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da02450d00200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c2e0b200341d8066a41186a22024200370300200341d8066a41106a22014200370300200341d8066a41086a22064200370300200342003703d80620034198086a41e6dcc700410710c501200620034198086a41086a29000037030020032003290098083703d806200341a8066a41d8bfc200410810c5012002200341a8066a41086a290000370300200120032900a806370300200341d8066a4103108e04200041186a41003a000020004200370308200020032800e8043600192000411c6a200341e8046a41036a280000360000200042003703000c2d0b200141046a280200211c2002411a6a2901002104200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210e200241126a2f01002114200241116a2d00002115200241106a2d000021162002410e6a2f0100211a2002410d6a2d000021192002410c6a2d0000211b2002410a6a2f0100211d200241096a2d0000211e200241086a2d0000211f200241066a2f01002120200241056a2d00002121200241046a2d00002122200241026a2f01002123200141106a28020021242001410c6a2802002118200141086a28020021172002280224210120022d0001210720022d000022060d0120012001280200417f6a2202360200200320043703e807024020020d002001280208200128020c2802001102000240200128020c280204450d002001280208102c0b200141046a22022002280200417f6a220236020020020d002001102c0b200320043703d007200320083a00cf07200320093a00ce072003200a3b01cc072003200b3a00cb072003200e3a00ca07200320143b01c807200320153a00c707200320163a00c6072003201a3b01c407200320193a00c3072003201b3a00c2072003201d3b01c0072003201e3a00bf072003201f3a00be07200320203b01bc07200320213a00bb07200320223a00ba07200320233b01b8070240200741ff0171450d00200341f2046a200341c0076a290300370100200341fa046a200341c8076a29030037010020034182056a200341d0076a290300370100200320073a00e904200341003a00e804200320032903b8073701ea04200341c8086a200341e8046a10c70220032d00c80821060c150b41022106200341023a00c8080c140b200141246a280200210e200341e8076a41206a2208200241206a280200360200200341e8076a41186a2209200241186a290200370300200341e8076a41106a220a200241106a290200370300200341e8076a41086a220b200241086a290200370300200320022902003703e8072002280224210220034198076a41186a200141196a29000037030020034198076a41106a200141116a29000037030020034198076a41086a200141096a2900003703002003200129000137039807200341b8076a41186a22064200370300200341b8076a41106a22014200370300200341b8076a41086a22074200370300200342003703b80720034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703b807200341a8066a41a08ec100411110c5012006200341a8066a41086a290000370300200120032900a806370300200341c8036a200341b8076a1089040240024020032802c803417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b290300370300200320032903e8073703c808200320023602ec08200341e8046a200341c8086a10c60220032d00e8044101470d01200341023a00e8030c130b200341e8036a411d10a80420022002280200417f6a220136020020010d112002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d112002102c0c110b20034198046a41186a20034198076a41186a29030037030020034198046a41106a20034198076a41106a29030037030020034198046a41086a20034198076a41086a290300370300200320032903980737039804200341b8076a41186a4200370300200341b8076a41106a4200370300200341b8076a41086a22024200370300200342003703b80720034198086a41e6dcc700410710c501200220034198086a41086a29000037030020032003290098083703b807200341a8066a41ccbac200410a10c501200141086a200341a8066a41086a290000370000200120032900a806370000200341c0036a200341b8076a412010c60120032802c003450d0a024020032802c4032202200e490d00200341d0076a4200370300200341c8076a4200370300200341b8076a41086a22064200370300200342003703b80720034198086a41e6dcc700410710c501200620034198086a41086a29000037030020032003290098083703b807200341a8066a41a0b7c200410c10c501200141086a200341a8066a41086a290000370000200120032900a806370000200341b8036a200341b8076a412010c6010240200e4100200220032802bc0341d40020032802b8031b6b2201200120024b1b2208490d0020034198086a41e6dcc700410710c501200341d8066a41acbec200411310c5012003200e3602a806200341b8076a200341a8066a410410c701200341c8086a410c6a200341a8066a41046a360200200320063602cc082003200341a8066a3602d0082003200341b8076a3602c808200341e8046a200341c8086a107e20032802f004220241206a2201417f4c0d1f0240024020010d00410121060c010b200110322206450d210b200341003602d008200320013602cc08200320063602c808200341c8086a4100411010c80120032802c80820032802d00822016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602d008200341c8086a2001411010c80120032802c80820032802d00822016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602d00820032802e8042101200341c8086a2006200210c80120032802c808220620032802d00822076a2001200210c9081a2003200720026a22023602d008024020032802ec04450d002001102c0b200341a0036a2006200210d301200341a0036a41106a290300210420032903a803210520032802a0032102024020032802cc08450d002006102c0b02402002450d0020034198086a41e6dcc700410710c501200341d8066a419099c100410610c501200341c8086a20034198046a10e40220032802d008220241206a2201417f4c0d200240024020010d00410121060c010b200110322206450d220b41002107200341003602b006200320013602ac06200320063602a806200341a8066a4100411010c80120032802a80620032802b00622016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602b006200341a8066a2001411010c80120032802a80620032802b00622016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602b00620032802c8082101200341a8066a2006200210c80120032802a806220620032802b00622096a2001200210c9081a2003200920026a22023602b006024020032802cc08450d002001102c0b200341c8086a2006200210c901200341b8076a41086a200341c8086a41096a290000370300200341b8076a41106a200341c8086a41116a290000370300200341d0076a2201200341e1086a290000370300200320032900c9083703b807024020032d00c8084101470d00200341f0046a200341b8076a41096a290000370300200341f8046a200341b8076a41116a290000370300200341ff046a2001290000370000200320032900b9073703e80420032d00b8072102410121070b024020032802ac06450d002006102c0b2007450d0e200341f8066a41176a2201200341e8046a41176a290000370000200341f8066a41106a2206200341e8046a41106a290300370300200341c9046a200341f0046a290300370000200341d1046a2006290300370000200341d8046a2001290000370000200320023a00c004200320032903e8043700c10420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341b8076a200341c0046a10d50220032802c007220241206a2201417f4c0d200240024020010d00410121060c010b200110322206450d220b2003410036028007200320013602fc06200320063602f806200341f8066a4100411010c80120032802f80620032802800722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a220136028007200341f8066a2001411010c80120032802f80620032802800722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602800720032802b8072101200341f8066a2006200210c80120032802f806220620032802800722076a2001200210c9081a2003200720026a220236028007024020032802bc07450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a22072003419c096a2802003602002003200341fc086a2902003703b80720032802e8082209450d0f200341c8086a41186a290300210c200341c8086a41086a290300210d200341f8086a280200210a200341f4086a2802002101200341f0086a280200210b20032903d808210f20032903c808211020032802ec082114200341a8066a41206a2007280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a2207200341b8076a41086a290300370300200320032903b8073703a806024020032802fc06450d002006102c0b200341e8046a41186a200c37030020034198056a200a36020020034190056a200b3602002003418c056a20143602002003419c056a220620032903a806370200200341a4056a2007290300370200200341ac056a2002290300370200200341b4056a200341a8066a41186a290300370200200341bc056a200341c8066a2802003602002003200f3703f804200320103703e804200320013602940520032009360288052003200d3703f00420062802002207450d102007417f6a210a410021064100210202400240034002400240024002400240024020072002460d002008200128020022094b0d0102402006450d00200220066b220b20074f0d03200120064102746b220b2802002114200b2009360200200120143602000c040b41002106200a2002460d040c050b2007200741f48ac500103f000b200641016a21060c010b200b200741e48ac500103f000b200a2002470d0120060d030b200328029c0521070c030b200241016a2102200141046a21010c000b0b200720066b2102200328029c0522072002490d002003200236029c05200221070b4100210220032802940521090240024020070e021301000b4100210220072101034020022001410176220620026a2208200e200920084102746a280200491b2102200120066b220141014b0d000b0b0240200e200920024102746a2802002201460d0020072002200e20014b6a22024f0d12200220071044000b200341e8036a410f10a8040c120b200341e8036a410c10a8040c120b200341e8036a410c10a8040c110b200341e8036a410c10a8040c100b200241226a2f01002102200341c8086a41156a200b3a0000200341c8086a41146a200e3a0000200341c8086a41126a20143b0100200341c8086a41116a20153a0000200341c8086a41106a20163a0000200341c8086a410e6a201a3b0100200341c8086a410d6a20193a0000200341c8086a410c6a201b3a0000200341c8086a410a6a201d3b0100200341c8086a41096a201e3a0000200341c8086a41086a201f3a0000200320043702ec07200320083a00eb07200320093a00ea072003200a3b01e807200320203b01ce08200320213a00cd08200320223a00cc08200320233b01ca08200320073a00c908200320063a00c808200341e6086a200341e8076a41086a280200360100200341c8086a41166a20032903e807370100200341c8086a41226a20023b0100200320013602ec080c120b410221020c120b200341023a00e8030c140b200341023a00f8060c150b200341023a00f8060c240b200141d8016a2f01002108200141d4016a2802002109200141d0016a280200210a2001410c6a280200210b200141086a2802002106200141046a2802002107200341e8046a200141106a41c00110c9081a200341a8066a41286a220e20014188026a290300370300200341a8066a41206a221420014180026a290300370300200341a8066a41186a2215200141f8016a290300370300200341a8066a41106a2216200141f0016a290300370300200341a8066a41086a2217200141e8016a2903003703002003200141e0016a2903003703a806200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c808024002400240200341c8086a10cc020d002003200b3602c804200320063602c404200320073602c004200341c8086a200341e8046a41c00110c9081a200341b8076a41286a200e290300370300200341b8076a41206a2014290300370300200341b8076a41186a2015290300370300200341b8076a41106a2016290300370300200341b8076a41086a2017290300370300200320032903a8063703b807200341e8076a200341c0046a200341c8086a4102200341b8076a200a2009200810b20420032903e8074201510d022003200328008108360298072003200341e8076a411c6a28000036009b0720032003280298073602b8072003200328009b073600bb07200341e8076a41106a290300210420032903f0072105200041186a200341e8076a41186a2d00003a0000200041106a200437030020002005370308200020032802b8073600192000411c6a20032800bb07360000420021040c010b200341e8046a10e90102402006450d002007450d00200641ffffffff0771450d002007102c0b20032003280298073602b8072003200328009b073600bb0720032003290098043703c80820032003419f046a2800003600cf08200041186a41003a000020004200370308200020032802b8073600192000411c6a20032800bb07360000200041206a41023a0000200020032903c808370021200041286a20032800cf08360000420121040b200020043703000c260b200341c8086a41206a20034190086a290300370300200341c8086a41186a200341e8076a41206a290300370300200341c8086a41106a200341e8076a41186a290300370300200341d0086a200341e8076a41106a290300370300200320032903f0073703c80841b99dc300418002200341c8086a41bc9fc30041cc9fc3001040000b200141d8016a2f01002108200141d4016a2802002109200141d0016a280200210a2001410c6a280200210b200141086a2802002106200141046a2802002107200341e8046a200141106a41c00110c9081a200341e8076a41286a220e20014188026a290300370300200341e8076a41206a221420014180026a290300370300200341e8076a41186a2215200141f8016a290300370300200341e8076a41106a2216200141f0016a290300370300200341e8076a41086a2217200141e8016a2903003703002003200141e0016a2903003703e807200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c808200341b8076a200341c8086a10c60202400240024020032d00b8074101470d00200341a8066a41206a41023a0000200341a8066a41186a41003a0000200342003703b006200342013703a806200341e8046a10e90102402006450d002007450d00200641ffffffff0771450d002007102c0b200341b0066a21020c010b2003200b3602a0042003200636029c042003200736029804200341c8086a200341e8046a41c00110c9081a200341b8076a41286a200e290300370300200341b8076a41206a2014290300370300200341b8076a41186a2015290300370300200341b8076a41106a2016290300370300200341b8076a41086a2017290300370300200320032903e8073703b807200341a8066a20034198046a200341c8086a4101200341b8076a200a2009200810b204200341a8066a41086a210220032903a8064201520d010b200341c0046a41206a200241206a2903002204370300200341c0046a41186a200241186a2903002205370300200341c0046a41106a200241106a290300220c370300200341c0046a41086a200241086a290300220d37030020032002290300220f3703c004200041286a2004370300200041206a2005370300200041186a200c370300200041106a200d3703002000200f370308200042013703000c250b200341c0046a41106a200241106a2903002204370300200341c0046a41086a200241086a290300220537030020032002290300220c3703c004200041186a2004370300200041106a20053703002000200c370308200042003703000c240b200141246a28020021092002280224210220034180056a200141196a290000370300200341f8046a200141116a290000370300200341f0046a200141096a290000370300200320012900013703e80420034198086a41c1dcc700410610c501200341d8066a41acc8c700410710c501200341c8086a200341e8046a10d50220032802d008220141206a2206417f4c0d150240024020060d00410121070c010b200610322207450d170b200341003602f007200320063602ec07200320073602e807200341e8076a4100411010c80120032802e80720032802f00722066a2207200329009808370000200741086a20034198086a41086a2900003700002003200641106a22063602f007200341e8076a2006411010c80120032802e80720032802f00722066a220720032900d806370000200741086a200341d8066a41086a2900003700002003200641106a22073602f00720032802c8082106200341e8076a2007200110c80120032802e807220720032802f00722086a2006200110c9081a2003200820016a22013602f007024020032802cc08450d002006102c0b200341c8086a2007200110d602200341c8086a41106a2903002105200341e8086a290300210c200341e0086a290300210d20032903d008210f20032903c8082104024020032802ec07450d002007102c0b0240024002400240024020044201520d00200f200d842005200c84844200520d010b200341c8086a200341e8046a200910ae042003419a076a220120032d00cb083a0000200320032f00c9083b01980720032d00c80822064104470d01200342f3e885db96cddbb3203703a806200341a8066a200341e8046a10af0420022002280200417f6a2201360200200341043a00b80720010d032002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d032002102c0c030b200341b8076a410b10a8040c010b20032902cc082104200320063a00b807200320032f0198073b00b907200320043702bc07200320012d00003a00bb070b20022002280200417f6a2201360200024020010d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b20032d00b8074104460d0020032802b8072102200020032902bc07370024200041206a2002360000200041186a41003a000020004200370308200042013703000c240b20004200370308200020032800c004360019200041186a41003a00002000411c6a200341c3046a280000360000200042003703000c230b200141046a2802002107200341c8086a41206a200241206a290200370300200341c8086a41186a200241186a290200370300200341c8086a41106a200241106a290200370300200341c8086a41086a200241086a290200370300200320022902003703c8080240200341c8086a10da020d00200341d8066a41186a22024200370300200341d8066a41106a22064200370300200341d8066a41086a22014200370300200342003703d80620034198086a41e6dcc700410710c501200120034198086a41086a29000037030020032003290098083703d806200341a8066a41ccbac200410a10c5012002200341a8066a41086a290000370300200620032900a806370300200341e0036a200341d8066a412010c601024020032802e0034101470d0020032802e4032101200341f0066a22094200370300200341e8066a220a4200370300200341d8066a41086a22084200370300200342003703d80620034198086a41e6dcc700410710c501200820034198086a41086a220b29000037030020032003290098083703d806200341a8066a41a0b7c200410c10c501200641086a220e200341a8066a41086a2214290000370000200620032900a806370000200341d8036a200341d8066a412010c60102404100200120032802dc0341d40020032802d8031b6b2202200220014b1b22024100200120076b2215201520014b1b22014f0d00034020021094042001200241016a2202470d000b0b20094200370300200a420037030020084200370300200342003703d80620034198086a41e6dcc700410710c5012008200b29000037030020032003290098083703d806200341a8066a41a0b7c200410c10c501200e2014290000370000200620032900a806370000200320073602c808200341d8066a4120200341c8086a410410a7020b20004200370308200020032800e804360019200041186a41003a00002000411c6a200341eb046a280000360000200042003703000c230b200341b8076a41026a200341e8076a41026a2d000022023a0000200320032f00e80722013b01b807200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c220b200141106a2903002104200141086a290300210d20034198046a41206a2208200241206a28020036020020034198046a41186a2209200241186a29020037030020034198046a41106a220a200241106a29020037030020034198046a41086a220b200241086a290200370300200320022902003703980420022802242102200341d8066a41186a22014200370300200341d8066a41106a22064200370300200341d8066a41086a22074200370300200342003703d80620034198086a41e6dcc700410710c501200720034198086a41086a29000037030020032003290098083703d806200341a8066a41a08ec100411110c5012001200341a8066a41086a2207290000370300200620032900a806370300200341d0036a200341d8066a10890402400240024020032802d003417d710d00200341c8086a41206a2008280200360200200341c8086a41186a2009290300370300200341c8086a41106a200a290300370300200341c8086a41086a200b29030037030020032003290398043703c808200320023602ec08200341e8046a200341c8086a10c6022007200341f1046a290000370300200341a8066a41106a200341e8046a41116a290000370300200341a8066a41186a20034181056a290000370300200320032900e9043703a80620032d00e8044101470d01410221010c020b200341c8086a411d10a804200320032900c9083703e8032003200341c8086a41086a2800003600ef0320032d00c808210120022002280200417f6a220636020020060d012002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22062006280200417f6a220636020020060d012002102c0c010b20034198076a41186a200341a8066a41186a29030037030020034198076a41106a200341a8066a41106a29030037030020034198076a41086a200341a8066a41086a290300370300200320032903a8063703980720034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341e8046a20034198076a10d50220032802f004220241206a2201417f4c0d140240024020010d00410121060c010b200110322206450d160b2003410036028007200320013602fc06200320063602f806200341f8066a4100411010c80120032802f80620032802800722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a220136028007200341f8066a2001411010c80120032802f80620032802800722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602800720032802e8042101200341f8066a2006200210c80120032802f806220620032802800722076a2001200210c9081a2003200720026a220236028007024020032802ec04450d002001102c0b200341c8086a2006200210d803200341b8076a41086a20034184096a290200370300200341b8076a41106a2003418c096a290200370300200341b8076a41186a220220034194096a290200370300200341b8076a41206a22082003419c096a2802003602002003200341fc086a2902003703b807024020032802e8082207450d00200341c8086a41186a2903002111200341c8086a41086a2903002125200341f8086a280200210a200341f4086a280200210b200341f0086a280200210120032903d808210f20032903c808212620032802ec082109200341a8066a41206a2008280200360200200341a8066a41186a2002290300370300200341a8066a41106a2202200341b8076a41106a290300370300200341a8066a41086a2208200341b8076a41086a290300370300200320032903b8073703a806024020032802fc06450d002006102c0b200341c0046a41106a20022903002205370300200341e8076a41086a2008290300370300200341e8076a41106a2005370300200341e8076a41186a2202200341a8066a41186a290300370300200341e8076a41206a2206200341a8066a41206a280200360200200320032903a8063703e807024002402001450d00200341e8046a41206a2006280200360200200341e8046a41186a2002290300370300200341e8046a41106a200341e8076a41106a290300370300200341e8046a41086a200341e8076a41086a290300370300200320032903e8073703e804200141186c20076a41686a2102420021124200211302400340024020010d00200f2110410021010c020b02402002290300221020127c2205200d58200241086a290300222720137c2005201054ad7c220c200458200c20045122061b0d0020022010200d20127d22057d37030020022027200420137d200d201254ad7d22047d2010200554ad7d370308201120047c200f20057c2210200f54ad7c21110c020b2001417f6a2101201120277c200f20107c2210200f54ad7c2111200241686a21022010210f20052112200c21132005200d54200c20045420061b0d000b0b200341f8086a200a360200200341f0086a2001360200200341ec086a2009360200200341fc086a20032903e804370200200320103703d808200341c8086a41186a201137030020034184096a200341e8046a41086a22022903003702002003418c096a200341f8046a29030037020020034194096a200341e8046a41186a2903003702002003419c096a200341e8046a41206a280200360200200320263703c8082003200b3602f408200320073602e808200320253703d00820104280c8afa0255441002011501b450d01200341e8046a410810a804200320032900e9043703e803200320022800003600ef0320032d00e8042101024020032802ec082202450d00200241186c450d0020032802e808102c0b20032802f80841ffffffff0371450d0320032802f408102c0c030b200341c8086a410a10a804200320032900c9083703e8032003200341d0086a2800003600ef0320032d00c808210102402009450d00200941186c450d002007102c0b200a450d02200b450d02200a41ffffffff0371450d02200b102c0c020b200342f3e885db96cddbb3203703a806200341a8066a20034180096a2026202510ab0420034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341e8046a20034198076a10d50220032802f004220241206a2201417f4c0d150240024020010d00410121060c010b200110322206450d170b200341003602c007200320013602bc07200320063602b807200341b8076a4100411010c80120032802b80720032802c00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602c007200341b8076a2001411010c80120032802b80720032802c00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602c00720032802e8042101200341b8076a2006200210c80120032802b807220620032802c00722076a2001200210c9081a2003200720026a22023602c007024020032802ec04450d002001102c0b20062002200341c8086a10ac04024020032802bc07450d002006102c0b20033502f00842d086037e2104024020032802ec082202450d00200241186c450d0020032802e808102c0b20044280f3e893017c2104024020032802f80841ffffffff0371450d0020032802f408102c0b200320032800900436028804200320034193046a28000036008b04200041186a41003a0000200041106a20043703002000420137030820002003280288043600192000411c6a200328008b04360000200042003703000c230b024020032802fc06450d002006102c0b200341c8086a410110a804200320032900c9083703e8032003200341d0086a2800003600ef0320032d00c80821010b200320032800900436028804200320032903e8033703f803200320032800ef033600ff03200320034193046a28000036008b04200041186a41003a00002000420037030820002003280288043600192000411c6a200328008b04360000200041206a20013a0000200020032903f803370021200041286a20032800ff03360000200042013703000c210b200341e8036a410c10a8040c050b200341e8036a410210a8040c040b024020032802fc06450d002006102c0b200341e8036a410110a8040c030b4100210220032802940521090b02402007200328029805470d0020034194056a2007410110950220032802940521090b200920024102746a220141046a2001200720026b41027410ca081a2001200e3602002003200741016a36029c05200341b8076a200e200341a0056a2209109904200341c8086a20032802b807220220032802c00710a4040240024020032802e80822170d0042002110410021164108211741002115420021114200210d4200210f0c010b200341d0086a290300210f200341e0086a2903002111200341f0086a280200211520032903c808210d20032903d808211020032802ec0821160b024020032802bc07450d002002102c0b20034198086a41e6dcc700410710c501200341d8066a418a99c100410610c501200341c8086a200341c0046a10d50220032802d008220241206a2201417f4c0d0e0240024020010d00410121060c010b200110322206450d100b200341003602c007200320013602bc07200320063602b807200341b8076a4100411010c80120032802b80720032802c00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602c007200341b8076a2001411010c80120032802b80720032802c00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602c00720032802c8082101200341b8076a2006200210c80120032802b807220620032802c00722076a2001200210c9081a2003200720026a22023602c007024020032802cc08450d002001102c0b20062002200341e8046a10ac04024020032802bc07450d002006102c0b20034198086a41e6dcc700410710c501200341a8066a419b92c100411010c5012003200e36029004200341d8066a20034190046a410410c701200341d4086a20034190046a41046a3602002003200341e0066a3602cc08200320034190046a3602d0082003200341d8066a3602c808200341b8076a200341c8086a107e20032802c007220241206a2201417f4c0d0e0240024020010d00410121060c010b200110322206450d100b200341003602e006200320013602dc06200320063602d806200341d8066a4100411010c80120032802d80620032802e00622016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602e006200341d8066a2001411010c80120032802d80620032802e00622016a220620032900a806370000200641086a200341a8066a41086a2900003700002003200141106a22063602e00620032802b8072101200341d8066a2006200210c80120032802d806220620032802e00622076a2001200210c9081a2003200720026a22023602e006024020032802bc07450d002001102c0b200341c8086a2006200210cc03200341b8076a41086a200341c8086a410c6a290200370300200320032902cc083703b8070240024020032802c8084101460d0041002114200341f8066a410c6a4100360200200342003703f8060c010b200341f8066a41086a200341b8076a41086a290300370300200320032903b807220c3703f806200ca721140b024020032802dc06450d002006102c0b200341f8066a41047221180240024020032802fc06220a450d0020034180076a280200210b0340200a41046a2106200a41346a2101200a2f013221084100210202400240034020082002460d0120092001412010cc082207450d02200141206a2101200641046a2106200241016a21022007417f4a0d000b2002417f6a21080b200b450d02200b417f6a210b200a20084102746a4194036a280200210a0c010b0b200628020022010d010b200341043a00e803201810cf032016450d01201641306c450d012017102c0c010b0240024020144101201441014b1b2202418094ebdc036e2002418094ebdc03704100476a22064101200641014b1b220620024b0d0020034188036a20052004428094ebdc03420010c708200341f8026a20052004428094ebdc03420010c808200341e8026a20032903f802200341f8026a41086a2903002002200120022001491b20066ead428094ebdc037e200220066ead8042ffffffff0f832204420010ce08200341c8086a200e20034198046a109b0420034198036a20032802c808220120032802d008109a04200341e8026a41086a29030020032903e802220520042003290388037e2204428094ebdc0380a72004428094ebdc03824280cab5ee01566aad7c2204200554ad7c2105200328029c0341002003280298031b2102024020032802cc08450d002001102c0b200341c0026a20042005428094ebdc03420010c708200341b0026a20042005428094ebdc03420010c808200341a0026a20032903b002200341b0026a41086a2903002002ad220c420010ce0820034190026a200420032903a002221220032903c002200c7e220c428094ebdc0380a7417f200c428080808080c0b2cd3b541b200c428094ebdc03824280cab5ee01566aad7c220c7d22132005200341a0026a41086a290300200c201254ad7c22277d2004200c54ad7d2204428094ebdc03420010c70820034180026a20132004428094ebdc03420010c80820102011200d200f10b3042102200341f0016a200329038002221020034180026a41086a29030022112002ad2204420010ce08200341d0026a200920032903f0012205200329039002221220047e2204428094ebdc0380a7417f2004428080808080c0b2cd3b541b2004428094ebdc03824280cab5ee01566aad7c2204200c7c220c200341f0016a41086a2903002004200554ad7c20277c200c200454ad7c10b404200341d0026a41106a290300210420032903d8022105024020032903d002220ca74101470d0020034180096a2004370300200341f8086a2005370300200341c8086a41086a41013a0000200341d9086a200341a8056a290300370000200341e1086a200341b0056a290300370000200341e9086a200341b8056a290300370000200341033602c808200320032903a0053700d108200341c8086a10c802200341d0076a22024200370300200341b8076a41106a22014200370300200341b8076a41086a22064200370300200342003703b80720034198086a41d4dcc700410810c501200620034198086a41086a220829000037030020032003290098083703b807200341d8066a41bba8c700410d10c5012002200341d8066a41086a2209290000370300200120032900d806370300200341c0016a200341b8076a412010d301200341c0016a41106a290300210c20032903c801211320032802c0012107200242003703002001420037030020064200370300200342003703b80720034198086a41d4dcc700410810c5012006200829000037030020032003290098083703b807200341d8066a41bba8c700410d10c50120022009290000370300200120032900d8063703002003427f200c420020071b220c20047c2013420020071b220420057c22052004542202ad7c220420022004200c542004200c511b22021b3703d0082003427f200520021b3703c808200341b8076a4120200341c8086a411010a7020c020b200c4201520d01200341d0076a22024200370300200341b8076a41106a22014200370300200341b8076a41086a22064200370300200342003703b80720034198086a41d4dcc700410810c501200620034198086a41086a220829000037030020032003290098083703b807200341d8066a41bba8c700410d10c5012002200341d8066a41086a2209290000370300200120032900d806370300200341d8016a200341b8076a412010d301200341d8016a41106a290300210c20032903e001211320032802d8012107200242003703002001420037030020064200370300200342003703b80720034198086a41d4dcc700410810c5012006200829000037030020032003290098083703b807200341d8066a41bba8c700410d10c50120022009290000370300200120032900d8063703002003427f200c420020071b220c20047c2013420020071b220420057c22052004542202ad7c220420022004200c542004200c511b22021b3703d0082003427f200520021b3703c808200341b8076a4120200341c8086a411010a7020c010b41f0bcc300411941f8acc800103c000b02402015450d002017201541306c6a210a200341d1086a2107200341b8076a41106a210120034180096a211520172102034020034198016a201020112002290300200241086a290300200d200f10b304ad2204420010ce08200341a8016a200241106a22062003290398012205201220047e2204428094ebdc0380a7417f2004428080808080c0b2cd3b541b2004428094ebdc03824280cab5ee01566aad7c220420034198016a41086a2903002004200554ad7c10b404200341a8016a41106a290300210420032903b00121050240024020032903a801220ca74101470d00200341d8066a41186a200241286a2209290000370300200341d8066a41106a200241206a220b290000370300200341d8066a41086a2208200241186a2202290000370300200320062900003703d8062006290000210c20022900002113200b2900002127200341a8066a41186a22022009290000370300200341a8066a41106a22092027370300200341a8066a41086a220b20133703002003200c3703a806200320053703f80820152004370300200341013a00d008200341033602c808200720032903a806370000200741086a200b290300370000200741106a2009290300370000200741186a2002290300370000200341c8086a10c802200341b8076a41186a220b420037030020014200370300200341b8076a41086a22024200370300200342003703b80720034198086a41d4dcc700410810c501200220034198086a41086a220e29000037030020032003290098083703b807200341d8066a41bba8c700410d10c501200141086a22142008290000370000200120032900d806370000200341e8006a200341b8076a412010d301200341e8006a41106a290300210c2003290370211320032802682109200b42003703002001420037030020024200370300200342003703b80720034198086a41d4dcc700410810c5012002200e29000037030020032003290098083703b807200341d8066a41bba8c700410d10c50120142008290000370000200120032900d8063700002003427f200c420020091b220c20047c2013420020091b220420057c22052004542202ad7c220420022004200c542004200c511b22021b3703d0082003427f200520021b3703c808200341b8076a4120200341c8086a411010a7020c010b200c4201520d00200341b8076a41186a2209420037030020014200370300200341b8076a41086a22024200370300200342003703b80720034198086a41d4dcc700410810c501200220034198086a41086a220b29000037030020032003290098083703b807200341d8066a41bba8c700410d10c501200141086a220e200341d8066a41086a2214290000370000200120032900d80637000020034180016a200341b8076a412010d30120034180016a41106a290300210c20032903880121132003280280012108200942003703002001420037030020024200370300200342003703b80720034198086a41d4dcc700410810c5012002200b29000037030020032003290098083703b807200341d8066a41bba8c700410d10c501200e2014290000370000200120032900d8063700002003427f200c420020081b220c20047c2013420020081b220420057c22052004542202ad7c220420022004200c542004200c511b22021b3703d0082003427f200520021b3703c808200341b8076a4120200341c8086a411010a7020b200641206a2202200a470d000b0b200341043a00e803201810cf0302402016450d00201641306c450d002017102c0b0240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d01200328029405102c0c010b0240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d00200328029405102c0b20032d00e8034104460d0120032902ec0321040b20032802e803210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c190b20004200370308200020032800f803360019200041186a41003a00002000411c6a200341fb036a280000360000200042003703000c180b024002400240200641ff01714102460d0020032802ec0822022002280200417f6a2201360200024020010d002002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22012001280200417f6a220136020020010d002002102c0b200341023a00a8060c010b024002402024450d00202441016a21012017210203402001417f6a22014102490d0220022802002106200241046a2207210220062007280200490d000b200341a8066a410e10a8040c020b200341a8066a410510a8040c010b20034198086a41e6dcc700410710c501200341d8066a41f0c0c200411010c5012003201c3602b807200341e8076a200341b8076a410410c701200341d4086a200341b8076a41046a3602002003200341f0076a3602cc082003200341b8076a3602d0082003200341e8076a3602c808200341e8046a200341c8086a107e20032802f004220241206a2201417f4c0d0b0240024020010d00410121060c010b200110322206450d0d0b200341003602d008200320013602cc08200320063602c808200341c8086a4100411010c80120032802c80820032802d00822016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602d008200341c8086a2001411010c80120032802c80820032802d00822016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602d00820032802e8042101200341c8086a2006200210c80120032802c808220620032802d00822076a2001200210c9081a2003200720026a22023602d008024020032802ec04450d002001102c0b200341e8046a2006200210910420032902ec04420020032802e80422021b2104024020032802cc08450d002006102c0b2002410820021b211602400240024002402024410274220a20176a417c6a2802002004422088a722024f0d0041002101417f210620172107034020012007280200220b6a22022004422088a7220e4f0d042016200241d8006c6a220228022c211420022802202115200241306a2802002108200241246a28020021092002200241d8006a2006200e6a200b6b41d8006c10ca081a02402009450d002015450d00200941306c450d002015102c0b02402008450d002014450d00200841ffffff3f71450d002014102c0b200741046a210720044280808080707c2104200641016a21062001417f6a2101200a417c6a220a0d000b02402018450d002017450d00201841ffffffff0371450d002017102c0b20034198086a41e6dcc700410710c501200341d8066a41f0c0c200411010c5012003201c3602b807200341e8076a200341b8076a410410c701200341d4086a200341b8076a41046a3602002003200341f0076a3602cc082003200341b8076a3602d0082003200341e8076a3602c808200341e8046a200341c8086a107e20032802f004220241206a2201417f4c0d0f20010d01410121060c020b200341a8066a410710a80402402002450d00200241d8006c2101201641306a210203400240200241746a2802002206450d00200641306c450d00200241706a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241d8006a2102200141a87f6a22010d000b0b2004a72202450d03200241d8006c450d032016102c0c030b200110322206450d0e0b200341003602f007200320013602ec07200320063602e807200341e8076a4100411010c80120032802e80720032802f00722016a2206200329009808370000200641086a20034198086a41086a2900003700002003200141106a22013602f007200341e8076a2001411010c80120032802e80720032802f00722016a220620032900d806370000200641086a200341d8066a41086a2900003700002003200141106a22063602f00720032802e8042101200341e8076a2006200210c80120032802e807220620032802f00722076a2001200210c9081a2003200720026a22023602f007024020032802ec04450d002001102c0b200341c8086a20162004422088a7220110e3032006200220032802c808220720032802d00810a702024020032802cc08450d002007102c0b024020032802ec07450d002006102c0b02402001450d00201641306a21022004422088a741d8006c210103400240200241746a2802002206450d00200641306c450d00200241706a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241d8006a2102200141a87f6a22010d000b0b02402004a72202450d00200241d8006c450d002016102c0b200341043a00a8060c020b2002200e1047000b02402018450d002017450d00201841ffffffff0371450d002017102c0b20032d00a8064104460d0020032802a8062102200020032902ac06370024200041206a2002360000200041186a41003a000020004200370308200042013703000c180b20004200370308200020032800c004360019200041186a41003a00002000411c6a200341c3046a280000360000200042003703000c170b200341c0046a41026a200341a8066a41026a2d000022013a0000200320032f01a80622063b01c004200041206a20023a0000200041186a41003a000020004200370308200020063b0021200041236a20013a000020002004370024200042013703000c160b200341043a00e8030c020b20032d00e8034104460d0120032902ec0321040b20032802e803210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c130b20004200370308200020032800f803360019200041186a41003a00002000411c6a200341fb036a280000360000200042003703000c120b20032802f806210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c110b20004200370308200020032800e803360019200041186a41003a00002000411c6a200341eb036a280000360000200042003703000c100b20004200370308200020032800e803360019200041186a41003a00002000411c6a200341eb036a280000360000200042003703000c0f0b0240200841ffffff3f71450d002007102c0b0240200a0d00200341013a00f8060240200328028c052202450d00200241186c450d00200328028805102c0b20032802980541ffffffff0371450d04200328029405102c0c040b20032802dc062108200341f0066a4200370300200341e8066a4200370300200341d8066a41086a22014200370300200342003703d80620034198086a41e6dcc700410710c501200120034198086a41086a29000037030020032003290098083703d806200341a8066a41ccbac200410a10c501201741086a200341a8066a41086a290000370000201720032900a806370000200341c0006a200341d8066a412010c6012003280244210b2003280240210e20034198086a41e6dcc700410710c501200341d8066a418893c700410a10c501200341c8086a200341a0056a220910e40220032802d008220141206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b200341003602c007200320063602bc07200320073602b807200341b8076a4100411010c80120032802b80720032802c00722066a2207200329009808370000200741086a20034198086a41086a2900003700002003200641106a22063602c007200341b8076a2006411010c80120032802b80720032802c00722066a220720032900d806370000200741086a200341d8066a41086a2900003700002003200641106a22073602c00720032802c8082106200341b8076a2007200110c80120032802b807220720032802c00722146a2006200110c9081a2003201420016a22013602c007024020032802cc08450d002006102c0b2007200110b401024020032802bc07450d002007102c0b20034198086a41e6dcc700410710c501200341d8066a41b18ec100410a10c501200341c8086a200910e40220032802d008220141206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b200341003602c007200320063602bc07200320073602b807200341b8076a4100411010c80120032802b80720032802c00722066a2207200329009808370000200741086a20034198086a41086a2900003700002003200641106a22063602c007200341b8076a2006411010c80120032802b80720032802c00722066a220720032900d806370000200741086a200341d8066a41086a2900003700002003200641106a22073602c00720032802c8082106200341b8076a2007200110c80120032802b807220920032802c00722076a2006200110c9081a2003200720016a22143602c007024020032802cc08450d002006102c0b200b4100200e1b210b200341003602d008200342013703c808200341c8086a2002108f01200a20024105746a210720032802d0082101200a21020340200341c8086a20014120102f20032802c80820032802d00822066a22012002290000370000200141086a200241086a290000370000200141106a200241106a290000370000200141186a200241186a2900003700002003200641206a22013602d0082007200241206a2202470d000b200341c8086a20014104102f20032802c80820032802d00822026a200b3600002003200241046a22023602d008200341c8086a20024101102f20032802c808220220032802d00822016a41003a00002003200141016a22013602d008200920142002200110a702024020032802cc08450d002002102c0b024020032802bc07450d002009102c0b02402008450d00200841ffffff3f71450d00200a102c0b0240200328028c052202450d00200241186c450d00200328028805102c0b024020032802980541ffffffff0371450d00200328029405102c0b200341043a00f8060c050b103b000b1039000b2008450d002007450d00200841ffffff3f71450d002007102c0b20032d00f8064104460d0120032902fc0621040b20032802f806210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c090b20004200370308200020032800e803360019200041186a41003a00002000411c6a200341eb036a280000360000200042003703000c080b20004200370308200020032800e803360019200041186a41003a00002000411c6a200341eb036a280000360000200042003703000c070b20032d00f8064104460d0120032902fc0621040b20032802f806210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c050b20004200370308200020032800e803360019200041186a41003a00002000411c6a200341eb036a280000360000200042003703000c040b20004200370308200020032800f803360019200041186a41003a00002000411c6a200341fb036a280000360000200042003703000c030b20032d00f8064104460d0120032902fc0621040b20032802f806210220002004370024200041206a2002360000200041186a41003a000020004200370308200042013703000c010b20004200370308200020032800e803360019200041186a41003a00002000411c6a200341eb036a280000360000200042003703000b200341e00a6a24000b960701097f230041d0016b22022400200241086a41e6dcc700410710c50120024198016a418a99c100410610c501200241c0016a200110d5020240024020022802c801220141206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b20024100360290012002200336028c01200220043602880120024188016a4100411010c80120022802880120022802900122036a22042002290008370000200441086a200241086a41086a2900003700002002200341106a22033602900120024188016a2003411010c80120022802880120022802900122036a2204200229009801370000200441086a20024198016a41086a22052900003700002002200341106a22043602900120022802c001210320024188016a2004200110c801200228028801220420022802900122066a2003200110c9081a2002200620016a220136029001024020022802c401450d002003102c0b200241306a2004200110d8032005200241ec006a29020037030020024198016a41106a200241f4006a29020037030020024198016a41186a2203200241fc006a29020037030020024198016a41206a220520024184016a2802003602002002200241e4006a290200370398010240024020022802502207450d00200241e0006a2802002106200241dc006a280200210820022802542101200241086a41206a2005280200360200200241086a41186a2003290300370300200241086a41106a220320024198016a41106a2205290300370300200241086a41086a220920024198016a41086a220a29030037030020022002290398013703080240200228028c01450d002004102c0b200241306a41106a2003290300370300200241306a41086a2009290300370300200241306a41186a200241086a41186a290300370300200241306a41206a200241086a41206a280200360200200a2002413c6a2902003703002005200241c4006a29020037030020024198016a41186a200241cc006a29020037030020022002290308370330200220022902343703980102402001450d00200141186c450d002007102c0b02402006450d002008450d00200641ffffffff0371450d002008102c0b2000200229039801370001200041196a200241b0016a290300370000200041116a200241a8016a290300370000200041096a200241a0016a290300370000410121010c010b0240200228028c01450d002004102c0b410021010b200020013a0000200241d0016a24000f0b103b000b1039000be10101047f230041306b220224000240412010322203450d002002422037020c20022003360208200241086a41004120102f20022802082203200228021022046a22052001290000370000200541086a200141086a290000370000200541106a200141106a290000370000200541186a200141186a2900003700002002200441206a2201360210200241186a2003200110c7012002412c6a200320016a360200200220033602282002200241186a41086a3602242002200241186a3602202000200241206a107e0240200228020c450d002003102c0b200241306a24000f0b1039000bce0201027f230041c0036b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003a00000c010b200328021421042003200341186a2802003602ac03200320013602a803200341e0016a200341a8036a10d804410121020240024020032d00e0014101470d004100210220034100360228200342013703202003410f3602b4032003200341086a3602b0032003200341206a3602bc03200341f4016a4101360200200342013702e401200341b4bcc3003602e0012003200341b0036a3602f001200341bc036a41dcb7c000200341e0016a103e1a200335022842208620033502208410002003280224450d012003280220102c0c010b200341206a200341e0016a41017241c00110c9081a200041016a200341206a41c00110c9081a0b200020023a00002004450d002001102c0b200341c0036a24000b9a0401057f230041e0006b22022400200241086a41ffdcc700410710c501200241186a41b0b5c300410810c50102400240200141086a280200220341046a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200241003602402002200436023c20022005360238200241386a41004104102f2002280238200228024022046a20012800003600002002200441046a36024020012802042003200241386a10ca04200241c8006a200228023822012002280240220410c701200241dc006a200120046a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a107e0240200228023c450d002001102c0b2002280230220441206a2201417f4c0d000240024020010d00410121030c010b200110322203450d020b2000200136020420002003360200200041086a2201410036020020004100411010c8012000280200200128020022036a220520022900083700002001200341106a2203360200200541086a200241086a41086a29000037000020002003411010c8012000280200200128020022036a220520022900183700002001200341106a2206360200200541086a200241186a41086a2900003700002002280228210320002006200410c8012000280200200128020022006a2003200410c9081a2001200020046a3602000240200228022c450d002003102c0b200241e0006a24000f0b103b000b1039000bfb0302057f017e230041f0016b22012400200141a8016a41c1dcc700410610c501200141d8006a41acc8c700410710c501200141106a200010d502024002402001280218220041206a2202417f4c0d000240024020020d00410121030c010b200210322203450d020b20014100360208200120023602042001200336020020014100411010c8012001280200200128020822026a220320012900a801370000200341086a200141a8016a41086a2900003700002001200241106a220236020820012002411010c8012001280200200128020822026a22032001290058370000200341086a200141d8006a41086a22042900003700002001200241106a22023602082001280210210320012002200010c80120012802002202200128020822056a2003200010c9081a2001200520006a220036020802402001280214450d002003102c0b200141d8006a2002200010d60220012903582106200141a8016a200441c40010c9081a0240024020064201510d0041002103200141106a410041c40010cb081a0c010b20012802a4012103200141106a200141a8016a41c40010c9081a0b200141e0006a200141106a41c40010c9082104200141a4016a417f200341016a220520052003491b3602002001420137035820022000200410d80202402001280204450d002002102c0b200141f0016a24000f0b103b000b1039000bfb0302057f017e230041f0016b22012400200141a8016a41c1dcc700410610c501200141d8006a41acc8c700410710c501200141106a200010d502024002402001280218220041206a2202417f4c0d000240024020020d00410121030c010b200210322203450d020b20014100360208200120023602042001200336020020014100411010c8012001280200200128020822026a220320012900a801370000200341086a200141a8016a41086a2900003700002001200241106a220236020820012002411010c8012001280200200128020822026a22032001290058370000200341086a200141d8006a41086a22042900003700002001200241106a22023602082001280210210320012002200010c80120012802002202200128020822056a2003200010c9081a2001200520006a220036020802402001280214450d002003102c0b200141d8006a2002200010d60220012903582106200141a8016a200441c40010c9081a0240024020064201510d0041002103200141106a410041c40010cb081a0c010b20012802a4012103200141106a200141a8016a41c40010c9081a0b200141e0006a200141106a41c40010c9082104200141a4016a41002003417f6a2205200520034b1b3602002001420137035820022000200410d80202402001280204450d002002102c0b200141f0016a24000f0b103b000b1039000bc35908027f017e027f017e017f027e1f7f047e230041a0086b22042400200241106a22052903002106200328021021072003280200210820022903002109200441b4036a200241e8016a290000370200200441bc036a200241f0016a290000370200200441c4036a200241f8016a290000370200200441e7e485f3063602a8032004200241e0016a2900003702ac0320044198056a41106a200328021036020020044198056a41086a200341086a290200370300200420032902003703980520044188066a200441a8036a20044198056a10ce060240024002400240024002400240024020042802c806220a450d00200441e0006a413e6a20044188066a41386a290300370100200441e0006a41366a20044188066a41306a290300370100200441e0006a412e6a20044188066a41286a290300370100200441e0006a41266a20044188066a41206a290300370100200441e0006a411e6a20044188066a41186a290300370100200441e0006a41166a20044188066a41106a290300370100200441e0006a410e6a20044188066a41086a2903003701002004200429038806370166200441d0066a290300210b20042802cc062103200441f8036a200441e0006a41c60010c9081a200441206a41086a200441f8036a410e6a290100370300200441206a41106a200441f8036a41166a290100370300200441206a41186a200441f8036a411e6a290100370300200441206a41206a200441f8036a41266a290100370300200441206a41286a200441f8036a412e6a290100370300200441206a41306a200441f8036a41366a290100370300200441206a41386a200441f8036a413e6a290100370300200420042901fe033703202002290308210c200441e0006a200541f00110c9081a02400240200c4201520d0020044188066a200441e0006a41f00110c9081a024020044188066a410c6a200441f8066a412010cc080d0020042802900620042802f406460d080b200441f4066a21022004419c046a220d20044188066a41086a220541206a28020036020020044194046a220e200541186a2902003702002004418c046a220f200541106a290200370200200441f8036a410c6a200541086a290200370200200441013602f803200420052902003702fc03200429038806210c200441003602b003200442013703a803200c200441f8036a2009200441a8036a109907200441b4066a20042802a80320042802b003200441d8076a220510a6052110024020042802ac03450d0020042802a803102c0b200d200241206a280200360200200e200241186a290200370200200f200241106a29020037020020044184046a200241086a290200370200200441013602f803200420022902003702fc03200429038806210c200441003602b003200442013703a803200c200441f8036a2009200441a8036a10990720044198076a20042802a80320042802b003200510a6052102024020042802ac03450d0020042802a803102c0b20102002710d010c070b20044188066a200441e0006a41f00110c9081a024020044188066a410c6a200441f8066a412010cc080d0020042802900620042802f406460d070b200441f4066a21022004419c046a220d20044188066a41086a220541206a28020036020020044194046a220e200541186a2902003702002004418c046a220f200541106a290200370200200441f8036a410c6a200541086a290200370200200441003602f803200420052902003702fc03200429038806210c200441003602b003200442013703a803200c200441f8036a2009200441a8036a109907200441b4066a20042802a80320042802b003200441d8076a220510a6052110024020042802ac03450d0020042802a803102c0b200d200241206a280200360200200e200241186a290200370200200f200241106a29020037020020044184046a200241086a290200370200200441003602f803200420022902003702fc03200429038806210c200441003602b003200442013703a803200c200441f8036a2009200441a8036a10990720044198076a20042802a80320042802b003200510a6052102024020042802ac03450d0020042802a803102c0b2010200271450d060b2009500d0120044188066a2009427f7c10d907200441186a200428028806220d20042802900610c601200428021c2105200428021821020240200428028c06450d00200d102c0b20024101460d02200441e0006a410610a30520044197066a200441e0006a41086a28020022023600002004200429036037008f06200041186a41003a0000200042003703082000200429008806370019200041216a20044188066a41086a290000370000200041286a2002360000200042013703000c060b200441e0006a410510a30520044197066a200441e0006a41086a28020022023600002004200429036037008f06200041186a41003a0000200042003703082000200429008806370019200041216a20044188066a41086a290000370000200041286a2002360000200042013703000c030b20044188066a420010d907200441086a200428028806220520042802900610c601200428020c210d200428020821020240200428028c06450d002005102c0b4101210e0c010b20044188066a200910d907200441106a200428028806220e20042802900610c6012004280214210d200428021021020240200428028c06450d00200e102c0b4100210e0b024020024101460d00200441e0006a410610a30520044197066a200441e0006a41086a28020022023600002004200429036037008f06200041186a41003a0000200042003703082000200429008806370019200041216a20044188066a41086a290000370000200041286a2002360000200042013703000c030b0240024002400240024002402008200d4b0d0002404102200820054d200e1b22024102460d0020024101710d010b200441003602d802200442013703d0022001411f6a2d000021052001411e6a2d0000210d2001411d6a2d0000210e2001411c6a2d0000210f2001411b6a2d000021102001411a6a2d00002111200141196a2d00002112200141186a2d00002113200141176a2d00002114200141166a2d00002115200141156a2d00002116200141146a2d00002117200141136a2d00002118200141126a2d00002119200141116a2d0000211a2001410f6a2d0000211b2001410e6a2d0000211c2001410d6a2d0000211d2001410c6a2d0000211e2001410b6a2d0000211f2001410a6a2d00002120200141096a2d00002121200141076a2d00002122200141066a2d00002123200141056a2d00002124200141036a2d00002125200141206a2d0000212620012d0010212720012d0008212820012d0004212920012d0002212a20012d0001212b200441d0026a410020012d0000220241014610d60120042802d802210102402002450d0020042802d00220014105746a210203402002411f6a20263a00002002202b41ff0171202a4108747241ffff0371202541ff017120294108747241107472ad202441ff017120234108747241ffff0371202241ff017120284108747241107472ad422086843700002002202141ff017120204108747241ffff0371201f41ff0171201e4108747241107472ad201d41ff0171201c4108747241ffff0371201b41ff017120274108747241107472ad422086843700082002411e6a20053a0000200241106a201a41ff017120194108747241ffff0371201841ff017120174108747241107472ad201641ff017120154108747241ffff0371201441ff017120134108747241107472ad422086843700002002411c6a200e41ff0171200d410874723b0000200241186a201241ff017120114108747241ffff0371201041ff0171200f4108747241107472360000200241206a2102200141016a2101410041ff01710d000b0b200420013602d802200441e0026a41086a22052001360200200420042903d0023703e002200441e0006a41186a200441206a41086a290300370300200441e0006a41206a200441206a41106a290300370300200441e0006a41286a200441206a41186a290300370300200441e0006a41306a2201200441206a41206a290300370300200441e0006a41386a220e200441206a41286a290300370300200441a0016a220f200441206a41306a290300370300200441e0006a41c8006a2210200441206a41386a290300370300200441b8016a200b370300200441b4016a2003360200200441e0006a41d0006a2211200a360200200420063703682004200937036020042004290320370370200420073602c401200420083602c00141d0001032220d450d0320044188066a41086a2212200441e0006a41106a220241086a29030037030020044188066a41106a2213200241106a29030037030020044188066a41186a2214200241186a29030037030020042002290300370388062001290300210c200e290300210b200f290300212c2010290300212d200441f8036a201110a502200d41386a202d370300200d202c370330200d41286a200b370300200d200c370320200d41186a2014290300370300200d41106a2013290300370300200d41086a2012290300370300200d200429038806370300200d20042903f803370340200d41c8006a200441f8036a41086a280200360200200441f0026a41086a2005280200360200200420042903e0023703f0022004410036028005200442013703f804200441f8046a41004108102f20042802f80420042802800522026a20093700002004200241086a220236028005200441f8046a20024108102f20042802f80420042802800522026a20063700002004200241086a36028005200441a8036a41eddcc700410810c501200441f8036a41d4d0c000411210c50120044188066a41edd5c00010a102200428029006220241206a2201417f4c0d040240024020010d00410121050c010b200110322205450d040b200441003602a0052004200136029c05200420053602980520044198056a4100411010c80120042802980520042802a00522016a220520042900a803370000200541086a200441a8036a41086a2900003700002004200141106a22013602a00520044198056a2001411010c80120042802980520042802a00522016a220520042900f803370000200541086a200441f8036a41086a2900003700002004200141106a22053602a005200428028806210120044198056a2005200210c801200428029805220520042802a005220e6a2001200210c9081a2004200e20026a22023602a0050240200428028c06450d002001102c0b20044188066a2005200210f604200429028c06420020042802880622021b210c2002410120021b21100240200428029c05450d002005102c0b2004200c4220883e02fc05200420103602f8052004200441f8056a10870220042802000d012004280204221320042802fc0541306e2202200220134b1bad42307e220b422088a70d04200ba72202417f4c0d040240024020020d00410821110c010b200210322211450d040b200441003602e005200420113602d8052004200241306e22023602dc05410021120240024002402013450d0041002114034020042802fc0522014108490d0320042802f805220e290000210b2004200e41086a3602f8052004200141786a22023602fc0520024108490d03201441016a21142004200141706a220f3602fc052004200e41106a3602f805200e290008212c41002102200441003a00a8062001416f6a21010340200f2002460d0320044188066a20026a200e20026a220541106a2d00003a00002004200541116a3602f8052004200241016a22053a00a806200420013602fc052001417f6a21012005210220054120470d000b200441f8036a41186a220220044188066a41186a290300370300200441f8036a41106a220120044188066a41106a290300370300200441f8036a41086a220e20044188066a41086a29030037030020042004290388063703f803200541ff01714120490d0320044180036a41086a200e290300222d37030020044180036a41106a2001290300222e37030020044180036a41186a2002290300222f370300200441c8046a41186a2201202f370300200441c8046a41106a2205202e370300200441c8046a41086a220e202d370300200420042903f803222d370398052004202d370380032004202d3703c8040240201220042802dc05470d00200441d8056a2012109d0520042802e005211220042802d80521110b2011201241306c6a2202202c3703082002200b370300200220042903c804370310200241186a200e290300370300200241206a2005290300370300200241286a20012903003703002004201241016a22123602e00520142013470d000b20042802dc05210220042802d80521110b2002410020111b210e2012410020111b21052011410820111b21010c040b200241ff0171450d00200441003a00a8060b20042802dc052202450d01200241306c450d0120042802d805102c0c010b200441e0006a410610a30520044197066a200441e0006a41086a28020022023600002004200429036037008f06200041186a41003a0000200042003703082000200429008806370019200041216a20044188066a41086a290000370000200041286a2002360000200042013703000c070b41082101410021054100210e0b20044188066a41edd5c000200441f8046a10a002200441f8036a200428028806220f20042802900610fc0420042902fc03420020042802f80322021b210b2002410120021b211a0240200428028c06450d00200f102c0b20044180036a41206a20053602002004419c036a200e36020020044180036a41106a200b37030020044180036a41086a200441f8046a41086a280200360200200420042903f8043703800320042001360298032004201a36028c03200b422088210b0240200ca7450d002010102c0b200ba7211920044188066a41086a200d41086a29030037030020044188066a41106a200d41106a29030037030020044188066a41186a200d41186a29030037030020044188066a41206a200d41206a29030037030020044188066a41286a2202200d41286a29030037030020044188066a41306a2201200d41306a29030037030020044188066a41386a2205200d41386a290300370300200441f8036a41086a200d41cc006a2802003602002004200d290300370388062004200d2902443703f80302400240200d280240220e0d004100210e0c010b20044198056a41386a220f200529030037030020044198056a41306a2205200129030037030020044198056a41286a2201200229030037030020044198056a41206a220220044188066a41206a29030037030020044198056a41186a221020044188066a41186a29030037030020044198056a41106a221120044188066a41106a29030037030020044198056a41086a221220044188066a41086a290300370300200441f8046a41086a2213200441f8036a41086a280200360200200420042903880637039805200420042903f8033703f804200441a8036a41386a200f290300370300200441a8036a41306a2005290300370300200441a8036a41286a2001290300370300200441a8036a41186a2010290300370300200441a8036a41106a2011290300370300200441a8036a41086a2012290300370300200441e8036a200e360200200420022903003703c80320042004290398053703a803200441ec036a220220042903f804370200200241086a20132802003602002004410036029006200442013703880620044188066a41004108102f20042802880620042802900622026a20093700002004200241086a22023602900620044188066a20024108102f200428028806220120042802900622026a20063700002004419c066a41002900f5d5403702002004200241086a36029006200441002900edd540370294062004200441a8036a3602a406200441c8046a20044188066a10bf060240200428028c06450d002001102c0b20044188066a200441c8046a10a202200428028806220120042802900610ce0221020240200428028c06450d002001102c0b02400240024020020d00200441f8036a200441a8036a41d00010c9081a200441d8056a200441f0026a10a60220044188066a200441f8036a41d00010c9081a20044188066a41d0006a220241086a200441d8056a41086a280200360200200220042903d805370200200441f8036a200441c8046a10a20220042802f803220220042802800420044188066a109205024020042802fc03450d002002102c0b024020042802cc062202450d00200241306c450d0020042802c806102c0b024020042802dc0641ffffff3f71450d0020042802d806102c0b200441f8036a41186a2201200441c8046a41186a290300370300200441f8036a41106a2205200441c8046a41106a290300370300200441f8036a41086a220e200441c8046a41086a290300370300200420042903c8043703f8034100210220042802980321100240024020042802a00322120e020003010b20044188066a41186a200129030037030020044188066a41106a200529030037030020044188066a41086a200e290300370300200420042903f80337038806410021020c030b410021022012210103400240417f20102001410176220e20026a220f41306c6a2211290300220c200952200c2009541b22050d00417f2011290308220c200652200c2006541b21050b2002200f20054101461b21022001200e6b220141014d0d020c000b0b4100210e20042802ec032202450d02200241306c450d0220042802e803102c0c020b024002400240417f2010200241306c6a2205290300220c200952200c2009541b22010d0041ff0121012005290308220c2006540d01200c20065221010b2001450d010b2002200141ff017141ff01466a21020b20044188066a41186a200441f8036a41186a29030037030020044188066a41106a200441f8036a41106a29030037030020044188066a41086a200441f8036a41086a290300370300200420042903f80337038806201220024f0d00200220121044000b02402012200428029c03470d0020044180036a41186a2012109d05200428029403211920042802980321100b2010200241306c6a220141306a2001201220026b41306c10ca081a20012006370308200120093703002001200429038806370310200141186a20044188066a41086a2205290300370300200141206a20044188066a41106a220f290300370300200141286a20044188066a41186a22012903003703004101210e2004201241016a3602a0032001200441f8036a41186a290300370300200f200441f8036a41106a2903003703002005200441f8036a41086a290300370300200420042903f8033703880602402019200428029003470d002004418c036a2019410110d60120042802940321190b200428028c03221a20194105746a2202200429038806370000200241186a2001290300370000200241106a200f290300370000200241086a20052903003700002004201941016a2219360294030b200d41d0006a220220026b220141d0006d210502402001450d00200541d0006c2101200241c0006a210203400240200241046a2802002205450d00200541306c450d002002280200102c0b200241d0006a2102200141b07f6a22010d000b0b200d102c0240200e0d0020044180036a10e707410021100c030b0240024002402019450d002019410574210d200441cc066a2102201a21010340200441f8056a200110a20220044188066a20042802f805220e20042802800610e804200441f8036a41086a220f20044188066a41086a290300370300200441f8036a41106a221020044188066a41106a290300370300200441f8036a41186a221120044188066a41186a290300370300200441f8036a41206a221220044188066a41206a290300370300200441f8036a41286a221320044188066a41286a290300370300200441f8036a41306a221420044188066a41306a290300370300200441f8036a41386a221520044188066a41386a290300370300200441c8046a41086a2216200241086a290200370300200441c8046a41106a2217200241106a290200370300200441c8046a41186a2218200241186a28020036020020042004290388063703f803200420022902003703c804024020042802c8062205450d00200441a8036a41386a2015290300370300200441a8036a41306a2014290300370300200441a8036a41286a2013290300370300200441a8036a41206a2012290300370300200441a8036a41186a2011290300370300200441a8036a41106a2010290300370300200441a8036a41086a200f290300370300200441d8056a41086a2016290300370300200441d8056a41106a2017290300370300200441d8056a41186a2018280200360200200420042903f8033703a803200420042903c8043703d8050b024020042802fc05450d00200e102c0b20050d02200141206a2101200d41606a220d0d000b0b410821104200210b0c010b20044198056a41386a2202200441a8036a41386a29030037030020044198056a41306a220e200441a8036a41306a29030037030020044198056a41286a220f200441a8036a41286a29030037030020044198056a41206a2210200441a8036a41206a29030037030020044198056a41186a2211200441a8036a41186a29030037030020044198056a41106a2212200441a8036a41106a29030037030020044198056a41086a2213200441a8036a41086a290300370300200441f8046a41086a2214200441d8056a41086a290300370300200441f8046a41106a2215200441d8056a41106a290300370300200441f8046a41186a2216200441d8056a41186a280200360200200420042903a80337039805200420042903d8053703f80441e00010322220450d01202020042903980537030020202005360240202020042903f804370244202041386a2002290300370300202041306a200e290300370300202041286a200f290300370300202041206a2010290300370300202041186a2011290300370300202041106a2012290300370300202041086a2013290300370300202041cc006a2014290300370200202041d4006a2015290300370200202041dc006a201628020036020020044281808080103702ec04200420203602e8040240200d4120460d00200141206a2111201a20194105746a221f41606a212220044188066a41c4006a2102410121210340201121010340200441f8056a200110a20220044188066a20042802f805221020042802800610e804200441f8036a41086a220d20044188066a41086a2218290300370300200441f8036a41106a220e20044188066a41106a2219290300370300200441f8036a41186a220f20044188066a41186a221a290300370300200441f8036a41206a221120044188066a41206a221b290300370300200441f8036a41286a221220044188066a41286a221c290300370300200441f8036a41306a221320044188066a41306a221d290300370300200441f8036a41386a221420044188066a41386a221e290300370300200441c8046a41086a2215200241086a290200370300200441c8046a41106a2216200241106a290200370300200441c8046a41186a2217200241186a28020036020020042004290388063703f803200420022902003703c804024020042802c8062205450d00200441a8036a41386a2014290300370300200441a8036a41306a2013290300370300200441a8036a41286a2012290300370300200441a8036a41206a2011290300370300200441a8036a41186a200f290300370300200441a8036a41106a200e290300370300200441a8036a41086a200d290300370300200441d8056a41086a2015290300370300200441d8056a41106a2016290300370300200441d8056a41186a2017280200360200200420042903f8033703a803200420042903c8043703d8050b024020042802fc05450d002010102c0b024020050d00201f200141206a2201470d010c030b0b20044198056a41386a2210200441a8036a41386a29030037030020044198056a41306a2211200441a8036a41306a29030037030020044198056a41286a2212200441a8036a41286a29030037030020044198056a41206a2213200441a8036a41206a29030037030020044198056a41186a2214200441a8036a41186a29030037030020044198056a41106a2215200441a8036a41106a29030037030020044198056a41086a2216200441a8036a41086a290300370300200441f8046a41086a2217200441d8056a41086a290300370300200441f8046a41106a2223200441d8056a41106a290300370300200441f8046a41186a2224200441d8056a41186a280200360200200420042903a80337039805200420042903d8053703f8042018201629030037030020192015290300370300201a2014290300370300201b2013290300370300201c2012290300370300201d2011290300370300201e2010290300370300200420042903980537038806200d2017290300370300200e2023290300370300200f2024280200360200200420042903f8043703f8030240202120042802ec04470d00200441e8046a2021410110940220042802e80421200b200141206a21112020202141e0006c6a2210200429038806370300201041106a2019290300370300201041086a2018290300370300201d290300210c201e290300210b201c290300212c201b290300212d201a290300212e201041c0006a2005360200201041186a202e370300201041206a202d370300201041286a202c370300201041c4006a20042903f803370200201041386a200b370300201041306a200c370300201041cc006a200d290300370200201041d4006a200e290300370200201041dc006a200f2802003602002004202141016a22213602f00420222001470d000b0b20042802e804211020042902ec04210b0b20044188066a41206a20044180036a41206a280200220136020020044188066a41186a20044180036a41186a290300220c37030020044188066a41106a20044180036a41106a29030037030020044188066a41086a20044180036a41086a290300370300200420042903800337038806200141306c4104722202417f4c0d01200210322205450d00200441003602e005200420023602dc05200420053602d805200441d8056a2001108f0102402001450d00200ca72202200141306c6a210f20042802e005210103402002290300210c200441d8056a20014108102f20042802d80520042802e00522016a200c3700002004200141086a22013602e005200241086a290300210c200441d8056a20014108102f20042802d80520042802e00522016a200c3700002004200141086a220d3602e005412010322201450d02200442203702fc03200420013602f803200441f8036a41004120102f20042802f8032205200428028004220e6a2201200241106a290000370000200141086a200241186a290000370000200141106a200241206a290000370000200141186a200241286a2900003700002004200e41206a220136028004200441d8056a200d2001102f20042802d80520042802e005220d6a2005200110c9081a2004200d20016a22013602e005024020042802fc03450d002005102c0b200241306a2202200f470d000b0b200441a8036a41eddcc700410810c501200441f8036a41d4d0c000411210c50120044198056a41edd5c00010a10220042802a005220241206a2201417f4c0d010240024020010d00410121050c010b200110322205450d010b200441003602d004200420013602cc04200420053602c804200441c8046a4100411010c80120042802c80420042802d00422016a220520042900a803370000200541086a200441a8036a41086a2900003700002004200141106a22013602d004200441c8046a2001411010c80120042802c80420042802d00422016a220520042900f803370000200541086a200441f8036a41086a2900003700002004200141106a22053602d0042004280298052101200441c8046a2005200210c80120042802c804220520042802d004220d6a2001200210c9081a2004200d20026a22023602d0040240200428029c05450d002001102c0b20052002200441d8056a108a03024020042802cc04450d002005102c0b024020042802dc05450d0020042802d805102c0b200441f8036a41edd5c00020044188066a10a00220042802f803220220042802800420044194066a108d05024020042802fc03450d002002102c0b20044188066a10e7070c020b1039000b103b000b024020042802f40241ffffff3f71450d0020042802f002102c0b024020100d0002402003450d00200341306c450d00200a102c0b200441e0006a410710a30520044197066a200441e0006a41086a28020022023600002004200429036037008f06200041186a41003a0000200042003703082000200429008806370019200041216a20044188066a41086a290000370000200041286a2002360000200042013703000c040b024020074101200741014b1b2202418094ebdc036e2002418094ebdc03704100476a22014101200141014b1b220120024b0d00200441003602b003200442043703a803200441a8036a4100200b422088a722071095022002200741036c220520022005491b20016ead428094ebdc037e200220016ead8042ffffffff0f83220c200c7e220c42808090bbbad6adf00d200c42808090bbbad6adf00d541b428094ebdc0380210c20042802b003210d0240024020070d0020042802a803210e0c010b200ca7210520042802a803220e200d4102746a210220072101034020022005360200200241046a21022001417f6a22010d000b200d20076a210d0b2004200d3602b00320102007200e200d200810a30221022004410036028004200442013703f803200441f8036a41004108102f20042802f80320042802800422016a20093700002004200141086a220136028004200441f8036a20014108102f20042802f80320042802800422016a2006370000200441f8036a41146a41002900f5d5403702002004200141086a36028004200441002900edd5403702840420044194066a20042903800437020020044188066a41146a20044188046a290300370200200441a4066a20044190046a280200360200200441a8066a20023a00002004410436028806200420042903f80337028c0620044188066a10c802024020042802ac0341ffffffff0371450d00200e102c0b02402007450d00200741e0006c2101201041d4006a210203400240200241706a2802002205450d00200541306c450d002002416c6a280200102c0b0240200228020041ffffff3f71450d002002417c6a280200102c0b200241e0006a2102200141a07f6a22010d000b0b0240200ba72202450d00200241e0006c450d002010102c0b02402003450d00200341306c450d00200a102c0b2000420037030820004200370300200041186a41013a00000c010b41f0bcc300411941f8acc800103c000b200441a0086a24000f0b200441e0006a410610a30520044197066a200441e0006a41086a28020022023600002004200429036037008f06200041186a41003a0000200042003703082000200429008806370019200041216a20044188066a41086a290000370000200041286a2002360000200042013703000b2003450d00200341306c450d00200a102c0b200441a0086a24000b9a0101027f230041106b220424000240410810322205450d002004420837020420042005360200200441004104102f2004280200200428020822056a20023600002004200541046a2202360208200420024104102f20042802002202200428020822056a20033600002004200541046a2203360208200020012002200310a70202402004280204450d002002102c0b200441106a24000f0b1039000bb50401057f230041e0006b22032400200341086a418dddc700410810c501200341186a41c0fbc300411210c50120032001360238200341c4006a200341386a410410c701200341dc006a2201200341386a41046a3602002003200341c4006a41086a22043602542003200341386a3602582003200341c4006a360250200341286a200341d0006a107e2003200236024c200341c4006a200341cc006a410410c7012001200341cc006a41046a360200200320043602542003200341cc006a3602582003200341c4006a360250200341386a200341d0006a107e0240024020032802302201200328024022046a41206a2202417f4c0d000240024020020d00410121050c010b200210322205450d020b2000200236020420002005360200200041086a2202410036020020004100411010c8012000280200200228020022056a220620032900083700002002200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200228020022056a220620032900183700002002200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200110c8012000280200200228020022066a2005200110c9081a2002200620016a22063602002003280238210120002006200410c8012000280200200228020022006a2001200410c9081a2002200020046a3602000240200328023c450d002001102c0b0240200328022c450d002005102c0b200341e0006a24000f0b103b000b1039000ba808020b7f037e230041a0026b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a418dddc700410810c501200141b8016a41a7edc300410410c5012002200141b8016a41086a290000370300200320012900b8013703002001412036022c2001200141086a360228200141306a200141086a412010b30102400240200128023022040d00410021050c010b200128023421062001200141306a41086a280200360244200120043602402001200141c0006a1087020240024020012802000d0002400240024002402001280204220720012802444105762202200220074b1b22024105742203417f4c0d000240024020020d00410121050c010b200310322205450d020b41002108200141003602502001200236024c200120053602480240024002402007450d0041002109034041002103200141003a00d8012001280244417f6a2102200941016a210903402002417f460d03200141b8016a20036a2001280240220a2d00003a00002001200a41016a3602402001200341016a220a3a00d801200120023602442002417f6a2102200a2103200a4120470d000b20014180026a41186a2202200141b8016a41186a29030037030020014180026a41106a2203200141b8016a41106a29030037030020014180026a41086a220b200141b8016a41086a290300370300200120012903b80137038002200a41ff01714120490d03200141f8006a41086a200b290300220c370300200141f8006a41106a2003290300220d370300200141f8006a41186a2002290300220e370300200141d8006a41186a2203200e370300200141d8006a41106a220a200d370300200141d8006a41086a220b200c3703002001200129038002220c370398012001200c3703782001200c37035802402008200128024c470d00200141c8006a2008410110d60120012802482105200128025021080b200520084105746a22022001290358370000200241186a2003290300370000200241106a200a290300370000200241086a200b2903003700002001200841016a220836025020092007470d000b0b200129024c210c2005450d060c070b200341ff0171450d00200141003a00d8010b200128024c41ffffff3f710d020c030b103b000b1039000b2005102c0b0b41002105200141003602880220014201370380022001410f3602e4012001200141286a3602e001200120014180026a36029801200141cc016a4101360200200142013702bc01200141b4bcc3003602b8012001200141e0016a3602c80120014198016a41dcb7c000200141b8016a103e1a200135028802422086200135028002841000200128028402450d00200128028002102c0b2006450d002004102c0b0240024020050d0020004100360208200042013702000c010b2000200c370204200020053602000b200141a0026a24000bfb99040a047f017e027f027e0f7f037e057f017e057f027e230041f0016b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e25000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324000b200341d4006a410136020020034201370244200341eccdc80036024020034104360224200341ec9cc8003602202003200341206a360250200341c0006a41e88bc4001046000b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682101200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211441002113410021124200210b4200211c4200210a4200211d4100211141002110410021154100210f4100210e410021164100210d4100210c410021094100211741002118410021194200211b4100211a410021214100212242002123410021204100211f4100211e410021014100210641002127410121264101212541012124410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682101200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e8012003201a3602e401200320193602e001200320183602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c200320043602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c440b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c21012003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211441002113410021124200210b4200211c4200210a4200211d4100211141002110410021154100210f4100210e410021164100210d4100210c410021094100211741002118410021194200211b4100211a410021214100212242002123410021204100211f4100211e410021014100210641002127410121264101212541012124410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c21012003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e8012003201a3602e401200320193602e001200320183602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003200436026c2003201e3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c430b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c211f200328027021012003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211441002113410021124200210b4200211c4200210a4200211d4100211141002110410021154100210f4100210e410021164100210d4100210c410021094100211741002118410021194200211b4100211a410021214100212242002123410021204100211e4100211f410021014100210641002127410121264101212541012124410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c211f200328027021012003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e8012003201a3602e401200320193602e001200320183602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c2003202136027820032020360274200320043602702003201f36026c2003201e3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c420b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c211f200328027021202003280274210120032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211441002113410021124200210b4200211c4200210a4200211d4100211141002110410021154100210f4100210e410021164100210d4100210c410021094100211741002118410021194200211b4100211a4100212141002122420021234100211e4100211f41002120410021014100210641002127410121264101212541012124410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c211f200328027021202003280274210120032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e8012003201a3602e401200320193602e001200320183602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c2003202136027820032004360274200320203602702003201f36026c2003201e3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c410b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c211f200328027021202003280274212120032802782122200328027c210120032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211441002113410021124200210b4200211c4200210a4200211d4100211141002110410021154100210f4100210e410021164100210d4100210c410021094100211741002118410021194200211b4100211a4100211e4100211f41002120410021214200212341002122410021014100210641002127410121264101212541012124410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a280200211a200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211e200328026c211f200328027021202003280274212120032802782122200328027c210120032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e8012003201a3602e401200320193602e001200320183602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003200436027c2003202236027820032021360274200320203602702003201f36026c2003201e3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c400b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782101200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d00410121064100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d410021154100210c41002109410021084100211641002117410021184200211b410021194100211a4100211e4100211f410021204100210141002121420021234100210541002126410121254101212441012122410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782101200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c20032004360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c3f0b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102470d00200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d004101210641002108410021094100210c4200210a4200210b4200211b4200211c4100210d4100210e4100210f4100211041002111410021124100211341002114410021154100211641002117410021184200211d410021194100211a4100211e4100211f41002120410021214100212241002101420021234100212441002125410121264101212741012128410021020c020b20032903800122074280808080708321232007a72101200341c0006a41106a290300211b200341e0006a290300210a200341a0016a2802002124200341a4016a2802002106200341a8016a2802002115200341ac016a2802002114200341b0016a2802002113200341b4016a2802002111200341b8016a2802002110200341bc016a280200210e200341c0016a280200210d200341c4016a280200210c200341c8016a2802002109200341cc016a2802002108200341d0016a280200210f200341d4016a2802002112200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211d2003290348210b200329035821072003290340211c2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c21222003280288012128200328028c012127200328029001212620032802940121250c010b2006290300211b2005290300210a200341a0016a2802002124200341a4016a2802002106200341a8016a2802002115200341ac016a2802002114200341b0016a2802002113200341b4016a2802002111200341b8016a2802002110200341bc016a280200210e200341c0016a280200210d200341c4016a280200210c200341c8016a2802002109200341cc016a2802002108200341d0016a280200210f200341d4016a2802002112200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211d2003290348210b200329035821072003290340211c2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c21222003280288012128200328028c01212720032802900121262003280294012125200328029c01210520032903800122294280808080708321232029a721010b024020012004460d00200341c0006a41206a200a370300200341c0006a41106a201b3703002003419c016a2005360200200320073703582003200b3703482003201d3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320123602d4012003200f3602d001200320083602cc01200320093602c8012003200c3602c4012003200d3602c0012003200e3602bc01200320103602b801200320113602b401200320133602b001200320143602ac01200320153602a801200320063602a401200320243602a0012003200236029801200320253602940120032026360290012003202736028c0120032028360288012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201c37034020032023428080808070832004ad8437038001200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c3e0b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2342002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102470d00200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d004101210641002108410021094100210c4200210a4200210b4200211b4200211c4100210d4100210e4100210f410021104100211141002112410021134100211441002115410021164100211741002118410021194100211a4100211e4100211f41002120410021214200211d4100210141002122410021244101212541012126410121274200212341002128410021020c020b200329038001221d422088a72101200341c0006a41106a290300211b200341e0006a290300210a200341a0016a2802002122200341a4016a2802002106200341a8016a2802002115200341ac016a2802002114200341b0016a2802002113200341b4016a2802002111200341b8016a2802002110200341bc016a280200210e200341c0016a280200210d200341c4016a280200210c200341c8016a2802002109200341cc016a2802002108200341d0016a280200210f200341d4016a2802002112200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002128200341e8016a29030021232003290348210b200329035821072003290340211c20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c21212003280288012127200328028c012126200328029001212520032802940121240c010b2006290300211b2005290300210a200341a0016a2802002122200341a4016a2802002106200341a8016a2802002115200341ac016a2802002114200341b0016a2802002113200341b4016a2802002111200341b8016a2802002110200341bc016a280200210e200341c0016a280200210d200341c4016a280200210c200341c8016a2802002109200341cc016a2802002108200341d0016a280200210f200341d4016a2802002112200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002128200341e8016a29030021232003290348210b200329035821072003290340211c20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c21212003280288012127200328028c01212620032802900121252003280294012124200328029c012105200329038001221d422088a721010b024020012004460d00200341c0006a41206a200a370300200341c0006a41106a201b3703002003419c016a2005360200200320073703582003200b370348200320233703e801200320283602e401200320183602e001200320173602dc01200320163602d801200320123602d4012003200f3602d001200320083602cc01200320093602c8012003200c3602c4012003200d3602c0012003200e3602bc01200320103602b801200320113602b401200320133602b001200320143602ac01200320153602a801200320063602a401200320223602a0012003200236029801200320243602940120032025360290012003202636028c0120032027360288012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201c37034020032004ad422086201d42ffffffff0f838437038001200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c3d0b20012802042101200341c0006a41206a200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a200241106a290200370300200341c0006a41086a200241086a290200370300200320022902003703404102210202400240200341c0006a10da020d0020010d01410321020b200041dc94c4003600242000410f3b002120004200370308200041286a410f360000200041206a20023a0000200041186a41003a0000200042013703000c3d0b42002107200341386a22024200370300200341206a41106a22044200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41b995c400410d10c5012002200629000037030020042003290040370300200341c0006a200341206a10f5020240024020032802980122084102460d00200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012102200328028c01212420032802900121252003280294012126200328029c0121270c010b20024200370300200442003703002005420037030020034200370320200341c0006a41ac95c400410d10c5012005200629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020042003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122084102470d00410121054100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d410021154100210c41002109410021064100211641002117410021184100211a4100211e4100211f4100212041002121410021224200212341002104410021264101212541012124410121024200211b41002119410021080c010b200341d0006a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012102200328028c012124200328029001212520032802940121260b024020022001460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320063602a801200320053602a401200320043602a0012003200836029801200320263602940120032025360290012003202436028c01200320013602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c3c0b20012802042101200341c0006a41206a200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a200241106a290200370300200341c0006a41086a200241086a290200370300200320022902003703404102210202400240200341c0006a10da020d0020010d01410321020b200041dc94c4003600242000410f3b002120004200370308200041286a410f360000200041206a20023a0000200041186a41003a0000200042013703000c3c0b42002107200341386a22024200370300200341206a41106a22044200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41b995c400410d10c5012002200629000037030020042003290040370300200341c0006a200341206a10f5020240024020032802980122084102460d00200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01210220032802900121252003280294012126200328029c0121270c010b20024200370300200442003703002005420037030020034200370320200341c0006a41ac95c400410d10c5012005200629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020042003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122084102470d00410121054100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d410021154100210c41002109410021064100211641002117410021184100211a4100211e4100211f4100212041002121410021224200212341002104410021264101212541012102410121244200211b41002119410021080c010b200341d0006a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012102200328029001212520032802940121260b024020022001460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320063602a801200320053602a401200320043602a0012003200836029801200320263602940120032025360290012003200136028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c3b0b20012802042101200341c0006a41206a200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a200241106a290200370300200341c0006a41086a200241086a290200370300200320022902003703404102210202400240200341c0006a10da020d0020010d01410321020b200041dc94c4003600242000410f3b002120004200370308200041286a410f360000200041206a20023a0000200041186a41003a0000200042013703000c3b0b42002107200341386a22024200370300200341206a41106a22044200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41b995c400410d10c5012002200629000037030020042003290040370300200341c0006a200341206a10f5020240024020032802980122084102460d00200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121022003280294012126200328029c0121270c010b20024200370300200442003703002005420037030020034200370320200341c0006a41ac95c400410d10c5012005200629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020042003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122084102470d00410121054100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d410021154100210c410021094100210641002116410021174100211a4100211e4100211f410021204100212141002122420021234100210441002126410121024101212541012124410021184200211b41002119410021080c010b200341d0006a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001210220032802940121260b024020022001460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320063602a801200320053602a401200320043602a0012003200836029801200320263602940120032001360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c3a0b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2042002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012101200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d00410121064100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d410021154100210c410021094100210841002116410021174100211a4100211e4100211f410021204100212141002122420021234100210541002101410121264101212541012124410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121010b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320043602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c390b200141086a280200210420012802042101200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a200241086a29020037030020032002290200370340200341c0006a10da020d2042002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341106a41ac95c400410d10c5012009200341106a41086a220c29000037030020032003290010370320200341106a41b995c400410d10c5012002200c29000037030020082003290010370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121280c010b200341386a22024200370300200341206a41106a22054200370300200341206a41086a2206420037030020034200370320200341c0006a41ac95c400410d10c5012006200341c0006a41086a220829000037030020032003290040370320200341c0006a41c695c400410c10c5012002200829000037030020052003290040370300200341c0006a200341206a10f502200328029c012128024020032802980122024102470d00410121064100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d410021154100210c410021094100210841002116410021174100211a4100211e4100211f410021204100212141002122420021234100210541002127410121264101212541012124410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b0240024020012002470d002001450d0120042028460d010b200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2004360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200136029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c380b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d2042002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002101200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121064100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d4100210c410021154100210941002108410021164100211a4100211e4100211f41002120410021214100212242002123410021014100212741012126410121254101212441002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002101200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320043602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c370b20012802042101200341c0006a41206a200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a200241106a290200370300200341c0006a41086a200241086a290200370300200320022902003703404102210202400240200341c0006a10da020d0020010d01410321020b200041dc94c4003600242000410f3b002120004200370308200041286a410f360000200041206a20023a0000200041186a41003a0000200042013703000c370b42002107200341386a22024200370300200341206a41106a22044200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41b995c400410d10c5012002200629000037030020042003290040370300200341c0006a200341206a10f5020240024020032802980122084102460d00200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002102200341a8016a2802002105200341ac016a2802002106200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b20024200370300200442003703002005420037030020034200370320200341c0006a41ac95c400410d10c5012005200629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020042003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122084102470d00410121024100211241002111410021104200210b4200211c4200210a4200211d4100210f4100210e410021134100210d4100210c4100210941002114410021064100210541002115410021194100211a4100211e4100211f410021204100212142002123410021044100212641012125410121244101212241002116410021174200211b41002118410021080c010b200341d0006a290300210a200341e0006a290300210b200341a0016a2802002104200341a4016a2802002102200341a8016a2802002105200341ac016a2802002106200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020022001460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320103602c4012003200f3602c0012003200e3602bc012003200d3602b8012003200c3602b401200320093602b001200320063602ac01200320053602a801200320013602a401200320043602a0012003200836029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c360b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002101200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211341002112410021114200210b4200211c4200210a4200211d410021104100210f410021144100210e4100210d4100210c41002115410021094100211a4100211e4100211f410021204100212141002122420021234100210141002106410021274101212641012125410121244100211641002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002101200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320043602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c350b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002101200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d00410121064100211241002111410021104200210b4200211c4200210a4200211d4100210f4100210e410021134100210d4100210c4100211441002109410021194100211a4100211e4100211f410021204100212142002123410021084100210141002105410021264101212541012124410121224100211541002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002101200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320103602c4012003200f3602c0012003200e3602bc012003200d3602b8012003200c3602b401200320093602b001200320043602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c340b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a2802002101200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211341002112410021114200210b4200211c4200210a4200211d41002110410021144100210f4100210e4100210d4100211a4100211e4100211f41002120410021214100212242002123410021094100210c410021014100210641002127410121264101212541012124410021154100211641002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a2802002101200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b401200320043602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c330b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a2802002101200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d00410121064100211241002111410021104200210b4200211c4200210a4200211d4100210f4100210e410021134100210d410021194100211a4100211e4100211f41002120410021214200212341002108410021094100210c410021014100210541002126410121254101212441012122410021144100211541002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a2802002101200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320103602c4012003200f3602c0012003200e3602bc012003200d3602b801200320043602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c320b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a2802002101200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d00410121064100211241002111410021104200210b4200211c4200210a4200211d4100210f410021134100210e410021194100211a4100211e4100211f41002120410021214200212341002108410021094100210c4100210d410021014100210541002126410121254101212441012122410021144100211541002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a2802002101200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320103602c4012003200f3602c0012003200e3602bc01200320043602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c310b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002101200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211341002112410021114200210b4200211c4200210a4200211d410021104100211a4100211e4100211f41002120410021214100212242002123410021094100210c4100210d4100210e4100210f41002101410021064100212741012126410121254101212441002114410021154100211641002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002101200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c001200320043602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c300b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002101200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d00410121084100211341002112410021114200210b4200211d4200211c4200210a4100211a4100211e4100211f41002120410021214100212242002123410021094100210c4100210d4100210e4100210f4100211041002101410021064100212741012126410121254101212441002114410021154100211641002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002101200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c200329035821072003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2005360200200320073703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320043602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c2f0b200141086a2903002107200341c0006a41206a2204200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2205200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f4200210a200341206a41186a22024200370300200341206a41106a22064200370300200341206a41086a2208420037030020034200370320200341c0006a41ac95c400410d10c5012008200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020062003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002005290300210b2004290300211b200341a0016a2802002101200341a4016a2802002104200341a8016a2802002105200341ac016a2802002106200341b0016a2802002108200341b4016a2802002109200341b8016a280200210c200341bc016a280200210d200341c0016a280200210e200341c4016a280200210f200341c8016a2802002110200341cc016a2802002111200341d0016a2802002112200341d4016a2802002113200341d8016a2802002114200341dc016a2802002115200341e0016a2802002116200341e4016a2802002117200341e8016a290300211c2003290348211d200329035821232003290340210a20032802682118200328026c21192003280270211a2003280274211e2003280278211f200328027c212020032903800121292003280288012121200328028c01212220032802900121242003280294012125200328029c0121260c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341c0006a41ac95c400410d10c5012004200341c0006a41086a220529000037030020032003290040370320200341c0006a41c695c400410c10c5012002200529000037030020012003290040370300200341c0006a200341206a10f502200328029c012126024020032802980122024102470d004101210441002111410021104100210f41002118410021194100211a4100211e4100211f4100212042002129410021054100210641002108410021094100210c4100210d4100210e4100210141002125410121244101212241012121420021234200211b4200211d4200210b41002112410021134100211441002115410021164200211c41002117410021020c010b200341c0006a41106a290300210b200341e0006a290300211b200341a0016a2802002101200341a4016a2802002104200341a8016a2802002105200341ac016a2802002106200341b0016a2802002108200341b4016a2802002109200341b8016a280200210c200341bc016a280200210d200341c0016a280200210e200341c4016a280200210f200341c8016a2802002110200341cc016a2802002111200341d0016a2802002112200341d4016a2802002113200341d8016a2802002114200341dc016a2802002115200341e0016a2802002116200341e4016a2802002117200341e8016a290300211c2003290348211d200329035821232003290340210a20032802682118200328026c21192003280270211a2003280274211e2003280278211f200328027c212020032903800121292003280288012121200328028c012122200328029001212420032802940121250b0240200a2007510d00200341c0006a41206a201b370300200341c0006a41106a200b3703002003419c016a2026360200200320233703582003201d3703482003201c3703e801200320173602e401200320163602e001200320153602dc01200320143602d801200320133602d401200320123602d001200320113602cc01200320103602c8012003200f3602c4012003200e3602c0012003200d3602bc012003200c3602b801200320093602b401200320083602b001200320063602ac01200320053602a801200320043602a401200320013602a0012003200236029801200320253602940120032024360290012003202236028c01200320213602880120032029370380012003202036027c2003201f3602782003201e3602742003201a3602702003201936026c2003201836026820032007370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c2e0b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002101200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d004101210641002112410021114200210b4200211c4200210a4200211d410021194100211a4100211e4100211f41002120410021214200212341002108410021094100210c4100210d4100210e4100210f4100211041002101410021054100212641012125410121244101212241002113410021144100211541002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002101200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c200329035821072003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a2027360200200320073703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320043602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c2d0b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002101200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c2003290358211d200329034021072003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d0041012108410021134100211a4100211e4100211f41002120410021214100212242002123410021094100210c4100210d4100210e4100210f4100211041002111410021124100210141002106410021274101212641012125410121244200211d4200210b4200211c4200210a41002114410021154100211641002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002101200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c2003290358211d200329034021072003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20053602002003201d3703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320043602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a36026820032007370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c2c0b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002101200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c2003290358211d200329034021232003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121072003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d0041012108410021134100210141002106410021274101212641012125410121244100211241002111410021104100210f4100210e4100210d4100210c410021094100212241002121410021204100211f4100211e4100211a420021234200211d4200210b4200211c4200210a41002114410021154100211641002117410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002101200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c2003290358211d200329034021232003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121072003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20053602002003201d3703582003201c3703482003201b3703e801200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320043602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032007370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a36026820032023370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c2b0b200141106a2903002107200141086a290300210a200341c0006a41206a2204200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2205200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f4200210b200341206a41186a22024200370300200341206a41106a22064200370300200341206a41086a2208420037030020034200370320200341c0006a41ac95c400410d10c5012008200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020062003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002005290300211b2004290300211d200341a0016a2802002101200341a4016a2802002104200341a8016a2802002105200341ac016a2802002106200341b0016a2802002108200341b4016a2802002109200341b8016a280200210c200341bc016a280200210d200341c0016a280200210e200341c4016a280200210f200341c8016a2802002110200341cc016a2802002111200341d0016a2802002112200341d4016a2802002113200341d8016a2802002114200341dc016a2802002115200341e0016a2802002116200341e4016a2802002117200341e8016a29030021232003290348211c200329035821292003290340212a20032802682118200328026c21192003280270211a2003280274211e2003280278211f200328027c2120200329038001210b2003280288012121200328028c01212220032802900121242003280294012125200328029c0121260c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341c0006a41ac95c400410d10c5012004200341c0006a41086a220529000037030020032003290040370320200341c0006a41c695c400410c10c5012002200529000037030020012003290040370300200341c0006a200341206a10f502200328029c012126024020032802980122024102470d0041002125410121214101212241012124410021014101210441002111410021104100210f4100210e4100210d4100210c41002109410021084100210641002105410021204100211f4100211e4100211a4100211941002118420021294200211d4200211c4200211b4200212a41002112410021134100211441002115410021164200212341002117410021020c010b200341c0006a41106a290300211b200341e0006a290300211d200341a0016a2802002101200341a4016a2802002104200341a8016a2802002105200341ac016a2802002106200341b0016a2802002108200341b4016a2802002109200341b8016a280200210c200341bc016a280200210d200341c0016a280200210e200341c4016a280200210f200341c8016a2802002110200341cc016a2802002111200341d0016a2802002112200341d4016a2802002113200341d8016a2802002114200341dc016a2802002115200341e0016a2802002116200341e4016a2802002117200341e8016a29030021232003290348211c200329035821292003290340212a20032802682118200328026c21192003280270211a2003280274211e2003280278211f200328027c2120200329038001210b2003280288012121200328028c012122200328029001212420032802940121250b0240201c200a85201b20078584500d00200341c0006a41206a201d370300200341c0006a41106a20073703002003419c016a2026360200200320293703582003200a370348200320233703e801200320173602e401200320163602e001200320153602dc01200320143602d801200320133602d401200320123602d001200320113602cc01200320103602c8012003200f3602c4012003200e3602c0012003200d3602bc012003200c3602b801200320093602b401200320083602b001200320063602ac01200320053602a801200320043602a401200320013602a0012003200236029801200320253602940120032024360290012003202236028c0120032021360288012003200b370380012003202036027c2003201f3602782003201e3602742003201a3602702003201936026c200320183602682003202a370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c2a0b200141106a2903002107200141086a290300210a200341c0006a41206a2204200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2205200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f4200210b200341206a41186a22024200370300200341206a41106a22064200370300200341206a41086a2208420037030020034200370320200341c0006a41ac95c400410d10c5012008200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020062003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002005290300211d2004290300211b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002108200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a2903002123200329034821292003290358211c2003290340212a20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c2121200329038001210b2003280288012122200328028c01212420032802900121252003280294012126200328029c0121010c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341c0006a41ac95c400410d10c5012004200341c0006a41086a220529000037030020032003290040370320200341c0006a41c695c400410c10c5012002200529000037030020012003290040370300200341c0006a200341206a10f502200328029c012101024020032802980122024102470d004100212641012122410121244101212541002104410121054100211241002111410021104100210f4100210e4100210d4100210c41002109410021084100210641002121410021204100211f4100211e4100211a410021194200211c4200211b420021294200211d4200212a41002113410021144100211541002116410021174200212341002118410021020c010b200341c0006a41106a290300211d200341e0006a290300211b200341a0016a2802002104200341a4016a2802002105200341a8016a2802002106200341ac016a2802002108200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a2903002123200329034821292003290358211c2003290340212a20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c2121200329038001210b2003280288012122200328028c012124200328029001212520032802940121260b0240201c200a85201b20078584500d00200341c0006a41206a2007370300200341c0006a41106a201d3703002003419c016a20013602002003200a37035820032029370348200320233703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320103602c4012003200f3602c0012003200e3602bc012003200d3602b8012003200c3602b401200320093602b001200320083602ac01200320063602a801200320053602a401200320043602a0012003200236029801200320263602940120032025360290012003202436028c0120032022360288012003200b370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003202a370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c290b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002101200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d0041002126410121224101212441012125410021054101210641002101410021134100211241002111410021104100210f4100210e4100210d4100210c410021094100210841002121410021204100211f4100211e4100211a410021194200211d4200210b4200211c4200210a42002123410021144100211541002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002101200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20273602002003201d3703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320043602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032007370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c2003201936026820032023370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c280b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002101200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d004100212641012122410121244101212541002105410121064100210141002114410021134100211241002111410021104100210f4100210e4100210d4100210c410021094100210841002121410021204100211f4100211e4100211a410021194200211d4200210b4200211c4200210a420021234100211541002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002101200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20273602002003201d3703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320153602d801200320043602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032007370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c2003201936026820032023370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c270b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002101200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d00410021264101212241012124410121254100210541012106410021014100211541002114410021134100211241002111410021104100210f4100210e4100210d4100210c410021094100210841002121410021204100211f4100211e4100211a410021194200211d4200210b4200211c4200210a4200212341002116410021174200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002101200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20273602002003201d3703582003201c3703482003201b3703e801200320183602e401200320173602e001200320163602dc01200320043602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032007370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c2003201936026820032023370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c260b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002101200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c2003290358211d200329034021232003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121072003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d004100212741012124410121254101212641002106410121084100210141002117410021164100211541002114410021134100211241002111410021104100210f4100210e4100210d4100210c410021094100212241002121410021204100211f4100211e4100211a4200211d4200210b4200211c4200210a42002123410021184200211b41002119410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002101200341e0016a2802002118200341e4016a2802002119200341e8016a290300211b2003290348211c2003290358211d200329034021232003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121072003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20053602002003201d3703582003201c3703482003201b3703e801200320193602e401200320183602e001200320043602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032007370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a36026820032023370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c250b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002101200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d004100212641012122410121244101212541002105410121064100210141002117410021164100211541002114410021134100211241002111410021104100210f4100210e4100210d4100210c410021094100210841002121410021204100211f4100211e4100211a410021194200211d4200210b4200211c4200210a420021234200211b41002118410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002101200341e4016a2802002118200341e8016a290300211b2003290348211c2003290358211d2003290340212320032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121072003280288012122200328028c012124200328029001212520032802940121260b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20273602002003201d3703582003201c3703482003201b3703e801200320183602e401200320043602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032007370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c2003201936026820032023370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c240b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a2802002101200341e8016a29030021072003290348211b2003290358211c2003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121050c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012105024020032802980122024102470d0041002127410121244101212541012126410021064101210841002101410021194100211841002117410021164100211541002114410021134100211241002111410021104100210f4100210e4100210d4100210c41002109420021234100212241002121410021204100211f4100211e4100211a4200211c4200210b4200211b4200210a4200211d410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002106200341a4016a2802002108200341a8016a2802002109200341ac016a280200210c200341b0016a280200210d200341b4016a280200210e200341b8016a280200210f200341bc016a2802002110200341c0016a2802002111200341c4016a2802002112200341c8016a2802002113200341cc016a2802002114200341d0016a2802002115200341d4016a2802002116200341d8016a2802002117200341dc016a2802002118200341e0016a2802002119200341e4016a2802002101200341e8016a29030021072003290348211b2003290358211c2003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020012004460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20053602002003201c3703582003201b370348200320073703e801200320043602e401200320193602e001200320183602dc01200320173602d801200320163602d401200320153602d001200320143602cc01200320133602c801200320123602c401200320113602c001200320103602bc012003200f3602b8012003200e3602b4012003200d3602b0012003200c3602ac01200320093602a801200320083602a401200320063602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d370340200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c230b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a29030021072003290348211b2003290358211c2003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c01212520032802900121262003280294012127200328029c0121010c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012101024020032802980122024102470d00410021274101212441012125410121264100210541012106410021194100211841002117410021164100211541002114410021134100211241002111410021104100210f4100210e4100210d4100210c4100210941002108420021234100212241002121410021204100211f4100211e4100211a4200211c4200210b4200211b4200210a4200211d410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002105200341a4016a2802002106200341a8016a2802002108200341ac016a2802002109200341b0016a280200210c200341b4016a280200210d200341b8016a280200210e200341bc016a280200210f200341c0016a2802002110200341c4016a2802002111200341c8016a2802002112200341cc016a2802002113200341d0016a2802002114200341d4016a2802002115200341d8016a2802002116200341dc016a2802002117200341e0016a2802002118200341e4016a2802002119200341e8016a29030021072003290348211b2003290358211c2003290340211d2003280268211a200328026c211e2003280270211f2003280274212020032802782121200328027c212220032903800121232003280288012124200328028c012125200328029001212620032802940121270b024020042007a7460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20013602002003201c3703582003201b370348200320193602e401200320183602e001200320173602dc01200320163602d801200320153602d401200320143602d001200320133602cc01200320123602c801200320113602c401200320103602c0012003200f3602bc012003200e3602b8012003200d3602b4012003200c3602b001200320093602ac01200320083602a801200320063602a401200320053602a0012003200236029801200320273602940120032026360290012003202536028c01200320243602880120032023370380012003202236027c20032021360278200320203602742003201f3602702003201e36026c2003201a3602682003201d37034020032007428080808070832004ad843703e801200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b2000420037030820002003280003360019200041186a41003a00002000411c6a200341066a280000360000200042003703000c220b20012802042104200341c0006a41206a2205200241206a290200370300200341c0006a41186a200241186a290200370300200341c0006a41106a2206200241106a290200370300200341c0006a41086a2201200241086a29020037030020032002290200370340200341c0006a10da020d1f42002107200341206a41186a22024200370300200341206a41106a22084200370300200341206a41086a2209420037030020034200370320200341c0006a41ac95c400410d10c5012009200129000037030020032003290040370320200341c0006a41b995c400410d10c5012002200129000037030020082003290040370300200341c0006a200341206a10f5020240024020032802980122024102460d002006290300210a2005290300210b200341a0016a2802002101200341a4016a2802002105200341a8016a2802002106200341ac016a2802002108200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a29030021072003290348211b2003290358211c2003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c01212420032802900121252003280294012126200328029c0121270c010b200341386a22024200370300200341206a41106a22014200370300200341206a41086a2205420037030020034200370320200341c0006a41ac95c400410d10c5012005200341c0006a41086a220629000037030020032003290040370320200341c0006a41c695c400410c10c5012002200629000037030020012003290040370300200341c0006a200341206a10f502200328029c012127024020032802980122024102470d004100212641012122410121244101212541002101410121054100211841002117410021164100211541002114410021134100211241002111410021104100210f4100210e4100210d4100210c4100210941002108410021064200212341002121410021204100211f4100211e4100211a410021194200211c4200210b4200211b4200210a4200211d410021020c010b200341c0006a41106a290300210a200341e0006a290300210b200341a0016a2802002101200341a4016a2802002105200341a8016a2802002106200341ac016a2802002108200341b0016a2802002109200341b4016a280200210c200341b8016a280200210d200341bc016a280200210e200341c0016a280200210f200341c4016a2802002110200341c8016a2802002111200341cc016a2802002112200341d0016a2802002113200341d4016a2802002114200341d8016a2802002115200341dc016a2802002116200341e0016a2802002117200341e4016a2802002118200341e8016a29030021072003290348211b2003290358211c2003290340211d20032802682119200328026c211a2003280270211e2003280274211f20032802782120200328027c212120032903800121232003280288012122200328028c012124200328029001212520032802940121260b024020042007422088a7460d00200341c0006a41206a200b370300200341c0006a41106a200a3703002003419c016a20273602002003201c3703582003201b370348200320183602e401200320173602e001200320163602dc01200320153602d801200320143602d401200320133602d001200320123602cc01200320113602c801200320103602c4012003200f3602c0012003200e3602bc012003200d3602b8012003200c3602b401200320093602b001200320083602ac01200320063602a801200320053602a401200320013602a0012003200236029801200320263602940120032025360290012003202436028c01200320223602880120032023370380012003202136027c200320203602782003201f3602742003201e3602702003201a36026c200320193602682003201d3703402003200742ffffffff0f832004ad422086843703e801200341386a22024200370300200341206a41106a22014200370300200341206a41086a2204420037030020034200370320200341106a41ac95c400410d10c5012004200341106a41086a220529000037030020032003290010370320200341106a41b995c400410d10c50120022005290000370300200120032900103703002003410036021820034201370310200341c0006a200341106a10d506200341206a41202003280210200328021810a7022003280214450d002003280210102c0b420021072000420037030820002003280040360019200041186a41003a00002000411c6a200341c3006a2800003600000c200b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c200b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c1f0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c1e0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c1d0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c1c0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c1b0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c1a0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c190b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c180b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c170b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c160b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c150b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c140b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c130b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c120b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c110b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c100b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0f0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0e0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0d0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0c0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0b0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0a0b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c090b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c080b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c070b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c060b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c050b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c040b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c030b2003410a6a41026a2003410d6a41026a2d000022023a0000200320032f000d22013b010a200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c020b200341c0006a41026a200341036a41026a2d000022023a0000200320032f000322013b0140200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000420121070b200020073703000b200341f0016a24000ba3a70108077f017e087f017e0d7f017e147f0a7e230022042105200441c00b6b4160712204240020044180096a41206a200141206a29020037030020044180096a41186a2206200141186a29020037030020044180096a41106a2207200141106a29020037030020044180096a41086a2208200141086a2902003703002004200129020037038009024002400240024002400240024020044180096a10cc020d00200642003703002007420037030020084200370300200442003703800920044180056a419ee3c300411510c501200820044180056a41086a220129000037030020042004290080053703800920044180056a418ce4c300410810c5012006200129000037030020072004290080053703000240024020044180096a412010ce020d0020044180056a41086a2201200241086a280200360200200420022902003703800520044180096a20044180056a109e0620044180096a41086a280200210920044180096a410c6a280200210a20042802840921072004280280094101470d0120002007360200200041086a200a360200200041046a2009360200200310c202200524000f0b20004183223b0100200041086a4119360200200041046a41e0e0c300360200200041026a41003a00000c020b4200210b20044180056a41186a2206420037030020044180056a41106a220c4200370300200142003703002004420037038005200441e8006a41c1dcc700410610c5012001200441e8006a41086a22022900003703002004200429006837038005200441c8046a4196a4c600410610c5012006200441c8046a41086a2208290000370300200c20042900c804370300200441c0006a20044180056a412010c6012004280244210d2004280240210e20064200370300200c4200370300200142003703002004420037038005200441e8006a41ac95c400410d10c501200120022900003703002004200429006837038005200441c8046a41c695c400410c10c50120062008290000370300200c20042900c80437030020044180096a20044180056a10f50220042802d809210f200441e0026a41086a20044180096a41106a290300370300200441e0026a41106a220820044180096a41186a290300370300200441e0026a41186a221020044180096a41206a290300370300200441e0026a41206a221120044180096a41286a290300370300200441e0026a41286a221220044180096a41306a290300370300200441e0026a41306a2213200441b8096a29030037030020042004290388093703e0022004290380092114200441e4096a2802002115200441e0096a280200211620042802dc09211720042802d409211820042802d009210120042802cc09210620042802c809210220042802c409211920042802c009211a20044180056a200441e8096a41c80010c9081a02400240200f4102470d00200441f8006a41306a4200370300200441f8006a41286a4200370300200441f8006a41206a4200370300200441f8006a41186a4200370300200441f8006a41106a420037030020044180016a42003703002004420037037820044198076a410041c80010cb081a41012115410021194100211a41002116410021184101210141012106410121024100210f0c010b200441f8006a41306a2013290300370300200441f8006a41286a2012290300370300200441f8006a41206a2011290300370300200441f8006a41186a2010290300370300200441f8006a41106a2008290300370300200441f8006a41086a200441e0026a41086a290300370300200420042903e00237037820044198076a20044180056a41c80010c9081a2014210b0b20044198096a2210420037030020044190096a221b420037030020044180096a41086a220842003703002004420037038009200441d8006a41bee8c700410d10c5012008200441d8006a41086a22112900003703002004200429005837038009200441e8006a41c4efc700411110c5012010200441e8006a41086a2212290000370300201b2004290068370300200441386a20044180096a412010c60102402002450d00200428023c21132004280238211c20104200370300201b4200370300200842003703002004420037038009200441d8006a41bee8c700410d10c501200820112900003703002004200429005837038009200441e8006a4188eec700411110c501201b41086a2012290000370000201b20042900683700004100211120044180056a20044180096a10eb04200429028405420020042802800522081b21142008410420081b21120240024002404100200d4100200e1b220820134100201c1b6b2210201020084b1b200270221020062001200620014b1b4f0d0020044180056a41086a220d200441f8006a41086a29030037030020044180056a41106a220e200441f8006a41106a29030037030020044180056a41186a2213200441f8006a41186a29030037030020044180056a41206a221c200441f8006a41206a29030037030020044180056a41286a221d200441f8006a41286a29030037030020044180056a41306a221e200441f8006a41306a290300370300200420042903783703800520044180096a20044198076a41c80010c9081a41c801103222110d010c0a0b2014a72201450d012001412c6c450d012012102c0c010b2011200b370300201120042903800537030820112015360264201120163602602011201736025c2011200f36025820112018360254201120013602502011200636024c20112002360248201120193602442011201a360240201141106a200d290300370300201141186a200e290300370300201141206a2013290300370300201141286a201c290300370300201141306a201d290300370300201141386a201e290300370300201141e8006a20044180096a41c80010c9081a201120083602c001201120103602bc01201120143702b401201120123602b0010b024020110d004100210620044100360250200442043703484104211f41002120410021210c050b200441003602900720044204370388072004410036025020044204370348200441d8006a41968dc700410d10c501200441e8006a41a38dc700411310c501412010322201450d072004422037028405200420013602800520044180056a4100411010c80120042802800520042802880522016a22062004290058370000200641086a200441d8006a41086a2900003700002004200141106a22013602880520044180056a2001411010c801200428028005220220042802880522016a22062004290068370000200641086a200441e8006a41086a2900003700002004200141106a2206360288052006417f4c0d050240024020060d00410121080c010b200610322208450d080b4100210120044100360288092004200636028409200420083602800920044180096a4100200610c80120042802800920042802880922086a2002200610c9081a20044194096a20044180056a41086a2202280200360200200441003a009c09200441163602980920044198076a41186a220f200429039809370300200420042903800537028c0920044198076a41106a20044180096a41106a290300220b3703002004200820066a3602880920044198076a41086a2004290388092214370300200420042903800922223703980720044180056a41106a200b3703002002201437030020044180056a41186a200f290300370300200420223703800520044180096a20044180056a10b901024020042802ec0a2202450d00410421154104211641002106034020042802800b210f20042802f80a210820042802f40a2110200428028009210d02402011200428028409220e20042802880b10a006450d0002402006200428028c07470d0020044188076a200610d204200428029007210620042802880721160b201620064102746a200d3602002004200641016a22063602900702402001200428024c470d00200441c8006a2001410110950220042802502101200428024821150b201520014102746a200e3602002004200141016a22013602500b02402010450d002002450d002002102c0b0240200f450d002008450d002008102c0b20044180096a20044180056a10b90120042802ec0a22020d000b0b0240200428028405450d00200428028005102c0b024020044190056a280200450d00200428028c05102c0b2004280288072123200428028c0721242004280290072201450d03202320014102746a21252004418c0b6a212620044180096a41086a2127200441ec046a212820044198076a4104722129200441c8046a412c6a212a20044180096a412c6a211a200441e0026a41046a211220044198076a41086a211320044180056a41e4016a211c20232108034020082802002102200441e8006a41968dc700410d10c501200441c8046a41a38dc700411310c501200420023602e00220044198076a200441e0026a410410c7012004201236028c0920042013360284092004200441e0026a36028809200420044198076a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d060240024020060d004101210f0c010b20061032220f450d090b200441003602a0072004200636029c072004200f3602980720044198076a4100411010c80120042802980720042802a00722066a220f2004290068370000200f41086a200441e8006a41086a220f2900003700002004200641106a22063602a00720044198076a2006411010c80120042802980720042802a00722066a221020042900c804370000201041086a200441c8046a41086a22172900003700002004200641106a22063602a007200428028005211020044198076a2006200110c801200428029807220620042802a007221d6a2010200110c9081a2004201d20016a22013602a0070240200428028405450d002010102c0b20044180096a2006200110f3040240024020042802e80a22100d004101211d0c010b2006200110b40120042802f00a212b20042802f40a212c20042802fc0a212d200441f8006a20044180096a41e80110c9081a4100211d0b0240200428029c07450d002006102c0b200441e8006a41968dc700410d10c501200441c8046a41bc92c700411e10c501200420023602e00220044198076a200441e0026a410410c7012004201236028c0920042013360284092004200441e0026a36028809200420044198076a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d060240024020060d00410121020c010b200610322202450d090b200441003602a0072004200636029c07200420023602980720044198076a4100411010c80120042802980720042802a00722066a22022004290068370000200241086a200f2900003700002004200641106a22063602a00720044198076a2006411010c80120042802980720042802a00722066a220220042900c804370000200241086a20172900003700002004200641106a22063602a007200428028005210220044198076a2006200110c801200428029807220620042802a00722176a2002200110c9081a2004201720016a22013602a0070240200428028405450d002002102c0b20044180096a2006200110ee0402402004280280092202450d002006200110b4010b20042802a809210120042802a409211720042802a009212e200428029c09212f200428029809213020042802940921312004280290092132200428028c0921332004280288092134200428028409211f20044180056a41086a2220201a41086a2802003602002004201a290200370380050240024020020d00410021020c010b200441d8006a41086a202028020036020020042004290380053703582001213520172121202e2136202f211e20302118203121152032210e2033211920342116201f210d0b0240200428029c07450d002006102c0b200841046a2108200441e0026a200441f8006a41e80110c9081a200f200441d8006a41086a2802003602002004200429035837036802400240201d200245720d0020044198076a200441e0026a41e80110c9081a202a2004290368370200202a41086a200f280200360200200420353602f004200420213602ec04200420363602e8042004201e3602e404200420183602e004200420153602dc042004200e3602d804200420193602d404200420163602d0042004200d3602cc04200420023602c80420044180056a202941e40110c9081a20044180096a200441c8046a109901201c41186a20044180096a41186a290300370000201c41106a20044180096a41106a290300370000201c41086a2027290300370000201c200429038009370000200442888080802037038009202720044180056a41840210c9081a202641086a202841086a2802003602002026202829020037020020044180096a10c80202402016450d002016410c6c21062002210103400240200141046a280200450d002001280200102c0b2001410c6a2101200641746a22060d000b0b0240200d450d00200d410c6c450d002002102c0b02402015450d0020154104742106201941046a210103400240200141046a280200450d002001280200102c0b200141106a2101200641706a22060d000b0b0240200e450d00200e41ffffffff0071450d002019102c0b02402018450d00201e450d002018102c0b0240202b450d002010450d002010102c0b202d450d01202c450d01202c102c0c010b024002402010450d000240202b450d002010102c0b202d450d00202c450d00202c102c20020d010c020b2002450d010b02402016450d002016410c6c21062002210103400240200141046a280200450d002001280200102c0b2001410c6a2101200641746a22060d000b0b0240200d450d00200d410c6c450d002002102c0b02402015450d0020154104742106201941046a210103400240200141046a280200450d002001280200102c0b200141106a2101200641706a22060d000b0b0240200e450d002019450d00200e41ffffffff0071450d002019102c0b02402018450d00201e450d002018102c0b2035450d002021450d002021102c0b20082025470d000c040b0b41c0fac700413941a0fcc700103c000b200041023a00000b200310c202024020022802082201450d0020022802002204200141d0006c6a21060340200441046a410036020020042802002101200441013602000240200441086a280200450d002001102c0b200441d0006a22042006470d000b0b20022802042204450d03200441d0006c450d032002280200102c200524000f0b0240202441ffffffff0371450d002023102c0b201110a1062011102c4101212120042802502106200428024c21202004280248211f0b20044180096a41186a2213420037030020044180096a41106a221c420037030020044180096a41086a221a42003703002004420037038009200441d8006a41bee8c700410d10c501201a200441d8006a41086a221d2900003703002004200429005837038009200441e8006a4188eec700411110c501201b41086a221e200441e8006a41086a2217290000370000201b200429006837000020044180056a20044180096a10eb042004280280052101200429028405210b20044180056a41186a420037030020044180056a41106a420037030020044180056a41086a220242003703002004420037038005200441e8006a41ac95c400410d10c501200220172900003703002004200429006837038005200441c8046a41c695c400410c10c501200c41086a200441c8046a41086a290000370000200c20042900c80437000020044180096a20044180056a10f50220042802d8092102200441e0026a41086a222e201c290300370300200441e0026a41106a222f2013290300370300200441e0026a41186a20044180096a41206a290300370300200441e0026a41206a20044180096a41286a290300370300200441e0026a41286a20044180096a41306a290300370300200441e0026a41306a200441b8096a29030037030020042004290388093703e00220042802c009210820044180056a200441e8096a41c80010c9081a200b420020011b2237422088a7210d4100200820024102461b2134200941ffffffff0371212c201f20064102746a21182007200a4102746a21162001410420011b211920044180096a410472213020044180056a410872211220072106201f21010340024002402007450d00024020062016460d00410121102001210820062102200641046a220f21060c020b202c450d002007102c0b024020012018460d00410021072006210f4100211020012102200141046a220821010c010b0240202041ffffffff0371450d00201f102c0b20044180056a41186a420037030020044180056a41106a420037030020044180056a41086a220142003703002004420037038005200441e8006a41f1ddc700410510c5012001200441e8006a41086a22062900003703002004200429006837038005200441c8046a41c4fec000410a10c501200c41086a200441c8046a41086a290000370000200c20042900c80437000020044180096a20044180056a412010b9032004280280092102200429028409210b20044180096a41186a420037030020044180096a41106a420037030020044180096a41086a220142003703002004420037038009200441d8006a41bee8c700410d10c5012001200441d8006a41086a2900003703002004200429005837038009200441e8006a41fcefc700410910c501201b41086a2006290000370000201b200429006837000020044180056a20044180096a10f9040240024020042802800522070d0041002118200441003602800120044204370378410421074100211a4104210e0c010b2004200429028405221437027c200420073602782014422088a7211a2014a721182007210e0b20044180096a41186a2208420037030020044180096a41106a220f420037030020044180096a41086a220142003703002004420037038009200441d8006a41bee8c700410d10c5012001200441d8006a41086a22102900003703002004200429005837038009200441e8006a41b4edc700410f10c501201b41086a2215200441e8006a41086a2206290000370000201b200429006837000020044180056a20044180096a10f5044104211c410021174100211d4100212c02402004280280052216450d0020044180056a41086a280200211d2004418c056a280200212c20042802840521172016211c0b20044180056a41186a420037030020044180056a41106a420037030020044180056a41086a221642003703002004420037038005200441e8006a41c1dcc700410610c501201620062900003703002004200429006837038005200441c8046a4196a4c600410610c501200c41086a200441c8046a41086a290000370000200c20042900c804370000200441306a20044180056a412010c601200428023421162004280230211220084200370300200f4200370300200142003703002004420037038009200441d8006a41bee8c700410d10c501200120102900003703002004200429005837038009200441e8006a41dcecc700410f10c50120152006290000370000201b200429006837000020044180056a20044180096a10e9042004280280052201410420011b210f0240200429028405420020011b2214422088a72208450d002008410c6c2106200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200641746a22060d000b0b02402014a72201450d002001410c6c450d00200f102c0b200b420020021b21382002410420021b212e024002402008450d002016410020121b2132200441003602e802200442043703e002201c41286a212f202e417c6a21312019200d412c6c6a210f200e201a41346c6a21152038422088a7211e200441a0056a2134410021134104213041002110410021164100211220192101024003402012417f6a2106203120124102746a21020340200f2001460d02200241046a2102200641016a2106200128020021072001412c6a220d210120074102470d000b200641016a2112201021072016210102400340024002402001450d0020072110200121160c010b4100200e200e20154622011b21082007200e2015476a2110410121162015200e41346a20011b210e2007211a0b024020080d0020042802800121330c020b4100210120102107200828020022182006490d000b200d2101201a213320182006460d010b024002400240024002402006201e490d00201d450d03201d410274417c6a41027641016a2107410021014100210202400340201e202f20016a2802006a2006460d012001412c6a21012007200241016a2202470d000c050b0b201c20016a2218280200210220044180096a41186a22132018411c6a29020037030020044180096a41106a2230201841146a29020037030020044180096a41086a221f2018410c6a2902003703002004201841046a29020037038009201841246a280200210720182018412c6a201d412c6c20016b41546a10ca081a20044198076a41186a2013290300220b37030020044198076a41106a2030290300221437030020044198076a41086a201f29030022223703002004200429038009223937039807201f2022370300203020143703002013200b3703002004203937038009200441286a2006203210e10520042802280d0141f9fac70041de0041d8fbc700105c000b20022802002102200441206a2006203210e1052004280220450d032004280224211820044180056a411f6a20044180096a411f6a28000036000020044180056a41186a20044180096a41186a29000037030020044180056a41106a20044180096a41106a29000037030020044180056a41086a20044180096a41086a2900003703002004200429008009370380054100211f0c010b200428022c211820044180056a41186a201329030037030020044180056a41106a203029030037030020044180056a41086a201f290300370300200441e8006a41026a200441c8046a41026a2d000022013a0000200420042903800937038005200420042f00c80422133b0168203441026a20013a0000203420133b0000201d417f6a211d4101211f20042802e80221130b20044180096a411f6a222020044180056a411f6a28000036000020044180096a41186a222d20044180056a41186a29030037030020044180096a41106a222b20044180056a41106a29030037030020044180096a41086a223520044180056a41086a2903003703002004200429038005370380090240201320042802e402470d00200441e0026a10a20620042802e80221130b20042802e0022230201341386c6a22012006360204200120333602002001410c6a201f3a0000200141086a20023602002001410d6a200429038009370000200141156a20352903003700002001411d6a202b290300370000200141256a202d2903003700002001412c6a2020280000360000200141346a2018360200200141306a20073602002004201341016a22133602e8020b200d21010c010b0b41f9fac70041de0041e8fbc700105c000b20042802e402211e0240024002402013450d002030201341386c6a21134100211541002116203021010340200141046a290200210b2001410c6a2d0000210e2001280200211820044180056a41276a200141346a220628000036000020044180056a41206a2001412d6a220229000037030020044180056a41186a200141256a221029000037030020044180056a41106a2001411d6a220d29000037030020044180056a41086a200141156a221a29000037030020042001410d6a22122900003703800520044180096a41276a2207200628000036000020044180096a41206a2208200229000037030020044180096a41186a220f201029000037030020044180096a41106a2210200d29000037030020044180096a41086a220d201a2900003703002004201229000037038009200e4102460d0220044198076a41276a2206200728000036000020044198076a41206a2202200829030037030020044198076a41186a200f290300221437030020044198076a41106a2010290300222237030020044198076a41086a200d29030022393703002004200429038009223a370398072007200628000036000020082002290300370300200f201437030020102022370300200d20393703002004203a370380092004280280012202201620186a2206490d0302402002200428027c470d00200441f8006a20021083040b201641016a21162004280278200641346c6a220641346a20062015200220186b6a41346c10ca081a2006200e3a00082006200b370200200641096a200429038009370000200641116a200d290300370000200641196a2010290300370000200641216a200f290300370000200641296a2008290300370000200641306a20072800003600002004200241016a360280012015417f6a2115200141386a22012013470d000b0b20044180096a41276a20044180056a41276a28000036000020044180096a41206a20044180056a41206a29030037030020044180096a41186a20044180056a41186a29030037030020044180096a41106a20044180056a41106a29030037030020044180096a41086a20044180056a41086a2903003703002004200429038005370380090b0240201e450d00201e41386c450d002030102c0b20044180096a41086a200441f8006a41086a280200360200200420042903783703800920044180096a10a3062004202c36028c092004201d3602880920042017360284092004201c3602800920044180096a10a4062004203737028409200420193602800920044180096a10a506203842ffffffff0383500d02202e102c0c020b200620021044000b02402017450d002017412c6c450d00201c102c0b02402018450d00201841346c450d002007102c0b0240203842ffffffff0383500d00202e102c0b2037a72201450d002001412c6c450d002019102c0b20044198076a41086a200341086a280200360200200420032902003703980720044198056a420037030020044190056a420037030020044180056a41086a220142003703002004420037038005200441e8006a41bee8c700410d10c5012001200441e8006a41086a2900003703002004200429006837038005200441c8046a41fcefc700410910c501200c41086a200441c8046a41086a290000370000200c20042900c80437000020044180096a20044180056a10f9040240024020042802800922010d00200441003602880520044204370380050c010b20042004290284093702840520042001360280050b20044180096a20044198076a20044180056a10a60620044180096a41086a280200212e2004418c096a2802002101200428028409212c024002400240024002400240024002402004280280094101460d002001450d0620044180056a41186a2216420037030020044180056a41106a2218420037030020044180056a41086a220e42003703002004420037038005200441e8006a41bee8c700410d10c501200e200441e8006a41086a22192900003703002004200429006837038005200441c8046a4188eec700411110c501200c41086a221a200441c8046a41086a2212290000370000200c20042900c80437000020044180096a20044180056a10eb042004280280092106200429028409210b2016420037030020184200370300200e42003703002004420037038005200441e8006a41bee8c700410d10c501200e20192900003703002004200429006837038005200441c8046a41fcefc700410910c501201a2012290000370000200c20042900c804370000200b420020061b211420044180096a20044180056a10f9042006410420061b21132004280280092206410420061b2115200429028409420020061b2222422088a72207450d05202c20014102746a210d2007417f6a21172015412c6a211c2014422088a72132410021084202210b202c210f410021060340201c200641346c6a210220062101034020072001460d040240200ba722064102470d0002400240200f200d470d0041002106200d210f0c010b200f280200211041012106200f41046a210f0b2010ad4220862006ad84210b0b02400240024020064101470d00200241546a2210280200200b422088a72206470d000240200ba74102470d00200d200f41046a200f200d461b210f0b4101211d02402002415c6a2d00004101470d00200241586a28020021302002280200213120044180096a41186a2002415d6a220641186a29000037030020044180096a41106a200641106a29000037030020044180096a41086a200641086a2900003703002004200629000037038009201028020021064100211d0b200620324f0d0820132006412c6c6a220620303602042006201d360200200641086a200429038009370200200641106a20044180096a41086a290300370200200641186a20044180096a41106a290300370200200641206a20044180096a41186a290300370200200641286a2031360200200841016a21084202210b0c010b2008450d01200120086b220620074f0d0520022008414c6c6a220641746a29020021392006416c6a290200213a200641646a29020021382006415c6a2902002137200641546a2210290200213b200e200641046a221d28020036020020042006417c6a29020037038005200241546a220641286a290200213c200641206a290200213d200641186a290200213e200641106a290200213f200641086a2902002140200241046a221e280200212f20102006290200370200201d202f360200201041086a2040370200201041106a203f370200201041186a203e370200201041206a203d370200201041286a203c3702002006203b3702002002415c6a2037370200200241646a20383702002002416c6a203a370200200241746a2039370200201e200e2802003602002002417c6a2004290380053702000b200141016a210620172001460d070c020b200241346a2102410021082007200141016a2201470d000c070b0b0b2000202c360200200041086a2001360200200041046a202e3602002021201145720d0a0c060b2006200741e48ac500103f000b2007200741f48ac500103f000b2006203241848bc500103f000b2008417f6a20074f0d00202242ffffffff0f832122200720086b21070b2016420037030020184200370300200e42003703002004420037038005200441e8006a41bee8c700410d10c501200e20192900003703002004200429006837038005200441c8046a41fcefc700410910c501201a2012290000370000200c20042900c80437000020044180096a2015200710a70620044180056a4120200428028009220120042802880910a7020240200428028409450d002001102c0b02402022a72201450d00200141346c450d002015102c0b2004201437028409200420133602800920044180096a10a5060b20044180056a41186a420037030020044180056a41106a420037030020044180056a41086a220142003703002004420037038005200441e8006a41ac95c400410d10c5012001200441e8006a41086a22072900003703002004200429006837038005200441c8046a41c695c400410c10c501200c41086a200441c8046a41086a290000370000200c20042900c80437000020044180096a20044180056a10f50220042802d809210f200441e0026a41086a20044180096a41106a2217290300370300200441e0026a41106a20044180096a41186a2201290300370300200441e0026a41186a20044180096a41206a290300370300200441e0026a41206a20044180096a41286a290300370300200441e0026a41286a20044180096a41306a290300370300200441e0026a41306a200441b8096a29030037030020042004290388093703e002200429038009211420044180056a200441e8096a41c80010c9081a200142003703002017420037030020044180096a41086a220642003703002004420037038009200441d8006a4184dec700410310c5012006200441d8006a41086a22082900003703002004200429005837038009200441e8006a41fc95c600410d10c501200120072900003703002017200429006837030020044180056a20044180096a412010b9032004280280052102200429028405210b2001420037030020174200370300200642003703002004420037038009200441d8006a4184dec700410310c501200620082900003703002004200429005837038009200441e8006a41c496c600411a10c5012001200729000037030020172004290068370300200441186a20044180096a412010c601200b420020021b210b2002410420021b21190240024020042802180d00200b422088a72134410021330c010b200428021c2108410021334100210102400240200b422088a722340e020201000b4100210120342106034020012006410176220220016a22072008201920074102746a280200491b2101200620026b220641014b0d000b0b200141002008201920014102746a280200461b21330b02400240203320344f0d00200f41024620145072211c200441e0026a41046a210a20044198076a41086a213220044180056a41086a211d200441a8056a2109410021084100211f20342116203321150340201c0d01201920154102746a2213280200210e024020080d0041bc0210322208450d094100210d20084100360200200841046a20044180096a41b60210c9081a200841003b01ba020b20082102200d211802400340200241186a210720022f01ba02211041002101200241046a221a21060240034020102001460d012006280200210f200641046a2106200741186a2107200141016a21010240417f200f200e47200f200e4b1b41016a0e03000401000b0b2001417f6a21100b02402018450d002018417f6a2118200220104102746a41bc026a28020021020c010b0b200441e8006a4184dec700410310c501200441c8046a418894c600411310c5012004200e3602e00220044198076a200441e0026a410410c7012004200a36028c0920042032360284092004200441e0026a36028809200420044198076a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d070240024020060d00410121070c010b200610322207450d0a0b200441003602a0072004200636029c07200420073602980720044198076a4100411010c80120042802980720042802a00722066a22072004290068370000200741086a200441e8006a41086a220f2900003700002004200641106a22063602a00720044198076a2006411010c80120042802980720042802a00722066a220720042900c804370000200741086a200441c8046a41086a22182900003700002004200641106a22073602a007200428028005210620044198076a2007200110c801200428029807220720042802a007221e6a2006200110c9081a2004201e20016a22013602a0070240200428028405450d002006102c0b20044180096a2007200110830502400240200428028809221e0d0041e0001032221e450d0b420021144108212f420021220c010b2004290380092214428080808070832122200428028c09212f0b0240200428029c07450d002007102c0b200441e8006a4184dec700410310c501200441c8046a41f494c600411610c5012004200e3602e00220044198076a200441e0026a410410c7012004200a36028c0920042032360284092004200441e0026a36028809200420044198076a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d070240024020060d00410121070c010b200610322207450d0a0b20044100360288092004200636028409200420073602800920044180096a4100411010c80120042802800920042802880922066a22072004290068370000200741086a200f2900003700002004200641106a22063602880920044180096a2006411010c80120042802800920042802880922066a220720042900c804370000200741086a20182900003700002004200641106a220736028809200428028005210620044180096a2007200110c8012004280280092207200428028809220f6a2006200110c9081a2004200f20016a2201360288090240200428028405450d002006102c0b20044180056a2007200110a00420042802800541014621012004280284052106200428028805210f0240200428028409450d002007102c0b2006410020011b2130200f410020011b21312022201442ffffffff0f838421140240024002400240024020022f01ba022201410b490d00410021204104210102400240201041054f0d00201021180c010b4105210141052118024002402010417b6a0e020201000b201041796a211841012120410621010c010b41002118410121200b41bc0210322206450d0e4100212d20064100360200200641046a20044180096a41b60210c9082110200641003b01ba02201a20014102746a220f280200212b20044180056a41106a221a2002200141186c6a220741c0006a290200370300201d200741386a2902003703002004200741306a290200370380052010200f41046a20022f01ba022001417f736a220f41027410c9081a200641306a200741c8006a200f41186c10c9081a200220013b01ba022006200f3b01ba022006200220201b220120184102746a220741086a200741046a220720012f01ba0220186b41027410ca081a2007200e3602002001201841186c6a220f41c8006a200f41306a220720012f01ba0220186b41186c10ca081a200f41c0006a2030360200200f41386a201e36020020072014370200200f413c6a202f360200200f41c4006a2031360200200120012f01ba0241016a3b01ba02200441e0026a41106a2235201a290300370300200441e0026a41086a2203201d29030037030020042004290380053703e002024020022802002201450d004100212d034020062136202b210c20022f01b802211820044198076a41106a2225203529030037030020322003290300370300200420042903e00237039807024002400240200122022f01ba022206410b490d004100212041042110024020184105490d0020182110024002402018417b6a0e020201000b201841796a211841012120410621100c010b4100211841012120410521100b41ec0210322206450d13202d41016a212d4100210120064100360200200641046a20044180096a41b60210c9082126200641003b01ba0220062004290280053702bc02200641c4026a201d290200370200200641cc026a201a290200370200200641d4026a20044180056a41186a290200370200200641dc026a20044180056a41206a290200370200200641e4026a2009290200370200200241046a222f2010410274220f6a280200212b20044180096a41106a2230200241306a222a201041186c6a221e41106a29020037030020044180096a41086a2231201e41086a2902003703002004201e290200370380092026202f200f41046a22276a20022f01ba0222282010417f736a220f41027410c9082126200641306a201e41186a200f41186c10c9082129200220103b01ba022006200f3b01ba02201a2030290300370300201d2031290300370300200420042903800937038005200641bc026a200220276a41bc026a202820106b41027410c908211e02400340200620014102746a41bc026a280200221020013b01b8022010200636020020012001200f4922106a2201200f4b0d0120100d000b0b2030201a29030022143703002031201d29030022223703002004200429038005223937038009201a2014370300201d202237030020042039370380052020450d012018410274220f201e6a41086a201e201841016a220141027422106a221e20062f01ba0220186b41027410ca081a201e2036360200202620106a2026200f6a220f20062f01ba0220186b41027410ca081a200f200c3602002029201841186c6a220f41186a200f20062f01ba0220186b41186c10ca081a200f41106a2025290300370200200f41086a2032290300370200200f200429039807370200200620062f01ba0241016a220f3b01ba022001200f41ffff0371220f4b0d020340200620014102746a41bc026a280200221020013b01b8022010200636020020012001200f496a2210200f4b0d032001200f4f2118201021012018450d000c030b0b2018410274220f200241bc026a22106a41086a2010201841016a2201410274221a6a2210200620186b410274220610ca081a20102036360200200241046a2210201a6a2010200f6a220f200610ca081a200f200c3602002002201841186c6a220641c8006a200641306a220f20022f01ba0220186b41186c10ca081a200641c0006a2025290300370200200641386a2032290300370200200f200429039807370200200220022f01ba0241016a22063b01ba022018200641ffff037122064f0d080340200220014102746a41bc026a280200220f20013b01b802200f2002360200200120012006496a220f20064b0d09200120064f2110200f21012010450d000c090b0b2018410274220f200241bc026a22106a41086a2010201841016a2201410274221e6a221020022f01ba0220186b41027410ca081a20102036360200202f201e6a202f200f6a220f20022f01ba0220186b41027410ca081a200f200c360200202a201841186c6a220f41186a200f20022f01ba0220186b41186c10ca081a200f41106a2025290300370200200f41086a2032290300370200200f200429039807370200200220022f01ba0241016a220f3b01ba022001200f41ffff0371220f4b0d000340200220014102746a41bc026a280200221020013b01b8022010200236020020012001200f4922106a2201200f4b0d0120100d000b0b2035201a2903003703002003201d29030037030020042004290380053703e002200228020022010d000b0b200441f8006a41106a20352903002214370300200441f8006a41086a20032903002222370300200420042903e002223937037820044198076a41106a220220143703002032202237030020042039370398072008450d0141ec0210322201450d0e20014100360200200141046a20044180096a41b60210c9082110200141003b01ba0220012004290280053702bc02200141c4026a201d290200370200200141cc026a201a290200370200200141d4026a20044180056a41186a290200370200200141dc026a20044180056a41206a290200370200200141e4026a2009290200370200200120083602bc02200841003b01b8022008200136020020044180096a41106a2218200229030037030020044180096a41086a221a2032290300370300200420042903980737038009200d202d470d0220012f01ba022202410a4b0d03200d41016a210d2001200241016a22083b01ba022001200241186c6a220f41306a200429038009370200200f41386a201a290300370200200f41c0006a2018290300370200201020024102746a202b360200200120084102746a41bc026a2006360200200620083b01b80220062001360200200121080c040b201a20104102746a220641046a2006200120106b41027410ca081a2006200e3602002002201041186c6a220141c8006a200141306a220720022f01ba0220106b41186c10ca081a200141c0006a2030360200200141386a201e360200200720143702002001413c6a202f360200200141c4006a2031360200200220022f01ba0241016a3b01ba020c030b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b201f41016a211f0b02400240024002400240024002402007280200220620072802042202460d0020072007410c6a280200417f6a200641016a71220f36020020072802082006410c6c6a22062802042112200628020022010d01200f21060b410021074100210120062002460d020c010b2006280208210620072007280210417f6a3602102007200728021420066b360214200420063602e402200420013602e00220044180056a200441e0026a10be040240024020042d008005410a460d002004200e3602a407200441013a00a007200442013703980720044180096a20044180056a41f00110c9081a20044198076a20044180096a10a8061a0c010b41002802d8d248450d0041002802d4d248210641002802d0d248210741002802dcd2482110200441ce003602c009200442c4808080103703b809200441dc8fc6003602b409200442203702ac09200441b7a1c6003602a809200442003703a009200441c4b5c80036029c092004420137039009200441aca1c60036028c092004410336028809200441b4a1c600360284092004410136028009200741f8a3c000201041024622101b20044180096a200641e0a3c00020101b28021011030020042d0080052206410a460d00024002400240024002400240024020060e0700010203040506070b200428028405200428028c0510c30202402004280288052206450d0020064198026c450d00200428028405102c0b20042802900520042802980510c4022004280294052206450d0620064188026c450d06200428029005102c0c060b200428028405200428028c0510c30202402004280288052206450d0020064198026c450d00200428028405102c0b20042802900520042802980510c4022004280294052206450d0520064188026c450d05200428029005102c0c050b200428028405200428028c0510c30202402004280288052206450d0020064198026c450d00200428028405102c0b20042802900520042802980510c4022004280294052206450d0420064188026c450d04200428029005102c0c040b200428028405200428028c0510c3022004280288052206450d0320064198026c450d03200428028405102c0c030b200428028805450d02200428028405102c0c020b201d10a20120042802840510c502200428028405102c0c010b201d10a20120042802840510c502200428028405102c0b024020120d004100211241012107200f2002470d010c020b2001102c41012107200f2002460d010b024020160d00410021160c020b201541016a20167021150c010b024020160d00410021160c010b201620154d0d012013201341046a20162015417f736a41027410ca081a201541002016417f6a221620154b1b21150b20070d012001450d012012450d012001102c0c010b201520161047000b201620154d0d020c000b0b410021084100211f20342116203321150b200ba7210102400240201620154b0d0020044198096a420037030020044190096a420037030020044180096a41086a220642003703002004420037038009200441d8006a4184dec700410310c5012006200441d8006a41086a2900003703002004200429005837038009200441e8006a41c496c600411a10c501201741086a200441e8006a41086a2900003700002017200429006837000020044180096a412010b4010c010b201920154102746a280200210620044198096a420037030020044190096a420037030020044180096a41086a220242003703002004420037038009200441d8006a4184dec700410310c5012002200441d8006a41086a2900003703002004200429005837038009200441e8006a41c496c600411a10c501201b41086a200441e8006a41086a290000370000201b2004290068370000200420063602800520044180096a412020044180056a410410a7020b20042016360288052004201936028005200420013602840520044198096a420037030020044190096a420037030020044180096a41086a220642003703002004420037038009200441d8006a4184dec700410310c5012006200441d8006a41086a2900003703002004200429005837038009200441e8006a41fc95c600410d10c501201741086a200441e8006a41086a2900003700002017200429006837000020044180096a20044180056a108a050240200141ffffffff0371450d002019102c0b0240024020080d0041002101410021084100211f0c010b20082101034020082f01ba022106200d450d01200d417f6a210d200820064102746a41bc026a280200210820012802bc0221010c000b0b200441ac076a200636020020044198076a41106a20083602002004201f3602b007200442003703a0072004200136029c07200441003602980720044180096a20044198076a10a9060240200428028c09450d0020044188076a41046a210d200441d8006a41086a210e200441bc0b6a41046a211c20044188076a41086a211b20044180096a41047221100340200441f8006a41086a201041086a290200221437030020042010290200220b37037820042802980921152004280294092116200428028009210f200441e0026a41086a220120143703002004200b3703e00202400240200ba720042802e402460d0020044180056a41086a2001290300370300200420042903e00237038005200441e8006a4184dec700410310c501200441c8046a418894c600411310c5012004200f3602bc0b20044188076a200441bc0b6a410410c7012004201c36028c092004201b360284092004200441bc0b6a36028809200420044188076a36028009200441d8006a20044180096a107e2004280260220141206a2206417f4c0d070240024020060d00410121020c010b200610322202450d0a0b20044100360290072004200636028c07200420023602880720044188076a4100411010c80120042802880720042802900722066a22022004290068370000200241086a200441e8006a41086a22192900003700002004200641106a22063602900720044188076a2006411010c80120042802880720042802900722066a220220042900c804370000200241086a200441c8046a41086a221a2900003700002004200641106a2202360290072004280258210620044188076a2002200110c801200428028807221820042802900722026a2006200110c9081a2004200220016a2212360290070240200428025c450d002006102c0b200428028c05417f6a2207200428028405220220042802800522016b712208410c6c41046a2206417f4c0d070240024020060d00410121130c010b200610322213450d0a0b20044100360288092004200636028409200420133602800920044180096a2008108f01024020022001460d002004280288052108034020082001410c6c6a2206280200200628020820044180096a10bb01200141016a20077122012002470d000b0b20182012200428028009220120042802880910a7020240200428028409450d002001102c0b0240200428028c07450d002018102c0b20044180056a10aa06200441e8006a4184dec700410310c501200441c8046a41f494c600411610c5012004200f36028807200441d8006a20044188076a410410c7012004200d36028c092004200e36028409200420044188076a360288092004200441d8006a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d070240024020060d00410121020c010b200610322202450d0a0b20044100360288092004200636028409200420023602800920044180096a4100411010c80120042802800920042802880922066a22022004290068370000200241086a20192900003700002004200641106a22063602880920044180096a2006411010c80120042802800920042802880922066a220220042900c804370000200241086a201a2900003700002004200641106a220236028809200428028005210620044180096a2002200110c801200428028009220220042802880922076a2006200110c9081a2004200720016a2201360288090240200428028405450d002006102c0b200220012016201510ea02200428028409450d012002102c0c010b200441e8006a4184dec700410310c501200441c8046a418894c600411310c5012004200f36028807200441d8006a20044188076a410410c7012004200d36028c092004200e36028409200420044188076a360288092004200441d8006a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d060240024020060d00410121020c010b200610322202450d090b20044100360288092004200636028409200420023602800920044180096a4100411010c80120042802800920042802880922066a22022004290068370000200241086a200441e8006a41086a22072900003700002004200641106a22063602880920044180096a2006411010c80120042802800920042802880922066a220220042900c804370000200241086a200441c8046a41086a22082900003700002004200641106a220236028809200428028005210620044180096a2002200110c801200428028009220220042802880922156a2006200110c9081a2004201520016a2201360288090240200428028405450d002006102c0b2002200110b4010240200428028409450d002002102c0b200441e8006a4184dec700410310c501200441c8046a41f494c600411610c5012004200f36028807200441d8006a20044188076a410410c7012004200d36028c092004200e36028409200420044188076a360288092004200441d8006a3602800920044180056a20044180096a107e200428028805220141206a2206417f4c0d060240024020060d00410121020c010b200610322202450d090b20044100360288092004200636028409200420023602800920044180096a4100411010c80120042802800920042802880922066a22022004290068370000200241086a20072900003700002004200641106a22063602880920044180096a2006411010c80120042802800920042802880922066a220220042900c804370000200241086a20082900003700002004200641106a220236028809200428028005210620044180096a2002200110c801200428028009220220042802880922076a2006200110c9081a2004200720016a2201360288090240200428028405450d002006102c0b2002200110b4010240200428028409450d002002102c0b200441e0026a10aa060b20044180096a20044198076a10a906200428028c090d000b0b20044180056a20044198076a10a9060240200428028c05450d0020044180096a4104722101034020044180096a41186a20044180056a41186a28020036020020044180096a41106a20044180056a41106a29030037030020044180096a41086a20044180056a41086a290300370300200420042903800537038009200110aa0620044180056a20044198076a10a906200428028c050d000b0b0240200428029c072206450d00200628020021012006102c2001450d000340200128020021062001102c2006210120060d000b0b20044198096a2201420037030020044190096a2206420037030020044180096a41086a22024200370300200442003703800920044180056a419ee3c300411510c501200220044180056a41086a220729000037030020042004290080053703800920044180056a418ce4c300410810c50120012007290000370300200620042900800537030020044180096a412041c4b5c800410010a702200041043a00000240202e450d00202c450d00202e41ffffffff0371450d00202c102c0b2021201145720d040b201110a1062011102c200524000f0b20022802002202200d4f0d00200441023602800920192002412c6c6a2201290200210b20042903980921142004290390092122200429038809213920012004290380093702002001290208213a200120393702082001290210213920012022370210200141186a220629020021222006201437020020042039370390052004203a370388052004200b37038005200420223703980502400240200ba7417f6a0e020101000b200141206a2802002106200141246a2802002102200141286a2802002101200b422088a7210e202f201241106a290200370300202e201241086a290200370300200420122902003703e002024020100d0020044198076a41106a2210202f29030037030020044198076a41086a2215202e290300370300200420042903e0023703980720134200370300201c4200370300201a42003703002004420037038009200441d8006a41bee8c700410d10c501201a201d2900003703002004200429005837038009200441e8006a41b4edc700410f10c501201e2017290000370000201b2004290068370000200441f8006a20044180096a10f50402400240200428027822310d00200441043602c8044100213141002132410021330c010b200420313602c804200428027c2131200428028001213220042802840121330b200420333602d404200420323602d004200420313602cc042030200429039807370200203041086a2015290300370200203041106a20102903003702002004200e36028009200420013602a409200420023602a0092004200636029c09200441c8046a20044180096a2034109d01200441f8006a41086a20042903d004370300200420042903c804220b37037820134200370300201c4200370300201a42003703002004420037038009200441d8006a41bee8c700410d10c501201a201d2900003703002004200429005837038009200441e8006a41b4edc700410f10c501201e2017290000370000201b20042900683700000240200ba722010d0020044180096a412010b4010c020b20044180096a200441f8006a108e05200428027c2206450d012006412c6c450d012001102c0c010b20134200370300201c4200370300201a42003703002004420037038009200441d8006a41bee8c700410d10c501201a201d2900003703002004200429005837038009200441e8006a41f4eec700411410c501201e2017290000370000201b200429006837000020044198076a20044180096a412010b9032004280298072201410420011b21150240024002400240200429029c07420020011b220b422088a722310e020300010b41002101200e2015280200470d020c010b4100210120312106034020012006410176220220016a2210200e201520104102746a280200491b2101200620026b220641014b0d000b200e201520014102746a280200470d0120012031490d00200120311047000b201520014102746a2206200641046a2001417f7320316a41027410ca081a200b4280808080707c210b0b20042015360298072004200b37029c0720134200370300201c4200370300201a42003703002004420037038009200441d8006a41bee8c700410d10c501201a201d2900003703002004200429005837038009200441e8006a41f4eec700411410c501201e2017290000370000201b200429006837000020044180096a412020044198076a10d104200ba72201450d00200141ffffffff0371450d002015102c0b200f2106200821010c000b0b103b000b200524000f0b1039000bf10101037f200128022421020240024002402001280200220341ff0171450d00200141046a280200210120022002280200417f6a22043602004100210320040d022002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22042004280200417f6a22043602002004450d010c020b20022002280200417f6a2204360200200341807e7121014101210320040d012002280208200228020c2802001102000240200228020c280204450d002002280208102c0b200241046a22042004280200417f6a220436020020040d010b2002102c0b20002001360204200020033602000b9b2205027f017e037f017e097f230041f0026b220424004101210502400240024020002001460d0041022105200110fb02450d0042002106200441a0026a2205420037030020044188026a41106a2207420037030020044188026a41086a220842003703002004420037038802200441a8026a41ac95c400410d10c5012008200441a8026a41086a290000370300200420042900a80237038802200441c8026a41c695c400410c10c5012005200441c8026a41086a290000370300200720042900c802370300200441186a20044188026a10f5020240024020042802704102470d00410021094200210a410021074100210b410021084100210c4100210d0c010b200441186a41106a290300210a20044198016a2802002109200441a8016a2802002107200441ac016a280200210b200441b8016a2802002108200441bc016a280200210c200441c0016a280200210d200429032021060b024020020d00410321050c010b4104210520072002490d00024020030d00410521050c010b4106210520082003490d00200441a8026a4187dec700410410c501200441c8026a41bcadc500411710c5012004410036029002200442013703880220044188026a41004104102f20042802880220042802900222056a20003600002004200541046a22053602900220044188026a20054104102f200428028802220520042802900222076a20013600002004200741046a220736029002200441b8026a2005200710c701200441246a200520076a360200200420053602202004200441c0026a36021c2004200441b8026a360218200441d8026a200441186a107e0240200428028c02450d002005102c0b20042802e002220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b200441003602c002200420073602bc02200420083602b802200441b8026a4100411010c80120042802b80220042802c00222076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a22073602c002200441b8026a2007411010c80120042802b80220042802c00222076a220820042900c802370000200841086a200441c8026a41086a2900003700002004200741106a22083602c00220042802d8022107200441b8026a2008200510c80120042802b802220820042802c002220e6a2007200510c9081a2004200e20056a22053602c002024020042802dc02450d002007102c0b200441186a2008200510fe0420042d00382107024020042802bc02450d002008102c0b41072105200741ff01714102470d00200441a8026a4187dec700410410c501200441c8026a41acb1c500410c10c5012004410036029002200442013703880220044188026a41004104102f20042802880220042802900222056a20003600002004200541046a22053602900220044188026a20054104102f200428028802220520042802900222076a20013600002004200741046a220736029002200441b8026a2005200710c701200441186a410c6a200520076a360200200420053602202004200441c0026a36021c2004200441b8026a360218200441d8026a200441186a107e0240200428028c02450d002005102c0b20042802e002220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b20044100360290022004200736028c02200420083602880220044188026a4100411010c80120042802880220042802900222076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a22073602900220044188026a2007411010c80120042802880220042802900222076a220820042900c802370000200841086a200441c8026a41086a2900003700002004200741106a22083602900220042802d802210720044188026a2008200510c8012004280288022208200428029002220e6a2007200510c9081a2004200e20056a220536029002024020042802dc02450d002007102c0b200441186a2008200510f30220042d004c21070240200428028c02450d002008102c0b41082105200741ff01714102470d00200441a8026a4187dec700410410c501200441c8026a41fcb2c500411710c501200420003602b802200441d8026a200441b8026a410410c701200441246a200441b8026a41046a3602002004200441e0026a36021c2004200441b8026a3602202004200441d8026a36021820044188026a200441186a107e200428029002220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b200441003602202004200736021c20042008360218200441186a4100411010c8012004280218200428022022076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a2207360220200441186a2007411010c8012004280218200428022022076a220820042900c802370000200841086a200441c8026a41086a2900003700002004200741106a22083602202004280288022107200441186a2008200510c801200428021822082004280220220e6a2007200510c9081a2004200e20056a22053602200240200428028c02450d002007102c0b200441cc026a41003a0000200441003602c802200441106a20082005200441c8026a4105410010b704024002402004280210450d00200420042802142205410520054105491b36028c022004200441c8026a36028802200441086a20044188026a108702200428020c210f20042802084521100c010b410021100b0240200428021c450d002008102c0b200441a8026a4187dec700410410c501200441c8026a41ecaec500411b10c501200420003602b802200441d8026a200441b8026a410410c701200441246a200441b8026a41046a3602002004200441e0026a36021c2004200441b8026a3602202004200441d8026a36021820044188026a200441186a107e200428029002220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b200441003602202004200736021c20042008360218200441186a4100411010c8012004280218200428022022076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a2207360220200441186a2007411010c8012004280218200428022022076a220820042900c802370000200841086a200441c8026a41086a2900003700002004200741106a22083602202004280288022107200441186a2008200510c801200428021822082004280220220e6a2007200510c9081a2004200e20056a22053602200240200428028c02450d002007102c0b20042008200510c60120042802002111200428020421120240200428021c450d002008102c0b200441c8026a41f1ddc700410510c50120044188026a41e8fec000410b10c501200420003602b802200441d8026a200441b8026a410410c701200441246a200441b8026a41046a3602002004200441e0026a36021c2004200441b8026a3602202004200441d8026a360218200441a8026a200441186a107e20042802b002220541206a2207417f4c0d010240024020070d004101210e0c010b20071032220e450d030b41002108200441003602e002200420073602dc022004200e3602d802200441d8026a4100411010c80120042802d80220042802e00222076a220e20042900c802370000200e41086a200441c8026a41086a2900003700002004200741106a22073602e002200441d8026a2007411010c80120042802d80220042802e00222076a220e200429008802370000200e41086a20044188026a41086a2900003700002004200741106a220e3602e00220042802a8022107200441d8026a200e200510c80120042802d802220e20042802e00222136a2007200510c9081a2004201320056a22053602e002024020042802ac02450d002007102c0b200441186a200e200510b301024020042802182205450d0041012108200428021c450d002005102c0b200f410020101b210f2012410020111b2107024020042802dc02450d00200e102c0b410921052007200f6a200d200c20081b4f0d00200441a8026a4187dec700410410c501200441c8026a41ecaec500411b10c501200420003602b802200441d8026a200441b8026a410410c701200441246a200441b8026a41046a3602002004200441e0026a36021c2004200441b8026a3602202004200441d8026a36021820044188026a200441186a107e200428029002220541206a2208417f4c0d014101210c02402008450d0020081032220c450d030b200741016a210d200441003602202004200836021c2004200c360218200441186a4100411010c8012004280218200428022022076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a2207360220200441186a2007411010c8012004280218200428022022076a220820042900c802370000200841086a200441c8026a41086a2900003700002004200741106a22083602202004280288022107200441186a2008200510c801200428021822082004280220220c6a2007200510c9081a2004200c20056a22053602200240200428028c02450d002007102c0b2004200d360288022008200520044188026a410410a7020240200428021c450d002008102c0b2004200a3703202004200637031820044100360228200441003a00382004200b360234200420023602302004200336022c200441a8026a4187dec700410410c501200441c8026a41bcadc500411710c501200441003602e002200442013703d802200441d8026a41004104102f20042802d80220042802e00222056a20003600002004200541046a22053602e002200441d8026a20054104102f20042802d802220520042802e00222076a20013600002004200741046a22073602e002200441e8026a2005200710c70120044194026a200520076a36020020042005360290022004200441f0026a36028c022004200441e8026a36028802200441b8026a20044188026a107e024020042802dc02450d002005102c0b20042802c002220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b20044100360290022004200736028c02200420083602880220044188026a4100411010c80120042802880220042802900222076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a22073602900220044188026a2007411010c80120042802880220042802900222076a220820042900c802370000200841086a200441c8026a41086a2900003700002004200741106a22083602900220042802b802210720044188026a2008200510c8012004280288022208200428029002220c6a2007200510c9081a2004200c20056a220536029002024020042802bc02450d002007102c0b20082005200441186a1088050240200428028c02450d002008102c0b200441306a2208420037030041102105200441186a41106a220c4200370300200441186a41086a2207420037030020044200370318200441186a4187dec700410410c50120044188026a41acaec500411b10c501200820044188026a41086a220d290000370300200c200429008802370300200441003602d002200442013703c802200441c8026a41004104102f20042802c80220042802d00222086a20003600002004200841046a22083602d002200441c8026a20084104102f20042802c80220042802d00222086a20013600002004200841046a22083602d002200d2008360200200420042903c80237038802200441186a412020044188026a10f402200441246a200236020020072003360200200441003602900220044201370388022004200036021c200441073a0018200441186a20044188026a10f602200441186a10f7022007200428029002360200200420042903880237031820092001200441186a10c4011a0b200441f0026a240020050f0b103b000b1039000bbb0301047f230041c0006b22022400419094c5002103411f2104410e21050240024002400240024002400240024002400240024002400240024002400240200141ff01710e10000102030405060708090a0b0c0d0e0f000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41c09ac5001046000b41f08fc500210341152104410021050c0d0b419090c5002103410121050c0c0b41b890c5002103411b2104410221050c0b0b41dc90c500210341232104410321050c0a0b418891c5002103411e2104410421050c090b41b091c500210341262104410521050c080b41e091c5002103411c2104410621050c070b418492c5002103410721050c060b41ac92c5002103411c2104410821050c050b41d092c5002103411c2104410921050c040b41f492c500210341212104410a21050c030b41a093c5002103411e2104410b21050c020b41c893c5002103411c2104410c21050c010b41ec93c5002103411b2104410d21050b200041832e3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bc41f03057f017e077f23004190046b22022400200241c0036a4187dec700410410c501200241d0036a41bcadc500411710c501200241003602f803200242013703f003200241f0036a41004104102f20022802f00320022802f80322036a20013600002002200341046a22033602f803200241f0036a20034104102f20022802f003220320022802f80322046a20003600002002200441046a22043602f803200241b0036a2003200410c701200241cc016a200320046a360200200220033602c8012002200241b8036a3602c4012002200241b0036a3602c001200241e0036a200241c0016a107e024020022802f403450d002003102c0b024002400240024020022802e803220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200241003602b803200220043602b403200220053602b003200241b0036a4100411010c80120022802b00320022802b80322046a220520022900c003370000200541086a200241c0036a41086a2900003700002002200441106a22043602b803200241b0036a2004411010c80120022802b00320022802b80322046a220520022900d003370000200541086a200241d0036a41086a2900003700002002200441106a22053602b80320022802e0032104200241b0036a2005200310c80120022802b003220520022802b80322066a2004200310c9081a2002200620036a22033602b803024020022802e403450d002004102c0b200241c0016a2005200310fe04200241f0036a41086a200241c0016a41086a290300370300200241f0036a41106a200241c0016a41106a290300370300200241f0036a41186a2204200241c0016a41186a290300370300200220022903c0013703f003200220022800e1013602d0032002200241e4016a2800003600d303024020022d00e00122034102460d00200241a0016a41186a2004290300370300200241a0016a41106a200241f0036a41106a290300370300200241a0016a41086a200241f0036a41086a290300370300200220022903f0033703a001200220022802d00336029801200220022800d30336009b010b024020022802b403450d002005102c0b20034102460d02200241f0006a410e6a200241a0016a41086a2205290300370100200241f0006a41166a200241a0016a41106a290300370100200241f0006a411e6a200241a0016a41186a2903002207370100200241c8006a411e6a22042007370100200220022903a001370176200241c8006a41086a200241f0006a41086a290100370300200241c8006a41106a200241f0006a41106a290100370300200241c8006a41186a200241f0006a41186a29010037030020022002280298013602202002200228009b0136002320022002290170370348200241286a41186a2004290100370300200241286a41106a200241c8006a41166a290100370300200241286a41086a200241c8006a410e6a2901003703002002200229014e370328410b210420030d03200241f0036a41186a22034200370300200241f0036a41106a22044200370300200241f0036a41086a22064200370300200242003703f003200241c0036a41ac95c400410d10c5012006200241c0036a41086a290000370300200220022900c0033703f003200241d0036a41c695c400410c10c5012003200241d0036a41086a290000370300200420022900d003370300200241c0016a200241f0036a10f502200241c0026a2802002108200241d8026a2802002109200241dc026a280200210a200228029802210b200241c8006a41f1ddc700410510c501200241f0006a41e8fec000410b10c501200220003602d003200241a0016a200241d0036a410410c701200241c0016a410c6a200241d0036a41046a360200200220053602c4012002200241d0036a3602c8012002200241a0016a3602c001200241f0036a200241c0016a107e20022802f803220341206a2204417f4c0d000240024020040d00410121060c010b200410322206450d020b41002105200241003602a801200220043602a401200220063602a001200241a0016a4100411010c80120022802a00120022802a80122046a22062002290048370000200641086a200241c8006a41086a2900003700002002200441106a22043602a801200241a0016a2004411010c80120022802a00120022802a80122046a22062002290070370000200641086a200241f0006a41086a2900003700002002200441106a22063602a80120022802f0032104200241a0016a2006200310c80120022802a001220620022802a801220c6a2004200310c9081a2002200c20036a22033602a801024020022802f403450d002004102c0b200241c0016a2006200310b301024020022802c0012203450d004101210520022802c401450d002003102c0b024020022802a401450d002006102c0b200241c0036a4187dec700410410c501200241d0036a41ecb1c500411810c501200220003602f003200241c8006a200241f0036a410410c701200241cc016a200241f0036a41046a3602002002200241d0006a3602c4012002200241f0036a3602c8012002200241c8006a3602c001200241f0006a200241c0016a107e2002280278220341206a2204417f4c0d000240024020040d00410121060c010b200410322206450d020b200241003602c801200220043602c401200220063602c001200241c0016a4100411010c80120022802c00120022802c80122046a220620022900c003370000200641086a200241c0036a41086a2900003700002002200441106a22043602c801200241c0016a2004411010c80120022802c00120022802c80122046a220620022900d003370000200641086a200241d0036a41086a2900003700002002200441106a22063602c80120022802702104200241c0016a2006200310c80120022802c001220620022802c801220c6a2004200310c9081a2002200c20036a22033602c80102402002280274450d002004102c0b200241cc006a41003a000020024100360248200241186a20062003200241c8006a4105410010b704024002402002280218450d002002200228021c2203410520034105491b3602742002200241c8006a360270200241106a200241f0006a1087022002280214210c200228021045210d0c010b4100210d0b024020022802c401450d002006102c0b200241c0036a4187dec700410410c501200241d0036a41b0afc500411f10c501200220003602f003200241c8006a200241f0036a410410c701200241cc016a200241f0036a41046a3602002002200241d0006a3602c4012002200241f0036a3602c8012002200241c8006a3602c001200241f0006a200241c0016a107e2002280278220341206a2204417f4c0d000240024020040d00410121060c010b200410322206450d020b4100200a200b410246220b1b210a41002009200b1b2109200241003602c801200220043602c401200220063602c001200241c0016a4100411010c80120022802c00120022802c80122046a220620022900c003370000200641086a200241c0036a41086a2900003700002002200441106a22043602c801200241c0016a2004411010c80120022802c00120022802c80122046a220620022900d003370000200641086a200241d0036a41086a2900003700002002200441106a22063602c80120022802702104200241c0016a2006200310c80120022802c001220620022802c801220e6a2004200310c9081a2002200e20036a22033602c80102402002280274450d002004102c0b200a200920051b2105200c4100200d1b2109200241086a2006200310c601200228020c410020022802081b2103024020022802c401450d002006102c0b410c2104200320096a20054f0d03200241e4016a2002280023360000200241c0016a41186a200241286a41186a290300370300200241c0016a41106a200241286a41106a290300370300200241c0016a41086a200241286a41086a290300370300200220022903283703c001200241013a00e001200220022802203600e101200241c0036a4187dec700410410c501200241d0036a41bcadc500411710c5012002410036025020024201370348200241c8006a41004104102f2002280248200228025022046a20013600002002200441046a2204360250200241c8006a20044104102f20022802482204200228025022056a20003600002002200541046a2205360250200241a0016a2004200510c701200241fc006a200420056a360200200220043602782002200241a0016a41086a3602742002200241a0016a360270200241f0036a200241f0006a107e0240200228024c450d002004102c0b20022802f803220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200241003602782002200536027420022006360270200241f0006a4100411010c8012002280270200228027822056a220620022900c003370000200641086a200241c0036a41086a2900003700002002200541106a2205360278200241f0006a2005411010c8012002280270200228027822056a220620022900d003370000200641086a200241d0036a41086a2900003700002002200541106a220636027820022802f0032105200241f0006a2006200410c80120022802702206200228027822096a2005200410c9081a2002200920046a2204360278024020022802f403450d002005102c0b20062004200241c0016a10880502402002280274450d002006102c0b200241c0036a4187dec700410410c501200241d0036a41b0afc500411f10c501200220003602f003200241c8006a200241f0036a410410c701200241cc016a200241f0036a41046a3602002002200241d0006a3602c4012002200241f0036a3602c8012002200241c8006a3602c001200241f0006a200241c0016a107e2002280278220441206a2205417f4c0d004101210602402005450d00200510322206450d020b200341016a2109200241003602c801200220053602c401200220063602c001200241c0016a4100411010c80120022802c00120022802c80122036a220520022900c003370000200541086a200241c0036a41086a2900003700002002200341106a22033602c801200241c0016a2003411010c80120022802c00120022802c80122036a220520022900d003370000200541086a200241d0036a41086a2900003700002002200341106a22053602c80120022802702103200241c0016a2005200410c80120022802c001220520022802c80122066a2003200410c9081a2002200620046a22043602c80102402002280274450d002003102c0b41002008200b1b21032002200936027020052004200241f0006a410410a702024020022802c401450d002005102c0b2002410036027820024201370370200220003602c401200241083a00c001200241c0016a200241f0006a10f602200241c0016a10f702200241c0016a41086a2002280278360200200220022903703703c00120032001200241c0016a10c4011a411021040c030b103b000b1039000b410a21040b20024190046a240020040bb00e05037f047e067f017e017f23004190026b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041023a00340c010b2003280214210402400240200341106a41086a28020022054110490d0020054170714110460d002005417c7122024120460d0020024124460d0020024128460d002002412c460d0020024130460d0020054134460d00200141086a290000210620012900002107200141186a2900002108200129001021092001280020210a2001280024210b2001280028210c200128002c210d2001280030210e41002102024002400240024020012d00340e020100040b200341003a004020054135460d02200341013a0040200320012d00353a002020054136460d01200341023a0040200320012d00363a002120054137460d01200341033a0040200320012d00373a002220054138460d01200341043a0040200320012d00383a002320054139460d01200341053a0040200320012d00393a00242005413a460d01200341063a0040200320012d003a3a00252005413b460d01200341073a0040200320012d003b3a00262005413c460d01200341083a0040200320012d003c3a00272005413d460d01200341093a0040200320012d003d3a00282005413e460d012003410a3a0040200320012d003e3a00292005413f460d012003410b3a0040200320012d003f3a002a200541c000460d012003410c3a0040200320012d00403a002b200541c100460d012003410d3a0040200320012d00413a002c200541c200460d012003410e3a0040200320012d00423a002d200541c300460d012003410f3a0040200320012d00433a002e200541c400460d01200341103a0040200320012d00443a002f200541c500460d01200341113a0040200320012d00453a0030200541c600460d01200341123a0040200320012d00463a0031200541c700460d01200341133a0040200320012d00473a0032200541c800460d01200341143a0040200320012d00483a0033200541c900460d01200341153a0040200320012d00493a0034200541ca00460d01200341163a0040200320012d004a3a0035200541cb00460d01200341173a0040200320012d004b3a0036200541cc00460d01200341183a0040200320012d004c3a0037200541cd00460d01200341193a0040200320012d004d3a0038200541ce00460d012003411a3a0040200320012d004e3a0039200541cf00460d012003411b3a0040200320012d004f3a003a200541d000460d012003411c3a0040200320012d00503a003b200541d100460d012003411d3a0040200320012d00513a003c200541d200460d012003411e3a0040200320012d00523a003d200541d300460d012003411f3a0040200320012d00533a003e200541d400460d01200341b0016a41106a2202200341206a41106a290300370300200341b0016a41086a2205200341206a41086a290300370300200320012d00543a003f200341b0016a41186a220f200341206a41186a290300370300200341203a00402003200329032022103703d001200320103703b00120034190016a41186a2211200f29030037030020034190016a41106a220f200229030037030020034190016a41086a22022005290300370300200320032903b00137039001200341f0006a41186a2011290300370300200341f0006a41106a200f290300370300200341f0006a41086a20022903003703002003200329039001370370410121020b200341c8006a41186a2205200341f0006a41186a290300370300200341c8006a41106a220f200341f0006a41106a290300370300200341c8006a41086a2211200341f0006a41086a290300370300200341ea006a200341ef006a2d00003a000020032003290370370348200320032f006d3b0168200041186a20083703002000200937031020002006370308200020073703002000200e3602302000200d36022c2000200c3602282000200b3602242000200a360220200341206a411f6a220a200341c8006a411f6a280000360000200341206a41186a220b2005290300370300200341206a41106a2205200f290300370300200341206a41086a220c201129030037030020032003290348370320200041d4006a200a280000360000200041cd006a200b290300370000200041c5006a20052903003700002000413d6a200c290300370000200020032903203700350c030b200341003a00400b20034190016a41086a200341b0016a41086a29030037030020034190016a41106a200341b0016a41106a2903003703000b20034100360228200342013703202003410f3602d4012003200341086a3602d0012003200341206a3602b001200341dc006a41013602002003420137024c200341b4bcc3003602482003200341d0016a360258200341b0016a41dcb7c000200341c8006a103e1a2003350228422086200335022084100002402003280224450d002003280220102c0b410221020b200020023a00342004450d002001102c0b20034190026a24000b31002001ad4220862000ad84200235020842208620022802002200ad84101d0240200241046a280200450d002000102c0b0bb409061b7f017e037f047e057f017e230041d0006b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822010d00200041023602580c010b200228020c2103024002400240200241106a28020022044104490d002004417c7122054104460d0020054108460d002005410c460d0020054110460d0020054114460d0020054118460d002005411c460d0020054120460d0020054124460d0020054128460d002005412c460d0020044130460d00200128000021062001280004210720012800082108200128000c21092001280010210a2001280014210b2001280018210c200128001c210d2001280020210e2001280024210f20012800282110200128002c21112004414f6a2112200141316a2113410021050240024020012d00300e020100020b20124104490d012004414b6a2112200141356a211320012800312114410121050b20124104490d002012417c7122044104460d0020044108460d002004410c460d0020044110460d0020044114460d0020044118460d002004411c460d0020044120460d002012415c6a4108490d002004412c460d0020044130460d0020044134460d00201241486a4110490d00201241b87f6a4110490d00200441d800460d00200441dc00460d00200441e000460d00200441e400460d00200441e800460d00201328000021122013280004211520132800082116201328000c211720132800102118201328001421192013280018211a201328001c211b2013280020211c2013290024211d201328002c211e2013280030211f20132800342120201341c0006a290000212120132900382122201341d0006a29000021232013290048212420132800582125201328005c2126201328006021272013280064212820132800682129200441947f6a220441084b0d01410120047441910271450d010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b410221050c010b201329006c212a20132800742104200041106a202137030020002022370308200041206a202337030020002024370318200020063602282000200736022c20002008360230200020093602342000200a3602382000200b36023c2000200c3602402000200d3602442000200e3602482000200f36024c20002010360250200020113602542000201436025c200041e0006a2012360200200041e4006a2015360200200041e8006a2016360200200041ec006a2017360200200041f0006a2018360200200041f4006a2019360200200041f8006a201a360200200041fc006a201b36020020004180016a201c36020020004184016a201e36020020004188016a201f3602002000418c016a202036020020004190016a202536020020004194016a202636020020004198016a20273602002000419c016a2028360200200041a0016a2029360200200041ac016a2004360200200041a4016a202a3702002000201d3703000b200020053602582003450d002001102c0b200241d0006a24000bc21601037f034002400240024002400240024002400240024002400240024020002d00000e0a000102030405060708090a0b2001200141086a22022802004101102f200128020020022802006a41003a00002002200228020041016a3602002001200041046a10a401200041106a280200200041186a280200200110a3010f0b2001200141086a22022802004101102f200128020020022802006a41013a00002002200228020041016a3602002001200041046a10a401200041106a280200200041186a280200200110a3010f0b2001200141086a22022802004101102f200128020020022802006a41023a00002002200228020041016a3602002001200041046a10a401200041106a280200200041186a280200200110a3010f0b2001200141086a22022802004101102f200128020020022802006a41033a00002002200228020041016a3602002001200041106a10a6012001200041046a10a4010f0b2001200141086a22022802004101102f200128020020022802006a41043a00002002200228020041016a2203360200024002400240024020002d00010e03000102030b200120034101102f200128020020022802006a41003a00002002200228020041016a3602000c020b200120034101102f200128020020022802006a41013a00002002200228020041016a3602000c010b200120034101102f200128020020022802006a41023a00002002200228020041016a3602000b20002802042000410c6a280200200110bb010f0b2001200141086a22022802004101102f200128020020022802006a41053a00002002200228020041016a3602002001200041086a10a501200041046a2802002100200120022802004101102f200128020020022802006a41003a00000c050b2001200141086a22022802004101102f200128020020022802006a41063a00002002200228020041016a3602002001200041086a10a501200041046a2802002100200120022802004101102f200128020020022802006a41003a00000c040b2001200141086a22022802004101102f200128020020022802006a41073a00002002200228020041016a22043602000240024002400240200041046a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22022802006a41033a00002002200228020041016a220336020020002802042104200120034104102f200128020020022802006a20043600002002200228020041046a22033602000c030b200120044101102f200128020020022802006a20034102743a00002002200228020041016a22033602000c020b200120044102102f2001280200200141086a22022802006a20034102744101723b00002002200228020041026a22033602000c010b200120044104102f2001280200200141086a22022802006a20034102744102723600002002200228020041046a22033602000b02400240024002402000280208220241c000490d00200241808001490d012002418080808004490d02200120034101102f2001280200200141086a22022802006a41033a00002002200228020041016a220336020020002802082104200120034104102f200128020020022802006a20043600002002200228020041046a22033602000c030b200120034101102f2001280200200141086a22042802006a20024102743a00002004200428020041016a22033602000c020b200120034102102f2001280200200141086a22042802006a20024102744101723b00002004200428020041026a22033602000c010b200120034104102f2001280200200141086a22042802006a20024102744102723600002004200428020041046a22033602000b024002400240200028020c220241c000490d00200241808001490d012002418080808004490d02200120034101102f2001280200200141086a22022802006a41033a00002002200228020041016a2203360200200028020c2100200120034104102f200128020020022802006a20003600002002200228020041046a3602000f0b200120034101102f2001280200200141086a22012802006a20024102743a00002001200128020041016a3602000f0b200120034102102f2001280200200141086a22012802006a20024102744101723b00002001200128020041026a3602000f0b200120034104102f2001280200200141086a22012802006a20024102744102723600002001200128020041046a3602000f0b2001200141086a22022802004101102f200128020020022802006a41083a00002002200228020041016a2204360200024002400240200041046a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22022802006a41033a00002002200228020041016a220336020020002802042100200120034104102f200128020020022802006a20003600002002200228020041046a3602000f0b200120044101102f200128020020022802006a20034102743a00002002200228020041016a3602000f0b200120044102102f2001280200200141086a22012802006a20034102744101723b00002001200128020041026a3602000f0b200120044104102f2001280200200141086a22012802006a20034102744102723600002001200128020041046a3602000f0b2001200141086a22022802004101102f200128020020022802006a41093a00002002200228020041016a22043602000240024002400240200041046a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22022802006a41033a00002002200228020041016a220336020020002802042104200120034104102f200128020020022802006a20043600002002200228020041046a22033602000c030b200120044101102f200128020020022802006a20034102743a00002002200228020041016a22033602000c020b200120044102102f2001280200200141086a22022802006a20034102744101723b00002002200228020041026a22033602000c010b200120044104102f2001280200200141086a22022802006a20034102744102723600002002200228020041046a22033602000b02400240024002402000280208220241c000490d00200241808001490d012002418080808004490d02200120034101102f2001280200200141086a22022802006a41033a00002002200228020041016a220336020020002802082104200120034104102f200128020020022802006a20043600002002200228020041046a22033602000c030b200120034101102f2001280200200141086a22042802006a20024102743a00002004200428020041016a22033602000c020b200120034102102f2001280200200141086a22042802006a20024102744101723b00002004200428020041026a22033602000c010b200120034104102f2001280200200141086a22042802006a20024102744102723600002004200428020041046a22033602000b024002400240200028020c220241c000490d00200241808001490d012002418080808004490d02200120034101102f2001280200200141086a22022802006a41033a00002002200228020041016a2203360200200028020c2100200120034104102f200128020020022802006a20003600002002200228020041046a3602000f0b200120034101102f2001280200200141086a22012802006a20024102743a00002001200128020041016a3602000f0b200120034102102f2001280200200141086a22012802006a20024102744101723b00002001200128020041026a3602000f0b200120034104102f2001280200200141086a22012802006a20024102744102723600002001200128020041046a3602000b0f0b200141086a2202200228020041016a3602000c000b0b960401027f0240024002400240024002400240024020002d00000e0700010203040506070b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0620002802102200450d0620014188026c450d062000102c0f0b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0520002802102200450d0520014188026c450d052000102c0f0b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0420002802102200450d0420014188026c450d042000102c0f0b200041046a2802002000410c6a28020010c302200041086a2802002201450d0320002802042200450d0320014198026c450d032000102c0f0b200041086a2802002201450d02200041046a2802002200450d022001450d022000102c0f0b200041086a10a201200041046a220028020010c5022000280200102c0f0b200041086a10a201200041046a220028020010c5022000280200102c0b0bc645020c7f087e230041f0016b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002402001280200417f6a0e050001020304000b200128020421042001411c6a2802002105200141186a2802002106200141146a2802002107200141106a28020021082001410c6a2802002109200141086a280200210a200341a0016a41206a200241206a290200370300200341a0016a41186a200241186a290200370300200341a0016a41106a200241106a290200370300200341a0016a41086a220b200241086a290200370300200320022902003703a001200341d8006a200341a0016a10c60220034180016a41086a220c200341d8006a41096a29000037030020034180016a41106a2202200341e9006a29000037030020034180016a41186a2201200341f1006a290000370300200320032900593703800102400240024020032d00584101460d00200341386a41186a2001290300370300200341386a41106a2002290300370300200341386a41086a200c2903003703002003200329038001370338200142003703002002420037030020034200370388012003420037038001200341a0016a4196dec700410910c5012003200b29000037038801200320032900a00137038001200341a0016a418487c500411e10c5012001200b290000370300200220032900a00137030020034180016a412010dc0241ff017122024102460d012002410171450d0120054108490d080240200741b6f7c400460d0020072900004280c2cdeb16520d090b200341c8016a4196dec700410910c50120034180016a41f1ddc700410510c501200320043602e801200341d8016a200341e8016a410410c701200341ac016a200341e8016a41046a3602002003200341e0016a3602a4012003200341e8016a3602a8012003200341d8016a3602a001200341d8006a200341a0016a107e2003280260220241206a2201417f4a0d020c150b200341023a00280c110b200341286a410610a4050c100b0240024020010d004101210b0c010b20011032220b450d050b200341003602a801200320013602a4012003200b3602a001200341a0016a4100411010c80120032802a00120032802a80122016a220b20032900c801370000200b41086a200341c8016a41086a2900003700002003200141106a22013602a801200341a0016a2001411010c80120032802a00120032802a80122016a220b200329008001370000200b41086a20034180016a41086a2900003700002003200141106a220b3602a80120032802582101200341a0016a200b200210c80120032802a001220b20032802a801220c6a2001200210c9081a2003200c20026a22023602a8010240200328025c450d002001102c0b200b200210ce022102024020032802a401450d00200b102c0b20020d06200341b8016a22024200370300200341b0016a22014200370300200341a0016a41086a220d4200370300200342003703a001200341c8016a41f1ddc700410510c501200d200341c8016a41086a290000370300200320032900c8013703a00120034180016a41d893c600410d10c501200220034180016a41086a2900003703002001200329008001370300200341d8006a200341a0016a412010b90320032802582201410420011b210e41002102024002400240024002400240200329025c420020011b220f422088a722010e020201000b41002102034020022001410176220b20026a220c2004200e200c4102746a280200491b21022001200b6b220141014b0d000b0b2004200e20024102746a280200460d010b200341a0016a200341386a4280a0e5b9c29101420010d202200320032900a1013703582003200d28000036005f20032d00a00122024104460d02200341306a200328005f360000200320023a0028200320032903583700290c010b200341286a410110a4050b200fa72202450d10200241ffffffff0371450d10200e102c0c100b200341a0016a41186a200341386a41186a290300370300200341a0016a41106a200341386a41106a290300370300200341a0016a41086a200341386a41086a290300370300200320032903383703a001200341c8016a4196dec700410910c50120034180016a41bef7c400410710c501200320043602e401200341e8016a200341e4016a410410c701200341e4006a200341e4016a41046a3602002003200341e8016a41086a36025c2003200341e4016a3602602003200341e8016a360258200341d8016a200341d8006a107e20032802e001220241206a2201417f4c0d120240024020010d004101210b0c010b20011032220b450d050b200341003602602003200136025c2003200b360258200341d8006a4100411010c8012003280258200328026022016a220b20032900c801370000200b41086a200341c8016a41086a2900003700002003200141106a2201360260200341d8006a2001411010c8012003280258200328026022016a220b200329008001370000200b41086a20034180016a41086a2900003700002003200141106a220b36026020032802d8012101200341d8006a200b200210c8012003280258220b2003280260220c6a2001200210c9081a2003200c20026a2202360260024020032802dc01450d002001102c0b200b2002200341a0016a10c9020240200328025c450d00200b102c0b200341c8016a4196dec700410910c50120034180016a41f1ddc700410510c501200320043602e801200341d8016a200341e8016a410410c701200341ac016a200341e8016a41046a3602002003200341e0016a3602a4012003200341e8016a3602a8012003200341d8016a3602a001200341d8006a200341a0016a107e2003280260220241206a2201417f4c0d120240024020010d004101210b0c010b20011032220b450d050b200341003602a801200320013602a4012003200b3602a001200341a0016a4100411010c80120032802a00120032802a80122016a220b20032900c801370000200b41086a200341c8016a41086a2900003700002003200141106a22013602a801200341a0016a2001411010c80120032802a00120032802a80122016a220b200329008001370000200b41086a20034180016a41086a2900003700002003200141106a220b3602a80120032802582101200341a0016a200b200210c80120032802a001220b20032802a801220c6a2001200210c9081a2003200c20026a22023602a8010240200328025c450d002001102c0b200341003a00d801200b2002200341d8016a410110a702024020032802a401450d00200b102c0b200341b4016a2005360200200341b0016a2006360200200341003a00b801200320073602ac01200320083602a801200320093602a4012003200a3602a0012004200341a0016a10f902200341043a0028200fa72202450d10200241ffffffff0371450d10200e102c0c100b200341a0016a41206a200241206a290200370300200341a0016a41186a200241186a290200370300200341a0016a41106a200241106a290200370300200341a0016a41086a2201200241086a290200370300200320022902003703a001200341086a200341a0016a10ef0220032802080d06200328020c210a20034180016a41186a2202420037030020034180016a41106a2207420037030020034200370388012003420037038001200341a0016a4196dec700410910c5012003200129000037038801200320032900a00137038001200341a0016a418487c500411e10c50120022001290000370300200720032900a00137030020034180016a412010dc0241ff017122024102460d072002410171450d07200341c8016a4196dec700410910c50120034180016a41f1ddc700410510c5012003200a3602e801200341386a200341e8016a410410c701200341ac016a200341e8016a41046a3602002003200341c0006a3602a4012003200341e8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2201417f4c0d110240024020010d00410121070c010b200110322207450d040b200341003602a801200320013602a401200320073602a001200341a0016a4100411010c80120032802a00120032802a80122016a220720032900c801370000200741086a200341c8016a41086a2900003700002003200141106a22013602a801200341a0016a2001411010c80120032802a00120032802a80122016a2207200329008001370000200741086a20034180016a41086a2900003700002003200141106a22013602a80120032802582107200341a0016a2001200210c80120032802a001220120032802a80122066a2007200210c9081a2003200620026a22063602a8010240200328025c450d002007102c0b02402001200610dc0241ff017122024102460d002001200610b4010b024020032802a401450d002001102c0b41022002410171200241024622021b210120020d08024020014101710d00200341c8016a4196dec700410910c50120034180016a41bef7c400410710c5012003200a3602e801200341386a200341e8016a410410c701200341ac016a200341e8016a41046a3602002003200341c0006a3602a4012003200341e8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2201417f4c0d120240024020010d00410121070c010b200110322207450d050b200341003602402003200136023c20032007360238200341386a4100411010c8012003280238200328024022016a220720032900c801370000200741086a200341c8016a41086a2900003700002003200141106a2201360240200341386a2001411010c8012003280238200328024022016a2207200329008001370000200741086a20034180016a41086a2900003700002003200141106a220136024020032802582107200341386a2001200210c80120032802382201200328024022066a2007200210c9081a2003200620026a22023602400240200328025c450d002007102c0b200341a0016a2001200210c901024002400240024020032d00a00122070d0020034198016a200341b9016a29000037030020034190016a200341b1016a290000370300200320032900a101370380012003200341a9016a290000370388010c010b2001200210b40120034180016a41186a2202200341b9016a29000037030020034180016a41106a2206200341b1016a2900003703002003200341a9016a29000037038801200320032900a1013703800120074101460d010b200341f0006a4200370300200341e8006a4200370300200341e0006a4200370300200342003703580c010b200341e0006a200329038801370300200341d8006a41186a2002290300370300200341d8006a41106a200629030037030020032003290380013703580b0240200328023c450d002001102c0b200341d8006a4280a0e5b9c29101420010d902200a10fa02200341043a00d8010c0e0b200341d8016a410310a4050c0b0b200341a0016a41206a200241206a290200370300200341a0016a41186a200241186a290200370300200341a0016a41106a200241106a290200370300200341a0016a41086a2201200241086a290200370300200320022902003703a0010240200341a0016a10da02450d00200341c8016a41026a200341386a41026a2d000022023a0000200320032f003822013b01c801200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c100b20034180016a41186a2202420037030020034180016a41106a2207420037030020034200370388012003420037038001200341a0016a4196dec700410910c5012003200129000037038801200320032900a00137038001200341a0016a418487c500411e10c50120022001290000370300200720032900a001370300200341013a00d80120034180016a4120200341d8016a410110a702200041186a41003a000020004200370308200020032800583600192000411c6a200341db006a280000360000200042003703000c0f0b200341a0016a41206a200241206a290200370300200341a0016a41186a200241186a290200370300200341a0016a41106a200241106a290200370300200341a0016a41086a2201200241086a290200370300200320022902003703a0010240200341a0016a10da02450d00200341c8016a41026a200341386a41026a2d000022023a0000200320032f003822013b01c801200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a0000200042013703000c0f0b20034180016a41186a2202420037030020034180016a41106a2207420037030020034200370388012003420037038001200341a0016a4196dec700410910c5012003200129000037038801200320032900a00137038001200341a0016a418487c500411e10c50120022001290000370300200720032900a001370300200341003a00d80120034180016a4120200341d8016a410110a702200041186a41003a000020004200370308200020032800583600192000411c6a200341db006a280000360000200042003703000c0e0b20012802042101200341a0016a41206a200241206a290200370300200341a0016a41186a200241186a290200370300200341a0016a41106a200241106a290200370300200341a0016a41086a200241086a290200370300200320022902003703a001200341186a200341a0016a10ef0220032802180d06200328021c210a200341c8016a4196dec700410910c50120034180016a41bc87c500410b10c501200320013602d801200341386a200341d8016a410410c701200341ac016a200341d8016a41046a3602002003200341386a41086a3602a4012003200341d8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2207417f4c0d0e0240024020070d00410121060c010b200710322206450d010b200341003602a801200320073602a401200320063602a001200341a0016a4100411010c80120032802a00120032802a80122076a220620032900c801370000200641086a200341c8016a41086a2900003700002003200741106a22073602a801200341a0016a2007411010c80120032802a00120032802a80122076a2206200329008001370000200641086a20034180016a41086a2900003700002003200741106a22063602a80120032802582107200341a0016a2006200210c80120032802a001220620032802a80122096a2007200210c9081a2003200920026a22023602a8010240200328025c450d002007102c0b200341106a2006200210c6012003280214210720032802102102024020032802a401450d002006102c0b02400240024020024101470d002007200a460d010b200341c8016a4196dec700410910c50120034180016a41bc87c500410b10c5012003200a3602d801200341386a200341d8016a410410c701200341ac016a200341d8016a41046a3602002003200341c0006a3602a4012003200341d8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2207417f4c0d100240024020070d004101210a0c010b20071032220a450d030b200341003602a801200320073602a4012003200a3602a001200341a0016a4100411010c80120032802a00120032802a80122076a220a20032900c801370000200a41086a200341c8016a41086a2900003700002003200741106a22073602a801200341a0016a2007411010c80120032802a00120032802a80122076a220a200329008001370000200a41086a20034180016a41086a2900003700002003200741106a220a3602a80120032802582107200341a0016a200a200210c80120032802a001220a20032802a80122066a2007200210c9081a2003200620026a22023602a8010240200328025c450d002007102c0b20032001360258200a2002200341d8006a410410a70220032802a401450d01200a102c0c010b200341c8016a4196dec700410910c50120034180016a41bc87c500410b10c501200320013602d801200341386a200341d8016a410410c701200341ac016a200341d8016a41046a3602002003200341c0006a3602a4012003200341d8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2207417f4c0d0f0240024020070d00410121060c010b200710322206450d020b200341003602a801200320073602a401200320063602a001200341a0016a4100411010c80120032802a00120032802a80122076a220620032900c801370000200641086a200341c8016a41086a2900003700002003200741106a22073602a801200341a0016a2007411010c80120032802a00120032802a80122076a2206200329008001370000200641086a20034180016a41086a2900003700002003200741106a22063602a80120032802582107200341a0016a2006200210c80120032802a001220620032802a80122096a2007200210c9081a2003200920026a22023602a8010240200328025c450d002007102c0b2006200210b401024020032802a401450d002006102c0b200341c8016a4196dec700410910c50120034180016a41f1ddc700410510c5012003200a3602d801200341386a200341d8016a410410c701200341ac016a200341d8016a41046a3602002003200341c0006a3602a4012003200341d8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2207417f4c0d0f0240024020070d00410121060c010b200710322206450d020b200341003602402003200736023c20032006360238200341386a4100411010c8012003280238200328024022076a220620032900c801370000200641086a200341c8016a41086a2900003700002003200741106a2207360240200341386a2007411010c8012003280238200328024022076a2206200329008001370000200641086a20034180016a41086a2900003700002003200741106a220636024020032802582107200341386a2006200210c80120032802382206200328024022096a2007200210c9081a2003200920026a22093602400240200328025c450d002007102c0b2006200910dc02210b200341c8016a4196dec700410910c50120034180016a41f1ddc700410510c50120032001360228200341d8016a200341286a410410c701200341ac016a200341286a41046a3602002003200341d8016a41086a3602a4012003200341286a3602a8012003200341d8016a3602a001200341d8006a200341a0016a107e2003280260220241206a2207417f4c0d0f0240024020070d00410121040c010b200710322204450d020b200b41ff0171210c200341003602a801200320073602a401200320043602a001200341a0016a4100411010c80120032802a00120032802a80122076a220b20032900c801370000200b41086a200341c8016a41086a2900003700002003200741106a22073602a801200341a0016a2007411010c80120032802a00120032802a80122076a220b200329008001370000200b41086a20034180016a41086a2900003700002003200741106a22073602a8012003280258210b200341a0016a2007200210c80120032802a001220720032802a80122046a200b200210c9081a2003200420026a22023602a8010240200328025c450d00200b102c0b2007200210dc02210b02400240200c4102470d002007200210b4010c010b2003200c3a00d80120072002200341d8016a410110a7020b200b41ff01712102024020032802a401450d002007102c0b0240024020024102470d002006200910b4010c010b200320023a00d80120062009200341d8016a410110a7020b0240200328023c450d002006102c0b200341c8016a4196dec700410910c50120034180016a41bef7c400410710c5012003200a3602d801200341386a200341d8016a410410c701200341ac016a200341d8016a41046a3602002003200341c0006a3602a4012003200341d8016a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a2207417f4c0d0f0240024020070d004101210a0c010b20071032220a450d020b200341003602e001200320073602dc012003200a3602d801200341d8016a4100411010c80120032802d80120032802e00122076a220a20032900c801370000200a41086a200341c8016a41086a2900003700002003200741106a22073602e001200341d8016a2007411010c80120032802d80120032802e00122076a220a200329008001370000200a41086a20034180016a41086a2900003700002003200741106a22073602e0012003280258210a200341d8016a2007200210c80120032802d801220720032802e00122066a200a200210c9081a2003200620026a22063602e0010240200328025c450d00200a102c0b200341a0016a2007200610c901200341a0016a41096a290000210f200341b1016a2900002110200341b9016a290000211120032900a101211220032d00a001210b200341c8016a4196dec700410910c50120034180016a41bef7c400410710c50120032001360228200341386a200341286a410410c701200341ac016a200341286a41046a3602002003200341386a41086a3602a4012003200341286a3602a8012003200341386a3602a001200341d8006a200341a0016a107e2003280260220241206a220a417f4c0d0f410121090240200a450d00200a10322209450d020b20114200200b41014622011b21112010420020011b2110200f420020011b210f2012420020011b2112200341003602402003200a36023c20032009360238200341386a4100411010c8012003280238200328024022016a220a20032900c801370000200a41086a200341c8016a41086a2900003700002003200141106a2201360240200341386a2001411010c8012003280238200328024022016a220a200329008001370000200a41086a20034180016a41086a2900003700002003200141106a22013602402003280258210a200341386a2001200210c80120032802382201200328024022096a200a200210c9081a2003200920026a22023602400240200328025c450d00200a102c0b200341a0016a2001200210c901200341a9016a220a2900002113200341b1016a22092900002114200341b9016a220b290000211520032900a101211620032d00a001210c200b201137000020092010370000200a200f370000200320123700a101200341013a00a0012003200341a0016a410172220436025820012002200341d8006a10cc0120154200200c41014622021b210f2014420020021b21102013420020021b21112016420020021b21120240200328023c450d002001102c0b200a201137000020092010370000200b200f370000200320123700a101200341013a00a0012003200436025820072006200341d8006a10cc0120032802dc01450d002007102c0b4200210f20004200370308200020032800a001360019200041186a41003a00002000411c6a200341a3016a2800003600000c070b1039000b200341286a410710a4050c090b200341286a410110a4050c080b200341023a00d8010c050b200341d8016a410610a4050c030b200341d8016a200110a4050c020b200341a0016a41026a200341e8016a41026a2d000022023a0000200320032f00e80122013b01a001200041206a41023a0000200041186a41003a000020004200370308200020013b0021200041236a20023a00004201210f0b2000200f3703000c050b20032d00d8014104460d0120032902dc01210f0b20032802d80121022000200f370024200041206a2002360000200041186a41003a000020004200370308200042013703000c030b2000420037030820002003280028360019200041186a41003a00002000411c6a2003412b6a280000360000200042003703000c020b02402006450d002007450d002007102c0b02402009450d00200a450d00200a102c0b20032d00284104460d00200328022821022000200329022c370024200041206a2002360000200041186a41003a000020004200370308200042013703000c010b2000420037030820002003280021360019200041186a41003a00002000411c6a200341246a280000360000200042003703000b200341f0016a24000f0b103b000bf80a030d7f017e017f230041e0006b22022400200141146a2802002103200141106a280200210420012d00182105200128020c2106200128020821072001280204210820012802002109200241186a22014200370300200241106a220a4200370300200241086a220b420037030020024200370300200241c0006a41f1ddc700410510c501200b200241c0006a41086a220c29000037030020022002290040370300200241c0006a41f481c100410d10c5012001200c290000370300200a2002290040370300200241306a2002412010b90302400240024002400240024002402002280230220d0d004100210120024100360258200242043703504100210b4100210e0c010b20022002290234220f3702542002200d36025041002101024002400240200f422088a7220e0e020201000b41002101200e210b03402001200b410176220c20016a2210200d20104102746a28020020004b1b2101200b200c6b220b41014b0d000b0b4101210b200d20014102746a280200220c2000460d03200e2001200c2000496a2201490d040b200e200fa7220b470d010b200241d0006a200b10d2042002280250210d0b200d20014102746a220b41046a200b200e20016b41027410ca081a200b20003602002002200e41016a3602584100210b0b200241306a41086a200241d0006a41086a28020036020020022002290350220f37033002400240200fa722010d00200241186a4200370300200241106a4200370300200241086a2201420037030020024200370300200241c0006a41f1ddc700410510c5012001200241c0006a41086a220c29000037030020022002290040370300200241c0006a41f481c100410d10c501200a41086a200c290000370000200a20022900403700002002412010b4010c010b200241186a4200370300200241106a4200370300200241086a220c420037030020024200370300200241c0006a41f1ddc700410510c501200c200241c0006a41086a221029000037030020022002290040370300200241c0006a41f481c100410d10c501200a41086a2010290000370000200a200229004037000020024120200241306a10d104200228023441ffffffff0371450d002001102c0b024002400240200b0d00200241306a41f1ddc700410510c501200241c0006a41a482c100411410c5012002200036025c200241206a200241dc006a410410c7012002410c6a200241dc006a41046a3602002002200241286a3602042002200241dc006a3602082002200241206a360200200241d0006a2002107e2002280258220141206a220b417f4c0d0402400240200b0d004101210c0c010b200b1032220c450d060b200241003602282002200b3602242002200c360220200241206a4100411010c80120022802202002280228220b6a220c2002290030370000200c41086a200241306a41086a2900003700002002200b41106a220b360228200241206a200b411010c80120022802202002280228220b6a220c2002290040370000200c41086a200241c0006a41086a2900003700002002200b41106a220c3602282002280250210b200241206a200c200110c8012002280220220c200228022822106a200b200110c9081a2002201020016a221036022802402002280254450d00200b102c0b200241003602082002420137030020092007200210bb0120062003200210bb01200220022802084101102f200228020022012002280208220b6a20053a00002002200b41016a220b360208200c20102001200b10a70202402002280204450d002001102c0b02402002280224450d00200c102c0b02402008450d002009450d002009102c0b2004450d0220060d010c020b02402008450d002009450d002009102c0b2004450d012006450d010b2006102c0b200241e0006a24000f0b2001200e1044000b103b000b1039000bf61e03087f017e047f230041f0006b22012400200141206a22024200370300200141186a22034200370300200141086a41086a2204420037030020014200370308200141286a41f1ddc700410510c5012004200141286a41086a220529000037030020012001290028370308200141386a41f481c100410d10c5012002200141386a41086a220629000037030020032001290038370300200141386a200141086a412010b90320012802382207410420071b210802400240024002400240024002400240024002400240200129023c420020071b2209422088a7220a0e020401000b41002107200a210b03402007200b410176220c20076a220d2008200d4102746a28020020004b1b2107200b200c6b220b41014b0d000c020b0b4100210720082802002000470d020c010b200820074102746a2802002000470d012007200a490d002007200a1047000b200820074102746a220b200b41046a2007417f73200a6a41027410ca081a200141286a41f1ddc700410510c501200141386a41a482c100411410c5012001200036024c200141d0006a200141cc006a410410c701200141146a200141cc006a41046a3602002001200141d8006a36020c2001200141cc006a3602102001200141d0006a360208200141e0006a200141086a107e2001280268220741206a220b417f4c0d0102400240200b0d004101210c0c010b200b1032220c450d030b200141003602102001200b36020c2001200c360208200141086a4100411010c80120012802082001280210220b6a220c2001290028370000200c41086a200141286a41086a2900003700002001200b41106a220b360210200141086a200b411010c80120012802082001280210220b6a220c2001290038370000200c41086a200141386a41086a2900003700002001200b41106a220c3602102001280260210b200141086a200c200710c8012001280208220c2001280210220d6a200b200710c9081a2001200d20076a220736021002402001280264450d00200b102c0b200c200710b4010240200128020c450d00200c102c0b20094280808080707c21090b200120083602602001200937026420024200370300200342003703002004420037030020014200370308200141286a41f1ddc700410510c5012004200529000037030020012001290028370308200141386a41f481c100410d10c501200341086a200629000037000020032001290038370000200141086a4120200141e0006a10d1040240200942ffffffff0383500d002008102c0b200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a41f1ddc700410510c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141e0006a200141086a412010b9030240024002400240200128026022080d004100210720014100360258200142043703504100210b410021040c010b20012001290264220937025420012008360250410021070240024002402009422088a722040e020201000b410021072004210b03402007200b410176220c20076a220d2008200d4102746a28020020004b1b2107200b200c6b220b41014b0d000b0b200820074102746a280200220b2000460d0320042007200b2000496a2207490d060b20042009a7220b470d010b200141d0006a200b10d204200128025021080b200820074102746a220b41046a200b200420076b41027410ca081a200b20003602002001200441016a3602580b200141e0006a41086a200141d0006a41086a280200360200200120012903502209370360024002402009a722070d00200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a41f1ddc700410510c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a412010b4010c010b200141206a4200370300200141186a4200370300200141086a41086a220b420037030020014200370308200141286a41f1ddc700410510c501200b200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a4120200141e0006a10d104200128026441ffffffff0371450d002007102c0b200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a4181dec700410310c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141e0006a200141086a412010b9030240024002400240200128026022080d004100210720014100360258200142043703504100210b410021040c010b20012001290264220937025420012008360250410021070240024002402009422088a722040e020201000b410021072004210b03402007200b410176220c20076a220d2008200d4102746a28020020004b1b2107200b200c6b220b41014b0d000b0b200820074102746a280200220b2000460d0320042007200b2000496a2207490d070b20042009a7220b470d010b200141d0006a200b10d204200128025021080b200820074102746a220b41046a200b200420076b41027410ca081a200b20003602002001200441016a3602580b200141e0006a41086a200141d0006a41086a280200360200200120012903502209370360024002402009a722070d00200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a4181dec700410310c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a412010b4010c010b200141206a4200370300200141186a4200370300200141086a41086a220b420037030020014200370308200141286a4181dec700410310c501200b200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a4120200141e0006a10d104200128026441ffffffff0371450d002007102c0b200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a4184dec700410310c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141e0006a200141086a412010b9030240024002400240200128026022080d004100210720014100360258200142043703504100210b410021040c010b20012001290264220937025420012008360250410021070240024002402009422088a722040e020201000b410021072004210b03402007200b410176220c20076a220d2008200d4102746a28020020004b1b2107200b200c6b220b41014b0d000b0b200820074102746a280200220b2000460d0320042007200b2000496a2207490d080b20042009a7220b470d010b200141d0006a200b10d204200128025021080b200820074102746a220b41046a200b200420076b41027410ca081a200b20003602002001200441016a3602580b200141e0006a41086a200141d0006a41086a280200360200200120012903502209370360024002402009a722070d00200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a4184dec700410310c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a412010b4010c010b200141206a4200370300200141186a4200370300200141086a41086a220b420037030020014200370308200141286a4184dec700410310c501200b200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a4120200141e0006a10d104200128026441ffffffff0371450d002007102c0b200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a4187dec700410410c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141e0006a200141086a412010b9030240024002400240200128026022080d004100210720014100360258200142043703504100210b410021040c010b20012001290264220937025420012008360250410021070240024002402009422088a722040e020201000b410021072004210b03402007200b410176220c20076a220d2008200d4102746a28020020004b1b2107200b200c6b220b41014b0d000b0b200820074102746a280200220b2000460d0320042007200b2000496a2207490d090b20042009a7220b470d010b200141d0006a200b10d204200128025021080b200820074102746a220b41046a200b200420076b41027410ca081a200b20003602002001200441016a3602580b200141e0006a41086a200141d0006a41086a280200360200200120012903502209370360024002402009a722000d00200141206a4200370300200141186a4200370300200141086a41086a2200420037030020014200370308200141286a4187dec700410410c5012000200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a412010b4010c010b200141206a4200370300200141186a4200370300200141086a41086a2207420037030020014200370308200141286a4187dec700410410c5012007200141286a41086a29000037030020012001290028370308200141386a41d893c600410d10c501200341086a200141386a41086a29000037000020032001290038370000200141086a4120200141e0006a10d104200128026441ffffffff0371450d002000102c0b200141f0006a24000f0b103b000b1039000b200720041044000b200720041044000b200720041044000b200720041044000bde0503047f017e027f230041e0006b22012400200141186a22024200370300200141106a22034200370300200141086a420037030020014200370300200141f1ddc700410510c501200141c0006a41c4fec000410a10c5012002200141c0006a41086a29000037030020032001290040370300200141c0006a2001412010b90320012802402203410420031b2104410021020240024002400240024002402001290244420020031b2205422088a722030e020201000b41002102034020022003410176220620026a2207200420074102746a28020020004b1b2102200320066b220341014b0d000b0b41012103200420024102746a2802002000460d010b200141306a41f1ddc700410510c501200141c0006a41e8fec000410b10c5012001200036025c200141206a200141dc006a410410c7012001410c6a200141dc006a41046a3602002001200141206a41086a3602042001200141dc006a3602082001200141206a360200200141d0006a2001107e2001280258220241206a2206417f4c0d010240024020060d00410121070c010b200610322207450d030b41002103200141003602282001200636022420012007360220200141206a4100411010c8012001280220200128022822066a22072001290030370000200741086a200141306a41086a2900003700002001200641106a2206360228200141206a2006411010c8012001280220200128022822066a22072001290040370000200741086a200141c0006a41086a2900003700002001200641106a220736022820012802502106200141206a2007200210c80120012802202207200128022822006a2006200210c9081a2001200020026a220236022802402001280254450d002006102c0b20012007200210b301024020012802002202450d00410121032001280204450d002002102c0b2001280224450d002007102c0b02402005a72202450d00200241ffffffff0371450d002004102c0b200141e0006a240020030f0b103b000b1039000b960401027f0240024002400240024002400240024020002d00000e0700010203040506070b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0620002802102200450d0620014188026c450d062000102c0f0b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0520002802102200450d0520014188026c450d052000102c0f0b200041046a2802002000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c402200041146a2802002201450d0420002802102200450d0420014188026c450d042000102c0f0b200041046a2802002000410c6a28020010c302200041086a2802002201450d0320002802042200450d0320014198026c450d032000102c0f0b200041086a2802002201450d02200041046a2802002200450d022001450d022000102c0f0b200041086a10a201200041046a220028020010c5022000280200102c0f0b200041086a10a201200041046a220028020010c5022000280200102c0b0bb10502067f047e230041106b2203240002400240200241c4006c41046a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b2000200436020420002005360200200041086a2204410036020020002002108f0102402002450d00200241c4006c210203400240024020012d00004101460d00200020042802004101102f2000280200200428020022056a41003a00002004200541016a2205360200200141046a2802002106200020054104102f2000280200200428020022056a20063600002004200541046a3602000c010b200020042802004101102f2000280200200428020022056a41013a00002004200541016a360200412010322205450d042003422037020420032005360200200341004120102f20032802002206200328020822076a2205200141016a290000370000200541086a200141096a290000370000200541106a200141116a290000370000200541186a200141196a2900003700002003200741206a2205360208200020042802002005102f200028020020042802006a2006200510c9081a2004200428020020056a36020020032802042205200820051b210802402005450d002008450d002006102c0b0240200141216a2d00004101460d00200020042802004101102f2000280200200428020022056a41003a00002004200541016a3602000c010b200020042802004101102f2000280200200428020022056a41013a00002004200541016a2205360200200020054120102f2001413a6a2900002109200141326a290000210a2001412a6a290000210b200141226a290000210c20042004280200220541206a360200200520002802006a2205200c370000200541086a200b370000200541106a200a370000200541186a20093700000b200141c4006a2101200241bc7f6a22020d000b0b200341106a24000f0b103b000b1039000b9539040c7f027e027f077e230041c0026b2201240020014100360210200142043703080240024002402000410c6a28020041246c2202450d002000280204210341042104410021050340024020032d00004101470d00200341106a2802002206417f4c0d04200341016a2800002107200341086a28020021080240024020060d00410121090c010b200610322209450d040b20014100360280012001200636027c20012009360278200141f8006a4100200610c80120012802782209200128028001220a6a2008200610c9081a20012007360260200128027c2108200141f8006a41086a220b200141306a41086a290200370300200120073602182001200128006336001b20012001290230370378200a20066a210702402005200128020c470d00200141086a2005410110f20120012802102105200128020821040b2004200541246c6a220641013a00002001280218210a200128001b210c200620073602102006200836020c20062009360208200641046a200c3600002006200a360001200620012903783702142006411c6a200b2903003702002001200541016a22053602100b200341246a21032002415c6a22020d000b0b200141306a41186a22064200370300200141306a41106a22034200370300200141306a41086a2205420037030020014200370330200141d0006a41c1dcc700410610c5012005200141d0006a41086a29000037030020012001290050370330200141e0006a41c0d0c600411210c5012006200141e0006a41086a220529000037030020032001290060370300200141203602b4022001200141306a3602b002200141e0006a200141306a412010b30102400240200128026022060d00410221050c010b2001280264210a20012005280200360254200120063602502001200141d0006a1087022001280204210802400240024020012802000d00200141f8006a200141d0006a108a02200128027822020d010b20014100360220200142013703182001410f3602742001200141b0026a3602702001200141186a3602bc022001418c016a41013602002001420137027c200141b4bcc3003602782001200141f0006a36028801200141bc026a41dcb7c000200141f8006a103e1a200135022042208620013502188410000240200128021c450d002001280218102c0b410221050c010b20014180016a2802002109200128027c2107410121050b200a450d002006102c0b200141b0016a41002902ecde47370300200141a8016a41002902e4de47370300200141f8006a41286a41002902dcde47370300200141f8006a41206a41002902d4de47370300200141f8006a41186a41002902ccde47370300200141f8006a41106a41002902c4de47370300200141f8006a41086a41002902bcde47370300200141002902b4de473703780240024020054102460d004101210602402008410a490d0041002106024020094106470d000240200128027c22062002470d00410121060c010b20062002410610cc084521060b200641017321060b02402007450d002002450d002002102c0b20060d00200141f8006a10ff024200210d0c010b200141246a200141f8006a41086a2903003702002001410a3602182001200129037837021c200141c8006a4200370300200141c0006a4200370300200141306a41086a2206420037030020014200370330200141d0006a41c1dcc700410610c5012006200141d0006a41086a29000037030020012001290050370330200141e0006a41c0d0c600411210c501200341086a200141e0006a41086a290000370000200320012900603700002001410036026820014201370360200141283a0070200141e0006a41004101102f2001280260200128026822066a20012d00703a00002001200641016a360268200141e0006a200141186a410472108003200141306a412020012802602206200128026810a70202402001280264450d002006102c0b0240200128021c450d00200141246a280200450d00200141206a280200102c0b4200210e20014190016a2206420037030020014188016a22094200370300200141f8006a41086a2205420037030020014200370378200141186a41c1dcc700410610c5012005200141186a41086a29000037030020012001290018370378200141306a4180d1c600411510c5012006200141306a41086a2900003703002009200129003037030002400240200141f8006a412010dc0241ff017122064102460d0020064101710d010b200141186a41c1dcc700410610c501200141306a41acc8c700410710c501412010322206450d022001422037025420012006360250200141d0006a4100411010c8012001280250200128025822066a22052001290018370000200541086a200141186a41086a2900003700002001200641106a2206360258200141d0006a2006411010c80120012802502205200128025822066a22022001290030370000200241086a200141306a41086a2900003700002001200641106a22063602582006417f4c0d030240024020060d00410121020c010b200610322202450d030b200141003602682001200636026420012002360260200141e0006a4100200610c80120012802602202200128026822076a2005200610c9081a2001200720066a2206360268200141f8006a2002200610b20102402001280278450d0020012802782106200141b0016a2104200141a0016a210f20014190016a211003400240024020012802582202200129027c220e422088a722054b0d00200128025022072006460d0120072006200210cc08450d010b200ea7450d022006450d022006102c0c020b2006450d0102402001280264450d002001280260102c0b2001200e37026420012006360260200120053602b402200120063602b002200141186a2006200510b3010240024002400240024020012802182206450d00200128021c2107024002400240200128022022084104490d002006280000210a200141003a007020084104460d002008417b6a4110490d002008416b6a4110490d002008415b6a4110490d002008414b6a410f4b0d010b20014100360238200142013703302001410f3602742001200141b0026a3602702001200141306a3602bc022001410136028c012001420137027c200141b4bcc3003602782001200141f0006a36028801200141bc026a41dcb7c000200141f8006a103e1a2001350238422086200135023084100002402001280234450d002001280230102c0b410021080c010b20062d0004210c2006410d6a29000021112006290005210d2006413d6a29000021122006412d6a29000021132006411d6a290000211420062900352115200629002521162006290015211741012108200a210b0b02402007450d002006102c0b2008450d00200520026b2206410f4b0d0141002802d8d248450d0220014126360234200141e59ec00036023041002802d4d248210641002802d0d248210541002802dcd248210220014180013602b801200142df808080103703b0012001419e9fc0003602ac01200142133702a4012001418b9fc0003602a00120014201370398012001420137038801200141b4b5c8003602840120014113360280012001418b9fc00036027c2001410136027820014104360274200641e0a3c000200241024622021b28021021062001200141f0006a360294012001200141306a360270200541f8a3c00020021b200141f8006a20061103000c020b41002802d8d248450d032001412b360234200141f8eac60036023041002802d4d248210641002802d0d248210541002802dcd2482102200141af013602b801200142f0808080103703b001200141eeebc6003602ac01200142263702a401200141c8ebc6003602a00120014201370398012001420137038801200141b4b5c800360284012001412636028001200141c8ebc60036027c2001410136027820014104360274200641e0a3c000200241024622021b28021021062001200141f0006a360294012001200141306a360270200541f8a3c00020021b200141f8006a20061103000c030b200641706a41204f0d010b41002802d8d248450d0120014125360234200141a3ebc60036023041002802d4d248210641002802d0d248210541002802dcd2482102200141b8013602b801200142f0808080103703b001200141eeebc6003602ac01200142263702a401200141c8ebc6003602a00120014201370398012001420137038801200141b4b5c800360284012001412636028001200141c8ebc60036027c2001410136027820014104360274200641e0a3c000200241024622021b28021021062001200141f0006a360294012001200141306a360270200541f8a3c00020021b200141f8006a20061103000c010b20042012370300200f201337030020102014370300200120153703a801200120163703980120012017370388012001200d3703782001200b3602b80120012011370380012001200c41ff01713602bc0120012802602001280268200141f8006a1081030b200141f8006a2001280260200128026810b201200128027822060d000b0b02402001280264450d002001280260102c0b02402001280254450d002001280250102c0b20014190016a420037030020014188016a4200370300200141f8006a41086a2206420037030020014200370378200141186a41c1dcc700410610c5012006200141186a41086a29000037030020012001290018370378200141306a4180d1c600411510c501200941086a200141306a41086a29000037000020092001290030370000200141013a0070200141f8006a4120200141f0006a410110a702200141f8006a109b01200129038001210e0b200141d0006a41c1dcc700410610c501200141e0006a41c8edc600411410c50120032001290060370000200341086a2206200141e0006a41086a2205290000370000200141f8006a41086a2202200141d0006a41086a2207290000370300200141f8006a41106a2208200141306a41106a2209290300370300200141f8006a41186a220a200141306a41186a220b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41afdec700410410c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a419fdec700411010c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a41004108411b108203200141d0006a4196dec700410910c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a41004108411b108203200141d0006a418bdec700410b10c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a4187dec700410410c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a4184dec700410310c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a4181dec700410310c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41f6ddc700410b10c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41f1ddc700410510c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41e8ddc700410910c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41d7ddc700411110c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41ceddc700410910c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41b7ddc700411710c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a41a7ddc700411010c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410041084100108203200141d0006a4195ddc700411210c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a418dddc700410810c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a4186ddc700410710c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41ffdcc700410710c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41f5dcc700410a10c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41eddcc700410810c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41e6dcc700410710c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41dcdcc700410a10c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41dce2c700411210c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41d4dcc700410810c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41de96c800410710c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41cbdcc700410910c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203200141d0006a41c7dcc700410410c501200141e0006a41c8edc600411410c50120032001290060370000200620052900003700002002200729000037030020082009290300370300200a200b29030037030020012001290050370378200141f8006a410241004100108203427f200e4280b892b70a7c220d200d200e541b210d0b2000280200200041106a200041d0006a200141086a410110830320002802001084032111200141f8006a109b01200129037821174200210e200141306a41186a4200370300200141306a41106a4200370300200141306a41086a2206420037030020014200370330200141d0006a41c1dcc700410610c5012006200141d0006a41086a29000037030020012001290050370330200141e0006a41c4ccc600410b10c501200341086a200141e0006a41086a29000037000020032001290060370000200141f8006a200141306a108503200141f8006a41186a2903002116200129037821142006200141f8006a41106a29030037030020012001290380013703300240024020144201510d00200141186a41086a4200370300200142003703180c010b200141186a41086a2006290300370300200120012903303703182016210e0b200141f8006a41106a200141186a41086a290300370300200141f8006a41186a427f200e427f427f200d20117c22112011200d541b220d20177c22112011200d541b7c220d200d200e541b370300200120012903183703800120014201370378200141306a41186a22054200370300200141306a41106a22024200370300200141306a41086a2206420037030020014200370330200141d0006a41c1dcc700410610c5012006200141d0006a41086a220729000037030020012001290050370330200141e0006a41c4ccc600410b10c501200341086a2208200141e0006a41086a220929000037000020032001290060370000200141306a200141f8006a41086a10860320054200370300200242003703002006420037030020014200370330200141d0006a41c1dcc700410610c5012006200729000037030020012001290050370330200141e0006a41b0d1c600410e10c5012008200929000037000020032001290060370000200141306a41004100108703200141086a102b200141c0026a24000f0b1039000b103b000b8e0101027f02402000280200450d00200041086a2802002201450d0020002802042202450d002001450d002002102c0b02402000280210450d00200041186a2802002201450d00200041146a2802002202450d002001450d002002102c0b0240200028022c450d00200041346a2802002201450d00200041306a2802002200450d002001410c6c450d002000102c0b0b900401047f230041106b2202240020012802042103024002400240024020012802004101470d002001410c6a280200220141046a2204417f4c0d0202400240024002400240024020040d002002410036020820022004360204200241013602000c010b200410322205450d08200241003602082002200436020420022005360200200141c000490d01200141808001490d022001418080808004490d030b200241004101102f2002280200200228020822046a41033a00002002200441016a2204360208200220044104102f2002280200200228020822046a2001360000200441046a21040c030b200241004101102f2002280200200228020822046a20014102743a0000200441016a21040c020b200241004102102f2002280200200228020822046a20014102744101723b0000200441026a21040c010b200241004104102f2002280200200228020822046a2001410274410272360000200441046a21040b20022004360208200220042001102f20022802002204200228020822056a2003200110c9081a2002200520016a22013602080c010b20022003200141086a28020010980120022802002104200228020821010b2000200041086a22032802002001102f200028020020032802006a2004200110c9081a2003200328020020016a360200024020044100200228020422001b2201450d002000450d002001102c0b200241106a24000f0b103b000b1039000ba30101037f230041106b22032400200341003602082003420137030020022802402104200341004104102f2003280200200328020822056a20043600002003200541046a220436020820022802442105200320044104102f2003280200200328020822046a20053600002003200441046a360208200320021087052000200120032802002202200328020810a70202402003280204450d002002102c0b200341106a24000bb00101027f230041106b220424002004410036020820044201370300200441004102102f2004280200200428020822056a20013b00002004200541026a2201360208200420014101102f2004280200200428020822016a20023a00002004200141016a2202360208200420024101102f20042802002202200428020822016a20033a00002004200141016a2203360208200041202002200310a70202402004280204450d002002102c0b200441106a24000bef0d01077f230041e0006b22052400200541186a22064200370300200541106a22074200370300200541086a2208420037030020054200370300200541386a41c1dcc700410610c5012008200541386a41086a220929000037030020052005290038370300200541386a41b0d1c600410e10c5012006200929000037030020072005290038370300200541022005108703200541003602004186a4c60041102005410410a70220064200370300200742003703002008420037030020054200370300200541386a41c1dcc700410610c5012008200929000037030020052005290038370300200541386a4196a4c600410610c50120062009290000370300200720052900383703002005200036023820054120200541386a410410a70220064200370300200742003703002008420037030020054200370300200541386a41c1dcc700410610c5012008200929000037030020052005290038370300200541386a419ca4c600410610c5012006200929000037030020072005290038370300024002402003280208220841246c41046a2209417f4c0d00200328020021060240024020090d00410121030c010b200910322203450d020b200541003602302005200936022c20052003360228200541286a2008108f010240024020080d002005280228210a200528023021030c010b200841246c210b200528023021030340200541386a200610840220052802382109200541286a200320052802402208102f2005280228220a200528023022036a2009200810c9081a2005200320086a22033602300240200528023c450d002009102c0b200641246a2106200b415c6a220b0d000b0b20054120200a200310a7020240200528022c450d00200a102c0b20052001360228200541186a4200370300200541106a4200370300200541086a2206420037030020054200370300200541386a41c1dcc700410610c5012006200541386a41086a220829000037030020052005290038370300200541386a41a2a4c600410a10c501200741086a20082900003700002007200529003837000020054120200541286a10cc0120052001360224200541286a41c1dcc700410610c501200541386a41fda3c600410910c50120052000417f6a360254200541d8006a200541d4006a410410c7012005410c6a200541d4006a41046a3602002005200541d8006a41086a3602042005200541d4006a3602082005200541d8006a360200200541c8006a2005107e2005280250220641206a2208417f4c0d000240024020080d00410121090c010b200810322209450d020b20054100360208200520083602042005200936020020054100411010c8012005280200200528020822086a22092005290028370000200941086a200541286a41086a2900003700002005200841106a220836020820052008411010c8012005280200200528020822086a22092005290038370000200941086a200541386a41086a2900003700002005200841106a22093602082005280248210820052009200610c80120052802002209200528020822036a2008200610c9081a2005200320066a22063602080240200528024c450d002008102c0b20092006200541246a10cc0102402005280204450d002009102c0b20052002360228200541186a22094200370300200541106a22034200370300200541086a2206420037030020054200370300200541386a41c1dcc700410610c5012006200541386a41086a220829000037030020052005290038370300200541386a41aca4c600410e10c501200741086a220b20082900003700002007200529003837000020054120200541286a10cc0120094200370300200342003703002006420037030020054200370300200541386a41c1dcc700410610c5012006200829000037030020052005290038370300200541386a41c4ccc600410b10c501200b2008290000370000200720052900383700002005412010b40102402004450d0020094200370300200342003703002006420037030020054200370300200541386a41c1dcc700410610c5012006200829000037030020052005290038370300200541386a41baa4c600410610c501200b2008290000370000200720052900383700002005412010b40120094200370300200342003703002006420037030020054200370300200541386a41c1dcc700410610c5012006200829000037030020052005290038370300200541386a4190cfc600410a10c501200b2008290000370000200720052900383700002005412010b40120094200370300200342003703002006420037030020054200370300200541386a41c1dcc700410610c5012006200829000037030020052005290038370300200541386a41c0a4c600410b10c501200b20082900003700002007200529003837000020054120109d040b200541e0006a24000f0b103b000b1039000bd5e201060a7f027e087f017e2f7f057e230041f0096b22012400200141306a10e007024002400240024002400240024002400240200128023822020d00200141003602380c010b200241057441606a41057641016a21034100210420012802302205210602400340200628020020004b0d01200641206a21062003200441016a2204470d000b200321040b0240024020022004490d0041002107200141003602382005200441057422086a21090240024020040d00200521060c010b4100210341002107024003402007210a200c210b200e210d2010210f0240200520036a220641046a28020022070d00200f2110200d210e200b210c200a21070c020b2006411c6a2802002111200641186a2802002112200641146a2802002110200641106a280200210e200641086a290200210c0240200a450d000240200ba72213450d00201341ffffff3f71450d00200a102c0b200f450d00200d450d00200f41ffffff3f71450d00200d102c0b2008200341206a2203470d000b0b200641206a21060b20062009460d0103400240200641046a280200220d0d00200641206a21060c030b200641146a2802002103200641106a280200210a0240200641086a280200220f450d00200f41ffffff3f71450d00200d102c0b200641206a210602402003450d00200a450d00200341ffffff3f71450d00200a102c0b20092006470d000c020b0b2004200241d089c500104f000b200220046b2108024020062009460d002006280204220a450d00200941606a21090340200641146a2802002103200641106a280200210f0240200641086a280200220d450d00200a450d00200d41ffffff3f71450d00200a102c0b02402003450d00200f450d00200341ffffff3f71450d00200f102c0b20092006460d01200641246a2103200641206a21062003280200220a0d000b0b02402008450d0002402004450d002005200520044105746a200841057410ca081a0b200120083602380b2007450d004200210b20014180066a41186a2206420037030020014180066a41106a220d420037030020014180066a41086a220442003703002001420037038006200141e0056a41ac95c400410d10c5012004200141e0056a41086a290000370300200120012900e00537038006200141f0056a41c695c400410c10c5012006200141f0056a41086a220a290000370300200d20012900f005370300200141c0026a20014180066a10f5022001280298032103200141b8066a41086a2205200141c0026a41086a290300370300200141b8066a41106a2209200141c0026a41106a290300370300200141b8066a41186a2208200141c0026a41186a290300370300200141b8066a41206a2214200141c0026a41206a290300370300200a200141fc026a280200360200200120012903c0023703b806200120012902f4023703f00520012903e802211520012802f002210f2004200141c0036a290300370300200d200141c8036a2903003703002006200141d0036a29030037030020014180066a41206a2216200141d8036a29030037030020014180066a41286a2217200141e0036a29030037030020014180066a41306a2218200141e8036a2903003703002001200141b8036a29030037038006200128029c0321130240024020034102470d0041002102200141f8006a41086a410036020020014188016a41086a420037030020014188016a41106a420037030020014188016a41186a420037030020014188016a41206a4200370300200141c0006a41086a4200370300200141c0006a41106a4200370300200141c0006a41186a4200370300200141c0006a41206a4200370300200141c0006a41286a4200370300200141c0006a41306a420037030020014200370378200142003703880120014200370340410121194100211a4100211b4100211c4100211d4100211e4100210f4100211f41002120410121214101212241012123410021030c010b200141b4036a2802002102200141b0036a280200211a200141ac036a280200211b200141a8036a280200211c200141a4036a2802002119200141a0036a280200211f20012802940321202001280290032121200128028c0321222001280288032123200128028403211d200128028003211e20014188016a41206a201429030037030020014188016a41186a200829030037030020014188016a41106a200929030037030020014188016a41086a2005290300370300200141f8006a41086a200a280200360200200141c0006a41086a2004290300370300200141c0006a41106a200d290300370300200141c0006a41186a2006290300370300200141c0006a41206a2016290300370300200141c0006a41286a2017290300370300200141c0006a41306a2018290300370300200120012903b80637038801200120012903f00537037820012001290380063703402015210b0b200141d0016a41186a4200370300200141d0016a41106a4200370300200141d0016a41086a4200370300200142003703d001410510322206450d01200142053702bc06200120063602b806200141b8066a4100410510c80120012802b80620012802c00622066a220441002800e4ee46360000200441046a41002d00e8ee463a00002001200641056a22063602c006200141b8066a2006412010c801200141e0066a41186a22064200370300200141e0066a41106a22144200370300200141e0066a41086a22044200370300200142003703e006200141e0056a41c7dcc700410410c5012004200141e0056a41086a290000370300200120012900e0053703e006200141f0056a418cd7c500410a10c5012006200141f0056a41086a290000370300201420012900f005370300200141c0026a200141e0066a10860520012d00c002210620014180066a41186a200141d9026a29000037030020014180066a41106a200141d1026a29000037030020014180066a41086a200141c9026a290000370300200120012900c102370380060240024020064101460d00200141b8076a4200370300200141b0076a4200370300200141a8076a4200370300200142003703a0070c010b200141a0076a41186a20014180066a41186a290300370300200141a0076a41106a20014180066a41106a290300370300200141a0076a41086a20014180066a41086a29030037030020012001290380063703a0070b200141b8066a20012802c006412010c80120012802b806220420012802c006220a6a220620012903a007370000200641086a200141a0076a41086a290300370000200641106a200141a0076a41106a290300370000200641186a200141a0076a41186a2903003700002001200a41206a22063602c00620014180066a20042006109a01200141c0026a41186a220620014180066a41186a290300370300200141c0026a41106a220a20014180066a41106a290300370300200141c0026a41086a220520014180066a41086a29030037030020012001290380063703c002024020012802bc06450d002004102c0b200141b0016a41086a2005290300370300200141b0016a41106a200a290300370300200141b0016a41186a2006290300370300200120012903c0023703b001200141e0066a41186a4200370300200141e0066a41106a4200370300200141e0066a41086a22064200370300200142003703e006200141e0056a41ac95c400410d10c5012006200141e0056a41086a290000370300200120012900e0053703e006200141f0056a41b995c400410d10c501201441086a200141f0056a41086a290000370000201420012900f005370000200141c0026a200141e0066a10f5020240200128029803220841024622040d00200141e0066a412010b4010b200141b8066a41086a2216200141c0026a41086a2217290300370300200141b8066a41106a2218200141c0026a41106a2224290300370300200141b8066a41186a2225200141c0026a41186a2226290300370300200141b8066a41206a2227200141c0026a41206a2228290300370300200141f0056a41086a220a200141fc026a2229280200360200200120012903c0023703b806200120012902f4023703f00520012903e802211520012802f002212a20014180066a41086a2206200141c0036a222b29030037030020014180066a41106a2205200141c8036a222c29030037030020014180066a41186a2209200141d0036a222d29030037030020014180066a41206a222e200141d8036a222f29030037030020014180066a41286a2230200141e0036a223129030037030020014180066a41306a2232200141e8036a22332903003703002001200141b8036a29030037038006024020040d00200141b4036a2802002104200141b0036a2802002134200141ac036a2802002135200141a8036a2802002136200141a4036a2802002137200141a0036a2802002138200128029c032139200128029403213a200128029003213b200128028c03213c200128028803213d200128028403213e200128028003213f200141d0016a41206a22402027290300370300200141d0016a41186a22272025290300370300200141d0016a41106a22252018290300370300200141d0016a41086a2218201629030037030020014198026a41086a2216200a280200360200200141a0076a41086a22412006290300370300200141a0076a41106a22422005290300370300200141a0076a41186a22432009290300370300200141a0076a41206a2244202e290300370300200141a0076a41286a222e2030290300370300200141a0076a41306a22302032290300370300200120012903b8063703d001200120012903f0053703980220012001290380063703a00720282040290300370300202620272903003703002024202529030037030020172018290300370300202920162802003602002001419c036a2039360200200120012903d0013703c0022001202a3602f002200120153703e80220012001290398023702f402200120043602b403200120343602b003200120353602ac03200120363602a803200120373602a403200120383602a00320012008360298032001203a360294032001203b360290032001203c36028c032001203d360288032001203e360284032001203f36028003203320302903003703002031202e290300370300202f2044290300370300202d2043290300370300202c2042290300370300202b2041290300370300200120012903a0073703b8032009420037030020054200370300200642003703002001420037038006200141e0056a41ac95c400410d10c5012006200141e0056a41086a290000370300200120012900e00537038006200141f0056a41c695c400410c10c501200d41086a200a290000370000200d20012900f005370000200141003602c006200142013703b806200141c0026a200141b8066a10d50620014180066a412020012802b80620012802c00610a70220012802bc06450d0020012802b806102c0b4200211520014180066a41186a220a420037030020014180066a41106a2205420037030020014180066a41086a220642003703002001420037038006200141e0056a41ac95c400410d10c5012006200141e0056a41086a290000370300200120012900e00537038006200141f0056a41c695c400410c10c501200d41086a200141f0056a41086a2209290000370000200d20012900f005370000200141c0026a20014180066a10f5022001280298032104200141b8066a41086a222e200141c0026a41086a290300370300200141b8066a41106a222f200141c0026a41106a290300370300200141b8066a41186a2230200141c0026a41186a290300370300200141b8066a41206a2231200141c0026a41206a2903003703002009200141fc026a280200360200200120012903c0023703b806200120012902f4023703f00520012903e802214520012802f00221082006200141c0036a2903003703002005200141c8036a290300370300200a200141d0036a29030037030020014180066a41206a2232200141d8036a29030037030020014180066a41286a2233200141e0036a29030037030020014180066a41306a2234200141e8036a2903003703002001200141b8036a29030037038006200128029c0321160240024020044102470d004100211720014188026a41086a410036020020014198026a41086a420037030020014198026a41106a420037030020014198026a41186a420037030020014198026a41206a4200370300200141d0016a41086a4200370300200141d0016a41106a4200370300200141d0016a41186a4200370300200141d0016a41206a4200370300200141d0016a41286a4200370300200141d0016a41306a420037030020014200370388022001420037039802200142003703d00141012118410021244100212541002126410021274100212841002108410021294100212a4101212b4101212c4101212d410021040c010b200141b4036a2802002117200141b0036a2802002124200141ac036a2802002125200141a8036a2802002126200141a4036a2802002118200141a0036a2802002129200128029403212a200128029003212b200128028c03212c200128028803212d2001280284032127200128028003212820014198026a41206a203129030037030020014198026a41186a203029030037030020014198026a41106a202f29030037030020014198026a41086a202e29030037030020014188026a41086a2009280200360200200141d0016a41086a2006290300370300200141d0016a41106a2005290300370300200141d0016a41186a200a290300370300200141d0016a41206a2032290300370300200141d0016a41286a2033290300370300200141d0016a41306a2034290300370300200120012903b80637039802200120012903f0053703880220012001290380063703d001204521150b200141c0026a41206a20014188016a41206a290300370300200141c0026a41186a20014188016a41186a290300370300200141c0026a41106a20014188016a41106a290300370300200141c0026a41086a20014188016a41086a290300370300200141fc026a200141f8006a41086a2802003602002001419c036a201336020020012001290388013703c0022001200f3602f0022001200b3703e802200120012903783702f402200120023602b4032001201a3602b0032001201b3602ac032001201c3602a803200120193602a4032001201f3602a0032001200336029803200120203602940320012021360290032001202236028c0320012023360288032001201d360284032001201e36028003200141a4056a200c370200200141b0056a2010360200200141b4056a2012360200200141e8036a200141c0006a41306a290300370300200141e0036a200141c0006a41286a290300370300200141d8036a200141c0006a41206a290300370300200141d0036a200141c0006a41186a290300370300200141c8036a200141c0006a41106a290300370300200141c0036a200141c0006a41086a290300370300200120073602a0052001200e3602ac05200120012903403703b803200141a0046a200836020020014198046a2015370300200141e4046a2017360200200141e0046a2024360200200141dc046a2025360200200141d8046a2026360200200141d4046a2018360200200141d0046a2029360200200141cc046a2016360200200141c8046a2004360200200141c4046a202a360200200141c0046a202b360200200141bc046a202c360200200141b8046a202d360200200141b4046a2027360200200141b0046a202836020020014190046a20014198026a41206a29030037030020014188046a20014198026a41186a29030037030020014180046a20014198026a41106a290300370300200141f8036a20014198026a41086a290300370300200141a4046a200129038802370200200141ac046a20014188026a41086a28020036020020012001290398023703f00320014198056a200141d0016a41306a29030037030020014190056a200141d0016a41286a29030037030020014188056a200141d0016a41206a29030037030020014180056a200141d0016a41186a290300370300200141f8046a200141d0016a41106a290300370300200141f0046a200141d0016a41086a290300370300200141e8046a20012903d001370300200141d4056a200141b0016a41186a290300370200200141cc056a200141b0016a41106a290300370200200141c4056a200141b0016a41086a290300370200200120012903b0013702bc05200120113602b80520014180066a41186a420037030020014180066a41106a420037030020014180066a41086a220642003703002001420037038006200141e0056a41c1dcc700410610c5012006200141e0056a41086a290000370300200120012900e00537038006200141f0056a4196a4c600410610c501200d41086a200141f0056a41086a290000370000200d20012900f005370000200141286a20014180066a412010c601200128022c21072001280228210a200141a0076a41186a22064200370300200141a0076a41106a221b4200370300200141a0076a41086a22044200370300200142003703a007200141b8066a41f1ddc700410510c5012004200141b8066a41086a2203290000370300200120012900b8063703a007200141b8066a41c4fec000410a10c50120062003290000370300201b20012900b80637030020014180066a200141a0076a412010b9030240024020012802800622060d00200141003602d809200142043703d0090c010b20012001290284063702d409200120063602d0090b42002115200141b8076a4200370300200141b0076a4200370300200141a0076a41086a22064200370300200142003703a007200141b8066a41f1ddc700410510c5012006200141b8066a41086a2204290000370300200120012900b8063703a007200141b8066a41d893c600410d10c501201b41086a2004290000370000201b20012900b80637000020014180066a200141a0076a412010b9030240024020012802800622020d00410421020c010b200141a0076a412010b40120012902840621150b02402015422088a72206450d0020074100200a1b2108200220064102746a2113200141e0066a41046a210e200141b8066a41086a210f20012802d809211220012802d00921102002210503402005280200210a0240024002400240024020120e020301000b4100210620122104034020062004410176220320066a2207200a201020074102746a280200491b2106200420036b220441014b0d000b200a201020064102746a280200470d02201220064b0d01200620121047000b41002106200a2010280200470d010b201020064102746a2204200441046a20122006417f736a41027410ca081a20012012417f6a22123602d8090c010b200141e0056a41f1ddc700410510c501200141f0056a41e8fec000410b10c5012001200a3602e006200141b8066a200141e0066a410410c7012001200e3602ac072001200f3602a4072001200141e0066a3602a8072001200141b8066a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d050240024020040d00410121030c010b200410322203450d050b200141003602a807200120043602a407200120033602a007200141a0076a4100411010c80120012802a00720012802a80722046a220320012900e005370000200341086a200141e0056a41086a2900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220320012900f005370000200341086a200141f0056a41086a2900003700002001200441106a22033602a8072001280280062104200141a0076a2003200610c80120012802a007220320012802a80722076a2004200610c9081a2001200720066a22063602a8070240200128028406450d002004102c0b2003200610b40120012802a407450d002003102c0b200141e0056a41f1ddc700410510c501200141f0056a418cffc000410510c5012001200a3602e006200141b8066a200141e0066a410410c7012001200e3602ac072001200f3602a4072001200141e0066a3602a8072001200141b8066a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d040240024020040d00410121030c010b200410322203450d040b200141003602a807200120043602a407200120033602a007200141a0076a4100411010c80120012802a00720012802a80722036a220420012900e005370000200441086a200141e0056a41086a22042900003700002001200341106a22033602a807200141a0076a2003411010c80120012802a00720012802a80722076a220320012900f005370000200341086a200141f0056a41086a22032900003700002001200741106a22093602a8072001280280062107200141a0076a2009200610c80120012802a007220920012802a80722116a2007200610c9081a2001201120066a22063602a8070240200128028406450d002007102c0b2009200610b401024020012802a407450d002009102c0b200141e0056a41f1ddc700410510c501200141f0056a4191f6c000411210c5012001200a3602e006200141b8066a200141e0066a410410c7012001200e3602ac072001200f3602a4072001200141e0066a3602a8072001200141b8066a3602a00720014180066a200141a0076a107e200128028806220641206a2207417f4c0d040240024020070d00410121090c010b200710322209450d040b200141003602a807200120073602a407200120093602a007200141a0076a4100411010c80120012802a00720012802a80722076a220920012900e005370000200941086a20042900003700002001200741106a22073602a807200141a0076a2007411010c80120012802a00720012802a80722076a220920012900f005370000200941086a20032900003700002001200741106a22093602a8072001280280062107200141a0076a2009200610c80120012802a007220920012802a80722116a2007200610c9081a2001201120066a22063602a8070240200128028406450d002007102c0b2009200610b401024020012802a407450d002009102c0b200141e0056a41f1ddc700410510c501200141f0056a41d081c100410a10c5012001200a3602e006200141b8066a200141e0066a410410c7012001200e3602ac072001200f3602a4072001200141e0066a3602a8072001200141b8066a3602a00720014180066a200141a0076a107e200128028806220641206a2207417f4c0d040240024020070d00410121090c010b200710322209450d040b200141003602a807200120073602a407200120093602a007200141a0076a4100411010c80120012802a00720012802a80722076a220920012900e005370000200941086a20042900003700002001200741106a22073602a807200141a0076a2007411010c80120012802a00720012802a80722076a220920012900f005370000200941086a20032900003700002001200741106a22093602a8072001280280062107200141a0076a2009200610c80120012802a007220920012802a80722116a2007200610c9081a2001201120066a22063602a8070240200128028406450d002007102c0b2009200610b401024020012802a407450d002009102c0b200141e0056a41f1ddc700410510c501200141f0056a41acffc000410b10c5012001200a3602e006200141b8066a200141e0066a410410c7012001200e3602ac072001200f3602a4072001200141e0066a3602a8072001200141b8066a3602a00720014180066a200141a0076a107e200128028806220641206a2207417f4c0d040240024020070d00410121090c010b200710322209450d040b200141003602c006200120073602bc06200120093602b806200141b8066a4100411010c80120012802b80620012802c00622076a220920012900e005370000200941086a20042900003700002001200741106a22043602c006200141b8066a2004411010c80120012802b80620012802c00622046a220720012900f005370000200741086a20032900003700002001200441106a22043602c0062001280280062103200141b8066a2004200610c80120012802b806220420012802c00622076a2003200610c9081a2001200720066a22073602c0060240200128028406450d002003102c0b200141a0076a2004200710b803024020012802a0072206450d002004200710b4010b20012902a407210b024020012802bc06450d002004102c0b200541046a2105200b200c20061b210c02402006450d002001200c3702a407200120063602a007200a20082008200141a0076a10ba031a0b20052013470d000b0b02402015a72206450d00200641ffffffff0371450d002002102c0b4200210c200141b8076a4200370300200141b0076a4200370300200141a0076a41086a22064200370300200142003703a007200141b8066a41f1ddc700410510c5012006200141b8066a41086a2204290000370300200120012900b8063703a007200141b8066a41f481c100410d10c501201b41086a2004290000370000201b20012900b80637000020014180066a200141a0076a412010b90302400240200128028006221d0d004104211d0c010b200141a0076a412010b401200129028406210c0b02400240200c422088a72206450d00201d20064102746a211320014190076a41046a2112200141e0096a41086a2111200141e0096a41046a211c200141b8066a41086a210f200141b9076a211a200141ec066a2102201d210e0340200e2802002103200141e0056a41f1ddc700410510c501200141f0056a41a482c100411410c5012001200336029007200141e0096a20014190076a410410c701200120123602ac07200120113602a407200120014190076a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d050240024020040d00410121070c010b200410322207450d050b200141003602e809200120043602e409200120073602e009200141e0096a4100411010c80120012802e00920012802e80922046a220720012900e005370000200741086a200141e0056a41086a22052900003700002001200441106a22043602e809200141e0096a2004411010c80120012802e00920012802e80922046a220720012900f005370000200741086a200141f0056a41086a22092900003700002001200441106a22043602e8092001280280062107200141e0096a2004200610c80120012802e009220420012802e809220a6a2007200610c9081a2001200a20066a22063602e8090240200128028406450d002007102c0b20012006360284072001200436028007200141f0056a2004200610b3010240024020012802f00522070d00410221070c010b20012802f4052110200120012802f8053602e405200120073602e005200141a0076a200141e0056a10c9030240024020012d00b807220a4102470d00200141003602880620014201370380062001410f36029407200120014180076a36029007200120014180066a36029c07200141013602b407200142013702a407200141b4bcc3003602a007200120014190076a3602b0072001419c076a41dcb7c000200141a0076a103e1a200135028806422086200135028006841000200128028406450d01200128028006102c0c010b20014180066a41106a200141a0076a41106a29030037030020014180066a41086a200141a0076a41086a2903003703002001418c076a41026a201a41026a2d000022083a000020014190076a41026a20083a0000200120012903a007370380062001201a2f000022083b018c07200120083b0190070b02402010450d002007102c0b41022107200a4102460d002004200610b401200a21070b200141a0076a41086a220a20014180066a41086a290300370300200141a0076a41106a221020014180066a41106a2903003703002001418c076a41026a20014190076a41026a2d00003a000020012001290380063703a007200120012f0190073b018c070240200741024622060d00200141b8066a41106a2010290300370300200f200a290300370300200120012903a0073703b8060b024020012802e409450d002004102c0b024020060d00200141e0066a41106a200141b8066a41106a290300370300200141e0066a41086a2219200f290300370300200120012903b8063703e0060240024020070d00200141e0056a41f1ddc700410510c501200141f0056a41e8fec000410b10c501200120033602e009200141b8066a200141e0096a410410c7012001201c3602ac072001200f3602a4072001200141e0096a3602a8072001200141b8066a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d080240024020040d00410121070c010b200410322207450d080b200141003602a807200120043602a407200120073602a007200141a0076a4100411010c80120012802a00720012802a80722046a220720012900e005370000200741086a20052900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220720012900f005370000200741086a20092900003700002001200441106a22073602a8072001280280062104200141a0076a2007200610c80120012802a007220720012802a807220a6a2004200610c9081a2001200a20066a22063602a8070240200128028406450d002004102c0b2007200641c4b5c800410010a70220012802a407450d012007102c0c010b4100210620012802d009211002400240024020012802d80922080e020201000b4100210620082104034020062004410176220720066a220a20032010200a4102746a280200491b2106200420076b220441014b0d000b0b2003201020064102746a2802002204460d0120082006200320044b6a2206490d050b0240200820012802d409470d00200141d0096a200810d20420012802d00921100b201020064102746a220441046a2004200820066b41027410ca081a200420033602002001200841016a3602d8090b200f2019280200360200200120012903e0063703b806200141e0056a41f1ddc700410510c501200141f0056a418cffc000410510c5012001200336029007200141e0096a20014190076a410410c701200120123602ac07200120113602a407200120014190076a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d060240024020040d00410121070c010b200410322207450d060b200141003602a807200120043602a407200120073602a007200141a0076a4100411010c80120012802a00720012802a80722046a220720012900e005370000200741086a20052900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220720012900f005370000200741086a20092900003700002001200441106a22073602a8072001280280062104200141a0076a2007200610c80120012802a007220720012802a807220a6a2004200610c9081a2001200a20066a22063602a8070240200128028406450d002004102c0b20072006200141b8066a108a03024020012802a407450d002007102c0b024020012802bc06450d0020012802b806102c0b200f200241086a280200360200200120022902003703b806200141e0056a41f1ddc700410510c501200141f0056a41acffc000410b10c5012001200336029007200141e0096a20014190076a410410c701200120123602ac07200120113602a407200120014190076a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d060240024020040d00410121030c010b200410322203450d060b200141003602a807200120043602a407200120033602a007200141a0076a4100411010c80120012802a00720012802a80722046a220320012900e005370000200341086a20052900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220320012900f005370000200341086a20092900003700002001200441106a22033602a8072001280280062104200141a0076a2003200610c80120012802a007220320012802a80722076a2004200610c9081a2001200720066a22063602a8070240200128028406450d002004102c0b20032006200141b8066a108a03024020012802a407450d002003102c0b20012802bc06450d0020012802b806102c0b200e41046a220e2013470d000b0b0240200ca72206450d00200641ffffffff0371450d00201d102c0b0240024020012802d0092206450d00200120012902d409220c3702a407200120063602a007200141f8066a4200370300200141f0066a4200370300200141e0066a41086a22044200370300200142003703e006200141b8066a41f1ddc700410510c5012004200141b8066a41086a2203290000370300200120012900b8063703e006200141b8066a41c4fec000410a10c501201441086a2003290000370000201420012900b806370000200141e0066a200141a0076a108a05200c42ffffffff0383500d012006102c0c010b200141b8076a4200370300200141b0076a4200370300200141a0076a41086a22064200370300200142003703a007200141b8066a41f1ddc700410510c5012006200141b8066a41086a2204290000370300200120012900b8063703a007200141b8066a41c4fec000410a10c501201b41086a2004290000370000201b20012900b806370000200141a0076a412010b4010b200141c0026a10ff07200141e0056a41968dc700410d10c501200141f0056a41bc92c700411e10c501412010322206450d022001422037028406200120063602800620014180066a4100411010c80120012802800620012802880622066a220420012900e005370000200441086a200141e0056a41086a2900003700002001200641106a22063602880620014180066a2006411010c801200128028006220320012802880622066a220420012900f005370000200441086a200141f0056a41086a2900003700002001200641106a2206360288062006417f4c0d034101210402402006450d00200610322204450d030b200141003602a807200120063602a407200120043602a007200141a0076a4100200610c80120012802a00720012802a80722046a2003200610c9081a200141b4076a20014180066a41086a2203280200360200200141013a00bc07200141173602b807200141b8066a41186a220720012903b80737030020012001290380063702ac07200141b8066a41106a200141a0076a41106a290300220c3703002001200420066a3602a807200141b8066a41086a20012903a807220b370300200120012903a00722153703b80620014180066a41106a200c3703002003200b37030020014180066a41186a20072903003703002001201537038006200141a0076a20014180066a10b701024020012802a4072207450d00034020012802cc07210920012802c807210520012802c007211220012802bc07211020012802b807210320012802b407210e20012802b007210a20012802a807210f024020012802ac072206450d002006410c6c21042007210603400240200641046a280200450d002006280200102c0b2006410c6a2106200441746a22040d000b0b0240200f450d002007450d00200f410c6c450d002007102c0b02402003450d0020034104742104200a41046a210603400240200641046a280200450d002006280200102c0b200641106a2106200441706a22040d000b0b0240200e450d00200a450d00200e41ffffffff0071450d00200a102c0b02402010450d002012450d002010102c0b02402009450d002005450d002005102c0b200141a0076a20014180066a10b70120012802a40722070d000b0b0240200128028406450d00200128028006102c0b024020014190066a280200450d00200128028c06102c0b200141e0056a41968dc700410d10c501200141f0056a41a38dc700411310c501412010322206450d022001422037028406200120063602800620014180066a4100411010c80120012802800620012802880622066a220420012900e005370000200441086a200141e0056a41086a2900003700002001200641106a22063602880620014180066a2006411010c801200128028006220320012802880622066a220420012900f005370000200441086a200141f0056a41086a2900003700002001200641106a2206360288062006417f4c0d034101210402402006450d00200610322204450d030b200141003602a807200120063602a407200120043602a007200141a0076a4100200610c80120012802a00720012802a80722046a2003200610c9081a200141b4076a20014180066a41086a2203280200360200200141013a00bc07200141163602b807200141b8066a41186a220720012903b80737030020012001290380063702ac07200141b8066a41106a200141a0076a41106a290300220c3703002001200420066a3602a807200141b8066a41086a20012903a807220b370300200120012903a00722153703b80620014180066a41106a200c3703002003200b37030020014180066a41186a20072903003703002001201537038006200141a0076a20014180066a10b90103400240200128028c0922060d000240200128028406450d00200128028006102c0b024020014190066a280200450d00200128028c06102c0b200141e0056a41968dc700410d10c501200141f0056a418091c700411510c501412010322206450d04200142203702bc06200120063602b806200141b8066a4100411010c80120012802b80620012802c00622066a220420012900e005370000200441086a200141e0056a41086a2900003700002001200641106a22063602c006200141b8066a2006411010c80120012802b806220320012802c00622066a220420012900f005370000200441086a200141f0056a41086a2900003700002001200641106a22063602c0062006417f4c0d054101210402402006450d00200610322204450d050b200141003602a807200120063602a407200120043602a007200141a0076a4100200610c80120012802a00720012802a80722046a2003200610c9081a200141b4076a200141b8066a41086a280200360200200141013a00bc07200141183602b80720014180066a41186a220320012903b807370300200120012903b8063702ac0720014180066a41106a200141a0076a41106a2207290300220c3703002001200420066a3602a80720014180066a41086a20012903a807220b370300200120012903a0072215370380062007200c370300200141a0076a41086a200b370300200141a0076a41186a2003290300370300200120153703a007200141b8066a200141a0076a10b101024002400340024020012802bc0622060d00024020012802a407450d0020012802a007102c0b200141a0056a21100240200141b0076a280200450d0020012802ac07102c0b200141b8066a201010b90720012802b806220e450d0220012902bc06210c200141f8066a4200370300200141f0066a4200370300200141e0066a41086a22064200370300200142003703e006200141e0056a41968dc700410d10c5012006200141e0056a41086a290000370300200120012900e0053703e006200141f0056a418893c700410a10c501201441086a200141f0056a41086a290000370000201420012900f005370000200c422088a722064105744104722204417f4c0d09200410322203450d08200141003602a807200120043602a407200120033602a007200141a0076a2006108f010240024020060d0020012802a007210a20012802a80721040c010b2006410574210320012802a8072104200e21060340200141a0076a20044120102f20012802a007220a20012802a80722076a22042006290000370000200441086a200641086a290000370000200441106a200641106a290000370000200441186a200641186a2900003700002001200741206a22043602a807200641206a2106200341606a22030d000b0b200141e0066a4120200a200410a702024020012802a407450d00200a102c0b200ca72206450d03200641ffffff3f71450d03200e102c0c030b024020012802c406450d002006450d002006102c0b200141b8066a200141a0076a10b1010c000b0b20014198066a420037030020014190066a420037030020014180066a41086a220642003703002001420037038006200141e0056a41968dc700410d10c5012006200141e0056a41086a290000370300200120012900e00537038006200141f0056a418893c700410a10c501200d41086a200141f0056a41086a290000370000200d20012900f00537000020014180066a412010b4010b20012802b8052104200141e0066a41186a4200370300200141e0066a41106a4200370300200141e0066a41086a22064200370300200142003703e006200141e0056a41968dc700410d10c5012006200141e0056a41086a2203290000370300200120012900e0053703e006200141f0056a41bc93c700411310c501201441086a200141f0056a41086a2206290000370000201420012900f005370000200120043602a007200141e0066a4120200141a0076a410410a70220014180066a41186a2207420037030020014180066a41106a220a420037030020014180066a41086a220442003703002001420037038006200141e0056a41ac95c400410d10c50120042003290000370300200120012900e00537038006200141f0056a41c695c400410c10c501200d41086a220e2006290000370000200d20012900f005370000200141a0076a20014180066a10f50220012802f807210f200141b8066a41086a200141a0076a41086a290300370300200141b8066a41106a200141a0076a41106a290300370300200141b8066a41186a200141a0076a41186a290300370300200141b8066a41206a200141a0076a41206a2903003703002006200141dc076a280200360200200120012903a0073703b806200120012902d4073703f00520014180086a280200211c20014184086a280200210520014194086a280200210920014190086a28020021122001418c086a280200211120014188086a280200210820012802e0072113200141b0066a200141c8086a290300370300200141a8066a200141c0086a29030037030020014180066a41206a200141b8086a2903003703002007200141b0086a29030037030020074200370300200a4200370300200442003703002001420037038006200141e0056a41f1ddc700410510c50120042003290000370300200120012900e00537038006200141f0056a41c4fec000410a10c501200e2006290000370000200d20012900f005370000200141a0076a20014180066a412010b9030240024020012802a00722060d004100211a0c010b20012902a407220c422088a7211a200ca72204450d00200441ffffffff0371450d002006102c0b200f4102462104200141d0096a201010b907200141e0096a108906200141a0076a41186a220f4200370300200141a0076a41106a22024200370300200141a0076a41086a22074200370300200142003703a00720014180066a4189bec300410f10c501200720014180066a41086a220629000037030020012001290080063703a00720014180066a41a0c0c300411410c501201b41086a22192006290000370000201b200129008006370000200141203602e4052001200141a0076a3602e005200141e0066a200141a0076a412010b3010240024020012802e006220a0d00410021030c010b20012802e40621102001200141e0066a41086a2802003602f4052001200a3602f00520014180066a200141f0056a1080050240024020012802800622030d0041002103200141003602c006200142013703b8062001410f360294072001200141e0056a360290072001200141b8066a3602800720014194066a41013602002001420137028406200141b4bcc30036028006200120014190076a3602900620014180076a41dcb7c00020014180066a103e1a20013502c00642208620013502b806841000024020012802bc06450d0020012802b806102c0b0c010b200129028406210b0b2010450d00200a102c0b4100201320041b21134100200820041b21084100201120041b21114100201220041b210e4100200920041b21094101200520041b210520014180066a41186a420037030020014180066a41106a4200370300200642003703002001420037038006200141e0056a41bee8c700410d10c5012006200141e0056a41086a290000370300200120012900e00537038006200141f0056a41dcecc700410f10c501200d41086a200141f0056a41086a290000370000200d20012900f005370000200141a0076a20014180066a10e90420012802a007210a20012902a407210c20012802b8052110200f42003703002002420037030020074200370300200142003703a00720014180066a4189bec300410f10c5012007200629000037030020012001290080063703a00720014180066a41f0c0c300411510c50120192006290000370000201b200129008006370000200141206a200141a0076a412010c601200b420020031b210b200c4200200a1b210c2003410120031b2107200a4104200a1b210a02400240024002402001280224410020012802201b2203450d00200321060c010b41002106200141a0076a4100109e0520012802a007450d01200141a0076a10f8050b02402006410020104100201c20041b6b2204200420104b1b22042003200420034b1b22034f0d000340200141a0076a200610a10520012802a007220420012802a80710b401200641016a2106024020012802a407450d002004102c0b20032006470d000b0b200141f8066a4200370300200141f0066a4200370300200141e0066a41086a22064200370300200142003703e006200141b8066a4189bec300410f10c5012006200141b8066a41086a2204290000370300200120012900b8063703e006200141b8066a41f0c0c300411510c501201441086a2004290000370000201420012900b806370000200120033602a007200141e0066a4120200141a0076a410410a7020c010b200141f8066a4200370300200141f0066a4200370300200141e0066a41086a22064200370300200142003703e006200141a0076a4189bec300410f10c5012006200141a0076a41086a2204290000370300200120012900a0073703e006200141a0076a41f0c0c300411510c501201441086a2004290000370000201420012900a007370000200120103602a007200141e0066a4120200141a0076a410410a7020b200141c8076a200c370300200141bc076a200b370200200141a0076a41086a2204200141d0096a41086a280200360200200141b4076a220f200141e0096a41086a280200360200200120012903d0093703a007200120012903e0093702ac072001200e3602e407200120053602e007200120083602dc07200120093602d807200120113602d4072001200a3602c407200120073602b80720012013201a6a3602d007200141b8066a201010a10520012802c006211020012802b806210a2001410036028806200142013703800620012802a007210620014180066a20042802002204108f0102402004450d00200441057421032001280288062104034020014180066a20044120102f20012802800620012802880622076a22042006290000370000200441086a200641086a290000370000200441106a200641106a290000370000200441186a200641186a2900003700002001200741206a220436028806200641206a2106200341606a22030d000b0b20012802ac07210620014180066a200f2802002204108f0102402004450d00200441057421032001280288062104034020014180066a20044120102f20012802800620012802880622076a22042006290000370000200441086a200641086a290000370000200441106a200641106a290000370000200441186a200641186a2900003700002001200741206a220436028806200641206a2106200341606a22030d000b0b20012802b807210620014180066a200141a0076a41206a2802002204108f0102402004450d00200441057421032001280288062104034020014180066a20044120102f20012802800620012802880622076a22042006290000370000200441086a200641086a290000370000200441106a200641106a290000370000200441186a200641186a2900003700002001200741206a220436028806200641206a2106200341606a22030d000b0b20012802c407210620014180066a200141cc076a2802002204108f0102402004450d0020062004410c6c6a210403402006280200200641086a28020020014180066a10d5032006410c6a22062004470d000b0b20012802d007210620014180066a2001280288064104102f2001280280062001280288066a2006360000200120012802880641046a22063602880620012802d407210420014180066a20064104102f2001280280062001280288066a2004360000200120012802880641046a22063602880620012802d807210420014180066a20064104102f2001280280062001280288066a2004360000200120012802880641046a22063602880620012802dc07210420014180066a20064104102f2001280280062001280288066a2004360000200120012802880641046a22063602880620012802e007210420014180066a20064104102f2001280280062001280288066a2004360000200120012802880641046a22063602880620014180066a20064104102f2001280280062001280288066a200e360000200120012802880641046a220636028806200a2010200128028006200610a7020240200128028406450d00200128028006102c0b024020012802bc06450d00200a102c0b200141a0076a10f8054200210c20014198066a420037030020014190066a420037030020014180066a41086a220642003703002001420037038006200141b8066a4181dec700410310c5012006200141b8066a41086a2204290000370300200120012900b80637038006200141b8066a41d893c600410d10c501200d41086a2004290000370000200d20012900b806370000200141a0076a20014180066a412010b9030240024020012802a00722110d00410421110c010b20014180066a412010b40120012902a407210c0b0240200c422088a72206450d0020064102742110200141b8066a41046a210e200141e0096a41086a210f20112103034020032802002107200141e0056a4181dec700410310c501200141f0056a41a4bfc000411510c501200120073602b806200141e0096a200141b8066a410410c7012001200e3602ac072001200f3602a4072001200141b8066a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d070240024020040d004101210a0c010b20041032220a450d070b200141003602a807200120043602a4072001200a3602a007200141a0076a4100411010c80120012802a00720012802a80722046a220a20012900e005370000200a41086a200141e0056a41086a22052900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220a20012900f005370000200a41086a200141f0056a41086a22092900003700002001200441106a220a3602a8072001280280062104200141a0076a200a200610c80120012802a007220a20012802a80722126a2004200610c9081a2001201220066a22063602a8070240200128028406450d002004102c0b200a200610b401024020012802a407450d00200a102c0b200141e0056a4181dec700410310c501200141f0056a4198c2c000411910c501200120073602b806200141e0096a200141b8066a410410c7012001200e3602ac072001200f3602a4072001200141b8066a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d070240024020040d00410121070c010b200410322207450d070b200141003602a807200120043602a407200120073602a007200141a0076a4100411010c80120012802a00720012802a80722046a220720012900e005370000200741086a20052900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220720012900f005370000200741086a20092900003700002001200441106a22073602a8072001280280062104200141a0076a2007200610c80120012802a007220720012802a807220a6a2004200610c9081a2001200a20066a22063602a8070240200128028406450d002004102c0b2007200610b401024020012802a407450d002007102c0b200341046a21032010417c6a22100d000b0b0240200ca72206450d00200641ffffffff0371450d002011102c0b4200210b20014198066a420037030020014190066a420037030020014180066a41086a220642003703002001420037038006200141b8066a4184dec700410310c5012006200141b8066a41086a2204290000370300200120012900b80637038006200141b8066a41d893c600410d10c501200d41086a2004290000370000200d20012900b806370000200141a0076a20014180066a412010b9030240024020012802a007221a0d004104211a0c010b20014180066a412010b40120012902a407210b0b0240200b422088a72206450d00201a20064102746a2119200141b8066a41046a2108200141e0096a41086a211320014198066a2105201a210903402009280200210a200141e0056a4184dec700410310c501200141f0056a41f494c600411610c5012001200a3602b806200141e0096a200141b8066a410410c701200120083602ac07200120133602a4072001200141b8066a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d070240024020040d00410121030c010b200410322203450d070b200141003602a807200120043602a407200120033602a007200141a0076a4100411010c80120012802a00720012802a80722046a220320012900e005370000200341086a200141e0056a41086a22072900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220320012900f005370000200341086a200141f0056a41086a22102900003700002001200441106a22033602a8072001280280062104200141a0076a2003200610c80120012802a007220320012802a807220e6a2004200610c9081a2001200e20066a22063602a8070240200128028406450d002004102c0b2003200610b401024020012802a407450d002003102c0b200141e0056a4184dec700410310c501200141f0056a418894c600411310c5012001200a3602b806200141e0096a200141b8066a410410c701200120083602ac07200120133602a4072001200141b8066a3602a8072001200141e0096a3602a00720014180066a200141a0076a107e200128028806220641206a2204417f4c0d070240024020040d00410121030c010b200410322203450d070b200141003602a807200120043602a407200120033602a007200141a0076a4100411010c80120012802a00720012802a80722046a220320012900e005370000200341086a20072900003700002001200441106a22043602a807200141a0076a2004411010c80120012802a00720012802a80722046a220320012900f005370000200341086a20102900003700002001200441106a22033602a8072001280280062104200141a0076a2003200610c80120012802a007220320012802a80722076a2004200610c9081a2001200720066a22063602a8070240200128028406450d002004102c0b2003200610b401024020012802a407450d002003102c0b2005420037030020014180066a41106a2212420037030020014180066a41086a220e42003703002001420037038006200141b8066a4184dec700410310c501200e200141b8066a41086a220f290000370300200120012900b80637038006200141b8066a41fc95c600410d10c501200d41086a2211200f290000370000200d20012900b806370000200141a0076a20014180066a412010b90320012802a0072206410420061b2110024002400240024020012902a407420020061b220c422088a722020e020300010b41002106200a2010280200470d020c010b4100210620022104034020062004410176220320066a2207200a201020074102746a280200491b2106200420036b220441014b0d000b200a201020064102746a280200470d0120062002490d00200620021047000b201020064102746a2204200441046a2006417f7320026a41027410ca081a200c4280808080707c210c0b200120103602a0072001200c3702a4072005420037030020124200370300200e42003703002001420037038006200141b8066a4184dec700410310c501200e200f290000370300200120012900b80637038006200141b8066a41fc95c600410d10c5012011200f290000370000200d20012900b80637000020014180066a4120200141a0076a10d1040240200c42ffffffff0383500d002010102c0b200941046a21092005420037030020124200370300200e42003703002001420037038006200141b8066a4184dec700410310c501200e200f290000370300200120012900b80637038006200141b8066a41c496c600411a10c5012011200f290000370000200d20012900b806370000200141186a20014180066a412010c601200128021c2104200128021821062005420037030020124200370300200e42003703002001420037038006200141b8066a4184dec700410310c501200e200f290000370300200120012900b80637038006200141b8066a41c496c600411a10c5012011200f290000370000200d20012900b80637000002400240024020064101470d002004200a460d010b20014180066a412010b4010c010b2001200a3602a00720014180066a4120200141a0076a410410a7020b20092019470d000b0b0240200ba72206450d00200641ffffffff0371450d00201a102c0b20012903d802200141e0026a29030020012802cc0310c807024020012802a40541ffffff3f71450d0020012802a005102c0b20012802b00541ffffff3f71450d0320012802ac05102c0c030b20012802a009210320012802980921040240200128029409450d002006450d002006102c0b02402003450d002004450d002004102c0b200141a0076a20014180066a10b9010c000b0b200620081044000b200141a0076a41086a2206200141306a41086a28020036020020012001290330220c3703a00702400240200ca722030d00200141e8016a22064200370300200141e0016a22044200370300200141d0016a41086a22034200370300200142003703d001200141c0026a41f6ddc700410b10c5012003200141c0026a41086a2207290000370300200120012900c0023703d001200141c0026a41e9eec600411610c50120062007290000370300200420012900c002370300200141d0016a412010b4010c010b200141e8016a22044200370300200141d0016a41106a22074200370300200141d0016a41086a220a4200370300200142003703d001200141c0026a41f6ddc700410b10c501200a200141c0026a41086a2210290000370300200120012900c0023703d001200141c0026a41e9eec600411610c50120042010290000370300200720012900c002370300200141d0016a200141a0076a108b05024020062802002206450d0020064105742104200341106a210603400240200641786a28020041ffffff3f71450d00200641746a280200102c0b0240200641046a28020041ffffff3f71450d002006280200102c0b200641206a2106200441606a22040d000b0b20012802a40741ffffff3f71450d002003102c0b20014180066a41186a221b420037030020014180066a41106a2213420037030020014180066a41086a221942003703002001420037038006200141e0056a41ac95c400410d10c5012019200141e0056a41086a221f290000370300200120012900e00537038006200141f0056a41c695c400410c10c501201b200141f0056a41086a221d290000370300201320012900f005370300200141c0026a20014180066a10f5022001280298032106200141b8066a41086a221c200141c0026a41086a290300370300200141b8066a41106a200141c0026a41106a290300370300200141b8066a41186a200141c0026a41186a290300370300200141b8066a41206a200141c0026a41206a290300370300201d200141fc026a280200360200200120012903c0023703b806200120012902f4023703f00520012802f00221042019200141c0036a2903003703002013200141c8036a290300370300201b200141d0036a29030037030020014180066a41206a200141d8036a29030037030042c0f0f50b214602404100200420064102461b220620004f0d00200141c0006a10c0032001280240210f02400240200128024822200d004100211220014100360248200f21060c010b2006417f7320006a210d200f41046a2106202041037441786a41037641016a210441002112024003402006280200200d4b0d01200641086a21062004201241016a2212470d000b200421120b20202012490d0520014100360248200f20124103746a210902402012450d0020014180066a41046a2102200141e0096a41086a2114200141b8066a41046a2121200141b8066a41086a211a200141c0026a410c6a211e0340200f280200210a200141e0056a41f1ddc700410510c501200141f0056a4185f6c000410c10c5012001200a36028006200141b8066a20014180066a410410c701200120023602cc022001201a3602c402200120014180066a3602c8022001200141b8066a3602c002200141a0076a200141c0026a107e20012802a807220641206a2204417f4c0d050240024020040d00410121030c010b200410322203450d050b200141003602d801200120043602d401200120033602d001200141d0016a4100411010c80120012802d00120012802d80122046a220320012900e005370000200341086a200141e0056a41086a22112900003700002001200441106a22043602d801200141d0016a2004411010c80120012802d00120012802d80122046a220320012900f005370000200341086a200141f0056a41086a22082900003700002001200441106a22033602d80120012802a0072104200141d0016a2003200610c80120012802d001220320012802d80122076a2004200610c9081a2001200720066a22063602d801024020012802a407450d002004102c0b200141c0026a2003200610bb0302400240024020012802cc0222064102470d00200142003703a807200142043703a00741042103410021100c010b200120012802d0023602b007200120012802c80222103602a807200120012802c4023602a407200120012802c00222033602a007200120063602ac072010450d00200341046a2106201041037441786a41037641016a2107410021040240024003402006280200200d4b0d01200641086a21062007200441016a2204470d000b200721040c010b2004450d010b024002400240024020102004417f6a22064d0d002001200320064103746a2802003602b007200141013602ac0720102004490d01200141003602a8072003200441037422056a210e024020050d00200321060c040b410021060340200141c0026a200a200320066a28020010bf0320012802c002220720012802c80210b401024020012802c402450d002007102c0b2005200641086a2206460d030c000b0b2006201041908ec100103f000b2004201041d089c500104f000b200320066a21060b201020046b2107410021102006200e460d010340200e200641086a2206470d000c020b0b4100210720102104200320104103746a220e21060b200f41086a210f200e20066b2106024003402006450d01200641786a21060c000b0b02402007450d00024020042010460d00200320104103746a200320044103746a200741037410ca081a0b2001200720106a22103602a8070b41002104024020100d00200141e0056a41f1ddc700410510c501200141f0056a418cffc000410510c5012001200a3602b806200141e0096a200141b8066a410410c701200120213602cc02200120143602c4022001200141b8066a3602c8022001200141e0096a3602c00220014180066a200141c0026a107e200128028806220641206a2203417f4c0d060240024020030d00410121070c010b200310322207450d060b200141003602c802200120033602c402200120073602c002200141c0026a4100411010c80120012802c00220012802c80222036a220720012900e005370000200741086a20112900003700002001200341106a22033602c802200141c0026a2003411010c80120012802c00220012802c80222036a220720012900f005370000200741086a20082900003700002001200341106a22073602c8022001280280062103200141c0026a2007200610c80120012802c002220720012802c80222106a2003200610c9081a2001201020066a22063602c8020240200128028406450d002003102c0b20014180066a2007200610b8032001280280062106200129028406210b024020012802c402450d002007102c0b200b200c20061b210c024020060d00410121040c010b200ca7450d002006102c0b200141c0026a41086a200141a0076a41086a290300370300200141c0026a41106a200141a0076a41106a280200360200200120012903a0073703c00220012802d801210320012802d00121060240024020012802cc024102470d002006200310b4010c010b2001410036028806200142013703800620014180066a200141c0026a10bd0320014180066a201e10be0320062003200128028006220720012802880610a7020240200128028406450d002007102c0b20012802c40241ffffffff0171450d0020012802c002102c0b024020012802d401450d002006102c0b02402004450d00200141e0056a41f1ddc700410510c501200141f0056a4185f6c000410c10c5012001200a36028006200141e0096a20014180066a410410c701200120023602cc02200120143602c402200120014180066a3602c8022001200141e0096a3602c002200141a0076a200141c0026a107e20012802a807220641206a2204417f4c0d060240024020040d00410121030c010b200410322203450d060b200141003602c802200120043602c402200120033602c002200141c0026a4100411010c80120012802c00220012802c80222046a220320012900e005370000200341086a20112900003700002001200441106a22043602c802200141c0026a2004411010c80120012802c00220012802c80222046a220320012900f005370000200341086a20082900003700002001200441106a22033602c80220012802a0072104200141c0026a2003200610c80120012802c002220320012802c80222076a2004200610c9081a2001200720066a22063602c802024020012802a407450d002004102c0b2003200610b40120012802c402450d002003102c0b200f2009470d000b0b200f2106202020126b21200240200f2009460d0003402009200f41086a220f470d000b200f21060b2009210f0b200f20066b2106024003402006450d01200641786a21060c000b0b02402020450d000240201220012802482206460d002001280240220420064103746a200420124103746a202041037410ca081a0b2001202020066a3602480b200141c0026a41086a200141c0006a41086a28020036020020012001290340220c3703c00202400240200ca722060d00200141f8066a22064200370300200141f0066a22044200370300200141e0066a41086a22034200370300200142003703e006200141b8066a41f1ddc700410510c5012003200141b8066a41086a2207290000370300200120012900b8063703e006200141b8066a41eef5c000410f10c50120062007290000370300200420012900b806370300200141e0066a412010b4010c010b200141f8066a22044200370300200141f0066a22034200370300200141e0066a41086a22074200370300200142003703e006200141b8066a41f1ddc700410510c5012007200141b8066a41086a220a290000370300200120012900b8063703e006200141b8066a41eef5c000410f10c5012004200a290000370300200320012900b806370300200141e0066a200141c0026a10c10320012802c40241ffffffff0171450d002006102c0b2012ad220c42c0f0f50b7e200c428084afdf007e7c42c0f0f50b7c21460b200141e0066a41186a22044200370300200141e0066a41106a22064200370300200141e0066a41086a22034200370300200142003703e006200141b8066a41bee8c700410d10c5012003201c290000370300200120012900b8063703e006200141b8066a4188eec700411110c5012004201c290000370300200620012900b806370300200141c0026a200141e0066a10eb0420012802c002210720012902c402210c201b420037030020134200370300201942003703002001420037038006200141e0056a41ac95c400410d10c5012019201f290000370300200120012900e00537038006200141f0056a41c695c400410c10c501201341086a220a201d290000370000201320012900f005370000200141c0026a20014180066a10f502201b420037030020134200370300201942003703002001420037038006200141e0056a41f1ddc700410510c5012019201f290000370300200120012900e00537038006200141f0056a41c4fec000410a10c501200a201d290000370000201320012900f005370000200141c0026a20014180066a412010b90320012802c002210a20012902c402210b200442003703002006420037030020034200370300200142003703e006200141b8066a41bee8c700410d10c5012003201c290000370300200120012900b8063703e006200141b8066a41fcefc700410910c5012004201c290000370300200620012900b806370300200141c0026a200141e0066a10f9040240024020012802c00222100d0041002112200141003602482001420437034041042110410021084104210f0c010b200120012902c4022215370244200120103602402015422088a721082015a721122010210f0b200141e0066a41186a220e4200370300200141e0066a41106a220d4200370300200141e0066a41086a22044200370300200142003703e006200141b8066a41bee8c700410d10c5012004200141b8066a41086a2203290000370300200120012900b8063703e006200141b8066a41b4edc700410f10c501200641086a22052003290000370000200620012900b806370000200141c0026a200141e0066a10f504410421024100211a410021144100211c024020012802c0022209450d00200141c0026a41086a2802002114200141cc026a280200211c20012802c402211a200921020b20014180066a41186a420037030020014180066a41106a420037030020014180066a41086a220942003703002001420037038006200141e0056a41c1dcc700410610c5012009200141e0056a41086a290000370300200120012900e00537038006200141f0056a4196a4c600410610c501201341086a200141f0056a41086a290000370000201320012900f005370000200141106a20014180066a412010c6012001280214210920012802102111200e4200370300200d420037030020044200370300200142003703e006200141b8066a41bee8c700410d10c50120042003290000370300200120012900b8063703e006200141b8066a41dcecc700410f10c50120052003290000370000200620012900b806370000200141c0026a200141e0066a10e90420012802c0022206410420061b210e024020012902c402420020061b2215422088a72203450d002003410c6c2104200e210603400240200641046a28020041ffffffff0371450d002006280200102c0b2006410c6a2106200441746a22040d000b0b02402015a72206450d002006410c6c450d00200e102c0b200c420020071b2147200b4200200a1b21482007410420071b2119200a4104200a1b211e2003450d052009410020111b2121200141003602d801200142043703d001200241286a211d201e417c6a2120200f200841346c6a210520192047422088a7412c6c6a21102048422088a7211b200141c0076a2123410021134104211f4100210e41002109410021082019210603402008417f6a2104202020084102746a2103034020102006460d06200341046a2103200441016a2104200628020021072006412c6a220d210620074102470d000b200441016a2108200e21072009210602400340024002402006450d002007210e200621090c010b4100200f200f20054622061b210a2007200f2005476a210e410121092005200f41346a20061b210f200721110b0240200a0d00200128024821220c020b41002106200e2107200a28020022122004490d000b200d21062011212220122004460d010b02400240024002402004201b490d002014450d032014410274417c6a41027641016a2107410021064100210302400340201b201d20066a2802006a2004460d012006412c6a21062007200341016a2203470d000c050b0b200220066a22032802002117200141c0026a41186a22072003411c6a290200370300200141c0026a41106a2212200341146a290200370300200141c0026a41086a22132003410c6a2902003703002001200341046a2902003703c002200341246a280200211820032003412c6a2014412c6c20066b41546a10ca081a20014180066a41186a2007290300220c37030020014180066a41106a2012290300220b37030020014180066a41086a20132903002215370300200120012903c002224537038006200141e0066a41086a22062015370300200141e0066a41106a2203200b370300200141e0066a41186a2207200c370300200120453703e006200141086a2004202110e10520012802080d0141f9fac70041de0041d8fbc700105c000b2003280200211720012004202110e1052001280200450d0620012802042124200141a0076a411f6a200141c0026a411f6a280000360000200141a0076a41186a200141c0026a41186a290000370300200141a0076a41106a200141c0026a41106a290000370300200141a0076a41086a200141c0026a41086a290000370300200120012900c0023703a007410021250c010b200128020c2124200141a0076a41186a2007290300370300200141a0076a41106a2003290300370300200141a0076a41086a2006290300370300200141c0026a41026a2001418c076a41026a2d000022063a0000200120012903e0063703a007200120012f018c0722033b01c002202341026a20063a0000202320033b00002014417f6a21144101212520012802d80121130b200141c0026a411f6a2203200141a0076a411f6a280000360000200141c0026a41186a2207200141a0076a41186a290300370300200141c0026a41106a2212200141a0076a41106a290300370300200141c0026a41086a2216200141a0076a41086a290300370300200120012903a0073703c0020240201320012802d401470d00200141d0016a10a20620012802d80121130b20012802d001221f201341386c6a22062004360204200620223602002006410c6a20253a0000200641086a20173602002006410d6a20012903c002370000200641156a20162903003700002006411d6a2012290300370000200641256a20072903003700002006412c6a2003280000360000200641346a2024360200200641306a20183602002001201341016a22133602d8010b200d21060c000b0b1039000b103b000b41f9fac70041de0041e8fbc700105c000b2012202041d089c500104f000b20012802d401211b0240024002402013450d00201f201341386c6a21134100210541002109201f21060340200641046a290200210c2006410c6a2d0000210d20062802002112200141a0076a41276a200641346a2204280000360000200141a0076a41206a2006412d6a2203290000370300200141a0076a41186a200641256a220e290000370300200141a0076a41106a2006411d6a220f290000370300200141a0076a41086a200641156a221129000037030020012006410d6a22082900003703a007200141c0026a41276a22072004280000360000200141c0026a41206a220a2003290000370300200141c0026a41186a2210200e290000370300200141c0026a41106a220e200f290000370300200141c0026a41086a220f2011290000370300200120082900003703c002200d4102460d0220014180066a41276a2204200728000036000020014180066a41206a2203200a29030037030020014180066a41186a2010290300220b37030020014180066a41106a200e290300221537030020014180066a41086a200f2903002245370300200120012903c00222493703800620072004280000360000200a20032903003703002010200b370300200e2015370300200f2045370300200120493703c00220012802482203200920126a2204490d03024020032001280244470d00200141c0006a20031083040b200941016a21092001280240200441346c6a220441346a20042005200320126b6a41346c10ca081a2004200d3a00082004200c370200200441096a20012903c002370000200441116a200f290300370000200441196a200e290300370000200441216a2010290300370000200441296a200a290300370000200441306a20072800003600002001200341016a3602482005417f6a2105200641386a22062013470d000b0b200141c0026a41276a200141a0076a41276a280000360000200141c0026a41206a200141a0076a41206a290300370300200141c0026a41186a200141a0076a41186a290300370300200141c0026a41106a200141a0076a41106a290300370300200141c0026a41086a200141a0076a41086a290300370300200120012903a0073703c0020b0240201b450d00201b41386c450d00201f102c0b200141c0026a41086a200141c0006a41086a280200360200200120012903403703c002200141c0026a10a3062001201c3602cc02200120143602c8022001201a3602c402200120023602c002200141c0026a10a406200120473702c402200120193602c002200141c0026a10a5062048a72206450d02200641ffffffff0371450d02201e102c0c020b200420031044000b0240201a450d00201a412c6c450d002002102c0b02402012450d00201241346c450d002010102c0b02402048a72206450d00200641ffffffff0371450d00201e102c0b2047a72206450d002006412c6c450d002019102c0b200141c8016a22064200370300200141c0016a22044200370300200141b0016a41086a22034200370300200142003703b001200141c0026a41f6ddc700410b10c5012003200141c0026a41086a2207290000370300200120012900c0023703b001200141c0026a41b0f0c600410e10c50120062007290000370300200420012900c002370300200141b0016a412041c4b5c800410010a702200010d304210c200141f0096a2400427f2046427f200c42c0b2cd3b7c220b200b200c541b7c220c200c2046541b0bbe0202037f017e230041d0006b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822010d00200042003703000c010b200228020c2103024002400240200241086a41086a28020022044108490d00200441787141786a0e09000101010101010100010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b420021050c010b200041186a2001290010370300200041106a200129000837030020002001290000370308420121050b200020053703002003450d002001102c0b200241d0006a24000bc90103017f017e017f230041106b22022400200241003602082002420137030020012903002103200241004108102f2002280200200228020822046a20033700002002200441086a220436020820012903082103200220044108102f2002280200200228020822046a20033700002002200441086a220436020820012903102103200220044108102f20022802002201200228020822046a20033700002002200441086a2204360208200041202001200410a70202402002280204450d002001102c0b200241106a24000bfe0101027f230041106b22032400200341003602082003420137030002400240024002400240024020010e03010203000b200041204101410010a7020c040b200341004101102f2003280200200328020822016a41003a00002003200141016a2201360208200320014104102f20032802002204200328020822016a2002360000200141046a21010c020b200341004101102f20032802002204200328020822016a41013a0000200141016a21010c010b200341004101102f20032802002204200328020822016a41023a0000200141016a21010b2003200136020820032802042102200041202004200110a7022002450d002004102c0b200341106a24000be40e03057f047e027f230041a00d6b2204240020044190096a200141c00310c9081a20044190066a20044190096a10890320042d009006210520042f009106210620042d009306210720044190036a20044190066a41047241fc0210c9081a41012101024002400240024002400240024020054101460d00200441186a20044190036a41046a41f80210c9081a024020032802002205450d00200441106a4186a4c600411010c6012004280214210120042802102106200441d00c6a41086a200341086a280200360200200420032902003703d00c20044190036a41c1dcc700410610c50120044190066a41c0cdc600410d10c50120042001410020061b3602940d200441980d6a200441940d6a410410c7012004419c096a200441940d6a41046a3602002004200441980d6a41086a360294092004200441940d6a360298092004200441980d6a36029009200441e00c6a20044190096a107e20042802e80c220141206a2206417f4c0d040240024020060d00410121070c010b200610322207450d060b20044100360298092004200636029409200420073602900920044190096a4100411010c80120042802900920042802980922066a2207200429009003370000200741086a20044190036a41086a2900003700002004200641106a22063602980920044190096a2006411010c80120042802900920042802980922066a2207200429009006370000200741086a20044190066a41086a2900003700002004200641106a22073602980920042802e00c210620044190096a2007200110c801200428029009220720042802980922086a2006200110c9081a2004200820016a220136029809024020042802e40c450d002006102c0b20072001200441d00c6a108a030240200428029409450d002007102c0b024020042802d40c450d0020042802d00c102c0b410021010b200441d00c6a200441e8006a10b70220044190096a200441186a41f80210c9081a20044190066a20044190096a20042903d00c220920042d00d80c20042d00d90c2002108b0320044190036a41086a20044190066a410c6a29020037030020044190036a41106a20044190066a41146a29020037030020044190036a41186a20044190066a411c6a29020037030020044190036a41206a20044190066a41246a29020037030020044190036a41286a20044190066a412c6a290200370300200441c0036a200441c4066a280200360200200420042902940637039003024020042d0090064101460d00200441e00c6a41286a20044190036a412c6a290200370300200441e00c6a41206a220220044190036a41246a290200370300200441e00c6a41186a20044190036a411c6a290200370300200441e00c6a41106a20044190036a41146a290200220a370300200441e00c6a41086a20044190036a410c6a290200220b3703002004200429029403220c3703e00c2009200a200a2009561b2009200b42015122061b210920042903d80c210a02400240200c4201510d004100210620042d00800d21082009210b200a21090c010b2002108c034192c5c300ad4280808080a00184100041d79ec000ad4280808080e0018410000240024020060d0041cd9ec000ad4280808080a0018410000c010b200441f00c6a29030010010b41c49ec000ad4280808080900184100002400240200441f80c6a2d00004101470d0041c29ec000ad4280808080208410000c010b41bf9ec000ad4280808080308410000b4101210620042802800d210820042902840d210b0b20044190096a41086a220220063a0000200441b0096a200a370300200441a8096a2206200937030020044190096a41106a2207200b3703002004419c096a20083602002004419b096a20044192066a2d00003a0000200420042f0090063b009909200441003602900920044190096a10c802200441086a4186a4c600411010c6012004200428020c41016a410120042802081b220d360290094104210e4186a4c600411020044190096a410410a702200642003703002007420037030020024200370300200442003703900920044190036a41c1dcc700410610c501200220044190036a41086a29000037030020042004290090033703900920044190066a41b0d1c600410e10c501200620044190066a41086a290000370300200720042900900637030020044190096a4100200d1087032004200441880d6a28000036009709200420042900810d370390090240200c4201520d002004200428009709360097062004200429039009370390062004200429039006370390032004200428009706360097032008210e0b200041003a0000200041046a200e3a0000200041056a2004290390033700002000410c6a2004280097033600002005450d072001410173450d030c070b200020042f00910620042d0093064110747222023b0001200041013a0000200041036a20024110763a00000c010b2000200620074110747222053b000141012101200041013a0000200041036a20054110763a0000200328020021050b2005450d0420010d030c040b2003280204450d032005102c0c030b103b000b1039000b2003280204450d002005102c0b200441a00d6a24000bbf290f017f047e017f017e017f017e017f017e017f017e017f017e017f027e047f230041d0126b22022400420221030240024002400240024002400240200129036822044202520d00200241086a20014198016a41a80210c9081a0c010b200241fe026a200141206a41c20010c9081a200141f8006a290300210320012903702105200241c0036a41186a200141186a290000370300200241c0036a41106a200141106a290000370300200241c0036a41086a200141086a290000370300200220012900003703c003200241900d6a20014198016a41a80210c9081a200241b80f6a41106a20014190016a290300370300200241b80f6a41086a20014188016a290300370300200220014180016a2903003703b80f200241a8126a220141002902ecde472206370300200241a0126a220741002902e4de47220837030020024198126a220941002902dcde47220a370300200241f0116a41206a220b41002902d4de47220c370300200241f0116a41186a220d41002902ccde47220e370300200241f0116a41106a220f41002902c4de472210370300200241f0116a41086a221141002902bcde472212370300200241002902b4de4722133703f011200241f0116a10ff0220012006370300200720083703002009200a370300200b200c370300200d200e370300200f201037030020112012370300200220133703f011200241f0116a10ff02200241b0126a41c1dcc700410610c501200241b0116a41fda3c600410910c501200241003602f010200241e0116a200241f0106a410410c701200241fc116a200241f0106a41046a3602002002200241e0116a41086a22113602f4112002200241f0106a3602f8112002200241e0116a3602f01120024190116a200241f0116a107e200228029811220141206a2207417f4c0d010240024020070d00410121090c010b200710322209450d060b200241003602f810200220073602f410200220093602f010200241f0106a4100411010c80120022802f01020022802f81022076a220920022900b012370000200941086a200241b0126a41086a2900003700002002200741106a22073602f810200241f0106a2007411010c80120022802f01020022802f81022076a220920022900b011370000200941086a200241b0116a41086a220b2900003700002002200741106a22093602f8102002280290112107200241f0106a2009200110c80120022802f010220920022802f810220d6a2007200110c9081a2002200d20016a22013602f8100240200228029411450d002007102c0b200241f0116a2009200110c901200b200241f9116a290000370300200241b0116a41106a20024181126a290000370300200241c8116a220120024189126a290000370300200220022900f1113703b0110240024020022d00f0114101460d00200241c5126a4200370000200241c0126a4200370300200241b8126a4200370300200242003703b0124100210d0c010b200241b8126a200241bb116a290000370300200241b0126a41106a200241c3116a290000370300200241c5126a2001290000370000200220022900b3113703b01220022f01b01120022d00b21141107472210d0b024020022802f410450d002009102c0b200241d0106a41086a200241b0126a41086a2201290300370300200241d0106a41106a200241b0126a41106a290300370300200241d0106a41156a200241b0126a41156a290000370000200220022903b0123703d010200241c8116a22074200370300200241b0116a41106a22094200370300200241b0116a41086a220b4200370300200242003703b011200241d0116a41c1dcc700410610c501200b200241d0116a41086a290000370300200220022900d0113703b011200241b0126a4196a4c600410610c50120072001290000370300200920022900b0123703002002200241b0116a412010c60141002109024020044201520d0020054200510d032002280204410020022802001b2101417f210942002001ad220620037d220820082006561b220620037c20062005827d220642ffffffff0f560d002006a721090b200241d0116a41c1dcc700410610c501200241b0126a41fda3c600410910c501200220093602ec11200241e0116a200241ec116a410410c701200241fc116a200241ec116a41046a3602002002200241e8116a3602f4112002200241ec116a3602f8112002200241e0116a3602f011200241b0116a200241f0116a107e20022802b811220141206a2207417f4c0d010240024020070d004101210b0c010b20071032220b450d060b200241003602f811200220073602f4112002200b3602f011200241f0116a4100411010c80120022802f01120022802f81122076a220b20022900d011370000200b41086a200241d0116a41086a2900003700002002200741106a22073602f811200241f0116a2007411010c80120022802f01120022802f81122076a220b20022900b012370000200b41086a200241b0126a41086a2900003700002002200741106a220b3602f81120022802b0112107200241f0116a200b200110c80120022802f011220b20022802f811220f6a2007200110c9081a2002200f20016a22013602f811024020022802b411450d002007102c0b200b200110ce022101024020022802f411450d00200b102c0b024002402001450d00200241b0126a41c1dcc700410610c501200241b0116a41fda3c600410910c501200220093602ec11200241e0116a200241ec116a410410c701200241fc116a200241ec116a41046a360200200220113602f4112002200241ec116a3602f8112002200241e0116a3602f011200241d0116a200241f0116a107e20022802d811220141206a2207417f4c0d030240024020070d00410121090c010b200710322209450d080b200241003602e811200220073602e411200220093602e011200241e0116a4100411010c80120022802e01120022802e81122076a220920022900b012370000200941086a200241b0126a41086a2900003700002002200741106a22073602e811200241e0116a2007411010c80120022802e01120022802e81122076a220920022900b011370000200941086a200241b0116a41086a220b2900003700002002200741106a22093602e81120022802d0112107200241e0116a2009200110c80120022802e011220920022802e811220f6a2007200110c9081a2002200f20016a22013602e811024020022802d411450d002007102c0b200241f0116a2009200110c901200b200241f9116a290000370300200241b0116a41106a20024181126a290000370300200241c8116a220120024189126a290000370300200220022900f1113703b0110240024020022d00f0114101460d00200241c5126a4200370000200241c0126a4200370300200241b8126a4200370300200242003703b012410021010c010b200241b8126a200241bb116a290000370300200241b0126a41106a200241c3116a290000370300200241c5126a2001290000370000200220022900b3113703b01220022f01b01120022d00b2114110747221010b024020022802e411450d002009102c0b20024190116a41156a2207200241b0126a41156a29000037000020024190116a41106a2209200241b0126a41106a290300370300200241f0106a41106a220b2009290300370300200241f0106a41156a22092007290000370000200241f0106a41086a200241b0126a41086a290300220637030020024190106a41086a2207200637030020024190106a41106a220f200b29030037030020024190106a41156a220b2009290000370000200220022903b01222063703f0102002200637039010200241b0106a41156a2209200241d0106a41156a290000370000200241b0106a41106a2211200241d0106a41106a290300370300200241b0106a41086a2214200241d0106a41086a290300370300200220022903d0103703b010200241f00f6a41156a22152009290000370000200241f00f6a41106a22092011290300370300200241f00f6a41086a22112014290300370300200220022903b0103703f00f200241d00f6a41156a2214200b290000370000200241d00f6a41106a220b200f290300370300200241d00f6a41086a220f200729030037030020022002290390103703d00f200241a80a6a41156a22072015290000370000200241a80a6a41106a22152009290300370300200241a80a6a41086a22092011290300370300200220022903f00f3703a80a200241880a6a41156a22112014290000370000200241880a6a41106a2214200b290300370300200241880a6a41086a220b200f290300370300200220022903d00f3703880a200241c80a6a41106a220f200241b80f6a41106a290300370300200241c80a6a41086a2216200241b80f6a41086a290300370300200220022903b80f3703c80a200241e00a6a41046a200241900d6a41a80210c9081a200241d8076a200241e00a6a41ac0210c9081a200241c0076a41106a2217200f290300370300200241c0076a41086a220f2016290300370300200241a0076a41086a22162009290300370300200241a0076a41106a22092015290300370300200241a0076a41156a2215200729000037000020024180076a41086a2207200b29030037030020024180076a41106a220b201429030037030020024180076a41156a22142011290000370000200220022903c80a3703c007200220022903a80a3703a007200220022903880a37038007200241e0036a200241d8076a41046a41a80210c9081a200241c2066a200d4110763a0000200241c0066a200d3b010020024198066a200337030020024190066a2005370300200241a0066a20022903c007370300200241a8066a200f290300370300200241b0066a2017290300370300200241c3066a20022903a007370000200241cb066a2016290300370000200241d3066a2009290300370000200241d8066a201529000037000020022004370388062002420a3703b806200241e2066a20014110763a0000200241e0066a20013b0100200241e3066a200229038007370000200241eb066a2007290300370000200241f3066a200b290300370000200241f8066a20142900003700004108103222010d010c070b200241f0106a41156a20024190116a41156a290000370000200241f00f6a41086a200241b0106a41086a290000370300200241f00f6a41106a200241b0106a41106a290000370300200241f00f6a41156a200241b0106a41156a290000370000200241d00f6a41156a20024190106a41156a290000370000200220022900b0103703f00f200241900d6a10b303200241d8076a200241e00a6a41ac0210c9081a200241c0076a41106a200241c80a6a41106a290300370300200241c0076a41086a200241c80a6a41086a290300370300200241a0076a41086a200241a80a6a41086a290000370300200241a0076a41106a200241a80a6a41106a290000370300200241a0076a41156a200241a80a6a41156a29000037000020024180076a41086a200241880a6a41086a29000037030020024180076a41106a200241880a6a41106a29000037030020024180076a41156a200241880a6a41156a290000370000200220022903c80a3703c007200220022900a80a3703a007200220022900880a37038007200041036a41003a0000200041800a3b0001200041013a00000c050b200242083702dc07200220013602d807200241e0036a200241d8076a10b403200241e0036a41a8026a200241d8076a10b50320022802b8062101200241d8076a20022802e0074104102f20022802d80720022802e0076a2001360000200220022802e00741046a22013602e00720022802bc062107200241d8076a20014104102f20022802d80720022802e0076a2007360000200220022802e00741046a3602e007412010322201450d05200242203702e40a200220013602e00a200241e00a6a41004120102f20022802e00a220720022802e80a22096a2201200241c0066a290300370000200141086a200241c8066a290300370000200141106a200241d0066a290300370000200141186a200241d8066a2903003700002002200941206a22013602e80a200241d8076a20022802e0072001102f20022802d80720022802e0076a2007200110c9081a200220022802e00720016a3602e007024020022802e40a450d002007102c0b412010322201450d05200242203702e40a200220013602e00a200241e00a6a41004120102f20022802e00a220720022802e80a22096a2201200241e0066a290300370000200141086a200241e8066a290300370000200141106a200241f0066a290300370000200141186a200241f8066a2903003700002002200941206a22013602e80a200241d8076a20022802e0072001102f20022802d80720022802e0076a2007200110c9081a200220022802e00720016a22013602e007024020022802e40a450d002007102c20022802e00721010b20022802d80721070240024020014180024b0d00200241fe026a20072001200241c0036a10b60321010c010b200241b0116a20072001109a01200241fe026a200241b0116a4120200241c0036a10b60321010b024020022802dc07450d0020022802d807102c0b2001450d03200241d8026a41086a200241c0036a41086a290300370300200241d8026a41106a200241c0036a41106a290300370300200241d8026a41186a200241c0036a41186a290300370300200241b0026a41086a20024198066a290300370300200241b0026a41106a200241a0066a290300370300200241b0026a41186a200241a8066a290300370300200241d0026a200241b0066a290300370300200220022903c0033703d802200220024190066a2903003703b0022002290388062103200241086a200241e0036a41a80210c9081a0b200041086a20022903d802370300200041286a2003370300200041306a20022903b002370300200041206a200241d8026a41186a290300370300200041186a200241d8026a41106a290300370300200041106a200241d8026a41086a290300370300200041386a200241b0026a41086a290300370300200041c0006a200241b0026a41106a290300370300200041c8006a200241b0026a41186a290300370300200041d0006a200241b0026a41206a290300370300200041d8006a200241086a41a80210c9081a200041003a0000200241d0126a24000f0b103b000b41d0b6c800411941ecb6c800103c000b20004180083b0001200041013a0000200041036a41003a0000200241e0036a1083020b200241d0126a24000f0b1039000ba40301047f230041106b22032400024002402002280208220441046a2205417f4c0d002002280200210202400240024002400240024020050d0020034100360208200342013703000c010b200510322206450d06200341003602082003200536020420032006360200200441c000490d01200441808001490d022004418080808004490d030b200341004101102f2003280200200328020822056a41033a00002003200541016a2205360208200320054104102f2003280200200328020822056a2004360000200541046a21050c030b200341004101102f2003280200200328020822056a20044102743a0000200541016a21050c020b200341004102102f2003280200200328020822056a20044102744101723b0000200541026a21050c010b200341004104102f2003280200200328020822056a2004410274410272360000200541046a21050b20032005360208200320052004102f20032802002205200328020822066a2002200410c9081a2003200620046a2204360208200020012005200410a70202402003280204450d002005102c0b200341106a24000f0b103b000b1039000b904e0c017f017e017f017e037f027e017f017e037f027e027f027e23004180076b22062400024002400240024002400240024002400240024002400240024002400240024002400240200129032022074202520d0020022003200510cc06220841ff01714102470d014200210920064180066a41106a4200370300200641d0016a41086a220a4200370300200641d0016a41106a220b4200370300200641d0016a41186a220c4200370300200642003703d0012001280250417f6a0e0a020c0c0c0c030c0c04050c0b200641d0016a41186a200141186a290000370300200641d0016a41106a200141106a290000370300200641d0016a41086a200141086a290000370300200620012900003703d001200141c8006a290300210d200141c0006a290300210e200141386a280200210f20012903282110200641f0016a41186a22084200370300200641f0016a41106a22114200370300200641f0016a41086a22124200370300200642003703f001200641b8046a41c1dcc700410610c5012012200641b8046a41086a290000370300200620062900b8043703f001200641c8046a4196a4c600410610c5012008200641c8046a41086a290000370300201120062900c804370300200641e8006a200641f0016a412010c601024020074201520d0020104200510d070b200641b8046a41c1dcc700410610c501200641c8046a41acc8c700410710c501200641f0016a200641d0016a10d50220062802f801220841206a2211417f4c0d070240024020110d00410121120c010b201110322212450d090b200641003602782006201136027420062012360270200641f0006a4100411010c8012006280270200628027822116a221220062900b804370000201241086a200641b8046a41086a2900003700002006201141106a2211360278200641f0006a2011411010c8012006280270200628027822116a221220062900c804370000201241086a200641c8046a41086a2900003700002006201141106a221236027820062802f0012111200641f0006a2012200810c80120062802702212200628027822136a2011200810c9081a2006201320086a2208360278024020062802f401450d002011102c0b200641f0016a2012200810d602200641d8046a41086a200641f0016a41106a290300370300200641d8046a41106a200641f0016a41186a290300370300200641d8046a41186a2208200641f0016a41206a290300370300200641d8046a41206a2211200641f0016a41286a290300370300200641d8046a41286a2213200641f0016a41306a290300370300200641d8046a41306a220a200641f0016a41386a290300370300200641d8046a41386a220b200641b0026a290300370300200620062903f8013703d8040240024020062903f0014201510d0020064180066a41386a420037030020064180066a41306a420037030020064180066a41286a420037030020064180066a41206a420037030020064180066a41186a420037030020064190066a420037030020064188066a4200370300200642003703800641002111410021080c010b20064180066a41086a200641d8046a41086a29030037030020064180066a41106a200641d8046a41106a29030037030020064180066a41186a200829030037030020064180066a41206a201129030037030020064180066a41286a201329030037030020064180066a41306a200a29030037030020064180066a41386a200b290300370300200620062903d80437038006200641b8026a280200210820062802bc0221110b02402006280274450d002012102c0b02402008200f470d00200641f0016a41386a20064180066a41386a290300370300200641f0016a41306a20064180066a41306a290300370300200641f0016a41286a20064180066a41286a290300370300200641f0016a41206a20064180066a41206a290300370300200641f0016a41186a20064180066a41186a290300370300200641f0016a41106a20064180066a41106a290300370300200641f0016a41086a20064180066a41086a29030037030020062006290380063703f001200620113602b402410121122006200f41016a3602b002200641b8046a41c1dcc700410610c501200641c8046a41acc8c700410710c501200641d8046a200641d0016a10d50220062802e004220841206a2211417f4c0d0802402011450d00201110322212450d0a0b200641003602782006201136027420062012360270200641f0006a4100411010c8012006280270200628027822116a220f20062900b804370000200f41086a200641b8046a41086a2900003700002006201141106a2211360278200641f0006a2011411010c8012006280270200628027822116a220f20062900c804370000200f41086a200641c8046a41086a2900003700002006201141106a220f36027820062802d8042111200641f0006a200f200810c8012006280270220f200628027822126a2011200810c9081a2006201220086a2208360278024020062802dc04450d002011102c0b200f2008200641f0016a10810302402006280274450d00200f102c0b4180122108200341ff01714102460d0e20022003200510cc06220841ff01714102470d0e200641d8006a20052002200e200d200441ff017141004720031092060240024020062903582207200641d8006a41086a29030022108450450d00420021090c010b20064180066a200641d0016a2007201041014111200e200d84501b410010cd062006280280064101460d0b20064190066a29030021102006290388062107420121090b200641d8046a41086a200641d0016a41086a22082903002214370300200641b0056a41186a200641d0016a41186a22112903002215370300200641b0056a41086a2014370300200641d0066a41186a220f2015370300200641d0066a41106a2212200641d0016a41106a2213290300370300200641d0066a41086a220a2014370300200620062903d0013703d00620064190016a41186a200f29030037030020064190016a41106a201229030037030020064190016a41086a200a290300370300200620062903d00637039001200641b0016a41186a2011290300370300200641b0016a41106a2013290300370300200641b0016a41086a2008290300370300200620062903d0013703b001410121080c100b4180064180042008200f4b1b21080c0d0b20064180066a41186a200641f0016a41186a29020037030020064180066a41106a200641f0016a41106a29020037030020064180066a41086a200641f0016a41086a290200370300200620062902f00137038006200041036a20084110763a0000200020083b0001200041013a00000c0d0b4100211241002108200141d8006a2802004102470d0a200641d0066a410c6a200141e0026a290200370200200641e4066a200141e8026a290200370200200641ec066a200141f0026a290200370200200641e2c289ab063602d0062006200141d8026a2902003702d406200141dc006a2802002108200641c8046a200141e0006a10cc05200641f0006a410c6a200641c8046a41086a28020036020020062008360270200620062903c8043702742006200141ec006a2802003602800120064180066a200641d0066a200641f0006a10ce0620062802c006450d03200641f0016a41056a20064180066a41d00010c9081a200641d8046a200641f0016a41d50010c9081a200641b0056a200641d8046a41056a41d00010c9081a200641f0016a200641b0056a41d00010c9081a200641d8046a410c6a2111410021124100210802400340200841d000460d0141081032220f450d08200642083702dc042006200f3602d80420012903702107200641d8046a41004108102f20062802d804221320062802e004220f6a2007370000201141002900ddd540370000201141086a41002900e5d5403700002006200641f0016a20086a3602f4042006200f41086a3602e00420064180066a200641d8046a10bf06024020062802dc04450d002013102c0b200641d8046a20064180066a10a20220062802d804221320062802e00410ce02210f024020062802dc04450d002013102c0b200841d0006a2108200f0d000b410221120b200641b4026a2802002208450d08200841306c450d08200641b0026a280200102c0c080b4100211241002108200141d8006a2d00004118470d0920064198026a200141e0026a290300370300200641f0016a41206a200141d8026a29030037030020064188026a200141d0026a29030037030020064180026a200141c8026a290300370300200641f8016a200141c0026a2903003703002006200141b8026a2903003703f001200641d8046a200641f0016a200141a8026a28020010a70420062903d8044201520d0820062903e0044202510d084100211220062d00fa044100200641d8046a41206a2d000041ff01714103461b41087441077221080c090b4100211241002108200141d8006a2802004102470d08200641d0066a410c6a200141d8026a290000370200200641e4066a200141e0026a290000370200200641ec066a200141e8026a290000370200200641e7e485f3063602d0062006200141d0026a2900003702d406200141dc006a2802002108200641c8046a200141e0006a10cc05200641f0006a410c6a200641c8046a41086a28020036020020062008360270200620062903c8043702742006200141ec006a2802003602800120064180066a200641d0066a200641f0006a10ce0620062802c006450d01200641f0016a41056a20064180066a41d00010c9081a200641d8046a200641f0016a41d50010c9081a200641b0056a200641d8046a41056a41d00010c9081a20014180016a2903002107200141f0006a290300210d200641f0016a200641b0056a41d00010c9081a200641d8046a410c6a2111410021124100210802400340200841d000460d01200641003602e004200642013703d804200641d8046a41004108102f20062802d80420062802e004220f6a200d3700002006200f41086a220f3602e004200641d8046a200f4108102f20062802d804221320062802e004220f6a2007370000201141002900edd540370000201141086a41002900f5d5403700002006200641f0016a20086a3602f4042006200f41086a3602e00420064180066a200641d8046a10bf06024020062802dc04450d002013102c0b200641d8046a20064180066a10a20220062802d804221320062802e00410ce02210f024020062802dc04450d002013102c0b200841d0006a2108200f0d000b410221120b200641b4026a2802002208450d06200841306c450d06200641b0026a280200102c0c060b200641f0016a200141d4006a10b506024020062d00f0014101460d002006419c026a280200210f20064198026a280200211620064194026a28020021122006418c026a280200211720064188026a2802002113024020064190026a2802002208450d002008410c6c21112013210803400240200841046a280200450d002008280200102c0b2008410c6a2108201141746a22110d000b0b02402017450d002013450d002017410c6c450d002013102c0b0240200f450d00200f410c6c21112012210803400240200841046a280200450d002008280200102c0b2008410c6a2108201141746a22110d000b0b2016450d072012450d072016410c6c450d072012102c0c070b20062d00f10122124102460d0620062f01f20121080c070b41042108410021120c060b41d0b6c800411941ecb6c800103c000b103b000b1039000b200641d8046a41086a200641f0016a41086a290300370300200641d8046a41106a200641f0016a41106a29030037030041800221080c030b4103210820124102470d010b20064190016a41186a200c29030037030020064190016a41106a200b29030037030020064190016a41086a200a290300370300200620062903d00137039001410021084200210e4200210d0c030b200041013a0000200041036a20084108763a0000200020084108742012723b00010c010b200641d0066a41186a200641b0056a41186a290300370300200641d0066a41106a200641b0056a41106a290300370300200641d0066a41086a200641b0056a41086a290300370300200620062903b0053703d006200041036a20084110763a0000200020083b0001200041013a00000b0240024002400240024002400240024002400240024020012802500e1800010c0c0c02030c0405060c0c0c070c0c0c0c0c0c0c08090a0b024002400240024002400240200141d8006a280200417e6a0e080011010211030405110b200141e0006a280200450d10200141dc006a280200102c0c100b200141e0006a280200450d0f200141dc006a280200102c0c0f0b200141e0006a280200450d0e200141dc006a280200102c0c0e0b200141dc006a10c1020c0d0b0240200141e4006a2802002203450d00200141dc006a28020021002003410c6c210303400240200041046a280200450d002000280200102c0b2000410c6a2100200341746a22030d000b0b200141e0006a2802002200450d0c2000410c6c450d0c200128025c102c0c0c0b200141e0006a280200450d0b200141dc006a280200102c0c0b0b02400240200141d8006a2802000e020c00010b200141fc006a102b200141ec016a102b0240200141e8006a2802002203450d00200141e0006a28020021002003410c6c210303400240200041046a280200450d002000280200102c0b2000410c6a2100200341746a22030d000b0b200141e4006a2802002200450d0b2000410c6c450d0b2001280260102c0c0b0b200141fc006a102b200141ec016a102b0240200141e8006a2802002203450d00200141e0006a28020021002003410c6c210303400240200041046a280200450d002000280200102c0b2000410c6a2100200341746a22030d000b0b200141e4006a2802002200450d0a2000410c6c450d0a2001280260102c0c0a0b0240200141dc006a2802002200450d00200041f0006c2103200141d4006a28020041046a210003402000102b200041f0006a2100200341907f6a22030d000b0b200141d8006a2802002200450d09200041f0006c450d092001280254102c0c090b02400240024002400240200141d8006a2d00000e180d0d0d0d0d0d000d0d0d0d0d0d0d0d010d0d020d0d0d0d03040b200141e0006a28020041ffffff3f71450d0c200141dc006a280200102c0c0c0b200141e0006a28020041ffffff3f71450d0b200141dc006a280200102c0c0b0b200141e4006a28020041ffffffff0371450d0a200141e0006a280200102c0c0a0b0240200141e0006a28020041808080807872418080808078460d00200141dc006a280200102c0b200141e8006a10e9010c090b0240200141e0006a28020041808080807872418080808078460d00200141dc006a280200102c0b200141e8006a10e9010c080b200141d4006a2802002200450d07200141d8006a280200450d072000102c0c070b02400240200141d8006a280200417f6a0e020001080b0240200141e8006a2802002203450d00200141e0006a28020021002003410c6c210303400240200041046a280200450d002000280200102c0b2000410c6a2100200341746a22030d000b0b200141e4006a2802002200450d072000410c6c450d072001280260102c0c070b0240200141e8006a2802002203450d00200141e0006a28020021002003410c6c210303400240200041046a280200450d002000280200102c0b2000410c6a2100200341746a22030d000b0b200141e4006a2802002200450d062000410c6c450d062001280260102c0c060b0240200141dc006a280200450d00200141d8006a280200102c0b0240200141ec006a2802002203450d00200141e4006a28020021002003410c6c210303400240200041046a280200450d002000280200102c0b2000410c6a2100200341746a22030d000b0b200141e8006a2802002200450d052000410c6c450d052001280264102c0c050b0240200141dc006a2802002203450d00200141d4006a2802002200200341d0006c6a21080340200041046a410036020020002802002103200041013602000240200041086a280200450d002003102c0b200041d0006a22002008470d000b0b0240200141d8006a2802002200450d00200041d0006c450d002001280254102c0b200141e0006a10c2020c040b200141d4006a2802004101470d030240200141e0006a280200450d00200141dc006a280200102c0b200141ec006a280200450d03200141e8006a280200102c0c030b02400240200141d8006a280200417f6a0e03000401040b0240200141e4006a280200450d00200141e0006a280200102c0b200141f0006a280200450d03200141ec006a280200102c0c030b0240024002400240024002400240200141e0006a2d00000e0700010203040506090b200141e4006a280200200141ec006a28020010c3020240200141e8006a2802002200450d0020004198026c450d002001280264102c0b200141f0006a280200200141f8006a28020010c402200141f4006a2802002200450d0820004188026c450d082001280270102c0c080b200141e4006a280200200141ec006a28020010c3020240200141e8006a2802002200450d0020004198026c450d002001280264102c0b200141f0006a280200200141f8006a28020010c402200141f4006a2802002200450d0720004188026c450d072001280270102c0c070b200141e4006a280200200141ec006a28020010c3020240200141e8006a2802002200450d0020004198026c450d002001280264102c0b200141f0006a280200200141f8006a28020010c402200141f4006a2802002200450d0620004188026c450d062001280270102c0c060b200141e4006a280200200141ec006a28020010c302200141e8006a2802002200450d0520004198026c450d052001280264102c0c050b200141e8006a280200450d04200141e4006a280200102c0c040b200141e8006a10a201200141e4006a220128020010c5022001280200102c0c030b200141e8006a10a201200141e4006a220128020010c5022001280200102c0c020b024002400240200141d8006a2d00000e0404000104020b200141dc006a22012802001083022001280200102c0c030b200141dc006a22012802001083022001280200102c0c020b200141fc006a22012802001083022001280200102c0c010b200641f0006a41186a2211200641b0016a41186a290300370300200641f0006a41106a220f200641b0016a41106a290300370300200641f0006a41086a2212200641b0016a41086a290300370300200620062903b001370370200641d0016a41186a221320064190016a41186a290300370300200641d0016a41106a220a20064190016a41106a290300370300200641d0016a41086a220b20064190016a41086a29030037030020062006290390013703d001200641f0016a200141d0006a41a80210c9081a20064180066a41186a220c201129030037030020064180066a41106a2211200f29030037030020064180066a41086a220f201229030037030020062006290370370380064102210102402008450d00200641d0066a41186a200c290300370300200641d0066a41106a2011290300370300200641d0066a41086a200f29030037030020062006290380063703d006410121010b200641ba056a200641d0066a41086a2208290300370100200641c2056a200641d0066a41106a2211290300370100200641ca056a200641d0066a41186a220f290300370100200620013a00b105200641003a00b005200620062903d0063701b20520064180066a200641b0056a10c702200641d8046a200641f0016a20064180066a10bf02200641d8046a41106a22012903002114200641d8046a41186a22122d0000210c20062903e004211520062903d8042118200f20132903003703002011200a2903003703002008200b290300370300200620062903d0013703d006200641f0016a41186a20064180056a290300370300200641f0016a41106a200641f8046a290300370300200641f0016a41086a2012290300370300200620012903003703f0010240024020184201520d0020064180066a41186a2201200641f0016a41186a29030037030020064180066a41106a2208200641f0016a41106a29030037030020064180066a41086a200641f0016a41086a290300370300200620062903f0013703800620154202510d00200641b0016a41086a20012903003e0200200620082903003703b0010c010b200641043a00b0010b024002400240024002400240200341ff01714102470d0020062d00b00141ff01714104470d010b024020154201520d00201420025a0d004200200220147d221820182002561b2118200641f0016a41186a220f4200370300200641f0016a41106a22014200370300200641f0016a41086a22084200370300200642003703f001200641b8046a41c1dcc700410610c5012008200641b8046a41086a2212290000370300200620062900b8043703f001200641c8046a41c4ccc600410b10c501200f200641c8046a41086a2213290000370300200120062900c80437030020064180066a200641f0016a1085032006200629038806420020062903800642015122111b3703b005200620064180066a41106a220a290300420020111b37039001200620064180066a41186a220b290300420020111b3703f806200641f8066a211102400240024020034103710e03010002010b20064190016a21110c010b200641b0056a21110b201142002011290300221920187d221820182019561b370300200b20062903f806370300200a200629039001370300200620062903b005370388062006420137038006200f42003703002001420037030020084200370300200642003703f001200641b8046a41c1dcc700410610c50120082012290000370300200620062900b8043703f001200641c8046a41c4ccc600410b10c501200141086a2013290000370000200120062900c804370000200641f0016a20064180066a41086a1086030b200641b0056a41186a200641d0066a41186a290300370300200641b0056a41106a200641d0066a41106a290300370300200641b0056a41086a200641d0066a41086a290300370300200620062903d0063703b005200641306a20052002201420142002561b200220154201511b200e200d200441ff0171410146200c41ff01714101467220031092062009500d02200641f0016a200641b0056a42002007200629033022027d220920092007562010200641306a41086a2903007d2007200254ad7d220220105620022010511b22011b4200200220011b10b6044200200641f0016a41086a29030020062802f00141014622011b220920077d200720097d2007200954220320104200200641f0016a41106a29030020011b22145420102014511b22011b2102201420107d2009200754ad7d201020147d2003ad7d20011b210720010d03200641f0016a41106a2201200d20072002200e562007200d562007200d511b22031b2210370300200642003703f0012006200e200220031b220d3703f801200641f0016a10cf062001200720107d2002200d54ad7d2207370300200642003703f00120062002200d7d220e3703f801200641f0016a10cf06200e200d842007201084844200520d0120064188026a2203420037030020014200370300200641f0016a41086a22084200370300200642003703f001200641b8046a41d4dcc700410810c5012008200641b8046a41086a2205290000370300200620062900b8043703f001200641c8046a41bba8c700410d10c5012003200641c8046a41086a220f290000370300200120062900c804370300200641186a200641f0016a412010d301200641186a41106a29030021022006290320210720062802182111200342003703002001420037030020084200370300200642003703f001200641b8046a41d4dcc700410810c50120082005290000370300200620062900b8043703f001200641c8046a41bba8c700410d10c5012003200f290000370300200120062900c80437030020062002420020111b3703880620062007420020111b37038006200641f0016a412020064180066a411010a7020c020b41c0dec400ad4280808080d001841000200641b0016a108c0341801021012009500d0320064188026a22034200370300200641f0016a41106a22084200370300200641f0016a41086a22114200370300200642003703f001200641b8046a41d4dcc700410810c5012011200641b8046a41086a220f290000370300200620062900b8043703f001200641c8046a41bba8c700410d10c5012003200641c8046a41086a2212290000370300200820062900c804370300200641c0006a200641f0016a412010d301200641c0006a41106a29030021022006290348210d20062802402105200342003703002008420037030020114200370300200642003703f001200641b8046a41d4dcc700410810c5012011200f290000370300200620062900b8043703f001200641c8046a41bba8c700410d10c50120032012290000370300200820062900c804370300200642002002420020051b220220107d200d420020051b220d200754ad7d220e200d20077d2207200d56200e200256200e2002511b22031b3703880620064200200720031b37038006200641f0016a412020064180066a411010a7020c030b20064180066a10cd02200641f0016a10cd02200641f0016a427f20022002200e542201200720107c2001ad7c220d200754200d2007511b22011b2202427f200d20011b220710d006200641a8026a2007370300200641a0026a2002370300200641f0016a41086a41043a000020064181026a20064180066a41086a29030037000020064189026a20064180066a41106a29030037000020064191026a20064198066a29030037000020062006290380063700f901200641023602f001200641f0016a10c8020b200041306a200641d8046a41286a290300370300200041286a200641d8046a41206a290300370300200041206a200641d8046a41186a290300370300200041186a200641d8046a41106a290300370300200041106a200641d8046a41086a290300370300200041086a20062903d804370300200041003a000020064180076a24000f0b20064188026a22014200370300200641f0016a41106a22034200370300200641f0016a41086a22084200370300200642003703f001200641b8046a41d4dcc700410810c5012008200641b8046a41086a2205290000370300200620062900b8043703f001200641c8046a41bba8c700410d10c5012001200641c8046a41086a220f290000370300200320062900c8043703002006200641f0016a412010d301200641106a290300210d2006290308210e20062802002111200142003703002003420037030020084200370300200642003703f001200641b8046a41d4dcc700410810c50120082005290000370300200620062900b8043703f001200641c8046a41bba8c700410d10c5012001200f290000370300200320062900c8043703002006427f200d420020111b220d20077c200e420020111b220720027c220e2007542201ad7c220220012002200d542002200d511b22011b370388062006427f200e20011b37038006200641f0016a412020064180066a411010a70241800221010b200020013b0001200041013a0000200041036a41003a00000b20064180076a24000b8b0101017f41f8b8c800ad4280808080d001841000024002400240024020002d00000e0400010203000b200041046a29020010000f0b41eab8c800ad4280808080e0018410000f0b41e0b8c800ad4280808080a0018410000f0b20003100011001200041026a31000010010240200041046a2802002201450d00200041086a3502004220862001ad8410000b0bb50601037f20002d000021022001200141086a22032802004101102f200128020020032802006a21040240024020024101460d00200441003a00002003200328020041016a2202360200024002400240024002400240024002400240024020002d00010e0a000102030405060708090b0b200120024101102f2001280200200141086a22012802006a41003a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41013a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41023a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41033a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41043a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41053a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41063a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22032802006a41073a00002003200328020041016a2202360200200041026a2d00002100200120024101102f200128020020032802006a20003a00002003200328020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41083a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41093a00002001200128020041016a3602000f0b200441013a00002003200328020041016a220236020002400240024020002d00010e03000102030b200120024101102f2001280200200141086a22012802006a41003a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22012802006a41013a00002001200128020041016a3602000f0b200120024101102f2001280200200141086a22032802006a41023a00002003200328020041016a2202360200200041026a2d00002100200120024101102f200128020020032802006a20003a00002003200328020041016a3602000b0b8f0201027f20014180feff07714108762102024002402001410171450d00411f210341b9bdc800210102400240200241ff01710e03000103000b41c100210341f8bcc80021010c020b41c100210341b7bcc80021010c010b411f21034198bcc8002101024002400240024002400240024002400240200241ff01710e0a00060102030405090708000b4120210341f8bbc80021010c080b412721034198bbc80021010c070b411721034181bbc80021010c060b41e2bac80021010c050b4126210341bcbac80021010c040b412a21034192bac80021010c030b4139210341bfbbc80021010c020b413b210341d7b9c80021010c010b41d20021034185b9c80021010b20002003360204200020013602000bc22205067f027e017f057e0c7f230022042105200441e0036b416071220424002004200336021420042001360210024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00004101460d00200241046a28020021020240200141386a220628020022032003417f6a2207200141306a220828020022032001412c6a22092802006b716b4101470d0020091090032006280200417f6a2107200828020021030b20082007200341016a71360200200141346a28020020034102746a2002360200200141286a280200220320024d0d02200441d8006a2001280220200241fc006c6a2201290240220a370300200441386a22032001290220370300200441186a41d8006a2207200141d8006a290200370300200441186a41d0006a2208200141d0006a290200370300200441186a41c8006a2206200141c8006a290200370300200441186a41386a200141386a290200220b370300200441186a41306a2209200141306a290200370300200441186a41286a200141286a290200370300200441186a41186a220c200141186a22022902003703002001290210210d200120042903f0013702102001290208210e200120042903e801370208200220042903f801370200200441003a00e001200441003602e4012001290200210f200120042903e0013702002004200d3703282004200e3703202004200f37031820012902602110200141f8006a2802002102200141f0006a2902002111200441186a41e8006a200141e8006a290200370300200441186a41f0006a2011370300200441186a41f8006a2002360200200441f8006a2010370300200fa741ff01714101460d01200ea72102200e422088a72101200a422088a72112200ba72113200441c0016a41086a22142003290300370300200441c0016a41106a2203200441186a41286a290300370300200441c0016a41186a2009290300370300200441a8016a41086a2008290300370300200441a8016a41106a20072802003602002004200c2903003703c001200420062903003703a801200441d4006a290200220aa7211502400240024002400240200f422088a70e050102030400010b200441e0016a41086a200d370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a2003290300370300200441e0016a41286a200441c0016a41186a290300370300200420023602e001200420013602e40102400240200141244b0d00200441e9016a21060c010b200d422088a7210620042802f00121010b200241017621080240024020024101710d0020012008490d0941012109410021030c010b200120084d0d09200620086a2d0000410f71210341002109200841016a21080b200141017420026b220241ffff03200241ffff03491b220241017641036a220c10322214450d09200120086b2107200620086a2108200441003602a0012004200c36029c01200420143602980102402015410020151b22060d00200420023602e402200441013b01e002200441e0026a20044198016a109103410021022009450d0d410021010c100b200420023602e40220044181023b01e002200441e0026a20044198016a109103410021022009450d0d410021010c0e0b410110322201450d082004420137029c01200420013602980120044198016a4100410110c80120042802980120042802a0016a41003a0000200420042802a00141016a3602a0010c100b200441e0016a41086a200d370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a2003290300370300200441e0016a41286a200441c0016a41186a290300370300200420023602e001200420013602e40102400240200141244b0d00200441e9016a21070c010b200d422088a7210720042802f00121010b200241017621030240024020024101710d0020012003490d0a200441e8026a200120036b360200200441003b01e0022004200720036a3602e4020c010b200120034d0d0a200441013a00e002200441e8026a2001200341016a22026b3602002004200720026a3602e4022004200720036a2d0000410f713a00e1020b20044198016a200441e0026a2013200a422088a710920302402013410020151b2201450d002015450d002001102c0b20042802e40141244d0d0f200441ec016a280200102c0c0f0b200441e0016a41086a200d370300200441e0016a41106a20042903c001370300200441e0016a41186a201429030037030020044180026a2003290300370300200441e0016a41286a200441c0016a41186a290300370300200420023602e001200420013602e40102400240200141244b0d00200441e9016a21000c010b200d422088a7210020042802f00121010b200420023602c802200420013602c402200420003602c002200441a0036a200441c0026a1093032004280214200441c0026a41002004109403210120042802102102200441a4026a201236020020044198026a41106a20042903a801370300200441b0026a200441b0016a290300370300200441b8026a200441a8016a41106a2802003602002004200a37029c022004201336029802200441e0026a200220044198026a20042802142204108f0320042001109503109603000b109703000b200041003a000020002002290001370001200041196a200241196a290000370000200041116a200241116a290000370000200041096a200241096a2900003700000c140b20002004290019370001200041003a0000200041196a200441186a41196a290000370000200041116a200441186a41116a290000370000200041096a200441186a41096a2900003700000c120b2002200341b4f3c000103f000b2008200141f0c2c8001058000b200820014180c3c800103f000b1039000b2003200141f0c2c8001058000b200320014180c3c800103f000b410121010c020b410121010b03400240024020010e020001010b200220074f0d03200820026a2d00002103200241016a2102410121010c010b024020042802a0012201200428029c01470d0020044198016a2001410110c8010b20042802980120016a20033a00002004200141016a3602a001410021010c000b0b03400240024020010e020001010b200220074f0d02200820026a2d00002103200241016a2102410121010c010b024020042802a0012201200428029c01470d0020044198016a2001410110c8010b20042802980120016a20033a00002004200141016a3602a001410021010c000b0b20042802a0012216210102402016200428029c01470d0020044198016a2016410110c80120042802a00121010b20042802980120016a41003a0000200420042802a00141016a22013602a00102402001200428029c01470d0020044198016a2001410110c80120042802a00121010b201341c0046a211720042802980120016a41003a0000200420042802a00141016a3602a00102402006450d002006201220044198016a10bb010b024002400240024020172013470d004100210c410021010c010b200441e0026a4101722103200441e9016a2118200441a0036a410172210241002109201321014100210c41012106024002400340200441023a00e0022001290200210f20042903f802210e20042903f002210d20042903e8022110200120042903e0023702002001290208211120012010370208200129021021102001200d370210200141186a2207290200210d2007200e3702002004200d3703b803200420103703b003200420113703a8032004200f3703a003200141206a2802002119200441e0026a41176a2214200241176a290000370000200441e0026a41106a2207200241106a290000370300200441e0026a41086a2208200241086a290000370300200420022900003703e0020240200fa7221a41ff017122124103470d00200c4180fe037141087621010c050b200441c0026a41176a221b2014290000370000200441c0026a41106a22142007290300370300200441c0026a41086a2008290300220f370300200420042903e002220e3703c002200441a0036a41176a221c201b290000370000200441a0036a41106a221b2014290300370300200441a0036a41086a2214200f3703002004200e3703a00302400240024020124102470d00200441023a0098020c010b0240024020042802e401221241244b0d002018211d0c010b20042802f001211220042802ec01211d0b200420042802e0013602d803200420123602d4032004201d3602d0032004280214200441d0036a4101200910940321122004280210211d200320042903a003370000200341086a2014290300370000200341106a201b290300370000200341176a201c2900003700002004201a3a00e002200420193602800320044198026a201d200441e0026a20042802142219108f032019201210950320042d0098024103460d010b200441e0026a41206a20044198026a41206a290300370300200441e0026a41186a20044198026a41186a290300370300200720044198026a41106a290300370300200820044198026a41086a2903003703002004200429039802220f3703e002410021070240024002400240200fa741ff0171417f6a0e020103000b2003412020044198016a10bb010c010b200441a0036a41186a200341186a290000370300201b200341106a2900003703002014200341086a290000370300200420032900003703a003200428028403220741214f0d04200441a0036a200720044198016a10bb010b200621070b200941016a2109200641017421062007200c72210c200141246a22012017460d030c010b0b200c4180fe037141087621010c040b2007412041bce7c300104f000b200c4180fe037141087621010b200441033a00a003200441f7026a20042900b803370000200441f0026a20042900b103370300200441e8026a20042900a903370300200420042900a1033703e0020b200441033a0098020b201641026a21022016417d4b0d0120042802a00122032002490d0220042802980120166a2001410874200c41ff0171723b000002402015450d00200a428080808010200a428080808010561ba72201450d00200a428080808010540d002001102c0b2013102c20042802e40141244d0d00200441ec016a280200102c0b024020042802a0012201411f4b0d00200441f8016a22024200370300200441f0016a22034200370300200441e8016a22074200370300200442003703e001200441e0016a200428029801200110c9081a200041246a2001360200200041013a0000200041196a2002290300370000200041116a2003290300370000200041096a2007290300370000200020042903e0013700010c060b2004280210220241c0006a2802002108200228023c21062004280214220728022c2209410176210220072802002103024002402009410171450d000240024020034125490d002007410c6a220928020022032002490d06200741086a220c280200210720092802002103200c28020021090c010b20032002490d05200741056a220721090b200320024d0d05200441e9026a200920026a2d000041f001713a0000200420073602e002410121030c010b02400240200341244b0d00200741056a21070c010b2007410c6a2802002103200741086a28020021070b20032002490d05200420073602e002410021030b200420033a00e802200420023602e402200441e0016a2006200441e0026a20042802980120012008280214110400200020042903e001370001200041096a200441e8016a290300370000200041116a200441f0016a290300370000200041196a200441f8016a290300370000200041003a000020042802102201200128026c41016a36026c0c050b2016200241cce7c3001059000b2002200341cce7c300104f000b2002200341f0c1c800104f000b200220034180c2c800103f000b200220034190c2c800104f000b02402004280298014100200428029c0122011b2202450d002001450d002002102c0b20042d0018450d010b2004413c6a109803200524000f0b200524000bda0201057f02402000410c6a28020022012001417f6a200041046a28020020002802006b716b4101470d002001210202402001450d0002400240200120016a22022001490d00200241ffffffff037122032002470d00200241027422044100480d002003200246410274210302400240200141027422020d0002402004450d002004103222020d040c020b200321020c030b200028020820022004103522020d020b2003450d001039000b103b000b200020023602082000410c6a200441027622023602000b0240024020022001410174470d0020002802002204200041046a28020022034d0d022003200120046b2205490d0120002802082201200220056b22024102746a200120044102746a200541027410c9081a200020023602000f0b41f8a0c700412b41a4a1c700103c000b2000280208220220014102746a2002200341027410c9081a200041046a2200200028020020016a3602000b0bab0501047f024002400240024020002d00000e03010200010b200041046a280200220241ffff03200241ffff03491b220041c0006a41ff0020002002413e2000413e491b2203461b2102200020036b2103200141086a2100410121040340024002400240200441ff01714102470d00200221050c010b410021052004410171450d00410021040c010b2003450d0402402003418002490d00200341817e6a210341ff012102410221040c010b2003417f6a210241022104410021030b200120002802004101102f200128020020002802006a20023a00002000200028020041016a360200200521020c000b0b2001200141086a22002802004101102f200128020020002802006a41003a00002000200028020041016a3602000c010b200041046a2802002202413e200241ffff03200241ffff03491b2203413e491b2104024020002d0001450d00200341406a417f20032004461b2102200320046b2103200141086a2100410121040340024002400240200441ff01714102470d00200221050c010b410021052004410171450d00410021040c010b2003450d0302402003418002490d00200341817e6a210341ff012102410221040c010b2003417f6a210241022104410021030b200120002802004101102f200128020020002802006a20023a00002000200028020041016a360200200521020c000b0b200341807f7341bf7f20032004461b2102200320046b2103200141086a2100410121040340024002400240200441ff01714102470d00200221050c010b410021052004410171450d00410021040c010b2003450d0202402003418002490d00200341817e6a210341ff012102410221040c010b2003417f6a210241022104410021030b200120002802004101102f200128020020002802006a20023a00002000200028020041016a360200200521020c000b0b0b9b0201067f02400240200141086a280200220441036a2205417f4c0d0020012d000021062001280204210720012d000121084101210102402005450d00200510322201450d020b20002001360200200041086a22014100360200200041046a22092005360200200441017420066a220541ffff03200541ffff03491b41c000200010af060240024020060d00200128020021050c010b2008410f7121060240200128020022012009280200470d00200020014101102f200041086a28020021010b200041086a200141016a2205360200200028020020016a20063a00000b200020052004102f2000280200200041086a220128020022056a2007200410c9081a2001200520046a36020020022003200010bb010f0b103b000b1039000bb70101057f20012802082202410176210320012802042104024002400240024020024101710d0020042003490d02200128020020036a210141002102410021050c010b200420034d0d024101210520012802002202200341016a22066a2101200220036a2d0000410f712102200621030b200020053a000c20002001360204200041003602002000410d6a20023a0000200041086a200420036b3602000f0b2003200441f0c2c8001058000b200320044180c3c800103f000b8d0a01127f230041106b2204240002400240024002400240024020010d00410021010c010b200141086a28020022054101762106200141046a2802002107024002400240024020054101710d00200720064f0d012006200741f0c2c8001058000b200720064b0d01200620074180c3c800103f000b200720066b2108200128020020066a21090c010b20002001280200220120066a2d0000410f7110b7082007200641016a22066b2108200120066a21090b0240024002400240024002400240024002400240200028020022014125490d002000412c6a210a2000410c6a2206280200410174200028022c460d0120080d03410021080c090b2000412c6a210a2001410174200028022c460d0120080d03410021080c080b200628020021010b20042000200810a008024020042802004101470d00200441086a2802000d0941e8c4c800411141fcc4c800103c000b02400240024002400240200028020022064125490d002000410c6a28020022062001490d02200041086a280200210b0c010b20062001490d01200041056a210b0b200b20016a220b20086a200b200620016b10ca081a200b2009200810c9081a200028020041244b0d01200021010c020b4194c6c800411e41b4c6c800103c000b2000410c6a21010b2001200620086a3602000c060b2000410c6a280200220b2006280200417f6a22064b0d01200b21010c0a0b20012001417f6a22064d0d09200041056a20066a2d0000417071210b0c010b200041086a28020020066a2d0000417071210b200141244b0d010b200041056a210c0c010b2000410c6a2802002101200041086a280200210c0b200120064d0d03200c20066a200b3a000020092d0000210b024002402000280200220141244b0d00200041056a210c0c010b2000410c6a2802002101200041086a280200210c0b200120064d0d04200c20066a220120012d0000200b410476723a0000024002402008417f6a220d0d004100210d0c010b2008417f6a210e20084101200841014b1b417f6a210f410021012000410c6a2110200041086a2111200041056a21120340024002400240024020082001460d00200f2001460d01200920016a22062d00002113200641016a2d00002114024002402000280200220b41244b0d004124210b200021062012210c0c010b2011280200210c201021060b20062802002215200b470d0320042000410110a00820042802004101470d02200441086a2802000d0841e8c4c800411141fcc4c800103c000b2008200841d0c2c800103f000b200141016a200841e0c2c800103f000b2000410c6a220628020021152011280200210c0b200c20156a201441f001714104762013410474723a00002006200628020041016a360200200e200141016a2201470d000b0b2009200d6a2d0000211541242106024002402000280200220c41244b0d00200041056a210b200021010c010b2000410c6a2101200041086a280200210b200c21060b02402001280200220c2006470d0020042000410110a008024020042802004101470d00200441086a2802000d0441e8c4c800411141fcc4c800103c000b2000410c6a2201280200210c200041086a280200210b0b200b200c6a20154104743a00002001200128020041016a3602000b200a200a28020020084101746a360200200741017420056b21010b02402002450d002000200310b708200141016a21010b200441106a240020010f0b1039000b2006200141b0c2c800103f000b2006200141c0c2c800103f000b2006200141a0c2c800103f000b900301057f02402001450d0002400240200028022c220220014d0d00200220016b2203410176200341017122046a21052000280200220221010240200241244d0d002000410c6a28020021010b200520014f0d012000410c6a2106200520016b41016a2101034002400240200241244b0d00200021020c010b200621020b024020022802002205450d0020022005417f6a3602000b2001450d02200141016a2101200028020021020c000b0b024002402000280200220141244b0d00200021020c010b2000410c6a220228020021010b02402001450d00200241003602000b2000410036022c0c010b2000200336022c2004450d000240024002400240200028020022014125490d002000410c6a220528020022012001417f6a22024d0d02200041086a220628020020026a2d0000417071210020052802002101200628020021050c010b2001417f6a220220014f0d01200041056a220520026a2d000041707121000b200120024d0d01200520026a20003a00000f0b2002200141d0c1c800103f000b2002200141e0c1c800103f000b0b110041d5a1c800412841ace7c300103c000b110041d5a1c8004128419ce7c300103c000bdb0101017f0240024002400240024020002802000e0404000102030b0240200041086a28020041244d0d00200041106a280200102c0b200041386a2802002201450d03200041346a2802002200450d032001450d032000102c0f0b200041086a28020041244d0d02200041106a280200102c0f0b2000280204102c200041086a2802002201450d012000410c6a280200450d012001102c0c010b0240200041086a28020041244d0d00200041106a280200102c0b200041346a280200102c200041386a2802002201450d002000413c6a280200450d002001102c0f0b0bd90303047f017e017f23004180016b220224000240024002400240024002400240200028020c2203200041106a280200470d002002200141fc0010c908210120002802082203200041046a280200470d03200341016a22042003490d06200341017422052004200520044b1b22044104200441044b1bad42fc007e2206422088a722050d062006a722044100480d0620054541027421070240024002402000280200410020031b22050d002004450d010c040b200341fc006c22030d0120040d030b200721030c030b200520032004103522030d020c040b2000410c6a200041186a280200417f6a200341016a71360200200041146a28020020034102746a28020021032002200141fc0010c908210102402000280208220420034d0d000240024020002802002200200341fc006c6a22042d00000d002000200341fc006c6a41046a1098030c010b2000200341fc006c6a41246a1098030b2004200141fc0010c9081a0c050b2003200441a4f4c000103f000b200410322203450d020b20002003360200200041046a200441fc006e360200200028020821030b2000280200200341fc006c6a200141fc0010c9081a20002000280208220341016a3602080c010b2007450d011039000b20024180016a240020030f0b103b000bbc0401037f23004190016b2206240041002107200641003602080240024020012d00484101460d00200141cc006a28020021080c010b200641366a200141cb006a2d00003a0000200641206a200141d8006a290000370300200641286a200141e0006a290000370300200641306a200141e8006a2d00003a00002006200141c9006a2f00003b01342006200141d0006a290000370318200141cc006a2800002108410121070b200641c8006a41086a2006290318370300200641c8006a41106a200641186a41086a290300370300200641c8006a41186a200641186a41106a290300370300200641e8006a200641186a41186a280200360200200620073a0048200620062f01343b00492006200836024c2006200641366a2d00003a004b2006410036027820062003360274200620023602700240024002402005417f4c0d004101210702402005450d00200510322207450d020b20064100360288012006200536028401200620073602800120064180016a4100200510c80120062802800120062802880122076a2004200510c9081a2006200720056a36028801200641386a2001200641c8006a200641f0006a20064180016a200641086a109b03200628023c2105024020062802384101460d00200141003a00482000200629030837020420004100360200200141cc006a20053602002000410c6a200641106a2802003602000c030b200041013602002000200536020420062802082201450d02200628020c450d022001102c0c020b103b000b1039000b20064190016a24000bcd3205077f017e017f0b7e0b7f230022062107200641e0086b4160712206240002400240024002400240024020022d00004101470d00200641b8036a200241196a290000370300200641b0036a200241116a290000370300200641a8036a200241096a290000370300200620022900013703a003200328020822084101762102200328020421092003280200210a024002402008410171450d0020092002490d03200220094f0d01200a20026a2d00004170712109410121080c040b024020092002490d00410021080c040b2002200941c8c4c800104f000b2002200941d8c4c800103f000b200241046a28020021020c020b2002200941b8c4c800104f000b200141c0006a280200210b200128023c210c200641e9046a20093a0000200620083a00e804200620023602e4042006200a3602e004200620062f01c8073b01ea0420064188086a200c200641a0036a200641e0046a200b28020c1106000240024020062802880822090d00200641f0056a2201200641ab036a290000370300200641e8056a41106a2203200641b3036a290000370300200641fd056a2209200641b8036a290000370000200620062900a3033703e80520062d00a203210520062f01a003210a4130103222020d011039000b200629028c08210d200641c0046a41186a200641a0036a41186a2208290300370300200641c0046a41106a200641a0036a41106a220b290300370300200641c0046a41086a200641a0036a41086a220c290300370300200620062903a0033703c004200641e0046a200641c0046a2009200d422088a7200141206a220e109c0320062802e404210220062802e004210a20064188086a200641e0046a41086a41d40010c9081a200a4101460d02200641e0036a20064188086a41d40010c9081a200620023602840520064188056a200641e0036a41d40010c9081a200641f9046a2008290300370000200641f1046a200b290300370000200641e9046a200c290300370000200641013a00e004200620062903a0033700e104200e200641e0046a1099032102200da7450d012009102c0c010b2002200a20054110747222053b0001200241013a0000200220062903e805370004200220062900e004370021200241036a20054110763a00002002410c6a2001290300370000200241146a2003290300370000200241196a2009290000370000200241286a200641e7046a2900003700000c020b0240200141386a220b28020022092009417f6a2208200141306a220a28020022092001412c6a220c2802006b716b4101470d00200c109003200b280200417f6a2108200a28020021090b200a2008200941016a71360200200141346a28020020094102746a200236020002400240024002400240024002400240200141286a280200220920024d0d00200141206a220a280200200241fc006c6a2202290210210f200220062903f00437021020022902082110200220062903e804370208200241186a22092902002111200920062903f804370200200641003a00e004200641003602e4042002290200210d200220062903e00437020020022902402112200241c8006a2902002113200241d0006a2902002114200241d8006a290200211520022902202116200241286a2902002117200241306a2902002118200241386a290200211920064180036a41086a2209200241e8006a29020037030020064180036a41106a2208200241f0006a29020037030020064180036a41186a220b200241f8006a280200360200200620113703f8032006200f3703f003200620103703e8032006200d3703e003200620193703d804200620183703d004200620173703c804200620163703c004200620153703b803200620143703b003200620133703a803200620123703a0032006200229026037038003200641d0036a41086a2202200441086a280200360200200620042902003703d0030240024002400240024002400240200da7220c41ff01714101470d002003280200210e2003280204211a2003280208210420064188076a41186a20062802fc0336020020064188076a41106a20062902f40337030020064188076a41086a20062902ec03370300200620062902e40337038807200641bc086a2015370200200641b4086a201437020020064188086a41246a2013370200200641a4086a201237020020064188086a41186a20062802dc0436020020064188086a41106a20062902d40437030020064188086a41086a20062902cc04370300200620062902c4043703880820064188086a413c6a20062903800337020020064188086a41c4006a2009290300370200200641d4086a2008290300370200200641dc086a200b280200360200200641e8056a41086a2002280200360200200620062903d0033703e805200641e0046a200120064188086a2003200641e8056a2005109d0320062802e404210220062802e0044101460d06200d420888a721052016a72108200641e8076a41186a220b20064180056a280200360200200641e8076a41106a221b200641e0046a41186a290300370300200641e8076a41086a221c200641e0046a41106a221d290300370300200641c8076a41086a221e2006418d056a290000370300200641c8076a41106a221f20064195056a290000370300200641c8076a41176a2220200641e0046a413c6a29000037000020062006290085053703c8072006200641e0046a41086a22212903003703e807200641e0046a41246a2d00002103200641a8076a41086a2222200641ad056a290000370300200641a8076a41106a2223200641b5056a290000370300200641a8076a41176a2224200641bc056a280000360000200620062900a5053703a807200641e0046a41c4006a2d0000210920020e03020501020b200641bc086a2019370200200641b4086a201837020020064188086a41246a2017370200200641a4086a201637020020064188086a41186a20062802fc0336020020064188086a41106a20062902f40337030020064188086a41086a20062902ec0337030020064188086a413c6a20062903a00337020020064188086a41c4006a20062903a803370200200641d4086a20062903b003370200200641dc086a20062802b803360200200620062902e4033703880820064188076a41086a2002280200360200200620062903d00337038807200641e0046a200120064188086a200320064188076a2005109d0320062802e404210220062802e0044101460d05200641e8056a41186a220920064180056a280200360200200641e8056a41106a2208200641e0046a41186a290300370300200641e8056a41086a220b200641e0046a41106a290300370300200641c8076a41086a220c2006418d056a290000370300200641c8076a41106a220e20064195056a290000370300200641c8076a41176a221a200641e0046a413c6a29000037000020062006290085053703c8072006200641e0046a41086a2903003703e805200641e0046a41246a2d00002103200641e8076a41086a221b200641ad056a290000370300200641e8076a41106a221c200641b5056a290000370300200641e8076a41176a221d200641bc056a280000360000200620062900a5053703e807200641e0046a41c4006a2d0000210541022101024020020e03000304000b200641e8066a41186a2009280200360200200641e8066a41106a2008290300370300200641e8066a41086a200b290300370300200641c8066a41086a200c290300370300200641c8066a41106a200e290300370300200641c8066a41176a201a290000370000200641a8066a41086a201b290300370300200641a8066a41106a201c290300370300200641a8066a41176a201d280000360000200620062903e8053703e806200620062903c8073703c806200620062903e8073703a80641002101410121040c030b20044101762102024002402004410171450d00201a2002490d082002201a4f0d01200e20026a2d00004170712103410121040c0b0b0240201a2002490d00410021040c0b0b2002201a41c8c4c800104f000b2002201a41d8c4c800103f000b20044101762102024002402004410171450d00201a2002490d082002201a4f0d01200e20026a2d000041707121044101210b0c090b0240201a2002490d004100210b0c090b2002201a41c8c4c800104f000b2002201a41d8c4c800103f000b200641e8066a41186a2009280200360200200641e8066a41106a2008290300370300200641e8066a41086a200b290300370300200641c8066a41086a200c290300370300200641c8066a41106a200e290300370300200641c8066a41176a201a290000370000200641a8066a41086a201b290300370300200641a8066a41106a201c290300370300200641a8066a41176a201d280000360000200620062903e8053703e806200620062903c8073703c806200620062903e8073703a80641002104410021010b410021020c080b200641e8066a41086a20064188076a41086a290300370300200641e8066a41106a20064188076a41106a290300370300200641e8066a41186a20064188076a41186a280200360200200641eb046a201c290300370000200641f3046a201b290300370000200641fb046a200b280200360000200641a8066a41176a2020290000370000200641a8066a41106a201f290300370300200641a8066a41086a201e29030037030020062006290388073703e806200620062903e8073700e304200620062903c8073703a80620064188066a41176a202428000036000020064188066a41106a202329030037030020064188066a41086a2022290300370300200641c8066a41176a200641e0046a41176a290000370000200641c8066a41106a201d290000370300200641c8066a41086a2021290000370300200620062903a80737038806200620062900e0043703c806410121014100210420032105200821030c060b410121010c070b2002200941b4f3c000103f000b2002201a41b8c4c800104f000b2002201a41b8c4c800104f000b20064188086a200e2002109e03200641b5086a20043a0000200641eb046a20064188076a41086a290300370000200641f3046a20064188076a41106a290300370000200641fb046a20064188076a41186a280200360000200641e0046a41286a20064188086a41086a29030037030020064190056a20064188086a41106a29030037030020064198056a20064188086a41186a290300370300200641a0056a200641a8086a2903003703002006200b3a00b408200641a8056a20064188086a41286a290300370300200620083a00ff0420062006290388073700e304200620062903880837038005200620053b01e004200620054110763a00e2042001200641e0046a109f03200641e8066a41086a200641e8076a41086a290300370300200641e8066a41106a200641e8076a41106a290300370300200641e8066a41186a200641e8076a41186a280200360200200641c8066a41086a200641c8076a41086a290300370300200641c8066a41106a200641c8076a41106a290300370300200641c8066a41176a200641c8076a41176a290000370000200641a8066a41086a200641a8076a41086a290300370300200641a8066a41106a200641a8076a41106a290300370300200641a8066a41176a200641a8076a41176a280000360000200620062903e8073703e806200620062903c8073703c806200620062903a8073703a8064100210141012104200921050c010b20064188086a200e2002109e03200641b5086a20033a0000200641eb046a20064188076a41086a290300370000200641f3046a20064188076a41106a290300370000200641fb046a20064188076a41186a280200360000200641e0046a41286a20064188086a41086a29030037030020064190056a20064188086a41106a29030037030020064198056a20064188086a41186a290300370300200641a0056a200641a8086a290300370300200620043a00b408200641a8056a20064188086a41286a290300370300200620083a00ff0420062006290388073700e304200620062903880837038005200620053b01e004200620054110763a00e2042001200641e0046a109f03410221010b200c41807e7121020b200641c8076a41186a200641e8066a41186a280200360200200641c8076a41106a200641e8066a41106a290300370300200641c8076a41086a200641e8066a41086a290300370300200641e0046a41086a200641c8066a41086a290300370300200641e0046a41106a200641c8066a41106a290300370300200641e0046a41176a200641c8066a41176a29000037000020064188086a41086a200641a8066a41086a29030037030020064188086a41106a200641a8066a41106a29030037030020064188086a41176a200641a8066a41176a290000370000200620062903e8063703c807200620062903c8063703e004200620062903a80637038808200641e8056a41176a20064188066a41176a280000360000200641e8056a41106a20064188066a41106a290300370300200641e8056a41086a20064188066a41086a29030037030020062006290388063703e80520012002722102410021010b200641e0026a41086a2208200641c8076a41086a290300370300200641e0026a41106a220b200641c8076a41106a290300370300200641e0026a41186a220c200641c8076a41186a280200360200200641c0026a41086a220e200641e0046a41086a290300370300200641c0026a41106a221a200641e0046a41106a290300370300200641c0026a41176a221b200641e0046a41176a290000370000200620062903c8073703e002200620062903e0043703c002200641a0026a41176a221c20064188086a41176a290000370000200641a0026a41106a221d20064188086a41106a290300370300200641a0026a41086a221e20064188086a41086a29030037030020064180026a41086a221f200641e8056a41086a29030037030020064180026a41106a2220200641e8056a41106a29030037030020064180026a41176a2221200641e8056a41176a28000036000020062006290388083703a002200620062903e805370380020240024020010d00200641e0016a41186a200c280200360200200641e0016a41106a200b290300370300200641e0016a41086a2008290300370300200641c0016a41086a200e290300370300200641c0016a41106a201a290300370300200641c0016a41176a201b290000370000200641a0016a41086a201e290300370300200641a0016a41106a201d290300370300200641a0016a41176a201c290000370000200620062903e0023703e001200620062903c0023703c001200620062903a0023703a00120064180016a41176a202128000036000020064180016a41106a202029030037030020064180016a41086a201f290300370300200620062903800237038001200241ff01714102460d01200641e0006a41186a2201200641e0016a41186a280200360200200641e0006a41106a2208200641e0016a41106a290300370300200641e0006a41086a220b200641e0016a41086a290300370300200641c0006a41086a220c200641c0016a41086a290300370300200641c0006a41106a220e200641c0016a41106a290300370300200641c0006a41176a221a200641c0016a41176a290000370000200641206a41086a221b200641a0016a41086a290300370300200641206a41106a221c200641a0016a41106a290300370300200641206a41176a221d200641a0016a41176a290000370000200620062903e001370360200620062903c001370340200620062903a001370320200641176a221e20064180016a41176a280000360000200641106a221f20064180016a41106a290300370300200641086a222020064180016a41086a2903003703002006200629038001370300200641c0046a41086a2221200b290300370300200641c0046a41106a220b2008290300370300200641c0046a41186a22082001280200360200200620062903603703c00420064188086a41086a2201200c29030037030020064188086a41106a220c200e29030037030020064188086a41176a220e201a2900003700002006200629034037038808200641e0036a41086a221a201b290300370300200641e0036a41106a221b201c290300370300200641e0036a41176a221c201d290000370000200620062903203703e003200641a0036a41176a221d201e280000360000200641a0036a41106a221e201f290300370300200641a0036a41086a221f2020290300370300200620062903003703a00320064180056a20033a0000200620023a00e004200620024118763a00e304200620024108763b00e104200641ec046a2021290300370200200641f4046a200b290300370200200641fc046a2008280200360200200620062903c0043702e40420064181056a20062903880837000020064189056a200129030037000020064191056a200c29030037000020064198056a200e290000370000200641a0056a20053a0000200641b8056a201c290000370000200641b1056a201b290300370000200641a9056a201a290300370000200641a1056a20062903e003370000200641c0056a20093a0000200641d8056a201d280000360000200641d1056a201e290300370000200641c9056a201f290300370000200641c1056a20062903a003370000200a200641e0046a1099032106200041086a20043a00002000200636020420004100360200200724000f0b2000410136020020002002360204200724000f0b41b4f4c000411841ccf4c000105c000b200da7450d002009102c0b2000410136020020002002360204024020042802042206450d0020042802002202450d002006450d002002102c0b200724000bcda40120047f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e027f017e087f017e087f017e230041b00e6b22052400200541086a2002200310a003024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020052d00084101470d0020052d00092102200541900e6a41086a2203200141086a290000370300200541900e6a41106a2204200141106a290000370300200541900e6a41186a2206200141186a290000370300200520012900003703900e4130103222010d010c2a0b200541d4016a2802002107200541d0016a2802002108200541c8016a2903002109200541c4016a280200210a200541bc016a290200210b200541b8016a280200210c200541b0016a290300210d200541ac016a280200210e200541a4016a290200210f200541a0016a280200211020054198016a290300211120054194016a28020021122005418c016a290200211320054188016a280200211420054180016a2903002115200541fc006a2802002116200541f4006a2902002117200541f0006a2802002118200541e8006a2903002119200541e4006a280200211a200541dc006a290200211b200541086a41d0006a280200211c200541086a41c8006a290300211d200541086a41c4006a280200211e200541086a413c6a290200211f200541086a41386a2802002120200541386a2903002121200541086a412c6a2802002122200541086a41246a22232902002124200541286a22252802002126200541086a411c6a22272802002128200541086a41186a222928020021022005411c6a222a280200212b200541086a410c6a222c290200212d200541086a41086a222e280200212f41002130200528020c0e051502030401150b200141033a0000200120052903900e370001200120023a0021200120052901e00d370122200141096a2003290300370000200141116a2004290300370000200141196a2006290300370000200141286a200541e60d6a29010037010020004101360200200020013602040c270b200541e0016a2802002131200541dc016a2802002132200541d8016a28020021334102210302400240202b4102470d0041002102410021060c010b200541900e6a41186a2206200141186a290000370300200541900e6a41106a2234200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e200541e00d6a41086a2028360200200520023602e40d2005202b3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012102024020052802084101460d002006200541286a2903003703002034200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021020b200341807e7121060b200541c0066a41186a2234200541900e6a41186a290300370300200541c0066a41106a222b200541900e6a41106a290300370300200541c0066a41086a2235200541900e6a41086a290300370300200520052903900e3703c0062006200341ff017172210620020d03200541a0066a41186a2034290300370300200541a0066a41106a202b290300370300200541a0066a41086a2035290300370300200520052903c0063703a006410221024100210341002134024020264102460d00200541900e6a41186a2234200141186a290000370300200541900e6a41106a222b200141106a290000370300200541900e6a41086a2235200141086a290000370300200520012900003703900e200520243702e40d200520263602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210241012103024020052802084101460d002034200541286a290300370300202b200541086a41186a2903003703002035200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b200241807e7121340b20054180076a41186a222b200541900e6a41186a29030037030020054180076a41106a2235200541900e6a41106a29030037030020054180076a41086a2230200541900e6a41086a290300370300200520052903900e370380072034200241ff017172210220030d04200541e0066a41186a202b290300370300200541e0066a41106a2035290300370300200541e0066a41086a203029030037030020052005290380073703e00641022103410021344100212b024020224102460d00200541900e6a41186a222b200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a2230200141086a290000370300200520012900003703900e200520213702e40d200520223602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d00202b200541286a2903003703002035200541086a41186a2903003703002030200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212b0b200541c0076a41186a2235200541900e6a41186a290300370300200541c0076a41106a2230200541900e6a41106a290300370300200541c0076a41086a2225200541900e6a41086a290300370300200520052903900e3703c007202b200341ff017172212b20340d05200541a0076a41186a2035290300370300200541a0076a41106a2030290300370300200541a0076a41086a2025290300370300200520052903c0073703a007410221034100213441002135024020204102460d00200541900e6a41186a2235200141186a290000370300200541900e6a41106a2230200141106a290000370300200541900e6a41086a2225200141086a290000370300200520012900003703900e2005201f3702e40d200520203602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002035200541286a2903003703002030200541086a41186a2903003703002025200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121350b20054180086a41186a2230200541900e6a41186a29030037030020054180086a41106a2225200541900e6a41106a29030037030020054180086a41086a2229200541900e6a41086a290300370300200520052903900e370380082035200341ff017172213520340d06200541e0076a41186a2030290300370300200541e0076a41106a2025290300370300200541e0076a41086a202929030037030020052005290380083703e0074102210341002134410021300240201e4102460d00200541900e6a41186a2230200141186a290000370300200541900e6a41106a2225200141106a290000370300200541900e6a41086a2229200141086a290000370300200520012900003703900e2005201d3702e40d2005201e3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002030200541286a2903003703002025200541086a41186a2903003703002029200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121300b200541c0086a41186a2225200541900e6a41186a290300370300200541c0086a41106a2229200541900e6a41106a290300370300200541c0086a41086a222c200541900e6a41086a290300370300200520052903900e3703c0082030200341ff017172213020340d07200541a0086a41186a2025290300370300200541a0086a41106a2029290300370300200541a0086a41086a202c290300370300200520052903c0083703a0084102210341002134410021250240201c4102460d00200541900e6a41186a2225200141186a290000370300200541900e6a41106a2229200141106a290000370300200541900e6a41086a222c200141086a290000370300200520012900003703900e2005201b3702e40d2005201c3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002025200541286a2903003703002029200541086a41186a290300370300202c200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121250b20054180096a41186a2229200541900e6a41186a29030037030020054180096a41106a222c200541900e6a41106a29030037030020054180096a41086a2228200541900e6a41086a290300370300200520052903900e370380092025200341ff017172212520340d08200541e0086a41186a2029290300370300200541e0086a41106a202c290300370300200541e0086a41086a202829030037030020052005290380093703e0084102210341002134410021290240201a4102460d00200541900e6a41186a2229200141186a290000370300200541900e6a41106a222c200141106a290000370300200541900e6a41086a2228200141086a290000370300200520012900003703900e200520193702e40d2005201a3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002029200541286a290300370300202c200541086a41186a2903003703002028200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121290b200541c0096a41186a222c200541900e6a41186a290300370300200541c0096a41106a2228200541900e6a41106a290300370300200541c0096a41086a2226200541900e6a41086a290300370300200520052903900e3703c0092029200341ff017172212920340d09200541a0096a41186a202c290300370300200541a0096a41106a2028290300370300200541a0096a41086a2026290300370300200520052903c0093703a00941022103410021344100212c024020184102460d00200541900e6a41186a222c200141186a290000370300200541900e6a41106a2228200141106a290000370300200541900e6a41086a2226200141086a290000370300200520012900003703900e200520173702e40d200520183602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d00202c200541286a2903003703002028200541086a41186a2903003703002026200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e71212c0b200541800a6a41186a2228200541900e6a41186a290300370300200541800a6a41106a2226200541900e6a41106a290300370300200541800a6a41086a2223200541900e6a41086a290300370300200520052903900e3703800a202c200341ff017172212c20340d0a200541e0096a41186a2028290300370300200541e0096a41106a2026290300370300200541e0096a41086a2023290300370300200520052903800a3703e009410221034100213441002128024020164102460d00200541900e6a41186a2228200141186a290000370300200541900e6a41106a2226200141106a290000370300200541900e6a41086a2223200141086a290000370300200520012900003703900e200520153702e40d200520163602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002028200541286a2903003703002026200541086a41186a2903003703002023200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121280b200541c00a6a41186a2226200541900e6a41186a290300370300200541c00a6a41106a2223200541900e6a41106a290300370300200541c00a6a41086a2227200541900e6a41086a290300370300200520052903900e3703c00a2028200341ff017172212820340d0b200541a00a6a41186a2026290300370300200541a00a6a41106a2023290300370300200541a00a6a41086a2027290300370300200520052903c00a3703a00a410221034100213441002126024020144102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e200520133702e40d200520143602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121260b200541800b6a41186a2223200541900e6a41186a290300370300200541800b6a41106a2227200541900e6a41106a290300370300200541800b6a41086a222a200541900e6a41086a290300370300200520052903900e3703800b2026200341ff017172212620340d0c200541e00a6a41186a2023290300370300200541e00a6a41106a2027290300370300200541e00a6a41086a202a290300370300200520052903800b3703e00a410221034100213441002123024020124102460d00200541900e6a41186a2223200141186a290000370300200541900e6a41106a2227200141106a290000370300200541900e6a41086a222a200141086a290000370300200520012900003703900e200520113702e40d200520123602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002023200541286a2903003703002027200541086a41186a290300370300202a200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121230b200541c00b6a41186a2227200541900e6a41186a290300370300200541c00b6a41106a222a200541900e6a41106a290300370300200541c00b6a41086a2222200541900e6a41086a290300370300200520052903900e3703c00b2023200341ff017172212320340d0d200541a00b6a41186a2027290300370300200541a00b6a41106a202a290300370300200541a00b6a41086a2022290300370300200520052903c00b3703a00b410221034100213441002127024020104102460d00200541900e6a41186a2227200141186a290000370300200541900e6a41106a222a200141106a290000370300200541900e6a41086a2222200141086a290000370300200520012900003703900e2005200f3702e40d200520103602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012134024020052802084101460d002027200541286a290300370300202a200541086a41186a2903003703002022200541086a41106a2903003703002005200541086a41086a2903003703900e410021340b200341807e7121270b200541800c6a41186a222a200541900e6a41186a290300370300200541800c6a41106a2222200541900e6a41106a290300370300200541800c6a41086a222e200541900e6a41086a290300370300200520052903900e3703800c2027200341ff017172212720340d0e200541e00b6a41186a202a290300370300200541e00b6a41106a2022290300370300200541e00b6a41086a202e290300370300200520052903800c3703e00b41022134410021034100212a0240200e4102460d00200541900e6a41186a222a200141186a290000370300200541900e6a41106a2222200141106a290000370300200541900e6a41086a222e200141086a290000370300200520012900003703900e2005200d3702e40d2005200e3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213441012103024020052802084101460d00202a200541286a2903003703002022200541086a41186a290300370300202e200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b203441807e71212a203441ff017121340b200541c00c6a41186a2222200541900e6a41186a290300370300200541c00c6a41106a222e200541900e6a41106a290300370300200541c00c6a41086a2220200541900e6a41086a290300370300200520052903900e3703c00c202a203472213420030d0f200541a00c6a41186a2022290300370300200541a00c6a41106a202e290300370300200541a00c6a41086a2020290300370300200520052903c00c3703a00c4102212a41002103410021220240200c4102460d00200541900e6a41186a2222200141186a290000370300200541900e6a41106a222e200141106a290000370300200541900e6a41086a2220200141086a290000370300200520012900003703900e2005200b3702e40d2005200c3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c212a41012103024020052802084101460d002022200541286a290300370300202e200541086a41186a2903003703002020200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b202a41807e712122202a41ff0171212a0b200541800d6a41186a222e200541900e6a41186a290300370300200541800d6a41106a2220200541900e6a41106a290300370300200541800d6a41086a221e200541900e6a41086a290300370300200520052903900e3703800d2022202a72212a20030d10200541e00c6a41186a202e290300370300200541e00c6a41106a2020290300370300200541e00c6a41086a201e290300370300200520052903800d3703e00c41022122410021034100212e0240200a4102460d00200541900e6a41186a222e200141186a290000370300200541900e6a41106a2220200141106a290000370300200541900e6a41086a221e200141086a290000370300200520012900003703900e200520093702e40d2005200a3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c212241012103024020052802084101460d00202e200541286a2903003703002020200541086a41186a290300370300201e200541086a41106a2903003703002005200541086a41086a2903003703900e410021030b202241807e71212e202241ff017121220b200541c00d6a41186a2220200541900e6a41186a290300370300200541c00d6a41106a221e200541900e6a41106a290300370300200541c00d6a41086a221c200541900e6a41086a290300370300200520052903900e3703c00d202e202272212220030d24200541a00d6a41186a2020290300370300200541a00d6a41106a201e290300370300200541a00d6a41086a201c290300370300200520052903c00d3703a00d4102210320084102470d1141002101410021040c120b200541086a202f202da7109e03200541900e6a41086a2029290300370300200541900e6a41106a2025290300370300200541900e6a41186a200541306a2802003602002005200541086a41106a2903003703900e2002417f4c0d13202c2802002134200529020c213620052802082106410121304101210102402002450d00200210322201450d270b202d422088a72135200541003602102005200236020c20052001360208200541086a4100200210c80120052802082203200528021022016a202b200210c9081a20054180026a41086a200541900e6a41086a29030037030020054180026a41106a200541900e6a41106a29030037030020054180026a41186a200541900e6a41186a2802003602002005200120026a360210200520052903900e37038002200529020c222d422088a72132202da721330c120b200541086a202f202da7109e03200541e00d6a41086a2029290300370300200541e00d6a41106a22352025290300370300200541e00d6a41186a200541306a2802003602002005200541086a41106a22312903003703e00d202c280200213420052802082106200529020c2136200541900e6a41186a200141186a290000370300200541900e6a41106a200141106a290000370300200541900e6a41086a200141086a290000370300200520012900003703900e200541a00d6a41086a2028360200200520023602a40d2005202b3602a00d200541086a200541900e6a200541a00d6a200410a103200541c00d6a41086a2027290200370300200541c00d6a41106a220120232802003602002005202a2902003703c00d200528020c2103024020052802084101460d00202e290300212420312802002131200541e8016a41106a2001280200360200200541e8016a41086a200541c00d6a41086a29030037030020054180026a41086a200541e00d6a41086a29030037030020054180026a41106a203529030037030020054180026a41186a200541e00d6a41186a280200360200200520052903c00d3703e801200520052903e00d370380022024422088a72132202d422088a721352024a72133410221300c120b2000410136020020002003360204200641244d0d242036422088a72200450d242000102c0c240b4102210341002134410021060240202f4102460d00200541900e6a41186a2234200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a2231200141086a290000370300200520012900003703900e2005202d3702e40d2005202f3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012106024020052802084101460d002034200541286a2903003703002035200541086a41186a2903003703002031200541086a41106a2903003703002005200541086a41086a2903003703900e410021060b200341807e7121340b200541c0066a41186a2235200541900e6a41186a290300370300200541c0066a41106a2231200541900e6a41106a290300370300200541c0066a41086a2233200541900e6a41086a290300370300200520052903900e3703c006200341ff0171203472213420060d12200541a0066a41186a2035290300370300200541a0066a41106a2031290300370300200541a0066a41086a2033290300370300200520052903c0063703a0064102210302400240202b4102470d0041002106410021020c010b200541900e6a41186a2206200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a2231200141086a290000370300200520012900003703900e200541e00d6a41086a2028360200200520023602e40d2005202b3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210341012102024020052802084101460d002006200541286a2903003703002035200541086a41186a2903003703002031200541086a41106a2903003703002005200541086a41086a2903003703900e410021020b200341807e7121060b20054180076a41186a222b200541900e6a41186a29030037030020054180076a41106a2235200541900e6a41106a29030037030020054180076a41086a2231200541900e6a41086a290300370300200520052903900e37038007200341ff0171200672210320020d13200541e0066a41186a202b290300370300200541e0066a41106a2035290300370300200541e0066a41086a203129030037030020052005290380073703e006410221024100212b41002106024020264102460d00200541900e6a41186a222b200141186a290000370300200541900e6a41106a2235200141106a290000370300200541900e6a41086a2231200141086a290000370300200520012900003703900e200520243702e40d200520263602e00d200541086a200541900e6a200541e00d6a200410a103200528020c210241012106024020052802084101460d00202b200541286a2903003703002035200541086a41186a2903003703002031200541086a41106a2903003703002005200541086a41086a2903003703900e410021060b200241807e71212b0b200541c0076a41186a2235200541900e6a41186a290300370300200541c0076a41106a2231200541900e6a41106a290300370300200541c0076a41086a2233200541900e6a41086a290300370300200520052903900e3703c007200241ff0171202b72210220060d14200541a0076a41186a2035290300370300200541a0076a41106a2031290300370300200541a0076a41086a2033290300370300200520052903c0073703a00741022106410021354100212b024020224102460d00200541900e6a41186a2235200141186a290000370300200541900e6a41106a2231200141106a290000370300200541900e6a41086a2233200141086a290000370300200520012900003703900e200520213702e40d200520223602e00d200541086a200541900e6a200541e00d6a200410a103200528020c21064101212b024020052802084101460d002035200541286a2903003703002031200541086a41186a2903003703002033200541086a41106a2903003703002005200541086a41086a2903003703900e4100212b0b200641807e7121350b20054180086a41186a2231200541900e6a41186a29030037030020054180086a41106a2233200541900e6a41106a29030037030020054180086a41086a2232200541900e6a41086a290300370300200520052903900e37038008200641ff01712035722106202b0d15200541e0076a41186a2031290300370300200541e0076a41106a2033290300370300200541e0076a41086a203229030037030020052005290380083703e0074102212b4100213141002135024020204102460d00200541900e6a41186a2231200141186a290000370300200541900e6a41106a2233200141106a290000370300200541900e6a41086a2232200141086a290000370300200520012900003703900e2005201f3702e40d200520203602e00d200541086a200541900e6a200541e00d6a200410a103200528020c212b41012135024020052802084101460d002031200541286a2903003703002033200541086a41186a2903003703002032200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b202b41807e7121310b200541c0086a41186a2233200541900e6a41186a290300370300200541c0086a41106a2232200541900e6a41106a290300370300200541c0086a41086a2230200541900e6a41086a290300370300200520052903900e3703c008202b41ff0171203172212b20350d16200541a0086a41186a2033290300370300200541a0086a41106a2032290300370300200541a0086a41086a2030290300370300200520052903c0083703a0084102213541002133410021310240201e4102460d00200541900e6a41186a2233200141186a290000370300200541900e6a41106a2232200141106a290000370300200541900e6a41086a2230200141086a290000370300200520012900003703900e2005201d3702e40d2005201e3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d002033200541286a2903003703002032200541086a41186a2903003703002030200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e7121330b20054180096a41186a2232200541900e6a41186a29030037030020054180096a41106a2230200541900e6a41106a29030037030020054180096a41086a222f200541900e6a41086a290300370300200520052903900e37038009203541ff0171203372213320310d17200541e0086a41186a2032290300370300200541e0086a41106a2030290300370300200541e0086a41086a202f29030037030020052005290380093703e0084102213541002132410021310240201c4102460d00200541900e6a41186a2232200141186a290000370300200541900e6a41106a2230200141106a290000370300200541900e6a41086a222f200141086a290000370300200520012900003703900e2005201b3702e40d2005201c3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d002032200541286a2903003703002030200541086a41186a290300370300202f200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e7121320b200541c0096a41186a2230200541900e6a41186a290300370300200541c0096a41106a222f200541900e6a41106a290300370300200541c0096a41086a2225200541900e6a41086a290300370300200520052903900e3703c009203541ff0171203272213220310d18200541a0096a41186a2030290300370300200541a0096a41106a202f290300370300200541a0096a41086a2025290300370300200520052903c0093703a0094102213541002130410021310240201a4102460d00200541900e6a41186a2230200141186a290000370300200541900e6a41106a222f200141106a290000370300200541900e6a41086a2225200141086a290000370300200520012900003703900e200520193702e40d2005201a3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d002030200541286a290300370300202f200541086a41186a2903003703002025200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e7121300b200541800a6a41186a222f200541900e6a41186a290300370300200541800a6a41106a2225200541900e6a41106a290300370300200541800a6a41086a2229200541900e6a41086a290300370300200520052903900e3703800a203541ff0171203072213020310d19200541e0096a41186a202f290300370300200541e0096a41106a2025290300370300200541e0096a41086a2029290300370300200520052903800a3703e009410221354100212f41002131024020184102460d00200541900e6a41186a222f200141186a290000370300200541900e6a41106a2225200141106a290000370300200541900e6a41086a2229200141086a290000370300200520012900003703900e200520173702e40d200520183602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d00202f200541286a2903003703002025200541086a41186a2903003703002029200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e71212f0b200541c00a6a41186a2225200541900e6a41186a290300370300200541c00a6a41106a2229200541900e6a41106a290300370300200541c00a6a41086a222c200541900e6a41086a290300370300200520052903900e3703c00a203541ff0171202f72212f20310d1a200541a00a6a41186a2025290300370300200541a00a6a41106a2029290300370300200541a00a6a41086a202c290300370300200520052903c00a3703a00a410221354100212541002131024020164102460d00200541900e6a41186a2225200141186a290000370300200541900e6a41106a2229200141106a290000370300200541900e6a41086a222c200141086a290000370300200520012900003703900e200520153702e40d200520163602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d002025200541286a2903003703002029200541086a41186a290300370300202c200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e7121250b200541800b6a41186a2229200541900e6a41186a290300370300200541800b6a41106a222c200541900e6a41106a290300370300200541800b6a41086a2228200541900e6a41086a290300370300200520052903900e3703800b203541ff0171202572212520310d1b200541e00a6a41186a2029290300370300200541e00a6a41106a202c290300370300200541e00a6a41086a2028290300370300200520052903800b3703e00a410221354100213141002129024020144102460d00200541900e6a41186a2229200141186a290000370300200541900e6a41106a222c200141106a290000370300200541900e6a41086a2228200141086a290000370300200520012900003703900e200520133702e40d200520143602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d002029200541286a290300370300202c200541086a41186a2903003703002028200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e7121290b200541c00b6a41186a222c200541900e6a41186a290300370300200541c00b6a41106a2228200541900e6a41106a290300370300200541c00b6a41086a2226200541900e6a41086a290300370300200520052903900e3703c00b2029203541ff017172212920310d1c200541a00b6a41186a202c290300370300200541a00b6a41106a2028290300370300200541a00b6a41086a2026290300370300200520052903c00b3703a00b41022135410021314100212c024020124102460d00200541900e6a41186a222c200141186a290000370300200541900e6a41106a2228200141106a290000370300200541900e6a41086a2226200141086a290000370300200520012900003703900e200520113702e40d200520123602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213541012131024020052802084101460d00202c200541286a2903003703002028200541086a41186a2903003703002026200541086a41106a2903003703002005200541086a41086a2903003703900e410021310b203541807e71212c0b200541800c6a41186a2228200541900e6a41186a290300370300200541800c6a41106a2226200541900e6a41106a290300370300200541800c6a41086a2223200541900e6a41086a290300370300200520052903900e3703800c202c203541ff017172212c20310d1d200541e00b6a41186a2028290300370300200541e00b6a41106a2026290300370300200541e00b6a41086a2023290300370300200520052903800c3703e00b410221314100213541002128024020104102460d00200541900e6a41186a2228200141186a290000370300200541900e6a41106a2226200141106a290000370300200541900e6a41086a2223200141086a290000370300200520012900003703900e2005200f3702e40d200520103602e00d200541086a200541900e6a200541e00d6a200410a103200528020c213141012135024020052802084101460d002028200541286a2903003703002026200541086a41186a2903003703002023200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b203141807e712128203141ff017121310b200541c00c6a41186a2226200541900e6a41186a290300370300200541c00c6a41106a2223200541900e6a41106a290300370300200541c00c6a41086a2227200541900e6a41086a290300370300200520052903900e3703c00c2028203172213120350d1e200541a00c6a41186a2026290300370300200541a00c6a41106a2023290300370300200541a00c6a41086a2027290300370300200520052903c00c3703a00c4102212841002135410021260240200e4102460d00200541900e6a41186a2226200141186a290000370300200541900e6a41106a2223200141106a290000370300200541900e6a41086a2227200141086a290000370300200520012900003703900e2005200d3702e40d2005200e3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c212841012135024020052802084101460d002026200541286a2903003703002023200541086a41186a2903003703002027200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b202841807e712126202841ff017121280b200541800d6a41186a2223200541900e6a41186a290300370300200541800d6a41106a2227200541900e6a41106a290300370300200541800d6a41086a222a200541900e6a41086a290300370300200520052903900e3703800d2026202872212820350d1f200541e00c6a41186a2023290300370300200541e00c6a41106a2027290300370300200541e00c6a41086a202a290300370300200520052903800d3703e00c4102212641002135410021230240200c4102460d00200541900e6a41186a2223200141186a290000370300200541900e6a41106a2227200141106a290000370300200541900e6a41086a222a200141086a290000370300200520012900003703900e2005200b3702e40d2005200c3602e00d200541086a200541900e6a200541e00d6a200410a103200528020c212641012135024020052802084101460d002023200541286a2903003703002027200541086a41186a290300370300202a200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b202641807e712123202641ff017121260b200541c00d6a41186a2227200541900e6a41186a290300370300200541c00d6a41106a222a200541900e6a41106a290300370300200541c00d6a41086a2222200541900e6a41086a290300370300200520052903900e3703c00d2023202672212620350d20200541a00d6a41186a2027290300370300200541a00d6a41106a202a290300370300200541a00d6a41086a2022290300370300200520052903c00d3703a00d4102212341002135410021270240200a4102460d00200541900e6a41186a2223200141186a290000370300200541900e6a41106a2227200141106a290000370300200541900e6a41086a222a200141086a290000370300200520012900003703900e200520093702840e2005200a3602800e200541086a200541900e6a200541800e6a200410a103200528020c210141012135024020052802084101460d002023200541286a2903003703002027200541086a41186a290300370300202a200541086a41106a2903003703002005200541086a41086a2903003703900e410021350b200141807e712127200141ff017121230b200541e00d6a41186a2204200541900e6a41186a290300370300200541e00d6a41106a222a200541900e6a41106a290300370300200541e00d6a41086a2222200541900e6a41086a290300370300200520052903900e3703e00d20272023722101024020350d00200541a0026a41186a2004290300370300200541a0026a41106a202a290300370300200541a0026a41086a202229030037030020054180066a41086a200541a0066a41086a29030037030020054180066a41106a200541a0066a41106a29030037030020054180066a41186a200541a0066a41186a290300370300200541e0056a41086a200541e0066a41086a290300370300200541e0056a41106a200541e0066a41106a290300370300200541e0056a41186a200541e0066a41186a290300370300200520052903e00d3703a002200520052903a00637038006200520052903e0063703e005200541c0056a41186a200541a0076a41186a290300370300200541c0056a41106a200541a0076a41106a290300370300200541c0056a41086a200541a0076a41086a290300370300200541a0056a41086a200541e0076a41086a290300370300200541a0056a41106a200541e0076a41106a290300370300200541a0056a41186a200541e0076a41186a29030037030020054180056a41086a200541a0086a41086a29030037030020054180056a41106a200541a0086a41106a29030037030020054180056a41186a200541a0086a41186a290300370300200520052903a0073703c005200520052903e0073703a005200520052903a00837038005200541e0046a41186a200541e0086a41186a290300370300200541e0046a41106a200541e0086a41106a290300370300200541e0046a41086a200541e0086a41086a290300370300200541c0046a41186a200541a0096a41186a290300370300200541c0046a41106a200541a0096a41106a290300370300200541c0046a41086a200541a0096a41086a290300370300200541a0046a41186a200541e0096a41186a290300370300200541a0046a41106a200541e0096a41106a290300370300200541a0046a41086a200541e0096a41086a290300370300200520052903e0083703e004200520052903a0093703c004200520052903e0093703a00420054180046a41186a200541a00a6a41186a29030037030020054180046a41106a200541a00a6a41106a29030037030020054180046a41086a200541a00a6a41086a290300370300200520052903a00a37038004200541e0036a41186a200541e00a6a41186a290300370300200541e0036a41106a200541e00a6a41106a290300370300200541e0036a41086a200541e00a6a41086a290300370300200520052903e00a3703e003200541c0036a41186a200541a00b6a41186a290300370300200541c0036a41106a200541a00b6a41106a290300370300200541c0036a41086a200541a00b6a41086a290300370300200520052903a00b3703c003200541a0036a41186a200541e00b6a41186a290300370300200541a0036a41106a200541e00b6a41106a290300370300200541a0036a41086a200541e00b6a41086a290300370300200520052903e00b3703a00320054180036a41186a200541a00c6a41186a29030037030020054180036a41106a200541a00c6a41106a29030037030020054180036a41086a200541a00c6a41086a290300370300200520052903a00c37038003200541e0026a41186a200541e00c6a41186a290300370300200541e0026a41106a200541e00c6a41106a290300370300200541e0026a41086a200541e00c6a41086a290300370300200520052903e00c3703e002200541c0026a41186a200541a00d6a41186a290300370300200541c0026a41106a200541a00d6a41106a290300370300200541c0026a41086a200541a00d6a41086a290300370300200520052903a00d3703c00241c00410322235450d2520352034360200203520052903800637020420352003360224203520052903e0053702282035410c6a20054180066a41086a290300370200203541146a20054180066a41106a2903003702002035411c6a20054180066a41186a290300370200203541306a200541e0056a41086a290300370200203541386a200541e0056a41106a290300370200203541c0006a200541e0056a41186a290300370200203520023602482035200636026c203520052903c00537024c203541d4006a200541c0056a41086a290300370200203541dc006a200541c0056a41106a290300370200203541e4006a200541c0056a41186a290300370200203520052903a005370270203541f8006a200541a0056a41086a29030037020020354180016a200541a0056a41106a29030037020020354188016a200541a0056a41186a2903003702002035202b36029001203520333602b401203541ac016a20054180056a41186a290300370200203541a4016a20054180056a41106a2903003702002035419c016a20054180056a41086a290300370200203520052903800537029401203541d0016a200541e0046a41186a290300370200203541c8016a200541e0046a41106a290300370200203541c0016a200541e0046a41086a290300370200203520052903e0043702b801203520323602d801203541f4016a200541c0046a41186a290300370200203541ec016a200541c0046a41106a290300370200203541e4016a200541c0046a41086a290300370200203520052903c0043702dc01203520303602fc0120354198026a200541a0046a41186a29030037020020354190026a200541a0046a41106a29030037020020354188026a200541a0046a41086a290300370200203520052903a004370280022035202f3602a002203541bc026a20054180046a41186a290300370200203541b4026a20054180046a41106a290300370200203541ac026a20054180046a41086a29030037020020352005290380043702a402203520253602c402203541e0026a200541e0036a41186a290300370200203541d8026a200541e0036a41106a290300370200203541d0026a200541e0036a41086a290300370200203520052903e0033702c802203520293602e80220354184036a200541c0036a41186a290300370200203541fc026a200541c0036a41106a290300370200203541f4026a200541c0036a41086a290300370200203520052903c0033702ec022035202c36028c03203541a8036a200541a0036a41186a290300370200203541a0036a200541a0036a41106a29030037020020354198036a200541a0036a41086a290300370200203520052903a00337029003203520313602b003203541cc036a20054180036a41186a290300370200203541c4036a20054180036a41106a290300370200203541bc036a20054180036a41086a29030037020020352005290380033702b403203520283602d403203541f0036a200541e0026a41186a290300370200203541e8036a200541e0026a41106a290300370200203541e0036a200541e0026a41086a290300370200203520052903e0023702d803203520263602f80320354194046a200541c0026a41186a2903003702002035418c046a200541c0026a41106a29030037020020354184046a200541c0026a41086a290300370200203520052903c0023702fc032035200136029c04203541b8046a200541a0026a41186a290300370200203541b0046a200541a0026a41106a290300370200203541a8046a200541a0026a41086a290300370200203520052903a0023702a00441032130024020080d00410021060c120b2007417f4c0d120240024020070d00410121010c010b200710322201450d260b200541003602102005200736020c20052001360208200541086a4100200710c80120052802082206200528021022016a2008200710c9081a2005200120076a360210200529020c21360c110b20004101360200200020013602040c230b20004101360200200020063602040c220b20004101360200200020023602040c210b200041013602002000202b3602040c200b20004101360200200020353602040c1f0b20004101360200200020303602040c1e0b20004101360200200020253602040c1d0b20004101360200200020293602040c1c0b200041013602002000202c3602040c1b0b20004101360200200020283602040c1a0b20004101360200200020263602040c190b20004101360200200020233602040c180b20004101360200200020273602040c170b20004101360200200020343602040c160b200041013602002000202a3602040c150b200541900e6a41186a222e200141186a290000370300200541900e6a41106a2220200141106a290000370300200541900e6a41086a221e200141086a290000370300200520012900003703900e200541800e6a41086a2033360200200520073602840e200520083602800e200541086a200541900e6a200541800e6a200410a103200528020c210341012101024020052802084101460d00202e200541286a2903003703002020200541086a41186a290300370300201e200541086a41106a2903003703002005200541086a41086a2903003703900e410021010b200341807e712104200341ff017121030b200541e00d6a41186a2233200541900e6a41186a290300370300200541e00d6a41106a222e200541900e6a41106a290300370300200541e00d6a41086a2220200541900e6a41086a290300370300200520052903900e3703e00d2004200372210420010d12200541a0026a41186a2033290300370300200541a0026a41106a202e290300370300200541a0026a41086a202029030037030020054180066a41086a200541a0066a41086a29030037030020054180066a41106a200541a0066a41106a29030037030020054180066a41186a200541a0066a41186a290300370300200541e0056a41086a200541e0066a41086a290300370300200541e0056a41106a200541e0066a41106a290300370300200541e0056a41186a200541e0066a41186a290300370300200520052903e00d3703a002200520052903a00637038006200520052903e0063703e005200541c0056a41186a200541a0076a41186a290300370300200541c0056a41106a200541a0076a41106a290300370300200541c0056a41086a200541a0076a41086a290300370300200541a0056a41086a200541e0076a41086a290300370300200541a0056a41106a200541e0076a41106a290300370300200541a0056a41186a200541e0076a41186a29030037030020054180056a41086a200541a0086a41086a29030037030020054180056a41106a200541a0086a41106a29030037030020054180056a41186a200541a0086a41186a290300370300200520052903a0073703c005200520052903e0073703a005200520052903a00837038005200541e0046a41186a200541e0086a41186a290300370300200541e0046a41106a200541e0086a41106a290300370300200541e0046a41086a200541e0086a41086a290300370300200541c0046a41186a200541a0096a41186a290300370300200541c0046a41106a200541a0096a41106a290300370300200541c0046a41086a200541a0096a41086a290300370300200541a0046a41186a200541e0096a41186a290300370300200541a0046a41106a200541e0096a41106a290300370300200541a0046a41086a200541e0096a41086a290300370300200520052903e0083703e004200520052903a0093703c004200520052903e0093703a00420054180046a41186a200541a00a6a41186a29030037030020054180046a41106a200541a00a6a41106a29030037030020054180046a41086a200541a00a6a41086a290300370300200520052903a00a37038004200541e0036a41186a200541e00a6a41186a290300370300200541e0036a41106a200541e00a6a41106a290300370300200541e0036a41086a200541e00a6a41086a290300370300200520052903e00a3703e003200541c0036a41186a200541a00b6a41186a290300370300200541c0036a41106a200541a00b6a41106a290300370300200541c0036a41086a200541a00b6a41086a290300370300200520052903a00b3703c003200541a0036a41186a200541e00b6a41186a290300370300200541a0036a41106a200541e00b6a41106a290300370300200541a0036a41086a200541e00b6a41086a290300370300200520052903e00b3703a00320054180036a41186a200541a00c6a41186a29030037030020054180036a41106a200541a00c6a41106a29030037030020054180036a41086a200541a00c6a41086a290300370300200520052903a00c37038003200541e0026a41186a200541e00c6a41186a290300370300200541e0026a41106a200541e00c6a41106a290300370300200541e0026a41086a200541e00c6a41086a290300370300200520052903e00c3703e002200541c0026a41186a200541a00d6a41186a290300370300200541c0026a41106a200541a00d6a41106a290300370300200541c0026a41086a200541a00d6a41086a290300370300200520052903a00d3703c00241c00410322203450d1420032006360200200320052903800637020420032002360224200320052903e0053702282003410c6a20054180066a41086a290300370200200341146a20054180066a41106a2903003702002003411c6a20054180066a41186a290300370200200341306a200541e0056a41086a290300370200200341386a200541e0056a41106a290300370200200341c0006a200541e0056a41186a2903003702002003202b3602482003203536026c200320052903c00537024c200341d4006a200541c0056a41086a290300370200200341dc006a200541c0056a41106a290300370200200341e4006a200541c0056a41186a290300370200200320052903a005370270200341f8006a200541a0056a41086a29030037020020034180016a200541a0056a41106a29030037020020034188016a200541a0056a41186a2903003702002003203036029001200320253602b401200341ac016a20054180056a41186a290300370200200341a4016a20054180056a41106a2903003702002003419c016a20054180056a41086a290300370200200320052903800537029401200341d0016a200541e0046a41186a290300370200200341c8016a200541e0046a41106a290300370200200341c0016a200541e0046a41086a290300370200200320052903e0043702b801200320293602d801200341f4016a200541c0046a41186a290300370200200341ec016a200541c0046a41106a290300370200200341e4016a200541c0046a41086a290300370200200320052903c0043702dc012003202c3602fc0120034198026a200541a0046a41186a29030037020020034190026a200541a0046a41106a29030037020020034188026a200541a0046a41086a290300370200200320052903a00437028002200320283602a002200341bc026a20054180046a41186a290300370200200341b4026a20054180046a41106a290300370200200341ac026a20054180046a41086a29030037020020032005290380043702a402200320263602c402200341e0026a200541e0036a41186a290300370200200341d8026a200541e0036a41106a290300370200200341d0026a200541e0036a41086a290300370200200320052903e0033702c802200320233602e80220034184036a200541c0036a41186a290300370200200341fc026a200541c0036a41106a290300370200200341f4026a200541c0036a41086a290300370200200320052903c0033702ec022003202736028c03200341a8036a200541a0036a41186a290300370200200341a0036a200541a0036a41106a29030037020020034198036a200541a0036a41086a290300370200200320052903a00337029003200320343602b003200341cc036a20054180036a41186a290300370200200341c4036a20054180036a41106a290300370200200341bc036a20054180036a41086a29030037020020032005290380033702b4032003202a3602d403200341f0036a200541e0026a41186a290300370200200341e8036a200541e0026a41106a290300370200200341e0036a200541e0026a41086a290300370200200320052903e0023702d803200320223602f80320034194046a200541c0026a41186a2903003702002003418c046a200541c0026a41106a29030037020020034184046a200541c0026a41086a290300370200200320052903c0023702fc032003200436029c04200341b8046a200541a0026a41186a290300370200200341b0046a200541a0026a41106a290300370200200341a8046a200541a0026a41086a290300370200200320052903a0023702a004200541086a202f202da7109e03200541900e6a41086a2201200541086a41186a290300370300200541900e6a41106a2202200541286a290300370300200541900e6a41186a2204200541306a2802003602002005200541086a41106a2903003703900e200541086a410c6a2802002134200529020c2136200528020821060240024020320d00410021330c010b2031417f4c0d020240024020310d004101212b0c010b20311032222b450d160b200541003602102005203136020c2005202b360208200541086a4100203110c801200528020822332005280210222b6a2032203110c9081a202b20316a2131200528020c21320b202d422088a7213520054180026a41186a200428020036020020054180026a41106a200229030037030020054180026a41086a2001290300370300200520052903900e37038002410421300b20002030360204200041186a2034360200200041106a20363702002000410c6a2006360200200041086a20353602002000411c6a200529038002370200200041c4006a2031360200200041386a2003360200200041c8006a20052903e801370200200041246a20054180026a41086a2903003702002000412c6a20054180026a41106a290300370200200041346a20054180026a41186a280200360200200041d0006a200541e8016a41086a290300370200200041d8006a200541e8016a41106a2802003602002000413c6a2032ad4220862033ad84370200200041003602000c120b103b000b20004101360200200020343602040c100b20004101360200200020033602040c0f0b20004101360200200020023602040c0e0b20004101360200200020063602040c0d0b200041013602002000202b3602040c0c0b20004101360200200020333602040c0b0b20004101360200200020323602040c0a0b20004101360200200020303602040c090b200041013602002000202f3602040c080b20004101360200200020253602040c070b20004101360200200020293602040c060b200041013602002000202c3602040c050b20004101360200200020313602040c040b20004101360200200020283602040c030b20004101360200200020263602040c020b20004101360200200020223602040c010b20004101360200200020043602040b200541b00e6a24000f0b1039000be95303117f047e037f23002206210720064180056b41607122062400200641106a41086a200341086a2802003602002006200329020037031002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802000e050104000203010b20064180016a2002412c6a290200370300200641f8006a200241246a290200370300200641d8006a41186a2002411c6a290200370300200641d8006a41106a2208200241146a290200370300200641d8006a41086a2002410c6a29020037030020062002290204370358200641a6016a200241376a2d00003a000020064188016a41086a200241c4006a29020037030020064188016a41106a200241cc006a29020037030020064188016a41186a200241d4006a280200360200200620022f00353b01a40120062002413c6a29020037038801200241346a2d00002109200241386a280200210a02400240200628025c220b41244b0d00200641e1006a210c0c010b2008280200210b200641d8006a410c6a280200210c0b20062006280258220d3602b0012006200c3602a8012006280214210e2006280218210f2006200b3602ac01200b4101742210200d6b2211200e410174200f6b2202200220114b1b2212450d04410021022006280210211302400340200f20026a22084101762214200e4f0d09200d20026a22154101762216200b4f0d0a201320146a2d00002214410f71201441f0017141047620084101711b200c20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b2002450d0420022011460d05200b200d20026a22144101762208490d1f200641b8016a200c20086a200b20086b109e032003200328020820026a36020820064198036a41086a221520062902b80137030020064198036a41106a220b200641b8016a41086a29020037030020064198036a41186a220d200641b8016a41106a29020037030020064198036a41206a220c200641b8016a41186a29020037030020064198036a41286a220e200641b8016a41206a290200370300200641c8036a200641b8016a41286a280200360200200641cc036a20093a00002006201441017136029c03410221162006410236029803200641cf036a200641a4016a41026a2d00003a0000200620062f01a4013b00cd03200641d0036a200a360200200641ec036a20064188016a41186a280200360200200641e4036a20064188016a41106a290300370200200641dc036a20064188016a41086a290300370200200641d4036a200629038801370200200641f0036a41086a200441086a280200360200200620042902003703f00320064180046a200120064198036a2003200641f0036a2005109d0320062802840421142006280280042108200641c0026a20064180046a41086a41d80010c9081a20084101460d06200641e8016a200641c0026a41d80010c9081a20064198036a200641a8016a200210a20320064180046a410472200641e8016a41d80010c9081a41002111200641003a008004200141206a20064180046a1099032102200641386a41086a200d290300370300200641386a41106a200c290300370300200641386a41186a200e2903003703002006200b2903003703382002ad211720152802002103200641a4036a28020021152006280298032102200628029c032114410021080c270b4101211620062802142208200628021822144101762202490d0820064180046a200628021020026a200820026b109e03200641386a41086a20064194046a290200370300200641c8006a2006419c046a290200370300200641d0006a200641a4046a29020037030020062006418c046a2902003703382014410171210220064180046a41086a2802002115200628028404210320062802800421142004290204211720042802002111410021080c270b200241106a280200210d2002410c6a280200210c200241086a280200210b20022802042102024002400240024002402006280214221441017420062802182208460d002008410176221520144f0d0d200628021020156a2d000021142003200328020841016a36020820022014410f71201441047620084101711b221541246c6a22142902102118201420062903900437021020142902082119201420062903880437020820142902002117200641023a0080042014200629038004370200201441186a2208290200211a20082006290398043702002017a741ff01714102470d0120032802042216200328020822054101762208490d0e20064198036a200328020020086a201620086b109e032006418c046a20062902980337020020064194046a20064198036a41086a2902003702002006419c046a200641a8036a29020037020020064180046a41246a200641b0036a290200370200200641ac046a20064198036a41206a290200370200200641b4046a200641c0036a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a200541017136020041002108200641003a0080042002201541246c6a41046a200141206a20064180046a109903360200201441003a00000c020b02400240200b0d002004280208211520042802002114410021080c010b2004280200211441002108200d20042802082215470d00024002402014200b470d00410121080c010b200b2014200d10cc084521080b200d21150b20042802042103024020052802002216450d002005280204450d002016102c0b2005200c3602042005200b360200200541086a200d360200200641386a41086a20064180046a41086a290200370300200641386a41106a20064180046a41106a290200370300200641386a41186a20064180046a41186a290200370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a28020036020020062006290280043703382006200629029803370320410321160c2a0b200641a0046a201428022036020020064180046a41186a201a37030020062019370388042006201737038004200620183703900420064198036a41086a200441086a2802003602002006200429020037039803200641c0026a200120064180046a200320064198036a2005109b0320062802c402211620062802c0024101460d01200641c0026a41086a2d0000210341002108201441003a00002002201541246c6a41046a2016360200200341ff0171450d020b41032116200d2115200c2103200b21140c280b20004101360200200020163602040240200b450d00200c450d00200b102c0b2002102c0c250b2000428080808010370200200041186a200d360200200041146a200c360200200041106a200b3602002000410c6a2002360200200041086a4103360200200724000f0b200641c0036a2002412c6a290200370300200641b8036a200241246a290200370300200641b0036a2002411c6a290200370300200641a8036a2208200241146a29020037030020064198036a41086a2002410c6a2902003703002006200229020437039803200241346a2802002111200241386a280200210a2002413c6a280200211b200241c0006a280200211c02400240200628029c03220b41244b0d00200641a1036a210c0c010b2008280200210b20064198036a410c6a280200210c0b2006200628029803220d360290012006200c360288012006280214210e2006280218210f2006200b36028c01410021020240200b410174200d6b2209200e410174200f6b2210201020094b1b2212450d00200628021021130340200f20026a22084101762214200e4f0d0b200d20026a22154101762216200b4f0d0c201320146a2d00002214410f71201441f0017141047620084101711b200c20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b024002400240024020022009470d0020092010460d010b20022009490d01200f20026a22144101762208200e4f0d0f200628021020086a2d000021082003200220032802086a41016a36020820112008410f71200841047620144101711b221441246c6a22022902102118200220062903900437021020022902082119200220062903880437020820022902002117200641023a0080042002200629038004370200200241186a2208290200211a20082006290398043702002017a741ff01714102470d0220032802042215200328020822164101762208490d14200641c0026a200328020020086a201520086b109e032006418c046a20062902c00237020020064194046a200641c0026a41086a2902003702002006419c046a200641d0026a29020037020020064180046a41246a200641d8026a290200370200200641ac046a200641c0026a41206a290200370200200641b4046a200641e8026a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2016410171360200200641003a0080042011201441246c6a41046a200141206a20064180046a109903360200200241003a00000c230b410021080240200a450d00201c2004280208470d00024020042802002202200a470d00410121080c010b200a2002201c10cc084521080b200b200d4101762202490d0d20064180046a200c20026a200b20026b109e03200641c0026a41086a221620064194046a290200370300200641c0026a41106a220c2006419c046a290200370300200641c0026a41186a220e200641a4046a29020037030020062006418c046a2902003703c002200d410171210220064180046a41086a220d2802002115200628028404210320062802800421142004280208210b20042902002117024020052802002204450d002005280204450d002004102c0b2005201b3602042005200a360200200541086a201c360200200641386a41086a2016290300370300200641386a41106a200c290300370300200641386a41186a200e290300370300200641206a41086a200d290200370300200641206a41106a20064180046a41106a280200360200200620062903c00237033820062006290280043703200c230b200b200d200241016a22126a22154101762208490d0e200641d8006a200c20086a200b20086b109e03200641e8016a41086a2208200641d8006a41086a290300370300200641e8016a41106a2203200641d8006a41106a290300370300200641e8016a41186a2205200641d8006a41186a290300370300200641e8016a41206a220e200641d8006a41206a290300370300200641e8016a41286a220f200641d8006a41286a280200360200200620062903583703e801200d20026a220d4101762214200b4f0d0f200c20146a2d0000211410a303211620064180046a41086a20154101713602002006418c046a220b20062903e80137020020064194046a20082903003702002006419c046a200329030037020020064180046a41246a2005290300370200200641ac046a200e290300370200200641b4046a200f280200360200200641c4046a201c360200200641c0046a201b360200200641bc046a200a360200200641b8046a20113602002006410436028404200641c8046a20062902b801370300200641d0046a200641b8016a41086a290200370300200641d8046a200641b8016a41106a28020036020041002108200641003a00800420162014410f712014410476200d4101711b41246c6a2214200141206a220320064180046a109903360204201441003a0000024020062802142214410174200628021822156b2002460d00201520026a220b410176220d20144f0d112014201520126a22054101762208490d122006280210220c200d6a2d00002115200641c0026a200c20086a201420086b109e032006418c046a221420062902c00237020020064194046a200641c0026a41086a2902003702002006419c046a200641c0026a41106a29020037020020064180046a41246a200641c0026a41186a290200370200200641ac046a200641c0026a41206a290200370200200641b4046a200641c0026a41286a280200360200200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2204200541017136020041002108200641003a00800420162015410f71201541f00171410476200b4101711b41246c6a2215200320064180046a109903360204201541003a000020064180046a20064188016a200210a203200641386a41086a20064180046a41186a290300370300200641386a41106a20064180046a41206a290300370300200641386a41186a20064180046a41286a290300370300200620064180046a41106a29030037033820142802002115200428020021032006280284042114200628028004210242002117201621110c230b20064180046a20064188016a200210a203200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200620064180046a41106a290300370338200b280200211520064180046a41086a28020021032004280208210b2004290200211720062802840421142006280280042102201621110c220b200641a0046a200228022036020020064180046a41186a201a370300200620193703880420062017370380042006201837039004200641c0026a41086a200441086a280200360200200620042902003703c002200641e8016a200120064180046a2003200641c0026a2005109b0320062802ec0121080240024020062802e8014101460d00200641e8016a41086a2d00002115200241003a00002011201441246c6a41046a2008360200201541ff01710d22200b200d4101762202490d1420064180046a200c20026a200b20026b109e032000410c6a200d41017136020020004281808080c000370204200041c8006a201c360200200041c4006a201b360200200041c0006a200a3602002000413c6a2011360200200041106a200629028004370200200041186a20064188046a290200370200200041206a20064180046a41106a290200370200200041286a20064180046a41186a290200370200200041306a20064180046a41206a290200370200200041386a20064180046a41286a280200360200200041003602000c010b20004101360200200020083602040240200a450d00201b450d00200a102c0b2011102c0b200628029c0341244d0d23200641a4036a280200102c200724000f0b200641e8026a2002412c6a290200370300200641e0026a200241246a290200370300200641d8026a2002411c6a290200370300200641d0026a2208200241146a290200370300200641c0026a41086a2002410c6a290200370300200620022902043703c0022002413c6a280200210a200241386a280200211c200241346a28020021100240024020062802c402220b41244b0d00200641c9026a210d0c010b2008280200210b200641c0026a410c6a280200210d0b410021020240200b41017420062802c002220c6b22112006280214220e4101742006280218220f6b2209200920114b1b2212450d00200628021021130340200f20026a22084101762214200e4f0d14200c20026a22154101762216200b4f0d15201320146a2d00002214410f71201441f0017141047620084101711b200d20166a2d00002208410f71200841047620154101711b470d012012200241016a2202470d000b201221020b0240024020022011470d0020112009470d00410021020240200a2004280208470d000240201020042802002202470d00410121020c010b20102002200a10cc084521020b024020052802002208450d002005280204450d002008102c0b2005201c36020420052010360200200541086a200a360200024020020d00200620062802c0023602800420064180046a41047221150240024020062802c402221441244b0d00200641c9026a21020c010b200641d0026a2802002114200641cc026a28020021020b4100210820064180046a41086a221641003a0000200641003602840420152002200220146a10a403200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a280200360200200620064180046a41106a29030037033820062006290298033703202006418c046a280200211520162802002103200429020421172004280200211120062802840421142006280280042102410121160c020b200620062802c0023602800420064180046a41047221140240024020062802c402220841244b0d00200641c9026a21020c010b200641d0026a2802002108200641cc026a28020021020b20064180046a41086a221641003a0000200641003602840420142002200220086a10a403200641386a41086a20064180046a41186a290300370300200641386a41106a200641a0046a290300370300200641386a41186a200641a8046a290300370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a280200360200200620064180046a41106a29030037033820062006290298033703202006418c046a28020021152016280200210320042902042117200428020021112006280284042114200628028004210241012116410121080c010b0240200220114f0d0010a3032114200c20026a22154101762216200b4f0d16200b201541016a220c4101762208490d17200d20166a2d0000211620064198036a200d20086a200b20086b109e032006418c046a220b20062902980337020020064180046a41146a220d20064198036a41086a220e29020037020020064180046a411c6a220f20064198036a41106a221229020037020020064180046a41246a221320064198036a41186a29020037020020064180046a412c6a221120064198036a41206a29020037020020064180046a41346a220920064198036a41286a280200360200200641c0046a221b200a360200200641bc046a220a201c36020020064180046a41386a2010360200200641013602840420064180046a41086a2210200c41017136020041002108200641003a00800420142016410f71201641f0017141047620154101711b41246c6a2215200141206a20064180046a109903360204201541003a000020064180046a200641106a200210a203200641a8016a41086a2202200b280200360200200641d8006a41086a221520064180046a41186a220c290300370300200641d8006a41106a221620064180046a41206a290300370300200641d8006a41186a221c20064180046a41286a29030037030020062006290284043703a801200620064180046a41106a221d290300370358200620062802800436029c032006410436029803200e20062903a8013703002012200228020036020020064198036a41386a410036020020064198036a41346a201436020020064198036a41146a200629035837020020064198036a411c6a201529030037020020064198036a41246a201629030037020020064198036a412c6a201c290300370200200641dc036a20062902880137020020064198036a41cc006a20064188016a41086a29020037020020064198036a41d4006a20064188016a41106a280200360200200641f0036a41086a200441086a280200360200200620042902003703f00320064180046a200120064198036a2003200641f0036a2005109d03200641e8016a41086a22052013290200370300200641e8016a41106a220e2011290200370300200641e8016a41186a221220092902003703002006200f2902003703e80120102802002116200b2802002102201d2802002114200d2802002103200c2802002115200a2802002111201b2903002117200641c8046a280200210b200628028404210d2006280280042104200641b8016a41106a220c200641dc046a280200360200200641b8016a41086a220f20064180046a41d4006a290200370300200620064180046a41cc006a2902003703b801024020044101460d00200641386a41186a2012290300370300200641386a41106a200e290300370300200641386a41086a2005290300370300200641206a41086a200f290300370300200641206a41106a200c280200360200200620062903e801370338200620062903b8013703200c020b200041013602002000200d3602040c200b200b200c4101762202490d17200641e8016a200d20026a200b20026b109e0310a303210220064198036a41086a20062902e80137030020064198036a41106a200641e8016a41086a29020037030020064198036a41186a200641e8016a41106a29020037030020064198036a41206a200641e8016a41186a29020037030020064198036a41286a200641e8016a41206a290200370300200641c8036a200641e8016a41286a28020036020020064198036a41c0006a200a36020020064198036a413c6a201c360200200641d0036a201036020020064198036a41346a20023602002006200c41017136029c03200641043602980320064188016a41086a200441086a280200360200200620042902003703880120064180046a200120064198036a200320064188016a2005109d03200641d8006a41086a2204200641a4046a290200370300200641d8006a41106a220d200641ac046a290200370300200641d8006a41186a220520064180046a41346a29020037030020062006419c046a29020037035820064180046a41086a28020021162006418c046a280200210220064180046a41106a280200211420064194046a280200210320064180046a41186a280200211520064180046a413c6a280200211120064180046a41c0006a2903002117200641c8046a280200210b200628028404210c2006280280042108200641b8016a41106a220e200641dc046a280200360200200641b8016a41086a220f200641d4046a2902003703002006200641cc046a2902003703b80120084101460d18200641386a41186a2005290300370300200641386a41106a200d290300370300200641386a41086a2004290300370300200641206a41086a200f290300370300200641206a41106a200e28020036020020062006290358370338200620062903b801370320410021080b20062802c40241244d0d24200641cc026a280200102c0c240b2010200d460d18200d4101762202200b4f0d17200c20026a2d0000210210a30321140240024020114101460d00200b200d41016a22154101762208490d1b20064198036a200c20086a200b20086b109e0320064180046a41086a20154101713602002006418c046a20062902980337020020064194046a20064198036a41086a2902003702002006419c046a20064198036a41106a290200370200200641a4046a20064198036a41186a290200370200200641ac046a20064198036a41206a290200370200200641b4046a200641c0036a280200360200200641b8046a20093a0000200641b9046a20062f01a4013b00002006410236028404200641bb046a200641a4016a41026a2d00003a0000200641bc046a200a360200200641c0046a200629038801370300200641c8046a20064188016a41086a290300370300200641d0046a20064188016a41106a290300370300200641d8046a20064188016a41186a28020036020041002109200641003a008004200141206a20064180046a109903210a0c010b20064198036a41026a200641a4016a41026a2d00003a000020064180046a41086a20064188016a41086a29030037030020064180046a41106a20064188016a41106a29030037030020064180046a41186a20064188016a41186a280200360200200620062f01a4013b0198032006200629038801370380040b20142002410f712002410476200d4101711b41246c6a220220093a0000200220062f0198033b00012002200a3602042002200629038004370208200241036a2006419a036a2d00003a0000200241106a20064180046a41086a2215290300370200200241186a20064180046a41106a220b290300370200200241206a20064180046a41186a220d2802003602004100210820064198036a41086a41003602002006201436029c032006410336029803200641b8016a41086a200441086a280200360200200620042902003703b80120064180046a200120064198036a2003200641b8016a2005109d03200641c0026a41086a220520064180046a41246a290200370300200641c0026a41106a220c200641ac046a290200370300200641c0026a41186a220e200641b4046a29020037030020062006419c046a2902003703c002201528020021162006418c046a2802002102200b280200211420064194046a2802002103200d2802002115200641bc046a2802002111200641c0046a2903002117200641c8046a280200210b200628028404210d2006280280042104200641e8016a41106a220f200641dc046a280200360200200641e8016a41086a2212200641d4046a2902003703002006200641cc046a2902003703e801024020044101460d00200641386a41186a200e290300370300200641386a41106a200c290300370300200641386a41086a2005290300370300200641206a41086a2012290300370300200641206a41106a200f280200360200200620062903c002370338200620062903e8013703200c230b200041013602002000200d3602040c1c0b2003200328020820116a36020820064180046a41086a20062903880137030020064180046a41106a20064188016a41086a29030037030020064180046a41186a20064188016a41106a290300370300200641a0046a20064188016a41186a280200360200200620093a008004200620062f01a4013b0081042006200641a6016a2d00003a0083042006200a3602840420064198036a41086a200441086a2802003602002006200429020037039803200641c0026a200120064180046a200320064198036a2005109b0320062802c4022116024020062802c0024101460d00200b200d4101762202490d1b200641c0026a41086a2d0000210820064180046a200c20026a200b20026b109e03200641386a41086a20064194046a290200370300200641386a41106a2006419c046a290200370300200641d0006a200641a4046a290200370300200641206a41086a20064198036a41086a290200370300200641206a41106a20064198036a41106a28020036020020062006418c046a2902003703382006200629029803370320200d4101712102200841ff017145210820064180046a41086a2802002115200628028404210320062802800421142016ad211741022116410021110c220b20004101360200200020163602040c1b0b20004101360200200020143602040c1a0b2014200e41f8c3c800103f000b2016200b41f8c3c800103f000b200220084188c4c8001058000b2015201441f8c3c800103f000b200820164188c4c8001058000b2014200e41f8c3c800103f000b2016200b41f8c3c800103f000b2002200b4188c4c8001058000b2008200e41f8c3c800103f000b2008200b4188c4c8001058000b2014200b41f8c3c800103f000b200d201441f8c3c800103f000b200820144188c4c8001058000b200820154188c4c8001058000b2002200b4188c4c8001058000b2014200e41f8c3c800103f000b2016200b41f8c3c800103f000b2016200b41f8c3c800103f000b2008200b4188c4c8001058000b2002200b4188c4c8001058000b200041013602002000200c3602040c060b2002200b41f8c3c800103f000b41dcf4c000412a4188f5c000103c000b2008200b4188c4c8001058000b2008200b4188c4c8001058000b2002200b4188c4c8001058000b200628025c41244d0d04200641e4006a280200102c200724000f0b20062802c40241244d0d03200641cc026a280200102c200724000f0b200b200d4101762202490d0120064180046a200c20026a200b20026b109e03200641386a41086a20064194046a290200370300200641c8006a2006419c046a290200370300200641d0006a200641a4046a29020037030020062006418c046a290200370338200d4101712102201bad422086200aad84211720064180046a41086a28020021152006280284042103200628028004211441002108201c210b0b0240200628029c0341244d0d00200641a4036a280200102c0b410421160c030b2002200b4188c4c8001058000b200724000f0b200628025c41244d0d00200641e4006a280200102c0b20002008360204200041186a2015360200200041146a2003360200200041106a20143602002000410c6a2002360200200041086a20163602002000411c6a2006290338370200200041c8006a200b360200200041c0006a20173702002000413c6a2011360200200041cc006a2006290320370200200041246a200641386a41086a2903003702002000412c6a200641386a41106a290300370200200041346a200641386a41186a290300370200200041d4006a200641206a41086a290300370200200041dc006a200641206a41106a28020036020020004100360200200724000bdd0301097f230041106b22032400200041003a00042000410036020020032000200210a0080240024020032802004101470d00200341086a2802000d0141e8c4c800411141fcc4c800103c000b41242104024002402000280200220541244b0d00200041056a210620052107200021080c010b2000410c6a22082802002107200041086a2802002106200521040b02400240024020072004490d00200121050c010b2002210920012105024003402009450d01200620076a20052d00003a00002009417f6a2109200541016a21052004200741016a2207470d000b200421070c010b200820073602000c010b20082007360200200120026a22082005460d00200541016a21072000410c6a210a200041056a210b20052d000021060340024002402000280200220241244b0d00412421012002210520002109200b21040c010b200028020c210520002802082104200a2109200221010b024020052001470d0020032000410110a008024020032802004101470d00200341086a2802000d0441e8c4c800411141fcc4c800103c000b200028020c210520002802082104200a21090b200420056a20063a00002009200928020041016a36020020082007460d0120072d00002106200741016a21070c000b0b200341106a24000f0b1039000bbf0703017f027e177f230041c0016b22022400200241086a200141d00010c9081a200041086a290300210320002903002104200241003602702002200337036820022004370360200241086a200241e0006a10a503200229036022032003200229036822048520048920022802704101461b2203421988a7220541ff007141818284086c2106200041106a2107200041146a28020021082002412d6a2109200241346a280200210a200241306a280200210b2002280228220c41244b210d200241d4006a2d000041ff0171210e200241086a41cd006a2d000041ff0171210f200028021022102003a72211712212211341002114024003400240200820136a28000022152006732201417f73200141fffdfb776a71418081828478712201450d000240034002400240200241086a2008410020016841037620136a2010716b41d0006c6a221641b07f6a2217460d00200241086a2017412010cc080d010b201641506a211802400240200d0d0020092119200c211a0c010b200b2119200a211a0b024002402018280200221b41244b0d00201841056a21180c010b2016415c6a280200211b201641586a28020021180b201a201b470d00024020192018460d0020192018201a10cc080d010b200e2016417c6a2d0000470d00200e450d02200f201741cd006a2d000041ff0171460d020b2001417f6a2001712201450d020c000b0b200c41244d0d02200b450d02200b102c0c020b201441046a221420136a2010712113201520154101747141808182847871450d000b2002200036025c200241e0006a200241086a41d00010c9081a4104210103402012221620016a2010712112200141046a2101200820166a280000418081828478712217450d000b0240200820176841037620166a20107122016a2c000022164100480d0020082008280200418081828478716841037622016a2d000021160b200041186a2802002117024020164101712218450d0020170d00200241b0016a2007200241dc006a10a603200028021022102011712116200041146a28020021084104210103402016221720016a2010712116200141046a2101200820176a28000041808182847871221b450d000b02402008201b6841037620176a20107122016a2c00004100480d002008280200418081828478716841037621010b200028021821170b2000201720186b360218200820016a200541ff007122163a000020102001417c6a7120086a41046a20163a00002008410020016b41d0006c6a41b07f6a200241e0006a41d00010c9081a2000411c6a2201200128020041016a3602000b200241c0016a24000bb51101147f230041b0096b2203240041002104200341003602a806200320023602a406200320013602a0064101210541012106024002402002450d0041012107200341013602a8060240024002400240024002400240024002400240024002400240024002400240024002400240024020012d000022080d000c010b41012106024002400240024002400240024002400240024002400240200841c00171220741c001460d0002402007418001460d00200741c000470d202008413f712204413f470d024102210741412104024003402007417f6a20024f0d22200320073602a806200120076a417f6a2d0000220841ff01470d01200441817e6a210441012109200741016a2207418302470d000b418202210741ffff0321040c050b200820046b21040c030b2008413f712204413f470d054102210741412104024003402007417f6a20024f0d21200320073602a806200120076a417f6a2d0000220841ff01470d01200441817e6a210441012109200741016a2207418302470d000b418202210741ffff032104410121080c0b0b200820046b21040c060b2008413f712204413f470d074102210741412104024003402007417f6a20024f0d20200320073602a806200120076a417f6a2d0000220841ff01470d01200441817e6a210441012109200741016a2207418302470d000b418202210741ffff032104410021080c0a0b200820046b2104410021080c080b410121070b20044101712209450d010b200720024f0d0341002106200120076a2d0000410f4b0d1b0b410121062007200441016a4101766a220a20024b0d1a2003200a3602a8062003200341a0066a10ae0620032802000d1a20032802a806220b20032802046a220c20032802a4064b0d1a2003200c3602a806200341e0046a200341f0076a41c00110c9081a410121040c070b410121070b410121080c020b2007200241fce6c300103f000b41002108410121070b20044101712209450d010b200720024f0d0241002106200120076a2d0000410f4b0d140b410121062007200441016a4101766a220a20024b0d132003200a3602a806200a41026a220420024b0d13200320043602a806200a417e4f0d052001200a6a2f0000210d410021044100210b024020080d00200341106a200341a0066a10ae0620032802100d1420032802a806220c20032802146a220e20032802a4064b0d142003200e3602a8064101210b0b200341023602a40920034102360298092003410236028c092003410236028009200341023602f408200341023602e808200341023602dc08200341023602d008200341023602c408200341023602b808200341023602ac08200341023602a00820034102360294082003410236028808200341023602fc07200341023602f007200341f0076a2106200d41ffff0371210f03400240200f2004410f7176410171450d00200341086a200341a0066a10ae060240024020032802080d0020032802a806220d200328020c22106a220820032802a4064d0d010b410121060c160b200320083602a806200641086a2008360200200641046a200d360200200620104120473602000b2006410c6a2106200441016a22044110470d000b200341e0046a200341f0076a41c00110c9081a410421040b200341a0036a200341e0046a41c00110c9081a200341c0016a41186a200e360200200341c0016a41146a200c360200200341c0016a41106a200b360200200341c0016a410c6a2009360200200341c0016a41086a200a360200200320073602c401200320043602c001200341c0016a411c6a200341a0036a41c00110c9081a410021054100211120040e050d020101030d0b20072002418ce7c300103f0b000b200a2007490d02200a20024b0d03200c200b490d04200c20024b0d05200a20076b2108200120076a21062001200b6a2112200c200b6b2113410121110c0a0b200341023602a40920034102360298092003410236028c092003410236028009200341023602f408200341023602e808200341023602dc08200341023602d008200341023602c408200341023602b808200341023602ac08200341023602a00820034102360294082003410236028808200341023602fc07200341023602f007410021060340410221080240200341c0016a20066a2204411c6a220f2802004102460d00200441246a280200210d200441206a280200210402400240200f2802004101470d00200d2004490d0941012108200d20024d0d01200d200241f4c6c800104f000b200d2004490d0941002108200d20024b0d0a0b200d20046b210d200120046a21100b200341f0076a20066a22042008360200200441086a200d360200200441046a20103602002006410c6a220641c001460d090c000b0b200a200441ece6c3001059000b2007200a41ecc7c8001059000b200a200241ecc7c800104f000b200b200c41fcc7c8001059000b200c200241fcc7c800104f000b2004200d41f4c6c8001059000b2004200d4184c7c8001059000b200d20024184c7c800104f000b02400240200b4101460d00410021100c010b200e200c490d02200e20024b0d03200e200c6b210d2001200c6a21100b200a2007490d03200a20024b0d04200341f8076a280200211420032802f407211320032802f0072112200341186a200341fc076a41a80110c9081a200a20076b2108200120076a2106200341ac096a280200210f200341a8096a280200211520032802a4092116410421110b2000411c6a2014360200200041186a2013360200200041146a2012360200200041106a20093602002000410c6a2008360200200041086a2006360200200041046a2011360200200041206a200341186a41a80110c9081a200041d8016a200d360200200041d4016a2010360200200041d0016a200f360200200041cc016a2015360200200041c8016a20163602000c050b200c200e418cc8c8001059000b200e2002418cc8c800104f000b2007200a41ecc7c8001059000b200a200241ecc7c800104f000b200341a0036a200341e0046a41c00110c9081a200020063a00010b200020053a0000200341b0096a24000baa0801047f230041f0026b22042400024002400240024002400240024020022802004101470d00200241086a280200210520022802042102200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d001200441f0016a200441d0016a200220052003109c0320042802f401210120042802f0012102200441f8006a200441f0016a41086a220541d40010c9081a20024101460d03200441246a200441f8006a41d40010c9081a200420013602f4012005200441246a41d40010c9081a41002102200441003a00f0012003200441f0016a10990321010c010b2002280204210302400240200241086a28020022024120460d00200441f0016a41086a200141086a290000370300200441f0016a41106a200141106a290000370300200441f0016a41186a200141186a290000370300200420012900003703f0012002417f4c0d050240024020020d00410121010c010b200210322201450d070b200441003602d801200420023602d401200420013602d001200441d0016a4100200210c80120042802d00120042802d80122016a2003200210c9081a2004412f6a200120026a360000200420042903d001370027413010322201450d06200141043a0000200120042903f00137000120012004290024370021200141096a200441f8016a290300370000200141116a20044180026a290300370000200141196a20044188026a290300370000200141286a2004412b6a290000370000410121020c010b200441246a41026a200341026a2d00003a0000200441f0016a41086a2003410f6a29000037030020044180026a200341176a29000037030020044188026a2003411f6a2d00003a0000200420032f00003b0124200420032900073703f00120032800032101410021020b200441206a41026a2203200441246a41026a2d00003a0000200441f8006a41086a2205200441f0016a41086a290300370300200441f8006a41106a2206200441f0016a41106a290300370300200441f8006a41186a2207200441f0016a41186a2d00003a0000200420042f01243b0120200420042903f00137037820020d012004411c6a41026a20032d00003a0000200441086a2005290300370300200441106a2006290300370300200441186a20072d00003a0000200420042f01203b011c20042004290378370300410121020b200020023a000420004100360200200041056a20042f011c3b0000200041086a20013602002000410c6a2004290300370200200041076a2004411e6a2d00003a0000200041146a200441086a2903003702002000411c6a200441106a290300370200200041246a200441186a2802003602000c040b20004101360200200020013602040c030b20004101360200200020013602040c020b103b000b1039000b200441f0026a24000bdd0e01097f230041f0006b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141046a2802002204410174200141086a28020022056b20024d0d0020054101762106200520026a220741017621082007410171450d04200841016a22072006490d06200820044f0d072003200128020020066a200720066b10b808200341306a410472220941286a200341286a280200360200200941206a200341206a290300370200200941186a200341186a290300370200200941106a200341106a290300370200200941086a200341086a290300370200200920032903003702002003200241017122013602302005410171220520014b0d01200520014f0d19412421052003280234220441244b0d02200341396a2102200921010c030b200420054101762202490d04200341306a200128020020026a200420026b109e0320002005410171360200200020032903303702042000410c6a200341386a290300370200200041146a200341c0006a2903003702002000411c6a200341c8006a290300370200200041246a200341d0006a2903003702002000412c6a200341d8006a2802003602000c190b02400240200328023422054125490d00200341c0006a2201280200417f6a220a0d0120012802000d154100410041acc9c800103f000b2005417f6a220a450d150b200a417f6a210b200341396a2107410021010340200141016a21020240024020054125490d002003280240220520014d0d142003280240220520024d0d09200328023c20016a2d00004104742104200328023c20016a41016a2d0000410476210620032802402105200328023c21080c010b200520014d0d13200520024d0d08200720016a22062d00004104742104200641016a2d00004104762106200721080b200520014d0d08200820016a20062004723a00000240200b2001460d0020032802342105200221010c010b0b02400240200328023422014125490d0020032802402201200a4d0d0a200328023c200a6a2d0000210220032802402101200328023c21070c010b2001200a4d0d092007200a6a2d000021020b2001200a4d0d092007200a6a21010c160b200341c0006a21012003413c6a2802002102200421050b0240200128020022042005470d00200341e0006a2009410110a008024020032802604101470d00200341e8006a2802000d0a41e8c4c800411141fcc4c800103c000b200341c0006a220128020021042003413c6a28020021020b200220046a41003a00002001200128020041016a3602002003280234220521010240200541244d0d00200341c0006a28020021010b024020014102490d002001417e6a2101200341396a21070340200141016a21020240024020054125490d002003280240220520014d0d142003280240220520024d0d0d200328023c20016a2d00004104742104200328023c20016a41016a2d0000410476210620032802402105200328023c21080c010b200520014d0d13200520024d0d0c200720016a22062d00004104742104200641016a2d00004104762106200721080b200520024d0d0c200820016a41016a20062004723a00002001417f6a210120032802342105200241014b0d000b0b0240024020054125490d00200341c0006a2205280200450d0d2003413c6a22022802002d0000210120052802002105200228020021020c010b2005450d0c200341396a210220032d003921010b2005450d0c2002200141f001714104763a00000c150b20082006490d0c20042008490d0d200341306a200128020020066a200820066b10b80820002005410171360200200020032903303702042000410c6a200341386a290300370200200041146a200341c0006a2903003702002000411c6a200341c8006a290300370200200041246a200341d0006a2903003702002000412c6a200341d8006a2802003602000c150b200220044188c4c8001058000b200620074198c4c8001059000b200720044198c4c800104f000b200141016a2005418cc9c800103f000b20012005419cc9c800103f000b200a200141acc9c800103f000b200a200141bcc9c800103f000b1039000b200141016a200541d4c6c800103f000b200141016a200541e4c6c800103f000b4100410041ccc9c800103f000b4100410041dcc9c800103f000b2006200841a8c4c8001059000b2008200441a8c4c800104f000b2001200541fcc8c800103f000b2001200541c4c6c800103f000b2003413c6a22012802002d00002102200341c0006a2802002105200128020021010c010b200341396a22012d000021020b20050d004100410041bcc9c800103f000b200120024104743a00000b0240200328023441244d0d00200341c0006a21090b024020092802002201450d0020092001417f6a3602000b20002003290330370200200041286a200341306a41286a290300370200200041206a200341306a41206a290300370200200041186a200341306a41186a290300370200200041106a200341306a41106a290300370200200041086a200341306a41086a2903003702000b200341f0006a24000b800d01027f230041b0046b22002400024041c004103222010d001039000b200141023a00002001200029008d04370001200141023a0024200120002900ea03370025200141096a2000418d046a41086a290000370000200141116a2000418d046a41106a290000370000200141196a2000418d046a41186a290000370000200141206a2000418d046a411f6a2800003600002001412d6a200041ea036a41086a290000370000200141356a200041ea036a41106a2900003700002001413d6a200041ea036a41186a290000370000200141c4006a200041ea036a411f6a280000360000200141023a0048200141023a006c200120002900c703370049200141d1006a200041c7036a41086a290000370000200141d9006a200041c7036a41106a290000370000200141e1006a200041c7036a41186a290000370000200141e8006a200041c7036a411f6a280000360000200120002900a40337006d200141f5006a200041a4036a41086a290000370000200141fd006a200041a4036a41106a29000037000020014185016a200041a4036a41186a2900003700002001418c016a200041a4036a411f6a280000360000200141023a009001200141023a00b40120012000290081033700910120014199016a20004181036a41086a290000370000200141a1016a20004181036a41106a290000370000200141a9016a20004181036a41186a290000370000200141b0016a20004181036a411f6a280000360000200120002900de023700b501200141bd016a200041de026a41086a290000370000200141c5016a200041de026a41106a290000370000200141cd016a200041de026a41186a290000370000200141d4016a200041de026a411f6a280000360000200141023a00d801200141f8016a200041bb026a411f6a280000360000200141f1016a200041bb026a41186a290000370000200141e9016a200041bb026a41106a290000370000200141e1016a200041bb026a41086a290000370000200120002900bb023700d901200141023a00fc012001419c026a20004198026a411f6a28000036000020014195026a20004198026a41186a2900003700002001418d026a20004198026a41106a29000037000020014185026a20004198026a41086a29000037000020012000290098023700fd01200141023a00a002200141c0026a200041f5016a411f6a280000360000200141b9026a200041f5016a41186a290000370000200141b1026a200041f5016a41106a290000370000200141a9026a200041f5016a41086a290000370000200120002900f5013700a102200141023a00c402200141e4026a200041d2016a411f6a280000360000200141dd026a200041d2016a41186a290000370000200141d5026a200041d2016a41106a290000370000200141cd026a200041d2016a41086a290000370000200120002900d2013700c502200141023a00e80220014188036a200041af016a411f6a28000036000020014181036a200041af016a41186a290000370000200141f9026a200041af016a41106a290000370000200141f1026a200041af016a41086a290000370000200120002900af013700e902200141023a008c03200141ac036a2000418c016a411f6a280000360000200141a5036a2000418c016a41186a2900003700002001419d036a2000418c016a41106a29000037000020014195036a2000418c016a41086a2900003700002001200029008c0137008d03200141023a00b003200141d0036a200041e9006a411f6a280000360000200141c9036a200041e9006a41186a290000370000200141c1036a200041e9006a41106a290000370000200141b9036a200041e9006a41086a290000370000200120002900693700b103200141023a00d403200141f4036a200041c6006a411f6a280000360000200141ed036a200041c6006a41186a290000370000200141e5036a200041c6006a41106a290000370000200141dd036a200041c6006a41086a290000370000200120002900463700d503200141023a00f80320014198046a200041236a411f6a28000036000020014191046a200041236a41186a29000037000020014189046a200041236a41106a29000037000020014181046a200041236a41086a290000370000200120002900233700f903200141023a009c04200141bc046a2000411f6a280000360000200141b5046a200041186a290000370000200141ad046a200041106a290000370000200141a5046a200041086a2900003700002001200029000037009d04200041b0046a240020010bb20301097f230041106b2203240020032000200220016b10a008024002400240024020032802004101470d00200341086a2802000d0141e8c4c800411141fcc4c800103c000b41242104024002402000280200220541244b0d00200041056a210620052107200021080c010b2000410c6a22082802002107200041086a2802002106200521040b0240200720044f0d00034020022001460d03200620076a20012d00003a0000200141016a21012004200741016a2207470d000b200421070b2008200736020020012002460d02200141016a21072000410c6a2109200041056a210a20012d000021050340024002402000280200220841244b0d004124210b2008210120002104200a21060c010b200028020c210120002802082106200921042008210b0b02402001200b470d0020032000410110a008024020032802004101470d00200341086a2802000d0341e8c4c800411141fcc4c800103c000b200028020c210120002802082106200921040b200620016a20053a00002004200428020041016a36020020022007460d0320072d00002105200741016a21070c000b0b1039000b200820073602000b200341106a24000be50804027f027e027f017e230041b0016b2202240020012001280210220341026a360210200241a0016a200129030042adfed5e4d485fda8d8007e220442a0cbbf9599b5a19f0a7c2205200029021885200029020020058542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852000290208200442efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852000290210200442bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010ce082001200241a8016a29030020022903a0017c2204370300024002402000280220220641244b0d00200041256a21070c010b2000412c6a2802002106200041286a28020021070b2001200341036a36021020024190016a20042006ad220585420042adfed5e4d485fda8d800420010ce08200120022903900120057c20024190016a41086a2903007c42adfed5e4d485fda8d8007e2205370300024002400240200641084b0d00200641014b0d014200210402402006450d00200731000021040b2001200341046a220336021020024180016a2004200585420042adfed5e4d485fda8d800420010ce0820024188016a2903002002290380017c21040c020b0240200641104b0d00200241d0006a2007290000200585420042adfed5e4d485fda8d800420010ce082001200341056a2203360210200241c0006a200241d0006a41086a29030020022903507c200620076a41786a29000085420042adfed5e4d485fda8d800420010ce08200241c0006a41086a29030020022903407c21040c020b200620076a41786a2900002108200521040340200729000020048542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e2005852105200741086a2107200442cf829ebbefefde82147c2104200641786a220641084b0d000b2001200341056a2203360210200241306a2005200885420042adfed5e4d485fda8d800420010ce08200241386a29030020022903307c21040c010b024020064104490d002001200341046a2203360210200241e0006a200620076a417c6a350000422086200735000084200585420042adfed5e4d485fda8d800420010ce08200241e8006a29030020022903607c21040c010b2001200341046a2203360210200241f0006a200620076a417f6a310000422086200733000084200585420042adfed5e4d485fda8d800420010ce08200241f8006a29030020022903707c21040b2001200437030002400240200041cc006a2d00000d002001200341016a36021020022004420042adfed5e4d485fda8d800420010ce08200241086a29030020022903007c21040c010b200241206a2004420185420042adfed5e4d485fda8d800420010ce082001200341026a360210200241106a200241206a41086a29030020022903207c200041cd006a31000085420042adfed5e4d485fda8d800420010ce08200241106a41086a29030020022903107c21040b20012004370300200241b0016a24000b820f06087f017e067f017e017f027e230041c0006b220324000240200128020c220441016a22052004490d000240024002400240200520012802002206200641016a220741037641076c20064108491b22064101764d0d00024002402005200641016a2206200520064b1b22050d0041c08ec1002108410021094100210a0c010b0240024020054108490d000240200541ffffffff01712005470d00417f2005410374220541076e417f6a677641016a41012005410d4b1b21050c020b41d5edc400411c41f4edc400103c000b4104410820054104491b21050b2005ad42d0007e220b422088a70d04200ba72206200541046a22096a22082006490d04200810322208450d03200820066a220841ff01200910cb081a2005417f6a2209200541037641076c20094108491b210a0b200141046a280200220c41046a210d200c20076a210e200c280200417f734180818284787121072002280200220f41086a211003400240024020070d0002400340200d200e4f0d01200c41c07d6a210c200d2802002105200d41046a2206210d2005418081828478712205418081828478460d000b2005418081828478732207417f6a20077121112006210d0c020b2001200436020c200041003602002001200a20046b3602082001280200210520012009360200200141046a22062802002107200620083602002005450d042007200541016aad42d0007ea76b102c0c040b2007417f6a20077121110b2010290300210b200f290300211241002105200341003602382003200b37033020032012370328200c41002007684103766b41d0006c6a41b07f6a2213200341286a10a5032003290328220b200b200329033022128520128920032802384101461b220ba721060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b200820056a200ba741197622063a00002005417c6a20097120086a41046a20063a00002008410020056b41d0006c6a41b07f6a201341d00010c9081a201121070c000b0b4100210641002105024003400240024020064101710d00200520074f0d0320052106200541016a21050c010b200541036a220620054922080d0220062007492209450d022007200541046a20081b200720091b21050b200141046a28020020066a220620062802002206410776417f73418182840871200641fffefdfb07726a360200410121060c000b0b200141046a280200210502400240200128020041016a22064104490d00200520066a20052800003600000c010b200541046a2005200610ca081a0b4100210502402001280200220a417f460d00200141046a210c2002280200220f41086a21104100210503400240200c2802002206200522136a2d0000418001470d00410020136b2104024003402010290300210b200f290300211241002105200341003602382003200b370330200320123703282006200441d0006c6a220e41b07f6a220d200341286a10a503200c2802002109200128020021082003290328220b200b200329033022128520128920032802384101461b220ba7221121060340200541046a2205200620087122076a2106200920076a280000418081828478712202450d000b0240200920026841037620076a20087122056a2c00004100480d002009280200418081828478716841037621050b2005200820117122066b201320066b732008714104490d01200920056a22062d000021072006200ba741197622023a00002005417c6a20087120096a41046a20023a00000240200741ff01460d00200c280200410020056b41d0006c6a220741b07f6a2205290200210b2005200d290200370200200541186a220629020021122006200d41186a2208290200370200200541106a220629020021142006200d41106a2209290200370200200541086a220529020021152005200d41086a2206290200370200200d200b370200200620153702002009201437020020082012370200200741506a220541186a2208290200210b2008200e41506a220641186a2209290200370200200541106a220829020021122008200641106a2202290200370200200541086a220829020021142008200641086a220d2902003702002005290200211520052006290200370200200620153702002009200b37020020022012370200200d2014370200200741706a220541086a2207290000210b2007200e41706a220641086a22082900003700002005290000211220052006290000370000200620123700002008200b370000200c28020021060c010b0b200c280200220620136a41ff013a0000200620012802002013417c6a716a41046a41ff013a0000200c280200410020056b41d0006c6a41b07f6a200d41d00010c9081a0c010b200920136a200ba741197622053a000020082013417c6a7120096a41046a20053a00000b201341016a21052013200a470d000b20012802002205200541016a41037641076c20054108491b21050b2000410036020020012005200128020c6b3602080b200341c0006a24000f0b1039000b41d5edc400411c41f4edc400103c000b41d5edc400411c41f4edc400103c000bdc0803017f047e037f230041d00b6b22032400200341d8036a200141e80110c9081a024002400240200241ff01714101460d00200341ec016a200341d8036a41e80110c9081a0c010b200341a80b6a200341d8036a10a803200341d0076a200341d8036a41e80110c9081a024020032d00a80b4101460d00200341b8096a41076a200341d0076a41e80110c9081a200341e0056a200341b8096a41ef0110c9081a200341ec016a200341e0056a41076a41e80110c9081a0c010b200341b8096a41186a200341c10b6a290000370300200341b8096a41106a200341b90b6a290000370300200341b8096a41086a200341b10b6a290000370300200320032900a90b3703b809200341d0076a10a201200341e0056a200341b8096a41ef0110c9081a200341c0056a41186a200341e0056a41186a2900002204370300200341c0056a41106a200341e0056a41106a2900002205370300200341c0056a41086a200341e0056a41086a2900002206370300200320032900e00522073703c005200341c2096a2006370100200341ca096a2005370100200341d2096a200437010020034180023b01b809200320073701ba09200341e8016a200341b8096a10c70220004100360200200041046a200341e8016a41ec0110c9081a0c010b2003200341e8016a41046a41e80110c908220120023a00b809200141c0096a200141e80110c90821080240024002400240200241ff017122090d0020012903c0094201520d00200141c8096a2d00004101460d010b200141d8036a200141e0056a41046a200841e80110c90841e80110c9081a200120023a00b8092008200141d8036a41e80110c908210820090d0220012903c0094201520d02200141c8096a22092d00004102470d0220012802ec09220a0e03010201020b200120012802cc093602ec01200141013a00e801200141e0056a200141e8016a10c702200810a20120004100360200200041046a200141e0056a41ec0110c9081a0c020b200141f0096a280200210820012802f4092102200141f2016a200941096a290000370100200141fa016a200941116a29000037010020014182026a200941196a29000037010020014180023b01e801200120092900013701ea01200141e0056a200141e8016a10c7020240200a4101470d002008410020021b2208450d002002450d002008102c0b20004100360200200041046a200141e0056a41ec0110c9081a0c010b200141d0076a200141e4056a200841e80110c908220941e80110c9081a200120023a00b809200141b8096a41086a200141d0076a41e80110c908210802400240200241ff01714102470d0020012903c0094201520d00200141c8096a2d00004101470d0020012802cc0941e807490d010b200141e8016a2009200841e80110c90841e80110c9081a200041086a200141e8016a41e80110c9081a200041013602000c010b200141003b01a80b200141e0056a200141a80b6a10c702200810a20120004100360200200041046a200141e0056a41ec0110c9081a0b200341d00b6a24000bb50504057f017e027f037e230041e0016b22022400024002400240024020012903004201520d00200141086a2103024020012d000822014101470d0020032802042101410410322203450d022002420437022c20022003360228200241286a41004104102f2002280228200228023022036a41f0c2c98b063600002002200341046a2203360230200241286a20034104102f20022802282204200228023022036a20013600002002200341046a2201360230200241003a00980120042105410021030340200241003a0058200241d8006a20052001410047220610c9081a024020010d00200241003a00580b20012006490d04200241f8006a20036a20022d00583a00002002200341016a22033a009801200120066b2101200520066a210520034120470d000b200241d8006a41186a200241f8006a41186a22012903002207370300200241386a41086a2205200241f8006a41086a2203290300370300200241386a41106a2208200241f8006a41106a2206290300370300200241386a41186a2209200737030020022002290378370338200120092903003703002006200829030037030020032005290300370300200220022903383703780240200228022c450d002004102c0b200241086a41086a20032903002207370300200241086a41106a2006290300220a370300200241086a41186a2001290300220b37030020022002290378220c370308200041196a200b370000200041116a200a370000200041096a20073700002000200c370001200041013a00000c040b20014102470d00024020032802240e03000100010b200041013a000020002003290001370001200041196a200341196a290000370000200041116a200341116a290000370000200041096a200341096a2900003700000c030b200041003a00000c020b1039000b2006200141d0b8c8001058000b200241e0016a24000bbb0302037f017e20004201370200200041086a2202410036020002400240024002400240024020012802000e050001020304050b200041004101102f2000280200200228020022036a41013a00002002200341016a3602002000200141046a10aa030f0b200041004101102f2000280200200228020022036a41023a00002002200341016a220336020020012802042104200020034104102f2000280200200228020022036a20043600002002200341046a3602002000200141086a10aa030f0b200041004101102f2000280200200228020022036a41033a00002002200341016a2203360200200141086a2903002105200020034108102f2000280200200228020022006a20053700002002200041086a3602000f0b200041004101102f2000280200200228020022036a41043a00002002200341016a220336020020012802042101200020034104102f2000280200200228020022006a20013600002002200041046a3602000f0b200041004101102f2000280200200228020022036a41053a00002002200341016a220336020020012802042101200020034104102f2000280200200228020022006a20013600002002200041046a3602000b0b920202047f017e20012802002102200020012802082203108f010240024020030d00200041086a28020021040c010b2002200341286c6a2105200041086a220328020021040340200020044120102f200028020020032802006a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002003200328020041206a2204360200200241206a2903002106200020044108102f200028020020032802006a20063700002003200328020041086a22043602002005200241286a2202470d000b0b200128020c2103200020044104102f2000280200200041086a22022802006a20033600002002200228020041046a3602000bd34009047f017e017f027e037f037e017f017e117f230041900d6b220224000240024002402001280200220328020422044108490d002003280200220529000021062003200441786a3602042003200541086a360200200128020022032802042204450d01200328020022052d0000210720032004417f6a3602042003200541016a36020002400240024002400240024020070e020001070b2001280200220328020422044108490d062003280200220529000021082003200441786a3602042003200541086a36020041002103200241003a00e80c0240024002400340200128020022042802042205450d01200241c80c6a20036a200428020022072d00003a000020042005417f6a3602042004200741016a3602002002200341016a22033a00e80c20034120470d000b200241880a6a41186a200241c80c6a41186a2903002209370300200241c8096a41086a2203200241c80c6a41086a290300370300200241c8096a41106a2204200241c80c6a41106a290300370300200241c8096a41186a22052009370300200220022903c80c3703c809200241a8076a41186a22072005290300370300200241a8076a41106a22052004290300370300200241a8076a41086a22042003290300370300200220022903c8093703a80720024188076a41186a200729030037030020024188076a41106a200529030037030020024188076a41086a2004290300370300200220022903a8073703880741002103200241003a00e80c0340200128020022042802042205450d02200241c80c6a20036a200428020022072d00003a000020042005417f6a3602042004200741016a3602002002200341016a22033a00e80c20034120470d000b200241880a6a41186a200241c80c6a41186a2903002209370300200241c8096a41086a2204200241c80c6a41086a290300370300200241c8096a41106a2205200241c80c6a41106a290300370300200241c8096a41186a22072009370300200220022903c80c3703c80920012802002203280204220a4104490d092003280200220b280000210c2003200a417c6a3602042003200b41046a360200200241a8086a41086a2004290300370300200241a8086a41106a2005290300370300200241a8086a41186a2007290300370300200220022903c8093703a808200241c80c6a200110ac0320022d00c80c4101460d09200241880a6a41386a200241810d6a2900002209370300200241880a6a41306a200241f90c6a290000220d370300200241880a6a41286a200241f10c6a290000220e370300200241880a6a41206a200241e90c6a290000220f370300200241c8096a41086a2203200241d10c6a290000370300200241c8096a41106a2204200241d90c6a290000370300200241c8096a41186a2205200241e10c6a290000370300200241c8096a41206a2207200f370300200241c8096a41286a220a200e370300200241c8096a41306a220b200d370300200241c8096a41386a22102009370300200220022900c90c3703c809200241a8076a41386a2010290300370300200241a8076a41306a200b290300370300200241a8076a41286a200a290300370300200241a8076a41206a2007290300370300200241a8076a41186a2005290300370300200241a8076a41106a2004290300370300200241a8076a41086a2003290300370300200220022903c8093703a80720024188086a41186a2203200241a8086a41186a29030037030020024188086a41106a2204200241a8086a41106a29030037030020024188086a41086a2205200241a8086a41086a290300370300200220022903a80837038808200241e8076a41186a2003290300370300200241e8076a41106a2004290300370300200241e8076a41086a200529030037030020022002290388083703e80741002103200241003a00e80c0340200128020022042802042205450d03200241c80c6a20036a200428020022072d00003a000020042005417f6a3602042004200741016a3602002002200341016a22033a00e80c20034120470d000b200241880a6a41186a200241c80c6a41186a2903002209370300200241c8096a41086a2204200241c80c6a41086a290300370300200241c8096a41106a2205200241c80c6a41106a290300370300200241c8096a41186a22072009370300200220022903c80c3703c80920012802002203280204220a4104490d0920032802002210280000210b2003200a417c6a3602042003201041046a360200200241a8086a41086a2004290300370300200241a8086a41106a2005290300370300200241a8086a41186a2007290300370300200220022903c8093703a808200241c80c6a200110ac0320022d00c80c4101460d09200241880a6a41386a200241810d6a2900002209370300200241880a6a41306a200241f90c6a290000220d370300200241880a6a41286a200241f10c6a290000220e370300200241880a6a41206a200241e90c6a290000220f370300200241880a6a41186a200241e10c6a2900002211370300200241c8096a41086a2201200241d10c6a290000370300200241c8096a41106a2203200241d90c6a290000370300200241c8096a41186a22042011370300200241c8096a41206a2205200f370300200241c8096a41286a2207200e370300200241c8096a41306a220a200d370300200241c8096a41386a22102009370300200220022900c90c3703c809200241c8056a41386a22122010290300370300200241c8056a41306a2210200a290300370300200241c8056a41286a220a2007290300370300200241c8056a41206a22072005290300370300200241c8056a41186a22052004290300370300200241c8056a41106a22042003290300370300200241c8056a41086a22032001290300370300200220022903c8093703c80520024188086a41186a2201200241a8086a41186a29030037030020024188086a41106a2213200241a8086a41106a29030037030020024188086a41086a2214200241a8086a41086a290300370300200220022903a8083703880820024188066a41186a2215200129030037030020024188066a41106a2201201329030037030020024188066a41086a22132014290300370300200220022903880837038806200241a8056a41186a221420024188076a41186a290300370300200241a8056a41106a221620024188076a41106a290300370300200241a8056a41086a221720024188076a41086a29030037030020022002290388073703a805200241e8066a41186a2218200241e8076a41186a290300370300200241e8066a41106a2219200241e8076a41106a290300370300200241e8066a41086a221a200241e8076a41086a290300370300200220022903e8073703e806200241a8066a41386a221b200241a8076a41386a290300370300200241a8066a41306a221c200241a8076a41306a290300370300200241a8066a41286a221d200241a8076a41286a290300370300200241a8066a41206a221e200241a8076a41206a290300370300200241a8066a41186a221f200241a8076a41186a290300370300200241a8066a41106a2220200241a8076a41106a290300370300200241a8066a41086a2221200241a8076a41086a290300370300200220022903a8073703a80620024188056a41186a2222201829030037030020024188056a41106a2218201929030037030020024188056a41086a2219201a290300370300200220022903e80637038805200241c8046a41386a221a201b290300370300200241c8046a41306a221b201c290300370300200241c8046a41286a221c201d290300370300200241c8046a41206a221d201e290300370300200241c8046a41186a221e201f290300370300200241c8046a41106a221f2020290300370300200241c8046a41086a22202021290300370300200220022903a8063703c804200241a8046a41186a22212015290300370300200241a8046a41106a22152001290300370300200241a8046a41086a2201201329030037030020022002290388063703a804200241e8036a41386a22132012290300370300200241e8036a41306a22122010290300370300200241e8036a41286a2210200a290300370300200241e8036a41206a220a2007290300370300200241e8036a41186a22072005290300370300200241e8036a41106a22052004290300370300200241e8036a41086a22042003290300370300200220022903c8053703e803200241c8036a41186a22032014290300370300200241c8036a41106a22142016290300370300200241c8036a41086a22162017290300370300200220022903a8053703c803200241a8036a41186a2022290300370300200241a8036a41106a2018290300370300200241a8036a41086a201929030037030020022002290388053703a803200241e8026a41386a201a290300370300200241e8026a41306a201b290300370300200241e8026a41286a201c290300370300200241e8026a41206a201d290300370300200241e8026a41186a201e290300370300200241e8026a41106a201f290300370300200241e8026a41086a2020290300370300200220022903c8043703e802200241c8026a41186a2021290300370300200241c8026a41106a2015290300370300200241c8026a41086a2001290300370300200220022903a8043703c80220024188026a41386a201329030037030020024188026a41306a201229030037030020024188026a41286a201029030037030020024188026a41206a200a29030037030020024188026a41186a200729030037030020024188026a41106a200529030037030020024188026a41086a2004290300370300200220022903e80337038802200241e8016a41186a2003290300370300200241e8016a41106a2014290300370300200241e8016a41086a2016290300370300200220022903c8033703e801420021090c040b200341ff0171450d08200241003a00e80c0c080b200341ff0171450d07200241003a00e80c0c070b200341ff0171450d06200241003a00e80c0c060b2001280200220328020422044108490d052003280200220529000021082003200441786a3602042003200541086a36020041002103200241003a00e80c0340200128020022042802042205450d02200241c80c6a20036a200428020022072d00003a000020042005417f6a3602042004200741016a3602002002200341016a22033a00e80c20034120470d000b200241880a6a41186a200241c80c6a41186a2903002209370300200241c8096a41086a2203200241c80c6a41086a290300370300200241c8096a41106a2204200241c80c6a41106a290300370300200241c8096a41186a22052009370300200220022903c80c3703c809200241a8076a41186a22072005290300370300200241a8076a41106a22052004290300370300200241a8076a41086a22042003290300370300200220022903c8093703a80720024188076a41186a200729030037030020024188076a41106a200529030037030020024188076a41086a2004290300370300200220022903a8073703880741002103200241003a00e80c0340200128020022042802042205450d03200241c80c6a20036a200428020022072d00003a000020042005417f6a3602042004200741016a3602002002200341016a22033a00e80c20034120470d000b200241880a6a41186a200241c80c6a41186a2903002209370300200241c8096a41086a2204200241c80c6a41086a290300370300200241c8096a41106a2205200241c80c6a41106a290300370300200241c8096a41186a22072009370300200220022903c80c3703c80920012802002203280204220a4104490d052003280200220b280000210c2003200a417c6a3602042003200b41046a360200200241a8086a41086a2004290300370300200241a8086a41106a2005290300370300200241a8086a41186a2007290300370300200220022903c8093703a808200241c80c6a200110ac0320022d00c80c4101460d05200241880a6a41386a200241810d6a2900002209370300200241880a6a41306a200241f90c6a290000220d370300200241880a6a41286a200241f10c6a290000220e370300200241880a6a41206a200241e90c6a290000220f370300200241c8096a41086a2203200241d10c6a290000370300200241c8096a41106a2204200241d90c6a290000370300200241c8096a41186a2205200241e10c6a290000370300200241c8096a41206a2207200f370300200241c8096a41286a220a200e370300200241c8096a41306a220b200d370300200241c8096a41386a22102009370300200220022900c90c3703c809200241a8076a41386a2010290300370300200241a8076a41306a200b290300370300200241a8076a41286a200a290300370300200241a8076a41206a2007290300370300200241a8076a41186a2005290300370300200241a8076a41106a2004290300370300200241a8076a41086a2003290300370300200220022903c8093703a80720024188086a41186a2203200241a8086a41186a29030037030020024188086a41106a2204200241a8086a41106a29030037030020024188086a41086a2205200241a8086a41086a290300370300200220022903a80837038808200241e8076a41186a2003290300370300200241e8076a41106a2004290300370300200241e8076a41086a200529030037030020022002290388083703e80741002103200241003a00e80c0340200128020022042802042205450d04200241c80c6a20036a200428020022072d00003a000020042005417f6a3602042004200741016a3602002002200341016a22033a00e80c20034120470d000b200241880a6a41186a200241c80c6a41186a2903002209370300200241c8096a41086a2204200241c80c6a41086a290300370300200241c8096a41106a2205200241c80c6a41106a290300370300200241c8096a41186a22072009370300200220022903c80c3703c80920012802002203280204220a4104490d0520032802002210280000210b2003200a417c6a3602042003201041046a360200200241a8086a41086a2004290300370300200241a8086a41106a2005290300370300200241a8086a41186a2007290300370300200220022903c8093703a808200241c80c6a200110ac0320022d00c80c4101460d05200241880a6a41386a200241810d6a2900002209370300200241880a6a41306a200241f90c6a290000220d370300200241880a6a41286a200241f10c6a290000220e370300200241880a6a41206a200241e90c6a290000220f370300200241880a6a41186a200241e10c6a2900002211370300200241c8096a41086a2201200241d10c6a290000370300200241c8096a41106a2203200241d90c6a290000370300200241c8096a41186a22042011370300200241c8096a41206a2205200f370300200241c8096a41286a2207200e370300200241c8096a41306a220a200d370300200241c8096a41386a22102009370300200220022900c90c3703c809200241c8056a41386a22122010290300370300200241c8056a41306a2210200a290300370300200241c8056a41286a220a2007290300370300200241c8056a41206a22072005290300370300200241c8056a41186a22052004290300370300200241c8056a41106a22042003290300370300200241c8056a41086a22032001290300370300200220022903c8093703c80520024188086a41186a2201200241a8086a41186a29030037030020024188086a41106a2213200241a8086a41106a29030037030020024188086a41086a2214200241a8086a41086a290300370300200220022903a8083703880820024188066a41186a2215200129030037030020024188066a41106a2201201329030037030020024188066a41086a22132014290300370300200220022903880837038806200241a8056a41186a221420024188076a41186a290300370300200241a8056a41106a221620024188076a41106a290300370300200241a8056a41086a221720024188076a41086a29030037030020022002290388073703a805200241e8066a41186a2218200241e8076a41186a290300370300200241e8066a41106a2219200241e8076a41106a290300370300200241e8066a41086a221a200241e8076a41086a290300370300200220022903e8073703e806200241a8066a41386a221b200241a8076a41386a290300370300200241a8066a41306a221c200241a8076a41306a290300370300200241a8066a41286a221d200241a8076a41286a290300370300200241a8066a41206a221e200241a8076a41206a290300370300200241a8066a41186a221f200241a8076a41186a290300370300200241a8066a41106a2220200241a8076a41106a290300370300200241a8066a41086a2221200241a8076a41086a290300370300200220022903a8073703a80620024188056a41186a2222201829030037030020024188056a41106a2218201929030037030020024188056a41086a2219201a290300370300200220022903e80637038805200241c8046a41386a221a201b290300370300200241c8046a41306a221b201c290300370300200241c8046a41286a221c201d290300370300200241c8046a41206a221d201e290300370300200241c8046a41186a221e201f290300370300200241c8046a41106a221f2020290300370300200241c8046a41086a22202021290300370300200220022903a8063703c804200241a8046a41186a22212015290300370300200241a8046a41106a22152001290300370300200241a8046a41086a2201201329030037030020022002290388063703a804200241e8036a41386a22132012290300370300200241e8036a41306a22122010290300370300200241e8036a41286a2210200a290300370300200241e8036a41206a220a2007290300370300200241e8036a41186a22072005290300370300200241e8036a41106a22052004290300370300200241e8036a41086a22042003290300370300200220022903c8053703e803200241c8036a41186a22032014290300370300200241c8036a41106a22142016290300370300200241c8036a41086a22162017290300370300200220022903a8053703c803200241a8036a41186a2022290300370300200241a8036a41106a2018290300370300200241a8036a41086a201929030037030020022002290388053703a803200241e8026a41386a201a290300370300200241e8026a41306a201b290300370300200241e8026a41286a201c290300370300200241e8026a41206a201d290300370300200241e8026a41186a201e290300370300200241e8026a41106a201f290300370300200241e8026a41086a2020290300370300200220022903c8043703e802200241c8026a41186a2021290300370300200241c8026a41106a2015290300370300200241c8026a41086a2001290300370300200220022903a8043703c80220024188026a41386a201329030037030020024188026a41306a201229030037030020024188026a41286a201029030037030020024188026a41206a200a29030037030020024188026a41186a200729030037030020024188026a41106a200529030037030020024188026a41086a2004290300370300200220022903e80337038802200241e8016a41186a2003290300370300200241e8016a41106a2014290300370300200241e8016a41086a2016290300370300200220022903c8033703e801420121090b200241c8016a41186a2201200241a8036a41186a290300370300200241c8016a41106a2203200241a8036a41106a290300370300200241c8016a41086a2204200241a8036a41086a29030037030020024188016a41086a2205200241e8026a41086a29030037030020024188016a41106a2207200241e8026a41106a29030037030020024188016a41186a220a200241e8026a41186a29030037030020024188016a41206a2210200241e8026a41206a29030037030020024188016a41286a2212200241e8026a41286a29030037030020024188016a41306a2213200241e8026a41306a29030037030020024188016a41386a2214200241e8026a41386a290300370300200220022903a8033703c801200220022903e80237038801200241e8006a41186a2215200241c8026a41186a290300370300200241e8006a41106a2216200241c8026a41106a290300370300200241e8006a41086a2217200241c8026a41086a290300370300200241286a41386a221820024188026a41386a290300370300200241286a41306a221920024188026a41306a290300370300200241286a41286a221a20024188026a41286a290300370300200241286a41206a221b20024188026a41206a290300370300200241286a41186a221c20024188026a41186a290300370300200241286a41106a221d20024188026a41106a290300370300200241286a41086a221e20024188026a41086a290300370300200220022903c8023703682002200229038802370328200241086a41186a221f200241e8016a41186a290300370300200241086a41106a2220200241e8016a41106a290300370300200241086a41086a2221200241e8016a41086a290300370300200220022903e801370308200041186a200c360200200020083703102000200937030820002006370300200020022903c80137021c200041246a20042903003702002000412c6a2003290300370200200041346a2001290300370200200020022903880137023c200041c4006a2005290300370200200041cc006a2007290300370200200041d4006a200a290300370200200041dc006a2010290300370200200041e4006a2012290300370200200041ec006a2013290300370200200041f4006a2014290300370200200041fc006a200b36020020004198016a201529030037030020004190016a201629030037030020004188016a201729030037030020004180016a2002290368370300200041d8016a2018290300370300200041d0016a2019290300370300200041c8016a201a290300370300200041c0016a201b290300370300200041b8016a201c290300370300200041b0016a201d290300370300200041a8016a201e290300370300200041a0016a2002290328370300200041f8016a201f290300370300200041f0016a2020290300370300200041e8016a2021290300370300200041e0016a20022903083703000c050b200341ff0171450d03200241003a00e80c0c030b200341ff0171450d02200241003a00e80c0c020b200341ff0171450d01200241003a00e80c0c010b200042023703080c010b200042023703080b200241900d6a24000bb40301077f230041d0016b2202240041002103200241003a0048024002400340200128020022042802042205450d01200241086a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a0048200341c000470d000b200241d0006a41086a2203200241086a41086a290300370300200241d0006a41106a2204200241086a41106a290300370300200241d0006a41186a2205200241086a41186a290300370300200241d0006a41206a2206200241086a41206a290300370300200241d0006a41286a2201200241086a41286a290300370300200241d0006a41306a2207200241086a41306a290300370300200241d0006a41386a2208200241086a41386a29030037030020022002290308370350200041396a2008290300370000200041316a2007290300370000200041296a2001290300370000200041216a2006290300370000200041196a2005290300370000200041116a2004290300370000200041096a200329030037000020002002290350370001200041003a00000c010b200041013a0000200341ff0171450d00200241003a00480b200241d0016a24000b9b3a09037f017e037f017e047f017e017f017e0f7f230041b00b6b22022400024002400240200128020422034108490d002001280200220429000021052001200341786a22063602042001200441086a22073602002006450d0120072d000021062001200341776a22083602042001200741016a36020002400240024002400240024020060e020001070b20084108490d062007290001210920012003416f6a220a3602042001200741096a36020041002107200241003a00e80920032106200a210b0240024002400340200a2007460d01200241c8096a20076a200420076a220841116a2d00003a000020012006416e6a3602042001200841126a3602002002200741016a22083a00e8092006417f6a2106200b417f6a210b2008210720084120470d000b200241a8076a41086a2207200241c8096a41086a290300370300200241a8076a41106a220a200241c8096a41106a290300370300200241a8076a41186a220c200241c8096a41186a290300370300200220022903c8093703a807200841ff0171411f4d0d09200320086b416f6a210d200241c8086a41086a2007290300220e37030020024188076a41186a200c29030037030020024188076a41106a200a29030037030020024188076a41086a200e370300200220022903a807220e3703c8082002200e3703880741002107200241003a00e809200420086a210f2006416e6a210a0340200d2007460d02200241c8096a20076a200f20076a220c41116a2d00003a00002001200a3602042001200c41126a3602002002200741016a220c3a00e809200a417f6a210a2003417f6a2103200c2107200c4120470d000b200241f00a6a41086a2207200241c8096a41086a290300370300200241f00a6a41106a2203200241c8096a41106a290300370300200241f00a6a41186a220a200241c8096a41186a290300370300200220022903c8093703f00a200c41ff0171411f4d0d09200241c8086a41086a2007290300370300200241c8086a41106a2003290300370300200241c8086a41186a200a290300370300200220022903f00a3703c8082006200c6b2207416f6a4104490d092004200b411f200b411f491b6a20086a41126a280000210820012007416b6a360204200241a8086a41086a2207200241c8086a41086a290300370300200241a8086a41106a2203200241c8086a41106a290300370300200241a8086a41186a2204200241c8086a41186a2903003703002001200f200c6a41156a360200200220022903c8083703a808200241c8096a200110ae0320022d00c8094101460d09200241e8076a41086a2007290300370300200241e8076a41106a2003290300370300200241e8076a41186a2004290300370300200241a8076a41086a200241d1096a290000370300200241a8076a41106a200241d9096a290000370300200241a8076a41186a200241e1096a290000370300200241a8076a41206a200241e9096a290000370300200241d0076a200241f1096a290000370300200241d8076a200241f9096a290000370300200241e0076a200241810a6a290000370300200220022903a8083703e807200220022900c9093703a80741002107200241003a00e80920012802042106417f2103034020062007460d03200241c8096a20076a200128020022042d00003a00002001200620036a3602042001200441016a3602002002200741016a22043a00e8092003417f6a21032004210720044120470d000b200241f00a6a41086a2207200241c8096a41086a290300370300200241f00a6a41106a2203200241c8096a41106a290300370300200241f00a6a41186a220b200241c8096a41186a290300370300200220022903c8093703f00a200441ff0171411f4d0d09200241c8086a41086a2007290300370300200241c8086a41106a2003290300370300200241c8086a41186a200b290300370300200220022903f00a3703c808200620046b22074104490d0920012802002204280000210320012007417c6a3602042001200441046a360200200241a8086a41086a2207200241c8086a41086a290300370300200241a8086a41106a2204200241c8086a41106a290300370300200241a8086a41186a2206200241c8086a41186a290300370300200220022903c8083703a808200241c8096a200110ae0320022d00c8094101460d0920024188086a41186a2006290300220e37030020024188086a41106a2004290300221037030020024188066a41086a2201200729030037030020024188066a41106a2207201037030020024188066a41186a2204200e370300200241c8056a41086a2206200241d1096a290000370300200241c8056a41106a220b200241d9096a290000370300200241c8056a41186a220a200241e1096a290000370300200241c8056a41206a220c200241e9096a290000370300200241c8056a41286a220d200241f1096a290000370300200241c8056a41306a220f200241f9096a290000370300200241c8056a41386a2211200241810a6a290000370300200220022903a80837038806200220022900c9093703c805200241a8056a41186a221220024188076a41186a290300370300200241a8056a41106a221320024188076a41106a290300370300200241a8056a41086a221420024188076a41086a290300370300200241e8066a41186a2215200241e8076a41186a290300370300200241e8066a41106a2216200241e8076a41106a290300370300200241e8066a41086a2217200241e8076a41086a290300370300200241a8066a41386a2218200241a8076a41386a290300370300200241a8066a41306a2219200241a8076a41306a290300370300200241a8066a41286a221a200241a8076a41286a290300370300200241a8066a41206a221b200241a8076a41206a290300370300200241a8066a41186a221c200241a8076a41186a290300370300200241a8066a41106a221d200241a8076a41106a290300370300200241a8066a41086a221e200241a8076a41086a29030037030020022002290388073703a805200220022903e8073703e806200220022903a8073703a80620024188056a41186a221f201529030037030020024188056a41106a2215201629030037030020024188056a41086a22162017290300370300200220022903e80637038805200241c8046a41386a22172018290300370300200241c8046a41306a22182019290300370300200241c8046a41286a2219201a290300370300200241c8046a41206a221a201b290300370300200241c8046a41186a221b201c290300370300200241c8046a41106a221c201d290300370300200241c8046a41086a221d201e290300370300200220022903a8063703c804200241a8046a41186a221e2004290300370300200241a8046a41106a22042007290300370300200241a8046a41086a2207200129030037030020022002290388063703a804200241e8036a41386a22012011290300370300200241e8036a41306a2211200f290300370300200241e8036a41286a220f200d290300370300200241e8036a41206a220d200c290300370300200241e8036a41186a220c200a290300370300200241e8036a41106a220a200b290300370300200241e8036a41086a220b2006290300370300200220022903c8053703e803200241c8036a41186a22062012290300370300200241c8036a41106a22122013290300370300200241c8036a41086a22132014290300370300200220022903a8053703c803200241a8036a41186a201f290300370300200241a8036a41106a2015290300370300200241a8036a41086a201629030037030020022002290388053703a803200241e8026a41386a2017290300370300200241e8026a41306a2018290300370300200241e8026a41286a2019290300370300200241e8026a41206a201a290300370300200241e8026a41186a201b290300370300200241e8026a41106a201c290300370300200241e8026a41086a201d290300370300200220022903c8043703e802200241c8026a41186a201e290300370300200241c8026a41106a2004290300370300200241c8026a41086a2007290300370300200220022903a8043703c80220024188026a41386a200129030037030020024188026a41306a201129030037030020024188026a41286a200f29030037030020024188026a41206a200d29030037030020024188026a41186a200c29030037030020024188026a41106a200a29030037030020024188026a41086a200b290300370300200220022903e80337038802200241e8016a41186a2006290300370300200241e8016a41106a2012290300370300200241e8016a41086a2013290300370300200220022903c8033703e8014200210e0c040b200741ff0171450d08200241003a00e8090c080b200741ff0171450d07200241003a00e8090c070b200741ff0171450d06200241003a00e8090c060b20084108490d052007290001210920012003416f6a220a3602042001200741096a36020041002107200241003a00e80920032106200a210b0340200a2007460d02200241c8096a20076a200420076a220841116a2d00003a000020012006416e6a3602042001200841126a3602002002200741016a22083a00e8092006417f6a2106200b417f6a210b2008210720084120470d000b200241a8076a41086a2207200241c8096a41086a290300370300200241a8076a41106a220a200241c8096a41106a290300370300200241a8076a41186a220c200241c8096a41186a290300370300200220022903c8093703a807200841ff0171411f4d0d05200320086b416f6a210d200241c8086a41086a2007290300220e37030020024188076a41186a200c29030037030020024188076a41106a200a29030037030020024188076a41086a200e370300200220022903a807220e3703c8082002200e3703880741002107200241003a00e809200420086a210f2006416e6a210a0340200d2007460d03200241c8096a20076a200f20076a220c41116a2d00003a00002001200a3602042001200c41126a3602002002200741016a220c3a00e809200a417f6a210a2003417f6a2103200c2107200c4120470d000b200241f00a6a41086a2207200241c8096a41086a290300370300200241f00a6a41106a2203200241c8096a41106a290300370300200241f00a6a41186a220a200241c8096a41186a290300370300200220022903c8093703f00a200c41ff0171411f4d0d05200241c8086a41086a2007290300370300200241c8086a41106a2003290300370300200241c8086a41186a200a290300370300200220022903f00a3703c8082006200c6b2207416f6a4104490d052004200b411f200b411f491b6a20086a41126a280000210820012007416b6a360204200241a8086a41086a2207200241c8086a41086a290300370300200241a8086a41106a2203200241c8086a41106a290300370300200241a8086a41186a2204200241c8086a41186a2903003703002001200f200c6a41156a360200200220022903c8083703a808200241c8096a200110ae0320022d00c8094101460d05200241e8076a41086a2007290300370300200241e8076a41106a2003290300370300200241e8076a41186a2004290300370300200241a8076a41086a200241d1096a290000370300200241a8076a41106a200241d9096a290000370300200241a8076a41186a200241e1096a290000370300200241a8076a41206a200241e9096a290000370300200241d0076a200241f1096a290000370300200241d8076a200241f9096a290000370300200241e0076a200241810a6a290000370300200220022903a8083703e807200220022900c9093703a80741002107200241003a00e80920012802042106417f2103034020062007460d04200241c8096a20076a200128020022042d00003a00002001200620036a3602042001200441016a3602002002200741016a22043a00e8092003417f6a21032004210720044120470d000b200241f00a6a41086a2207200241c8096a41086a290300370300200241f00a6a41106a2203200241c8096a41106a290300370300200241f00a6a41186a220b200241c8096a41186a290300370300200220022903c8093703f00a200441ff0171411f4d0d05200241c8086a41086a2007290300370300200241c8086a41106a2003290300370300200241c8086a41186a200b290300370300200220022903f00a3703c808200620046b22074104490d0520012802002204280000210320012007417c6a3602042001200441046a360200200241a8086a41086a2207200241c8086a41086a290300370300200241a8086a41106a2204200241c8086a41106a290300370300200241a8086a41186a2206200241c8086a41186a290300370300200220022903c8083703a808200241c8096a200110ae0320022d00c8094101460d0520024188086a41186a2006290300220e37030020024188086a41106a2004290300221037030020024188066a41086a2201200729030037030020024188066a41106a2207201037030020024188066a41186a2204200e370300200241c8056a41086a2206200241d1096a290000370300200241c8056a41106a220b200241d9096a290000370300200241c8056a41186a220a200241e1096a290000370300200241c8056a41206a220c200241e9096a290000370300200241c8056a41286a220d200241f1096a290000370300200241c8056a41306a220f200241f9096a290000370300200241c8056a41386a2211200241810a6a290000370300200220022903a80837038806200220022900c9093703c805200241a8056a41186a221220024188076a41186a290300370300200241a8056a41106a221320024188076a41106a290300370300200241a8056a41086a221420024188076a41086a290300370300200241e8066a41186a2215200241e8076a41186a290300370300200241e8066a41106a2216200241e8076a41106a290300370300200241e8066a41086a2217200241e8076a41086a290300370300200241a8066a41386a2218200241a8076a41386a290300370300200241a8066a41306a2219200241a8076a41306a290300370300200241a8066a41286a221a200241a8076a41286a290300370300200241a8066a41206a221b200241a8076a41206a290300370300200241a8066a41186a221c200241a8076a41186a290300370300200241a8066a41106a221d200241a8076a41106a290300370300200241a8066a41086a221e200241a8076a41086a29030037030020022002290388073703a805200220022903e8073703e806200220022903a8073703a80620024188056a41186a221f201529030037030020024188056a41106a2215201629030037030020024188056a41086a22162017290300370300200220022903e80637038805200241c8046a41386a22172018290300370300200241c8046a41306a22182019290300370300200241c8046a41286a2219201a290300370300200241c8046a41206a221a201b290300370300200241c8046a41186a221b201c290300370300200241c8046a41106a221c201d290300370300200241c8046a41086a221d201e290300370300200220022903a8063703c804200241a8046a41186a221e2004290300370300200241a8046a41106a22042007290300370300200241a8046a41086a2207200129030037030020022002290388063703a804200241e8036a41386a22012011290300370300200241e8036a41306a2211200f290300370300200241e8036a41286a220f200d290300370300200241e8036a41206a220d200c290300370300200241e8036a41186a220c200a290300370300200241e8036a41106a220a200b290300370300200241e8036a41086a220b2006290300370300200220022903c8053703e803200241c8036a41186a22062012290300370300200241c8036a41106a22122013290300370300200241c8036a41086a22132014290300370300200220022903a8053703c803200241a8036a41186a201f290300370300200241a8036a41106a2015290300370300200241a8036a41086a201629030037030020022002290388053703a803200241e8026a41386a2017290300370300200241e8026a41306a2018290300370300200241e8026a41286a2019290300370300200241e8026a41206a201a290300370300200241e8026a41186a201b290300370300200241e8026a41106a201c290300370300200241e8026a41086a201d290300370300200220022903c8043703e802200241c8026a41186a201e290300370300200241c8026a41106a2004290300370300200241c8026a41086a2007290300370300200220022903a8043703c80220024188026a41386a200129030037030020024188026a41306a201129030037030020024188026a41286a200f29030037030020024188026a41206a200d29030037030020024188026a41186a200c29030037030020024188026a41106a200a29030037030020024188026a41086a200b290300370300200220022903e80337038802200241e8016a41186a2006290300370300200241e8016a41106a2012290300370300200241e8016a41086a2013290300370300200220022903c8033703e8014201210e0b200241c8016a41186a2201200241a8036a41186a290300370300200241c8016a41106a2207200241a8036a41106a290300370300200241c8016a41086a2204200241a8036a41086a29030037030020024188016a41086a2206200241e8026a41086a29030037030020024188016a41106a220b200241e8026a41106a29030037030020024188016a41186a220a200241e8026a41186a29030037030020024188016a41206a220c200241e8026a41206a29030037030020024188016a41286a220d200241e8026a41286a29030037030020024188016a41306a220f200241e8026a41306a29030037030020024188016a41386a2211200241e8026a41386a290300370300200220022903a8033703c801200220022903e80237038801200241e8006a41186a2212200241c8026a41186a290300370300200241e8006a41106a2213200241c8026a41106a290300370300200241e8006a41086a2214200241c8026a41086a290300370300200241286a41386a221520024188026a41386a290300370300200241286a41306a221620024188026a41306a290300370300200241286a41286a221720024188026a41286a290300370300200241286a41206a221820024188026a41206a290300370300200241286a41186a221920024188026a41186a290300370300200241286a41106a221a20024188026a41106a290300370300200241286a41086a221b20024188026a41086a290300370300200220022903c8023703682002200229038802370328200241086a41186a221c200241e8016a41186a290300370300200241086a41106a221d200241e8016a41106a290300370300200241086a41086a221e200241e8016a41086a290300370300200220022903e801370308200041186a2008360200200020093703102000200e37030820002005370300200020022903c80137021c200041246a20042903003702002000412c6a2007290300370200200041346a2001290300370200200020022903880137023c200041c4006a2006290300370200200041cc006a200b290300370200200041d4006a200a290300370200200041dc006a200c290300370200200041e4006a200d290300370200200041ec006a200f290300370200200041f4006a2011290300370200200041fc006a200336020020004198016a201229030037030020004190016a201329030037030020004188016a201429030037030020004180016a2002290368370300200041d8016a2015290300370300200041d0016a2016290300370300200041c8016a2017290300370300200041c0016a2018290300370300200041b8016a2019290300370300200041b0016a201a290300370300200041a8016a201b290300370300200041a0016a2002290328370300200041f8016a201c290300370300200041f0016a201d290300370300200041e8016a201e290300370300200041e0016a20022903083703000c050b200741ff0171450d03200241003a00e8090c030b200741ff0171450d02200241003a00e8090c020b200741ff0171450d01200241003a00e8090c010b200042023703080c010b200042023703080b200241b00b6a24000be10502087f077e230041d0026b2202240041002103200241003a00c8012001280204417f6a210402400240024003402004417f460d0120024188016a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8012004417f6a210420052103200541c000470d000b200241d0016a41086a220420024188016a41086a290300370300200241d0016a41106a220120024188016a41106a290300370300200241d0016a41186a220320024188016a41186a290300370300200241d0016a41206a220620024188016a41206a290300370300200241d0016a41286a220720024188016a41286a290300370300200241d0016a41306a220820024188016a41306a290300370300200241d0016a41386a220920024188016a41386a29030037030020022002290388013703d001200541ff0171413f4d0d01200241c8006a41386a22052009290300370300200241c8006a41306a2008290300220a370300200241c8006a41286a2007290300220b370300200241c8006a41206a2006290300220c370300200241c8006a41186a2003290300220d370300200241c8006a41106a2001290300220e370300200241c8006a41086a2004290300220f370300200220022903d0012210370348200241086a41306a2204200a370300200241086a41286a2201200b370300200241086a41206a2203200c370300200241086a41186a2206200d370300200241086a41106a2207200e370300200241086a41086a2208200f370300200241086a41386a2209200529030037030020022010370308200041396a2009290300370000200041316a2004290300370000200041296a2001290300370000200041216a2003290300370000200041196a2006290300370000200041116a2007290300370000200041096a200829030037000020002002290308370001410021040c020b200341ff0171450d00200241003a00c8010b410121040b200020043a0000200241d0026a24000b951103057f057e027f230041d0096b22022400200241286a200110b003024002400240024002400240024002400240024020022802280d00200228022c210320012001280204220441016a2205360204200520012802084b0d0002402003450d0041002105410020036b2103034020054101460d0620032005417f6a2205470d000b0b20012004360204200128020022052802042203450d01200528020022062d0000210420052003417f6a3602042005200641016a360200200441ff00714104470d022004411874411875417f4c0d03420221070c070b200042033703680c080b200042033703680c070b200042033703680c060b41002105200241003a00c804024002400240024002400240024002400340200128020022032802042204450d01200241a8046a20056a200328020022062d00003a000020032004417f6a3602042003200641016a3602002002200541016a22053a00c80420054120470d000b20024180026a41186a200241a8046a41186a2903002207370300200241d8066a41086a200241a8046a41086a290300370300200241d8066a41106a200241a8046a41106a290300370300200241d8066a41186a2007370300200220022903a8043703d806200128020022052802042203450d09200528020022042d0000210620052003417f6a3602042005200441016a36020020060e03010203090b200541ff0171450d08200241003a00c8040c080b200241a8046a200110ac0320022d00a8044101460d0720024180026a41386a200241e1046a290000220737030020024180026a41306a200241d9046a290000220837030020024180026a41286a200241d1046a290000220937030020024180026a41206a200241c9046a290000220a37030020024180026a41186a200241c1046a290000220b370300200241c8076a200241b1046a290000370300200241d0076a200241b9046a290000370300200241c0076a41186a200b370300200241c0076a41206a200a370300200241c0076a41286a2009370300200241c0076a41306a2008370300200241c0076a41386a2007370300200220022900a9043703c007410021030c020b200241a8046a200110ac0320022d00a8044101460d0620024180026a41386a200241e1046a290000220737030020024180026a41306a200241d9046a290000220837030020024180026a41286a200241d1046a290000220937030020024180026a41206a200241c9046a290000220a37030020024180026a41186a200241c1046a290000220b370300200241c8076a200241b1046a290000370300200241d0076a200241b9046a290000370300200241c0076a41186a200b370300200241c0076a41206a200a370300200241c0076a41286a2009370300200241c0076a41306a2008370300200241c0076a41386a2007370300200220022900a9043703c007410121030c010b41002105200241003a00e9040340200128020022032802042204450d02200241a8046a20056a200328020022062d00003a000020032004417f6a3602042003200641016a3602002002200541016a22053a00e904200541c100470d000b20024180026a200241a8046a41c10010c9081a2002418c096a20024180026a41c10010c9081a200241cb086a2002418c096a41c10010c9081a200241c0076a200241cb086a41c10010c9081a410221030b200241ff066a200241c0076a41c10010c9081a200128020022052802042204450d0420052802002206310000210920052004417f6a3602042005200641016a360200200950450d01420021070c020b200541ff0171450d03200241003a00e904420221070c040b200128020022052802042204450d0220052802002206310000210a20052004417f6a3602042005200641016a36020042022009420f838622084204540d0242012107200a4208862009844204882008420c882209420120094201561b7e220920085a0d020b200241206a200110b00320022802200d0120022802242104200241086a200110b1032002290308a70d01200241086a41106a290300210b2002290310210a20024180026a41186a200241d8066a41186a29030037030020024180026a41106a200241d8066a41106a29030037030020024180026a41086a200241d8066a41086a290300370300200220022903d80637038002200241a8046a200241ff066a41c10010c9081a2002418c096a41046a200241d2066a41046a2f01003b0100200220022801d20636028c090c020b103b000b420221070b200241e0016a41186a220520024180026a41186a290300370300200241e0016a41106a220620024180026a41106a290300370300200241e0016a41086a220c20024180026a41086a29030037030020022002290380023703e0012002419f016a200241a8046a41c10010c9081a20024198016a41046a220d2002418c096a41046a2f01003b01002002200228028c093602980120074202510d01200241f8006a41186a2005290300370300200241f8006a41106a2006290300370300200241f8006a41086a200c290300370300200220022903e001370378200241376a2002419f016a41c10010c9081a200241306a41046a200d2f01003b010020022002280298013602300b200241a8046a200110b20320022802a804210520024180026a200241a8046a41047241a40210c9081a024020054119460d0020002002290378370300200020033a0020200041186a200241f8006a41186a290300370300200041106a200241f8006a41106a290300370300200041086a200241f8006a41086a290300370300200041216a200241376a41c10010c9081a200041e6006a200241306a41046a2f01003b01002000200228023036016220004190016a200b37030020004188016a200a37030020004198016a200536020020004180016a2004360200200041f8006a200937030020002008370370200020073703682000419c016a20024180026a41a40210c9081a0c020b200042033703680c010b200042033703680b200241d0096a24000bfb0201057f02400240200128020022022802042203450d00200228020022042d0000210520022003417f6a360204410121032002200441016a3602000240200541037122024103460d0002400240024020020e03000102000b20054102762102410021030c040b200128020022022802042203450d02200228020022012d0000210420022003417f6a360204410121032002200141016a3602002004410874200572220141ffff0371418002490d03200141fcff03714102762102410021030c030b2001280200220228020422034103490d012002280200220141026a2d0000210420012f000021062002200141036a36020020022003417d6a3602042006200441107472410874200572220241808004492103200241027621020c020b0240200541034d0d000c020b2001280200220128020422054104490d0120012802002203280000210220012005417c6a3602042001200341046a36020020024180808080044921030c010b410121030b20002002360204200020033602000ba10606057f017e027f017e027f017e230041206b2202240002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240200641037122034103460d00024002400240024020030e03000102000b2006410276ad21070c020b200128020022012802042203450d04200128020022042d0000210520012003417f6a360204410121032001200441016a3602002005410874200672220141ffff0371418002490d03200141fcff0371410276ad21070c010b410121032001280200220128020422044103490d022001280200220541026a2d0000210820052f000021092001200541036a36020020012004417d6a3602042009200841107472410874200672220141808004490d022001410276ad21070b4200210a410021030c030b02400240024002402006410276220b0e0d00030303010303030303030302030b2001280200220328020422014104490d0420032802002206350000210720032001417c6a3602042003200641046a36020020074280808080045421034200210a0c050b2001280200220328020422014108490d032003280200220629000021072003200141786a3602042003200641086a3602002007428080808080808080015421034200210a0c040b2001280200220328020422014110490d022003280200220641086a290000210a200629000021072003200641106a3602002003200141706a360204200a428080808080808080015421030c030b200641334b0d01200b41046a21094100210441012103200241186a210c420021074200210a0340200128020022062802042205450d0120062802002208310000210d20062005417f6a3602042006200841016a360200200241106a200d4200200441037441f8007110cd08200c290300200a84210a20022903102007842107200441016a22062104200641ff01712009490d000b2002427f427f41e800200b4103746b41f8007110c6082007200229030058200a200241086a290300220d58200a200d511b21030c020b0c010b410121030b20002007370308200041106a200a37030020002003ad370300200241206a24000bb7af0211057f017e057f057e027f047e027f017e127f017e0c7f017e1e7f027e257f017e277f23004180146b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e1c01020304051206070812090a0b0c120d0e0f1e1d1c1b1a1918171614120b200041193602000c390b200128020022032802042204450d37200328020022052d0000210620032004417f6a3602042003200541016a360200410a210402400240024002400240024002400240024020060e0a0001020304050607083e400b2001280200220128020422044104490d3f20012802002205280000210320012004417c6a3602042001200541046a3602002003418194ebdc034f0d3f410121040c3d0b200241b00f6a200110c60420022802b00f2203450d3e20022902b40f2107410221040c3b0b2001280200220128020422034108490d3d2001280200220429000021072001200341786a3602042001200441086a360200410321040c3b0b200241b00f6a200110c60420022802b00f2203450d3c20022902b40f2107410421040c390b200241b00f6a200110c60420022802b00f2203450d3b20022902b40f2107410521040c380b200241b00f6a200110e70420022802b00f22034102460d3a20022902b40f2107410621040c370b200241186a200110b00320022802180d39200228021c2206200128020028020441186e2203200320064b1bad42187e2207422088a70d132007a72204417f4c0d130240024020040d00410421030c010b200410322203450d160b2001200128020441016a2205360204200241003602b80f200220033602b00f2002200441186e3602b40f200520012802084b0d3802402006450d00410021080340200241106a200110b00320022802100d3a20012802002205280204220920022802142204490d3a2004417f4c0d150240024020040d004101210a0c010b20041037220a450d182001280200220528020421090b024002400240024020092004490d00200a2005280200200410c90821092005280204220b20044f0d012004200b4194afc0001058000b2004450d3d20040d010c3d0b2005200b20046b3602042005200528020020046a3602002009450d3c2004ad22074220862007842107200241086a200110b003024020022802080d0020012802002205280204220b200228020c2204490d002004417f4c0d180240024020040d004101210c0c010b20041037220c450d1b20012802002205280204210b0b02400240200b2004490d00200c2005280200200410c908210b2005280204220c20044f0d012004200c4194afc0001058000b2004450d012004450d01200c102c0c010b2005200c20046b3602042005200528020020046a360200200b0d020b2007a7450d3c0b200a102c0c3b0b2004ad220d422086200d84210d0240200820022802b40f470d00200241b00f6a200810fd0320022802b80f210820022802b00f21030b2003200841186c6a2204200b36020c2004200737020420042009360200200441106a200d370200200220022802b80f41016a22083602b80f2006417f6a22060d000b2001280204210520022802b00f21030b20012005417f6a3602042003450d394107410b20031b210420022902b40f21070c360b200241b00f6a200110b30520022802b00f2203450d3820022902b40f2107410821040c350b200241b00f6a200110c60420022802b00f2203450d3720022902b40f210702402001280200220128020422044104490d0020012802002206280000210520012004417c6a3602042001200641046a360200410921040c360b2007a7450d372003102c0c370b02400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024020060e020001020b200241d8116a2001108706200241e4116a280200450d01200241b00f6a200241d8116a41880210c9081a02402001280200220328020422044104490d0020032802002206280000210520032004417c6a3602042003200641046a360200200241d8116a200110b30520022802d8112204450d0020022902dc112107024020012802002201280204220641044f0d0002402007422088a72201450d002001410c6c21032004210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2007a72201450d012001410c6c450d012004102c0c010b20012802002208280000210320012006417c6a3602042001200841046a36020020040d030b200241bc0f6a102b200241ac106a102b0c010b200241d8116a2001108706200241e4116a280200450d00200241b00f6a200241d8116a41880210c9081a02402001280200220328020422044104490d0020032802002206280000210520032004417c6a3602042003200641046a360200200241d8116a200110b30520022802d8112204450d0020022902dc112107024020012802002201280204220641044f0d0002402007422088a72201450d002001410c6c21032004210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2007a72201450d012001410c6c450d012004102c0c010b20012802002208280000210320012006417c6a3602042001200841046a36020020040d340b200241bc0f6a102b200241ac106a102b0b200041193602000c380b20024198056a200241b00f6a41880210c9081a410121010c320b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241206a200110c5042002290320a70d002002290328210720004102360200200041086a2007370300200041106a200241d8116a41980210c9081a0c370b200041193602000c360b200128020022032802042204450d2e200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024020060e050001020304360b2001280200220128020422034104490d3520012802002204280000210620012003417c6a3602042001200441046a360200410121084100210941002105410021010c060b41002103200241003a00d00f02400340200128020022042802042205450d01200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b2001280200220128020422084104490d3520022900c70f2107200241cf0f6a310000210d200241b00f6a410f6a290000210e20022900b70f210f20022800b30f210620022f00b10f210320022d00b00f210420012802002209280000210520012008417c6a3602042001200941046a36020020022007422888200d42188684a72201ad422886200742ffffffffff1f83843703980a2002200e3703900a200141107621092002200f3703880a200f421888a7210a200f420888a7210b200241880a6a410f6a290000210d200229008f0a2107200fa7210c410221080c050b200341ff0171450d34200241003a00d00f0c340b2001280200220128020422034104490d3320012802002204280000210620012003417c6a3602042001200441046a360200200241c7096a290000210d20022900bf09210720022d00b809210c20022f00b909210b20022800bb09210a410321080c020b41002103200241003a00d00f0240024002400340200128020022042802042205450d01200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b2001280200220828020422094104490d3520022900c70f2107200241cf0f6a310000210d200241bf0f6a290000210e20022900b70f210f20022800b30f210620022f00b10f210320022d00b00f21042008280200220b280000210520082009417c6a3602042008200b41046a360200200128020022012802042208450d35200128020022092d0000210b20012008417f6a3602042001200941016a36020041002101200b0e020201350b200341ff0171450d34200241003a00d00f0c340b410121010b2007423888200d42088684a7210920022007422888200d42188684a73b01b40b20022007421888a73b01b20b20022007421088a73a00b10b20022007a73b00af0b2002200e3700a70b2002200f37009f0b200f421888a7210a200f420888a7210b200241ae0b6a290100210d20022901a60b2107200fa7210c410421080c030b2001280200220128020422034104490d3120012802002204280000210620012003417c6a3602042001200441046a36020042002107410521084200210d0b0b0b200041003b0126200020013a00252000200b3b000d200020033b0006200020043a0005200020083a0004200041033602002000411b6a200d370000200041136a2007370000200041286a2005360200200041236a20093b00002000410f6a200a3600002000410c6a200c3a0000200041086a20063602002000412c6a200241d8116a41fc0110c9081a0c350b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024020060e0400010203060b41002103200241003a00d00f02400340200128020022042802042205450d01200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241980b6a411f6a200241b00f6a411f6a31000022103c0000200241980b6a410f6a200241b00f6a410f6a2900002207370000200220022900c70f220f3700af0b200220022900b70f220d37009f0b200220022800b30f220836009b0b200220022f00b10f22093b00990b200220022d00b00f220b3a00980b200241306a200110b1032002290330a70d06200241c0006a290300210e20022903382111200f423888201042ff0183221042088684a72101200f422888201042188684a7210a200f421088a7210c200f421888a72112200fa72113410121060c040b200341ff0171450d05200241003a00d00f0c050b41002103200241003a00d00f02400340200128020022042802042205450d01200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241bf0f6a2900002107200241cf0f6a310000211420022900b70f210d20022800b30f210820022f00b10f210920022d00b00f210b20022900c70f2115200241e0006a200110b1032002290360a70d05200241e0006a41106a290300210e20022903682111200241c8006a200110b1032002290348a70d052015421888a721122015421088a7210c2015a72113200241c8006a41106a29030021102002290350210f2015422888201442188684a7220a4110762101410221060c030b200341ff0171450d04200241003a00d00f0c040b41002103200241003a00d00f024002400340200128020022042802042205450d01200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241bf0f6a2900002107200241cf0f6a310000210e20022900b70f210d20022800b30f210820022f00b10f210920022d00b00f210b20022900c70f210f41002103200241003a00d00f200f422888200e42188684a7210a200f42ffffffffff1f83220e421888a72112200e421088a7210c200fa721130340200128020022042802042205450d02200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241b8096a410f6a200241b00f6a410f6a290000220e370000200220022900b70f22113700bf09200220022800b30f22043600bb09200220022f00b10f22033b00b909200220022d00b00f22053a00b809200241cf0f6a310000211020022900c70f210f200241f8006a200110b1032002290378a70d05200241f8006a41106a29030021142002290380012115200f422888201042188684a72206ad422886200f42ffffffffff1f832210421888a7ad4218862010421088a7ad42ff018342108684200fa7ad42ffff03838442ffffffffff1f8384210f200a41107621012006411876ad2110410321060c030b200341ff0171450d04200241003a00d00f0c040b200341ff0171450d03200241003a00d00f0c030b41002103200241003a00d00f0340200128020022042802042205450d02200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241bf0f6a2900002107200241cf0f6a310000211020022900b70f210d20022800b30f210820022f00b10f210920022d00b00f210b20022900c70f210f20024190016a200110b103200229039001a70d02200f421888a72112200f421088a7210c200fa7211320024190016a41106a290300210e2002290398012111200f422888201042188684a7220a4110762101200241b00b6a2903002114200241a00b6a290300211020022903a80b211520022903980b210f410421060b200020033b002a200020053a00292000200c3a0022200020093b000a2000200b3a000920004104360200200041d8006a2014370200200041d0006a2015370200200041c8006a2010370200200041c0006a200f370200200041386a200e370200200041306a20113702002000412c6a2004360000200041276a20013b0000200041256a200a3b0000200041236a20123b0000200041206a20133b0000200041186a2007370000200041106a200d3700002000410c6a2008360000200041086a20063a0000200041e0006a200241d8116a41c80110c9081a0c360b200341ff0171450d00200241003a00d00f0b200041193602000c340b200128020022032802042204450d2b200328020022052d0000210620032004417f6a3602042003200541016a36020020060d2b200241a8016a200110b00320022802a8010d2b20022802ac012205200128020028020441f0006e2203200320054b1bad42f0007e2207422088a70d0c2007a72203417f4c0d0c0240024020030d00410421060c010b200310322206450d0f0b2001200128020441016a2204360204200241003602d809200220063602d0092002200341f0006e3602d409200420012802084b0d2a02402005450d00200241b00f6a41086a2109410021030340200241b00f6a200110ab0520022802b40f210420022802b00f210820024198056a200941e80010c9081a024020040d0020022802d00921062003450d2d200341f0006c2103200641046a210103402001102b200141f0006a2101200341907f6a22030d000c2e0b0b20024190036a20024198056a41e80010c9081a0240200320022802d409470d00200241d0096a200310990520022802d809210320022802d00921060b2006200341f0006c6a2203200436020420032008360200200341086a20024190036a41e80010c9081a200220022802d80941016a22033602d8092005417f6a22050d000b2001280204210420022802d00921060b20012004417f6a3602042006450d2b20022902d40921072000200636020420004105360200200041086a2007370200200041106a200241d8116a41980210c9081a0c330b200128020022032802042204450d25200328020022052d0000210620032004417f6a3602042003200541016a360200410721050240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e180001020304053f060708090a0b0c0d0e0f101112131415163c0b41002103200241003a00f0090240024002400240024002400340200128020022042802042205450d01200241d0096a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f00920034120470d000b200241980b6a411f6a200241d0096a411f6a3100003c0000200241980b6a410f6a200241d0096a410f6a290000370000200220022900e7093700af0b200220022900d70937009f0b200220022800d30936009b0b200220022f00d1093b00990b200220022d00d0093a00980b200241b00b6a2903002110200241a00b6a290300211520022903980b211620022903a80b2107200241b0016a200110b10320022903b001a70d41200128020022032802042204450d41200241c0016a290300211120022903b801210e200328020022062d0000210820032004417f6a360204410121052003200641016a3602004100210b20080e0404010203410b200341ff0171450d40200241003a00f0090c400b4101210b0c020b4102210b0c010b41002103200241003a00f0090340200128020022042802042206450d02200241d0096a20036a200428020022082d00003a000020042006417f6a3602042004200841016a3602002002200341016a22033a00f00920034120470d000b20022900e7092214422888200241ef096a31000042188684a7210a2014421888a7210c2014421088a72112200241df096a290000210f20022900d709210d20022800d309210320022f00d109210420022d00d00921062014a721134103210b0b200220073703c80a200241b80a6a41186a2010370300200241d00d6a41046a200241a8086a41046a2f01003b0100200220163703b80a200220153703c00a200220043b00890a200220063a00880a200220022801a8083602d00d2002200336008b0a200241c70a6a2900002117200228018a0a211820022f01880a211920022900bf0a211a20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80720074238882010420886842115201a42208820174220868421072003411876211b20104238882114201742208821102016421888a721032016420888a721082016a72104201aa721090c3f0b200341ff0171450d3b200241003a00f0090c3b0b200241c8016a200110b10320022903c801a70d3a200241c8016a41106a290300210d20022903d001210f200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807200f422088200d422086842107200d4220882110200fa72109410221050c3d0b200241e0016a200110b10320022903e001a70d39200241e0016a41106a290300210d20022903e801210f200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807200f422088200d422086842107200d4220882110200fa72109410321050c3c0b410421052001280200220128020422044104490d3820012802002206280000210320012004417c6a3602042001200641046a360200200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002107420021100c3b0b200241f8016a200110b00320022802f8010d3720022802fc012101200241d00d6a41046a200241980b6a41046a2f01003b0100200220022801980b3602d00d2002418094ebdc033602d409200220013602d009200241d0096a2001418094ebdc034b4102746a280200210320024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d8074200210741052105420021100c3a0b200241d0096a200110ba0720022802d0092203450d36200241d00d6a41046a200241980b6a41046a2f01003b0100200220022801980b3602d00d200241d0096a41086a350200210720022802d409210920024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002110410621050c390b200128020022032802042204450d35200328020022052d0000210c20032004417f6a3602042003200541016a3602004100210402400240024002400240200c0e04030001023a0b410121040c020b410221040c010b41002103200241003a00f0090340200128020022042802042205450d02200241d0096a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f00920034120470d000b20022900e709220f422888200241ef096a31000042188684a72106200f421888a72103200f421088a72105200241df096a290000210720022900d709210d20022800d309210920022f00d109210b20022d00d009210a200fa72108410321040b200241a70b6a2007370000200241d00d6a41046a200241b80a6a41046a2f01003b01002002200d37009f0b2002200936009b0b2002200b3b00990b2002200a3a00980b200220033b01b20b200220053a00b10b200220083b00af0b200220022801b80a3602d00d200220063601b40b200241b60b6a3100002114200241a60b6a290100210d200228019a0b210320022f01980b210820022901ae0b2115200229019e0b210f20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a29010037030041082105200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807200f422088200d4220868421072006411876210b200d4220882110200fa721090c390b200341ff0171450d35200241003a00f0090c350b41002103200241003a00f00902400340200128020022042802042205450d01200241d0096a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f00920034120470d000b200241d00d6a41046a200241980b6a41046a2f00003b0100200220022800980b3602d00d200241ef096a3100002114200241df096a290000210d20022900e709211520022800d309210320022f00d109210820022d00d009210420022900d709210f20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290000370100200241d8076a41286a200241b00f6a41286a290000370300200241d8076a41206a200241b00f6a41206a290000370300200241d8076a41186a200241b00f6a41186a290000370300200241d8076a41106a200241b00f6a41106a290000370300200241d8076a41086a200241b00f6a41086a290000370300200220022900b00f3703d807200f422088200d422086842107200d4220882110200fa72109410921050c380b200341ff0171450d34200241003a00f0090c340b20024180026a200110b0032002280280020d332002280284022103200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002107410a2105420021100c360b20024188026a200110b0032002280288020d32200228028c022103200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002107410b2105420021100c350b200128020022012802042203450d31200128020022052d0000210420012003417f6a3602042001200541016a360200200441e4004b0d31200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002107410c2105420021100c340b410d21050c330b410e21050c320b200241d0096a200110ba0720022802d0092203450d2e200241d00d6a41046a200241980b6a41046a2f01003b0100200220022801980b3602d00d200241d0096a41086a350200210720022802d409210920024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002110410f21050c310b41002103200241003a00f00902400340200128020022042802042205450d01200241d0096a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f00920034120470d000b200241880a6a41186a2205200241ef096a3100003c0000200220022900e7093703980a200220022900d7093703880a2002200241df096a2900003703900a2001280200220128020422064104490d2e20022800d309210320022f00d109210820022d00d009210420012802002209280000211820012006417c6a3602042001200941046a360200200241d00d6a41046a200241980b6a41046a2f01003b0100200220022801980b3602d00d20053100002114200241880a6a41086a290300210d20022903980a211520022903880a210f20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a29010037030041102105200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807200f422088200d422086842107200d4220882110200fa721090c310b200341ff0171450d2d200241003a00f0090c2d0b411121050c2f0b2001280200220428020422054104490d2b20042802002206280000210320042005417c6a3602042004200641046a36020020024190026a200110b0032002280290020d2b2001280200220528020422062002280294024102742204490d2b2004417f4c0d110240024020040d00410121080c010b200410372208450d142001280200220528020421060b0240024020062004490d0020082005280200200410c90821012005280204220620044f0d01200420064194afc0001058000b2008410020041b2201450d2c2004450d2c2001102c0c2c0b2005200620046b3602042005200528020020046a3602002001450d2b02402004ad22074220862007842207422088a722040d002007a721040c2d0b024020014103710d0020044103710d002007a722044103710d0020044102762205450d2d2001450d2c20074202884280808080f0ffffff3f832005ad842107200121090c2e0b2007a7450d2b2001102c0c2b0b41002103200241003a00f00902400340200128020022042802042205450d01200241d0096a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f00920034120470d000b200241b8096a410f6a2203200241d0096a410f6a290000370000200220022900d7093700bf09200220022800d3093600bb09200220022f00d1093b00b909200220022d00d0093a00b8092001280200220128020422044104490d2b20022900e7092107200241ef096a310000210e20012802002205280000211820012004417c6a3602042001200541046a360200200241d00d6a41046a200241980b6a41046a2f01003b0100200220022801980b3602d00d2003290000210d20022d00b809210420022f00b909210820022800bb09210320022900bf09210f20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d8072007422888200e42188684a72201ad422886200742ffffffffff1f83842115200f422088200d422086842107200d42208821102001411876ad2114200fa72109411321050c2e0b200341ff0171450d2a200241003a00f0090c2a0b20024198026a200110b103200229039802a70d2920024198026a41106a290300210d20022903a002210f200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807200f422088200d422086842107200d4220882110200fa72109411421050c2c0b200241b8026a200110b00320022802b8020d2820022802bc022103200241b0026a200110b00320022802b0020d2820022802b4022109200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807411521050c2b0b41002103200241003a00f00902400340200128020022042802042205450d01200241d0096a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f00920034120470d000b2001280200220128020422054104490d2820022900e7092107200241d0096a411f6a310000210e200241df096a290000210d20022900d709210f20022800d309210320022f00d109210820022d00d009210420012802002206280000211820012005417c6a3602042001200641046a360200200241d00d6a41046a200241b80a6a41046a2f01003b010020022007423888200e42088684a73b01b60b20022007422888200e42188684a73b01b40b20022007421888a73b01b20b20022007421088a73a00b10b20022007a73b00af0b2002200336009b0b200220083b00990b200220043a00980b200220022801b80a3602d00d200241980b6a411f6a31000021142002200f37009f0b2002200d3700a70b20022900af0b211520024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d807200f422088200d422086842107200d4220882110200fa72109411621050c2b0b200341ff0171450d27200241003a00f0090c270b200241d0026a200110b00320022802d0020d2620012802002204280204220520022802d4024101742203490d262003417f4c0d0c0240024020030d00410121060c010b200310372206450d0f2001280200220428020421050b024020052003490d0020062004280200200310c9082105200428020422082003490d0b2004200820036b3602042004200428020020036a3602002005450d2702402003ad22074220862007842207422088a722030d002007a721040c250b024020052003724101710d002007a722044101710d0020044101762209450d252005450d282007422188a72106200521030c260b2007a7450d270b2006102c0c260b200241e8026a200110b00320022802e8020d2520012802002204280204220520022802ec024101742203490d252003417f4c0d0b0240024020030d00410121060c010b200310372206450d0e2001280200220428020421050b024020052003490d0020062004280200200310c9082105200428020422082003490d092004200820036b3602042004200428020020036a3602002005450d2602402003ad22074220862007842207422088a722030d002007a721040c220b024020052003724101710d002007a722044101710d0020044101762209450d222005450d272007422188a72106200521030c230b2007a7450d260b2006102c0c250b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c310b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200410021030240024002400240024002400240024020060e020001080b41002103200241003a00d00f0340200128020022042802042205450d02200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241bf0f6a290000210f200241cf0f6a310000210e20022900b70f210d20022800b30f210b20022f00b10f210920022d00b00f210820022900c70f210741002103200241003a00d00f2007422888200e42188684a7211c200742ffffffffff1f8321140340200128020022042802042205450d03200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200220022900b70f3703880a200220022900c70f22074218883d009b0a2002200241bf0f6a2900003703900a20022007a722033b01980a200220034110763a009a0a20022007422888200241cf0f6a310000421886843e009d0a20022800b30f211220022f00b10f210c20022d00b00f210a41002103200241003a00d00f0340200128020022042802042205450d04200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241bf0f6a2900002111200241cf0f6a310000211020022900b70f210e20022800b30f211d20022f00b10f211e20022d00b00f211320022900c70f210741002103200241003a00d00f2007422888201042188684a7211f200742ffffffffff1f8321170340200128020022042802042205450d05200241b00f6a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00d00f20034120470d000b200241b8096a410f6a200241b00f6a410f6a290000370000200220022900b70f3700bf09200220022800b30f3600bb09200220022f00b10f3b00b909200220022d00b00f3a00b809200241cf0f6a310000211020022900c70f210741002103200241003a00d00f2007422888201042188684a721042007421888a721202007421088a721212007a721220340200128020022052802042206450d06200241b00f6a20036a200528020022182d00003a000020052006417f6a3602042005201841016a3602002002200341016a22033a00d00f20034120470d000b200241980b6a410f6a200241b00f6a410f6a290000370000200220022900b70f37009f0b200220022800b30f36009b0b200220022f00b10f3b00990b200220022d00b00f3a00980b200220022900c70f22074218883d01b20b20022007a722033b00af0b200220034110763a00b10b20022007422888200241cf0f6a310000421886843e02b40b41002103200241003a00d00f0340200128020022052802042206450d07200241b00f6a20036a200528020022182d00003a000020052006417f6a3602042005201841016a3602002002200341016a22033a00d00f20034120470d000b200241a0076a41086a2203200241880a6a41086a290300370300200241a0076a41106a2206200241880a6a41106a290300370300200241a0076a41186a2219200241880a6a41186a2d00003a0000200241d00d6a41086a2223200241b8096a41086a290300370300200241d00d6a410f6a2224200241b8096a410f6a290000370000200220022903880a3703a007200220022903b8093703d00d200241b00f6a410f6a2900002115200241cf0f6a310000211a20022900b70f211020022800b30f211b20022f00b10f211820022d00b00f210520022900c70f211620024198056a41186a2225200241980b6a41186a29030037030020024198056a41106a2226200241980b6a41106a29030037030020024198056a41086a2227200241980b6a41086a290300370300200220022903980b37039805200241b80a6a41186a222820192d00003a0000200241b80a6a41106a22292006290300370300200241b80a6a41086a22062003290300370300200220022903a0073703b80a200241f80b6a410f6a222a2024290000370000200241f80b6a41086a222b2023290300370300200220022903d00d3703f80b20024190036a41186a222c202529030037030020024190036a41106a2225202629030037030020024190036a41086a22262027290300370300200220022903980537039003200241b00f6a200110c60420022802b00f2203450d072016421888a721242016421088a721232016a72119200241e0086a41086a2006290300370300200241e0086a41106a2029290300370300200241e0086a41186a20282d00003a0000200241c8086a41086a202b290300370300200241c8086a410f6a202a290000370000200241d0096a41086a2026290300370300200241d0096a41106a2025290300370300200241d0096a41186a202c290300370300200220022903b80a3703e008200220022903f80b3703c80820022002290390033703d0092020ad4218862021ad42ff0183421086842022ad42ffff03838421072016422888201a42188684a722204110762121201cad4228862014842116201fad422886201784211a201c411876ad2117201f411876ad212d20022902b40f21140b200241a8086a41186a2201200241e0086a41186a2d00003a0000200241a8086a41106a2206200241e0086a41106a290300370300200241a8086a41086a221c200241e0086a41086a29030037030020024190086a41086a221f200241c8086a41086a29030037030020024190086a410f6a2222200241c8086a410f6a290000370000200241d8076a41086a2225200241d0096a41086a290300370300200241d8076a41106a2226200241d0096a41106a290300370300200241d8076a41186a2227200241d0096a41186a290300370300200220022903e0083703a808200220022903c80837039008200220022903d0093703d8072000412f6a20173c0000200041276a20163700002000411f6a200f370000200041176a200d370000200041336a2012360000200041316a200c3b0000200041306a200a3a0000200041136a200b360000200041116a20093b0000200041106a20083a0000200041086a20143702002000200336020420004108360200200020022903a8083700372000413f6a201c290300370000200041c7006a2006290300370000200041cf006a20012d00003a0000200041ef006a202d3c0000200041e7006a201a370000200041df006a2011370000200041d7006a200e370000200041d3006a201d360000200041d1006a201e3b0000200041d0006a20133a00002000418c016a200436020020004187016a20073e00002000418b016a20074220883c0000200041ff006a2022290000370000200041f8006a201f290300370200200041f0006a200229039008370200200041a8016a2027290300370200200041a0016a202629030037020020004198016a202529030037020020004190016a20022903d807370200200041ce016a20213b0100200041cc016a20203b0100200041ca016a20243b0100200020233a00c901200041c7016a20193b0000200041bf016a2015370000200041b7016a2010370000200041b3016a201b360000200041b1016a20183b0000200041b0016a20053a0000200041d0016a200241d8116a41d80010c9081a0c370b200341ff0171450d05200241003a00d00f0c050b200341ff0171450d04200241003a00d00f0c040b200341ff0171450d03200241003a00d00f0c030b200341ff0171450d02200241003a00d00f0c020b200341ff0171450d01200241003a00d00f0c010b200341ff0171450d00200241003a00d00f0b200041193602000c300b200128020022032802042204450d1c200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e03000102200b200241d8116a200110ab0320022903e0114202510d1f200241b00f6a200241d8116a41800210c9081a2001280200220328020422044104490d1f20032802002206280000210520032004417c6a3602042003200641046a360200200241d8116a200110b30520022802d8112204450d1f20022902dc112107024020012802002203280204220641044f0d0002402007422088a72201450d002001410c6c21032004210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2007a72201450d202001410c6c450d200c1f0b20032802002208280000210120032006417c6a3602042003200841046a3602002004450d1f20024198056a200241b00f6a41800210c9081a410121030c020b200241d8116a200110ab0320022903e0114202510d1e200241b00f6a200241d8116a41800210c9081a2001280200220328020422044104490d1e20032802002206280000210520032004417c6a3602042003200641046a360200200241d8116a200110b30520022802d8112204450d1e20022902dc112107024020012802002203280204220641044f0d0002402007422088a72201450d002001410c6c21032004210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2007a72201450d1f2001410c6c0d1e0c1f0b20032802002208280000210120032006417c6a3602042003200841046a3602002004450d1e20024198056a200241b00f6a41800210c9081a410221030c010b2001280200220328020422044104490d1d20032802002206280000210520032004417c6a3602042003200641046a3602002001280200220128020422034104490d1d20012802002206280000210420012003417c6a3602042001200641046a36020020024198056a200241d8116a41800210c9081a410321030b20024190036a20024198056a41800210c9081a2000411c6a2001360200200041146a2007370200200041106a20043602002000410c6a2005360200200041086a200336020020004109360200200041206a20024190036a41800210c9081a0c2f0b200128020022032802042204450d19200328020022052d0000210620032004417f6a3602042003200541016a36020020060d192001280200220328020422044104490d1920032802002205280000210b20032004417c6a3602042003200541046a360200200241b00f6a200110c60420022802b00f2208450d19200241b80f6a280200210a20022802b40f2109200241f0026a200110b00320022802f0020d1820022802f40222042001280200280204410c6e2203200320044b1bad420c7e2207422088a70d072007a72206417f4c0d070240024020060d00410421050c010b200610322205450d0a0b2001200128020441016a220c36020441002103200241003602a005200220053602980520022006410c6e220636029c05200c20012802084b0d1702402004450d00410021030340200241b00f6a200110c604024020022802b00f22060d0020022802980521052003450d1a2003410c6c21032005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000c1b0b0b20022902b40f210702402003200228029c05470d0020024198056a2003410110ec0120022802a005210320022802980521050b20052003410c6c6a2203200737020420032006360200200220022802a00541016a22033602a0052004417f6a22040d000b2001280204210c200228029c05210620022802980521050b2001200c417f6a3602042005450d182008450d19024002400240024020012802002204280204220c4104490d002004280200221228000021132004200c417c6a3602042004201241046a36020020012802002204280204220c4104490d0120042802002212280000211e2004200c417c6a3602042004201241046a36020020012802002204280204220c4104490d0220042802002212280000211d2004200c417c6a3602042004201241046a360200200241b00f6a200110ac0320022d00b00f4101470d0302402009450d002008102c0b02402003450d002003410c6c21032005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2005410020061b2201450d1d2006410c6c450d1d2001102c0c1d0b02402009450d002008102c0b02402003450d002003410c6c21032005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2005410020061b2201450d1c2006410c6c450d1c2001102c0c1c0b02402009450d002008102c0b02402003450d002003410c6c21032005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2005410020061b2201450d1b2006410c6c450d1b2001102c0c1b0b02402009450d002008102c0b02402003450d002003410c6c21032005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200341746a22030d000b0b2005410020061b2201450d1a2006410c6c450d1a2001102c0c1a0b200241d00c6a41086a2201200241d50f6a280000360200200241c00c6a41086a2204200241ed0f6a2800003602002002200241cd0f6a2900003703d00c2002200241e50f6a2900003703c00c200241c90f6a2800002112200241c50f6a2800002118200241c10f6a280000211b200241bd0f6a2800002119200241b90f6a2800002123200241d90f6a2800002124200241dd0f6a2800002120200241e10f6a280000212120022800b50f211c20022800b10f211f200241b00e6a41086a20012802002201360200200241900c6a41086a220c200428020036020020024190036a41086a22042001360200200220022903d00c22073703b00c200220022903c00c220d3703a00c200220073703b00e2002200d3703900c2002200737039003200241d0096a41086a2201200c280200360200200220022903900c3703d0092008450d19200241d8076a41086a220c2004280200360200200241a0076a41086a2204200128020036020020022002290390033703d807200220022903d0093703a007200041c4006a2012360200200041c0006a20183602002000413c6a201b360200200041386a2019360200200041346a2023360200200041306a201c3602002000412c6a201f360200200041286a201d360200200041246a201e360200200041206a20133602002000411c6a2003360200200041186a2006360200200041146a2005360200200041106a200a3602002000410c6a2009360200200041086a20083602002000200b3602042000410a360200200041dc006a2021360200200041d8006a2020360200200041d4006a2024360200200041c8006a20022903d807370200200041d0006a200c280200360200200041e0006a20022903a007370200200041e8006a2004280200360200200041ec006a200241d8116a41bc0110c9081a0c2e0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c2d0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e24000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223250b2001280200220128020422034104490d2420012802002205280000210420012003417c6a3602042001200541046a360200410121030c230b2001280200220128020422034104490d2320012802002205280000210420012003417c6a3602042001200541046a360200410221030c220b2001280200220128020422034104490d2220012802002205280000210420012003417c6a3602042001200541046a360200410321030c210b410421032001280200220128020422054104490d2120012802002206280000210420012005417c6a3602042001200641046a3602000c200b2001280200220128020422034104490d2020012802002205280000210420012003417c6a3602042001200541046a360200410521030c1f0b2001280200220128020422034104490d1f20012802002205280000210420012003417c6a3602042001200541046a360200410621030c1e0b2001280200220128020422034104490d1e20012802002205280000210420012003417c6a3602042001200541046a360200410721030c1d0b2001280200220128020422034104490d1d20012802002205280000210420012003417c6a3602042001200541046a360200410821030c1c0b2001280200220128020422034104490d1c20012802002205280000210420012003417c6a3602042001200541046a360200410921030c1b0b2001280200220128020422034104490d1b20012802002205280000210420012003417c6a3602042001200541046a360200410a21030c1a0b2001280200220128020422034104490d1a20012802002205280000210420012003417c6a3602042001200541046a360200410b21030c190b2001280200220128020422034104490d1920012802002205280000210420012003417c6a3602042001200541046a360200410c21030c180b200128020022032802042204450d18200328020022052d0000210620032004417f6a3602042003200541016a360200410021040240024020060e0201001a0b2001280200220128020422044104490d1920012802002205280000210320012004417c6a3602042001200541046a360200410121040b2003ad21074200210d410d21030c170b2001280200220128020422034104490d1720012802002205280000210420012003417c6a3602042001200541046a360200410e21030c160b2001280200220128020422034104490d1620012802002205280000210420012003417c6a3602042001200541046a360200410f21030c150b2001280200220128020422034104490d1520012802002205280000210420012003417c6a3602042001200541046a360200411021030c140b2001280200220128020422034104490d1420012802002205280000210420012003417c6a3602042001200541046a360200411121030c130b2001280200220128020422034104490d1320012802002205280000210420012003417c6a3602042001200541046a360200411221030c120b2001280200220128020422034104490d1220012802002205280000210420012003417c6a3602042001200541046a360200411321030c110b2001280200220128020422034104490d1120012802002205280000210420012003417c6a3602042001200541046a360200411421030c100b2001280200220128020422034104490d1020012802002205280000210420012003417c6a3602042001200541046a360200411521030c0f0b2001280200220128020422034104490d0f20012802002205280000210420012003417c6a3602042001200541046a360200411621030c0e0b2001280200220128020422034108490d0e2001280200220429000021072001200341786a3602042001200441086a3602004200210d411721030c0d0b2001280200220128020422034104490d0d20012802002205280000210420012003417c6a3602042001200541046a360200411821030c0c0b2001280200220128020422034104490d0c20012802002205280000210420012003417c6a3602042001200541046a360200411921030c0b0b2001280200220128020422034104490d0b20012802002205280000210420012003417c6a3602042001200541046a360200411a21030c0a0b2001280200220128020422034110490d0a2001280200220441086a290000210d200429000021072001200441106a3602002001200341706a360204411b21030c090b2001280200220128020422034110490d092001280200220441086a290000210d200429000021072001200441106a3602002001200341706a360204411c21030c080b2001280200220128020422034104490d0820012802002205280000210420012003417c6a3602042001200541046a360200411d21030c070b2001280200220128020422034104490d0720012802002205280000210420012003417c6a3602042001200541046a360200411e21030c060b2001280200220128020422034104490d0620012802002205280000210420012003417c6a3602042001200541046a360200411f21030c050b2001280200220128020422034104490d0520012802002205280000210420012003417c6a3602042001200541046a360200412021030c040b2001280200220128020422034104490d0420012802002205280000210420012003417c6a3602042001200541046a360200412121030c030b2001280200220128020422034104490d0320012802002205280000210420012003417c6a3602042001200541046a360200412221030c020b2001280200220128020422034104490d0220012802002205280000210420012003417c6a3602042001200541046a360200412321030c010b2001280200220128020422034104490d0120012802002205280000210420012003417c6a3602042001200541046a36020042002107412421034200210d0b2000410c360200200041186a200d370200200041106a20073702002000410c6a2004360200200041086a2003360200200041206a200241d8116a41880210c9081a0c2d0b200041193602000c2c0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c2b0b200128020022032802042204450d12200328020022052d0000210620032004417f6a3602042003200541016a36020020060d1220024188036a200110b0032002280288030d12200228028c032206200128020028020441d0006e2203200320064b1bad42d0007e2207422088a70d032007a72203417f4c0d030240024020030d00410421080c010b200310322208450d060b2001200128020441016a220536020441002104200241003602980320022008360290032002200341d0006e220b36029403200520012802084b0d1102402006450d00200241e50f6a211f200241cd0f6a2122410021040340200241b00f6a200110b3060240024020022802b00f2205450d0020022902b40f21070240024002402001280200220328020422094104490d002003280200220b280000210a20032009417c6a3602042003200b41046a360200200241b00f6a200110ac0320022d00b00f4101460d01200241b00e6a41086a2203202241086a280000360200200241900c6a41086a2209201f41086a280000360200200220222900003703b00e2002201f2900003703900c20022800c90f211920022800c50f211b20022800c10f211820022800bd0f211d20022800b90f211e20022800b50f211320022800b10f211220022800d90f212320022800dd0f212420022800e10f2120200241b80a6a41086a20032802002203360200200241880a6a41086a20092802002209360200200241e0086a41086a220b2003360200200241b8096a41086a22032009360200200220022903b00e220d3703b80a200220022903900c220f3703880a2002200d3703e0082002200f3703b809200241c8086a41086a2209200b280200360200200220022903e0083703c808200241c00e6a41086a220b2003280200360200200220022903b8093703c00e200241b00f6a41086a2009280200360200200220022903c8083703b00f20024198056a41086a200b280200360200200220022903c00e370398052007210d200a210c0c040b2007422088a72203202120031b21212003450d0220210d010c020b2007422088a72203201c20031b211c2003450d01201c450d010b2005102c0b410021050b200241900d6a41086a2203200241b00f6a41086a280200360200200241800d6a41086a220920024198056a41086a280200360200200220022903b00f3703900d20022002290398053703800d2005450d12200241f00c6a41086a220b2003280200360200200241e00c6a41086a220a2009280200360200200220022903900d3703f00c200220022903800d3703e00c02402004200228029403470d0020024190036a20044101109705200228029803210420022802900321080b2008200441d0006c6a220320193602282003201b360224200320183602202003201d36021c2003201e36021820032013360214200320123602102003200c36020c2003200d37020420032005360200200b280200210520022903f00c2107200320203602402003202436023c20032023360238200341346a20053602002003200737022c200320022903e00c370244200341cc006a200a2802003602002002200441016a2204360298032006417f6a22060d000b20012802042105200228029403210b20022802900321080b20012005417f6a3602042008450d1220024180036a200110b0032002280280030d0f2002280284032220200128020028020441b4026e2203200320204b1bad42b4027e2207422088a70d032007a72203417f4c0d030240024020030d00410421050c010b200310322205450d060b2001200128020441016a2206360204200241003602a80d200220053602a00d2002200341b4026e3602a40d0240200620012802084b0d0002402020450d00200241e50f6a212e200241cd0f6a212f200241dc0f6a2130200241880a6a4105722131200241b00f6a4107722121200241cf0f6a2132200241cb0f6a21334100210a0340024002402001280200220328020422054104490d0020032802002206280000211e20032005417c6a3602042003200641046a36020041002103200241003a00d00f02400240024002400240024002400340200128020022052802042206450d01200241b00f6a20036a200528020022092d00003a000020052006417f6a3602042005200941016a3602002002200341016a22033a00d00f20034120470d000b200241980b6a41086a220c202141086a290000370300200241980b6a41106a2212202141106a290000370300200241980b6a41186a2213202141186a2d00003a000020022021290000221637039805200220163703980b20022d00b00f211d20022f00b10f211820022800b30f211b200241880a6a41186a20132d00003a0000200241880a6a41106a2012290300370300200241880a6a41086a2219200c290300370300200220022903980b3703880a41002103200241003a00d00f0340200128020022052802042206450d02200241b00f6a20036a200528020022092d00003a000020052006417f6a3602042005200941016a3602002002200341016a22033a00d00f20034120470d000b200241b00f6a410f6a2223290000211a2032310000211720022900b70f212d20022d00b00f213420022f00b10f213520022800b30f213620022900c70f211641002103200241003a00d00f2016422888201742188684a72137201642ffffffffff1f8321170340200128020022052802042206450d03200241b00f6a20036a200528020022092d00003a000020052006417f6a3602042005200941016a3602002002200341016a22033a00d00f20034120470d000b20024198056a410f6a2238202329000037000020024198056a41086a2223200241b00f6a41086a2239290300370300200241980b6a410f6a22032038290000370000200c2023290300370300200241b80a6a41086a2224200c290300370300200241b80a6a410f6a22052003290000370000200220022903b00f3703b80a2033310000213a20022802cc0f213b20023500c70f2116200241b8096a410f6a223c2005290000370000200241b8096a41086a223d2024290300370300200220022903b80a3703b80941002103200241003a00d00f2016203a42208684223a421888a7213e203a421088a7213f2016a721400340200128020022052802042206450d04200241b00f6a20036a200528020022092d00003a000020052006417f6a3602042005200941016a3602002002200341016a22033a00d00f20034120470d000b20024198056a41186a200241b00f6a41186a22412903002216370300200c20392903003703002012200241b00f6a41106a224229030037030020132016370300200220022903b00f3703980b41002103200241003a00d00f0340200128020022052802042206450d05200241b00f6a20036a200528020022092d00003a000020052006417f6a3602042005200941016a3602002002200341016a22033a00d00f20034120470d000b20022d00b00f214320022f00b10f214420022800b30f214520022900b70f211620022900bf0f213a20022f00c70f214620022d00c90f214720022f01ca0f214820022f01cc0f214920022f01ce0f214a200241b00f6a200110ac0320022d00b00f4101460d07200241d00c6a41086a2206202f41086a224b280000360200200241c00c6a41086a2209202e41086a224c2800003602002002202f2900003703d00c2002202e2900003703c00c20022800c90f214d20022800c50f214e20022800c10f214f20022800bd0f215020022800b90f215120022800b50f215220022800b10f215320022800d90f215420022800dd0f215520022800e10f2156200241c00e6a41086a22572006280200360200200241b00e6a41086a22582009280200360200200220022903d00c22593703b00c200220022903c00c225a3703a00c200220593703c00e2002205a3703b00e2002201d3a00900c200220183b00910c2002201b3600930c200220022d00880a3a00970c20022f008b0a215b20022d008a0a215c20022d00890a215d200241c8086a41106a2203203141106a280000360200200241c8086a41086a221d203141086a290000370300200220312900003703c808200241e0086a410f6a225e203c290000370000200241e0086a41086a225f203d290300370300200220022903b8093703e00820024190036a41186a223c201329030037030020024190036a41106a2260201229030037030020024190036a41086a2213200c290300370300200220022903980b37039003200241b00f6a200110b20520022802b00f2205450d07200241800e6a41086a2261203041086a28020036020020024190086a41086a2262201d29030037030020024190086a41106a22632003280200360200200220302902003703800e200220022903c8083703900820022802d80f211820022802d40f216420022802d00f216520022802cc0f216620022802c80f216720022802c40f216820022802c00f211b20022802bc0f216920022902b40f215920022802900c216a20022802940c216b200241a8086a410f6a226c205e290000370000200241a8086a41086a226d205f290300370300200220022903e0083703a808200241d0096a41186a226e203c290300370300200241d0096a41106a226f2060290300370300200241d0096a41086a2270201329030037030020022002290390033703d009200241a00e6a41086a22712057280200360200200220022903c00e3703a00e200241900e6a41086a22722058280200360200200220022903b00e3703900e200241f8026a200110b0032059422088a721732059a7213c20022802f802450d050c060b200341ff0171450d06200241003a00d00f0c060b200341ff0171450d05200241003a00d00f0c050b200341ff0171450d04200241003a00d00f0c040b200341ff0171450d03200241003a00d00f0c030b200341ff0171450d02200241003a00d00f0c020b20022802fc02225e200128020028020441c1006e22032003205e4b1bad42c1007e225a422088a70d09205aa72203417f4c0d090240024020030d00410121740c010b200310322274450d0c0b2001200128020441016a2275360204200241003602a00b200220743602980b2002200341c1006e220336029c0b0240207520012802084b0d004100211202400240205e450d000340200128020022032802042275450d02200328020022762d0000217720032075417f6a3602042003207641016a3602000240024002402077417f6a0e020001050b200241b00f6a200110ac0320022d00b00f4101460d042006204b2800003602002009204c2800003602002002202f2900003703d00c2002202e2900003703c00c20022800c90f217520022800c50f217620022800c10f217720022800bd0f217820022800b90f217920022800b50f217a20022800b10f217b20022800d90f217c20022800dd0f217d20022800e10f217e200241b00c6a41086a20062802002203360200200241a00c6a41086a2009280200227f360200202420033602002019207f360200200220022903d00c225a3703b00c200220022903c00c2280013703a00c2002205a3703b80a20022080013703880a20232024280200360200200220022903b80a3703980520132019280200360200200220022903880a370390034100217f0c010b200241b00f6a200110ac0320022d00b00f4101460d032006204b2800003602002009204c2800003602002002202f2900003703d00c2002202e2900003703c00c20022800c90f217520022800c50f217620022800c10f217720022800bd0f217820022800b90f217920022800b50f217a20022800b10f217b20022800d90f217c20022800dd0f217d20022800e10f217e200241b00c6a41086a20062802002203360200200241a00c6a41086a2009280200227f36020020582003360200200241900c6a41086a2203207f360200200220022903d00c225a3703b00c200220022903c00c2280013703a00c2002205a3703b00e20022080013703900c20232058280200360200200220022903b00e3703980520132003280200360200200220022903900c370390034101217f0b205f20232802002203360200203d2013280200228101360200201d200336020020572081013602002002200229039805225a3703e00820022002290390032280013703b8092002205a3703c80820022080013703c00e02402012200228029c0b470d00200241980b6a2012410110960520022802a00b211220022802980b21740b2074201241c1006c6a2203207536001920032076360015200320773600112003207836000d200320793600092003207a3600052003207b3600012003207f3a0000201d280200217520022903c808215a2003207e3600312003207d36002d2003207c360029200341256a20753600002003205a37001d200320022903c00e3700352003413d6a20572802003600002002201241016a22123602a00b205e417f6a225e0d000b20012802042175200228029c0b210320022802980b21740b20012075417f6a3602042074450d02200241b00f6a200110b306024020022802b00f450d00203ead421886203fad42ff0183421086842040ad42ffff03838421072037ad42288620178421152037411876ad2114205f203928020036020020132062290300370300206020632802003602002023206d2903003703002038206c290000370000200220022903b00f3703e008200220022903900837039003200220022903a808370398052041206e2903003703002042206f29030037030020392070290300370300200220022903d0093703b00f200c2071280200360200200220022903a00e3703980b20242072280200360200200220022903900e3703b80a20192061280200360200200220022903800e3703880a201e211c206a211f206b2122205d2125205c2126205b21272059210d20692128201b21292068212a2067212b2066212c206521820120642183012018218401207421850120032186012012218701204321880120442189012045218a012016210f203a210e2046218b012047218c012048218d012049218e01204a218f01203b219001203421910120352192012036219301202d2111201a21102053219401205221950120512196012050219701204f219801204e219901204d219a012054219b012055219c012056219d010c050b200341c1006c209e0120031b219e0102402003450d00209e01450d002074102c0b02402073450d002073410c6c21062005210303400240200341046a280200450d002003280200102c0b2003410c6a2103200641746a22060d000b0b203c410c6c209f01203c1b219f010240203c450d00209f01450d002005102c0b02402068450d0020684104742105206941046a210303400240200341046a280200450d002003280200102c0b200341106a2103200541706a22050d000b0b201b41047420a001201b1b21a001024020694100201b1b2203450d0020a001450d002003102c0b02402067450d00206620a10120661b21a1012066450d0020a101450d002067102c0b201820a20120181b21a2012064410020181b2203450d0320a201450d032003102c0c030b200228029c0b21030b200341c1006c20a30120031b21a30120022802980b410020031b2203450d0020a301450d002003102c0b02402073450d002073410c6c21062005210303400240200341046a280200450d002003280200102c0b2003410c6a2103200641746a22060d000b0b203c410c6c20a401203c1b21a4010240203c450d0020a401450d002005102c0b02402068450d0020684104742105206941046a210303400240200341046a280200450d002003280200102c0b200341106a2103200541706a22050d000b0b201b41047420a501201b1b21a501024020694100201b1b2203450d0020a501450d002003102c0b02402067450d00206620a60120661b21a6012066450d0020a601450d002067102c0b201820a70120181b21a7012064410020181b2203450d0020a701450d002003102c0b410021050b200241a0096a41106a220320024190036a41106a280200360200200241a0096a41086a220620024190036a41086a290300370300200241f80b6a41086a220920024198056a41086a290300370300200241f80b6a410f6a220c20024198056a410f6a290000370000200241a0076a41086a2212200241b00f6a41086a290300370300200241a0076a41106a2213200241b00f6a41106a290300370300200241a0076a41186a221e200241b00f6a41186a29030037030020022002290390033703a00920022002290398053703f80b200220022903b00f3703a00720024190096a41086a221d200241980b6a41086a28020036020020024180096a41086a2218200241b80a6a41086a280200360200200241900d6a41086a221b200241880a6a41086a280200360200200241800d6a41086a2219200241e0086a41086a280200360200200220022903980b37039009200220022903b80a37038009200220022903880a3703900d200220022903e0083703800d2005450d02200a41016a210a200241e80d6a41106a22232003280200360200200241e80d6a41086a22242006290300370300200241d00d6a41086a22062009290300370300200241d00d6a410f6a2209200c290000370000200241d8076a41086a220c2012290300370300200241d8076a41106a22122013290300370300200241d8076a41186a2213201e290300370300200220022903a0093703e80d200220022903f80b3703d00d200220022903a0073703d807200241c00d6a41086a221e201d280200360200200241b00d6a41086a221d2018280200360200200241f00c6a41086a2218201b280200360200200241e00c6a41086a221b201928020036020020022002290390093703c00d20022002290380093703b00d200220022903900d3703f00c200220022903800d3703e00c024020022802a80d220320022802a40d470d00200241a00d6a20034101109b0520022802a80d21030b20022802a00d200341b4026c6a2203201f3602042003201c36020020032091013a0024200341c3006a20143c00002003413b6a2015370000200341336a20103700002003412b6a20113700002003410e6a20273b01002003410d6a20263a00002003410c6a20253a0000200341086a2022360200200341106a20022903e80d370200200341186a2024290300370200200341206a2023280200360200200341276a209301360000200341256a2092013b0000200341df006a20074220883c0000200341db006a20073e0000200341e0006a20900136020020034187016a208a013600002003418b016a200f37000020034193016a200e37000020032094013602a401200341a8016a209501360200200341ac016a209601360200200341b0016a209701360200200341b4016a209801360200200341b8016a209901360200200341bc016a209a01360200200341a2016a208f013b0100200341a0016a208e013b01002003419e016a208d013b01002003419d016a208c013a00002003419b016a208b013b000020034185016a2089013b000020032088013a008401200341d3006a2009290000370000200341cc006a2006290300370200200320022903d00d370244200320022903d807370264200341ec006a200c290300370200200341f4006a2012290300370200200341fc006a2013290300370200200341cc016a209b01360200200341d0016a209c01360200200341d4016a209d01360200200320053602e401200341e8016a200d370200200341f0016a2028360200200341f4016a2029360200200341f8016a202a360200200341fc016a202b36020020034180026a202c36020020034184026a20820136020020034188026a2083013602002003418c026a208401360200200341c8016a201e280200360200200341c0016a20022903c00d370200200341d8016a20022903b00d370200200341e0016a201d280200360200200341a4026a208701360200200341a0026a2086013602002003419c026a20850136020020034198026a201828020036020020034190026a20022903f00c370200200341a8026a20022903e00c370200200341b0026a201b280200360200200220022802a80d41016a3602a80d200a2020470d000b2001280204210620022802a00d21050b20012006417f6a3602042005450d102008450d1320022902a40d2107200020083602042000410e360200200041146a2007370200200041106a20053602002000410c6a2004360200200041086a200b3602002000411c6a200241d8116a418c0210c9081a0c2b0b200241a00d6a10c2020c0f0b200320084194afc0001058000b200320084194afc0001058000b200041193602000c270b103b000b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024020060e0400010203070b2001200128020441016a2203360204200320012802084b0d06200241d8116a200110b20320022802d8112104200241b00f6a200241d8116a41047241a40210c9081a20044119460d06200241d8116a200241b00f6a41a40210c9081a41a80210322203450d0720032004360200200341046a200241d8116a41a40210c9081a20012001280204417f6a36020420022903b809210d20022903c009210f20022f01c809210820022d00ca09210920022f00cb09210b20022f00cd0921014101210a0c030b2001200128020441016a2203360204200320012802084b0d05200241d8116a200110b20320022802d8112104200241b00f6a200241d8116a41047241a40210c9081a20044119460d05200241d8116a200241b00f6a41a40210c9081a41a80210322203450d0620032004360200200341046a200241d8116a41a40210c9081a20012001280204417f6a3602042001280200220128020422044108490d0420012802002205290000210d2001200441786a3602042001200541086a3602004102210a0c020b41002103200241003a00f81102400340200128020022042802042205450d01200241d8116a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f81120034120470d000b20022900ef112207423888200241f7116a310000220d42088684a7210c2007422888200d42188684a721012007421888a7210b2007421088a72109200241e7116a290000210f20022900df11210d20022800db11210320022f00d911210420022d00d81121052007a721084103210a0c020b200341ff0171450d04200241003a00f8110c040b41002103200241003a00f8110340200128020022042802042205450d02200241d8116a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00f81120034120470d000b200241e7116a290000210f200241f7116a310000210e20022900df11210d20022800db11210320022f00d911210420022d00d811210520022900ef1121072001200128020441016a2206360204200620012802084b0d03200241d8116a200110b20320022802d811210a200241b00f6a200241d8116a41047241a40210c9081a200a4119460d03200241d8116a200241b00f6a41a40210c9081a41a80210322206450d042007421888a7210b2007421088a721092007a721082006200a3602004104210a200641046a200241d8116a41a40210c9081a20012001280204417f6a3602042007422888200e42188684a72201411076210c0b200020093a0022200020043b000a200020053a0009200041183602002000412c6a2006360200200041276a200c3b0000200041256a20013b0000200041236a200b3b0000200041206a20083b0100200041186a200f370200200041106a200d3702002000410c6a2003360200200041086a200a3a0000200041306a20024198056a41f80110c9081a0c280b200341ff0171450d01200241003a00f8110c010b20031083022003102c0b200041193602000c250b1039000b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e0400010203050b2001280200220428020422054104490d0420042802002206280000210320042005417c6a3602042004200641046a360200200241e0086a200110c60420022802e0082204450d04200241e8086a220b280200210820022802e4082105200241e0086a200110c604024002400240024020022802e00822060d0020050d010c080b20022802e4082109024020012802002201280204220a450d00200b280200210b2001280200220c2d000021122001200a417f6a3602044101210a2001200c41016a3602004100210120120e020302000b02402009450d002006102c0b2005450d070b2004102c0c060b410121010b200241b80a6a41106a200241a0076a41106a280200360200200241b80a6a41086a200241a0076a41086a290200370300200241d8076a41086a200241d0096a41086a290200370300200241d8076a410f6a200241d0096a410f6a29000037000020024198056a41086a200241d8116a41086a29020037030020024198056a41106a200241d8116a41106a29020037030020024198056a41186a200241d8116a41186a290200370300200220022902a0073703b80a200220022902d0093703d807200220022902d81137039805200241b8096a41086a200241a8086a41086a280200360200200241c8086a41086a200241d00d6a41086a280200360200200220022902a8083703b809200220022902d00d3703c8080c030b2001280200220128020422044104490d0320012802002205280000210320012004417c6a3602042001200541046a360200200241b80a6a41086a200241a0076a41086a290200370300200241b80a6a41106a200241a0076a41106a280200360200200241d8076a41086a200241d0096a41086a290200370300200241d8076a410f6a200241d0096a410f6a29000037000020024198056a41186a200241d8116a41186a29020037030020024198056a41106a200241d8116a41106a29020037030020024198056a41086a200241d8116a41086a290200370300200220022902a0073703b80a200220022902d0093703d807200220022902d81137039805200241b8096a41086a200241e0086a41086a280200360200200241c8086a41086a200241a8086a41086a280200360200200220022902e0083703b809200220022902a8083703c8084102210a0c020b2001280200220428020422054104490d0220042802002206280000210320042005417c6a3602042004200641046a360200200241d8116a200110c20420022d00d811410a460d02200241b80a6a41086a200241fc116a290200370300200241b80a6a41106a20024184126a2802003602002002200241f4116a2902003703b80a20024197126a29000021112002418f126a290000210e200241a7126a31000021152002419f126a2900002110200241f2116a2f0100210c200241f1116a2d0000218201200241d8116a41186a2d00002101200241ec116a280200210b200241d8116a41106a2802002109200241e4116a2802002106200241d8116a41086a280200210820024188126a2d0000212020024189126a2f000021212002418b126a280000211c20022802dc11210520022802d8112104200241e7076a200241b7126a290000370000200241d8076a41086a200241b0126a29030037030020024198056a41086a200241d0126a29030037030020024198056a41106a200241d8126a29030037030020024198056a41186a200241e0126a2903003703002002200241a8126a2903003703d8072002200241c8126a29030037039805200241c4126a2802002124200241e8126a2d00002112200241e9126a2f00002113200241ff126a2f0000211d20024181136a2d0000211820024182136a2f0100211b20024184136a2f0100211920024186136a2f01002123200241a0136a28020021292002419c136a280200212820024198136a280200212720024194136a280200212620024190136a28020021252002418c136a280200212220024188136a280200211f200241f7126a290000210f200241ef126a290000210d200241eb126a280000211e200241bf126a3500002107200241c3126a3100002114200241b8096a41086a200241ac136a280200360200200241c8086a41086a200241c4136a2802003602002002200241a4136a2902003703b8092002200241bc136a2902003703c80820072014422086842107200241b0136a280200212a200241b4136a280200212b200241b8136a280200212c4103210a0c010b2001280200220428020422054104490d0120042802002206280000210320042005417c6a3602042004200641046a3602002001280200220528020422064104490d0120052802002208280000210420052006417c6a3602042005200841046a36020020012802002206280204220841034d0d0120062802002209280000210520062008417c6a3602042006200941046a3602002001280200220128020422064104490d0120012802002209280000210820012006417c6a3602044104210a2001200941046a360200200241b80a6a41086a200241a0096a41086a290200370300200241b80a6a41106a200241a0096a41106a280200360200200241d8076a41086a200241f80b6a41086a290200370300200241d8076a410f6a200241f80b6a410f6a29000037000020024198056a41186a200241a0076a41186a29020037030020024198056a41106a200241a0076a41106a29020037030020024198056a41086a200241a0076a41086a290200370300200220022902a0093703b80a200220022902f80b3703d807200220022902a00737039805200241b8096a41086a20024190096a41086a280200360200200241c8086a41086a20024180096a41086a28020036020020022002290290093703b80920022002290280093703c8080b200241880a6a41106a228301200241b80a6a41106a280200360200200241880a6a41086a228401200241b80a6a41086a290300370300200241980b6a41086a228501200241d8076a41086a290300370300200241980b6a410f6a228601200241d8076a410f6a29000037000020024190036a41086a22870120024198056a41086a29030037030020024190036a41106a22880120024198056a41106a29030037030020024190036a41186a22890120024198056a41186a290300370300200220022903b80a3703880a200220022903d8073703980b20022002290398053703900320024190086a41086a228a01200241b8096a41086a280200360200200241e80d6a41086a228b01200241c8086a41086a280200360200200220022903b80937039008200220022903c8083703e80d2000200c3b002a20002082013a0029200041286a20013a0000200041246a200b360200200041206a20093602002000411c6a2006360200200041186a2008360200200041146a2005360200200041106a20043602002000410c6a2003360200200041086a200a36020020004117360200200041df006a20153c0000200041d7006a2010370000200041cf006a2011370000200041c7006a200e370000200041c3006a201c360000200041c1006a20213b0000200041c0006a20203a00002000412c6a20022903880a370200200041346a2084012903003702002000413c6a208301280200360200200041ef006a208601290000370000200041e8006a208501290300370200200041e0006a20022903980b370200200041fb006a20074220883c0000200041f7006a20073e0000200041fc006a202436020020004198016a20890129030037020020004190016a20880129030037020020004188016a20870129030037020020004180016a200229039003370200200041d8016a2029360200200041d4016a2028360200200041d0016a2027360200200041cc016a2026360200200041c8016a2025360200200041c4016a2022360200200041c0016a201f360200200041be016a20233b0100200041bc016a20193b0100200041ba016a201b3b0100200020183a00b901200041b7016a201d3b0000200041af016a200f370000200041a7016a200d370000200041a3016a201e360000200041a1016a20133b0000200041a0016a20123a0000200041e8016a202a360200200041ec016a202b360200200041f0016a202c360200200041e4016a208a01280200360200200041dc016a200229039008370200200041f4016a20022903e80d370200200041fc016a208b0128020036020020004180026a20022903b00f37030020004188026a200241b00f6a41086a29030037030020004190026a200241b00f6a41106a29030037030020004198026a200241b00f6a41186a290300370300200041a0026a200241b00f6a41206a2903003703000c240b200041193602000c230b0240200128020022032802042204450d00200328020022052d0000210820032004417f6a3602042003200541016a3602004102210602400240024002400240024020080e050005010203060b2001280200220328020422054104490d0520032802002206280000210420032005417c6a3602042003200641046a360200200241b00f6a200110c60420022802b00f2203450d0520022902b40f2107200241b00f6a200110c60420022802b00f22050d032007a7450d052003102c0c050b410321060c030b410421060c020b2001280200220128020422034104490d0220012802002205280000210420012003417c6a3602042001200541046a360200410521060c010b20022902b40f210d410121060b20002006360204200041163602002000411c6a200d370200200041186a2005360200200041106a20073702002000410c6a2003360200200041086a2004360200200041246a200241d8116a41840210c9081a0c230b200041193602000c220b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c210b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e03000102040b2001280200220328020422054104490d0320032802002206280000210420032005417c6a3602042003200641046a3602002001280200220528020422064104490d0320052802002208280000210320052006417c6a3602042005200841046a3602002001280200220528020422064104490d0320052802002208280000210120052006417c6a3602042005200841046a360200410121050c020b2001280200220128020422034104490d0220012802002205280000210420012003417c6a3602042001200541046a360200410221050c010b2001280200220328020422054104490d0120032802002206280000210420032005417c6a3602042003200641046a3602002001280200220128020422054104490d0120012802002206280000210320012005417c6a3602042001200641046a360200410321050b2000200536020420004114360200200041106a20013602002000410c6a2003360200200041086a2004360200200041146a200241d8116a41940210c9081a0c210b200041193602000c200b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c1f0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c1e0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c1d0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c1c0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041193602000c1b0b02402004450d002008200441d0006c6a2106200821010340200141046a41003602002001280200210520014101360200200141086a2802002203200420031b210402402003450d002004450d002005102c0b200141d0006a22012006470d000b0b200b450d02200b41d0006c450d022008102c0c020b2004450d002002280290032201200441d0006c6a21060340200141046a41003602002001280200210520014101360200200141086a2802002203200420031b210402402003450d002004450d002005102c0b200141d0006a22012006470d000b0b200228029003410020022802940322011b2203450d00200141d0006c450d002003102c0b200041193602000c170b20054100200228029c0522011b2203450d002001410c6c450d002003102c0b2009450d002008102c0b200041193602000c140b2004102c0b200041193602000c120b410021094102210302402004450d002005102c0b410021060b200241d8116a2001108704024002400240024020022802d811450d00200241b00f6a200241d8116a41c00110c9081a200241003a0088122001280200220428020422054110490d032004280200220841086a29000021072008290000210d2004200841106a3602002004200541706a360204200241013a0088122002200d3703d811200220073703e011200128020022042802042205410f4b0d010c020b20090d050c060b2004280200220841086a29000021072008290000210d2004200841106a3602002004200541706a360204200241d8116a41186a22052007370300200241023a0088122002200d3703e8112001280200220428020422084110490d002004280200220b41086a2900002107200b290000210d2004200b41106a360200200241d8116a41286a20073703002004200841706a360204200241033a0088122002200d3703f811200241980b6a41086a200241d8116a41086a290300220f370300200241980b6a41106a200241d8116a41106a290300220e370300200241980b6a41186a20052903002211370300200241980b6a41206a200d370300200241980b6a41286a2007370300200220022903d81122103703980b200241b80a6a41286a22042007370300200241b80a6a41206a2205200d370300200241b80a6a41186a22082011370300200241b80a6a41106a220b200e370300200241b80a6a41086a220a200f370300200220103703b80a200241880a6a41286a2004290300370300200241880a6a41206a2005290300370300200241880a6a41186a2008290300370300200241880a6a41106a200b290300370300200241880a6a41086a200a290300370300200220022903b80a3703880a024002402001280200220428020422054104490d0020042802002208280000211e20042005417c6a3602042004200841046a360200200241e0026a200110880420022f01e0020d0120022f01e202211d200241d8026a200110b00320022802d8020d0120022802dc022123200241d40d6a200241e60f6a2f01003b0100200220022801e20f3602d00d200241d10f6a290000210f200241b00f6a41106a3100002114200241f00f6a2903002111200241e80f6a290300210e200241dc0f6a2f0100210c200241c40f6a280200211820022900c90f210d20022903b80f211520022801de0f210a20022d00db0f211220022f00d90f211320022d00c80f211b20022f01c20f211920022d00c10f210b20022903b00f210720024198056a200241f80f6a41f80010c9081a200241de096a200241880a6a41086a290300370100200241e6096a200241880a6a41106a29030037010041182105200241ee096a200241880a6a41186a290300370100200241f6096a200241880a6a41206a290300370100200241d0096a412e6a200241880a6a41286a2903002210370100200241d8076a412e6a2010370100200220022903880a3701d609200241d8076a41086a200241d0096a41086a290100370300200241d8076a41106a200241d0096a41106a290100370300200241d8076a41186a200241d0096a41186a290100370300200241d8076a41206a200241d0096a41206a290100370300200241d8076a41286a200241d0096a41286a290100370300200220022901d0093703d8072007422088211020074220862006ad8421070c0a0b200241b00f6a10e90120090d050c060b200241b00f6a10e9012009450d050c040b200241003a0088120b200241b00f6a10e90120090d020c030b410021094102210302402004450d002005102c0b410021060b200241d8116a2001108704024002400240024020022802d811450d00200241b00f6a200241d8116a41c00110c9081a200241003a0088122001280200220428020422054110490d032004280200220841086a29000021072008290000210d2004200841106a3602002004200541706a360204200241013a0088122002200d3703d811200220073703e011200128020022042802042205410f4b0d010c020b20090d030c040b2004280200220841086a29000021072008290000210d2004200841106a3602002004200541706a360204200241d8116a41186a22052007370300200241023a0088122002200d3703e8112001280200220428020422084110490d002004280200220b41086a2900002107200b290000210d2004200b41106a360200200241d8116a41286a20073703002004200841706a360204200241033a0088122002200d3703f811200241980b6a41086a200241d8116a41086a290300220f370300200241980b6a41106a200241d8116a41106a290300220e370300200241980b6a41186a20052903002211370300200241980b6a41206a200d370300200241980b6a41286a2007370300200220022903d81122103703980b200241b80a6a41286a22042007370300200241b80a6a41206a2205200d370300200241b80a6a41186a22082011370300200241b80a6a41106a220b200e370300200241b80a6a41086a220a200f370300200220103703b80a200241880a6a41286a2004290300370300200241880a6a41206a2005290300370300200241880a6a41186a2008290300370300200241880a6a41106a200b290300370300200241880a6a41086a200a290300370300200220022903b80a3703880a024002402001280200220428020422054104490d0020042802002208280000211e20042005417c6a3602042004200841046a360200200241c8026a200110880420022f01c8020d0120022f01ca02211d200241c0026a200110b00320022802c0020d0120022802c4022123200241d40d6a200241e60f6a2f01003b0100200220022801e20f3602d00d200241d10f6a290000210f200241b00f6a41106a3100002114200241f00f6a2903002111200241e80f6a290300210e200241dc0f6a2f0100210c200241c40f6a280200211820022900c90f210d20022903b80f211520022801de0f210a20022d00db0f211220022f00d90f211320022d00c80f211b20022f01c20f211920022d00c10f210b20022903b00f210720024198056a200241f80f6a41f80010c9081a200241de096a200241880a6a41086a290300370100200241e6096a200241880a6a41106a290300370100200241ee096a200241880a6a41186a290300370100200241f6096a200241880a6a41206a290300370100200241d0096a412e6a200241880a6a41286a2903002210370100200241d8076a412e6a2010370100200220022903880a3701d609200241d8076a41086a200241d0096a41086a290100370300200241d8076a41106a200241d0096a41106a290100370300200241d8076a41186a200241d0096a41186a290100370300200241d8076a41206a200241d0096a41206a290100370300200241d8076a41286a200241d0096a41286a290100370300200220022901d0093703d8072007422088211020074220862006ad842107411721050c080b200241b00f6a10e90120090d030c040b200241b00f6a10e90120090d020c030b200241003a0088120b200241b00f6a10e9012009450d010b2003102c0b200041193602000c0c0b41042109420021072004450d002001102c0b200241d00d6a41046a200241d0096a41046a2f01003b0100200220022801d0093602d00d20024198056a200241d8116a41f80010c9081a200241d8076a412e6a200241b00f6a412e6a290100370100200241d8076a41286a200241b00f6a41286a290100370300200241d8076a41206a200241b00f6a41206a290100370300200241d8076a41186a200241b00f6a41186a290100370300200241d8076a41106a200241b00f6a41106a290100370300200241d8076a41086a200241b00f6a41086a290100370300200220022901b00f3703d80742002110411221050b200241f80b6a41046a2201200241d00d6a41046a2f01003b0100200220022802d00d3602f80b20024190036a20024198056a41f80010c9081a200241a0076a412e6a2206200241d8076a412e6a290100370100200241a0076a41286a2224200241d8076a41286a290300370300200241a0076a41206a2220200241d8076a41206a290300370300200241a0076a41186a2221200241d8076a41186a290300370300200241a0076a41106a221c200241d8076a41106a290300370300200241a0076a41086a221f200241d8076a41086a290300370300200220022903d8073703a007200041396a200f370000200041316a200d370000200041286a20143c0000200041206a2015370200200041186a2010422086200742208884370200200041106a20074220862009ad84370200200041c6006a200a360100200041c4006a200c3b0100200020123a0043200041c1006a20133b0000200041306a201b3a00002000412c6a2018360200200020193b012a2000200b3a00292000410c6a2003360200200020083b010a200020043a0009200041086a20053a000020004106360200200041d8006a2011370200200041d0006a200e370200200020022802f80b36014a200041ce006a20012f01003b0100200041e0006a20024190036a41f80010c9081a200041e0016a201d3b0100200041dc016a2023360200200041d8016a201e360200200020022903a0073701e201200041ea016a201f290300370100200041f2016a201c290300370100200041fa016a202129030037010020004182026a20202903003701002000418a026a202429030037010020004190026a200629010037010020004198026a20022903e008370300200041a0026a200241e0086a41086a2903003703000c090b2006410020022802d40922011b2203450d00200141f0006c450d002003102c0b200041193602000c070b200041193602000c060b20024198056a200241b00f6a41880210c9081a410221010b20024190036a20024198056a41880210c9081a2000411c6a2003360200200041146a2007370200200041106a20043602002000410c6a2005360200200041086a200136020020004101360200200041206a20024190036a41880210c9081a0c040b0b20004100360200200041186a2005360200200041106a20073702002000410c6a2003360200200041086a2004360200200041206a200241d8116a41880210c9081a0c020b200241b00f6a10c1020b200041193602000b20024180146a24000bd51201057f02400240024002400240024002400240024002400240024020002802000e1800010b0b0b02030b0405060b0b0b070b0b0b0b0b0b0b08090a0b024002400240024002400240200041086a280200417e6a0e080010010210030405100b200041106a2802002201450d0f2000410c6a2802002200450d0f2001450d0f2000102c0f0b200041106a2802002201450d0e2000410c6a2802002200450d0e2001450d0e2000102c0f0b200041106a2802002201450d0d2000410c6a2802002200450d0d2001450d0d2000102c0f0b2000410c6a10c1020f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d0b200028020c2200450d0b2001410c6c450d0b2000102c0f0b200041106a2802002201450d0a2000410c6a2802002200450d0a2001450d0a2000102c0f0b02400240200041086a2802000e020b00010b2000412c6a102b2000419c016a102b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0a20002802102200450d0a2001410c6c450d0a2000102c0f0b2000412c6a102b2000419c016a102b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0920002802102200450d092001410c6c450d092000102c0f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a210103402001102b200141f0006a2101200241907f6a22020d000b0b200041086a2802002201450d0820002802042200450d08200141f0006c450d082000102c0f0b02400240024002400240200041086a2d00000e180c0c0c0c0c0c000c0c0c0c0c0c0c0c010c0c020c0c0c0c03040b200041106a2802002201450d0b2000410c6a2802002200450d0b200141ffffff3f71450d0b2000102c0f0b200041106a2802002201450d0a2000410c6a2802002200450d0a200141ffffff3f71450d0a2000102c0f0b200041146a2802002201450d09200041106a2802002200450d09200141ffffffff0371450d092000102c0f0b0240200041106a2802002201450d002000410c6a2802002202450d00200141ffffffff0771450d002002102c0b200041186a10e9010f0b0240200041106a2802002201450d002000410c6a2802002202450d00200141ffffffff0771450d002002102c0b200041186a10e9010f0b20002802042201450d06200041086a280200450d062001102c0f0b02400240200041086a280200417f6a0e020001070b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0620002802102200450d062001410c6c450d062000102c0f0b0240200041186a2802002202450d00200041106a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041146a2802002201450d0520002802102200450d052001410c6c450d052000102c0f0b02402000410c6a2802002201450d00200041086a2802002202450d002001450d002002102c0b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d002001280200102c0b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d0420002802142200450d042001410c6c450d042000102c0f0b02402000410c6a2802002202450d0020002802042201200241d0006c6a21030340200141046a41003602002001280200210420014101360200200141086a2802002202200520021b210502402002450d002005450d002004102c0b200141d0006a22012003470d000b0b0240200041086a2802002201450d0020002802042202450d00200141d0006c450d002002102c0b200041106a10c2020f0b20002802044101470d020240200041106a2802002201450d002000410c6a2802002202450d002001450d002002102c0b2000411c6a2802002201450d02200041186a2802002200450d022001450d022000102c0f0b02400240200041086a280200417f6a0e03000301030b0240200041146a2802002201450d00200041106a2802002202450d002001450d002002102c0b200041206a2802002201450d022000411c6a2802002200450d022001450d022000102c0c020b0240024002400240024002400240200041106a2d00000e0700010203040506080b200041146a2802002000411c6a28020010c3020240200041186a2802002201450d0020002802142202450d0020014198026c450d002002102c0b200041206a280200200041286a28020010c402200041246a2802002201450d0720002802202200450d0720014188026c450d072000102c0f0b200041146a2802002000411c6a28020010c3020240200041186a2802002201450d0020002802142202450d0020014198026c450d002002102c0b200041206a280200200041286a28020010c402200041246a2802002201450d0620002802202200450d0620014188026c450d062000102c0f0b200041146a2802002000411c6a28020010c3020240200041186a2802002201450d0020002802142202450d0020014198026c450d002002102c0b200041206a280200200041286a28020010c402200041246a2802002201450d0520002802202200450d0520014188026c450d052000102c0f0b200041146a2802002000411c6a28020010c302200041186a2802002201450d0420002802142200450d0420014198026c450d042000102c0f0b200041186a2802002201450d03200041146a2802002200450d032001450d032000102c0f0b200041186a10a201200041146a220128020010c5022001280200102c0f0b200041186a10a201200041146a220128020010c5022001280200102c0f0b024002400240200041086a2d00000e0403000103020b2000410c6a22012802001083022001280200102c0f0b2000410c6a22012802001083022001280200102c0f0b2000412c6a22012802001083022001280200102c0f0b0bc9840104047f017e057f017e230041106b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e19000102030405060708090a0b0c0d0e0f101112131415161718190b2001200141086a22032802004101102f200128020020032802006a41003a00002003200328020041016a22043602000240024002400240024002400240024002400240200041086a280200417f6a0e0a00010203040506070809220b200120044101102f200128020020032802006a41003a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c210b200120044101102f200128020020032802006a41013a00002003200328020041016a3602002000410c6a280200200041146a280200200110bb010c200b200120044101102f200128020020032802006a41023a00002003200328020041016a2204360200200041106a2903002106200120044108102f200128020020032802006a20063700002003200328020041086a3602000c1f0b200120044101102f200128020020032802006a41033a00002003200328020041016a3602002000410c6a280200200041146a280200200110bb010c1e0b200120044101102f200128020020032802006a41043a00002003200328020041016a3602002000410c6a280200200041146a280200200110bb010c1d0b200120044101102f200128020020032802006a41053a00002003200328020041016a36020020012000410c6a1085020c1c0b200120044101102f200128020020032802006a41063a00002003200328020041016a3602002000410c6a28020021032001200041146a2802002204108f012004450d1b2003200441186c6a210403402003280200200341086a280200200110bb012003410c6a280200200341146a280200200110bb01200341186a22032004470d000c1c0b0b200120044101102f200128020020032802006a41073a00002003200328020041016a3602002000410c6a28020021032001200041146a2802002204108f012004450d1a20032004410c6c6a210403402003280200200341086a280200200110bb012003410c6a22032004470d000c1b0b0b200120044101102f200128020020032802006a41083a00002003200328020041016a3602002000410c6a280200200041146a280200200110bb01200041186a2802002104200120032802004104102f200128020020032802006a20043600002003200328020041046a3602000c190b200120044101102f200128020020032802006a41093a00002003200328020041016a3602000c180b2001200141086a22032802004101102f200128020020032802006a41013a00002003200328020041016a220436020002400240200041086a280200417f6a0e020001190b200120044101102f200128020020032802006a41003a00002003200328020041016a2204360200200120044120102f200128020020032802006a220420004188026a290000370000200441186a200041a0026a290000370000200441106a20004198026a290000370000200441086a20004190026a2900003700002003200328020041206a2204360200200041206a2903002106200120044108102f200128020020032802006a20063700002003200328020041086a3602002001200041286a10b507200120004198016a10b50720012000410c6a10ab070c180b200120044101102f200128020020032802006a41013a00002003200328020041016a2204360200200120044120102f200128020020032802006a220420004188026a290000370000200441186a200041a0026a290000370000200441106a20004198026a290000370000200441086a20004190026a2900003700002003200328020041206a2204360200200041206a2903002106200120044108102f200128020020032802006a20063700002003200328020041086a3602002001200041286a10b507200120004198016a10b50720012000410c6a10ab070c170b2001200141086a22032802004101102f200128020020032802006a41023a00002003200328020041016a2204360200200120044101102f200128020020032802006a41003a00002003200328020041016a3602002001200041086a10a6010c160b2001200141086a22032802004101102f200128020020032802006a41033a00002003200328020041016a2205360200200041046a21040240024002400240024020002d0004417f6a0e0500010203041a0b200120054101102f200128020020032802006a41003a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c190b200120054101102f200128020020032802006a41013a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a2204360200200041286a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c180b200120054101102f200128020020032802006a41023a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c170b200120054101102f200128020020032802006a41033a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a2204360200200041286a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a220436020020002d00252105200120044101102f200128020020032802006a20053a00002003200328020041016a3602000c160b200120054101102f200128020020032802006a41043a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c150b2001200141086a22032802004101102f200128020020032802006a41043a00002003200328020041016a22053602000240024002400240200041086a22042d0000417f6a0e0400010203180b200120054101102f200128020020032802006a41003a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a3602002002200041306a3602002002200110e9030c170b200120054101102f200128020020032802006a41013a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a3602002002200041306a3602002002200110e9032002200041c0006a3602002002200110e9030c160b200120054101102f200128020020032802006a41023a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a2205360200200120054120102f200128020020032802006a2205200441216a290000370000200541186a200441396a290000370000200541106a200441316a290000370000200541086a200441296a2900003700002003200328020041206a3602002002200041d0006a3602002002200110e9030c150b200120054101102f200128020020032802006a41033a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a3602002002200041306a3602002002200110e9030c140b2001200141086a22032802004101102f200128020020032802006a41063a00002003200328020041016a2204360200200120044101102f200128020020032802006a41003a00002003200328020041016a3602002000280204210520012000410c6a2802002204108f012004450d13200441f0006c2107034020052104412010322205450d152002422037020420022005360200200241004120102f20022802002208200228020822096a2205200441106a290000370000200541086a200441186a290000370000200541106a200441206a290000370000200541186a200441286a2900003700002002200941206a2205360208200120032802002005102f200128020020032802006a2008200510c9081a2003200328020020056a36020020022802042205200020051b210002402005450d002000450d002008102c0b02400240024002402004280200220541c000490d00200541808001490d012005418080808004490d02200120032802004101102f200128020020032802006a41033a00002003200328020041016a220536020020042802002108200120054104102f200128020020032802006a20083600002003200328020041046a3602000c030b200120032802004101102f200128020020032802006a20054102743a00002003200328020041016a3602000c020b200120032802004102102f200128020020032802006a20054102744101723b00002003200328020041026a3602000c010b200120032802004104102f200128020020032802006a20054102744102723600002003200328020041046a3602000b412010322205450d152002422037020420022005360200200241004120102f20022802002208200228020822096a2205200441306a290000370000200541086a200441386a290000370000200541106a200441c0006a290000370000200541186a200441c8006a2900003700002002200941206a2205360208200120032802002005102f200128020020032802006a2008200510c9081a2003200328020020056a36020020022802042205200a20051b210a02402005450d00200a450d002008102c0b412010322205450d152002422037020420022005360200200241004120102f20022802002208200228020822096a2205200441d0006a290000370000200541086a200441d8006a290000370000200541106a200441e0006a290000370000200541186a200441e8006a2900003700002002200941206a2205360208200120032802002005102f200128020020032802006a2008200510c9081a2003200328020020056a36020020022802042205200b20051b210b02402005450d00200b450d002008102c0b200441f0006a21052001200441046a10aa05200741907f6a22070d000c140b0b2001200141086a22032802004101102f200128020020032802006a41073a00002003200328020041016a2204360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200041086a22052d0000417f6a0e18000102030405060708090a0b0c0d0e0f10111213141516172a0b200120044101102f200128020020032802006a41003a00002003200328020041016a2204360200200120044120102f200128020020032802006a22042005290001370000200441186a200541196a290000370000200441106a200541116a290000370000200441086a200541096a2900003700002003200328020041206a3602002002200041d0006a3602002002200110e9032001200541216a10ae070c290b200120044101102f200128020020032802006a41013a00002003200328020041016a3602002002200041106a3602002002200110e9030c280b200120044101102f200128020020032802006a41023a00002003200328020041016a3602002002200041106a3602002002200110e9030c270b200120044101102f200128020020032802006a41033a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c260b200120044101102f200128020020032802006a41043a00002003200328020041016a22043602000240024002402000410c6a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22032802006a41033a00002003200328020041016a2204360200200028020c2105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c280b200120044101102f2001280200200141086a22042802006a20034102743a00002004200428020041016a3602000c270b200120044102102f2001280200200141086a22042802006a20034102744101723b00002004200428020041026a3602000c260b200120044104102f2001280200200141086a22042802006a20034102744102723600002004200428020041046a3602000c250b200120044101102f200128020020032802006a41053a00002003200328020041016a3602002000410c6a28020021032001200041146a2802002204108f012004450d2420044105742100200141086a220528020021040340200120044120102f200128020020052802006a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002005200528020041206a2204360200200341206a2103200041606a22000d000c250b0b200120044101102f200128020020032802006a41063a00002003200328020041016a3602000c230b200120044101102f200128020020032802006a41073a00002003200328020041016a3602002001200541016a10ae070c220b200120044101102f200128020020032802006a41083a00002003200328020041016a2204360200200120044120102f200128020020032802006a22042005290001370000200441186a200541196a290000370000200441106a200541116a290000370000200441086a200541096a2900003700002003200328020041206a3602000c210b200120044101102f200128020020032802006a41093a00002003200328020041016a22043602000240024002402000410c6a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22032802006a41033a00002003200328020041016a2204360200200028020c2105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c230b200120044101102f2001280200200141086a22042802006a20034102743a00002004200428020041016a3602000c220b200120044102102f2001280200200141086a22042802006a20034102744101723b00002004200428020041026a3602000c210b200120044104102f2001280200200141086a22042802006a20034102744102723600002004200428020041046a3602000c200b200120044101102f200128020020032802006a410a3a00002003200328020041016a22043602000240024002402000410c6a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22032802006a41033a00002003200328020041016a2204360200200028020c2105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c220b200120044101102f2001280200200141086a22042802006a20034102743a00002004200428020041016a3602000c210b200120044102102f2001280200200141086a22042802006a20034102744101723b00002004200428020041026a3602000c200b200120044104102f2001280200200141086a22042802006a20034102744102723600002004200428020041046a3602000c1f0b200120044101102f200128020020032802006a410b3a00002003200328020041016a220436020020052d00012105200120044101102f200128020020032802006a20053a00002003200328020041016a3602000c1e0b200120044101102f200128020020032802006a410c3a00002003200328020041016a3602000c1d0b200120044101102f200128020020032802006a410d3a00002003200328020041016a3602000c1c0b200120044101102f200128020020032802006a410e3a00002003200328020041016a3602002000410c6a28020021032001200041146a2802002204108f012004450d1b20044105742100200141086a220528020021040340200120044120102f200128020020052802006a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002005200528020041206a2204360200200341206a2103200041606a22000d000c1c0b0b200120044101102f200128020020032802006a410f3a00002003200328020041016a2204360200200120044120102f200128020020032802006a22042005290001370000200441186a200541196a290000370000200441106a200541116a290000370000200441086a200541096a2900003700002003200328020041206a22043602002000412c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1a0b200120044101102f200128020020032802006a41103a00002003200328020041016a3602000c190b200120044101102f200128020020032802006a41113a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a360200200041106a280200200041186a280200200110d5030c180b200120044101102f200128020020032802006a41123a00002003200328020041016a2204360200200120044120102f200128020020032802006a22042005290001370000200441186a200541196a290000370000200441106a200541116a290000370000200441086a200541096a2900003700002003200328020041206a22043602002000412c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c170b200120044101102f200128020020032802006a41133a00002003200328020041016a3602002002200041106a3602002002200110e9030c160b200120044101102f200128020020032802006a41143a00002003200328020041016a220436020002400240024002402000410c6a280200220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22032802006a41033a00002003200328020041016a2204360200200028020c2105200120044104102f200128020020032802006a20053600002003200328020041046a22043602000c030b200120044101102f2001280200200141086a22052802006a20034102743a00002005200528020041016a22043602000c020b200120044102102f2001280200200141086a22052802006a20034102744101723b00002005200528020041026a22043602000c010b200120044104102f2001280200200141086a22052802006a20034102744102723600002005200528020041046a22043602000b0240024002402000280210220341c000490d00200341808001490d012003418080808004490d02200120044101102f2001280200200141086a22032802006a41033a00002003200328020041016a220436020020002802102105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c180b200120044101102f2001280200200141086a22042802006a20034102743a00002004200428020041016a3602000c170b200120044102102f2001280200200141086a22042802006a20034102744101723b00002004200428020041026a3602000c160b200120044104102f2001280200200141086a22042802006a20034102744102723600002004200428020041046a3602000c150b200120044101102f200128020020032802006a41153a00002003200328020041016a2204360200200120044120102f200128020020032802006a22042005290001370000200441186a200541196a290000370000200441106a200541116a290000370000200441086a200541096a2900003700002003200328020041206a22043602002000412c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c140b200120044101102f200128020020032802006a41163a00002003200328020041016a36020020012000410c6a10ad072002200041186a109201200228020021052001200328020020022802082204102f200128020020032802006a2005200410c9081a2003200420032802006a2204360200200041dc016a210a200041e8016a210302402002280204450d002005102c200141086a28020021040b200120044130102f2001280200200141086a22042802006a22052003290000370000200541286a200341286a290000370000200541206a200341206a290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a2900003700002004200428020041306a220336020020002802d8012105200120034104102f200128020020042802006a20053600002004200428020041046a3602002001200a10b0070c130b200120044101102f200128020020032802006a41173a00002003200328020041016a36020020012000410c6a10ad072002200041186a109201200228020021052001200328020020022802082204102f200128020020032802006a2005200410c9081a2003200420032802006a2204360200200041dc016a210a200041e8016a210302402002280204450d002005102c200141086a28020021040b200120044130102f2001280200200141086a22042802006a22052003290000370000200541286a200341286a290000370000200541206a200341206a290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a2900003700002004200428020041306a220336020020002802d8012105200120034104102f200128020020042802006a20053600002004200428020041046a3602002001200a10b0070c120b2001200141086a22032802004101102f200128020020032802006a41083a00002003200328020041016a360200200110c0010c110b2001200141086a22032802004101102f200128020020032802006a410a3a00002003200328020041016a220436020002402000280204450d00200120044101102f200128020020032802006a41003a00002003200328020041016a2204360200200120044120102f200128020020032802006a2204200041106a290000370000200441186a200041286a290000370000200441106a200041206a290000370000200441086a200041186a2900003700002003200328020041206a2204360200200120044120102f200128020020032802006a2204200041306a290000370000200441186a200041c8006a290000370000200441106a200041c0006a290000370000200441086a200041386a2900003700002003200328020041206a2204360200200120044120102f200128020020032802006a2204200041d0006a290000370000200441186a200041e8006a290000370000200441106a200041e0006a290000370000200441086a200041d8006a2900003700002003200328020041206a2204360200200120044120102f200128020020032802006a2204200041f0006a290000370000200441186a20004188016a290000370000200441106a20004180016a290000370000200441086a200041f8006a2900003700002003200328020041206a2204360200200120044120102f200128020020032802006a220420004190016a290000370000200441186a200041a8016a290000370000200441106a200041a0016a290000370000200441086a20004198016a2900003700002003200328020041206a2204360200200120044120102f200128020020032802006a2204200041b0016a290000370000200441186a200041c8016a290000370000200441106a200041c0016a290000370000200441086a200041b8016a2900003700002003200328020041206a36020020002802042000410c6a280200200110bb010c110b200120044101102f200128020020032802006a41013a00002003200328020041016a3602000c100b2001200141086a22032802004101102f200128020020032802006a410b3a00002003200328020041016a2204360200024002400240200041086a280200417f6a0e03000102120b200120044101102f200128020020032802006a41003a00002003200328020041016a3602002001200041206a10b40720012000410c6a10ab070c110b200120044101102f200128020020032802006a41013a00002003200328020041016a3602002001200041206a10b40720012000410c6a10ab070c100b200120044101102f200128020020032802006a41023a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a2204360200200041106a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c0f0b2001200141086a22042802004101102f200128020020042802006a410c3a00002004200428020041016a2203360200200120034101102f200128020020042802006a41003a00002004200428020041016a220336020020002802042105200120034104102f200128020020042802006a20053600002004200428020041046a360200200041086a280200200041106a280200200110bb01200041146a280200210320012000411c6a2802002205108f012000412c6a210a02402005450d0020032005410c6c6a210503402003280200200341086a280200200110bb012003410c6a22032005470d000b0b200041206a2802002103200120042802004104102f200128020020042802006a20033600002004200428020041046a2203360200200041246a2802002105200120034104102f200128020020042802006a20053600002004200428020041046a2203360200200041286a2802002105200120034104102f200128020020042802006a20053600002004200428020041046a22033602002001200341c000102f200128020020042802006a2203200a290000370000200341386a200a41386a290000370000200341306a200a41306a290000370000200341286a200a41286a290000370000200341206a200a41206a290000370000200341186a200a41186a290000370000200341106a200a41106a290000370000200341086a200a41086a2900003700002004200428020041c0006a3602000c0e0b2001200141086a22032802004101102f200128020020032802006a410d3a00002003200328020041016a360200200110c0010c0d0b2001200141086a22032802004101102f200128020020032802006a410f3a00002003200328020041016a2204360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200041086a280200417f6a0e24000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223300b200120044101102f200128020020032802006a41003a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c2f0b200120044101102f200128020020032802006a41013a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c2e0b200120044101102f200128020020032802006a41023a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c2d0b200120044101102f200128020020032802006a41033a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c2c0b200120044101102f200128020020032802006a41043a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c2b0b200120044101102f200128020020032802006a41053a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c2a0b200120044101102f200128020020032802006a41063a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c290b200120044101102f200128020020032802006a41073a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c280b200120044101102f200128020020032802006a41083a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c270b200120044101102f200128020020032802006a41093a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c260b200120044101102f200128020020032802006a410a3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c250b200120044101102f200128020020032802006a410b3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c240b200120044101102f200128020020032802006a410c3a00002003200328020041016a36020020012000410c6a10be030c230b200120044101102f200128020020032802006a410d3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c220b200120044101102f200128020020032802006a410e3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c210b200120044101102f200128020020032802006a410f3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c200b200120044101102f200128020020032802006a41103a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1f0b200120044101102f200128020020032802006a41113a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1e0b200120044101102f200128020020032802006a41123a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1d0b200120044101102f200128020020032802006a41133a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1c0b200120044101102f200128020020032802006a41143a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1b0b200120044101102f200128020020032802006a41153a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c1a0b200120044101102f200128020020032802006a41163a00002003200328020041016a2204360200200041106a2903002106200120044108102f200128020020032802006a20063700002003200328020041086a3602000c190b200120044101102f200128020020032802006a41173a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c180b200120044101102f200128020020032802006a41183a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c170b200120044101102f200128020020032802006a41193a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c160b200120044101102f200128020020032802006a411a3a00002003200328020041016a2204360200200041106a2903002106200041186a290300210c200120044110102f200128020020032802006a2204200c370008200420063700002003200328020041106a3602000c150b200120044101102f200128020020032802006a411b3a00002003200328020041016a2204360200200041106a2903002106200041186a290300210c200120044110102f200128020020032802006a2204200c370008200420063700002003200328020041106a3602000c140b200120044101102f200128020020032802006a411c3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c130b200120044101102f200128020020032802006a411d3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c120b200120044101102f200128020020032802006a411e3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c110b200120044101102f200128020020032802006a411f3a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c100b200120044101102f200128020020032802006a41203a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c0f0b200120044101102f200128020020032802006a41213a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c0e0b200120044101102f200128020020032802006a41223a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c0d0b200120044101102f200128020020032802006a41233a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c0c0b2001200141086a22032802004101102f200128020020032802006a41103a00002003200328020041016a360200200110c0010c0b0b2001200141086a22052802004101102f200128020020052802006a41113a00002005200528020041016a2203360200200120034101102f200128020020052802006a41003a00002005200528020041016a3602002000280204210320012000410c6a2802002204108f0102402004450d002003200441d0006c6a210a03402001200310e3052003410c6a2802002104200120052802004104102f200128020020052802006a20043600002005200528020041046a22043602002001200441c000102f200128020020052802006a2204200341106a290000370000200441386a200341c8006a290000370000200441306a200341c0006a290000370000200441286a200341386a290000370000200441206a200341306a290000370000200441186a200341286a290000370000200441106a200341206a290000370000200441086a200341186a2900003700002005200528020041c0006a360200200a200341d0006a2203470d000b0b200028021021082001200041186a2802002203108f012003450d0a2008200341b4026c6a2109200141086a210403402001200810c804200841e4016a200110b505200828029c022105200120082802a4022203108f01200841b4026a210702402003450d00200341c1006c210a034020052d00002100200120042802004101102f200541016a2103200128020020042802006a210b0240024020004101460d00200b41013a00002004200428020041016a22003602002001200041c000102f200128020020042802006a22002003290000370000200041386a200341386a290000370000200041306a200341306a290000370000200041286a200341286a290000370000200041206a200341206a290000370000200041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a2900003700000c010b200b41023a00002004200428020041016a22003602002001200041c000102f200128020020042802006a22002003290000370000200041386a200341386a290000370000200041306a200341306a290000370000200041286a200341286a290000370000200041206a200341206a290000370000200041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a2900003700000b200541c1006a21052004200428020041c0006a360200200a41bf7f6a220a0d000b0b2001200841a8026a10e3052007210820072009470d000c0b0b0b2001200141086a22032802004101102f200128020020032802006a41123a00002003200328020041016a360200200110c0010c090b2001200141086a22032802004101102f200128020020032802006a41133a00002003200328020041016a360200200110c0010c080b2001200141086a22032802004101102f200128020020032802006a41143a00002003200328020041016a360200200110c0010c070b2001200141086a22032802004101102f200128020020032802006a41153a00002003200328020041016a360200200110c0010c060b2001200141086a22032802004101102f200128020020032802006a41163a00002003200328020041016a360200200110c0010c050b2001200141086a22032802004101102f200128020020032802006a41173a00002003200328020041016a22043602000240024002402000280204417f6a0e03000102070b200120044101102f200128020020032802006a41003a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a2204360200200041106a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c060b200120044101102f200128020020032802006a41013a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c050b200120044101102f200128020020032802006a41023a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c040b2001200141086a22032802004101102f200128020020032802006a41183a00002003200328020041016a360200200110c0010c030b2001200141086a22032802004101102f200128020020032802006a41193a00002003200328020041016a2204360200024002400240024002402000280204417f6a0e050001020304070b200120044101102f200128020020032802006a41003a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602002000410c6a280200200041146a280200200110bb01200041186a280200200041206a280200200110bb010c060b200120044101102f200128020020032802006a41013a00002003200328020041016a3602000c050b200120044101102f200128020020032802006a41023a00002003200328020041016a3602000c040b200120044101102f200128020020032802006a41033a00002003200328020041016a3602000c030b200120044101102f200128020020032802006a41043a00002003200328020041016a2204360200200041086a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c020b2001200141086a22032802004101102f200128020020032802006a411a3a00002003200328020041016a22043602000240024002400240200041086a280200417f6a0e0400010203050b200120044101102f200128020020032802006a41003a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a360200200041106a280200200041186a280200200110bb012000411c6a280200200041246a280200200110bb01200041286a2d00002104200120032802004101102f200128020020032802006a20043a00002003200328020041016a3602000c040b200120044101102f200128020020032802006a41013a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c030b200120044101102f200128020020032802006a41023a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a2204360200200120044101102f200128020020032802006a41003a00002003200328020041016a360200200041106a200110f6020c020b200120044101102f200128020020032802006a41033a00002003200328020041016a22043602002000410c6a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a2204360200200041106a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a2204360200200041146a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a2204360200200041186a2802002105200120044104102f200128020020032802006a20053600002003200328020041046a3602000c010b2001200141086a22032802004101102f200128020020032802006a411b3a00002003200328020041016a22053602000240024002400240200041086a22042d0000417f6a0e0400010203040b200120054101102f200128020020032802006a41003a00002003200328020041016a3602002000410c6a280200200110b4030c030b200120054101102f200128020020032802006a41013a00002003200328020041016a3602002000410c6a280200200110b403200041106a2903002106200120032802004108102f200128020020032802006a20063700002003200328020041086a3602000c020b200120054101102f200128020020032802006a41023a00002003200328020041016a2205360200200120054120102f200128020020032802006a22012004290001370000200141186a200441196a290000370000200141106a200441116a290000370000200141086a200441096a2900003700002003200328020041206a3602000c010b200120054101102f200128020020032802006a41033a00002003200328020041016a2205360200200120054120102f200128020020032802006a22052004290001370000200541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a2900003700002003200328020041206a3602002000412c6a280200200110b4030b200241106a24000f0b1039000bf90305017f027e017f017e027f230041106b220224000240024020002903004201520d00200041106a2903002103200029030821042001200141086a22052802004102102f200128020020052802006a20032004420c882206420120064201561b80a741047420047aa7417f6a22074101200741014b1b2207410f2007410f491b723b00002005200528020041026a22073602000c010b2001200141086a22052802004101102f200128020020052802006a41003a00002005200528020041016a22073602000b02400240024002402000280218220541c000490d00200541808001490d012005418080808004490d02200120074101102f2001280200200141086a22052802006a41033a00002005200528020041016a220736020020002802182108200120074104102f200128020020052802006a20083600002005200528020041046a3602000c030b200120074101102f2001280200200141086a22072802006a20054102743a00002007200728020041016a3602000c020b200120074102102f2001280200200141086a22072802006a20054102744101723b00002007200728020041026a3602000c010b200120074104102f2001280200200141086a22072802006a20054102744102723600002007200728020041046a3602000b2002200041206a36020c2002410c6a200110e903200241106a24000b8c0301017f23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10a60521000c020b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a102d21000c010b200420012002109a0141012101200441206a200041016a200410a7054100210020042d00200d00200441c8006a41206a200441206a41216a2d00003a0000200441e0006a200441396a290000370300200441d8006a200441316a290000370300200441d0006a200441296a29000037030020042004290021370348200441f0006a200441c8006a4121109a0102402003200441f0006a460d00200441f0006a2003412010cc084521010b200121000b20044190016a240020000bff1b050b7f017e017f037e107f230041f0026b22022400200241a0016a2203420037030020024198016a2204420037030020024188016a41086a220542003703002002420037038801200241d8006a41ac95c400410d10c5012005200241d8006a41086a22062900003703002002200229005837038801200241306a41c695c400410c10c5012003200241306a41086a220729000037030020042002290030370300200241c0016a20024188016a10f50220022802fc01210820022802980221092003420037030020044200370300200542003703002002420037038801200241d8006a41c1dcc700410610c501200520062900003703002002200229005837038801200241306a4196a4c600410610c5012003200729000037030020042002290030370300200220024188016a412010c6012002280204210a2002280200210b200241d8006a41f1ddc700410510c501200241306a418cffc000410510c501200220013602b001200241286a200241b0016a410410c701200241c0016a410c6a200241b0016a41046a3602002002200241286a41086a220c3602c4012002200241b0016a3602c8012002200241286a3602c00120024188016a200241c0016a107e02400240200228029001220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200241003602c801200220043602c401200220053602c001200241c0016a4100411010c80120022802c00120022802c80122046a22052002290058370000200541086a200241d8006a41086a2900003700002002200441106a22043602c801200241c0016a2004411010c80120022802c00120022802c80122046a22052002290030370000200541086a200241306a41086a2900003700002002200441106a22053602c8012002280288012104200241c0016a2005200310c80120022802c001220520022802c80122066a2004200310c9081a2002200620036a22033602c8010240200228028c01450d002004102c0b20024188016a2005200310b803200229028c01210d200228028801210e024020022802c401450d002005102c0b0240024002400240200e450d00200241d8006a4187dec700410410c501200241306a41ecb1c500411810c50120022001360278200241b0016a200241f8006a410410c701200241cc016a200241f8006a41046a3602002002200241b8016a3602c4012002200241f8006a3602c8012002200241b0016a3602c00120024188016a200241c0016a107e200228029001220341206a2204417f4c0d040240024020040d00410121050c010b200410322205450d060b200241003602c801200220043602c401200220053602c001200241c0016a4100411010c80120022802c00120022802c80122046a22052002290058370000200541086a200241d8006a41086a2900003700002002200441106a22043602c801200241c0016a2004411010c80120022802c00120022802c80122046a22052002290030370000200541086a200241306a41086a2900003700002002200441106a22053602c8012002280288012104200241c0016a2005200310c80120022802c001220520022802c80122066a2004200310c9081a2002200620036a22033602c8010240200228028c01450d002004102c0b20024188016a2005200310b903200229028c01420020022802880122041b210f024020022802c401450d002005102c0b200f422088221042247e2211422088a70d042011a72203417f4c0d040240024020030d00410421120c010b200310322212450d060b2004410420041b2113200341246e211402402010a722030d00410021070c030b20034102742115200241f5016a21034100211641002117410121182013211903402019280200211a200241d8006a4187dec700410410c501200241306a41acb1c500410c10c501200241003602b801200242013703b001200241b0016a41004104102f20022802b00120022802b80122046a201a3600002002200441046a22043602b801200241b0016a20044104102f20022802b001220420022802b80122056a20013600002002200541046a22053602b801200241286a2004200510c7012002200420056a3602940120022004360290012002200c36028c012002200241286a36028801200241f8006a20024188016a107e024020022802b401450d002004102c0b200228028001220441206a2205417f4c0d050240024020050d00410121060c010b200510322206450d070b200241003602b801200220053602b401200220063602b001200241b0016a4100411010c80120022802b00120022802b80122056a22062002290058370000200641086a200241d8006a41086a221b2900003700002002200541106a22053602b801200241b0016a2005411010c80120022802b00120022802b80122056a22062002290030370000200641086a200241306a41086a221c2900003700002002200541106a22063602b80120022802782105200241b0016a2006200410c80120022802b001221d20022802b80122066a2005200410c9081a2002200620046a22043602b8010240200228027c450d002005102c0b200241c0016a201d200410f30220024188016a41086a2205200341086a29000037030020024188016a41106a2206200341106a29000037030020024188016a41186a2207200341186a29000037030020024188016a411f6a22042003411f6a2800003600002002200329000037038801024020022d00f401221e410246221f0d00200241306a411f6a2004280000360000200241306a41186a2007290300370300200241306a41106a2006290300370300201c200529030037030020022002290388013703300b024020022802b401450d00201d102c0b200241c0016a411f6a200241306a411f6a280000360000200241c0016a41186a2204200241306a41186a290300370300200241c0016a41106a221d200241306a41106a290300370300200241c0016a41086a2220201c290300370300200220022903303703c0014100211c0240201f0d00200720042903003703002006201d29030037030020052020290300370300200220022903c00137038801201e211c0b2018417f6a211f20044200370300201d420037030020204200370300200242003703c00102400240201c4101460d00200241d8006a41186a2004290300370300200241d8006a41106a201d290300370300201b2020290300370300200220022903c0013703580c010b200241d8006a41186a2007290300370300200241d8006a41106a2006290300370300201b200529030037030020022002290388013703580b2007200241d8006a41186a2903003703002006200241d8006a41106a2903003703002005201b29030037030020022002290358370388010240201f2014470d0020172018201720184b1b22044104200441044b1bad42247e2210422088a70d0641000d062010a722044100480d062016202120171b21210240024002402012410020171b221b0d0020040d01410421120c020b024020210d0020040d01410421120c020b201b2021200410352212450d090c010b200410322212450d080b200441246e21140b201941046a2119201220166a2204201a360200200441046a2002290388013702002004410c6a2005290300370200200441146a20062903003702002004411c6a2007290300370200201641246a2116201741026a2117201841016a21182015417c6a2215450d020c000b0b200041003602000c020b2018417f6a21070b0240200fa72203450d00200341ffffffff0371450d002013102c0b200241d8006a4181dec700410310c501200241306a4198c2c000411910c501200220013602b001200241286a200241b0016a410410c701200241cc016a200241b0016a41046a3602002002200c3602c4012002200241b0016a3602c8012002200241286a3602c00120024188016a200241c0016a107e200228029001220341206a2204417f4c0d010240024020040d00410121050c010b200410322205450d030b200241003602b801200220043602b401200220053602b001200241b0016a4100411010c80120022802b00120022802b80122046a22052002290058370000200541086a200241d8006a41086a2900003700002002200441106a22043602b801200241b0016a2004411010c80120022802b00120022802b80122046a22052002290030370000200541086a200241306a41086a2900003700002002200441106a22053602b8012002280288012104200241b0016a2005200310c80120022802b001220520022802b80122066a2004200310c9081a2002200620036a22033602b8010240200228028c01450d002004102c0b20094102462104200a417f6a2106200241c0016a2005200310c90120024188016a41086a200241c9016a29000037030020024188016a41106a200241d1016a29000037030020024188016a41186a2203200241d9016a290000370300200220022900c101370388010240024020022d00c0014101460d00200241086a41186a4200370300200241186a4200370300200241106a4200370300200242003703080c010b200241086a41186a2003290300370300200241086a41106a20024188016a41106a290300370300200241086a41086a20024188016a41086a29030037030020022002290388013703080b4100200820041b21032006417f200b1b2104024020022802b401450d002005102c0b2000200d3702042000200e3602002000411c6a2003360200200041186a2007360200200041146a2014360200200041106a20123602002000410c6a2004360200200041206a2002290308370200200041286a200241106a290300370200200041306a200241086a41106a290300370200200041386a200241086a41186a2903003702000b200241f0026a24000f0b103b000b1039000ba80201027f230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602000c010b200328021421022003200341186a28020036022420032001360220200341c8006a200341206a108a0202400240200328024822040d0020034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b200041003602000c010b2000200329024c370204200020043602000b2002450d002001102c0b200341e0006a24000bb60201017f230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a10f8040240024020032802480d0020034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b200041003602000c010b20002003290348370200200041086a200341c8006a41086a2802003602000b2002450d002001102c0b200341e0006a24000bbd0b02067f017e230041f0006b22042400200441d0006a41f1ddc700410510c501200441186a4185f6c000410c10c5012004200036026c200441086a200441ec006a410410c701200441306a410c6a200441ec006a41046a3602002004200441106a3602342004200441ec006a3602382004200441086a360230200441e0006a200441306a107e02400240024002400240024002402004280268220541206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b200441003602102004200636020c20042007360208200441086a4100411010c8012004280208200428021022066a22072004290050370000200741086a200441d0006a41086a22082900003700002004200641106a2206360210200441086a2006411010c8012004280208200428021022066a22072004290018370000200741086a200441186a41086a2900003700002004200641106a220636021020042802602109200441086a2006200510c80120042802082206200428021022076a2009200510c9081a2004200720056a220736021002402004280264450d002009102c0b200441306a2006200710bb032008200441306a41086a2802003602002004200429033037035002400240200428023c22094102470d0041002108200441003602202004420437031841002105410021090c010b200441286a2004280240360200200441186a41086a200441d0006a41086a280200220536020020042004290350370318200428021c21080b20042009360224024020052008470d00200441186a200810bc03200428022021050b200428021820054103746a22092002360204200920013602002004200541016a360220200441386a2004290320370300200441306a41106a200441186a41106a2802003602002004200429031837033002400240200428023c4102470d002006200710b4010c010b2004410036025820044201370350200441d0006a200441306a10bd03200441d0006a2004413c6a10be032006200720042802502205200428025810a70202402004280254450d002005102c0b200428023441ffffffff0171450d002004280230102c0b0240200428020c450d002006102c0b200441186a41086a200341086a28020036020020042003290200370318200441306a2000200110bf03200428023022052004280238200441186a108a0302402004280234450d002005102c0b0240200428021c450d002004280218102c0b200441e0006a10c00341002105200428026021090240200428026822080e020403000b4100210520082106034020052006410176220320056a2207200920074103746a41046a28020020014b1b2105200620036b220641014b0d000c030b0b103b000b1039000b20082005200920054103746a41046a2802002001496a2205490d010b024020082004280264470d00200441e0006a200810bc03200428026021090b200920054103746a220641086a2006200820056b41037410ca081a20062002360204200620003602002004200841016a2205360268200441d0006a41086a200536020020042004290360220a370350200aa722050d01200441c8006a22054200370300200441c0006a22064200370300200441306a41086a2203420037030020044200370330200441186a41f1ddc700410510c5012003200441186a41086a220729000037030020042004290018370330200441186a41eef5c000410f10c5012005200729000037030020062004290018370300200441306a412010b4010c020b200520081044000b200441c8006a22064200370300200441c0006a22034200370300200441306a41086a2207420037030020044200370330200441186a41f1ddc700410510c5012007200441186a41086a220129000037030020042004290018370330200441186a41eef5c000410f10c5012006200129000037030020032004290018370300200441306a200441d0006a10c103200428025441ffffffff0171450d002005102c0b200441f0006a24004280a7f2a6010be705010a7f230041e0006b220324002003200236020c20032001360208200341106a2001200210b3010240024002400240200328021022040d002000410236020c0c010b200328021421052003200341186a280200360224200320043602202003200341206a1087020240024020032802000d002003280204220620032802244103762201200120064b1b22074103742201417f4c0d030240024020070d00410421080c010b200110322208450d050b41002101200341003602502003200736024c20032008360248024002400240024002402006450d00410021010340200328022422074104490d022003280220220228000021092003200241046a36022020032007417c6a220a360224200a4104490d022002280004210a2003200741786a3602242003200241086a36022002402001200328024c470d00200341c8006a200110bc0320032802502101200328024821080b200820014103746a2202200a360204200220093602002003200141016a22013602502006417f6a22060d000b200328024c2107200328024821080b2008450d0420032802242206450d032003280220220a2d0000210920032006417f6a220b3602242003200a41016a3602204100210220090e020201030b200328024c41ffffffff0171450d032003280248102c0c030b200b4104490d01200a280001210c20032006417b6a3602242003200a41056a360220410121020b2000200c3602102000200136020820002007360204200020083602000c020b200741ffffffff0171450d002008102c0b20034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b410221020b2000200236020c2005450d002004102c0b200341e0006a24000f0b103b000b1039000bd30101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff017122042002470d02200241037422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141037422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034103763602000b0f0b2004450d001039000b103b000ba30101047f20012802002102200020012802082201108f0102402001450d00200220014103746a2103200041086a22012802002104034020022802002105200020044104102f200028020020012802006a20053600002001200128020041046a2204360200200241046a2802002105200020044104102f200028020020012802006a20053600002001200128020041046a2204360200200241086a22022003470d000b0b0b9a0101027f024020012802004101460d002000200041086a22022802004101102f200028020020022802006a41003a00002002200228020041016a3602000f0b2000200041086a22022802004101102f200028020020022802006a41013a00002002200228020041016a220336020020012802042101200020034104102f200028020020022802006a20013600002002200228020041046a3602000b830401047f230041e0006b22032400200341086a41f1ddc700410510c501200341186a41fdf5c000410810c50102400240410410322204450d002003420437023c20032004360238200341386a41004104102f2003280238200328024022046a20013600002003200441046a2201360240200341386a20014104102f20032802382201200328024022046a20023600002003200441046a2202360240200341c8006a2001200210c701200341dc006a200120026a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341286a200341d0006a107e0240200328023c450d002001102c0b2003280230220241206a2201417f4c0d010240024020010d00410121040c010b200110322204450d010b2000200136020420002004360200200041086a2201410036020020004100411010c8012000280200200128020022046a220520032900083700002001200441106a2204360200200541086a200341086a41086a29000037000020002004411010c8012000280200200128020022046a220520032900183700002001200441106a2206360200200541086a200341186a41086a2900003700002003280228210420002006200210c8012000280200200128020022006a2004200210c9081a2001200020026a3602000240200328022c450d002004102c0b200341e0006a24000f0b1039000b103b000be105020a7f017e23004180016b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a41f1ddc700410510c501200141e8006a41eef5c000410f10c5012002200141e8006a41086a290000370300200320012900683703002001412036022c2001200141086a360228200141306a200141086a412010b3010240024002400240200128023022040d00410021050c010b200128023421062001200141306a41086a280200360244200120043602402001200141c0006a1087020240024020012802000d002001280204220720012802444103762202200220074b1b22034103742202417f4c0d030240024020030d00410421050c010b200210322205450d050b41002102200141003602702001200336026c20012005360268024002402007450d000340200128024422084104490d022001280240220328000021092001200341046a36024020012008417c6a220a360244200a4104490d022003280004210a2001200841786a3602442001200341086a36024002402002200128026c470d00200141e8006a200210bc0320012802702102200128026821050b200520024103746a2203200a360204200320093602002001200241016a22023602702007417f6a22070d000b200128026821050b200129026c210b2005450d010c020b0240200128026c41ffffffff0171450d002001280268102c0b0b4100210520014100360250200142013703482001410f36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141b4bcc3003602682001200141d8006a360278200141e4006a41dcb7c000200141e8006a103e1a20013502504220862001350248841000200128024c450d002001280248102c0b2006450d002004102c0b0240024020050d0020004100360208200042043702000c010b2000200b370204200020053602000b20014180016a24000f0b103b000b1039000b940201057f230041106b2202240002400240200128020822034103744104722204417f4c0d0020012802002101200410322205450d0120024100360208200220043602042002200536020020022003108f010240024020030d0020022802002105200228020821030c010b200120034103746a210620022802082103034020012802002104200220034104102f2002280200200228020822036a20043600002002200341046a2203360208200141046a2802002104200220034104102f20022802002205200228020822036a20043600002002200341046a2203360208200141086a22012006470d000b0b200041202005200310a70202402002280204450d002005102c0b200241106a24000f0b103b000b1039000b3400200041f1ddc70036020420004100360200200041146a410c360200200041106a41a4f6c000360200200041086a42053702000b4401017f230041206b22022400200041003602082000420137020020024200370310200242043703082000200241086a10bd032000200241146a10be03200241206a24000b09002000410010c5030b5001017f02404101103222020d001039000b2000420137020420002002360200200041004101102f2000280200200041086a220028020022026a200141ff01714101463a00002000200241016a3602000b2901017f230041106b2202240020024100360208200242043703002000200210c703200241106a24000bbc0101047f024002402001280208220241027441046a2203417f4c0d00200128020021010240024020030d00410121040c010b200310322204450d020b2000200336020420002004360200200041086a2203410036020020002002108f0102402002450d002002410274210220032802002104034020012802002105200020044104102f2000280200200328020022046a20053600002003200441046a2204360200200141046a21012002417c6a22020d000b0b0f0b103b000b1039000bed0701057f230041e0006b22022400200241306a41f1ddc700410510c501200241c0006a4191f6c000411210c5012002200136025c200241206a200241dc006a410410c701200241146a200241dc006a41046a3602002002200241286a36020c2002200241dc006a3602102002200241206a360208200241d0006a200241086a107e024002402002280258220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200241003602102002200436020c20022005360208200241086a4100411010c8012002280208200228021022046a22052002290030370000200541086a200241306a41086a2900003700002002200441106a2204360210200241086a2004411010c8012002280208200228021022046a22052002290040370000200541086a200241c0006a41086a2900003700002002200441106a220536021020022802502104200241086a2005200310c80120022802082205200228021022066a2004200310c9081a2002200620036a220336021002402002280254450d002004102c0b20022005200310c60120022802042103200228020021060240200228020c450d002005102c0b41012104024020064101460d00200241306a41f1ddc700410510c501200241c0006a4185f6c000410c10c5012002200136025c200241206a200241dc006a410410c701200241086a410c6a200241dc006a41046a3602002002200241286a36020c2002200241dc006a3602102002200241206a360208200241d0006a200241086a107e2002280258220341206a2204417f4c0d010240024020040d00410121050c010b200410322205450d030b200241003602282002200436022420022005360220200241206a4100411010c8012002280220200228022822046a22052002290030370000200541086a200241306a41086a2900003700002002200441106a2204360228200241206a2004411010c8012002280220200228022822046a22052002290040370000200541086a200241c0006a41086a2900003700002002200441106a220536022820022802502104200241206a2005200310c80120022802202205200228022822016a2004200310c9081a2002200120036a220336022802402002280254450d002004102c0b200241086a2005200310bb0320022802082101200228020c210641002002280210200228021441024622031b210402402002280224450d002005102c0b4104200120031b21054100200620031b21010240024020040d00410021040c010b200441037420056a41786a2802002103410121040b2001450d002005450d00200141ffffffff0171450d002005102c0b2000200336020420002004360200200241e0006a24000f0b103b000b1039000baa02010a7f230041206b22022400200241106a2001108a0202400240200228021022030d00200041023a00180c010b200241186a2204280200210520022802142106200241106a2001108a020240200228021022070d00200041023a00182006450d012003102c0c010b20022802142108024020012802042209450d002004280200210a200128020022042d0000210b20012009417f6a3602042001200441016a3602004100210102400240200b0e020100020b410121010b200020013a00182000200a360214200020083602102000200736020c200020053602082000200636020420002003360200200020022f000d3b00192000411b6a2002410f6a2d00003a00000c010b200041023a001802402008450d002007102c0b2006450d002003102c0b200241206a24000bc80502097f037e23004180026b2202240020022001108702024002402002280200450d00200041003602000c010b0240024002402002280204220320012802044105762204200420034b1b22044105742205417f4c0d000240024020040d00410121060c010b200510322206450d020b41002107200241003602102002200436020c20022006360208024002402003450d0041002108034041002105200241003a00b801200841016a21082001280204417f6a210403402004417f460d0320024198016a20056a200128020022092d00003a0000200120043602042001200941016a3602002002200541016a22093a00b8012004417f6a21042009210520094120470d000b200241c0016a41086a220420024198016a41086a290300370300200241c0016a41106a220520024198016a41106a290300370300200241c0016a41186a220a20024198016a41186a29030037030020022002290398013703c001200941ff0171411f4d0d05200241386a41086a2004290300220b370300200241386a41106a2005290300220c370300200241386a41186a200a290300220d370300200241186a41186a2205200d370300200241186a41106a2209200c370300200241186a41086a220a200b370300200220022903c001220b3703582002200b3703382002200b37031802402007200228020c470d00200241086a2007410110d60120022802082106200228021021070b200620074105746a22042002290318370000200441186a2005290300370000200441106a2009290300370000200441086a200a2903003700002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c040b200541ff0171450d02200241003a00b8010c020b103b000b1039000b2000410036020020064100200228020c22041b2201450d00200441ffffff3f71450d002001102c0b20024180026a24000bc40202047f027e230041d0006b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822010d00200042023703000c010b200228020c210302400240200241106a28020022044104490d0020044104460d0020012800002105420021060240024020012d00040e020100020b2004417b6a4108490d0120012900052107420121060b20002007370308200041106a20053602000c010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b420221060b200020063703002003450d002001102c0b200241d0006a24000bcb0a020f7f047e230041c0046b220324002003200236021420032001360210200341186a2001200210b30102400240200328021822040d00200041003602000c010b200328021c21052003200341206a280200220136022c200320043602280240024020014104490d002004280000210620032001417c6a36022c2003200441046a360228200341086a200341286a10870220032802080d00200328020c2107410021082003410036024820034100360240024002402007450d00200341b0016a41106a2109200341b6046a210a034041002101200341003a00d001200841016a2108200328022c210b417f210202400240024002400340200b2001460d01200341b0016a20016a2003280228220c2d00003a00002003200b20026a36022c2003200c41016a3602282003200141016a220d3a00d0012002417f6a2102200d2101200d4120470d000b20034190046a41186a2202200341b0016a41186a29030037030020034190046a41106a220e200929030037030020034190046a41086a220f200341b0016a41086a290300370300200320032903b00137039004200d41ff01714120490d01200341f0006a41086a2201200f290300370300200341f0006a41106a2210200e290300370300200341f0006a41186a221120022903003703002003200329039004370370200b200d6b220d4104490d01200341d0006a41086a20012903002212370300200341d0006a41106a20102903002213370300200341d0006a41186a20112903002214370300200320032903702215370350200c280001210b2003200c41056a3602282003200d417c6a36022c20034190016a41186a220c201437030020034190016a41106a2210201337030020034190016a41086a22112012370300200320153703900120032802402201450d022003280244210d0c030b200141ff0171450d00200341003a00d0010b200341b0016a41086a200341c0006a41086a280200360200200320032903403703b001200341b0016a10cf030c050b41940310322201450d034100210d200141003602002001200329029004370204200141003b01322001410c6a200f290200370200200141146a200e2902003702002001411c6a2002290200370200200141246a20034190046a41206a2902003702002001412a6a200a290100370100200141346a200341b0016a41e00210c9081a20034100360244200320013602400b200341b0016a200d200120034190016a10900220032802bc01210120032802b801210d0240024020032802b0014101470d00200f20112903002212370300200e201029030022133703002002200c2903002214370300200320032903900122153703900420032802b401210220092015370200200941086a2012370200200941106a2013370200200941186a2014370200200320013602b8012003200d3602b401200320023602b0012003200341c0006a3602bc01200341b0016a200b10cd031a0c010b200d20014102746a41046a200b3602000b20082007470d000b0b20034190046a41086a200341c0006a41086a28020022013602002003200329034022123703900420002006360204200041086a2012370200200041106a2001360200410121010c020b1039000b41002101200341003602980420034201370390042003410f360294012003200341106a36029001200320034190046a360270200341c4016a4101360200200342013702b401200341b4bcc3003602b001200320034190016a3602c001200341f0006a41dcb7c000200341b0016a103e1a200335029804422086200335029004841000200328029404450d00200328029004102c0b200020013602002005450d002004102c0b200341c0046a24000ba11903177f047e097f230041c0046b22022400200028020821032000280200210420002802042105200241c0006a41186a2206200041286a290000370300200241c0006a41106a2207200041206a290000370300200241c0006a41086a2208200041186a290000370300200220002900103703400240024002400240024002400240024020052f01322209410b490d00410521064100210a02400240200341054f0d0041042106200321070c010b41052107024002402003417b6a0e020201000b200341796a21074101210a410621060c010b410021074101210a0b4194031032220b450d03200b4100360200200b200229028001370204200b41003b0132200b410c6a20024180016a41086a2208290200370200200b41146a20024180016a41106a2209290200370200200b411c6a20024180016a41186a220c290200370200200b41246a200241a0016a220d290200370200200b412a6a200241a6016a220e290100370100200b41346a200241b0016a41e00210c908210f200241e0006a41086a2210200541346a221120064105746a220341086a290000370300200241e0006a41106a2212200341106a290000370300200241e0006a41186a2213200341186a29000037030020022003290000370360200541046a221420064102746a2802002115200f2011200641016a22164105746a20052f01322006417f736a220341057410c9081a200b41046a201420164102746a200341027410c9081a200520063b0132200b20033b0132200c201329030037030020092012290300370300200820102903003703002002200229036037038001200b2005200a1b220341346a2206200741016a220a4105746a200620074105746a220620032f013220076b41057410ca081a200641186a200241c0006a41186a2214290300370000200641106a200241c0006a41106a2216290300370000200641086a200241c0006a41086a221729030037000020062002290340370000200341046a2206200a4102746a200620074102746a221820032f013220076b41027410ca081a20182001360200200241206a41186a200c2903002219370300200320032f013241016a3b0132200241206a41106a2009290300221a370300200241206a41086a2008290300221b3703002002200229038001221c370320200241186a221d2019370300200241106a221e201a370300200241086a221f201b3703002002201c37030002400240200528020022030d00410021040c010b410021060340200b2120201521212005210b20032105200b2f013021012014201d2903003703002016201e2903003703002017201f2903003703002002200229030037034020042006470d0602400240024020052f0132220b410b490d004100211141042107024020014105490d0020012107024002402001417b6a0e020201000b200141796a210141012111410621070c010b4100210141012111410521070b41c4031032220b450d08200441016a210441002103200b4100360200200b200229028001370204200b41003b0132200b410c6a2008290200370200200b41146a2009290200370200200b411c6a200c290200370200200b41246a200d290200370200200b412a6a200e290100370100200b41346a200241b0016a41900310c90821222013200541346a220a20074105746a220641186a2900003703002012200641106a2900003703002010200641086a29000037030020022006290000370360200541046a220f20074102746a28020021152022200a200741016a22234105746a20052f013222242007417f736a220641057410c9082122200b41046a200f202341027422236a200641027410c9082125200520073b0132200b20063b0132200c201329030037030020092012290300370300200820102903003703002002200229036037038001200b4194036a200520236a4194036a202420076b41027410c908212302400340200b20034102746a4194036a280200220720033b01302007200b3602002003200320064922076a220320064b0d0120070d000b0b200241b0016a41186a200c2903002219370300200241b0016a41106a2009290300221a370300200241b0016a41086a2008290300221b3703002002200229038001221c3703b001200c20193703002009201a3703002008201b3703002002201c370380012011450d012001410274220720236a41086a2023200141016a2203410274220a6a2206200b2f013220016b41027410ca081a20062020360200202220034105746a202220014105746a2206200b2f013220016b41057410ca081a200641186a2014290300370000200641106a2016290300370000200641086a2017290300370000200620022903403700002025200a6a202520076a2206200b2f013220016b41027410ca081a20062021360200200b200b2f013241016a22063b01322003200641ffff037122064b0d020340200b20034102746a4194036a280200220720033b01302007200b360200200320032006496a220720064b0d03200320064f2101200721032001450d000c030b0b2001410274220620054194036a22076a41086a2007200141016a220341027422086a2207200b20016b2209410274220c10ca081a20072020360200200541346a220b20034105746a200b20014105746a220b200941057410ca081a200b41186a200241c0006a41186a290300370000200b41106a200241c0006a41106a290300370000200b41086a200241c0006a41086a290300370000200b2002290340370000200541046a220b20086a200b20066a220b200c10ca081a200b2021360200200520052f013241016a220b3b01322001200b41ffff0371220b4f0d050340200520034102746a4194036a280200220620033b01302006200536020020032003200b496a2206200b4b0d062003200b4f2107200621032007450d000c060b0b2001410274220720054194036a22066a41086a2006200141016a220341027422116a220620052f013220016b41027410ca081a20062020360200200a20034105746a200a20014105746a220620052f013220016b41057410ca081a200641186a2014290300370000200641106a2016290300370000200641086a201729030037000020062002290340370000200f20116a200f20076a220620052f013220016b41027410ca081a20062021360200200520052f013241016a22063b01322003200641ffff037122064b0d000340200520034102746a4194036a280200220720033b0130200720053602002003200320064922076a220320064b0d0120070d000b0b201d200c290300370300201e2009290300370300201f2008290300370300200220022903800137030020042106200528020022030d000b0b2014201d29030022193703002016201e290300221a3703002017201f290300221b37030020022002290300221c370340201320193703002012201a3703002010201b3703002002201c370360200028020c2206280200450d0541c40310322203450d03200341003602002003200229028001370204200341003b01322003410c6a20024180016a41086a290200370200200341146a20024180016a41106a2902003702002003411c6a20024180016a41186a290200370200200341246a200241a0016a2902003702002003412a6a200241a6016a290100370100200341346a200241b0016a41900310c9081a200320062802002207360294032006200336020020062006280204220541016a360204200741003b013020072003360200200241b0016a41186a200241e0006a41186a290300370300200241b0016a41106a200241e0006a41106a290300370300200241b0016a41086a200241e0006a41086a290300370300200220022903603703b00120052004470d0620032f01322207410a4b0d072003200741016a22013b0132200320074105746a220541346a20022903b0013700002005413c6a200241b8016a290300370000200541c4006a200241c0016a290300370000200541cc006a200241c8016a290300370000200320074102746a41046a2015360200200320014102746a4194036a200b360200200b2003360200200b20013b01302006200628020841016a3602080c020b200541346a220b200341016a220c4105746a200b20034105746a220b200920036b41057410ca081a200b41186a2006290300370000200b41106a2007290300370000200b41086a2008290300370000200b2002290340370000200541046a220b200c4102746a200b20034102746a221820052f013220036b41027410ca081a20182001360200200520052f013241016a3b01320b200028020c2203200328020841016a3602080b200241c0046a240020180f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b7901037f230041106b22032400200341003602082003420137030020022802002104200341004104102f2003280200200328020822056a20043600002003200541046a3602082003200241046a10e6032000200120032802002202200328020810a70202402003280204450d002002102c0b200341106a24000beb0201067f4100210102400240200028020022020d0041002100410021030c010b20002802082103200028020421042002210003402004450d012004417f6a2104200220022f01324102746a4194036a280200210220002802940321000c000b0b0240024003402003450d012000450d022003417f6a210302400240200120002f01324f0d00200141016a21010c010b2004210220002104034002400240200428020022000d0041002100200521020c010b20042f01302106200241016a220221050b2004102c20002104200620002f01324f0d000b200641016a210141002104200221052002450d01200020014102746a4194036a280200210002402002417f6a2204450d00034020002802940321002004417f6a22040d000b0b41002101200221050b410021040c000b0b02402000450d00200028020021042000102c2004450d000340200428020021002004102c2000210420000d000b0b0f0b41ecd0c800412b4198d1c800103c000be70301057f230041d0006b22032400200341086a41e6dcc700410710c501200341186a41be92c100411310c50120032001360234200341386a200341346a410410c701200341cc006a200341346a41046a3602002003200341c0006a3602442003200341346a3602482003200341386a360240200341286a200341c0006a107e200341c0006a200210e4020240024020032802302201200328024822046a41206a2202417f4c0d000240024020020d00410121050c010b200210322205450d020b2000200236020420002005360200200041086a2202410036020020004100411010c8012000280200200228020022056a220620032900083700002002200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200228020022056a220620032900183700002002200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200110c8012000280200200228020022066a2005200110c9081a2002200620016a22063602002003280240210120002006200410c8012000280200200228020022006a2001200410c9081a2002200020046a36020002402003280244450d002001102c0b0240200328022c450d002005102c0b200341d0006a24000f0b103b000b1039000be70301057f230041d0006b22032400200341086a41e6dcc700410710c501200341186a41ab92c100411310c50120032001360234200341386a200341346a410410c701200341cc006a200341346a41046a3602002003200341c0006a3602442003200341346a3602482003200341386a360240200341286a200341c0006a107e200341c0006a200210e4020240024020032802302201200328024822046a41206a2202417f4c0d000240024020020d00410121050c010b200210322205450d020b2000200236020420002005360200200041086a2202410036020020004100411010c8012000280200200228020022056a220620032900083700002002200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200228020022056a220620032900183700002002200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200110c8012000280200200228020022066a2005200110c9081a2002200620016a22063602002003280240210120002006200410c8012000280200200228020022006a2001200410c9081a2002200020046a36020002402003280244450d002001102c0b0240200328022c450d002005102c0b200341d0006a24000f0b103b000b1039000bf70402097f017e230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240024002400240200328021022010d002000410036020c0c010b200328021421042003200341186a280200220236022420032001360220024002400240024020024104490d00200128000021052003200141046a36022020032002417c6a220636022420064104490d002003200141086a360220200128000421072003200241786a220636022420064104490d002003200241746a36022420032001410c6a360220200128000821062003200341206a10870220032802000d0020032802242208200328020422094102742202490d002002417f4c0d050240024020020d004101210a0c010b20021037220a450d07200328022421080b024020082002490d00200a2003280220200210c908210b200328022422082002490d082003200820026b3602242003200328022020026a360220410421084200210c2002450d03200b4103710d00200941ffffffff0371220a0d02200b102c0c030b200a102c0b20034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b2000410036020c0c020b2002ad421e86200aad84210c200b21080b2000200c3702102000200836020c2000200636020820002007360204200020053602000b2004450d002001102c0b200341e0006a24000f0b103b000b1039000b200220084194afc0001058000bbf0401057f230041e0006b22022400200241086a41e6dcc700410710c501200241186a41de92c100410910c50102400240410410322203450d002002420437023c20022003360238200241386a41004120102f2002280238200228024022046a22032001290000370000200341086a200141086a290000370000200341106a200141106a290000370000200341186a200141186a2900003700002002200441206a220336024020012802202104200241386a20034104102f20022802382201200228024022036a20043600002002200341046a2203360240200241c8006a2001200310c701200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a107e0240200228023c450d002001102c0b2002280230220341206a2201417f4c0d010240024020010d00410121040c010b200110322204450d010b2000200136020420002004360200200041086a2201410036020020004100411010c8012000280200200128020022046a220520022900083700002001200441106a2204360200200541086a200241086a41086a29000037000020002004411010c8012000280200200128020022046a220520022900183700002001200441106a2206360200200541086a200241186a41086a2900003700002002280228210420002006200310c8012000280200200128020022006a2004200310c9081a2001200020036a3602000240200228022c450d002004102c0b200241e0006a24000f0b1039000b103b000bac0401047f230041c0006b22022400200241106a41e6dcc700410710c501200241206a41d192c100410d10c501200241306a200010e402024002402002280238220041206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b20024100360208200220033602042002200436020020024100411010c8012002280200200228020822036a22042002290010370000200441086a200241106a41086a2900003700002002200341106a220336020820022003411010c8012002280200200228020822036a22042002290020370000200441086a200241206a41086a2900003700002002200341106a22043602082002280230210320022004200010c80120022802002204200228020822056a2003200010c9081a2002200520006a220036020802402002280234450d002003102c0b200241003602282002420137032020012802002103200241206a41004104102f2002280220200228022822056a20033600002002200541046a220336022820012802042105200241206a20034104102f2002280220200228022822036a20053600002002200341046a220336022820012802082105200241206a20034104102f2002280220200228022822036a20053600002002200341046a360228200128020c200141146a280200200241206a10d5032004200020022802202201200228022810a70202402002280224450d002001102c0b02402002280204450d002004102c0b200241c0006a24000f0b103b000b1039000bd60201027f0240024002400240200141c000490d00200141808001490d012001418080808004490d022002200241086a22032802004101102f200228020020032802006a41033a00002003200328020041016a2204360200200220044104102f200228020020032802006a20013600002003200328020041046a22043602000c030b2002200241086a22032802004101102f200228020020032802006a20014102743a00002003200328020041016a22043602000c020b2002200241086a22032802004102102f200228020020032802006a20014102744101723b00002003200328020041026a22043602000c010b2002200241086a22032802004104102f200228020020032802006a20014102744102723600002003200328020041046a22043602000b2002200420014102742201102f2002280200200241086a22022802006a2000200110c9081a2002200228020020016a3602000b9d0501057f230041c0006b22012400200141106a41e6dcc700410710c501200141206a418893c700410a10c501200141306a200010e402024002402001280238220241206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b20014100360208200120033602042001200436020020014100411010c8012001280200200128020822036a22042001290010370000200441086a200141106a41086a2900003700002001200341106a220336020820012003411010c8012001280200200128020822036a22042001290020370000200441086a200141206a41086a2900003700002001200341106a22043602082001280230210320012004200210c80120012802002204200128020822056a2003200210c9081a2001200520026a220236020802402001280234450d002003102c0b2004200210b40102402001280204450d002004102c0b200141106a41e6dcc700410710c501200141206a41b18ec100410a10c501200141306a200010e4022001280238220241206a2203417f4c0d000240024020030d00410121000c010b200310322200450d020b20014100360208200120033602042001200036020020014100411010c8012001280200200128020822036a22002001290010370000200041086a200141106a41086a2900003700002001200341106a220336020820012003411010c8012001280200200128020822036a22002001290020370000200041086a200141206a41086a2900003700002001200341106a22003602082001280230210320012000200210c80120012802002200200128020822046a2003200210c9081a2001200420026a220236020802402001280234450d002003102c0b2000200210b40102402001280204450d002000102c0b200141c0006a24000f0b103b000b1039000bea0906017f027e037f017e017f017e230041f0016b22022400200041086a290300210320002903002104200241d0016a41e6dcc700410710c501200241c8006a419099c100410610c501200241e0016a200110e4020240024020022802e801220041206a2201417f4c0d000240024020010d00410121050c010b200110322205450d020b200241003602c801200220013602c401200220053602c001200241c0016a4100411010c80120022802c00120022802c80122016a220520022900d001370000200541086a200241d0016a41086a2900003700002002200141106a22013602c801200241c0016a2001411010c80120022802c00120022802c80122016a22052002290048370000200541086a200241c8006a41086a22062900003700002002200141106a22053602c80120022802e0012101200241c0016a2005200010c80120022802c001220520022802c80122076a2001200010c9081a2002200720006a22003602c801024020022802e401450d002001102c0b200241e8006a2005200010c9012006200241f1006a290000370300200241c8006a41106a200241f9006a290000370300200241c8006a41186a220020024181016a29000037030020022002290069370348024002400240024020022d00684101470d00200241286a41186a2000290300370300200241286a41106a2200200241c8006a41106a290300370300200241286a41086a2201200241c8006a41086a29030037030020022002290348370328024020022802c401450d002005102c0b200241e8006a41186a200241286a41186a290300370300200241e8006a41106a2000290300370300200241e8006a41086a200129030037030020022002290328370368200241d0016a41e6dcc700410710c501200241c8006a418a99c100410610c501200241e0016a200241e8006a10d50220022802e801220041206a2201417f4c0d040240024020010d00410121050c010b200110322205450d060b200241003602c801200220013602c401200220053602c001200241c0016a4100411010c80120022802c00120022802c80122016a220520022900d001370000200541086a200241d0016a41086a2900003700002002200141106a22013602c801200241c0016a2001411010c80120022802c00120022802c80122016a22052002290048370000200541086a200241c8006a41086a2900003700002002200141106a22053602c80120022802e0012101200241c0016a2005200010c80120022802c001220520022802c80122066a2001200010c9081a2002200620006a22003602c801024020022802e401450d002001102c0b200241e8006a2005200010d80320022802c40121002002280288012207450d0120024180016a290300210820024198016a280200210620024194016a28020021092002290378210a200228028c01210102402000450d002005102c0b02402001450d00200141186c450d002007102c0b2006450d032009450d03200641ffffffff0371450d032009102c0c030b20022802c401450d012005102c0c010b2000450d002005102c0b4200210a420021080b200241186a20042003427f420010c808200241086a200a20082002290318220342012003420156200241186a41086a29030022034200522003501b22001b2003420020001b10c808200241086a41086a290300210320022903082104200241f0016a24002004427f2003501b0f0b103b000b1039000bd60b06057f057e027f017e017f037e230041b0026b220324002003200236026c20032001360268200341f0006a2001200210b30102400240200328027022040d00200041003602200c010b200328027421052003200341f8006a28020022063602a401200320043602a00141002101200341003a00e8012006417f6a210202400240024002400240024002400240034020062001460d01200341c8016a20016a200420016a22072d00003a00002003200741016a3602a0012003200141016a22073a00e801200320023602a4012002417f6a21022007210120074120470d000b20034190026a41186a2201200341c8016a41186a29030037030020034190026a41106a2202200341c8016a41106a29030037030020034190026a41086a2206200341c8016a41086a290300370300200320032903c80137039002200741ff01714120490d06200341a8016a41086a2006290300370300200341a8016a41106a2002290300370300200341a8016a41186a200129030037030020032003290390023703a801200341d0006a200341a0016a10f7032003290350a70d06200341d0006a41106a290300210820032903582109200341386a200341a0016a10f7032003290338a70d06200341c8006a290300210a2003290340210b200341306a200341a0016a10870220032802300d062003280234220720032802a40141186e2201200120074b1bad42187e220c422088a70d03200ca72202417f4c0d0320020d014108210d0c020b200141ff0171450d05200341003a00e8010c050b20021032220d450d020b41002101200341003602d0012003200d3602c8012003200241186e3602cc0102400240024002400240024002402007450d00200341286a210e0340200341186a200341a0016a10f7032003290318a70d02200e290300210c2003290320210f200341106a200341a0016a10870220032802100d02200328021421060240200120032802cc01470d00200341c8016a200110ad0420032802d001210120032802c801210d0b200d200141186c6a220220063602102002200c3703082002200f3703002003200141016a22013602d0012007417f6a22070d000b20032802c801210d0b200d450d0920032902cc01210c200341086a200341a0016a10870220032802080d0320032802a4012202200328020c22064102742201490d032001417f4c0d0620010d01410121070c020b20032802cc012201450d08200141186c450d08200d102c0c080b200110372207450d0520032802a40121020b024020022001490d00200720032802a001200110c908210e20032802a40122022001490d062003200220016b3602a401200320032802a00120016a3602a0014100210241042110024020010d00410021010c040b200e4103710d00200641ffffffff037122070d02200e102c410021010c030b2007102c0b200ca72201450d05200141186c450d05200d102c0c050b200641ffffffff03712101200e2110200721020b20034180016a41186a200341a8016a41186a290300220f37030020034180016a41106a200341a8016a41106a290300221137030020034180016a41086a200341a8016a41086a2903002212370300200320032903a801221337038001200041186a200a3703002000200b3703102000200837030820002009370300200041346a2001360200200041306a20023602002000412c6a20103602002000200c3702242000200d360220200041386a2013370300200041c0006a2012370300200041c8006a2011370300200041d0006a200f3703000c040b103b000b1039000b200120024194afc0001058000b200341003602980220034201370390022003410f3602f4012003200341e8006a3602f001200320034190026a3602a801200341dc016a4101360200200342013702cc01200341b4bcc3003602c8012003200341f0016a3602d801200341a8016a41dcb7c000200341c8016a103e1a2003350298024220862003350290028410000240200328029402450d00200328029002102c0b200041003602200b2005450d002004102c0b200341b0026a24000b3c02017f017e230041106b22022400200029030021032002200041086a290300370308200220033703002002200110d7032103200241106a240020030be70301057f230041d0006b22032400200341086a41e6dcc700410710c501200341186a419699c100410b10c50120032001360234200341386a200341346a410410c701200341cc006a200341346a41046a3602002003200341c0006a3602442003200341346a3602482003200341386a360240200341286a200341c0006a107e200341c0006a200210e4020240024020032802302201200328024822046a41206a2202417f4c0d000240024020020d00410121050c010b200210322205450d020b2000200236020420002005360200200041086a2202410036020020004100411010c8012000280200200228020022056a220620032900083700002002200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200228020022056a220620032900183700002002200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200110c8012000280200200228020022066a2005200110c9081a2002200620016a22063602002003280240210120002006200410c8012000280200200228020022006a2001200410c9081a2002200020046a36020002402003280244450d002001102c0b0240200328022c450d002005102c0b200341d0006a24000f0b103b000b1039000b130020004118360204200041a499c1003602000b3400200041e6dcc70036020420004100360200200041146a4123360200200041106a41989fc200360200200041086a42073702000b3b01017f20004201370200200041086a22024100360200200041004101102f2000280200200228020022006a41033a00002002200041016a3602000b3b01017f20004201370200200041086a22024100360200200041004101102f2000280200200228020022006a41003a00002002200041016a3602000b2201017f230041106b22022400200241003602002000200210e003200241106a24000bc90202047f047e0240024002400240200128020022020d00410121030c010b200141086a2802004105744105722203417f4c0d010b200310322204450d012000200336020420002004360200200041086a22034100360200200041004101102f2000280200200328020022046a2105024020020d00200541003a00002003200441016a3602000f0b200541013a00002003200441016a3602002000200141086a2802002201108f0102402001450d0020014105742103200041086a220428020021050340200020054120102f200241186a2900002106200241106a2900002107200241086a29000021082002290000210920042004280200220141206a2205360200200120002802006a22012009370000200141086a2008370000200141106a2007370000200141186a2006370000200241206a2102200341606a22030d000b0b0f0b103b000b1039000b7301037f20004201370200200041086a22024100360200200041004110102f2000280200200228020022036a22044200370008200442003700002002200341106a2203360200200020034110102f2000280200200228020022006a22034200370008200342003700002002200041106a3602000b0b0020004108410010e3030bdd0503037f027e027f02400240200241d8006c4104722203417f4c0d00200310322204450d012000200336020420002004360200200041086a2203410036020020002002108f0102402002450d002001200241d8006c6a2105200328020021020340200020024120102f2000280200200328020022046a22022001290038370000200241186a200141d0006a290000370000200241106a200141c8006a290000370000200241086a200141c0006a2900003700002003200441206a2202360200200141086a290300210620012903002107200020024110102f2000280200200328020022026a22042006370008200420073700002003200241106a36020020012802202102200020012802282204108f0102402004450d002002200441306c6a2108200328020021040340200020044120102f200028020020032802006a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002003200328020041206a2204360200200241206a2903002106200241286a2903002107200020044110102f200028020020032802006a22042007370008200420063700002003200328020041106a22043602002008200241306a2202470d000b0b200141d8006a2109200128022c21022000200141346a2802002204108f010240024020040d00200328020021040c010b20044105742108200328020021040340200020044120102f200028020020032802006a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002003200328020041206a2204360200200241206a2102200841606a22080d000b0b200141186a290300210620012903102107200020044110102f200028020020032802006a22022006370008200220073700002003200328020041106a22023602002009210120092005470d000b0b0f0b103b000b1039000b5201027f02404110103222020d001039000b2000421037020420002002360200200041004110102f2000280200200041086a220028020022026a22034200370008200342003700002000200241106a3602000b6d01037f230041106b22022400200042013702002002410c6a4100360200200041086a2203410036020020024200370300200041004104102f2000280200200328020022046a41003600002003200441046a36020020002002410472220310e603200310cf03200241106a24000b9c0403047f017e037f230041206b220224002000200141086a2802002203108f0102400240200128020022040d004100210441002101410021030c010b20012802042205ad422086210620042101034020042f013221072005450d0120064280808080707c21062005417f6a2105200420074102746a4194036a280200210420012802940321010c000b0b200241146a2007360200200241106a20043602002002200336021820022006370308200220013602042002200536020002402003450d00200041086a2107034020022003417f6a3602182002410020011b220828020021050240024020082802082203200828020422042f01324f0d00200421010c010b03400240200428020022010d00410021010c020b200541016a210520042f0130210320012104200320012f01324f0d000b0b200341016a21090240024020050d00200121040c010b200120094102746a4194036a280200210402402005417f6a2205450d00034020042802940321042005417f6a22050d000b0b410021090b200820043602042008410036020020082009360208200020072802004120102f200028020020072802006a200120034105746a41346a412010c9081a2007200728020041206a2204360200200120034102746a41046a2802002101200020044104102f200028020020072802006a20013600002007200728020041046a36020020022802182203450d01200228020421010c000b0b200241206a24000b2501017f230041106b220224002002410036020c20002002410c6a109401200241106a24000bee0202057f047e230041c0006b2202240020004201370200200241086a41186a4200370300200241086a41106a22034200370300200241086a41086a4200370300200241086a41286a22044100360200200041086a2205410036020020024200370308200242083703282002200241086a36023c2002413c6a200010e9032002200336023c2002413c6a200010e90320022802282103200020042802002204108f0102402004450d00200441306c21060340200020052802004120102f200341286a2900002107200341206a2900002108200341186a2900002109200341106a290000210a20052005280200220441206a360200200420002802006a2204200a370000200441086a2009370000200441106a2008370000200441186a20073700002002200336023c2002413c6a200010e903200341306a2103200641506a22060d000b0b024020022802284100200228022c22031b2204450d00200341306c450d002004102c0b200241c0006a24000ba30503027f027e037f230041e0006b220224000240024020002802002203290300220442c000544100200341086a29030022055022001b0d0002400240024020044280800154410020001b0d00200442808080800454410020001b0d01411020057920047942c0007c20054200521ba741037622066b4104490d022001200141086a22002802004101102f200128020020002802006a413320064102746b3a00002000200028020041016a2207360200200329030021042002200341086a290300220537030820022004370300200641706a21030340200120074101102f200128020020002802006a20043c00002000200028020041016a22073602002004420888200542388684210420054208882105200341016a22062003492108200621032008450d000b20022004370300200220053703082004200584500d04200241286a41146a4109360200200241346a4119360200200241106a41146a410336020020022002360240200241d8bdc400360244200241c8006a41146a410036020020024203370214200241c0bbc4003602102002411936022c200241c4b5c8003602582002420137024c200241b8bbc4003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a41e8bdc4001046000b2001200141086a22002802004102102f200128020020002802006a2004a74102744101723b00002000200028020041026a3602000c030b2001200141086a22002802004104102f200128020020002802006a2004a74102744102723600002000200028020041046a3602000c020b41efbac400413641c8bdc400103c000b2001200141086a22002802004101102f200128020020002802006a2004a74102743a00002000200028020041016a3602000b200241e0006a24000bb40101027f230041e0006b22022400200241003602280240410110322203450d002000420137020420002003360200200041004101102f2000280200200041086a220028020022036a41003a00002000200341016a360200024020022802282200450d0002402002412c6a2802002203450d00200341186c450d002000102c0b20022802344100200241386a28020022001b2203450d00200041ffffffff0371450d002003102c0b200241e0006a24000f0b1039000b2901017f230041106b2202240020024100360208200242013703002000200210ec03200241106a24000bec0102047f047e02400240200128020822024105744104722203417f4c0d0020012802002101200310322204450d012000200336020420002004360200200041086a2203410036020020002002108f0102402002450d0020024105742104200328020021050340200020054120102f200141186a2900002106200141106a2900002107200141086a29000021082001290000210920032003280200220241206a2205360200200220002802006a22022009370000200241086a2008370000200241106a2007370000200241186a2006370000200141206a2101200441606a22040d000b0b0f0b103b000b1039000b4a01017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a41d4003600002000200241046a3602000b130020004107360204200041f4e7c2003602000b4a01017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a41c0003600002000200241046a3602000b4b01017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a41a0c21e3600002000200241046a3602000b4901017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a410a3600002000200241046a3602000b4a01017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a4196013600002000200241046a3602000b4901017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a411b3600002000200241046a3602000b4901017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a411c3600002000200241046a3602000b4901017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a41063600002000200241046a3602000bdb0706017f047e027f017e067f047e230041f0026b22022400200241c0006a200110f70302400240024002400240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a200110f7032002290328a70d02200241286a41106a290300210520022903302106200241206a200110870220022802200d0420022802242207200128020441306e2208200820074b1bad42307e2209422088a7450d010c060b200041003602200c040b2009a72208417f4c0d0402400240024020080d004108210a0c010b20081032220a450d010b4100210b200241003602602002200a3602582002200841306e36025c02402007450d004100210c03404100210d200241003a00a802200c41016a210c2001280204417f6a21080240024003402008417f460d0120024188026a200d6a2001280200220e2d00003a0000200120083602042001200e41016a3602002002200d41016a220e3a00a8022008417f6a2108200e210d200e4120470d000b200241b0026a41086a220820024188026a41086a290300370300200241b0026a41106a220d20024188026a41106a290300370300200241b0026a41186a220f20024188026a41186a29030037030020022002290388023703b002200e41ff0171411f4b0d010c060b200d41ff0171450d05200241003a00a8020c050b200241c8016a41086a220e2008290300370300200241c8016a41106a2208200d290300370300200241c8016a41186a220d200f290300370300200220022903b0023703c801200241086a200110f7032002290308a70d04200241086a41106a29030021092002290310211020024188016a41086a200e290300221137030020024188016a41106a2008290300221237030020024188016a41186a200d2903002213370300200241e8006a41086a220d2011370300200241e8006a41106a220e2012370300200241e8006a41186a220f2013370300200220022903c801221137038801200220113703680240200b200228025c470d00200241d8006a200b410110e0012002280258210a2002280260210b0b200a200b41306c6a220820093703082008201037030020082002290368370310200841186a200d290300370300200841206a200e290300370300200841286a200f2903003703002002200b41016a220b360260200c2007470d000b0b200a450d03200229025c210920002004370300200020093702242000200a3602202000200637031020002003370308200041186a20053703000c040b1039000b200041003602200c020b200a4100200228025c22011b2208450d00200141306c450d002008102c0b200041003602200b200241f0026a24000f0b103b000be10506067f017e027f017e017f017e230041206b220224000240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d01200441036a2d0000210620042f0001210920012003417c6a3602042001200441046a3602002009200641107472410874200572220141808004490d012001410276ad21080c020b02400240024002402005410276220a0e0d00030303010303030303030302030b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210b0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210b0c050b20064110490d03200441096a290000210b2004290001210820012003416f6a3602042001200441116a360200200b428080808080808080015421070c040b200541334b0d02200a41046a21092003417e6a2103200441026a21044100210541012107200241186a210c420021084200210b03402003417f460d012004417f6a310000210d2001200336020420012004360200200241106a200d4200200541037441f8007110cd082003417f6a2103200441016a2104200c290300200b84210b20022903102008842108200541016a22062105200641ff01712009490d000b2002427f427f41e800200a4103746b41f8007110c6082008200229030058200b200241086a290300220d58200b200d511b21070c030b0c020b4200210b410021070c010b410121070b20002008370308200041106a200b37030020002007ad370300200241206a24000be70101047f230041106b2202240020022000360204200241046a200110e9032002200041106a360208200241086a200110e903200028022021032001200041286a2802002200108f0102402000450d00200041306c210403402001200141086a22002802004120102f200128020020002802006a2205200341106a290000370000200541186a200341286a290000370000200541106a200341206a290000370000200541086a200341186a2900003700002000200028020041206a3602002002200336020c2002410c6a200110e903200341306a2103200441506a22040d000b0b200241106a24000ba4ae010b077f027e1a7f017e017f017e047f017e077f017e0f7f230041d0196b22022400200241f8116a20011087020240024020022802f8110d0002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802fc11220320012802044103762204200420034b1b22054103742204417f4c0d0002400240024020050d00410421060c010b200410322206450d010b4100210420024100360298182002200536029418200220063602901802400240024002402003450d000340200241f0116a200110870220022802f0110d0220022802f4112105200241e8116a200110fa0320022f01e8110d0220022f01ea11210702402004200228029418470d0020024190186a200410bc03200228029818210420022802901821060b200620044103746a220820073b0104200820053602002002200441016a2204360298182003417f6a22030d000b20022802901821060b2006450d402002290294182209422088a741037422040d01200621040c020b2006410020022802941822041b2201450d3f200441ffffffff01710d3e0c3f0b200620046a210320062104034020042004290200220a3e0200200441046a200a4220883d0100200441086a22042003470d000b0b2009a7210b200241e0116a200110870220022802e0110d3a20022802e41122072001280204410c6e2203200320074b1bad420c7e220a422088a70d01200aa72205417f4c0d010240024020050d00410421080c010b200510322208450d010b410021032002410036029818200220083602901820022005410c6e3602941802400240024002402007450d000340200241d8116a200110870220022802d8110d0220022802dc11210c200241d0116a200110fa0320022f01d0110d0220022f01d211210d200241c8116a200110fa0320022f01c8110d0220022f01ca11210e200241c0116a200110fa0320022f01c0110d0220022f01c211210f02402003200228029418470d0020024190186a200310fb03200228029818210320022802901821080b20082003410c6c6a2205200f3b01082005200d3b01042005200c360200200541066a200e3b01002002200341016a2203360298182007417f6a22070d000b20022802901821080b2008450d3d200229029418220a422088a7410c6c22030d01200821030c020b2008410020022802941822041b2201450d3c2004410c6c0d3b0c3c0b200820036a21052008210303402003410c6a22032005470d000b0b200aa7210d200241b8116a2001108702200320086b410c6d211020022802b8110d374104210c20022802bc11220520012802044104762203200320054b1b22034104742207417f4c0d0102402003450d0020071032220c450d010b200241003602981820022003360294182002200c3602901802402005450d00410021030340200241b0116a200110870220022802b0110d3820022802b411210f200241003a00d818200241a8116a200110fa0320022f01a8110d3820022f01aa112107200241a0116a200110fa0320022f01a0110d3820022f01a211210e200241013a00d818200220073b01d0182002200e3b01d21820024198116a200110fa0320022f0198110d3720022f019a11210720024190116a200110fa0320022f0190110d3720022f019211210e200220073b01d4182002200e3b01d61820022903d018210a20024188116a200110fa0320022f0188110d3820022f018a11210e02402003200228029418470d0020024190186a200310ce012002280298182103200228029018210c0b200c20034104746a2207200e3b010c2007200a3702042007200f3602002002200341016a2203360298182005417f6a22050d000b200228029018210c0b200c450d3702400240200229029418220a422088a741047422030d00200c21030c010b200c20036a2105200c21030340200341106a22032005470d000b0b200aa7211120024180116a20011087022002280280110d33200228028411220e200128020441146e22052005200e4b1bad42147e220a422088a70d01200aa72205417f4c0d010240024020050d004104210f0c010b20051032220f450d010b20024100360298162002200f360290162002200541146e360294160240200e450d00200241d0186a41086a2112410021050340200241f8106a200110870220022802f8100d3420022802fc102113200241003a009c18200241f0106a200110fa0320022f01f0100d3420022f01f2102107200241e8106a200110fa0320022f01e8100d3420022f01ea102114200241013a009c18200220073b019018200220143b019218200241e0106a200110fa0320022f01e0100d3320022f01e2102107200241d8106a200110fa0320022f01d8100d3320022f01da102114200241023a009c18200220073b019418200220143b019618200241d0106a200110fa0320022f01d0100d3320022f01d2102107200241c8106a200110fa0320022f01c8100d3320022f01ca102114200220073b019818200220143b019a18201220022802981836020020022002290390183703d018200241c0106a200110fa0320022f01c0100d3420022f01c210211420024190176a41086a20122802002207360200200241d0166a41086a22152007360200200220022903d018220a370390172002200a3703d01602402005200228029416470d0020024190166a200510fc032002280298162105200228029016210f0b200f200541146c6a22072013360200200720022903d0163702042007410c6a2015280200360200200720143b01102002200541016a220536029816200e417f6a220e0d000b200228029016210f0b200f450d3302400240200229029416220a422088a741146c22050d00200f21050c010b200f20056a2107200f21050340200541146a22052007470d000b0b200aa72107200241b8106a20011087022005200f6b41146d211620022802b8100d2f20022802bc102212200128020441186e2205200520124b1bad42187e220a422088a70d01200aa72205417f4c0d010240024020050d00410421140c010b200510322214450d010b200241003602981620022014360290162002200541186e3602941602402012450d00410021050340200241b0106a200110870220022802b0100d3020022802b4102115200241003a00a018200241a8106a200110fa0320022f01a8100d3020022f01aa10210e200241a0106a200110fa0320022f01a0100d3020022f01a2102113200241013a00a0182002200e3b019018200220133b01921820024198106a200110fa0320022f0198100d2f20022f019a10210e20024190106a200110fa0320022f0190100d2f20022f0192102113200241023a00a0182002200e3b019418200220133b01961820024188106a200110fa0320022f0188100d2f20022f018a10210e20024180106a200110fa0320022f0180100d2f20022f0182102113200241033a00a0182002200e3b019818200220133b019a18200241f80f6a200110fa0320022f01f80f0d2f20022f01fa0f210e200241f00f6a200110fa0320022f01f00f0d2f20022f01f20f21132002200e3b019c18200220133b019e18200241d0186a41086a220e20024190186a41086a29030037030020022002290390183703d018200241e80f6a200110fa0320022f01e80f0d3020022f01ea0f211320024190176a41086a200e290300220a370300200241d0166a41086a2217200a370300200220022903d018220a370390172002200a3703d01602402005200228029416470d0020024190166a200510fd03200228029816210520022802901621140b2014200541186c6a220e2015360200200e20022903d0163702042017290300210a200e20133b0114200e410c6a200a3702002002200541016a2205360298162012417f6a22120d000b20022802901621140b2014450d2f02400240200229029416220a422088a741186c22050d00201421050c010b201420056a210e201421050340200541186a2205200e470d000b0b200aa7210e200241e00f6a2001108702200520146b41186d211820022802e00f0d2b20022802e40f22132001280204411c6e2205200520134b1bad421c7e220a422088a70d01200aa72205417f4c0d010240024020050d00410421150c010b200510322215450d010b2002410036029816200220153602901620022005411c6e3602941602402013450d00200241d0186a41106a2119410021050340200241d80f6a200110870220022802d80f0d2c20022802dc0f211a200241003a00a418200241d00f6a200110fa0320022f01d00f0d2c20022f01d20f2112200241c80f6a200110fa0320022f01c80f0d2c20022f01ca0f2117200241013a00a418200220123b019018200220173b019218200241c00f6a200110fa0320022f01c00f0d2b20022f01c20f2112200241b80f6a200110fa0320022f01b80f0d2b20022f01ba0f2117200241023a00a418200220123b019418200220173b019618200241b00f6a200110fa0320022f01b00f0d2b20022f01b20f2112200241a80f6a200110fa0320022f01a80f0d2b20022f01aa0f2117200241033a00a418200220123b019818200220173b019a18200241a00f6a200110fa0320022f01a00f0d2b20022f01a20f2112200241980f6a200110fa0320022f01980f0d2b20022f019a0f2117200241043a00a418200220123b019c18200220173b019e18200241900f6a200110fa0320022f01900f0d2b20022f01920f2112200241880f6a200110fa0320022f01880f0d2b20022f018a0f2117200241d0186a41086a221b20024190186a41086a290300370300200220123b01a018200220173b01a218201920022802a018360200200241053a00a41820022002290390183703d018200241800f6a200110fa0320022f01800f0d2c20022f01820f211720024190176a41086a201b290300220a37030020024190176a41106a20192802002212360200200241d0166a41086a221b200a370300200241d0166a41106a221c2012360200200220022903d018220a370390172002200a3703d01602402005200228029416470d0020024190166a2005109602200228029816210520022802901621150b20152005411c6c6a2212201a360200201220022903d016370204201c280200211a201b290300210a201220173b01182012410c6a200a370200201241146a201a3602002002200541016a2205360298162013417f6a22130d000b20022802901621150b2015450d2b02400240200229029416220a422088a7411c6c22050d00201521050c010b201520056a21122015210503402005411c6a22052012470d000b0b200aa72112200241f80e6a2001108702200520156b411c6d211b20022802f80e0d2720022802fc0e221720012802044105762205200520174b1b22054105742213417f4c0d010240024020050d00410421190c010b201310322219450d010b20024100360298162002200536029416200220193602901602402017450d00410021050340200241f00e6a200110870220022802f00e0d2820022802f40e211c200241003a00a818200241e80e6a200110fa0320022f01e80e0d2820022f01ea0e2113200241e00e6a200110fa0320022f01e00e0d2820022f01e20e211a200241013a00a818200220133b0190182002201a3b019218200241d80e6a200110fa0320022f01d80e0d2720022f01da0e2113200241d00e6a200110fa0320022f01d00e0d2720022f01d20e211a200241023a00a818200220133b0194182002201a3b019618200241c80e6a200110fa0320022f01c80e0d2720022f01ca0e2113200241c00e6a200110fa0320022f01c00e0d2720022f01c20e211a200241033a00a818200220133b0198182002201a3b019a18200241b80e6a200110fa0320022f01b80e0d2720022f01ba0e2113200241b00e6a200110fa0320022f01b00e0d2720022f01b20e211a200241043a00a818200220133b019c182002201a3b019e18200241a80e6a200110fa0320022f01a80e0d2720022f01aa0e2113200241a00e6a200110fa0320022f01a00e0d2720022f01a20e211a200241053a00a818200220133b01a0182002201a3b01a218200241980e6a200110fa0320022f01980e0d2720022f019a0e2113200241900e6a200110fa0320022f01900e0d2720022f01920e211a200241d0186a41086a221d20024190186a41086a290300370300200220133b01a4182002201a3b01a618200241d0186a41106a221320024190186a41106a290300370300200241063a00a81820022002290390183703d018200241880e6a200110fa0320022f01880e0d2820022f018a0e211a20024190176a41086a201d290300220a37030020024190176a41106a20132903002209370300200241d0166a41086a221d200a370300200241d0166a41106a221e2009370300200220022903d018220a370390172002200a3703d01602402005200228029416470d0020024190166a200510fe03200228029816210520022802901621190b201920054105746a2213201c360200201320022903d016370204201e290300210a201d29030021092013201a3b011c2013410c6a2009370200201341146a200a3702002002200541016a2205360298162017417f6a22170d000b20022802901621190b2019450d2702400240200229029416220a422088a741057422050d00201921050c010b201920056a2113201921050340200541206a22052013470d000b0b200aa72117200241800e6a200110870220022802800e0d2320022802840e221c200128020441246e22132013201c4b1bad42247e220a422088a70d01200aa72213417f4c0d010240024020130d004104211d0c010b20131032221d450d010b20024100360288162002201d360280162002201341246e360284160240201c450d00200241d0176a41186a211f4100211a0340200241f80d6a200110870220022802f80d0d2420022802fc0d2120200241003a00ac18200241f00d6a200110fa0320022f01f00d0d2420022f01f20d2113200241e80d6a200110fa0320022f01e80d0d2420022f01ea0d211e200241013a00ac18200220133b0190182002201e3b019218200241e00d6a200110fa0320022f01e00d0d2320022f01e20d2113200241d80d6a200110fa0320022f01d80d0d2320022f01da0d211e200241023a00ac18200220133b0194182002201e3b019618200241d00d6a200110fa0320022f01d00d0d2320022f01d20d2113200241c80d6a200110fa0320022f01c80d0d2320022f01ca0d211e200241033a00ac18200220133b0198182002201e3b019a18200241c00d6a200110fa0320022f01c00d0d2320022f01c20d2113200241b80d6a200110fa0320022f01b80d0d2320022f01ba0d211e200241043a00ac18200220133b019c182002201e3b019e18200241b00d6a200110fa0320022f01b00d0d2320022f01b20d2113200241a80d6a200110fa0320022f01a80d0d2320022f01aa0d211e200241053a00ac18200220133b01a0182002201e3b01a218200241a00d6a200110fa0320022f01a00d0d2320022f01a20d2113200241980d6a200110fa0320022f01980d0d2320022f019a0d211e200241063a00ac18200220133b01a4182002201e3b01a618200241900d6a200110fa0320022f01900d0d2320022f01920d2113200241880d6a200110fa0320022f01880d0d2320022f018a0d211e200241d0176a41106a222120024190186a41106a290300370300200241d0176a41086a222220024190186a41086a290300370300200220133b01a8182002201e3b01aa18201f20022802a818360200200241073a00ac182002200229039018220a3703d0182002200a3703d017200241800d6a200110fa0320022f01800d0d2420022f01820d211e200241d0166a41086a2022290300220a370300200241d0166a41106a20212903002209370300200241d0166a41186a201f280200221336020020024190166a41086a2221200a37030020024190166a41106a2222200937030020024190166a41186a22232013360200200220022903d017220a3703d0162002200a370390160240201a200228028416470d0020024180166a201a10ff03200228028816211a200228028016211d0b201d201a41246c6a221320203602002013200229039016370204202328020021202022290300210a202129030021092013201e3b01202013410c6a2009370200201341146a200a3702002013411c6a20203602002002201a41016a221a36028816201c417f6a221c0d000b200228028016211d0b201d450d2302400240200229028416220a422088a741246c22130d00201d21130c010b201d20136a211a201d21130340201341246a2213201a470d000b0b200aa7211a200241f80c6a20011087022013201d6b41246d212020022802f80c0d1f20022802fc0c221c200128020441286e22132013201c4b1bad42287e220a422088a70d01200aa72213417f4c0d010240024020130d004104211f0c010b20131032221f450d010b20024100360288162002201f360280162002201341286e360284160240201c450d004100211e0340200241f00c6a200110870220022802f00c0d2020022802f40c2122200241003a00b018200241e80c6a200110fa0320022f01e80c0d2020022f01ea0c2113200241e00c6a200110fa0320022f01e00c0d2020022f01e20c2121200241013a00b018200220133b019018200220213b019218200241d80c6a200110fa0320022f01d80c0d1f20022f01da0c2113200241d00c6a200110fa0320022f01d00c0d1f20022f01d20c2121200241023a00b018200220133b019418200220213b019618200241c80c6a200110fa0320022f01c80c0d1f20022f01ca0c2113200241c00c6a200110fa0320022f01c00c0d1f20022f01c20c2121200241033a00b018200220133b019818200220213b019a18200241b80c6a200110fa0320022f01b80c0d1f20022f01ba0c2113200241b00c6a200110fa0320022f01b00c0d1f20022f01b20c2121200241043a00b018200220133b019c18200220213b019e18200241a80c6a200110fa0320022f01a80c0d1f20022f01aa0c2113200241a00c6a200110fa0320022f01a00c0d1f20022f01a20c2121200241053a00b018200220133b01a018200220213b01a218200241980c6a200110fa0320022f01980c0d1f20022f019a0c2113200241900c6a200110fa0320022f01900c0d1f20022f01920c2121200241063a00b018200220133b01a418200220213b01a618200241880c6a200110fa0320022f01880c0d1f20022f018a0c2113200241800c6a200110fa0320022f01800c0d1f20022f01820c2121200241073a00b018200220133b01a818200220213b01aa18200241f80b6a200110fa0320022f01f80b0d1f20022f01fa0b2113200241f00b6a200110fa0320022f01f00b0d1f20022f01f20b2121200241d0176a41106a222320024190186a41106a290300370300200220133b01ac18200220213b01ae18200241d0176a41186a221320024190186a41186a290300370300200241083a00b018200241d0176a41086a222120024190186a41086a2903003703002002200229039018220a3703d0182002200a3703d017200241e80b6a200110fa0320022f01e80b0d2020022f01ea0b2124200241d0166a41086a2021290300220a370300200241d0166a41106a20232903002209370300200241d0166a41186a2013290300222537030020024190166a41086a2221200a37030020024190166a41106a2223200937030020024190166a41186a22262025370300200220022903d017220a3703d0162002200a370390160240201e200228028416470d0020024180166a201e108004200228028816211e200228028016211f0b201f201e41286c6a2213202236020020132002290390163702042026290300210a2023290300210920212903002125201320243b01242013410c6a2025370200201341146a20093702002013411c6a200a3702002002201e41016a221e36028816201c417f6a221c0d000b200228028016211f0b201f450d1f02400240200229028416220a422088a741286c22130d00201f21130c010b201f20136a211c201f21130340201341286a2213201c470d000b0b200aa7211c200241e00b6a20011087022013201f6b41286d212320022802e00b0d1b20022802e40b221e2001280204412c6e22132013201e4b1bad422c7e220a422088a70d01200aa72213417f4c0d010240024020130d00410421210c010b201310322221450d010b2002410036028816200220213602801620022013412c6e360284160240201e450d00410021220340200241d80b6a200110870220022802d80b0d1c20022802dc0b2126200241003a00b418200241d00b6a200110fa0320022f01d00b0d1c20022f01d20b2113200241c80b6a200110fa0320022f01c80b0d1c20022f01ca0b2124200241013a00b418200220133b019018200220243b019218200241c00b6a200110fa0320022f01c00b0d1b20022f01c20b2113200241b80b6a200110fa0320022f01b80b0d1b20022f01ba0b2124200241023a00b418200220133b019418200220243b019618200241b00b6a200110fa0320022f01b00b0d1b20022f01b20b2113200241a80b6a200110fa0320022f01a80b0d1b20022f01aa0b2124200241033a00b418200220133b019818200220243b019a18200241a00b6a200110fa0320022f01a00b0d1b20022f01a20b2113200241980b6a200110fa0320022f01980b0d1b20022f019a0b2124200241043a00b418200220133b019c18200220243b019e18200241900b6a200110fa0320022f01900b0d1b20022f01920b2113200241880b6a200110fa0320022f01880b0d1b20022f018a0b2124200241053a00b418200220133b01a018200220243b01a218200241800b6a200110fa0320022f01800b0d1b20022f01820b2113200241f80a6a200110fa0320022f01f80a0d1b20022f01fa0a2124200241063a00b418200220133b01a418200220243b01a618200241f00a6a200110fa0320022f01f00a0d1b20022f01f20a2113200241e80a6a200110fa0320022f01e80a0d1b20022f01ea0a2124200241073a00b418200220133b01a818200220243b01aa18200241e00a6a200110fa0320022f01e00a0d1b20022f01e20a2113200241d80a6a200110fa0320022f01d80a0d1b20022f01da0a2124200241083a00b418200220133b01ac18200220243b01ae18200241d00a6a200110fa0320022f01d00a0d1b20022f01d20a2113200241c80a6a200110fa0320022f01c80a0d1b20022f01ca0a2124200220133b01b018200220243b01b218200241093a00b418200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20022802b0182213360200200220022903901822273703d018200241d0176a41206a22242013360200200241d0176a41186a22282025370300200241d0176a41106a22292009370300200241d0176a41086a222a200a370300200220273703d017200241c00a6a200110fa0320022f01c00a0d1c20022f01c20a212b20024190176a41206a20242802002213360200200241d0166a41086a202a290300220a370300200241d0166a41106a20292903002209370300200241d0166a41186a20282903002225370300200241d0166a41206a201336020020024190166a41086a2224200a37030020024190166a41106a2228200937030020024190166a41186a2229202537030020024190166a41206a222a2013360200200220022903d017220a3703d0162002200a3703901602402022200228028416470d0020024180166a2022108104200228028816212220022802801621210b20212022412c6c6a221320263602002013200229039016370204202a28020021262029290300210a20282903002109202429030021252013202b3b01282013410c6a2025370200201341146a20093702002013411c6a200a370200201341246a20263602002002202241016a222236028816201e417f6a221e0d000b20022802801621210b2021450d1b02400240200229028416220a422088a7412c6c22130d00202121130c010b202120136a211e2021211303402013412c6a2213201e470d000b0b200aa7211e200241b80a6a2001108702201320216b412c6d212820022802b80a0d1720022802bc0a2213200128020441306e2222202220134b1bad42307e220a422088a70d01200aa72222417f4c0d010240024020220d00410421240c010b202210322224450d010b200241003602881620022024360280162002202241306e3602841602402013450d00410021260340200241b00a6a200110870220022802b00a0d1820022802b40a212a200241003a00b818200241a80a6a200110fa0320022f01a80a0d1820022f01aa0a2122200241a00a6a200110fa0320022f01a00a0d1820022f01a20a2129200241013a00b818200220223b019018200220293b019218200241980a6a200110fa0320022f01980a0d1720022f019a0a2122200241900a6a200110fa0320022f01900a0d1720022f01920a2129200241023a00b818200220223b019418200220293b019618200241880a6a200110fa0320022f01880a0d1720022f018a0a2122200241800a6a200110fa0320022f01800a0d1720022f01820a2129200241033a00b818200220223b019818200220293b019a18200241f8096a200110fa0320022f01f8090d1720022f01fa092122200241f0096a200110fa0320022f01f0090d1720022f01f2092129200241043a00b818200220223b019c18200220293b019e18200241e8096a200110fa0320022f01e8090d1720022f01ea092122200241e0096a200110fa0320022f01e0090d1720022f01e2092129200241053a00b818200220223b01a018200220293b01a218200241d8096a200110fa0320022f01d8090d1720022f01da092122200241d0096a200110fa0320022f01d0090d1720022f01d2092129200241063a00b818200220223b01a418200220293b01a618200241c8096a200110fa0320022f01c8090d1720022f01ca092122200241c0096a200110fa0320022f01c0090d1720022f01c2092129200241073a00b818200220223b01a818200220293b01aa18200241b8096a200110fa0320022f01b8090d1720022f01ba092122200241b0096a200110fa0320022f01b0090d1720022f01b2092129200241083a00b818200220223b01ac18200220293b01ae18200241a8096a200110fa0320022f01a8090d1720022f01aa092122200241a0096a200110fa0320022f01a0090d1720022f01a2092129200241093a00b818200220223b01b018200220293b01b21820024198096a200110fa0320022f0198090d1720022f019a09212220024190096a200110fa0320022f0190090d1720022f0192092129200220223b01b418200220293b01b6182002410a3a00b818200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20024190186a41206a29030022273703002002200229039018222c3703d018200241d0176a41206a22222027370300200241d0176a41186a22292025370300200241d0176a41106a222b2009370300200241d0176a41086a222d200a3703002002202c3703d01720024188096a200110fa0320022f0188090d1820022f018a09212e20024190176a41206a2022290300220a370300200241d0166a41086a202d2903002209370300200241d0166a41106a202b2903002225370300200241d0166a41186a20292903002227370300200241d0166a41206a200a37030020024190166a41086a2229200937030020024190166a41106a222b202537030020024190166a41186a222d202737030020024190166a41206a222f200a370300200220022903d017220a3703d0162002200a3703901602402026200228028416470d0020024180166a2026108204200228028816212620022802801621240b2024202641306c6a2222202a3602002022200229039016370204202f290300210a202d2903002109202b2903002125202929030021272022202e3b012c2022410c6a2027370200202241146a20253702002022411c6a2009370200202241246a200a3702002002202641016a2226360288162013417f6a22130d000b20022802801621240b2024450d1702400240200229028416220a422088a741306c22130d00202421130c010b202420136a2122202421130340201341306a22132022470d000b0b200aa7212220024180096a2001108702201320246b41306d212b2002280280090d132002280284092226200128020441346e2213201320264b1bad42347e220a422088a70d01200aa72213417f4c0d010240024020130d00410421290c010b201310322229450d010b200241003602881620022029360280162002201341346e3602841602402026450d004100212a0340200241f8086a200110870220022802f8080d1420022802fc08212e200241003a00bc18200241f0086a200110fa0320022f01f0080d1420022f01f2082113200241e8086a200110fa0320022f01e8080d1420022f01ea08212d200241013a00bc18200220133b0190182002202d3b019218200241e0086a200110fa0320022f01e0080d1320022f01e2082113200241d8086a200110fa0320022f01d8080d1320022f01da08212d200241023a00bc18200220133b0194182002202d3b019618200241d0086a200110fa0320022f01d0080d1320022f01d2082113200241c8086a200110fa0320022f01c8080d1320022f01ca08212d200241033a00bc18200220133b0198182002202d3b019a18200241c0086a200110fa0320022f01c0080d1320022f01c2082113200241b8086a200110fa0320022f01b8080d1320022f01ba08212d200241043a00bc18200220133b019c182002202d3b019e18200241b0086a200110fa0320022f01b0080d1320022f01b2082113200241a8086a200110fa0320022f01a8080d1320022f01aa08212d200241053a00bc18200220133b01a0182002202d3b01a218200241a0086a200110fa0320022f01a0080d1320022f01a208211320024198086a200110fa0320022f0198080d1320022f019a08212d200241063a00bc18200220133b01a4182002202d3b01a61820024190086a200110fa0320022f0190080d1320022f019208211320024188086a200110fa0320022f0188080d1320022f018a08212d200241073a00bc18200220133b01a8182002202d3b01aa1820024180086a200110fa0320022f0180080d1320022f0182082113200241f8076a200110fa0320022f01f8070d1320022f01fa07212d200241083a00bc18200220133b01ac182002202d3b01ae18200241f0076a200110fa0320022f01f0070d1320022f01f2072113200241e8076a200110fa0320022f01e8070d1320022f01ea07212d200241093a00bc18200220133b01b0182002202d3b01b218200241e0076a200110fa0320022f01e0070d1320022f01e2072113200241d8076a200110fa0320022f01d8070d1320022f01da07212d2002410a3a00bc18200220133b01b4182002202d3b01b618200241d0076a200110fa0320022f01d0070d1320022f01d2072113200241c8076a200110fa0320022f01c8070d1320022f01ca07212d200220133b01b8182002202d3b01ba182002410b3a00bc18200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20024190186a41206a2903002227370300200241d0186a41286a20022802b81822133602002002200229039018222c3703d018200241d0176a41286a222d2013360200200241d0176a41206a222f2027370300200241d0176a41186a22302025370300200241d0176a41106a22312009370300200241d0176a41086a2232200a3703002002202c3703d017200241c0076a200110fa0320022f01c0070d1420022f01c207213320024190176a41286a202d280200221336020020024190176a41206a202f290300220a370300200241d0166a41086a20322903002209370300200241d0166a41106a20312903002225370300200241d0166a41186a20302903002227370300200241d0166a41206a200a370300200241d0166a41286a2013360200200220022903d017222c3703d01620024190166a41286a222d201336020020024190166a41206a222f200a37030020024190166a41186a2230202737030020024190166a41106a2231202537030020024190166a41086a223220093703002002202c370390160240202a200228028416470d0020024180166a202a108304200228028816212a20022802801621290b2029202a41346c6a2213202e3602002013200229039016370204202d280200212d202f290300210a203029030021092031290300212520322903002127201320333b01302013410c6a2027370200201341146a20253702002013411c6a2009370200201341246a200a3702002013412c6a202d3602002002202a41016a222a360288162026417f6a22260d000b20022802801621290b2029450d1302400240200229028416220a422088a741346c22130d00202921130c010b202920136a2126202921130340201341346a22132026470d000b0b200aa72126200241b8076a2001108702201320296b41346d212f20022802b8070d0f20022802bc072213200128020441386e222a202a20134b1bad42387e220a422088a70d01200aa7222a417f4c0d0102400240202a0d004104212d0c010b202a1032222d450d010b20024100360288162002202d360280162002202a41386e3602841602402013450d004100212e0340200241b0076a200110870220022802b0070d1020022802b4072131200241003a00c018200241a8076a200110fa0320022f01a8070d1020022f01aa07212a200241a0076a200110fa0320022f01a0070d1020022f01a2072130200241013a00c0182002202a3b019018200220303b01921820024198076a200110fa0320022f0198070d0f20022f019a07212a20024190076a200110fa0320022f0190070d0f20022f0192072130200241023a00c0182002202a3b019418200220303b01961820024188076a200110fa0320022f0188070d0f20022f018a07212a20024180076a200110fa0320022f0180070d0f20022f0182072130200241033a00c0182002202a3b019818200220303b019a18200241f8066a200110fa0320022f01f8060d0f20022f01fa06212a200241f0066a200110fa0320022f01f0060d0f20022f01f2062130200241043a00c0182002202a3b019c18200220303b019e18200241e8066a200110fa0320022f01e8060d0f20022f01ea06212a200241e0066a200110fa0320022f01e0060d0f20022f01e2062130200241053a00c0182002202a3b01a018200220303b01a218200241d8066a200110fa0320022f01d8060d0f20022f01da06212a200241d0066a200110fa0320022f01d0060d0f20022f01d2062130200241063a00c0182002202a3b01a418200220303b01a618200241c8066a200110fa0320022f01c8060d0f20022f01ca06212a200241c0066a200110fa0320022f01c0060d0f20022f01c2062130200241073a00c0182002202a3b01a818200220303b01aa18200241b8066a200110fa0320022f01b8060d0f20022f01ba06212a200241b0066a200110fa0320022f01b0060d0f20022f01b2062130200241083a00c0182002202a3b01ac18200220303b01ae18200241a8066a200110fa0320022f01a8060d0f20022f01aa06212a200241a0066a200110fa0320022f01a0060d0f20022f01a2062130200241093a00c0182002202a3b01b018200220303b01b21820024198066a200110fa0320022f0198060d0f20022f019a06212a20024190066a200110fa0320022f0190060d0f20022f01920621302002410a3a00c0182002202a3b01b418200220303b01b61820024188066a200110fa0320022f0188060d0f20022f018a06212a20024180066a200110fa0320022f0180060d0f20022f01820621302002410b3a00c0182002202a3b01b818200220303b01ba18200241f8056a200110fa0320022f01f8050d0f20022f01fa05212a200241f0056a200110fa0320022f01f0050d0f20022f01f20521302002202a3b01bc18200220303b01be182002410c3a00c018200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20024190186a41206a2903002227370300200241d0186a41286a20024190186a41286a290300222c370300200220022903901822343703d018200241d0176a41286a222a202c370300200241d0176a41206a22302027370300200241d0176a41186a22322025370300200241d0176a41106a22332009370300200241d0176a41086a2235200a370300200220343703d017200241e8056a200110fa0320022f01e8050d1020022f01ea05213620024190176a41286a202a290300220a37030020024190176a41206a20302903002209370300200241d0166a41086a20352903002225370300200241d0166a41106a20332903002227370300200241d0166a41186a2032290300222c370300200241d0166a41206a2009370300200241d0166a41286a200a370300200220022903d01722343703d01620024190166a41286a2230200a37030020024190166a41206a2232200937030020024190166a41186a2233202c37030020024190166a41106a2235202737030020024190166a41086a2237202537030020022034370390160240202e200228028416470d0020024180166a202e108404200228028816212e200228028016212d0b202d202e41386c6a222a2031360200202a2002290390163702042030290300210a2032290300210920332903002125203529030021272037290300212c202a20363b0134202a410c6a202c370200202a41146a2027370200202a411c6a2025370200202a41246a2009370200202a412c6a200a3702002002202e41016a222e360288162013417f6a22130d000b200228028016212d0b202d450d0f02400240200229028416220a422088a741386c22130d00202d21130c010b202d20136a212a202d21130340201341386a2213202a470d000b0b200aa7212a200241e0056a20011087022013202d6b41386d213220022802e0050d0b20022802e40522132001280204413c6e222e202e20134b1bad423c7e220a422088a70d01200aa7222e417f4c0d0102400240202e0d00410421300c010b202e10322230450d010b200241003602881620022030360280162002202e413c6e3602841602402013450d00410021310340200241d8056a200110870220022802d8050d0c20022802dc052135200241003a00c418200241d0056a200110fa0320022f01d0050d0c20022f01d205212e200241c8056a200110fa0320022f01c8050d0c20022f01ca052133200241013a00c4182002202e3b019018200220333b019218200241c0056a200110fa0320022f01c0050d0b20022f01c205212e200241b8056a200110fa0320022f01b8050d0b20022f01ba052133200241023a00c4182002202e3b019418200220333b019618200241b0056a200110fa0320022f01b0050d0b20022f01b205212e200241a8056a200110fa0320022f01a8050d0b20022f01aa052133200241033a00c4182002202e3b019818200220333b019a18200241a0056a200110fa0320022f01a0050d0b20022f01a205212e20024198056a200110fa0320022f0198050d0b20022f019a052133200241043a00c4182002202e3b019c18200220333b019e1820024190056a200110fa0320022f0190050d0b20022f019205212e20024188056a200110fa0320022f0188050d0b20022f018a052133200241053a00c4182002202e3b01a018200220333b01a21820024180056a200110fa0320022f0180050d0b20022f018205212e200241f8046a200110fa0320022f01f8040d0b20022f01fa042133200241063a00c4182002202e3b01a418200220333b01a618200241f0046a200110fa0320022f01f0040d0b20022f01f204212e200241e8046a200110fa0320022f01e8040d0b20022f01ea042133200241073a00c4182002202e3b01a818200220333b01aa18200241e0046a200110fa0320022f01e0040d0b20022f01e204212e200241d8046a200110fa0320022f01d8040d0b20022f01da042133200241083a00c4182002202e3b01ac18200220333b01ae18200241d0046a200110fa0320022f01d0040d0b20022f01d204212e200241c8046a200110fa0320022f01c8040d0b20022f01ca042133200241093a00c4182002202e3b01b018200220333b01b218200241c0046a200110fa0320022f01c0040d0b20022f01c204212e200241b8046a200110fa0320022f01b8040d0b20022f01ba0421332002410a3a00c4182002202e3b01b418200220333b01b618200241b0046a200110fa0320022f01b0040d0b20022f01b204212e200241a8046a200110fa0320022f01a8040d0b20022f01aa0421332002410b3a00c4182002202e3b01b818200220333b01ba18200241a0046a200110fa0320022f01a0040d0b20022f01a204212e20024198046a200110fa0320022f0198040d0b20022f019a0421332002410c3a00c4182002202e3b01bc18200220333b01be1820024190046a200110fa0320022f0190040d0b20022f019204212e20024188046a200110fa0320022f0188040d0b20022f018a0421332002202e3b01c018200220333b01c2182002410d3a00c418200241d0186a41086a222e20024190186a41086a290300370300200241d0186a41106a223320024190186a41106a290300370300200241d0186a41186a223620024190186a41186a290300370300200241d0186a41206a223720024190186a41206a290300370300200241d0186a41286a223820024190186a41286a290300370300200241d0186a41306a223920022802c01836020020022002290390183703d018200241d0176a41306a223a2039280200360200200241d0176a41286a22392038290300370300200241d0176a41206a22382037290300370300200241d0176a41186a22372036290300370300200241d0176a41106a22362033290300370300200241d0176a41086a2233202e290300370300200220022903d0183703d01720024180046a200110fa0320022f0180040d0c20022f018204213b20024190176a41306a203a280200222e36020020024190176a41286a2039290300220a37030020024190176a41206a20382903002209370300200241d0166a41086a22382033290300370300200241d0166a41106a22332036290300370300200241d0166a41186a22362037290300370300200241d0166a41206a22372009370300200241d0166a41286a2239200a370300200241d0166a41306a223a202e360200200220022903d0173703d01620024190166a41306a223c203a28020036020020024190166a41286a223a203929030037030020024190166a41206a2239203729030037030020024190166a41186a2237203629030037030020024190166a41106a2236203329030037030020024190166a41086a22332038290300370300200220022903d0163703901602402031200228028416470d0020024180166a2031108504200228028816213120022802801621300b20302031413c6c6a222e2035360200202e200229039016370204203c2802002135203a290300210a2039290300210920372903002125203629030021272033290300212c202e203b3b0138202e410c6a202c370200202e41146a2027370200202e411c6a2025370200202e41246a2009370200202e412c6a200a370200202e41346a20353602002002203141016a2231360288162013417f6a22130d000b20022802801621300b2030450d0b02400240200229028416220a422088a7413c6c22130d00203021130c010b203020136a212e2030211303402013413c6a2213202e470d000b0b200aa7212e200241f8036a2001108702201320306b413c6d213520022802f8030d0720022802fc03221320012802044106762231203120134b1b22314106742233417f4c0d010240024020310d00410421330c010b203310322233450d010b20024100360288162002203136028416200220333602801602402013450d00410021360340200241f0036a200110870220022802f0030d0820022802f4032138200241003a00c818200241e8036a200110fa0320022f01e8030d0820022f01ea032131200241e0036a200110fa0320022f01e0030d0820022f01e2032137200241013a00c818200220313b019018200220373b019218200241d8036a200110fa0320022f01d8030d0720022f01da032131200241d0036a200110fa0320022f01d0030d0720022f01d2032137200241023a00c818200220313b019418200220373b019618200241c8036a200110fa0320022f01c8030d0720022f01ca032131200241c0036a200110fa0320022f01c0030d0720022f01c2032137200241033a00c818200220313b019818200220373b019a18200241b8036a200110fa0320022f01b8030d0720022f01ba032131200241b0036a200110fa0320022f01b0030d0720022f01b2032137200241043a00c818200220313b019c18200220373b019e18200241a8036a200110fa0320022f01a8030d0720022f01aa032131200241a0036a200110fa0320022f01a0030d0720022f01a2032137200241053a00c818200220313b01a018200220373b01a21820024198036a200110fa0320022f0198030d0720022f019a03213120024190036a200110fa0320022f0190030d0720022f0192032137200241063a00c818200220313b01a418200220373b01a61820024188036a200110fa0320022f0188030d0720022f018a03213120024180036a200110fa0320022f0180030d0720022f0182032137200241073a00c818200220313b01a818200220373b01aa18200241f8026a200110fa0320022f01f8020d0720022f01fa022131200241f0026a200110fa0320022f01f0020d0720022f01f2022137200241083a00c818200220313b01ac18200220373b01ae18200241e8026a200110fa0320022f01e8020d0720022f01ea022131200241e0026a200110fa0320022f01e0020d0720022f01e2022137200241093a00c818200220313b01b018200220373b01b218200241d8026a200110fa0320022f01d8020d0720022f01da022131200241d0026a200110fa0320022f01d0020d0720022f01d20221372002410a3a00c818200220313b01b418200220373b01b618200241c8026a200110fa0320022f01c8020d0720022f01ca022131200241c0026a200110fa0320022f01c0020d0720022f01c20221372002410b3a00c818200220313b01b818200220373b01ba18200241b8026a200110fa0320022f01b8020d0720022f01ba022131200241b0026a200110fa0320022f01b0020d0720022f01b20221372002410c3a00c818200220313b01bc18200220373b01be18200241a8026a200110fa0320022f01a8020d0720022f01aa022131200241a0026a200110fa0320022f01a0020d0720022f01a20221372002410d3a00c818200220313b01c018200220373b01c21820024198026a200110fa0320022f0198020d0720022f019a02213120024190026a200110fa0320022f0190020d0720022f0192022137200220313b01c418200220373b01c6182002410e3a00c818200241d0186a41086a223120024190186a41086a290300370300200241d0186a41106a223720024190186a41106a290300370300200241d0186a41186a223920024190186a41186a290300370300200241d0186a41206a223a20024190186a41206a290300370300200241d0186a41286a223b20024190186a41286a290300370300200241d0186a41306a223c20024190186a41306a29030037030020022002290390183703d018200241d0176a41306a223d203c290300370300200241d0176a41286a223c203b290300370300200241d0176a41206a223b203a290300370300200241d0176a41186a223a2039290300370300200241d0176a41106a22392037290300370300200241d0176a41086a22372031290300370300200220022903d0183703d01720024188026a200110fa0320022f0188020d0820022f018a02213e20024190176a41306a203d290300220a37030020024190176a41286a203c290300220937030020024190176a41206a203b2903002225370300200241d0166a41086a22312037290300370300200241d0166a41106a22372039290300370300200241d0166a41186a2239203a290300370300200241d0166a41206a223a2025370300200241d0166a41286a223b2009370300200241d0166a41306a223c200a370300200220022903d0173703d01620024190166a41306a223d203c29030037030020024190166a41286a223c203b29030037030020024190166a41206a223b203a29030037030020024190166a41186a223a203929030037030020024190166a41106a2239203729030037030020024190166a41086a22372031290300370300200220022903d0163703901602402036200228028416470d0020024180166a2036108604200228028816213620022802801621330b203320364106746a223120383602002031200229039016370204203d290300210a203c2903002109203b2903002125203a29030021272039290300212c203729030021342031203e3b013c2031410c6a2034370200203141146a202c3702002031411c6a2027370200203141246a20253702002031412c6a2009370200203141346a200a3702002002203641016a2236360288162013417f6a22130d000b20022802801621330b2033450d0702400240200229028416220a422088a741067422130d00203321130c010b203320136a2131203321130340201341c0006a22132031470d000b0b200aa7213120024180026a20011087022002280280020d042002280284022237200128020441c4006e2236203620374b1bad42c4007e220a422088a70d01200aa72238417f4c0d010240024020380d00410421360c010b203810322236450d010b200241003602881620022036360280162002203841c4006e3602841602402037450d00410021390340200241f8016a200110870220022802f8010d0520022802fc01213b200241003a00cc18200241f0016a200110fa0320022f01f0010d0520022f01f2012138200241e8016a200110fa0320022f01e8010d0520022f01ea01213a200241013a00cc18200220383b0190182002203a3b019218200241e0016a200110fa0320022f01e0010d0420022f01e2012138200241d8016a200110fa0320022f01d8010d0420022f01da01213a200241023a00cc18200220383b0194182002203a3b019618200241d0016a200110fa0320022f01d0010d0420022f01d2012138200241c8016a200110fa0320022f01c8010d0420022f01ca01213a200241033a00cc18200220383b0198182002203a3b019a18200241c0016a200110fa0320022f01c0010d0420022f01c2012138200241b8016a200110fa0320022f01b8010d0420022f01ba01213a200241043a00cc18200220383b019c182002203a3b019e18200241b0016a200110fa0320022f01b0010d0420022f01b2012138200241a8016a200110fa0320022f01a8010d0420022f01aa01213a200241053a00cc18200220383b01a0182002203a3b01a218200241a0016a200110fa0320022f01a0010d0420022f01a201213820024198016a200110fa0320022f0198010d0420022f019a01213a200241063a00cc18200220383b01a4182002203a3b01a61820024190016a200110fa0320022f0190010d0420022f019201213820024188016a200110fa0320022f0188010d0420022f018a01213a200241073a00cc18200220383b01a8182002203a3b01aa1820024180016a200110fa0320022f0180010d0420022f0182012138200241f8006a200110fa0320022f01780d0420022f017a213a200241083a00cc18200220383b01ac182002203a3b01ae18200241f0006a200110fa0320022f01700d0420022f01722138200241e8006a200110fa0320022f01680d0420022f016a213a200241093a00cc18200220383b01b0182002203a3b01b218200241e0006a200110fa0320022f01600d0420022f01622138200241d8006a200110fa0320022f01580d0420022f015a213a2002410a3a00cc18200220383b01b4182002203a3b01b618200241d0006a200110fa0320022f01500d0420022f01522138200241c8006a200110fa0320022f01480d0420022f014a213a2002410b3a00cc18200220383b01b8182002203a3b01ba18200241c0006a200110fa0320022f01400d0420022f01422138200241386a200110fa0320022f01380d0420022f013a213a2002410c3a00cc18200220383b01bc182002203a3b01be18200241306a200110fa0320022f01300d0420022f01322138200241286a200110fa0320022f01280d0420022f012a213a2002410d3a00cc18200220383b01c0182002203a3b01c218200241206a200110fa0320022f01200d0420022f01222138200241186a200110fa0320022f01180d0420022f011a213a2002410e3a00cc18200220383b01c4182002203a3b01c618200241106a200110fa0320022f01100d0420022f01122138200241086a200110fa0320022f01080d0420022f010a213a200220383b01c8182002203a3b01ca182002410f3a00cc18200241d0186a41086a223820024190186a41086a290300370300200241d0186a41106a223a20024190186a41106a290300370300200241d0186a41186a223c20024190186a41186a290300370300200241d0186a41206a223d20024190186a41206a290300370300200241d0186a41286a223e20024190186a41286a290300370300200241d0186a41306a223f20024190186a41306a290300370300200241d0186a41386a224020022802c81836020020022002290390183703d018200241d0176a41086a22412038290300370300200241d0176a41106a2238203a290300370300200241d0176a41186a223a203c290300370300200241d0176a41206a223c203d290300370300200241d0176a41286a223d203e290300370300200241d0176a41306a223e203f290300370300200241d0176a41386a223f2040280200360200200220022903d0183703d0172002200110fa0320022f01000d0520022f0102214020024190176a41386a203f280200223f36020020024190176a41306a203e290300220a37030020024190176a41286a203d290300220937030020024190176a41206a203c2903002225370300200241d0166a41086a223c2041290300370300200241d0166a41106a223d2038290300370300200241d0166a41186a2238203a290300370300200241d0166a41206a223a2025370300200241d0166a41286a223e2009370300200241d0166a41306a2241200a370300200241d0166a41386a2242203f360200200220022903d0173703d01620024190166a41386a223f204228020036020020024190166a41306a2242204129030037030020024190166a41286a2241203e29030037030020024190166a41206a223e203a29030037030020024190166a41186a223a203829030037030020024190166a41106a2243203d29030037030020024190166a41086a223d203c290300370300200220022903d0163703901602402039200228028416470d0020024180166a203910df02200228028816213920022802801621360b2036203941c4006c6a2238203b3602002038200229039016370204203f280200213b2042290300210a20412903002109203e2903002125203a29030021272043290300212c203d2903002134203820403b01402038410c6a2034370200203841146a202c3702002038411c6a2027370200203841246a20253702002038412c6a2009370200203841346a200a3702002038413c6a203b3602002002203941016a2239360288162037417f6a22370d000b20022802801621360b2036450d04200420066b41037521372003200c6b4104752103200520196b4105752105201320336b4106752113200229028416220aa7213802400240200a422088a741c4006c22040d00203621040c010b203620046a2101203621040340200441c4006a22042001470d000b0b2000200b36020420002006360200200041b8016a2038360200200041b4016a2036360200200041b0016a2013360200200041ac016a2031360200200041a8016a2033360200200041a4016a2035360200200041a0016a202e3602002000419c016a203036020020004198016a203236020020004194016a202a36020020004190016a202d3602002000418c016a202f36020020004188016a202636020020004184016a202936020020004180016a202b360200200041fc006a2022360200200041f8006a2024360200200041f4006a2028360200200041f0006a201e360200200041ec006a2021360200200041e8006a2023360200200041e4006a201c360200200041e0006a201f360200200041dc006a2020360200200041d8006a201a360200200041d4006a201d360200200041d0006a2005360200200041cc006a2017360200200041c8006a2019360200200041c4006a201b360200200041c0006a20123602002000413c6a2015360200200041386a2018360200200041346a200e360200200041306a20143602002000412c6a2016360200200041286a2007360200200041246a200f360200200041206a20033602002000411c6a2011360200200041186a200c360200200041146a2010360200200041106a200d3602002000410c6a2008360200200041086a2037360200200041bc016a200420366b41c4006d3602000c3e0b1039000b103b000b200241003a00cc180b200228028016410020022802841622041b2201450d00200441c4006c450d002001102c0b20004100360200203141ffffff1f71450d032033102c0c030b200241003a00c8180b200228028016410020022802841622041b2201450d00200441ffffff1f71450d002001102c0b200041003602000b202e450d03202e413c6c450d032030102c0c030b200241003a00c4180b200228028016410020022802841622041b2201450d002004413c6c450d002001102c0b200041003602000b202a450d03202a41386c450d03202d102c0c030b200241003a00c0180b200228028016410020022802841622041b2201450d00200441386c450d002001102c0b200041003602000b2026450d03202641346c450d032029102c0c030b200241003a00bc180b200228028016410020022802841622041b2201450d00200441346c450d002001102c0b200041003602000b2022450d03202241306c450d032024102c0c030b200241003a00b8180b200228028016410020022802841622041b2201450d00200441306c450d002001102c0b200041003602000b201e450d03201e412c6c450d032021102c0c030b200241003a00b4180b200228028016410020022802841622041b2201450d002004412c6c450d002001102c0b200041003602000b201c450d03201c41286c450d03201f102c0c030b200241003a00b0180b200228028016410020022802841622041b2201450d00200441286c450d002001102c0b200041003602000b201a450d03201a41246c450d03201d102c0c030b200241003a00ac180b200228028016410020022802841622041b2201450d00200441246c450d002001102c0b200041003602000b201741ffffff3f71450d032019102c0c030b200241003a00a8180b200228029016410020022802941622041b2201450d00200441ffffff3f71450d002001102c0b200041003602000b2012450d032012411c6c450d032015102c0c030b200241003a00a4180b200228029016410020022802941622041b2201450d002004411c6c450d002001102c0b200041003602000b200e450d03200e41186c450d032014102c0c030b200241003a00a0180b200228029016410020022802941622041b2201450d00200441186c450d002001102c0b200041003602000b2007450d03200741146c450d03200f102c0c030b200241003a009c180b200228029016410020022802941622041b2201450d00200441146c450d002001102c0b200041003602000b201141ffffffff0071450d03200c102c0c030b200241003a00d8180b200228029018410020022802941822041b2201450d00200441ffffffff0071450d002001102c0b200041003602000b200d450d02200d410c6c450d022008102c0c020b2001102c0b200041003602000b200b41ffffffff0171450d022006102c0c020b2001102c0b200041003602000b200241d0196a24000b8d0201067f024002400240200128020422020d00410121030c010b200128020022042d0000210520012002417f6a2206360204410121032001200441016a360200200541037122074103460d0002400240024020070e03020100020b20064103490d02200441036a2d0000210720042f0001210620012002417c6a3602042001200441046a360200200620074110747241087420057222024180807c6a41ffff0b4b0d0320024102762101410021030c030b2006450d0120042d0001210320012002417e6a3602042001200441026a360200200341087420057241ffff03712201418002492103200141027621010c020b20054102762101410021030c010b0b200020013b0102200020033b01000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad420c7e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b2001410c6c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a2002410c6e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42147e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141146c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241146e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42187e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141186c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241186e3602000b0f0b2005450d001039000b103b000bd20101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffff3f7122042002470d02200241057422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141057422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034105763602000b0f0b2004450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42247e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141246c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241246e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42287e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141286c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241286e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad422c7e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b2001412c6c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a2002412c6e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42307e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141306c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241306e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42347e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141346c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241346e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42387e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141386c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241386e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad423c7e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b2001413c6c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a2002413c6e3602000b0f0b2005450d001039000b103b000bd20101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffff1f7122042002470d02200241067422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141067422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034106763602000b0f0b2004450d001039000b103b000beab4010b077f027e1a7f017e017f017e047f017e077f017e0f7f230041d0196b22022400200241f8116a200110b00302400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802f8110d0020022802fc11220320012802002802044103762204200420034b1b22044103742205417f4c0d040240024020040d00410421050c010b200510322205450d040b2001200128020441016a22063602042002410036029818200220043602941820022005360290180240200620012802084b0d00024002402003450d00410021040340200241f0116a200110b00320022802f0110d0220022802f4112106200241e8116a200110880420022f01e8110d0220022f01ea11210702402004200228029418470d0020024190186a200410bc03200228029818210420022802901821050b200520044103746a220820073b0104200820063602002002200441016a2204360298182003417f6a22030d000b2001280204210620022802901821050b20012006417f6a3602042005450d022002290294182209422088a741037422040d03200521040c040b20022802941821040b200228029018410020041b2201450d00200441ffffffff0171450d002001102c0b200041003602000c490b200520046a210320052104034020042004290200220a3e0200200441046a200a4220883d0100200441086a22042003470d000b0b2009a7210b200241e0116a200110b00302400240024020022802e0110d0020022802e41122072001280200280204410c6e2203200320074b1bad420c7e220a422088a70d04200aa72203417f4c0d040240024020030d00410421080c010b200310322208450d040b2001200128020441016a22063602042002410036029818200220083602901820022003410c6e2203360294180240200620012802084b0d00024002402007450d00410021030340200241d8116a200110b00320022802d8110d0220022802dc11210c200241d0116a200110880420022f01d0110d0220022f01d211210d200241c8116a200110880420022f01c8110d0220022f01ca11210e200241c0116a200110880420022f01c0110d0220022f01c211210f02402003200228029418470d0020024190186a200310fb03200228029818210320022802901821080b20082003410c6c6a2206200f3b01082006200d3b01042006200c360200200641066a200e3b01002002200341016a2203360298182007417f6a22070d000b2001280204210620022802901821080b20012006417f6a3602042008450d02200229029418220a422088a7410c6c22030d03200821030c040b20022802941821030b200228029018410020031b2204450d002003410c6c450d002004102c0b200041003602000c480b200820036a21062008210303402003410c6a22032006470d000b0b200aa72106200241b8116a200110b003200320086b410c6d211020022802b8110d444104210720022802bc11220c200128020028020441047622032003200c4b1b2203410474220d417f4c0d0102402003450d00200d10322207450d010b2001200128020441016a220d360204200241003602981820022003360294182002200736029018200d20012802084b0d430240200c450d00410021030340200241b0116a200110b0030240024020022802b0110d0020022802b411210f200241003a00d818200241a8116a200110880420022f01a8110d0020022f01aa11210d200241a0116a200110880420022f01a0110d0020022f01a211210e200241013a00d8182002200d3b01d0182002200e3b01d21820024198116a200110880420022f0198110d4620022f019a11210d20024190116a200110880420022f0190110d4620022f019211210e2002200d3b01d4182002200e3b01d61820022903d018210a20024188116a200110880420022f018811450d010b20022802941821030c460b20022f018a11210e02402003200228029418470d0020024190186a200310ce01200228029818210320022802901821070b200720034104746a220d200e3b010c200d200a370204200d200f3602002002200341016a220336029818200c417f6a220c0d000b2001280204210d20022802901821070b2001200d417f6a3602042007450d4402400240200229029418220a422088a741047422030d00200721030c010b200720036a210c200721030340200341106a2203200c470d000b0b200aa7210d20024180116a200110b0032002280280110d40200228028411220e200128020028020441146e220c200c200e4b1bad42147e220a422088a70d01200aa7220c417f4c0d0102400240200c0d004104210f0c010b200c1032220f450d010b2001200128020441016a221136020420024100360298162002200f360290162002200c41146e220c36029416201120012802084b0d3f0240200e450d00200241d0186a41086a21124100210c0340200241f8106a200110b00320022802f8100d4020022802fc102113200241003a009c18200241f0106a200110880420022f01f0100d4020022f01f2102111200241e8106a200110880420022f01e8100d4020022f01ea102114200241013a009c18200220113b019018200220143b019218200241e0106a200110880420022f01e0100d3f20022f01e2102111200241d8106a200110880420022f01d8100d3f20022f01da102114200241023a009c18200220113b019418200220143b019618200241d0106a200110880420022f01d0100d3f20022f01d2102111200241c8106a200110880420022f01c8100d3f20022f01ca102114200220113b019818200220143b019a18201220022802981836020020022002290390183703d018200241c0106a200110880420022f01c0100d4020022f01c210211420024190176a41086a20122802002211360200200241d0166a41086a22152011360200200220022903d018220a370390172002200a3703d0160240200c200228029416470d0020024190166a200c10fc03200228029816210c200228029016210f0b200f200c41146c6a22112013360200201120022903d0163702042011410c6a2015280200360200201120143b01102002200c41016a220c36029816200e417f6a220e0d000b20012802042111200228029016210f0b20012011417f6a360204200f450d4002400240200229029416220a422088a741146c220c0d00200f210c0c010b200f200c6a210e200f210c0340200c41146a220c200e470d000b0b200aa7210e200241b8106a200110b003200c200f6b41146d211320022802b8100d3b20022802bc102211200128020028020441186e220c200c20114b1bad42187e220a422088a70d01200aa7220c417f4c0d0102400240200c0d00410421120c010b200c10322212450d010b2001200128020441016a2214360204200241003602981620022012360290162002200c41186e220c36029416201420012802084b0d3a02402011450d004100210c0340200241b0106a200110b00320022802b0100d3b20022802b4102116200241003a00a018200241a8106a200110880420022f01a8100d3b20022f01aa102114200241a0106a200110880420022f01a0100d3b20022f01a2102115200241013a00a018200220143b019018200220153b01921820024198106a200110880420022f0198100d3a20022f019a10211420024190106a200110880420022f0190100d3a20022f0192102115200241023a00a018200220143b019418200220153b01961820024188106a200110880420022f0188100d3a20022f018a10211420024180106a200110880420022f0180100d3a20022f0182102115200241033a00a018200220143b019818200220153b019a18200241f80f6a200110880420022f01f80f0d3a20022f01fa0f2114200241f00f6a200110880420022f01f00f0d3a20022f01f20f2115200220143b019c18200220153b019e18200241d0186a41086a221420024190186a41086a29030037030020022002290390183703d018200241e80f6a200110880420022f01e80f0d3b20022f01ea0f211520024190176a41086a2014290300220a370300200241d0166a41086a2217200a370300200220022903d018220a370390172002200a3703d0160240200c200228029416470d0020024190166a200c10fd03200228029816210c20022802901621120b2012200c41186c6a22142016360200201420022903d0163702042017290300210a201420153b01142014410c6a200a3702002002200c41016a220c360298162011417f6a22110d000b2001280204211420022802901621120b20012014417f6a3602042012450d3b02400240200229029416220a422088a741186c220c0d002012210c0c010b2012200c6a21112012210c0340200c41186a220c2011470d000b0b200aa72111200241e00f6a200110b003200c20126b41186d211720022802e00f0d3620022802e40f220c2001280200280204411c6e22142014200c4b1bad421c7e220a422088a70d01200aa72214417f4c0d010240024020140d00410421150c010b201410322215450d010b2001200128020441016a22163602042002410036029816200220153602901620022014411c6e221436029416201620012802084b0d350240200c450d00200241d0186a41106a2118410021140340200241d80f6a200110b00320022802d80f0d3620022802dc0f2119200241003a00a418200241d00f6a200110880420022f01d00f0d3620022f01d20f2116200241c80f6a200110880420022f01c80f0d3620022f01ca0f211a200241013a00a418200220163b0190182002201a3b019218200241c00f6a200110880420022f01c00f0d3520022f01c20f2116200241b80f6a200110880420022f01b80f0d3520022f01ba0f211a200241023a00a418200220163b0194182002201a3b019618200241b00f6a200110880420022f01b00f0d3520022f01b20f2116200241a80f6a200110880420022f01a80f0d3520022f01aa0f211a200241033a00a418200220163b0198182002201a3b019a18200241a00f6a200110880420022f01a00f0d3520022f01a20f2116200241980f6a200110880420022f01980f0d3520022f019a0f211a200241043a00a418200220163b019c182002201a3b019e18200241900f6a200110880420022f01900f0d3520022f01920f2116200241880f6a200110880420022f01880f0d3520022f018a0f211a200241d0186a41086a221b20024190186a41086a290300370300200220163b01a0182002201a3b01a218201820022802a018360200200241053a00a41820022002290390183703d018200241800f6a200110880420022f01800f0d3620022f01820f211a20024190176a41086a201b290300220a37030020024190176a41106a20182802002216360200200241d0166a41086a221b200a370300200241d0166a41106a221c2016360200200220022903d018220a370390172002200a3703d01602402014200228029416470d0020024190166a2014109602200228029816211420022802901621150b20152014411c6c6a22162019360200201620022903d016370204201c2802002119201b290300210a2016201a3b01182016410c6a200a370200201641146a20193602002002201441016a221436029816200c417f6a220c0d000b2001280204211620022802901621150b20012016417f6a3602042015450d3602400240200229029416220a422088a7411c6c220c0d002015210c0c010b2015200c6a21142015210c0340200c411c6a220c2014470d000b0b200aa72114200241f80e6a200110b003200c20156b411c6d211820022802f80e0d3120022802fc0e22162001280200280204410576220c200c20164b1b220c410574221a417f4c0d0102400240200c0d004104211a0c010b201a1032221a450d010b2001200128020441016a221936020420024100360298162002200c360294162002201a36029016201920012802084b0d3002402016450d004100210c0340200241f00e6a200110b00320022802f00e0d3120022802f40e211c200241003a00a818200241e80e6a200110880420022f01e80e0d3120022f01ea0e2119200241e00e6a200110880420022f01e00e0d3120022f01e20e211b200241013a00a818200220193b0190182002201b3b019218200241d80e6a200110880420022f01d80e0d3020022f01da0e2119200241d00e6a200110880420022f01d00e0d3020022f01d20e211b200241023a00a818200220193b0194182002201b3b019618200241c80e6a200110880420022f01c80e0d3020022f01ca0e2119200241c00e6a200110880420022f01c00e0d3020022f01c20e211b200241033a00a818200220193b0198182002201b3b019a18200241b80e6a200110880420022f01b80e0d3020022f01ba0e2119200241b00e6a200110880420022f01b00e0d3020022f01b20e211b200241043a00a818200220193b019c182002201b3b019e18200241a80e6a200110880420022f01a80e0d3020022f01aa0e2119200241a00e6a200110880420022f01a00e0d3020022f01a20e211b200241053a00a818200220193b01a0182002201b3b01a218200241980e6a200110880420022f01980e0d3020022f019a0e2119200241900e6a200110880420022f01900e0d3020022f01920e211b200241d0186a41086a221d20024190186a41086a290300370300200220193b01a4182002201b3b01a618200241d0186a41106a221920024190186a41106a290300370300200241063a00a81820022002290390183703d018200241880e6a200110880420022f01880e0d3120022f018a0e211b20024190176a41086a201d290300220a37030020024190176a41106a20192903002209370300200241d0166a41086a221d200a370300200241d0166a41106a221e2009370300200220022903d018220a370390172002200a3703d0160240200c200228029416470d0020024190166a200c10fe03200228029816210c200228029016211a0b201a200c4105746a2219201c360200201920022903d016370204201e290300210a201d29030021092019201b3b011c2019410c6a2009370200201941146a200a3702002002200c41016a220c360298162016417f6a22160d000b20012802042119200228029016211a0b20012019417f6a360204201a450d3102400240200229029416220a422088a7410574220c0d00201a210c0c010b201a200c6a2116201a210c0340200c41206a220c2016470d000b0b200aa72116200241800e6a200110b00320022802800e0d2c20022802840e221b200128020028020441246e22192019201b4b1bad42247e220a422088a70d01200aa72219417f4c0d010240024020190d004104211c0c010b20191032221c450d010b2001200128020441016a221d36020420024100360288162002201c360280162002201941246e221936028416201d20012802084b0d2b0240201b450d00200241d0176a41186a211f4100211d0340200241f80d6a200110b00320022802f80d0d2c20022802fc0d2120200241003a00ac18200241f00d6a200110880420022f01f00d0d2c20022f01f20d2119200241e80d6a200110880420022f01e80d0d2c20022f01ea0d211e200241013a00ac18200220193b0190182002201e3b019218200241e00d6a200110880420022f01e00d0d2b20022f01e20d2119200241d80d6a200110880420022f01d80d0d2b20022f01da0d211e200241023a00ac18200220193b0194182002201e3b019618200241d00d6a200110880420022f01d00d0d2b20022f01d20d2119200241c80d6a200110880420022f01c80d0d2b20022f01ca0d211e200241033a00ac18200220193b0198182002201e3b019a18200241c00d6a200110880420022f01c00d0d2b20022f01c20d2119200241b80d6a200110880420022f01b80d0d2b20022f01ba0d211e200241043a00ac18200220193b019c182002201e3b019e18200241b00d6a200110880420022f01b00d0d2b20022f01b20d2119200241a80d6a200110880420022f01a80d0d2b20022f01aa0d211e200241053a00ac18200220193b01a0182002201e3b01a218200241a00d6a200110880420022f01a00d0d2b20022f01a20d2119200241980d6a200110880420022f01980d0d2b20022f019a0d211e200241063a00ac18200220193b01a4182002201e3b01a618200241900d6a200110880420022f01900d0d2b20022f01920d2119200241880d6a200110880420022f01880d0d2b20022f018a0d211e200241d0176a41106a222120024190186a41106a290300370300200241d0176a41086a222220024190186a41086a290300370300200220193b01a8182002201e3b01aa18201f20022802a818360200200241073a00ac182002200229039018220a3703d0182002200a3703d017200241800d6a200110880420022f01800d0d2c20022f01820d211e200241d0166a41086a2022290300220a370300200241d0166a41106a20212903002209370300200241d0166a41186a201f280200221936020020024190166a41086a2221200a37030020024190166a41106a2222200937030020024190166a41186a22232019360200200220022903d017220a3703d0162002200a370390160240201d200228028416470d0020024180166a201d10ff03200228028816211d200228028016211c0b201c201d41246c6a221920203602002019200229039016370204202328020021202022290300210a202129030021092019201e3b01202019410c6a2009370200201941146a200a3702002019411c6a20203602002002201d41016a221d36028816201b417f6a221b0d000b2001280204211d200228028016211c0b2001201d417f6a360204201c450d2c02400240200229028416220a422088a741246c22190d00201c21190c010b201c20196a211b201c21190340201941246a2219201b470d000b0b200aa7211b200241f80c6a200110b0032019201c6b41246d211f20022802f80c0d2720022802fc0c221d200128020028020441286e22192019201d4b1bad42287e220a422088a70d01200aa72219417f4c0d010240024020190d004104211e0c010b20191032221e450d010b2001200128020441016a222036020420024100360288162002201e360280162002201941286e221936028416202020012802084b0d260240201d450d00410021200340200241f00c6a200110b00320022802f00c0d2720022802f40c2122200241003a00b018200241e80c6a200110880420022f01e80c0d2720022f01ea0c2119200241e00c6a200110880420022f01e00c0d2720022f01e20c2121200241013a00b018200220193b019018200220213b019218200241d80c6a200110880420022f01d80c0d2620022f01da0c2119200241d00c6a200110880420022f01d00c0d2620022f01d20c2121200241023a00b018200220193b019418200220213b019618200241c80c6a200110880420022f01c80c0d2620022f01ca0c2119200241c00c6a200110880420022f01c00c0d2620022f01c20c2121200241033a00b018200220193b019818200220213b019a18200241b80c6a200110880420022f01b80c0d2620022f01ba0c2119200241b00c6a200110880420022f01b00c0d2620022f01b20c2121200241043a00b018200220193b019c18200220213b019e18200241a80c6a200110880420022f01a80c0d2620022f01aa0c2119200241a00c6a200110880420022f01a00c0d2620022f01a20c2121200241053a00b018200220193b01a018200220213b01a218200241980c6a200110880420022f01980c0d2620022f019a0c2119200241900c6a200110880420022f01900c0d2620022f01920c2121200241063a00b018200220193b01a418200220213b01a618200241880c6a200110880420022f01880c0d2620022f018a0c2119200241800c6a200110880420022f01800c0d2620022f01820c2121200241073a00b018200220193b01a818200220213b01aa18200241f80b6a200110880420022f01f80b0d2620022f01fa0b2119200241f00b6a200110880420022f01f00b0d2620022f01f20b2121200241d0176a41106a222320024190186a41106a290300370300200220193b01ac18200220213b01ae18200241d0176a41186a221920024190186a41186a290300370300200241083a00b018200241d0176a41086a222120024190186a41086a2903003703002002200229039018220a3703d0182002200a3703d017200241e80b6a200110880420022f01e80b0d2720022f01ea0b2124200241d0166a41086a2021290300220a370300200241d0166a41106a20232903002209370300200241d0166a41186a2019290300222537030020024190166a41086a2221200a37030020024190166a41106a2223200937030020024190166a41186a22262025370300200220022903d017220a3703d0162002200a3703901602402020200228028416470d0020024180166a20201080042002280288162120200228028016211e0b201e202041286c6a2219202236020020192002290390163702042026290300210a2023290300210920212903002125201920243b01242019410c6a2025370200201941146a20093702002019411c6a200a3702002002202041016a222036028816201d417f6a221d0d000b20012802042120200228028016211e0b20012020417f6a360204201e450d2702400240200229028416220a422088a741286c22190d00201e21190c010b201e20196a211d201e21190340201941286a2219201d470d000b0b200aa7211d200241e00b6a200110b0032019201e6b41286d212220022802e00b0d2220022802e40b22202001280200280204412c6e2219201920204b1bad422c7e220a422088a70d01200aa72219417f4c0d010240024020190d00410421210c010b201910322221450d010b2001200128020441016a22233602042002410036028816200220213602801620022019412c6e221936028416202320012802084b0d2102402020450d00410021230340200241d80b6a200110b00320022802d80b0d2220022802dc0b2126200241003a00b418200241d00b6a200110880420022f01d00b0d2220022f01d20b2119200241c80b6a200110880420022f01c80b0d2220022f01ca0b2124200241013a00b418200220193b019018200220243b019218200241c00b6a200110880420022f01c00b0d2120022f01c20b2119200241b80b6a200110880420022f01b80b0d2120022f01ba0b2124200241023a00b418200220193b019418200220243b019618200241b00b6a200110880420022f01b00b0d2120022f01b20b2119200241a80b6a200110880420022f01a80b0d2120022f01aa0b2124200241033a00b418200220193b019818200220243b019a18200241a00b6a200110880420022f01a00b0d2120022f01a20b2119200241980b6a200110880420022f01980b0d2120022f019a0b2124200241043a00b418200220193b019c18200220243b019e18200241900b6a200110880420022f01900b0d2120022f01920b2119200241880b6a200110880420022f01880b0d2120022f018a0b2124200241053a00b418200220193b01a018200220243b01a218200241800b6a200110880420022f01800b0d2120022f01820b2119200241f80a6a200110880420022f01f80a0d2120022f01fa0a2124200241063a00b418200220193b01a418200220243b01a618200241f00a6a200110880420022f01f00a0d2120022f01f20a2119200241e80a6a200110880420022f01e80a0d2120022f01ea0a2124200241073a00b418200220193b01a818200220243b01aa18200241e00a6a200110880420022f01e00a0d2120022f01e20a2119200241d80a6a200110880420022f01d80a0d2120022f01da0a2124200241083a00b418200220193b01ac18200220243b01ae18200241d00a6a200110880420022f01d00a0d2120022f01d20a2119200241c80a6a200110880420022f01c80a0d2120022f01ca0a2124200220193b01b018200220243b01b218200241093a00b418200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20022802b0182219360200200220022903901822273703d018200241d0176a41206a22242019360200200241d0176a41186a22282025370300200241d0176a41106a22292009370300200241d0176a41086a222a200a370300200220273703d017200241c00a6a200110880420022f01c00a0d2220022f01c20a212b20024190176a41206a20242802002219360200200241d0166a41086a202a290300220a370300200241d0166a41106a20292903002209370300200241d0166a41186a20282903002225370300200241d0166a41206a201936020020024190166a41086a2224200a37030020024190166a41106a2228200937030020024190166a41186a2229202537030020024190166a41206a222a2019360200200220022903d017220a3703d0162002200a3703901602402023200228028416470d0020024180166a2023108104200228028816212320022802801621210b20212023412c6c6a221920263602002019200229039016370204202a28020021262029290300210a20282903002109202429030021252019202b3b01282019410c6a2025370200201941146a20093702002019411c6a200a370200201941246a20263602002002202341016a2223360288162020417f6a22200d000b2001280204212320022802801621210b20012023417f6a3602042021450d2202400240200229028416220a422088a7412c6c22190d00202121190c010b202120196a21202021211903402019412c6a22192020470d000b0b200aa72120200241b80a6a200110b003201920216b412c6d212620022802b80a0d1d20022802bc0a2223200128020028020441306e2219201920234b1bad42307e220a422088a70d01200aa72219417f4c0d010240024020190d00410421240c010b201910322224450d010b2001200128020441016a2228360204200241003602881620022024360280162002201941306e221936028416202820012802084b0d1c02402023450d00410021280340200241b00a6a200110b00320022802b00a0d1d20022802b40a212a200241003a00b818200241a80a6a200110880420022f01a80a0d1d20022f01aa0a2119200241a00a6a200110880420022f01a00a0d1d20022f01a20a2129200241013a00b818200220193b019018200220293b019218200241980a6a200110880420022f01980a0d1c20022f019a0a2119200241900a6a200110880420022f01900a0d1c20022f01920a2129200241023a00b818200220193b019418200220293b019618200241880a6a200110880420022f01880a0d1c20022f018a0a2119200241800a6a200110880420022f01800a0d1c20022f01820a2129200241033a00b818200220193b019818200220293b019a18200241f8096a200110880420022f01f8090d1c20022f01fa092119200241f0096a200110880420022f01f0090d1c20022f01f2092129200241043a00b818200220193b019c18200220293b019e18200241e8096a200110880420022f01e8090d1c20022f01ea092119200241e0096a200110880420022f01e0090d1c20022f01e2092129200241053a00b818200220193b01a018200220293b01a218200241d8096a200110880420022f01d8090d1c20022f01da092119200241d0096a200110880420022f01d0090d1c20022f01d2092129200241063a00b818200220193b01a418200220293b01a618200241c8096a200110880420022f01c8090d1c20022f01ca092119200241c0096a200110880420022f01c0090d1c20022f01c2092129200241073a00b818200220193b01a818200220293b01aa18200241b8096a200110880420022f01b8090d1c20022f01ba092119200241b0096a200110880420022f01b0090d1c20022f01b2092129200241083a00b818200220193b01ac18200220293b01ae18200241a8096a200110880420022f01a8090d1c20022f01aa092119200241a0096a200110880420022f01a0090d1c20022f01a2092129200241093a00b818200220193b01b018200220293b01b21820024198096a200110880420022f0198090d1c20022f019a09211920024190096a200110880420022f0190090d1c20022f0192092129200220193b01b418200220293b01b6182002410a3a00b818200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20024190186a41206a29030022273703002002200229039018222c3703d018200241d0176a41206a22192027370300200241d0176a41186a22292025370300200241d0176a41106a222b2009370300200241d0176a41086a222d200a3703002002202c3703d01720024188096a200110880420022f0188090d1d20022f018a09212e20024190176a41206a2019290300220a370300200241d0166a41086a202d2903002209370300200241d0166a41106a202b2903002225370300200241d0166a41186a20292903002227370300200241d0166a41206a200a37030020024190166a41086a2229200937030020024190166a41106a222b202537030020024190166a41186a222d202737030020024190166a41206a222f200a370300200220022903d017220a3703d0162002200a3703901602402028200228028416470d0020024180166a2028108204200228028816212820022802801621240b2024202841306c6a2219202a3602002019200229039016370204202f290300210a202d2903002109202b2903002125202929030021272019202e3b012c2019410c6a2027370200201941146a20253702002019411c6a2009370200201941246a200a3702002002202841016a2228360288162023417f6a22230d000b2001280204212820022802801621240b20012028417f6a3602042024450d1d02400240200229028416220a422088a741306c22190d00202421190c010b202420196a2123202421190340201941306a22192023470d000b0b200aa7212320024180096a200110b003201920246b41306d212a2002280280090d182002280284092228200128020028020441346e2219201920284b1bad42347e220a422088a70d01200aa72219417f4c0d010240024020190d00410421290c010b201910322229450d010b2001200128020441016a222b360204200241003602881620022029360280162002201941346e221936028416202b20012802084b0d1702402028450d004100212b0340200241f8086a200110b00320022802f8080d1820022802fc08212e200241003a00bc18200241f0086a200110880420022f01f0080d1820022f01f2082119200241e8086a200110880420022f01e8080d1820022f01ea08212d200241013a00bc18200220193b0190182002202d3b019218200241e0086a200110880420022f01e0080d1720022f01e2082119200241d8086a200110880420022f01d8080d1720022f01da08212d200241023a00bc18200220193b0194182002202d3b019618200241d0086a200110880420022f01d0080d1720022f01d2082119200241c8086a200110880420022f01c8080d1720022f01ca08212d200241033a00bc18200220193b0198182002202d3b019a18200241c0086a200110880420022f01c0080d1720022f01c2082119200241b8086a200110880420022f01b8080d1720022f01ba08212d200241043a00bc18200220193b019c182002202d3b019e18200241b0086a200110880420022f01b0080d1720022f01b2082119200241a8086a200110880420022f01a8080d1720022f01aa08212d200241053a00bc18200220193b01a0182002202d3b01a218200241a0086a200110880420022f01a0080d1720022f01a208211920024198086a200110880420022f0198080d1720022f019a08212d200241063a00bc18200220193b01a4182002202d3b01a61820024190086a200110880420022f0190080d1720022f019208211920024188086a200110880420022f0188080d1720022f018a08212d200241073a00bc18200220193b01a8182002202d3b01aa1820024180086a200110880420022f0180080d1720022f0182082119200241f8076a200110880420022f01f8070d1720022f01fa07212d200241083a00bc18200220193b01ac182002202d3b01ae18200241f0076a200110880420022f01f0070d1720022f01f2072119200241e8076a200110880420022f01e8070d1720022f01ea07212d200241093a00bc18200220193b01b0182002202d3b01b218200241e0076a200110880420022f01e0070d1720022f01e2072119200241d8076a200110880420022f01d8070d1720022f01da07212d2002410a3a00bc18200220193b01b4182002202d3b01b618200241d0076a200110880420022f01d0070d1720022f01d2072119200241c8076a200110880420022f01c8070d1720022f01ca07212d200220193b01b8182002202d3b01ba182002410b3a00bc18200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20024190186a41206a2903002227370300200241d0186a41286a20022802b81822193602002002200229039018222c3703d018200241d0176a41286a222d2019360200200241d0176a41206a222f2027370300200241d0176a41186a22302025370300200241d0176a41106a22312009370300200241d0176a41086a2232200a3703002002202c3703d017200241c0076a200110880420022f01c0070d1820022f01c207213320024190176a41286a202d280200221936020020024190176a41206a202f290300220a370300200241d0166a41086a20322903002209370300200241d0166a41106a20312903002225370300200241d0166a41186a20302903002227370300200241d0166a41206a200a370300200241d0166a41286a2019360200200220022903d017222c3703d01620024190166a41286a222d201936020020024190166a41206a222f200a37030020024190166a41186a2230202737030020024190166a41106a2231202537030020024190166a41086a223220093703002002202c370390160240202b200228028416470d0020024180166a202b108304200228028816212b20022802801621290b2029202b41346c6a2219202e3602002019200229039016370204202d280200212d202f290300210a203029030021092031290300212520322903002127201920333b01302019410c6a2027370200201941146a20253702002019411c6a2009370200201941246a200a3702002019412c6a202d3602002002202b41016a222b360288162028417f6a22280d000b2001280204212b20022802801621290b2001202b417f6a3602042029450d1802400240200229028416220a422088a741346c22190d00202921190c010b202920196a2128202921190340201941346a22192028470d000b0b200aa72128200241b8076a200110b003201920296b41346d212e20022802b8070d1320022802bc07222b200128020028020441386e22192019202b4b1bad42387e220a422088a70d01200aa72219417f4c0d010240024020190d004104212d0c010b20191032222d450d010b2001200128020441016a222f36020420024100360288162002202d360280162002201941386e221936028416202f20012802084b0d120240202b450d004100212f0340200241b0076a200110b00320022802b0070d1320022802b4072131200241003a00c018200241a8076a200110880420022f01a8070d1320022f01aa072119200241a0076a200110880420022f01a0070d1320022f01a2072130200241013a00c018200220193b019018200220303b01921820024198076a200110880420022f0198070d1220022f019a07211920024190076a200110880420022f0190070d1220022f0192072130200241023a00c018200220193b019418200220303b01961820024188076a200110880420022f0188070d1220022f018a07211920024180076a200110880420022f0180070d1220022f0182072130200241033a00c018200220193b019818200220303b019a18200241f8066a200110880420022f01f8060d1220022f01fa062119200241f0066a200110880420022f01f0060d1220022f01f2062130200241043a00c018200220193b019c18200220303b019e18200241e8066a200110880420022f01e8060d1220022f01ea062119200241e0066a200110880420022f01e0060d1220022f01e2062130200241053a00c018200220193b01a018200220303b01a218200241d8066a200110880420022f01d8060d1220022f01da062119200241d0066a200110880420022f01d0060d1220022f01d2062130200241063a00c018200220193b01a418200220303b01a618200241c8066a200110880420022f01c8060d1220022f01ca062119200241c0066a200110880420022f01c0060d1220022f01c2062130200241073a00c018200220193b01a818200220303b01aa18200241b8066a200110880420022f01b8060d1220022f01ba062119200241b0066a200110880420022f01b0060d1220022f01b2062130200241083a00c018200220193b01ac18200220303b01ae18200241a8066a200110880420022f01a8060d1220022f01aa062119200241a0066a200110880420022f01a0060d1220022f01a2062130200241093a00c018200220193b01b018200220303b01b21820024198066a200110880420022f0198060d1220022f019a06211920024190066a200110880420022f0190060d1220022f01920621302002410a3a00c018200220193b01b418200220303b01b61820024188066a200110880420022f0188060d1220022f018a06211920024180066a200110880420022f0180060d1220022f01820621302002410b3a00c018200220193b01b818200220303b01ba18200241f8056a200110880420022f01f8050d1220022f01fa052119200241f0056a200110880420022f01f0050d1220022f01f2052130200220193b01bc18200220303b01be182002410c3a00c018200241d0186a41086a20024190186a41086a290300220a370300200241d0186a41106a20024190186a41106a2903002209370300200241d0186a41186a20024190186a41186a2903002225370300200241d0186a41206a20024190186a41206a2903002227370300200241d0186a41286a20024190186a41286a290300222c370300200220022903901822343703d018200241d0176a41286a2219202c370300200241d0176a41206a22302027370300200241d0176a41186a22322025370300200241d0176a41106a22332009370300200241d0176a41086a2235200a370300200220343703d017200241e8056a200110880420022f01e8050d1320022f01ea05213620024190176a41286a2019290300220a37030020024190176a41206a20302903002209370300200241d0166a41086a20352903002225370300200241d0166a41106a20332903002227370300200241d0166a41186a2032290300222c370300200241d0166a41206a2009370300200241d0166a41286a200a370300200220022903d01722343703d01620024190166a41286a2230200a37030020024190166a41206a2232200937030020024190166a41186a2233202c37030020024190166a41106a2235202737030020024190166a41086a2237202537030020022034370390160240202f200228028416470d0020024180166a202f108404200228028816212f200228028016212d0b202d202f41386c6a2219203136020020192002290390163702042030290300210a2032290300210920332903002125203529030021272037290300212c201920363b01342019410c6a202c370200201941146a20273702002019411c6a2025370200201941246a20093702002019412c6a200a3702002002202f41016a222f36028816202b417f6a222b0d000b2001280204212f200228028016212d0b2001202f417f6a360204202d450d1302400240200229028416220a422088a741386c22190d00202d21190c010b202d20196a212b202d21190340201941386a2219202b470d000b0b200aa7212b200241e0056a200110b0032019202d6b41386d213120022802e0050d0e20022802e405222f2001280200280204413c6e22192019202f4b1bad423c7e220a422088a70d01200aa72219417f4c0d010240024020190d00410421300c010b201910322230450d010b2001200128020441016a22323602042002410036028816200220303602801620022019413c6e221936028416203220012802084b0d0d0240202f450d00410021320340200241d8056a200110b00320022802d8050d0e20022802dc052135200241003a00c418200241d0056a200110880420022f01d0050d0e20022f01d2052119200241c8056a200110880420022f01c8050d0e20022f01ca052133200241013a00c418200220193b019018200220333b019218200241c0056a200110880420022f01c0050d0d20022f01c2052119200241b8056a200110880420022f01b8050d0d20022f01ba052133200241023a00c418200220193b019418200220333b019618200241b0056a200110880420022f01b0050d0d20022f01b2052119200241a8056a200110880420022f01a8050d0d20022f01aa052133200241033a00c418200220193b019818200220333b019a18200241a0056a200110880420022f01a0050d0d20022f01a205211920024198056a200110880420022f0198050d0d20022f019a052133200241043a00c418200220193b019c18200220333b019e1820024190056a200110880420022f0190050d0d20022f019205211920024188056a200110880420022f0188050d0d20022f018a052133200241053a00c418200220193b01a018200220333b01a21820024180056a200110880420022f0180050d0d20022f0182052119200241f8046a200110880420022f01f8040d0d20022f01fa042133200241063a00c418200220193b01a418200220333b01a618200241f0046a200110880420022f01f0040d0d20022f01f2042119200241e8046a200110880420022f01e8040d0d20022f01ea042133200241073a00c418200220193b01a818200220333b01aa18200241e0046a200110880420022f01e0040d0d20022f01e2042119200241d8046a200110880420022f01d8040d0d20022f01da042133200241083a00c418200220193b01ac18200220333b01ae18200241d0046a200110880420022f01d0040d0d20022f01d2042119200241c8046a200110880420022f01c8040d0d20022f01ca042133200241093a00c418200220193b01b018200220333b01b218200241c0046a200110880420022f01c0040d0d20022f01c2042119200241b8046a200110880420022f01b8040d0d20022f01ba0421332002410a3a00c418200220193b01b418200220333b01b618200241b0046a200110880420022f01b0040d0d20022f01b2042119200241a8046a200110880420022f01a8040d0d20022f01aa0421332002410b3a00c418200220193b01b818200220333b01ba18200241a0046a200110880420022f01a0040d0d20022f01a204211920024198046a200110880420022f0198040d0d20022f019a0421332002410c3a00c418200220193b01bc18200220333b01be1820024190046a200110880420022f0190040d0d20022f019204211920024188046a200110880420022f0188040d0d20022f018a042133200220193b01c018200220333b01c2182002410d3a00c418200241d0186a41086a223820024190186a41086a290300370300200241d0186a41106a223920024190186a41106a290300370300200241d0186a41186a223a20024190186a41186a290300370300200241d0186a41206a223720024190186a41206a290300370300200241d0186a41286a223620024190186a41286a290300370300200241d0186a41306a223320022802c01836020020022002290390183703d018200241d0176a41306a22192033280200360200200241d0176a41286a22332036290300370300200241d0176a41206a22362037290300370300200241d0176a41186a2237203a290300370300200241d0176a41106a223a2039290300370300200241d0176a41086a22392038290300370300200220022903d0183703d01720024180046a200110880420022f0180040d0e20022f018204213820024190176a41306a2019280200221936020020024190176a41286a2033290300220a37030020024190176a41206a20362903002209370300200241d0166a41086a22332039290300370300200241d0166a41106a2236203a290300370300200241d0166a41186a223a2037290300370300200241d0166a41206a22372009370300200241d0166a41286a2239200a370300200241d0166a41306a223b2019360200200220022903d0173703d01620024190166a41306a223c203b28020036020020024190166a41286a223b203929030037030020024190166a41206a2239203729030037030020024190166a41186a2237203a29030037030020024190166a41106a223a203629030037030020024190166a41086a22362033290300370300200220022903d0163703901602402032200228028416470d0020024180166a2032108504200228028816213220022802801621300b20302032413c6c6a221920353602002019200229039016370204203c2802002133203b290300210a2039290300210920372903002125203a29030021272036290300212c201920383b01382019410c6a202c370200201941146a20273702002019411c6a2025370200201941246a20093702002019412c6a200a370200201941346a20333602002002203241016a223236028816202f417f6a222f0d000b2001280204213220022802801621300b20012032417f6a3602042030450d0e02400240200229028416220a422088a7413c6c22190d00203021190c010b203020196a212f2030211903402019413c6a2219202f470d000b0b200aa72132200241f8036a200110b003201920306b413c6d213620022802f8030d0920022802fc03222f200128020028020441067622192019202f4b1b22194106742233417f4c0d010240024020190d00410421330c010b203310322233450d010b2001200128020441016a2235360204200241003602881620022019360284162002203336028016203520012802084b0d080240202f450d00410021350340200241f0036a200110b00320022802f0030d0920022802f4032137200241003a00c818200241e8036a200110880420022f01e8030d0920022f01ea032119200241e0036a200110880420022f01e0030d0920022f01e203213a200241013a00c818200220193b0190182002203a3b019218200241d8036a200110880420022f01d8030d0820022f01da032119200241d0036a200110880420022f01d0030d0820022f01d203213a200241023a00c818200220193b0194182002203a3b019618200241c8036a200110880420022f01c8030d0820022f01ca032119200241c0036a200110880420022f01c0030d0820022f01c203213a200241033a00c818200220193b0198182002203a3b019a18200241b8036a200110880420022f01b8030d0820022f01ba032119200241b0036a200110880420022f01b0030d0820022f01b203213a200241043a00c818200220193b019c182002203a3b019e18200241a8036a200110880420022f01a8030d0820022f01aa032119200241a0036a200110880420022f01a0030d0820022f01a203213a200241053a00c818200220193b01a0182002203a3b01a21820024198036a200110880420022f0198030d0820022f019a03211920024190036a200110880420022f0190030d0820022f019203213a200241063a00c818200220193b01a4182002203a3b01a61820024188036a200110880420022f0188030d0820022f018a03211920024180036a200110880420022f0180030d0820022f018203213a200241073a00c818200220193b01a8182002203a3b01aa18200241f8026a200110880420022f01f8020d0820022f01fa022119200241f0026a200110880420022f01f0020d0820022f01f202213a200241083a00c818200220193b01ac182002203a3b01ae18200241e8026a200110880420022f01e8020d0820022f01ea022119200241e0026a200110880420022f01e0020d0820022f01e202213a200241093a00c818200220193b01b0182002203a3b01b218200241d8026a200110880420022f01d8020d0820022f01da022119200241d0026a200110880420022f01d0020d0820022f01d202213a2002410a3a00c818200220193b01b4182002203a3b01b618200241c8026a200110880420022f01c8020d0820022f01ca022119200241c0026a200110880420022f01c0020d0820022f01c202213a2002410b3a00c818200220193b01b8182002203a3b01ba18200241b8026a200110880420022f01b8020d0820022f01ba022119200241b0026a200110880420022f01b0020d0820022f01b202213a2002410c3a00c818200220193b01bc182002203a3b01be18200241a8026a200110880420022f01a8020d0820022f01aa022119200241a0026a200110880420022f01a0020d0820022f01a202213a2002410d3a00c818200220193b01c0182002203a3b01c21820024198026a200110880420022f0198020d0820022f019a02211920024190026a200110880420022f0190020d0820022f019202213a200220193b01c4182002203a3b01c6182002410e3a00c818200241d0186a41086a223d20024190186a41086a290300370300200241d0186a41106a223c20024190186a41106a290300370300200241d0186a41186a223b20024190186a41186a290300370300200241d0186a41206a223820024190186a41206a290300370300200241d0186a41286a223920024190186a41286a290300370300200241d0186a41306a223a20024190186a41306a29030037030020022002290390183703d018200241d0176a41306a2219203a290300370300200241d0176a41286a223a2039290300370300200241d0176a41206a22392038290300370300200241d0176a41186a2238203b290300370300200241d0176a41106a223b203c290300370300200241d0176a41086a223c203d290300370300200220022903d0183703d01720024188026a200110880420022f0188020d0920022f018a02213d20024190176a41306a2019290300220a37030020024190176a41286a203a290300220937030020024190176a41206a20392903002225370300200241d0166a41086a2219203c290300370300200241d0166a41106a223a203b290300370300200241d0166a41186a22392038290300370300200241d0166a41206a22382025370300200241d0166a41286a223b2009370300200241d0166a41306a223c200a370300200220022903d0173703d01620024190166a41306a223e203c29030037030020024190166a41286a223c203b29030037030020024190166a41206a223b203829030037030020024190166a41186a2238203929030037030020024190166a41106a2239203a29030037030020024190166a41086a223a2019290300370300200220022903d0163703901602402035200228028416470d0020024180166a2035108604200228028816213520022802801621330b203320354106746a221920373602002019200229039016370204203e290300210a203c2903002109203b2903002125203829030021272039290300212c203a29030021342019203d3b013c2019410c6a2034370200201941146a202c3702002019411c6a2027370200201941246a20253702002019412c6a2009370200201941346a200a3702002002203541016a223536028816202f417f6a222f0d000b2001280204213520022802801621330b20012035417f6a3602042033450d0902400240200229028416220a422088a741067422190d00203321190c010b203320196a212f203321190340201941c0006a2219202f470d000b0b200aa7213920024180026a200110b0032002280280020d05200228028402223a200128020028020441c4006e222f202f203a4b1bad42c4007e220a422088a70d01200aa72235417f4c0d010240024020350d004104212f0c010b20351032222f450d010b2001200128020441016a223736020420024100360288162002202f360280162002203541c4006e223536028416203720012802084b0d040240203a450d00410021370340200241f8016a200110b00320022802f8010d0520022802fc012138200241003a00cc18200241f0016a200110880420022f01f0010d0520022f01f2012135200241e8016a200110880420022f01e8010d0520022f01ea01213b200241013a00cc18200220353b0190182002203b3b019218200241e0016a200110880420022f01e0010d0420022f01e2012135200241d8016a200110880420022f01d8010d0420022f01da01213b200241023a00cc18200220353b0194182002203b3b019618200241d0016a200110880420022f01d0010d0420022f01d2012135200241c8016a200110880420022f01c8010d0420022f01ca01213b200241033a00cc18200220353b0198182002203b3b019a18200241c0016a200110880420022f01c0010d0420022f01c2012135200241b8016a200110880420022f01b8010d0420022f01ba01213b200241043a00cc18200220353b019c182002203b3b019e18200241b0016a200110880420022f01b0010d0420022f01b2012135200241a8016a200110880420022f01a8010d0420022f01aa01213b200241053a00cc18200220353b01a0182002203b3b01a218200241a0016a200110880420022f01a0010d0420022f01a201213520024198016a200110880420022f0198010d0420022f019a01213b200241063a00cc18200220353b01a4182002203b3b01a61820024190016a200110880420022f0190010d0420022f019201213520024188016a200110880420022f0188010d0420022f018a01213b200241073a00cc18200220353b01a8182002203b3b01aa1820024180016a200110880420022f0180010d0420022f0182012135200241f8006a200110880420022f01780d0420022f017a213b200241083a00cc18200220353b01ac182002203b3b01ae18200241f0006a200110880420022f01700d0420022f01722135200241e8006a200110880420022f01680d0420022f016a213b200241093a00cc18200220353b01b0182002203b3b01b218200241e0006a200110880420022f01600d0420022f01622135200241d8006a200110880420022f01580d0420022f015a213b2002410a3a00cc18200220353b01b4182002203b3b01b618200241d0006a200110880420022f01500d0420022f01522135200241c8006a200110880420022f01480d0420022f014a213b2002410b3a00cc18200220353b01b8182002203b3b01ba18200241c0006a200110880420022f01400d0420022f01422135200241386a200110880420022f01380d0420022f013a213b2002410c3a00cc18200220353b01bc182002203b3b01be18200241306a200110880420022f01300d0420022f01322135200241286a200110880420022f01280d0420022f012a213b2002410d3a00cc18200220353b01c0182002203b3b01c218200241206a200110880420022f01200d0420022f01222135200241186a200110880420022f01180d0420022f011a213b2002410e3a00cc18200220353b01c4182002203b3b01c618200241106a200110880420022f01100d0420022f01122135200241086a200110880420022f01080d0420022f010a213b200220353b01c8182002203b3b01ca182002410f3a00cc18200241d0186a41086a223b20024190186a41086a290300370300200241d0186a41106a223c20024190186a41106a290300370300200241d0186a41186a223d20024190186a41186a290300370300200241d0186a41206a223e20024190186a41206a290300370300200241d0186a41286a223f20024190186a41286a290300370300200241d0186a41306a224020024190186a41306a290300370300200241d0186a41386a224120022802c81836020020022002290390183703d018200241d0176a41086a2235203b290300370300200241d0176a41106a223b203c290300370300200241d0176a41186a223c203d290300370300200241d0176a41206a223d203e290300370300200241d0176a41286a223e203f290300370300200241d0176a41306a223f2040290300370300200241d0176a41386a22402041280200360200200220022903d0183703d0172002200110880420022f01000d0520022f0102214120024190176a41386a2040280200224036020020024190176a41306a203f290300220a37030020024190176a41286a203e290300220937030020024190176a41206a203d2903002225370300200241d0166a41086a223d2035290300370300200241d0166a41106a2235203b290300370300200241d0166a41186a223b203c290300370300200241d0166a41206a223c2025370300200241d0166a41286a223e2009370300200241d0166a41306a223f200a370300200241d0166a41386a22422040360200200220022903d0173703d01620024190166a41386a2240204228020036020020024190166a41306a2242203f29030037030020024190166a41286a223f203e29030037030020024190166a41206a223e203c29030037030020024190166a41186a223c203b29030037030020024190166a41106a223b203529030037030020024190166a41086a2243203d290300370300200220022903d0163703901602402037200228028416470d0020024180166a203710df022002280288162137200228028016212f0b202f203741c4006c6a223520383602002035200229039016370204204028020021382042290300210a203f2903002109203e2903002125203c2903002127203b290300212c20432903002134203520413b01402035410c6a2034370200203541146a202c3702002035411c6a2027370200203541246a20253702002035412c6a2009370200203541346a200a3702002035413c6a20383602002002203741016a223736028816203a417f6a223a0d000b20012802042137200228028016212f0b20012037417f6a360204202f450d05200420056b4103752135200320076b4104752103200c201a6b410575210c201920336b4106752119200229028416220aa7213702400240200a422088a741c4006c22040d00202f21040c010b202f20046a2101202f21040340200441c4006a22042001470d000b0b2000200b36020420002005360200200041b8016a2037360200200041b4016a202f360200200041b0016a2019360200200041ac016a2039360200200041a8016a2033360200200041a4016a2036360200200041a0016a20323602002000419c016a203036020020004198016a203136020020004194016a202b36020020004190016a202d3602002000418c016a202e36020020004188016a202836020020004184016a202936020020004180016a202a360200200041fc006a2023360200200041f8006a2024360200200041f4006a2026360200200041f0006a2020360200200041ec006a2021360200200041e8006a2022360200200041e4006a201d360200200041e0006a201e360200200041dc006a201f360200200041d8006a201b360200200041d4006a201c360200200041d0006a200c360200200041cc006a2016360200200041c8006a201a360200200041c4006a2018360200200041c0006a20143602002000413c6a2015360200200041386a2017360200200041346a2011360200200041306a20123602002000412c6a2013360200200041286a200e360200200041246a200f360200200041206a20033602002000411c6a200d360200200041186a2007360200200041146a2010360200200041106a20063602002000410c6a2008360200200041086a2035360200200041bc016a2004202f6b41c4006d3602000c470b1039000b103b000b200241003a00cc180b20022802841621350b200228028016410020351b2204450d00203541c4006c450d002004102c0b20004100360200203941ffffff1f71450d042033102c0c040b200241003a00c8180b20022802841621190b200228028016410020191b2204450d00201941ffffff1f71450d002004102c0b200041003602000b2032450d042032413c6c450d042030102c0c040b200241003a00c4180b20022802841621190b200228028016410020191b2204450d002019413c6c450d002004102c0b200041003602000b202b450d04202b41386c450d04202d102c0c040b200241003a00c0180b20022802841621190b200228028016410020191b2204450d00201941386c450d002004102c0b200041003602000b2028450d04202841346c450d042029102c0c040b200241003a00bc180b20022802841621190b200228028016410020191b2204450d00201941346c450d002004102c0b200041003602000b2023450d04202341306c450d042024102c0c040b200241003a00b8180b20022802841621190b200228028016410020191b2204450d00201941306c450d002004102c0b200041003602000b2020450d042020412c6c450d042021102c0c040b200241003a00b4180b20022802841621190b200228028016410020191b2204450d002019412c6c450d002004102c0b200041003602000b201d450d04201d41286c450d04201e102c0c040b200241003a00b0180b20022802841621190b200228028016410020191b2204450d00201941286c450d002004102c0b200041003602000b201b450d04201b41246c450d04201c102c0c040b200241003a00ac180b20022802841621190b200228028016410020191b2204450d00201941246c450d002004102c0b200041003602000b201641ffffff3f71450d04201a102c0c040b200241003a00a8180b200228029416210c0b2002280290164100200c1b2204450d00200c41ffffff3f71450d002004102c0b200041003602000b2014450d042014411c6c450d042015102c0c040b200241003a00a4180b20022802941621140b200228029016410020141b2204450d002014411c6c450d002004102c0b200041003602000b2011450d04201141186c450d042012102c0c040b200241003a00a0180b200228029416210c0b2002280290164100200c1b2204450d00200c41186c450d002004102c0b200041003602000b200e450d04200e41146c450d04200f102c0c040b200241003a009c180b200228029416210c0b2002280290164100200c1b2204450d00200c41146c450d002004102c0b200041003602000b200d41ffffffff0071450d032007102c0c030b200241003a00d81820022802941821030b200228029018410020031b2204450d00200341ffffffff0071450d002004102c0b200041003602000b2006450d002006410c6c450d002008102c0b200b41ffffffff0171450d002005102c0b200241d0196a24000bae0201067f0240024002402001280200220228020422030d00410121030c010b200228020022042d0000210520022003417f6a360204410121032002200441016a360200200541037122024103460d0002400240024020020e03020100020b2001280200220228020422014103490d022002280200220441026a2d0000210620042f000021072002200441036a36020020022001417d6a360204200720064110747241087420057222014180807c6a41ffff0b4b0d0320014102762102410021030c030b200128020022022802042201450d01200228020022032d0000210420022001417f6a3602042002200341016a360200200441087420057241ffff03712202418002492103200241027621020c020b20054102762102410021030c010b0b200020023b0102200020033b01000ba20201057f230041d0006b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822030d00410221010c010b200228020c210402400240200241106a2802002205450d0041002101024020032d00000e020200010b2005417f6a4104490d0020032800012106410121010c010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b410221010b2004450d002003102c0b2000200636020420002001360200200241d0006a24000bd50401097f230041e0006b220224002002412036020c20022001360208200241106a2001412010b3010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1087020240024020022802000d002002280204220520022802244103762201200120054b1b22064103742201417f4c0d030240024020060d00410421070c010b200110322207450d050b41002101200241003602502002200636024c20022007360248024002402005450d000340200228022422084104490d022002280220220628000021092002200641046a36022020022008417c6a220a360224200a4104490d022006280004210a2002200841786a3602242002200641086a36022002402001200228024c470d00200241c8006a200110bc0320022802502101200228024821070b200720014103746a2206200a360204200620093602002002200141016a22013602502005417f6a22050d000b200228024821070b2007450d012000200229024c370204200020073602000c020b200228024c41ffffffff0171450d002002280248102c0b20024100360230200242013703282002410f36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235023042208620023502288410000240200228022c450d002002280228102c0b200041003602000b2004450d002003102c0b200241e0006a24000f0b103b000b1039000bc40101057f2001280208210302402001410c6a280200220420024b0d002000410036020820002004ad4220862003ad843702000f0b02402001411c6a28020022050d00200041023602080f0b200141146a2802002101200541027421052003417f6a21030240034002402004200128020022066b220720024b0d00200420024b0d020b200141046a21012003417f6a2103200721042005417c6a22050d000b200041023602080f0b2000200636020c20002007ad4220862003ad84370200200041013602080b890f08017f017e047f017e047f017e027f017e23004190016b2201240042002102200141c0006a22034200370300200141386a22044200370300200141286a41086a420037030020014200370328200141286a41ffdcc700410710c501200141e8006a418893c700410a10c5012003200141e8006a41086a29000037030020042001290068370300200141e8006a200141286a10e10120012802682203410120031b2105410221060240024002400240200129026c420020031b2207422088a72203450d00200341057441606a41057641016a210841002104200521030240034020002003460d0120032000412010cc08450d01200242017c2102200341206a21032008200441016a2204470d000c020b0b200141c0006a22034200370300200141386a22094200370300200141286a41086a2200420037030020014200370328200141e8006a41ffdcc700410710c5012000200141e8006a41086a220829000037030020012001290068370328200141e8006a41ccb4c300411210c5012003200829000037030020092001290068370300200141d8006a200141286a10da04024002400240200128025822080d004100210a2001410036022020014204370318410421084100210b410021060c010b2001200129025c220c37021c20012008360218200ca7210a410021064100210302400240200c422088a7220b0e020201000b41002103200b2100034020032000410176220d20036a220e20042008200e4102746a280200491b21032000200d6b220041014b0d000b0b0240200820034102746a28020022002004470d004101210d0c020b2003200420004b6a21060b200141c0006a4200370300200141386a4200370300200141286a41086a2203420037030020014200370328200141e8006a41ffdcc700410710c5012003200141e8006a41086a220029000037030020012001290068370328200141e8006a418893c700410a10c501200941086a20002900003700002009200129006837000041002103200141dc006a41003a000020014100360258200141106a200141286a4120200141d8006a4105410010b70402402001280210450d00200120012802142203410520034105491b36026c2001200141d8006a360268200141086a200141e8006a10870202402001280208450d00410021030c010b200128020c21030b2003418094ebdc0370ad4280fd87d1007e220c428094ebdc0382210f200c428094ebdc0380210c2003418094ebdc036e2103200b2006490d0220034180fd87d1006c200ca7200f4280cab5ee01566a6a21000240200b200a470d00200141186a200a4101109502200128021821080b200820064102746a220341046a2003200b20066b41027410ca081a200320043602002001200b41016a220b360220200b20004b21064100210d200128021c210a200128021821080b200141c0006a4200370300200141386a4200370300200141286a41086a2203420037030020014200370328200141e8006a41ffdcc700410710c5012003200141e8006a41086a220029000037030020012001290068370328200141e8006a41ccb4c300411210c501200941086a2000290000370000200920012900683700000240024020080d00200141286a412010b4010c010b200b410274220341046a2200417f4c0d030240024020000d004101210e0c010b20001032220e450d050b200141003602702001200036026c2001200e3602680240024002400240200b41c000490d00200b41808001490d01200b418080808004490d02200141e8006a41004101102f2001280268200128027022006a41033a00002001200041016a2200360270200141e8006a20004104102f2001280268200128027022006a200b3600002001200041046a2200360270200141e8006a210e0c030b200141e8006a41004101102f2001280268200128027022006a200b4102743a00002001200041016a2200360270200141e8006a210e0c020b200141e8006a41004102102f2001280268200128027022006a200b4102744101723b00002001200041026a2200360270200141e8006a210e0c010b200141e8006a41004104102f2001280268200128027022006a20034102723600002001200041046a2200360270200141e8006a210e0b200e20002003102f200128026822002001280270220e6a2008200310c9081a2001200e20036a2203360270200141286a41202000200310a7020240200128026c450d002000102c0b200a41ffffffff0371450d002008102c0b200d0d00200141e8006a41086a2203200237030020014102360268200141286a200141e8006a10a903200141e3006a2200200141286a41086a2802003600002001200129032837005b200141286a410c6a200141df006a2208290000370000200141c6a4b9da04360029200141023a00282001200129005837002d200141286a109a06200141013602282001200436022c200141e8006a200141286a102e200020032802003600002001200129036837005b200141e8006a410c6a2008290000370000200141c28289aa04360069200141023a00682001200129005837006d200141e8006a109a060b02402007a72203450d00200341ffffff3f71450d002005102c0b20014190016a240020060f0b2006200b1044000b103b000b1039000b970201037f230041d0006b220124002001412036020420012000360200200141086a2000412010b30102400240200128020822020d00410421000c010b200128020c210302400240200141106a280200450d004100210002400240024020022d00000e0404000102030b410121000c030b410221000c020b410321000c010b20014100360220200142013703182001410f36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141b4bcc3003602382001200141286a360248200141346a41dcb7c000200141386a103e1a200135022042208620013502188410000240200128021c450d002001280218102c0b410421000b2003450d002002102c0b200141d0006a240020000bf10101027f230041106b22022400200241003602082002420137030002400240024002400240200141ff01710e0400010203000b200241004101102f20022802002203200228020822016a41003a0000200141016a21010c030b200241004101102f20022802002203200228020822016a41013a0000200141016a21010c020b200241004101102f20022802002203200228020822016a41023a0000200141016a21010c010b200241004101102f20022802002203200228020822016a41033a0000200141016a21010b20022001360208200041202003200110a70202402002280204450d002003102c0b200241106a24000bb303010a7f230041c0006b22012400024020002d002c450d00200041086a21022000411c6a28020022034102742104200041146a280200210520002802002106417f21072000410c6a2802002208210902400240024003402004450d012004417c6a2104200741016a2107200920064b210a200920052802006b2109200541046a2105200a0d000b2003200a20076a22044f0d01200020082006200820064b1b36020c0c020b200020082006200820064b1b36020c0c010b200228020021092000411c6a2004360200200020082006200820064b1b36020c200920036b22052009200a6b20076b4f0d002003200a6b20076b21090340200141086a41086a2000280204220441086a290000370300200141086a41106a200441106a290000370300200141086a41186a200441186a2900003703002001200429000037030820012005360228200141306a200141086a10d30320012802302204200128023810b40102402001280234450d002004102c0b200541016a21052009417f6a22090d000b0b2000280204200210d4030b0240200041186a28020041ffffffff0371450d00200041146a280200102c0b200141c0006a24000b800d04047f017e027f067e230041d0026b22052400200541c8016a20012002108b0402400240024002400240024020052802d0014102460d0020052802c8012106200541c8016a41086a2001280204220741086a290000370300200541c8016a41106a200741106a290000370300200541c8016a41186a200741186a290000370300200520063602e801200520072900003703c801200541f0016a200541c8016a10d30320052802f0012108200520052802f801220736028402200520083602800220054188026a2008200710b3010240024020052802880222070d00420021090c010b200528028c02210a02400240024020054188026a41086a280200220b4110490d00200b4170714110470d010b200541003602c802200542013703c0022005410f36029c02200520054180026a360298022005200541c0026a3602a402200541bc026a4101360200200542013702ac02200541b4bcc3003602a802200520054198026a3602b802200541a4026a41dcb7c000200541a8026a103e1a20053502c80242208620053502c002841000024020052802c402450d0020052802c002102c0b420021090c010b200741186a290000210c200741086a290000210d2007290010210e2007290000210f420121090b200a450d002007102c0b200d4200200942005222071b210d200f420020071b210f024020052802f401450d002008102c0b200c420020071b210c200e420020071b210e200f200354200d200454200d2004511b0d01200f200385200d2004858450450d04200541b8016a20032004428094ebdc03420010c708200541a8016a20032004428094ebdc03420010c80820054198016a20052903a801200541a8016a41086a2903002001350228220d420010ce0820054188016a4200200529039801220f200d20052903b8017e220d428094ebdc0380a7417f200d428080808080c0b2cd3b541b200d428094ebdc03824280cab5ee01566aad7c220d200e7d22092009200d5620054198016a41086a290300200d200f54ad7c220f200c7d200d200e54ad7d220d200f56200d200f511b22021b220f4200200d20021b220d428094ebdc03420010c708200541f8006a200f200d428094ebdc03420010c808200541e8006a2005290378200541f8006a41086a2903004280cab5ee01420010ce082005290368220f200529038801220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541e8006a41086a290300200d200f54ad7c220f84500d040c020b410021010c040b200541d8006a20032004428094ebdc03420010c708200541c8006a20032004428094ebdc03420010c808200541386a2005290348200541c8006a41086a29030020013502282209420010ce08200541286a420020052903382210200920052903587e2209428094ebdc0380a7417f2009428080808080c0b2cd3b541b2009428094ebdc03824280cab5ee01566aad7c2209200e7d22112011200956200541386a41086a2903002009201054ad7c2210200c7d2009200e54ad7d220920105620092010511b22071b22104200200920071b2209428094ebdc03420010c708200541186a20102009428094ebdc03420010c808200541086a2005290318200541186a41086a2903004280cab5ee01420010ce08200128022422072003200f7d220920072903007c2210370300200741086a22072004200d7d2003200f54ad7d20072903007c2010200954ad7c370300200141106a2207200728020022072002200720024b1b3602002005290308220f2005290328220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541086a41086a290300200d200f54ad7c220f8450450d00200e210d0c010b2001280220220220022903002209200d7c2210370300200241086a22022002290300200f7c2010200954ad7c370300200c200f7c200e200d7c220d200e54ad7c210c0b200141013a002c200541c0026a200541c8016a10d30320052802c802210720052802c0022101200541003602b002200542013703a802200541a8026a41004110102f20052802a80220052802b00222026a22082004370008200820033700002005200241106a22023602b002200541a8026a20024110102f20052802a802220220052802b00222086a220a200c370008200a200d3700002005200841106a22083602b002200120072002200810a702024020052802ac02450d002002102c0b20052802c402450d002001102c0b410121010b2000200636020420002001360200200541d0026a24000bc61106047f017e0f7f027e057f047e230041c0036b220324002003200236021c20032001360218200341206a2001200210b30102400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a1087020240024020032802100d0002400240024020032802142206200328023441d8006e2201200120064b1bad42d8007e2207422088a70d002007a72201417f4c0d000240024020010d00410821080c010b200110322208450d020b20034100360240200320083602382003200141d8006e36023c02402006450d00410021094100210a034041002101200341003a00f802200a41016a210a2003280234210b417f2102024002400340200b2001460d01200341d8026a20016a2003280230220c2d00003a00002003200b20026a3602342003200c41016a3602302003200141016a220d3a00f8022002417f6a2102200d2101200d4120470d000b200341a0036a41186a220e200341d8026a41186a220f290300370300200341a0036a41106a2210200341d8026a41106a2211290300370300200341a0036a41086a2212200341d8026a41086a2213290300370300200320032903d8023703a003200d41ff017141204f0d010c060b200141ff0171450d05200341003a00f8020c050b200341a8016a41086a22142012290300370300200341a8016a41106a22152010290300370300200341a8016a41186a2216200e290300370300200320032903a00322073703c801200320073703a801200b200d6b22014110490d042003200c41116a3602302003200141706a360234200c41096a2900002117200c2900012118200341086a200341306a10870220032802080d04200328020c2219200328023441306e2201200120194b1bad42307e2207422088a70d022007a72201417f4c0d020240024020010d004108211a0c010b20011032221a450d040b200341003602f0012003201a3602e8012003200141306e3602ec01024002400240024002402019450d004100211b4100211c0340200341003a00f802201c41016a211c417f21022003280234210b410021010340200b2001460d03200341d8026a20016a2003280230220c2d00003a00002003200b20026a3602342003200c41016a3602302003200141016a220d3a00f8022002417f6a2102200d2101200d4120470d000b200e200f2903003703002010201129030037030020122013290300370300200320032903d8023703a003200d41ff01714120490d03200341c8016a41086a22012012290300370300200341c8016a41106a22022010290300370300200341c8016a41186a221d200e290300370300200320032903a0033703c801200b200d6b220d4110490d0320034198026a41086a2001290300220737030020034198026a41106a2002290300221e37030020034198026a41186a201d290300221f370300200341f8016a41086a22022007370300200341f8016a41106a220b201e370300200341f8016a41186a221d201f3703002003200c41116a3602302003200d41706a360234200320032903c801220737039802200320073703f801200c41096a2900002107200c290001211e0240201b20032802ec01470d00200341e8016a201b410110e00120032802e801211a20032802f001211b0b201a201b41306c6a220120032903f8013703002002290300211f200b2903002120201d29030021212001201e370320200141286a2007370300200141186a2021370300200141106a2020370300200141086a201f3703002003201b41016a221b3602f001201c2019470d000b0b201a450d0820032902ec012107200341d8026a200341306a10ca0320032802d802220d450d0220032802dc0221022003280234220141104f0d0302402002450d00200241ffffff3f71450d00200d102c0b2007a72201450d08200141306c450d08201a102c0c080b200141ff0171450d00200341003a00f8020b20032802ec012201450d06200141306c450d06201a102c0c060b2007a72201450d05200141306c450d05201a102c0c050b20032802e002210b200341e8006a41086a2014290300221e370300200341e8006a41106a2015290300221f370300200341e8006a41186a20162903002220370300200341c8006a41186a220c2020370300200341c8006a41106a2219201f370300200341c8006a41086a221c201e3703002003200141706a36023420032003280230220141106a360230200320032903a801221e3703682003201e370348200141086a290000211e2001290000211f02402009200328023c470d00200341386a200910920420032802402109200328023821080b2008200941d8006c6a2201201f37031020012017370308200120183703002001201a360220200141186a201e370300200141346a200b360200200141306a20023602002001412c6a200d360200200141246a2007370200200141386a2003290348370200200141c0006a201c290300370200200141c8006a2019290300370200200141d0006a200c2903003702002003200328024041016a2209360240200a2006470d000b200328023821080b2008450d032000200329023c370204200020083602000c040b103b000b1039000b200341e8006a41186a20034188016a41186a2903003703002003280238210b02402009450d00200941d8006c2102200b41306a210103400240200141746a280200220d450d00200d41306c450d00200141706a280200102c0b0240200128020041ffffff3f71450d002001417c6a280200102c0b200141d8006a2101200241a87f6a22020d000b0b200328023c2201450d00200141d8006c450d00200b102c0b200341003602a803200342013703a0032003410f360284032003200341186a360280032003200341a0036a3602b802200341ec026a4101360200200342013702dc02200341b4bcc3003602d802200320034180036a3602e802200341b8026a41dcb7c000200341d8026a103e1a20033502a80342208620033502a003841000024020032802a403450d0020032802a003102c0b200041003602000b2005450d002004102c0b200341c0036a24000bd40103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42d8007e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b200141d8006c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241d8006e3602000b0f0b2005450d001039000b103b000be5780a0f7f037e047f017e017f017e0c7f017e0a7f047e23004190066b22022400200241c0036a22034200370300200241b8036a22044200370300200241a8036a41086a22054200370300200242003703a803200241e8026a41e6dcc700410710c5012005200241e8026a41086a2206290000370300200220022900e8023703a803200241b8016a41ccbac200410a10c5012003200241b8016a41086a2207290000370300200420022900b80137030020024198016a200241a8036a412010c6012002280298012108200228029c012109200342003703002004420037030020054200370300200242003703a803200241e8026a41e6dcc700410710c50120052006290000370300200220022900e8023703a803200241b8016a41ccbac200410a10c50120032007290000370300200420022900b801370300410121072002200941016a410020081b22033602f801200241a8036a4120200241f8016a410410a702200241e8026a41e6dcc700410710c501200241b8016a41d0bbc200411510c501200220033602e005200241b8026a200241e0056a410410c701200241b4036a200241e0056a41046a3602002002200241b8026a41086a3602ac032002200241e0056a3602b0032002200241b8026a3602a803200241f8016a200241a8036a107e02400240200228028002220541206a2206417f4c0d0002402006450d00200610322207450d020b200241003602b003200220063602ac03200220073602a803200241a8036a4100411010c80120022802a80320022802b00322066a220720022900e802370000200741086a200241e8026a41086a2900003700002002200641106a22063602b003200241a8036a2006411010c80120022802a80320022802b00322066a220720022900b801370000200741086a200241b8016a41086a2900003700002002200641106a22073602b00320022802f8012106200241a8036a2007200510c80120022802a803220720022802b00322086a2006200510c9081a2002200820056a22053602b003024020022802fc01450d002006102c0b200220013602f80120072005200241f8016a410410a702024020022802ac03450d002007102c0b200241c0036a22064200370300200241b8036a220a4200370300200241a8036a41086a22054200370300200242003703a803200241e8026a41e6dcc700410710c5012005200241e8026a41086a2207290000370300200220022900e8023703a803200241b8016a41a0b7c200410c10c501200441086a200241b8016a41086a2201290000370000200420022900b80137000020024190016a200241a8036a412010c6010240200320022802940141016a41d5002002280290011b6b220420034b0d0020041094040b200220033602a00120064200370300200a420037030020054200370300200242003703a803200241e8026a41e6dcc700410710c50120052007290000370300200220022900e8023703a803200241b8016a41f8c4c200410d10c50120062001290000370300200a20022900b801370300200241203602c4052002200241a8036a3602c005200241e8026a200241a8036a412010b30102400240024002400240024020022802e8022201450d0020022802ec0221082002200241e8026a41086a2802003602bc02200220013602b802200241f8016a200241b8026a10ca030240024020022802f801220b450d00200241f8016a41086a280200210c20022802fc01210d200241f8016a200241b8026a10950402400240024020022802f801220e450d0020024180026a280200210720022802fc01210f20022802bc022204450d0120022802b80222032d0000210520022004417f6a3602bc022002200341016a3602b80241002104410021060240024020050e03060001030b41002104410121060c050b41022106410021040c040b200d450d02200d41ffffff3f710d010c020b02402007450d00200741d0006c2103200e41c0006a210403400240200441046a2802002205450d00200541306c450d002004280200102c0b200441d0006a2104200341b07f6a22030d000b0b0240200f450d00200f41d0006c450d00200e102c0b200d450d01200d41ffffff3f71450d010b200b102c0b200241003602c001200242013703b8012002410f3602e4052002200241c0056a3602e0052002200241b8016a36028006410121042002418c026a4101360200200242013702fc01200241b4bcc3003602f8012002200241e0056a3602880220024180066a41dcb7c000200241f8016a103e1a20023502c00142208620023502b801841000024020022802bc01450d0020022802b801102c0b410321060b02402008450d002001102c0b2004450d010b200241d8056a22044200370300200241c0056a41106a22104200370300200241c0056a41086a22034200370300200242003703c005200241b8016a41d4dcc700410810c5012003200241b8016a41086a290000370300200220022900b8013703c005200241f8016a41bba8c700410d10c5012004200241f8016a41086a290000370300201020022900f801370300200241f8006a200241c0056a412010d301200241f8006a41106a2903002111200229038001211220022903782113411010322204450d062004201242002013a722031b37030020042011420020031b370308200241f497c1003602ac01200220043602a801200241003602a003200242083703980320024100360288062002420137038006200241e8026a41e6dcc700410710c501200241b8016a418893c700410a10c501412010322204450d06200242203702fc01200220043602f801200241f8016a4100411010c80120022802f80120022802800222046a220320022900e802370000200341086a200241e8026a41086a2900003700002002200441106a220436028002200241f8016a2004411010c80120022802f801220520022802800222046a220320022900b801370000200341086a200241b8016a41086a2900003700002002200441106a2204360280022004417f4c0d054101210302402004450d00200410322203450d070b41002114200241003602b003200220043602ac03200220033602a803200241a8036a4100200410c80120022802a80320022802b00322066a2005200410c9081a200241bc036a200241f8016a41086a2215280200360200200241003a00c403200241103602c003200241e0056a41186a220520022903c003370300200220022903f8013702b403200241e0056a41106a200241a8036a41106a220329030022113703002002200620046a3602b003200241e0056a41086a20022903b0032212370300200220022903a80322133703e005200241b8026a41106a2011370300200241b8026a41086a2012370300200241b8026a41186a2005290300370300200220133703b802200241a8036a200241b8026a10b60141002116024020022802a8034101470d00200241a8036a410472210141002116410821170340200241f8016a41206a200141206a280200360200200241f8016a41186a2204200141186a2902002211370300200241f8016a41106a2206200141106a29020022123703002015200141086a29020022133703002002200129020022183703f801200241e8026a41186a22082011370300200241e8026a41106a22092012370300200241e8026a41086a22192013370300200220183703e802200241a8036a41186a2205200429030037030020032006290300370300200241a8036a41086a22062015290300370300200220022903f8013703a80320022802a801200241e8026a20022802ac0128020c1105002111412010322207450d08200720022903e802370000200741186a2008290300370000200741106a2009290300370000200741086a2019290300370000200241b8016a41086a20062903002212370300200241b8016a41106a20032903002213370300200241b8016a41186a20052903002218370300200220022903a803221a3703b8012005201837030020032013370300200620123703002002201a3703a80302402016200228029c03470d0020024198036a201610d50120022802a003211620022802980321170b2017201641386c6a2204201137030020062903002111200329030021122005290300211320022903a80321182004412c6a4281808080103702002004200736022820042018370308200441206a2013370300200441186a2012370300200441106a2011370300200220022802a00341016a22163602a003200520082903003703002003200929030037030020062019290300370300200220022903e8023703a80302402002280288062204200228028406470d0020024180066a2004410110d60120022802880621040b20022802800620044105746a220720022903a803370000200741086a2006290300370000200741106a2003290300370000200741186a20052903003700002002200441016a221436028806200241a8036a200241b8026a10b60120022802a8034101460d000b0b024020022802bc02450d0020022802b802102c0b0240200241c8026a280200450d0020022802c402102c0b200241e8026a41e6dcc700410710c501200241b8016a41b18ec100410a10c501412010322204450d06200242203702fc01200220043602f801200241f8016a4100411010c80120022802f80120022802800222046a220320022900e802370000200341086a200241e8026a41086a2900003700002002200441106a220436028002200241f8016a2004411010c80120022802f801220320022802800222046a220520022900b801370000200541086a200241b8016a41086a2900003700002002200441106a2204360280022004417f4c0d050240024020040d00410121050c010b200410322205450d070b200241003602b003200220043602ac03200220053602a803200241a8036a4100200410c80120022802a80320022802b00322056a2003200410c9081a200241bc036a200241f8016a41086a2203280200360200200241003a00c403200241113602c003200241e0056a41186a220620022903c003370300200220022903f8013702b403200241e0056a41106a200241a8036a41106a221b29030022113703002002200520046a3602b003200241e0056a41086a20022903b0032212370300200220022903a80322133703e005200241f8016a41106a201137030020032012370300200241f8016a41186a2006290300370300200220133703f8012002200241a8016a36029802200241a8036a200241f8016a10b801024020022d00d8034102460d000340200241b8016a41186a221c200241a8036a41186a221d290300370300200241b8016a41106a221e201b290300370300200241b8016a41086a221f200241a8036a41086a2220290300370300200220022903a8033703b80120022802c8032121024020022902cc032218422088a72207450d0020022802d40321222007417f6a2109410021052021210441002103034002400240024020072003460d002002200436028c06200241c0056a2002418c066a10d80102400240024020022802cc052206450d0020022802c8052101024020022802d0052208450d00200841ffffffff0371450d002006102c0b200120224b0d010b02402005450d00200320056b220620074f0d02200241c0056a41186a2201200420054105746b220641186a2208290000370300200241c0056a41106a2219200641106a2215290000370300200241c0056a41086a2217200641086a2223290000370300200220062900003703c005200441086a22242900002111200441106a22252900002112200441186a2226290000211320062004290000370000200820133700002015201237000020232011370000202620012903003700002025201929030037000020242017290300370000200420022903c0053700000c040b4100210520092003470d040c060b200541016a21050c020b2006200741e48ac500103f000b2007200741f48ac500103f000b20092003470d002005417f6a20074f0d02201842ffffffff0f83200720056bad4220868421180c020b200341016a2103200441206a21040c000b0b200241e8026a41186a201c2903002211370300200241e8026a41106a201e2903002212370300200241e8026a41086a201f2903002213370300200220022903b801221a3703e802201d2011370300201b2012370300202020133703002002201a3703a8032002280298022204280200200241a8036a200428020428020c1105002111200241b8026a41186a201d2903002212370300200241b8026a41106a201b2903002213370300200241b8026a41086a2020290300221a370300200220022903a80322273703b802201d2012370300201b20133703002020201a370300200220273703a80302402016200228029c03470d0020024198036a201610d5010b200228029803201641386c6a22042011370300200420022903a80337030820042021360228200441106a2020290300370300200441186a201b290300370300200441206a201d2903003703002004412c6a20183702002002201641016a22163602a003200241a8036a200241f8016a10b80120022d00d8034102470d000b0b024020022802fc01450d0020022802f801102c0b0240200241f8016a41106a280200450d00200228028402102c0b200241c0036a22034200370300200241a8036a41106a4200370300200241a8036a41086a22044200370300200242003703a803200241e8026a41e6dcc700410710c5012004200241e8026a41086a2205290000370300200220022900e8023703a803200241b8016a419cb8c200411510c501200a41086a2201200241b8016a41086a2206290000370000200a20022900b801370000200241f0006a200241a8036a412010c601024020142002280274410020022802701b22074101200741014b1b4f0d00024041002802d8d248450d00200241c0036a4200370300200241b8036a22034200370300200241a8036a41086a22044200370300200242003703a803200241e8026a41e6dcc700410710c5012004200241e8026a41086a290000370300200220022900e8023703a803200241b8016a41ccbac200410a10c501200a41086a200241b8016a41086a290000370000200a20022900b801370000200241e0006a200241a8036a412010c601200241123602bc01200220022903603703f8012002200241f8016a3602b80141002802d4d248210541002802d0d248210641002802dcd2482107200241e8036a41f316360200200241e0036a42de80808010370300200241dc036a41acc5c300360200200241d4036a420e370200200241d0036a41e28fc100360200200241a8036a41206a42013703002003420237030020044107360200200241c4036a200241b8016a3602002002419498c1003602b403200241db8fc1003602ac03200241013602a803200641f8a3c000200741024622041b200241a8036a200541e0a3c00020041b2802101103000b024020022802840641ffffff3f71450d00200228028006102c0b2002280298032105024020022802a0032204450d00200441386c2103200541286a210403400240200441046a28020041ffffff3f71450d002004280200102c0b200441386a2104200341486a22030d000b0b41002128200228029c032203450d03200341386c450d042005102c0c020b20034200370300200241a8036a41106a2207420037030020044200370300200242003703a803200241e8026a41e6dcc700410710c50120042005290000370300200220022900e8023703a803200241b8016a41f4b7c200410e10c50120012006290000370000200a20022900b801370000200241e8006a200241a8036a412010c601200228026c210420022802682101200520024180066a41086a28020036020020022002290380063703e802200620024198036a41086a28020036020020022002290398033703b8012003420037030020074200370300200242013703a803200241003602b003200241f8016a2004410020011b200241e8026a200241b8016a200241a8036a109604024020022802f8014101470d00200220022902fc013703e80241002802d8d248450d02200241043602bc012002200241e8026a3602b80141002802d4d248210441002802d0d248210341002802dcd2482105200241e8036a41fc16360200200241e0036a42de80808010370300200241dc036a41acc5c300360200200241d4036a420e370200200241d0036a41e28fc100360200200241c8036a4201370300200241b8036a4201370300200241b0036a4107360200200241c4036a200241b8016a3602002002418c98c1003602b403200241db8fc1003602ac03200241013602a803200341f8a3c000200541024622051b200241a8036a200441e0a3c00020051b2802101103000c020b20024190026a28020021072002418c026a2802002129200241f8016a41106a280200212a20024184026a280200210420024180026a280200212b20022802fc0121280c030b200241a8036a412010b4010c030b410021280b0b20022802a80120022802ac01280200110200024020022802ac01280204450d0020022802a801102c0b024002402028450d00200241003602a003200242013703980320024198036a4100200410d60120022802a00321050240200441306c2204450d00202820046a210620022802980320054105746a210420282103034020042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200541016a2105200441206a21042006200341306a2203470d000b0b200220053602a003200241d8056a4200370300200241c0056a41106a4200370300200241c0056a41086a22044200370300200242003703c005200241b8016a41d4dcc700410810c5012004200241b8016a41086a290000370300200220022900b8013703c005200241f8016a41bba8c700410d10c501201041086a200241f8016a41086a290000370000201020022900f801370000200241c8006a200241c0056a412010d301200241c8006a41106a29030021112002290350211220022903482113411010322214450d042014201242002013a722041b37030020142011420020041b370308202a2007412c6c6a212c0240024020070d00202a2109202a21080c010b200241a8036a410c6a2119200241a8036a4104722115200241f8016a41206a2126200241f8016a41186a2122200241f8016a41106a2116200241f8016a41086a211b202a210903402009220828020021232026200841246a221d29020037030020222008411c6a22202902003703002016200841146a2221290200370300201b2008410c6a290200370300200220082902043703f8012008412c6a21092023450d01201520022903f801370200201541086a201b290300370200201541106a2016290300370200201541186a2022290300370200201541206a2026290300370200200220233602a8032014201910d7032118200241e0056a41086a221c201941086a290200370300200241e0056a41106a221e201941106a290200370300200241e0056a41186a221f201941186a290200370300200220192902003703e00520022802ac0321250240024020022802b0032204450d00200441246c22242105202321040340200441206a2802002103200441086a2900002111200441106a290000211220042900002113200241c0056a41186a2206200441186a290000370300200241c0056a41106a22072012370300200241c0056a41086a22012011370300200220133703c00502402003450d00200241b8016a41086a222d2001290300370300200241b8016a41106a222e2007290300370300200241b8016a41186a222f2006290300370300200220022903c00522113703b802200220113703b8012018428094ebdc03822112413010322217450d0a200241386a2018428094ebdc0380221842002003ad2211420010ce08201720022903b801370300201741186a202f290300370300201741106a202e290300370300201741086a202d290300370300201720022903382213201220117e2211428094ebdc0380a7417f2011428080808080c0b2cd3b541b2011428094ebdc03824280cab5ee01566aad7c2211370320201741286a200241386a41086a2903002011201354ad7c37030020024281808080103702840620022017360280060240024020054124470d00410121240c010b200441246a2130202320246a2205415c6a2131410121240340203021040340200441206a28020021032006200441186a2900003703002007200441106a2900003703002001200441086a290000370300200220042900003703c00502402003450d00200241286a201842002003ad2211420010ce08200241b8026a41086a20012903002213370300200241b8026a41106a2007290300221a370300200241b8026a41186a20062903002227370300200220022903c00522323703b802202f2027370300202e201a370300202d2013370300200220323703b801200241286a41086a29030020022903282213201220117e2211428094ebdc0380a7417f2011428080808080c0b2cd3b541b2011428094ebdc03824280cab5ee01566aad7c2211201354ad7c211302402024200228028406470d0020024180066a2024410110e00120022802800621170b200441246a21302017202441306c6a220320022903b801370300202d290300211a202e2903002127202f290300213220032011370320200341286a2013370300200341186a2032370300200341106a2027370300200341086a201a3703002002202441016a22243602880620312004470d020c030b2005200441246a2204470d000b0b0b02402025450d00202541246c450d002023102c0b20022802840621040c030b200441246a21042005415c6a22050d000b0b410021044108211702402025450d00202541246c450d002023102c0b410021240b200241b8016a41186a2203201f290300370300200241b8016a41106a2205201e290300370300200241b8016a41086a2206201c290300370300200220022903e0053703b801200820043602042008201736020020082024360208200820022903b80137020c2021200629030037020020202005290300370200201d20032903003702002009202c470d000b20092108202c21090b202c20096b2204412c6d210302402004450d002003412c6c210403400240200941046a2802002203450d00200341246c450d002009280200102c0b2009412c6a2109200441546a22040d000b0b2014102c200241f8016a200228029803220b20022802a003220c202a2008202a6b2204412c6d220310fc010240024020022d00f8014101470d00024041002802d8d248450d00200241d5003602bc01200241ff83c3003602b80141002802d4d248210541002802d0d248210641002802dcd2482107200241e8036a41ae16360200200241e0036a42de80808010370300200241dc036a41acc5c300360200200241d4036a420e370200200241d0036a41e28fc100360200200241c8036a4201370300200241b8036a4201370300200241b0036a4107360200200241c4036a200241e0056a360200200241b4b5c8003602b403200241db8fc1003602ac03200241013602a803200241043602e405200541e0a3c000200741024622071b28021021052002200241b8016a3602e005200641f8a3c00020071b200241a8036a20051103000b02402004450d002003412c6c2103202a210403400240200441046a2802002205450d00200541306c450d002004280200102c0b2004412c6a2104200341546a22030d000b0b02402029450d002029412c6c450d00202a102c0b0240200228029c0341ffffff3f71450d00200228029803102c0b41032106202b0d010c030b200241b8026a41086a220520024184026a280200360200200220022902fc013703b802200241c0056a41186a4200370300200241c0056a41106a4200370300200241c0056a41086a22064200370300200242003703c005200241b8016a41d4dcc700410810c5012006200241b8016a41086a290000370300200220022900b8013703c005200241f8016a41bba8c700410d10c501201041086a200241f8016a41086a2206290000370000201020022900f801370000200241106a200241c0056a412010d3012002200241106a41106a2903004200200228021022071b3703c00120022002290318420020071b3703b8012002200241b8016a3602e005200241a8036a41086a22072005280200360200200220022903b8023703a803200241f8016a200241a8036a10fe01200241a8036a41186a200241f8016a41186a280200360200200241a8036a41106a200241f8016a41106a29030037030020072006290300370300200220022903f8013703a8032002200241e0056a3602c403200241e8026a200241a8036a109704200228029c03210d20022802e802210e20022802ec02210f20022802f002210702402004450d002003412c6c2103202a210403400240200441046a2802002205450d00200541306c450d002004280200102c0b2004412c6a2104200341546a22030d000b0b02402029450d002029412c6c450d00202a102c0b41002106202b450d032028450d03202b41306c450d032028102c0c030b2028450d01202b41306c450d012028102c0c020b410321062028450d000240202b450d00202b41306c450d002028102c0b02402007450d002007412c6c2103202a210403400240200441046a2802002205450d00200541246c450d002004280200102c0b2004412c6a2104200341546a22030d000b0b2029450d00202a450d002029412c6c450d00202a102c0c010b0b42002133200241c0036a4200370300200241b8036a4200370300200241a8036a41086a22044200370300200242003703a803200241e8026a41e6dcc700410710c5012004200241e8026a41086a290000370300200220022900e8023703a803200241b8016a41d8c5c200410b10c501200a41086a200241b8016a41086a290000370000200a20022900b801370000200241a8036a412010b401024002400240024020064103460d00200220063a00a701200e200741d0006c6a212f109804024020070d00200e210a420021320c020b200241e8026a41106a211c200241b8026a41106a212e200241dc026a212a200241a8036a41206a212d4200213342002132200e210a0340200241b8016a41386a2203200a220441386a290300370300200241b8016a41306a2205200441306a290300370300200241b8016a41286a2206200441286a290300370300200241b8016a41206a2207200441206a290300370300200241b8016a41186a2201200441186a290300370300200241b8016a41106a2208200441106a290300370300200241b8016a41086a2209200441086a29030037030020042903002111200241a8016a41086a2219200441cc006a280200360200200220113703b8012002200441c4006a2902003703a801200441d0006a210a200441c0006a2802002204450d02200241f8016a41386a2003290300370300200241f8016a41306a2005290300370300200241f8016a41286a2006290300370300200241f8016a41206a2007290300370300200241f8016a41186a22152001290300370300200241f8016a41106a22172008290300370300200241f8016a41086a22232009290300370300200220022903b8013703f801200241a8036a41386a2003290300370300200241a8036a41306a2005290300370300200241a8036a41286a2006290300370300202d2007290300370300200241a8036a41186a2001290300370300200241a8036a41106a2008290300370300200241a8036a41086a2009290300370300200220022903b8013703a803200241c0056a41186a2015290300370300200241c0056a41106a2017290300370300200241c0056a41086a2023290300370300200220022903f8013703c005200241b8026a41186a2201202d41186a290300370300202e202d41106a290300370300200241b8026a41086a2208202d41086a2903002234370300200220043602d8022002202d29030022353703b802202a20022903a801370200202a41086a2019280200360200200241e0056a20022802a001200241c0056a10da0320022802e805210920022802e0052107200241003602f002200242013703e8022002200241b8026a3602800620024180066a200241e8026a10e9032002202e3602800620024180066a200241e8026a10e90320022802d8022104200241e8026a20022802e0022203108f0102402003450d00200341306c21050340200241e8026a20022802f0024120102f20022802e80220022802f00222066a2203200441106a290000370000200341086a200441186a290000370000200341106a200441206a290000370000200341186a200441286a2900003700002002200641206a3602f0022002200436028006200441306a210420024180066a200241e8026a10e903200541506a22050d000b0b2007200920022802e802220420022802f00210a702024020022802ec02450d002004102c0b024020022802e405450d002007102c0b200241e0056a41186a22302001290300370300200241e0056a41106a2228202e290300370300200241e0056a41086a22102008290300370300200220022903b8023703e00520022802e402212920022802dc02212b20022802d802211b024020022802e002221e41c100490d00201e410176ad42307e2211422088a70d062011a72231417f4c0d0620311032221f450d074100210320024100360288062002420437038006201b41506a2114201b41f07e6a212c41042105201e21160240024003400240024020162219417f6a22070d0041012109410021160c010b024002400240024002400240201b200741306c6a2204290300201941306c2221201b6a41a07f6a2206290300221256200441086a2903002213200641086a29030022115620132011511b0d002019417e6a2109202c20216a210441002116410021060340024020092006470d00201921090c080b2012200429030022185821072011200441086a290300221351210120112013582108200441506a2104200641016a210620182112201321112007200820011b0d000b200641016a21092006417f7320196a21070c010b202c20216a210402400340024020074101470d00410021070c020b2012200429030022185621062011200441086a290300221351210120112013562108200441506a21042007417f6a210720182112201321112006200820011b0d000b0b20192007490d022019201e4b0d01201920076b22094101762201450d00201420216a2104201b200741306c6a21060340200241e8026a41186a2208200641186a2215290300370300201c200641106a2217290300370300200241e8026a41086a2223200641086a2224290300370300200220062903003703e802200641206a22252903002111200441286a22262903002112200441086a22222903002113200441106a22162903002118200441186a221d290300211a200429030021272025200441206a22202903003703002015201a370300201720183703002024201337030020062027370300200641286a22152903002113201520123703002016201c290300370300201d200829030037030020222023290300370300200420022903e8023703002026201337030020202011370300200441506a2104200641306a21062001417f6a22010d000b0b024020070d00200721160c050b0240200941094d0d00200721160c050b2019201e4b0d02201920076b2101201b200741306c6a2115201420216a2125034020192007417f6a2216490d040240201920166b22094102490d00201b200741306c6a2204290300201b201641306c6a2206290300221358200441086a22072903002212200641086a220829030022115820122011511b0d00200620042903003703002008200729030037030020062903102112200641106a200441106a290300370300200241e8026a41186a2223200641286a2207290300370300201c200641206a2208290300370300200241e8026a41086a2224200641186a22062903003703002006200441186a2903003703002008200441206a2903003703002007200441286a290300370300200220123703e802024020094103490d002001417f6a2117410021062015210402400340200441306a2207290300201356200441386a2208290300221220115620122011511b450d0220012006460d01200441286a200441d8006a290300370300200441206a200441d0006a290300370300200441186a200441c8006a290300370300200441106a200441c0006a290300370300200441086a200829030037030020042007290300370300200721042017200641016a2206470d000b202521040c010b200641016a2009419ca5c800103f000b2004201337030020042011370308200420022903e802370310200441186a2024290300370300200441206a201c290300370300200441286a20232903003703000b2016450d05200141016a2101201541506a2115201621072009410a4f0d050c000b0b2019201e41b8a3c800104f000b2007201941b8a3c8001059000b20192007417f6a2216490d002019201e41c8a3c800104f000b2016201941c8a3c8001059000b02402003200228028406470d0020024180066a10ae01200228028806210320022802800621050b200520034103746a22042009360204200420163602002002200341016a2203360288060240024020034102490d00200228028006210503400240024002400240024020052003417f6a4103746a2204280200450d00200341037420056a220141746a2802002207200428020422064b0d010b20034103490d022004280204210620052003417d6a22254103746a28020421040c010b200341024d0d0420052003417d6a22254103746a2802042204200620076a4d0d00200341034d0d04200141646a280200200420076a4b0d040b20042006490d010b2003417e6a21250b02400240024002400240024002402003202541016a22264d0d00200320254d0d0120052025410374221d6a2204280204222020042802006a22042005202641037422216a22032802002222490d022004201e4b0d03201b202241306c6a22232003280204222441306c22036a2105200441306c2106200420226b220720246b220420244f0d04201f2005200441306c220310c908221520036a210920244101480d0520044101480d05201420066a2104200521032009211903402004200541506a2201201941506a22072007290300200129030056200741086a2903002211200141086a29030022125620112012511b22081b2206290300370300200441086a200641086a290300370300200441106a200641106a290300370300200441186a200641186a290300370300200441206a200641206a290300370300200441286a200641286a2903003703002001200320081b21032009200720081b210902402019200720081b221920154b0d00201521170c080b200441506a21042015211720232001200520081b2205490d000c070b0b2026200341d8a3c800103f000b2025200341e8a3c800103f000b2022200441f8a3c8001059000b2004201e41f8a3c800104f000b201f2023200310c908220420036a2109024020244101480d00200720244c0d00201b20066a21012004211720042104202321030340024002402005290300200429030056200541086a2903002211200441086a29030022125620112012511b0d00200441306a22172106200521070c010b200541306a210720042106200521040b20032004290300370300200341286a200441286a290300370300200341206a200441206a290300370300200341186a200441186a290300370300200341106a200441106a290300370300200341086a200441086a290300370300200341306a2103200620094f0d03200621042007210520072001490d000c030b0b20042117202321030c010b20152117200521030b20032017200920176b220420044130706b10c9081a200228028806220420254d0d022002280280062205201d6a2203202020246a36020420032022360200200420264d0d04200520216a2203200341086a20042026417f736a41037410ca081a20022004417f6a220336028806200341014b0d000b0b2016450d030c010b0b202520044188a4c800103f000b202620041047000b02402002280284062204450d00200441ffffffff0171450d00200228028006102c0b024020314130490d00201f102c0b201e41c000201e41c000491b211e0b203220347c2111203320357c22122033542201ad2113200241e8026a41186a2030290300370300201c2028290300370300200241e8026a41086a2010290300370300200220022903e0053703e80220022029360294032002201e360290032002202b36028c032002201b3602880320024198036a20022802a001200241c0056a10990420022802a00321082002280298032107200241003602880620024201370380062002200241e8026a36028c062002418c066a20024180066a10e9032002201c36028c062002418c066a20024180066a10e903200228028803210420024180066a2002280290032203108f0102402003450d00200341306c2105034020024180066a2002280288064120102f20022802800620022802880622066a2203200441106a290000370000200341086a200441186a290000370000200341106a200441206a290000370000200341186a200441286a2900003700002002200641206a360288062002200436028c06200441306a21042002418c066a20024180066a10e903200541506a22050d000b0b201120137c211120072008200228028006220420022802880610a7020240200228028406450d002004102c0b20112032512104201120325421030240200228029c03450d002007102c0b2001200320041b21040240200228028c032203450d00200341306c450d00200228028803102c0b427f201120041b2132427f201220041b2133200a202f470d000c030b0b200041003602000c020b202f200a460d000340200a220441d0006a210a0240200441c4006a2802002203450d00200341306c450d00200441c0006a280200102c0b202f200a470d000b0b0240200f450d00200e450d00200f41d0006c450d00200e102c0b200241b8016a41e6dcc700410710c501200241f8016a41a8bfc200410e10c501200220022802a0013602e005200241b8026a200241e0056a410410c701200241b4036a200241e0056a41046a3602002002200241c0026a3602ac032002200241e0056a3602b0032002200241b8026a3602a803200241e8026a200241a8036a107e20022802f002220441206a2203417f4c0d010240024020030d00410121050c010b200310322205450d030b200241003602c002200220033602bc02200220053602b802200241b8026a4100411010c80120022802b80220022802c00222036a220520022900b801370000200541086a200241b8016a41086a2900003700002002200341106a22033602c002200241b8026a2003411010c80120022802b80220022802c00222036a220520022900f801370000200541086a200241f8016a41086a2900003700002002200341106a22053602c00220022802e8022103200241b8026a2005200410c80120022802b802220520022802c00222066a2003200410c9081a2002200620046a22043602c002024020022802ec02450d002003102c0b200220323703b003200220333703a80320052004200241a8036a411010a702024020022802bc02450d002005102c0b0240200c450d00200c4105742107200b21040340200241b8016a41e6dcc700410710c501200241f8016a418893c700410a10c501200241a8036a200410e40220022802b003220341206a2205417f4c0d030240024020050d00410121060c010b200510322206450d050b200241003602f002200220053602ec02200220063602e802200241e8026a4100411010c80120022802e80220022802f00222056a220620022900b801370000200641086a200241b8016a41086a2900003700002002200541106a22053602f002200241e8026a2005411010c80120022802e80220022802f00222056a220620022900f801370000200641086a200241f8016a41086a2900003700002002200541106a22063602f00220022802a8032105200241e8026a2006200310c80120022802e802220620022802f00222016a2005200310c9081a2002200120036a22033602f002024020022802ac03450d002005102c0b200241086a20062003109a04200228020c410020022802081b2103024020022802ec02450d002006102c0b200241a8036a20022802a0012004109b0420022802b003210620022802a8032105200241003a00fd010240024002400240200341c000490d00200341808001490d012003418080808004490d0241052101200241053a00fd01200241033a00f801200220033600f9010c030b41012101200241013a00fd01200220034102743a00f8010c020b41022101200241023a00fd01200220034102744101723b01f8010c010b41042101200241043a00fd01200220034102744102723602f8010b20052006200241f8016a200110a702024020022d00fd01450d00200241003a00fd010b024020022802ac03450d002005102c0b200441206a2104200741606a22070d000b0b20022d00a7012104200241a8036a41086a220341043a0000200220043a00b103200241033602a803200241a8036a10c802024041002802d8d2484103490d002002418c026a411336020020024184026a411a360200200241133602fc012002200c3602b8012002200241a0016a360288022002200241a7016a360280022002200241b8016a3602f80141002802d4d248210441002802d0d248210541002802dcd2482106200241e8036a41f615360200200241e0036a42de80808010370300200241dc036a41acc5c300360200200241d4036a420e370200200241d0036a41e28fc100360200200241c8036a4203370300200241b8036a420337030020034107360200200241c4036a200241f8016a360200200241d484c3003602b403200241db8fc1003602ac03200241033602a803200541f8a3c000200641024622031b200241a8036a200441e0a3c00020031b2802101103000b2000200d3602042000200b360200200041086a200c3602000b20024190066a24000f0b103b000b1039000b931601067f230041d0006b22012400200141086a41e6dcc700410710c501200141186a419699c100410b10c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a3602002001200141c0006a22023602442001200141346a3602482001200141386a360240200141286a200141c0006a107e024002402001280230220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200141003602482001200436024420012005360240200141c0006a4100411010c8012001280240200128024822046a22052001290008370000200541086a200141086a41086a2900003700002001200441106a2204360248200141c0006a2004411010c8012001280240200128024822046a22052001290018370000200541086a200141186a41086a2900003700002001200441106a220536024820012802282104200141c0006a2005200310c80120012802402205200128024822066a2004200310c9081a2001200620036a22033602480240200128022c450d002004102c0b20052003109d0402402001280244450d002005102c0b200141086a41e6dcc700410710c501200141186a41e4bcc200411210c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a360200200120023602442001200141346a3602482001200141386a360240200141286a200141c0006a107e2001280230220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200141003602482001200436024420012005360240200141c0006a4100411010c8012001280240200128024822046a22052001290008370000200541086a200141086a41086a2900003700002001200441106a2204360248200141c0006a2004411010c8012001280240200128024822046a22052001290018370000200541086a200141186a41086a2900003700002001200441106a220536024820012802282104200141c0006a2005200310c80120012802402205200128024822066a2004200310c9081a2001200620036a22033602480240200128022c450d002004102c0b20052003109d0402402001280244450d002005102c0b200141086a41e6dcc700410710c501200141186a41e0bdc200411210c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a360200200120023602442001200141346a3602482001200141386a360240200141286a200141c0006a107e2001280230220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200141003602482001200436024420012005360240200141c0006a4100411010c8012001280240200128024822046a22052001290008370000200541086a200141086a41086a2900003700002001200441106a2204360248200141c0006a2004411010c8012001280240200128024822046a22052001290018370000200541086a200141186a41086a2900003700002001200441106a220536024820012802282104200141c0006a2005200310c80120012802402205200128024822066a2004200310c9081a2001200620036a22033602480240200128022c450d002004102c0b20052003109d0402402001280244450d002005102c0b200141086a41e6dcc700410710c501200141186a41acbec200411310c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a360200200120023602442001200141346a3602482001200141386a360240200141286a200141c0006a107e2001280230220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200141003602482001200436024420012005360240200141c0006a4100411010c8012001280240200128024822046a22052001290008370000200541086a200141086a41086a2900003700002001200441106a2204360248200141c0006a2004411010c8012001280240200128024822046a22052001290018370000200541086a200141186a41086a2900003700002001200441106a220536024820012802282104200141c0006a2005200310c80120012802402205200128024822066a2004200310c9081a2001200620036a22033602480240200128022c450d002004102c0b2005200310b40102402001280244450d002005102c0b200141086a41e6dcc700410710c501200141186a419b92c100411010c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107e2001280230220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200141003602482001200436024420012005360240200141c0006a4100411010c8012001280240200128024822046a22052001290008370000200541086a200141086a41086a2900003700002001200441106a2204360248200141c0006a2004411010c8012001280240200128024822046a22052001290018370000200541086a200141186a41086a2900003700002001200441106a220536024820012802282104200141c0006a2005200310c80120012802402205200128024822066a2004200310c9081a2001200620036a22033602480240200128022c450d002004102c0b2005200310b40102402001280244450d002005102c0b200141086a41e6dcc700410710c501200141186a41a8bfc200410e10c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a360200200120023602442001200141346a3602482001200141386a360240200141286a200141c0006a107e2001280230220241206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b200141003602482001200336024420012004360240200141c0006a4100411010c8012001280240200128024822036a22042001290008370000200441086a200141086a41086a2900003700002001200341106a2203360248200141c0006a2003411010c8012001280240200128024822036a22042001290018370000200441086a200141186a41086a2900003700002001200341106a220436024820012802282103200141c0006a2004200210c80120012802402204200128024822056a2003200210c9081a2001200520026a22023602480240200128022c450d002003102c0b2004200210b40102402001280244450d002004102c0b200141086a41e6dcc700410710c501200141186a41d0bbc200411510c50120012000360234200141386a200141346a410410c701200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a107e2001280230220041206a2202417f4c0d000240024020020d00410121030c010b200210322203450d020b200141003602482001200236024420012003360240200141c0006a4100411010c8012001280240200128024822026a22032001290008370000200341086a200141086a41086a2900003700002001200241106a2202360248200141c0006a2002411010c8012001280240200128024822026a22032001290018370000200341086a200141186a41086a2900003700002001200241106a220336024820012802282102200141c0006a2003200010c80120012802402203200128024822046a2002200010c9081a2001200420006a22003602480240200128022c450d002002102c0b2003200010b40102402001280244450d002003102c0b200141d0006a24000f0b103b000b1039000bd70c04037f017e0f7f067e230041d0036b22022400200241086a2001108702024002402002280208450d00200041003602000c010b024002400240200228020c2203200128020441d0006e2204200420034b1bad42d0007e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410322206450d020b20024100360218200220063602102002200441d0006e36021402402003450d0020024184036a210720024180026a41206a2108410021094100210a03404100210b200241003a00e001200a41016a210a2001280204417f6a210402400240024003402004417f460d01200241c0016a200b6a2001280200220c2d00003a0000200120043602042001200c41016a3602002002200b41016a220c3a00e0012004417f6a2104200c210b200c4120470d000b200241e0026a41086a2204200241c0016a41086a220d290300370300200241e0026a41106a220e200241c0016a41106a220f290300370300200241e0026a41186a2210200241c0016a41186a2211290300370300200220022903c0013703e002200c41ff0171411f4b0d014100210b0c020b0240200b41ff0171450d00200241003a00e0010b4100210b0c010b200241c0026a41086a220c2004290300370300200241c0026a41106a2212200e290300370300200241c0026a41186a22132010290300370300200220022903e0023703c002200241e0026a200110f6030240200228028003220b0d004100210b0c010b200820022903e00237030020024180026a41186a2214201329030037030020024180026a41106a2213201229030037030020024180026a41086a2212200c290300370300200841086a2004290300370300200841106a200e290300370300200841186a201029030037030020024190036a41086a200741086a280200360200200220022903c002370380022002200729020037039003200241c0016a41386a20024180026a41386a290300370300200241c0016a41306a20024180026a41306a290300370300200241c0016a41286a20024180026a41286a290300370300200241c0016a41206a200829030037030020112014290300370300200f2013290300370300200d201229030037030020022002290380023703c0010b20024180016a41386a2204200241c0016a41386a29030037030020024180016a41306a220c200241c0016a41306a29030037030020024180016a41286a220e200241c0016a41286a29030037030020024180016a41206a2210200241c0016a41206a29030037030020024180016a41186a220d200241c0016a41186a29030037030020024180016a41106a220f200241c0016a41106a29030037030020024180016a41086a2211200241c0016a41086a290300370300200241f0006a41086a221220024190036a41086a280200360200200220022903c001370380012002200229039003370370200b450d04200241306a41386a22132004290300370300200241306a41306a2214200c290300370300200241306a41286a220c200e290300370300200241306a41206a220e2010290300370300200241306a41186a2210200d290300370300200241306a41106a220d200f290300370300200241306a41086a220f2011290300370300200241206a41086a22112012280200360200200220022903800137033020022002290370370320024020092002280214470d00200241106a2009410110d60420022802182109200228021021060b2006200941d0006c6a22042002290330370300200d290300210520102903002115200e2903002116200c29030021172014290300211820132903002119200f290300211a2004200b360240200441086a201a37030020042002290320370244200441cc006a2011280200360200200441386a2019370300200441306a2018370300200441286a2017370300200441206a2016370300200441186a2015370300200441106a20053703002002200228021841016a2209360218200a2003470d000b0b20002002290310370200200041086a200241106a41086a2802003602000c030b103b000b1039000b200041003602002002280210210c02402009450d00200941d0006c2101200c41c0006a210403400240200441046a280200220b450d00200b41306c450d002004280200102c0b200441d0006a2104200141b07f6a22010d000b0b20022802142204450d00200441d0006c450d00200c102c0b200241d0036a24000bb9630d037f017e017f017e137f017e077f017e017f027e067f017e097f230041a0036b2205240020054190026a41086a2206200241086a2802003602002005200229020037039002200541e0016a41086a2202200341086a280200360200200520032902003703e001200541c0026a20054190026a200541e0016a10da01200541086a41086a200541c0026a41086a22032802002207360200200520052903c0022208370308200541186a41086a200541d4026a2802002209360200200520052902cc02220a370318200620073602002005200837039002200220093602002005200a3703e001200541c0026a200120054190026a200541e0016a10db01200541386a41086a2202200541d8026a2802003602002005200541d0026a2903003703382003280200210b20052802c402210c0240024002400240024020052802c0024101460d00200541cc026a2802002103200541286a41086a200228020036020020052005290338370328024020042903004201520d00200541286a2004280208200441106a290300200441186a29030010ab010b200c20034102746a210920010d010c020b2000200c36020420004101360200200041086a200b3602000c030b2009200c460d0020034102742106200c2103200c2104024003402003220241046a210320022802002202450d032002280208220741016a41004c0d012002200736020802400240200241f4006a2d00000d0020022002280200417f6a220736020020070d01200241046a22072007280200417f6a220736020020070d012002102c0c010b20042002360200200441046a21042001417f6a2201450d040b2006417c6a22060d000b200921030c020b41fcaec8004118200541e0016a41948bc50041a48bc5001040000b200c2103200c21040b0240200920036b2202450d00200241027541027421020340200328020022012001280200417f6a3602000240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220141046a2802000d002001102c0b200341046a21032002417c6a22020d000b0b024002400240024002400240024002402004200c6b220d410275220e4115490d00200e410176220341ffffffff03712003470d072003410274220f417f4c0d07200f10322210450d06200541003602c802200542043703c002200c417c6a2111200c41746a2112200e211302400240034020132109410021134101210102402009417f6a2204450d00024002400240024002400240024002400240024002400240200c20044102746a2802002203280208220241016a41004c0d0020032002360208200c2009417e6a22074102746a2802002202280208220141016a41004c0d01200328025021032002200136020820032002280250490d04201220094102746a210341002113410021020340024020072002470d00200921010c0e0b200341046a2802002201280208220441016a41004c0d032001200436020820032802002204280208220641016a41004c0d0420012802502101200420063602082003417c6a2103200241016a2102200120042802504f0d000b200241016a21012002417f7320096a21040c050b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b2012200941027422076a210302400340024020044101470d00410021040c020b200341046a2802002202280208220141016a41004c0d032002200136020820032802002201280208220641016a41004c0d0420022802502102200120063602082003417c6a21032004417f6a210420022001280250490d000b0b20092004490d032009200e4b0d04200920046b22014101762206450d00201120076a2103200c20044102746a21020340200228020021072002200328020036020020032007360200200241046a21022003417c6a21032006417f6a22060d000b0b024020040d00200421130c070b0240200141094d0d00200421130c070b2009200e4b0d04200920046b21012004417f6a2103201120044102746a2102034020092003490d092002200141016a220110bd012003417f6a220420034f0d062002417c6a2102200421032001410a490d000c060b0b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b2004200941b8a3c8001059000b2009200e41b8a3c800104f000b20092004417f6a2203490d032009200e41c8a3c800104f000b200441016a21130b024020052802c802220320052802c402470d00200541c0026a10ae0120052802c80221030b20052802c002220220034103746a22042001360204200420133602002005200341016a22033602c802024020034102490d000240024002400340024002400240024020022003417f6a4103746a2201280200450d00200341037420026a220741746a2802002206200128020422044d0d00200341024d0d0820022003417d6a22144103746a2802042201200420066a4d0d01200341034d0d08200741646a280200200120066a4d0d010c080b20034103490d012001280204210420022003417d6a22144103746a28020421010b20012004490d010b2003417e6a21140b0240024002400240024002400240024002402003201441016a22154d0d00200320144d0d012002201441037422166a2203280204221720032802006a22032002201541037422186a22022802002219490d022003200e4b0d03200c20194102746a221a2002280204221b41027422026a210120034102742106200320196b2207201b6b2203201b4f0d06201020012003410274220210c908221c20026a210402400240201b4101480d00200341014e0d010b201c2103200121020c080b201120066a21092001210203402004417c6a22032802002201280208220641016a41004c0d05200120063602082002417c6a22062802002207280208221d41016a41004c0d06200128025021012007201d360208200920062003200120072802504922011b2802003602002004200320011b21040240201a2006200220011b2202490d00201c21030c090b2009417c6a2109201c21032004201c4b0d000c080b0b2015200341d8a3c800103f000b2014200341e8a3c800103f000b2019200341f8a3c8001059000b2003200e41f8a3c800104f000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b2010201a200210c908220320026a210402400240201b4101480d002007201b4a0d010b20032103201a21020c010b200c20066a211c20032103201a2102034020012802002206280208220741016a41004c0d022006200736020820032802002207280208220941016a41004c0d042006280250210620072009360208200220012003200620072802504922061b2802003602002003200341046a20061b2103200241046a2102200141046a200120061b2201201c4f0d01200420034b0d000b0b20022003200420036b417c7110c9081a20052802c802220320144d0d0320052802c002220220166a22012017201b6a36020420012019360200200320154d0d04200220186a2201200141086a20032015417f736a41037410ca081a20052003417f6a22033602c802200341014d0d050c010b0b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b41fcaec8004118200541e0016a41a0bec00041b0bec0001040000b201420034188a4c800103f000b201520031047000b2013450d020c000b0b2003200941c8a3c8001059000b024020052802c40241ffffffff0171450d002002102c0b200f450d012010102c0c010b200e4102490d00200e417e6a210341022102200e410274200c6a41786a21010340200e2003490d022001200210bd012001417c6a2101200241016a21022003417f6a2203417f470d000b0b200528022822172005280230221041e0006c22026a2106200528022c2118201721032010450d0220054190026a4104722113200241a07f6a2104200541c0026a41346a21022017210302400340200541e0016a41286a2207200341286a290300370300200541e0016a41206a2209200341206a290300370300200541e0016a41186a221c200341186a290300370300200541e0016a41106a221d200341106a290300370300200541e0016a41086a221a200341086a290300370300200520032903003703e001200341306a2802002101200541386a41086a221b2003413c6a290200370300200541386a41106a2214200341c4006a290200370300200541386a41186a2215200341cc006a290200370300200541386a41206a2219200341d4006a290200370300200541386a41286a2216200341dc006a2802003602002005200341346a290200370338024020010d00200341e0006a21030c050b200541c0026a41286a2007290300370300200541c0026a41206a2009290300370300200541c0026a41186a201c290300370300200541c0026a41106a201d290300370300200541c0026a41086a201a29030037030020022005290338370200200241086a201b290300370200200241106a2014290300370200200241186a2015290300370200200241206a2019290300370200200241286a2016280200360200200520052903e0013703c002200520013602f00220054190026a200541c0026a10e30620052802900222010d01200441a07f6a2104200341e0006a22032006470d000b200621030c030b200541b8016a41086a201341086a2902002208370300200541b8016a41106a201341106a290200220a370300200541b8016a41186a201341186a290200221e37030020054190016a41206a2202201341206a29020037030020054190016a41186a2207201e37030020054190016a41106a2209200a37030020054190016a41086a221c20083703002005201329020022083703b8012005200837039001412c1032221f450d04201f2001360200201f200529039001370204201f410c6a201c290300370200201f41146a2009290300370200201f411c6a2007290300370200201f41246a2002290300370200024020040d004101212041012121200621030c020b200341e0006a211d200541c0026a41346a210220054190026a4104722116201041e0006c20176a41a07f6a2113410121204101212102400340201d210302400340200541e0016a41286a2204200341286a290300370300200541e0016a41206a2207200341206a290300370300200541e0016a41186a2209200341186a290300370300200541e0016a41106a221c200341106a290300370300200541e0016a41086a221d200341086a290300370300200520032903003703e001200341306a2802002101200541386a41086a221a2003413c6a290200370300200541386a41106a221b200341c4006a290200370300200541386a41186a2214200341cc006a290200370300200541386a41206a2215200341d4006a290200370300200541386a41286a2219200341dc006a2802003602002005200341346a290200370338024020010d00200341e0006a21030c060b200541c0026a41286a2004290300370300200541c0026a41206a22042007290300370300200541c0026a41186a22072009290300370300200541c0026a41106a2209201c290300370300200541c0026a41086a221c201d29030037030020022005290338370200200241086a201a290300370200200241106a201b290300370200200241186a2014290300370200200241206a2015290300370200200241286a2019280200360200200520052903e0013703c002200520013602f00220054190026a200541c0026a10e30620052802900222010d01200341e0006a22032006470d000b200621030c040b200541b8016a41086a201641086a2902002208370300200541b8016a41106a201641106a290200220a370300200541b8016a41186a201641186a290200221e37030020054190016a41206a221d201641206a29020037030020054190016a41186a221a201e37030020054190016a41106a221b200a37030020054190016a41086a221420083703002005201629020022083703b80120052008370390012004201d2903003703002007201a2903003703002009201b290300370300201c201429030037030020052005290390013703c002024020212020470d00202041016a221d2020490d082020410174221a201d201a201d4b1b221d4104201d41044b1bad422c7e2208422088a7221a0d082008a7221d4100480d08201a45410274211b2020412c6c201020201b211002400240024002400240201f410020201b221a0d00201d450d010c030b20100d01201d0d020b201b211f0c020b201a2010201d1035221f0d010c040b201d1032221f450d030b201d412c6e21200b200341e0006a211d201f2021412c6c6a221a2001360200201a20052903c002370204201a410c6a201c290300370200201a41146a2009290300370200201a411c6a2007290300370200201a41246a2004290300370200202141016a212120132003470d000b200621030c020b201b0d040c050b2003200e41a8a3c8001058000b024020062003460d00034002402003220441386a2802002203450d00200341d8006c2102200428023041306a21030340200328020022012001280200417f6a3602000240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220141046a2802000d002001102c0b200341d8006a2103200241a87f6a22020d000b0b200441e0006a21030240200441346a2802002202450d0020042802302201450d00200241d8006c450d002001102c0b20032006470d000b0b2018450d01201841e0006c450d012017102c0c010b024020062003460d00034002402003220441386a2802002203450d00200341d8006c2102200428023041306a21030340200328020022012001280200417f6a3602000240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220141046a2802000d002001102c0b200341d8006a2103200241a87f6a22020d000b0b200441e0006a21030240200441346a2802002202450d0020042802302201450d00200241d8006c450d002001102c0b20032006470d000b0b4104211f4100212102402018450d00201841e0006c450d002017102c0b410021200b2005410036029001201f2021412c6c6a2122201f212302400340024002400240024002400240024002400240202322242022460d002024280200210120242802082102200541003602c001200542043703b801200541b8016a4100200210950220052802c001210420052802b80121030240200241246c2206450d00200141206a2102200320044102746a2101034020012002280200360200200241246a2102200441016a2104200141046a21012006415c6a22060d000b0b200520043602c0012005410036024020054208370338200541386a41002004109c05200528024021182005280238210602402004450d0020044102742101200620184103746a2102034020022003350200370300201841016a2118200241086a2102200341046a21032001417c6a22010d000b0b2024412c6a21232005201836024042002108201841037422042103200621020340024020030d00024020180d004100210741082109410021010c0a0b428094ebdc0320082008428094ebdc035422251b2008428094ebdc0320251b7d2226500d03410021272005410036029802200542083703900220054190026a4100201810ac0120262018ad222882211e202620288021292005280290022210200528029802222a4104746a220241706a21030340200341186a2006290300370300200341106a220320273602002002220141106a2102202741016a2127200641086a2106200441786a22040d000b2005202a20276a220f36029802200f4115490d06200f410176220341ffffffff00712003470d0e2003410474222b417f4c0d0e202b1032222c450d0d41002103200541003602e801200542043703e001201041706a212d201041586a212e200f211703400240024020172207417f6a22020d0041012106410021170c010b024002400240024002400240201020024104746a41086a2903002007410474221b20106a41686a2903002208540d002007417e6a2106202e201b6a210141002117410021020340024020062002470d00200721060c080b200241016a210220082001290300220a5a2104200141706a2101200a210820040d000b200241016a21062002417f7320076a21020c010b202e201b6a210102400340024020024101470d00410021020c020b2002417f6a210220082001290300220a542104200141706a2101200a210820040d000b0b20072002490d022007200f4b0d01200720026b22064101762209450d00201020024104746a2101202d201b6a21040340200541c0026a41086a221c200141086a221d290300370300200520012903003703c002200441086a221a290300210820012004290300370300201d2008370300201a201c290300370300200420052903c002370300200141106a2101200441706a21042009417f6a22090d000b0b024020020d00200221170c050b0240200641094d0d00200221170c050b2007200f4b0d02200720026b2101201020024104746a2109202d201b6a211a034020072002417f6a2217490d0b0240200720176b22064102490d00201020024104746a220341086a2204290300201020174104746a220241086a221c29030022085a0d002002280200211d20022003290300370300201c2004290300370300024020064103490d002001417f6a211c410021022009210302400340200341186a220429030020085a0d0220012002460d01200341086a20042903003703002003200341106a220429030037030020042103201c200241016a2202470d000b201a21030c010b200241016a2006419ca5c800103f000b200320083703082003201d3602000b2017450d04200141016a2101200941706a2109201721022006410a490d000c040b0b2007202a20276a41b8a3c800104f000b2002200741b8a3c8001059000b20072002417f6a2217490d072007202a20276a41c8a3c800104f000b20052802e80121030b0240200320052802e401470d00200541e0016a10ae0120052802e80121030b20052802e001220220034103746a22012006360204200120173602002005200341016a22033602e801024020034102490d0002400340024002400240024020022003417f6a4103746a2201280200450d00200341037420026a220741746a2802002206200128020422044d0d00200341024d0d0620022003417d6a22154103746a2802042201200420066a4d0d01200341034d0d06200741646a280200200120066a4b0d060c010b20034103490d012001280204210420022003417d6a22154103746a28020421010b20012004490d010b2003417e6a21150b0240024002400240024002402003201541016a22194d0d00200320154d0d012002201541037422136a2203280204221120032802006a22012002201941037422126a22032802002216490d022001200f4b0d03201020164104746a221b2003280204221441047422026a210320014104742104200120166b220620146b220120144f0d04202c20032001410474220210c908221d20026a21070240024020144101480d00200141014e0d010b201d2109200321020c060b202d20046a2106200321022007210403402006200341706a221c200441706a2209200441786a290300200341786a2903005422011b221a290300370300200641086a201a41086a290300370300201c200220011b21022007200920011b210702402004200920011b2204201d4b0d00201d21090c070b200641706a2106201d2109201b201c200320011b2203490d000c060b0b2019200341d8a3c800103f000b2015200341e8a3c800103f000b2016200141f8a3c8001059000b2001202a20276a41f8a3c800104f000b202c201b200210c908220120026a21070240024020144101480d00200620144a0d010b20012109201b21020c010b201020046a211c2001210920012101201b2102034002400240200341086a290300200141086a290300540d00200141106a22092104200321060c010b200341106a210620012104200321010b20022001290300370300200241086a200141086a290300370300200241106a2102200420074f0d0120042101200621032006201c490d000b0b20022009200720096b41707110c9081a024020052802e801220320154d0d0020052802e001220220136a2201201120146a36020420012016360200200320194d0d02200220126a2201200141086a20032019417f736a41037410ca081a20052003417f6a22033602e801200341014d0d030c010b0b201520034188a4c800103f000b201920031047000b2017450d060c000b0b200341786a2103200820022903007c220a2008542101200241086a2102200a21082001450d000b200528023c2203410374202f20031b212f02402005280238410020031b2203450d00202f450d002003102c0b411e21074186a7c80021020c080b02402005280290012202450d0020052802940121070c0a0b2005410036029802200542083703900220054190026a4100200e10e00120052802980221060240024002400240200e41027422030d00200c21020c010b200c20036a2115200e4102742107200528029002200641306c6a2101200541c0026a41086a2109200541c0026a41106a211c200541c0026a41186a211d200c2102024003402002220341046a210220032802002203450d012003280208220441016a221a41004c0d032003201a3602082009200341dc006a290000370300201c200341e4006a290000370300201d200341ec006a2900003703002005200341d4006a2900003703c002200441026a41004c0d0420032004360208200541e0016a41086a22042009290300370300200541e0016a41106a221a201c290300370300200541e0016a41186a221b201d290300370300200520052903c0023703e001200341c8006a29030021082003290340210a20032003280200417f6a2214360200024020140d00200341046a22142014280200417f6a221436020020140d002003102c0b200120052903e0013703002004290300211e201a2903002129201b2903002130200141286a2008370300200141206a200a370300200141186a2030370300200141106a2029370300200141086a201e370300200141306a2101200641016a21062007417c6a22070d000b201521020b201520026b2203410275210e0b200520063602980202402003450d00200e41027421030340200228020022012001280200417f6a3602000240200228020022012802000d00200141046a22012001280200417f6a3602002002280200220141046a2802000d002001102c0b200241046a21022003417c6a22030d000b0b0240200c4100200b1b2203450d00200b41ffffffff0371450d002003102c0b200020052903900237020420004100360200200041186a2021360200200041146a2020360200200041106a201f3602002000410c6a20054198026a2802003602000c0e0b41fcaec8004118200541e0016a41a0a4c70041b0a4c7001040000b41fcaec8004118200541e0016a41a0a4c70041c0a4c7001040000b201841ffffffff01712018470d0a20184103742203417f4c0d0a200310322202450d09200541003602c802200520023602c002200520034103763602c402200541c0026a41002018109c0520052802c002220920052802c80222024103746a2006200310c9081a200220186a21010c040b2017200741c8a3c8001059000b20052802e4012203410374203120031b213102402003450d002031450d002002102c0b202b2032202b1b2132202b450d012032450d01202c102c0c010b200f4102490d00200f417f6a2106410021070340024002400240200f20062202417f6a2206490d00200f20066b221d4102490d02201020024104746a220241086a2209290300201020064104746a220441086a221c29030022085a0d022004280200211a20042002290300370300201c2009290300370300201d4103490d012007417f6a211c410021042001210202400340200241186a220929030020085a0d03201c2004460d01200241086a20092903003703002002200241106a22092903003703002009210220072004417f6a2204470d000b200321020c020b410120046b201d419ca5c800103f000b2006202a20276a41a8a3c8001058000b200220083703082002201a3602000b2007417f6a2107200141706a210120060d000b0b024002400240024002400240024002400240024002400240024002402025450d00428094ebdc03202880213041002103024020262028540d00410021032005280298022104201821020340200420034d0d0320052802900220034104746a2201290308220a20297c2208200a540d04200141086a2008370300024020082030540d00200341016a20187021030b2002417f6a22020d000b0b201e4200520d06200528029802211220052802900221100c070b02402005280298022212450d00200528029002221029030821302018417f6a22012103024020262028540d000340201220034d0d05201020034104746a220242002002290308220820297d220a200a20085622021b200a20021b220a370308200320012003417f6a2204200420034b1b200a2030561b2103201e202920087d420020021b7c211e2018417f6a22180d000b0b201e500d070340201220034d0d05024002402010200341047422026a22042903082208427f7c220a2008580d0020012003417f6a2202200220034b1b21030c010b200441086a200a370300200528029802221220034d0d07200320012003417f6a2204200420034b1b200528029002221020026a2903082030561b2103201e427f7c211e0b201e4200520d000c080b0b41a4a7c800413f41e4a7c800105c000b2003200441f4a7c800103f000b4184a8c800412641aca8c800105c000b2003201241dca8c800103f000b2003201241fca8c800103f000b20032012418ca9c800103f000b20052802980221120340201220034d0d03200528029002221020034104746a2202290308220a42017c2208200a540d02200241086a2008370300024020082030540d00200341016a20187021030b201e427f7c221e50450d000b0b20124115490d042012410176220341ffffffff00712003470d0c2003410474222d417f4c0d0c202d1032220f450d0b41002103200541003602e801200542043703e001201041706a2127201041506a212c2012211703400240024020172209417f6a22020d0041012107410021170c010b024002400240024002400240201020024104746a2802002009410474221b20106a41606a2802002201490d002009417e6a211c202c201b6a2104410021174100210203400240201c2002470d00200921070c080b200241016a21022001200428020022064f2107200441706a21042006210120070d000b200241016a21072002417f7320096a21020c010b202c201b6a210402400340024020024101470d00410021020c020b2002417f6a2102200120042802002206492107200441706a21042006210120070d000b0b20092002490d02200920124b0d01200920026b22074101762206450d00201020024104746a21012027201b6a21040340200541c0026a41086a221c200141086a221d290300370300200520012903003703c002200441086a221a290300210820012004290300370300201d2008370300201a201c290300370300200420052903c002370300200141106a2101200441706a21042006417f6a22060d000b0b024020020d00200221170c050b0240200741094d0d00200221170c050b200920124b0d02200920026b2104201020024104746a211c2027201b6a211a034020092002417f6a2217490d090240200920176b22074102490d00201020024104746a2203280200201020174104746a220228020022064f0d002002200329030037030020022903082108200241086a200341086a290300370300024020074103490d002004417f6a211d41002102201c210302400340200341106a220128020020064f0d0220042002460d01200341086a200341186a2903003703002003200129030037030020012103201d200241016a2202470d000b201a21030c010b200241016a2007419ca5c800103f000b20032008370308200320063602000b2017450d04200441016a2104201c41706a211c201721022007410a490d000c040b0b2009201241b8a3c800104f000b2002200941b8a3c8001059000b20092002417f6a2217490d052009201241c8a3c800104f000b20052802e80121030b0240200320052802e401470d00200541e0016a10ae0120052802e80121030b20052802e001220220034103746a22012007360204200120173602002005200341016a22033602e801024020034102490d0002400340024002400240024020022003417f6a4103746a2201280200450d00200341037420026a220741746a2802002206200128020422044d0d00200341024d0d0620022003417d6a22154103746a2802042201200420066a4d0d01200341034d0d06200741646a280200200120066a4b0d060c010b20034103490d012001280204210420022003417d6a22154103746a28020421010b20012004490d010b2003417e6a21150b0240024002400240024002402003201541016a22194d0d00200320154d0d012002201541037422186a2203280204221320032802006a22012002201941037422116a22032802002216490d02200120124b0d03201020164104746a221b2003280204221441047422026a210320014104742104200120166b220620146b220120144f0d04200f20032001410474220210c908221d20026a21090240024020144101480d00200141014e0d010b201d211a200321020c060b202720046a2104200321022009211c03402004200341706a2207201c41706a2206200628020020072802004922011b221a290300370300200441086a201a41086a2903003703002007200220011b21022009200620011b21090240201c200620011b221c201d4b0d00201d211a0c070b200441706a2104201d211a201b2007200320011b2203490d000c060b0b2019200341d8a3c800103f000b2015200341e8a3c800103f000b2016200141f8a3c8001059000b2001201241f8a3c800104f000b200f201b200210c908220120026a21090240024020144101480d00200620144a0d010b2001211a201b21020c010b201020046a21072001211a20012101201b210203400240024020032802002001280200490d00200141106a221a2104200321060c010b200341106a210620012104200321010b20022001290300370300200241086a200141086a290300370300200241106a2102200420094f0d01200421012006210320062007490d000b0b2002201a2009201a6b41707110c9081a024020052802e801220320154d0d0020052802e001220220186a2201201320146a36020420012016360200200320194d0d02200220116a2201200141086a20032019417f736a41037410ca081a20052003417f6a22033602e801200341014d0d030c010b0b201520034188a4c800103f000b201920031047000b2017450d040c000b0b4184a8c800412641cca8c800105c000b2003201241bca8c800103f000b2017200941c8a3c8001059000b20052802e4012203410374203320031b213302402003450d002033450d002002102c0b202d2034202d1b2134202d450d012034450d01200f102c0c010b20124102490d002012417f6a210441002106201020124104746a41706a221a21090340024002400240201220042203417f6a2204490d00201220046b221d4102490d02201020034104746a2203280200201020044104746a220228020022074f0d022002200329030037030020022903082108200241086a200341086a290300370300201d4103490d012006417f6a211c410021022009210302400340200341106a220128020020074f0d03201c2002460d01200341086a200341186a290300370300200320012903003703002001210320062002417f6a2202470d000b201a21030c020b410120026b201d419ca5c800103f000b2004201241a8a3c8001058000b20032008370308200320073602000b2006417f6a2106200941706a210920040d000b0b200541003602c802200542083703c00220052802900221072005280294022106200541c0026a41002005280298022203109c0520052802c802210120052802c002210902402003450d0020034104742104200741086a2103200920014103746a2102034020022003290300370300200341106a2103200141016a2101200241086a2102200441706a22040d000b0b200520013602c8022006410474203520061b21352006450d002035450d002007102c0b20052802c40221070b200541003602c802200542043703c002200541c0026a41002001410374220341037510950220052802c802210120052802c002211c02402003450d00200920036a2106201c20014102746a2103200921020340200320022903002208a7417f2008428080808010541b2204418094ebdc032004418094ebdc03491b360200200141016a2101200341046a21032006200241086a2202470d000b0b200520013602c8022007410374203620071b213602402007450d002036450d002009102c0b200528023c2203410374203720031b213720052802c402210402402005280238410020031b2203450d002037450d002003102c0b0240200120242802082203200320014b1b2201450d00202428020041206a2103201c2102034020032002280200360200200241046a2102200341246a21032001417f6a22010d000b0b2004410274203820041b2138410021022004450d002038450d00201c102c0b20052802bc012203410274203920031b2139024020052802b801410020031b2203450d002039450d002003102c0b2002450d000b0b2000200236020420004101360200200041086a200736020002402021450d002021412c6c2102201f210303400240200341046a2802002201450d00200141246c450d002003280200102c0b2003412c6a2103200241546a22020d000b0b02402020450d002020412c6c450d00201f102c0b0240200d450d00200e4102742102200c21030340200328020022012001280200417f6a3602000240200328020022012802000d00200141046a22012001280200417f6a3602002003280200220141046a2802000d002001102c0b200341046a21032002417c6a22020d000b0b200c4100200b1b2203450d02200b41ffffffff0371450d022003102c0c020b1039000b103b000b200541a0036a24000bbe0703027f017e037f230041b0026b22022400200241186a200141186a290200370300200241106a200141106a290200370300200241086a200141086a29020037030020022001290200370300200241f0016a200210c10702400240024020022802a0020d00200241e0016a41003602000c010b200241d0006a41386a200241f0016a41386a290300370300200241d0006a41306a200241f0016a41306a290300370300200241d0006a41286a200241f0016a41286a290300370300200241d0006a41206a200241f0016a41206a290300370300200241d0006a41186a200241f0016a41186a290300370300200241d0006a41106a200241f0016a41106a290300370300200241d0006a41086a200241f0016a41086a290300370300200220022903f001370350200241a0016a2002411c6a200241d0006a10a504200241e0016a280200450d0002400240417f2002280218220141016a220320032001491bad42d0007e2204422088a70d002004a72201417f4c0d00200110322205450d012005200241a0016a41d00010c9082103200241013602282002200141d0006e36022420022003360220200241306a41186a200241186a290300370300200241306a41106a200241106a290300370300200241306a41086a200241086a29030037030020022002290300370330200241f0016a200241306a10c1070240024020022802a002450d00200241cc006a210641d0002103410121010340200241a0016a41386a200241f0016a41386a290300370300200241a0016a41306a200241f0016a41306a290300370300200241a0016a41286a200241f0016a41286a290300370300200241a0016a41206a200241f0016a41206a290300370300200241a0016a41186a200241f0016a41186a290300370300200241a0016a41106a200241f0016a41106a290300370300200241a0016a41086a200241f0016a41086a290300370300200220022903f0013703a001200241d0006a2006200241a0016a10a504200228029001450d02200241a0016a200241d0006a41d00010c9081a024020012002280224470d00200241206a2001417f2002280248220541016a220720072005491b10d604200228022021050b200520036a200241a0016a41d00010c9081a2002200141016a2201360228200341d0006a2103200241f0016a200241306a10c10720022802a0020d000b0b20024100360290010b200241306a10ff01200041086a200241206a41086a280200360200200020022903203702000c030b103b000b1039000b2000410036020820004208370200200210ff010b200241b0026a24000bdf0301057f230041306b22002400200041186a22014200370300200041106a22024200370300200041086a2203420037030020004200370300200041206a41e6dcc700410710c5012003200041206a41086a220429000037030020002000290020370300200041206a41a08ec100411110c5012001200429000037030020022000290020370300200041002000109c0420014200370300200242003703002003420037030020004200370300200041206a41e6dcc700410710c5012003200429000037030020002000290020370300200041206a41ec8ec100411210c50120012004290000370300200220002900203703002000412010b40120014200370300200242003703002003420037030020004200370300200041206a41e6dcc700410710c5012003200429000037030020002000290020370300200041206a41fe8ec100411210c50120012004290000370300200220002900203703002000412010b40120014200370300200242003703002003420037030020004200370300200041206a41e6dcc700410710c5012003200429000037030020002000290020370300200041206a41bcc6c200411510c5012001200429000037030020022000290020370300200041003a002020004120200041206a410110a702200041306a24000be70301057f230041d0006b22032400200341086a41e6dcc700410710c501200341186a41e4bcc200411210c50120032001360234200341386a200341346a410410c701200341cc006a200341346a41046a3602002003200341c0006a3602442003200341346a3602482003200341386a360240200341286a200341c0006a107e200341c0006a200210e4020240024020032802302201200328024822046a41206a2202417f4c0d000240024020020d00410121050c010b200210322205450d020b2000200236020420002005360200200041086a2202410036020020004100411010c8012000280200200228020022056a220620032900083700002002200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200228020022056a220620032900183700002002200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200110c8012000280200200228020022066a2005200110c9081a2002200620016a22063602002003280240210120002006200410c8012000280200200228020022006a2001200410c9081a2002200020046a36020002402003280244450d002001102c0b0240200328022c450d002005102c0b200341d0006a24000f0b103b000b1039000bce0201037f230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00410021020c010b200328021421042003200341186a280200360224200320013602202003200341206a1087020240024020032802000d00200328020421022003418094ebdc0336024c20032002360248200341c8006a2002418094ebdc034b4102746a2802002105410121020c010b4100210220034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b0b2004450d002001102c0b2000200536020420002002360200200341e0006a24000be70301057f230041d0006b22032400200341086a41e6dcc700410710c501200341186a41e0bdc200411210c50120032001360234200341386a200341346a410410c701200341cc006a200341346a41046a3602002003200341c0006a3602442003200341346a3602482003200341386a360240200341286a200341c0006a107e200341c0006a200210e4020240024020032802302201200328024822046a41206a2202417f4c0d000240024020020d00410121050c010b200210322205450d020b2000200236020420002005360200200041086a2202410036020020004100411010c8012000280200200228020022056a220620032900083700002002200541106a2205360200200641086a200341086a41086a29000037000020002005411010c8012000280200200228020022056a220620032900183700002002200541106a2207360200200641086a200341186a41086a2900003700002003280228210520002007200110c8012000280200200228020022066a2005200110c9081a2002200620016a22063602002003280240210120002006200410c8012000280200200228020022006a2001200410c9081a2002200020046a36020002402003280244450d002001102c0b0240200328022c450d002005102c0b200341d0006a24000f0b103b000b1039000baf0101047f230041106b220324002003410036020820034201370300200341004101102f20032802002204200328020822056a21060240024020014101460d00200641003a0000200541016a21010c010b200641013a00002003200541016a2204360208200320044104102f20032802002204200328020822016a2002360000200141046a21010b20032001360208200041202004200110a70202402003280204450d002004102c0b200341106a24000b0e002001ad4220862000ad8410200bb52903057f017e157f230041f0016b2201240020014198016a2202420037030020014180016a41106a2203420037030020014180016a41086a220442003703002001420037038001200141e0006a41e6dcc700410710c5012004200141e0006a41086a22052900003703002001200129006037038001200141e0006a4188bbc200410910c5012002200529000037030020032001290060370300200141086a20014180016a10cb032001411c6a2802002102200129031021060240024020012903084202510d00200141086a41106a28020041016a21070c010b410021070b200141086a41106a20073602002001200236021c200120063703102001420037030820014198016a2205420037030020014180016a41106a2208420037030020014180016a41086a220242003703002001420037038001200141e0006a41e6dcc700410710c5012002200141e0006a41086a22042900003703002001200129006037038001200141e0006a4188bbc200410910c501200341086a22092004290000370000200320012900603700002001410036026820014201370360200141e0006a41004104102f20012802602001280268220a6a20073600002001200a41046a360268200141e0006a200141086a109f0420014180016a41202001280260220a200128026810a70202402001280264450d00200a102c0b2005420037030020084200370300200242003703002001420037038001200141e0006a41e6dcc700410710c501200220042900003703002001200129006037038001200141e0006a41c8c1c200410a10c5012009200429000037000020032001290060370000200141086a20014180016a108a04024002400240200128020822040d0041002102200141003602e001200142043703d8010c010b2001200129020c22063702dc01200120043602d8012006422088a722022006a7470d010b200141d8016a200210bc0320012802e001210220012802d80121040b200420024103746a2202200036020420022007360200200120012802e001220241016a220b3602e001024002400240024002402007411c4b0d0020012802d801210c0c010b20012802d801210c02400240200b0d004100210d200141003602e001200c210e200c21020c010b200741646a2104200241ffffffff017141016a21004100210d200c210202400340200228020020044f0d01200241086a21022000200d41016a220d470d000b2000210d0b02400240200b200d490d00200141003602e001200c200d41037422096a210e0240200d0d00200c21020c020b200141ec016a41046a210a200141e4016a41086a210f200c2102034020022802002105200141e0006a41e6dcc700410710c501200141086a41be92c100411310c501200120053602ec01200141e4016a200141ec016a410410c7012001200a36028c012001200f360284012001200141ec016a360288012001200141e4016a36028001200141c0006a20014180016a107e2001280248220441206a2200417f4c0d060240024020000d00410121080c010b200010322208450d060b20014100360288012001200036028401200120083602800120014180016a4100411010c80120012802800120012802880122006a22082001290060370000200841086a200141e0006a41086a22102900003700002001200041106a22003602880120014180016a2000411010c80120012802800120012802880122006a22082001290008370000200841086a200141086a41086a22112900003700002001200041106a2208360288012001280240210020014180016a2008200410c801200128028001220820012802880122126a2000200410c9081a2001201220046a22043602880102402001280244450d002000102c0b20082004109d040240200128028401450d002008102c0b200141e0006a41e6dcc700410710c501200141086a41ab92c100411310c501200120053602ec01200141e4016a200141ec016a410410c7012001200a36028c012001200f360284012001200141ec016a360288012001200141e4016a36028001200141c0006a20014180016a107e2001280248220441206a2200417f4c0d060240024020000d00410121050c010b200010322205450d060b20014100360288012001200036028401200120053602800120014180016a4100411010c80120012802800120012802880122006a22052001290060370000200541086a20102900003700002001200041106a22003602880120014180016a2000411010c80120012802800120012802880122006a22052001290008370000200541086a20112900003700002001200041106a2205360288012001280240210020014180016a2005200410c801200128028001220520012802880122086a2000200410c9081a2001200820046a22043602880102402001280244450d002000102c0b200241086a210220052004109d040240200128028401450d002005102c0b200941786a2209450d020c000b0b200d200b41d089c500104f000b200b200d6b210b2002200e460d000340200e200241086a2202470d000b0b200e20026b2102024003402002450d01200241786a21020c000b0b0240200b0d004100210b0c010b0240200d450d00200c200c200d4103746a200b41037410ca081a0b2001200b3602e001200c280204211120014198016a2202420037030020014190016a2210420037030020014180016a41086a220442003703002001420037038001200141086a41ffdcc700410710c5012004200141086a41086a22002900003703002001200129000837038001200141086a41afaec000410b10c5012002200029000037030020102001290008370300200141086a20014180016a412010a004200129020c210641002102024020012802084101470d0002402006422088a722122011201120124b1b22092006a722024f0d00410121020c010b0240200920024d0d00200141ec016a41046a210a200141e4016a41086a210f0340200141e0006a41ffdcc700410710c501200141086a41ddecc400411210c501200120023602ec01200141e4016a200141ec016a410410c7012001200a36028c012001200f360284012001200141ec016a360288012001200141e4016a36028001200141c0006a20014180016a107e2001280248220441206a2200417f4c0d050240024020000d00410121050c010b200010322205450d050b20014100360288012001200036028401200120053602800120014180016a4100411010c80120012802800120012802880122006a22052001290060370000200541086a200141e0006a41086a2900003700002001200041106a22003602880120014180016a2000411010c80120012802800120012802880122006a22052001290008370000200541086a200141086a41086a2900003700002001200041106a2205360288012001280240210020014180016a2005200410c801200128028001220520012802880122086a2000200410c9081a2001200820046a22043602880102402001280244450d002000102c0b200241016a21022005200410b4010240200128028401450d002005102c0b20092002470d000b0b201120124921022006428080808070832009ad8421060b2001200637026420012002360260024020020d0020014198016a420037030020014190016a420037030020014180016a41086a220242003703002001420037038001200141086a41ffdcc700410710c5012002200141086a41086a22042900003703002001200129000837038001200141086a41afaec000410b10c501201041086a20042900003700002010200129000837000020014180016a412010b4010c010b20014198016a420037030020014190016a420037030020014180016a41086a220242003703002001420037038001200141086a41ffdcc700410710c5012002200141086a41086a22042900003703002001200129000837038001200141086a41afaec000410b10c501201041086a20042900003700002010200129000837000020014180016a4120200141e0006a41047210a1040b20012802dc01210920014198016a420037030020014190016a420037030020014180016a41086a220242003703002001420037038001200141e0006a41e6dcc700410710c5012002200141e0006a41086a22042900003703002001200129006037038001200141e0006a41c8c1c200410a10c501200341086a20042900003700002003200129006037000002400240200c0d0020014180016a412010b4010c010b200b4103744104722202417f4c0d02200210322204450d01200141003602102001200236020c20012004360208024002400240200b41c000490d00024002400240200b41808001490d00200b418080808004490d01200141086a41004101102f2001280208200128021022026a41033a00002001200241016a2202360210200141086a20024104102f2001280208200128021022026a200b360000200241046a21040c020b200141086a41004102102f2001280208200128021022026a200b4102744101723b0000200241026a21040c010b200141086a41004104102f2001280208200128021022026a200b410274410272360000200241046a21040b20012004360210200c200b4103746a21080c010b200141086a41004101102f20012802082205200128021022026a200b4102743a00002001200241016a2204360210200b450d01200c200b4103746a21080b200c2102034020022802002100200141086a20044104102f2001280208200128021022046a20003600002001200441046a2204360210200241046a2802002100200141086a20044104102f20012802082205200128021022046a20003600002001200441046a2204360210200241086a22022008470d000b0b20014180016a41202005200410a7020240200128020c450d002005102c0b2009450d00200941ffffffff0171450d00200c102c0b20014198016a420037030020014190016a420037030020014180016a41086a220242003703002001420037038001200141e0006a41e6dcc700410710c5012002200141e0006a41086a22042900003703002001200129006037038001200141e0006a4188c4c200411610c501200341086a200429000037000020032001290060370000200120014180016a412010c60120012802042113024020012802004101460d00410021020c030b024020134100200741656a2202200220074b1b22144f0d00200141e4016a41046a2115200141d8016a41086a211620014180016a41246a210420014180016a41286a2111201321170340200141e0006a41e6dcc700410710c501200141086a41f0c0c200411010c501200120173602e401200141d8016a200141e4016a410410c7012001201536028c0120012016360284012001200141e4016a360288012001200141d8016a36028001200141c0006a20014180016a107e2001280248220241206a2200417f4c0d030240024020000d00410121050c010b200010322205450d030b200141003602e001200120003602dc01200120053602d801200141d8016a4100411010c80120012802d80120012802e00122006a22052001290060370000200541086a200141e0006a41086a220f2900003700002001200041106a22003602e001200141d8016a2000411010c80120012802d80120012802e00122006a22052001290008370000200541086a200141086a41086a22102900003700002001200041106a22003602e00120012802402105200141d8016a2000200210c80120012802d801220020012802e00122086a2005200210c9081a2001200820026a22023602e00102402001280244450d002005102c0b20014180016a200020021091040240024020012802800122180d0041082118420021060c010b2000200210b40120012902840121060b024020012802dc01450d002000102c0b20182006422088a7220241d8006c6a21080240024020020d00201821000c010b201821020340200141e0006a41186a2212200241186a290300370300200141e0006a41106a220d200241106a290300370300200f200241086a29030037030020012002290300370360200241206a280200210020014180016a41086a22052002412c6a29020037030020014180016a41106a2209200241346a29020037030020014180016a41186a220a2002413c6a29020037030020014180016a41206a220e200241c4006a2902003703002011200241cc006a29020037030020014180016a41306a220b200241d4006a2802003602002001200241246a29020037038001024020000d00200241d8006a21000c020b200141c0006a41186a22072012290300370300200141c0006a41106a2212200d290300370300200141c0006a41086a220d200f29030037030020102005290300370300200141086a41106a220c2009290300370300200141086a41186a2219200a290300370300200141086a41206a221a200e290300370300200141086a41286a220e2011290300370300200141086a41306a221b200b280200360200200120012903603703402001200129038001370308200a2007290300370300200920122903003703002005200d29030037030020042001290308370200200441086a2010290300370200200441106a200c290300370200200441186a2019290300370200200441206a201a290300370200200441286a200e290300370200200441306a201b2802003602002001200129034037038001200120003602a00120014180016a10a204200241d8006a22022008470d000b200821000b2006a72109024020082000460d00034002402000220241246a2802002200450d00200041306c450d00200241206a280200102c0b200241d8006a21000240200241306a2802002205450d00200541ffffff3f71450d002002412c6a280200102c0b20082000470d000b0b201741016a211702402009450d00200941d8006c450d002018102c0b20172014470d000b0b20132014201320144b1b2113410121020c020b1039000b103b000b200120023602082001201336020c20014198016a420037030020014190016a420037030020014180016a41086a220442003703002001420037038001200141e0006a41e6dcc700410710c5012004200141e0006a41086a22002900003703002001200129006037038001200141e0006a4188c4c200411610c501200341086a2000290000370000200320012900603700000240024020020d0020014180016a412010b4010c010b2001201336026020014180016a4120200141e0006a410410a7020b200141f0016a24000b9c0102027f017e024020012903004201510d002000200041086a22022802004101102f200028020020022802006a41003a00002002200228020041016a3602000f0b2000200041086a22022802004101102f200028020020022802006a41013a00002002200228020041016a220336020020012903082104200020034108102f200028020020022802006a20043700002002200228020041086a3602000b920201027f230041d0006b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822010d00200041003602000c010b200328020c2102024002400240200341106a28020022044104490d002004417c714104470d010b4100210420034100360220200342013703182003410f36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b4bcc3003602382003200341286a360248200341346a41dcb7c000200341386a103e1a20033502204220862003350218841000200328021c450d012003280218102c0c010b20002001290000370204410121040b200020043602002002450d002001102c0b200341d0006a24000ba80101037f230041106b220324000240410810322204450d00200342083702042003200436020020022802002104200341004104102f2003280200200328020822056a20043600002003200541046a220436020820022802042105200320044104102f20032802002202200328020822046a20053600002003200441046a2204360208200020012002200410a70202402003280204450d002002102c0b200341106a24000f0b1039000bf30f05057f087e017f027e027f230041c0016b2201240020014200370378200142003703702001200041186a290300370388012001200029031037038001200041386a2000290300200041086a29030020014180016a200141f0006a10a508200028022021020240200041286a2802002203450d00200341306c21042002210303402003200341206a290300200341286a29030020014180016a200141f0006a10a508200341306a2103200441506a22040d000b0b200028022c2105200141f0006a41086a2903002106200129037021070240024002400240200129038001220820014180016a41086a290300220984500d00200041346a2802002203450d00200141e0006a200720082007200854200620095420062009511b22041b220a2006200920041b220b2003ad420010c80820034105742104200141e8006a290300210c2001290360210d200a2109200b21082005210303402003200d20092009200d562008200c562008200c511b220e1b220f200c2008200e1b221010d006200820107d2009200f54ad7d21082009200f7d2109200341206a2103200441606a22040d000b427f2006200b7d2007200a54ad7d220c20087c2007200a7d220f20097c2210200f542203ad7c220d2003200d200c54200d200c511b22031b2107427f201020031b210d200f200984200c200884844200520d01200141a8016a2203420037030020014190016a41106a2204420037030020014190016a41086a220e42003703002001420037039001200141b0016a41d4dcc700410810c501200e200141b0016a41086a2211290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200141306a20014190016a412010d301200141306a41106a290300210920012903382108200128023021122003420037030020044200370300200e42003703002001420037039001200141b0016a41d4dcc700410810c501200e2011290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200142002009420020121b220920077d2008420020121b2208200d54ad7d220c2008200d7d220f200856200c200956200c2009511b22031b3703b80120014200200f20031b3703b00120014190016a4120200141b0016a411010a7020c030b20072006844200520d01200141a8016a2203420037030020014190016a41106a2204420037030020014190016a41086a220e42003703002001420037039001200141b0016a41d4dcc700410810c501200e200141b0016a41086a2211290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200120014190016a412010d301200141106a290300210920012903082108200128020021122003420037030020044200370300200e42003703002001420037039001200141b0016a41d4dcc700410810c501200e2011290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b00137030020012009420020121b3703b80120012008420020121b3703b00120014190016a4120200141b0016a411010a7020c020b200141a8016a2203420037030020014190016a41106a2204420037030020014190016a41086a220e42003703002001420037039001200141b0016a41d4dcc700410810c501200e200141b0016a41086a2211290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200141c8006a20014190016a412010d301200141c8006a41106a290300210920012903502108200128024821122003420037030020044200370300200e42003703002001420037039001200141b0016a41d4dcc700410810c501200e2011290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200142002009420020121b220920077d2008420020121b2208200d54ad7d220c2008200d7d220f200856200c200956200c2009511b22031b3703b80120014200200f20031b3703b00120014190016a4120200141b0016a411010a7020c010b200141a8016a2203420037030020014190016a41106a2204420037030020014190016a41086a220e42003703002001420037039001200141b0016a41d4dcc700410810c501200e200141b0016a41086a2211290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200141186a20014190016a412010d301200141186a41106a290300210920012903202108200128021821122003420037030020044200370300200e42003703002001420037039001200141b0016a41d4dcc700410810c501200e2011290000370300200120012900b00137039001200141b0016a41bba8c700410d10c50120032011290000370300200420012900b001370300200142002009420020121b220920067d2008420020121b2208200754ad7d220c200820077d220f200856200c200956200c2009511b22031b3703b80120014200200f20031b3703b00120014190016a4120200141b0016a411010a7020b0240200041246a2802002203450d00200341306c450d002002102c0b0240200041306a28020041ffffff3f71450d002005102c0b200141c0016a24000bff0302057f017e23004180016b22022400200241206a41186a22034200370300200241206a41106a22044200370300200241206a41086a2205420037030020024200370320200241206a41e6dcc700410710c50120024188bbc200410910c5012003200241086a29000037030020042002290000370300200241e0006a200241206a10cb030240024020022903604202520d00200041003602200c010b200241d0006a200241e0006a41106a2206280200200110da03200241206a20022802502201200228025810a404200241e0006a41186a200329030037030020062004290300370300200241e0006a41086a200529030037030020022002290320370360200241cc006a280200210402400240200228024022030d0042002107200241186a4200370300200241106a420037030041082103200241086a4200370300200242003703000c010b200241086a200241e0006a41086a290300370300200241106a200241e0006a41106a290300370300200241186a200241e0006a41186a29030037030020022002290360370300200229024421070b02402002280254450d002001102c0b2000200229030037030020002007370224200020033602202000412c6a2004360200200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a2903003703000b20024180016a24000bfe0201017f230041f0006b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822010d00200041003602200c010b200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a10f6030240024020032802380d0020034100360258200342013703502003410f360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c200341b4bcc3003602182003200341e0006a360228200341ec006a41dcb7c000200341186a103e1a2003350258422086200335025084100002402003280254450d002003280250102c0b200041003602200c010b20002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000b2002450d002001102c0b200341f0006a24000b860a07047f017e027f017e027f087e037f230041f0016b22032400200241346a2802002104200241306a2802002105200241386a2802002106200341c0006a41186a200241186a290000370300200341c0006a41106a200241106a290000370300200341c0006a41086a200241086a29000037030020032002290000370340024002402006ad42307e2207422088a70d002007a72202417f4c0d000240024020020d00410821080c010b200210322208450d020b4100210920034100360268200320083602602003200241306e3602644200210a2003420037037820034200370370200342003703880120034200370380010240024020060d00420021070c010b200641306c210b2001280200210c4200210a42002107200521020340200241206a290300210d200241286a290300210e20034190016a41186a200241186a290300220f37030020034190016a41106a200241106a290300221037030020034190016a41086a200241086a290300221137030020032002290300221237039001200341306a200c2802002206290300200641086a290300427f420010c808200341106a200e42002003290330221342012013420156200341306a41086a29030022134200522013501b22061b2214420010ce0820032013420020061b22134200200d420010ce08200341206a200d42002014420010ce08200341b0016a41186a2201200f370300200341b0016a41106a22152010370300200341b0016a41086a22162011370300200320123703b001427f200341206a41086a290300220d200329031020032903007c7c220f200e420052201342005271200329031842005272200329030842005272200f200d547222061b210d427f200329032020061b210e02400240200341b0016a200341c0006a412010cc08450d00200341d0016a41186a22172001290300370300200341d0016a41106a22012015290300370300200341d0016a41086a22152016290300370300200320032903b0013703d001024020092003280264470d00200341e0006a2009410110e00120032802682109200328026021080b2008200941306c6a2206200d3703082006200e370300200620032903d001370310200641186a2015290300370300200641206a2001290300370300200641286a20172903003703002003200941016a2209360268427f20034180016a41086a2903002207200d7c200329038001220d200e7c220e200d542206ad7c220d2006200d200754200d2007511b22061b2107427f200e20061b210a0c010b200341f0006a41086a2206427f20062903002213200d7c2003290370220f200e7c2210200f542206ad7c220f2006200f201354200f2013511b22061b3703002003427f201020061b370370427f2007200d7c200a200e7c220e200a542206ad7c220d2006200d200754200d2007511b22061b2107427f200e20061b210a0b200241306a21022003200a370380012003200737038801200b41506a220b0d000b0b02402005410020041b2202450d00200441306c450d002002102c0b2000200a37032020002003290340370000200041306a2003290370370300200041286a2007370300200041c0006a2003290360370200200041386a200341f0006a41086a290300370300200041086a200341c0006a41086a290300370000200041106a200341c0006a41106a290300370000200041186a200341c0006a41186a290300370000200041c8006a200341e0006a41086a280200360200200341f0016a24000f0b103b000b1039000b13002000411f360204200041ec85c3003602000bf01b04057f067e027f037e230041d0036b22032400200341d8016a41186a22044200370300200341d8016a41106a22054200370300200341d8016a41086a22064200370300200342003703d801200341f0026a41e6dcc700410710c5012006200341f0026a41086a2207290000370300200320032900f0023703d801200341f0026a41a08ec100411110c50120042007290000370300200520032900f002370300200341a0016a200341d8016a10890402400240024020032802a001417d71450d00200442003703002005420037030020064200370300200342003703d801200341f0026a41e6dcc700410710c50120062007290000370300200320032900f0023703d801200341f0026a41ccbac200410a10c501200541086a2007290000370000200520032900f00237000020034198016a200341d8016a412010c6012003280298014101470d01200328029c012002460d01200341f8016a411010a804200341f0026a410f6a200341f8016a41086a2802002205360000200341a8026a410f6a22072005360000200320032903f8013700f702200341a8026a41086a2205200341f0026a41086a290000370300200320032900f00222083703a802200041186a41003a0000200041106a4280e1eb173703002000420137030820002008370019200041216a2005290300370000200041286a2007280000360000200042013703000c020b200341f8016a411010a804200341f0026a410f6a200341f8016a41086a2802002205360000200341a8026a410f6a22062005360000200320032903f8013700f702200341a8026a41086a22052007290000370300200320032900f00222083703a802200041186a41003a0000200041106a42c0f0f50b3703002000420137030820002008370019200041216a2005290300370000200041286a2006280000360000200042013703000c010b42002108200341f0016a4200370300200341e8016a4200370300200341d8016a41086a22074200370300200342003703d801200341f0026a41e6dcc700410710c5012007200341f0026a41086a2206290000370300200320032900f0023703d801200341f0026a41d8c5c200410b10c501200541086a2006290000370000200520032900f002370000200341203602dc022003200341d8016a3602d802200341e0026a200341d8016a412010b3010240024020032802e00222070d00200341a8026a21050c010b20032802e40221062003200341e0026a41086a2802003602ac03200320073602a803200341f0026a200341a8036a10a904420121080240024020032903f0024201520d00200341003602b803200342013703b0032003410f3602c4032003200341d8026a3602c0032003200341b0036a3602cc0320034184036a4101360200200342013702f402200341b4bcc3003602f0022003200341c0036a36028003200341cc036a41dcb7c000200341f0026a103e1a20033502b80342208620033502b003841000024020032802b403450d0020032802b003102c0b420021080c010b200341a8026a41286a200341a0036a2903002209370300200341a8026a41206a200341f0026a41286a290300220a370300200341a8026a41186a200341f0026a41206a290300220b370300200341a8026a41106a200341f0026a41186a290300220c370300200341a8026a41086a200341f0026a41106a290300220d370300200341f8016a41086a200d370300200341f8016a41106a200c370300200341f8016a41186a200b370300200341f8016a41206a200a370300200341f8016a41286a2009370300200320032903f80222093703a802200320093703f8010b200341a8026a21052006450d002007102c0b200541286a2207200341f8016a41286a290300370300200541206a2206200341f8016a41206a290300370300200541186a2204200341f8016a41186a290300370300200541106a2202200341f8016a41106a290300370300200541086a220e200341f8016a41086a290300370300200520032903f801370300024020084200510d00200341a8016a41286a220f2007290300370300200341a8016a41206a22072006290300370300200341a8016a41186a22062004290300370300200341a8016a41106a22042002290300370300200341a8016a41086a2202200e290300370300200320052903003703a801200341a8026a41286a200141286a290300370300200341a8026a41206a200141206a290300370300200341a8026a41186a200141186a290300370300200341a8026a41106a200141106a290300370300200341a8026a41086a200141086a290300370300200320012903003703a802200341f0026a41286a200f290300370300200341f0026a41206a2007290300370300200341f0026a41186a2006290300370300200341f0026a41106a2004290300370300200341f0026a41086a2002290300370300200320032903a8013703f0020240024002400240410810322205450d0020034188016a20032903f0022209200341f0026a41086a2903002208428094ebdc03420010c708200341f8006a20092008428094ebdc03420010c808200341e8006a2003290378200341f8006a41086a29030042a0c21e420010ce08200341a8026a41086a290300210a20032903a802210b2003290368220d200329038801220c42d00f80a7200c42a0c21e7e428094ebdc03824200526aad7c220c200341e8006a41086a290300200c200d54ad7c220d84500d01427f2009200c7c2210201020095422072008200d7c2007ad7c221020085420102008511b22071b221142002009200c7d221220122009562008200d7d2009200c54ad7d220d200856200d2008511b22061b221256427f201020071b220c4200200d20061b220d56200c200d511b450d0241002107417f200b201185200a200c8584420052200b201154200a200c54200a200c511b1b417f200b201285200a200d8584420052200b201254200a200d54200a200d511b22061b2204470d03417f200441014620061b21070c030b1039000b417f200b200985200a20088584420052200b200954200a200854200a2008511b1b21070c010b417f200b200985200a20088584420052200b200954200a200854200a2008511b1b21070b200520073a00012005200b20095a200a20085a200a2008511b3a0000200341386a2003290380032209200341f0026a41186a2903002208428094ebdc03420010c708200341d8006a20092008428094ebdc03420010c808200341c8006a2003290358200341d8006a41086a29030042a0c21e420010ce08200341a8026a41186a290300210a20032903b802210b024002402003290348220d2003290338220c42d00f80a7200c42a0c21e7e428094ebdc03824200526aad7c220c200341c8006a41086a290300200c200d54ad7c220d8450450d00417f200b200985200a20088584420052200b200954200a200854200a2008511b1b21070c010b0240427f2009200c7c2210201020095422072008200d7c2007ad7c221020085420102008511b22071b221142002009200c7d221220122009562008200d7d2009200c54ad7d220d200856200d2008511b22061b221256427f201020071b220c4200200d20061b220d56200c200d511b0d00417f200b200985200a20088584420052200b200954200a200854200a2008511b1b21070c010b41002107417f200b201185200a200c8584420052200b201154200a200c54200a200c511b1b417f200b201285200a200d8584420052200b201254200a200d54200a200d511b22061b2204470d00417f200441014620061b21070b200520073a00032005200b20095a200a20085a200a2008511b3a0002200341086a2003290390032209200341f0026a41286a2903002208428094ebdc03420010c708200341286a20092008428094ebdc03420010c808200341186a2003290328200341286a41086a29030042a0c21e420010ce08200341a8026a41286a290300210a20032903c802210b024002402003290318220d2003290308220c42d00f80a7200c42a0c21e7e428094ebdc03824200526aad7c220c200341186a41086a290300200c200d54ad7c220d84500d000240427f2009200c7c2210201020095422072008200d7c2007ad7c221020085420102008511b22071b221142002009200c7d221220122009562008200d7d2009200c54ad7d220d200856200d2008511b22061b221256427f201020071b220c4200200d20061b220d56200c200d511b0d00417f200b200985200a20088584420052200b200954200a200854200a2008511b1b21070c020b41002107417f200b201185200a200c8584420052200b201154200a200c54200a200c511b1b417f200b201285200a200d8584420052200b201254200a200d54200a200d511b22061b2204470d01417f200441014620061b21070c010b417f200b200985200a20088584420052200b200954200a200854200a2008511b1b21070b200520073a00052005200b20095a200a20085a200a2008511b3a0004024002400240024020052c00010e020003010b20052d0000450d00024020052c00030e020003010b20052d0002450d0020052d000521072005102c200741ff01470d010c030b2005102c0b200341f8016a411110a804200341f0026a410f6a200341f8016a41086a2802002205360000200341a8026a410f6a22072005360000200320032903f8013700f702200341a8026a41086a2205200341f0026a41086a290000370300200320032900f00222083703a802200041186a41003a0000200041106a42c0d1e1233703002000420137030820002008370019200041216a2005290300370000200041286a2007280000360000200042013703000c020b2005102c0b2000420037030020004200370308200041186a41003a00000b200341d0036a24000b930601047f230041c0006b2202240041dc97c100210341162104411e210502400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e20000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f000b2002413c6a41013602002002420137022c200241eccdc80036022820024104360224200241c0fcc7003602202002200241206a360238200241286a419cc5c3001046000b41cf97c1002103410d2104410021050c1d0b41c797c100210341082104410121050c1c0b41ba97c1002103410d2104410221050c1b0b41ad97c1002103410d2104410321050c1a0b41a197c1002103410c2104410421050c190b419397c1002103410e2104410521050c180b418297c100210341112104410621050c170b41f196c100210341112104410721050c160b41e596c1002103410c2104410821050c150b41d896c1002103410d2104410921050c140b41cc96c1002103410c2104410a21050c130b41ba96c100210341122104410b21050c120b41a096c1002103411a2104410c21050c110b418e96c100210341122104410d21050c100b418096c1002103410e2105410e21040c0f0b41e195c1002103411f2104410f21050c0e0b41c395c1002103411e2104411021050c0d0b41b095c100210341132104411121050c0c0b419095c100210341202104411221050c0b0b41f594c1002103411b2104411321050c0a0b41d994c1002103411c2104411421050c090b41bb94c1002103411e2104411521050c080b419c94c1002103411f2104411621050c070b41fb93c100210341212104411721050c060b41de93c1002103411d2104411821050c050b41c593c100210341192105411921040c040b41ab93c1002103411a2105411a21040c030b418a93c100210341212104411b21050c020b41fc92c1002103410e2104411c21050c010b41e792c100210341152104411d21050b200041830e3b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000bea0304037f027e017f047e230041a0016b22022400200241003a00380240024002400240200128020422034110490d002001280200220441086a2900002105200429000021062001200441106a3602002001200341706a2204360204200241013a00382002200637030820022005370310200441104f0d01200042013703000c020b200042013703000c020b2001280200220441086a2900002105200429000021062001200441106a360200200241086a41186a220720053703002001200341606a2204360204200241023a003820022006370318024020044110490d002001280200220441086a2900002105200429000021062001200441106a360200200241086a41286a20053703002001200341506a360204200241033a003820022006370328200241c0006a41086a200241086a41086a2903002208370300200241c0006a41106a200241086a41106a2903002209370300200241c0006a41186a2007290300220a370300200241c0006a41206a2006370300200241c0006a41286a200537030020022002290308220b370340200041306a2005370300200041286a2006370300200041206a200a370300200041186a2009370300200041106a20083703002000200b370308200042003703000c020b200042013703000b200241003a00380b200241a0016a24000bcb0201047f230041106b2203240020034100360208200342013703000240024002400240024020022d00000e0400010203000b200341004101102f20032802002204200328020822026a41003a0000200241016a21020c030b200341004101102f20032802002204200328020822026a41013a0000200241016a21020c020b200341004101102f20032802002204200328020822026a41023a0000200241016a21020c010b200341004101102f2003280200200328020822046a41033a00002003200441016a2204360208200320044120102f20032802002204200328020822056a22062002290001370000200641086a200241096a290000370000200641106a200241116a290000370000200641186a200241196a290000370000200541206a21020b20032002360208200020012004200210a70202402003280204450d002004102c0b200341106a24000bc908020c7f027e230022042105200441a0016b416071220424000240024002402002200384500d0020042002370300200441023a00182004200337030820042000290000370310200441e0006a41d4dcc700410810c50120044180016a41bfa9c700410510c501200441c8006a200110d5022004280250220641206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b200441003602402004200736023c20042008360238200441386a4100411010c8012004280238200428024022076a22082004290060370000200841086a200441e0006a41086a2900003700002004200741106a2207360240200441386a2007411010c8012004280238200428024022076a2208200429008001370000200841086a20044180016a41086a2900003700002004200741106a220836024020042802482107200441386a2008200610c80120042802382208200428024022096a2007200610c9081a2004200920066a22063602400240200428024c450d002007102c0b20044180016a2008200610ec04200429028401420020042802800122061b21020240200428023c450d002008102c0b2006410820061b210a2002a7210b024002402002422088a722060d0041002108200a21070c010b200a20064105746a210c200441e0006a41106a2109200441e0006a41196a210d200a2106200a210702400340200441c8006a41106a220e200641106a290300370300200441c8006a41086a220f200641086a29030037030020042006290300370348200641186a2d000021082004200641196a28000036023820042006411c6a28000036003b20084103460d01200d2004280238360000200d41036a200428003b3600002009200e29030037030020042004290348370360200420083a00782004200f2903003703680240024020092000460d0020092900002000290000510d00200441e0006a41186a2903002202a721082004290370210320042903682110200429036021110c010b200441033a0098012004290310210320042004290390013703102004290308211020042004290388013703082004290300211120042004290380013703002004290318210220042004290398013703182002a721080b0240200841ff01714103460d00200720113703002007201037030820072003370310200741186a2002370300200741206a21070b200641206a2206200c470d000b0b20042d001841034621080b2004200b360284012004200a3602800120042007200a6b410575220636028801024020080d002004290318210220042903102103200429030821102004290300211102402006200b470d0020044180016a200b10ed04200428028401210b200428028001210a20042802880121060b200a20064105746a220720033703102007201037030820072011370300200741186a20023703002004200641016a2206360288010b2001200a2006108808200b41ffffff3f71450d00200a102c0b200524000f0b103b000b1039000be10101037f230041106b220324002003410036020820034201370300200341004120102f2003280200200328020822046a22052002290038370000200541086a200241c0006a290000370000200541106a200241c8006a290000370000200541186a200241d0006a2900003700002003200441206a3602082003200236020c2003410c6a200310e9032003200241106a36020c2003410c6a200310e9032003200241206a10b004200228022c200241346a280200200310d5032000200120032802002202200328020810a70202402003280204450d002002102c0b200341106a24000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42187e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b200141186c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241186e3602000b0f0b2005450d001039000b103b000bed1b03067f017e027f230041e0016b2203240020034198016a41e6dcc700410710c501200341f8006a419099c100410610c501200341a8016a200110e40202400240024020032802b001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602702003200536026c20032006360268200341e8006a4100411010c8012003280268200328027022056a2206200329009801370000200641086a20034198016a41086a2900003700002003200541106a2205360270200341e8006a2005411010c8012003280268200328027022056a22062003290078370000200641086a200341f8006a41086a22072900003700002003200541106a220636027020032802a8012105200341e8006a2006200410c80120032802682206200328027022086a2005200410c9081a2003200820046a2204360270024020032802ac01450d002005102c0b200341b8016a2006200410c9012007200341c2016a290100370300200341f8006a41106a200341ca016a290100370300200341f8006a41176a2204200341d1016a290000370000200320032901ba0137037802400240024002400240024020032d00b8014101470d0020032d00b9012105200341c8006a41176a2004290000370000200341c8006a41106a2204200341f8006a41106a290300370300200341c8006a41086a2207200341f8006a41086a290300370300200320032903783703480240200328026c450d002006102c0b200341286a41176a2206200341c8006a41176a290000370000200341286a41106a22082004290300370300200341116a2007290300370000200341196a2008290300370000200341206a2006290000370000200320053a000820032003290348370009200341f8006a41e6dcc700410710c501200341b8016a41d192c100410d10c501200341c8006a200110e4022003280250220441206a2205417f4c0d060240024020050d00410121060c010b200510322206450d080b200341003602302003200536022c20032006360228200341286a4100411010c8012003280228200328023022056a22062003290078370000200641086a200341f8006a41086a2900003700002003200541106a2205360230200341286a2005411010c8012003280228200328023022056a220620032900b801370000200641086a200341b8016a41086a2900003700002003200541106a220636023020032802482105200341286a2006200410c80120032802282206200328023022076a2005200410c9081a2003200720046a22043602300240200328024c450d002005102c0b200341b8016a2006200410d20320032903c801210920032802c401210a20032802b80121080240200328022c450d002006102c0b200a450d012009a7210b2009422088a74102742204417c6a41027641026a410120041b20024b0d0220034198016a41e6dcc700410710c501200341f8006a41d192c100410d10c501200341b8016a200110e40220032802c001220541206a2206417f4c0d060240024020060d00410121070c010b200610322207450d080b200341003602502003200636024c20032007360248200341c8006a4100411010c8012003280248200328025022066a2207200329009801370000200741086a20034198016a41086a2900003700002003200641106a2206360250200341c8006a2006411010c8012003280248200328025022066a22072003290078370000200741086a200341f8006a41086a2900003700002003200641106a220736025020032802b8012106200341c8006a2007200510c80120032802482207200328025022026a2006200510c9081a2003200220056a2205360250024020032802bc01450d002006102c0b2007200510b4010240200328024c450d002007102c0b200a20046a21024100210420082107200a2106024003402004417e712105410221040240024020054102460d00200821050c010b2006450d0220022006460d02200641046a2106410321042007417f6a220721050b200341b8016a41186a200141186a290000370300200341b8016a41106a200141106a290000370300200341b8016a41086a200141086a290000370300200320053602d801200320012900003703b801200341f8006a200341b8016a10d3032003280278220520032802800110b401200328027c450d002005102c0c000b0b200341043a00a8010240200b0d00200320032900a9013703682003200341b0016a28000036006f0c060b200b41ffffffff03710d03200320032900a9013703682003200341b0016a28000036006f0c050b0240200328026c450d002006102c0b2000410210a8040c070b200320032900a9013703682003200341b0016a28000036006f0c030b200341a8016a411f10a804200b450d01200b41ffffffff0371450d010b200a102c0b200320032900a9013703682003200341a8016a41086a28000036006f20032d00a80122044104460d00200020043a000020002003290368370001200041086a200328006f3600000c030b20034198016a41e6dcc700410710c501200341f8006a419099c100410610c501200341b8016a200110e40220032802c001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602502003200536024c20032006360248200341c8006a4100411010c8012003280248200328025022056a2206200329009801370000200641086a20034198016a41086a2900003700002003200541106a2205360250200341c8006a2005411010c8012003280248200328025022056a22062003290078370000200641086a200341f8006a41086a2900003700002003200541106a220636025020032802b8012105200341c8006a2006200410c80120032802482206200328025022076a2005200410c9081a2003200720046a2204360250024020032802bc01450d002005102c0b2006200410b4010240200328024c450d002006102c0b20034198016a41e6dcc700410710c501200341f8006a418a99c100410610c501200341b8016a200341086a10d50220032802c001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602502003200536024c20032006360248200341c8006a4100411010c8012003280248200328025022056a2206200329009801370000200641086a20034198016a41086a2900003700002003200541106a2205360250200341c8006a2005411010c8012003280248200328025022056a22062003290078370000200641086a200341f8006a41086a2900003700002003200541106a220636025020032802b8012105200341c8006a2006200410c80120032802482206200328025022076a2005200410c9081a2003200720046a2204360250024020032802bc01450d002005102c0b2006200410b4010240200328024c450d002006102c0b20034198016a41e6dcc700410710c501200341f8006a41e0b9c200410510c501200341b8016a200110e40220032802c001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602502003200536024c20032006360248200341c8006a4100411010c8012003280248200328025022056a2206200329009801370000200641086a20034198016a41086a2900003700002003200541106a2205360250200341c8006a2005411010c8012003280248200328025022056a22062003290078370000200641086a200341f8006a41086a2900003700002003200541106a220636025020032802b8012105200341c8006a2006200410c80120032802482206200328025022076a2005200410c9081a2003200720046a2204360250024020032802bc01450d002005102c0b2006200410b4010240200328024c450d002006102c0b20034198016a41e6dcc700410710c501200341f8006a418893c700410a10c501200341b8016a200110e40220032802c001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602502003200536024c20032006360248200341c8006a4100411010c8012003280248200328025022056a2206200329009801370000200641086a20034198016a41086a2900003700002003200541106a2205360250200341c8006a2005411010c8012003280248200328025022056a22062003290078370000200641086a200341f8006a41086a2900003700002003200541106a220636025020032802b8012105200341c8006a2006200410c80120032802482206200328025022076a2005200410c9081a2003200720046a2204360250024020032802bc01450d002005102c0b2006200410b4010240200328024c450d002006102c0b20034198016a41e6dcc700410710c501200341f8006a41b18ec100410a10c501200341b8016a200110e40220032802c001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602502003200536024c20032006360248200341c8006a4100411010c8012003280248200328025022056a2206200329009801370000200641086a20034198016a41086a2900003700002003200541106a2205360250200341c8006a2005411010c8012003280248200328025022056a22062003290078370000200641086a200341f8006a41086a2900003700002003200541106a220636025020032802b8012105200341c8006a2006200410c80120032802482206200328025022076a2005200410c9081a2003200720046a2204360250024020032802bc01450d002005102c0b2006200410b4010240200328024c450d002006102c0b200110e802200041043a00000c020b103b000b1039000b200341e0016a24000bbc0606057f017e0c7f027e017f017e230041d0006b22022400200241106a41d4dcc700410810c501200241306a41bfa9c700410510c501200241206a200110d50202402002280228220341206a2204417f4c0d0002400240024020040d00410121050c010b200410322205450d010b20024100360208200220043602042002200536020020024100411010c8012002280200200228020822046a22052002290010370000200541086a200241106a41086a2900003700002002200441106a220436020820022004411010c8012002280200200228020822046a22052002290030370000200541086a200241306a41086a2900003700002002200441106a22053602082002280220210420022005200310c80120022802002205200228020822066a2004200310c9081a2002200620036a220336020802402002280224450d002004102c0b200241306a2005200310ec0420022902344200200228023022031b210702402002280204450d002005102c0b2003410820031b210802402007422088a72206450d002006417f6a2109200041706a210a410021052008210341002104034002400240024020062004460d0002400240200a2003460d00200341106a220b2900002000290000510d0002402005450d00200420056b220c20064f0d02200241306a41186a220d200320054105746b220c41186a220e290300370300200241306a41106a220f200c41106a2210290300370300200241306a41086a2211200c41086a22122903003703002002200c290300370330200341086a22132903002114200b2903002115200341186a22162903002117200c2003290300370300200e201737030020102015370300201220143703002016200d290300370300200b200f29030037030020132011290300370300200320022903303703000c040b4100210520092004470d040c060b200541016a21050c020b200c200641e48ac500103f000b2006200641f48ac500103f000b20092004470d002005417f6a20064f0d02200742ffffffff0f832107200620056b21060c020b200441016a2104200341206a21030c000b0b20012008200610880802402007a72203450d00200341ffffff3f71450d002008102c0b200241d0006a24000f0b1039000b103b000bf60201057f230041106b2202240020012802002103200020012802082201108f0102402001450d00200141186c2104200041086a210103402002200336020c2002410c6a200010e9030240024002400240200341106a2205280200220641c000490d00200641808001490d012006418080808004490d02200020012802004101102f200028020020012802006a41033a00002001200128020041016a220636020020052802002105200020064104102f200028020020012802006a20053600002001200128020041046a3602000c030b200020012802004101102f200028020020012802006a20064102743a00002001200128020041016a3602000c020b200020012802004102102f200028020020012802006a20064102744101723b00002001200128020041026a3602000c010b200020012802004104102f200028020020012802006a20064102744102723600002001200128020041046a3602000b200341186a2103200441686a22040d000b0b200241106a24000b930201057f230041106b2202240002400240200128020822034105744104722204417f4c0d0020012802002101200410322205450d0120024100360208200220043602042002200536020020022003108f010240024020030d0020022802002106200228020821030c010b20034105742104200228020821030340200220034120102f20022802002206200228020822056a22032001290000370000200341086a200141086a290000370000200341106a200141106a290000370000200341186a200141186a2900003700002002200541206a2203360208200141206a2101200441606a22040d000b0b200041202006200310a70202402002280204450d002006102c0b200241106a24000f0b103b000b1039000bc15006087f017e027f017e107f017e230041e0046b22082400200820033a005f200841f8016a41286a200441286a290300370300200841f8016a41206a200441206a290300370300200841f8016a41186a200441186a290300370300200841f8016a41106a200441106a290300370300200841f8016a41086a200441086a290300370300200820042903003703f801200841c8016a200841f8016a200510a704200841e0006a41086a2205200841c8016a41106a290300370300200841e0006a41106a2203200841c8016a41186a290300370300200841e0006a41186a2209200841c8016a41206a290300370300200841e0006a41206a220a200841c8016a41286a290300370300200820082903d001370360024002400240024002400240024002400240024002400240024020082903c8014201510d00200841f8016a2002109301200141086a28020021032008280280022105024020082802fc0141808080807872418080808078460d0020082802f801102c0b024020052003470d00200841f8006a22094200370300200841f0006a22034200370300200841e0006a41086a220a420037030020084200370360200841a0046a41e6dcc700410710c501200a200841a0046a41086a290000370300200820082900a004370360200841c0046a41ec8ec100411210c5012009200841c0046a41086a290200370300200320082902c004370300200841cc016a41003a0000200841003602c801200841d0006a200841e0006a4120200841c8016a4105410010b70402402008280250450d00200820082802542209410520094105491b3602fc012008200841c8016a3602f801200841c8006a200841f8016a10870220082802480d000240200828024c2209200741ffff0371470d00200841e0006a41186a220b4200370300200841f0006a220c4200370300200841e0006a41086a220a420037030020084200370360200841a0046a41e6dcc700410710c501200a200841a0046a41086a220d290000370300200820082900a004370360200841c0046a41f4b7c200410e10c501200341086a220e200841c0046a41086a220f290200370000200320082902c004370000200841c0006a200841e0006a412010c6010240200520092008280244410020082802401b2207200720094b1b470d00200b4200370300200c4200370300200a420037030020084200370360200841a0046a41e6dcc700410710c501200a200d290000370300200820082900a004370360200841c0046a41fe8ec100411210c501200e200f290200370000200320082902c004370000200841cc016a41003a0000200841003602c801200841386a200841e0006a4120200841c8016a4105410010b70402402008280238450d002008200828023c2209410520094105491b3602fc012008200841c8016a3602f801200841306a200841f8016a10870220082802300d00024020082802342006470d00200841e0006a41186a4200370300200841f0006a4200370300200841e0006a41086a2209420037030020084200370360200841a0046a41e6dcc700410710c5012009200841a0046a41086a290000370300200820082900a004370360200841c0046a41ec8ec100411210c501200341086a200841c0046a41086a290200370000200320082902c004370000200841f8016a200841e0006a10e10120082802f8012209450d07200820082902fc01221037028c01200820093602880120012802002111200128020421122005450d09024002402010422088a720112f010022014b0d00410021014114210e0c010b200841c8046a200920014105746a220141096a290000370300200841d0046a200141116a290000370300200841d7046a200141186a290000370000200820012900013703c00420012d00002109410121014120210e0b200841a0046a41176a220a200841c0046a41176a290000370000200841a0046a41106a2207200841c0046a41106a290300370300200841e0006a41086a200841c0046a41086a2903002210370300200841e0006a41106a22062007290300370300200841e0006a41176a2207200a290000370000200820082903c0042213370360200820093a00f801200841f8016a41186a2209200729000037000020084189026a200629030037000020084181026a2010370000200820133700f9012001450d0a200841c8016a41186a2009290000370300200841c8016a41106a200841f8016a41106a290000370300200841c8016a41086a200841f8016a41086a290000370300200820082900f8013703c801412010322209450d0d200920082903c801370000200941186a200841c8016a41186a290300370000200941106a200841c8016a41106a290300370000200941086a200841c8016a41086a29030037000020084281808080103702940420082009360290040240024020054101460d00200841f9016a21140240024020082802900120112f010222014b0d00410021014114210e0c010b200841c8046a20082802880120014105746a220141096a290000370300200841d0046a200141116a290000370300200841d7046a200141186a290000370000200820012900013703c00420012d0000210a410121010b200841a0046a41176a220f200841c0046a41176a2215290000370000200841a0046a41106a2216200841c0046a41106a2217290300370300200841e0006a41086a2218200841c0046a41086a22192903002210370300200841e0006a41106a221a2016290300370300200841e0006a41176a221b200f290000370000200820082903c004221337036020142013370000201441086a221c2010370000201441106a221d201a290300370000201441176a221e201b2900003700002008200a3a00f80120010d010b4101210b0c0c0b201141046a210d200841c8016a41186a221f200841f8016a41186a220a290000370300200841c8016a41106a2220200841f8016a41106a2207290000370300200841c8016a41086a2221200841f8016a41086a2206290000370300200820082900f8013703c8012005410174417c6a210b4120210c41012101410121050340200a201f2903003703002007202029030037030020062021290300370300200820082903c8013703f801024020052001470d0020084190046a2001410110d60120082802900421090b2009200c6a220120082903f801370000200141186a200a290300370000200141106a2007290300370000200141086a20062903003700002008200541016a22223602980402400240200b450d0002400240200828029001200d2f010022014b0d00410021014114210e0c010b201920082802880120014105746a220141096a2900003703002017200141116a2900003703002015200141186a290000370000200820012900013703c00420012d00002123410121010b200f201529000037000020162017290300370300201820192903002210370300201a2016290300370300201b200f290000370000200820082903c004221337036020142013370000201c2010370000201d201a290300370000201e201b290000370000200820233a00f80120010d010b200541016a210b0c0d0b200d41026a210d201f200a2900003703002020200729000037030020212006290000370300200820082900f8013703c801200b417e6a210b200c41206a210c2008280294042101202221050c000b0b200841c8016a411c10a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c070b200841c8016a411210a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c060b200841c8016a411310a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c050b200841c8016a411c10a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c040b200841c8016a411210a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c030b200841c8016a411310a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c020b2000200829036037030820004201370300200041286a200a290300370300200041206a2009290300370300200041186a2003290300370300200041106a20052903003703000c010b200841c8016a411210a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000b200210e901200128020441808080807872418080808078460d092001280200102c0c090b4120210e0b41002107410121090240201241808080807872418080808078460d002011102c0b4100210b0c010b0240201241808080807872418080808078460d002011102c0b20082802940421070b0240200e41ff01714120460d0002402007450d002009450d00200741ffffff3f71450d002009102c0b200841c8016a200e10a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a200436000020004201370300200828028c0141ffffff3f71450d03200828028801102c200210e9010c060b200841e0006a41186a4200370300200841f0006a4200370300200841e0006a41086a2201420037030020084200370360200841a0046a41e6dcc700410710c5012001200841a0046a41086a290000370300200820082900a004370360200841c0046a41fe8ec100411210c501200341086a200841c0046a41086a290200370000200320082902c004370000200841f8016a200841e0006a10e10120082802f8012201450d01200820082902fc0137029c012008200136029801200841f8016a200241c00110c9081a200841c8016a200841f8016a20084198016a20084188016a10fa01024020082802c8014101470d00200841e0006a41086a200841d4016a280200360200200820082902cc01370360024041002802d8d2484102490d002008411b3602c4042008200841e0006a3602c00441002802d4d248210441002802d0d248210141002802dcd2482102200841b8026a41e613360200200841b0026a42de80808010370300200841ac026a41acc5c300360200200841a4026a420e370200200841a0026a41e28fc10036020020084198026a420137030020084188026a4201370300200841f8016a41086a410736020020084194026a200841c0046a360200200841dc9fc30036028402200841db8fc1003602fc01200841023602f801200141f8a3c000200241024622021b200841f8016a200441e0a3c00020021b2802101103000b200841c8016a411510a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c050b20082802cc01211f200841c8016a41086a28020021230240200841c8016a410c6a2802002222450d00201f2022412c6c6a2117201f210602400340200841a0046a41e6dcc700410710c501200841c0046a418893c700410a10c501200841f8016a2006410c6a220e10e402200828028002220141206a2202417f4c0d060240024020020d00410121050c010b200210322205450d040b200841003602d001200820023602cc01200820053602c801200841c8016a4100411010c80120082802c80120082802d00122026a220520082900a004370000200541086a200841a0046a41086a22202900003700002008200241106a22023602d001200841c8016a2002411010c80120082802c80120082802d00122026a220520082902c004370000200541086a200841c0046a41086a22212902003700002008200241106a22053602d00120082802f8012102200841c8016a2005200110c80120082802c801220520082802d001220a6a2002200110c9081a2008200a20016a22013602d001024020082802fc01450d002002102c0b2005200110ce02210a024020082802cc01450d002005102c0b200841a0046a41e6dcc700410710c501200841c0046a41b18ec100410a10c501200841f8016a200e10e402200828028002220141206a2202417f4c0d060240024020020d00410121050c010b200210322205450d040b20084100360298042008200236029404200820053602900420084190046a4100411010c80120082802900420082802980422026a220520082900a004370000200541086a20202900003700002008200241106a22023602980420084190046a2002411010c80120082802900420082802980422026a220520082902c004370000200541086a20212902003700002008200241106a22023602980420082802f801210520084190046a2002200110c801200828029004220220082802980422206a2005200110c9081a2008202020016a220136029804024020082802fc01450d002005102c0b200820013602bc01200820023602b801200841e0006a2002200110b30102400240200828026022200d00410221050c010b20082802642115200820082802683602a404200820203602a004200841f8016a200841a0046a10ca030240024020082802f8012221450d0020082802fc01210102400240024020082802a40422054104490d00200828028002211120082802a0042219280000211420082005417c6a22123602a4042008201941046a22193602a0042012450d0120192d0000211220082005417b6a3602a4042008201941016a3602a00441002105024020120e020500020b410121050c040b2001450d02200141ffffff3f710d010c020b2001450d01200141ffffff3f71450d010b2021102c0b200841003602d001200842013703c8012008410f3602c4042008200841b8016a3602c0042008200841c8016a3602a8012008410136028c02200842013702fc01200841b4bcc3003602f8012008200841c0046a36028802200841a8016a41dcb7c000200841f8016a103e1a20083502d00142208620083502c801841000024020082802cc01450d0020082802c801102c0b41022105200f211420162121201a2101201b21110b02402015450d002020102c0b2014210f202121162001211a2011211b0b2008200f3602cc042008201b3602c8042005410246210120082902c80421130240200828029404450d002002102c0b200c201620011b210c200d201a20011b210d02400240024002400240024002400240024002400240200a20054102472202460d002010201320011b2110200a450d01200641086a2802004101470d03024020062802002202200e460d002002200e412010cc080d030b20022f012041ffff03460d05200841c8016a411910a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c040b024041002802d8d248450d002008413b3602cc01200841e49fc3003602c80141002802d4d248210441002802d0d248210141002802dcd2482102200841b8026a41f513360200200841b0026a42de80808010370300200841ac026a41acc5c300360200200841a4026a420e370200200841a0026a41e28fc10036020020084198026a420137030020084188026a420137030020084180026a410736020020084194026a200841c0046a360200200841b4b5c80036028402200841db8fc1003602fc01200841013602f801200841043602c404200441e0a3c000200241024622021b28021021042008200841c8016a3602c004200141f8a3c00020021b200841f8016a20041103000b200841c8016a411610a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a20043600002000420137030020054102460d0b200d450d0b200c450d0b200d41ffffff3f71450d0b0c090b2002450d0402400240024020062802082201450d002006280200220e200141226c6a21212010422088a721112010a7410574212003402008200e2205360260200541226a210e20202102200c210103402002450d03024020052001460d00200241606a210220012005412010cc08210a200141206a2101200a0d010b0b200841f8016a200841e0006a10d80102402008280284022201450d00200828028002210202402008280288022205450d00200541ffffffff0371450d002001102c0b200220114b0d040b200e2021470d000b0b200d450d09200c450d09200d41ffffff3f71450d090c080b200841c8016a411710a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c060b200841c8016a411810a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c050b200841c8016a411910a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000c010b200841c8016a411910a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000b20054102460d07200d450d07200c450d07200d41ffffff3f710d050c070b20010d03200d450d03200c450d03200d41ffffff3f710d020c030b419fa0c30041fd00419ca1c300105c000b200d450d04200c450d04200d41ffffff3f710d020c040b200c102c0b2006412c6a22062017470d010c030b0b200c102c0b2022412c6c2100201f210403400240200441046a2802002201450d00200141226c450d002004280200102c0b2004412c6a2104200041546a22000d000b2023450d05201f450d052023412c6c450d05201f102c0c050b200820223602d001200820233602cc012008201f3602c80120084190026a22014200370300200841f8016a41106a22024200370300200841f8016a41086a22054200370300200842003703f801200841e0006a41d4dcc700410810c5012005200841e0006a41086a220a290000370300200820082900603703f801200841e0006a41bba8c700410d10c5012001200a29000037030020022008290060370300200841186a200841f8016a412010d301200841186a41106a29030021102008290320211320082903182124411010322201450d002001201342002024a722051b37030020012010420020051b370308200841a8016a200841c8016a200110e201200841f8016a2009200b20082802a801220520082802b001220110fc0102400240024020082d00f8014101460d00200841c8016a410a6a20084184026a280200360100200820082902fc013701ca012008200841ce016a290100370166200841b8016a41086a220a200841e0006a410a6a280100360200200820082901c801370360200820082901623703b801200841c8016a200841b8016a10fd01200841c8016a2004460d02200841c8016a2004413010cc08450d02200841e0006a411b10a80420084187026a200841e0006a41086a2802002204360000200820082903603700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a200436000020004201370300200841c8016a41086a200841b8016a41086a280200360200200820082903b8013703c801200841f8016a200841c8016a10fe01200841f8016a10ff010c010b200841c8016a411a10a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a2004360000200042013703000b02402001450d002001412c6c21002005210403400240200441046a2802002201450d00200141306c450d002004280200102c0b2004412c6a2104200041546a22000d000b0b20082802ac012204450d052004412c6c450d052005102c0c050b200841f8016a41186a22064200370300200841f8016a41106a22054200370300200841f8016a41086a22044200370300200842003703f801200841e0006a41d4dcc700410810c5012004200841e0006a41086a2201290000370300200820082900603703f801200841e0006a41bba8c700410d10c501200241086a2001290000370000200220082900603700002008200841f8016a412010d3012008200841106a2903004200200828020022021b3703c80420082008290308420020021b3703c0042008200841c0046a3602a0042004200a280200360200200820082903b8013703f801200841e0006a200841f8016a10fe012006200841e0006a41186a22022802003602002005200841e0006a41106a220d29030037030020042001290300370300200820082903603703f8012008200841a0046a3602940220084190046a200841f8016a109704024041002802d8d2484103490d00200841ec006a41153602002008411a3602642008200841c8016a3602682008200841df006a36026041002802d4d248210441002802d0d248210141002802dcd248210a200841b8026a41b114360200200841b0026a42de80808010370300200841ac026a41acc5c300360200200841a4026a420e370200200841a0026a41e28fc100360200200841f8016a41206a42023703002005420337030020084180026a410736020020084194026a200841e0006a360200200841aca1c30036028402200841db8fc1003602fc01200841033602f801200141f8a3c000200a41024622051b200841f8016a200441e0a3c00020051b2802101103000b200828029804210a200828029404210c200828029004210620082d005f210e20024200370300200d4200370300200841e0006a41086a2204420037030020084200370360200841a0046a41e6dcc700410710c5012004200841a0046a41086a290000370300200820082900a004370360200841c0046a41f8c4c200410d10c501200341086a200841c0046a41086a290200370000200320082902c0043700002008410036028002200842013703f801200841f8016a200b108f010240200b450d00200b41057421022008280280022101200921040340200841f8016a20014120102f20082802f80120082802800222056a22012004290000370000200141086a200441086a290000370000200141106a200441106a290000370000200141186a200441186a2900003700002008200541206a220136028002200441206a2104200241606a22020d000b0b200841f8016a200a108f010240200a450d002006200a41d0006c6a2105200621040340200841f8016a2008280280024120102f20082802f80120082802800222026a22012004290000370000200141086a200441086a290000370000200141106a200441106a290000370000200141186a200441186a2900003700002008200241206a36028002200441206a200841f8016a10f8032005200441d0006a2204470d000b0b200841f8016a200e1031200841e0006a412020082802f801220420082802800210a702024020082802fc01450d002004102c0b02402007450d002009450d00200741ffffff3f71450d002009102c0b0240200a450d00200a41d0006c2101200641c0006a210403400240200441046a2802002202450d00200241306c450d002004280200102c0b200441d0006a2104200141b07f6a22010d000b0b0240200c450d002006450d00200c41d0006c450d002006102c0b200841f8016a41286a2202200841c8016a41286a290300370300200841f8016a41206a2205200841c8016a41206a290300370300200841f8016a41186a2209200841c8016a41186a290300370300200841f8016a41106a220a200841c8016a41106a290300370300200841f8016a41086a2207200841c8016a41086a290300370300200820082903c8013703f801200841e0006a41186a4200370300200841e0006a41106a4200370300200841e0006a41086a2204420037030020084200370360200841a0046a41e6dcc700410710c5012004200841a0046a41086a290000370300200820082900a004370360200841c0046a41d8c5c200410b10c501200341086a200841c0046a41086a290200370000200320082902c004370000413010322204450d00200842303702c404200820043602c004200841c0046a41004130102f20082802c004220120082802c80422036a220420082903f801370000200441086a2007290300370000200441106a200a290300370000200441186a2009290300370000200441206a2005290300370000200441286a20022903003700002008200341306a22043602c804200841e0006a41202001200410a702024020082802c404450d002001102c0b20082d005f210420084180026a41053a0000200820043a008102200841033602f801200841f8016a10c80220004200370300200041186a41003a00002000420037030820082802a8012102024020082802b0012204450d002004412c6c21002002210403400240200441046a2802002201450d00200141306c450d002004280200102c0b2004412c6a2104200041546a22000d000b0b024020082802ac012204450d002004412c6c450d002002102c0b0240200828029c0141ffffff3f71450d00200828029801102c0b200828028c0141ffffff3f71450d05200828028801102c0c050b1039000b200841c8016a411210a80420084187026a200841c8016a41086a2802002204360000200820082903c8013700ff01200041186a41003a000020004200370308200020082900f801370019200041216a200841f8016a41086a290000370000200041286a20043600002000420137030002402007450d002009450d00200741ffffff3f71450d002009102c0b200828028c0141ffffff3f71450d00200828028801102c0b200210e9010c020b103b000b0240200828029c0141ffffff3f71450d00200828029801102c0b02402007450d002009450d00200741ffffff3f71450d002009102c0b200828028c0141ffffff3f71450d00200828028801102c0b200841e0046a24000bb10302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b2203428094ebdc03420010c808200441286a20022003428094ebdc03420010c708200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220810c80802400240024020042903182207428080808010544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200810c80820042903082203428080808010544100200441086a41086a290300501b450d012007a70d0241f0bcc300411941f8acc800103c000b2004411136024c20044194aac80036024841a5aac80041de00200441c8006a418cbdc30041f8acc8001040000b2004411136024c20044194aac80036024841a5aac80041de00200441c8006a418cbdc30041f8acc8001040000b200441d0006a2400200342ffffffff0f83428094ebdc037e200742ffffffff0f8380a70bf13004067f017e077f077e230041a0056b22042400200441c8026a41e6dcc700410710c501200441d8026a41e0b9c200410510c50120044188036a200110e4020240024002400240200428029003220541206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b200441003602c001200420063602bc01200420073602b801200441b8016a4100411010c80120042802b80120042802c00122066a220720042900c802370000200741086a200441c8026a41086a2900003700002004200641106a22063602c001200441b8016a2006411010c80120042802b80120042802c00122066a220720042900d802370000200741086a200441d8026a41086a2900003700002004200641106a22063602c0012004280288032107200441b8016a2006200510c80120042802b801220620042802c00122086a2007200510c9081a2004200820056a22053602c0010240200428028c03450d002007102c0b2004200536029c012004200636029801200441a8026a2006200510b30141042105024020042802a8022207450d0020042802ac02210802400240200441b0026a2802002209450d004100210502400240024002400240024020072d00000e0404020001060b410221050c030b200441003a00a80320094101460d0420072d00012105200441013a00a803200420053a00880320094102470d010c030b410121050c010b20072d00022105200441023a00a803200420053a00890320094103460d0120072d00032105200441033a00a803200420053a008a0320094104460d0120072d00042105200441043a00a803200420053a008b0320094105460d0120072d00052105200441053a00a803200420053a008c0320094106460d0120072d00062105200441063a00a803200420053a008d0320094107460d0120072d00072105200441073a00a803200420053a008e0320094108460d0120072d00082105200441083a00a803200420053a008f0320094109460d0120072d00092105200441093a00a803200420053a0090032009410a460d0120072d000a21052004410a3a00a803200420053a0091032009410b460d0120072d000b21052004410b3a00a803200420053a0092032009410c460d0120072d000c21052004410c3a00a803200420053a0093032009410d460d0120072d000d21052004410d3a00a803200420053a0094032009410e460d0120072d000e21052004410e3a00a803200420053a0095032009410f460d0120072d000f21052004410f3a00a803200420053a00960320094110460d0120072d00102105200441103a00a803200420053a00970320094111460d0120072d00112105200441113a00a803200420053a00980320094112460d0120072d00122105200441123a00a803200420053a00990320094113460d0120072d00132105200441133a00a803200420053a009a0320094114460d0120072d00142105200441143a00a803200420053a009b0320094115460d0120072d00152105200441153a00a803200420053a009c0320094116460d0120072d00162105200441163a00a803200420053a009d0320094117460d0120072d00172105200441173a00a803200420053a009e0320094118460d0120072d00182105200441183a00a803200420053a009f0320094119460d0120072d00192105200441193a00a803200420053a00a0032009411a460d0120072d001a21052004411a3a00a803200420053a00a1032009411b460d0120072d001b21052004411b3a00a803200420053a00a2032009411c460d0120072d001c21052004411c3a00a803200420053a00a3032009411d460d0120072d001d21052004411d3a00a803200420053a00a4032009411e460d0120072d001e21052004411e3a00a803200420053a00a5032009411f460d0120072d001f21052004411f3a00a803200420053a00a60320094120460d01200441d8006a41106a20044188036a41106a290300370300200441d8006a41086a20044188036a41086a290300370300200420072d00203a00a703200441d8006a41186a20044188036a41186a290300370300200441203a00a8032004200429038803220a3703e8012004200a370358410321050b200441206a41186a200441d8006a41186a290300370300200441206a41106a200441d8006a41106a290300370300200441206a41086a200441d8006a41086a290300370300200420042903583703200c020b200441003a00a8030b200441003602f001200442013703e8012004410f36025c200420044198016a3602582004200441e8016a3602002004419c036a41013602002004420137028c03200441b4bcc300360288032004200441d8006a36029803200441dcb7c00020044188036a103e1a20043502f00142208620043502e801841000024020042802ec01450d0020042802e801102c0b410421050b2008450d002007102c0b200441e8016a41186a2207200441206a41186a290300370300200441e8016a41106a2208200441206a41106a290300370300200441e8016a41086a2209200441206a41086a290300370300200420042903203703e8010240024020054104470d0020042802bc01450d012006102c0c010b200441186a2007290300370300200441106a2008290300370300200441086a2009290300370300200420042903e801370300024020042802bc01450d002006102c0b02400240024020050e0403020100030b200441d8006a41186a200441186a290300370300200441d8006a41106a200441106a290300370300200441d8006a41086a200441086a2903003703002004200429030037035820042002370320200420033703280240200220038450450d0042002102420021034201210a0c070b2004200441d8006a3602a802200441e8016a200441d8006a200441206a200441a8026a10b504024020042903e8014201520d00200441f8016a290300210320042903f00121024201210a0c070b20044190026a290300210320044188026a2903002102024020042903f0014201520d00200441e8016a41106a290300210a200441c0036a200441e8016a41186a290300370300200441b8036a200a37030020044188036a41086a41003a000020044199036a200441d8006a41086a290300370000200441a1036a200441d8006a41106a290300370000200441a9036a200441d8006a41186a2903003700002004410236028803200420042903583700910320044188036a10c8020b4201210a0c060b200441c8026a41e6dcc700410710c501200441d8026a419099c100410610c501200441e8016a200110e40220042802f001220541206a2206417f4c0d020240024020060d00410121010c010b200610322201450d040b200441003602602004200636025c20042001360258200441d8006a4100411010c8012004280258200428026022066a220120042900c802370000200141086a200441c8026a41086a2900003700002004200641106a2206360260200441d8006a2006411010c8012004280258200428026022066a220120042900d802370000200141086a200441d8026a41086a2900003700002004200641106a220136026020042802e8012106200441d8006a2001200510c80120042802582201200428026022076a2006200510c9081a2004200720056a2205360260024020042802ec01450d002006102c0b20044188036a2001200510c901200441e8016a41086a20044191036a290000370300200441e8016a41106a20044199036a290000370300200441e8016a41186a2205200441a1036a29000037030020042004290089033703e801024020042d0088034101470d00200441206a41186a2005290300370300200441206a41106a2205200441e8016a41106a290300370300200441206a41086a2206200441e8016a41086a290300370300200420042903e8013703200240200428025c450d002001102c0b200441d8006a41186a200441206a41186a290300370300200441d8006a41106a2005290300370300200441d8006a41086a200629030037030020042004290320370358200420023703a802200420033703b0020240200220038450450d0042002102420021034201210a0c070b2004200441d8006a3602b801200441e8016a200441d8006a200441a8026a200441b8016a10b504024020042903e8014201520d00200441f8016a290300210320042903f00121024201210a0c070b20044190026a290300210320044188026a2903002102024020042903f0014201520d00200441e8016a41106a290300210a200441c0036a200441e8016a41186a290300370300200441b8036a200a37030020044188036a41086a41003a000020044199036a200441d8006a41086a290300370000200441a1036a200441d8006a41106a290300370000200441a9036a200441d8006a41186a2903003700002004410236028803200420042903583700910320044188036a10c8020b4201210a0c060b200428025c450d042001102c0c040b20044188036a20012002200310b604200435028803420185210a20044198036a290300210320044190036a29030021020c040b200441c8026a41e6dcc700410710c501200441d8026a419099c100410610c501200441e8016a200110e40220042802f001220541206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b200441003602602004200636025c20042007360258200441d8006a4100411010c8012004280258200428026022066a220720042900c802370000200741086a200441c8026a41086a2900003700002004200641106a2206360260200441d8006a2006411010c8012004280258200428026022066a220720042900d802370000200741086a200441d8026a41086a2900003700002004200641106a220736026020042802e8012106200441d8006a2007200510c80120042802582207200428026022086a2006200510c9081a2004200820056a2205360260024020042802ec01450d002006102c0b20044188036a2007200510c901200441e8016a41086a20044191036a290000370300200441e8016a41106a20044199036a290000370300200441e8016a41186a2205200441a1036a29000037030020042004290089033703e80102400240024020042d0088034101470d0020044198016a41186a200529030037030020044198016a41106a2205200441e8016a41106a29030037030020044198016a41086a2206200441e8016a41086a290300370300200420042903e801370398010240200428025c450d002007102c0b200441b8016a41186a20044198016a41186a290300370300200441b8016a41106a2005290300370300200441b8016a41086a200629030037030020042004290398013703b801200441c8026a41e6dcc700410710c501200441d8026a418a99c100410610c501200441e8016a200441b8016a10d50220042802f001220541206a2206417f4c0d030240024020060d00410121070c010b200610322207450d050b200441003602e001200420063602dc01200420073602d801200441d8016a4100411010c80120042802d80120042802e00122066a220720042900c802370000200741086a200441c8026a41086a2900003700002004200641106a22063602e001200441d8016a2006411010c80120042802d80120042802e00122066a220720042900d802370000200741086a200441d8026a41086a2900003700002004200641106a22073602e00120042802e8012106200441d8016a2007200510c80120042802d801220720042802e00122086a2006200510c9081a2004200820056a22053602e001024020042802ec01450d002006102c0b20044188036a2007200510d803200441d8006a41086a20044188036a41086a290300370300200441d8006a41106a20044188036a41106a290300370300200441d8006a41186a220620044188036a41186a290300370300200441e8016a41086a200441b4036a290200370300200441e8016a41106a200441bc036a290200370300200441e8016a41186a2208200441c4036a290200370300200441e8016a41206a2209200441cc036a290200370300200441e8016a41286a220b200441d4036a290200370300200441e8016a41306a220c200441dc036a2802003602002004200429038803370358200420042902ac033703e80120042802a8032205450d01200441a8026a41186a2006290300370300200441a8026a41106a2206200441d8006a41106a220d290300370300200441a8026a41086a220e200441d8006a41086a220f290300370300200441206a41086a200441e8016a41086a2210290300370300200441206a41106a200441e8016a41106a2211290300370300200441206a41186a2008290300370300200441206a41206a2009290300370300200441206a41286a200b290300370300200441206a41306a200c280200360200200420042903583703a802200420042903e801370320024020042802dc01450d002007102c0b200441e8016a41186a200441b8016a41186a290300220a3703002011200441b8016a41106a29030022123703002010200441b8016a41086a2903002213370300200420042903b80122143703e80120044188036a41186a200a37030020044188036a41106a201237030020044188036a41086a201337030020044188036a41286a200e290300221537030020044188036a41306a2006290300221637030020044188036a41386a200441a8026a41186a29030022173703002004201437038803200420042903a80222183703a803200441d8006a41386a2017370300200441d8006a41306a2016370300200441d8006a41286a2015370300200441f8006a2018370300200441d8006a41186a200a370300200d2012370300200f2013370300200420143703580c020b200428025c450d042007102c4200210a0c050b024020042802dc01450d002007102c0b200441e8016a41186a200441b8016a41186a290300370300200441e8016a41106a200441b8016a41106a290300370300200441e8016a41086a200441b8016a41086a290300370300200420042903b8013703e8010b2005450d02200441e8016a41386a2207200441d8006a41386a290300370300200441e8016a41306a2208200441d8006a41306a290300370300200441e8016a41286a2209200441d8006a41286a290300370300200441e8016a41206a220b200441d8006a41206a290300370300200441e8016a41186a200441d8006a41186a2206290300370300200441e8016a41106a200441d8006a41106a220c290300370300200441e8016a41086a200441d8006a41086a220d290300370300200420042903583703e801200441a8026a41186a2006290300370300200441a8026a41106a200c290300370300200441a8026a41086a200d290300370300200420042903583703a80220044188036a41186a2206200729030037030020044188036a41106a2207200829030037030020044188036a41086a22082009290300370300200420053602a8032004200b29030037038803200441ac036a2004290320370200200441b4036a200441206a41086a290300370200200441bc036a200441206a41106a290300370200200441c4036a200441206a41186a290300370200200441cc036a200441206a41206a290300370200200441d4036a200441206a41286a290300370200200441dc036a200441206a41306a2802003602002006290300210a20072007290300221220027c22133703002006200a20037c2013201254ad7c3703002008200829030020037c200429038803221220027c220a201254ad7c22123703002004200a37038803200441b8016a20012002200310b604200441b8016a41106a2903002103200441b8016a41086a290300210220043502b8012113200442f3e885db96cddbb3203703d801200441d8016a20044188036a41386a200a201210ab04200441c8026a41e6dcc700410710c501200441d8026a418a99c100410610c501200441b8016a200441a8026a10d50220042802c001220541206a2206417f4c0d000240024020060d00410121010c010b200610322201450d020b200441003602a0012004200636029c01200420013602980120044198016a4100411010c80120042802980120042802a00122066a220120042900c802370000200141086a200441c8026a41086a2900003700002004200641106a22063602a00120044198016a2006411010c80120042802980120042802a00122066a220120042900d802370000200141086a200441d8026a41086a2900003700002004200641106a22013602a00120042802b801210620044198016a2001200510c801200428029801220120042802a00122076a2006200510c9081a2004200720056a22053602a001024020042802bc01450d002006102c0b2001200520044188036a10ac040240200428029c01450d002001102c0b024020042802ac032205450d00200541186c450d0020042802a803102c0b0240200441b8036a28020041ffffffff0371450d0020042802b403102c0b2013420185210a0c030b103b000b1039000b4200210a0b200020023703082000200a370300200041106a2003370300200441a0056a24000bfc0e0a057f027e027f0a7e017f047e017f017e017f027e230041f0036b2204240020032802002105200441286a41c1dcc700410610c501200441c8016a41acc8c700410710c50120044190016a200110d50202400240024002400240200428029801220341206a2206417f4c0d000240024020060d00410121070c010b200610322207450d020b200441003602202004200636021c20042007360218200441186a4100411010c8012004280218200428022022066a22072004290028370000200741086a200441286a41086a2900003700002004200641106a2206360220200441186a2006411010c8012004280218200428022022066a220720042900c801370000200741086a200441c8016a41086a2900003700002004200641106a22063602202004280290012107200441186a2006200310c80120042802182206200428022022086a2007200310c9081a2004200820036a22083602200240200428029401450d002007102c0b200441286a2006200810d602200429032821094200210a20044200370328200441f4006a280200210b200441f0006a280200210c0240024002400240024020094201520d00200441c0006a290300210d2004290338210e2004290330210a200441e0006a290300210f200441d8006a2903002110200441d0006a2903002111200441c8006a290300211220042903682113200241086a29030021142002290300211542002116410121170c010b41002117200229030022154280c8afa025544100200241086a2903002214501b0d0142808080808080c00021164200210e4200210d420021134200211242002111420021104200210f0b42002118200a20157c2219200a542203200e20147c2003ad7c220a200e54200a200e511b4101470d010b42002116410121024100210342002118410021070c010b200441b0016a2011370300200441b8016a2010370300200441c0016a200f370300200420123703a80120042019370390012004200d3703a0012004200a3703980102400240427f2019200d7c220e200e2019542203200a20127c2003ad7c220e200a54200e200a511b22031b221a4280c8afa025544100427f200e20031b220e501b0d00200441a0016a290300210e200429039801210d200429039001211a4201211b0c010b024002402019200d84200a2012848450450d004200211b0c010b4200211b200441c8016a41186a22024200370300200441c8016a41106a22074200370300200441c8016a41086a22034200370300200442003703c801200441e0036a41d4dcc700410810c5012003200441e0036a41086a221c290000370300200420042900e0033703c801200441e0036a41bba8c700410d10c5012002201c290000370300200720042900e0033703002004200441c8016a412010d301200441106a290300210d2004290308211d2004280200211e200242003703002007420037030020034200370300200442003703c801200441e0036a41d4dcc700410810c5012003201c290000370300200420042900e0033703c801200441e0036a41bba8c700410d10c5012002201c290000370300200720042900e00337030020044200200d4200201e1b220d200e7d201d4200201e1b221d201a54ad7d221f201d201a7d2220201d56201f200d56201f200d511b22021b3703e80320044200202020021b3703e003200441c8016a4120200441e0036a411010a70220044180026a200e370300200441f8016a201a370300200341013a0000200441d9016a200541086a290000370000200441e1016a200541106a290000370000200441e9016a200541186a290000370000200441023602c801200420052900003700d101200441c8016a10c8020b0b20094201512107200441f8006a41106a200a370300200441d0006a2011370300200441c8006a2012370300200441d8006a2010370300200441286a41106a200d370300200441e0006a200f370300200441c0006a200e3703002004201937038001200420133703682004201a370330410021032004200b410020171b3602742004200c410020171b3602702004201b4201512202ad370328024020020d002006200810b401410021020c010b20062008200441306a10d80241002102410121030b0240200428021c450d002006102c0b02402002450d0020004201370300200041106a201842108620164230888442ffffffffffff3f8337030020002003ad4208862016421086842007ad843703080c050b2016423088201842108684210e20032007452206710d0220032006720d03200441c8016a41086a41043a0000200441d9016a200141086a290000370000200441e1016a200141106a290000370000200441e9016a200141186a290000370000200441003602c801200420012900003700d101200441c8016a10c8020c030b103b000b1039000b200441c8016a41086a41033a0000200441d9016a200141086a290000370000200441e1016a200141106a290000370000200441e9016a200141186a290000370000200441003602c801200420012900003700d101200441c8016a10c8020b2000200e37030820004200370300200041286a2014370300200041206a2015370300200041186a200a370300200041106a20193703000b200441f0036a24000bbf0d04057f077e047f017e230041e0036b2204240002400240024002400240024002402002200384500d00200441306a41c1dcc700410610c501200441b8016a41acc8c700410710c50120044180016a200110d502200428028801220541206a2206417f4c0d010240024020060d00410121070c010b200610322207450d030b200441003602282004200636022420042007360220200441206a4100411010c8012004280220200428022822066a22072004290030370000200741086a200441306a41086a2900003700002004200641106a2206360228200441206a2006411010c8012004280220200428022822066a220720042900b801370000200741086a200441b8016a41086a2900003700002004200641106a22063602282004280280012107200441206a2006200510c80120042802202206200428022822086a2007200510c9081a2004200820056a22053602280240200428028401450d002007102c0b200441306a2006200510d602200429033021092004420037033020094201520d0302402004290338220a20027c220b200a5422072004290340220c20037c2007ad7c220a200c54200a200c511b450d00200441b8016a410310d7020c050b200441e8006a290300210d200441e0006a290300210e200441d0006a290300210c200441c8006a290300210f200441fc006a2802002108200441a0016a200441d8006a290300370300200441a8016a200e370300200441b0016a200d3703002004200c370398012004200b370380012004200a370388012004200f3703900102400240427f200b200f7c220d200d200b542207200a200c7c2007ad7c220d200a54200d200a511b22071b220e4280c8afa025544100427f200d20071b220d501b0d0020044190016a290300210a200429038801210c200429038001210b4201210f0c010b02400240200b200f84200a200c848450450d004200210f0c010b4200210f200441b8016a41186a22104200370300200441b8016a41106a22114200370300200441b8016a41086a22074200370300200442003703b801200441d0036a41d4dcc700410810c5012007200441d0036a41086a2212290000370300200420042900d0033703b801200441d0036a41bba8c700410d10c50120102012290000370300201120042900d003370300200441086a200441b8016a412010d301200441086a41106a290300210a2004290310210c20042802082113201042003703002011420037030020074200370300200442003703b801200441d0036a41d4dcc700410810c50120072012290000370300200420042900d0033703b801200441d0036a41bba8c700410d10c50120102012290000370300201120042900d00337030020044200200a420020131b220a200d7d200c420020131b220c200e54ad7d220b200c200e7d2214200c56200b200a56200b200a511b22101b3703d80320044200201420101b3703d003200441b8016a4120200441d0036a411010a702200441f0016a200d370300200441e8016a200e370300200741013a0000200441c9016a200141086a290000370000200441d1016a200141106a290000370000200441d9016a200141186a290000370000200441023602b801200420012900003700c101200441b8016a10c8020b0b20094201512107200441c0006a200c370300200441c8006a200a3703002004200836027c2004200b3703382004200f4201512208ad370330024020080d002006200510b4014200210a41002105410021080c060b20062005200441386a10d8024200210a41002108410121050c050b20004100360200200041106a4200370300200041086a42003703000c050b103b000b1039000b200441b8016a410810d7020b20042802b801211020042902bc0122094280807c83210a2009420888a721052009a72107410121080b02402004280224450d002006102c0b02400240024020080d000240200741ff017122060d00200541ff01710d020b2006450d02200541ff01710d02200441b8016a41086a41043a0000200441c9016a200141086a290000370000200441d1016a200141106a290000370000200441d9016a200141186a290000370000200441003602b801200420012900003700c101200441b8016a10c8020c020b2000201036020420004101360200200041086a2005ad42ff01834208862007ad42ff018384200a843702000c020b200441b8016a41086a41033a0000200441c9016a200141086a290000370000200441d1016a200141106a290000370000200441d9016a200141186a290000370000200441003602b801200420012900003700c101200441b8016a10c8020b20004100360200200041106a2003370300200041086a20023703000b200441e0036a24000b940102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad84200510242207422088a72203450d0041002105024002402007a722022d00000e020100020b2003417f6a4104490d0120022800012101410121050b2002102c2000200136020420002005360200200641106a24000f0b41f2b3c800412e200641086a41a0b4c80041b0b4c8001040000bf00201027f230041106b220224000240024002400240024020002802000e0401020300010b2002200128021841e6b5c800410f2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41f8b5c80010661a20022d0008210120022802042203450d03200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d010b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010b200220013a00080c030b20012802184188b6c80041142001411c6a28020028020c11000021010c020b2001280218419cb6c80041152001411c6a28020028020c11000021010c010b200128021841b1b6c80041132001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bb508020a7f027e230041e0016b22022400024002400240200128020022032001280204460d00200128021021042001200341046a3602004102210520032f010021062001280208220720072f0100200341026a2f010022076a220341ffff03200341ffff03491b3b0100024002402001410c6a280200280200220128020820064b0d00410021030c010b200241a8016a200128020020064105746a2201410f6a290000370300200241b0016a200141176a290000370300200241b8016a2001411f6a2d00003a0000200220012f00003b01be01200220012900073703a0012001280003210820012d00022106410121030b200241c0016a41086a2209200241a0016a41086a290300370300200241c0016a41106a220a200241a0016a41106a290300370300200241c0016a41186a220b200241a0016a41186a2d00003a0000200220022f01be013b01de01200220022903a0013703c0014101210102402003450d0020024180016a41086a200929030037030020024180016a41106a200a29030037030020024180016a41186a200b2d00003a0000200220022f01de013b019e01200220022903c0013703800141002101200821050b200241e0006a41086a20024180016a41086a290300370300200241e0006a41106a20024180016a41106a290300370300200241e0006a41186a20024180016a41186a2d00003a0000200220022f019e013b017e20022002290380013703602001450d012002200536028001200220022d00603a00840120022002280061360240200220022800643600432004200228008101360001200420053a000020042002280240360005200441086a200228004336000020022f013e2101200241186a2203200241206a41186a2d00003a0000200241106a2204200241206a41106a290300370300200241086a2205200241206a41086a29030037030020022002290320370300200220013b01c00120024180016a41186a20032d00003a000020024180016a41106a200429030037030020024180016a41086a200529030037030020022002290300370380010b410021010c010b200241206a41086a200241e0006a41086a290300220c370300200241206a41106a200241e0006a41106a290300220d370300200241086a2201200c370300200241106a2203200d370300200241186a2204200241e0006a41186a2d00003a000020022002290360220c3703202002200c370300200220022f017e22083b01c00120024180016a41186a220920042d00003a000020024180016a41106a2204200329030037030020024180016a41086a220320012903003703002002200229030037038001200041056a2005360000200041046a20063a0000200020083b0102200041226a20073b01002000200229038001370009200041116a2003290300370000200041196a2004290300370000200041216a20092d00003a0000410121010b200020013b0100200241e0016a24000bab0402047f027e23004180026b220424000240024020012d000d450d0041f4a2c3002105413121010c010b4101210602400240200328020022074101460d00200128020022054521060c010b200110bb044100210520014100360208200141003602000b20042002290000220837031802400240024020060d00200128020421020c010b41e40110322205450d014100210220054100360200200541046a200441f8006a41860110c9081a200541003b018a012005418c016a200441206a41d80010c9081a20014100360204200120053602000b200441f8006a20022005200441186a10910202400240024020042802784101470d00200441086a41086a20044184016a28020022053602002004200429027c2209370308200441f8006a41086a20053602002004200937037820042008370388012004200136028401200441003602282004420137032020070d01200441206a41004101102f2004280220200428022822056a41003a00002004200541016a2205360228200341086a2903002108200441206a20054108102f2004280220200428022822056a20083700002004200541086a3602280c020b41c7a2c3002105412d21010c030b200441206a41004101102f2004280220200428022822056a41013a00002004200541016a360228200441206a200341046a1080030b200441f8006a200441206a10bc04200120073a000d41002105200141003a000c0c010b1039000b200020013602042000200536020020044180026a24000ba80201057f230041c0006b2201240002400240200028020022020d0041002103200141186a41003602002001410036020c0c010b2000280208210320002802042100200221040240034020022f018a0121052000450d012000417f6a2100200220054102746a41e4016a280200210220042802e40121040c000b0b2001411c6a2005360200200141186a200236020020012000360214200141003602102001200436020c200120003602080b20012003360220200141286a200141086a10a10803400240200128023022020d000240200128020c2200450d00200028020021022000102c2002450d000340200228020021002002102c2000210220000d000b0b200141c0006a24000f0b02402001280234450d002002102c0b200141286a200141086a10a1080c000b0bb51009017f017e087f017e027f017e017f017e067f230041a0026b2202240020002902102103200028020821042000280200210520002802042106200241086a2207200141086a280200360200200220012902003703000240024002400240024002400240024020062f018a012201410b490d00410521074100210802400240200441054f0d0041042107200421090c010b41052109024002402004417b6a0e020201000b200441796a210941012108410621070c010b41002109410121080b41e40110322201450d0320014100360200200141046a200241106a41860110c908210a200141003b018a012001418c016a20024198016a41d80010c908210b20062007410c6c6a220441086a290200210c200441046a280200210d200620074103746a220e418c016a290000210f200b200e4194016a20062f018a012007417f736a220e41037410c9081a200a200441106a200e410c6c10c9081a200620073b018a012001200e3b018a012001200620081b220420094103746a22074194016a2007418c016a220720042f018a0120096b41037410ca081a2007200337000020042009410c6c6a220741106a200741046a220e20042f018a0120096b410c6c10ca081a2007410c6a200241086a280200360200200e2002290300370200200420042f018a0141016a3b018a0102400240200628020022040d00410021050c010b410021070340200d2110200c2103200f211120012112200621012004210620052007470d0620012f018801210e02400240024020062f018a012201410b490d004100210b410421090240200e4105490d00200e210902400240200e417b6a0e020201000b200e41796a210e4101210b410621090c010b4100210e4101210b410521090b41940210322201450d08200541016a21054100210420014100360200200141046a200241106a41860110c9082113200141003b018a012001418c016a20024198016a41880110c9082114200641046a22152009410c6c6a2208290204210c2008280200210d2006418c016a220a20094103746a290000210f2014200a200941016a22164103746a20062f018a0122172009417f736a220741037410c908211420132008410c6a2007410c6c10c9082113200620093b018a01200120073b018a01200141e4016a200620164102746a41e4016a201720096b41027410c908210802400340200120044102746a41e4016a280200220920043b018801200920013602002004200420074922096a220420074b0d0120090d000b0b200b450d01200e41027420086a41086a2008200e41016a22044102746a220720012f018a01200e6b41027410ca081a20072012360200201420044103746a2014200e4103746a220720012f018a01200e6b41037410ca081a200720113700002013200e410c6c6a2207410c6a200720012f018a01200e6b410c6c10ca081a2007200337020420072010360200200120012f018a0141016a22073b018a012004200741ffff037122074b0d020340200120044102746a41e4016a280200220920043b01880120092001360200200420042007496a220920074b0d03200420074f210e20092104200e450d000c030b0b200e410274200641e4016a22076a41086a2007200e41016a22044102746a22072001200e6b220141027410ca081a200720123602002006418c016a220720044103746a2007200e4103746a2207200141037410ca081a200720113700002006200e410c6c6a220741106a200741046a22092001410c6c10ca081a200741086a200337020020092010360200200620062f018a0141016a22013b018a01200e200141ffff037122014f0d050340200620044102746a41e4016a280200220720043b01880120072006360200200420042001496a220720014b0d06200420014f2109200721042009450d000c060b0b200e410274200641e4016a22076a41086a2007200e41016a22044102746a220720062f018a01200e6b41027410ca081a20072012360200200a20044103746a200a200e4103746a220720062f018a01200e6b41037410ca081a200720113700002015200e410c6c6a2207410c6a200720062f018a01200e6b410c6c10ca081a2007200337020420072010360200200620062f018a0141016a22073b018a012004200741ffff037122074b0d000340200620044102746a41e4016a280200220920043b018801200920063602002004200420074922096a220420074b0d0120090d000b0b20052107200628020022040d000b0b200028020c2207280200450d0541940210322204450d0320044100360200200441046a200241106a41860110c9081a200441003b018a012004418c016a20024198016a41880110c9081a2004200728020022093602e4012007200436020020072007280204220641016a360204200941003b0188012009200436020020062005470d0620042f018a012209410a4b0d072004200941016a22063b018a01200420094103746a418c016a200f37000020042009410c6c6a220941086a200c370200200941046a200d360200200420064102746a41e4016a2001360200200120063b018801200120043602002007200728020841016a3602080c020b200620044103746a22094194016a2009418c016a2209200120046b41037410ca081a2009200337000020062004410c6c6a220141106a200141046a220920062f018a0120046b410c6c10ca081a2001410c6a200728020036020020092002290300370200200620062f018a0141016a3b018a010b200028020c2204200428020841016a3602080b200241a0026a24000f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000bd20202017f027e23004180026b220424000240024020012d000d450d0041f4a2c3002101413121020c010b200110bb042001410036020820014100360200200420022900002205370318024041e40110322202450d0020024100360200200241046a200441f8006a41860110c9081a200241003b018a012002418c016a200441206a41d80010c9081a2001410036020420012002360200200441f8006a41002002200441186a109102024020042802784101460d0041c7a2c3002101412d21020c020b200441086a41086a20044184016a28020022023602002004200429027c2206370308200441f8006a41086a20023602002004200637037820042005370388012004200136028401200441206a20032802002003280204109801200441f8006a200441206a10bc0420014180023b010c410021010c010b1039000b200020023602042000200136020020044180026a24000bb80d03057f017e017f230041f0076b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050d0b2006450d1120042d0001210520012003417e6a22063602042001200441026a36020020050e0a0102030405060708090a110b2000410a3a00000c120b20024190046a200110bf042002280290042203450d0f20024198046a22062802002105200228029404210420024190046a200110c0040240200228029004450d00200220022f01a8023b01a402200628020021012002290390042107200241d0006a20024180066a41d40110c9081a410021080c0c0b2003200510c3022004450d0f20044198026c450d0f2003102c0c0f0b20024190046a200110bf042002280290042203450d0e20024198046a22062802002105200228029404210420024190046a200110c0040240200228029004450d00200220022f01a8023b01a402200628020021012002290390042107200241d0006a20024180066a41d40110c9081a410121080c0b0b2003200510c3022004450d0e20044198026c450d0e2003102c0c0e0b20024190046a200110bf042002280290042203450d0d20024198046a22062802002105200228029404210420024190046a200110c0040240200228029004450d00200220022f01a8023b01a402200628020021012002290390042107200241d0006a20024180066a41d40110c9081a410221080c0a0b2003200510c3022004450d0d20044198026c450d0d2003102c0c0d0b200241086a200110c1042002290308a70d0c2002290310210720024190046a200110bf042002280290042203450d0c200220022f01a8023b01a40220024198046a28020021052002280294042104200241d0006a20024180066a41d40110c9081a410321080c080b2006450d0b20042d0002210520012003417d6a3602042001200441036a3602004100210602400240024020050e030200010e0b410121060c010b410221060b20024190046a2001108a022002280290042203450d0b200220022f01a8023b01a40220024198046a28020021052002280294042104200241d0006a20024180066a41d40110c9081a410421080c080b20024180066a2001109e012002290380064205510d0a200241a8026a20024180066a41e80110c9081a20024180066a200110be0420022d008006210120024190046a20024180066a41017241ef0110c9081a2001410a460d0820024180066a20024190046a41ef0110c9081a41f001103222030d050c0b0b20024180066a2001109e012002290380064205510d09200241a8026a20024180066a41e80110c9081a20024180066a200110be0420022d008006210120024190046a20024180066a41017241ef0110c9081a2001410a460d0820024180066a20024190046a41ef0110c9081a41f00110322203450d0a200320013a0000200341016a20024180066a41ef0110c9081a200241b8026a280200210120022802a802210420022802ac02210520022903b0022107200241d0006a200241bc026a41d40110c9081a200220022f01a6023b01a402410621080c050b200241286a200110870220022802280d08200228022c2103200241206a200110870220022802200d0820022802242104200241186a200110870220022802180d08200228021c2105200220022f0190043b01a402200241d0006a20024180066a41d40110c9081a410721080c040b200241306a200110870220022802300d0720022802342103200220022f0190043b01a402200241d0006a20024180066a41d40110c9081a410821080c030b200241c8006a200110870220022802480d06200228024c2103200241c0006a200110870220022802400d0620022802442104200241386a200110870220022802380d06200228023c2105200220022f0190043b01a402200241d0006a20024180066a41d40110c9081a410921080c020b2000410a3a00000c070b200320013a0000200341016a20024180066a41ef0110c9081a200241b8026a280200210120022802a802210420022802ac02210520022903b0022107200241d0006a200241bc026a41d40110c9081a200220022f01a6023b01a402410521080b0b200020063a0001200020083a0000200041186a2001360200200041106a20073703002000410c6a2005360200200041086a2004360200200041046a2003360200200041026a20022f01a4023b01002000411c6a200241d0006a41d40110c9081a0c040b200241a8026a10a2010c010b200241a8026a10a2010b2000410a3a00000c010b1039000b200241f0076a24000be21107037f017e0a7f037e027f027e017f230041f0096b22022400200241386a2001108702024002402002280238450d00200041003602000c010b024002400240200228023c220320012802044198026e2204200420034b1bad4298027e2205422088a70d002005a72204417f4c0d0002400240024020040d00410821060c010b200410322206450d010b410021072002410036024820022006360240200220044198026e36024402402003450d0020024188086a41186a2108200241b8046a41186a2109200241a0066a41106a210a200241a0066a41186a210b20024188086a41106a210c034020012802042204450d042001280200220d2d0000210e20012004417f6a3602042001200d41016a3602004100210d024002400240024002400240024002400240024002400240024002400240200e0e0c0b0a00010203040506070809130b4102210d0c0a0b4103210d0c090b20024188066a2001108a02200228028806220f450d10200229028c062105200241b8046a20024188086a41d00110c9081a200241a0046a41106a200a290300370300200241a0046a41086a200241a0066a41086a290300370300200220022903a0063703a0044104210d410021040c0a0b20024188066a2001108a02200228028806220f450d0f200229028c062105200241b8046a20024188086a41d00110c9081a200241a0046a41106a200a290300370300200241a0046a41086a200241a0066a41086a290300370300200220022903a0063703a0044105210d410021040c090b20024188086a2001109e0120022903880822054205510d0e200c29030021102002290390082111200241b8046a200841d00110c9081a200241a0046a41086a200241a0066a41086a290300370300200241a0046a41106a200a290300370300200220022903a0063703a0044106210d410021040c080b20024188086a2001109e0120022903880822054205510d0d200c29030021102002290390082111200241b8046a200841d00110c9081a200241a0046a41086a200241a0066a41086a290300370300200241a0046a41106a200a290300370300200220022903a0063703a0044107210d410021040c070b20024188066a2001108a02200228028806220e450d05200229028c062112200241086a200110f70302402002290308a70d00200241086a41106a290300211020022903102111200241b8046a20024188086a41d00110c9081a200241a0046a41106a200a2903003703004108210d200241a0046a41086a200241a0066a41086a290300370300200220022903a0063703a00441002104200e210f201221050c070b2012a72204201320041b21132004450d052013450d05200e102c0c050b200241a0066a2001108a0220022802a006220e450d0420022902a4062112200241a0066a200110bb07024020022d00a0064107460d00200241b8046a41086a200a41086a290300370300200241b8046a41106a200a41106a2903003703002002200a2903003703b804200241a0066a41086a290300211020022903a0062111200920024188086a41b80110c9081a200241a0046a41106a20024188066a41106a290300370300200241a0046a41086a20024188066a41086a29030037030020022002290388063703a0044109210d41002104200e210f201221050c060b2012a72204201420041b21142004450d042014450d04200e102c0c040b20024188086a2001109e012002290388084205510d03200241a0066a20024188086a41e80110c9081a200241206a200110f70302402002290320a70d00200241206a41106a290300211520022903282116200a290300211020022903a806211120022903a0062105200241b8046a200b41d00110c9081a200241a0046a41086a20024188066a41086a290300370300200241a0046a41106a20024188066a41106a29030037030020022002290388063703a004410a210d410021040c050b200241a0066a10a2010c030b20024188086a2001109e012002290388084205510d02200241a0066a20024188086a41e80110c9081a20024188086a200110bb07024020022d0088084107460d00200241a0046a41086a200c41086a290300370300200241a0046a41106a200c41106a2903003703002002200c2903003703a00420024188086a41086a29030021152002290388082116200a290300211020022903a806211120022903a0062105200241b8046a200b41d00110c9081a410b210d410021040c040b200241a0066a10a2010c020b4101210d0b200241d0026a200241b8046a41d00110c9081a200241b8026a41106a200241a0046a41106a290300370300200241b8026a41086a200241a0046a41086a290300370300200220022903a0043703b8020c020b410c210d410121040b200241d0026a200241b8046a41d00110c9081a200241b8026a41106a200241a0046a41106a290300370300200241b8026a41086a200241a0046a41086a290300370300200220022903a0043703b80220040d060b200241e8006a200241d0026a41d00110c9081a200241d0006a41106a220e200241b8026a41106a290300370300200241d0006a41086a2217200241b8026a41086a290300370300200220022903b802370350024020072002280244470d00200241c0006a2007410110930520022802482107200228024021060b200620074198026c6a2204200f3602042004200d360200200441186a2010370200200441106a2011370200200441086a2005370200200441206a200241e8006a41d00110c9081a200441f8016a2015370200200441f0016a201637020020044180026a200229035037020020044188026a201729030037020020044190026a200e2903003702002002200741016a22073602482003417f6a22030d000b0b20002002290340370200200041086a200241c0006a41086a2802003602000c040b1039000b103b000b200241d0026a200241b8046a41d00110c9081a200241b8026a41106a200241a0046a41106a290300370300200241b8026a41086a200241a0046a41086a290300370300200220022903a0043703b8020b2000410036020020022802402201200710c30220022802442204450d0020044198026c450d002001102c0b200241f0096a24000bc10d03037f017e0c7f230041b00b6b22022400200241186a2001108702024002402002280218450d00200041003602000c010b024002400240200228021c220320012802044188026e2204200420034b1bad4288027e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410322206450d020b410021072002410036022820022006360220200220044188026e3602240240024002402003450d0020024184046a41dc016a2108200241f0056a410c6a2109200241f0056a41046a210a200241c8096a410472210b0340024002400240024002400240024002400240024020012802042204450d002001280200220c2d0000210d20012004417f6a3602042001200c41016a360200200d0e0701020304050607000b20024198026a20024184046a41ec0110c9081a0c0f0b20024198026a20024184046a41ec0110c9081a4100210c0c070b200241f0056a200110bf0420022802f005220e450d0a20022802f805210f20022802f4052110200241f0056a2001109e01024020022903f00522054205510d0020022802f805211120024184046a200941dc0110c9081a200841086a200241c8096a41086a290300370200200820022903c8093702004101210c0c060b200e200f10c3022010450d0a20104198026c450d0a200e102c0c0a0b200241c8096a200110bf0420022802c809220e450d0920022802d009210f20022802cc092110200241c8096a2001109e010240024020022903c8094205510d00200241e0076a200241c8096a41e80110c9081a200241c8096a200110c00420022802c809450d0120022802d009211120022903c8092105200a200241e0076a41e80110c9081a20024184046a200241f0056a41ec0110c9081a4102210c0c060b200e200f10c3022010450d0a20104198026c450d0a200e102c0c0a0b200241e0076a10a201200e200f10c3022010450d0920104198026c450d09200e102c0c090b200241c8096a200110bf0420022802c809220e450d0820022802d009210f20022802cc092110200241c8096a200110bf04024020022802c809450d0020022802d009211120022903c809210520024184046a200241f0056a41ec0110c9081a4103210c0c040b200e200f10c3022010450d0820104198026c450d08200e102c0c080b200241c8096a200110bf0420022802c809220e450d0720022802d009210f20022802cc092110200241c8096a2001109e010240024020022903c8094205510d00200241e0076a200241c8096a41e80110c9081a200241c8096a200110c00420022802c809450d0120022802d009211120022903c8092105200a200241e0076a41e80110c9081a20024184046a200241f0056a41ec0110c9081a4104210c0c040b200e200f10c3022010450d0820104198026c450d08200e102c0c080b200241e0076a10a201200e200f10c3022010450d0720104198026c450d07200e102c0c070b200241c8096a200110bf0420022802c809220e450d0620022802d009210f20022802cc092110200241c8096a2001109e010240024020022903c8094205510d00200241e0076a200241c8096a41e80110c9081a200241c8096a200110c00420022802c809450d0120022802d009211120022903c8092105200a200241e0076a41e80110c9081a20024184046a200241f0056a41ec0110c9081a4105210c0c030b200e200f10c3022010450d0720104198026c450d07200e102c0c070b200241e0076a10a201200e200f10c3022010450d0620104198026c450d06200e102c0c060b200241086a200110c1042002290308a70d0520022903102105200241f0056a2001109e0120022903f0054205510d05200241c8096a200241f0056a41e80110c9081a200241f0056a200110bf0420022802f005220e450d0420022802f805210f20022802f405211020022802c809211120024184046a200b41e40110c9081a4106210c0b20024198026a20024184046a41ec0110c9081a0b2002412c6a20024198026a41ec0110c9081a024020072002280224470d00200241206a200710950520022802282107200228022021060b200620074188026c6a2204200e3602042004200c360200200441186a2011360200200441106a20053702002004410c6a200f360200200441086a20103602002004411c6a2002412c6a41ec0110c9081a2002200741016a22073602282003417f6a22030d000b0b20002002290320370200200041086a200241206a41086a2802003602000c050b200241c8096a10a2010b20024198026a20024184046a41ec0110c9081a0c020b103b000b1039000b2000410036020020022802202204200710c40220022802242201450d0020014188026c450d002004102c0b200241b00b6a24000bb40404057f017e027f017e0240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a3602000240200441037122064103460d00024002400240024020060e03000102000b2004410276ad21070c020b41012106024020050d000c050b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d04200141fcff0371410276ad21070c010b410121060240200541034f0d000c040b200341036a2d0000210520032f0001210820012002417c6a3602042001200341046a3602002008200541107472410874200472220141808004490d032001410276ad21070b410021060c020b024002400240200441027622090e050002020201020b20054104490d022003350001210720012002417b6a3602042001200341056a36020020074280808080045421060c030b20054108490d01200329000121072001200241776a3602042001200341096a3602002007428080808080808080015421060c020b200441134b0d00200941046a21082002417e6a2102200341026a2103410021044200210741012106034002402002417f470d000c030b2003417f6a310000210a20012002360204200120033602002002417f6a2102200341016a2103200a2004410374413871ad862007842107200441016a22052104200541ff01712008490d000b2007427f412820094103746b413871ad885821060c010b410121060b2000200737030820002006ad3703000ba30e03057f017e017f230041f0076b220224000240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d0b200128020022032802042204450d10200328020022052d0000210620032004417f6a3602042003200541016a36020020060e0a0102030405060708090a100b2000410a3a00000c110b20024190046a200110c3042002280290042203450d0e20024198046a22062802002105200228029404210420024190046a200110c4040240200228029004450d00200220022f01a8023b01a402200628020021012002290390042107200241d0006a20024180066a41d40110c9081a410021080c0c0b2003200510c3022004450d0e20044198026c450d0e2003102c0c0e0b20024190046a200110c3042002280290042203450d0d20024198046a22062802002105200228029404210420024190046a200110c4040240200228029004450d00200220022f01a8023b01a402200628020021012002290390042107200241d0006a20024180066a41d40110c9081a410121080c0b0b2003200510c3022004450d0d20044198026c450d0d2003102c0c0d0b20024190046a200110c3042002280290042203450d0c20024198046a22062802002105200228029404210420024190046a200110c4040240200228029004450d00200220022f01a8023b01a402200628020021012002290390042107200241d0006a20024180066a41d40110c9081a410221080c0a0b2003200510c3022004450d0c20044198026c450d0c2003102c0c0c0b200241086a200110c5042002290308a70d0b2002290310210720024190046a200110c3042002280290042203450d0b200220022f01a8023b01a40220024198046a28020021052002280294042104200241d0006a20024180066a41d40110c9081a410321080c080b200128020022032802042204450d0a200328020022052d0000210820032004417f6a3602042003200541016a3602004100210602400240024020080e030200010d0b410121060c010b410221060b20024190046a200110c6042002280290042203450d0a200220022f01a8023b01a40220024198046a28020021052002280294042104200241d0006a20024180066a41d40110c9081a410421080c080b20024180066a200110a0012002290380064205510d09200241a8026a20024180066a41e80110c9081a2001200128020441016a2203360204200320012802084b0d0820024180066a200110c20420022d008006210420024190046a20024180066a41017241ef0110c9081a2004410a460d0820024180066a20024190046a41ef0110c9081a41f001103222030d050c0a0b20024180066a200110a0012002290380064205510d08200241a8026a20024180066a41e80110c9081a2001200128020441016a22033602040240200320012802084b0d0020024180066a200110c20420022d008006210420024190046a20024180066a41017241ef0110c9081a2004410a460d0020024180066a20024190046a41ef0110c9081a41f00110322203450d0a200320043a0000200341016a20024180066a41ef0110c9081a20012001280204417f6a360204200241b8026a280200210120022802a802210420022802ac02210520022903b0022107200241d0006a200241bc026a41d40110c9081a200220022f01a6023b01a402410621080c060b200241a8026a10a2010c080b200241286a200110b00320022802280d07200228022c2103200241206a200110b00320022802200d0720022802242104200241186a200110b00320022802180d07200228021c2105200220022f0190043b01a402200241d0006a20024180066a41d40110c9081a410721080c040b200241306a200110b00320022802300d0620022802342103200220022f0190043b01a402200241d0006a20024180066a41d40110c9081a410821080c030b200241c8006a200110b00320022802480d05200228024c2103200241c0006a200110b00320022802400d0520022802442104200241386a200110b00320022802380d05200228023c2105200220022f0190043b01a402200241d0006a20024180066a41d40110c9081a410921080c020b2000410a3a00000c060b200320043a0000200341016a20024180066a41ef0110c9081a20012001280204417f6a360204200241b8026a280200210120022802a802210420022802ac02210520022903b0022107200241d0006a200241bc026a41d40110c9081a200220022f01a6023b01a402410521080b0b200020063a0001200020083a0000200041186a2001360200200041106a20073703002000410c6a2005360200200041086a2004360200200041046a2003360200200041026a20022f01a4023b01002000411c6a200241d0006a41d40110c9081a0c030b200241a8026a10a2010b2000410a3a00000c010b1039000b200241f0076a24000bba1206037f017e0b7f037e027f027e230041f0096b22022400200241386a200110b003024002402002280238450d00200041003602000c010b02400240024002400240200228023c220320012802002802044198026e2204200420034b1bad4298027e2205422088a70d002005a72204417f4c0d0002400240024020040d00410821060c010b200410322206450d010b2001200128020441016a2207360204410021082002410036024820022006360240200220044198026e2204360244200720012802084b0d042003450d0320024188086a41186a2109200241b8046a41186a210a200241a0066a41106a210b200241a0066a41186a210c20024188086a41106a210d41002108024003400240024002400240200128020022042802042207450d002004280200220e2d0000210f20042007417f6a3602042004200e41016a36020041002107024002400240024002400240024002400240024002400240200f0e0c0b0a000102030405060708090c0b410221070c0a0b410321070c090b20024188066a200110c6042002280288062210450d09200229028c062105200241b8046a20024188086a41d00110c9081a200241a0046a41106a200b290300370300200241a0046a41086a200241a0066a41086a290300370300200220022903a0063703a00441042107410021040c0b0b20024188066a200110c6042002280288062210450d08200229028c062105200241b8046a20024188086a41d00110c9081a200241a0046a41106a200b290300370300200241a0046a41086a200241a0066a41086a290300370300200220022903a0063703a00441052107410021040c0a0b20024188086a200110a00120022903880822054205510d07200d29030021112002290390082112200241b8046a200941d00110c9081a200241a0046a41086a200241a0066a41086a290300370300200241a0046a41106a200b290300370300200220022903a0063703a00441062107410021040c090b20024188086a200110a00120022903880822054205510d06200d29030021112002290390082112200241b8046a200941d00110c9081a200241a0046a41086a200241a0066a41086a290300370300200241a0046a41106a200b290300370300200220022903a0063703a00441072107410021040c080b20024188066a200110c604200228028806220e450d06200229028c062113200241086a200110b10302402002290308a70d00200241086a41106a290300211120022903102112200241b8046a20024188086a41d00110c9081a200241a0046a41106a200b29030037030041082107200241a0046a41086a200241a0066a41086a290300370300200220022903a0063703a00441002104200e2110201321050c080b2013a72204201420041b21142004450d062014450d06200e102c0c060b200241a0066a200110c60420022802a006220e450d0520022902a4062113200241a0066a200110bc07024020022d00a0064107460d00200241b8046a41086a200b41086a290300370300200241b8046a41106a200b41106a2903003703002002200b2903003703b804200241a0066a41086a290300211120022903a0062112200a20024188086a41b80110c9081a200241a0046a41106a20024188066a41106a290300370300200241a0046a41086a20024188066a41086a29030037030020022002290388063703a0044109210741002104200e2110201321050c070b2013a72204201520041b21152004450d052015450d05200e102c0c050b20024188086a200110a0012002290388084205510d04200241a0066a20024188086a41e80110c9081a200241206a200110b10302402002290320a70d00200241206a41106a290300211620022903282117200b290300211120022903a806211220022903a0062105200241b8046a200c41d00110c9081a200241a0046a41086a20024188066a41086a290300370300200241a0046a41106a20024188066a41106a29030037030020022002290388063703a004410a2107410021040c060b200241a0066a10a2010c040b20024188086a200110a0012002290388084205510d03200241a0066a20024188086a41e80110c9081a20024188086a200110bc07024020022d0088084107460d00200241a0046a41086a200d41086a290300370300200241a0046a41106a200d41106a2903003703002002200d2903003703a00420024188086a41086a29030021162002290388082117200b290300211120022903a806211220022903a0062105200241b8046a200c41d00110c9081a410b2107410021040c050b200241a0066a10a2010c030b410121070b200241d0026a200241b8046a41d00110c9081a200241b8026a41106a200241a0046a41106a290300370300200241b8026a41086a200241a0046a41086a290300370300200220022903a0043703b8020c030b200241d0026a200241b8046a41d00110c9081a200241b8026a41106a200241a0046a41106a290300370300200241b8026a41086a200241a0046a41086a290300370300200220022903a0043703b8020c040b410c2107410121040b200241d0026a200241b8046a41d00110c9081a200241b8026a41106a200241a0046a41106a290300370300200241b8026a41086a200241a0046a41086a290300370300200220022903a0043703b80220040d020b200241e8006a200241d0026a41d00110c9081a200241d0006a41106a220e200241b8026a41106a290300370300200241d0006a41086a220f200241b8026a41086a290300370300200220022903b802370350024020082002280244470d00200241c0006a2008410110930520022802482108200228024021060b200620084198026c6a2204201036020420042007360200200441186a2011370200200441106a2012370200200441086a2005370200200441206a200241e8006a41d00110c9081a200441f8016a2016370200200441f0016a201737020020044180026a200229035037020020044188026a200f29030037020020044190026a200e2903003702002002200841016a22083602482003417f6a2203450d040c000b0b2000410036020020022802402106200228024421040c050b1039000b103b000b200128020421070b2000200229034037020020012007417f6a360204200041086a200241c0006a41086a2802003602000c020b200041003602000b2006200810c3022006410020041b2201450d0020044198026c450d002001102c0b200241f0096a24000b970e03037f017e0d7f230041b00b6b22022400200241186a200110b003024002402002280218450d00200041003602000c010b024002400240024002400240200228021c220320012802002802044188026e2204200420034b1bad4288027e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410322206450d020b2001200128020441016a2207360204410021082002410036022820022006360220200220044188026e2204360224200720012802084b0d042003450d0320024184046a41dc016a2109200241f0056a410c6a210a200241f0056a41046a210b200241c8096a410472210c410021080240024002400340200128020022042802042207450d022004280200220d2d0000210e20042007417f6a3602042004200d41016a3602000240024002400240024002400240024002400240200e0e07000102030405060c0b20024198026a20024184046a41ec0110c9081a410021070c070b200241f0056a200110c30420022802f005220f450d0920022802f805211020022802f4052111200241f0056a200110a001024020022903f00522054205510d0020022802f805211220024184046a200a41dc0110c9081a200941086a200241c8096a41086a290300370200200920022903c809370200410121070c060b200f201010c3022011450d0920114198026c450d09200f102c0c090b200241c8096a200110c30420022802c809220f450d0820022802d009211020022802cc092111200241c8096a200110a0010240024020022903c8094205510d00200241e0076a200241c8096a41e80110c9081a200241c8096a200110c40420022802c809450d0120022802d009211220022903c8092105200b200241e0076a41e80110c9081a20024184046a200241f0056a41ec0110c9081a410221070c060b200f201010c3022011450d0920114198026c450d09200f102c0c090b200241e0076a10a201200f201010c3022011450d0820114198026c450d08200f102c0c080b200241c8096a200110c30420022802c809220f450d0720022802d009211020022802cc092111200241c8096a200110c304024020022802c809450d0020022802d009211220022903c809210520024184046a200241f0056a41ec0110c9081a410321070c040b200f201010c3022011450d0720114198026c450d07200f102c0c070b200241c8096a200110c30420022802c809220f450d0620022802d009211020022802cc092111200241c8096a200110a0010240024020022903c8094205510d00200241e0076a200241c8096a41e80110c9081a200241c8096a200110c40420022802c809450d0120022802d009211220022903c8092105200b200241e0076a41e80110c9081a20024184046a200241f0056a41ec0110c9081a410421070c040b200f201010c3022011450d0720114198026c450d07200f102c0c070b200241e0076a10a201200f201010c3022011450d0620114198026c450d06200f102c0c060b200241c8096a200110c30420022802c809220f450d0520022802d009211020022802cc092111200241c8096a200110a0010240024020022903c8094205510d00200241e0076a200241c8096a41e80110c9081a200241c8096a200110c40420022802c809450d0120022802d009211220022903c8092105200b200241e0076a41e80110c9081a20024184046a200241f0056a41ec0110c9081a410521070c030b200f201010c3022011450d0620114198026c450d06200f102c0c060b200241e0076a10a201200f201010c3022011450d0520114198026c450d05200f102c0c050b200241086a200110c5042002290308a70d0420022903102105200241f0056a200110a00120022903f0054205510d04200241c8096a200241f0056a41e80110c9081a200241f0056a200110c30420022802f005220f450d0220022802f805211020022802f405211120022802c809211220024184046a200c41e40110c9081a410621070b20024198026a20024184046a41ec0110c9081a0b2002412c6a20024198026a41ec0110c9081a024020082002280224470d00200241206a200810950520022802282108200228022021060b200620084188026c6a2204200f36020420042007360200200441186a2012360200200441106a20053702002004410c6a2010360200200441086a20113602002004411c6a2002412c6a41ec0110c9081a2002200841016a22083602282003417f6a2203450d070c010b0b200241c8096a10a2010b20024198026a20024184046a41ec0110c9081a0c010b20024198026a20024184046a41ec0110c9081a0b2000410036020020022802202106200228022421040c050b103b000b1039000b200128020421070b2000200229032037020020012007417f6a360204200041086a200241206a41086a2802003602000c020b200041003602000b2006200810c4022006410020041b2201450d0020044188026c450d002001102c0b200241b00b6a24000be20404047f017e037f017e02400240200128020022022802042203450d00200228020022042d0000210520022003417f6a3602042002200441016a3602000240200541037122024103460d00024002400240024020020e03000102000b2005410276ad21060c020b200128020022012802042202450d03200128020022032d0000210420012002417f6a360204410121022001200341016a3602002004410874200572220141ffff0371418002490d04200141fcff0371410276ad21060c010b41012102024020012802002201280204220341034f0d000c040b2001280200220441026a2d0000210720042f000021082001200441036a36020020012003417d6a3602042008200741107472410874200572220141808004490d032001410276ad21060b410021020c020b024002400240200541027622090e050002020201020b2001280200220228020422014104490d0220022802002205350000210620022001417c6a3602042002200541046a36020020064280808080045421020c030b2001280200220228020422014108490d012002280200220529000021062002200141786a3602042002200541086a3602002006428080808080808080015421020c020b200541134b0d00200941046a2108410021034200210641012102034002402001280200220528020422040d000c030b20052802002207310000210a20052004417f6a3602042005200741016a360200200a2003410374413871ad862006842106200341016a22052103200541ff01712008490d000b2006427f412820094103746b413871ad885821020c010b410121020b2000200637030820002002ad3703000b8e0202057f017e230041106b22022400200241086a200110b003024002402002280208450d00200041003602000c010b0240200128020022032802042204200228020c2205490d00024002402005417f4c0d000240024020050d00410121060c010b200510372206450d022001280200220328020421040b0240024020042005490d0020062003280200200510c90821012003280204220420054f0d01200520044194afc0001058000b2006410020051b2201450d032005450d032001102c0c030b2003200420056b3602042003200328020020056a3602002001450d0220002005ad2207422086200784370204200020013602000c030b103b000b1039000b200041003602000b200241106a24000b8c0201047f230041206b2202240020024100360208200242013703002002200110c8040240412010322203450d002002422037021420022003360210200241106a41004120102f20022802102204200228021822056a220320012900e401370000200341086a200141ec016a290000370000200341106a200141f4016a290000370000200341186a200141fc016a2900003700002002200541206a2201360218200220022802082001102f200228020020022802086a2004200110c9081a2002200228020820016a220136020802402002280214450d002004102c200228020821010b200020022802002001109a0102402002280204450d002002280200102c0b200241206a24000f0b1039000bb30801057f230041106b22022400200128020021032000200041086a22042802004104102f200028020020042802006a20033600002004200428020041046a3602000240412010322203450d002002422037020420022003360200200241004120102f20022802002205200228020822066a22032001290004370000200341086a2001410c6a290000370000200341106a200141146a290000370000200341186a2001411c6a2900003700002002200641206a2203360208200020042802002003102f200028020020042802006a2005200310c9081a2004200428020020036a220336020002402002280204450d002005102c200041086a28020021030b200020034120102f2000280200200041086a22042802006a22032001290024370000200341186a2001413c6a290000370000200341106a200141346a290000370000200341086a2001412c6a2900003700002004200428020041206a360200412010322203450d002002422037020420022003360200200241004120102f20022802002205200228020822066a22032001290044370000200341086a200141cc006a290000370000200341106a200141d4006a290000370000200341186a200141dc006a2900003700002002200641206a2203360208200020042802002003102f200028020020042802006a2005200310c9081a2004200428020020036a36020002402002280204450d002005102c0b412010322204450d002002422037020420022004360200200241004120102f20022802002205200228020822036a22042001290064370000200441086a200141ec006a290000370000200441106a200141f4006a290000370000200441186a200141fc006a2900003700002002200341206a22043602082000200041086a22032802002004102f200028020020032802006a2005200410c9081a2003200328020020046a36020002402002280204450d002005102c0b412010322204450d002002422037020420022004360200200241004120102f20022802002205200228020822036a2204200129008401370000200441086a2001418c016a290000370000200441106a20014194016a290000370000200441186a2001419c016a2900003700002002200341206a22033602082000200041086a22042802002003102f200028020020042802006a2005200310c9081a2004200428020020036a220336020002402002280204450d002005102c200428020021030b2000200341c000102f200028020020042802006a220020012900a401370000200041386a200141dc016a290000370000200041306a200141d4016a290000370000200041286a200141cc016a290000370000200041206a200141c4016a290000370000200041186a200141bc016a290000370000200041106a200141b4016a290000370000200041086a200141ac016a2900003700002004200428020041c0006a360200200241106a24000f0b1039000b2c0020002002ad4220862001ad8410102201290000370000200041086a200141086a2900003700002001102c0bd10201027f0240024002400240200141c000490d00200141808001490d012001418080808004490d022002200241086a22032802004101102f200228020020032802006a41033a00002003200328020041016a2204360200200220044104102f200228020020032802006a20013600002003200328020041046a22043602000c030b2002200241086a22032802004101102f200228020020032802006a20014102743a00002003200328020041016a22043602000c020b2002200241086a22032802004102102f200228020020032802006a20014102744101723b00002003200328020041026a22043602000c010b2002200241086a22032802004104102f200228020020032802006a20014102744102723600002003200328020041046a22043602000b200220042001102f2002280200200241086a22022802006a2000200110c9081a2002200228020020016a3602000be90802057f027e230041c0006b220241003a001802400240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013a00182001200441016a360200200220053a000820060d01200041013a00000c020b200041013a00000f0b200128020022042d0000210520012003417e6a22063602042001200441016a360200200241023a0018200220053a0009024002400240024002400240024002400240024002400240024002402006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200241033a0018200220053a000a2006450d01200128020022042d0000210520012003417c6a22063602042001200441016a360200200241043a0018200220053a000b2006450d02200128020022042d0000210520012003417b6a22063602042001200441016a360200200241053a0018200220053a000c2006450d03200128020022042d0000210520012003417a6a22063602042001200441016a360200200241063a0018200220053a000d2006450d04200128020022042d000021052001200341796a22063602042001200441016a360200200241073a0018200220053a000e2006450d05200128020022042d000021052001200341786a22063602042001200441016a360200200241083a0018200220053a000f2006450d06200128020022042d000021052001200341776a22063602042001200441016a360200200241093a0018200220053a00102006450d07200128020022042d000021052001200341766a22063602042001200441016a3602002002410a3a0018200220053a00112006450d08200128020022042d000021052001200341756a22063602042001200441016a3602002002410b3a0018200220053a00122006450d09200128020022042d000021052001200341746a22063602042001200441016a3602002002410c3a0018200220053a00132006450d0a200128020022042d000021052001200341736a22063602042001200441016a3602002002410d3a0018200220053a00142006450d0b200128020022042d000021052001200341726a22063602042001200441016a3602002002410e3a0018200220053a00152006450d0c200128020022042d000021052001200341716a22063602042001200441016a3602002002410f3a0018200220053a00162006450d0d200128020022042d000021052001200341706a3602042001200441016a360200200220053a0017200241103a0018200241206a41086a200241086a41086a2903002207370300200220022903082208370320200041096a200737000020002008370001200041003a00000f0b200041013a00000c0d0b200041013a00000c0c0b200041013a00000c0b0b200041013a00000c0a0b200041013a00000c090b200041013a00000c080b200041013a00000c070b200041013a00000c060b200041013a00000c050b200041013a00000c040b200041013a00000c030b200041013a00000c020b200041013a00000c010b200041013a00000b200241003a00180bc90c07047f027e067f027e077f017e017f230041f0016b220324002002412c6a2802002104200241306a28020021052002280228210620022903002107200341186a200241206a290000370300200341106a200241186a290000370300200341086a200241106a29000037030020032002290008370300024002402005ad42d8007e2208422088a70d002008a72202417f4c0d0002400240024020020d00410821090c010b200210322209450d010b200241d8006e210a024020050d004100210b0c030b200620054105746a210c20034188016a41046a210d4100210b2006210e0340200e41086a2900002108200e41106a290000210f200e2900002110200341206a41186a2211200e41186a290000370300200341206a41106a2212200f370300200341206a41086a2213200837030020032010370320200b41d8006c2102200e41206a210e200921050240024003402002450d01200541346a2214200341206a460d02200241a87f6a2102200541d8006a21052014200341206a412010cc080d000c020b0b200128020022022802002215450d00200228020421160340201541346a210520152f013221174100210202400240034020172002460d01200341206a2005412010cc082214450d02200541206a2105200241016a21022014417f4a0d000b2002417f6a21170b2016450d022016417f6a2116201520174102746a4194036a28020021150c010b0b02400240024002400240024002400240200128020422052802082217201520024102746a41046a220228020022144d0d00200528020020144102746a28020022142802080d012014417f3602082014427f2014290330220820077c220f200f2008542205201441386a221729030022102005ad7c2218201054200f20085a1b22051b3703302017427f201820051b370300200341e0006a41186a22152011290300370300200341e0006a41106a22162012290300370300200341e0006a41086a2211201329030037030020032003290320370360200128020422052802082217200228020022024d0d02200528020020024102746a280200221728020041016a220241014d0d0320172002360200200d410041e40010cb081a41f80010322205450d0a2005410036020820054281808080103703002005410c6a20034188016a41e80010c9081a200541003a0074200520032f0085013b0075200541f7006a20034185016a41026a2d00003a0000200341c0006a41086a22122011290300370300200341c0006a41106a22112016290300370300200341c0006a41186a2216201529030037030020032003290360370340200b200a470d06200b41016a2202200b490d0b200b41017422152002201520024b1b22024104200241044b1bad42d8007e2208422088a722150d0b2008a722024100480d0b2015454103742113200b41d8006c2019200b1b211902400240024020094100200b1b22150d002002450d010c070b20190d0120020d060b201321090c060b201520192002103522090d050c070b2014201741c8a4c300103f000b41d4afc800411020034188016a41a8a4c30041d8a4c3001040000b2002201741e8a4c300103f000b00000b200210322209450d020b200241d8006e210a0b2009200b41d8006c6a2202420037030020022017360230200241186a4200370300200241106a4200370300200241086a4200370300200241206a4200370300200241286a4200370300200220032903403702342002413c6a2012290300370200200241c4006a2011290300370200200241cc006a201629030037020020052005280200417f6a2202360200024020020d00200541046a22022002280200417f6a220236020020020d002005102c0b200b41016a210b2014201428020841016a3602080c010b20130d020c030b200e200c460d030c000b0b1039000b103b000b0240200441ffffff3f71450d002006102c0b02400240200b450d00200042013703202000420037031020004200370308200020073703002000200a36023420002009360230200041286a4200370300200041186a4200370300200041386a200b3602002000413c6a2003290300370000200041c4006a200341086a290300370000200041cc006a200341106a290300370000200041d4006a200341186a2903003700000c010b2000410036023020094100200a1b2202450d00200a41d8006c450d002002102c0b200341f0016a24000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42187e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341186c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141186e3602000b0f0b2005450d001039000b103b000bd80101047f024002400240200041046a28020020002802082201470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff017122042002470d02200241037422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141037422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034103763602000b0f0b2004450d001039000b103b000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff007122042001470d02200141047422024100480d0220042001464103742104024002400240024002402000280200410020031b22010d002002450d010c030b200341047422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024104763602000b0f0b2004450d001039000b103b000bbb0101037f024002400240200041046a280200220220014f0d00200241017422032001200320014b1b22014104200141044b1b220420046a22012004490d0220014100480d02200120044f4101742104024002400240024002402000280200410020021b22020d002001450d010c030b20030d0120010d020b200421020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a20014101763602000b0f0b2004450d001039000b103b000bf50101057f230041106b22032400024002402002280208220441027441046a2205417f4c0d00200228020021020240024020050d00410121060c010b200510322206450d020b20034100360208200320053602042003200636020020032004108f010240024020040d0020032802002107200328020821040c010b2004410274210520032802082104034020022802002106200320044104102f20032802002207200328020822046a20063600002003200441046a2204360208200241046a21022005417c6a22050d000b0b200020012007200410a70202402003280204450d002007102c0b200341106a24000f0b103b000b1039000bd30101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff037122042002470d02200241027422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141027422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034102763602000b0f0b2004450d001039000b103b000bc3e0010a017f027e047f017e057f017e117f017e057f067e230041b00f6b2201240010d4044200210242002103024002400240024020004101460d0042002103200141800b6a41186a22044200370300200141800b6a41106a22054200370300200141800b6a41086a22064200370300200142003703800b200141c0076a41c7dcc700410410c5012006200141c0076a41086a2207290000370300200120012900c0073703800b200141a0096a41e8d6c500410b10c5012004200141a0096a41086a290000370300200520012900a009370300200141e8046a200141800b6a10cf0220012903f004210820012802e8042109200141b8056a41186a22044200370300200141b8056a41106a220a4200370300200141b8056a41086a22064200370300200142003703b80520014188056a41c7dcc700410410c501200620014188056a41086a220b29000037030020012001290088053703b805200141c80c6a41ccd5c500410a10c5012004200141c80c6a41086a220c290000370300200a20012900c80c370300200141d8046a200141b8056a10cf0220012802d804210d20012903e004210e20044200370300200a420037030020064200370300200142003703b80520014188056a41c7dcc700410410c5012006200b29000037030020012001290088053703b805200141c80c6a41bcd6c500410b10c5012004200c290000370300200a20012900c80c370300200141c8046a200141b8056a10cf0242002008420020091b220820012903d004420020012802c8041b200e42d8047e4200200d1b7c7d220e200e2008561b42d804540d0020014198056a41186a2204420037030020014198056a41106a220f420037030020014198056a41086a220642003703002001420037039805200141880d6a41ffdcc700410710c5012006200141880d6a41086a2209290000370300200120012900880d37039805200141880d6a41b8b3c300410c10c50120042009290000370300200f20012900880d370300200141c0046a20014198056a412010c60120012802c404211020012802c004211120044200370300200f4200370300200642003703002001420037039805200141880d6a41ffdcc700410710c50120062009290000370300200120012900880d37039805200141880d6a41dcb3c300410d10c50120042009290000370300200f20012900880d37030020014198056a412010dc02211210d50420044200370300200f4200370300200642003703002001420037039805200141c0076a41ffdcc700410710c50120062007290000370300200120012900c00737039805200141c0076a418893c700410a10c50120042007290000370300200f20012900c007370300200141880d6a20014198056a10e10120012802880d2204410120041b2113200129028c0d420020041b2208a721140240024002402008422088a72204450d002013200441057422096a2115200141880d6a41206a2106201321040340200141b8056a41186a2207200441186a220b290000370300200141b8056a41106a220c200441106a220d290000370300200141b8056a41086a2216200441086a2217290000370300200120042900003703b80520172900002108200d29000021032004290000210e200141c80c6a41186a220d200b290000370300200141c80c6a41106a220b2003370300200141c80c6a41086a221720083703002001200e3703c80c200141880d6a41186a2007290300370300200141880d6a41106a200c290300370300200141880d6a41086a2016290300370300200120012903b8053703880d200141800b6a200141880d6a10a304200141e80c6a41186a220c200141800b6a41186a290300370300200141e80c6a41106a2216200141800b6a41106a290300370300200141e80c6a41086a2218200141800b6a41086a290300370300200120012903800b3703e80c20012802a00b210720012802a40b211920012802a80b211a20012802ac0b211b20014198056a41186a221c200d29030037030020014198056a41106a220d200b29030037030020014198056a41086a220b2017290300370300200120012903c80c3703980502402007450d00200620012903e80c370300200641186a200c290300370300200641106a2016290300370300200641086a2018290300370300200141a0096a41206a2006290300370300200141a0096a41186a201c290300370300200141a0096a41106a200d290300370300200141a0096a41086a200b290300370300200141a0096a41386a200141880d6a41386a290300370300200141a0096a41306a200141880d6a41306a290300370300200141a0096a41286a200141880d6a41286a29030037030020012001290398053703a0092019211d201a211e201b211f0b20070d02200441206a2104200941606a22090d000b0b02402014450d00201441ffffff3f71450d002013102c0b4100210d4108210b410421044100211f0c010b200141e0056a41386a200141a0096a41386a2903002208370300200141e0056a41306a200141a0096a41306a2903002203370300200141e0056a41286a200141a0096a41286a290300220e370300200141e0056a41206a200141a0096a41206a2903002220370300200141c0076a41086a220b200141a0096a41086a290300370300200141c0076a41106a220c200141a0096a41106a290300370300200141c0076a41186a220d200141a0096a41186a290300370300200141c0076a41206a22162020370300200141c0076a41286a2217200e370300200141c0076a41306a22182003370300200141c0076a41386a22192008370300200120012903a0093703c00741d00010322221450d02202120012903c0073703002021201f36024c2021201e3602482021201d36024420212007360240202141386a2019290300370300202141306a2018290300370300202141286a2017290300370300202141206a2016290300370300202141186a200d290300370300202141106a200c290300370300202141086a200b290300370300200142818080801037028c0520012021360288050240024020094120470d004101211f0c010b200441206a210b201541606a21224101211f0340200b21040340200141b8056a41186a2207200441186a2209290000370300200141b8056a41106a220b200441106a220c290000370300200141b8056a41086a220d200441086a2216290000370300200120042900003703b805200141c80c6a41186a22172009290000370300200141c80c6a41106a2209200c290000370300200141c80c6a41086a220c2016290000370300200120042900003703c80c200141880d6a41186a221c2007290300370300200141880d6a41106a221d200b290300370300200141880d6a41086a221e200d290300370300200120012903b8053703880d200141800b6a200141880d6a10a304200141e80c6a41186a220b200141800b6a41186a290300370300200141e80c6a41106a220d200141800b6a41106a290300370300200141e80c6a41086a2216200141800b6a41086a290300370300200120012903800b3703e80c20012802a00b210720012802a40b211820012802a80b211920012802ac0b211a20014198056a41186a221b201729030037030020014198056a41106a2217200929030037030020014198056a41086a2209200c290300370300200120012903c80c3703980502402007450d00200620012903e80c370300200641186a200b290300370300200641106a200d290300370300200641086a2016290300370300200141a0096a41206a200141880d6a41206a290300370300200141a0096a41186a201b290300370300200141a0096a41106a2017290300370300200141a0096a41086a2009290300370300200141a0096a41386a200141880d6a41386a290300370300200141a0096a41306a200141880d6a41306a290300370300200141a0096a41286a200141880d6a41286a29030037030020012001290398053703a0092018212320192124201a21250b024020070d002015200441206a2204470d010c030b0b200141e0056a41386a200141a0096a41386a2903002208370300200141e0056a41306a200141a0096a41306a2903002203370300200141e0056a41286a200141a0096a41286a290300220e370300200141e0056a41206a200141a0096a41206a2903002220370300200141c0076a41086a2209200141a0096a41086a290300370300200141c0076a41106a220b200141a0096a41106a290300370300200141c0076a41186a220c200141a0096a41186a290300370300200141c0076a41206a220d2020370300200141c0076a41286a2216200e370300200141c0076a41306a22172003370300200141c0076a41386a22182008370300200120012903a0093703c007200141880d6a41386a22192018290300370300200141880d6a41306a22182017290300370300200141880d6a41286a22172016290300370300200141880d6a41206a2216200d290300370300201c200c290300370300201d200b290300370300201e2009290300370300200120012903c0073703880d0240201f200128028c05470d0020014188056a201f410110d60420012802880521210b200441206a210b201e2903002108201d2903002103201c290300210e2016290300212020172903002126201829030021272019290300212820012903880d21292021201f41d0006c6a2209202536024c20092024360248200920233602442009200736024020092029370300200941386a2028370300200941306a2027370300200941286a2026370300200941206a2020370300200941186a200e370300200941106a2003370300200941086a20083703002001201f41016a221f3602900520222004470d000b0b02402014450d00201441ffffff3f71450d002013102c0b201f41d0006c4104722204417f4c0d03200128028c05210d200128028805210b0b200410322206450d012010410020111b210c200141003602a809200120043602a409200120063602a009200141a0096a201f108f010240201f450d00200b201f41d0006c6a2109200b21040340200141a0096a20012802a8094120102f20012802a00920012802a80922076a22062004290000370000200641086a200441086a290000370000200641106a200441106a290000370000200641186a200441186a2900003700002001200741206a3602a809200441206a200141a0096a10f8032009200441d0006a2204470d000b0b20012802a809210620012802a0092107200141003602900d200142013703880d2001200c3602c007200141880d6a4100411710c80120012802880d20012802900d22096a220441126a412f3a0000200441106a41e1d8013b00002004410c6a41efe4a59b06360000200441086a41e8d2cda307360000200441136a20012d00c0073a0000200441146a20012d00c1073a0000200441156a20012d00c2073a0000200441166a20012d00c3073a0000200442f3cacd9b97ed9bb7df003700002001200941176a22043602900d200128028c0d210920012802880d221620042007200610d70402402009450d002016102c0b024020012802a409450d0020012802a009102c0b0240201f450d00201f41d0006c2106200b41c0006a210403400240200441046a2802002207450d00200741306c450d002004280200102c0b200441d0006a2104200641b07f6a22060d000b0b0240200d450d00200b450d00200d41d0006c450d00200b102c0b200141800b6a41186a4200370300200141800b6a41106a4200370300200141800b6a41086a22044200370300200142003703800b200141880d6a41e6dcc700410710c5012004200141880d6a41086a2207290000370300200120012900880d3703800b200141880d6a4188bbc200410910c501200541086a2007290000370000200520012900880d370000200141880d6a200141800b6a10cb03024020012903880d22084202510d00200141880d6a41106a280200210920012903900d210320014188056a41e6dcc700410710c501200141c80c6a41d0bbc200411510c5014101210b2001200941016a3602c007200141800b6a200141c0076a410410c701200141940d6a200141c0076a41046a3602002001200436028c0d2001200141c0076a3602900d2001200141800b6a3602880d200141a0096a200141880d6a107e20012802a809220441206a2206417f4c0d0302402006450d0020061032220b450d030b200141003602900d2001200636028c0d2001200b3602880d200141880d6a4100411010c80120012802880d20012802900d22066a220b200129008805370000200b41086a20014188056a41086a2900003700002001200641106a22063602900d200141880d6a2006411010c80120012802880d20012802900d22066a220b20012900c80c370000200b41086a200141c80c6a41086a2900003700002001200641106a220b3602900d20012802a0092106200141880d6a200b200410c80120012802880d220b20012802900d220d6a2006200410c9081a2001200d20046a22043602900d024020012802a409450d002006102c0b200141b8046a200b200410c60120012802bc04210620012802b80421040240200128028c0d450d00200b102c0b20044101470d002006200c41016a470d0020084201520d00200141b0056a4200370300200141a8056a420037030020014198056a41086a22044200370300200142003703980520014188056a41cbdcc700410910c501200420014188056a41086a290000370300200120012900880537039805200141c80c6a41f8d7c300410310c501200f41086a200141c80c6a41086a290000370000200f20012900c80c370000200141a8046a20014198056a10cf0220014198046a20012903b004420020012802a8041b220842e80780420042e807420010ce0820014188056a41e6dcc700410710c501200141c80c6a41a8bfc200410e10c501200120093602c007200141800b6a200141c0076a410410c701200141940d6a200141c0076a41046a3602002001200141800b6a41086a36028c0d200842e80782210e200129039804210820014198046a41086a29030021202001200141c0076a3602900d2001200141800b6a3602880d200141a0096a200141880d6a107e20012802a809220441206a2206417f4c0d030240024020060d004101210b0c010b20061032220b450d030b2008200e7c220e427f2020200e200854ad7c501b2108200141003602900d2001200636028c0d2001200b3602880d200141880d6a4100411010c80120012802880d20012802900d22066a220b200129008805370000200b41086a20014188056a41086a2900003700002001200641106a22063602900d200141880d6a2006411010c80120012802880d20012802900d22066a220b20012900c80c370000200b41086a200141c80c6a41086a2900003700002001200641106a220b3602900d20012802a0092106200141880d6a200b200410c80120012802880d220b20012802900d220d6a2006200410c9081a2001200d20046a22043602900d024020012802a409450d002006102c0b200820037d212020014180046a200b200410d30120014180046a41106a290300420020012802800422041b2103200129038804420020041b21260240200128028c0d450d00200b102c0b200141b0056a420037030020014198056a41106a420037030020014198056a41086a22044200370300200142003703980520014188056a41d4dcc700410810c501200420014188056a41086a290000370300200120012900880537039805200141c80c6a41bba8c700410d10c501200f41086a200141c80c6a41086a290000370000200f20012900c80c370000200141e8036a20014198056a412010d301200141d8036a20012903f003420020012802e80322041b220e200141e8036a41106a290300420020041b2208428094ebdc03420010c708200141c8036a200e2008428094ebdc03420010c808200820032026200e56200320085620032008511b22041b2103200e202620041b21282020428086ebc7f5002020428086ebc7f500541b420588428094ebdc037e4298ac9fd603802129200141c8036a41086a290300212641002106419ce0c700210420012903c803212720012903d8032120024002400340200141b8036a2027202620043502002208420010ce08202820012903b803220e202020087e2208428094ebdc0380a7417f2008428080808080c0b2cd3b541b2008428094ebdc03824280cab5ee01566aad7c2208542003200141b8036a41086a2903002008200e54ad7c22085420032008511b0d01200441086a2104200641016a22064125470d000b200141a8036a2027202642e8aafa0b420010ce08200141b0036a29030020012903a8032203202042e8aafa0b7e2208428094ebdc0380a72008428094ebdc03824280cab5ee01566aad7c2208200354ad7c21030c010b02402006417f6a220b20064d0d00200141b8026a2027202642c0f0f50b420010ce08200141c0026a29030020012903b80222032020422880a7202042c0f0f50b7e428094ebdc03824280cab5ee01566aad7c2208200354ad7c21030c010b02400240200b41244b0d0020014198036a20272026200b410374220d419ce0c7006a280200220bad2208420010ce08200141f8026a2028200129039803220e202020087e2208428094ebdc0380a7417f2008428080808080c0b2cd3b541b220641016a20062008428094ebdc03824280cab5ee01561bad7c22082028200856200320014198036a41086a2903002008200e54ad7c220e562003200e511b22061b222a2008202820061b22087d22282003200e20061b200e200320061b7d202a200854ad7d220e410020042802002216200b6b220b200b20164b1b220b4101200b41014b1bad2208420010c808200141c8026a200141f8026a41086a2903004200200441046a280200220b200d41a0e0c7006a2802002204200b20044b220d1b2004200b200d1b6bad2203420010ce08200141d8026a20012903f80242002003420010ce08200141e8026a2028200e2008420010c70820014188036a202720262004ad2228420010ce08427f427f200141d8026a41086a290300220e20012903c8027c222a20012903d002420052202a200e5472220d1b222a427f20012903d802200d1b220e20012903e80220037e2008807c2208200e54220dad7c2203200d2003202a542008200e5a1b220d1b212a427f2008200d1b210e20014188036a41086a290300200129038803222b202020287e2208428094ebdc0380a7417f2008428080808080c0b2cd3b541b2008428094ebdc03824280cab5ee01566aad7c2203202b54ad7c21082006200b20044d730d0142002008202a7d2003200e54ad7d22282003200e7d220e200356202820085620282008511b22041b21034200200e20041b21080c020b200b412541e8ebc400103f000b427f2008202a7c2003200e7c220e2003542204ad7c22032004200320085420032008511b22041b2103427f200e20041b21080b200141a8026a20082003428094ebdc03420010c70820014198026a20082003428094ebdc03420010c80820014188026a20012903980220014198026a41086a2903002029420010ce08200141f8016a202720264280c2d72f420010ce08200141e8016a20012903f80122032020420a80a720204280c2d72f7e428094ebdc03824280cab5ee01566aad7c2208200141f8016a41086a2903002008200354ad7c2203428094ebdc03420010c708200141d8016a20082003428094ebdc03420010c808200141c8016a20012903d801200141d8016a41086a2903002029420010ce08200141940d6a22042009360200200141880d6a41086a41003a0000200141980d6a2001290388022203202920012903a8027e2208428094ebdc0380a72008428094ebdc03824280cab5ee01566aad7c2208370300200141a00d6a20014188026a41086a2903002008200354ad7c2203370300200141b00d6a4200200141c8016a41086a29030020012903c8012220202920012903e8017e220e428094ebdc0380a7200e428094ebdc03824280cab5ee01566aad7c220e202054ad7c222020037d200e200854ad7d2226200e20087d2227200e56202620205620262020511b22061b2226370300200141880d6a41206a4200202720061b2227370300200141033602880d200141880d6a10c80220014188056a41e6dcc700410710c501200141c80c6a41acbec200411310c501200120093602c007200141e80c6a200141c0076a410410c7012004200141c0076a41046a3602002001200141e80c6a41086a36028c0d2001200141c0076a3602900d2001200141e80c6a3602880d200141a0096a200141880d6a107e20012802a809220441206a2206417f4c0d030240024020060d00410121090c010b200610322209450d030b200141003602c807200120063602c407200120093602c007200141c0076a4100411010c80120012802c00720012802c80722066a2209200129008805370000200941086a20014188056a41086a2900003700002001200641106a22063602c807200141c0076a2006411010c80120012802c00720012802c80722066a220920012900c80c370000200941086a200141c80c6a41086a2900003700002001200641106a22093602c80720012802a0092106200141c0076a2009200410c80120012802c007220920012802c807220b6a2006200410c9081a2001200b20046a22043602c807024020012802a409450d002006102c0b200120033703900d200120083703880d20092004200141880d6a411010a702024020012802c407450d002009102c0b024002400240200e200856202020035620202003511b0d00200142003703a809200142003703a0090c010b20014198056a41186a2209420037030020014198056a41106a220b420037030020014198056a41086a22044200370300200142003703980520014188056a41d4dcc700410810c501200420014188056a41086a220d290000370300200120012900880537039805200141c80c6a41bba8c700410d10c501200f41086a2216200141c80c6a41086a2217290000370000200f20012900c80c370000200141b0016a20014198056a412010d301200141b0016a41106a290300210820012903b801210320012802b001210620094200370300200b420037030020044200370300200142003703980520014188056a41d4dcc700410810c5012004200d290000370300200120012900880537039805200141c80c6a41bba8c700410d10c50120162017290000370000200f20012900c80c3700002001427f2008420020061b220820267c2003420020061b220320277c22202003542204ad7c220e2004200e200854200e2008511b22041b3703900d2001427f202020041b3703880d20014198056a4120200141880d6a411010a70220012008427f85202620041b220e3703a80920012003427f85202720041b22083703a0092008200e844200520d010b200141e00c6a22044200370300200141c80c6a41106a22064200370300200141c80c6a41086a22094200370300200142003703c80c200141c0076a41d4dcc700410810c5012009200141c0076a41086a220b290000370300200120012900c0073703c80c200141c0076a41bba8c700410d10c5012004200b290000370300200620012900c00737030020014180016a200141c80c6a412010d30120014180016a41106a29030021082001290388012103200128028001210d200442003703002006420037030020094200370300200142003703c80c200141c0076a41d4dcc700410810c5012009200b290000370300200120012900c0073703c80c200141c0076a41bba8c700410d10c5012004200b290000370300200620012900c007370300200120084200200d1b3703900d200120034200200d1b3703880d200141c80c6a4120200141880d6a411010a7020c010b200141b8056a41186a22094200370300200141b8056a41106a220b4200370300200141b8056a41086a22044200370300200142003703b805200141c0076a41d4dcc700410810c5012004200141c0076a41086a220d290000370300200120012900c0073703b805200141a0096a41bba8c700410d10c501200a41086a2216200141a0096a41086a2217290000370000200a20012900a00937000020014198016a200141b8056a412010d30120014198016a41106a290300210320012903a0012120200128029801210620094200370300200b420037030020044200370300200142003703b805200141c0076a41d4dcc700410810c5012004200d290000370300200120012900c0073703b805200141a0096a41bba8c700410d10c50120162017290000370000200a20012900a009370000200142002003420020061b2203200e7d2020420020061b220e200854ad7d2220200e20087d2208200e56202020035620202003511b22041b3703900d20014200200820041b3703880d200141b8056a4120200141880d6a411010a7020b20014198056a41186a420037030020014198056a41106a420037030020014198056a41086a220442003703002001420037039805200141880d6a41ffdcc700410710c50120042007290000370300200120012900880d37039805200141880d6a4188a5c300410a10c501200f41086a2007290000370000200f20012900880d370000200141203602dc05200120014198056a3602d805200141a00f6a20014198056a412010b3010240024020012802a00f220b0d00410021090c010b20012802a40f210d2001200141a80f6a2802003602fc042001200b3602f804200141f8006a200141f8046a1087020240024020012802780d00200128027c221620012802fc0441e0016e2204200420164b1bad42e0017e2208422088a70d052008a72204417f4c0d050240024020040d00410121090c010b200410322209450d050b200141003602900520012009360288052001200441e0016e36028c050240024002402016450d00200141880d6a41206a2119200141800b6a410172211a4100211841002117034041002106200141003a00a00b20012802fc04417f6a2104201741016a21170340200141003a00e80c2004417f460d03200141800b6a20066a20012802f80422072d00003a00002001200741016a3602f8042001200641016a22073a00a00b200120043602fc042004417f6a21042007210620074120470d000b200141e80c6a41186a2204200141800b6a41186a290300370300200141e80c6a41106a2206200141800b6a41106a290300370300200141e80c6a41086a221b200141800b6a41086a290300370300200120012903800b3703e80c200741ff01714120490d03200141b8056a41086a2207201b290300370300200141b8056a41106a221b2006290300370300200141b8056a41186a22062004290300370300200120012903e80c3703b805200141800b6a200141f8046a10d80420012d00800b4101460d03200141880d6a41186a2006290300370300200141880d6a41106a201b290300370300200141880d6a41086a2007290300370300200120012903b8053703880d2019201a41c00110c9081a200141a0096a200141880d6a41e00110c9081a200141c0076a200141a0096a41e00110c9081a200141e0056a200141c0076a41e00110c9081a02402018200128028c05470d0020014188056a2018410110d904200128028805210920012802900521180b2009201841e0016c6a200141e0056a41e00110c9081a2001201841016a22183602900520172016470d000b0b200129028c0521082009450d020c030b200641ff0171450d00200141003a00a00b0b0240200128028c052204450d00200441e0016c450d002009102c0b0b41002109200141003602a809200142013703a0092001410f3602c4072001200141d8056a3602c0072001200141a0096a3602e0052001419c0d6a41013602002001420137028c0d200141b4bcc3003602880d2001200141c0076a3602980d200141e0056a41dcb7c000200141880d6a103e1a20013502a80942208620013502a00984100020012802a409450d0020012802a009102c0b200d450d00200b102c0b2001410036028005200142013703f804200141f8046a41002008420020091b2203422088a7222110d601202141e0016c21102009410120091b2115200128028005210720012802f804211302402021450d00201320074105746a21042010210920152106034020042006290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200741016a2107200441206a2104200641e0016a2106200941a07e6a22090d000b0b2001200736028005200141b0056a4200370300200141a8056a420037030020014198056a41086a220442003703002001420037039805200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d37039805200141880d6a418893c700410a10c501200f41086a2006290000370000200f20012900880d37000020074105744104722204417f4c0d02200410322206450d01201241ff0171220d4102472116200141003602900d2001200436028c0d200120063602880d200141880d6a2007108f010240024020070d0020012802880d210b20012802900d21060c010b2007410574210720012802900d2106201321040340200141880d6a20064120102f20012802880d220b20012802900d22096a22062004290000370000200641086a200441086a290000370000200641106a200441106a290000370000200641186a200441186a2900003700002001200941206a22063602900d200441206a2104200741606a22070d000b0b200d201671212420014198056a4120200b200610a7020240200128028c0d450d00200b102c0b02402024450d00200141b0056a4200370300200141a8056a420037030020014198056a41086a220442003703002001420037039805200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d37039805200141880d6a41ccb4c300411210c501200f41086a2006290000370000200f20012900880d370000200141880d6a20014198056a10da0420012802880d2204450d0020014198056a412010b401200128028c0d2206450d00200641ffffffff0371450d002004102c0b20014198056a41186a420037030020014198056a41106a420037030020014198056a41086a220442003703002001420037039805200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d37039805200141880d6a41b8b3c300410c10c501200f41086a2006290000370000200f20012900880d3700002001200c41016a22233602880d20014198056a4120200141880d6a410410a702200141b8056a41186a4200370300200141b8056a41106a4200370300200141b8056a41086a22044200370300200142003703b805200141c0076a41e6dcc700410710c5012004200141c0076a41086a290000370300200120012900c0073703b805200141a0096a4188bbc200410910c501200a41086a200141a0096a41086a290000370000200a20012900a009370000200141880d6a200141b8056a10cb030240024020012903880d4202510d00200141880d6a41106a28020041016a21040c010b410021040b20014188056a41e6dcc700410710c501200141c80c6a41d0bbc200411510c501200120043602c007200141e80c6a200141c0076a410410c701200141940d6a200141c0076a41046a3602002001200141f00c6a221136028c0d2001200141c0076a3602900d2001200141e80c6a3602880d200141a0096a200141880d6a107e20012802a809220441206a2206417f4c0d020240024020060d00410121070c010b200610322207450d020b200141003602900d2001200636028c0d200120073602880d200141880d6a4100411010c80120012802880d20012802900d22066a2207200129008805370000200741086a20014188056a41086a2900003700002001200641106a22063602900d200141880d6a2006411010c80120012802880d20012802900d22066a220720012900c80c370000200741086a200141c80c6a41086a2900003700002001200641106a22073602900d20012802a0092106200141880d6a2007200410c80120012802880d220720012802900d22096a2006200410c9081a2001200920046a22043602900d024020012802a409450d002006102c0b200141f0006a2007200410c60120012802742106200128027021040240200128028c0d450d002007102c0b024020044101470d00024020062023460d00200620234f0d0141aa85c300ad428080808080068410000b2023109e040b200141980b6a4200370300200141900b6a4200370300200141800b6a41086a22044200370300200142003703800b200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d3703800b200141880d6a41afaec000410b10c501200541086a2006290000370000200520012900880d370000200141a0096a200141800b6a412010a004200c41026a211f0240024020012802a0094101470d0020013502a40921080c010b201fad220842208620088421080b2001200842ffffffff0f83200c41036aad422086843702a409200141013602a009200141800b6a41186a4200370300200141800b6a41106a4200370300200141800b6a41086a22044200370300200142003703800b200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d3703800b200141880d6a41afaec000410b10c501200541086a2006290000370000200520012900880d370000200141800b6a4120200141a0096a41047210a104200141b8056a41186a4200370300200141b8056a41106a4200370300200141b8056a41086a22044200370300200142003703b805200141c0076a41e6dcc700410710c5012004200141c0076a41086a2206290000370300200120012900c0073703b805200141a0096a41ccbac200410a10c501200a41086a200141a0096a41086a290000370000200a20012900a009370000200141e8006a200141b8056a412010c6010240024020012802684101460d0020014198056a201f1093040c010b200128026c210420014188056a41e6dcc700410710c501200141c80c6a41d0bbc200411510c501200120043602e005200141c0076a200141e0056a410410c701200141940d6a200141e0056a41046a3602002001200636028c0d2001200141e0056a3602900d2001200141c0076a3602880d200141a0096a200141880d6a107e20012802a809220441206a2206417f4c0d030240024020060d00410121070c010b200610322207450d030b200141003602900d2001200636028c0d200120073602880d200141880d6a4100411010c80120012802880d20012802900d22066a2207200129008805370000200741086a20014188056a41086a2900003700002001200641106a22063602900d200141880d6a2006411010c80120012802880d20012802900d22066a220720012900c80c370000200741086a200141c80c6a41086a2900003700002001200641106a22073602900d20012802a0092106200141880d6a2007200410c80120012802880d220720012802900d22096a2006200410c9081a2001200920046a22043602900d024020012802a409450d002006102c0b200141e0006a2007200410c60120012802642106200128026021040240200128028c0d450d002007102c0b024020040d0041c983c300ad4280808080e006841000410021060b200141d0056a22094200370300200141c8056a220b4200370300200141b8056a41086a22044200370300200142003703b805200141c0076a41e6dcc700410710c5012004200141c0076a41086a220c290000370300200120012900c0073703b805200141a0096a41d8bfc200410810c501200a41086a220d200141a0096a41086a2216290000370000200a20012900a0093700004100201f20066b22062006201f4b1b21070240024002400240024002404100200141b8056a108d042206200641ff01714104461b41ff01710e0400020103010b200741064f0d020b20074105460d0220074106490d031098040c030b20094200370300200b420037030020044200370300200142003703b805200141c0076a41e6dcc700410710c5012004200c290000370300200120012900c0073703b805200141a0096a41d8bfc200410810c501200d2016290000370000200a20012900a009370000200141b8056a412010b4010b20014198056a201f1093040c020b200141d0056a4200370300200141c8056a4200370300200141b8056a41086a22044200370300200142003703b805200141c0076a41e6dcc700410710c5012004200141c0076a41086a290000370300200120012900c0073703b805200141a0096a41bcc6c200411510c501200a41086a200141a0096a41086a290000370000200a20012900a009370000200141013a00e80c200141b8056a4120200141e80c6a410110a7020b20014100360298050b02400240024002400240024002400240024020012802980522140d00200141003602a00f0c010b200141b8056a41186a4200370300200141b8056a41106a4200370300200141b8056a41086a22044200370300200142003703b805200141c0076a41e6dcc700410710c5012004200141c0076a41086a221b290000370300200120012900c0073703b805200141a0096a41ccbac200410a10c501200a41086a200141a0096a41086a221d290000370000200a20012900a009370000200141d8006a200141b8056a412010c601200141a00f6a41086a22064100360200200142083703a00f200128025c210720012802582109200128029c052125200141a00f6a410020014198056a41086a280200220410d6042006280200210b02402004450d002007410020091b211e2004410574210c20012802a00f200b41d0006c6a2104200141880d6a41206a2107201421060340200141e0056a41186a220d200641186a290000370300200141e0056a41106a2216200641106a290000370300200141e0056a41086a2217200641086a290000370300200120062900003703e005200141800b6a201e200141e0056a10da03200141a0096a20012802800b221a20012802880b10a404200141e80c6a41186a2218200141a0096a41186a290300370300200141e80c6a41106a2219200141a0096a41106a290300370300200141e80c6a41086a2205201d290300370300200120012903a0093703e80c0240024020012802c00922090d00200141c0076a41186a4200370300200141c0076a41106a420037030041082109200141c0076a41086a4200370300200142003703c00741002118410021190c010b201b2005290300370300200141c0076a41106a2019290300370300200141c0076a41186a2018290300370300200120012903e80c3703c00720012802c409211820012802c809211920012802cc09211c0b024020012802840b450d00201a102c0b200641206a2106200720012903c007370300200141880d6a41086a221a2017290300370300200141880d6a41106a22172016290300370300200141880d6a41186a2216200d290300370300200741186a200141c0076a41186a290300370300200741106a200141c0076a41106a290300370300200741086a201b290300370300200120012903e0053703880d200441386a200141880d6a41386a290300370300200441306a200141880d6a41306a290300370300200441286a200141880d6a41286a290300370300200441206a2007290300370300200441186a2016290300370300200441106a2017290300370300200441086a201a290300370300200420012903880d370300200441cc006a201c360200200441c8006a2019360200200441c4006a2018360200200441c0006a2009360200200441d0006a2104200b41016a210b200c41606a220c0d000b0b2001200b3602a80f02402025450d00202541ffffff3f71450d002014102c0b20012802a00f22040d010b200141003602b80520014188056a41ffdcc700410710c501200141c80c6a41ddecc400411210c50120014100201f417f6a22042004201f4b1b3602e80c200141800b6a200141e80c6a410410c701200141ac096a200141e80c6a41046a3602002001200141880b6a3602a4092001200141e80c6a3602a8092001200141800b6a3602a009200141c0076a200141a0096a107e20012802c807220441206a22064100480d0920060d01410121070c020b200141b8056a41086a22064100360200200142013703b805200141b8056a4100200141a00f6a41086a280200220b10d6012006280200210720012802b805211e0240200b41d0006c2209450d00201e20074105746a2106034020062004290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200741016a2107200641206a2106200441d0006a2104200941b07f6a22090d000b0b200120073602c00520012903a00f21082001200b3602a809200120083703a009200141880d6a200141a0096a10db0420012802880d4101470d02200129028c0d2108419eedc400ad4280808080f006841000200810000c050b200610322207450d060b200141003602e805200120063602e405200120073602e005200141e0056a4100411010c80120012802e00520012802e80522066a2207200129008805370000200741086a20014188056a41086a2900003700002001200641106a22063602e805200141e0056a2006411010c80120012802e00520012802e80522066a220720012900c80c370000200741086a200141c80c6a41086a2900003700002001200641106a22073602e80520012802c0072106200141e0056a2007200410c80120012802e005220720012802e80522096a2006200410c9081a2001200920046a22043602e805024020012802c407450d002006102c0b200141880d6a2007200410dc04200141a0096a41086a200141940d6a290200370300200141a0096a41106a2001419c0d6a290200370300200141a0096a41186a2204200141a40d6a2902003703002001200129028c0d3703a00920012802880d4101470d01200141ac0d6a2802002109200141c0076a41186a2004290300370300200141c0076a41106a2204200141a0096a41106a290300370300200141c0076a41086a2206200141a0096a41086a290300370300200120012903a0093703c007024020012802e405450d002007102c0b200141880d6a41186a200141c0076a41186a290300370300200141880d6a41106a2004290300370300200141880d6a41086a2006290300370300200120012903c0073703880d20014188056a41ffdcc700410710c501200141c80c6a41ddecc400411210c5012001201f3602e80c200141800b6a200141e80c6a410410c701200141ac096a200141e80c6a41046a3602002001200141800b6a41086a3602a4092001200141e80c6a3602a8092001200141800b6a3602a009200141e0056a200141a0096a107e20012802e805220441206a2206417f4c0d060240024020060d00410121070c010b200610322207450d060b200141003602880b200120063602840b200120073602800b200141800b6a4100411010c80120012802800b20012802880b22066a2207200129008805370000200741086a20014188056a41086a2900003700002001200641106a22063602880b200141800b6a2006411010c80120012802800b20012802880b22066a220720012900c80c370000200741086a200141c80c6a41086a2900003700002001200641106a22073602880b20012802e0052106200141800b6a2007200410c80120012802800b220720012802880b220b6a2006200410c9081a2001200b20046a220b3602880b024020012802e405450d002006102c0b410410322204450d05200142043702e405200120043602e005412010322204450d05200142203702a409200120043602a009200141a0096a41004120102f20012802a009220620012802a809220c6a220420012903880d370000200441086a200141880d6a41086a290300370000200441106a200141880d6a41106a290300370000200441186a200141880d6a41186a2903003700002001200c41206a22043602a809200141e0056a41002004102f20012802e00520012802e805220c6a2006200410c9081a2001200c20046a22043602e805024020012802a409450d002006102c0b200141e0056a20044104102f20012802e005220420012802e80522066a20093600002001200641046a22063602e8052007200b2004200610a702024020012802e405450d002004102c0b20012802840b450d022007102c0c020b200141a0096a200141880d6a41086a41f00010c9081a200141d8076a200141880a6a290300370300200141d0076a200141800a6a290300370300200141c0076a41086a200141f8096a290300370300200120012903f0093703c00720014188056a41ffdcc700410710c501200141c80c6a41ddecc400411210c5012001201f36029805200141e80c6a20014198056a410410c701200141ec056a20014198056a41046a360200200120113602e405200120014198056a3602e8052001200141e80c6a3602e005200141800b6a200141e0056a107e20012802880b220441206a2206417f4c0d050240024020060d00410121090c010b200610322209450d050b200141003602f00c200120063602ec0c200120093602e80c200141e80c6a4100411010c80120012802e80c20012802f00c22066a2209200129008805370000200941086a20014188056a41086a2900003700002001200641106a22063602f00c200141e80c6a2006411010c80120012802e80c20012802f00c22066a220920012900c80c370000200941086a200141c80c6a41086a2900003700002001200641106a22093602f00c20012802800b2106200141e80c6a2009200410c80120012802e80c220920012802f00c220c6a2006200410c9081a2001200c20046a220c3602f00c024020012802840b450d002006102c0b410410322204450d04200142043702840b200120043602800b412010322204450d04200142203702e405200120043602e005200141e0056a41004120102f20012802e005220620012802e805220d6a220420012903c007370000200441086a200141c0076a41086a290300370000200441106a200141c0076a41106a290300370000200441186a200141c0076a41186a2903003700002001200d41206a22043602e805200141800b6a41002004102f20012802800b20012802880b220d6a2006200410c9081a2001200d20046a22043602880b024020012802e405450d002006102c0b200141800b6a20044104102f20012802800b220420012802880b22066a200b3600002001200641046a22063602880b2009200c2004200610a702024020012802840b450d002004102c0b024020012802ec0c450d002009102c0b200141a0096a10dd040c020b20012802e405450d002007102c0b200141c0056a28020021074100211e0b20012802bc05211402400240201e0d00200141d0056a4200370300200141c8056a4200370300200141b8056a41086a22044200370300200142003703b80520014188056a41ffdcc700410710c501200420014188056a41086a29000037030020012001290088053703b805200141c80c6a418893c700410a10c501200a41086a200141c80c6a41086a290000370000200a20012900c80c370000200141880d6a200141b8056a10e101200129028c0d420020012802880d22041b21082004410120041b2111410021250c010b2007ad4220862014ad84210841012125201e21110b200141003602a005200142013703980520014198056a41002008422088a72204410574220c41057510d90420012802a00521160240024020040d002025211b0c010b201520106a211d200128029805201641e0016c6a210d200141880d6a41206a211c200141800b6a41a0016a2122200141800b6a4180016a2112200141800b6a41e0006a2110200141800b6a41c0006a211f200141800b6a41206a210a200141a0096a41017221052025211b2015210620112104034020062109200141e80c6a41186a2217200441186a290000370300200141e80c6a41106a2218200441106a290000370300200141e80c6a41086a2219200441086a290000370300200120042900003703e80c20014188056a41ffdcc700410710c501200141c80c6a4190b5c300410810c501200141c0076a200141e80c6a10e40220012802c807220641206a2207417f4c0d040240024020070d004101210b0c010b20071032220b450d040b200141003602c005200120073602bc052001200b3602b805200141b8056a4100411010c80120012802b80520012802c00522076a220b200129008805370000200b41086a20014188056a41086a2900003700002001200741106a22073602c005200141b8056a2007411010c80120012802b80520012802c00522076a220b20012900c80c370000200b41086a200141c80c6a41086a2900003700002001200741106a220b3602c00520012802c0072107200141b8056a200b200610c80120012802b805220b20012802c005221a6a2007200610c9081a2001201a20066a22063602c005024020012802c407450d002007102c0b200141a0096a200b200610e50220012d00a0092107200141c0076a200541c00110c9081a41002106024020074101470d00200141e0056a200141c0076a41c00110c9081a410121060b024020012802bc05450d00200b102c0b0240024020060d00200141800b6a41186a4200370300200141800b6a41106a4200370300200141800b6a41086a4200370300200142003703800b200a410041a00110cb081a0c010b200141800b6a200141e0056a41c00110c9081a0b02400240201b41ff0171450d00200921060c010b4100211b02402009201d470d00200921060c010b200941e0016a210602400240200141800b6a200941206a2207460d002007200141800b6a412010cc080d010b0240200a200941c0006a2207460d002007200a412010cc080d010b0240201f200941e0006a2207460d002007201f412010cc080d010b0240201020094180016a2207460d0020072010412010cc080d010b02402012200941a0016a2207460d0020072012412010cc080d010b2022200941c0016a2207460d0120072022412010cc08450d010b4101211b0b200441206a2104200141880d6a41186a2017290300370300200141880d6a41106a2018290300370300200141880d6a41086a2019290300370300200120012903e80c3703880d201c200141800b6a41c00110c9081a201641016a2116200d200141880d6a41e00110c90841e0016a210d200c41606a220c0d000b0b200120163602a00502402008a72204450d00200441ffffff3f71450d002011102c0b2016ad42e0017e2208422088a70d022008a72204417f4c0d02200128029c052105200128029805211a0240024020040d00410121060c010b200410322206450d020b200141003602a809200120063602a0092001200441e0016e3602a409200141a0096a4100201610d90420012802a80921170240024020160d0020012802a009211c0c010b201a201641e0016c6a211920012802a009221c201741e0016c6a2118200141880d6a41c0016a2106200141880d6a41a0016a2107200141880d6a4180016a2109200141880d6a41e0006a210b200141880d6a41c0006a210c200141880d6a41206a210d201a21040340200141880d6a41186a200441186a290000370300200141880d6a41106a200441106a290000370300200141880d6a41086a200441086a290000370300200120042900003703880d200d41186a200441386a290000370000200d41106a200441306a290000370000200d41086a200441286a290000370000200d200441206a290000370000200c200441c0006a290000370000200c41086a200441c8006a290000370000200c41106a200441d0006a290000370000200c41186a200441d8006a290000370000200b200441e0006a290000370000200b41086a200441e8006a290000370000200b41106a200441f0006a290000370000200b41186a200441f8006a290000370000200920044180016a290000370000200941086a20044188016a290000370000200941106a20044190016a290000370000200941186a20044198016a2900003700002007200441a0016a290000370000200741086a200441a8016a290000370000200741106a200441b0016a290000370000200741186a200441b8016a2900003700002006200441c0016a290000370000200641086a200441c8016a290000370000200641186a200441d8016a290000370000200641106a200441d0016a290000370000201741016a21172018200141880d6a41e00110c90841e0016a2118200441e0016a22042019470d000b0b200120173602a809200141b0056a4200370300200141a8056a420037030020014198056a41086a220442003703002001420037039805200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d37039805200141880d6a4188a5c300410a10c501200f41086a2006290000370000200f20012900880d370000201741e0016c4104722204417f4c0d02200410322206450d01200141003602900d2001200436028c0d200120063602880d200141880d6a2017108f010240024020170d0020012802880d210920012802900d21060c010b201c201741e0016c6a210b20012802900d2106201c21040340200141880d6a20064120102f20012802880d20012802900d22076a22062004290000370000200641086a200441086a290000370000200641106a200441106a290000370000200641186a200441186a2900003700002001200741206a22063602900d200141880d6a20064120102f20012802880d20012802900d22076a2206200441206a290000370000200641086a200441286a290000370000200641106a200441306a290000370000200641186a200441386a2900003700002001200741206a22063602900d200141880d6a20064120102f20012802880d20012802900d22076a2206200441c0006a290000370000200641086a200441c8006a290000370000200641106a200441d0006a290000370000200641186a200441d8006a2900003700002001200741206a22063602900d200141880d6a20064120102f20012802880d20012802900d22076a2206200441e0006a290000370000200641086a200441e8006a290000370000200641106a200441f0006a290000370000200641186a200441f8006a2900003700002001200741206a22063602900d200141880d6a20064120102f20012802880d20012802900d22076a220620044180016a290000370000200641086a20044188016a290000370000200641106a20044190016a290000370000200641186a20044198016a2900003700002001200741206a22063602900d200141880d6a20064120102f20012802880d20012802900d22076a2206200441a0016a290000370000200641086a200441a8016a290000370000200641106a200441b0016a290000370000200641186a200441b8016a2900003700002001200741206a22063602900d200141880d6a20064120102f20012802880d220920012802900d22076a2206200441c0016a290000370000200641086a200441c8016a290000370000200641106a200441d0016a290000370000200641186a200441d8016a2900003700002001200741206a22063602900d200441e0016a2204200b470d000b0b20014198056a41202009200610a7020240200128028c0d450d002009102c0b024020012802a4092204450d00200441e0016c450d00201c102c0b200141b0056a4200370300200141a8056a420037030020014198056a41086a220442003703002001420037039805200141880d6a41ffdcc700410710c5012004200141880d6a41086a2206290000370300200120012900880d37039805200141880d6a41dcb3c300410d10c501200f41086a2006290000370000200f20012900880d3700002001201b3a00e80c20014198056a4120200141e80c6a410110a7022001202336028c0d200141053602880d200141880d6a10c802202420152021201a201610de0402402005450d00200541e0016c450d00201a102c0b02402025201e45720d00201441ffffff3f71450d00201e102c0b024020012802fc0441ffffff3f71450d002013102c0b02402003a72204450d00200441e0016c450d002015102c0b200141880d6a109b0120012903900d21030b20014198056a41186a2204420037030020014198056a41106a2206420037030020014198056a41086a220742003703002001420037039805200141880d6a41e6dcc700410710c5012007200141880d6a41086a2209290000370300200120012900880d37039805200141880d6a41a08ec100411110c50120042009290000370300200620012900880d370300200141d0006a20014198056a10890402402001280250417d710d00200141880d6a109b0120012903900d2202428094ebdc038242808c8d9e027e2208428094ebdc0380210e2008428094ebdc038221082002428094ebdc03802102200141800b6a1092020240024020012802880b22070d00420021020c010b200242808c8d9e027e200e20084280cab5ee0156ad7c7c210820012802800b210c2007417f6a210d41002109420021024100210b024002400340200c200b411c6c6a2104200b210602400240034020072006460d0402400240200220085a0d00200141c0006a2004280200200441086a2802002004410c6a280200200441146a280200200441186a28020010a4022001290340a7450d010b02402009450d00200620096b220b20074f0d04200141880d6a41186a22162004200941646c6a220b41186a2217280200360200200141880d6a41106a2218200b41106a2219290200370300200141880d6a41086a221a200b41086a221b2902003703002001200b2902003703880d200441086a221c290200210e200441106a22052902002120200441186a220f280200210a200b20042902003702002017200a36020020192020370200201b200e370200200f201628020036020020052018290300370200201c201a290300370200200420012903880d3702000c030b2004411c6a2104410021092007200641016a2206470d010c070b0b200941016a2109200220012903487c21020b200641016a210b200d2006460d030c010b0b200b200741e48ac500103f000b2007200741f48ac500103f000b2009450d0020072009490d00200c2007411c6c6a210b2001200720096b22043602880b200c2004411c6c6a21090340024020092802082204450d00200441e0006c2106200928020041d4006a210403400240200441706a2802002207450d00200741306c450d002004416c6a280200102c0b024020042802002207450d00200741ffffff3f71450d002004417c6a280200102c0b200441e0006a2104200641a07f6a22060d000b0b024020092802042204450d00200441e0006c450d002009280200102c0b2009411c6a21040240200941106a28020041ffffffff0371450d00200928020c102c0b200421092004200b470d000b0b200141e0056a41086a2204200141800b6a41086a280200360200200120012903800b22083703e00502402008a722060d00200141a00d6a22044200370300200141880d6a41106a22064200370300200141880d6a41086a22074200370300200142003703880d200141c0076a41eddcc700410810c5012007200141c0076a41086a2209290000370300200120012900c0073703880d200141c0076a41f1cbc000411010c50120042009290000370300200620012900c007370300200141880d6a412010b4010c010b200141a00d6a22074200370300200141880d6a41106a22094200370300200141880d6a41086a220b4200370300200142003703880d200141c0076a41eddcc700410810c501200b200141c0076a41086a220c290000370300200120012900c0073703880d200141c0076a41f1cbc000411010c5012007200c290000370300200920012900c007370300200141a0096a20062004280200109e02200141880d6a412020012802a009220420012802a80910a702024020012802a409450d002004102c0b200141e0056a1097020b200120003602f804200141c80c6a41186a22064200370300200141c80c6a41106a22044200370300200141c80c6a41086a22074200370300200142003703c80c200141c0076a41e6dcc700410710c5012007200141c0076a41086a290000370300200120012900c0073703c80c200141a0096a41a08ec100411110c5012006200141a0096a41086a290000370300200420012900a009370300200141386a200141c80c6a1089044280c2d72f210802402001280238417d710d00200141e00c6a22094200370300200141d80c6a220b4200370300200141c80c6a41086a22064200370300200142003703c80c200141c0076a41e6dcc700410710c5012006200141c0076a41086a220c290000370300200120012900c0073703c80c200141a0096a41bcc6c200411510c501200441086a220d200141a0096a41086a2216290000370000200420012900a00937000002400240200141c80c6a412010dc0241ff017122074102460d0020074101710d010b20094200370300200b420037030020064200370300200142003703c80c200141c0076a41e6dcc700410710c5012006200c290000370300200120012900c0073703c80c200141a0096a41d8bfc200410810c501200d2016290000370000200420012900a0093700004100200141c80c6a108d042206200641ff01714104461b41ff01710e0401000100010b20012802f804210b42002108200141b8056a41186a22064200370300200141b8056a41106a22074200370300200141b8056a41086a22094200370300200142003703b80520014188056a41c7dcc700410410c501200920014188056a41086a220c29000037030020012001290088053703b805200141c80c6a41ccd5c500410a10c5012006200141c80c6a41086a220d290000370300200720012900c80c370300200141286a200141b8056a10cf02200128022821162001290330210e200642003703002007420037030020094200370300200142003703b80520014188056a41c7dcc700410410c5012009200c29000037030020012001290088053703b805200141c80c6a41bcd6c500410b10c5012006200d290000370300200720012900c80c370300200141186a200141b8056a10cf022001290320212020012802182106200141800b6a41186a22074200370300200141800b6a41106a22094200370300200141800b6a41086a220c4200370300200142003703800b200141880d6a41c7dcc700410410c501200c200141880d6a41086a220d290000370300200120012900880d3703800b200141880d6a41e8d6c500410b10c5012007200d290000370300200920012900880d370300200141086a200141800b6a10cf0202400240427f2020420020061b200e42d8047e420020161b7c220e42d8047c22202020200e541b220e2001290310420020012802081b7d2220200e560d00417f200b2020a7417f2020428080808010541b6a22062006200b491b2206200b6b220720064b0d012007417f6a4195014b0d01200141c0076a41e6dcc700410710c501200141a0096a418893c700410a10c501412010322206450d03200142203702840b200120063602800b200141800b6a4100411010c80120012802800b20012802880b22066a220720012900c007370000200741086a200141c0076a41086a2900003700002001200641106a22063602880b200141800b6a2006411010c80120012802800b220920012802880b22066a220720012900a009370000200741086a200141a0096a41086a2900003700002001200641106a22063602880b2006417f4c0d044101210702402006450d00200610322207450d040b200141003602900d2001200636028c0d200120073602880d200141880d6a4100200610c80120012802880d20012802900d22076a2009200610c9081a2001419c0d6a220b200141800b6a41086a280200360200200141003a00a40d200141103602a00d200141e0056a41186a220920012903a00d370300200120012903800b3702940d200141e0056a41106a200141880d6a41106a29030022083703002001200720066a3602900d200141e0056a41086a20012903900d220e370300200120012903880d22203703e005200141c0076a41106a2008370300200141c0076a41086a200e370300200141c0076a41186a2009290300370300200120203703c007200141880d6a200141c0076a10b6010240024020012802880d4101470d0020014198056a41186a200141a40d6a29020037030020014198056a41106a200b29020037030020014198056a41086a200141940d6a2902003703002001200129028c0d37039805412010322217450d052017200129039805370000201741186a20014198056a41186a290300370000201741106a20014198056a41106a290300370000201741086a20014198056a41086a29030037000020014281808080103702ec0c200120173602e80c200141a0096a41186a200141c0076a41186a290300370300200141a0096a41106a200141c0076a41106a290300370300200141a0096a41086a200141c0076a41086a290300370300200120012903c0073703a009200141880d6a200141a0096a10b601024020012802880d4101470d00200141880d6a41047221064120210b41012107410121090340200141800b6a41186a200641186a2902002208370300200141800b6a41106a200641106a290200220e370300200141800b6a41086a200641086a29020022203703002001200629020022263703800b200141b8056a41186a220c2008370300200141b8056a41106a220d200e370300200141b8056a41086a22162020370300200120263703b805024020092007470d00200141e80c6a2007410110d60120012802e80c21170b2017200b6a220720012903b805370000200741186a200c290300370000200741106a200d290300370000200741086a20162903003700002001200941016a22093602f00c200141880d6a200141a0096a10b60120012802880d4101470d01200b41206a210b20012802ec0c21070c000b0b024020012802a409450d0020012802a009102c0b0240200141b0096a280200450d0020012802ac09102c0b200141a00f6a41086a200141e80c6a41086a280200360200200120012903e80c3703a00f0c010b200141003602a80f200142013703a00f024020012802c407450d0020012802c007102c0b200141d0076a280200450d0020012802cc07102c0b200141c0076a41e6dcc700410710c501200141a0096a41b18ec100410a10c501412010322206450d03200142203702840b200120063602800b200141800b6a4100411010c80120012802800b20012802880b22066a220720012900c007370000200741086a200141c0076a41086a2900003700002001200641106a22063602880b200141800b6a2006411010c80120012802800b220720012802880b22066a220920012900a009370000200941086a200141a0096a41086a2900003700002001200641106a22063602880b2006417f4c0d040240024020060d00410121090c010b200610322209450d040b200141003602900d2001200636028c0d200120093602880d200141880d6a4100200610c80120012802880d20012802900d22096a2007200610c9081a2001419c0d6a200141800b6a41086a280200360200200141003a00a40d200141113602a00d200141e0056a41186a220720012903a00d370300200120012903800b3702940d200141e0056a41106a200141880d6a41106a220b29030022083703002001200920066a3602900d200141e0056a41086a20012903900d220e370300200120012903880d22203703e005200141c0076a41106a2008370300200141c0076a41086a200e370300200141c0076a41186a2007290300370300200120203703c007200141880d6a200141c0076a10b8010240024020012d00b80d4102460d0020014198056a41186a200141880d6a41186a29030037030020014198056a41106a200b29030037030020014198056a41086a200141880d6a41086a290300370300200120012903880d37039805024020012802ac0d2206450d0020012802a80d2207450d00200641ffffff3f71450d002007102c0b412010322217450d052017200129039805370000201741186a20014198056a41186a290300370000201741106a20014198056a41106a290300370000201741086a20014198056a41086a29030037000020014281808080103702ec0c200120173602e80c200141a0096a41186a200141c0076a41186a290300370300200141a0096a41106a200141c0076a41106a290300370300200141a0096a41086a200141c0076a41086a290300370300200120012903c0073703a009200141880d6a200141a0096a10b801024020012d00b80d4102460d0041202109410121070340200141800b6a41186a2206200141880d6a41186a290300370300200141800b6a41106a220b200141880d6a41106a290300370300200141800b6a41086a220c200141880d6a41086a290300370300200120012903880d3703800b024020012802ac0d220d450d0020012802a80d2216450d00200d41ffffff3f71450d002016102c0b200141b8056a41186a220d2006290300370300200141b8056a41106a2216200b290300370300200141b8056a41086a220b200c290300370300200120012903800b3703b8050240200720012802ec0c470d00200141e80c6a2007410110d60120012802e80c21170b201720096a220620012903b805370000200641186a200d290300370000200641106a2016290300370000200641086a200b2903003700002001200741016a22073602f00c200941206a2109200141880d6a200141a0096a10b80120012d00b80d4102470d000b0b024020012802a409450d0020012802a009102c0b0240200141b0096a280200450d0020012802ac09102c0b20014188056a41086a200141e80c6a41086a2802002206360200200120012903e80c370388050c010b20014100360290052001420137038805024020012802c407450d0020012802c007102c0b41002106200141d0076a280200450d0020012802cc07102c0b200120012802a80f22073602800b200120063602e005200620076aad42c0f0f50b7e21080240200741808004490d00024041002802d8d2484102490d00200141a0096a411c6a4102360200200141b4096a4102360200200141ac096a4102360200200141c08ec1003602b809200141bc8ec1003602a809200141023602a4092001200141e0056a3602b0092001200141800b6a3602a00941002802d4d248210441002802d0d248210641002802dcd2482107200141c80d6a41a411360200200141c00d6a42de80808010370300200141bc0d6a41acc5c300360200200141b40d6a420e370200200141b00d6a41e28fc100360200200141a80d6a4204370300200141980d6a4205370300200141900d6a4107360200200141880d6a411c6a200141a0096a360200200141c48ec1003602940d200141db8fc10036028c0d200141023602880d200641f8a3c000200741024622071b200141880d6a200441e0a3c00020071b2802101103000b0240200128028c0541ffffff3f71450d00200128028805102c0b024020012802a40f41ffffff3f71450d0020012802a00f102c0b41002802d8d2484102490d02200141133602a4092001200141f8046a3602a00941002802d4d248210441002802d0d248210641002802dcd2482107200141c80d6a41940a360200200141c00d6a42de80808010370300200141bc0d6a41acc5c300360200200141b40d6a420e370200200141b00d6a41e28fc100360200200141a80d6a4201370300200141980d6a4202370300200141900d6a4107360200200141a40d6a200141a0096a360200200141a08fc1003602940d200141db8fc10036028c0d200141023602880d200641f8a3c000200741024622071b200141880d6a200441e0a3c00020071b2802101103000c020b200141880d6a200141a00f6a10a602200128028c0d210920012802880d210b20014188056a200620012802900d220710d60120012802880520012802900522064105746a200b200741057410c9081a2001200620076a3602900502402009450d00200941ffffff3f71450d00200b102c0b200141880d6a41086a2207200141a00f6a41086a280200360200200120012903a00f3703880d200141e00c6a22094200370300200141d80c6a220b4200370300200141c80c6a41086a22064200370300200142003703c80c200141c0076a41e6dcc700410710c5012006200141c0076a41086a220c290000370300200120012900c0073703c80c200141a0096a41ec8ec100411210c501200441086a220d200141a0096a41086a2216290000370000200420012900a009370000200141c80c6a200141880d6a10b1040240200128028c0d41ffffff3f71450d0020012802880d102c0b200720014188056a41086a28020036020020012001290388053703880d20094200370300200b420037030020064200370300200142003703c80c200141c0076a41e6dcc700410710c5012006200c290000370300200120012900c0073703c80c200141a0096a41fe8ec100411210c501200d2016290000370000200420012900a009370000200141c80c6a200141880d6a10b1040240200128028c0d41ffffff3f71450d0020012802880d102c0b20012802f8042106200141e00c6a4200370300200141c80c6a41106a4200370300200141c80c6a41086a22074200370300200142003703c80c200141c0076a41e6dcc700410710c5012007200141c0076a41086a290000370300200120012900c0073703c80c200141a0096a41a08ec100411110c501200441086a200141a0096a41086a290000370000200420012900a009370000200141c80c6a41012006109c0420084280c6868f017c210841002802d8d2484103490d01200141133602a4092001200141f8046a3602a00941002802d4d248210441002802d0d248210641002802dcd2482107200141c80d6a41920a360200200141c00d6a42de80808010370300200141bc0d6a41acc5c300360200200141b40d6a420e370200200141b00d6a41e28fc100360200200141a80d6a4201370300200141880d6a41106a4202370300200141880d6a41086a4107360200200141a40d6a200141a0096a360200200141908fc1003602940d200141db8fc10036028c0d200141033602880d200641f8a3c000200741024622071b200141880d6a200441e0a3c00020071b2802101103000c010b41002802d8d2484102490d002001412b3602a409200141b08fc1003602a00941002802d4d248210441002802d0d248210641002802dcd2482107200141c80d6a41990a360200200141c00d6a42de80808010370300200141bc0d6a41acc5c300360200200141b40d6a420e370200200141b00d6a41e28fc100360200200141a80d6a4201370300200141980d6a4201370300200141900d6a4107360200200141a40d6a200141c0076a360200200141b4b5c8003602940d200141db8fc10036028c0d200141043602c407200141023602880d200441e0a3c000200741024622071b28021021042001200141a0096a3602c007200641f8a3c00020071b200141880d6a20041103000b200842c093b9d3007c21080b200141a0096a10de0220012802a009210c0240024020012802a8092207450d00200741c4006c21062007410274417c6a41027641016a210b41002109200c210402400340024020042d00004101460d00200441046a28020020004f0d020b200441c4006a2104200941016a2109200641bc7f6a22060d000b200b21090b200720094f0d012009200741d089c500104f000b410021090b200120093602880d200141940d6a200c200941c4006c22066a22163602002001200c3602900d200141003602a8092001200720096b220d36028c0d200c200941ffffffff037141c4006c6a21172001200141a0096a3602980d200c210702400340024020060d00201721040c020b200641bc7f6a210620072d0000210b200741c4006a22042107200b4102470d000b0b200120043602900d200c200941c4006c6a210702400340024020072004470d002016210b0c020b20042d00002106200441c4006a220b210420064102470d000b0b2001200b3602900d02400240200d0d004100210d0c010b02402009450d00200c200c200941c4006c6a200d41c4006c10ca081a20012802a009210c0b2001200d3602a8090b20012802a4092106200141980b6a22074200370300200141900b6a22044200370300200141800b6a41086a22094200370300200142003703800b20014188056a41dcdcc700410a10c501200920014188056a41086a29000037030020012001290088053703800b200141c80c6a41d3dec400410610c5012007200141c80c6a41086a290000370300200420012900c80c370300200141880d6a200c200d10fd02200141800b6a412020012802880d220720012802900d10a7020240200128028c0d450d002007102c0b02402006450d00200c450d00200641c4006c450d00200c102c0b200141800b6a41186a4200370300200141800b6a41106a4200370300200141800b6a41086a22064200370300200142003703800b20014188056a41dcdcc700410a10c501200620014188056a41086a29000037030020012001290088053703800b200141c80c6a41b0e4c400410c10c501200441086a200141c80c6a41086a290000370000200420012900c80c370000200141003a00e80c200141800b6a4120200141e80c6a410110a702200141a0096a10cd02200141b8056a41186a2206200141a0096a41186a2207290300370300200141b8056a41106a2209200141a0096a41106a220b290300370300200141b8056a41086a220c200141a0096a41086a220d290300370300200120012903a0093703b8054124103222040d020b1039000b103b000b200420012903b80537000020044114360220200441186a2006290300370000200441106a2009290300370000200441086a200c290300370000200142818080801037028c0d200120043602880d200141880d6a10e002200141880d6a41186a2007290300370300200141880d6a41106a200b290300370300200141880d6a41086a200d290300370300200120012903a0093703880d200141880d6a10e10210d404200141b00f6a2400427f2003427f200820027c42a8e397037c220820082002541b7c220220022003541b0bf41e07057f017e027f017e027f067e017f230041a00e6b22002400200041a8026a22014200370300200041a0026a2202420037030020004190026a41086a220342003703002000420037039002200041c8036a41c7dcc700410410c5012003200041c8036a41086a2204290000370300200020002900c80337039002200041c8036a4198dac500410b10c50120012004290000370300200220002900c803370300200041c8096a20004190026a10fa04024020002d00c8094102470d00200041d00c6a10890742032105024020002802d80c2203450d0020002802d00c2101200341246c210302400340024020012d00004101470d00200141016a2800002104200141086a28020021062000200141106a28020036028c0820002006360288080240200441c28289aa04470d00200041c8096a20004188086a102920002903c80922054203520d030b200041c8036a4180efc50041f00010c9081a0b200141246a21012003415c6a22030d000b420321050c010b200041c8036a200041d0096a41f00010c9081a200041306a200041c8036a41f00010c9081a0b200041d00c6a102b200041a0016a200041306a41f00010c9081a41002104024020054203510d00200020053703b002200041b0026a41086a200041a0016a41f00010c9082107200041a8036a41186a22064200370300200041a8036a41106a22014200370300200041a8036a41086a22044200370300200042003703a803200041c8036a41c7dcc700410410c5012004200041c8036a41086a2203290000370300200020002900c8033703a803200041c8036a41bcd6c500410b10c50120062003290000370300200120002900c803370300200041206a200041a8036a10cf0220002903b8022108024002402000280220450d0020002903284200520d010b200642003703002001420037030020044200370300200042003703a803200041c8036a41c7dcc700410410c50120042003290000370300200020002900c8033703a803200041c8036a41bcd6c500410b10c501200141086a22092003290000370000200120002900c803370000200020083703c809200041a8036a4120200041c8096a410810a702200642003703002001420037030020044200370300200042003703a803200041c8036a41c7dcc700410410c50120042003290000370300200020002900c8033703a803200041c8036a41f0d5c500410b10c50120092003290000370000200120002900c803370000200041c8096a200041a8036a10f10420002802c809210a20002902cc09210b200642003703002001420037030020044200370300200042003703a803200041c8036a41c7dcc700410410c50120042003290000370300200020002900c8033703a803200041c8036a418cd7c500410a10c50120092003290000370000200120002900c803370000200041c8096a200041a8036a10860520002d00c8092104200041c8036a41186a200041e1096a290000370300200041c8036a41106a200041d9096a2900003703002003200041d1096a290000370300200020002900c9093703c803200b4200200a1b210c200b428080808070834200200a1b210b200a4108200a1b21030240024020044101460d00200041e80c6a4200370300200041e00c6a4200370300200041d80c6a4200370300200042003703d00c0c010b200041d00c6a41186a200041c8036a41186a290300370300200041d00c6a41106a200041c8036a41106a290300370300200041d00c6a41086a200041c8036a41086a290300370300200020002903c8033703d00c0b20004188086a41086a200041d00c6a41086a290300220d37030020004188086a41106a200041d00c6a41106a290300220e37030020004188086a41186a200041d00c6a41186a290300220f370300200020002903d00c221037038808200041c8096a41086a200b200c42ffffffff0f8384370300200041c8096a41106a2010370300200041c8096a41186a200d370300200041e8096a200e370300200041c8096a41286a200f370300200020033602cc09200041003602c809200041c8036a200041c8096a102e200041db0c6a200041c8036a41086a280200360000200020002903c8033700d30c200041d4036a200041d70c6a290000370000200041c28289aa043600c903200041023a00c803200020002900d00c3700cd03200041c8036a109a06200ca72204450d00200441286c450d002003102c0b200041a8036a41186a22064200370300200041a8036a41106a220a4200370300200041a8036a41086a22044200370300200042003703a803200041c8036a41c7dcc700410410c5012004200041c8036a41086a2203290000370300200020002900c8033703a803200041c8036a41e8d6c500410b10c501200141086a22092003290000370000200120002900c803370000200041106a200041a8036a10cf02200028021021112000290318210b20064200370300200a420037030020044200370300200042003703a803200041c8036a41c7dcc700410410c50120042003290000370300200020002900c8033703a803200041c8036a4190dbc500410810c50120092003290000370000200120002900c803370000200042002008200b42017c420120111b7d220b200b2008561b3e02c809200041a8036a4120200041c8096a410410a70220064200370300200a420037030020044200370300200042003703a803200041c8036a41c7dcc700410410c50120042003290000370300200020002900c8033703a803200041c8036a41e8d6c500410b10c50120092003290000370000200120002900c803370000200020083703c809200041a8036a4120200041c8096a410810a7024100210420054201510d00200041b0026a41106a280200210420004190026a41186a420037030020004190026a41106a420037030020004190026a41086a220142003703002000420037039002200041c8036a41c7dcc700410410c50120012003290000370300200020002900c80337039002200041c8036a41f0d5c500410b10c501200241086a2003290000370000200220002900c803370000200041c8096a20004190026a10f10420002802c8092201410820011b210302400240200420002902cc09420020011b220b422088a74f0d002003200441286c6a2201290000210c200141086a290000210d200141106a290000210e20004188086a41186a200141186a29000037030020004188086a41106a200e37030020004188086a41086a200d3703002000200c37038808200041c8096a20004188086a10d20720002802c8092101200041c8036a200041c8096a41047241c40110c9081a20014101460d002007410c6a2104200041c8066a200041d00c6a41046a200041c8036a41046a41c00110c90841c00110c9081a20004188086a200041c8066a41c00110c9081a20004190026a41186a420037030020004190026a41106a420037030020004190026a41086a220642003703002000420037039002200041c8036a41c7dcc700410410c5012006200041c8036a41086a2201290000370300200020002900c80337039002200041c8036a418cd7c500410a10c501200241086a2001290000370000200220002900c803370000200041c8096a20004190026a10860520002d00c8092106200041c8036a41186a200041e1096a290000370300200041c8036a41106a200041d9096a2900003703002001200041d1096a290000370300200020002900c9093703c8030240024020064101460d00200041c0036a4200370300200041b8036a4200370300200041b0036a4200370300200042003703a8030c010b200041a8036a41186a200041c8036a41186a290300370300200041a8036a41106a200041c8036a41106a290300370300200041a8036a41086a200041c8036a41086a290300370300200020002903c8033703a8030b200041a8026a220a420037030020004190026a41106a2209420037030020004190026a41086a220142003703002000420037039002200041c8036a41c7dcc700410410c5012001200041c8036a41086a2206290000370300200020002900c80337039002200041c8036a41ccd5c500410a10c501200241086a2006290000370000200220002900c803370000200020004190026a10cf022000290308210c20002802002106200041d00c6a41a4b2c8004104108801200041d00c6a41a8b2c800410b2008108c01200041d00c6a41b3b2c800410d200c420020061b108c01200041d00c6a41c0b2c8004110200041a8036a4120108b01200041c8036a200041d00c6a41d00110c9081a200041c8096a200420004188086a200041c8036a10d30720002802c8094101460d00200041c8036a200041c8096a41086a41800310c9081a200041c8096a200041c8036a41800310c9081a200041d00c6a4191a2c6004109108801200041d00c6a41c4b5c80041004191b2c8004113108b01200041d00c6a419aa2c6004106200041e80a6a4120108b01200041d00c6a41a0a2c6004107200041a80c6a4120108b01200a420037030020094200370300200142003703002000420037039002200041d00c6a41c4b5c800410020004190026a4120108d01410021010340200041d00c6a20016a41003a0000200141016a220141c801470d000b20004188086a41086a20004190026a41086a29030037030020004188086a41106a20004190026a41106a29030037030020004188086a41186a20004190026a41186a290300370300200020002903900237038808410121040c010b410021040b200ba72201450d00200141286c450d002003102c0b024002402005500d00200041003a00c8090c010b200041d1096a20004190086a290300370000200041d9096a20004198086a290300370000200041e1096a200041a0086a290300370000200020043a00c80920002000290388083700c9090b20004190026a41186a2206420037030020004190026a41106a220a420037030020004190026a41086a220142003703002000420037039002200041c8036a41c7dcc700410410c5012001200041c8036a41086a2203290000370300200020002900c80337039002200041c8036a4198dac500410b10c501200241086a22092003290000370000200220002900c80337000020004190026a200041c8096a108c05200041d1096a20004188086a41086a290300370000200041d9096a20004188086a41106a290300370000200041e1096a20004188086a41186a290300370000200020043a00c80920002000290388083700c90920064200370300200a4200370300200142003703002000420037039002200041c8036a41c7dcc700410410c50120012003290000370300200020002900c80337039002200041c8036a41d4dac500411310c50120092003290000370000200220002900c80337000020004190026a200041c8096a108c050b200041a00e6a24000b984d06087f017e057f017e117f037e230041a0066b22002400200041f8006a22014200370300200041f0006a22024200370300200041e0006a41086a2203420037030020004200370360200041c8016a41ffdcc700410710c5012003200041c8016a41086a2204290000370300200020002900c80137036020004198026a41b8b3c300410c10c501200120004198026a41086a22052900003703002002200029009802370300200041206a200041e0006a412010c6012000280224210620002802202107200041286a10ec0220014200370300200242003703002003420037030020004200370360200041c8016a41ffdcc700410710c50120032004290000370300200020002900c80137036020004198026a418893c700410a10c50120012005290000370300200220002900980237030020004188046a200041e0006a10e101200029028c04210820002000280288042201410120011b22033602c003200020033602b80320002008420020011b22083e02bc03200020032008422088a74105746a3602c403200041003602c80320004188046a200041b8036a10bd0602400240024002400240200041c8046a280200450d0041d00010322205450d02200520004188046a41d00010c908210120004281808080103702a401200020013602a001200041c8016a41106a200041b8036a41106a280200360200200041c8016a41086a200041b8036a41086a290300370300200020002903b8033703c80120004198026a200041c8016a10bd060240200041d8026a280200450d0041d00021034101210441012101034020004188046a20004198026a41d00010c9081a024020012004470d00200041a0016a2004410110d60420002802a00121050b200520036a20004188046a41d00010c9081a2000200141016a22013602a80120004198026a200041c8016a10bd0620002802d802450d01200341d0006a210320002802a40121040c000b0b024020002802cc0141ffffff3f71450d0020002802c801102c0b200041386a41086a200041a0016a41086a280200360200200020002903a0013703380c010b200041003602402000420837033820002802bc0341ffffff3f71450d0020002802b803102c0b200041f8006a4200370300200041f0006a4200370300200041e0006a41086a2201420037030020004200370360200041c8016a41ffdcc700410710c5012001200041c8016a41086a290000370300200020002900c80137036020004198026a41b8b3c300410c10c501200241086a20004198026a41086a2900003700002002200029009802370000200041186a200041e0006a412010c601200028021c210120002802182103200041c8016a418dddc700410810c50120004198026a41c0fbc300411210c50120002001410020031b3602e802200041a0016a200041e8026a410410c70120004188046a410c6a200041e8026a41046a3602002000200041a0016a41086a220536028c042000200041e8026a360290042000200041a0016a36028804200041b8036a20004188046a107e20002802c003220141206a2203417f4c0d010240024020030d00410121040c010b200310322204450d010b20004100360290042000200336028c04200020043602880420004188046a4100411010c80120002802880420002802900422036a220420002900c801370000200441086a200041c8016a41086a2900003700002000200341106a22033602900420004188046a2003411010c80120002802880420002802900422036a2204200029009802370000200441086a20004198026a41086a2900003700002000200341106a22043602900420002802b803210320004188046a2004200110c801200028028804220420002802900422096a2003200110c9081a2000200920016a220136029004024020002802bc03450d002003102c0b20042001109d040240200028028c04450d002004102c0b200041f8006a4200370300200041f0006a4200370300200041e0006a41086a2201420037030020004200370360200041c8016a41ffdcc700410710c5012001200041c8016a41086a290000370300200020002900c80137036020004198026a41b8b3c300410c10c501200241086a20004198026a41086a2900003700002002200029009802370000200041106a200041e0006a412010c6012000280214210120002802102103200041c8016a418dddc700410810c50120004198026a41abedc300410e10c50120002001410020031b3602e802200041a0016a200041e8026a410410c70120004188046a410c6a200041e8026a41046a3602002000200536028c042000200041e8026a360290042000200041a0016a36028804200041b8036a20004188046a107e20002802c003220141206a2203417f4c0d010240024020030d00410121040c010b200310322204450d010b20004100360290042000200336028c04200020043602880420004188046a4100411010c80120002802880420002802900422036a220420002900c801370000200441086a200041c8016a41086a2900003700002000200341106a22033602900420004188046a2003411010c80120002802880420002802900422036a2204200029009802370000200441086a20004198026a41086a2900003700002000200341106a22043602900420002802b803210320004188046a2004200110c801200028028804220420002802900422056a2003200110c9081a2000200520016a220136029004024020002802bc03450d002003102c0b20042001109d040240200028028c04450d002004102c0b02400240024002402000280240450d0020004188046a200041386a10be06200041a3026a20004188046a41086a280200360000200020002903880437009b02200041073602880420004194046a20004198026a41076a290000370000200041023a008c04200020002900980237008d0420004188046a10c8022000280230210a200041d8006a200041386a41086a2802003602002000200a36024c20002006410020071b22093602482000200029033837035020004180016a200041c8006a41086a10be0620004100360298012000420137039001200028028001210b200028028401210c2000280288012106410410322201450d04200042043702fc03200020013602f803200041f8036a41004104102f20002802f80320002802800422016a20093600002000200141046a36028004200041c8016a41eddcc700410810c50120004198026a41d4d0c000411210c50120004188046a41cdd5c00010a102200028029004220141206a2203417f4c0d050240024020030d00410121040c010b200310322204450d050b200041003602c003200020033602bc03200020043602b803200041b8036a4100411010c80120002802b80320002802c00322036a220420002900c801370000200441086a200041c8016a41086a2900003700002000200341106a22033602c003200041b8036a2003411010c80120002802b80320002802c00322036a2204200029009802370000200441086a20004198026a41086a2900003700002000200341106a22043602c0032000280288042103200041b8036a2004200110c80120002802b803220420002802c00322056a2003200110c9081a2000200520016a22013602c0030240200028028c04450d002003102c0b20004188046a2004200110f604200029028c04420020002802880422011b21082001410120011b2107024020002802bc03450d002004102c0b200020084220883e028c032000200736028803200041086a20004188036a10870220002802080d01200028020c220d200028028c0341246e22012001200d4b1bad42247e220e422088a70d05200ea72201417f4c0d050240024020010d004104210f0c010b20011032220f450d050b200041003602a0032000200f360298032000200141246e220136029c0341002110024002400240200d450d00410021110340200028028c0322034104490d03201141016a21112000280288032205280000211220002003417c6a220236028c032000200541046a3602880341002101200041003a00a8042003417b6a2103034020022001460d0320004188046a20016a200520016a220441046a2d00003a00002000200441056a360288032000200141016a22043a00a8042000200336028c032003417f6a21032004210120044120470d000b20004198026a41186a220120004188046a41186a29030037030020004198026a41106a220320004188046a41106a29030037030020004198026a41086a220520004188046a41086a290300370300200020002903880437039802200441ff01714120490d03200041b8036a41086a2005290300220e370300200041a0016a41186a22042001290300370300200041a0016a41106a22012003290300370300200041a0016a41086a2203200e3703002000200029039802220e3703b8032000200e3703a001200041e8026a41186a22052004290300370300200041e8026a41106a22042001290300370300200041e8026a41086a22022003290300370300200020002903a0013703e80202402010200028029c03470d0020004198036a201010ff0320002802a0032110200028029803210f0b200f201041246c6a22012012360200200120002903e8023702042001410c6a2002290300370200200141146a20042903003702002001411c6a20052903003702002000201041016a22103602a0032011200d470d000b200028029c032101200028029803210f0b20104100200f1b210520014100200f1b2103200f4104200f1b21040c040b200141ff0171450d00200041003a00a8040b200028029c032201450d01200141246c450d01200028029803102c0c010b200041013a008c04200041073602880420004188046a10c802200028023c2201450d02200141d0006c450d022000280238102c0c020b4100210341042104410021050b20004188046a41cdd5c000200041f8036a10a00220004198026a200028028804220220002802900410fc04200029029c02420020002802980222011b210e2001410120011b21130240200028028c04450d002002102c0b200041c0016a2005360200200041bc016a2003360200200041b0016a200e370300200041a0016a41086a200041f8036a41086a280200360200200020002903f8033703a001200020043602b801200020133602ac0102402008a7450d002007102c0b0240024002400240024002402006450d00200e422088a72111200041b8016a2114200041ac016a2115200b200641d0006c6a211620004188046a41d0006a211720004188046a410c6a2118200041c8016a41c4006a2119200b21024100211a034020004188046a41386a22032002220141386a29030037030020004188046a41306a2204200141306a29030037030020004188046a41286a2205200141286a29030037030020004188046a41206a2206200141206a29030037030020004188046a41186a2207200141186a29030037030020004188046a41106a220f200141106a29030037030020004188046a41086a2210200141086a29030037030020004198026a41086a220d200141cc006a28020036020020002001290300370388042000200141c4006a29020037039802200141d0006a2102200141c0006a2802002201450d02200041b8036a41386a22122003290300370300200041b8036a41306a22032004290300370300200041b8036a41286a22042005290300370300200041b8036a41206a22052006290300370300200041b8036a41186a22062007290300370300200041b8036a41106a221b200f290300370300200041b8036a41086a221c201029030037030020004198036a41086a221d200d28020036020020002000290388043703b803200020002903980237039803200041c8016a41386a2012290300370300200041c8016a41306a2003290300370300200041c8016a41286a2004290300370300200041c8016a41206a2005290300370300200041c8016a41186a2006290300370300200041c8016a41106a201b290300370300200041c8016a41086a201c290300370300200020002903b8033703c80120002001360288022019200029039803370200201941086a201d280200360200410410322201450d082000420437028c04200020013602880420004188046a41004104102f200028028804220320002802900422016a2009360000201841002900cdd540370000201841086a41002900d5d5403700002000200141046a360290042000200041c8016a3602a404200041e8026a20004188046a10bf060240200028028c04450d002003102c0b20004188046a200041e8026a10a202200028028804220320002802900410ce0221010240200028028c04450d002003102c0b024002400240024020010d0020004198026a200041c8016a41d00010c9081a200041e0006a20004190016a10a60220004188046a20004198026a41d00010c9081a201741086a200041e0006a41086a2802003602002017200029036037020020004198026a200041e8026a10a202200028029802220120002802a00220004188046a1092050240200028029c02450d002001102c0b024020002802cc042201450d00200141306c450d0020002802c804102c0b024020002802dc042201450d00200141ffffff3f71450d0020002802d804102c0b20004198026a41186a221b200041e8026a41186a29030037030020004198026a41106a221c200041e8026a41106a290300370300200d200041e8026a41086a290300370300200020002903e802370398024100210120002802b80121060240024020002802c00122120e020103000b4100210120122103034020012003410176220420016a22052006200541246c6a28020020094b1b2101200320046b220341014b0d000c030b0b2007201b290300370300200f201c2903003703002010200d290300370300200020002903980237038804410021030c020b200028028c022201450d02200141306c450d02200028028802102c0c020b2006200141246c6a28020021032007201b290300370300200f201c2903003703002010200d29030037030020002000290398023703880420122001200120032009496a20032009461b22034f0d00200320121044000b0240201220002802bc01470d002014201210ff0320002802b401211120002802b80121060b2006200341246c6a220141246a2001201220036b41246c10ca081a2001200936020020012000290388043702042001410c6a2010290300370200200141146a200f2903003702002001411c6a20072903003702002000201241016a3602c0012007201b290300370300200f201c2903003703002010200d2903003703002000200029039802370388040240201120002802b001470d0020152011410110d60120002802b40121110b20002802ac01221320114105746a2201200029038804370000200141186a2007290300370000200141106a200f290300370000200141086a20102903003700004101211a2000201141016a22113602b4010b20022016470d000b201621020c010b200c450d01200c41d0006c450d01200b102c0c010b024020162002460d0003402002220141d0006a21020240200141c4006a2802002203450d00200341306c450d00200141c0006a280200102c0b20162002470d000b0b0240200c450d00200c41d0006c450d00200b102c0b201a410171450d0002402011450d0020114105742105200041cc046a2101201321030340200041f8036a200310a20220004188046a20002802f803220220002802800410e80420004198026a41086a220620004188046a41086a29030037030020004198026a41106a220720004188046a41106a29030037030020004198026a41186a220f20004188046a41186a29030037030020004198026a41206a221020004188046a41206a29030037030020004198026a41286a220d20004188046a41286a29030037030020004198026a41306a221220004188046a41306a29030037030020004198026a41386a221620004188046a41386a290300370300200041e8026a41086a2218200141086a290200370300200041e8026a41106a2219200141106a290200370300200041e8026a41186a221b200141186a280200360200200020002903880437039802200020012902003703e802024020002802c8042204450d00200041c8016a41386a2016290300370300200041c8016a41306a2012290300370300200041c8016a41286a200d290300370300200041c8016a41206a2010290300370300200041c8016a41186a200f290300370300200041c8016a41106a2007290300370300200041c8016a41086a2006290300370300200041e0006a41086a2018290300370300200041e0006a41106a2019290300370300200041e0006a41186a201b28020036020020002000290398023703c801200020002903e8023703600b024020002802fc03450d002002102c0b20040d03200341206a2103200541606a22050d000b0b42002108410821070c020b200041a0016a10c006410021070c020b200041b8036a41386a2201200041c8016a41386a290300370300200041b8036a41306a2202200041c8016a41306a290300370300200041b8036a41286a2206200041c8016a41286a290300370300200041b8036a41206a2207200041c8016a41206a290300370300200041b8036a41186a220f200041c8016a41186a290300370300200041b8036a41106a2210200041c8016a41106a290300370300200041b8036a41086a220d200041c8016a41086a29030037030020004198036a41086a2212200041e0006a41086a29030037030020004198036a41106a2216200041e0006a41106a29030037030020004198036a41186a2218200041e0006a41186a280200360200200020002903c8013703b803200020002903603703980341e00010322215450d03201520002903b803370300201520043602402015200029039803370244201541386a2001290300370300201541306a2002290300370300201541286a2006290300370300201541206a2007290300370300201541186a200f290300370300201541106a2010290300370300201541086a200d290300370300201541cc006a2012290300370200201541d4006a2016290300370200201541dc006a2018280200360200200042818080801037028c032000201536028803024020054120460d00200341206a210f201320114105746a221441606a210c20004188046a41c4006a21014101210b0340200f21030340200041f8036a200310a20220004188046a20002802f803220720002802800410e80420004198026a41086a220520004188046a41086a221929030037030020004198026a41106a220220004188046a41106a221b29030037030020004198026a41186a220620004188046a41186a221c29030037030020004198026a41206a220f20004188046a41206a221d29030037030020004198026a41286a221020004188046a41286a221729030037030020004198026a41306a220d20004188046a41306a221329030037030020004198026a41386a221120004188046a41386a221a290300370300200041e8026a41086a2212200141086a290200370300200041e8026a41106a2216200141106a290200370300200041e8026a41186a2218200141186a280200360200200020002903880437039802200020012902003703e802024020002802c8042204450d00200041c8016a41386a2011290300370300200041c8016a41306a200d290300370300200041c8016a41286a2010290300370300200041c8016a41206a200f290300370300200041c8016a41186a2006290300370300200041c8016a41106a2002290300370300200041c8016a41086a2005290300370300200041e0006a41086a2012290300370300200041e0006a41106a2016290300370300200041e0006a41186a201828020036020020002000290398023703c801200020002903e8023703600b024020002802fc03450d002007102c0b024020040d002014200341206a2203470d010c030b0b200041b8036a41386a2207200041c8016a41386a290300370300200041b8036a41306a220f200041c8016a41306a290300370300200041b8036a41286a2210200041c8016a41286a290300370300200041b8036a41206a220d200041c8016a41206a290300370300200041b8036a41186a2211200041c8016a41186a290300370300200041b8036a41106a2212200041c8016a41106a290300370300200041b8036a41086a2216200041c8016a41086a29030037030020004198036a41086a2218200041e0006a41086a29030037030020004198036a41106a221e200041e0006a41106a29030037030020004198036a41186a221f200041e0006a41186a280200360200200020002903c8013703b803200020002903603703980320192016290300370300201b2012290300370300201c2011290300370300201d200d290300370300201720102903003703002013200f290300370300201a2007290300370300200020002903b80337038804200520182903003703002002201e2903003703002006201f2802003602002000200029039803370398020240200b200028028c03470d0020004188036a200b410110940220002802880321150b200341206a210f2015200b41e0006c6a2207200029038804370300200741106a201b290300370300200741086a201929030037030020132903002108201a290300210e20172903002120201d2903002121201c2903002122200741c0006a2004360200200741186a2022370300200741206a2021370300200741286a2020370300200741c4006a200029039802370200200741386a200e370300200741306a2008370300200741cc006a2005290300370200200741d4006a2002290300370200200741dc006a20062802003602002000200b41016a220b36029003200c2003470d000b0b2000280288032107200029028c0321080b20004188046a41206a200041a0016a41206a280200220336020020004188046a41186a200041a0016a41186a290300220e37030020004188046a41106a200041a0016a41106a29030037030020004188046a41086a200041a0016a41086a290300370300200020002903a00137038804200341246c41046a2201417f4c0d030240024020010d00410121040c010b200110322204450d030b200041003602682000200136026420002004360260200041e0006a2003108f0102402003450d00200ea72201200341246c6a210620002802682103034020012802002104200041e0006a20034104102f2000280260200028026822036a20043600002000200341046a2205360268412010322203450d042000422037029c02200020033602980220004198026a41004120102f200028029802220420002802a00222026a2203200141046a290000370000200341086a2001410c6a290000370000200341106a200141146a290000370000200341186a2001411c6a2900003700002000200241206a22033602a002200041e0006a20052003102f2000280260200028026822056a2004200310c9081a2000200520036a22033602680240200028029c02450d002004102c0b200141246a22012006470d000b0b200041c8016a41eddcc700410810c50120004198026a41d4d0c000411210c501200041b8036a41cdd5c00010a10220002802c003220141206a2203417f4c0d030240024020030d00410121040c010b200310322204450d030b200041003602f002200020033602ec02200020043602e802200041e8026a4100411010c80120002802e80220002802f00222036a220420002900c801370000200441086a200041c8016a41086a2900003700002000200341106a22033602f002200041e8026a2003411010c80120002802e80220002802f00222036a2204200029009802370000200441086a20004198026a41086a2900003700002000200341106a22043602f00220002802b8032103200041e8026a2004200110c80120002802e802220420002802f00222056a2003200110c9081a2000200520016a22013602f002024020002802bc03450d002003102c0b20042001200041e0006a108a03024020002802ec02450d002004102c0b02402000280264450d002000280260102c0b20004198026a41cdd5c00020004188046a10a002200028029802220120002802a00220004194046a108d050240200028029c02450d002001102c0b20004188046a10c0060b024020002802940141ffffff3f71450d00200028029001102c0b024020070d00200028025021050240200041d8006a2802002201450d00200141d0006c2103200541c0006a210103400240200141046a2802002204450d00200441306c450d002001280200102c0b200141d0006a2101200341b07f6a22030d000b0b0240200041d4006a2802002201450d00200141d0006c450d002005102c0b4184bec800ad4280808080c00184100041f5bdc800ad4280808080f0018410000c010b410021040240200a410a6e417f732008422088a722056a220320054b0d00200a4101200a41014b1b2201418094ebdc036e2001418094ebdc03704100476a22044101200441014b1b220420014b0d042001200341036c220320012003491b20046ead428094ebdc037e200120046ead8042ffffffff0f834280bbb0217e428094ebdc0380a721040b200041003602d001200042043703c801200041c8016a4100200510950220002802d00121020240024020050d0020002802c80121060c010b20002802c801220620024102746a210120052103034020012004360200200141046a21012003417f6a22030d000b200220056a21020b200020023602d0012007200520062002200910a3022101410410322203450d012000420437029c02200020033602980220004198026a41004104102f20002802980220002802a00222036a200936000020004198026a41146a41002900d5d5403702002000200341046a3602a002200041002900cdd5403702a40220004194046a20002903a00237020020004188046a41146a200041a8026a290300370200200041a4046a200041b0026a280200360200200041a8046a20013a00002000410436028804200020002903980237028c0420004188046a10c802024020002802cc0141ffffffff0371450d002006102c0b02402005450d00200541e0006c2103200741d4006a210103400240200141706a2802002204450d00200441306c450d002001416c6a280200102c0b0240200128020041ffffff3f71450d002001417c6a280200102c0b200141e0006a2101200341a07f6a22030d000b0b02402008a72201450d00200141e0006c450d002007102c0b200028025021050240200041d8006a2802002201450d00200141d0006c2103200541c0006a210103400240200141046a2802002204450d00200441306c450d002001280200102c0b200141d0006a2101200341b07f6a22030d000b0b200041d4006a2802002201450d00200141d0006c450d002005102c0b0240200028022c41ffffff3f71450d002000280228102c0b200041a0066a24000f0b1039000b103b000b41f0bcc300411941f8acc800103c000bd90103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42d0007e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341d0006c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141d0006e3602000b0f0b2005450d001039000b103b000b18002001ad4220862000ad842003ad4220862002ad8410040bcc1202067f017e230041f0056b2202240041002103200241003a00a8052001280204417f6a2104024002400240024002400240024002400240024002400240024003402004417f460d0120024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0120024188036a41086a20032903002208370300200241c8016a41186a2007290300370300200241c8016a41106a2006290300370300200241c8016a41086a2008370300200220022903b005220837038803200220083703c80141002103200241003a00a80503402004417f460d0320024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0320024188036a41086a20032903002208370300200241e8016a41186a2007290300370300200241e8016a41106a2006290300370300200241e8016a41086a2008370300200220022903b005220837038803200220083703e80141002103200241003a00a80503402004417f460d0520024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0520024188036a41086a2003290300220837030020024188026a41186a200729030037030020024188026a41106a200629030037030020024188026a41086a2008370300200220022903b005220837038803200220083703880241002103200241003a00a80503402004417f460d0720024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0720024188036a41086a20032903002208370300200241a8026a41186a2007290300370300200241a8026a41106a2006290300370300200241a8026a41086a2008370300200220022903b005220837038803200220083703a80241002103200241003a00a80503402004417f460d0920024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220320024188056a41086a290300370300200241b0056a41106a220620024188056a41106a290300370300200241b0056a41186a220720024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0920024188036a41086a20032903002208370300200241c8026a41186a2007290300370300200241c8026a41106a2006290300370300200241c8026a41086a2008370300200220022903b005220837038803200220083703c80241002103200241003a00a80503402004417f460d0b20024188056a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8052004417f6a21042005210320054120470d000b200241b0056a41086a220420024188056a41086a290300370300200241b0056a41106a220120024188056a41106a290300370300200241b0056a41186a220320024188056a41186a29030037030020022002290388053703b005200541ff0171411f4d0d0b20024188036a41086a20042903002208370300200241e8026a41186a22042003290300370300200241e8026a41106a22032001290300370300200241e8026a41086a22012008370300200220022903b005220837038803200220083703e802200241086a41186a200241c8016a41186a290300370300200241086a41106a200241c8016a41106a290300370300200241086a41086a200241c8016a41086a290300370300200220022903c801370308200241c0006a200241e8016a41186a290300370300200241386a200241e8016a41106a290300370300200241306a200241e8016a41086a290300370300200220022903e801370328200241e0006a20024188026a41186a290300370300200241d8006a20024188026a41106a290300370300200241d0006a20024188026a41086a290300370300200220022903880237034820024180016a200241a8026a41186a290300370300200241f8006a200241a8026a41106a290300370300200241f0006a200241a8026a41086a290300370300200220022903a802370368200241a0016a200241c8026a41186a29030037030020024198016a200241c8026a41106a29030037030020024190016a200241c8026a41086a290300370300200220022903c80237038801200241c0016a2004290300370300200241b8016a2003290300370300200241b0016a2001290300370300200220022903e8023703a801200041016a200241086a41c00110c9081a200041003a00000c0c0b200341ff0171450d00200241003a00a8050b200041013a00000c0a0b200341ff0171450d00200241003a00a8050b200041013a00000c080b200341ff0171450d00200241003a00a8050b200041013a00000c060b200341ff0171450d00200241003a00a8050b200041013a00000c040b200341ff0171450d00200241003a00a8050b200041013a00000c020b200341ff0171450d00200241003a00a8050b200041013a00000b200241f0056a24000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42e0017e2204422088a722020d022004a722014100480d022002452105024002400240024002402000280200410020031b22020d002001450d010c030b200341e0016c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141e0016e3602000b0f0b2005450d001039000b103b000b8d0401087f230041e0006b220224002002412036020c20022001360208200241106a2001412010b30102400240024002400240200228021022010d00200041003602000c010b200228021421032002200241186a280200360224200220013602202002200241206a108702024002400240024020022802000d0020022802242204200228020422054102742206490d002006417f4c0d050240024020060d00410121070c010b200610372207450d07200228022421040b024020042006490d0020072002280220200610c9082108200228022422042006490d082002200420066b3602242002200228022020066a3602204100210441042109024020060d00410021060c040b20084103710d00200541ffffffff037122070d022008102c410021060c030b2007102c0b20024100360230200242013703282002410f36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235023042208620023502288410000240200228022c450d002002280228102c0b200041003602000c020b200541ffffffff0371210620082109200721040b2000200436020420002009360200200041086a20063602000b2003450d002001102c0b200241e0006a24000f0b103b000b1039000b200620044194afc0001058000be21b030a7f027e137f230041b0096b22022400200241106a108f07200241e0006a41186a22034200370300200241e0006a41106a22044200370300200241e0006a41086a2205420037030020024200370360200241f8056a41a789c5004101109a012003200241f8056a41186a22062900003703002004200241f8056a41106a22072900003703002005200241f8056a41086a2208290000370300200220022900f805370360200241f8056a41a789c5004101109a01200241d0076a41186a22092006290000370300200241d0076a41106a220a2007290000370300200241d0076a41086a220b2008290000370300200220022900f8053703d0070240024002400240412010322203450d002008200b2903003703002007200a29030037030020062009290300370300410041003502ccd248200241b8046aad7c42adfed5e4d485fda8d8007e422189220c3e02ccd24820024180016a41246a4200370200200241ac016a4200370200200220022903d0073703f805200241043602a00120024180016a41c0006a41a889c50036020020024180016a41386a4108360200200241b4016a20033602002002200241e0006a3602c4012002200241106a3602bc01200241013a00c801200241e1016a2006290300370000200241d9016a2007290300370000200241d1016a2008290300370000200241c9016a20022903f805370000200241eb016a200241ba046a2d00003a0000200241e9016a20022f00b8043b000020024180016a41186a420037030020024194016a41c08ec100360200200241003602ec0120024100360290012002200c41ccd2c800ad220d7c370388012002200c200d85220c200d42188985200c42108685200c4225897c370380012001280200220e2001280208220f41d0006c6a2110200241f8056a41206a2111200241d0076a41246a210420024190026a41046a2105200241f8056a41046a2103200241f8056a41017221122001280204211341002114200e211503402014211620152101034002400240024020102001470d00200241f8056a41386a200241b8046a41386a290300370300200241f8056a41306a200241b8046a41306a290300370300200241f8056a41286a200241b8046a41286a290300370300200241f8056a41206a200241b8046a41206a290300370300200241f8056a41186a200241b8046a41186a290300370300200241f8056a41106a200241b8046a41106a290300370300200241f8056a41086a200241b8046a41086a290300370300200220022903b8043703f805201021010c010b200241b8046a41386a200141386a2217290300370300200241b8046a41306a200141306a2218290300370300200241b8046a41286a200141286a2219290300370300200241b8046a41206a200141206a221a290300370300200241b8046a41186a200141186a2214290300370300200241b8046a41106a200141106a2215290300370300200241b8046a41086a200141086a221b290300370300200220012903003703b804200141c0006a280200211c200141c4006a280200211d200141c8006a290200210c200241f8056a41386a221e2017290300370300200241f8056a41306a22172018290300370300200241f8056a41286a221820192903003703002011201a29030037030020062014290300370300200720152903003703002008201b290300370300200220012903003703f805201c0d01200141d0006a21010b024020102001460d0003402001220341d0006a21010240200341c4006a2802002204450d00200441306c450d00200341c0006a280200102c0b20102001470d000b0b02402013450d00201341d0006c450d00200e102c0b20024180016a109407200241f8056a200241106a41d00010c9081a200241e0066a200241f8006a290300370300200241d8066a200241f0006a290300370300200241d0066a200241e0006a41086a290300370300200220022903603703c806200041086a200241f8056a41f00010c9081a200041003602000c060b200241f8026a41386a2219201e290300370300200241f8026a41306a221a2017290300370300200241f8026a41286a22172018290300370300200241f8026a41206a22182011290300370300200241f8026a41186a22142006290300370300200241f8026a41106a22152007290300370300200241f8026a41086a221b2008290300370300200220022903f8053703f802200341386a2019290300370200200341306a201a290300370200200341286a2017290300370200200341206a2018290300370200200341186a2014290300370200200341106a2015290300370200200341086a201b290300370200200320022903f802370200200241d0076a200241f8056a41c40010c9081a20024190026a41086a200b29020037030020024190026a41106a200a29020037030020024190026a41186a200929020037030020024190026a41206a200241d0076a41206a280200360200200241f0016a41086a2217200441086a290200370300200241f0016a41106a2218200441106a290200370300200241f0016a41186a2219200441186a290200370300200220022902d00737039002200220042902003703f001200241b8026a41186a2214200541186a290000370300200241b8026a41106a2215200541106a290000370300200241b8026a41086a221b200541086a290000370300200220052900003703b802200241d8026a41186a221e2019290300370300200241d8026a41106a221f2018290300370300200241d8026a41086a22202017290300370300200220022903f0013703d80220024190096a41ffdcc700410710c501200241d0076a4190b5c300410810c501200241a0096a200241b8026a10e40220022802a809221741206a2218417f4c0d030240024020180d00410121190c010b201810322219450d030b200241003602c807200220183602c407200220193602c007200241c0076a4100411010c80120022802c00720022802c80722186a2219200229009009370000201941086a20024190096a41086a2900003700002002201841106a22183602c807200241c0076a2018411010c80120022802c00720022802c80722186a221920022900d007370000201941086a200b2900003700002002201841106a22193602c80720022802a0092118200241c0076a2019201710c80120022802c007221920022802c807221a6a2018201710c9081a2002201a20176a22173602c807024020022802a409450d002018102c0b200241f8056a2019201710e50220022d00f8052118200241d0076a201241c00110c9081a41002117024020184101470d00200241b8046a200241d0076a41c00110c9081a410121170b024020022802c407450d002019102c0b02402017450d00200241f8026a200241b8046a41c00110c9081a20062014290300370300200720152903003703002008201b290300370300201120022903d802370300201141086a2020290300370300201141106a201f290300370300201141186a201e290300370300200220022903b8023703f8052002200c3703c0062002201d3602bc062002201c3602b806200141d0006a2115201641016a211441682118024002400340200241086a200241f8026a20184187d7c0006a280000221910a902200228020c221c41046a2217417f4c0d072002280208211a0240024020170d004101211d0c010b20171032221d450d070b200241003602c004200220173602bc042002201d3602b804200241b8046a41004104102f20022802b80420022802c00422176a20193600002002201741046a3602c004201a201c200241b8046a10ca0420022802c004211d20022802b80421172002201636029009200241d0076a20024180016a2017201d20024190096a4104109a03024020022802bc04450d002017102c0b20022802d407211720022802d0074101460d0102402017450d0020022802d807450d002017102c0b201841046a22180d000b2002201636029009200241003602c004200242013703b804200241b8046a41004120102f20022802b80420022802c00422186a221720022903f805370000201741086a2008290300370000201741106a2007290300370000201741186a20062903003700002002201841206a3602c0042011200241b8046a10f803200241d0076a20024180016a20024190096a410420022802b804221720022802c004109a03024020022802bc04450d002017102c0b20022802d407211720022802d0074101460d0102402017450d0020022802d807450d002017102c0b20022802bc062201450d04200141306c450d0420022802b806102c0c040b02400240024020172d00000e0402020002010b201741086a280200450d01201741046a280200102c0c010b201741286a280200450d00201741246a280200102c0b2017102c200041086a411a36020020004184edc400360204200041013602000c060b02400240024020172d00000e0402020002010b201741086a280200450d01201741046a280200102c0c010b201741286a280200450d00201741246a280200102c0b2017102c200041086a411a36020020004184edc400360204200041013602000c050b0240201d450d00201d41306c450d00201c102c0b200141d0006a2101201641016a21160c000b0b0b1039000b103b000b201041b07f6a2103024020022802bc062204450d00200441306c450d0020022802b806102c0b024020032001460d00200f41d0006c200e6a41b07f6a21040340024020014194016a2802002203450d00200341306c450d0020014190016a280200102c0b2004200141d0006a2201470d000b0b02402013450d00201341d0006c450d00200e102c0b20024180016a109407200241106a10dd040b200241b0096a24000be20902087f047e230041b0016b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602000c010b200341186a280200210220032802142104200341003a0060024002402002450d00200320012d00003a0040200341013a0060024020024101460d00200320012d00013a0041200341023a006020024102460d00200320012d00023a0042200341033a006020024103460d00200320012d00033a0043200341043a006020024104460d00200320012d00043a0044200341053a006020024105460d00200320012d00053a0045200341063a006020024106460d00200320012d00063a0046200341073a006020024107460d00200320012d00073a0047200341083a006020024108460d00200320012d00083a0048200341093a006020024109460d00200320012d00093a00492003410a3a00602002410a460d00200320012d000a3a004a2003410b3a00602002410b460d00200320012d000b3a004b2003410c3a00602002410c460d00200320012d000c3a004c2003410d3a00602002410d460d00200320012d000d3a004d2003410e3a00602002410e460d00200320012d000e3a004e2003410f3a00602002410f460d00200320012d000f3a004f200341103a006020024110460d00200320012d00103a0050200341113a006020024111460d00200320012d00113a0051200341123a006020024112460d00200320012d00123a0052200341133a006020024113460d00200320012d00133a0053200341143a006020024114460d00200320012d00143a0054200341153a006020024115460d00200320012d00153a0055200341163a006020024116460d00200320012d00163a0056200341173a006020024117460d00200320012d00173a0057200341183a006020024118460d00200320012d00183a0058200341193a006020024119460d00200320012d00193a00592003411a3a00602002411a460d00200320012d001a3a005a2003411b3a00602002411b460d00200320012d001b3a005b2003411c3a00602002411c460d00200320012d001c3a005c2003411d3a00602002411d460d00200320012d001d3a005d2003411e3a00602002411e460d00200320012d001e3a005e2003411f3a00602002411f460d00200341206a41106a2205200341c0006a41106a2206290300370300200341206a41086a2207200341c0006a41086a2208290300370300200320012d001f3a005f200341206a41186a2209200341c0006a41186a220a290300370300200341203a006020032003290340220b3703682003200b3703202002417c714120460d0120082007290300220b37030020062005290300220c370300200a2009290300220d37030020032003290320220e370340200128002021022000411c6a200d370200200041146a200c3702002000410c6a200b3702002000200e370204200041246a2002360200410121020c020b200341003a00600b4100210220034100360270200342013703682003410f3602242003200341086a3602202003200341e8006a3602ac01200341d4006a410136020020034201370244200341b4bcc3003602402003200341206a360250200341ac016a41dcb7c000200341c0006a103e1a20033502704220862003350268841000200328026c450d002003280268102c0b200020023602002004450d002001102c0b200341b0016a24000b960201067f024020002802102201450d00200041146a280200220241046a2103200120026a41016a21042002280200417f73418081828478712101024003400240024020010d000340200320044f0d04200241c07e6a210220032802002101200341046a220521032001418081828478712201418081828478460d000b2001418081828478732201417f6a2001712106200521030c010b2002450d022001417f6a20017121060b2001682105200621012002410020054103766b41306c6a220541746a280200450d00200541706a280200102c200621010c000b0b200041146a280200200028021041016aad42307ea76b102c0b0240200041246a2802002203450d0020002802202202450d002003450d002002102c0b0be6840105087f017e087f027e057f23004190036b2205240002400240410810322206450d0020062001200241e0016c6a220736020420062001360200410810322208450d0020082003200441e0016c6a2209360204200820033602000240024002402000450d00200541d8016a210a0c010b200541d8016a41186a220b4200370300200541d8016a41106a22044200370300200541d8016a41086a22024200370300200542003703d801200541e8026a41b4f0c500410f10c5012002200541e8026a41086a220c290000370300200520052900e8023703d801200541e8026a418884c600410710c501200b200c290000370300200420052900e802370300200541d8016a210a200541d8016a412010ce020d00200b42003703002004420037030020024200370300200542003703d801200541e8026a41b4f0c500410f10c5012002200c290000370300200520052900e8023703d801200541e8026a41c884c600410c10c501200441086a200c290000370000200420052900e802370000200541d8006a200541d8016a10cf022005290360210d2005280258210420054188026a41186a2202420037030020054188026a41106a220c420037030020054188026a41086a220b4200370300200542003703880220054188016a41ffdcc700410710c501200b20054188016a41086a290000370300200520052900880137038802200541a8026a41b8b3c300410c10c5012002200541a8026a41086a290300370300200c20052903a802370300200541d0006a20054188026a412010c601200528025421022005280250210c200541d8016a200d420020041b10d90720052802e001210b20052802d8012104200520024100200c1b3602e8022004200b200541e8026a410410a702024020052802dc01450d002004102c0b2008102c2006102c0c010b200541e8026a200610da070240024020052802e802450d00200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200541d8016a41186a200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a28020036020020054188026a41086a200541e4016a29020037030020054188026a41106a200541ec016a29020037030020054188026a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc0137038802200541d8016a200610db07417f20052802d801220441016a220220022004491bad42287e220d422088a70d04200da72204417f4c0d0420041032220e450d03200e200529038802370300200e4201370320200e41186a20054188026a41186a220f290300370300200e41106a20054188026a41106a2210290300370300200e41086a20054188026a41086a22112903003703004101210c200541013602c0012005200e3602b8012005200441286e22043602bc01200541e8026a200610da07024020052802e802450d00200541d8016a4104722102412821124101210c0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a220b200541e8026a41186a290300370300200541d8016a41106a2213200541e8026a41106a290300370300200541d8016a41086a2214200541e8026a41086a290300370300200520052903e8023703d8012011200241086a2902003703002010200241106a290200370300200f200241186a2902003703002005200229020037038802200b200f290300370300201320102903003703002014201129030037030020052005290388023703d8010240200c2004470d00200541e8026a200610db07200541b8016a2004417f20052802e802220e41016a22152015200e491b10f20420052802b801210e0b200e20126a220420052903d8013703002014290300210d20132903002116200b2903002117200441206a4201370300200441186a2017370300200441106a2016370300200441086a200d3703002005200c41016a220b3602c001200541e8026a200610da07024020052802e802450d00201241286a211220052802bc012104200b210c0c010b0b200c41016a210c20052802bc01210420052802b801210e0b2006102c0c010b2006102c4108210e4100210c410021040b200541f0016a220b4200370300200541e8016a22024200370300200541d8016a41086a4200370300200542003703d801200541e8026a41b4f0c500410f10c501200a41086a200541e8026a41086a2213290000370000200a20052900e802370000200541e8026a418884c600410710c501200b2013290000370300200220052900e802370300200541e8026a200a412010a0040240024020052802e8024101460d002005200c3602e001200520043602dc012005200e3602d80120054188026a200541d8016a41004100200510dc070c010b200a412010b40120052902ec02210d2005200c3602e001200520043602dc012005200e3602d80120054188026a200541d8016a200da74101200d422088a710dc070b20052d008802210c200541d8016a41186a220b4200370300200541d8016a41106a22134200370300200541d8016a41086a22144200370300200542003703d801200541e8026a41b4f0c500410f10c501200a41086a2212200541e8026a41086a2204290000370000200a20052900e802370000200541e8026a41c884c600410c10c501200241086a22062004290000370000200220052900e802370000200541c0006a200a10cf022005290348420020052802401b210d0240200c4104470d00200b42003703002013420037030020144200370300200542003703d801200541e8026a41b4f0c500410f10c50120122004290000370000200a20052900e802370000200541e8026a41c884c600410c10c50120062004290000370000200220052900e8023700002005200d42017c220d3703e802200a4120200541e8026a410810a7020b20054188026a41186a2204420037030020054188026a41106a2202420037030020054188026a41086a220c4200370300200542003703880220054188016a41ffdcc700410710c501200c20054188016a41086a290000370300200520052900880137038802200541a8026a41b8b3c300410c10c5012004200541a8026a41086a290300370300200220052903a802370300200541386a20054188026a412010c601200528023c21022005280238210c200541d8016a200d10d90720052802e001210b20052802d8012104200520024100200c1b3602e8022004200b200541e8026a410410a702024020052802dc01450d002004102c0b2008102c0b410810322215450d002015200736020420152001360200410810322208450d002008200936020420082003360200200541e8026a201510dd070240024020052802e802450d00200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200541d8016a41186a200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a28020036020020054188026a41086a200541e4016a29020037030020054188026a41106a200541ec016a29020037030020054188026a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc0137038802200541d8016a201510db07417f20052802d801220441016a220220022004491bad42287e220d422088a70d03200da72204417f4c0d03200410322210450d02201020052903880237030020104201370320201041186a20054188026a41186a2206290300370300201041106a20054188026a41106a2211290300370300201041086a20054188026a41086a220e29030037030041012118200541013602c001200520103602b8012005200441286e220f3602bc01200541e8026a201510dd07024020052802e802450d00200541d8016a4104722102412821124101210c0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a220b200541e8026a41186a290300370300200541d8016a41106a2213200541e8026a41106a290300370300200541d8016a41086a2214200541e8026a41086a290300370300200520052903e8023703d801200e200241086a2902003703002011200241106a2902003703002006200241186a2902003703002005200229020037038802200b2006290300370300201320112903003703002014200e29030037030020052005290388023703d8010240200c200f470d00200541e8026a201510db07200541b8016a200f417f20052802e802220441016a221020102004491b10f20420052802b80121100b201020126a220420052903d8013703002014290300210d20132903002116200b2903002117200441206a4201370300200441186a2017370300200441106a2016370300200441086a200d3703002005200c41016a22043602c001200541e8026a201510dd07024020052802e802450d00201241286a211220052802bc01210f2004210c0c010b0b200c41016a211820052802bc01210f20052802b80121100b2015102c0c010b2015102c4100210f41082110410021180b200541e8026a200810dd070240024020052802e802450d00200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200541d8016a41186a200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a28020036020020054188026a41086a200541e4016a29020037030020054188026a41106a200541ec016a29020037030020054188026a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc0137038802200541d8016a200810db07417f20052802d801220441016a220220022004491bad42287e220d422088a70d03200da72204417f4c0d0320041032220a450d02200a200529038802370300200a4201370320200a41186a20054188026a41186a2211290300370300200a41106a20054188026a41106a220e290300370300200a41086a20054188026a41086a221529030037030041012119200541013602c0012005200a3602b8012005200441286e22063602bc01200541e8026a200810dd07024020052802e802450d00200541d8016a4104722102412821124101210c0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a220b200541e8026a41186a290300370300200541d8016a41106a2213200541e8026a41106a290300370300200541d8016a41086a2214200541e8026a41086a290300370300200520052903e8023703d8012015200241086a290200370300200e200241106a2902003703002011200241186a2902003703002005200229020037038802200b20112903003703002013200e2903003703002014201529030037030020052005290388023703d8010240200c2006470d00200541e8026a200810db07200541b8016a2006417f20052802e802220441016a220a200a2004491b10f20420052802b801210a0b200a20126a220420052903d8013703002014290300210d20132903002116200b2903002117200441206a4201370300200441186a2017370300200441106a2016370300200441086a200d3703002005200c41016a22043602c001200541e8026a200810dd07024020052802e802450d00201241286a211220052802bc0121062004210c0c010b0b200c41016a211920052802bc01210620052802b801210a0b2008102c0c010b2008102c410021064108210a410021190b200541a0026a220c420037030020054198026a2211420037030020054188026a41086a220442003703002005420037038802200541a8026a41c7dcc700410410c5012004200541a8026a41086a2202290000370300200520052900a80237038802200541a8026a41ccd5c500410a10c501200c2002290000370300201120052900a802370300200541286a20054188026a10cf02024002400240024002402005290330420020052802281b220d42017c2216200d540d00200c420037030020114200370300200442003703002005420037038802200541a8026a41c7dcc700410410c50120042002290000370300200520052900a80237038802200541a8026a41ccd5c500410a10c501201141086a220b2002290000370000201120052900a802370000200520163703d80120054188026a4120200541d8016a410810a702200c420037030020114200370300200442003703002005420037038802200541a8026a41c7dcc700410410c50120042002290000370300200520052900a80237038802200541a8026a41f0d5c500410b10c501200b2002290000370000201120052900a802370000201841286c4104722204417f4c0d06200410322202450d05200541003602e001200520043602dc01200520023602d801200541d8016a2018108f010240024020180d0020052802d801210c20052802e00121020c010b2010201841286c6a210b20052802e0012102201021040340200541d8016a20024120102f20052802d80120052802e001220c6a22022004290000370000200241086a200441086a290000370000200241106a200441106a290000370000200241186a200441186a2900003700002005200c41206a22023602e001200441206a290300210d200541d8016a20024108102f20052802d801220c20052802e00122026a200d3700002005200241086a22023602e001200b200441286a2204470d000b0b20054188026a4120200c200210a702024020052802dc01450d00200c102c0b0240200f450d002010450d00200f41286c450d002010102c0b201642017c220d2016540d01200541e8006a41186a22044200370300200541e8006a41106a22084200370300200541e8006a41086a2202420037030020054200370368200541a8026a41c7dcc700410410c5012002200541a8026a41086a220c290000370300200520052900a802370368200541a8026a41c8d8c500410e10c5012004200c290000370300200820052900a802370300200541d8016a200541e8006a10860520052d00d801210420054188026a41186a2202200541f1016a29000037030020054188026a41106a220c200541e9016a29000037030020054188026a41086a220b200541e1016a290000370300200520052900d901370388020240024020044101460d0020054198016a41186a420037030020054198016a41106a420037030020054198016a41086a420037030020054200370398010c010b20054198016a41186a200229030037030020054198016a41106a200c29030037030020054198016a41086a200b2903003703002005200529038802370398010b200541e8006a41186a220c4200370300200541e8006a41106a220b4200370300200541e8006a41086a2204420037030020054200370368200541a8026a41c7dcc700410410c5012004200541a8026a41086a2202290000370300200520052900a802370368200541a8026a41f0d8c500410c10c501200841086a22132002290000370000200820052900a802370000200541206a200541e8006a412010c6012005280224211420052802202112200c4200370300200b42003703002004420037030020054200370368200541a8026a41c7dcc700410410c50120042002290000370300200520052900a802370368200541a8026a41f0d8c500410c10c50120132002290000370000200820052900a802370000200541003602d801200541e8006a4120200541d8016a410410a702200541d8016a41186a20054198016a41186a290300370300200541d8016a41106a20054198016a41106a290300370300200541d8016a41086a20054198016a41086a29030037030020052005290398013703d801417f2014410020121b221041016a220420042010491b410d744128722204417f4c0d06200410322202450d05200541003602c002200520043602bc02200520023602b802200541b8026a4100412010c80120052802b80220052802c00222026a220420052903d801370000200441086a200541d8016a41086a290300370000200441106a200541d8016a41106a290300370000200441186a200541d8016a41186a2903003700002005200241206a22043602c002200541b8026a2004410810c80120052802b802221520052802c00222046a200d3700002005200441086a220e3602c002200541e4026a41046a2112200541c8026a41086a210f4100210241002104034020102002201020024b1b211402400240034002402004450d00200b2013470d02200c450d00200c41ffffff3f71450d002004102c0b20142002460d0220054188016a41c7dcc700410410c501200541a8026a41d4d9c500411110c501200520023602e402200541c8026a200541e4026a410410c701200520123602742005200f36026c2005200541e4026a3602702005200541c8026a360268200541d8026a200541e8006a107e20052802e002220441206a220c417f4c0d0a02400240200c0d004101210b0c010b200c1032220b450d0a0b200541003602d0022005200c3602cc022005200b3602c802200541c8026a4100411010c80120052802c80220052802d002220c6a220b200529008801370000200b41086a20054188016a41086a2900003700002005200c41106a220c3602d002200541c8026a200c411010c80120052802c80220052802d002220c6a220b20052903a802370000200b41086a200541a8026a41086a2903003700002005200c41106a220c3602d00220052802d802210b200541c8026a200c200410c80120052802c802220c20052802d00222136a200b200410c9081a2005201320046a22133602d002024020052802dc02450d00200b102c0b200541e8006a200c201310810502400240200528026822040d004200210d410121040c010b200c201310b401200529026c210d0b024020052802cc02450d00200c102c0b200241016a21022004200d422088a74105746a2113200da7210c2004210b0c000b0b20054188026a41186a200b41186a221429000037030020054188026a41106a200b41106a221529000037030020054188026a41086a200b41086a22182900003703002005200b290000370388022018290000210d20152900002116200b2900002117200541b8016a41186a22152014290000370300200541b8016a41106a22142016370300200541b8016a41086a2218200d370300200520173703b801200541e8006a41186a221a2015290300370300200541e8006a41106a221b2014290300370300200541e8006a41086a221c2018290300370300200520052903b801370368200541b8026a200e412010c80120052802b802221520052802c002220e6a22142005290368370000201441086a201c290300370000201441106a201b290300370000201441186a201a2903003700002005200e41206a220e3602c002200b41206a210b0c010b0b200541e8026a2015200e109a01024020052802bc02450d002015102c0b200541e8006a41186a4200370300200541e8006a41106a4200370300200541e8006a41086a2204420037030020054200370368200541a8026a41c7dcc700410410c5012004200541a8026a41086a2202290000370300200520052900a802370368200541a8026a41c8d8c500410e10c501200841086a2002290000370000200820052900a802370000412010322204450d05200542203702dc01200520043602d801200541d8016a41004120102f20052802d801220220052802e001220c6a220420052900e802370000200441086a200541e8026a41086a290000370000200441106a200541e8026a41106a290000370000200441186a200541e8026a41186a2900003700002005200c41206a22043602e001200541e8006a41202002200410a702024020052802dc01450d002002102c0b200541d8016a41186a220c20054198016a41186a290300370300200541d8016a41106a220b20054198016a41106a290300370300200541d8016a41086a221320054198016a41086a29030037030020052005290398013703d80120054188026a41186a420037030020054188026a41106a420037030020054188026a41086a220442003703002005420037038802200541a8026a41c7dcc700410410c5012004200541a8026a41086a2202290000370300200520052900a80237038802200541a8026a418cd7c500410a10c501201141086a2002290000370000201120052900a802370000412010322204450d05200542203702ec02200520043602e802200541e8026a41004120102f20052802e802220220052802f00222146a220420052903d801370000200441086a2013290300370000200441106a200b290300370000200441186a200c2903003700002005201441206a22043602f00220054188026a41202002200410a702024020052802ec02450d002002102c0b20054188026a41186a2202420037030020054188026a41106a220c420037030020054188026a41086a220442003703002005420037038802200541a8026a41c7dcc700410410c5012004200541a8026a41086a220b290000370300200520052900a80237038802200541a8026a41c8d8c500410e10c501201141086a200b290000370000201120052900a802370000200541d8016a20054188026a10860520052d00d801210b2002200541f1016a290000370300200c200541e9016a2900003703002004200541e1016a290000370300200520052900d9013703880202400240200b4101460d00200541b8016a41186a4200370300200541b8016a41106a4200370300200541b8016a41086a4200370300200542003703b8010c010b200541b8016a41186a2002290300370300200541b8016a41106a200c290300370300200541b8016a41086a200429030037030020052005290388023703b8010b200541d8016a410c6a2019360200200541d8016a41086a2006360200200541d8016a41106a20052903b801370300200541d8016a41186a200541b8016a41086a290300370300200541d8016a41206a200541b8016a41106a290300370300200541d8016a41286a200541b8016a41186a2903003703002005200a3602dc01200541003602d801200541e8026a200541d8016a102e20054193026a200541e8026a41086a280200360000200520052903e80237008b02200541e8026a410c6a2005418f026a290000370000200541c28289aa043600e902200541023a00e80220052005290088023700ed02200541e8026a109a0602402006450d00200641286c450d00200a102c0b20054188026a41186a420037030020054188026a41106a420037030020054188026a41086a220442003703002005420037038802200541a8026a41c7dcc700410410c5012004200541a8026a41086a2202290000370300200520052900a80237038802200541a8026a418cd8c500410f10c501201141086a2002290000370000201120052900a802370000200541203602ac02200520054188026a3602a802200541e8006a20054188026a412010b30102400240200528026822020d00410321040c010b200528026c210c0240024002400240200541f0006a2802002204450d0020022d00004101470d002004417f6a4108490d00200441776a4108490d0020044111460d00200229000121162002290009210d41002104024020022d00110e03030200010b410221040c020b200541003602f002200542013703e8022005410f36028c012005200541a8026a360288012005200541e8026a3602c802200541ec016a4101360200200542013702dc01200541b4bcc3003602d801200520054188016a3602e801200541c8026a41dcb7c000200541d8016a103e1a20053502f00242208620053502e802841000024020052802ec02450d0020052802e802102c0b410321040c020b410121040b200520052800d8013602d8022005200541db016a2800003600db020b0240200c450d002002102c0b024020044103470d00410321040c010b20054188026a412010b4010b2005200d3703b002200520163703a802200520052802d8023602d801200520052800db023600db01024020044103460d00200541e8006a41086a200541a8026a41086a290300220d370300200520052903a8022216370368200520052802d80136028801200520052800db0136008b01200541e8016a200d370300200541d8016a41086a2016370300200541f0016a20043a0000200541f4016a200528008b0136000020052005280288013600f101200541023602d801200541e8026a200541d8016a102e2005418b026a220441086a200541e8026a41086a280200360000200420052903e802370000200541f4026a2005418f026a290000370000200541c28289aa043600e902200541023a00e80220052005290088023700ed02200541e8026a109a060b410810322214450d052014200736020420142001360200410810322211450d052011200936020420112003360200200541e8006a41186a4200370300200541e8006a41106a4200370300200541e8006a41086a220442003703002005420037036820054188016a41c1dcc700410610c501200420054188016a41086a2900003703002005200529008801370368200541a8026a4196a4c600410610c501200841086a200541a8026a41086a2204290300370000200820052903a802370000200541186a200541e8006a412010c6012005280218210b200528021c2113200541d8016a41186a22024200370300200541d8016a41106a220a4200370300200541d8016a41086a220c4200370300200542003703d801200541a8026a418dddc700410810c501200c2004290000370300200520052900a8023703d801200541a8026a4199eec300410e10c50120022004290000370300200a20052900a8023703002005201341ac026a41ac02200b1b3602e802200541d8016a4120200541e8026a410410a702200541e8026a201410de070240024020052802e802450d00200a200541e8026a41106a290300370300200c200541e8026a41086a2903003703002002200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a280200360200200541b8016a41086a200541e4016a290200370300200541b8016a41106a200541ec016a290200370300200541b8016a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc013703b801200541d8016a201410db07417f20052802d801220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d08200410322210450d07201020052903b801370000201041186a200541b8016a41186a290300370000201041106a200541b8016a41106a290300370000201041086a200541b8016a41086a2903003700004101210c200541013602a001200520103602980120052004410576221336029c01200541e8026a201410de07024020052802e802450d00200541d8016a41047221044120210b4101210c0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a200541e8026a41186a290300370300200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200520052903e8023703d80120054188026a41086a2202200441086a29000037030020054188026a41106a2212200441106a29000037030020054188026a41186a2206200441186a2900003703002005200429000037038802200541e8006a41186a220f2006290300370300200541e8006a41106a22062012290300370300200541e8006a41086a2212200229030037030020052005290388023703680240200c2013470d00200541d8016a201410db0720054198016a2013417f20052802d801220241016a221020102002491b10d60120052802980121100b2010200b6a22022005290368370000200241186a200f290300370000200241106a2006290300370000200241086a20122903003700002005200c41016a220c3602a001200541e8026a201410de07200b41206a210b200528029c01211320052802e8020d000b0b2014102c0c010b2014102c41002113410121104100210c0b200541f0016a4200370300200541e8016a4200370300200541d8016a41086a22044200370300200542003703d801200541a8026a418dddc700410810c5012004200541a8026a41086a2202290000370300200520052900a8023703d801200541a8026a41a7edc300410410c501200a41086a2002290000370000200a20052900a802370000200c4105744104722204417f4c0d06200410322202450d05200541003602f002200520043602ec02200520023602e802200541e8026a200c108f0102400240200c0d0020052802e802211420052802f00221020c010b200c410574210c20052802f0022102201021040340200541e8026a20024120102f20052802e802221420052802f002220b6a22022004290000370000200241086a200441086a290000370000200241106a200441106a290000370000200241186a200441186a2900003700002005200b41206a22023602f002200441206a2104200c41606a220c0d000b0b200541d8016a41202014200210a702024020052802ec02450d002014102c0b02402013450d002010450d00201341ffffff3f71450d002010102c0b2011102c410810322213450d052013200736020420132001360200410810322212450d052012200936020420122003360200200541e8006a41186a4200370300200541e8006a41106a4200370300200541e8006a41086a220442003703002005420037036820054188016a41ffdcc700410710c501200420054188016a41086a2900003703002005200529008801370368200541a8026a41b8b3c300410c10c501200841086a200541a8026a41086a290300370000200820052903a802370000200541106a200541e8006a412010c6012005280214211820052802102119200541e8026a201310df070240024020052802e802450d00200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200541d8016a41186a200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a280200360200200541b8016a41086a200541d8016a410c6a290200370300200541b8016a41106a200541ec016a290200370300200541b8016a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc013703b801200541d8016a201310db07417f20052802d801220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d0820041032220e450d07200e20052903b801370000200e41186a200541b8016a41186a290300370000200e41106a200541b8016a41106a290300370000200e41086a200541b8016a41086a2903003700004101210c200541013602a0012005200e3602980120052004410576221436029c01200541e8026a201310df07024020052802e802450d00200541d8016a41047221044120210b4101210c0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a200541e8026a41186a290300370300200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200520052903e8023703d80120054188026a41086a2202200441086a29000037030020054188026a41106a2206200441106a29000037030020054188026a41186a220f200441186a2900003703002005200429000037038802200541e8006a41186a2210200f290300370300200541e8006a41106a220f2006290300370300200541e8006a41086a2206200229030037030020052005290388023703680240200c2014470d00200541d8016a201310db0720054198016a2014417f20052802d801220241016a221120112002491b10d601200528029801210e0b200e200b6a22022005290368370000200241186a2010290300370000200241106a200f290300370000200241086a20062903003700002005200c41016a220c3602a001200541e8026a201310df07200b41206a210b200528029c01211420052802e8020d000b0b2013102c0c010b2013102c4101210e410021144100210c0b200541e8026a201210df070240024020052802e802450d00200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200541d8016a41186a200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a280200360200200541b8016a41086a200541e4016a290200370300200541b8016a41106a200541ec016a290200370300200541b8016a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc013703b801200541d8016a201210db07417f20052802d801220441016a220220022004491b220441ffffff3f712004470d0820044105742204417f4c0d08200410322215450d07201520052903b801370000201541186a200541b8016a41186a290300370000201541106a200541b8016a41106a290300370000201541086a200541b8016a41086a2903003700004101210b200541013602a001200520153602980120052004410576220236029c01200541e8026a201210df07024020052802e802450d00200541d8016a4104722104412021134101210b0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a200541e8026a41186a290300370300200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200520052903e8023703d80120054188026a41086a2206200441086a29000037030020054188026a41106a220f200441106a29000037030020054188026a41186a2210200441186a2900003703002005200429000037038802200541e8006a41186a22112010290300370300200541e8006a41106a2210200f290300370300200541e8006a41086a220f200629030037030020052005290388023703680240200b2002470d00200541d8016a201210db0720054198016a2002417f20052802d801220641016a221520152006491b10d60120052802980121150b201520136a22022005290368370000200241186a2011290300370000200241106a2010290300370000200241086a200f2903003700002005200b41016a220b3602a001200541e8026a201210df07201341206a2113200528029c01210220052802e8020d000b0b2012102c0c010b2012102c41002102410121154100210b0b2018410020191b211220054188026a10e007200541e8006a41186a4200370300200541f8006a4200370300200541e8006a41086a220442003703002005420037036820054188016a41c1dcc700410610c501200420054188016a41086a2900003703002005200529008801370368200541a8026a4196a4c600410610c501200841086a200541a8026a41086a290300370000200820052903a802370000200541086a200541e8006a412010c601200528020c21062005280208210f02402005280290022213200528028c02470d0020054188026a201310fe0320052802900221130b20052802880220134105746a2204201236021c200420153602102004200e3602042004200641016a4101200f1b360200200441186a200b360200200441146a20023602002004410c6a200c360200200441086a20143602002005201341016a220436029002200541e8026a41086a20043602002005200529038802220d3703e80202400240200da7220c0d00200541f0016a4200370300200541e8016a4200370300200541d8016a41086a22044200370300200542003703d801200541a8026a41f6ddc700410b10c5012004200541a8026a41086a2202290000370300200520052900a8023703d801200541a8026a41e9eec600411610c501200a41086a2002290000370000200a20052900a802370000200541d8016a412010b4010c010b200541f0016a4200370300200541d8016a41106a4200370300200541d8016a41086a22044200370300200542003703d801200541a8026a41f6ddc700410b10c5012004200541a8026a41086a2202290000370300200520052900a8023703d801200541a8026a41e9eec600411610c501200a41086a2002290000370000200a20052900a802370000200541d8016a200541e8026a108b050240200541e8026a41086a2802002204450d0020044105742102200c41106a210403400240200441786a28020041ffffff3f71450d00200441746a280200102c0b0240200441046a28020041ffffff3f71450d002004280200102c0b200441206a2104200241606a22020d000b0b20052802ec0241ffffff3f71450d00200c102c0b410810322214450d052014200736020420142001360200410810322211450d052011200936020420112003360200200541e8026a201410e10720052802e802450d02200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200541d8016a41186a200541e8026a41186a290300370300200541d8016a41206a200541e8026a41206a280200360200200541e8006a41086a200541e4016a290200370300200541e8006a41106a200541ec016a290200370300200541e8006a41186a200541f4016a290200370300200520052903e8023703d801200520052902dc01370368200541d8016a201410db07417f20052802d801220441016a220220022004491b220441ffffff3f712004470d0620044105742204417f4c0d06200410322210450d0520102005290368370000201041186a200541e8006a41186a290300370000201041106a200541e8006a41106a290300370000201041086a200541e8006a41086a2903003700004101210c200541013602a001200520103602980120052004410576221336029c01200541e8026a201410e107024020052802e802450d00200541d8016a41047221044120210b4101210c0340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a200541e8026a41186a290300370300200541d8016a41106a200541e8026a41106a290300370300200541d8016a41086a200541e8026a41086a290300370300200520052903e8023703d801200541b8016a41086a2202200441086a290000370300200541b8016a41106a2212200441106a290000370300200541b8016a41186a2206200441186a290000370300200520042900003703b80120054188026a41186a220f200629030037030020054188026a41106a2206201229030037030020054188026a41086a22122002290300370300200520052903b801370388020240200c2013470d00200541d8016a201410db0720054198016a2013417f20052802d801220241016a221020102002491b10d60120052802980121100b2010200b6a2202200529038802370000200241186a200f290300370000200241106a2006290300370000200241086a20122903003700002005200c41016a220c3602a001200541e8026a201410e107200b41206a210b200528029c01211320052802e8020d000b0b2014102c20100d03200541f0016a4200370300200541e8016a4200370300200541d8016a41086a22044200370300200542003703d80120054188016a4189bec300410f10c501200420054188016a41086a29000037030020052005290088013703d801200541a8026a41a0c0c300411410c501200a41086a200541a8026a41086a290300370000200a20052903a802370000200541d8016a412010b4010c040b418eeec50041c90041d8eec500105c000b418eeec50041c90041e8eec500105c000b2014102c410121104100210c410021130b20054180036a22044200370300200541f8026a22024200370300200541e8026a41086a220b4200370300200542003703e80220054188016a4189bec300410f10c501200b20054188016a41086a29000037030020052005290088013703e802200541a8026a41a0c0c300411410c5012004200541a8026a41086a290300370300200220052903a802370300200c4105744104722204417f4c0d02200410322202450d01200541003602e001200520043602dc01200520023602d801200541d8016a200c108f0102400240200c0d0020052802d801211420052802e00121020c010b200c410574210c20052802e0012102201021040340200541d8016a20024120102f20052802d801221420052802e001220b6a22022004290000370000200241086a200441086a290000370000200241106a200441106a290000370000200241186a200441186a2900003700002005200b41206a22023602e001200441206a2104200c41606a220c0d000b0b200541e8026a41202014200210a702024020052802dc01450d002014102c0b2013450d002010450d00201341ffffff3f71450d002010102c0b2011102c410810322206450d00200620073602042006200136020041081032220f450d00200f2009360204200f20033602000240024002402000450d00200541003602e002200541003602d802200541e8026a200610e207024020052802e802450d00200541d8016a41047221040340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a2202200541e8026a41186a290300370300200541d8016a41106a220c200541e8026a41106a290300370300200541d8016a41086a220b200541e8026a41086a290300370300200520052903e8023703d80120054188026a41086a2213200441086a29000037030020054188026a41106a2214200441106a29000037030020054188026a41186a2212200441186a290000370300200520042900003703880220022012290300370300200c2014290300370300200b201329030037030020052005290388023703d801200541d8026a200541d8016a10e406200541e8026a200610e20720052802e8020d000b0b2006102c200541e8026a200f10e207024020052802e802450d00200541d8016a41047221040340200541d8016a41206a200541e8026a41206a280200360200200541d8016a41186a2202200541e8026a41186a290300370300200541d8016a41106a220c200541e8026a41106a290300370300200541d8016a41086a220b200541e8026a41086a290300370300200520052903e8023703d801200541b8016a41086a2213200441086a290000370300200541b8016a41106a2214200441106a290000370300200541b8016a41186a2212200441186a290000370300200520042900003703b80120022012290300370300200c2014290300370300200b2013290300370300200520052903b8013703d801200541d8026a200541d8016a10e406200541e8026a200f10e20720052802e8020d000b0b200f102c024020052802d80222040d00410021044100210b410021130c020b20052802e002211320052802dc0221022004210b034020042f0106210c2002450d022002417f6a21022004200c4102746a41e8026a2802002104200b2802e802210b0c000b0b200f102c2006102c0c010b200541ac016a200c36020020054198016a41106a2004360200200520133602b001200542003703a0012005200b36029c012005410036029801200541d8016a20054198016a10e3074101211202400240024020052d00d8014101470d0020054180036a200541f1016a290000370300200541e8026a41106a200541e9016a290000370300200541f0026a200541e1016a290000370300200520052900d9013703e802417f20052802b001220441016a220220022004491b220441ffffff3f712004470d0520044105742204417f4c0d05200410322212450d04201220052903e802370000201241186a200541e8026a41186a2214290300370000201241106a200541e8026a41106a2206290300370000201241086a200541e8026a41086a220f2903003700002005201236026820052004410576221336026c4101210420054101360270200541b8016a41186a20054198016a41186a280200360200200541b8016a41106a20054198016a41106a290300370300200541b8016a41086a20054198016a41086a29030037030020052005290398013703b801200541d8016a200541b8016a10e30720052d00d8014101470d012014200541f1016a2900003703002006200541e9016a290000370300200f200541e1016a290000370300200520052900d9013703e802200541d8016a41017221024120210b4101210c034020054188026a41186a2210201429030037030020054188026a41106a2211200629030037030020054188026a41086a220e200f290300370300200520052903e802370388020240200c2013470d00200541e8006a2013417f20052802d001220441016a221220122004491b10d601200528026821120b2012200b6a2204200529038802370000200441186a2010290300370000200441106a2011290300370000200441086a200e2903003700002005200c41016a2204360270200541d8016a200541b8016a10e307024020052d00d8014101460d00200c41016a2104200528026c21130c030b2014200241186a2900003703002006200241106a290000370300200f200241086a290000370300200520022900003703e802200b41206a210b200528026c21132004210c0c000b0b20054198016a10e40741002104410021130c010b200541b8016a10e4070b20054180016a4200370300200541f8006a4200370300200541e8006a41086a220242003703002005420037036820054188016a4195ddc700411210c501200220054188016a41086a2900003703002005200529008801370368200541a8026a41a7edc300410410c501200841086a200541a8026a41086a290300370000200820052903a80237000020044105744104722202417f4c0d0220021032220c450d01200541003602e001200520023602dc012005200c3602d801200541d8016a2004108f010240024020040d0020052802d801211420052802e00121020c010b2004410574210c20052802e0012102201221040340200541d8016a20024120102f20052802d801221420052802e001220b6a22022004290000370000200241086a200441086a290000370000200241106a200441106a290000370000200241186a200441186a2900003700002005200b41206a22023602e001200441206a2104200c41606a220c0d000b0b200541e8006a41202014200210a702024020052802dc01450d002014102c0b2013450d002012450d00201341ffffff3f71450d002012102c0b20054190036a24000f0b1039000b103b000b130020004102360204200041c8a5c3003602000b3400200041ffdcc70036020420004100360200200041146a4107360200200041106a41a4aec300360200200041086a42073702000b5301027f02404104103222020d001039000b2000420437020420002002360200200041004101102f2000280200200041086a220228020022036a41003a00002002200341016a2203360200200020034100102f0b4901017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a41003600002000200241046a3602000b130020004104360204200041f8b9c3003602000be90301037f024002402002412c6c41046a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b2000200336020420002004360200200041086a2203410036020020002002108f0102402002450d002002412c6c2102034020012802002104200020032802004101102f200028020020032802006a21050240024020044102470d00200541003a00002003200328020041016a3602000c010b200541013a00002003200328020041016a2204360200024020012802004101460d00200020044101102f2000280200200328020022046a41003a00002003200441016a2204360200200141046a2802002105200020044104102f2000280200200328020022046a20053600002003200441046a2204360200200020044120102f2000280200200328020022056a2204200141086a290000370000200441086a200141106a290000370000200441106a200141186a290000370000200441186a200141206a2900003700002003200541206a2204360200200141286a2802002105200020044104102f2000280200200328020022046a20053600002003200441046a3602000c010b200020044101102f2000280200200328020022046a41013a00002003200441016a3602000b2001412c6a2101200241546a22020d000b0b0f0b103b000b1039000bb60101027f200128020021020240410110322203450d0020004201370204200020033602000240024020020d00200041004101102f2000280200200041086a28020022016a41003a0000200141016a21010c010b200041004101102f2000280200200041086a220228020022036a41013a00002002200341016a220336020020012802042101200020034104102f2000280200200228020022026a2001360000200241046a21010b200041086a20013602000f0b1039000bd40701047f200128020021020240410110322203450d002000420137020420002003360200200041004101102f2000280200200041086a22032802006a21040240024020020d00200441003a0000200328020041016a21020c010b200441013a00002003200328020041016a3602002000200141086a2802002203108f0102402003450d0020034105742105200041086a220428020021030340200020034120102f200028020020042802006a22032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a2900003700002004200428020041206a2203360200200241206a2102200541606a22050d000b0b2001410c6a28020021022000200141146a2802002203108f0102402003450d0020034105742105200041086a220428020021030340200020034120102f200028020020042802006a22032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a2900003700002004200428020041206a2203360200200241206a2102200541606a22050d000b0b200141186a28020021022000200141206a2802002203108f0102402003450d0020034105742105200041086a220428020021030340200020034120102f200028020020042802006a22032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a2900003700002004200428020041206a2203360200200241206a2102200541606a22050d000b0b200141246a280200210220002001412c6a2802002203108f0102402003450d0020022003410c6c6a210303402002280200200241086a280200200010d5032002410c6a22022003470d000b0b200141306a28020021032000200041086a22022802004104102f200028020020022802006a20033600002002200228020041046a2203360200200141346a2802002104200020034104102f200028020020022802006a20043600002002200228020041046a2203360200200141386a2802002104200020034104102f200028020020022802006a20043600002002200228020041046a22033602002001413c6a2802002104200020034104102f200028020020022802006a20043600002002200228020041046a2203360200200141c0006a2802002104200020034104102f200028020020022802006a20043600002002200228020041046a2203360200200141c4006a2802002104200020034104102f200028020020022802006a2004360000200228020041046a21020b200041086a20023602000f0b1039000be30101047f0240024002400240200128020022022802042203450d00200228020022042d0000210520022003417f6a3602042002200441016a36020020050e020203010b200041023602000f0b200041023602000f0b200041003602000f0b02402001280200220228020422034104490d0020022802002204280000210520022003417c6a3602042002200441046a3602002001280200220228020422014104490d00200020053602042000410136020020022802002203280000210420022001417c6a3602042002200341046a360200200041086a20043602000f0b200041023602000ba90201017f230041a0016b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822010d00200041003602400c010b200328020c21022003200341106a28020036027c20032001360278200341186a200341f8006a1093020240024020032802580d00200341003602880120034201370380012003410f360294012003200336029001200320034180016a36029c012003412c6a41013602002003420137021c200341b4bcc300360218200320034190016a3602282003419c016a41dcb7c000200341186a103e1a2003350288014220862003350280018410000240200328028401450d00200328028001102c0b200041003602400c010b2000200341186a41e00010c9081a0b2002450d002001102c0b200341a0016a24000bb60201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10ea040240024020022802480d0020024100360230200242013703282002410f36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235023042208620023502288410000240200228022c450d002002280228102c0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102c0b200241e0006a24000bbb0503037f017e047f230041206b22022400200241086a2001108702024002402002280208450d00200041003602000c010b02400240200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d0002400240024020040d00410421060c010b200410322206450d010b41002107200241003602182002200636021020022004410c6e36021402402003450d0003402002200110870220022802000d042001280204220820022802044102742204490d042004417f4c0d030240024020040d00410121090c010b200410372209450d03200128020421080b0240024020082004490d0020092001280200200410c90821082001280204220920044f0d01200420094194afc0001058000b2004450d052004450d052009102c0c050b2001200920046b3602042001200128020020046a3602002008450d040240024002402004ad22054220862005842205422088a722040d002005a721040c010b024020082004724103710d002005a722044103710d0020044102762209450d012008450d0720054202884280808080f0ffffff3f832009ad842105200821090c020b2005a7450d062008102c0c060b41042109420021052004450d002008102c0b024020072002280214470d00200241106a2007410110ec0120022802182107200228021021060b20062007410c6c6a22042005370204200420093602002002200228021841016a22073602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c030b1039000b103b000b200041003602002002280210210802402007450d002007410c6c21042008210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200441746a22040d000b0b20022802142201450d002001410c6c450d002008102c0b200241206a24000bcf0b04047f017e0a7f027e230041e0026b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1087020240024020022802000d00024002400240200228020422052002280224412c6e2201200120054b1bad422c7e2206422088a70d002006a72201417f4c0d000240024020010d00410421070c010b200110322207450d020b41002108200241003602302002200736022820022001412c6e36022c0240024002402005450d004100210903402002280224220a450d032002280220220b2d000021012002200a417f6a220c3602242002200b41016a36022002400240024020010e020001060b200241d8006a41186a200241f8006a41186a290300370300200241d8006a41106a200241f8006a41106a290300370300200241d8006a41086a200241f8006a41086a290300370300200220022903783703584102210c0c010b200c450d04200b2d000121012002200a417e6a220d3602242002200b41026a3602204101210c0240024020010e020001060b200d4104490d05200b280002210e2002200a417a6a220f3602242002200b41066a36022041002101200241003a009802200b200f411f200f411f491b6a41076a21104179210c0340200f2001460d05200241f8016a20016a200b20016a220d41066a2d00003a00002002200a200c6a3602242002200d41076a3602202002200141016a220d3a009802200c417f6a210c200d2101200d4120470d000b200241c0026a41186a2201200241f8016a41186a290300370300200241c0026a41106a220c200241f8016a41106a290300370300200241c0026a41086a220b200241f8016a41086a290300370300200220022903f8013703c002200d41ff01714120490d05200241d8016a41086a220f200b290300370300200241d8016a41106a220b200c290300370300200241d8016a41186a220c2001290300370300200220022903c0023703d801200a200d6b2201417a6a4104490d05200241b8016a41086a200f290300370300200241b8016a41106a200b290300370300200241b8016a41186a200c290300370300200220022903d8013703b8012010280000210f2002201041046a3602202002200141766a3602244100210c0b200241f8006a41086a200241b8016a41086a2903002206370300200241d8006a41186a200241b8016a41186a290300370300200241d8006a41106a200241b8016a41106a290300370300200241d8006a41086a2006370300200220022903b8012206370378200220063703580b200941016a2109200241386a41186a220d200241d8006a41186a290300370300200241386a41106a220b200241d8006a41106a290300370300200241386a41086a220a200241d8006a41086a2903003703002002200229035837033802402008200228022c470d00200241286a2008410110dd0120022802302108200228022821070b20072008412c6c6a2201200e3602042001200c360200200141086a2002290338370200200d2903002106200b2903002111200a2903002112200141286a200f360200200141106a2012370200200141186a2011370200200141206a20063702002002200841016a220836023020092005470d000b200228022821070b2007450d052000200229022c370204200020073602000c060b200141ff0171450d00200241003a0098020b200228022c2201450d032001412c6c0d020c030b103b000b1039000b2002280228102c0b200241003602c802200242013703c0022002410f3602a4022002200241086a3602a0022002200241c0026a3602d8012002418c026a4101360200200242013702fc01200241b4bcc3003602f8012002200241a0026a36028802200241d8016a41dcb7c000200241f8016a103e1a20023502c80242208620023502c002841000024020022802c402450d0020022802c002102c0b200041003602000b2004450d002003102c0b200241e0026a24000b920902087f037e230041f0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a1087020240024020032802000d000240024002402003280204220620032802244105762201200120064b1b22014105742202417f4c0d0002400240024020010d00410821070c010b200210322207450d010b200341003602602003200136025c2003200736025802402006450d00410021080340200341003a003020032802242201450d05200328022022022d0000210920032001417f6a220a360224200320093a0028200341013a00302003200241016a360220200a450d04200328022022022d0000210920032001417e6a220a3602242003200241016a360220200341023a0030200320093a0029200a450d04200328022022022d0000210920032001417d6a220a3602242003200241016a360220200341033a0030200320093a002a200a450d04200328022022022d0000210920032001417c6a220a3602242003200241016a360220200341043a0030200320093a002b200a450d04200328022022022d0000210920032001417b6a220a3602242003200241016a360220200341053a0030200320093a002c200a450d04200328022022022d0000210920032001417a6a220a3602242003200241016a360220200341063a0030200320093a002d200a450d04200328022022022d000021092003200141796a220a3602242003200241016a360220200341073a0030200320093a002e200a450d042003200328022022022d00003a002f2003200241016a3602202003200141786a220936022420094110490d052003290328210b2003200141686a22093602242003200241116a3602202009450d05200241096a290000210c2002290001210d2003200141676a3602242003200241126a3602204100210902400240024020022d00110e03020001080b410121090c010b410221090b200320032800383602502003200341386a41036a2800003600532003200328005336004b20032003280250360248200320032802483602402003200328004b36004302402008200328025c470d00200341d8006a200810ed0420032802602108200328025821070b200720084105746a220120093a00182001200b370310200120032802403600192001411c6a20032800433600002001200c3703082001200d3703002003200328026041016a22083602602006417f6a22060d000b200328025821070b2007450d042000200329025c370204200020073602000c050b1039000b103b000b200341003a00300b200328025c41ffffff3f71450d002003280258102c0b20034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360250200341ec006a41013602002003420137025c200341b4bcc3003602582003200341386a360268200341d0006a41dcb7c000200341d8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b200041003602000b2005450d002004102c0b200341f0006a24000bd20101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffff3f7122042002470d02200241057422034100480d0220042002464103742104024002400240024002402000280200410020011b22020d002003450d010c030b200141057422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034105763602000b0f0b2004450d001039000b103b000b940301017f23004180016b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036025c20032001360258200341206a200341d8006a10ef040240024020032802200d0020034100360268200342013703602003410f3602742003200341086a3602702003200341e0006a36027c200341346a410136020020034201370224200341b4bcc3003602202003200341f0006a360230200341fc006a41dcb7c000200341206a103e1a2003350268422086200335026084100002402003280264450d002003280260102c0b200041003602000c010b20002003290320370200200041306a200341206a41306a290300370200200041286a200341206a41286a290300370200200041206a200341206a41206a290300370200200041186a200341206a41186a290300370200200041106a200341206a41106a290300370200200041086a200341206a41086a2903003702000b2002450d002001102c0b20034180016a24000bfd0c030a7f017e067f230041306b22022400200241206a2001108405024002400240024002400240024002400240024020022802202203450d00200241286a280200210420022802242105200241086a200110870220022802080d0841042106200228020c220720012802044104762208200820074b1b22094104742208417f4c0d0502402009450d00200810322206450d070b4100210820024100360218200220093602142002200636021002402007450d00410021080340200128020422094104490d092001280200220a280000210b20012009417c6a3602042001200a41046a360200200241206a2001108a0220022802202209450d092002290224210c024020082002280214470d00200241106a2008410110ed0120022802182108200228021021060b200620084104746a220820093602042008200b360200200841086a200c3702002002200228021841016a22083602182007417f6a22070d000b20022802142109200228021021060b2006450d0820012802042207450d032001280200220a2d0000210b20012007417f6a3602042001200a41016a36020041002107200b0e020201030b200041003602000c080b200241206a2001108a0220022802202207450d012002290224210c0b200241206a2001108a02200ca7210a2002280220220b0d012000410036020002402007450d00200a450d002007102c0b02402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d062005410c6c450d062003102c0c060b2000410036020002402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d052005410c6c450d052003102c0c050b2002280224210d024002402001280204220e4104490d00200241286a280200210f2001280200221028000021112001200e417c6a22123602042001201041046a36020020124104490d012000200536020420002003360200201028000421052001200e41786a3602042001201041086a360200200041346a2005360200200041306a20113602002000412c6a200f360200200041286a200d360200200041246a200b360200200041206a200c422088a73602002000411c6a200a360200200041186a2007360200200041146a2008360200200041106a20093602002000410c6a2006360200200041086a20043602000c060b200041003602000240200d450d00200b102c0b02402007450d00200a450d002007102c0b02402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d052005410c6c450d052003102c0c050b200041003602000240200d450d00200b102c0b02402007450d00200a450d002007102c0b02402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d042005410c6c450d042003102c0c040b103b000b1039000b2002280210210702402008450d0020084104742108200741046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b200228021441ffffffff0071450d002007102c0b2000410036020002402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d002005410c6c450d002003102c0b200241306a24000bef0503067f017e077f230041e0006b220224002002412036020c20022001360208200241106a2001412010b3010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10870202400240024020022802000d002002280204220520022802244103762201200120054b1b22014103742206417f4c0d050240024020010d00410421070c010b200610322207450d050b2001ad210802402005450d000340024002400240200228022422064104490d002002280220220128000021092002200141046a36022020022006417c6a220a360224200a4104490d002001280004210a2002200641786a3602242002200141086a3602202008422088a722012008a7470d02200141016a220b2001490d0a4101210c4100210d02402001410174220e200b200b200e491b220b4104200b41044b1b220b41ffffffff0171200b470d00200b41037421064104210d4100210c0b200c0d0a200641004e0d010c0a0b2008a72201450d042007450d04200141ffffffff0171450d042007102c0c040b2001410374200f20011b210f0240024002402007410020011b2201450d00200f450d002001200f200610352207450d010c020b200d21072006450d012006103222070d010b200c0d090c080b2008428080808070832006410376ad8421080b20072008422088a74103746a2201200a3602042001200936020020084280808080107c21082005417f6a22050d000b0b20070d010b20024100360230200242013703282002410f36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235023042208620023502288410000240200228022c450d002002280228102c0b200041003602000c010b20002008370204200020073602000b2004450d002003102c0b200241e0006a24000f0b1039000b103b000bb20804047f017e097f037e230041a0026b220224002002412036020c20022001360208200241106a2001412010b3010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1087020240024020022802000d0020022802042205200228022441286e2201200120054b1bad42287e2206422088a70d032006a72201417f4c0d030240024020010d00410821070c010b200110322207450d050b4100210820024100360230200220073602282002200141286e36022c0240024002402005450d0041002109034041002101200241003a00d801200941016a21092002280224210a417f210b0340200a2001460d03200241b8016a20016a2002280220220c2d00003a00002002200a200b6a3602242002200c41016a3602202002200141016a220d3a00d801200b417f6a210b200d2101200d4120470d000b20024180026a41186a2201200241b8016a41186a29030037030020024180026a41106a220b200241b8016a41106a29030037030020024180026a41086a220e200241b8016a41086a290300370300200220022903b80137038002200d41ff01714120490d0320024198016a41086a220f200e29030037030020024198016a41106a220e200b29030037030020024198016a41186a220b2001290300370300200220022903800237039801200a200d6b22014108490d03200241d8006a41086a200f2903002206370300200241d8006a41106a200e2903002210370300200241d8006a41186a200b2903002211370300200241386a41086a220b2006370300200241386a41106a220d2010370300200241386a41186a220a2011370300200c29000121062002200c41096a3602202002200141786a360224200220022903980122103703582002201037033802402008200228022c470d00200241286a2008410110f20420022802302108200228022821070b2007200841286c6a22012002290338370300200b2903002110200d2903002111200a290300211220012006370320200141186a2012370300200141106a2011370300200141086a20103703002002200841016a220836023020092005470d000b200228022821070b2007450d022000200229022c370204200020073602000c030b200141ff0171450d00200241003a00d8010b200228022c2201450d00200141286c450d002002280228102c0b200241003602880220024201370380022002410f3602e4012002200241086a3602e001200220024180026a36029801200241cc016a4101360200200242013702bc01200241b4bcc3003602b8012002200241e0016a3602c80120024198016a41dcb7c000200241b8016a103e1a2002350288024220862002350280028410000240200228028402450d00200228028002102c0b200041003602000b2004450d002003102c0b200241a0026a24000f0b103b000b1039000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42287e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341286c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141286e3602000b0f0b2005450d001039000b103b000bb10201017f230041f0026b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602e8010c010b200328021421022003200341186a2802003602cc02200320013602c802200341206a200341c8026a10f404024002402003280288020d00200341003602d802200342013703d0022003410f3602e4022003200341086a3602e0022003200341d0026a3602ec02200341346a410136020020034201370224200341b4bcc3003602202003200341e0026a360230200341ec026a41dcb7c000200341206a103e1a20033502d80242208620033502d002841000024020032802d402450d0020032802d002102c0b200041003602e8010c010b2000200341206a41a80210c9081a0b2002450d002001102c0b200341f0026a24000bc807010c7f230041c0066b2202240002400240024002400240200128020422034104490d0020012802002204280000210520012003417c6a22063602042001200441046a36020041002107200241003a00b8042003417b6a210302400240034020062007460d0120024198046a20076a200420076a220841046a2d00003a0000200120033602042001200841056a3602002002200741016a22083a00b8042003417f6a21032008210720084120470d000b200241b0026a41086a220720024198046a41086a290300370300200241b0026a41106a220320024198046a41106a290300370300200241b0026a41186a220420024198046a41186a29030037030020022002290398043703b002200841ff0171411f4d0d0120024190026a41086a200729030037030020024190026a41106a200329030037030020024190026a41186a2004290300370300200220022903b0023703900220024198046a200110b4052002280298044101460d03200241b0026a20024198046a41047241e40110c9081a20024198046a200110b0062002280298042207450d04200241a0046a22082802002103200228029c04210620024198046a200110b00620022802980422040d05200041003602e8012003450d062007102c0c060b200741ff0171450d00200241003a00b8040b200041003602e8010c040b200041003602e8010c030b200041003602e8010c020b200041003602e8010c010b2008280200210802400240200128020422094104490d00200228029c04210a2001280200220b280000210c20012009417c6a220d3602042001200b41046a360200200d4104490d01200b280004210d2001200941786a3602042001200b41086a360200200241086a41086a220120024190026a41086a290300370300200241086a41106a220920024190026a41106a290300370300200241086a41186a220b20024190026a41186a2903003703002002200229039002370308200241286a200241b0026a41e40110c9081a20002005360200200041046a200241286a41e40110c9081a20004184026a200d36020020004180026a200c360200200041fc016a2008360200200041f8016a200a360200200041f4016a2004360200200041f0016a2003360200200020063602ec01200020073602e80120004188026a200229030837020020004190026a200129030037020020004198026a2009290300370200200041a0026a200b2903003702000c020b200041003602e80102402008450d002004102c0b2003450d012007102c0c010b200041003602e80102402008450d002004102c0b2003450d002007102c0b200241c0066a24000bb80a04047f017e0b7f027e230041c0026b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1087020240024002400240024020022802000d00200228020422052002280224412c6e2201200120054b1bad422c7e2206422088a70d012006a72201417f4c0d010240024020010d00410421070c010b200110322207450d030b41002108200241003602302002200736022820022001412c6e36022c0240024002402005450d004100210903402002280224220a4104490d03200941016a21092002280220220b280000210c2002200a417c6a220d3602242002200b41046a220e36022041002101200241003a00f801200e200d411f200d411f491b6a41016a210f417b210e0340200d2001460d03200241d8016a20016a200b20016a221041046a2d00003a00002002200a200e6a3602242002201041056a3602202002200141016a22103a00f801200e417f6a210e2010210120104120470d000b200241a0026a41186a2201200241d8016a41186a290300370300200241a0026a41106a220e200241d8016a41106a290300370300200241a0026a41086a220d200241d8016a41086a290300370300200220022903d8013703a002201041ff01714120490d03200241b8016a41086a220b200d290300370300200241b8016a41106a220d200e290300370300200241b8016a41186a220e2001290300370300200220022903a0023703b801200a20106b2201417c6a4104490d0320024198016a41086a220a200b29030037030020024198016a41106a220b200d29030037030020024198016a41186a220d200e290300370300200220022903b80137039801200f28000021112002200f41046a220e3602202002200141786a221036022420104104490d03200241d8006a41086a200a2903002206370300200241d8006a41106a200b2903002212370300200241d8006a41186a200d2903002213370300200241386a41086a22102006370300200241386a41106a220d2012370300200241386a41186a220a2013370300200e280000210b2002200e41046a3602202002200141746a360224200220022903980122063703582002200637033802402008200228022c470d00200241286a200810810420022802302108200228022821070b20072008412c6c6a2201200c36020020012002290338370204200a2903002106200d2903002112201029030021132001200b360228200120113602242001410c6a2013370200200141146a20123702002001411c6a20063702002002200841016a220836023020092005470d000b200228022821070b2007450d02200229022c21062002280224220141034b0d052006a72201450d022001412c6c450d022007102c0c020b200141ff0171450d00200241003a00f8010b200228022c2201450d002001412c6c450d002002280228102c0b200241003602a802200242013703a0022002410f360284022002200241086a360280022002200241a0026a3602b801200241ec016a4101360200200242013702dc01200241b4bcc3003602d801200220024180026a3602e801200241b8016a41dcb7c000200241d8016a103e1a20023502a80242208620023502a002841000024020022802a402450d0020022802a002102c0b200041003602000c030b103b000b1039000b20002006370204200020073602002000410c6a2002280220220e28000036020020022001417c6a3602242002200e41046a3602200b2004450d002003102c0b200241c0026a24000bb60201017f230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a108a020240024020032802480d0020034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b200041003602000c010b20002003290348370200200041086a200341c8006a41086a2802003602000b2002450d002001102c0b200341e0006a24000ba50502077f017e230041e0006b220324002003200236021420032001360210200341186a2001200210b30102400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a1087020240024020032802080d0041042106024002400240200328020c2202200328022c4104762201200120024b1b22074104742201417f4c0d0002402007450d00200110322206450d020b41002101200341003602402003200736023c2003200636023802402002450d000340200328022c22074104490d0420032802282208280000210920032007417c6a36022c2003200841046a360228200341c8006a200341286a10f80420032802482207450d04200329024c210a02402001200328023c470d00200341386a200110ce0120032802402101200328023821060b200620014104746a2201200736020420012009360200200141086a200a3702002003200328024041016a22013602402002417f6a22020d000b200328023821060b2006450d032000200329023c370204200020063602000c040b103b000b1039000b2003280238210702402001450d0020014104742102200741046a210103400240200141046a28020041ffffffff0371450d002001280200102c0b200141106a2101200241706a22020d000b0b200328023c41ffffffff0071450d002007102c0b20034100360240200342013703382003410f3602342003200341106a3602302003200341386a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341306a360258200341c4006a41dcb7c000200341c8006a103e1a200335024042208620033502388410000240200328023c450d002003280238102c0b200041003602000b2005450d002004102c0b200341e0006a24000be20201077f230041206b22022400200241086a200110870202400240024002402002280208450d00200041003602000c010b200228020c220320012802044102762204200420034b1b22054102742204417f4c0d010240024020050d00410421060c010b200410322206450d030b4100210420024100360218200220053602142002200636021002402003450d00034002402001280204220541044f0d002000410036020020022802104100200228021422041b2201450d03200441ffffffff0371450d032001102c0c030b20012802002207280000210820012005417c6a3602042001200741046a360200024020042002280214470d00200241106a200410d20420022802182104200228021021060b200620044102746a20083602002002200441016a22043602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000b200241206a24000f0b103b000b1039000bf10d04047f017e117f027e23004190036b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a1087020240024020022802000d0002400240024020022802042205200228022441346e2201200120054b1bad42347e2206422088a70d002006a72201417f4c0d000240024020010d00410421070c010b200110322207450d020b20024100360230200220073602282002200141346e36022c024002402005450d0020024188016a41206a2108410021094100210a0340024002402002280224220b4104490d002002280220220c280000210d2002200c41046a3602202002200b417c6a220136022420014104490d00200c280004210e2002200b41786a220f3602242002200c41086a2201360220200f450d002002200b41776a22103602242002200141016a22113602204100210f02400240024020012d00000e020100030b41002101200241003a00c802200c2010411f2010411f491b6a410a6a21124176210f034020102001460d02200241a8026a20016a200c20016a221141096a2d00003a00002002200b200f6a36022420022011410a6a3602202002200141016a22113a00c802200f417f6a210f2011210120114120470d000b200241f0026a41186a2201200241a8026a41186a290300370300200241f0026a41106a220f200241a8026a41106a290300370300200241f0026a41086a220c200241a8026a41086a290300370300200220022903a8023703f002201141ff01714120490d0220024188026a41086a2210200c29030037030020024188026a41106a220c200f29030037030020024188026a41186a220f2001290300370300200220022903f00237038802200b20116b220141776a4104490d02200241e0016a41086a2010290300370300200241e0016a41106a200c290300370300200241e0016a41186a200f290300370300200241dc016a41026a20024185026a41026a2d00003a000020022002290388023703e001201228000021132002201241046a22113602202002200141736a2210360224200220022f0085023b01dc014101210f0b200241b8016a41186a2201200241e0016a41186a290300370300200241b8016a41106a220b200241e0016a41106a290300370300200241b8016a41086a220c200241e0016a41086a290300370300200241b4016a41026a2212200241dc016a41026a2d00003a0000200220022903e0013703b801200220022f01dc013b01b40120104104490d0120024188016a41086a200c29030037030020024188016a41106a200b29030037030020024188016a41186a2001290300370300200241b0016a41026a20122d000022013a0000200220022903b80137038801200220022f01b401220b3b01b0012011280000211420022010417c6a3602242002201141046a360220200841026a20013a00002008200b3b0000200e2115200d2116201321170c020b200141ff0171450d00200241003a00c8020b4102210f0b200241e0006a411f6a220120024188016a411f6a280000360000200241e0006a41186a220b20024188016a41186a290300370300200241e0006a41106a221120024188016a41106a290300370300200241e0006a41086a220c20024188016a41086a2903003703002002200229038801370360200f4102460d02200a41016a210a2015ad4220862016ad842106200241386a411f6a22102001280000360000200241386a41186a220d200b290300370300200241386a41106a220b2011290300370300200241386a41086a2211200c2903003703002002200229036037033802402009200228022c470d00200241286a200910830420022802302109200228022821070b2007200941346c6a2201200f3a000820012006370200200141096a200229033837000020102800002109200d2903002106200b290300211820112903002119200141306a20143600002001412c6a2017360000200141116a2019370000200141196a2018370000200141216a2006370000200141286a20093600002002200228023041016a2209360230200a2005470d000b200228022821070b2007450d042000200229022c370204200020073602000c050b200228022c2201450d03200141346c0d020c030b103b000b1039000b2002280228102c0b20024100360268200242013703602002410f36023c2002200241086a3602382002200241e0006a3602a8022002419c016a41013602002002420137028c01200241b4bcc300360288012002200241386a36029801200241a8026a41dcb7c00020024188016a103e1a2002350268422086200235026084100002402002280264450d002002280260102c0b200041003602000b2004450d002003102c0b20024190036a24000bf00c04057f017e017f037e230041e0016b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822010d00200041023a00000c010b200228020c210302400240200241106a2802002204450d0041002105024002400240024020012d00000e020100040b200241003a00980120044101460d0220012d00012105200241013a009801200220053a007820044102460d0120012d00022105200241023a009801200220053a007920044103460d0120012d00032105200241033a009801200220053a007a20044104460d0120012d00042105200241043a009801200220053a007b20044105460d0120012d00052105200241053a009801200220053a007c20044106460d0120012d00062105200241063a009801200220053a007d20044107460d0120012d00072105200241073a009801200220053a007e20044108460d0120012d00082105200241083a009801200220053a007f20044109460d0120012d00092105200241093a009801200220053a0080012004410a460d0120012d000a21052002410a3a009801200220053a0081012004410b460d0120012d000b21052002410b3a009801200220053a0082012004410c460d0120012d000c21052002410c3a009801200220053a0083012004410d460d0120012d000d21052002410d3a009801200220053a0084012004410e460d0120012d000e21052002410e3a009801200220053a0085012004410f460d0120012d000f21052002410f3a009801200220053a00860120044110460d0120012d00102105200241103a009801200220053a00870120044111460d0120012d00112105200241113a009801200220053a00880120044112460d0120012d00122105200241123a009801200220053a00890120044113460d0120012d00132105200241133a009801200220053a008a0120044114460d0120012d00142105200241143a009801200220053a008b0120044115460d0120012d00152105200241153a009801200220053a008c0120044116460d0120012d00162105200241163a009801200220053a008d0120044117460d0120012d00172105200241173a009801200220053a008e0120044118460d0120012d00182105200241183a009801200220053a008f0120044119460d0120012d00192105200241193a009801200220053a0090012004411a460d0120012d001a21052002411a3a009801200220053a0091012004411b460d0120012d001b21052002411b3a009801200220053a0092012004411c460d0120012d001c21052002411c3a009801200220053a0093012004411d460d0120012d001d21052002411d3a009801200220053a0094012004411e460d0120012d001e21052002411e3a009801200220053a0095012004411f460d0120012d001f21052002411f3a009801200220053a00960120044120460d01200241d8006a41106a2205200241f8006a41106a290300370300200241d8006a41086a2204200241f8006a41086a290300370300200220012d00203a009701200241d8006a41186a2206200241f8006a41186a290300370300200241203a0098012002200229037822073703a00120022007370358200241386a41186a22082006290300370300200241386a41106a22062005290300370300200241386a41086a2205200429030037030020022002290358370338200241186a41186a2008290300370300200241186a41106a2006290300370300200241186a41086a200529030037030020022002290338370318410121050b200241f8006a41186a200241186a41186a2903002207370300200241f8006a41106a200241186a41106a2903002209370300200241f8006a41086a200241186a41086a290300220a37030020022002290318220b370378200041196a2007370000200041116a2009370000200041096a200a3700002000200b3700010c030b200241003a0098010b200241386a41086a200241d8006a41086a290300370300200241386a41106a200241d8006a41106a2903003703000b200241003602a801200242013703a0012002410f36025c200220023602582002200241a0016a3602382002418c016a41013602002002420137027c200241b4bcc3003602782002200241d8006a36028801200241386a41dcb7c000200241f8006a103e1a20023502a80142208620023502a001841000024020022802a401450d0020022802a001102c0b410221050b200020053a00002003450d002001102c0b200241e0016a24000ba40204017f017e017f027e230041d0006b220224002002412036020420022001360200200241086a2001412010b30102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004110490d00200141086a290000210520012900002106420121030c010b20024100360220200242013703182002410f36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b4bcc3003602382002200241286a360248200241346a41dcb7c000200241386a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b420021030b2004450d002001102c0b2000200637030820002003370300200041106a2005370300200241d0006a24000bb60201017f230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a10fd040240024020032802480d0020034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b200041003602000c010b20002003290348370200200041086a200341c8006a41086a2802003602000b2002450d002001102c0b200341e0006a24000b970602097f037e23004180026b2202240020022001108702024002402002280200450d00200041003602000c010b0240024002402002280204220320012802044105762204200420034b1b22044105742205417f4c0d000240024020040d00410121060c010b200510322206450d020b41002107200241003602102002200436020c20022006360208024002402003450d0041002108034041002105200241003a00b801200841016a21082001280204417f6a210403402004417f460d0320024198016a20056a200128020022092d00003a0000200120043602042001200941016a3602002002200541016a22093a00b8012004417f6a21042009210520094120470d000b200241c0016a41086a220420024198016a41086a290300370300200241c0016a41106a220520024198016a41106a290300370300200241c0016a41186a220a20024198016a41186a29030037030020022002290398013703c001200941ff0171411f4d0d05200241386a41086a2004290300220b370300200241386a41106a2005290300220c370300200241386a41186a200a290300220d370300200241186a41186a2205200d370300200241186a41106a2209200c370300200241186a41086a220a200b370300200220022903c001220b3703582002200b3703382002200b37031802402007200228020c470d00200241086a2007410110d60120022802082106200228021021070b200620074105746a22042002290318370000200441186a2005290300370000200441106a2009290300370000200441086a200a2903003700002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c040b200541ff0171450d02200241003a00b8010c020b103b000b1039000b200241386a41086a200241d8006a41086a290300370300200241386a41106a200241d8006a41106a290300370300200241386a41186a200241d8006a41186a290300370300200220022903583703382000410036020020064100200228020c22041b2201450d00200441ffffff3f71450d002001102c0b20024180026a24000bac0303037f037e017f230041d0006b220324002003200236020420032001360200200341086a2001200210b30102400240200328020822010d00200041023a00200c010b200328020c2104024002400240200341106a2802002205450d00410021020240024020012d00000e020100020b410121020b2005417f6a4104490d002005417b6a4110490d002005416b6a410b4b0d010b20034100360220200342013703182003410f36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b4bcc3003602382003200341286a360248200341346a41dcb7c000200341386a103e1a200335022042208620033502188410000240200328021c450d002003280218102c0b410221020c010b200128000121052001410d6a2900002106200129000521072003200328003836021820032003413b6a28000036001b20012900152108200128001d210920002006370308200020073703002000200936021c200020083702142000200536021020002003280218360021200041246a200328001b3600000b200020023a00202004450d002001102c0b200341d0006a24000bb60201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a1080050240024020022802480d0020024100360230200242013703282002410f36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235023042208620023502288410000240200228022c450d002002280228102c0b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d002001102c0b200241e0006a24000bc80502097f037e23004180026b2202240020022001108702024002402002280200450d00200041003602000c010b0240024002402002280204220320012802044105762204200420034b1b22044105742205417f4c0d000240024020040d00410121060c010b200510322206450d020b41002107200241003602102002200436020c20022006360208024002402003450d0041002108034041002105200241003a00b801200841016a21082001280204417f6a210403402004417f460d0320024198016a20056a200128020022092d00003a0000200120043602042001200941016a3602002002200541016a22093a00b8012004417f6a21042009210520094120470d000b200241c0016a41086a220420024198016a41086a290300370300200241c0016a41106a220520024198016a41106a290300370300200241c0016a41186a220a20024198016a41186a29030037030020022002290398013703c001200941ff0171411f4d0d05200241386a41086a2004290300220b370300200241386a41106a2005290300220c370300200241386a41186a200a290300220d370300200241186a41186a2205200d370300200241186a41106a2209200c370300200241186a41086a220a200b370300200220022903c001220b3703582002200b3703382002200b37031802402007200228020c470d00200241086a2007410110d60120022802082106200228021021070b200620074105746a22042002290318370000200441186a2005290300370000200441106a2009290300370000200441086a200a2903003700002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c040b200541ff0171450d02200241003a00b8010c020b103b000b1039000b2000410036020020064100200228020c22041b2201450d00200441ffffff3f71450d002001102c0b20024180026a24000bcc08010a7f23004180026b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a1087020240024020032802000d000240024002402003280204220620032802244105762201200120064b1b22014105742202417f4c0d000240024020010d00410121070c010b200210322207450d020b41002108200341003602302003200136022c200320073602280240024002402006450d0041002109034041002102200341003a00b8012003280224417f6a2101200941016a210903402001417f460d0320034198016a20026a2003280220220a2d00003a00002003200a41016a3602202003200241016a220a3a00b801200320013602242001417f6a2101200a2102200a4120470d000b200341c0016a41086a220220034198016a41086a290300370300200341c0016a41106a220b20034198016a41106a290300370300200341c0016a41186a220c20034198016a41186a29030037030020032003290398013703c001410121010240200a41ff01714120490d00200341f8006a41186a200c290300370300200341f8006a41106a200b290300370300200341f8006a41086a2002290300370300200320032903c001370378410021010b200341d8006a41086a2202200341f8006a41086a290300370300200341d8006a41106a220a200341f8006a41106a290300370300200341d8006a41186a220b200341f8006a41186a2903003703002003200329037837035820010d03200341386a41186a220c200b290300370300200341386a41106a220b200a290300370300200341386a41086a220a20022903003703002003200329035837033802402008200328022c470d00200341286a200810820520032802282107200328023021080b200720084105746a22012003290338370000200141186a200c290300370000200141106a200b290300370000200141086a200a2903003700002003200841016a220836023020092006470d000b0b2007450d052000200329022c370204200020073602000c060b0240200241ff0171450d00200341003a00b8010b200341d8006a41086a200341f8006a41086a290300370300200341d8006a41106a200341f8006a41106a290300370300200341d8006a41186a200341f8006a41186a290300370300200320032903783703580b200328022c41ffffff3f710d020c030b103b000b1039000b2007102c0b200341003602c801200342013703c0012003410f36027c2003200341086a3602782003200341c0016a360258200341ac016a41013602002003420137029c01200341b4bcc300360298012003200341f8006a3602a801200341d8006a41dcb7c00020034198016a103e1a20033502c80142208620033502c001841000024020032802c401450d0020032802c001102c0b200041003602000b2005450d002004102c0b20034180026a24000bcf0101037f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffff3f7122042002470d02200241057422034100480d0220042002462104024002400240024002402000280200410020011b22020d002003450d010c030b200141057422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034105763602000b0f0b2004450d001039000b103b000ba40303037f017e017f230041e0006b220324002003200236020c20032001360208200341106a2001200210b30102400240200328021022020d00200041003602080c010b200328021421042003200341186a28020036022420032002360220200341c8006a200341206a1084050240024020032802482205450d00200329024c21062003200536024820032006a7220136024c2006422088a72107024002402001694101470d0020014102490d0020012007470d010b200341c8006a2007417f20014101200141016a41024b1b677620076b41016a108505200328024c2101200328024821050b2000200136020c2000200536020820002007360204200041003602000c010b20034100360230200342013703282003410f36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b4bcc3003602482003200341386a360258200341c4006a41dcb7c000200341c8006a103e1a200335023042208620033502288410000240200328022c450d002003280228102c0b200041003602080b2004450d002002102c0b200341e0006a24000bba0403037f017e047f230041206b22022400200241086a2001108702024002402002280208450d00200041003602000c010b024002400240200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b200410322206450d020b41002107200241003602182002200636021020022004410c6e36021402402003450d0003402002200110870220022802000d042001280204220820022802042204490d042004417f4c0d020240024020040d00410121090c010b200410372209450d04200128020421080b0240024020082004490d0020092001280200200410c90821082001280204220920044f0d01200420094194afc0001058000b2004450d052004450d052009102c0c050b2001200920046b3602042001200128020020046a3602002008450d042004ad22054220862005842105024020072002280214470d00200241106a2007410110ec0120022802182107200228021021060b20062007410c6c6a22042005370204200420083602002002200228021841016a22073602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c030b103b000b1039000b200041003602002002280210210802402007450d002007410c6c21012008210403400240200441046a280200450d002004280200102c0b2004410c6a2104200141746a22010d000b0b20022802142204450d002004410c6c450d002008102c0b200241206a24000bbf0103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d022002ad420c7e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b2003410c6c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a2001410c6e3602000b0f0b2005450d001039000b103b000ba00902057f017e230041b0016b220224002002412036020c20022001360208200241106a2001412010b30102400240200228021022010d00200041003a00000c010b200241186a280200210320022802142104200241003a0060024002402003450d00200220012d00003a0040200241013a0060024020034101460d00200220012d00013a0041200241023a006020034102460d00200220012d00023a0042200241033a006020034103460d00200220012d00033a0043200241043a006020034104460d00200220012d00043a0044200241053a006020034105460d00200220012d00053a0045200241063a006020034106460d00200220012d00063a0046200241073a006020034107460d00200220012d00073a0047200241083a006020034108460d00200220012d00083a0048200241093a006020034109460d00200220012d00093a00492002410a3a00602003410a460d00200220012d000a3a004a2002410b3a00602003410b460d00200220012d000b3a004b2002410c3a00602003410c460d00200220012d000c3a004c2002410d3a00602003410d460d00200220012d000d3a004d2002410e3a00602003410e460d00200220012d000e3a004e2002410f3a00602003410f460d00200220012d000f3a004f200241103a006020034110460d00200220012d00103a0050200241113a006020034111460d00200220012d00113a0051200241123a006020034112460d00200220012d00123a0052200241133a006020034113460d00200220012d00133a0053200241143a006020034114460d00200220012d00143a0054200241153a006020034115460d00200220012d00153a0055200241163a006020034116460d00200220012d00163a0056200241173a006020034117460d00200220012d00173a0057200241183a006020034118460d00200220012d00183a0058200241193a006020034119460d00200220012d00193a00592002411a3a00602003411a460d00200220012d001a3a005a2002411b3a00602003411b460d00200220012d001b3a005b2002411c3a00602003411c460d00200220012d001c3a005c2002411d3a00602003411d460d00200220012d001d3a005d2002411e3a00602003411e460d00200220012d001e3a005e2002411f3a00602003411f460d00200241206a41106a2203200241c0006a41106a290300370300200241206a41086a2205200241c0006a41086a290300370300200220012d001f3a005f200241206a41186a2206200241c0006a41186a290300370300200241203a006020022002290340220737036820022007370320200041196a2006290300370000200041116a2003290300370000200041096a200529030037000020002002290320370001410121030c020b200241003a00600b20024100360270200242013703682002410f3602242002200241086a3602202002200241e8006a3602ac01200241d4006a410136020020024201370244200241b4bcc3003602402002200241206a360250200241ac016a41dcb7c000200241c0006a103e1a200235027042208620023502688410000240200228026c450d002002280268102c0b410021030b200020033a00002004450d002001102c0b200241b0016a24000b900202027e027f200141086a2903002102200129030021032000200041086a22042802004110102f200028020020042802006a22052002370008200520033700002004200428020041106a2205360200200141186a290300210220012903102103200020054110102f200028020020042802006a22052002370008200520033700002004200428020041106a2205360200200141286a290300210220012903202103200020054110102f200028020020042802006a22052002370008200520033700002004200428020041106a2205360200200141386a290300210220012903302103200020054110102f200028020020042802006a22002002370008200020033700002004200428020041106a3602000be10202037f027e230041106b22032400200341003602082003420137030020022d00202104200341004101102f2003280200200328020822056a20043a00002003200541016a220436020820022802102105200320044104102f2003280200200328020822046a20053600002003200441046a2204360208200241086a290300210620022903002107200320044110102f2003280200200328020822046a22052006370008200520073700002003200441106a220436020820022802142105200320044104102f2003280200200328020822046a20053600002003200441046a220436020820022802182105200320044104102f2003280200200328020822046a20053600002003200441046a2204360208200228021c2105200320044104102f20032802002202200328020822046a20053600002003200441046a2204360208200020012002200410a70202402003280204450d002002102c0b200341106a24000bf40301057f230041106b2203240002400240200228020822044105744104722205417f4c0d0020022802002102200510322206450d01200341003602082003200536020420032006360200024002400240200441c000490d00024002400240200441808001490d002004418080808004490d01200341004101102f2003280200200328020822056a41033a00002003200541016a2205360208200320054104102f2003280200200328020822056a2004360000200541046a21050c020b200341004102102f2003280200200328020822056a20044102744101723b0000200541026a21050c010b200341004104102f2003280200200328020822056a2004410274410272360000200541046a21050b20032005360208200220044105746a21070c010b200341004101102f20032802002206200328020822056a20044102743a00002003200541016a22053602082004450d01200220044105746a21070b0340200320054120102f20032802002206200328020822046a22052002290000370000200541086a200241086a290000370000200541106a200241106a290000370000200541186a200241186a2900003700002003200441206a22053602082007200241206a2202470d000b0b200020012006200510a70202402003280204450d002006102c0b200341106a24000f0b103b000b1039000bf50101057f230041106b22022400024002402001280208220341027441046a2204417f4c0d00200128020021010240024020040d00410121050c010b200410322205450d020b20024100360208200220043602042002200536020020022003108f010240024020030d0020022802002106200228020821030c010b2003410274210420022802082103034020012802002105200220034104102f20022802002206200228020822036a20053600002002200341046a2203360208200141046a21012004417c6a22040d000b0b200041202006200310a70202402002280204450d002006102c0b200241106a24000f0b103b000b1039000bce0401077f230041106b2202240002400240200128020822034105744104722204417f4c0d0020012802002105200410322201450d0120024100360208200220043602042002200136020020022003108f010240024020030d0020022802002104200228020821030c010b200520034105746a210620022802082103034020052802002101200220034104102f2002280200200228020822036a20013600002002200341046a360208200528020421032002200528020c2201108f0102402001450d0020014105742104200228020821010340200220014120102f2002280200200228020822076a22012003290000370000200141086a200341086a290000370000200141106a200341106a290000370000200141186a200341186a2900003700002002200741206a2201360208200341206a2103200441606a22040d000b0b200541206a210820052802102103200220052802182201108f010240024020010d00200228020821010c010b20014105742104200228020821010340200220014120102f2002280200200228020822076a22012003290000370000200141086a200341086a290000370000200141106a200341106a290000370000200141186a200341186a2900003700002002200741206a2201360208200341206a2103200441606a22040d000b0b200528021c2103200220014104102f20022802002204200228020822016a20033600002002200141046a22033602082008210520082006470d000b0b200041202004200310a70202402002280204450d002004102c0b200241106a24000f0b103b000b1039000b870201057f230041106b2202240002404121410120012d000041014622031b220410322205450d00200241003602082002200436020420022005360200200241004101102f20022802002204200228020822056a21060240024020030d00200641003a0000200541016a21010c010b200641013a00002002200541016a2204360208200220044120102f20022802002204200228020822056a22032001290001370000200341086a200141096a290000370000200341106a200141116a290000370000200341186a200141196a290000370000200541206a21010b20022001360208200041202004200110a70202402002280204450d002004102c0b200241106a24000f0b1039000be30201067f230041206b2203240002400240200228020822044105744104722205417f4c0d0020022802002102200510322206450d0120034100360208200320053602042003200636020020032004108f010240024020040d0020032802002107200328020821040c010b200441057421060340412010322204450d032003422037021420032004360210200341106a41004120102f20032802102205200328021822086a22042002290000370000200441086a200241086a290000370000200441106a200241106a290000370000200441186a200241186a2900003700002003200841206a2204360218200320032802082004102f20032802002207200328020822086a2005200410c9081a2003200820046a220436020802402003280214450d002005102c0b200241206a2102200641606a22060d000b0b200020012007200410a70202402003280204450d002007102c0b200341206a24000f0b103b000b1039000b7501037f230041106b22022400200241003602082002420137030020022001108f05200128020c2103200220022802084104102f20022802002201200228020822046a20033600002002200441046a2203360208200041202001200310a70202402002280204450d002001102c0b200241106a24000bb30201047f20012802002102200020012802082201108f0102402001450d0020022001412c6c6a2103200041086a22012802002104034020022802002105200020044104102f200028020020012802006a20053600002001200128020041046a2204360200200020044120102f200028020020012802006a2204200241046a290000370000200441186a2002411c6a290000370000200441106a200241146a290000370000200441086a2002410c6a2900003700002001200128020041206a2204360200200241246a2802002105200020044104102f200028020020012802006a20053600002001200128020041046a2204360200200241286a2802002105200020044104102f200028020020012802006a20053600002001200128020041046a22043602002002412c6a22022003470d000b0b0bb10303017f027e027f230041106b220324002003410036020820034201370300200241086a290300210420022903002105200341004110102f2003280200200328020822066a22072004370008200720053700002003200641106a2206360208200241186a290300210420022903102105200320064110102f2003280200200328020822066a22072004370008200720053700002003200641106a220636020820022802202107200320064104102f2003280200200328020822066a20073600002003200641046a220636020820022802242107200320064104102f2003280200200328020822066a20073600002003200641046a220636020820022802282107200320064104102f2003280200200328020822066a20073600002003200641046a2206360208200228022c2107200320064104102f2003280200200328020822066a20073600002003200641046a220636020820022802302107200320064104102f2003280200200328020822066a20073600002003200641046a3602082003200241346a1091052000200120032802002202200328020810a70202402003280204450d002002102c0b200341106a24000ba60201047f230041106b2202240020012d000021032000200041086a22042802004101102f200028020020042802006a210502400240024020034101460d00200541003a00002004200428020041016a3602000c010b200541013a00002004200428020041016a360200412010322204450d012002422037020420022004360200200241004120102f20022802002203200228020822056a22042001290001370000200441086a200141096a290000370000200441106a200141116a290000370000200441186a200141196a2900003700002002200541206a22013602082000200041086a22042802002001102f200028020020042802006a2003200110c9081a2004200428020020016a3602002002280204450d002003102c0b200241106a24000f0b1039000bce0201057f230041106b220324002003410036020820034201370300200341004120102f2003280200200328020822046a22052002290000370000200541086a200241086a290000370000200541106a200241106a290000370000200541186a200241186a2900003700002003200441206a360208200241206a200310f803200228025021052003200241d8006a2802002202108f010240024020020d0020032802002106200328020821020c010b20024105742104200328020821020340200320024120102f20032802002206200328020822076a22022005290000370000200241086a200541086a290000370000200241106a200541106a290000370000200241186a200541186a2900003700002003200741206a2202360208200541206a2105200441606a22040d000b0b200020012006200210a70202402003280204450d002006102c0b200341106a24000bd90103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad4298027e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b20034198026c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a20014198026e3602000b0f0b2005450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42287e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b200141286c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241286e3602000b0f0b2005450d001039000b103b000bd40103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad4288027e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b20014188026c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a20024188026e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42c1007e2204422088a722020d022004a722014100480d022002452105024002400240024002402000280200410020031b22020d002001450d010c030b200341c1006c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141c1006e3602000b0f0b2005450d001039000b103b000bd90103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42d0007e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341d0006c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141d0006e3602000b0f0b2005450d001039000b103b000bd40103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42c0037e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b200141c0036c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241c0036e3602000b0f0b2005450d001039000b103b000bd40103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42f0007e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141f0006c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241f0006e3602000b0f0b2005450d001039000b103b000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42187e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341186c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141186e3602000b0f0b2005450d001039000b103b000bd90103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42b4027e2204422088a722020d022004a722014100480d022002454102742105024002400240024002402000280200410020031b22020d002001450d010c030b200341b4026c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141b4026e3602000b0f0b2005450d001039000b103b000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff017122042001470d02200141037422024100480d0220042001464103742104024002400240024002402000280200410020031b22010d002002450d010c030b200341037422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024103763602000b0f0b2004450d001039000b103b000bd10103027f017e017f024002400240200041046a2802002001470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42307e2204422088a722030d022004a722024100480d022003454103742105024002400240024002402000280200410020011b22030d002002450d010c030b200141306c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241306e3602000b0f0b2005450d001039000b103b000bd81101167f230041f0006b22022400200241186a4189bec300410f10c501200241d8006a41a0c1c300410810c5010240024002400240024002400240410410322203450d002002420437023420022003360230200241306a41004104102f20022802302204200228023822036a20013600002002200341046a2201360238200341246a2203417f4c0d010240024020030d00410121050c010b200310322205450d010b200241003602102002200336020c20022005360208200241086a4100411010c8012002280208200228021022036a22052002290018370000200541086a200241186a41086a2900003700002002200341106a2203360210200241086a2003411010c8012002280208200228021022036a22052002290058370000200541086a200241d8006a41086a2900003700002002200341106a2203360210200241086a2003200110c80120022802082203200228021022056a2004200110c9081a2002200520016a220136021002402002280234450d002004102c0b2002200136022c20022003360228200241306a2003200110b30120022802302206450d04200228023421072002200241306a41086a28020036024420022006360240200241d8006a200241c0006a108005024020022802582204450d00200241d8006a41086a2802002101200228025c2105200241d8006a200241c0006a108005024002400240024020022802582208450d00200241e0006a2209280200210a200228025c210b200241d8006a200241c0006a1080052002280258220c450d012009280200210d200228025c210e200241d8006a200241c0006a10ea042002280258220f0d020240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d04200541ffffff3f710d030c040b2005450d03200541ffffff3f710d020c030b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d02200541ffffff3f710d010c020b200241e0006a2802002109200228025c211002400240024002400240200228024422114104490d002002280240221228000021132002201241046a36024020022011417c6a221436024420144104490d012002201241086a360240201228000421142002201141786a221536024420154104490d0220022012410c6a3602402002201141746a221536024420154104490d03201228000821152002201241106a3602402002201141706a221636024420164104490d04201228000c21162002201241146a36024020022011416c6a2217360244201741044f0d0902402009450d002009410c6c2109200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200941746a22090d000b0b02402010450d002010410c6c450d00200f102c0b0240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d06200541ffffff3f710d050c060b02402009450d002009410c6c2109200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200941746a22090d000b0b02402010450d002010410c6c450d00200f102c0b0240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d05200541ffffff3f710d040c050b02402009450d002009410c6c2109200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200941746a22090d000b0b02402010450d002010410c6c450d00200f102c0b0240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d04200541ffffff3f710d030c040b02402009450d002009410c6c2109200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200941746a22090d000b0b02402010450d002010410c6c450d00200f102c0b0240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d03200541ffffff3f710d020c030b02402009450d002009410c6c2109200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200941746a22090d000b0b02402010450d002010410c6c450d00200f102c0b0240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d02200541ffffff3f710d010c020b02402009450d002009410c6c2109200f210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200941746a22090d000b0b02402010450d002010410c6c450d00200f102c0b0240200e450d00200e41ffffff3f71450d00200c102c0b0240200b450d00200b41ffffff3f71450d002008102c0b2005450d01200541ffffff3f71450d010b2004102c0b4100210420024100360220200242013703182002410f36024c2002200241286a3602482002200241186a360254200241ec006a41013602002002420137025c200241b4bcc3003602582002200241c8006a360268200241d4006a41dcb7c000200241d8006a103e1a200235022042208620023502188410000240200228021c450d002002280218102c0b0c030b1039000b103b000b201228001021172002201141686a3602442002201241186a360240201228001421110b02402007450d002006102c0b20040d010b200041003602000c010b2000200536020420002004360200200041c4006a2011360200200041c0006a20173602002000413c6a2016360200200041386a2015360200200041346a2014360200200041306a20133602002000412c6a2009360200200041286a2010360200200041246a200f360200200041206a200d3602002000411c6a200e360200200041186a200c360200200041146a200a360200200041106a200b3602002000410c6a2008360200200041086a20013602000b0240200228020c450d002003102c0b200241f0006a24000b340020004189bec30036020420004100360200200041146a4103360200200041106a4198bec300360200200041086a420f3702000b2701017f230041d0006b22022400200241003602082000200241086a10e604200241d0006a24000bef0201057f230041306b2202240020024189bec300410f10c501200241106a41a0c1c300410810c50102400240410410322203450d002002420437022420022003360220200241206a41004104102f20022802202204200228022822036a20013600002002200341046a2201360228200341246a2203417f4c0d010240024020030d00410121050c010b200310322205450d010b2000200336020420002005360200200041086a2203410036020020004100411010c8012000280200200328020022056a220620022900003700002003200541106a2205360200200641086a200241086a29000037000020002005411010c8012000280200200328020022056a220620022900103700002003200541106a2205360200200641086a200241106a41086a29000037000020002005200110c8012000280200200328020022006a2004200110c9081a2003200020016a36020002402002280224450d002004102c0b200241306a24000f0b1039000b103b000bec0101047f230041c0006b2202240041eea3c6002103410f210441042105024002400240024002400240200141ff01710e06000102030405000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41a8a2c6001046000b41dfa3c6002103410021050c030b41c5a3c6002103411a2104410121050c020b41a8a3c6002103411d2104410221050c010b4195a3c600210341132104410321050b200041033b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b9b0201047f230041c0006b22022400419df3c5002103411621044106210502400240024002400240024002400240200141ff01710e080001020304050607000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41d4f1c5001046000b4192f3c5002103410b2104410021050c050b4186f3c5002103410c2104410121050c040b41f9f2c5002103410d2104410221050c030b41f2f2c500210341072104410321050c020b41daf2c500210341182104410421050c010b41c2f2c500210341182104410521050b20004183163b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b970201047f230041c0006b2202240041acf5c4002103411121044106210502400240024002400240024002400240200141ff01710e080001020304050607000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41c8f7c4001046000b419cf4c4002103410021050c050b41b8f4c4002103410e2104410121050c040b41d0f4c4002103410f2104410221050c030b41e8f4c4002103410c2104410321050c020b419081c700210341102104410421050c010b4184f5c4002103411f2104410521050b20004183323b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000be30401047f230041c0006b2202240041b084c70021034113210441162105024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e18000102030405060708090a0b0c0d0e0f1011121314151617000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41b88dc7001046000b4194ffc600210341112104410021050c150b41b0ffc6002103411c2104410121050c140b41d4ffc600210341192104410221050c130b41f8ffc600210341182104410321050c120b419880c700210341142104410421050c110b41b480c700210341202104410521050c100b41dc80c7002103410d2104410621050c0f0b41f480c7002103410721050c0e0b419081c700210341102104410821050c0d0b41a881c700210341142104410921050c0c0b41c481c7002103410f2104410a21050c0b0b41dc81c7002103411b2104410b21050c0a0b418082c700210341172104410c21050c090b41a082c700210341112104410d21050c080b41bc82c7002103410e21050c070b41d882c7002103410e2104410f21050c060b41f082c700210341112104411021050c050b418c83c7002103411a2104411121050c040b41b083c7002103410d2104411221050c030b41c883c700210341202104411321050c020b41f083c700210341152104411421050c010b419084c700210341182104411521050b20004183203b0100200041086a2004360200200041046a2003360200200041026a20053a0000200241c0006a24000b150020002002ad4220862001ad84200310084101460bbe0603017f017e057f230041d0016b22032400024020012002100a2204422088a72201450d002001417f6a21050240024002402004a722062d00000e020001030b41002101200341003a008901200641016a21070240034020052001460d01200341e8006a20016a200720016a2d00003a00002003200141016a22023a0089012002210120024121470d000b20034190016a41086a2207200341f1006a29000037030020034190016a41106a2208200341f9006a29000037030020034190016a41186a220920034181016a290000370300200320032900693703900120032d00682105410121010240200241ff01714121490d00200341c8006a41186a2009290300370300200341c8006a41106a2008290300370300200341c8006a41086a20072903003703002003200329039001370348410021010b200341286a41086a200341c8006a41086a290300370300200341286a41106a200341c8006a41106a290300370300200341286a41186a200341c8006a41186a2903003703002003200329034837032820010d03200341086a41186a200341286a41186a290300370300200341086a41106a200341286a41106a290300370300200341086a41086a200341286a41086a2903003703002003200329032837030841002102200341086a21010c020b0240200141ff0171450d00200341003a0089010b200341286a41086a200341c8006a41086a290300370300200341286a41106a200341c8006a41106a290300370300200341286a41186a200341c8006a41186a290300370300200320032903483703280c020b2005450d014100210502400240024020062d00010e03020100040b410221050c010b410121050b200341086a41186a200341e8006a41186a290000370300200341086a41106a200341e8006a41106a290000370300200341086a41086a200341e8006a41086a2900003703002003200329006837030841012102200341086a21010b200020053a0001200020023a0000200041026a20012900003700002000410a6a200141086a290000370000200041126a200141106a2900003700002000411a6a200141186a2900003700002006102c200341d0016a24000f0b41f2b3c800412e200341e8006a41a0b4c80041b0b4c8001040000b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000bd50101047f230041c0006b22022400419df3c500210341162104410221050240024002400240200141ff01710e0400010203000b2002411c6a41013602002002420137020c200241eccdc80036020820024104360224200241c0fcc7003602202002200241206a360218200241086a41e4c8c5001046000b41c2f2c500210341182104410021050c010b41daf2c500210341182104410121050b20004183023b0118200041003a001020004200370300200041206a20043602002000411c6a20033602002000411a6a20053a0000200241c0006a24000bad0101067f230041106b2202240020012802002103200020012802082201108f0102402001450d00200141246c2104200041086a2101034020022003108402200228020021052000200128020020022802082206102f200028020020012802006a2005200610c9081a2001200620012802006a36020020022802042206200720061b210702402006450d002007450d002005102c0b200341246a21032004415c6a22040d000b0b200241106a24000baf2305057f017e087f017e047f230041f0056b2202240041002103200241003a00c805024002400240024002400240024002400340200128020022042802042205450d01200241a8056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00c80520034120470d000b200241f0036a41186a200241a8056a41186a2903002207370300200241d0026a41086a2203200241a8056a41086a290300370300200241d0026a41106a2204200241a8056a41106a290300370300200241d0026a41186a22052007370300200220022903a8053703d002200241b0016a41186a22062005290300370300200241b0016a41106a22052004290300370300200241b0016a41086a22042003290300370300200220022903d0023703b00120024190016a41186a200629030037030020024190016a41106a200529030037030020024190016a41086a2004290300370300200220022903b00137039001200241286a200110b00320022802280d02200228022c210841002103200241003a00c8050340200128020022042802042205450d02200241a8056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00c80520034120470d000b200241f0036a41186a200241a8056a41186a2903002207370300200241d0026a41086a2203200241a8056a41086a290300370300200241d0026a41106a2204200241a8056a41106a290300370300200241d0026a41186a22052007370300200220022903a8053703d002200241f0016a41186a22062005290300370300200241f0016a41106a22052004290300370300200241f0016a41086a22042003290300370300200220022903d0023703f001200241d0016a41186a2006290300370300200241d0016a41106a2005290300370300200241d0016a41086a2004290300370300200220022903f0013703d00141002103200241003a00c8050340200128020022042802042205450d04200241a8056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00c80520034120470d000b200241f0036a41186a200241a8056a41186a2903002207370300200241d0026a41086a2203200241a8056a41086a290300370300200241d0026a41106a2204200241a8056a41106a290300370300200241d0026a41186a22052007370300200220022903a8053703d002200241b0026a41186a22062005290300370300200241b0026a41106a22052004290300370300200241b0026a41086a22042003290300370300200220022903d0023703b00220024190026a41186a200629030037030020024190026a41106a200529030037030020024190026a41086a2004290300370300200220022903b00237039002200241206a200110b00320022802200d0520022802242209200128020028020441246e2203200320094b1bad42247e2207422088a7450d040c070b0240200341ff0171450d00200241003a00c8050b200241b0016a41086a200241d0026a41086a290300370300200241b0016a41106a200241d0026a41106a290300370300200241b0016a41186a200241d0026a41186a290300370300200220022903d0023703b001200041003602040c050b0240200341ff0171450d00200241003a00c8050b200241f0016a41086a200241d0026a41086a290300370300200241f0016a41106a200241d0026a41106a290300370300200241f0016a41186a200241d0026a41186a290300370300200220022903d0023703f001200041003602040c040b200041003602040c030b0240200341ff0171450d00200241003a00c8050b200241b0026a41086a200241d0026a41086a290300370300200241b0026a41106a200241d0026a41106a290300370300200241b0026a41186a200241d0026a41186a290300370300200220022903d0023703b002200041003602040c020b2007a72203417f4c0d020240024002400240024020030d004104210a0c010b20031032220a450d010b2001200128020441016a2204360204200241003602d8042002200a3602d0042002200341246e3602d404200420012802084b0d0202402009450d00200241fd036a210b200241bb056a220c41056a210d4100210e4100210f0340200128020022032802042204450d04200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024002400240024020060e080514001402030104140b41002103200241003a00c80502400340200128020022042802042205450d01200241a8056a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00c80520034120470d000b2002200d2900003700e5052002200c2900003703e005200220022900e5053700d505200220022903e0053703d005200220022903d00537039805200220022900d50537009d0520022800af05210520022f01a805210420022d00aa05210620022800ab05210320022900b30521102002200229009d0537008d052002200229039805370388052002200229008d053700fd0420022002290388053703f804200220022900fd043700f503200220022903f8043703f003200b20022f00f5043b0000200b41026a200241f5046a41026a2d00003a0000201042808080807083210720034108762111200420064110747221042010a72106410021120c0f0b200341ff0171450d13200241003a00c8050c130b200241003a00ac05200128020022032802042204450d12200328020022052d0000210620032004417f6a360204200241013a00ac052003200541016a360200200220063a00a8052001280200220328020422040d050c110b200241003a00ac05200128020022032802042204450d11200328020022052d0000210620032004417f6a360204200241013a00ac052003200541016a360200200220063a00a8052001280200220328020422040d060c0a0b200241003a00ac05200128020022032802042204450d10200328020022052d0000210620032004417f6a360204200241013a00ac052003200541016a360200200220063a00a8052001280200220328020422040d040c070b200128020022032802042204450d0f200328020022052d0000210620032004417f6a3602042003200541016a36020020060d0f200241e0056a200110e70420022802e00522034102460d0f200241f0036a41086a200241a8056a41086a290200370300200220022902a8053703f00320022802e805210620022802e40521054104211242002107410021110c010b200241e0056a200110c60420022802e0052203450d0e20022802e805210620022802e4052105200241f0036a41086a200241a8056a41086a290200370300200220022902a8053703f0032003410876211141052112420021070b0c080b200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a00ac05200220063a00a905200128020022032802042204450d0b200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a00ac05200220063a00aa052001280200220328020422040d060c0b0b200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a00ac05200220063a00a905200128020022032802042204450d02200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a00ac05200220063a00aa052001280200220328020422040d010c020b200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a00ac05200220063a00a905200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a00ac05200220063a00aa052001280200220328020422040d020c030b200328020022052d0000210620032004417f6a3602042003200541016a360200200220063a00ab0520022802a8052104200241106a200110b00320022802100d0920012802002206280204221220022802142203490d092003417f4c0d0c0240024020030d00410121050c010b200310372205450d082001280200220628020421120b0240024020122003490d0020052006280200200310c90821122006280204221320034f0d01200320134194afc0001058000b2003450d0a2003450d0a2005102c0c0a0b2006201320036b3602042006200628020020036a3602002012450d092003ad22074220862007842210428080808070832107200441187621032010a72106410321120c040b200241003a00ac050c080b200328020022052d0000210620032004417f6a3602042003200541016a360200200220063a00ab0520022802a8052104200241086a200110b00320022802080d07200128020022062802042212200228020c2203490d072003417f4c0d0a0240024020030d00410121050c010b200310372205450d062001280200220628020421120b0240024020122003490d0020052006280200200310c90821122006280204221320034f0d01200320134194afc0001058000b2003450d082003450d082005102c0c080b2006201320036b3602042006200628020020036a3602002012450d072003ad22074220862007842210428080808070832107200441187621032010a72106410221120c020b200241003a00ac050c060b200328020022052d0000210620032004417f6a3602042003200541016a360200200220063a00ab0520022802a8052104200241186a200110b00320022802180d05200128020022062802042212200228021c2203490d052003417f4c0d080240024020030d00410121050c010b200310372205450d042001280200220628020421120b0240024020122003490d0020052006280200200310c90821122006280204221320034f0d01200320134194afc0001058000b2003450d062003450d062005102c0c060b2006201320036b3602042006200628020020036a3602002012450d052003ad22074220862007842210428080808070832107200441187621032010a72106410121120b200f41016a210f200241d0026a41086a200241f0036a41086a2903002210370300200241e0046a41086a22132010370300200220022903f00322103703d002200220103703e0042011410874200341ff017172211420072006ad8421070240200e20022802d404470d00200241d0046a200e410110f20120022802d804210e20022802d004210a0b200a200e41246c6a2203200737000c2003200536000820032014360004200320043b0001200320123a0000200341036a20044110763a0000200320022903e0043700142003411c6a20132903003700002002200e41016a220e3602d804200f2009470d000b2001280204210420022802d004210a0b20012004417f6a360204200a450d0320022902d4042107200241f0006a41186a220320024190016a41186a290300370300200241f0006a41106a220420024190016a41106a290300370300200241f0006a41086a220520024190016a41086a290300370300200241d0006a41086a2206200241d0016a41086a290300370300200241d0006a41106a2201200241d0016a41106a290300370300200241d0006a41186a220e200241d0016a41186a290300370300200241306a41086a220920024190026a41086a290300370300200241306a41106a220f20024190026a41106a290300370300200241306a41186a221220024190026a41186a2903003703002002200229039001370370200220022903d0013703502002200229039002370330200020073702082000200a36020420002008360200200041106a2002290370370200200041186a2005290300370200200041206a2004290300370200200041286a2003290300370200200041306a2002290350370200200041386a2006290300370200200041c0006a2001290300370200200041c8006a200e290300370200200041e8006a2012290300370200200041e0006a200f290300370200200041d8006a2009290300370200200041d0006a20022903303702000c040b1039000b200241003a00ac050b200241d0046a102b0b200041003602040b200241f0056a24000f0b103b000bd80e03057f037e067f23004190046b2202240041002103200241003a00c8032001280204417f6a210402400240024002400240024002400240024003402004417f460d01200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2204200241a8036a41086a290300370300200241d0036a41106a2203200241a8036a41106a290300370300200241d0036a41186a2206200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d0120024188016a41086a2004290300220737030020024188016a41106a2003290300220837030020024188016a41186a20062903002209370300200241e8006a41186a2009370300200241e8006a41106a2008370300200241e8006a41086a2007370300200220022903d00322073703a8022002200737038801200220073703682002200110870220022802000d042002280204210641002103200241003a00c8032001280204417f6a210403402004417f460d03200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2203200241a8036a41086a290300370300200241d0036a41106a220a200241a8036a41106a290300370300200241d0036a41186a220b200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d03200241c8016a41086a20032903002207370300200241c8016a41106a200a2903002208370300200241c8016a41186a200b2903002209370300200241a8016a41186a2009370300200241a8016a41106a2008370300200241a8016a41086a2007370300200220022903d00322073703a802200220073703c801200220073703a80141002103200241003a00c80303402004417f460d06200241a8036a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8032004417f6a21042005210320054120470d000b200241d0036a41086a2204200241a8036a41086a290300370300200241d0036a41106a2203200241a8036a41106a290300370300200241d0036a41186a220a200241a8036a41186a290300370300200220022903a8033703d003200541ff0171411f4d0d0620024188026a41086a2004290300220737030020024188026a41106a2003290300220837030020024188026a41186a200a2903002209370300200241e8016a41186a2009370300200241e8016a41106a2008370300200241e8016a41086a2007370300200220022903d00322073703a8022002200737038802200220073703e801200241a8036a200110860220022802a8032204450d0720022902ac032107200241c8006a41186a2201200241e8006a41186a290300370300200241c8006a41106a2203200241e8006a41106a290300370300200241c8006a41086a2205200241e8006a41086a290300370300200241286a41086a220a200241a8016a41086a290300370300200241286a41106a220b200241a8016a41106a290300370300200241286a41186a220c200241a8016a41186a290300370300200241086a41086a220d200241e8016a41086a290300370300200241086a41106a220e200241e8016a41106a290300370300200241086a41186a220f200241e8016a41186a29030037030020022002290368370348200220022903a801370328200220022903e801370308200020073702082000200436020420002006360200200041106a2002290348370200200041186a2005290300370200200041206a2003290300370200200041286a2001290300370200200041306a2002290328370200200041386a200a290300370200200041c0006a200b290300370200200041c8006a200c290300370200200041e8006a200f290300370200200041e0006a200e290300370200200041d8006a200d290300370200200041d0006a20022903083702000c080b200341ff0171450d00200241003a00c8030b20024188016a41086a200241a8026a41086a29030037030020024188016a41106a200241a8026a41106a29030037030020024188016a41186a200241a8026a41186a290300370300200220022903a80237038801200041003602040c060b200341ff0171450d00200241003a00c8030b200241c8016a41086a200241a8026a41086a290300370300200241c8016a41106a200241a8026a41106a290300370300200241c8016a41186a200241a8026a41186a290300370300200220022903a8023703c801200041003602040c040b200041003602040c030b200341ff0171450d00200241003a00c8030b20024188026a41086a200241a8026a41086a29030037030020024188026a41106a200241a8026a41106a29030037030020024188026a41186a200241a8026a41186a290300370300200220022903a80237038802200041003602040c010b200041003602040b20024190046a24000b830302027f027e23004180016b220224002000280200210002400240024002400240200128020022034110710d00200041086a29030021042000290300210520034120710d01200520042001106c21000c020b200041086a290300210420002903002105418001210002400340024020000d00410021000c020b200220006a417f6a2005a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d030b200141a888c0004102200220006a41800120006b104d21000c010b418001210002400340024020000d00410021000c020b200220006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d030b200141a888c0004102200220006a41800120006b104d21000b20024180016a240020000f0b2000418001419888c0001058000b2000418001419888c0001058000bba0201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d002000280200210420034120710d012004ad2001104921000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a888c0004102200220006a4180016a410020006b104d21000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d02200141a888c0004102200220006a4180016a410020006b104d21000b20024180016a240020000f0b2004418001419888c0001058000b2004418001419888c0001058000b100020002802002000280204200110690bf10101067f23004180016b220224002001410c6a28020021032001280208210420012802002205210602402005410471450d0020012005410872220636020020040d0020014281808080a0013702080b2001200641047236020020002802002100410021060340200220066a41ff006a2000410f712207413072200741d7006a2007410a491b3a00002006417f6a2106200041047622000d000b024020064180016a2200418101490d002000418001419888c0001058000b200141a888c0004102200220066a4180016a410020066b104d21062001200336020c200120043602082001200536020020024180016a240020060bf00101037f200028020021022001200141086a22032802004104102f200128020020032802006a20023600002003200328020041046a220236020020002d00042104200120024101102f200128020020032802006a21020240024020044101460d00200241003a0000200328020041016a21030c010b200241013a00002003200328020041016a2202360200200120024120102f200128020020032802006a2202200041056a290000370000200241186a2000411d6a290000370000200241106a200041156a290000370000200241086a2000410d6a290000370000200328020041206a21030b200141086a20033602000bd40d030b7f017e057f230041306b22022400200241206a200110b3050240024002400240024002400240024002400240024020022802202203450d00200241286a280200210420022802242105200241086a200110b00320022802080d0941042106200228020c220720012802002802044104762208200820074b1b22094104742208417f4c0d0502402009450d00200810322206450d070b2001200128020441016a220a36020441002108200241003602182002200936021420022006360210200a20012802084b0d0802402007450d0041002108034020012802002209280204220a4104490d092009280200220b280000210c2009200a417c6a3602042009200b41046a360200200241206a200110c60420022802202209450d092002290224210d024020082002280214470d00200241106a2008410110ed0120022802182108200228021021060b200620084104746a220820093602042008200c360200200841086a200d3702002002200228021841016a22083602182007417f6a22070d000b2001280204210a20022802142109200228021021060b2001200a417f6a3602042006450d0920012802002207280204220a450d032007280200220b2d0000210c2007200a417f6a3602042007200b41016a36020041002107200c0e020201030b200041003602000c090b200241206a200110c60420022802202207450d012002290224210d0b200241206a200110c604200da7210a2002280220220c0d012000410036020002402007450d00200a450d002007102c0b02402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d072005410c6c450d072003102c0c070b2000410036020002402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d062005410c6c450d062003102c0c060b2002280224210e024002402001280200220b280204220f4104490d00200241286a2802002110200b28020022112800002112200b200f417c6a360204200b201141046a36020020012802002201280204220b4104490d012000200536020420002003360200200041306a20123602002000412c6a2010360200200041286a200e360200200041246a200c360200200041206a200d422088a73602002000411c6a200a360200200041186a2007360200200041146a2008360200200041106a20093602002000410c6a2006360200200041086a20043602002001280200220828000021092001200b417c6a3602042001200841046a360200200041346a20093602000c070b200041003602000240200e450d00200c102c0b02402007450d00200a450d002007102c0b02402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d062005410c6c450d062003102c0c060b200041003602000240200e450d00200c102c0b02402007450d00200a450d002007102c0b02402008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b0240200941ffffffff0071450d002006102c0b02402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d052005410c6c450d052003102c0c050b103b000b1039000b200228021021062008450d0020084104742108200641046a210103400240200141046a280200450d002001280200102c0b200141106a2101200841706a22080d000b0b20064100200228021422011b2208450d00200141ffffffff0071450d002008102c0b2000410036020002402004450d002004410c6c21082003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b2005450d002005410c6c450d002003102c0b200241306a24000b8a0503037f017e057f230041206b22022400200241086a200110b003024002402002280208450d00200041003602000c010b0240024002400240024002400240200228020c22032001280200280204410c6e2204200420034b1bad420c7e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b200410322206450d020b2001200128020441016a2207360204200241003602182002200636021020022004410c6e360214200720012802084b0d022003450d044100210803402002200110b00320022802000d0620012802002207280204220920022802042204490d062004417f4c0d010240024020040d004101210a0c010b20041037220a450d032001280200220728020421090b0240024020092004490d00200a2007280200200410c90821092007280204220a20044f0d012004200a4194afc0001058000b2004450d072004450d07200a102c0c070b2007200a20046b3602042007200728020020046a3602002009450d062004ad22054220862005842105024020082002280214470d00200241106a2008410110ec0120022802182108200228021021060b20062008410c6c6a22042005370204200420093602002002200228021841016a22083602182003417f6a2203450d040c000b0b103b000b1039000b200041003602000c030b200128020421070b2000200229031037020020012007417f6a360204200041086a200241106a41086a2802003602000c020b20004100360200200228021021062008450d002008410c6c21012006210403400240200441046a280200450d002004280200102c0b2004410c6a2104200141746a22010d000b0b20064100200228021422041b2201450d002004410c6c450d002001102c0b200241206a24000bbb17030a7f077e0d7f230041b0066b22022400024002400240024002400240024002400240024002400240200128020422034104490d0020012802002204280000210520012003417c6a22063602042001200441046a220736020041002108200241003a008805024002400340200821092006450d01200241e8046a20096a20072d00003a000020012006417f6a22063602042001200741016a22073602002002200941016a22083a00880520084120470d000b200241b0056a41086a2206200241e8046a41086a290300370300200241b0056a41106a220a200241e8046a41106a290300370300200241b0056a41186a220b200241e8046a41186a290300370300200220022903e8043703b005200841ff0171411f4d0d01200241e8016a41086a2006290300370300200241e8016a41106a200a290300370300200241e8016a41186a200b290300370300200220022903b0053703e80141002106200241003a008805200420086a210a200820036b41046a2104200320096b417a6a21080340200420066a450d04200241e8046a20066a200720066a2d00003a0000200120083602042001200a20066a41056a3602002002200641016a22093a0088052008417f6a21082009210620094120470d000b200241b0056a41086a2204200241e8046a41086a290300370300200241b0056a41106a2203200241e8046a41106a290300370300200241b0056a41186a220b200241e8046a41186a290300370300200220022903e8043703b005200941ff0171411f4d0d04200720096a210620024188026a41086a200429030037030020024188026a41106a200329030037030020024188026a41186a200b290300370300200220022903b0053703880241002107200241003a008805200a20096a210403402008417f460d06200241e8046a20076a20062d00003a0000200120083602042001200420076a41056a3602002002200741016a22093a0088052008417f6a2108200641016a21062009210720094120470d000b200241b0056a41086a2207200241e8046a41086a290300370300200241b0056a41106a2204200241e8046a41106a290300370300200241b0056a41186a220a200241e8046a41186a290300370300200220022903e8043703b005200941ff0171411f4d0d06200241a8026a41086a2007290300370300200241a8026a41106a2004290300370300200241a8026a41186a200a290300370300200220022903b0053703a80241002107200241003a00880503402008417f460d08200241e8046a20076a20062d00003a0000200120083602042001200641016a22063602002002200741016a22093a0088052008417f6a21082009210720094120470d000b200241b0056a41086a2207200241e8046a41086a290300370300200241b0056a41106a2204200241e8046a41106a290300370300200241b0056a41186a220a200241e8046a41186a290300370300200220022903e8043703b005200941ff0171411f4d0d08200241c8026a41086a2007290300370300200241c8026a41106a2004290300370300200241c8026a41186a200a290300370300200220022903b0053703c80241002107200241003a00880503402008417f460d0a200241e8046a20076a20062d00003a0000200120083602042001200641016a22063602002002200741016a22093a0088052008417f6a21082009210720094120470d000b200241b0056a41086a2207200241e8046a41086a290300370300200241b0056a41106a2204200241e8046a41106a290300370300200241b0056a41186a220a200241e8046a41186a290300370300200220022903e8043703b005200941ff0171411f4d0d0a200241e8026a41086a2007290300370300200241e8026a41106a2004290300370300200241e8026a41186a200a290300370300200220022903b0053703e80241002107200241003a00a80503402008417f460d0c200241e8046a20076a20062d00003a0000200120083602042001200641016a22063602002002200741016a22093a00a8052008417f6a210820092107200941c000470d000b200241b0056a41086a2207200241e8046a41086a290300370300200241b0056a41106a2208200241e8046a41106a290300370300200241b0056a41186a2201200241e8046a41186a290300370300200241b0056a41206a2206200241e8046a41206a290300370300200241b0056a41286a2204200241e8046a41286a290300370300200241b0056a41306a220a200241e8046a41306a290300370300200241b0056a41386a2203200241e8046a41386a290300370300200220022903e8043703b005200941ff0171413f4d0d0c200241a8046a41386a22092003290300370300200241a8046a41306a200a290300220c370300200241a8046a41286a2004290300220d370300200241a8046a41206a2006290300220e370300200241a8046a41186a2001290300220f370300200241a8046a41106a20082903002210370300200241a8046a41086a20072903002211370300200220022903b00522123703a804200241086a41306a2207200c370300200241086a41286a2208200d370300200241086a41206a2201200e370300200241086a41186a2206200f370300200241086a41106a22042010370300200241086a41086a220a2011370300200241086a41386a2203200929030037030020022012370308200241c8016a41186a2209200241e8016a41186a290300370300200241c8016a41106a220b200241e8016a41106a290300370300200241c8016a41086a2213200241e8016a41086a290300370300200220022903e8013703c801200241a8016a41186a221420024188026a41186a290300370300200241a8016a41106a221520024188026a41106a290300370300200241a8016a41086a221620024188026a41086a29030037030020022002290388023703a80120024188016a41186a2217200241a8026a41186a29030037030020024188016a41106a2218200241a8026a41106a29030037030020024188016a41086a2219200241a8026a41086a290300370300200220022903a80237038801200241e8006a41186a221a200241c8026a41186a290300370300200241e8006a41106a221b200241c8026a41106a290300370300200241e8006a41086a221c200241c8026a41086a290300370300200220022903c802370368200241c8006a41186a221d200241e8026a41186a290300370300200241c8006a41106a221e200241e8026a41106a290300370300200241c8006a41086a221f200241e8026a41086a290300370300200220022903e80237034820002005360204200041086a20022903c801370200200041106a2013290300370200200041186a200b290300370200200041206a2009290300370200200041286a20022903a801370200200041306a2016290300370200200041386a2015290300370200200041c0006a2014290300370200200041c8006a200229038801370200200041d0006a2019290300370200200041d8006a2018290300370200200041e0006a201729030037020020004180016a201a290300370200200041f8006a201b290300370200200041f0006a201c290300370200200041e8006a2002290368370200200041a0016a201d29030037020020004198016a201e29030037020020004190016a201f29030037020020004188016a2002290348370200200041e0016a2003290300370200200041d8016a2007290300370200200041d0016a2008290300370200200041c8016a2001290300370200200041c0016a2006290300370200200041b8016a2004290300370200200041b0016a200a290300370200200041a8016a2002290308370200200041003602000c0d0b200941ff0171450d00200241003a0088050b200041013602000c0b0b200041013602000c0a0b200641ff0171450d00200241003a0088050b200041013602000c080b200741ff0171450d00200241003a0088050b200041013602000c060b200741ff0171450d00200241003a0088050b200041013602000c040b200741ff0171450d00200241003a0088050b200041013602000c020b200741ff0171450d00200241003a00a8050b200041013602000b200241b0066a24000bca0201047f20002802002102200120002802082203108f0102402003450d0020022003410c6c6a210303402002280200200241086a280200200110bb012002410c6a22022003470d000b0b200028020c21022001200041146a2802002203108f0102402003450d00200220034104746a2104200141086a2103034020022802002105200120032802004104102f200128020020032802006a20053600002003200328020041046a360200200241046a2802002002410c6a280200200110bb01200241106a22022004470d000b0b2001200041186a10b60520002802242000412c6a280200200110bb01200028023021032001200141086a22022802004104102f200128020020022802006a20033600002002200228020041046a220336020020002802342105200120034104102f200128020020022802006a20053600002002200228020041046a3602000b7a01027f0240200128020022020d002000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22032802004101102f200028020020032802006a41013a00002003200328020041016a3602002002200141086a280200200010bb010bd30201057f230041106b2202240020002802002000280208200110bb01200028020c21032001200141086a22042802004104102f200128020020042802006a20033600002004200428020041046a3602002001200041106a10b8050240412010322203450d002002422037020420022003360200200241004120102f20022802002205200228020822066a22032000290020370000200341086a200041286a290000370000200341106a200041306a290000370000200341186a200041386a2900003700002002200641206a2203360208200120042802002003102f200128020020042802006a2005200310c9081a2004200428020020036a220336020002402002280204450d002005102c200141086a28020021030b200028021c2100200120034104102f2001280200200141086a22012802006a20003600002001200128020041046a360200200241106a24000f0b1039000bc60201077f230041106b2202240020012802002103200020012802082201108f01024002402001450d002003200141246c6a2104200041086a2101034020032802002105200020012802004104102f200028020020012802006a20053600002001200128020041046a360200412010322205450d022002422037020420022005360200200241004120102f20022802002206200228020822076a2205200341046a290000370000200541086a2003410c6a290000370000200541106a200341146a290000370000200541186a2003411c6a2900003700002002200741206a2205360208200020012802002005102f200028020020012802006a2006200510c9081a2001200128020020056a36020020022802042205200820051b210802402005450d002008450d002006102c0b200341246a22032004470d000b0b200241106a24000f0b1039000ba90d02037f017e230041e0006b2202240002402001450d00200241d4006a41043602002002411c6a41023602002002420237020c20024194c7c3003602082002410436024c2002418cc7c3003602482002410036025c200241c4b5c8003602582002200241c8006a3602182002200241d8006a360250200241086a41a4c7c3001046000b200241c0006a41002902ecde47370300200241086a41306a220141002902e4de47370300200241306a41002902dcde47370300200241286a41002902d4de47370300200241206a41002902ccde47370300200241186a220341002902c4de47370300200241086a41086a41002902bcde47370300200241002902b4de473703082002410036025020024201370348200241c8006a200241086a108003200241c8006a2003108003200241c8006a20022802504104102f200228024820022802506a41003600002002200228025041046a2203360250200241c8006a20034104102f200228024820022802506a410a3600002002200228025041046a2203360250200241c8006a20034104102f200228024820022802506a41003600002002200228025041046a220336025020012802002101200241c8006a20034101102f200228024820022802506a41303a00002002200228025041016a2203360250200241c8006a20034108102f200228024820022802506a20012900003700002002200228025041086a220336025020012802082104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a200129000c3700002002200228025041086a220336025020012802142104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900183700002002200228025041086a220336025020012802202104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900243700002002200228025041086a2203360250200128022c2104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900303700002002200228025041086a220336025020012802382104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a200129003c3700002002200228025041086a220336025020012802442104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900483700002002200228025041086a220336025020012802502104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900543700002002200228025041086a2203360250200128025c2104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900603700002002200228025041086a220336025020012802682104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a200129006c3700002002200228025041086a220336025020012802742104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a20012900783700002002200228025041086a22033602502001280280012104200241c8006a20034104102f200228024820022802506a20043600002002200228025041046a2203360250200241c8006a20034108102f200228024820022802506a2001290084013700002002200228025041086a2203360250200128028c012101200241c8006a20034104102f200228024820022802506a20013600002002200228025041046a2201360250200241c8006a20014104102f200228024820022802506a41003600002002280250210120023502482105200241086a10ff02200241e0006a24002005200141046aad422086840bb61d03067f017e037f230041e00d6b220224002002428080808080203702f409200220013602c40d2002200041c4b5c80020011b3602c00d2002200241c00d6a3602f009200241106a200241f0096a10ab050240024002402002280214450d0020024188026a200241106a41f00010c9081a200241106a200241f0096a10bb0520022802100d0120024188026a410472102b0b20024188016a200241f8026a41f40010c9081a0c010b200241c8056a41086a2200200241106a41086a280200360200200220022903103703c8052002280288022103200228028c022101200241b0066a20024188026a41086a41e80010c9081a200241b0066a41f0006a2000280200360200200220022903c80537029807200241f8026a200241b0066a41f40010c9081a20024188016a200241f8026a41f40010c9081a2001450d00200220013602840a200220033602800a200241800a6a41086a20024188016a41f40010c90821000240024020022802f009280204450d00200241800a6a410472102b20022802f00a21040240200241f80a6a2802002201450d00200141c0036c210020044198016a210103402001108302200141c0036a2101200041c07c6a22000d000b0b41002101200241f40a6a2802002200450d01200041c0036c450d012004102c0c010b200241b0066a200041f40010c9081a0b2001450d00200241106a200241b0066a41f40010c9081a2002200136028c01200220033602880120024188016a41086a200241106a41f40010c9081a20024188016a10fe020240024002400240024002402002280288012201450d00200241f8026a41c1dcc700410610c501200241b0066a41fda3c600410910c50120022001417f6a3602f009200241c8056a200241f0096a410410c7012002418c0a6a200241f0096a41046a3602002002200241c8056a41086a3602840a2002200241f0096a3602880a2002200241c8056a3602800a20024188026a200241800a6a107e02400240200228029002220141206a2200417f4c0d000240024020000d00410121030c010b200010322203450d020b200241003602d005200220003602cc05200220033602c805200241c8056a4100411010c80120022802c80520022802d00522006a220320022900f802370000200341086a200241f8026a41086a2900003700002002200041106a22003602d005200241c8056a2000411010c80120022802c80520022802d00522006a220320022900b006370000200341086a200241b0066a41086a22042900003700002002200041106a22033602d0052002280288022100200241c8056a2003200110c80120022802c805220320022802d00522056a2000200110c9081a2002200520016a22013602d0050240200228028c02450d002000102c0b200241800a6a2003200110c9012004200241890a6a290000370300200241b0066a41106a200241910a6a290000370300200241b0066a41186a2201200241990a6a290000370300200220022900810a3703b0060240024020022d00800a4101460d00200241f8026a41186a420037030020024188036a420037030020024180036a4200370300200242003703f8020c010b200241f8026a41186a2001290300370300200241f8026a41106a200241b0066a41106a290300370300200241f8026a41086a200241b0066a41086a290300370300200220022903b0063703f8020b024020022802cc05450d002003102c0b200241f8026a20024198016a412010cc080d0220024180026a280200210120022802f80121002002410036028003200242043703f802200241f8026a4100200110ec01200228028003210302402001450d00200141c0036c210420022802f8022003410c6c6a21010340200220003602b006200241800a6a200241b0066a108102200141086a200241800a6a41086a280200360200200120022903800a370200200341016a21032001410c6a2101200041c0036a2100200441c07c6a22040d000b0b2002200336028003200241b8066a2003360200200220022903f8023703b006200241800a6a200241b0066a10bc050240200241d8016a2201200241800a6a412010cc08450d0041e7bdc800ad4280808080e0018410002001ad42808080808004841002200241800a6aad428080808080048410020b2001200241800a6a412010cc080d0310bd05200241fc016a280200210620022802f8012105200228028002210320024188026a20024188016a41f00010c9081a2005200341c0036c6a2100200228028802210720052101024002402003450d00200241b0066a41f0006a21042005210102400340200241c8056a200141e80010c9081a200141e8006a2903002108200241f8026a200141f0006a41d00210c9081a20084203510d01200241b0066a200241c8056a41e80010c9081a20022008370398072004200241f8026a41d00210c9081a2002200241b0066a3602f009200241800a6a200241f0096a10810220022802880a2103024020022802840a450d0020022802800a102c0b200241800a6a200241b0066a41c00310c9081a200241003602c00d200241f0096a200241800a6a2003200241c00d6a10880320022d00f0094101460d08200141c0036a22012000470d000c030b0b200141c0036a21010b20002001460d00034020014198016a1083022000200141c0036a2201470d000b0b02402006450d00200641c0036c450d002005102c0b10be05200710bf05024010c005450d00200241800a6a10c105200220024188026a410c6a28020022053602dc0d2002200241800a6a410c6a28020022013602d00d20052001470d082005450d0720022802840a2106200228028c0221074100210341d1cbc000ad4280808080c002842108034002400240200720036a22012d00002204200620036a22002d0000470d0002400240024002400240024020040e06000102030405000b20072006460d06200141016a200041016a412010cc080d050c060b024020072006460d00200141016a280000200041016a280000470d050b200141106a2802002209200041106a280200470d04200141086a280200220a200041086a280200220b460d05200a200b200910cc080d040c050b024020072006460d00200141016a280000200041016a280000470d040b200141106a2802002209200041106a280200470d03200141086a280200220a200041086a280200220b460d04200a200b200910cc080d030c040b024020072006460d00200141016a280000200041016a280000470d030b200141106a2802002209200041106a280200470d02200141086a280200220a200041086a280200220b460d03200a200b200910cc080d020c030b200141046a2802002209200041046a280200470d012009450d02200141086a280200200041086a280200470d012001410c6a2802002000410c6a280200470d010c020b2001410c6a28020022092000410c6a280200470d00200141046a280200220a200041046a280200220b460d01200a200b200910cc08450d010b20081000200241b0066a200110840220023502b80642208620022802b0062204ad841002024020022802b406450d002004102c0b200241b0066a200010840220023502b80642208620022802b0062204ad841002024020022802b406450d002004102c0b20012d000020002d00002204470d080b024002400240024002400240024020040e06000102030405000b20072006460d05200141016a200041016a412010cc080d0d0c050b024020072006460d00200141016a280000200041016a280000470d0d0b200141106a2802002204200041106a280200470d0c200141086a2802002201200041086a2802002200460d0420012000200410cc080d0c0c040b024020072006460d00200141016a280000200041016a280000470d0c0b200141106a2802002204200041106a280200470d0b200141086a2802002201200041086a2802002200460d0320012000200410cc080d0b0c030b024020072006460d00200141016a280000200041016a280000470d0b0b200141106a2802002204200041106a280200470d0a200141086a2802002201200041086a2802002200460d0220012000200410cc080d0a0c020b200141046a2802002204200041046a280200470d092004450d01200141086a280200200041086a280200470d092001410c6a2802002000410c6a280200460d010c090b2001410c6a28020022042000410c6a280200470d08200141046a2802002201200041046a2802002200460d0020012000200410cc080d080b200341246a21032005417f6a22050d000c080b0b41f0f1c000411e4190f2c000103c000b103b000b1039000b41f8efc000411c4194f0c000103c000b41a4f0c000412441c8f0c000103c000b200241086a20022f00f10920022d00f30941107472108e0320022903082108200241940a6a4101360200200242013702840a200241b4b5c8003602800a200241043602d40d200220083703c00d2002200241d00d6a3602900a2002200241c00d6a3602d00d200241800a6a41d8f0c0001046000b4180f1c000412741a8f1c000103c000b024020024188026a41306a2201200241800a6a41306a2200412010cc08450d0041e7bdc800ad4280808080e0018410002001ad428080808080048410022000ad428080808080048410020b024020012000412010cc08450d0041b8f1c000412841e0f1c000103c000b200241800a6a410472102b20024188026a410472102b200241e00d6a240042010f0b200241f8026a41146a4109360200200241f8026a410c6a411c360200200241c8056a41146a41033602002002200241dc0d6a3602c00d2002200241d00d6a3602f009200241b0066a41146a4100360200200242033702cc05200241c0bbc4003602c8052002411c3602fc02200241c4b5c8003602c006200242013702b406200241e8f0c0003602b0062002200241f8026a3602d8052002200241b0066a360288032002200241f0096a360280032002200241c00d6a3602f802200241c8056a41f0f0c0001046000b20024184036a4104360200200241940a6a4102360200200242023702840a20024194c7c3003602800a200241043602fc0220024198c8c3003602f8022002410036028c01200241c4b5c800360288012002200241f8026a3602900a200220024188016a36028003200241800a6a41a4c7c3001046000bca0403037f017e027f230041d00a6b22022400200241086a200110b003024002402002280208450d00200041003602000c010b02400240200228020c2203200128020028020441c0036e2204200420034b1bad42c0037e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410322206450d020b2001200128020441016a220736020420024100360218200220063602102002200441c0036e360214024002400240200720012802084b0d0002402003450d0020024190076a41f0006a210741002104034020024190076a200110af03200241a8066a20024190076a41e80010c9081a20022903f8072105200241d8036a200741d00210c9081a20054203510d03200241f0026a200241a8066a41e80010c9081a200241206a200241d8036a41d00210c9081a024020042002280214470d00200241106a200410980520022802182104200228021021060b2006200441c0036c6a200241f0026a41e80010c90822042005370368200441f0006a200241206a41d00210c9081a2002200228021841016a22043602182003417f6a22030d000b200128020421070b2000200229031037020020012007417f6a360204200041086a200241106a41086a2802003602000c050b200041003602000c010b20004100360200200228021021062004450d00200441c0036c210120064198016a210403402004108302200441c0036a2104200141c07c6a22010d000b0b20064100200228021422041b2201450d02200441c0036c450d022001102c0c020b103b000b1039000b200241d00a6a24000bd50301097f230041206b220224000240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d00410121060c010b200410322206450d020b2002410036020820022004360204200220063602002003200210770240024020030d0020022802002107200228020821060c010b20052003410c6c6a210820052104034020042802002109200441086a280200220620021077200220022802082006102f200228020022072002280208220a6a2009200610c9081a2002200a20066a22063602082004410c6a22042008470d000b0b20022802042109200241186a220a2006ad4220862007ad841006220441186a290000370300200241106a2206200441106a290000370300200241086a2208200441086a290000370300200220042900003703002004102c200041186a200a290300370000200041106a2006290300370000200041086a20082903003700002000200229030037000002402009450d002007102c0b02402003450d002003410c6c21062005210403400240200441046a280200450d002004280200102c0b2004410c6a2104200641746a22060d000b0b0240200141046a2802002204450d002004410c6c450d002005102c0b200241206a24000f0b103b000b1039000b0400100f0bcf0201077f230041c0006b22002400200041086a4186a4c600411010c601200028020c21010240200028020822024101470d004186a4c600411010b4010b200041286a22034200370300200041106a41106a22044200370300200041106a41086a2205420037030020004200370310200041306a41c1dcc700410610c5012005200041306a41086a220629000037030020002000290030370310200041306a419cccc600410e10c501200320062900003703002004200029003037030020002001410020021b360230200041106a4120200041306a410410a70220034200370300200442003703002005420037030020004200370310200041306a41c1dcc700410610c5012005200629000037030020002000290030370310200041306a41b0d1c600410e10c5012003200629000037030020042000290030370300200041106a41012000108703200041c0006a24000be20c04087f017e077f037e230041a0026b2201240020014180026a41186a2202420037030020014180026a41106a2203420037030020014180026a41086a22044200370300200142003703800220014180026a41ac95c400410d10c501200141d0006a41c695c400410c10c5012002200141d0006a41086a220529000037030020032001290050370300200141d0006a20014180026a10f5022001280290012103200128029401210620012802a8012107200141d0006a41186a22024200370300200141d0006a41106a22084200370300200542003703002001420037035020014180026a41bee8c700410d10c50120052004290000370300200120012900800237035020014180026a41b4edc700410f10c50120022004290000370300200820012900800237030020014180026a200141d0006a10f5042001280280022104200520014180026a410c6a28020036020020012001290284023703500240024020040d0020014200370308200142043703000c010b2001410c6a200528020036020020012004360200200120012903503702040b42002109200141e8006a4200370300200141e0006a4200370300200141d0006a41086a220542003703002001420037035020014180026a41bee8c700410d10c501200520014180026a41086a2204290000370300200120012900800237035020014180026a41fcefc700410910c501200841086a2004290000370000200820012900800237000020014180026a200141d0006a10f90402400240200128028002220a0d004104210a0c010b200141d0006a412010b40120012902840221090b2009a7210b02402009422088a72205450d0041002006200741024622041b210c4100200320041b210d200541346c2103200a412c6a2105200141d0006a410472210e0340200541586a280200210f2005415c6a2d00002102200141d0006a41186a22062005415d6a220441186a290000370300200141d0006a41106a2207200441106a290000370300200141d0006a41086a2210200441086a2900003703002001200429000037035020024102460d0120052802002104200141106a41186a20062903002209370300200141106a41106a20072903002211370300200141106a41086a20102903002212370300200120012903502213370310200141306a41186a22062009370300200141306a41106a22072011370300200141306a41086a221020123703002001201337033002402002410171450d0020014180026a41186a2202200629030037030020014180026a41106a2206200729030037030020014180026a41086a220720102903003703002001200129033037038002200441016a2204200c4b0d00200e200129038002370200200e41086a2007290300370200200e41106a2006290300370200200e41186a20022903003702002001200f360250200120043602742001200141d0006a200d109d010b200541346a21052003414c6a22030d000b0b0240200b450d00200b41346c450d00200a102c0b200141306a41086a200141086a290300370300200120012903002209370330024002402009a722050d00200141e8006a4200370300200141e0006a4200370300200141d0006a41086a220542003703002001420037035020014180026a41bee8c700410d10c501200520014180026a41086a2204290000370300200120012900800237035020014180026a41b4edc700410f10c501200841086a20042900003700002008200129008002370000200141d0006a412010b4010c010b200141e8006a4200370300200141e0006a4200370300200141d0006a41086a220442003703002001420037035020014180026a41bee8c700410d10c501200420014180026a41086a2202290000370300200120012900800237035020014180026a41b4edc700410f10c501200841086a20022900003700002008200129008002370000200141d0006a200141306a108e0520012802342204450d002004412c6c450d002005102c0b200141e8006a22054200370300200141e0006a22044200370300200141d0006a41086a420037030020014200370350200141d0006a41f6ddc700410b10c50120014180026a41b0f0c600410e10c501200520014180026a41086a290000370300200420012900800237030020014180026a200141d0006a412010b30102402001280280022205450d000240200128028402450d002005102c0b200141d0006a412010b4010b2000109806200141a0026a24000b070010094101460be523020a7f017e230041c0026b2201240020014190016a41186a2202420037030020014190016a41106a2203420037030020014190016a41086a220442003703002001420037039001200141d0016a41c1dcc700410610c5012004200141d0016a41086a2205290000370300200120012900d00137039001200141d0016a41b0d1c600410e10c50120022005290000370300200320012900d00137030020014190016a412010b4012002420037030020034200370300200442003703002001420037039001200141d0016a41c1dcc700410610c50120042005290000370300200120012900d00137039001200141d0016a419cccc600410e10c50120022005290000370300200320012900d00137030020014190016a412010b4012002420037030020034200370300200442003703002001420037039001200141d0016a41c1dcc700410610c50120042005290000370300200120012900d00137039001200141d0016a41f8ccc600411010c50120022005290000370300200320012900d00137030020014190016a412010b4012002420037030020034200370300200442003703002001420037039001200141d0016a41c1dcc700410610c50120042005290000370300200120012900d00137039001200141d0016a4196a4c600410610c50120022005290000370300200320012900d001370300200141086a20014190016a412010c601200128020c210620012802082107200141f8016a41186a22084200370300200141f8016a41106a22094200370300200141f8016a41086a220a4200370300200142003703f801200141d0016a41c1dcc700410610c501200a2005290000370300200120012900d0013703f801200141d0016a41a2a4c600410a10c50120082005290000370300200920012900d001370300200141d0016a200141f8016a412010c90120012d00d00121052002200141e9016a2900003703002003200141e1016a2900003703002004200141d9016a290000370300200120012900d101370390010240024020054101460d00200141106a41186a4200370300200141106a41106a4200370300200141106a41086a4200370300200142003703100c010b200141106a41186a2002290300370300200141106a41106a2003290300370300200141106a41086a200429030037030020012001290390013703100b2006410020071b2103200141306a108907200141f8016a41186a4200370300200141f8016a41106a4200370300200141f8016a41086a22054200370300200142003703f801200141d0016a41c1dcc700410610c5012005200141d0016a41086a2202290000370300200120012900d0013703f801200141d0016a41aca4c600410e10c501200941086a2002290000370000200920012900d001370000200141d0016a200141f8016a412010c901024002400240024020012d00d00122050d0020014190016a41186a200141e9016a29000037030020014190016a41106a200141e1016a29000037030020014190016a41086a200141d9016a290000370300200120012900d101370390010c010b200141f8016a412010b40120014190016a41186a200141e9016a29000037030020014190016a41106a200141e1016a29000037030020014190016a41086a200141d9016a290000370300200120012900d1013703900120054101460d010b200141d8006a4200370300200141d0006a4200370300200141c8006a4200370300200142003703400c010b200141c0006a41186a20014190016a41186a290300370300200141c0006a41106a20014190016a41106a290300370300200141c0006a41086a20014190016a41086a29030037030020012001290390013703400b024002400240024002400240024002400240024002400240200341e112490d002003419f6d6a2205450d0020014190016a41c1dcc700410610c501200141f8016a41fda3c600410910c501200120053602bc0220014180016a200141bc026a410410c701200141dc016a200141bc026a41046a360200200120014188016a3602d4012001200141bc026a3602d801200120014180016a3602d001200141e0006a200141d0016a107e2001280268220541206a2202417f4c0d010240024020020d00410121040c010b200210322204450d050b200141003602d801200120023602d401200120043602d001200141d0016a4100411010c80120012802d00120012802d80122026a2204200129009001370000200441086a20014190016a41086a2900003700002001200241106a22023602d801200141d0016a2002411010c80120012802d00120012802d80122026a220420012900f801370000200441086a200141f8016a41086a2900003700002001200241106a22043602d80120012802602102200141d0016a2004200510c80120012802d001220420012802d80122096a2002200510c9081a2001200920056a22053602d80102402001280264450d002002102c0b2004200510b40120012802d401450d002004102c0b20014190016a10f90720012802980121022001280290012105200141003a00f0012002450d0a200120052d00003a00d001200141013a00f00120024101460d09200120052d00013a00d101200141023a00f00120024102460d09200120052d00023a00d201200141033a00f00120024103460d09200120052d00033a00d301200141043a00f00120024104460d09200120052d00043a00d401200141053a00f00120024105460d09200120052d00053a00d501200141063a00f00120024106460d09200120052d00063a00d601200141073a00f00120024107460d09200120052d00073a00d701200141083a00f00120024108460d09200120052d00083a00d801200141093a00f00120024109460d09200120052d00093a00d9012001410a3a00f0012002410a460d09200120052d000a3a00da012001410b3a00f0012002410b460d09200120052d000b3a00db012001410c3a00f0012002410c460d09200120052d000c3a00dc012001410d3a00f0012002410d460d09200120052d000d3a00dd012001410e3a00f0012002410e460d09200120052d000e3a00de012001410f3a00f0012002410f460d09200120052d000f3a00df01200141103a00f00120024110460d09200120052d00103a00e001200141113a00f00120024111460d09200120052d00113a00e101200141123a00f00120024112460d09200120052d00123a00e201200141133a00f00120024113460d09200120052d00133a00e301200141143a00f00120024114460d09200120052d00143a00e401200141153a00f00120024115460d09200120052d00153a00e501200141163a00f00120024116460d09200120052d00163a00e601200141173a00f00120024117460d09200120052d00173a00e701200141183a00f00120024118460d09200120052d00183a00e801200141193a00f00120024119460d09200120052d00193a00e9012001411a3a00f0012002411a460d09200120052d001a3a00ea012001411b3a00f0012002411b460d09200120052d001b3a00eb012001411c3a00f0012002411c460d09200120052d001c3a00ec012001411d3a00f0012002411d460d09200120052d001d3a00ed012001411e3a00f0012002411e460d09200120052d001e3a00ee012001411f3a00f0012002411f460d09200141e0006a41106a200141d0016a41106a290300370300200141e0006a41086a200141d0016a41086a290300370300200120052d001f3a00ef01200141e0006a41186a200141d0016a41186a290300370300200141203a00f001200120012903d001220b3703f8012001200b3703602001280294010d010c020b103b000b2005102c0b2001410036028002200142013703f801412010322205450d00200142203702d401200120053602d001200141d0016a41004120102f20012802d001220220012802d80122046a22052001290310370000200541086a200141106a41086a290300370000200541106a200141106a41106a290300370000200541186a200141106a41186a2903003700002001200441206a22053602d801200141f8016a41002005102f20012802f801220420012802800222096a2002200510c9081a2001200920056a220536028002024020012802d401450d002002102c0b20014180016a2004200510fa07024020012802fc01450d002004102c0b2001280280012205450d0320014188016a28020021022001280284012108200141003a00f0012002450d05200120052d00003a00d001200141013a00f00120024101460d04200120052d00013a00d101200141023a00f00120024102460d04200120052d00023a00d201200141033a00f00120024103460d04200120052d00033a00d301200141043a00f00120024104460d04200120052d00043a00d401200141053a00f00120024105460d04200120052d00053a00d501200141063a00f00120024106460d04200120052d00063a00d601200141073a00f00120024107460d04200120052d00073a00d701200141083a00f00120024108460d04200120052d00083a00d801200141093a00f00120024109460d04200120052d00093a00d9012001410a3a00f0012002410a460d04200120052d000a3a00da012001410b3a00f0012002410b460d04200120052d000b3a00db012001410c3a00f0012002410c460d04200120052d000c3a00dc012001410d3a00f0012002410d460d04200120052d000d3a00dd012001410e3a00f0012002410e460d04200120052d000e3a00de012001410f3a00f0012002410f460d04200120052d000f3a00df01200141103a00f00120024110460d04200120052d00103a00e001200141113a00f00120024111460d04200120052d00113a00e101200141123a00f00120024112460d04200120052d00123a00e201200141133a00f00120024113460d04200120052d00133a00e301200141143a00f00120024114460d04200120052d00143a00e401200141153a00f00120024115460d04200120052d00153a00e501200141163a00f00120024116460d04200120052d00163a00e601200141173a00f00120024117460d04200120052d00173a00e701200141183a00f00120024118460d04200120052d00183a00e801200141193a00f00120024119460d04200120052d00193a00e9012001411a3a00f0012002411a460d04200120052d001a3a00ea012001411b3a00f0012002411b460d04200120052d001b3a00eb012001411c3a00f0012002411c460d04200120052d001c3a00ec012001411d3a00f0012002411d460d04200120052d001d3a00ed012001411e3a00f0012002411e460d04200120052d001e3a00ee012001411f3a00f0012002411f460d0420014190016a41106a2202200141d0016a41106a220929030037030020014190016a41086a2204200141d0016a41086a2206290300370300200120052d001f3a00ef0120014190016a41186a220a200141d0016a41186a2207290300370300200141203a00f001200120012903d001220b3703f8012001200b3703900120062004290300370300200920022903003703002007200a29030037030020012001290390013703d001200141f8016a41026a220a200141bc026a41026a2d00003a0000200120012f00bc023b01f801200128023822042001280234460d010c020b1039000b200141306a2004410110f201200128023821040b2001280230200441246c6a220241003a0000200220012903d001370001200220012f01f8013b0021200241096a2006290300370000200241116a2009290300370000200241196a2007290300370000200241236a200a2d00003a00002001200441016a3602382008450d002005102c0b200020012903103700102000200336020020002001290360370030200041286a200141106a41186a290300370000200041206a200141106a41106a290300370000200041186a200141106a41086a290300370000200041386a200141e0006a41086a290300370000200041c0006a200141e0006a41106a290300370000200041c8006a200141e0006a41186a290300370000200041e8006a200141c0006a41186a290300370000200041e0006a200141c0006a41106a290300370000200041d8006a200141c0006a41086a290300370000200020012903403700502000410c6a200141306a41086a28020036020020002001290330370204200141c0026a24000f0b200141003a00f0010b41e4e0c600412c200141d0016a4190e1c60041b0e1c6001040000b200141003a00f0010b41e4e0c600412c200141d0016a4190e1c60041a0e1c6001040000bf90201027f230041e0026b22022400200242808080808020370204200220013602142002200041c4b5c80020011b3602102002200241106a360200200241f0016a200210ab0520022802f401210120022802f001210020024188016a200241f0016a41086a41e80010c9081a024002402001450d002002200136021c20022000360218200241186a41086a20024188016a41e80010c9082103024002402002280200280204450d00200241186a410472102b410021010c010b20024188016a200341e80010c9081a0b20010d010b200241246a410436020020024184026a4102360200200242023702f40120024194c7c3003602f0012002410436021c200241b0c8c30036021820024100360204200241c4b5c8003602002002200241186a3602800220022002360220200241f0016a41a4c7c3001046000b200220013602f401200220003602f001200241f8016a20024188016a41e80010c9081a200241f0016a10fe02200241f0016a410472102b200241e0026a240042010b9d0c03067f017e047f230041306b2202240002400240024020010d002002410036022020024204370318410810322201450d0220014110360204200141b0cfc4003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c405410810322201450d022001410e360204200141b4a1c7003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c405410810322201450d022001410c360204200141e5cbc0003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c405410810322201450d022001410e3602042001418dbcc3003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c405410810322201450d022001410a360204200141fcedc6003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c405410810322201450d022001410b360204200141b5dec4003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c405410810322201450d0220014118360204200141c4e2c7003602002002200141086a36020c200220013602082002410136020420022001360200200241186a200210c40520022802182103200228021c210402400240200228022022010d004100210541042106410021070c010b20014104200141044b1bad420c7e2208422088a722070d022008a722094100480d02200920074541027420091032220a1b21070240200a0d002007450d030c040b200320014103746a210b2007410c6e2105200141037441786a41037641016a210c41002107200a2009200a1b220621012003210903402009280200220a450d01200141086a200941046a280200360200200141046a200a360200200141003602002001410c6a2101200741016a2107200941086a2209200b470d000b200c21070b0240200441ffffffff0171450d002003102c0b2002410036020820024201370300200241004104102f2002280200200228020822016a41edcad18b063600002002200141046a2201360208200220014101102f2002280200200228020822016a410c3a00002002200141016a36020841b8d7c000411c20021076200220022802084101102f2002280200200228020822016a41043a00002002200141016a3602082007200210770240024020070d0020022802082109200228020021030c010b2007410c6c2107200641086a210103402001417c6a280200210a2001280200220920021077200220022802082009102f200228020022032002280208220b6a200a200910c9081a2002200b20096a22093602082001410c6a2101200741746a22070d000b0b2002280204210702402005450d002005410c6c450d002006102c0b200941046a2201417f4c0d0102400240024002400240024020010d002002410036020820022001360204200241013602000c010b20011032220a450d0720024100360208200220013602042002200a360200200941c000490d01200941808001490d022009418080808004490d030b200241004101102f2002280200200228020822016a41033a00002002200141016a2201360208200220014104102f2002280200200228020822016a2009360000200141046a21010c030b200241004101102f2002280200200228020822016a20094102743a0000200141016a21010c020b200241004102102f2002280200200228020822016a20094102744101723b0000200141026a21010c010b200241004104102f2002280200200228020822016a2009410274410272360000200141046a21010b20022001360208200220012009102f200228020022012002280208220a6a2003200910c9081a02402003410020071b220b450d002007450d00200b102c0b200241306a2400200a20096aad4220862001ad840f0b200241246a4104360200200241146a41023602002002420237020420024194c7c3003602002002410436021c200241c8c8c3003602182002410036022c200241c4b5c8003602282002200241186a3602102002200241286a360220200241a4c7c3001046000b103b000b1039000beb0201077f02400240200041046a2802002202200041086a28020022036b2001410c6a280200200141086a28020022046b22054103752206490d00200028020021020c010b0240200320066a22072003490d00200241017422032007200320074b1b22034104200341044b1b220341ffffffff017122082003470d00200341037422074100480d00200820034641027421080240024002400240024002402000280200410020021b22030d002007450d010c030b200241037422020d0120070d020b200821020c020b200320022007103522020d010c020b200710322202450d010b20002002360200200041046a2007410376360200200041086a28020021030c020b2008450d001039000b103b000b200220034103746a2004200510c9081a200141086a2001410c6a280200360200200041086a2200200028020020066a3602000240200141046a2802002200450d0020012802002201450d00200041ffffffff0171450d002001102c0b0b880903017f017e017f230041c00b6b22022400200242808080808020370204200220013602b40b2002200041c4b5c80020011b3602b00b2002200241b00b6a360200200241f0076a200210af03200241b8036a200241f0076a41e80010c9081a20022903d8082103200241e8006a200241f0076a41f0006a41d00210c9081a0240024020034203510d00200241a0046a200241b8036a41e80010c9081a2002200337038805200241a0046a41f0006a200241e8006a41d00210c9082101024002402002280200280204450d00200241b8056a108302420321030c010b200241b8036a200241a0046a41e80010c9081a200241f0076a200141d00210c9081a0b20034203510d002002200241b8036a41e80010c908220241e8006a200241f0076a41d00210c9081a200241a0046a200241e80010c9081a200220033703880520024190056a200241e8006a41d00210c9081a2002200241a0046a3602f007200241e0076a200241f0076a10810220022802e8072101200241f0076a200241a0046a41c00310c9081a200241b80b6a20022802e807360200200220022903e0073703b00b200241b8036a200241f0076a2001200241b00b6a1088034101410220022d00b80322014101461b220010322204450d01200241003602f807200220003602f407200220043602f0070240024020014101470d00200241f0076a41004101102f20022802f00720022802f8076a41013a0000200220022802f80741016a3602f807200241b8036a410172200241f0076a108d0320022802f80721010c010b200241f0076a41004101102f20022802f00720022802f8076a41003a0000200220022802f80741016a22003602f80720022d00bc032101200241f0076a20004101102f20022802f00720022802f8076a21000240024020014104460d00200041013a0000200220022802f80741016a22003602f807024002400240024020010e0400010203000b200241f0076a20004101102f20022802f00720022802f8076a41003a000020022802f80741016a21010c040b200241f0076a20004101102f20022802f00720022802f8076a41013a000020022802f80741016a21010c030b200241f0076a20004101102f20022802f00720022802f80722016a41023a0000200141016a21010c020b200241f0076a20004101102f20022802f00720022802f8076a41033a0000200220022802f80741016a22013602f80720022d00bd032100200241f0076a20014101102f20022802f00720022802f8076a20003a0000200220022802f80741016a22013602f80720022d00be032100200241f0076a20014101102f20022802f00720022802f8076a20003a000020022802f80741016a21010c010b200041003a000020022802f80741016a21010b200220013602f8070b20023502f0072103200241c00b6a240020032001ad422086840f0b200241f4006a4104360200200241b4046a4102360200200242023702a40420024194c7c3003602a0042002410436026c200241d8c8c30036026820024100360204200241c4b5c8003602002002200241e8006a3602b00420022002360270200241a0046a41a4c7c3001046000b1039000bcf11020f7f027e230041f0016b2202240002400240024020010d0010be0520024180016a41186a2203420037030020024180016a41106a2204420037030020024180016a41086a220542003703002002420037038001200241d0016a41c1dcc700410610c5012005200241d0016a41086a2206290000370300200220022900d00137038001200241b0016a4196a4c600410610c5012003200241b0016a41086a2207290000370300200420022900b001370300200241086a20024180016a412010c601200228020c410020022802081b10bf052003420037030020044200370300200542003703002002420037038001200241d0016a41c1dcc700410610c50120052006290000370300200220022900d00137038001200241d0016a419cccc600410e10c50120032006290000370300200420022900d001370300200220024180016a412010c601200241003602a801200242043703a001200241a0016a41002002280204410020022802001b220810ec0120022802a801210102402008450d00200120086a210920022802a0012001410c6c6a2101200241ec016a41046a210a200241e0016a41086a210b4100210c0340200241d0016a41c1dcc700410610c501200241b0016a41c0cdc600410d10c5012002200c3602ec01200241e0016a200241ec016a410410c7012002200a36021c2002200b3602142002200241ec016a3602182002200241e0016a36021020024180016a200241106a107e200228028801220d41206a220e417f4c0d0302400240200e0d004101210f0c010b200e1032220f450d050b200241003602e8012002200e3602e4012002200f3602e001200241e0016a4100411010c80120022802e00120022802e801220e6a220f20022900d001370000200f41086a20062900003700002002200e41106a220e3602e801200241e0016a200e411010c80120022802e00120022802e801220e6a220f20022900b001370000200f41086a20072900003700002002200e41106a220e3602e801200228028001210f200241e0016a200e200d10c80120022802e001220e20022802e80122106a200f200d10c9081a20022010200d6a220d3602e8010240200228028401450d00200f102c0b200241106a200e200d10f604024002402002280210220f0d00420021114101210f0c010b200e200d10b401200229021421110b200c41016a210c024020022802e401450d00200e102c0b2001200f360200200141046a20113702002001410c6a21012008200c470d000b200921010b200220013602a801200241106a41086a220c2001360200200220022903a001370310200241b0016a200241106a10bc05200241106a41186a200241b0016a41186a290300370300200241106a41106a200241b0016a41106a290300370300200c2007290300370300200220022903b0013703102003420037030020044200370300200542003703002002420037038001200241d0016a41c1dcc700410610c50120052006290000370300200220022900d00137038001200241d0016a41aca4c600410e10c501200441086a2006290000370000200420022900d00137000020024180016a4120200241106a10c902200241106a10c10520024100360288012002420137038001412010322201450d02200242203702b401200220013602b001200241b0016a41004120102f20022802b001220c20022802b801220d6a22012002290320370000200141086a200241106a41186a290300370000200141106a200241106a41206a290300370000200141186a200241386a2903003700002002200d41206a22013602b80120024180016a2002280288012001102f2002280280012002280288016a200c200110c9081a200220022802880120016a220d36028801024020022802b401450d00200c102c0b02400240024002402002280210220141c000490d00200141808001490d012001418080808004490d0220024180016a2002280288014101102f2002280280012002280288016a41033a0000200220022802880141016a220c3602880120024180016a200c4104102f2002280280012002280288016a2001360000200220022802880141046a360288010c030b20024180016a2002280288014101102f2002280280012002280288016a20014102743a0000200220022802880141016a360288010c020b20024180016a200d4102102f200228028001200228028801220c6a20014102744101723b00002002200c41026a360288010c010b20024180016a2002280288014104102f200228028001200228028801220c6a20014102744102723600002002200c41046a360288010b412010322201450d02200242203702b401200220013602b001200241b0016a41004120102f20022802b001220c20022802b801220d6a22012002290340370000200141086a200241c8006a290300370000200141106a200241d0006a290300370000200141186a200241d8006a2903003700002002200d41206a22013602b80120024180016a2002280288012001102f2002280280012002280288016a200c200110c9081a200220022802880120016a36028801024020022802b401450d00200c102c0b412010322201450d02200242203702b401200220013602b001200241b0016a41004120102f20022802b001220c20022802b801220d6a22012002290360370000200141086a200241e8006a290300370000200141106a200241f0006a290300370000200141186a200241f8006a2903003700002002200d41206a22013602b80120024180016a2002280288012001102f2002280280012002280288016a200c200110c9081a200220022802880120016a36028801024020022802b401450d00200c102c0b20024180016a200241106a410472220110aa05200235028001211120023502880121122001102b200241f0016a240020112012422086840f0b200241bc016a4104360200200241246a41023602002002420237021420024194c7c300360210200241043602b401200241f0c8c3003602b0012002410036028401200241c4b5c800360280012002200241b0016a360220200220024180016a3602b801200241106a41a4c7c3001046000b103b000b1039000bca2709017f017e037f017e077f017e017f057e247f230041d0076b220224002002428080808080203702a407200220013602d4042002200041c4b5c80020011b3602d0042002200241d0046a3602a007200241d0006a200241a0076a10c8050240024020022802504101460d00200220022902543703e0022002200241dc006a2802003602e80220022802a007280204450d01200241e0026a10bb040b200241ec026a4104360200200241e4006a41023602002002420237025420024194c7c300360250200241043602e40220024188c9c3003602e002200241003602a407200241c4b5c8003602a0072002200241e0026a3602602002200241a0076a3602e802200241d0006a41a4c7c3001046000b200241206a41086a200241e0026a41086a22002802002201360200200220022903e0022203370320200241c0006a41086a200136020020024208370310410021042002410036021820022003370340200241d0006a200241c0006a109701024020022802504101460d00200241d0006a41086a22012903002103200241c8036a41186a22004200370300200241c8036a41106a22054200370300200241c8036a41086a22064200370300200242003703c803200241d0006a41cbdcc700410910c50120062001290000370300200220022900503703c803200241d0006a41f8d7c300410310c50120002001290000370300200520022900503703002002200241c8036a10cf022002280200210020022903082107200241106a4100109805200228021022082002280218220541c0036c6a200241e0026a41e80010c90822014202370368200141a0016a2003200742b8177c42b81720001b220720032007561b3703002001410236029801200120022903a007370370200141f8006a200241a0076a41086a29030037030020014180016a200241a0076a41106a29030037030020014188016a200241a0076a41186a29030037030020014190016a200241c0076a290300370300200141b4016a200241d0006a418c0210c9081a2002200541016a2209360218024002402002280240220a0d000c010b2002280244210b0340200a410c6a2105200a418c016a2100200a2f018a01210c41002101024002400340200c2001460d0141e7dfc3002000410810cc082206450d02200041086a21002005410c6a2105200141016a21012006417f4a0d000b2001417f6a210c0b0240200b0d00410021040c030b200b417f6a210b200a200c4102746a41e4016a280200210a0c010b0b200541786a28020021012002200528020036028c042002200136028804200241e0026a20024188046a10c9050240024020022802e0022204450d00200241e0026a41086a280200210d20022802e402210e200241d0006a20024188046a10ca0520022802500d010240200d450d002004200d41d0006c6a2100200421010340200141046a410036020020012802002105200141013602000240200141086a280200450d002005102c0b200141d0006a22012000470d000b0b200e450d00200e41d0006c450d002004102c0b20024129360254200241ccb1c80036025041efdfc3004128200241d0006a4198e0c30041a8e0c3001040000b200241d0046a41086a200241d0006a41086a280200360200200220022903503703d0040b200241e8036a41086a2201200241d0046a41086a280200360200200220022903d0043703e8030240024002402004450d00200241f8036a41086a2001280200360200200220022903e8033703f80320024180043b015020024188046a200241d0006a10c702200dad220f42d0007e2203422088a70d012003a72201417f4c0d010240024020010d00410421000c010b200110322200450d030b200241003602b804200220003602b0042002200141d0006e3602b404200241b0046a4100200d41d0006c220141d0006e109705200420016a211020022802b804210502402001450d0020022802b004200541d0006c6a2106200241d0006a41106a2100200421010340200241d0006a200110cb052001410c6a280200210c200141106a2900002103200141c8006a2900002107200141c0006a2900002111200141386a2900002112200141306a2900002113200141286a2900002114200141206a2900002115200241e0026a41086a220a200141186a290000370300200241e0026a41106a220b2015370300200241e0026a41186a22162014370300200241e0026a41206a22172013370300200241e0026a41286a22182012370300200241e0026a41306a22192011370300200241e0026a41386a221a200737030020002003370000200041086a200a290300370000200041106a200b290300370000200041186a2016290300370000200041206a2017290300370000200041286a2018290300370000200041306a2019290300370000200041386a201a2903003700002002200c36025c200541016a21052006200241d0006a41d00010c90841d0006a2106200141d0006a22012010470d000b0b200220053602b804200228028004221bad42b4027e2203422088a70d012003a72201417f4c0d0120022802f803211c0240024020010d00410421000c010b200110322200450d030b200241003602c804200220003602c0042002200141b4026e3602c404200241c0046a4100201b109b0520022802c80421170240201b450d00201c201b41b4026c6a211d20022802c004201741b4026c6a2101200241a0076a41246a2118200241a0076a41186a2106200241a0076a410c6a2119200241d0006a41206a211a200241d0006a41286a211e200241d0006a41386a211f200241d0006a41306a2120201c2100034020002802002121200241c8036a41186a22222000411c6a290000370300200241c8036a41106a2223200041146a290000370300200241c8036a41086a22242000410c6a2900003703002002200041046a2900003703c80320024180076a41186a22252000413c6a29020037030020024180076a41106a2226200041346a29020037030020024180076a41086a22272000412c6a2902003703002002200041246a29020037038007200241e0066a41086a2228200041cc006a290000370300200241e0066a41106a2229200041d4006a290000370300200241e0066a41186a222a200041dc006a2900003703002002200041c4006a2900003703e006200241c0066a41086a222b200041ec006a290000370300200241c0066a41106a222c200041f4006a290000370300200241c0066a41186a222d200041fc006a2900003703002002200041e4006a2900003703c006200241a0066a41086a222e2000418c016a290000370300200241a0066a41106a222f20004194016a290000370300200241a0066a41186a22302000419c016a290000370300200220004184016a2900003703a006200241d0006a41086a220c200041ac016a290000370300200241d0006a41106a2231200041b4016a290000370300200241d0006a41186a2232200041bc016a290000370300201a200041c4016a290000370300201e200041cc016a290000370300201f200041dc016a2900003703002020200041d4016a2900003703002002200041a4016a290000370350200241e0056a200041e4016a10cc0520024180066a200041f0016a220510cd0502400240200041fc016a280200220a0d00200241003602d0040c010b20004184026a2802002200417f4c0d040240024020000d004101210b0c010b20001032220b450d060b200241003602d804200220003602d4042002200b3602d004200241d0046a4100200010c80120022802d00420022802d804220b6a200a200010c9081a2002200b20006a3602d8040b200541206a2802002200417f4c0d03200541186a280200210a0240024020000d004101210b0c010b20001032220b450d050b200241003602e802200220003602e4022002200b3602e002200241e0026a4100200010c80120022802e00220022802e802220b6a200a200010c9081a2002200b20006a22333602e802200541246a2902002103200241a0076a41086a2200200241e0056a41086a220a2802003602002019200229038006370200201941086a20024180066a41086a220b280200360200200620022903d004370200200641086a200241d0046a41086a2216280200360200201820022903e002370200201841086a2033360200200220022903e0053703a00720024180066a41186a2233202229030037030020024180066a41106a22222023290300370300200b2024290300370300200220022903c80337038006200241e0056a41186a22232025290300370300200241e0056a41106a22242026290300370300200a202729030037030020022002290380073703e005200241c0056a41186a2225202a290300370300200241c0056a41106a22262029290300370300200241c0056a41086a22272028290300370300200220022903e0063703c005200241a0056a41186a2228202d290300370300200241a0056a41106a2229202c290300370300200241a0056a41086a222a202b290300370300200220022903c0063703a00520024180056a41186a222b203029030037030020024180056a41106a222c202f29030037030020024180056a41086a222d202e290300370300200220022903a00637038005200241e0026a41386a222e201f290300370300200241e0026a41306a222f2020290300370300200241e0026a41286a2230201e290300370300200241e0026a41206a2234201a290300370300200241e0026a41186a22352032290300370300200241e0026a41106a22322031290300370300200241e0026a41086a2231200c290300370300200220022903503703e002200241d0046a41286a2236200241a0076a41286a290300370300200241d0046a41206a2237200241a0076a41206a290300370300200241d0046a41186a22382006290300370300200241d0046a41106a2239200241a0076a41106a29030037030020162000290300370300200220022903a0073703d004200241d0006a2005412c6a10ce05200241a0076a200541386a10cb05200120213602002001411c6a2033290300370200200141146a20222903003702002001410c6a200b290300370200200141046a2002290380063702002001413c6a2023290300370200200141346a20242903003702002001412c6a200a290300370200200141246a20022903e005370200200141c4006a20022903c005370200200141cc006a2027290300370200200141d4006a2026290300370200200141dc006a2025290300370200200141e4006a20022903a005370200200141ec006a202a290300370200200141f4006a2029290300370200200141fc006a202829030037020020014184016a2002290380053702002001418c016a202d29030037020020014194016a202c2903003702002001419c016a202b290300370200200141a4016a20022903e002370200200141ac016a2031290300370200200141bc016a2035290300370200200141b4016a2032290300370200200141dc016a202e290300370200200141d4016a202f290300370200200141cc016a2030290300370200200141c4016a20342903003702002001418c026a203629030037020020014184026a2037290300370200200141fc016a2038290300370200200141f4016a2039290300370200200141ec016a2016290300370200200141e4016a20022903d00437020020014194026a2003370200200141a4026a200c2802003602002001419c026a2002290350370200200141b0026a2000280200360200200141a8026a20022903a007370200200141b4026a2101201741016a2117200541c4006a2200201d470d000b0b200220173602c804200241d0006a20024188046a200241b0046a200241c0046a10ee020240024020022d00504104460d00200241f8036a10c2020240200d450d00200421010340200141046a410036020020012802002100200141013602000240200141086a280200450d002000102c0b200141d0006a22012010470d000b0b0240200e450d00200e41d0006c450d002004102c0b420021034104211c4100211b41002100410421040c010b200f422086200ead84210320022802fc0321000b024020092002280214470d00200241106a2009109805200228021021080b20082002280218220541c0036c6a200241e0026a41e80010c90822014202370368200141b0016a201b360200200141ac016a2000360200200141a8016a201c360200200141a0016a20033703002001419c016a20043602002001410e36029801200120022903a007370370200141f8006a200241a8076a29030037030020014180016a200241b0076a29030037030020014188016a200241b8076a29030037030020014190016a200241c0076a290300370300200141b4016a200241d0006a418c0210c9081a2002200541016a2209360218200228021021080b200241c0006a10bb04200941c0036c220c4104722201417f4c0d00200110322200450d01200241003602e802200220013602e402200220003602e002200241e0026a2009108f010240024020090d0020022802e802210620022802e002210a0c010b20022802e8022106200821010340200220013602a007200241d0006a200241a0076a10810220022802502105200241e0026a200620022802582200102f20022802e002220a20022802e80222066a2005200010c9081a2002200620006a22063602e80202402002280254450d002005102c0b200141c0036a2101200c41c07c6a220c0d000b2009450d00200941c0036c210020084198016a210103402001108302200141c0036a2101200041c07c6a22000d000b0b024020022802142201450d00200141c0036c450d002008102c0b200241d0076a24002006ad422086200aad840f0b103b000b1039000b2000200241dc006a290200370300200220022902543703e00241d2dcc3004128200241e0026a41fcdcc300418cddc3001040000bf50a03067f037e017f23004190026b22022400200241086a200110b003024002402002280208450d00200041013602000c010b200228020c21032001200128020441016a220436020402400240024002400240200420012802084b0d00200241003a00172002410036022020024100360218024002400240024020030d0020024188016a41086a200241186a41086a280200360200200220022903183703880120024188016a21040c010b0340200241003a009001200128020022042802042205450d06200428020022062d0000210720042005417f6a3602042004200641016a360200200241013a009001200220073a008801200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200241023a009001200220073a008901200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200241033a009001200220073a008a01200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200241043a009001200220073a008b01200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200241053a009001200220073a008c01200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200241063a009001200220073a008d01200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200241073a009001200220073a008e01200128020022042802042205450d05200428020022062d0000210720042005417f6a3602042004200641016a360200200220073a008f0120022903880121082002200110b00320022802000d0620012802002205280204220620022802042204490d062004417f4c0d020240024020040d00410121070c010b200410372207450d042001280200220528020421060b0240024020062004490d0020072005280200200410c90821062005280204220720044f0d01200420074194afc0001058000b2004450d072004450d072007102c0c070b2005200720046b3602042005200528020020046a3602002006450d06200220083703280240024020022802182205450d00200228021c21070c010b41e40110322205450d044100210720054100360200200541046a20024188016a41860110c9081a200541003b018a012005418c016a200241306a41d80010c9081a2002410036021c200220053602180b2004ad2209422086200984210920024188016a20072005200241286a109102024002402002280288014101470d00200229028c01210a2002280294012104200220083703980120022004360290012002200a370388012002200241186a36029401200220093702342002200636023020024188016a200241306a10bc040c010b200228029001200228029401410c6c6a220541086a2207280200210420072009370200200541046a22072802002105200720063602002005450d002004200b20041b210b2005410020041b2204450d00200b450d002004102c0b2003417f6a22030d000b20022d0017210420024188016a41086a200241186a41086a280200360200200220022903183703880120040d0620024188016a21040b200020042902003702042000410c6a200441086a280200360200410021040c060b103b000b1039000b200041013602000c040b200241003a0090010b200241013a001720024188016a41086a200241186a41086a28020036020020022002290318370388010b20024188016a10bb04410121040b2000200436020020012001280204417f6a3602040b20024190026a24000be30905037f017e067f047e067f230041a0026b2202240020022001108702024002402002280200450d00200041003602000c010b02400240024020022802042203200128020441d0006e2204200420034b1bad42d0007e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b200410322206450d020b4100210720024100360210200220063602082002200441d0006e36020c02402003450d00200241d8016a41017221080340200241d8016a200110b0060240024020022802d8012209450d0020022902dc01210502400240200128020422044104490d002001280200220a280000210b20012004417c6a3602042001200a41046a360200200241d8016a200110ae0320022d00d8014101470d032005422088a72204450d0220040d010c020b2005422088a72204450d012004450d010b2009102c0b200241d8006a41386a20024198016a41386a290300370300200241d8006a41306a20024198016a41306a290300370300200241d8006a41286a20024198016a41286a290300370300200241d8006a41206a20024198016a41206a290300370300200241d8006a41186a20024198016a41186a290300370300200241d8006a41106a20024198016a41106a290300370300200241d8006a41086a20024198016a41086a29030037030020022002290398013703580c050b20024198016a41386a200841386a290000220c37030020024198016a41306a200841306a290000220d37030020024198016a41286a200841286a290000220e37030020024198016a41206a200841206a290000220f370300200241d8006a41086a2204200841086a290000370300200241d8006a41106a220a200841106a290000370300200241d8006a41186a2210200841186a290000370300200241d8006a41206a2211200f370300200241d8006a41286a2212200e370300200241d8006a41306a2213200d370300200241d8006a41386a2214200c370300200220082900003703582009450d04200241186a41386a22152014290300370300200241186a41306a22142013290300370300200241186a41286a22132012290300370300200241186a41206a22122011290300370300200241186a41186a22112010290300370300200241186a41106a2210200a290300370300200241186a41086a220a20042903003703002002200229035837031802402007200228020c470d00200241086a2007410110970520022802102107200228020821060b2006200741d0006c6a2204200b36020c200420053702042004200936020020042002290318370210200441186a200a290300370200200441206a2010290300370200200441286a2011290300370200200441306a2012290300370200200441386a2013290300370200200441c0006a2014290300370200200441c8006a20152903003702002002200741016a22073602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c030b103b000b1039000b200041003602002002280208210302402007450d002003200741d0006c6a2109200321040340200441046a41003602002004280200210720044101360200200441086a2802002208200120081b210102402008450d002001450d002007102c0b200441d0006a22042009470d000b0b200228020c2204450d00200441d0006c450d002003102c0b200241a0026a24000bbe1505037f017e157f067e1d7f230041800b6b22022400200241086a200110870202400240024002402002280208450d00200041003602000c010b200228020c2203200128020441b4026e2204200420034b1bad42b4027e2205422088a70d022005a72204417f4c0d020240024020040d00410421060c010b200410322206450d020b20024100360218200220063602102002200441b4026e360214024002402003450d0020024188086a4101722107200241b4086a210820024188086a41047221094100210a034020024188086a200110b405024002402002280288084101460d00200241a0066a200941e40110c9081a20024188086a200110ef04200228028808220b450d00200241a8046a41086a220c200841086a280200360200200220082902003703a80420022802b008210d20022802ac08210e20022802a808210f20022802a408211020022802a0082111200228029c082112200228029808211320022802940821142002280290082115200228028c082116200241b8046a200241a0066a41e40110c9081a20022001108702024020022802000d0020022802042217200128020441c1006e2204200420174b1bad42c1007e2205422088a70d082005a72204417f4c0d080240024020040d00410121180c010b200410322218450d080b41002106200241003602f809200220183602f0092002200441c1006e22043602f40902400240024002402017450d0041002106034020012802042204450d02200128020022192d0000211a20012004417f6a3602042001201941016a360200024002400240201a417f6a0e020001050b20024188086a200110ae0320022d0088084101460d04200241a0066a41386a200741386a290000370300200241a0066a41306a200741306a290000370300200241a0066a41286a200741286a290000370300200241a0066a41206a200741206a290000370300200241a0066a41186a200741186a290000370300200241a0066a41106a200741106a290000370300200241a0066a41086a200741086a290000370300200220072900003703a006410021190c010b20024188086a200110ae0320022d0088084101460d03200241a0066a41386a200741386a290000370300200241a0066a41306a200741306a290000370300200241a0066a41286a200741286a290000370300200241a0066a41206a200741206a290000370300200241a0066a41186a200741186a290000370300200241a0066a41106a200741106a290000370300200241a0066a41086a200741086a290000370300200220072900003703a006410121190b200241c00a6a41386a200241a0066a41386a2903002205370300200241c00a6a41306a200241a0066a41306a290300221b370300200241c00a6a41286a200241a0066a41286a290300221c370300200241c00a6a41206a200241a0066a41206a290300221d370300200241c00a6a41186a200241a0066a41186a290300221e370300200241c00a6a41106a200241a0066a41106a290300221f370300200241c00a6a41086a200241a0066a41086a2903002220370300200241800a6a41086a221a2020370300200241800a6a41106a2221201f370300200241800a6a41186a2222201e370300200241800a6a41206a2223201d370300200241800a6a41286a2224201c370300200241800a6a41306a2225201b370300200241800a6a41386a22262005370300200220022903a00622053703c00a200220053703800a0240200620022802f409470d00200241f0096a2006410110960520022802f809210620022802f00921180b2018200641c1006c6a220420193a0000200420022903800a370001200441096a201a290300370000200441116a2021290300370000200441196a2022290300370000200441216a2023290300370000200441296a2024290300370000200441316a2025290300370000200441396a20262903003700002002200641016a22063602f8092017417f6a22170d000b20022802f409210420022802f00921180b2018450d0320024188086a200110b006200228028808450d01200241c00a6a41086a20024188086a41086a28020036020020022002290388083703c00a20024188086a200241b8046a41e40110c9081a200241a0066a41086a200c280200360200200220022903a8043703a006201821272004212820062129200d212a200e212b200f212c2010212d2011212e2012212f201321302014213120152132201621330c050b20022802f409220441c1006c203420041b213420022802f009410020041b2204450d0220340d010c020b200441c1006c203520041b213502402004450d002035450d002018102c0b02402015450d002015410c6c2106200b210403400240200441046a280200450d002004280200102c0b2004410c6a2104200641746a22060d000b0b2016410c6c203620161b213602402016450d002036450d00200b102c0b02402012450d0020124104742106201441046a210403400240200441046a280200450d002004280200102c0b200441106a2104200641706a22060d000b0b2013410474203720131b213702402014410020131b2204450d002037450d002004102c0b02402011450d002010203820101b21382010450d002038450d002011102c0b200d2039200d1b2139200e4100200d1b2204450d022039450d022004102c0c020b2004102c0b02402015450d002015410c6c2106200b210403400240200441046a280200450d002004280200102c0b2004410c6a2104200641746a22060d000b0b2016410c6c203a20161b213a02402016450d00203a450d00200b102c0b02402012450d0020124104742106201441046a210403400240200441046a280200450d002004280200102c0b200441106a2104200641706a22060d000b0b2013410474203b20131b213b02402014410020131b2204450d00203b450d002004102c0b02402011450d002010203c20101b213c2010450d00203c450d002011102c0b200d203d200d1b213d200e4100200d1b2204450d00203d450d002004102c0b4100210b0b200241c4026a20024188086a41e40110c9081a200241b8026a41086a2204200241a0066a41086a280200360200200241a8026a41086a2206200241c00a6a41086a280200360200200220022903a0063703b802200220022903c00a3703a802200b450d02200a41016a210a200241c0006a200241c4026a41e40110c9081a200241306a41086a22172004280200360200200241206a41086a220d2006280200360200200220022903b802370330200220022903a8023703200240200228021822062002280214470d00200241106a20064101109b05200228021821060b2002280210200641b4026c6a200241c0006a41e40110c9082204418c026a202a36020020044188026a202b36020020044184026a202c36020020044180026a202d360200200441fc016a202e360200200441f8016a202f360200200441f4016a2030360200200441f0016a2031360200200441ec016a2032360200200441e8016a20333602002004200b3602e401200441a4026a2029360200200441a0026a20283602002004419c026a202736020020044190026a200229033037020020044198026a2017280200360200200441a8026a2002290320370200200441b0026a200d2802003602002002200641016a360218200a2003470d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b20004100360200200241106a10c2020b200241800b6a24000f0b1039000b103b000bbf0101057f230041106b220224002001280200210302400240200141046a280200220441037622050d0041012105410021010c010b4101210102402005410820044107716b22064d0d0041024101200520066b22014107711b20014103766a21010b2001103222050d001039000b20024100360208200220013602042002200536020020024100200110c8012002280200220520022802086a2003200110c9081a200020043602042000200536020020002002280204360208200241106a24000bca0203027f017e057f230041106b220224000240024020012802082203ad420c7e2204422088a70d002004a72205417f4c0d00200128020021014104210602402005450d00200510322206450d020b20002006360200200041086a22074100360200200041046a2005410c6e36020020004100200310ec012007280200210502402003450d0020012003410c6c6a210820002802002005410c6c6a21030340200141086a2802002200417f4c0d02200128020021060240024020000d00410121090c010b200010322209450d040b20024100360208200220003602042002200936020020024100200010c8012002280200200228020822096a2006200010c9081a200341086a200920006a36020020032002290300370200200541016a21052003410c6a21032001410c6a22012008470d000b0b20072005360200200241106a24000f0b103b000b1039000be60201087f230041106b22022400024002402001280208220341ffffffff00712003470d0020034104742204417f4c0d00200128020021014104210502402004450d00200410322205450d020b20002005360200200041086a22064100360200200041046a200441047636020020004100200310ed012006280200210402402003450d00200120034104746a2107200028020020044104746a210303402001410c6a2802002200417f4c0d02200141046a2802002105200128020021080240024020000d00410121090c010b200010322209450d040b20024100360208200220003602042002200936020020024100200010c8012002280200200228020822096a2005200010c9081a2002200920006a36020820032008360200200341046a20022903003702002003410c6a2002280208360200200341106a2103200441016a2104200141106a22012007470d000b0b20062004360200200241106a24000f0b103b000b1039000b8c0405027f017e0a7f067e017f230041c0006b220224000240024020012802082203ad42c1007e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410121060c010b200510322206450d020b20002006360200200041086a22074100360200200041046a200541c1006e3602002000410020031096052007280200210802402003450d002001200341c1006c6a21092000280200200841c1006c6a2100200241386a2105200241306a2106200241286a210a200241206a210b200241186a210c200241106a210d200241086a210e0340200141016a2900002104200141096a290000210f200141116a2900002110200141196a2900002111200141216a2900002112200141296a2900002113200141316a290000211420012d000021152005200141396a29000037030020062014370300200a2013370300200b2012370300200c2011370300200d2010370300200e200f37030020022004370300200020153a0000200041016a2002290300370000200041096a200e290300370000200041116a200d290300370000200041196a200c290300370000200041216a200b290300370000200041296a200a290300370000200041316a2006290300370000200041396a2005290300370000200041c1006a2100200141c1006a22012009470d000b200820036a21080b20072008360200200241c0006a24000f0b103b000b1039000bb518060e7f017e037f017e017f027e230041a0086b22022400200242808080808020370224200220013602342002200041c4b5c80020011b3602302002200241306a360220200241a0076a200241206a10ab05024020022802a407450d00200241b0066a200241a0076a41f00010c9081a200241a0076a200241206a10bb05024020022802a0070d00200241b0066a410472102b0c010b20024190086a41086a2200200241a0076a41086a280200360200200220022903a0073703900820022802b006210320022802b4062101200241b8056a200241b0066a41086a41e80010c9081a200241b8056a41f0006a200028020036020020022002290390083702a006200241c0046a200241b8056a41f40010c9081a2001450d00200220013602c403200220033602c003200241c0036a41086a200241c0046a41f40010c9082100200241b8056a200241206a10c805024020022802b8054101470d00200241c0036a410472102b20022802b00421030240200241b8046a2802002201450d00200141c0036c210020034198016a210103402001108302200141c0036a2101200041c07c6a22000d000b0b200241b4046a2802002201450d01200141c0036c450d012003102c0c010b200241a0076a41086a2204200241c4056a280200360200200220022902bc053703a007200241c0026a200041f40010c9081a200241bc036a2004280200360200200220022903a0073702b403200241c0016a200241c0026a41800110c9081a2002200136023c20022003360238200241386a41086a200241c0016a41800110c9082100024002402002280220280204450d00200241386a410472102b20022802a80121040240200241b0016a2802002201450d00200141c0036c210020044198016a210103402001108302200141c0036a2101200041c07c6a22000d000b0b0240200241ac016a2802002201450d00200141c0036c450d002004102c0b200241b4016a10bb04410021010c010b200241c0026a200041800110c9081a0b2001450d00200241386a200241c0026a41800110c9081a200241c0016a200241c0026a41f40010c9081a200241a0076a41086a2200200241b4016a280200360200200220022902ac013703a0072002200136023c20022003360238200241386a41086a200241c0016a41f40010c9081a200241c0046a41086a2000280200360200200220022903a0073703c004200241013b01c405200241003602c005200241003602b80520022802a801210502400240024002400240200241b0016a2802002206450d002005200641c0036c6a2107200241d0026a210820022802c404210920022802c004210a200241d8026a210b2005210c0340200c41e8006a2903004202520d010240200c28029801410247220d0d0041f5b1c800210e411c210f02400240024002400240200a450d00200c2903a0012110200241c0046a210120092111034020012802002212410c6a21032012418c016a210020122f018a0121134100210102400240034020132001460d0141c4b1c8002000410810cc082204450d02200041086a21002003410c6a2103200141016a21012004417f4a0d000b2001417f6a21130b2011450d022011417f6a2111201220134102746a41e4016a21010c010b0b0240200328020041084f0d0041ccb1c800210e4129210f0c010b201042f02e80200341786a280200290000510d0141f0efc500210e4131210f0b2002200f3602242002200e360220200242e2c289abb68edbb7f400370390082002200241b8056a20024190086a200241206a10bd04200228020022010d01200241c0036a41086a200241b8056a41086a290300370300200220022903b8053703c0030c080b200d0d03200c2903a0012114200241c0026a200241c0046a109701024020022802c0024101460d0020022903c8022110200b420037030020084200370300200241c0026a41086a22014200370300200242003703c002200241c0036a41cbdcc700410910c5012001200241c0036a41086a2200290000370300200220022900c0033703c002200241c0036a41f8d7c300410310c501200841086a2000290000370000200820022900c003370000200241106a200241c0026a10cf022014201042b0ea017c560d022014200229031842b8177c42b81720022802101b22105a0d04201042808080807083211441002101410121000c030b20022903c802221042808080807083211420022802c4022115410121014100210020164280808080708320023502d00284221621170c020b20022802042100200220013602c002200220003602c402419cc6c3004122200241c0026a41c0c6c300418cc6c3001040000b201742808080807083211741addcc300ad211041012101410021154280808080d0042114410021000b200220173703d002200220153602c402200220013602c002200242f4d2b59bc7ae98b8303703b00620022014201042ffffffff0f83843703c802200241086a200241b8056a200241b0066a200241c0026a10ba04200228020822030d052014422088a721032010a7210420010d032000201545720d002003450d002004102c0b200c41c0036a220c2007470d000b0b200241c0036a41086a200241b8056a41086a290300370300200220022903b8053703c0030c010b200241c0036a41086a200241b8056a41086a290300370300200220022903b8053703c0032015450d002003450d002004102c0b200241c0046a10bb04200241386a410472102b02402006450d00200641c0036c210020054198016a210103402001108302200141c0036a2101200041c07c6a22000d000b0b0240200241ac016a2802002201450d00200141c0036c450d002005102c0b200241003602c802200242013703c00220022d00cc032101200241c0026a41004101102f20022802c00220022802c80222006a20013a00002002200041016a22013602c80220022d00cd032100200241c0026a20014101102f20022802c00220022802c80222016a20003a00002002200141016a3602c802200241c0026a20022802c8032213108f01024020022802c00322010d004100210141002103410021130c020b20022802c403210020012103034020012f018a0121042000450d022000417f6a2100200120044102746a41e4016a280200210120032802e40121030c000b0b200228020c2101200220033602c003200220013602c403419cc6c3004122200241c0036a41c0c6c300418cc6c3001040000b200241cc006a2004360200200241c8006a200136020020022013360250200242003703402002200336023c2002410036023802402013450d0020022013417f6a360250200241386a410020031b221328020021030240024020132802082204201328020422002f018a014f0d00200021010c010b03400240200028020022010d00410021010c020b200341016a210320002f018801210420012100200420012f018a014f0d000b0b200441016a21120240024020030d00200121000c010b200120124102746a41e4016a280200210002402003417f6a2203450d00034020002802e40121002003417f6a22030d000b0b410021120b20132000360204201341003602002013201236020820012004410c6c6a41046a2100200120044103746a418c016a21010340200241c0026a20022802c8024108102f20022802c00220022802c80222036a20012900003700002002200341086a3602c80220002802002000280208200241c0026a10bb0120022802502201450d0120022001417f6a360250200241386a4100200228023c1b221328020021030240024020132802082204201328020422002f018a014f0d00200021010c010b03400240200028020022010d00410021010c020b200341016a210320002f018801210420012100200420012f018a014f0d000b0b200441016a21120240024020030d00200121000c010b200120124102746a41e4016a280200210002402003417f6a2203450d00034020002802e40121002003417f6a22030d000b0b410021120b20132000360204201341003602002013201236020820012004410c6c6a41046a2100200120044103746a418c016a21010c000b0b20023502c802211020023502c0022114200241c0036a10bb04200241a0086a240020142010422086840f0b200241cc016a4104360200200241cc006a41023602002002420237023c20024194c7c300360238200241043602c401200241a4c9c3003602c001200241003602c403200241c4b5c8003602c0032002200241c0016a3602482002200241c0036a3602c801200241386a41a4c7c3001046000bda0501067f23004190016b220224000240024020010d00200241f0006a41186a22014200370300200241f0006a41106a22034200370300200241f0006a41086a2204420037030020024200370370200241f0006a41c7dcc700410410c501200241c8006a418cd7c500410a10c5012001200241c8006a41086a29000037030020032002290048370300200241c8006a200241f0006a10860520022d004821052001200241e1006a2900003703002003200241d9006a2900003703002004200241d1006a290000370300200220022900493703700240024020054101460d00200241286a41186a4200370300200241286a41106a4200370300200241286a41086a4200370300200242003703280c010b200241286a41186a2001290300370300200241286a41106a2003290300370300200241286a41086a2004290300370300200220022903703703280b200241086a41086a2204200241286a41086a290300370300200241086a41106a2205200241286a41106a290300370300200241086a41186a2206200241286a41186a290300370300200220022903283703082002410036027820024201370370412010322201450d012002422037024c20022001360248200241c8006a41004120102f20022802482203200228025022076a22012002290308370000200141086a2004290300370000200141106a2005290300370000200141186a20062903003700002002200741206a2201360250200241f0006a41002001102f20022802702204200228027822056a2003200110c9081a2002200520016a22013602780240200228024c450d002003102c0b20024190016a24002001ad4220862004ad840f0b200241fc006a4104360200200241dc006a41023602002002420237024c20024194c7c30036024820024104360274200241bcc9c3003602702002410036022c200241c4b5c8003602282002200241f0006a3602582002200241286a360278200241c8006a41a4c7c3001046000b1039000b910d03017f027e047f230041e0136b220224002002428080808080203702dc02200220013602ec022002200041c4b5c80020011b22003602e8022002200241e8026a3602d80202400240024002402001450d0020022001417f6a3602ec022002200041016a3602e80241002101024020002d00000e03030200010b410221010c020b420321030c020b410121010b200241a8076a200241d8026a10af0342032103024020022903900822044203520d000c010b200241ef0a6a200241a8076a41e80010c9081a200241e0106a20024198086a41d00210c9081a200241086a200241e80a6a41ef0010c9081a200421030b200241b8066a200241086a41ef0010c9081a200241e00d6a200241e0106a41d00210c9081a0240024020034203510d00200220013a00f002200241f0026a410172200241b8066a41ef0010c9082100200241e0036a2003370300200241e8036a200241e00d6a41d00210c90821050240024020022802d802280204450d0020024190046a108302420321030c010b200241e0106a200041ef0010c9081a200241a8076a200541d00210c9081a0b20034203510d00200241f0026a200241e0106a41ef0010c9081a200241b8066a200241f7026a41e80010c9081a200241086a200241a8076a41d00210c9081a200241a8076a200241b8066a41e80010c9081a200220033703900820024198086a200241086a41d00210c9081a2002200241a8076a3602e010200241f0026a200241e0106a10810220022802f8022106024020022802f002410020022802f40222001b2205450d002000450d002005102c0b200241f0026a200241a8076a41c00310c9081a200241e0106a200241f0026a10890320022d00e010210020022f00e110210720022d00e3102108200241e00d6a200241e0106a41047241fc0210c9081a410121050240024020004101460d00200241e80a6a200241e00d6a41046a41f80210c9081a200241e0106a200241b80b6a220010b702200241f0026a200241e80a6a200120022903e01020022d00e81020022d00e910200610d205200010830220022d00f00221050c010b200241013a00f0022002200720084110747222013b00f102200220014110763a00f3020b410110322201450d01200242013702ac07200220013602a80702400240200541ff01714101470d00200241a8076a41004101102f20022802a80720022802b00722016a41013a00002002200141016a3602b007200241f0026a410172200241a8076a108d0320022802b007210620022802a80721070c010b200241a8076a41004101102f20022802a80720022802b00722016a41003a00002002200141016a22013602b007200241f0026a41086a2903002103200241a8076a20014108102f20022802a80720022802b00722016a20033700002002200141086a3602b00720024188036a2802002101200241a8076a20024190036a2802002200108f0102402000450d0020012000410c6c6a210003402001280200200141086a280200200241a8076a10bb012001410c6a22012000470d000b0b20024194036a2802002101200241a8076a2002419c036a2802002200108f0102402000450d0020012000410c6c6a210003402001280200200141086a280200200241a8076a10bb012001410c6a22012000470d000b0b20024180036a2903002103200241a8076a20022802b0074108102f20022802a80720022802b00722016a20033700002002200141086a22013602b007200241a0036a2d00002100200241a8076a20014101102f20022802a807220720022802b00722016a20003a0000200141016a2106200541ff01710d0020024188036a2802002105024020024190036a2802002201450d002001410c6c21002005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b02402002418c036a2802002201450d002001410c6c450d002005102c0b20024194036a280200210502402002419c036a2802002201450d002001410c6c21002005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b20024198036a2802002201450d002001410c6c450d002005102c0b200241e0136a24002006ad4220862007ad840f0b200241ec0d6a410436020020024184036a4102360200200242023702f40220024194c7c3003602f002200241043602e40d200241d0c9c3003602e00d200241003602ec0a200241c4b5c8003602e80a2002200241e00d6a360280032002200241e80a6a3602e80d200241f0026a41a4c7c3001046000b1039000bfb5f03087f067e047f23004190066b2207240002400240024002400240024002400240024020012903204202520d00200741f8006a41206a22084200370300200741f8006a41186a22094280808080c000370300200741013a00a00120074204370388012007427f3703800120074200370378200741a8046a41206a220a4200370300200741a8046a41186a220b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741b8016a200741f8006a200741a8046a10d106200741f8006a41286a220c200741b8016a41286a2903003703002008200741b8016a41206a2903003703002009200741b8016a41186a290300370300200741f8006a41106a220d200741b8016a41106a290300370300200741f8006a41086a220e200741b8016a41086a290300370300200720072903b801370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741e8016a200741f8006a200741a8046a10d106200c200741e8016a41286a2903003703002008200741e8016a41206a2903003703002009200741e8016a41186a290300370300200d200741e8016a41106a290300370300200e200741e8016a41086a290300370300200720072903e801370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a80420074198026a200741f8006a200741a8046a10d106200c20074198026a41286a290300370300200820074198026a41206a290300370300200920074198026a41186a290300370300200d20074198026a41106a290300370300200e20074198026a41086a2903003703002007200729039802370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741c8026a200741f8006a200741a8046a10d106200c200741c8026a41286a2903003703002008200741c8026a41206a2903003703002009200741c8026a41186a290300370300200d200741c8026a41106a290300370300200e200741c8026a41086a290300370300200720072903c802370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741f8026a200741f8006a200741a8046a10d106200741d8036a41286a200741f8026a41286a290300370300200741d8036a41206a200741f8026a41206a290300370300200741d8036a41186a2205200741f8026a41186a290300370300200741d8036a41106a200741f8026a41106a290300370300200741d8036a41086a200741f8026a41086a290300370300200720072903f8023703d803200741a8046a20032004200610d206200e200741a8046a410c6a290200370300200d200741a8046a41146a2902003703002009200741a8046a411c6a2902003703002008200741a8046a41246a290200370300200c200741a8046a412c6a290200370300200741a8016a200741dc046a280200360200200720072902ac0437037820072d00a8044101470d0120072d00ab04210a20072f00a904210b20072802e8032109024020052802002201450d002001410c6c21082009210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b0240200741ec036a2802002201450d002001410c6c450d002009102c0b200a411074210a20072802f40321090240200741fc036a2802002201450d002001410c6c21082009210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b200b200a7221010240200741f8036a2802002208450d002008410c6c450d002009102c0b200741e0006a41086a20074188046a41086a290200370300200741e0006a41106a20074188046a41106a2802003602002007200729028804370360200041036a20014110763a0000200020013b0001200041013a00000c080b200741f8006a41206a22084200370300200741f8006a41186a22094280808080c000370300200741013a00a0012007420437038801427f210f2007427f3703800120074200370378200741a8046a41206a220a4200370300200741a8046a41186a220b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741b8016a200741f8006a200741a8046a10d106200741f8006a41286a220c200741b8016a41286a2903003703002008200741b8016a41206a2903003703002009200741b8016a41186a290300370300200741f8006a41106a220d200741b8016a41106a290300370300200741f8006a41086a220e200741b8016a41086a290300370300200720072903b801370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741e8016a200741f8006a200741a8046a10d106200c200741e8016a41286a2903003703002008200741e8016a41206a2903003703002009200741e8016a41186a290300370300200d200741e8016a41106a290300370300200e200741e8016a41086a290300370300200720072903e801370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a80420074198026a200741f8006a200741a8046a10d106200c20074198026a41286a290300370300200820074198026a41206a290300370300200920074198026a41186a290300370300200d20074198026a41106a290300370300200e20074198026a41086a290300370300200720072903980237037820074188046a41186a2208420037030020074188046a41106a220c420037030020074188046a41086a220942003703002007420037038804200741e0006a41c1dcc700410610c5012009200741e0006a41086a2900003703002007200729006037038804200741a8046a4196a4c600410610c5012008200741a8046a41086a290000370300200c20072900a804370300200741c8006a20074188046a412010c601200728024c410020072802481bad2110024020012903204201520d002001290328220f4200510d02200141306a2903002211200f7c4200201020117d221120112010561b22117c2011200f827d210f0b200a4200370300200b4280808080c000370300200720072800e0053602d8032007200741e3056a2800003600db03200741d4046a20072800db03360000200741013a00d004200742043703b804200742003703a80420074200200f20107d22102010200f561b3703b004200720072802d8033600d104200741c8026a200741f8006a200741a8046a10d106200741e0056a41286a200741c8026a41286a290300370300200741e0056a41206a200741c8026a41206a290300370300200741e0056a41186a200741c8026a41186a290300370300200741e0056a41106a200741c8026a41106a290300370300200741e0056a41086a200741c8026a41086a290300370300200720072903c8023703e005200741e0006a41c1dcc700410610c501200741a8046a41acc8c700410710c501200741d8036a200110d50220072802e003220841206a2209417f4c0d020240024020090d004101210a0c010b20091032220a450d040b200741003602b003200720093602ac032007200a3602a803200741a8036a4100411010c80120072802a80320072802b00322096a220a2007290060370000200a41086a200741e0006a41086a2900003700002007200941106a22093602b003200741a8036a2009411010c80120072802a80320072802b00322096a220a20072900a804370000200a41086a200741a8046a41086a2900003700002007200941106a220a3602b00320072802d8032109200741a8036a200a200810c80120072802a803220a20072802b003220b6a2009200810c9081a2007200b20086a22083602b003024020072802dc03450d002009102c0b200741a8046a200a200810d602200741f0046a280200410020072903a8044201511b2108024020072802ac03450d00200a102c0b02400240200128023822092008490d00410c1032220a450d054104210d41041032220b450d05200742043702ac042007200b3602a8044100210e200741a8046a41004120102f20072802a80420072802b00422026a220b2001290000370000200b41086a200141086a290000370000200b41106a200141106a290000370000200b41186a200141186a2900003700002007200241206a220b3602b004200741a8046a200b4104102f20072802a80420072802b004220b6a2009360000200a20072903a804370200200a41086a200b41046a3602000240200820094f0d00410c1032220d450d06410410322208450d06200742043702ac04200720083602a804200741a8046a41004120102f20072802a80420072802b004220b6a22082001290000370000200841086a200141086a290000370000200841106a200141106a290000370000200841186a200141186a2900003700002007200b41206a22083602b004200741a8046a20084104102f20072802a80420072802b00422086a2009417f6a360000200d20072903a804370200200d41086a200841046a3602004101210e0b200741f8006a41206a428180808010370300200741f8006a41186a200e360200200741f8006a41146a200e36020020072007280088043602b00120072007418b046a2800003600b301200741f8006a412c6a20072800b301360000200741013a00a0012007200a360294012007200d360288012007427f3703800120074200370378200720072802b0013600a101200741f8026a200741e0056a200741f8006a10d106200741d8036a41286a200741f8026a41286a290300370300200741d8036a41206a200741f8026a41206a290300370300200741d8036a41186a200741f8026a41186a290300370300200741d8036a41106a200741f8026a41106a290300370300200741d8036a41086a200741f8026a41086a290300370300200720072903f8023703d8030240200441ff01714102470d0020074180016a200741b4046a29020037030020074188016a200741a8046a41146a29020037030020074190016a200741c4046a29020037030020074198016a200741cc046a290200370300200741f8006a41286a200741a8046a412c6a290200370300200741a8016a200741dc046a280200360200200720072902ac0437037841801221010c090b200741a8046a20032004200610d206200741f8006a41086a200741a8046a410c6a290200370300200741f8006a41106a200741a8046a41146a290200370300200741f8006a41186a200741a8046a411c6a290200370300200741f8006a41206a200741a8046a41246a290200370300200741f8006a41286a200741a8046a412c6a290200370300200741a8016a200741dc046a280200360200200720072902ac0437037820072d00a8044101470d0120072f00a90420072d00ab044110747221010c080b20072007280088043602b001200720074188046a41036a2800003600b301200041036a41003a000020004180063b0001200041013a000020072802f00521000240200741f8056a2802002201450d002001410c6c21082000210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b0240200741f4056a2802002201450d002001410c6c450d002000102c0b20072802fc052100024020074184066a2802002201450d002001410c6c21082000210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b20074180066a2802002201450d082001410c6c450d082000102c0c080b200741e0056a41286a2208200741a4016a220e290200370300200741e0056a41206a2209200741f8006a41246a290200370300200741e0056a41186a220a200741f8006a411c6a290200370300200741e0056a41106a220b2007418c016a290200370300200741e0056a41086a220d200741f8006a410c6a2902003703002007200729027c3703e005200741a8036a200741d8036a200741e0056a10d1062008200741a8036a41286a2903003703002009200741a8036a41206a290300370300200a200741a8036a41186a290300370300200b200741a8036a41106a290300370300200d200741a8036a41086a290300370300200720072903a8033703e005200741386a2006200320012903402211200141c8006a2903002212200541ff01714100472004109206024002402007290338220f200741386a41086a290300221084500d00200741a8046a2001200f2010410141112011201284501b410010cd0620072802a8044101460d01200741a8046a41106a290300211320072903b0042111200741a0046a2209420037030020074188046a41106a220a420037030020074188046a41086a220142003703002007420037038804200741e0006a41d4dcc700410810c5012001200741e0006a41086a220b2900003703002007200729006037038804200741a8046a41bba8c700410d10c501200c41086a220d200741a8046a41086a2204290000370000200c20072900a804370000200741206a20074188046a412010d301200741206a41106a2903002112200729032821142007280220210820094200370300200a4200370300200142003703002007420037038804200741e0006a41d4dcc700410810c5012001200b2900003703002007200729006037038804200741a8046a41bba8c700410d10c501200d2004290000370000200c20072900a804370000200742002012420020081b221220137d2014420020081b2213201154ad7d2214201320117d2211201356201420125620142012511b22011b3703b00420074200201120011b3703a80420074188046a4120200741a8046a411010a7020b200741a8046a109b0120072903b0042111200741013a00a001200720104200418080f00120064101200641014b1b6ead221220112003420120034201561b80220320032012561b2203420010ce08200741106a200f42002003420010ce08200741f8006a41206a4200370300200741f8006a41186a4280808080c0003703002007200741d3006a2800003600b301200720072800503602b001200e20072800b3013600002007420437038801200720072802b0013600a1012007290308210f200741106a41086a2903002103200729030021102007427f370380012007427f2007290310200f420052200320107c220f2003547222011b427f427f200f20011b501b370378200741d8036a200741e0056a200741f8006a10d106200041306a200741d8036a41286a290300370300200041286a200741d8036a41206a290300370300200041206a200741d8036a41186a290300370300200041186a200741d8036a41106a290300370300200041106a200741d8036a41086a290300370300200041086a20072903d803370300200041003a00000c080b200720072800503602b0012007200741d0006a41036a2800003600b301200041036a41003a000020004180023b0001200041013a000020072802f00521000240200741f8056a2802002201450d002001410c6c21082000210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b0240200741f4056a2802002201450d002001410c6c450d002000102c0b20072802fc052100024020074184066a2802002201450d002001410c6c21082000210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b20074180066a2802002201450d072001410c6c450d072000102c0c070b200741e0056a41286a200741f8006a412c6a290200370300200741e0056a41206a2204200741f8006a41246a290200370300200741e0056a41186a2206200741f8006a411c6a290200370300200741e0056a41106a200741f8006a41146a290200370300200741e0056a41086a2205200741f8006a410c6a2902003703002007200729027c3703e005200741a8036a200741d8036a200741e0056a10d106200c200741a8036a41286a2903003703002008200741a8036a41206a2903003703002009200741a8036a41186a290300370300200d200741a8036a41106a290300370300200e200741a8036a41086a290300370300200720072903a803370378200a4200370300200b4280808080c000370300200741013a00d004200742043703b8042007427f3703b004200742003703a804200741e0056a200741f8006a200741a8046a10d10620074188046a410c6a2005290300370200200720072903e00537028c04200741e0056a41146a280200210c200628020021082004280200210d200741e0056a41246a280200210920072802f005210a20072802fc05210b2007290388062103200741e0006a41106a20074188046a41106a280200360200200741e0006a41086a20074188046a41086a2902003703002007200729028804370360200741d0006a41086a200741e0006a410c6a29020037030020072007290264370350024002400240024002402001280250417f6a0e0a01000000000200000304000b200741003a00ab0420074181023b00a9040c070b0240200141d8006a2802004102460d00200741003a00ab04200741003b00a9040c070b0240200241ff017141014b0d00200741a8046a41086a427f370300200741dc046a4110360200200741a8046a41206a4200370300200741a8046a41186a4280808080c0003703002007427f3703a804200741cdc8c5003602d804200741013a00d004200742043703b804200741a8036a41186a200141f0026a290200220f370300200741a8036a41106a200141e8026a2902002210370300200741a8036a41086a200141e0026a29020022113703002007200141d8026a29020022123703a803200141f0006a2903002113200741e0056a411c6a200f370200200741f4056a2010370200200741ec056a2011370200200720123702e405411c10322201450d06200741d1046a21062007421c3702fc02200720013602f80241002101200741f8026a41004101102f20072802f802200728028003220e6a41c0003a00002007200e41016a220e36028003200741f8026a200e4110102f20072802f802200728028003220e6a220441002900cdc845370000200441086a41002900d5c8453700002007200e41106a220e36028003200741f8026a200e4120102f20072802f80220072802800322026a220e200741e4056a2204290000370000200e41086a200441086a290000370000200e41106a200441106a290000370000200e41186a200441186a2900003700002007200241206a220e36028003200741f8026a200e4108102f20072802f802200728028003220e6a20133700002007200e41086a36028003024020072802cc04220e20072802c804470d00200741a8046a411c6a200e410110ec0120072802cc04210e0b20072802c404200e410c6c6a220e20072903f802370200200e41086a200741f8026a41086a280200360200200741e0056a41086a220e200741a8046a41086a2204290300370300200741e0056a41106a2202200741a8046a41106a2205290300370300200741e0056a41186a2215200741a8046a41186a2216290300370300200720072802cc0441016a3602cc04200741e0056a41206a2217200741a8046a41206a2218290300370300200720072903a8043703e0052007200641076a2900003700ff02200720062900003703f802200741a8036a41206a22062017290300370300200741a8036a41186a22172015290300370300200741a8036a41106a22152002290300370300200741a8036a41086a2202200e290300370300200720072903e0053703a803200720072900ff023700cf02200720072903f8023703c802200741d0046a2006290300370300201820172903003703002016201529030037030020052002290300370300200420072903a803370300200741d8046a41003a0000200741dc046a20072800cb02360000200741d9046a20072802c802360000200741003a00a8040c080b024041002802d8d2484102490d00200741d4003602e405200741fcf0c5003602e00541002802d4d248210141002802d0d248210e41002802dcd2482104200741e8046a41af01360200200741e0046a42e480808010370300200741dc046a41989fc800360200200741d4046a4219370200200741d0046a41ff9ec800360200200741c8046a4201370300200741b8046a4201370300200741b0046a4104360200200741c4046a200741a8036a360200200741b4b5c8003602b404200741ddc8c5003602ac04200741043602ac03200741023602a804200141e0a3c000200441024622041b28021021012007200741e0056a3602a803200e41f8a3c00020041b200741a8046a20011103000b200741003a00ab04200741003b00a9040c060b0240200141d8006a2d00004118460d00200741003a00ab04200741003b00a9040c060b2007200141a8026a220e3602980202400240200241ff017141014b0d00200741a8046a41286a200141b8026a220141286a290300370300200741a8046a41206a200141206a290300370300200741a8046a41186a200141186a290300370300200741a8046a41106a200141106a290300370300200741a8046a41086a200141086a290300370300200720012903003703a804200741e0056a200741a8046a200e28020010a70420072903e0054201520d014107210e200741073a00f802200720072d0082064100200741e0056a41206a2d00004103461b22013a00f902024041002802d8d2484104490d002007411d3602ac032007200741f8026a3602a80341002802d4d248210141002802d0d248210e41002802dcd2482104200741e8046a41a61a360200200741e0046a42de80808010370300200741dc046a41acc5c300360200200741d4046a420e370200200741d0046a41e28fc100360200200741c8046a4201370300200741b8046a4202370300200741b0046a4107360200200741c4046a200741a8036a360200200741949cc3003602b404200741db8fc1003602ac04200741043602a804200e41f8a3c000200441024622041b200741a8046a200141e0a3c00020041b28021011030020072d00f902210120072d00f802210e0b200720013a00ab0441012101200741013a00a8042007200e4108743b00a9040c080b024041002802d8d2484104490d00200741d39bc3003602e00541002802d4d248210141002802d0d248210e41002802dcd2482104200741c0003602e405200741a8046a41c0006a419f1a360200200741e0046a42de80808010370300200741dc046a41acc5c300360200200741d4046a420e370200200741d0046a41e28fc100360200200741c8046a4201370300200741b8046a4201370300200741b0046a4107360200200741c4046a200741a8036a360200200741b4b5c8003602b404200741db8fc1003602ac04200741043602a804200741043602ac03200141e0a3c000200441024622041b28021021012007200741e0056a3602a803200e41f8a3c00020041b200741a8046a20011103000b200741003a00ab04200741003b00a9040c060b024041002802d8d2484104490d002007411e3602e405200720074198026a3602e00541002802d4d248210e41002802d0d248210441002802dcd2482106200741e8046a41ae1a360200200741e0046a42de80808010370300200741dc046a41acc5c300360200200741d4046a420e370200200741d0046a41e28fc100360200200741c8046a4201370300200741b8046a4202370300200741b0046a4107360200200741c4046a200741e0056a360200200741a49cc3003602b404200741db8fc1003602ac04200741043602a804200441f8a3c000200641024622061b200741a8046a200e41e0a3c00020061b2802101103000b200741dc046a410f360200200741c8046a4200370300200741c0046a4280808080c000370300200741b49cc3003602d804200741013a00d004200742043703b804200141086a290300210f2007427f3703b0042007427f2001290300427f200f501b220f42ffffffffffffffffff007c22102010200f541b3703a8042007280298022106411710322201450d04200742173702ac03200720013602a80320072802d8042102024002400240024020072802dc04220141c000490d00200141808001490d012001418080808004490d02200741a8036a41004101102f20072802a80320072802b003220e6a41033a00002007200e41016a220e3602b003200741a8036a200e4104102f20072802a80320072802b003220e6a20013600002007200e41046a22053602b003200741a8036a210e0c030b200741a8036a41004101102f20072802a80320072802b003220e6a20014102743a00002007200e41016a22053602b003200741a8036a210e0c020b200741a8036a41004102102f20072802a80320072802b003220e6a20014102744101723b00002007200e41026a22053602b003200741a8036a210e0c010b200741a8036a41004104102f20072802a80320072802b003220e6a20014102744102723600002007200e41046a22053602b003200741a8036a210e0b200741d1046a2104200e20052001102f20072802a80320072802b00322056a2002200110c9081a2007200520016a22013602b00320062802002106200e20014104102f20072802a80320072802b00322016a20063600002007200141046a3602b003024020072802cc04220120072802c804470d00200741c4046a2001410110ec0120072802cc0421010b20072802c4042001410c6c6a220120072903a803370200200141086a200741a8036a41086a2201280200360200200741e0056a41086a220e200741c0046a2206290300370300200720072802cc0441016a3602cc04200741e0056a41106a2202200741c8046a2205290300370300200720072903b8043703e005200720042900003703f8022007200441076a2900003700ff0220072903a804210f200741a8036a41106a220420022903003703002001200e290300370300200720072903e0053703a803200720072900ff023700cf02200720072903f8023703c802200741a8046a41106a429601370300200741a8046a41086a200f370300200741d0046a200429030037030020052001290300370300200620072903a80337030041002101200741d8046a41003a0000200741dc046a20072800cb02360000200741d9046a20072802c802360000200741003a00a8040c060b0240200141d8006a2802004102460d00200741003a00ab04200741003b00a9040c050b0240200241ff017141014b0d00200741a8046a41086a427f370300200741dc046a4113360200200741a8046a41206a4200370300200741a8046a41186a4280808080c0003703002007427f3703a804200741e9f0c5003602d804200741013a00d004200742043703b804200741a8036a41086a200141d8026a290200220f370300200741a8036a41106a200141e0026a2902002210370300200741a8036a41186a200141e8026a29020022113703002007200141d0026a29020022123703a80320014180016a2903002113200141f0006a2903002114200741e0056a41186a22062011370300200741e0056a41106a22022010370300200741e0056a41086a2205200f370300200720123703e005412710322201450d04200741d1046a2104200742273702fc02200720013602f80241002101200741f8026a41004101102f20072802f802200728028003220e6a41cc003a00002007200e41016a220e36028003200741f8026a200e4113102f20072802f80220072802800322156a220e41002900e9f045370000200e41086a41002900f1f045370000200e410f6a41002800f8f0453600002007201541136a220e36028003200741f8026a200e4120102f20072802f80220072802800322156a220e20072903e005370000200e41086a2005290300370000200e41106a2002290300370000200e41186a20062903003700002007201541206a220e36028003200741f8026a200e4108102f20072802f802200728028003220e6a20143700002007200e41086a220e36028003200741f8026a200e4108102f20072802f802200728028003220e6a20133700002007200e41086a36028003024020072802cc04220e20072802c804470d00200741c4046a200e410110ec0120072802cc04210e0b20072802c404200e410c6c6a220e20072903f802370200200e41086a200741f8026a41086a280200360200200741e0056a41086a220e200741a8046a41086a2206290300370300200741e0056a41106a2202200741a8046a41106a2205290300370300200741e0056a41186a2215200741a8046a41186a2216290300370300200720072802cc0441016a3602cc04200741e0056a41206a2217200741a8046a41206a2218290300370300200720072903a8043703e0052007200441076a2900003700ff02200720042900003703f802200741a8036a41206a22042017290300370300200741a8036a41186a22172015290300370300200741a8036a41106a22152002290300370300200741a8036a41086a2202200e290300370300200720072903e0053703a803200720072900ff023700cf02200720072903f8023703c802200741d0046a2004290300370300201820172903003703002016201529030037030020052002290300370300200620072903a803370300200741d8046a41003a0000200741dc046a20072800cb02360000200741d9046a20072802c802360000200741003a00a8040c060b024041002802d8d2484102490d00200741d4003602e405200741fcf0c5003602e00541002802d4d248210141002802d0d248210e41002802dcd2482104200741e8046a41c601360200200741e0046a42e780808010370300200741dc046a41c8a0c800360200200741d4046a421c370200200741d0046a41aca0c800360200200741c8046a4201370300200741b8046a4201370300200741b0046a4103360200200741c4046a200741a8036a360200200741b4b5c8003602b404200741d0f1c5003602ac04200741043602ac03200741023602a804200141e0a3c000200441024622041b28021021012007200741e0056a3602a803200e41f8a3c00020041b200741a8046a20011103000b200741003a00ab04200741003b00a9040c040b200741a8046a200141d4006a10b50620072d00a80441014621010c040b41d0b6c800411941ecb6c800103c000b103b000b1039000b41012101200741013a00a8040b200741f8006a41086a220e200741a8046a410c6a290200370300200741f8006a41106a200741a8046a41146a290200370300200741f8006a41186a2204200741a8046a411c6a290200370300200741f8006a41206a2206200741a8046a41246a290200370300200741f8006a41286a200741a8046a412c6a290200370300200741f8006a41306a200741dc046a280200360200200720072902ac04370378024020010d00200741d8036a41286a2201200741f8006a412c6a290200370300200741d8036a41206a2202200741f8006a41246a2205290200370300200741d8036a41186a2215200741f8006a411c6a290200370300200741d8036a41106a2216200741f8006a41146a2217290200370300200741d8036a41086a2218200741f8006a410c6a2902003703002007200729027c3703d803200e200741d0006a41086a290300370300200520093602002006200d360200200420083602002017200c36020020072007290350370378200720033703a0012007200b360294012007200a36028801200741a8046a41286a2001290300370300200741a8046a41206a2002290300370300200741a8046a41186a2015290300370300200741a8046a41106a2016290300370300200741a8046a41086a2018290300370300200720072903d8033703a804200741e0056a200741f8006a200741a8046a10d106200041306a200741e0056a41286a290300370300200041286a200741e0056a41206a290300370300200041206a200741e0056a41186a290300370300200041186a200741e0056a41106a290300370300200041106a200741e0056a41086a290300370300200041086a20072903e005370300200041003a00000c020b200020072f00a90420072d00ab044110747222013b0001200041013a0000200041036a20014110763a000002402008450d002008410c6c2108200a210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b0240200c450d00200a450d00200c410c6c450d00200a102c0b02402009450d002009410c6c2108200b210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b200d450d01200b450d01200d410c6c450d01200b102c0c010b200020013b0001200041013a0000200041036a20014110763a000020072802e80321000240200741f0036a2802002201450d002001410c6c21082000210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b0240200741ec036a2802002201450d002001410c6c450d002000102c0b20072802f40321000240200741fc036a2802002201450d002001410c6c21082000210103400240200141046a280200450d002001280200102c0b2001410c6a2101200841746a22080d000b0b200741f8036a2802002201450d002001410c6c450d002000102c0b20074190066a24000bc23d06037f017e197f017e017f027e230022022103200241e0046b416071220224002002428080808080203702cc02200220013602a4022002200041c4b5c80020011b3602a0022002200241a0026a3602c80220024198036a200241c8026a10ab05200228029c0321042002280298032101200241a0016a20024198036a41086a41e80010c9081a0240024002400240024002400240024002402004450d002002200436023420022001360230200241306a41086a200241a0016a41e80010c90821000240024020022802c802280204450d00200241306a410472102b410021040c010b20024198036a200041e80010c9081a0b2004450d002002200436023420022001360230200241386a20024198036a41e80010c9081a02402002413c6a2802002201ad42247e2205422088a70d002005a72200417f4c0d0002400240024020000d00410421060c010b200010322206450d010b200241003602980220022006360290022002200041246e3602940220024190026a4100200110f201200228029802210602402001450d00200141246c2107200228029002200641246c6a21084100210003400240024002400240024002400240200420006a22012d00000e06010203040500010b2001410c6a2802002209417f4c0d09200141046a28020021010240024020090d004101210a0c010b20091032220a450d090b200241003602a0032002200936029c032002200a3602980320024198036a4100200910c801200228029803220a20022802a003220b6a2001200910c9081a2002200a3600a301200b20096a2109200228029c03210a4105210b0c050b4100210b2002410036009b0320024100360298032002200141046a28000036009b032002200141016a280000360298032002200141146a2900003703a0022002200141196a2900003700a50220022002280298033602a0012002200228009b033600a301200141086a280000210a2001410c6a2800002109200141106a280000210c0c040b200141106a2802002209417f4c0d07200141016a280000210c200141086a280200210d4101210b4101210102402009450d00200910322201450d070b200241003602a0032002200936029c03200220013602980320024198036a4100200910c801200228029803220a20022802a00322016a200d200910c9081a2002200c3602a001200120096a210c200228029c0321090c030b200141106a2802002209417f4c0d06200141016a280000210b200141086a28020021010240024020090d004101210a0c010b20091032220a450d060b200241003602a0032002200936029c032002200a3602980320024198036a4100200910c801200228029803220a20022802a003220c6a2001200910c9081a2002200b3602a001200c20096a210c200228029c0321094102210b0c020b200141106a2802002209417f4c0d05200141016a280000210b200141086a28020021010240024020090d004101210a0c010b20091032220a450d050b200241003602a0032002200936029c032002200a3602980320024198036a4100200910c801200228029803220a20022802a003220c6a2001200910c9081a2002200b3602a001200c20096a210c200228029c0321094103210b0c010b4104210b2002200141046a2802003600a3012001410c6a2802002109200141086a280200210a0b200820006a2201200b3a0000200141016a20022802a001360000200141046a20022800a301360000200141106a200c3602002001410c6a2009360200200141086a200a360200200141146a20022903a0023702002001411c6a200241a0026a41086a290300370200200641016a21062007200041246a2200470d000b0b20022006360298022002280230200241c0006a20024180016a20024190026a410010830320024198036a200241306a1028200241c8026a41c1dcc700410610c501200241a0026a41fda3c600410910c501200220022802303602a004200241f0026a200241a0046a410410c701200241ac016a200241a0046a41046a3602002002200241f8026a3602a4012002200241a0046a3602a8012002200241f0026a3602a001200241a8046a200241a0016a107e20022802b004220141206a2200417f4c0d010240024020000d00410121060c010b200010322206450d010b200241003602a801200220003602a401200220063602a001200241a0016a4100411010c80120022802a00120022802a80122006a220620022900c802370000200641086a200241c8026a41086a2900003700002002200041106a22003602a801200241a0016a2000411010c80120022802a00120022802a80122006a220620022903a002370000200641086a200241a0026a41086a2903003700002002200041106a22063602a80120022802a8042100200241a0016a2006200110c80120022802a001220620022802a80122096a2000200110c9081a2002200920016a22013602a801024020022802ac04450d002000102c0b2006200120024198036a10c902024020022802a401450d002006102c0b410041002802dcd2482201410120011b3602dcd24802400240024020010e020001020b41004180a0c0003602d4d248410041c4b5c8003602d0d248410041023602dcd2480c010b034041002802dcd2484101460d000b0b410041053602d8d24820022002280230220e36029c0210d405450d03200241b0036a22014200370300200241a8036a2200420037030020024198036a41086a220642003703002002420037039803200241a0016a418dddc700410810c5012006200241a0016a41086a2209290000370300200220022900a00137039803200241a0016a4199eec300410e10c50120012009290000370300200020022900a001370300200241286a20024198036a412010c601410021090240200228022c410020022802281b220f200e4d0d00200241a8046a2100200241a0016a21010c090b2001420037030020004200370300200642003703002002420037039803200241c8026a41ffdcc700410710c5012006200241c8026a41086a2209290000370300200220022900c80237039803200241a0026a41b8b3c300410c10c5012001200241a0026a41086a220a290300370300200020022903a002370300200241206a20024198036a412010c60120022802242110200228022021112001420037030020004200370300200642003703002002420037039803200241c8026a41ffdcc700410710c50120062009290000370300200220022900c80237039803200241a0026a418893c700410a10c5012001200a290300370300200020022903a002370300200241a0016a20024198036a10e1010240024020022802a00122010d00410021120c010b20022902a4012205422088a721122005a72200450d00200041ffffff3f71450d002001102c0b200241c8026a10ec0220024198036a41e9dabdf30610d505200228029c03211320022802980322142101024020022802a0032200450d0020004105742100201421010340200141206a2101200041606a22000d000b0b200120146b41057522154115490d062015410176220141ffffff3f712001470d0120014105742216417f4c0d01201610322217450d00200241003602a801200242043703a001201441606a2118201441a07f6a211941042100410021012015211a02400340201a211b4100211a4101210a0240201b417f6a220b450d000240024002400240024002402014200b4105746a201b410574220420146a41406a412010cc084100480d00201b417e6a210b201920046a21064100211a4100210903400240200b2009470d00201b210a0c080b200941016a2109200641206a2006412010cc08210a200641606a2106200a417f4a0d000b200941016a210a2009417f73201b6a210b0c010b201920046a2106024003400240200b4101470d004100210b0c020b200b417f6a210b200641206a2006412010cc082109200641606a210620094100480d000b0b201b200b490d01201b20154b0d02201b200b6b220a410176220c450d00201820046a21062014200b4105746a2109034020024198036a41186a2204200941186a220729000037030020024198036a41106a2208200941106a220d29000037030020024198036a41086a221c200941086a220f2900003703002002200929000037039803200641086a221d2900002105200641106a221e290000211f200641186a222029000021212009200629000037000020072021370000200d201f370000200f200537000020202004290300370000201e2008290300370000201d201c2903003700002006200229039803370000200641606a2106200941206a2109200c417f6a220c0d000b0b0240200b0d00200b211a0c050b0240200a41094d0d00200b211a0c050b201b20154b0d02201b200b6b210a200b417f6a21062018200b4105746a21090340201b2006490d0c2009200a41016a220a10bc012006417f6a220b20064f0d04200941606a2109200b2106200a410a490d000c040b0b200b201b41b8a3c8001059000b201b201541b8a3c800104f000b201b200b417f6a2206490d08201b201541c8a3c800104f000b200b41016a211a0b0240200120022802a401470d00200241a0016a10ae0120022802a801210120022802a00121000b200020014103746a2206200a3602042006201a3602002002200141016a22013602a8010240024020014102490d0020022802a001210003400240024002400240024020002001417f6a4103746a2206280200450d00200141037420006a220b41746a280200220a200628020422094b0d010b20014103490d022006280204210920002001417d6a221c4103746a28020421060c010b200141024d0d0420002001417d6a221c4103746a28020422062009200a6a4d0d00200141034d0d04200b41646a2802002006200a6a4b0d040b20062009490d010b2001417e6a211c0b02400240024002400240024002402001201c41016a220f4d0d002001201c4d0d012000201c410374221e6a2201280204222020012802006a22012000200f410374221b6a2200280200221d490d02200120154b0d032014201d4105746a22082000280204220d41057422006a2106200141057421092001201d6b220a200d6b2201200d4f0d04201720062001410574220010c908220c20006a2107200d4101480d0520014101480d05201820096a21012006210020072109034002400240200941606a220a200641606a220b412010cc084100480d00200a21072006210b0c010b200b21002009210a200621090b2001200941606a2206290000370000200141186a200641186a290000370000200141106a200641106a290000370000200141086a200641086a2900003700000240200a200c4b0d00200c21040c080b200141606a2101200a2109200b2106200c21042008200b490d000c070b0b200f200141d8a3c800103f000b201c200141e8a3c800103f000b201d200141f8a3c8001059000b2001201541f8a3c800104f000b20172008200010c908220120006a21070240200d4101480d00200a200d4c0d00201420096a210b20012104200121012008210003400240024020062001412010cc084100480d00200141206a220421092006210a0c010b200641206a210a20012109200621010b20002001290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a290000370000200041206a2100200920074f0d0320092101200a2106200a200b490d000c030b0b20012104200821000c010b200c2104200621000b20002004200720046b41607110c9081a20022802a8012201201c4d0d0220022802a0012200201e6a22062020200d6a3602042006201d3602002001200f4d0d042000201b6a2206200641086a2001200f417f736a41037410ca081a20022001417f6a22013602a801200141014b0d000b0b201a450d080c010b0b201c20014188a4c800103f000b200f20011047000b1039000b103b000b200241ac016a4104360200200241c4006a41023602002002420237023420024194c7c300360230200241043602a401200241ecc9c3003602a001200241003602cc02200241c4b5c8003602c8022002200241a0016a3602402002200241c8026a3602a801200241306a41a4c7c3001046000b41002802d8d2484105490d05200241133602a40120022002419c026a3602a00141002802d4d248210141002802d0d248210041002802dcd2482106200241d8036a418203360200200241d0036a42e080808010370300200241cc036a41b9edc300360200200241c4036a4210370200200241c0036a41d0eec300360200200241b8036a4201370300200241a8036a420237030020024198036a41086a4108360200200241b4036a200241a0016a360200200241b8eec3003602a403200241c8eec30036029c032002410536029803200041f8a3c000200641024622061b20024198036a200141e0a3c00020061b2802101103000c050b2006201b41c8a3c8001059000b024020022802a40141ffffffff0171450d0020022802a001102c0b2016450d012017102c0c010b4102210120154102490d0020142015417e6a22004105746a2106034020152000490d042006200110bc01200641606a2106200141016a21012000417f6a2200417f470d000b0b2010410020111b210120022802cc02210f20022802c802210920022802d0022100200220123602c0012002200e3602bc01200220013602b801200220153602b401200220133602b001200220143602ac01200241003602a8012002200920004105746a22003602a401200220093602a001200220123602c8042002200e3602c404200220013602c004200220153602bc04200220133602b804200220143602b404200241003602b004200220003602ac04200220093602a804200241a8046a2100200241a0016a21010b200241a0026a41106a2206200141106a2902002205370300200241a0026a41186a2204200141186a290200221f370300200241f0026a41086a220b200141086a290200370300200241f0026a41106a220c2005370300200241f0026a41186a2207201f370300200241f0026a41206a2208200141206a280200360200200241c8026a41206a220d20024198036a41206a290200370300200241c8026a41186a221c20024198036a41186a290200370300200241c8026a41106a221d20024198036a41106a290200370300200241c8026a41086a221e20024198036a41086a220a290200370300200220012902003703f00220022002290298033703c802200241a0026a41206a2201200241a0016a41206a2903003703002004200241a0016a41186a2903003703002006200241a0016a41106a290300370300200241a0026a41086a2220200241a0016a41086a290300370300200220022903a0013703a002200a200f3602002002200936029c032002410136029803200241a4036a220920022903f002370200200241ac036a220a200b290300370200200241b4036a220b200c290300370200200241bc036a220c2007290300370200200241c4036a2008280200360200200241003602c803200241cc036a20022903c802370200200241d4036a201e290300370200200241dc036a201d290300370200200241e4036a201c290300370200200241ec036a200d290300370200200241003602f40320024198046a200129030037030020024190046a200429030037030020024188046a200629030037030020024180046a2020290300370300200241f8036a20022903a002370300200241e8036a2107200241d0036a2101200241f4036a211d200241c8036a211c200241d8036a2108200241e0036a210d410021060340024002402006450d00200241186a201c10d6050240200228021822064108460d00200228021c21040c020b024020022802c8032206450d00024020022802cc032204450d00200441ffffff3f71450d002006102c0b20022802e0032206450d00200641ffffff3f71450d0020022802dc03102c0b20012000290200370200200141086a200041086a290200370200200141106a200041106a290200370200200141186a200041186a290200370200200141206a200041206a2802003602002002200f3602cc03200241003602c8030b200b290200211f200b20022903b801370200200a2902002121200a20022903b00137020020092902002122200920022903a801370200200241a8046a41086a2204200c41086a280200360200200241003602a0012002200c2902003703a804200229029c032105200220022903a00137029c0302402005a72206450d00200720022903a804370200200220053703c80320012022370300200741086a200428020036020020082021370300200d201f3703000c020b024020022802f4030d00410821060c010b200241106a201d10d60520022802142104200228021021060b024002400240200641796a0e020200010b0240200228029803450d00200228029c032201450d00024020022802a00341ffffff3f71450d002001102c0b200241b4036a28020041ffffff3f71450d00200241b0036a280200102c0b024020022802c8032201450d00024020022802cc0341ffffff3f71450d002001102c0b20022802e00341ffffff3f71450d0020022802dc03102c0b20022802f4032201450d030240200241f8036a28020041ffffff3f71450d002001102c0b2002418c046a28020041ffffff3f71450d0320024188046a280200102c0c030b200220043602a404200220063602a00441002802d8d2484104490d002002411f3602b404200241133602ac042002200241a0046a3602b00420022002419c026a3602a80441002802d4d248210641002802d0d248210441002802dcd248211e200241f9023602e001200242e0808080103703d801200241b9edc3003602d401200242103702cc01200241d0eec3003602c801200242023703c001200242023703b001200241a8eec3003602ac01200241083602a801200241c8eec3003602a401200241043602a001200641e0a3c000201e410246221e1b28021021062002200241a8046a3602bc01200441f8a3c000201e1b200241a0016a20061103000b20022802c80321060c000b0b200241306a4104722101200241b0036a22004200370300200241a8036a2206420037030020024198036a41086a220942003703002002420037039803200241c8026a41e6dcc700410710c5012009200241c8026a41086a290000370300200220022900c80237039803200241a0026a41a08ec100411110c5012000200241a0026a41086a290300370300200620022903a002370300200241086a20024198036a108904024020022802084101470d00200228020c200e470d00200241a0016a4101419acbc000411810d80502400240024020022802a0012200450d00200241a8016a28020041034d0d0002400240200e200028000022064f0d004105210641cedec30021090c010b200641056a200e490d014112210641bcdec30021090b20022802a401450d012000102c0c010b2002200e3602a0022002200e3602c80220024198036a41086a200241a0016a41086a280200360200200220022903a001370398034101419acbc000411820024198036a200241c8026a410410d9050d01411f210641b2cbc00021090b200220063602cc02200220093602c80241002802d8d2484102490d01200241043602a4012002200241c8026a3602a00141002802d4d248210041002802d0d248210641002802dcd2482109200241d8036a41ac0a360200200241d0036a42de80808010370300200241cc036a41acc5c300360200200241c4036a420e370200200241c0036a41e28fc100360200200241b8036a4201370300200241a8036a4202370300200241a0036a4107360200200241b4036a200241a0016a360200200241e890c1003602a403200241db8fc10036029c032002410236029803200641f8a3c000200941024622091b20024198036a200041e0a3c00020091b2802101103000c010b200241c8026a10d101024020022802c802410a460d00200241a0016a41086a200241c8026a41086a280200360200200220022903c8023703a00141002802d8d248450d01200241203602a4022002200241a0016a3602a00241002802d4d248210041002802d0d248210641002802dcd2482109200241d8036a41af0a360200200241d0036a42de80808010370300200241cc036a41acc5c300360200200241c4036a420e370200200241c0036a41e28fc100360200200241b8036a4201370300200241a8036a420137030020024198036a41086a4107360200200241b4036a200241a0026a360200200241f890c1003602a403200241db8fc10036029c032002410136029803200641f8a3c000200941024622091b20024198036a200041e0a3c00020091b2802101103000c010b41002802d8d2484104490d002002418091c1003602a00241002802d4d248210041002802d0d248210641002802dcd2482109200241343602a402200241d8036a41b10a360200200241d0036a42de8080801037030020024198036a41346a41acc5c300360200200241c4036a420e370200200241c0036a41e28fc100360200200241b8036a4201370300200241a8036a4201370300200241a0036a4107360200200241b4036a200241a0016a360200200241b4b5c8003602a403200241db8fc10036029c032002410436029803200241043602a401200041e0a3c000200941024622091b28021021002002200241a0026a3602a001200641f8a3c00020091b20024198036a20001103000b20024190026a102b2001102b2003240042010f0b2000201541a8a3c8001058000b070010164101460b940705017f017e077f037e047f23004180026b220224002002200136020c0240024002402002410c6a100c2203422088a72201450d002002200136021420022003a722043602102002200241106a108702024002400240024020022802000d002002280204220520022802144105762201200120054b1b22014105742206417f4c0d060240024020010d00410121070c010b200610322207450d030b2001ad210302402005450d00410021080340200241003a00b8012002280214417f6a2101200841016a210841002106024002400240024003402001417f460d0120024198016a20066a200228021022092d00003a00002002200941016a3602102002200641016a22093a00b801200220013602142001417f6a21012009210620094120470d000b200241c0016a41086a220120024198016a41086a290300370300200241c0016a41106a220620024198016a41106a290300370300200241c0016a41186a220a20024198016a41186a29030037030020022002290398013703c001200941ff0171411f4d0d01200241386a41086a2001290300220b370300200241386a41106a2006290300220c370300200241386a41186a200a290300220d370300200241186a41186a2206200d370300200241186a41106a2209200c370300200241186a41086a220a200b370300200220022903c001220b3703582002200b3703382002200b3703182003422088a722012003a7470d03200141016a220e2001490d0c2001410174220f200e200e200f491b220e4104200e41044b1b220e41ffffff3f712210200e470d0c200e410574220f41004e0d020c0c0b200641ff0171450d00200241003a00b8010b200342ffffff3f834200510d042007102c0c040b2010200e46210e2001410574201120011b2111024002400240024002402007410020011b22010d00200f450d010c030b20110d01200f0d020b200e21070c020b20012011200f103522070d010c060b200f10322207450d050b200342808080807083200f410576ad8421030b20072003422088a74105746a22012002290318370000200141186a2006290300370000200141106a2009290300370000200141086a200a29030037000020034280808080107c210320082005470d000b0b20070d030b41f2b3c800412e20024198016a41d0b2c80041e0b2c8001040000b200e450d040b1039000b20002003370204200020073602002004102c0c010b20004100360208200042013702000b20024180026a24000f0b103b000bf21d030a7f047e0d7f230041d0066b220224000240024020012802082203200128020c2204460d002001200341206a22053602082001280210210620024190036a41186a200341186a29000037030020024190036a41106a200341106a29000037030020024190036a41086a200341086a2900003703002002200329000037039003200128021421074100210302400240024002402001411c6a28020022080e020201000b410021032008210903402009410176220a20036a210b200b20032007200b4105746a20024190036a412010cc084101481b21032009200a6b220941014b0d000b0b200720034105746a20024190036a412010cc08450d010b03402001200641016a220636021020052004460d022001200541206a220a36020820024190036a41186a200541186a29000037030020024190036a41106a200541106a29000037030020024190036a41086a200541086a290000370300200220052900003703900341002103200a21050240024020080e020201000b410021032008210503402005410176220b20036a210920092003200720094105746a20024190036a412010cc084101481b21032005200b6b220541014b0d000b0b200a2105200720034105746a20024190036a412010cc080d000b0b024002400240200820034d0d00200241086a41186a200720034105746a220341186a290000220c370300200241086a41106a200341106a290000220d370300200241086a41086a200341086a290000220e37030020022003290000220f3703082001200641016a360210200141286a2802002108200141206a2802002103200141246a2802002105200241286a41186a200c370300200241286a41106a200d370300200241286a41086a200e3703002002200f37032820022005360254200220033602502002200636024c20024190036a41186a2203420037030020024190036a41106a2205420037030020024190036a41086a220942003703002002420037039003200241d8006a41ffdcc700410710c5012009200241d8006a41086a220b2900003703002002200229005837039003200241d8006a418893c700410a10c5012003200b29000037030020052002290058370300200241d8006a20024190036a10e10120022802582203410120031b2105024002402006200229025c420020031b220c422088a7490d00200ca72203450d01200341ffffff3f71450d012005102c200228024c21060c010b2006200520064105746a10b60621090240200ca72203450d00200341ffffff3f71450d002005102c0b41022103200228024c210620090d050b200228025421092002280250210102400240411b10322203450d002002421b37025c20022003360258200241d8006a4100411b10c8012002280258200228026022056a220341002900c4f143370000200341086a41002900ccf143370000200341106a41002900d4f143370000200341176a41002800dbf14336000020022005411b6a220b360260410410322203450d002002420437029403200220033602900320024190036a41004104102f200228029003220520022802980322036a20063600002002200341046a220336029803200228029403210a200241d8006a200b200310c8012002280258220b200228026022076a2005200310c9081a2002200720036a22073602600240200a450d002005102c0b200228025c210a200241c0026a4101200b200710d805024002400240024020022802c0022203450d00200241c8026a28020022054104490d002005417c714104460d0020032800002001470d002003280004220541036a20094b0d010b200241003602602002420137035841042103200241d8006a41004104102f2002280258200228026022056a20013600002002200541046a2205360260200241d8006a20054104102f20022802582205200228026022046a20093600002002200441046a220436026020024190036a41086a200241c0026a41086a280200360200200220022903c002370390034101200b200720024190036a2005200410d90521040240200228025c450d002005102c0b20040d02200921050c010b024020022802c402450d002003102c0b410121030b0240200a0d00200521060c080b200b102c200521060c070b20024190036a10b7062002280290032204450d01200241a0036a280200211020024190036a410c6a2802002111200241a4036a280200211220024190036a41086a280200211320022802940321142002410036028803200242013703800320024180036a41004104102f20022802800320022802880322036a20093600002002200341046a360288032004201320024180036a10bb0120024180036a2012108f0102402012450d0020112012410c6c6a21052011210303402003280200200341086a28020020024180036a10bb012003410c6a22032005470d000b0b20024180036a2002280288034104102f20022802800320022802880322036a20013600002002200341046a22033602880320024180036a20034104102f20022802800320022802880322036a20063600002002200341046a22033602880320024180036a20034104102f200228028003220320022802880322056a20083600002002200541046a22053602880320024190036a41e9dabdf306200241286a2003200510b806410121050240024020022d0090034101460d00410321150c010b200241fe026a20022d0093033a0000200241c0026a41086a200241a4036a290200370300200241d0026a200241ac036a290200370300200241d8026a200241b4036a290200370300200241e0026a200241bc036a290200370300200241e8026a200241c4036a290200370300200241ed026a200241c9036a290000370000200220022f0091033b01fc0220022002419c036a2902003703c00220024190036a41086a28020021162002280294032115410021050b200241bc026a41026a2217200241fc026a41026a2d00003a000020024180026a41086a2218200241c0026a41086a29030037030020024180026a41106a2219200241c0026a41106a29030037030020024180026a41186a221a200241c0026a41186a29030037030020024180026a41206a221b200241c0026a41206a29030037030020024180026a41286a221c200241c0026a41286a29030037030020024180026a41306a200241c0026a41306a290300370300200220022f01fc023b01bc02200220022903c00237038002024020050d00200241fc016a41026a20172d00003a000020024190036a41086a201829030037030020024190036a41106a201929030037030020024190036a41186a201a29030037030020024190036a41206a201b29030037030020024190036a41286a201c29030037030020024190036a412d6a20024180026a412d6a290000370000200220022f01bc023b01fc012002200229038002370390030240200228028403450d002003102c0b200220022f01fc013b01c0022002200241fe016a2d00003a00c202410021030c050b0240200228028403450d002003102c0b02402014450d002004102c0b02402012450d002012410c6c21052011210303400240200341046a280200450d002003280200102c0b2003410c6a2103200541746a22050d000b0b4101210302402010450d002011450d002010410c6c450d002011102c0b20152109201621040c030b1039000b41012103410521090c010b2003200841b4f1c300103f000b0b200241c0016a41086a220520024190036a41086a290300370300200241c0016a41106a221720024190036a41106a290300370300200241c0016a41186a221820024190036a41186a290300370300200241c0016a41206a221920024190036a41206a290300370300200241c0016a41286a221a20024190036a41286a290300370300200241c0016a412d6a221b20024190036a412d6a290000370000200220022d00c2023a00fa01200220022f01c0023b01f80120022002290390033703c00102400240024020030d00200241d8006a41186a2012360200200241d8006a41146a2010360200200241d8006a41106a2011360200200241d8006a410c6a2013360200200241d8006a41086a201436020020024182016a20022d00fa013a000020024187016a201636000020024183016a20153600002002418b016a20022903c00137000020024193016a20052903003700002002419b016a2017290300370000200241a3016a2018290300370000200241ab016a2019290300370000200241b3016a201a290300370000200241b8016a201b2900003700002002200836027c20022006360278200220013602742002200436025c20022009360258200220022f01f8013b018001024041002802d8d2484103490d00200241c0026a411c6a4121360200200241c0026a41146a4113360200200241c0026a410c6a4113360200200241133602c4022002200241d8006a3602d8022002200241d0006a3602d0022002200241d4006a3602c8022002200241cc006a3602c00241002802d4d248210341002802d0d248210541002802dcd2482109200241d0036a418304360200200241c8036a42e080808010370300200241c4036a41b9edc300360200200241bc036a4210370200200241b8036a41d0eec300360200200241b0036a4204370300200241a0036a420437030020024190036a41086a410836020020024190036a411c6a200241c0026a360200200241e0f1c30036029c03200241c8eec300360294032002410336029003200541f8a3c000200941024622091b20024190036a200341e0a3c00020091b2802101103000b2002410a3602a804200242023703f803200241ac046a200241d8006a41e80010c9081a200220024190036a3602c00220024180026a200241c0026a108102200241c0026a41086a20024180026a41086a28020036020020022002290380023703c002200241c0026a1082022105200241a8046a108302410721034106210920050d010c020b4107210320094107460d010b2002410036029803200242013703900320024190036a41004104102f20022802900320022802980322036a20013600002002200341046a22033602980320024190036a20034104102f200228029003220320022802980322056a41003600002002200541046a2205360298034101200b20072003200510ba060240200228029403450d002003102c0b200921030b0240200a450d00200b102c0b200421060c010b410821030b2000200636020420002003360200200241d0066a24000bef0401017f230041306b220224000240024002400240024002400240024020002802000e0701020304050600010b2001411c6a2802002100200128021821012002412c6a4100360200200241c4b5c8003602282002420137021c20024188efc30036021820012000200241186a103e21010c060b2002200041046a36020c2002411c3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420137021c20024190efc3003602182002200241106a36022820012000200241186a103e21010c050b2002200041046a36020c2002411c3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c20024198efc3003602182002200241106a36022820012000200241186a103e21010c040b2002200028020436020c200241023602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c200241a8efc3003602182002200241106a36022820012000200241186a103e21010c030b2001411c6a2802002100200128021821012002412c6a4100360200200241c4b5c8003602282002420137021c200241b8efc30036021820012000200241186a103e21010c020b2001411c6a2802002100200128021821012002412c6a4100360200200241c4b5c8003602282002420137021c200241c0efc30036021820012000200241186a103e21010c010b2001411c6a2802002100200128021821012002412c6a4100360200200241c4b5c8003602282002420137021c200241c8efc30036021820012000200241186a103e21010b200241306a240020010b1800200020014101472003ad4220862002ad84101810fc070b8d0101017f230041206b22062400200641086a200310b00820004101472002ad4220862001ad84200641186a200641106a2200200628020822014101461b2903002005ad4220862004ad841017210202402001450d002000280200450d00200628020c102c0b024020032802002201450d00200341046a280200450d002001102c0b200641206a240020024101460be60202027f027e230041c0006b22022400024020010d00200241286a22014200370300200241206a22034200370300200241106a41086a420037030020024200370310200241106a41968dc700410d10c501200241306a418893c700410a10c5012001200241306a41086a29000037030020032002290030370300200241306a200241106a10ff0402400240200228023022010d00200241003602082002420137030041012101410121030c010b20022002290234220437020420022001360200200442ffffff3f835021030b200241106a200210db052002350218210420023502102105024020030d002001102c0b200241c0006a240020044220862005840f0b2002413c6a4104360200200241246a41023602002002420237021420024194c7c3003602102002410436023420024184cac30036023020024100360204200241c4b5c8003602002002200241306a36022020022002360238200241106a41a4c7c3001046000bec0102047f047e02400240200128020822024105744104722203417f4c0d0020012802002101200310322204450d012000200336020420002004360200200041086a2203410036020020002002108f0102402002450d0020024105742104200328020021050340200020054120102f200141186a2900002106200141106a2900002107200141086a29000021082001290000210920032003280200220241206a2205360200200220002802006a22022009370000200241086a2008370000200241106a2007370000200241186a2006370000200141206a2101200441606a22040d000b0b0f0b103b000b1039000bac0503027f017e077f230041c0006b2202240002400240024020010d00200241286a22014200370300200241206a22034200370300200241106a41086a420037030020024200370310200241106a41bee8c700410d10c501200241306a41dcecc700410f10c5012001200241306a41086a29000037030020032002290030370300200241306a200241106a10e9042002290234210420022802302105200241106a10dd052004422088a7410020051b2206410c6c41046a2201417f4c0d012002280218210720022802142108200228021021090240024020010d00410121030c010b200110322203450d030b2004a7210a2005410420051b210b200241003602182002200136021420022003360210200241106a2006108f0102402006450d00200b2006410c6c6a2103200b210103402001280200200141086a280200200241106a10d5032001410c6a22012003470d000b0b200a410020051b2105200241106a20022802184104102f2002280210200228021822016a20093600002002200141046a2201360218200241106a20014104102f2002280210200228021822016a20083600002002200141046a2201360218200241106a20014104102f20022802102208200228021822096a200736000002402006450d002006410c6c2103200b210103400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200341746a22030d000b0b02402005450d002005410c6c450d00200b102c0b200241c0006a2400200941046aad4220862008ad840f0b2002413c6a4104360200200241246a41023602002002420237021420024194c7c3003602102002410436023420024198cac3003602302002410036020c200241c4b5c8003602082002200241306a3602202002200241086a360238200241106a41a4c7c3001046000b103b000b1039000bdc0301097f230041e0016b22012400200141106a41186a22024200370300200141106a41106a22034200370300200141106a41086a2204420037030020014200370310200141106a41bee8c700410d10c501200141c0016a41c4efc700411110c5012002200141c0016a41086a2205290000370300200320012900c001370300200141086a200141106a412010c601200128020c210620012802082107200141c0016a41186a22024200370300200141c0016a41106a2203420037030020054200370300200142003703c001200141106a41c1dcc700410610c50120052004290000370300200120012900103703c001200141106a4196a4c600410610c50120022004290000370300200320012900103703002001200141c0016a412010c6012001280204210820012802002109200242003703002003420037030020054200370300200142003703c001200141106a41ac95c400410d10c50120052004290000370300200120012900103703c001200141106a41c695c400410c10c5012002200429000037030020032001290010370300200141106a200141c0016a10f502200128025821042001280268210520002008410020091b36020820002006410020071b36020020004101200420054102461b360204200141e0016a24000bdd4608067f017e017f017e057f027e207f037e230041800d6b22022400024002400240024002400240024002400240024020010d00200241f00a6a22014200370300200241e80a6a22034200370300200241d80a6a41086a22044200370300200242003703d80a200241b0086a41bee8c700410d10c5012004200241b0086a41086a2205290000370300200220022900b0083703d80a200241f0086a4188eec700411110c5012001200241f0086a41086a2206290000370300200320022900f008370300200241206a200241d80a6a10eb042002280220210720022902242108200142003703002003420037030020044200370300200242003703d80a200241b0086a41f1ddc700410510c50120042005290000370300200220022900b0083703d80a200241f0086a41c4fec000410a10c50120012006290000370300200320022900f008370300200241206a200241d80a6a412010b903200228022021092002290224210a200142003703002003420037030020044200370300200242003703d80a200241b0086a41ac95c400410d10c50120042005290000370300200220022900b0083703d80a200241f0086a41c695c400410c10c50120012006290000370300200320022900f008370300200241206a200241d80a6a10f5022002280278210b200228026c210c2002280270210d200241106a10dd05410021054104210e4100210f02402008420020071b2210422088a72201412c6c2204450d002004412c6d22064104200641044b1bad42f0027e2208422088a70d092008a722064100480d0920061032220e450d0a200641f0026e210f0b200a420020091b21112007410420071b21122009410420091b211302402001450d00201220046a21144101200c200b41024622041b21154101200d20041b21162001410274417c6a41027641016a21172011422088a7211820024188066a41a8016a210420024188066a4188016a211920024188066a41e8006a211a200241d0066a211b20024188066a41286a210620024188066a41086a210b20024188066a4188026a211c20024188066a41ec016a210720024188066a41e8016a211d200241206a41ec016a2109200241b8056a41046a211e200241d8056a41086a211f20024188066a41386a212020132121200e2101410021052012210c0340200c28020022224103460d0141022123024020224102460d000240024020220d00200c41046a280200210d200241d80a6a41968dc700410d10c501200241f0086a41a38dc700411310c5012002200d3602b805200241d8056a200241b8056a410410c7012002201e3602a40b2002201f36029c0b2002200241b8056a3602a00b2002200241d8056a3602980b200241b0086a200241980b6a107e20022802b808220d41206a2222417f4c0d0d0240024020220d00410121230c010b202210322223450d0f0b200241003602e005200220223602dc05200220233602d805200241d8056a4100411010c80120022802d80520022802e00522226a222320022900d80a370000202341086a200241d80a6a41086a22242900003700002002202241106a22223602e005200241d8056a2022411010c80120022802d80520022802e00522226a222320022900f008370000202341086a200241f0086a41086a22252900003700002002202241106a22233602e00520022802b0082122200241d8056a2023200d10c80120022802d805222320022802e00522266a2022200d10c9081a20022026200d6a220d3602e005024020022802b408450d002022102c0b200241206a2023200d10f304200241980b6a200241206a41e80110c9081a2024200941086a290200370300200241d80a6a41106a2227200941106a290200370300200241d80a6a41186a2228200941186a290200370300200241d80a6a41206a2229200941206a290200370300200241d80a6a41286a220d200941286a290200370300200241d80a6a41306a2222200941306a290200370300200241d80a6a41386a2226200941386a280200360200200220092902003703d80a0240200228028802222a450d00200241f0086a200241980b6a41e80110c9081a200241b0086a41386a2026280200360200200241b0086a41306a2022290300370300200241b0086a41286a200d290300370300200241b0086a41206a2029290300370300200241b0086a41186a2028290300370300200241b0086a41106a2027290300370300200241b0086a41086a2024290300370300200220022903d80a3703b0080b024020022802dc05450d002023102c0b202a450d0620024188066a200241f0086a41e80110c9081a200741386a200241b0086a41386a280200360200200741306a200241b0086a41306a290300370200200741286a200241b0086a41286a290300370200200741206a200241b0086a41206a222b290300370200200741186a200241b0086a41186a222c290300370200200720022903b008370200200741086a200241b0086a41086a222d290300370200200741106a200241b0086a41106a222e2903003702002002202a3602f007200228028c08210d200241f0086a200510df0520022802142226450d072016200d6a2122200228021821232002280210212f200241980b6a200510e00520024188046a201d10cb052002200228028806200d10e105202620236a223041002030202f6b2231203120304b1b2026706b2130202341002023202f6b222f202f20234b1b2026706b2123024002402002280200450d00200228020421260c010b4100212641002802d8d2484102490d00200241f4003602dc0a20024184a2c7003602d80a4100212641002802d4d248212a41002802d0d248212f41002802dcd2482131200241d000360260200242d48080801037035820024198a3c7003602542002423137024c200241eca3c7003602482002420137034020024201370330200241b4b5c80036022c20024131360228200241eca3c700360224200241043602b40820024102360220202a41e0a3c000203141024622311b280210212a2002200241b0086a36023c2002200241d80a6a3602b008202f41f8a3c00020311b200241206a202a11030020022802f007212a0b202220304b2131202320166a2123200241b8046a41186a201c41186a290200370300200241b8046a41106a201c41106a290200370300200241b8046a41086a201c41086a290200370300201f200b41086a290200370300200241d8056a41106a200b41106a290200370300200241d8056a41186a200b41186a2902003703002002201c2902003703b8042002200b2902003703d805200228028c06212f20024198056a41086a201b41086a29020037030020024198056a41106a201b41106a29020037030020024198056a41186a201b41186a290200370300200241f8046a41086a201a41086a290200370300200241f8046a41106a201a41106a290200370300200241f8046a41186a201a41186a290200370300200241d8046a41086a201941086a290200370300200241d8046a41106a201941106a290200370300200241d8046a41186a201941186a2902003703002002201b290200370398052002201a2902003703f804200220192902003703d804200241206a41386a200441386a290200370300200241206a41306a200441306a290200370300200241206a41286a200441286a290200370300200241206a41206a200441206a290200370300200241206a41186a200441186a290200370300200241206a41106a200441106a290200370300200241206a41086a200441086a290200370300200241b8056a41186a200641186a290200370300200241b8056a41106a200641106a290200370300200241b8056a41086a200641086a29020037030020022004290200370320200220062902003703b8052029200241f0086a41206a2903003703002028200241f0086a41186a2903003703002027200241f0086a41106a29030037030020242025290300370300200220022903f0083703d80a202b200241980b6a41206a290300370300202c200241980b6a41186a290300370300202e200241980b6a41106a290300370300202d200241980b6a41086a290300370300200220022903980b3703b008200241f8056a41086a20024188046a41086a28020036020020022002290388043703f805200242013703f007024020022802f807450d00202a102c0b2022203020311b212a20222023492123200241003602800820022802fc072124200241013602fc070240200228028408450d002024102c0b2022202a20231b212a0c010b200520184f0d072021280200210d200241b0086a41968dc700410d10c501200241f0086a41a38dc700411310c5012002200d3602b805200241d8056a200241b8056a410410c7012002201e3602a40b2002201f36029c0b2002200241b8056a3602a00b2002200241d8056a3602980b200241d80a6a200241980b6a107e20022802e00a220d41206a2222417f4c0d0c0240024020220d00410121230c010b202210322223450d0e0b200241003602e005200220223602dc05200220233602d805200241d8056a4100411010c80120022802d80520022802e00522226a222320022900b008370000202341086a200241b0086a41086a22242900003700002002202241106a22223602e005200241d8056a2022411010c80120022802d80520022802e00522226a222320022900f008370000202341086a200241f0086a41086a222b2900003700002002202241106a22233602e00520022802d80a2122200241d8056a2023200d10c80120022802d805222320022802e00522266a2022200d10c9081a20022026200d6a220d3602e005024020022802dc0a450d002022102c0b200241206a2023200d10f304200241980b6a200241206a41e80110c9081a200241d80a6a41086a2227200941086a290200370300200241d80a6a41106a2228200941106a290200370300200241d80a6a41186a2229200941186a290200370300200241d80a6a41206a2225200941206a290200370300200241d80a6a41286a220d200941286a290200370300200241d80a6a41306a2222200941306a290200370300200241d80a6a41386a2226200941386a280200360200200220092902003703d80a0240200228028802222a450d00200241f0086a200241980b6a41e80110c9081a200241b0086a41386a2026280200360200200241b0086a41306a2022290300370300200241b0086a41286a200d290300370300200241b0086a41206a2025290300370300200241b0086a41186a2029290300370300200241b0086a41106a202829030037030020242027290300370300200220022903d80a3703b0080b024020022802dc05450d002023102c0b202a450d0820024188066a200241f0086a41e80110c9081a200741386a200241b0086a41386a280200360200200741306a200241b0086a41306a290300370200200741286a200241b0086a41286a290300370200200741206a200241b0086a41206a222c290300370200200741186a200241b0086a41186a222d290300370200200720022903b008370200200741086a2024290300370200200741106a200241b0086a41106a222e2903003702002002202a3602f007200228028c08210d200241f0086a200510df0520022802142226450d092015200d6a2122200228021821232002280210212f200241980b6a200510e00520024188046a201d10cb05200241086a200228028806200d10e105202620236a223041002030202f6b2231203120304b1b2026706b2130202341002023202f6b222f202f20234b1b2026706b2123024002402002280208450d00200228020c21260c010b4100212641002802d8d2484102490d00200241f4003602dc0a20024184a2c7003602d80a4100212641002802d4d248212a41002802d0d248212f41002802dcd2482131200241d000360260200242d48080801037035820024198a3c7003602542002423137024c200241eca3c7003602482002420137034020024201370330200241b4b5c80036022c20024131360228200241eca3c700360224200241043602b40820024102360220202a41e0a3c000203141024622311b280210212a2002200241b0086a36023c2002200241d80a6a3602b008202f41f8a3c00020311b200241206a202a11030020022802f007212a0b202220304b2131202320156a2123200241b8046a41186a201c41186a290200370300200241b8046a41106a201c41106a290200370300200241b8046a41086a201c41086a290200370300201f200b41086a290200370300200241d8056a41106a200b41106a290200370300200241d8056a41186a200b41186a2902003703002002201c2902003703b8042002200b2902003703d805200228028c06212f20024198056a41086a201b41086a29020037030020024198056a41106a201b41106a29020037030020024198056a41186a201b41186a290200370300200241f8046a41086a201a41086a290200370300200241f8046a41106a201a41106a290200370300200241f8046a41186a201a41186a290200370300200241d8046a41086a201941086a290200370300200241d8046a41106a201941106a290200370300200241d8046a41186a201941186a2902003703002002201b290200370398052002201a2902003703f804200220192902003703d804200241206a41386a200441386a290200370300200241206a41306a200441306a290200370300200241206a41286a200441286a290200370300200241206a41206a200441206a290200370300200241206a41186a200441186a290200370300200241206a41106a200441106a290200370300200241206a41086a200441086a290200370300200241b8056a41186a200641186a290200370300200241b8056a41106a200641106a290200370300200241b8056a41086a200641086a29020037030020022004290200370320200220062902003703b8052025200241f0086a41206a2903003703002029200241f0086a41186a2903003703002028200241f0086a41106a2903003703002027202b290300370300200220022903f0083703d80a202c200241980b6a41206a290300370300202d200241980b6a41186a290300370300202e200241980b6a41106a2903003703002024200241980b6a41086a290300370300200220022903980b3703b008200241f8056a41086a20024188046a41086a28020036020020022002290388043703f805200242013703f007024020022802f807450d00202a102c0b2022203020311b212a20222023492123200241003602800820022802fc072124200241013602fc070240200228028408450d002024102c0b2022202a20231b212a0b200241980b6a41206a200241d80a6a41206a290300370300200241980b6a41186a200241d80a6a41186a290300370300200241980b6a41106a200241d80a6a41106a290300370300200241980b6a41086a200241d80a6a41086a290300370300200241f0086a41086a200241b0086a41086a290300370300200241f0086a41106a200241b0086a41106a290300370300200241f0086a41186a200241b0086a41186a290300370300200241f0086a41206a200241b0086a41206a290300370300200220022903d80a3703980b200220022903b0083703f008200241a8046a41086a200241f8056a41086a28020036020020024188046a41186a200241d8056a41186a29030037030020024188046a41106a200241d8056a41106a29030037030020024188046a41086a201f290300370300200241e8036a41186a200241b8056a41186a290300370300200241e8036a41106a200241b8056a41106a290300370300200241e8036a41086a200241b8056a41086a290300370300200220022903f8053703a804200220022903d80537038804200220022903b8053703e803200241c8036a41186a20024198056a41186a290300370300200241c8036a41106a20024198056a41106a290300370300200241c8036a41086a20024198056a41086a29030037030020022002290398053703c803200241a8036a41186a200241f8046a41186a290300370300200241a8036a41106a200241f8046a41106a290300370300200241a8036a41086a200241f8046a41086a290300370300200220022903f8043703a80320024188036a41186a200241d8046a41186a29030037030020024188036a41106a200241d8046a41106a29030037030020024188036a41086a200241d8046a41086a290300370300200220022903d804370388032020200241206a41386a29030037030020024188066a41306a200241206a41306a2903003703002006200241206a41286a29030037030020024188066a41206a200241206a41206a29030037030020024188066a41186a200241206a41186a29030037030020024188066a41106a200241206a41106a290300370300200b200241206a41086a2903003703002002200229032037038806200241e8026a41186a200241b8046a41186a290300370300200241e8026a41106a200241b8046a41106a290300370300200241e8026a41086a200241b8046a41086a290300370300200220022903b8043703e802410021230b20012023360200200241980b6a41086a2903002108200241980b6a41106a290300210a200241980b6a41186a2903002132200241980b6a41206a290300213320022903980b2134200141306a202a3602002001412c6a200d360200200141246a20333702002001411c6a2032370200200141146a200a3702002001410c6a2008370200200141046a20343702002001413c6a200241f0086a41086a290300370200200141346a20022903f008370200200141c4006a200241f0086a41106a290300370200200141cc006a200241f0086a41186a290300370200200141d4006a200241f0086a41206a290300370200200241a8046a41086a280200212220022903a8042108200141ec006a202f360200200141e8006a2026360200200141e4006a2022360200200141dc006a200837020020014188016a20024188046a41186a29030037020020014180016a20024188046a41106a290300370200200141f8006a20024188046a41086a290300370200200141f0006a200229038804370200200141a8016a200241e8036a41186a290300370200200141a0016a200241e8036a41106a29030037020020014198016a200241e8036a41086a29030037020020014190016a20022903e803370200200141c8016a200241c8036a41186a290300370200200141c0016a200241c8036a41106a290300370200200141b8016a200241c8036a41086a290300370200200141b0016a20022903c803370200200141e8016a200241a8036a41186a290300370200200141e0016a200241a8036a41106a290300370200200141d8016a200241a8036a41086a290300370200200141d0016a20022903a80337020020014188026a20024188036a41186a29030037020020014180026a20024188036a41106a290300370200200141f8016a20024188036a41086a290300370200200141f0016a200229038803370200200141c0026a20024188066a41306a290300370200200141b8026a2006290300370200200141b0026a20024188066a41206a290300370200200141a8026a20024188066a41186a290300370200200141a0026a20024188066a41106a29030037020020014198026a200b29030037020020014190026a200229038806370200200141c8026a2020290300370200200141e8026a200241e8026a41186a290300370200200141e0026a200241e8026a41106a290300370200200141d8026a200241e8026a41086a290300370200200141d0026a20022903e802370200200141f0026a2101202141046a2121200541016a2105200c412c6a220c2014470d000b201721050b02402010a72201450d002001412c6c450d002012102c0b200241d80a6a41186a4200370300200241d80a6a41106a4200370300200241d80a6a41086a22014200370300200242003703d80a200241b0086a41bee8c700410d10c5012001200241b0086a41086a290000370300200220022900b0083703d80a200241f0086a41fcefc700410910c501200341086a200241f0086a41086a220d290000370000200320022900f008370000200241206a200241d80a6a10f90420022802202201410420011b21262002290224420020011b2210422088a72201450d072026200141346c6a211b200241206a41276a2122200241206a41206a2123200241206a41186a2107200241206a41106a2109202621040340200441086a2d00002106200429020021082022200441306a2800003600002023200441296a2900003703002007200441216a2900003703002009200441196a290000370300200241206a41086a2201200441116a2900003703002002200441096a29000037032020064102460d08200241980b6a41276a220b2022280000360000200241980b6a41206a220c2023290300370300200241980b6a41186a2007290300220a370300200241980b6a41106a20092903002232370300200241980b6a41086a200129030022333703002002200229032022343703980b20024188066a41276a200b28000036000020024188066a41206a200c29030037030020024188066a41186a2221200a37030020024188066a41106a2219203237030020024188066a41086a221a203337030020022034370388062008a7210b4100210c024020064101470d0020072021290300370300200920192903003703002001201a29030037030020022002290388063703204101210c0b200241f0086a41186a22062007290300370300200241f0086a41106a22212009290300370300200d2001290300370300200241b0086a41026a2219200241d80a6a41026a2d00003a0000200220022903203703f008200220022f00d80a3b01b0082005200b4d0d072008422088a7211a0240200e200b41f0026c6a22012802000d00200141e0006a4100360200200141dc006a220b280200211c200b4101360200200141e4006a280200450d00201c102c0b200141013602002001201a360204200141086a200c3a0000200141216a2006290300370000200141196a2021290300370000200141116a200d290300370000200120022903f008370009200120022f01b0083b00292001412b6a20192d00003a00002001412c6a200241206a41c40210c9081a200441346a2204201b470d000c080b0b20024194066a4104360200200241346a41023602002002420237022420024194c7c3003602202002410436028c06200241b0cac300360288062002410036029c0b200241c4b5c8003602980b200220024188066a3602302002200241980b6a36029006200241206a41a4c7c3001046000b41c2a1c700413241f4a1c700105c000b41d0c6c300413941a0fcc700103c000b2005201841f8a2c700103f000b41c2a1c70041324188a3c700105c000b41d0c6c300413941a0fcc700103c000b200b200541d8e8c300103f000b02402010a72201450d00200141346c450d002026102c0b0240201142ffffffff0383500d002013102c0b200541f0026c4104722201417f4c0d00200110322204450d01200241003602282002200136022420022004360220200241206a2005108f0102402005450d00200541f0026c21074100210403400240024002400240200e20046a22012802000e03000102030b200241206a20022802284101102f200228022020022802286a41003a00002002200228022841016a360228200241206a200141046a10e2052001412c6a2802002109200241206a20022802284104102f200228022020022802286a20093600002002200228022841046a2209360228200141306a2802002106200241206a20094104102f200228022020022802286a20063600002002200228022841046a360228200241206a200141346a10e205200241206a200141dc006a10e305200141e8006a2802002109200241206a20022802284104102f200228022020022802286a20093600002002200228022841046a360228200241206a200141d0026a10e405200241206a200141ec006a10c8040c020b200241206a20022802284101102f200228022020022802286a41013a00002002200228022841016a360228200141046a200241206a10b1050c010b200241206a20022802284101102f200228022020022802286a41023a00002002200228022841016a3602280b2007200441f0026a2204470d000b0b200235022821082002350220210a02402005450d00200541f0026c2104200e21010340024020012802000d00200141e0006a4100360200200141dc006a2205280200210720054101360200200141e4006a280200450d002007102c0b200141f0026a2101200441907d6a22040d000b0b0240200f450d00200f41f0026c450d00200e102c0b200241800d6a24002008422086200a840f0b103b000b1039000bfd0402077f017e230041c0006b22022400200241286a22034200370300200241206a22044200370300200241106a41086a2205420037030020024200370310200241106a41f1ddc700410510c501200241306a41c4fec000410a10c5012003200241306a41086a220629000037030020042002290030370300200241306a200241106a412010b90320022802302207410420071b2108024002402002290234420020071b2209422088a7220720014b0d0020034200370300200442003703002005420037030020024200370310200241106a41bee8c700410d10c501200241306a41b4edc700410f10c50120032006290000370300200420022900303703002002200241106a10f5040240200228020022060d00200041023a00040c020b2002280204210502400240200241086a28020022030d00410221030c010b200120076b21072003410274417c6a41027641016a2101410021042006210302400340200341286a2802002007460d012003412c6a21032001200441016a2204470d000b410221030c010b200020032802003602002000200341046a2900003700052000410d6a2003410c6a290000370000200041156a200341146a2900003700002000411d6a2003411c6a290000370000410121030b200020033a00042005450d012005412c6c450d012006102c0c010b200820014102746a2802002107200041003a000420002007360200200020022900103700052000410d6a2005290000370000200041156a20042900003700002000411d6a2003290000370000200041256a20022f00303b0000200041276a200241306a41026a2d00003a00000b02402009a72203450d00200341ffffffff0371450d002008102c0b200241c0006a24000bd40704077f017e027f017e230041306b22022400200241186a22034200370300200241106a22044200370300200241086a2205420037030020024200370300200241f1ddc700410510c501200241206a41c4fec000410a10c5012003200241206a41086a220629000037030020042002290020370300200241206a2002412010b90320022802202207410420071b2108024002402002290224420020071b2209422088a7220720014b0d0020034200370300200442003703002005420037030020024200370300200241206a41bee8c700410d10c5012005200629000037030020022002290020370300200241206a41b4edc700410f10c5012003200629000037030020042002290020370300200241206a200210f50420022802244100200228022022031b210a2003410420031b210b0240024002402003450d0020062802002203450d00200120076b21052003410274417c6a41027641016a210641002107200b21030340200341286a2802002005460d022003412c6a21032006200741016a2207470d000b0b200241186a4200370300200241106a4200370300200241086a2203420037030020024200370300200241206a41bee8c700410d10c5012003200241206a41086a220729000037030020022002290020370300200241206a4188eec700411110c501200441086a200729000037000020042002290020370000200241206a200210eb0420022802202203410420031b210702400240024002402002290224420020031b220c422088a720014d0d004102210520072001412c6c6a2203280200417f6a0e020200010b200041023a00040c020b20002003280204360200200020032900083700052000410d6a200341106a290000370000200041156a200341186a2900003700002000411d6a200341206a290000370000410121050b200020053a00040b200ca72203450d012003412c6c450d012007102c0c010b20032802002107200041013a0004200020073602002000200341046a2900003700052000410d6a2003410c6a290000370000200041156a200341146a2900003700002000411d6a2003411c6a290000370000200041256a20022f00003b0000200041276a200241026a2d00003a00000b200a450d01200a412c6c450d01200b102c0c010b200820014102746a2802002107200041003a000420002007360200200020022900003700052000410d6a2005290000370000200041156a20042900003700002000411d6a2003290000370000200041256a20022f00203b0000200041276a200241206a41026a2d00003a00000b02402009a72203450d00200341ffffffff0371450d002008102c0b200241306a24000bd50502097f017e230041e0016b22032400200341c0016a41186a22044200370300200341c0016a41106a22054200370300200341c0016a41086a22064200370300200342003703c001200341c0016a41ac95c400410d10c501200341106a41c695c400410c10c5012004200341106a41086a220729000037030020052003290010370300200341106a200341c0016a10f5022003280258210820032802682109200341106a41186a22054200370300200341106a41106a220442003703002007420037030020034200370310200341c0016a41bee8c700410d10c50120072006290000370300200320032900c001370310200341c0016a41c4efc700411110c50120052006290000370300200420032900c001370300200341086a200341106a412010c6014100210a02400240200328020c410020032802081b220b20024b0d0020054200370300200442003703002007420037030020034200370310200341c0016a41bee8c700410d10c50120072006290000370300200320032900c001370310200341c0016a41dcecc700410f10c501200441086a2006290000370000200420032900c001370000200341c0016a200341106a10e90420032802c0012206410420061b2105024020032902c401420020061b220c422088a7220620014b0d0002402006450d002006410c6c21072005210603400240200641046a28020041ffffffff0371450d002006280200102c0b2006410c6a2106200741746a22070d000b0b200ca72206450d012006410c6c450d012005102c0c010b02404101200820094102461b22040d0041a0fac70041194184aac800103c000b2006410c6c21072002200b6b20046e20016a20067021042005210603400240200641046a28020041ffffffff0371450d002006280200102c0b2006410c6a2106200741746a22070d000b4101210a200ca72206450d012006410c6c450d012005102c0c010b0b200020043602042000200a360200200341e0016a24000b7301017f024020012d00044102470d002000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22022802004101102f200028020020022802006a41013a00002002200228020041016a3602002001200010b1050bbc0201057f200141046a2802002202410376210320012802002104024002402002418004490d002003410274210102402002418080084f0d002000200041086a22052802004102102f200028020020052802006a20014101723b00002005200528020041026a22063602000c020b2000200041086a22052802004104102f200028020020052802006a20014102723600002005200528020041046a22063602000c010b2000200041086a22012802004101102f200028020020012802006a20034102743a00002001200128020041016a22063602000b0240024020030d00410021010c010b410121012003410820024107716b22024d0d0041024101200320026b22014107711b20014103766a21010b200020062001102f2000280200200041086a22002802006a2004200110c9081a2000200028020020016a3602000bce0101047f230041106b220224000240412010322203450d002002422037020420022003360200200241004120102f20022802002204200228020822056a22032001290000370000200341086a200141086a290000370000200341106a200141106a290000370000200341186a200141186a2900003700002002200541206a22013602082000200041086a22032802002001102f200028020020032802006a2004200110c9081a2003200328020020016a36020002402002280204450d002004102c0b200241106a24000f0b1039000bae0902057f027e230041f0026b220224002002200041c4b5c80020011b200110e60502400240024020022d000422004103460d00200228020021010240024002400240024020000e03010200010b200241c0026a41968dc700410d10c501200241d0026a41a38dc700411310c501200220013602ec02200241b0026a200241ec026a410410c701200241146a200241ec026a41046a3602002002200241b8026a36020c2002200241ec026a3602102002200241b0026a360208200241e0026a200241086a107e20022802e802220041206a2203417f4c0d050240024020030d00410121040c010b200310322204450d070b200241003602b802200220033602b402200220043602b002200241b0026a4100411010c80120022802b00220022802b80222036a220420022900c002370000200441086a200241c0026a41086a2900003700002002200341106a22033602b802200241b0026a2003411010c80120022802b00220022802b80222036a220420022900d002370000200441086a200241d0026a41086a2900003700002002200341106a22043602b80220022802e0022103200241b0026a2004200010c80120022802b002220420022802b80222056a2003200010c9081a2002200520006a22003602b802024020022802e402450d002003102c0b200241086a2004200010f30420024184026a2802002105200241fc016a2802002103200241f8016a280200210620022802f0012100024020022802b402450d002004102c0b20000d02200241086a200110e7050c030b200110e805200241086a200110e7050c020b200241086a200110e7050c010b02402006450d002000102c0b02402005450d002003450d002003102c0b200241023602200b410110322201450d02200242013702d402200220013602d00220022802202100200241d0026a41004101102f20022802d002220120022802d80222036a21040240024020004102470d00200441003a0000200341016a21000c010b200441013a00002002200341016a3602d802200241306a200241d0026a10b70520022802182101200241d0026a20022802d8024104102f20022802d00220022802d80222006a20013600002002200041046a22013602d802200228021c2100200241d0026a20014104102f20022802d00220022802d80222016a20003600002002200141046a22013602d802200241106a290300210720022903082108200241d0026a20014110102f20022802d00220022802d80222016a22002007370008200020083700002002200141106a3602d802200241d0026a200241206a10be0320022802282100200241d0026a20022802d8024104102f20022802d002220120022802d80222036a20003600000240200241346a280200450d002002280230102c0b200341046a2100200241c4006a2802002203450d00200341246c450d00200241c0006a280200102c0b200241f0026a24002000ad4220862001ad840f0b200241dc026a41043602002002411c6a41023602002002420237020c20024194c7c300360208200241043602d402200241cccac3003602d002200241003602c402200241c4b5c8003602c0022002200241d0026a3602182002200241c0026a3602d802200241086a41a4c7c3001046000b103b000b1039000b6101037f4103210302400240200241044f0d000c010b2001280000210420024104460d004100210502400240024020012d00040e03020100030b410221050c010b410121050b2005410320024105461b21030b200020033a0004200020043602000bb90c03087f017e057f23004180036b22022400200241a0016a200110b703200241f8006a41086a2203200241a0016a41206a290300370300200241f8006a41106a2204200241c8016a290300370300200241f8006a41186a2205200241d0016a290300370300200241f8006a41206a2206200241d8016a2903003703002002200241a0016a41186a290300370378024002400240024020022802a0012207450d00200241b4016a2802002108200241a0016a41106a2802002109200241a0016a41086a290300210a20022802a401210b200241d0006a41206a2006290300370300200241d0006a41186a2005290300370300200241d0006a41106a2004290300370300200241d0006a41086a20032903003703002002200229037837035020054200370300200442003703002003420037030020024200370378200241d4026a41ac95c400410d10c5012003200241d4026a41086a290000370300200220022900d402370378200241e4026a41c695c400410c10c5012005200241e4026a41086a290000370300200420022900e402370300200241a0016a200241f8006a10f5024100210541002106410021034100210c024020022802f8014102460d0020022802c801210c20022802cc01210320022802d401210620022802d80121050b20024190016a420037030020024188016a4200370300200241f8006a41086a220d420037030020024200370378200241d4026a41c1dcc700410610c501200d200241d4026a41086a290000370300200220022900d402370378200241e4026a4196a4c600410610c501200441086a200241e4026a41086a290000370000200420022900e402370000200241206a200241f8006a412010c601200228022021042002280224210d200241186a200110c803200d417f6a417f20041b2104024002402002280218450d004100210d02402004200228021c220e4f0d000c020b41002004200e6b220e200e20044b1b200c490d010b200320046a210f4101210d0b200241d4026a4181dec700410310c501200241e4026a41a4bfc000411510c501200220013602f402200241f8026a200241f4026a410410c701200241ac016a200241f4026a41046a360200200220024180036a3602a4012002200241f4026a3602a8012002200241f8026a3602a001200241f8006a200241a0016a107e200228028001220441206a2201417f4c0d020240024020010d00410121030c010b200110322203450d040b200241003602a801200220013602a401200220033602a001200241a0016a4100411010c80120022802a00120022802a80122016a220320022900d402370000200341086a200241d4026a41086a2900003700002002200141106a22013602a801200241a0016a2001411010c80120022802a00120022802a80122016a220320022900e402370000200341086a200241e4026a41086a2900003700002002200141106a22033602a80120022802782101200241a0016a2003200410c80120022802a001220320022802a801220c6a2001200410c9081a2002200c20046a22043602a8010240200228027c450d002001102c0b200241e8026a41003a0000200241003602e402200241106a20032004200241e4026a4105410010b704024002402002280210450d00200220022802142204410520044105491b36027c2002200241e4026a360278200241086a200241f8006a108702200228020c210420022802084521010c010b410021010b024020022802a401450d002003102c0b20004200370308200042003703002000200536021420002006360210200241286a41086a2203200241d0006a41086a290300370300200241286a41106a2205200241d0006a41106a290300370300200241286a41186a2206200241d0006a41186a290300370300200241286a41206a220c200241d0006a41206a290300370300200220022903503703282000413c6a2008360200200041386a2009360200200041306a200a3703002000412c6a200b360200200041286a2007360200200041206a2004410020011b3602002000200f36021c2000200d360218200041c0006a2002290328370300200041c8006a2003290300370300200041d0006a2005290300370300200041d8006a2006290300370300200041e0006a200c2903003703000c010b200041023602180b20024180036a24000f0b103b000b1039000ba50e01147f230041a0086b2201240020014188026a41968dc700410d10c50120014198066a41a38dc700411310c501200120003602f80120014180086a200141f8016a410410c701200141fc036a200141f8016a41046a360200200120014188086a3602f4032001200141f8016a3602f803200120014180086a3602f00320014190086a200141f0036a107e024002400240200128029808220241206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b20014100360288082001200336028408200120043602800820014180086a4100411010c80120012802800820012802880822036a2204200129008802370000200441086a20014188026a41086a2900003700002001200341106a22033602880820014180086a2003411010c80120012802800820012802880822036a2204200129009806370000200441086a20014198066a41086a2900003700002001200341106a220336028808200128029008210420014180086a2003200210c801200128028008220320012802880822056a2004200210c9081a2001200520026a2202360288080240200128029408450d002004102c0b200141f0036a2003200210f304024020012802d8052204450d002003200210b4010b20014198066a200141f0036a41e80110c9081a200141f0056a2802002106200141ec056a2802002107200141e8056a2802002108200141e4056a2802002109200141e0056a280200210a20012802dc05210b02402004450d00200120014198066a41e80110c9081a0b0240200128028408450d002003102c0b20014188026a41968dc700410d10c50120014198066a41bc92c700411e10c501200120003602f80120014180086a200141f8016a410410c701200141fc036a200141f8016a41046a360200200120014188086a3602f4032001200141f8016a3602f803200120014180086a3602f00320014190086a200141f0036a107e200128029808220241206a2203417f4c0d000240024020030d00410121000c010b200310322200450d020b20014100360288082001200336028408200120003602800820014180086a4100411010c80120012802800820012802880822036a2200200129008802370000200041086a20014188026a41086a2900003700002001200341106a22033602880820014180086a2003411010c80120012802800820012802880822036a2200200129009806370000200041086a20014198066a41086a2900003700002001200341106a220336028808200128029008210020014180086a2003200210c801200128028008220320012802880822056a2000200210c9081a2001200520026a2202360288080240200128029408450d002000102c0b200141f0036a2003200210ee04024020012802f0032200450d002003200210b4010b20014198046a280200210c20014194046a280200210d20014190046a280200210e2001418c046a280200210f20014188046a280200211020014184046a280200211120014180046a2802002112200141fc036a2802002113200141f0036a41086a280200210220012802f403210520014198066a41086a2214200141a4046a28020036020020012001419c046a290200370398060240024020000d00410021000c010b200141e8016a41086a201428020036020020012001290398063703e8010b0240200128028408450d002003102c0b20014188026a200141e80110c9081a200141f8016a41086a200141e8016a41086a280200360200200120012903e8013703f801024002402004450d002000450d0120014198066a20014188026a41e80110c9081a200141f0036a20014198066a41047241e40110c9081a200141fc056a200c360200200141f8056a200d360200200141f4056a200e360200200141f0056a200f360200200141ec056a2010360200200141e8056a2011360200200141e4056a2012360200200141e0056a2013360200200141dc056a2002360200200141f0036a41e8016a200536020020014180066a20012903f80137030020014188066a20014180026a280200360200200120003602d4052001200736028808200120083602840820012009360280082001200a360298082001200b3602940820012004360290082006200141f0036a20014180086a20014190086a1084080c040b2000450d0302402002450d002002410c6c21032000210203400240200241046a280200450d002002280200102c0b2002410c6a2102200341746a22030d000b0b02402005450d002005410c6c450d002000102c0b02402011450d0020114104742103201341046a210203400240200241046a280200450d002002280200102c0b200241106a2102200341706a22030d000b0b02402012450d002013450d00201241ffffffff0071450d002013102c0b02402010450d00200f450d002010102c0b200c450d03200d450d03200d102c0c030b0240200a450d002004102c0b2007450d022009450d022009102c0c020b103b000b1039000b200141a0086a24000bd10701057f230041f0026b220224002002200041c4b5c80020011b200110e60502400240024020022d000422004103460d00200228020021010240024002400240024020000e03010200010b200241c0026a41968dc700410d10c501200241d0026a41a38dc700411310c501200220013602ec02200241b0026a200241ec026a410410c701200241146a200241ec026a41046a3602002002200241b8026a36020c2002200241ec026a3602102002200241b0026a360208200241e0026a200241086a107e20022802e802220041206a2203417f4c0d050240024020030d00410121040c010b200310322204450d070b200241003602b802200220033602b402200220043602b002200241b0026a4100411010c80120022802b00220022802b80222036a220420022900c002370000200441086a200241c0026a41086a2900003700002002200341106a22033602b802200241b0026a2003411010c80120022802b00220022802b80222036a220420022900d002370000200441086a200241d0026a41086a2900003700002002200341106a22043602b80220022802e0022103200241b0026a2004200010c80120022802b002220420022802b80222056a2003200010c9081a2002200520006a22003602b802024020022802e402450d002003102c0b200241086a2004200010f30420024184026a2802002105200241fc016a2802002103200241f8016a280200210620022802f0012100024020022802b402450d002004102c0b20000d02200241086a200110b7030c030b200110e805200241086a200110b7030c020b200241086a200110b7030c010b02402006450d002000102c0b02402005450d002003450d002003102c0b200241003602080b410110322201450d02200242013702d402200220013602d00202400240200228020822030d00200241d0026a41004101102f20022802d002220120022802d80222006a41003a0000200041016a21000c010b200241d0026a41004101102f20022802d00220022802d80222016a41013a00002002200141016a3602d802200241086a200241d0026a10b70520022802d802210020022802d00221010240200228020c450d002003102c0b2002411c6a2802002203450d00200341246c450d00200241186a280200102c0b200241f0026a24002000ad4220862001ad840f0b200241dc026a41043602002002411c6a41023602002002420237020c20024194c7c300360208200241043602d402200241e8cac3003602d002200241003602c402200241c4b5c8003602c0022002200241d0026a3602182002200241c0026a3602d802200241086a41a4c7c3001046000b103b000b1039000bfe10020d7f017e23004180056b220224002002428080808080203702ac042002200136021c2002200041c4b5c80020011b22003602182002200241186a3602a8040240024020014104490d0020022001417c6a36021c2002200041046a36021820002800002103200241d0006a200241a8046a10b20520022802502204450d00200241a0026a41086a220120024184016a2802003602002002200241fc006a2902003703a002200241f8006a2802002105200241f4006a2802002106200241f0006a2802002107200241ec006a2802002108200241e8006a2802002109200241e4006a280200210a200241e0006a280200210b200241dc006a280200210c200241d0006a41086a280200210d2002280254210e0240024020022802a804280204450d000240200d450d00200d410c6c21002004210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b0240200e450d00200e410c6c450d002004102c0b0240200a450d00200a4104742100200c41046a210103400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b0240200b450d00200c450d00200b41ffffffff0071450d00200c102c0b02402009450d002008450d002009102c0b410021042005450d012006450d012006102c0c010b200241d0036a41086a2001280200360200200220022903a0023703d0030b2004450d00200241086a41086a200241d0036a41086a2802002201360200200220022903d003220f370308200241c0006a2005360200200241186a41206a2007360200200241346a20083602002002412c6a200a360200200241186a41106a200b360200200241c4006a200f370200200241cc006a20013602002002200636023c200220093602302002200c3602242002200d3602202002200e36021c20022004360218200241e8006a22014200370300200241d0006a41106a22004200370300200241d0006a41086a220e420037030020024200370350200241a0026a41c1dcc700410610c501200e200241a0026a41086a2209290000370300200220022900a002370350200241a0026a4196a4c600410610c50120012009290000370300200020022900a0023703002002200241d0006a412010c60120022802042105200228020021082001420037030020004200370300200e420037030020024200370350200241a0026a41ac95c400410d10c501200e2009290000370300200220022900a002370350200241a0026a41c695c400410c10c50120012009290000370300200020022900a002370300200241a0026a200241d0006a10f50220022802f802210b200241a8046a200241a0026a41d80010c9081a200241d0036a200241a0026a41dc006a41d40010c9081a410021062005410020081b210902400240200b4102470d0020024190016a420037030020024188016a420037030020024180016a4200370300200e42003703002000420037030020014200370300200241d0006a41206a42003703002002420037037820024280808080103703b001200242013703a00120024281808080103703980120024200370350200241b8016a410041c80010cb081a0c010b200241d0006a200241a8046a41d80010c9081a200241d0006a41dc006a200241d0036a41d40010c9081a200b21060b200220063602a801200220093602800220022009417f6a36028402200241d0036a200241d0006a20032002280244200241306a20022802482004200d200228024c200c200a10eb0541012104024020022802d0034107460d00200241a8046a41106a200241d0036a41106a280200360200200241a8046a41086a200241d0036a41086a290300370300410041002802dcd2482201410120011b3602dcd248200220022903d0033703a80402400240024020010e020001020b41004180a0c0003602d4d248410041c4b5c8003602d0d248410041023602dcd2480c010b034041002802dcd2484101460d000b0b410041053602d8d248024041000d0020024194026a41223602002002410236028c022002200336029c022002200241a8046a3602900220022002419c026a3602880241002802d4d248210141002802d0d248210041002802dcd2482104200241e0026a41ec04360200200241d8026a42ca80808010370300200241d4026a41c4f9c600360200200241cc026a4226370200200241c8026a41bc98c700360200200241c0026a4202370300200241b0026a4202370300200241a8026a411c360200200241a0026a411c6a20024188026a360200200241c49bc7003602ac02200241c899c7003602a402200241043602a002200041f8a3c000200441024622041b200241a0026a200141e0a3c00020041b2802101103000b410021040b2002280218210e024020022802202201450d002001410c6c2100200e210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b0240200228021c2201450d002001410c6c450d00200e102c0b2002280224210e0240200228022c2201450d0020014104742100200e41046a210103400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b0240200228022841ffffffff0071450d00200e102c0b024020022802302201450d002002280234450d002001102c0b02402002280240450d00200228023c102c0b410110322201450d012002420137025420022001360250200241d0006a41004101102f20022802502201200228025822006a20043a000020024180056a2400200041016aad4220862001ad840f0b200241ac026a4104360200200241e4006a41023602002002420237025420024194c7c300360250200241043602a4022002418ccbc3003602a002200241003602ac04200241c4b5c8003602a8042002200241a0026a3602602002200241a8046a3602a802200241d0006a41a4c7c3001046000b1039000b8d1c03047f027e027f230041c0016b220b2400024002400240024020012802382003490d002004280200450d02200b41186a200210c8030240200b280218450d0020012802b4012203200b28021c220c490d0241002003200c6b220c200c20034b1b2001280228490d020b200441086a28020020012802344d0d02200041023602000c030b200041003602000c020b200041013602000c010b200b41f8006a4181dec700410310c501200b4188016a41a4bfc000411510c501200b200236029801200b41a8016a200b4198016a410410c701200b412c6a200b4198016a41046a360200200b200b41b0016a220d360224200b200b4198016a360228200b200b41a8016a360220200b41b0016a200b41206a107e02400240024002400240200b2802b801220341206a2204417f4c0d000240024020040d004101210c0c010b20041032220c450d020b200b4100360228200b2004360224200b200c360220200b41206a4100411010c801200b280220200b28022822046a220c200b290078370000200c41086a200b41f8006a41086a290000370000200b200441106a2204360228200b41206a2004411010c801200b280220200b28022822046a220c200b29008801370000200c41086a200b4188016a41086a290000370000200b200441106a220c360228200b2802b0012104200b41206a200c200310c801200b280220220c200b280228220e6a2004200310c9081a200b200e20036a22033602280240200b2802b401450d002004102c0b200b41fc006a41003a0000200b4100360278200b41106a200c2003200b41f8006a4105410010b70402400240200b280210450d00200b200b2802142203410520034105491b36028c01200b200b41f8006a36028801200b41086a200b4188016a108702200b28020c2103200b2802084521040c010b410021040b0240200b280224450d00200c102c0b4100210c2003410020041b210302400240024020050d0020030d010b200320054f0d012003ad4220862005ad84210f4101210c0b2000200c36020420004103360200200041086a200f3702000c060b024002400240200128028801220420074f0d00410021010c010b200b41f8006a4184dec700410310c501200b4188016a41f494c600411610c501200b200236029801200b41a8016a200b4198016a410410c701200b412c6a200b4198016a41046a360200200b200d360224200b200b4198016a360228200b200b41a8016a360220200b41b0016a200b41206a107e200b2802b801220341206a2204417f4c0d020240024020040d00410121050c010b200410322205450d040b200b4100360228200b2004360224200b2005360220200b41206a4100411010c801200b280220200b28022822046a2205200b290078370000200541086a200b41f8006a41086a290000370000200b200441106a2204360228200b41206a2004411010c801200b280220200b28022822046a2205200b29008801370000200541086a200b4188016a41086a220c290000370000200b200441106a2205360228200b2802b0012104200b41206a2005200310c801200b2802202205200b280228220e6a2004200310c9081a200b200e20036a22033602280240200b2802b401450d002004102c0b200b4188016a2005200310a004200b280288014101462103200b28028c012104200c280200210c0240200b280224450d002005102c0b2004410020031b210e200c410020031b21050240024020070d00200e21070c010b2007410c6c210c200641086a21032001280284012106410021070240024003402003280200220420064b0d012003410c6a21032007417f6a2107200420056a2105200c41746a220c450d020c000b0b410020076b2107410121010c020b200e20076b21070b02402007200128027822044d0d00410221010c010b02402005200128027c22044d0d0041032101200521070c010b20012802b4012107200b41f8006a4187dec700410410c501200b4188016a41e39ac500410e10c501200b20023602a801200b4198016a200b41a8016a410410c701200b412c6a200b41a8016a41046a360200200b200b41a0016a360224200b200b41a8016a360228200b200b4198016a360220200b41b0016a200b41206a107e200b2802b801220341206a2204417f4c0d020240024020040d00410121050c010b200410322205450d040b200b4100360228200b2004360224200b2005360220200b41206a4100411010c801200b280220200b28022822046a2205200b290078370000200541086a200b41f8006a41086a290000370000200b200441106a2204360228200b41206a2004411010c801200b280220200b28022822046a2205200b29008801370000200541086a200b4188016a41086a290000370000200b200441106a2205360228200b2802b0012104200b41206a2005200310c801200b2802202205200b28022822066a2004200310c9081a200b200620036a22033602280240200b2802b401450d002004102c0b200b2005200310c601200b2802042104200b28020021030240200b280224450d002005102c0b024020034101470d0020042008490d002004ad4220862008ad84210f410021010c060b20072008490d0402400240024020072008460d00200b41f8006a4187dec700410410c501200b4188016a41f19ac500411210c501200b200236029801200b41a8016a200b4198016a410410c701200b412c6a200b4198016a41046a360200200b200d360224200b200b4198016a360228200b200b41a8016a360220200b41b0016a200b41206a107e200b2802b801220341206a2204417f4c0d050240024020040d00410121050c010b200410322205450d070b200b4100360228200b2004360224200b2005360220200b41206a4100411010c801200b280220200b28022822046a2205200b290078370000200541086a200b41f8006a41086a290000370000200b200441106a2204360228200b41206a2004411010c801200b280220200b28022822046a2205200b29008801370000200541086a200b4188016a41086a290000370000200b200441106a2205360228200b2802b0012104200b41206a2005200310c801200b2802202205200b28022822076a2004200310c9081a200b200720036a22033602280240200b2802b401450d002004102c0b200b4188016a2005200310f704200b29028c014200200b2802880122031b21100240200b280224450d002005102c0b2003410420031b2106410021030240024002402010422088a7220c0e020002010b2008ad210f0c040b41002103200c2104034020032004410176220520036a2207200620074104746a28020020084b1b2103200420056b220441014b0d000b0b200620034104746a2802002008470d010240200c450d00200c4104742104200641046a210303400240200341046a28020041ffffffff0371450d002003280200102c0b200341106a2103200441706a22040d000b0b2010a72203450d00200341ffffffff0071450d002006102c0b20012802ac012201200a4f0d03410021030c080b2008ad210f200c450d00200c4104742103200641046a210103400240200141046a28020041ffffffff0371450d002001280200102c0b200141106a2101200341706a22030d000b0b410221012010a72203450d05200341ffffffff0071450d052006102c0c050b2000200136020420004104360200200041106a20063602002000410c6a2004360200200041086a20073602000c060b0240200a450d002009200a4104746a2111410121014100210a034020092802002104024020014101710d00200420034b0d00410121030c070b200b41f8006a4187dec700410410c501200b4188016a41acb1c500410c10c501200b41003602b801200b42013703b001200b41b0016a41004104102f200b2802b001200b2802b80122016a2002360000200b200141046a22013602b801200b41b0016a20014104102f200b2802b0012201200b2802b80122036a2004360000200b200341046a22033602b801200b41a8016a2001200310c701200b200120036a36022c200b2001360228200b200d360224200b200b41a8016a360220200b4198016a200b41206a107e0240200b2802b401450d002001102c0b200b2802a001220141206a2203417f4c0d020240024020030d00410121050c010b200310322205450d040b200b41003602b801200b20033602b401200b20053602b001200b41b0016a4100411010c801200b2802b001200b2802b80122036a2205200b290078370000200541086a200b41f8006a41086a290000370000200b200341106a22033602b801200b41b0016a2003411010c801200b2802b001200b2802b80122036a2205200b29008801370000200541086a200b4188016a41086a290000370000200b200341106a22053602b801200b280298012103200b41b0016a2005200110c801200b2802b0012205200b2802b80122086a2003200110c9081a200b200820016a22013602b8010240200b28029c01450d002003102c0b200b41206a2005200110f3020240200b2d005422014102460d00200b280240210e200b2802442106200b2802482107200b28024c2112200b280250210c0b0240200b2802b401450d002005102c0b41022103024020014102470d0020042107200221010c070b02402009410c6a280200220120074d0d00410321030c070b02402001200c6a220120064d0d0041042103200621070c070b0240201241016a2201200e4d0d0041052103200e21070c070b200a41016a210a41002101200421032011200941106a2209470d000b0b200041073602000c050b103b000b1039000b2007ad4220862008ad84210f410121010b2000200136020420004105360200200041086a200f3702000c010b2000200336020420004106360200200041106a20073602002000410c6a2001360200200041086a200a3602000b200b41c0016a24000bfe0701027f230041106b2202240002400240024002400240024002400240024020002802000e0701020304050600010b2002200128021841ba9ac700410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41c89ac70010661a20022d0008210120022802042203450d07200141ff017121004101210120000d06024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d070b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010c060b2001280218419081c70041102001411c6a28020028020c11000021010c060b200128021841a881c70041142001411c6a28020028020c11000021010c050b200128021841c481c700410f2001411c6a28020028020c11000021010c040b2002200128021841d89ac70041192001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41f49ac70010661a20022d0008210120022802042203450d03200141ff017121004101210120000d02024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d030b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010c020b2002200128021841849bc700410e2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41949bc70010661a20022d0008210120022802042203450d02200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d020b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010c010b2002200128021841a49bc700410d2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41b49bc70010661a20022d0008210120022802042203450d01200141ff017121004101210120000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d010b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010b200220013a00080b200241106a2400200141ff01714100470bd20201047f230041c0006b220224000240024020010d00200241286a22014200370300200241206a22034200370300200241106a41086a420037030020024200370310200241106a41968dc700410d10c501200241306a41bc93c700411310c5012001200241306a41086a290000370300200320022900303703002002200241106a412010c6012002280204210120022802002103410410322204450d012002420437021420022004360210200241106a41004104102f20022802102204200228021822056a2001410020031b360000200241c0006a2400200541046aad4220862004ad840f0b2002413c6a4104360200200241246a41023602002002420237021420024194c7c30036021020024104360234200241accbc3003602302002410036020c200241c4b5c8003602082002200241306a3602202002200241086a360238200241106a41a4c7c3001046000b1039000b841102057f017e230041f0026b220224002002200041c4b5c80020011b200110e60502400240024020022d000422004103460d00200228020021010240024002400240024020000e03010200010b200241c0026a41968dc700410d10c501200241d0026a41a38dc700411310c501200220013602ec02200241b0026a200241ec026a410410c701200241146a200241ec026a41046a3602002002200241b8026a36020c2002200241ec026a3602102002200241b0026a360208200241e0026a200241086a107e20022802e802220041206a2203417f4c0d050240024020030d00410121040c010b200310322204450d070b200241003602b802200220033602b402200220043602b002200241b0026a4100411010c80120022802b00220022802b80222036a220420022900c002370000200441086a200241c0026a41086a2900003700002002200341106a22033602b802200241b0026a2003411010c80120022802b00220022802b80222036a220420022900d002370000200441086a200241d0026a41086a2900003700002002200341106a22043602b80220022802e0022103200241b0026a2004200010c80120022802b002220420022802b80222056a2003200010c9081a2002200520006a22003602b802024020022802e402450d002003102c0b200241086a2004200010f30420024184026a2802002105200241fc016a2802002103200241f8016a280200210620022802f0012100024020022802b402450d002004102c0b2000450d0202402006450d002000102c0b4100210102402005450d002003450d002003102c0b0c030b200110e805200241c0026a41f1ddc700410510c501200241d0026a41acffc000410b10c501200220013602ec02200241b0026a200241ec026a410410c701200241146a200241ec026a41046a3602002002200241b8026a36020c2002200241ec026a3602102002200241b0026a360208200241e0026a200241086a107e20022802e802220141206a2200417f4c0d040240024020000d00410121030c010b200010322203450d060b200241003602102002200036020c20022003360208200241086a4100411010c8012002280208200228021022006a220320022900c002370000200341086a200241c0026a41086a2900003700002002200041106a2200360210200241086a2000411010c8012002280208200228021022006a220320022900d002370000200341086a200241d0026a41086a2900003700002002200041106a220336021020022802e0022100200241086a2003200110c80120022802082203200228021022046a2000200110c9081a2002200420016a2201360210024020022802e402450d002000102c0b200241d0026a2003200110b80320022902d402210720022802d0022101200228020c450d022003102c0c020b200241c0026a41f1ddc700410510c501200241d0026a41acffc000410b10c501200220013602ec02200241b0026a200241ec026a410410c701200241146a200241ec026a41046a3602002002200241b8026a36020c2002200241ec026a3602102002200241b0026a360208200241e0026a200241086a107e20022802e802220141206a2200417f4c0d030240024020000d00410121030c010b200010322203450d050b200241003602102002200036020c20022003360208200241086a4100411010c8012002280208200228021022006a220320022900c002370000200341086a200241c0026a41086a2900003700002002200041106a2200360210200241086a2000411010c8012002280208200228021022006a220320022900d002370000200341086a200241d0026a41086a2900003700002002200041106a220336021020022802e0022100200241086a2003200110c80120022802082203200228021022046a2000200110c9081a2002200420016a2201360210024020022802e402450d002000102c0b200241d0026a2003200110b80320022902d402210720022802d0022101200228020c450d012003102c0c010b200241c0026a41f1ddc700410510c501200241d0026a41acffc000410b10c501200220013602ec02200241b0026a200241ec026a410410c701200241146a200241ec026a41046a3602002002200241b8026a36020c2002200241ec026a3602102002200241b0026a360208200241e0026a200241086a107e20022802e802220141206a2200417f4c0d020240024020000d00410121030c010b200010322203450d040b200241003602102002200036020c20022003360208200241086a4100411010c8012002280208200228021022006a220320022900c002370000200341086a200241c0026a41086a2900003700002002200041106a2200360210200241086a2000411010c8012002280208200228021022006a220320022900d002370000200341086a200241d0026a41086a2900003700002002200041106a220336021020022802e0022100200241086a2003200110c80120022802082203200228021022046a2000200110c9081a2002200420016a2201360210024020022802e402450d002000102c0b200241d0026a2003200110b80320022902d402210720022802d0022101200228020c450d002003102c0b410110322200450d022002420137020c20022000360208200241086a41004101102f20022802082200200228021022036a21040240024020010d00200441003a0000200341016a21030c010b200441013a00002002200341016a36021020012007422088a7200241086a10bb0120022802102103200228020821002001450d002007a7450d002001102c0b200241f0026a24002003ad4220862000ad840f0b200241dc026a41043602002002411c6a41023602002002420237020c20024194c7c300360208200241043602d402200241cccbc3003602d002200241003602c402200241c4b5c8003602c0022002200241d0026a3602182002200241c0026a3602d802200241086a41a4c7c3001046000b103b000b1039000be21002097f017e230041a0026b220224000240024002400240024020014104490d002001417c714104460d0020014108470d00200041c4b5c80020011b2201280000210320012800042104200241c0006a22014200370300200241386a22004200370300200241286a41086a2205420037030020024200370328200241c8006a41c1dcc700410610c5012005200241c8006a41086a220629000037030020022002290048370328200241d8006a4196a4c600410610c5012001200241d8006a41086a220729000037030020002002290058370300200241106a200241286a412010c60120014200370300200042003703002005420037030020024200370328200241c8006a41ac95c400410d10c5012005200629000037030020022002290048370328200241d8006a41c695c400410c10c5012001200729000037030020002002290058370300200241e8006a200241286a10f502200241c8006a41f1ddc700410510c501200241d8006a4191f6c000411210c5012002200336029c02200241186a2002419c026a410410c701200241e8006a410c6a2002419c026a41046a3602002002200241186a41086a36026c20022002419c026a3602702002200241186a360268200241286a200241e8006a107e2002280230220141206a2200417f4c0d010240024020000d00410121050c010b200010322205450d050b200241003602702002200036026c20022005360268200241e8006a4100411010c8012002280268200228027022006a22052002290048370000200541086a200241c8006a41086a2900003700002002200041106a2200360270200241e8006a2000411010c8012002280268200228027022006a22052002290058370000200541086a200241d8006a41086a2900003700002002200041106a220536027020022802282100200241e8006a2005200110c80120022802682205200228027022066a2000200110c9081a2002200620016a22013602700240200228022c450d002000102c0b200241086a2005200110c6010240200228026c450d002005102c0b200241c8006a41f1ddc700410510c501200241d8006a4185f6c000410c10c5012002200336029c02200241186a2002419c026a410410c701200241e8006a410c6a2002419c026a41046a3602002002200241206a36026c20022002419c026a3602702002200241186a360268200241286a200241e8006a107e2002280230220141206a2200417f4c0d010240024020000d00410121060c010b200010322206450d050b41002105200241003602202002200036021c20022006360218200241186a4100411010c8012002280218200228022022006a22062002290048370000200641086a200241c8006a41086a2900003700002002200041106a2200360220200241186a2000411010c8012002280218200228022022006a22062002290058370000200641086a200241d8006a41086a2900003700002002200041106a220636022020022802282100200241186a2006200110c80120022802182206200228022022076a2000200110c9081a2002200720016a22013602200240200228022c450d002000102c0b200241e8006a2006200110bb0302400240200228027422084102470d004104210741002109410021080c010b2002280278210a20022802682107200228026c2109200228027021050b0240200228021c450d002006102c0b0240024002402005450d00200541037441786a41037641016a210541002100200721010340200128020020044f0d02200141086a21012005200041016a2200470d000b0b20084101470d01200a2004490d010c040b024020000d002008450d00200a20044f0d040b200241e8006a2003200128020010bf03200241286a20022802682200200228027010b803200229022c210b20022802282101200228026c450d042000102c0c040b200241c8006a41f1ddc700410510c501200241d8006a41acffc000410b10c5012002200336029c02200241186a2002419c026a410410c701200241f4006a2002419c026a41046a3602002002200241206a36026c20022002419c026a3602702002200241186a360268200241286a200241e8006a107e2002280230220141206a2200417f4c0d010240024020000d00410121040c010b200010322204450d050b200241003602702002200036026c20022004360268200241e8006a4100411010c8012002280268200228027022006a22042002290048370000200441086a200241c8006a41086a2900003700002002200041106a2200360270200241e8006a2000411010c8012002280268200228027022006a22042002290058370000200441086a200241d8006a41086a2900003700002002200041106a220436027020022802282100200241e8006a2004200110c80120022802682204200228027022056a2000200110c9081a2002200520016a22013602700240200228022c450d002000102c0b200241286a2004200110b803200229022c210b20022802282101200228026c450d032004102c0c030b200241346a4104360200200241fc006a41023602002002420237026c20024194c7c3003602682002410436022c200241d4cbc3003602282002410036025c200241c4b5c8003602582002200241286a3602782002200241d8006a360230200241e8006a41a4c7c3001046000b103b000b410021010b02402009450d002007450d00200941ffffffff0171450d002007102c0b410110322200450d002002420137026c20022000360268200241e8006a41004101102f20022802682200200228027022046a21050240024020010d00200541003a0000200441016a21040c010b200541013a00002002200441016a3602702001200b422088a7200241e8006a10bb0120022802702104200228026821002001450d00200ba7450d002001102c0b200241a0026a24002004ad4220862000ad840f0b1039000bb81102067f057e230041d0086b2202240002400240024020014104490d0020014104470d00200041c4b5c80020011b2800002103200241a8086a41968dc700410d10c501200241086a41a38dc700411310c501200220033602c408200241c8086a200241c4086a410410c701200241cc066a200241c4086a41046a3602002002200241d0086a3602c4062002200241c4086a3602c8062002200241c8086a3602c006200241b8086a200241c0066a107e20022802c008220141206a2200417f4c0d010240024020000d00410121040c010b200010322204450d030b200241003602b806200220003602b406200220043602b006200241b0066a4100411010c80120022802b00620022802b80622006a220420022900a808370000200441086a200241a8086a41086a2900003700002002200041106a22003602b806200241b0066a2000411010c80120022802b00620022802b80622006a22042002290008370000200441086a200241086a41086a2900003700002002200041106a22043602b80620022802b8082100200241b0066a2004200110c80120022802b006220420022802b80622056a2000200110c9081a2002200520016a22013602b806024020022802bc08450d002000102c0b20024188046a2004200110f304200241c0066a20024188046a41e80110c9081a02400240024020022802f0052200450d0020024184066a2802002105200241fc056a2802002101200241f8056a2802002106200241a0026a200241c0066a41e80110c9081a024020022802b406450d002004102c0b20024188046a200241a0026a41e80110c9081a2002413c6a20024188046a41047241e40110c9081a02402006450d002000102c0b02402005450d002001450d002001102c0b200241a8086a41968dc700410d10c501200241086a41bc92c700411e10c501200220033602b006200241b8086a200241b0066a410410c70120024194046a200241b0066a41046a3602002002200241c0086a36028c042002200241b0066a360290042002200241b8086a36028804200241c0066a20024188046a107e20022802c806220141206a2200417f4c0d040240024020000d00410121040c010b200010322204450d060b41002103200241003602c008200220003602bc08200220043602b808200241b8086a4100411010c80120022802b80820022802c00822006a220420022900a808370000200441086a200241a8086a41086a2900003700002002200041106a22003602c008200241b8086a2000411010c80120022802b80820022802c00822006a22042002290008370000200441086a200241086a41086a2900003700002002200041106a22043602c00820022802c0062100200241b8086a2004200110c80120022802b808220420022802c00822056a2000200110c9081a2002200520016a22013602c008024020022802c406450d002000102c0b20024188046a2004200110ee04200241c0066a41086a20024194046a290200370300200241c0066a41106a2002419c046a290200370300200241c0066a41186a2201200241a4046a290200370300200241c0066a41206a2200200241ac046a290200370300200241c0066a41286a2205200241b4046a290200370300200241c0066a41306a2206200241bc046a2802003602002002200229028c043703c00602402002280288042207450d00200241a0026a41306a2006280200360200200241a0026a41286a2005290300370300200241a0026a41206a2000290300370300200241a0026a41186a2001290300370300200241a0026a41106a200241c0066a41106a290300370300200241a0026a41086a200241c0066a41086a290300370300200220022903c0063703a002200721030b024020022802bc08450d002004102c0b200241c0066a2002413c6a41e40110c9081a2003450d0120024188046a200241c0066a41e40110c9081a200241086a41306a200241a0026a41306a2802002201360200200241086a41286a200241a0026a41286a2903002208370300200241086a41206a200241a0026a41206a2903002209370300200241086a41186a200241a0026a41186a290300220a370300200241086a41106a200241a0026a41106a290300220b370300200241086a41086a200241a0026a41086a290300220c370300200241f8056a200c37030020024180066a200b37030020024188066a200a37030020024190066a200937030020024198066a2008370300200241a0066a2001360200200220022903a0022208370308200220033602ec05200220083703f0050c020b20022802b406450d002004102c0b41002103200241003602ec050b410110322201450d02200242013702c406200220013602c006200241c0066a41004101102f20022802c00620022802c8066a21010240024020030d00200141003a000020022802c80641016a210420022802c00621050c010b200141013a0000200220022802c80641016a3602c806200241c0066a20024188046a10c804200241ec056a200241c0066a10b50520022802c006210520022802c8062104024020022802f4052201450d002001410c6c21002003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b024020022802f0052201450d002001410c6c450d002003102c0b20022802f805210302402002280280062201450d0020014104742100200341046a210103400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b024020022802fc0541ffffffff0071450d002003102c0b02402002280284062201450d00200228028806450d002001102c0b200228029406450d00200228029006102c0b200241d0086a24002004ad4220862005ad840f0b200241cc066a41043602002002419c046a41023602002002420237028c0420024194c7c30036028804200241043602c406200241f8cbc3003602c006200241003602a402200241c4b5c8003602a0022002200241c0066a360298042002200241a0026a3602c80620024188046a41a4c7c3001046000b103b000b1039000bfc1c05067f017e067f017e067f230041e00d6b2202240002400240024002400240024002400240024002400240024020010d0020024188056a2201420037030020024180056a22034200370300200241f0046a41086a22044200370300200242003703f004200241b00b6a41c1dcc700410610c5012004200241b00b6a41086a2205290000370300200220022900b00b3703f004200241b00b6a41baa4c600410610c50120012005290000370300200320022900b00b370300200241203602142002200241f0046a360210200241186a200241f0046a412010b3010240200228021822060d00410021030c060b200228021c21072002200241186a41086a28020036022c20022006360228200241086a200241286a10870220022802080d03200228020c2205200228022c41b0026e2201200120054b1bad42b0027e2208422088a70d062008a72201417f4c0d060240024020010d00410821030c010b200110322203450d0c0b200141b0026ead210802402005450d00034002400240200228022c2201450d00200228022822092d0000210a20022001417f6a220b36022c4101210c2002200941016a36022841032104024002400240200a0e03000201040b200b4104490d022009280001210d20022001417b6a36022c2002200941056a3602284100210c0c010b4102210c0b200241b00b6a200241286a10f20520022802b00b410a460d0020024198096a200241b00b6a41980210c9081a200241b00b6a200241286a10fd04024020022802b00b450d0020024190076a41086a200241b00b6a41086a280200360200200220022903b00b37039007200241b00b6a20024198096a41980210c9081a200c2104200d210e0c020b20024198096a10f3050b410321040b200241d8026a200241b00b6a41980210c9081a200241c8026a41086a220120024190076a41086a28020036020020022002290390073703c80202400240024020044103460d00200241306a200241d8026a41980210c9081a20024180076a41086a22092001280200360200200220022903c802370380072008422088a722012008a7470d02200141016a220a2001490d0b2001410174220c200a200a200c491b220a4104200a41044b1bad42b0027e220f422088a70d0b41000d0b200fa7220a4100480d0b200141b0026c201020011b2110024002402003410020011b22010d00200a0d01410821030c030b024020100d00200a0d01410821030c030b20012010200a10352203450d110c020b200a103222030d010c100b2008422088a72201450d06200141b0026c2104200321010c050b200842808080807083200a41b0026ead8421080b20032008422088a741b0026c6a200241306a41980210c9082201419c026a200e3602002001200436029802200141a0026a200229038007370200200141a8026a200928020036020020084280808080107c21082005417f6a22050d000b0b2003450d030c040b200241a4096a4104360200200241c40b6a4102360200200242023702b40b20024194c7c3003602b00b2002410436029c09200241a0ccc30036029809200241003602dc02200241c4b5c8003602d802200220024198096a3602c00b2002200241d8026a3602a009200241b00b6a41a4c7c3001046000b0340200110f405200141b0026a2101200441d07d6a22040d000b0b02402008a72201450d002003450d01200141b0026c450d012003102c0b0b41002103200241003602a00920024201370398092002410f3602dc022002200241106a3602d802200220024198096a360230200241c40b6a4101360200200242013702b40b200241b4bcc3003602b00b2002200241d8026a3602c00b200241306a41dcb7c000200241b00b6a103e1a20023502a009422086200235029809841000200228029c09450d00200228029809102c0b2007450d002006102c0b2003410820031b220b2008420020031b2208422088a7220c41b0026c22016a21032008a721060240200c0d00200b21010c030b200241d8026a410472210d200141d07d6a210a200241b00b6a41a0026a2109200241c8026a41086a2105200b21010240034020024198096a200141980210c9081a2001419c026a280200211020014198026a28020021042005200141a8026a2802003602002002200141a0026a2902003703c80220044103460d03200141ac026a280200210e200241b00b6a20024198096a41980210c9081a200920022903c802370200200941086a2005280200360200200220103602cc0d200220043602c80d2002200e3602dc0d200241d8026a200241b00b6a10f50520022802d80222044103470d01200a41d07d6a210a200141b0026a22012003470d000b200321010c030b200241306a200d41900210c9081a200241f0046a200241306a41900210c9081a200241b00b6a200241f0046a41900210c9081a20024198096a200241f0046a41840210c9081a200241d8026a41086a2205200241bc0d6a280200360200200220022902b40d3703d802024002400240024020040e03010200010b20024190076a20024198096a41840210c9081a20024180076a41086a2005280200360200200220022903d80237038007410221040c020b20024190076a20024198096a41840210c9081a20024180076a41086a2005280200360200200220022903d80237038007410021040c010b20024190076a20024198096a41840210c9081a20024180076a41086a2005280200360200200220022903d80237038007410121040b4194021032220e450d05200e2004360200200e41046a20024190076a41840210c9081a200e4190026a20024180076a41086a2207280200360200200e2002290380073702880202400240200a0d004101210d41012105200321010c010b200141b0026a2104200241d8026a4104722111200c41b0026c200b6a41d07d6a2112200241b00b6a4184026a2113200241b00b6a41a0026a210a200241c8026a41086a21094101210d410121050340200421010240024002400240034020024198096a200141980210c9081a2001419c026a280200211020014198026a28020021042009200141a8026a2802003602002002200141a0026a2902003703c80220044103460d02200141ac026a280200210c200241b00b6a20024198096a41980210c9081a200a20022903c802370200200a41086a2009280200360200200220103602cc0d200220043602c80d2002200c3602dc0d200241d8026a200241b00b6a10f50520022802d80222044103470d01200141b0026a22012003470d000b200321010c050b200241306a201141900210c9081a200241f0046a200241306a41900210c9081a200241b00b6a200241f0046a41900210c9081a20024198096a200241f0046a41840210c9081a200241d8026a41086a2210201341086a280200360200200220132902003703d802024002400240024020040e03010200010b20024190076a20024198096a41840210c9081a20072010280200360200200220022903d802370380074102210c0c020b20024190076a20024198096a41840210c9081a20072010280200360200200220022903d802370380074100210c0c010b20024190076a20024198096a41840210c9081a20072010280200360200200220022903d802370380074101210c0b200241b00b6a20024190076a41840210c9081a20024198096a41086a221420072802003602002002200229038007370398092005200d470d02200d41016a2204200d490d05200d41017422102004201020044b1b22044104200441044b1bad4294027e2208422088a70d0541000d052008a722044100480d05200d4194026c2015200d1b211502400240200e4100200d1b22100d0020040d014104210e0c030b024020150d0020040d014104210e0c030b2010201520041035220e450d0b0c020b20041032220e450d0a0c010b200141b0026a21010c030b20044194026e210d0b200141b0026a2104200e20054194026c6a2210200c360200201041046a200241b00b6a41840210c9081a20104190026a201428020036020020104188026a200229039809370200200541016a210520122001470d000b200321010b024020032001460d000340200110f4052003200141b0026a2201470d000b0b02402006450d00200641b0026c450d00200b102c0b20054194026c41046a2201417f4c0d0020010d0341012103410021010c040b103b000b200141b0026a21010b024020032001460d000340200110f4052003200141b0026a2201470d000b0b02402006450d00200641b0026c450d00200b102c0b4104210e410021054100210d410421010b200110322203450d010b200241003602b80b200220013602b40b200220033602b00b200241b00b6a2005108f0102402005450d0020054194026c2103200e21010340024002400240024020012802000e03000102030b200241b00b6a20022802b80b4101102f20022802b00b20022802b80b6a41003a0000200220022802b80b41016a3602b80b200241b00b6a200141046a10f60520014188026a28020020014190026a280200200241b00b6a10bb010c020b200241b00b6a20022802b80b4101102f20022802b00b20022802b80b6a41013a0000200220022802b80b41016a3602b80b200241b00b6a200141046a10f60520014188026a28020020014190026a280200200241b00b6a10bb010c010b200241b00b6a20022802b80b4101102f20022802b00b20022802b80b6a41023a0000200220022802b80b41016a3602b80b200241b00b6a200141046a10f60520014188026a28020020014190026a280200200241b00b6a10bb010b20014194026a2101200341ec7d6a22030d000b0b20023502b80b210820023502b00b210f02402005450d0020054194026c2103200e21010340024002400240024020012802000e020001020b2001418c026a280200450d0220014188026a280200102c0c020b2001418c026a280200450d0120014188026a280200102c0c010b2001418c026a280200450d0020014188026a280200102c0b20014194026a2101200341ec7d6a22030d000b0b0240200d450d00200e450d00200d4194026c450d00200e102c0b200241e00d6a24002008422086200f840f0b1039000ba94d07067f027e037f077e017f047e047f230041900b6b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e1c010b0b02030b0b04050b0607080b0b0b090b0b0b0b0b0b0b0b0b0b0a0b0b2000410a3602000c140b02402006450d0020042d0001210520012003417e6a2207360204410221062001200441026a36020002400240024002400240024020050e050001040203060b200241a8096a200110d90620022d00b1094102460d0520022903b009210820022903a8092109410021060c030b2007450d0420042d0002210520012003417d6a220a3602042001200441036a36020041c4b5c800ad210842002109410121064100210b024002400240024020050e0402030001080b410221060c020b200a450d0620042d0003210720012003417c6a22053602042001200441046a3602002005450d0620042d0004210c20012003417b6a3602042001200441056a360200420021084103210b0b200b2106200821090b200241a8096a200110d90620022d00b1094102460d04200c41ff0171411074200741ff017141087472200672210a200942ffffffff0f83210920022903b009210d20022903a80921084200210e410121060c020b41002105200241003a00c8092003417d6a21030240034020072005460d01200241a8096a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00c8092003417f6a21032006210520064120470d000b200641ff01714120490d04200241b7096a290000210820022900bf09210d20022900af09210920022800ab09210a20022f00a909210c20022d00a809210b200241c7096a31000042ff0183210e410321060c020b200541ff0171450d03200241003a00c8090c030b41002105200241003a00c8092003417d6a2103034020072005460d02200241a8096a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00c8092003417f6a21032006210520064120470d000b200641ff01714120490d02200241b7096a290000210820022900bf09210d20022900af09210920022800ab09210a20022f00a909210c20022d00a809210b200241c7096a31000042ff0183210e410421060b2000200c3b000a2000200b3a000920004100360200200041286a200e370000200041206a200d370000200041186a2008370000200041106a20093700002000410c6a200a360000200041086a20063a0000200041306a200241e80110c9081a0c150b200541ff0171450d00200241003a00c8090b2000410a3602000c130b02402006450d0020042d0001210520012003417e6a220c3602042001200441026a3602000240024002400240024020050e03000102050b41002105200241003a00c809200c411f200c411f491b20046a41036a210b417d210702400340200c2005460d01200241a8096a20056a200420056a220641026a2d00003a00002001200320076a3602042001200641036a3602002002200541016a22063a00c8092007417f6a21072006210520064120470d000b200641ff01714120490d05200320066b220a417e6a41034d0d05200241c7096a3100002108200241b7096a290000210d20022900bf09210920022900af09210e20022800ab09210520022f00a909210320022d00a8092107200b280000210c2001200a417a6a3602042001200420066a41066a3602002002200e3703c0072002200d3703c807200220093703d0072009423888200842ff0183420886842109200e421888a72101200e420888a72104200241cf076a290000210820022900c707210d200ea721064100210b0c030b200541ff0171450d04200241003a00c8090c040b200c4104490d032004280002210520012003417a6a3602042001200441066a3602004200210d4101210b4100210c420021080c010b200c4104490d022004280002210c20012003417a6a22073602042001200441066a36020041002105200241003a00c809200341796a2103034020072005460d02200241a8096a20056a200420056a220641066a2d00003a0000200120033602042001200641076a3602002002200541016a22063a00c8092003417f6a21032006210520064120470d000b200641ff0171411f4d0d02200241a8096a411f6a3100002108200241a8096a410f6a290000210d20022900bf09210920022800ab09210520022f00a909210320022d00a8092107200220022900af09220e3703d8052002200d3703e005200220093703e8052009423888200842ff0183420886842109200e421888a72101200e420888a72104200241d8056a410f6a290000210820022900df05210d200ea721064102210b0b200020043b000d200020033b0006200020073a00052000200b3a000420004101360200200041276a20094220883c0000200041236a20093e00002000411b6a2008370000200041136a200d370000200041286a200c3602002000410f6a20013600002000410c6a20063a0000200041086a20053602002000412c6a200241ec0110c9081a0c140b200541ff0171450d00200241003a00c8090b2000410a3602000c120b2006450d1020042d0001210620012003417e6a22053602042001200441026a3602000240024002400240024002400240024020060e080001020304050607180b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d18200320076b2203417e6a4110490d18200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09210520022f00a909210620022d00a809210c200420076a2204410a6a2900002111200441026a290000211220012003416e6a3602042001200441126a3602002005ad4218862006ad42ffff038342088684200cad42ff01838421094100210142002113410021040c170b200641ff0171450d17200241003a00c8090c170b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d17200320076b2203417e6a4110490d17200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09210520022f00a909210620022d00a809210c200420076a2204410a6a2900002111200441026a290000211220012003416e6a3602042001200441126a3602002005ad4218862006ad42ffff038342088684200cad42ff0183842109410121040c150b200641ff0171450d16200241003a00c8090c160b41002106200241003a00c8092003210702400240034020052006460d01200241a8096a20066a200420066a220c41026a2d00003a000020012007417d6a3602042001200c41036a3602002002200641016a220c3a00c8092007417f6a2107200c2106200c4120470d000b200c41ff01714120490d172003200c6b417e6a210b200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09210620022f00a909210a20022d00a809211441002105200241003a00c8092006ad421886200aad42ffff0383420886842014ad42ff01838421092004200c6a210c2007417d6a21060340200b2005460d02200241a8096a20056a200c20056a220441026a2d00003a0000200120063602042001200441036a3602002002200541016a22043a00c8092006417f6a21062003417f6a21032004210520044120470d000b200441ff01714120490d17200720046b2205417e6a4110490d17200241c7096a3100002115200241b7096a290000211120022900bf09211620022900af09211220022800ab09210620022f00a909210720022d00a809210b200c20046a2203410a6a290000211741022104200341026a290000211820012005416e6a3602042001200341126a3602002006ad4218862007ad42ffff038342088684200bad42ff01838421080c160b200641ff0171450d16200241003a00c8090c160b200541ff0171450d15200241003a00c8090c150b41002106200241003a00c809417d21070240034020052006460d01200241a8096a20066a200420066a220c41026a2d00003a00002001200320076a3602042001200c41036a3602002002200641016a220c3a00c8092007417f6a2107200c2106200c4120470d000b200c41ff01714120490d152003200c6b2203417e6a4110490d15200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09210620022f00a909210720022d00a809210b2004200c6a2204410a6a2900002111200441026a290000211220012003416e6a22053602042001200441126a220c36020020054110490d152006ad4218862007ad42ffff038342088684200bad42ff0183842109200c29000021162004411a6a290000211520012003415e6a3602042001200441226a360200201542108821132015420888a72101410321040c140b200641ff0171450d14200241003a00c8090c140b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d14200320076b2203417e6a4110490d14200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09210520022f00a909210620022d00a809210c200420076a2204410a6a2900002111200441026a290000211220012003416e6a3602042001200441126a3602002005ad4218862006ad42ffff038342088684200cad42ff0183842109410421040c120b200641ff0171450d13200241003a00c8090c130b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d13200320076b2203417e6a4110490d13200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09210520022f00a909210620022d00a809210c200420076a2204410a6a2900002111200441026a290000211220012003416e6a3602042001200441126a3602002005ad4218862006ad42ffff038342088684200cad42ff0183842109410521040c110b200641ff0171450d12200241003a00c8090c120b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d12200320076b2203417e6a410f4d0d12200241c7096a310000210d200241a8096a410f6a290000210e20022900bf09210f20022900af09211020022800ab09210520022f00a909210620022d00a809210c200420076a2204410a6a2900002111200441026a290000211220012003416e6a3602042001200441126a3602002005ad4218862006ad42ffff038342088684200cad42ff0183842109410621040c100b200641ff0171450d11200241003a00c8090c110b41002106200241003a00c809200321070240024002400240034020052006460d01200241a8096a20066a200420066a220c41026a2d00003a000020012007417d6a3602042001200c41036a3602002002200641016a220c3a00c8092007417f6a2107200c2106200c4120470d000b200c41ff01714120490d142003200c6b417e6a210a200241c7096a310000210d200241b7096a290000210e20022900bf09210f20022900af09211020022800ab09211920022f00a909211a20022d00a809211b41002105200241003a00c8092004200c6a21142007417d6a21042003210b0340200a2005460d02200241a8096a20056a201420056a220641026a2d00003a0000200120043602042001200641036a3602002002200541016a22063a00c8092004417f6a2104200b417f6a210b2006210520064120470d000b200641ff01714120490d14200241b7096a290000210920022900bf09210820022900af09211520022800ab09210b20022f00a909210a20022d00a809211c200241f0056a200241c7096a3100003c0000200220083703e805200220153703d805200220093703e005200720066b2204417e6a4110490d14201420066a2205410a6a2900002117200541026a290000211820012004416e6a3602042001200541126a2207360200200c20036b20066a416e460d1420072d0000210320012004416d6a3602042001200541136a3602004100210120030e020302140b200641ff0171450d13200241003a00c8090c130b200541ff0171450d12200241003a00c8090c120b410121010b200241c0076a41186a2204200241d8056a41186a2d00003a0000200241c0076a41106a200241d8056a41106a2903002216370300200bad421886200aad42ffff038342088684201cad42ff01838421082019ad421886201aad42ffff038342088684201bad42ff0183842109200241e0056a290300211120022903d805211220043100002115410721040c0f0b02402006450d0020042d0001210620012003417e6a22053602042001200441026a360200024002400240024002400240024002400240024020060e090001020304050708090a0b20054104490d092004280002210520012003417a6a22063602042001200441066a36020020064110490d092004410e6a29000021092004290006210820012003416a6a22063602042001200441166a36020020064110490d092004411e6a29000021102004290016210d20012003415a6a3602042001200441266a360200410021040c160b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d09200320076b2203417e6a4110490d09200241c7096a3100002110200241b7096a290000210920022900bf09210d20022900af09210820022800ab09210520022f00a909210620022d00a809210b200420076a2204410a6a290000210f200441026a290000210e20012003416e6a3602042001200441126a360200201042ff01832110410121040c160b200641ff0171450d08200241003a00c8090c080b41002106200241003a00c809417d21070240034020052006460d01200241a8096a20066a200420066a220c41026a2d00003a00002001200320076a3602042001200c41036a3602002002200641016a220c3a00c8092007417f6a2107200c2106200c4120470d000b200c41ff01714120490d08200241a8096a410f6a290000210920022900bf09210d20022900af09210820022800ab09210520022f00a909210620022d00a8092107200241c0076a411f6a200241a8096a411f6a31000022103c0000200241c0076a410f6a20093700002002200d3700d707200220083700c707200220053600c307200220063b00c107200220073a00c0072003200c6b2203417e6a4110490d082004200c6a2205410a6a290000210f41022104200541026a290000210e20012003416e6a3602042001200541126a360200201042ff0183211020023502c007221520023301c40720023100c60742108684422086842211421888a721052011420888a721062015a7210b0c150b200641ff0171450d07200241003a00c8090c070b20054104490d062004280002210520012003417a6a3602042001200441066a360200410321040c130b2005450d0520042d0002210720012003417d6a3602042001200441036a360200410421044100210b20070e03121101050b2005450d0420042d0002210720012003417d6a3602042001200441036a360200410521044100210b20070e03111000040b4102210b0c100b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d03200320076b2203417e6a4110490d03200241c7096a3100002110200241b7096a290000210920022900bf09210d20022900af09210820022800ab09210520022f00a909210620022d00a809210b200420076a2204410a6a290000210f200441026a290000210e20012003416e6a3602042001200441126a360200201042ff01832110410621040c100b200641ff0171450d02200241003a00c8090c020b41002106200241003a00c809417d210c0240034020052006460d01200241a8096a20066a200420066a220741026a2d00003a000020012003200c6a3602042001200741036a3602002002200641016a22073a00c809200c417f6a210c2007210620074120470d000b200741ff01714120490d02200320076b2203417e6a410f4d0d02200241c7096a3100002110200241a8096a410f6a290000210920022900bf09210d20022900af09210820022800ab09210520022f00a909210620022d00a809210b200420076a2204410a6a290000210f200441026a290000210e20012003416e6a3602042001200441126a360200201042ff01832110410721040c0f0b200641ff0171450d01200241003a00c8090c010b41002106200241003a00c809417d21070240034020052006460d01200241a8096a20066a200420066a220c41026a2d00003a00002001200320076a3602042001200c41036a3602002002200641016a220c3a00c8092007417f6a2107200c2106200c4120470d000b200c41ff01714120490d01200241b7096a290000210920022900bf09210d20022900af09210820022800ab09210520022f00a909210620022d00a809210b200241f0056a200241c7096a31000022103c00002002200d3703e805200220083703d805200220093703e0052003200c6b2203417e6a4110490d012004200c6a2204410a6a290000210f200441026a290000210e20012003416e6a3602042001200441126a360200201042ff01832110410821040c0e0b200641ff0171450d00200241003a00c8090b2000410a3602000c100b0240024002402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241a8096a200110cb0420022d00a8094101460d00200241b1096a290000210920022900a9092108200241a8096a2001108a0220022802a8092204450d0020022802ac092103024020012802042205450d00200241b0096a280200210c200128020022062d0000210720012005417f6a3602042001200641016a3602004100210120070e020302000b2003450d002004102c0b2000410a3602000c110b410121010b2000200436020420004104360200200041186a2009370200200041106a2008370200200041206a20013a00002000410c6a200c360200200041086a2003360200200041246a200241f40110c9081a0c0f0b02402006450d0020042d0001210520012003417e6a22063602042001200441026a36020020050d0020064104490d002004280002210520012003417a6a3602042001200441066a3602002000200536020420004105360200200041086a200241900210c9081a0c0f0b2000410a3602000c0e0b02402006450d0020042d0001210520012003417e6a3602042001200441026a3602004101210302400240024020050e03000201030b200241a8096a200110fd0520022802a8092204450d0220022902ac092109410021030c010b410221030b20002003360204200041063602002000410c6a2009370200200041086a2004360200200041146a200241840210c9081a0c0e0b2000410a3602000c0d0b2006450d0620042d0001210520012003417e6a22073602042001200441026a3602004101210c02400240024020050e03000201090b41002105200241003a00c8092003417d6a21030240034020072005460d01200241a8096a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00c8092003417f6a21032006210520064120470d000b200641ff01714120490d09200241c7096a3100002108200241b7096a290000210d20022900bf09210920022900af09210e20022800ab09210620022f00a909210b20022d00a809210a4100210c0c020b200541ff0171450d08200241003a00c8090c080b200241a8096a200110950420022802a8092206450d0720022902ac09210e4102210c0b2000200b3b00062000200a3a00052000200c3a000420004107360200200041246a20083c00002000411c6a2009370000200041146a200d3700002000410c6a200e370000200041086a2006360000200041286a200241f00110c9081a0c0c0b2006450d0420042d0001210520012003417e6a3602042001200441026a3602000240024002400240024020050e03000102090b2002200110b40520022802004101460d08200241a8096a200241047241e40110c9081a41002103200241003a00202001280204417f6a21040240024003402004417f460d01200220036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00202004417f6a21042005210320054120470d000b200541ff017141204f0d010c0a0b200341ff0171450d09200241003a00200c090b2002411f6a31000021092002410f6a29000021082002290017210d2002290007210e2002280003210420022f0001210320022d00002105200241c0076a200241a8096a41e40110c9081a200241d8056a200241c0076a41e40110c9081a20022001108a0220022802002201450d082002290204210f200241f4036a200241d8056a41e40110c9081a410021060c020b2002200110b40520022802004101460d07200241a8096a200241047241e40110c9081a41002103200241003a00202001280204417f6a2104024003402004417f460d01200220036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00202004417f6a21042005210320054120470d000b200541ff01714120490d082002411f6a31000021092002410f6a29000021082002290017210d2002290007210e2002280003210420022f0001210320022d00002105200241c0076a200241a8096a41e40110c9081a200241d8056a200241c0076a41e40110c9081a20022001108a0220022802002201450d082002290204210f200241f4036a200241d8056a41e40110c9081a410121060c020b200341ff0171450d07200241003a00200c070b2002200110b40520022802004101460d06200241a8096a200241047241e40110c9081a41002103200241003a00202001280204417f6a210403402004417f460d02200220036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00202004417f6a21042005210320054120470d000b200541ff01714120490d062002411f6a31000021092002410f6a29000021082002290017210d2002290007210e2002280003210420022f0001210320022d00002105200241c0076a200241a8096a41e40110c9081a200241d8056a200241c0076a41e40110c9081a20022001108a0220022802002201450d062002290204210f200241f4036a200241d8056a41e40110c9081a410221060b20024190026a200241f4036a41e40110c9081a2000200636020420004108360200200041086a20024190026a41e40110c9081a2000418b026a20093c000020004183026a200d370000200041fb016a2008370000200041f3016a200e37000020004190026a200f3702002000418c026a2001360200200041ef016a2004360000200041ed016a20033b0000200041ec016a20053a00000c0c0b200341ff0171450d04200241003a00200c040b2006450d0120042d0001210520012003417e6a22073602042001200441026a36020002400240024020050e03000102040b200241a8096a2001109f0720022d00a8094105460d0320022902ac09210920022802a8092101410021040c040b41002105200241003a00c8092003417d6a21030240034020072005460d01200241a8096a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00c8092003417f6a21032006210520064120470d000b200641ff01714120490d03200241c7096a310000210e200241b7096a290000210820022900bf09210d20022900af09210920022800ab09210120022f00a909210320022d00a8092105410121040c040b200541ff0171450d02200241003a00c8090c020b200241a8096a2001109f0720022d00a8094105460d0120022902ac09210920022802a8092101410221040c020b2000410a3602000c090b2000410a3602000c080b200020033b0006200020053a0005200020043a000420004109360200200041246a200e3c00002000411c6a200d370000200041146a20083700002000410c6a2009370000200041086a2001360000200041286a200241f00110c9081a0c070b2000410a3602000c060b2000410a3602000c050b4101210b0b200020063b010a2000200b3a000920004103360200200041386a200f370200200041306a200e370200200041286a2010370200200041206a200d370200200041186a2009370200200041106a20083702002000410c6a2005360200200041086a20043a0000200041c0006a200241d80110c9081a0c030b41002101420021130b200020083e0029200020093e0009200041023602002000412f6a20084230883c00002000412d6a20084220883d00002000410f6a20094230883c00002000410d6a20094220883d0000200041d8006a2017370200200041d0006a2018370200200041c0006a2016370200200041386a2011370200200041306a2012370200200041286a200d3c0000200041206a200f370000200041186a200e370000200041106a2010370000200041086a20043a0000200041c8006a20134210862001ad42ff018342088684201542ff018384370200200041e0006a200241b80110c9081a0c010b2000410a3602000b200241900b6a24000b810301037f024002400240024002402000280200417c6a0e050004010203040b200041086a2802002201450d0320002802042202450d032001450d032002102c0c030b20002802040d022000410c6a2802002201450d02200041086a2802002202450d02200141286c450d022002102c0f0b20002d00044102490d010240200041106a2802002201450d00200141d0006c2102200041086a28020041c0006a210103400240200141046a2802002203450d00200341306c450d002001280200102c0b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d0120002802082202450d01200141d0006c450d012002102c0f0b02400240024020002802040e020001020b20004190026a2802002201450d022000418c026a2802002202450d022001450d022002102c0f0b20004190026a2802002201450d012000418c026a2802002202450d012001450d012002102c0f0b20004190026a2802002201450d002000418c026a2802002202450d002001450d002002102c0f0b0baf0301037f024002400240024002402000280200417c6a0e050004010203040b200041086a2802002201450d0320002802042202450d032001450d032002102c0c030b20002802040d022000410c6a2802002201450d02200041086a2802002202450d02200141286c450d022002102c0c020b20002d00044102490d010240200041106a2802002201450d00200141d0006c2102200041086a28020041c0006a210103400240200141046a2802002203450d00200341306c450d002001280200102c0b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d0120002802082202450d01200141d0006c450d012002102c0c010b02400240024020002802040e020001020b20004190026a2802002201450d022000418c026a2802002202450d022001450d022002102c0c020b20004190026a2802002201450d012000418c026a2802002202450d012001450d012002102c0c010b20004190026a2802002201450d002000418c026a2802002202450d002001450d002002102c0b0240200041a4026a2802002201450d0020002802a0022200450d00200141ffffff3f71450d002000102c0b0b870301087f23004190026b22022400200141a4026a280200210320012802a0022104200141106a28020021052001410c6a2802002106200141086a280200210720012802042108200128020021092002410c6a200141146a41840210c9081a0240024020094108460d00200041033602000240024002402009417c6a0e0400040102040b2008410020071b2201450d032007450d032001102c0c030b20080d022007410020061b2201450d02200641286c450d022001102c0c020b200841ff01714102490d0102402005450d00200541d0006c2100200741c0006a210103400240200141046a2802002209450d00200941306c450d002001280200102c0b200141d0006a2101200041b07f6a22000d000b0b2007410020061b2201450d01200641d0006c450d012001102c0c010b20002007360204200020083602002000410c6a2005360200200041086a2006360200200041106a2002410c6a41840210c9081a0b02402004410020031b2201450d00200341ffffff3f71450d002001102c0b20024190026a24000bd90101047f230041106b220224002000200110c8040240412010322203450d002002422037020420022003360200200241004120102f20022802002204200228020822056a220320012900e401370000200341086a200141ec016a290000370000200341106a200141f4016a290000370000200341186a200141fc016a2900003700002002200541206a22013602082000200041086a22032802002001102f200028020020032802006a2004200110c9081a2003200328020020016a36020002402002280204450d002004102c0b200241106a24000f0b1039000bce0102017f027e230041e0006b22022400024020014104470d002002200041c4b5c80020011b280000109e05200241c8006a200210e604200235025021032002350248210402402002280200450d00200210f8050b200241e0006a240020034220862004840f0b200241d4006a4104360200200241146a41023602002002420237020420024194c7c3003602002002410436024c200241b8ccc3003602482002410036025c200241c4b5c8003602582002200241c8006a3602102002200241d8006a360250200241a4c7c3001046000bef0101027f024020002802042201450d0020002802002202450d00200141ffffff3f71450d002002102c0b0240200041106a2802002201450d00200028020c2202450d00200141ffffff3f71450d002002102c0b02402000411c6a2802002201450d0020002802182202450d00200141ffffff3f71450d002002102c0b02402000412c6a2802002202450d00200028022421012002410c6c210203400240200141046a28020041ffffffff0371450d002001280200102c0b2001410c6a2101200241746a22020d000b0b0240200041286a2802002201450d0020002802242202450d002001410c6c450d002002102c0b0bea0502047f027e230041d0006b2202240002400240024020014104470d00200041c4b5c80020011b2800002101200241186a4181dec700410310c501200241286a41a4bfc000411510c50120022001360244200241c8006a200241c4006a410410c7012002410c6a200241c4006a41046a3602002002200241d0006a3602042002200241c4006a3602082002200241c8006a360200200241386a2002107e2002280240220141206a2200417f4c0d010240024020000d00410121030c010b200010322203450d030b20024100360208200220003602042002200336020020024100411010c8012002280200200228020822006a22032002290018370000200341086a200241186a41086a2900003700002002200041106a220036020820022000411010c8012002280200200228020822006a22032002290028370000200341086a200241286a41086a2900003700002002200041106a22033602082002280238210020022003200110c80120022802002204200228020822036a2000200110c9081a2002200320016a22013602080240200228023c450d002000102c0b200241286a2004200110cd0102400240200228022822030d0041002105200241003602202002420437031841042103410021010c010b2002200229022c220637021c200220033602182006a741ffffffff007121052006422088a721010b02402002280204450d002004102c0b2002200241186a10c301200235020821062002350200210702402001450d0020014104742100200341046a210103400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b02402005450d002003102c0b200241d0006a240020064220862007840f0b200241346a4104360200200241146a41023602002002420237020420024194c7c3003602002002410436022c200241ccccc3003602282002410036021c200241c4b5c8003602182002200241286a3602102002200241186a360230200241a4c7c3001046000b103b000b1039000be02607047f017e0a7f017e017f017e137f230041a0026b2202240002400240024002400240024020014104490d0020014104470d00200041c4b5c80020011b280000210320024187dec700410410c501200241d8016a41ecb1c500411810c5012002200336029802200241106a20024198026a410410c7012002412c6a20024198026a41046a3602002002200241186a360224200220024198026a3602282002200241106a36022020024188026a200241206a107e200228029002220141206a2200417f4c0d020240024020000d00410121040c010b200010322204450d040b200241003602282002200036022420022004360220200241206a4100411010c8012002280220200228022822006a22042002290000370000200441086a200241086a2900003700002002200041106a2200360228200241206a2000411010c8012002280220200228022822006a220420022900d801370000200441086a200241d8016a41086a2900003700002002200041106a22043602282002280288022100200241206a2004200110c80120022802202204200228022822056a2000200110c9081a2002200520016a22013602280240200228028c02450d002000102c0b200241d8016a2004200110b90320022902dc01420020022802d80122011b210602402002280224450d002004102c0b2001410420011b210702402006422088a722010d0041002108410021090c020b200720014102746a210a20024198026a41086a210b200241f0016a210c20024180026a210d41002108410021092007210e0340200e280200210f20024187dec700410410c501200241d8016a41d09ac500411310c5012002410036029002200242013703880220024188026a41004104102f20022802880220022802900222016a200f3600002002200141046a22013602900220024188026a20014104102f200228028802220120022802900222006a20033600002002200041046a22003602900220024198026a2001200010c7012002200120006a36022c200220013602282002200b360224200220024198026a360220200241106a200241206a107e0240200228028c02450d002001102c0b2002280218220141206a2200417f4c0d030240024020000d00410121040c010b200010322204450d050b200241003602282002200036022420022004360220200241206a4100411010c8012002280220200228022822006a22042002290000370000200441086a200241086a2900003700002002200041106a2200360228200241206a2000411010c8012002280220200228022822006a220420022900d801370000200441086a200241d8016a41086a22102900003700002002200041106a220436022820022802102100200241206a2004200110c80120022802202204200228022822056a2000200110c9081a2002200520016a220136022802402002280214450d002000102c0b200241d8016a2004200110cd0120022802d801210120022902dc01211102402002280224450d002004102c0b024020090d0041b80110322209450d054100211220094100360200200941046a200241206a41b20110c9081a200941003b01b6010b200e41046a210e2011420020011b21132001410420011b211420092104201221150240024002400240024002400340200441246a210020042f01b601211641002101200441046a2217210502400340024020162001470d00201621010c020b20052802002118200541046a21052000410c6a2100200141016a21010240417f2018200f472018200f4b1b41016a0e03000401000b0b2001417f6a21010b02402015450d002015417f6a2115200420014102746a41b8016a28020021040c010b0b2016410b490d01410021154104210502400240200141054f0d00200121180c010b4105210541052118024002402001417b6a0e020201000b200141796a211841012115410621050c010b41002118410121150b41b80110322200450d0a4100211920004100360200200041046a200241206a41b20110c908211a200041003b01b60120042005410c6c6a220141386a280200211b200141346a280200211c200141306a280200211d201720054102746a2216280200211e201a201641046a20042f01b6012005417f736a221641027410c9081a200041306a2001413c6a2016410c6c10c9081a200420053b01b601200020163b01b6012000200420151b220120184102746a220541086a200541046a220520012f01b60120186b41027410ca081a2005200f36020020012018410c6c6a2205413c6a200541306a220f20012f01b60120186b410c6c10ca081a200541346a2013370200200f2014360200200120012f01b60141016a3b01b6010240024020042802002201450d0041002119034020002114201e211a201b211f201c2120201d212120042f01b401210f024002400240200122042f01b6012200410b490d0041002117410421180240200f4105490d00200f211802400240200f417b6a0e020201000b200f41796a210f41012117410621180c010b4100210f41012117410521180b41e80110322200450d10201941016a21194100210120004100360200200041046a200241206a41b20110c9082122200041003b01b601200020022902d8013702b801200041c0016a2010290200370200200041c8016a200241d8016a41106a290200370200200041d0016a200c290200370200200041d8016a200241d8016a41206a290200370200200041e0016a200d290200370200200441306a22232018410c6c6a2216280208211b2016280204211c2016280200211d200441046a2215201841027422056a280200211e20222015200541046a22246a20042f01b60122252018417f736a220541027410c9082122200041306a2016410c6a2005410c6c10c9082126200420183b01b601200020053b01b601200041b8016a200420246a41b8016a202520186b41027410c908211602400340200020014102746a41b8016a280200221820013b01b401201820003602002001200120054922186a220120054b0d0120180d000b0b2017450d01200f410274220520166a41086a2016200f41016a220141027422186a221620002f01b601200f6b41027410ca081a20162014360200202220186a202220056a220520002f01b601200f6b41027410ca081a2005201a3602002026200f410c6c6a2205410c6a200520002f01b601200f6b410c6c10ca081a2005201f3602082005202036020420052021360200200020002f01b60141016a22053b01b6012001200541ffff037122054b0d020340200020014102746a41b8016a280200221820013b01b40120182000360200200120012005496a221820054b0d03200120054f210f20182101200f450d000c030b0b200f4102742205200441b8016a22186a41086a2018200f41016a220141027422166a22182000200f6b410274220010ca081a20182014360200200441046a221820166a201820056a2205200010ca081a2005201a3602002004200f410c6c6a2200413c6a200041306a220520042f01b601200f6b410c6c10ca081a200041386a201f360200200041346a202036020020052021360200200420042f01b60141016a22003b01b601200f200041ffff037122004f0d040340200420014102746a41b8016a280200220520013b01b40120052004360200200120012000496a220520004b0d05200120004f2118200521012018450d000c050b0b200f4102742205200441b8016a22186a41086a2018200f41016a220141027422166a221820042f01b601200f6b41027410ca081a20182014360200201520166a201520056a220520042f01b601200f6b41027410ca081a2005201a3602002023200f410c6c6a2205410c6a200520042f01b601200f6b410c6c10ca081a2005201f3602082005202036020420052021360200200420042f01b60141016a22053b01b6012001200541ffff037122054b0d000340200420014102746a41b8016a280200221820013b01b401201820043602002001200120054922186a220120054b0d0120180d000b0b200428020022010d000b0b2009450d0341e80110322201450d0b20014100360200200141046a200241206a41b20110c908210f200141003b01b601200120022902d8013702b801200141c0016a2010290200370200200141c8016a200241d8016a41106a290200370200200141d0016a200c290200370200200141d8016a200241d8016a41206a290200370200200141e0016a200d290200370200200120093602b801200941003b01b4012009200136020020122019470d0420012f01b6012204410a4b0d05201241016a21122001200441016a22053b01b60120012004410c6c6a221841346a201c360200200f20044102746a201e360200201841306a201d360200201841386a201b360200200120054102746a41b8016a2000360200200020053b01b40120002001360200200121090b200841016a21080c050b2000280200210420002014360200200041046a22012902002111200120133702002004450d042011a7210502402011422088a72201450d0020014104742100200441046a210103400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b2005450d04200541ffffffff0071450d042004102c0c040b201720014102746a220041046a2000201620016b41027410ca081a2000200f36020020042001410c6c6a2200413c6a200041306a220520042f01b60120016b410c6c10ca081a200041346a201337020020052014360200200420042f01b60141016a3b01b601200841016a21080c030b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b200e200a460d020c000b0b200241e4016a4104360200200241346a41023602002002420237022420024194c7c300360220200241043602dc01200241e0ccc3003602d80120024100360204200241c4b5c8003602002002200241d8016a360230200220023602e001200241206a41a4c7c3001046000b02402006a72201450d00200141ffffffff0371450d002007102c0b20084104744104722201417f4c0d00200110322200450d01200241003602e001200220013602dc01200220003602d801200241d8016a2008108f010240024020090d004100210141002104410021000c010b2009210120122100200921040240034020012f01b60121052000450d012000417f6a2100200120054102746a41b8016a280200210120042802b80121040c000b0b200821000b200241346a2005360200200241306a20013602002002200036023820024200370328200220043602242002410036022002402000450d0020022000417f6a360238200241206a410020041b221828020021040240024020182802082205201828020422002f01b6014f0d00200021010c010b03400240200028020022010d00410021010c020b200441016a210420002f01b401210520012100200520012f01b6014f0d000b0b200541016a210f0240024020040d00200121000c010b2001200f4102746a41b8016a280200210002402004417f6a2204450d00034020002802b80121002004417f6a22040d000b0b4100210f0b20182000360204201841003602002018200f36020820012005410c6c6a41306a2100200120054102746a41046a2101034020012802002101200241d8016a20022802e0014104102f20022802d80120022802e00122046a20013600002002200441046a3602e00120002802002101200241d8016a20002802082200108f0102402000450d00200120004104746a2105034020012802002100200241d8016a20022802e0014104102f20022802d80120022802e00122046a20003600002002200441046a3602e001200141046a2802002001410c6a280200200241d8016a10bb01200141106a22012005470d000b0b20022802382201450d0120022001417f6a360238200241206a410020022802241b221828020021040240024020182802082205201828020422002f01b6014f0d00200021010c010b03400240200028020022010d00410021010c020b200441016a210420002f01b401210520012100200520012f01b6014f0d000b0b200541016a210f0240024020040d00200121000c010b2001200f4102746a41b8016a280200210002402004417f6a2204450d00034020002802b80121002004417f6a22040d000b0b4100210f0b20182000360204201841003602002018200f36020820012005410c6c6a41306a2100200120054102746a41046a21010c000b0b20023502d801211120023502e00121132009450d02200921010240034020092f01b60121002012450d012012417f6a2112200920004102746a41b8016a280200210920012802b80121010c000b0b200241346a2000360200200241306a20093602002002420037032820022001360224200241003602200c030b103b000b1039000b41002108200241306a4100360200200241003602240b20022008360238200241d8016a200241206a10fb05024020022802dc012204450d00034020022802e0012105024020022802e4012201450d0020014104742100200441046a210103400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b02402005450d002004450d00200541ffffffff0071450d002004102c0b200241d8016a200241206a10fb0520022802dc0122040d000b0b024020022802242200450d00200028020021012000102c2001450d000340200128020021002001102c2000210120000d000b0b200241a0026a240020134220862011840bfa0202077f017e230041206b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f01b6014f0d00200421030c010b034002400240200428020022030d00410021030c010b200541016a210520042f01b40121060b2004102c20032104200620032f01b6014f0d000b0b200320064102746a41046a2802002107200241106a41086a220820032006410c6c6a220441386a2802003602002002200441306a290200370310200641016a210402402005450d00200320044102746a41b8016a280200210302402005417f6a2204450d00034020032802b80121032004417f6a22040d000b0b410021040b200241086a2008280200220636020020022002290310220937030020002007360200200020093702042000410c6a20063602002001200436020820012003360204200141003602000c010b200041003602040b200241206a24000f0b41ecd0c800412b4198d1c800103c000b850904057f017e027f037e230041e0006b2202240002400240024020010d002002411436021c200241d0f0c500360218200241206a41d0f0c500411410b3010240024002400240200228022022010d004100210141082103410021040c010b200228022421042002200241286a2802002205360234200220013602300240024002402005450d0020012d0000210320022005417f6a3602342002200141016a360230200241c8006a200241306a10fd0520022802482206450d00200229024c2107200341ff01714101460d012007a72205450d00200541286c450d002006102c0b4100210320024100360210200242013703082002410f36023c2002200241186a3602382002200241086a36024441012105200241dc006a41013602002002420137024c200241b4bcc3003602482002200241386a360258200241c4006a41dcb7c000200241c8006a103e1a200235021042208620023502088410000240200228020c450d002002280208102c0b0c010b2007422088a721082007a7210941002105410121030b02402004450d002001102c0b20052003724101470d014100200820051b21044100200920051b21014108200620051b21030b200220043602102002200136020c200220033602080c010b20062802082205ad42287e2207422088a70d022007a72204417f4c0d02200628020021010240024020040d00410821060c010b200410322206450d040b20024100360210200220063602082002200441286e36020c200241086a4100200510fe05200228021021042002280208210302402005450d00200541286c21062003200441286c6a21050340200141086a2903002107200141106a290300210a200141186a290300210b2001290300210c200541206a200141206a290300370300200541186a200b370300200541106a200a370300200541086a20073703002005200c370300200541286a2105200441016a2104200141286a2101200641586a22060d000b0b200220043602100b200441286c4104722201417f4c0d01200110322205450d02200241003602502002200136024c20022005360248200241c8006a2004108f010240024020040d0020022802502105200228024821040c010b2003200441286c6a210620022802502105200321010340200241c8006a20054120102f2002280248200228025022046a22052001290000370000200541086a200141086a290000370000200541106a200141106a290000370000200541186a200141186a2900003700002002200441206a2205360250200141206a2903002107200241c8006a20054108102f20022802482204200228025022056a20073700002002200541086a22053602502006200141286a2201470d000b0b0240200228020c2201450d00200141286c450d002003102c0b200241e0006a24002005ad4220862004ad840f0b200241146a4104360200200241dc006a41023602002002420237024c20024194c7c3003602482002410436020c20024188cdc30036020820024100360224200241c4b5c8003602202002200241086a3602582002200241206a360210200241c8006a41a4c7c3001046000b103b000b1039000bdd0604037f017e087f037e230041a0026b2202240020022001108702024002402002280200450d00200041003602000c010b02400240024020022802042203200128020441286e2204200420034b1bad42287e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410322206450d020b4100210720024100360210200220063602082002200441286e36020c02402003450d0041002108034041002104200241003a00d801200841016a210820012802042109417f210a02400240034020092004460d01200241b8016a20046a2001280200220b2d00003a000020012009200a6a3602042001200b41016a3602002002200441016a220b3a00d801200a417f6a210a200b2104200b4120470d000b200241e0016a41086a2204200241b8016a41086a290300370300200241e0016a41106a220a200241b8016a41106a290300370300200241e0016a41186a220c200241b8016a41186a290300370300200220022903b8013703e001200b41ff0171411f4b0d010c060b200441ff0171450d05200241003a00d8010c050b200241f8006a41086a220d2004290300370300200241f8006a41106a2204200a290300370300200241f8006a41186a220a200c290300370300200220022903e0013703782009200b6b220b4108490d042001280200220929000021052001200b41786a3602042001200941086a360200200241386a41086a200d290300220e370300200241386a41106a2004290300220f370300200241386a41186a200a2903002210370300200241186a41186a220a2010370300200241186a41106a220b200f370300200241186a41086a2209200e37030020022002290378220e3703382002200e37031802402007200228020c470d00200241086a2007410110f20420022802102107200228020821060b2006200741286c6a220420022903183703002009290300210e200b290300210f200a290300211020042005370320200441186a2010370300200441106a200f370300200441086a200e3703002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c030b103b000b1039000b2000410036020020022802084100200228020c22041b2201450d00200441286c450d002001102c0b200241a0026a24000bd60103017f017e017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1bad42287e2204422088a722020d022004a722014100480d022002454103742105024002400240024002402000280200410020031b22020d002001450d010c030b200341286c22030d0120010d020b200521020c020b200220032001103522020d010c030b200110322202450d020b20002002360200200041046a200141286e3602000b0f0b2005450d001039000b103b000b8b0b05017f027e017f017e047f230041d0076b220224002002428080808080203702b4072002200136020c2002200041c4b5c80020011b3602082002200241086a3602b007200241f0036a200241b0076a10ab0302400240024020022903f80322034202510d0020022903f003210420024180026a20024180046a41f00110c9081a200241c0076a200241b0076a10c60420022802c0072205450d0020022902c4072106200241106a20024180026a41f00110c9081a2006a7210702400240200228020c450d00420221032007450d012005102c0c010b200241f0036a200241106a41f00110c9081a0b20034202510d00200241106a200241f0036a41f00110c9081a20024180026a200241106a41f00110c9081a20022006422088a722013602c407200220053602c0074100210820014104490d012005280000210020022001417c6a3602c4072002200541046a3602c007200241f0036a200241c0076a10840520022802f0032209450d0120022902f4032106024020022802c407220a41044f0d0002402006422088a72201450d002001410c6c21002009210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b2006a72201450d022001410c6c450d022009102c0c030b20022802c007220828000021012002200a417c6a3602c4072002200841046a3602c007200921080c020b2002411c6a410436020020024194026a4102360200200242023702840220024194c7c3003602800220024104360214200241a4cdc300360210200241003602c407200241c4b5c8003602c0072002200241106a360290022002200241c0076a36021820024180026a41a4c7c3001046000b0b02402007450d002005102c0b0240024020080d00410021010c010b200241b0056a2003370300200241a8056a2004370300200241a4056a20013602002002419c056a200637020020024198056a200836020020024194056a200036020020024190056a41023602002002410936028805200242023703d804200241b8056a20024180026a41f00110c9081a2002200241f0036a3602c007200241b0076a200241c0076a108102200241c0076a41086a200241b0076a41086a280200360200200220022903b0073703c007200241c0076a108202210120024188056a10830241002802d8d24821000240024020010d0020004103490d01200241263602b407200241fc9fc8003602b00741002802d4d248210141002802d0d248210041002802dcd2482105200241b0046a41a501360200200241a8046a42e780808010370300200241a4046a41c8a0c8003602002002419c046a421c37020020024198046a41aca0c80036020020024190046a420137030020024180046a4201370300200241f8036a411c360200200241f0036a411c6a200241c0076a360200200241b4b5c8003602fc03200241aca0c8003602f403200241033602f003200241043602c407200141e0a3c000200541024622051b28021021012002200241b0076a3602c007200041f8a3c00020051b200241f0036a20011103000c010b2000450d00200241233602c4072002200241b0076a3602c00741002802d4d248210141002802d0d248210041002802dcd2482105200241b0046a41a601360200200241a8046a42e780808010370300200241a4046a41c8a0c8003602002002419c046a421c37020020024198046a41aca0c80036020020024190046a420137030020024180046a4201370300200241f8036a411c360200200241f0036a411c6a200241c0076a360200200241a4a0c8003602fc03200241aca0c8003602f403200241013602f003200041f8a3c000200541024622051b200241f0036a200141e0a3c00020051b2802101103000b410121010b200241f0036a200110c50320023502f803210320023502f0032106200241d0076a240020062003422086840b0d00200141ffcac800410210500ba32904077f047e117f037e230041d0056b22022400024020014108490d00200241003a00e80320014108460d00200241013a00e8032002200041c4b5c80020011b22002d00083a00c803024020014109460d00200241023a00e803200220002d00093a00c9032001410a460d00200241033a00e803200220002d000a3a00ca032001410b460d00200241043a00e803200220002d000b3a00cb032001410c460d00200241053a00e803200220002d000c3a00cc032001410d460d00200241063a00e803200220002d000d3a00cd032001410e460d00200241073a00e803200220002d000e3a00ce032001410f460d00200241083a00e803200220002d000f3a00cf0320014110460d00200241093a00e803200220002d00103a00d00320014111460d002002410a3a00e803200220002d00113a00d10320014112460d002002410b3a00e803200220002d00123a00d20320014113460d002002410c3a00e803200220002d00133a00d30320014114460d002002410d3a00e803200220002d00143a00d40320014115460d002002410e3a00e803200220002d00153a00d50320014116460d002002410f3a00e803200220002d00163a00d60320014117460d00200241103a00e803200220002d00173a00d70320014118460d00200241113a00e803200220002d00183a00d80320014119460d00200241123a00e803200220002d00193a00d9032001411a460d00200241133a00e803200220002d001a3a00da032001411b460d00200241143a00e803200220002d001b3a00db032001411c460d00200241153a00e803200220002d001c3a00dc032001411d460d00200241163a00e803200220002d001d3a00dd032001411e460d00200241173a00e803200220002d001e3a00de032001411f460d00200241183a00e803200220002d001f3a00df0320014120460d00200241193a00e803200220002d00203a00e00320014121460d002002411a3a00e803200220002d00213a00e10320014122460d002002411b3a00e803200220002d00223a00e20320014123460d002002411c3a00e803200220002d00233a00e30320014124460d002002411d3a00e803200220002d00243a00e40320014125460d002002411e3a00e803200220002d00253a00e50320014126460d002002411f3a00e803200220002d00263a00e60320014127460d00200241c8006a41106a2203200241c8036a41106a2204290300370300200241c8006a41086a2205200241c8036a41086a2206290300370300200220002d00273a00e703200241c8006a41186a2207200241c8036a41186a2208290300370300200241203a00e803200220022903c80322093703a80120022009370348200241286a41186a22002007290300370300200241286a41106a22072003290300370300200241286a41086a220320052903003703002002200229034837032820014128470d0120082000290300220937030020042007290300220a37030020062003290300220b37030020022002290328220c3703c803200241086a41186a2009370300200241086a41106a200a370300200241086a41086a200b3703002002200c37030820024188016a41186a200937030020024188016a41106a200a37030020024188016a41086a200b3703002002200c3703880120004200370300200742003703002003420037030020024200370328200241c8036a41ffdcc700410710c50120032006290000370300200220022900c803370328200241c8036a41b8b3c300410c10c50120002006290000370300200720022900c8033703002002200241286a412010c6012002280204210d2002280200210e20004200370300200742003703002003420037030020024200370328200241c8036a41ffdcc700410710c50120032006290000370300200220022900c803370328200241c8036a418893c700410a10c50120002006290000370300200720022900c803370300200241c8036a200241286a10e10120022802c8032201410120011b210f20022902cc03420020011b2209a7211002400240024002402009422088a72201450d00200f200141057422086a2111200241c4056a2112200241c8036a41206a2100200f2101034020024180056a41186a2206200141186a220729000037030020024180056a41106a2204200141106a220329000037030020024180056a41086a2205200141086a22132900003703002002200129000037038005201329000021092003290000210a2001290000210b200241c8006a41186a22132007290000370300200241c8006a41106a2214200a370300200241c8006a41086a221520093703002002200b370348200241c8036a41186a22072006290300370300200241c8036a41106a22032004290300370300200241c8036a41086a2204200529030037030020022002290380053703c803200241a0056a200241c8036a10a304200241286a41186a22052013290300370300200241286a41106a22132014290300370300200241286a41086a22142015290300370300200220022903483703280240024020022802c00522060d00410021060c010b200020022903a005370300200041186a200241a0056a41186a290300370300200041106a200241a0056a41106a290300370300200041086a200241a0056a41086a290300370300200720052903003703002003201329030037030020042014290300370300200241f0046a41086a201241086a280200360200200220022903283703c803200220122902003703f004200241a8016a41386a200241c8036a41386a290300370300200241a8016a41306a200241c8036a41306a290300370300200241a8016a41286a200241c8036a41286a290300370300200241a8016a41206a2000290300370300200241a8016a41186a2007290300370300200241a8016a41106a2003290300370300200241a8016a41086a2004290300370300200220022903c8033703a8010b20060d02200141206a2101200841606a22080d000b0b4108210102402010450d00201041ffffff3f71450d00200f102c0b41002116410021000c010b20024198026a41386a2200200241a8016a41386a29030037030020024198026a41306a2207200241a8016a41306a29030037030020024198026a41286a2203200241a8016a41286a29030037030020024198026a41206a2204200241a8016a41206a29030037030020024198026a41186a2205200241a8016a41186a29030037030020024198026a41106a2213200241a8016a41106a29030037030020024198026a41086a2214200241a8016a41086a290300370300200241d0046a41086a2215200241f0046a41086a280200360200200220022903a80137039802200220022903f0043703d004200241f0026a41086a22122014290300370300200241f0026a41106a22142013290300370300200241f0026a41186a22132005290300370300200241f0026a41206a22052004290300370300200241f0026a41286a22042003290300370300200241f0026a41306a22032007290300370300200241f0026a41386a22072000290300370300200241e0046a41086a2200201528020036020020022002290398023703f002200220022903d0043703e00441d00010322217450d01201720022903f00237030020172006360240201720022903e004370244201741386a2007290300370300201741306a2003290300370300201741286a2004290300370300201741206a2005290300370300201741186a2013290300370300201741106a2014290300370300201741086a2012290300370300201741cc006a200028020036020020024281808080103702c404200220173602c0040240024020084120470d00410121160c010b200141206a2105201141606a2118200241c4056a2112200241c8036a41206a210041012116034020052101034020024180056a41186a2206200141186a220729000037030020024180056a41106a2204200141106a220329000037030020024180056a41086a2208200141086a22052900003703002002200129000037038005200241c8006a41186a22132007290000370300200241c8006a41106a22142003290000370300200241c8006a41086a2215200529000037030020022001290000370348200241c8036a41186a22072006290300370300200241c8036a41106a22032004290300370300200241c8036a41086a2204200829030037030020022002290380053703c803200241a0056a200241c8036a10a304200241286a41186a22082013290300370300200241286a41106a22052014290300370300200241286a41086a22132015290300370300200220022903483703280240024020022802c00522060d00410021060c010b200020022903a005370300200041186a200241a0056a41186a290300370300200041106a200241a0056a41106a290300370300200041086a200241a0056a41086a290300370300200720082903003703002003200529030037030020042013290300370300200241f0046a41086a201241086a280200360200200220022903283703c803200220122902003703f004200241a8016a41386a200241c8036a41386a290300370300200241a8016a41306a200241c8036a41306a290300370300200241a8016a41286a200241c8036a41286a290300370300200241a8016a41206a2000290300370300200241a8016a41186a2007290300370300200241a8016a41106a2003290300370300200241a8016a41086a2004290300370300200220022903c8033703a8010b024020060d002011200141206a2201470d010c030b0b20024198026a41386a2208200241a8016a41386a29030037030020024198026a41306a2205200241a8016a41306a29030037030020024198026a41286a2214200241a8016a41286a29030037030020024198026a41206a2215200241a8016a41206a29030037030020024198026a41186a2219200241a8016a41186a29030037030020024198026a41106a221a200241a8016a41106a29030037030020024198026a41086a221b200241a8016a41086a2213290300370300200241d0046a41086a221c200241f0046a41086a280200360200200220022903a80137039802200220022903f0043703d004200241f0026a41086a221d201b290300370300200241f0026a41106a221b201a290300370300200241f0026a41186a221a2019290300370300200241f0026a41206a22192015290300370300200241f0026a41286a22152014290300370300200241f0026a41306a22142005290300370300200241f0026a41386a22052008290300370300200241e0046a41086a2208201c28020036020020022002290398023703f002200220022903d0043703e0042004201d2903003703002003201b2903003703002007201a29030037030020002019290300370300200241c8036a41286a22192015290300370300200241c8036a41306a22152014290300370300200241c8036a41386a22142005290300370300200220022903f0023703c80320132008280200360200200220022903e0043703a8010240201620022802c404470d00200241c0046a2016410110d60420022802c00421170b200141206a21052017201641d0006c6a220820022903c803370300200329030021092007290300210a2000290300210b2019290300210c2015290300211e2014290300211f2004290300212020082006360240200841086a2020370300200820022903a801370244200841cc006a2013280200360200200841386a201f370300200841306a201e370300200841286a200c370300200841206a200b370300200841186a200a370300200841106a20093703002002201641016a22163602c80420182001470d000b0b02402010450d00201041ffffff3f71450d00200f102c0b20022802c404210020022802c00421010b200220163602a805200220003602a405200220013602a005200241c8036a200241a0056a10db0441002101024020022802c8034101460d0020024180056a41106a200241e0036a28020036020020024180056a41086a200241c8036a41106a2903003703002002200241c8036a41086a29030037038005200241e4036a2802002101200241f0026a200241e8036a41d80010c9081a0b200241a0056a41086a220020024180056a41086a290300370300200241a0056a41106a220620024180056a41106a28020036020020022002290380053703a005200241c8036a200241f0026a41d80010c9081a0240024002402001450d00200241a8016a41106a2006280200360200200241a8016a41086a2000290300370300200220022903a0053703a80120024198026a200241c8036a41d80010c9081a200241bc016a2001360200200241a8016a41186a20024198026a41d80010c9081a200241c8036a41186a20024188016a41186a290300370300200241c8036a41106a20024188016a41106a290300370300200241c8036a41086a20024188016a41086a29030037030020022002290388013703c803200241f0026a200241a8016a41e7e485f306200241c8036a10820620022902f402210920022802f0022106200241a8016a10dd0420060d010b41002101200241003602a8010c010b200241d0036a2009370300200220163602d803200220063602cc032002200d4100200e1b3602c803200241a8016a200241c8036a10ba012009a7210702402009422088a72201450d002001410c6c21002006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b02402007450d002007410c6c450d002006102c0b024020022802a80122010d00410021010c010b200241b0016a280200210320022802ac0121040b410110322200450d00200242013702cc03200220003602c803200241c8036a41004101102f20022802c803220020022802d00322066a21070240024020010d00200741003a0000200641016a21060c010b200741013a00002002200641016a3602d00320012003200241c8036a10bb0120022802d003210620022802c80321002001450d002004450d002001102c0b200241d0056a24002006ad4220862000ad840f0b1039000b200241003a00e8030b200241b4016a4104360200200241dc036a4102360200200242023702cc0320024194c7c3003602c803200241043602ac01200241dccdc3003602a801200241003602f402200241c4b5c8003602f0022002200241a8016a3602d8032002200241f0026a3602b001200241c8036a41a4c7c3001046000bce0e03037f017e047f230041e0016b220424000240024002400240024002400240024002400240200141d0006a22052001412c6a412010cc08450d00200441d0006a41186a200541186a290000370300200441d0006a41106a200541106a290000370300200441d0006a41086a200541086a2900003703002004200529000037035002402001200441d0006a1092072206450d00200628020c41004a0d010b200441206a41086a2201200541086a290000370300200441206a41106a2202200541106a290000370300200441206a41186a2203200541186a29000037030020042005290000370320413010322205450d01200541003a00002005200429032037000120052004290050370021200541096a2001290300370000200541116a2002290300370000200541196a2003290300370000200541286a200441d7006a2900003700000240024020052d00000e040a0a000a010b20052802082201450d0920052802042202450d092001450d092002102c0c090b20052802282201450d0820052802242202450d082001450d082002102c0c080b2004410036020c20042005360208200441f0ecc400360204200420013602002004420037031820044204370310412410322205450d00200442243702a401200420053602a001200441a0016a41004104102f20042802a00120042802a80122056a20023600002004200541046a3602a80120034120200441a0016a10ca04200441d0006a200420042802a001220120042802a801200441106a10950702400240024020042802504101460d0020042802542203450d0102400240200441d8006a2903002207422088a741044f0d00410021050c010b20032800002102410121050b2007a7450d022003102c0c020b024002400240200428025422052d00000e0402020002010b200541086a2802002202450d01200541046a2802002203450d012002450d012003102c0c010b200541286a2802002202450d00200541246a2802002203450d002002450d002003102c0b2005102c0b410021050b024020042802a401450d002001102c0b02402005450d0020042002360244200441d0006a2004200441c4006a4104200441106a109507024020042802504101460d0020042802542203450d05200441d8006a29030021072004200336024820042007422088a7220636024c41002105200441003a00702006417f6a210102400240034020062005460d01200441d0006a20056a200320056a22022d00003a00002004200241016a3602482004200541016a22023a00702004200136024c2001417f6a21012002210520024120470d000b200441a0016a41086a2205200441d0006a41086a290300370300200441a0016a41106a2201200441d0006a41106a290300370300200441a0016a41186a2206200441d0006a41186a290300370300200420042903503703a001200241ff0171411f4b0d010c050b200541ff0171450d04200441003a0070410021050c050b200441206a41086a2005290300370300200441206a41106a2001290300370300200441206a41186a2006290300370300200420042903a001370320200441d0006a200441c8006a10f60320042802702205450d03200441f4006a28020021010c040b024002400240200428025422052d00000e0402020002010b200541086a2802002201450d01200541046a2802002202450d012001450d012002102c0c010b200541286a2802002201450d00200541246a2802002202450d002001450d002002102c0b2005102c0c040b200041003602000c040b1039000b410021050b02402007a7450d002003102c0b2005450d0002402001450d00200141306c450d002005102c0b20004204370200200041086a220841003602002004280218210520044100360218200428021421092004280210210a2004420437031020004100200541306c220141306d220310ec012008280200210220050d02200a21050c030b200041003602000b20042802102102024020042802182205450d00200541306c2101200241046a210503400240200541046a280200450d002005280200102c0b200541306a2105200141506a22010d000b0b20042802142205450d03200541306c450d032002102c0c030b200a20016a210b200541306c2103200a41306a210520002802002002410c6c6a210102400340200541546a2802002206450d01200141046a200541586a290200370200200120063602002001410c6a2101200541306a2105200241016a2102200341506a22030d000b200b21050b200b20056b220141306d21030b2008200236020002402001450d00200341306c2101200541046a210503400240200541046a280200450d002005280200102c0b200541306a2105200141506a22010d000b0b0240200a410020091b2205450d00200941306c450d002005102c0b024020042802182205450d00200541306c21014108210503400240200541046a280200450d002005280200102c0b200541306a2105200141506a22010d000b0b20042802142205450d01200541306c450d014104102c0c010b2005102c200041003602000b200441e0016a24000bf90804057f017e037f027e230041c0016b22022400024020010d00200241a0016a41186a22034200370300200241a0016a41106a22044200370300200241a0016a41086a22054200370300200242003703a001200241f8006a41c7dcc700410410c5012005200241f8006a41086a2201290000370300200220022900783703a001200241f8006a41f0d5c500410b10c5012003200129000037030020042002290078370300200241086a200241a0016a10f10420022802082106200229020c2107200241086a41186a22084200370300200241086a41106a22094200370300200241086a41086a220a420037030020024200370308200241f8006a41c7dcc700410410c501200a200129000037030020022002290078370308200241f8006a418cd7c500410a10c5012008200129000037030020092002290078370300200241f8006a200241086a10860520022d00782101200320024191016a290000370300200420024189016a290000370300200520024181016a290000370300200220022900793703a0012007420020061b21072006410820061b21060240024020014101460d00200241d8006a41186a4200370300200241d8006a41106a4200370300200241d8006a41086a4200370300200242003703580c010b200241d8006a41186a2003290300370300200241d8006a41106a2004290300370300200241d8006a41086a2005290300370300200220022903a0013703580b2002412c6a2007370200200241086a41186a42043703002002413c6a2203200241d8006a41086a290300370200200241c4006a2204200241d8006a41106a290300370200200241cc006a2205200241d8006a41186a2903003702002002200636022820024201370318200242d804370310200242f02e37030820022002290358370234200241013a0054200241003602800120024201370378200241f8006a41004108102f200228027820022802800122016a42f02e3700002002200141086a220136028001200241f8006a20014108102f200228027820022802800122016a42d8043700002002200141086a220136028001200241f8006a20014108102f200228027820022802800122016a42013700002002200141086a220136028001200241f8006a20014108102f200228027820022802800122016a42043700002002200141086a36028001200241f8006a200241086a41206a1030200241f8006a2002280280014120102f200228027820022802800122086a22012002290234370000200141086a2003290200370000200141106a2004290200370000200141186a20052902003700002002200841206a36028001200241f8006a41011031200235028001210b2002350278210c02402007a72201450d00200141286c450d002006102c0b200241c0016a2400200b422086200c840f0b20024184016a41043602002002411c6a41023602002002420237020c20024194c7c3003602082002410436027c20024180cec300360278200241003602a401200241c4b5c8003602a0012002200241f8006a3602182002200241a0016a36028001200241086a41a4c7c3001046000b820402047f047e230041e0006b220224000240024020010d00200241c8006a22014200370300200241c0006a22034200370300200241306a41086a2204420037030020024200370330200241d0006a41c7dcc700410410c5012004200241d0006a41086a220529000037030020022002290050370330200241d0006a41ccd5c500410a10c5012001200529000037030020032002290050370300200241186a200241306a10cf02200229032021062002290318210720014200370300200342003703002004420037030020024200370330200241d0006a41c7dcc700410410c5012004200529000037030020022002290050370330200241d0006a41bcd6c500410b10c5012001200529000037030020032002290050370300200241086a200241306a10cf022002290310210820022903082109410810322201450d012002420837023420022001360230200241306a41004108102f20022802302201200228023822036a200842002009a71b200642d8047e42002007a71b7c370000200241e0006a2400200341086aad4220862001ad840f0b200241dc006a4104360200200241c4006a41023602002002420237023420024194c7c3003602302002410436025420024198cec3003602502002410036022c200241c4b5c8003602282002200241d0006a3602402002200241286a360258200241306a41a4c7c3001046000b1039000ba32904077f047e117f037e230041d0056b22022400024020014108490d00200241003a00e80320014108460d00200241013a00e8032002200041c4b5c80020011b22002d00083a00c803024020014109460d00200241023a00e803200220002d00093a00c9032001410a460d00200241033a00e803200220002d000a3a00ca032001410b460d00200241043a00e803200220002d000b3a00cb032001410c460d00200241053a00e803200220002d000c3a00cc032001410d460d00200241063a00e803200220002d000d3a00cd032001410e460d00200241073a00e803200220002d000e3a00ce032001410f460d00200241083a00e803200220002d000f3a00cf0320014110460d00200241093a00e803200220002d00103a00d00320014111460d002002410a3a00e803200220002d00113a00d10320014112460d002002410b3a00e803200220002d00123a00d20320014113460d002002410c3a00e803200220002d00133a00d30320014114460d002002410d3a00e803200220002d00143a00d40320014115460d002002410e3a00e803200220002d00153a00d50320014116460d002002410f3a00e803200220002d00163a00d60320014117460d00200241103a00e803200220002d00173a00d70320014118460d00200241113a00e803200220002d00183a00d80320014119460d00200241123a00e803200220002d00193a00d9032001411a460d00200241133a00e803200220002d001a3a00da032001411b460d00200241143a00e803200220002d001b3a00db032001411c460d00200241153a00e803200220002d001c3a00dc032001411d460d00200241163a00e803200220002d001d3a00dd032001411e460d00200241173a00e803200220002d001e3a00de032001411f460d00200241183a00e803200220002d001f3a00df0320014120460d00200241193a00e803200220002d00203a00e00320014121460d002002411a3a00e803200220002d00213a00e10320014122460d002002411b3a00e803200220002d00223a00e20320014123460d002002411c3a00e803200220002d00233a00e30320014124460d002002411d3a00e803200220002d00243a00e40320014125460d002002411e3a00e803200220002d00253a00e50320014126460d002002411f3a00e803200220002d00263a00e60320014127460d00200241c8006a41106a2203200241c8036a41106a2204290300370300200241c8006a41086a2205200241c8036a41086a2206290300370300200220002d00273a00e703200241c8006a41186a2207200241c8036a41186a2208290300370300200241203a00e803200220022903c80322093703a80120022009370348200241286a41186a22002007290300370300200241286a41106a22072003290300370300200241286a41086a220320052903003703002002200229034837032820014128470d0120082000290300220937030020042007290300220a37030020062003290300220b37030020022002290328220c3703c803200241086a41186a2009370300200241086a41106a200a370300200241086a41086a200b3703002002200c37030820024188016a41186a200937030020024188016a41106a200a37030020024188016a41086a200b3703002002200c3703880120004200370300200742003703002003420037030020024200370328200241c8036a41ffdcc700410710c50120032006290000370300200220022900c803370328200241c8036a41b8b3c300410c10c50120002006290000370300200720022900c8033703002002200241286a412010c6012002280204210d2002280200210e20004200370300200742003703002003420037030020024200370328200241c8036a41ffdcc700410710c50120032006290000370300200220022900c803370328200241c8036a418893c700410a10c50120002006290000370300200720022900c803370300200241c8036a200241286a10e10120022802c8032201410120011b210f20022902cc03420020011b2209a7211002400240024002402009422088a72201450d00200f200141057422086a2111200241c4056a2112200241c8036a41206a2100200f2101034020024180056a41186a2206200141186a220729000037030020024180056a41106a2204200141106a220329000037030020024180056a41086a2205200141086a22132900003703002002200129000037038005201329000021092003290000210a2001290000210b200241c8006a41186a22132007290000370300200241c8006a41106a2214200a370300200241c8006a41086a221520093703002002200b370348200241c8036a41186a22072006290300370300200241c8036a41106a22032004290300370300200241c8036a41086a2204200529030037030020022002290380053703c803200241a0056a200241c8036a10a304200241286a41186a22052013290300370300200241286a41106a22132014290300370300200241286a41086a22142015290300370300200220022903483703280240024020022802c00522060d00410021060c010b200020022903a005370300200041186a200241a0056a41186a290300370300200041106a200241a0056a41106a290300370300200041086a200241a0056a41086a290300370300200720052903003703002003201329030037030020042014290300370300200241f0046a41086a201241086a280200360200200220022903283703c803200220122902003703f004200241a8016a41386a200241c8036a41386a290300370300200241a8016a41306a200241c8036a41306a290300370300200241a8016a41286a200241c8036a41286a290300370300200241a8016a41206a2000290300370300200241a8016a41186a2007290300370300200241a8016a41106a2003290300370300200241a8016a41086a2004290300370300200220022903c8033703a8010b20060d02200141206a2101200841606a22080d000b0b4108210102402010450d00201041ffffff3f71450d00200f102c0b41002116410021000c010b20024198026a41386a2200200241a8016a41386a29030037030020024198026a41306a2207200241a8016a41306a29030037030020024198026a41286a2203200241a8016a41286a29030037030020024198026a41206a2204200241a8016a41206a29030037030020024198026a41186a2205200241a8016a41186a29030037030020024198026a41106a2213200241a8016a41106a29030037030020024198026a41086a2214200241a8016a41086a290300370300200241d0046a41086a2215200241f0046a41086a280200360200200220022903a80137039802200220022903f0043703d004200241f0026a41086a22122014290300370300200241f0026a41106a22142013290300370300200241f0026a41186a22132005290300370300200241f0026a41206a22052004290300370300200241f0026a41286a22042003290300370300200241f0026a41306a22032007290300370300200241f0026a41386a22072000290300370300200241e0046a41086a2200201528020036020020022002290398023703f002200220022903d0043703e00441d00010322217450d01201720022903f00237030020172006360240201720022903e004370244201741386a2007290300370300201741306a2003290300370300201741286a2004290300370300201741206a2005290300370300201741186a2013290300370300201741106a2014290300370300201741086a2012290300370300201741cc006a200028020036020020024281808080103702c404200220173602c0040240024020084120470d00410121160c010b200141206a2105201141606a2118200241c4056a2112200241c8036a41206a210041012116034020052101034020024180056a41186a2206200141186a220729000037030020024180056a41106a2204200141106a220329000037030020024180056a41086a2208200141086a22052900003703002002200129000037038005200241c8006a41186a22132007290000370300200241c8006a41106a22142003290000370300200241c8006a41086a2215200529000037030020022001290000370348200241c8036a41186a22072006290300370300200241c8036a41106a22032004290300370300200241c8036a41086a2204200829030037030020022002290380053703c803200241a0056a200241c8036a10a304200241286a41186a22082013290300370300200241286a41106a22052014290300370300200241286a41086a22132015290300370300200220022903483703280240024020022802c00522060d00410021060c010b200020022903a005370300200041186a200241a0056a41186a290300370300200041106a200241a0056a41106a290300370300200041086a200241a0056a41086a290300370300200720082903003703002003200529030037030020042013290300370300200241f0046a41086a201241086a280200360200200220022903283703c803200220122902003703f004200241a8016a41386a200241c8036a41386a290300370300200241a8016a41306a200241c8036a41306a290300370300200241a8016a41286a200241c8036a41286a290300370300200241a8016a41206a2000290300370300200241a8016a41186a2007290300370300200241a8016a41106a2003290300370300200241a8016a41086a2004290300370300200220022903c8033703a8010b024020060d002011200141206a2201470d010c030b0b20024198026a41386a2208200241a8016a41386a29030037030020024198026a41306a2205200241a8016a41306a29030037030020024198026a41286a2214200241a8016a41286a29030037030020024198026a41206a2215200241a8016a41206a29030037030020024198026a41186a2219200241a8016a41186a29030037030020024198026a41106a221a200241a8016a41106a29030037030020024198026a41086a221b200241a8016a41086a2213290300370300200241d0046a41086a221c200241f0046a41086a280200360200200220022903a80137039802200220022903f0043703d004200241f0026a41086a221d201b290300370300200241f0026a41106a221b201a290300370300200241f0026a41186a221a2019290300370300200241f0026a41206a22192015290300370300200241f0026a41286a22152014290300370300200241f0026a41306a22142005290300370300200241f0026a41386a22052008290300370300200241e0046a41086a2208201c28020036020020022002290398023703f002200220022903d0043703e0042004201d2903003703002003201b2903003703002007201a29030037030020002019290300370300200241c8036a41286a22192015290300370300200241c8036a41306a22152014290300370300200241c8036a41386a22142005290300370300200220022903f0023703c80320132008280200360200200220022903e0043703a8010240201620022802c404470d00200241c0046a2016410110d60420022802c00421170b200141206a21052017201641d0006c6a220820022903c803370300200329030021092007290300210a2000290300210b2019290300210c2015290300211e2014290300211f2004290300212020082006360240200841086a2020370300200820022903a801370244200841cc006a2013280200360200200841386a201f370300200841306a201e370300200841286a200c370300200841206a200b370300200841186a200a370300200841106a20093703002002201641016a22163602c80420182001470d000b0b02402010450d00201041ffffff3f71450d00200f102c0b20022802c404210020022802c00421010b200220163602a805200220003602a405200220013602a005200241c8036a200241a0056a10db0441002101024020022802c8034101460d0020024180056a41106a200241e0036a28020036020020024180056a41086a200241c8036a41106a2903003703002002200241c8036a41086a29030037038005200241e4036a2802002101200241f0026a200241e8036a41d80010c9081a0b200241a0056a41086a220020024180056a41086a290300370300200241a0056a41106a220620024180056a41106a28020036020020022002290380053703a005200241c8036a200241f0026a41d80010c9081a0240024002402001450d00200241a8016a41106a2006280200360200200241a8016a41086a2000290300370300200220022903a0053703a80120024198026a200241c8036a41d80010c9081a200241bc016a2001360200200241a8016a41186a20024198026a41d80010c9081a200241c8036a41186a20024188016a41186a290300370300200241c8036a41106a20024188016a41106a290300370300200241c8036a41086a20024188016a41086a29030037030020022002290388013703c803200241f0026a200241a8016a41e2c289ab06200241c8036a10820620022902f402210920022802f0022106200241a8016a10dd0420060d010b41002101200241003602a8010c010b200241d0036a2009370300200220163602d803200220063602cc032002200d4100200e1b3602c803200241a8016a200241c8036a10ba012009a7210702402009422088a72201450d002001410c6c21002006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b02402007450d002007410c6c450d002006102c0b024020022802a80122010d00410021010c010b200241b0016a280200210320022802ac0121040b410110322200450d00200242013702cc03200220003602c803200241c8036a41004101102f20022802c803220020022802d00322066a21070240024020010d00200741003a0000200641016a21060c010b200741013a00002002200641016a3602d00320012003200241c8036a10bb0120022802d003210620022802c80321002001450d002004450d002001102c0b200241d0056a24002006ad4220862000ad840f0b1039000b200241003a00e8030b200241b4016a4104360200200241dc036a4102360200200242023702cc0320024194c7c3003602c803200241043602ac01200241dccdc3003602a801200241003602f402200241c4b5c8003602f0022002200241a8016a3602d8032002200241f0026a3602b001200241c8036a41a4c7c3001046000b960d03027f027e057f230041f00b6b2202240020024280808080802037020c2002200136021c2002200041c4b5c80020011b3602182002200241186a36020820024198066a200241086a108706024002400240200241a4066a280200450d0020024190046a20024198066a41880210c9081a200241a0086a200241086a10c60420022802a00822030d012002419c046a102b2002418c056a102b0b200241206a20024198026a41f80110c9081a0c010b20022902a408210420024190046a410c6a28020021012002290390042105200228029804210020024198026a20024190046a41106a41f80110c9081a200241206a20024198026a41f80110c9081a2001450d00200241b0086a410c6a22062001360200200220003602b808200220053703b008200241b0086a41106a200241206a41f80110c9082100200241bc0a6a2004370200200220033602b80a2004a72107024002402002280208280204450d002006102b200241ac096a102b410021012007450d012003102c0c010b20024198026a41086a200241b0086a41086a280200360200200220022903b0083703980220024198066a200041f80110c9081a0b2001450d00200241a0086a41086a220020024198026a41086a28020036020020022002290398023703a00820024190046a20024198066a41f80110c9081a20024198066a41086a2000280200360200200241a4066a22082001360200200220022903a00837039806200241a8066a20024190046a41f80110c9081a200220033602980220022004422088a7220136029c02410021060240024020014104490d002003280000210020022001417c6a36029c022002200341046a36029802200241b0086a20024198026a10840520022802b0082209450d0020022902b40821040240200228029c02220a41044f0d0002402004422088a72201450d002001410c6c21002009210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b2004a72201450d012001410c6c450d012009102c0c020b200228029802220628000021012002200a417c6a36029c022002200641046a36029802200921060c010b0b02402007450d002003102c0b024002402006450d00200241e4096a2001360200200241dc096a2004370200200241d8096a2006360200200241d4096a2000360200200241d0096a4102360200200241013602c8092002420237039809200241e8096a20024198066a41880210c9081a2002200241b0086a36029802200241206a20024198026a10810220024198026a41086a200241206a41086a280200360200200220022903203703980220024198026a1082022101200241c8096a10830241002802d8d24821000240024020010d0020004103490d0120024123360224200241dc9ec80036022041002802d4d248210141002802d0d248210041002802dcd2482103200241f0086a419801360200200241e8086a42e480808010370300200241e4086a41989fc800360200200241dc086a4219370200200241d8086a41ff9ec800360200200241d0086a4201370300200241c0086a4201370300200241b8086a4119360200200241cc086a20024198026a360200200241b4b5c8003602bc08200241ff9ec8003602b408200241033602b0082002410436029c02200141e0a3c000200341024622031b28021021012002200241206a36029802200041f8a3c00020031b200241b0086a2001110300410121010c030b2000450d002002412336029c022002200241206a3602980241002802d4d248210141002802d0d248210041002802dcd2482103200241f0086a419901360200200241e8086a42e480808010370300200241e4086a41989fc800360200200241dc086a4219370200200241d8086a41ff9ec800360200200241d0086a4201370300200241c0086a4201370300200241b8086a4119360200200241cc086a20024198026a360200200241a4a0c8003602bc08200241ff9ec8003602b408200241013602b008200041f8a3c000200341024622031b200241b0086a200141e0a3c00020031b2802101103000b410121010c010b2008102b20024194076a102b410021010b200241b0086a200110c50320023502b808210420023502b0082105200241f00b6a240020052004422086840f0b2002419c046a4104360200200241c4086a4102360200200242023702b40820024194c7c3003602b0082002410436029404200241a4cdc3003602900420024100360224200241c4b5c800360220200220024190046a3602c0082002200241206a36029804200241b0086a41a4c7c3001046000beb0402057f017e230041c0046b2202240041002103200241003a00b003024002400240024002400340200128020022042802042205450d0120024190036a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a00b00320034120470d000b200241a0026a41186a20024190036a41186a290300220737030020024180026a41086a20024190036a41086a29030037030020024180026a41106a20024190036a41106a29030037030020024180026a41186a20073703002002200229039003370380022001280200220328020422044108490d022003280200220529000021072003200441786a3602042003200541086a36020020024190036a200110ab05200228029403450d03200241a0026a20024190036a41f00010c9081a20024190036a200110ab05200228029403450d01200241206a20024190036a41f00010c9081a200241086a220320024180026a41086a290300370300200241106a220420024180026a41106a290300370300200241186a220520024180026a41186a290300370300200220022903800237030020024190016a200241a0026a41f00010c9081a20002007370300200041086a20024190016a41f00010c9081a200041f8006a200241206a41f00010c9081a20004180026a2005290300370300200041f8016a2004290300370300200041f0016a2003290300370300200041e8016a20022903003703000c040b0240200341ff0171450d00200241003a00b0030b2000410036020c0c030b2000410036020c200241a0026a410472102b0c020b2000410036020c0c010b2000410036020c0b200241c0046a24000b900301067f230041306b2202240002400240024020010d00200241186a108906200228022022014105744104722203417f4c0d0120022802182104200310322205450d0220024100360208200220033602042002200536020020022001108f010240024020010d0020022802082103200228020021060c010b2001410574210520022802082103200421010340200220034120102f20022802002206200228020822076a22032001290000370000200341086a200141086a290000370000200341106a200141106a290000370000200341186a200141186a2900003700002002200741206a2203360208200141206a2101200541606a22050d000b0b0240200228021c41ffffff3f71450d002004102c0b200241306a24002003ad4220862006ad840f0b200241246a4104360200200241146a41023602002002420237020420024194c7c3003602002002410436021c200241b4cec3003602182002410036022c200241c4b5c8003602282002200241186a3602102002200241286a360220200241a4c7c3001046000b103b000b1039000bb40302047f017e23004180016b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a4195ddc700411210c501200141e8006a41a7edc300410410c5012002200141e8006a41086a290000370300200320012900683703002001412036022c2001200141086a360228200141306a200141086a412010b30102400240200128023022030d00410021020c010b200128023421042001200141306a41086a28020036024420012003360240200141e8006a200141c0006a10800502400240200128026822020d004100210220014100360250200142013703482001410f36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141b4bcc3003602682001200141d8006a360278200141e4006a41dcb7c000200141e8006a103e1a200135025042208620013502488410000240200128024c450d002001280248102c0b0c010b200129026c21050b2004450d002003102c0b0240024020020d0020004100360208200042013702000c010b20002005370204200020023602000b20014180016a24000bd51304017f017e137f017e230041a0036b220224002002428080808080203702e402200220013602c4022002200041c4b5c80020011b22003602c0022002200241c0026a3602e00202402001450d0020022001417f6a22013602c4022002200041016a3602c00202400240024020002d00000e020100030b2002200241e0026a10c60420022802002200450d022002290204210320022802c402450d012003a7450d022000102c0c020b20010d01410021000b024002400240024020000d0041002101200241003602e0020c010b2003422088a72201417f4c0d010240024020010d00410121040c010b200110322204450d030b200241e8026a22054100360200200220013602e402200220043602e002200241e0026a4100200110c80120022802e002200528020022046a2000200110c9081a2005200420016a360200200021010b200241086a200241e0026a41086a280200360200200220022903e002370300200241c0016a41e7e485f3062002108b060240024020000d00200241003602e0020c010b2003422088a72200417f4c0d010240024020000d00410121040c010b200010322204450d030b200241e8026a22054100360200200220003602e402200220043602e002200241e0026a4100200010c80120022802e002200528020022046a2001200010c9081a2005200420006a3602000b200241086a200241e0026a41086a280200360200200220022903e002370300200241e0016a41e2c289ab062002108c060240024020010d0041002100200241003602e0020c010b2003422088a72200417f4c0d010240024020000d00410121040c010b200010322204450d030b200241e8026a22054100360200200220003602e402200220043602e002200241e0026a4100200010c80120022802e002200528020022046a2001200010c9081a2005200420006a360200200121000b200241086a200241e0026a41086a280200360200200220022903e00237030020024180026a41e9dabdf3062002108c060240024020010d00200241003602e0020c010b2003422088a72201417f4c0d010240024020010d00410121040c010b200110322204450d030b200241e8026a22054100360200200220013602e402200220043602e002200241e0026a4100200110c80120022802e002200528020022046a2000200110c9081a2005200420016a3602000b200241086a200241e0026a41086a280200360200200220022903e002370300200241a0026a41f0c2c98b062002108c060240024020000d0041002105200241003602e0020c010b2003422088a72201417f4c0d010240024020010d00410121040c010b200110322204450d030b200241e8026a22054100360200200220013602e402200220043602e002200241e0026a4100200110c80120022802e002200528020022046a2000200110c9081a2005200420016a360200200021050b200241086a200241e0026a41086a280200360200200220022903e002370300200241c0026a41e1e69df3062002108c060240024020000d0020024100360280030c010b2003422088a72201417f4c0d010240024020010d00410121040c010b200110322204450d030b20024188036a220041003602002002200136028403200220043602800320024180036a4100200110c801200228028003200028020022046a2005200110c9081a2000200420016a3602000b20024190036a41086a20024180036a41086a280200360200200220022903800337039003200241e0026a41e1ea91cb0620024190036a108c06200241086a2200200241c0016a41086a290300370300200241106a2204200241c0016a41106a290300370300200241186a2206200241c0016a41186a290300370300200241286a2207200241e0016a41086a290300370300200241306a2208200241e0016a41106a290300370300200241386a2209200241e0016a41186a290300370300200241d8006a220a20024180026a41186a290300370300200241d0006a220b20024180026a41106a290300370300200241c8006a220c20024180026a41086a290300370300200220022903c001370300200220022903e0013703202002200229038002370340200241f8006a220d200241a0026a41186a290300370300200241f0006a220e200241a0026a41106a290300370300200241e8006a220f200241a0026a41086a29030037030020024188016a2210200241c0026a41086a29030037030020024190016a2211200241c0026a41106a29030037030020024198016a2212200241c0026a41186a290300370300200241a8016a2213200241e0026a41086a290300370300200241b0016a2214200241e0026a41106a290300370300200241b8016a2215200241e0026a41186a290300370300200220022903a002370360200220022903c00237038001200220022903e0023703a0012002420137039003200241003602980320024190036a41004120102f20022802900320022802980322166a22012002290300370000200141086a2000290300370000200141106a2004290300370000200141186a20062903003700002002201641206a22013602980320024190036a20014120102f20022802900320022802980322006a22012002290320370000200141086a2007290300370000200141106a2008290300370000200141186a20092903003700002002200041206a22013602980320024190036a20014120102f20022802900320022802980322006a22012002290340370000200141086a200c290300370000200141106a200b290300370000200141186a200a2903003700002002200041206a22013602980320024190036a20014120102f20022802900320022802980322006a22012002290360370000200141086a200f290300370000200141106a200e290300370000200141186a200d2903003700002002200041206a22013602980320024190036a20014120102f20022802900320022802980322006a2201200229038001370000200141086a2010290300370000200141106a2011290300370000200141186a20122903003700002002200041206a22013602980320024190036a20014120102f200228029003220420022802980322006a220120022903a001370000200141086a2013290300370000200141106a2014290300370000200141186a20152903003700002002200041206a3602980302402005450d002003a7450d002005102c0b200220024190036a109b0220023502082103200235020021170240200228029403450d002004102c0b200241a0036a240020034220862017840f0b103b000b1039000b200241ec026a4104360200200241146a41023602002002420237020420024194c7c300360200200241043602e402200241c8cec3003602e002200241003602c402200241c4b5c8003602c0022002200241e0026a3602102002200241c0026a3602e802200241a4c7c3001046000bff0101067f230041c0006b2203240020032001360204200341086a200210b008200341206a41186a2204200341046a200341086a41106a200341086a41086a2205200328020822064101461b2903001007220141186a290000370300200341206a41106a2207200141106a290000370300200341206a41086a2208200141086a290000370300200320012900003703202001102c200041186a2004290300370000200041106a2007290300370000200041086a20082903003700002000200329032037000002402006450d002005280200450d00200328020c102c0b024020022802002200450d00200241046a280200450d002000102c0b200341c0006a24000bff0101067f230041c0006b2203240020032001360204200341086a200210b008200341206a41186a2204200341046a200341086a41106a200341086a41086a2205200328020822064101461b290300100b220141186a290000370300200341206a41106a2207200141106a290000370300200341206a41086a2208200141086a290000370300200320012900003703202001102c200041186a2004290300370000200041106a2007290300370000200041086a20082903003700002000200329032037000002402006450d002005280200450d00200328020c102c0b024020022802002200450d00200241046a280200450d002000102c0b200341c0006a24000b890e03037f017e017f230041c0036b220224002002428080808080203702e401200220013602242002200041c4b5c80020011b3602202002200241206a3602e001200241086a200241e0016a10b0030240024002400240024020022802080d0020022802242200200228020c2201490d002001417f4c0d020240024020010d00410121030c010b200110372203450d04200228022421000b024020002001490d0020032002280220200110c9082100200228022422042001490d052002200420016b3602242002200228022020016a3602202000450d012001ad2205422086200584210520022802e001280204450d022005a7450d010b2003102c0b2002412c6a4104360200200241f4016a4102360200200242023702e40120024194c7c3003602e00120024104360224200241e8cec300360220200241003602b403200241c4b5c8003602b0032002200241206a3602f0012002200241b0036a360228200241e0016a41a4c7c3001046000b200220054220883e02ac03200220003602a803200241e0016a200241a8036a10d8040240024020022d00e0014101470d00200241003602100c010b200241206a200241e0016a41017241c00110c9081a200241e0016a200241206a41c00110c9081a200241186a410036020020024204370310412010322201450d02200242203702b403200220013602b003200241b0036a200241e0016a108e060240200228021822012002280214470d00200241106a108f06200228021821010b200228021020014104746a220120022903b003370200200141e7e485f30636020c200141086a200241b0036a41086a2802003602002002200228021841016a360218412010322201450d02200242203702b403200220013602b003200241b0036a200241e0016a41206a108e060240200228021822012002280214470d00200241106a108f06200228021821010b200228021020014104746a220120022903b003370200200141e2c289ab0636020c200141086a200241b0036a41086a2802003602002002200228021841016a360218412010322201450d02200242203702b403200220013602b003200241b0036a200241a0026a108e060240200228021822012002280214470d00200241106a108f06200228021821010b200228021020014104746a220120022903b003370200200141e9dabdf30636020c200141086a200241b0036a41086a2802003602002002200228021841016a360218412010322201450d02200242203702b403200220013602b003200241b0036a200241c0026a108e060240200228021822012002280214470d00200241106a108f06200228021821010b200228021020014104746a220120022903b003370200200141f0c2c98b0636020c200141086a200241b0036a41086a2802003602002002200228021841016a360218412010322201450d02200242203702b403200220013602b003200241b0036a200241e0026a108e060240200228021822012002280214470d00200241106a108f06200228021821010b200228021020014104746a220120022903b003370200200141e1e69df30636020c200141086a200241b0036a41086a2802003602002002200228021841016a360218412010322201450d02200242203702b403200220013602b003200241b0036a20024180036a108e060240200228021822012002280214470d00200241106a108f06200228021821010b200228021020014104746a220120022903b003370200200141e1ea91cb0636020c200141086a200241b0036a41086a2802003602002002200228021841016a3602180b02402005a7450d002000102c0b0240024020022802100d00410121010c010b200241186a2802004104744105722201417f4c0d010b200110322200450d01200241003602e801200220013602e401200220003602e00120022802102101200241e0016a41004101102f20022802e001220320022802e80122006a21040240024020010d00200441003a00002002200041016a22043602e8010c010b200441013a00002002200041016a3602e80120022802102101200241e0016a200241106a41086a2802002200108f01024020000d0020022802e801210420022802e00121030c010b200120004104746a210603402001280200200141086a280200200241e0016a10bb01200241e0016a20022802e8014104102f20022802e001220320022802e80122006a2001410c6a2800003600002002200041046a22043602e801200141106a22012006470d000b0b024020022802102201450d000240200241186a2802002200450d002000410474210003400240200141046a280200450d002001280200102c0b200141106a2101200041706a22000d000b0b20022802104100200228021422011b2200450d00200141ffffffff0071450d002000102c0b200241c0036a24002004ad4220862003ad840f0b103b000b1039000b200120044194afc0001058000b820201037f02400240200041046a2802002202200041086a28020022036b4120490d00200028020021020c010b0240024002400240200341206a22042003490d00200241017422032004200320044b1b22034108200341084b1b22034100480d002000280200410020021b2204450d012002450d0120042002200310352202450d020c030b103b000b2003103222020d010b1039000b20002002360200200041046a2003360200200041086a28020021030b200220036a22032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200041086a2200200028020041206a3602000bd80101047f024002400240200041046a28020020002802082201470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff007122042002470d02200241047422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141047422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034104763602000b0f0b2004450d001039000b103b000bc90c02067f047e230041e0016b22022400200241003a00800102402001450d002002200041c4b5c80020011b22002d00003a0060200241013a008001024020014101460d00200220002d00013a0061200241023a00800120014102460d00200220002d00023a0062200241033a00800120014103460d00200220002d00033a0063200241043a00800120014104460d00200220002d00043a0064200241053a00800120014105460d00200220002d00053a0065200241063a00800120014106460d00200220002d00063a0066200241073a00800120014107460d00200220002d00073a0067200241083a00800120014108460d00200220002d00083a0068200241093a00800120014109460d00200220002d00093a00692002410a3a0080012001410a460d00200220002d000a3a006a2002410b3a0080012001410b460d00200220002d000b3a006b2002410c3a0080012001410c460d00200220002d000c3a006c2002410d3a0080012001410d460d00200220002d000d3a006d2002410e3a0080012001410e460d00200220002d000e3a006e2002410f3a0080012001410f460d00200220002d000f3a006f200241103a00800120014110460d00200220002d00103a0070200241113a00800120014111460d00200220002d00113a0071200241123a00800120014112460d00200220002d00123a0072200241133a00800120014113460d00200220002d00133a0073200241143a00800120014114460d00200220002d00143a0074200241153a00800120014115460d00200220002d00153a0075200241163a00800120014116460d00200220002d00163a0076200241173a00800120014117460d00200220002d00173a0077200241183a00800120014118460d00200220002d00183a0078200241193a00800120014119460d00200220002d00193a00792002411a3a0080012001411a460d00200220002d001a3a007a2002411b3a0080012001411b460d00200220002d001b3a007b2002411c3a0080012001411c460d00200220002d001c3a007c2002411d3a0080012001411d460d00200220002d001d3a007d2002411e3a0080012001411e460d00200220002d001e3a007e2002411f3a0080012001411f460d00200241106a2203200241e0006a41106a2204290300370300200241086a2205200241e0006a41086a2206290300370300200220002d001f3a007f200241186a2200200241e0006a41186a2207290300370300200241203a0080012002200229036022083703202002200837030020014120470d01200241206a41186a20002903002208370300200241206a41106a20032903002209370300200241206a41086a2005290300220a37030020022002290300220b37032020072008370300200420093703002006200a3703002002200b370360200241c0016a41c1dcc700410610c501200241acc8c700410710c501200241d0016a200241e0006a10d5020240024020022802d801220141206a2200417f4c0d000240024020000d00410121030c010b200010322203450d020b200241003602b801200220003602b401200220033602b001200241b0016a4100411010c80120022802b00120022802b80122006a220320022900c001370000200341086a200241c0016a41086a2900003700002002200041106a22003602b801200241b0016a2000411010c80120022802b00120022802b80122006a22032002290000370000200341086a200241086a2900003700002002200041106a22033602b80120022802d0012100200241b0016a2003200110c80120022802b001220320022802b80122046a2000200110c9081a2002200420016a22013602b801024020022802d401450d002000102c0b200241e0006a2003200110d602200241a8016a280200210120022903602108024020022802b401450d002003102c0b410410322200450d012002420437026420022000360260200241e0006a41004104102f20022802602200200228026822036a2001410020084201511b360000200241e0016a2400200341046aad4220862000ad840f0b103b000b1039000b200241003a0080010b2002412c6a4104360200200241f4006a41023602002002420237026420024194c7c3003602602002410436022420024184cfc30036022020024100360204200241c4b5c8003602002002200241206a36027020022002360228200241e0006a41a4c7c3001046000ba40604017f017e027f027e230041e0116b22022400200242808080808020370214200220013602242002200041c4b5c80020011b3602202002200241206a360210200241a00e6a200241106a10af03420321030240024020022903880f4203510d00200241e00a6a200241a00e6a41c00310c9081a02402002280210220028020422044104490d0020002802002205280000210120002004417c6a3602042000200541046a360200200241f8096a200241e00a6a41e80010c9081a20022903c80b2103200241a8076a200241d00b6a41d00210c9081a0c020b200241f80b6a108302420321030b0b200241c0066a200241f8096a41e80010c9081a200241f0036a200241a8076a41d00210c9081a0240024020034203510d00200241286a200241c0066a41e80010c9081a200220033703900120024198016a200241f0036a41d00210c9082100200220013602e803024002402002280210280204450d00200241c0016a108302420321030c010b200241a8076a200241286a41e80010c9081a200241a00e6a200041d00210c9081a0b20034203520d010b200241ec0a6a41043602002002413c6a41023602002002420237022c20024194c7c300360228200241043602e40a2002419ccfc3003602e00a200241003602f403200241c4b5c8003602f0032002200241e00a6a3602382002200241f0036a3602e80a200241286a41a4c7c3001046000b200241f0036a200241a8076a41e80010c9081a200241e00a6a200241a00e6a41d00210c9081a200241286a200241f0036a41e80010c9081a200220033703900120024198016a200241e00a6a41d00210c9081a200241a00e6a200241c0016a220010b7022002200120022903a00e22034200420020022d00a90e41004720022d00a80e2204109206200241086a29030021062002290300210720001083022002410036023020024201370328200241286a41004108102f2002280228200228023022016a20033700002002200141086a360230200241286a20041031200241286a20022802304110102f20022802282201200228023022006a2204200637000820042007370000200241e0116a2400200041106aad4220862001ad840bf70404017f017e017f047e230041c0036b22072400024020050d00200741186a2001ad42004280c2d72f420010ce0820074188026a109b01200741c0006a2007290390022208200220082002541b109108200741c0006a41086a290300210220072903402108200741a0026a2201420037030020074188026a41106a2205420037030020074188026a41086a22094200370300200742003703880220074188026a41dce2c700411210c501200741d0006a41a0e4c700411110c5012001200741d0006a41086a29000037030020052007290050370300200741286a20074188026a10fb0420074188026a200729033042808090bbbad6adf00d200728022822011b200741286a41106a290300420020011b2008200242808090bbbad6adf00d4200109c06200741186a41086a29030021082007290318210a024002402007280288024101470d00427f210b427f210c0c010b2005290300210c2009290300210b0b200741d0006a109b010240024002400240200641ff01710e03010200010b200741d0016a21050c020b200741e0006a21050c010b20074198016a21050b2005290300210220074188026a109b01200741086a200729039002220d2002200d2002541b109108427f427f427f200741106a290300220220087c20072903082208200a7c220a2008542205ad7c22082005200820025420082002511b22051b2202200c7c427f200a20051b2208200b7c220a2008542205ad7c22082005200820025420082002511b22051b220220047c427f200a20051b220420037c22082004542205ad7c22032005200320025420032002511b22051b2104427f200820051b21030b2000200337030020002004370308200741c0036a24000b130020004101360204200041ccd0c3003602000b3400200041cbdcc70036020420004100360200200041146a4102360200200041106a41c8d6c300360200200041086a42093702000b1300200041013602042000418cd9c3003602000b4a01017f02404108103222020d001039000b2000420837020420002002360200200041004108102f2000280200200041086a220028020022026a42b8173700002000200241086a3602000b2f01017f02402000280200450d00200041086a2802002201450d0020002802042200450d002001450d002000102c0b0bbe4404087f017e047f0d7e230041a0046b22012400200141a0026a2202420037030020014198026a2203420037030020014188026a41086a4200370300200142003703880220014188026a419ee3c300411510c501200141e8016a418ce4c300410810c5012002200141e8016a41086a290000370300200320012900e801370300200141e8016a20014188026a412010b3010240024002400240024002400240024020012802e8012202450d00024020012802ec01450d002002102c0b20014188026a412010b401200141a0026a2202420037030020014198026a2204420037030020014188026a41086a220342003703002001420037038802200141a0016a41b4f0c500410f10c5012003200141a0016a41086a2205290000370300200120012900a00137038802200141a0016a41c3f0c500410d10c50120022005290000370300200420012900a0013703002001412036029401200120014188026a36029001200141e0006a20014188026a412010b30102400240200128026022020d00410221030c010b200128026421062001200141e0006a41086a28020022033602c401200120023602c0010240024020034104490d00200228000021052001200241046a3602c00120012003417c6a22073602c40120074104490d00200228000421072001200341786a3602c4012001200241086a3602c001200141e8016a200141c0016a10fd0520012802e8012208450d0020012902ec01210941002103024020012802c401220a0d000c020b20012802c001220b2d0000210c2001200a417f6a220d3602c4012001200b41016a3602c0010240200c4101460d000c020b0240200d41044f0d000c020b200b280001210c2001200a417b6a3602c4012001200b41056a3602c001410121030c010b200141003602a801200142013703a0012001410f3602d401200120014190016a3602d0012001200141a0016a36028001200141fc016a4101360200200142013702ec01200141b4bcc3003602e8012001200141d0016a3602f80120014180016a41dcb7c000200141e8016a103e1a20013502a80142208620013502a001841000024020012802a401450d0020012802a001102c0b410221030b2006450d002002102c0b024020034102460d0020014180026a200c360200200141f4016a2009370200200120033602fc01200120083602f001200120073602ec01200120053602e801200141f0016a2108024020052000470d00024020034101460d0020014188026a2008109906200141b0016a2007360200200141a0016a410c6a20014188026a41086a2202280200360200200141003602a00120012001290388023702a40120014188026a200141a0016a10a903200141eb006a2002280200360000200120012903880237006320014188026a410c6a200141e7006a290000370000200141c6a4b9da0436008902200141023a0088022001200129006037008d0220014188026a109a06200141a0016a41086a2802002202450d01200241286c450d0120012802a401102c0c010b20014188026a2008109906200141b4016a2007360200200141a0016a41086a200129038802370300200141b0016a20014188026a41086a22022802003602002001200c3602a401200141013602a00120014188026a200141a0016a10a903200141eb006a2002280200360000200120012903880237006320014188026a410c6a200141e7006a290000370000200141c6a4b9da0436008902200141023a0088022001200129006037008d0220014188026a109a06200141a0016a410c6a2802002202450d00200241286c450d0020012802a801102c0b024020012802ec0120012802e8016a2000470d00200141f8016a28020041286c4105722202417f4c0d06200210322203450d0720014100360290022001200236028c02200120033602880220014188026a41004101102f20012802880220012802900222026a41013a00002001200241016a3602900220012802f001210220014188026a20012802f8012203108f010240024020030d00200128028802210520012802900221030c010b2002200341286c6a21072001280290022103034020014188026a20034120102f20012802880220012802900222056a22032002290000370000200341086a200241086a290000370000200341106a200241106a290000370000200341186a200241186a2900003700002001200541206a220336029002200241206a290300210920014188026a20034108102f200128028802220520012802900222036a20093700002001200341086a2203360290022007200241286a2202470d000b0b41d0f0c50041142005200310a7020240200128028c02450d002005102c0b20014188026a41086a2202200829020037030020014198026a2203200841086a280200360200200142063703880220014188026a10c802200141a0026a420037030020034200370300200242003703002001420037038802200141a0016a41b4f0c500410f10c5012002200141a0016a41086a2203290000370300200120012900a00137038802200141a0016a41c3f0c500410d10c501200441086a2003290000370000200420012900a00137000020014188026a412010b4010c010b20012802f4012202450d00200241286c450d0020012802f001102c0b200141a0026a420037030020014198026a420037030020014188026a41086a220242003703002001420037038802200141a0016a41b4f0c500410f10c5012002200141a0016a41086a2203290000370300200120012900a00137038802200141a0016a41e4f0c500410510c501200441086a2003290000370000200420012900a001370000200141203602c401200120014188026a3602c001200141e0006a20014188026a412010b30120012802602202450d0320012802642105024002400240200141e0006a41086a2802002207450d004100210302400240024020022d00000e0405000102030b2007417f6a4108490d0220022900012109410121030c040b410221030c020b2007417f6a4108490d0020022900012109410321030c020b200141003602a801200142013703a0012001410f3602d4012001200141c0016a3602d0012001200141a0016a36029001200141fc016a4101360200200142013702ec01200141b4bcc3003602e8012001200141d0016a3602f80120014190016a41dcb7c000200141e8016a103e1a20013502a80142208620013502a001841000024020012802a401450d0020012802a001102c0b410421030b0b02402005450d002002102c0b2003417f6a0e03020301030b41d3dec30041304184dfc300103c000b2009422088a7210202402009a722032000470d00200141043602e801200120023602ec0120014188026a200141e8016a10a903200141eb006a20014190026a280200360000200120012903880237006320014194026a200141e7006a290000370000200141c6a4b9da0436008902200141023a0088022001200129006037008d0220014188026a109a060b200220036a2000470d01200141a0026a420037030020014198026a420037030020014188026a41086a220242003703002001420037038802200141a0016a41b4f0c500410f10c5012002200141a0016a41086a2203290000370300200120012900a00137038802200141a0016a41e4f0c500410510c501200441086a2003290000370000200420012900a001370000200141e8016a410020012001109b0620014188026a412020012802e801220220012802f00110a702024020012802ec01450d002002102c0b20014286808080203703880220014188026a10c8020c010b2009422088a7210202402009a722032000470d00200141033602e801200120023602ec0120014188026a200141e8016a10a903200141eb006a20014190026a280200360000200120012903880237006320014194026a200141e7006a290000370000200141c6a4b9da0436008902200141023a0088022001200129006037008d0220014188026a109a060b200220036a2000470d00200141a0026a420037030020014198026a420037030020014188026a41086a220242003703002001420037038802200141a0016a41b4f0c500410f10c5012002200141a0016a41086a2203290000370300200120012900a00137038802200141a0016a41e4f0c500410510c501200441086a2003290000370000200420012900a001370000200141e8016a410220012001109b0620014188026a412020012802e801220220012802f00110a702024020012802ec01450d002002102c0b20014286808080103703880220014188026a10c8020b20014188026a41186a2205420037030020014188026a41106a2202420037030020014188026a41086a220342003703002001420037038802200141a0016a41e6dcc700410710c5012003200141a0016a41086a2207290000370300200120012900a00137038802200141a0016a4188bbc200410910c50120052007290000370300200220012900a001370300200141e8016a20014188026a10cb03024020012903e801427f7c4202540d00200141e8016a41106a2903002109200141a0016a41186a22044200370300200141a0016a41106a2200420037030020074200370300200142003703a001200141c0016a41cbdcc700410910c5012007200141c0016a41086a290000370300200120012900c0013703a001200141e8016a41f8d7c300410310c5012004200141e8016a41086a290000370300200020012900e801370300200141d0006a200141a0016a10cf02200141c0006a2001290358420020012802501b220e42e80780420042e807420010ce08200120093703f801200142013703e80120012001290340220f200e42e807827c220e427f200141c0006a41086a290300200e200f54ad7c501b3703f0012005420037030020024200370300200342003703002001420037038802200141a0016a41e6dcc700410710c50120032007290000370300200120012900a00137038802200141a0016a4188bbc200410910c501200241086a2007290000370000200220012900a001370000200141003602a801200142013703a001200141a0016a41004104102f20012802a00120012802a80122076a20093e00002001200741046a3602a801200141a0016a200141e8016a109f0420014188026a412020012802a001220720012802a80110a70220012802a401450d002007102c0b2005420037030020024200370300200342003703002001420037038802200141e8016a41dcdcc700410a10c5012003200141e8016a41086a2207290000370300200120012900e80137038802200141e8016a41cddec400410610c50120052007290000370300200220012900e80137030020014188026a412010b4012005420037030020024200370300200342003703002001420037038802200141e8016a41dcdcc700410a10c50120032007290000370300200120012900e80137038802200141e8016a41b0e4c400410c10c50120052007290000370300200220012900e80137030020014188026a412010b4012005420037030020024200370300200342003703002001420037038802200141e8016a41dce2c700411210c50120032007290000370300200120012900e80137038802200141e8016a41a0e4c700411110c50120052007290000370300200220012900e801370300200141286a20014188026a10fb04200141286a41106a2903002110200129033021112001280228210320014188026a4201420042808090bbbad6adf00d4200428094ebdc034200109c06024002402001280288024101470d00427f210f427f21090c010b20014198026a290300210920014190026a290300210f0b20014188026a109b0120014188026a41086a200141b8026a200141b0026a290300501b290300210e200141b8016a22054200370300200141a0016a41106a22074200370300200141a0016a41086a22044200370300200142003703a001200141c0016a41c1dcc700410610c5012004200141c0016a41086a290000370300200120012900c0013703a001200141e8016a41c4ccc600410b10c5012005200141e8016a41086a2204290000370300200720012900e801370300200141e8016a200141a0016a10850320012903f001211220012903e8012113200141e8016a4203420042808090bbbad6adf00d420042a08d064200109c06200e2012420020134201511b22122012200e561b21120240024020012802e8014101470d00427f2113427f21140c010b200141e8016a41106a2903002114200429030021130b200141186a200e42808090bbbad6adf00d8222154200428080e4ceceb58bbc03420010ce08200141086a2001290318200141186a41086a29030042808090bbbad6adf00d420010c708200141e8016a2012200e42808090bbbad6adf00d80428080e4ceceb58bbc037e20154202882001290308428080c89d9deb96f80656200141086a41086a29030022154200522015501bad7c7c2215201220155622051b22162015201220051b22177d42002016201754ad7d42808090bbbad6adf00d4200200e4201200e4201561b4200109c060240024020012802e8014101470d00427f210e427f21160c010b200141f8016a2903002116200141e8016a41086a290300210e0b200141e8016a200e2016200e201642808090bbbad6adf00d4200109c060240024020012802e8014101470d00427f2117427f21180c010b200141f8016a2903002118200141f0016a29030021170b200141e8016a201320142013201442808090bbbad6adf00d4200109c060240024020012802e8014101470d00427f2119427f211a0c010b200141f8016a290300211a200141f0016a29030021190b200141e8016a2019201a42808090bbbad6adf00d4200428080a0f6f4acdbe01b4200109c0620012802e8014101460d02200f201142808090bbbad6adf00d20031b221954210520092010420020031b221051210320092010542107200141f8016a22042903002111200141f0016a2200290300211a200141e8016a20132014200e201642808090bbbad6adf00d4200109c060240024020012802e8014101470d00427f2116427f21140c010b20042903002114200029030021160b2005200720031b2103200141e8016a201a20112017201842808090bbbad6adf00d4200109c060240024020012802e8014101470d00427f2111427f21170c010b200141f8016a2903002117200141f0016a29030021110b2010200920031b210e2019200f20031b211302400240201220155a0d00200141e8016a4200201620117d22122012201656201420177d2016201154ad7d221220145620122014511b22031b4200201220031b2013200e42808090bbbad6adf00d4200109c060240024020012802e8014101470d00427f2112427f21140c010b200141f8016a2903002114200141f0016a29030021120b4200200e20147d2013201254ad7d2214201320127d22122013562014200e562014200e511b22031b220e20094200201220031b2212200f56200e200956200e2009511b22031b21092012200f20031b210e0c010b427f2115200141e8016a427f201620117c221220122016542203201420177c2003ad7c221220145420122014511b22031b427f201220031b2013200e42808090bbbad6adf00d4200109c060240024020012802e8014101470d00427f21120c010b200141f8016a2903002112200141f0016a29030021150b427f200e20127c201320157c22142013542203ad7c221220032012200e542012200e511b22031b220e2009427f201420031b2212200f56200e200956200e2009511b22031b21092012200f20031b210e0b200141a0026a2207420037030020014188026a41106a2204420037030020014188026a41086a220342003703002001420037038802200141e8016a41dce2c700411210c5012003200141e8016a41086a2205290000370300200120012900e80137038802200141e8016a41a0e4c700411110c501200241086a2005290000370000200220012900e801370000200120093703f0012001200e3703e80120014188026a4120200141e8016a411010a7022007420037030020044200370300200342003703002001420037038802200141e8016a41cbdcc700410910c50120032005290000370300200120012900e80137038802200141e8016a4194d8c300410910c50120072005290000370300200420012900e80137030020014188026a412010dc0241ff017122024102460d0320014188026a412010b4012002410171450d03200141e8016a41186a22034200370300200141e8016a41106a22024200370300200141e8016a41086a22054200370300200142003703e80120014188026a41c7dcc700410410c501200520014188026a41086a220729000037030020012001290088023703e80120014188026a4198dac500410b10c50120032007290000370300200220012900880237030020014188026a200141e8016a10fa04024020012d00880222034102460d00200141e8016a412010b401200141e0006a41086a20014191026a290000370300200141e0006a41106a20014188026a41116a290000370300200141e0006a41186a200141a1026a29000037030020012001290089023703600240200341037122034103460d0020030e03010001010b200141a0016a41186a200141e0006a41186a290300370300200141a0016a41106a200141e0006a41106a290300370300200141a0016a41086a200141e0006a41086a290300370300200120012903603703a001200141e8016a41186a4200370300200141e8016a41106a4200370300200141e8016a41086a22034200370300200142003703e80120014188026a41c7dcc700410410c501200320014188026a41086a220529000037030020012001290088023703e80120014188026a41f0d8c500410c10c501200241086a200529000037000020022001290088023700002001200141e8016a412010c6012001280204210320012802002105200141c0016a41c7dcc700410410c501200141e8016a41d4d9c500411110c50120012003410020051b22003602800120014190016a20014180016a410410c70120014188026a410c6a20014180016a41046a360200200120014190016a41086a36028c02200120014180016a36029002200120014190016a36028802200141d0016a20014188026a107e20012802d801220341206a2205417f4c0d010240024020050d00410121070c010b200510322207450d030b20014100360290022001200536028c02200120073602880220014188026a4100411010c80120012802880220012802900222056a220720012900c001370000200741086a200141c0016a41086a2900003700002001200541106a22053602900220014188026a2005411010c80120012802880220012802900222056a220720012900e801370000200741086a200141e8016a41086a2900003700002001200541106a22073602900220012802d001210520014188026a2007200310c801200128028802220420012802900222076a2005200310c9081a2001200720036a220336029002024020012802d401450d002005102c0b200141e8016a200420031081050240024020012802e80122050d00410021072001410036028801200142013703800141012105410021030c010b200120012902ec0122093702840120012005360280012009422088a721032009a721070b0240200128028c02450d002004102c0b024002402003418002490d00412010322203450d04200320012903a001370000200341186a200141a0016a41186a290300370000200341106a200141a0016a41106a290300370000200341086a200141a0016a41086a2903003700002001428180808010370294012001200336029001200141c0016a41c7dcc700410410c501200141e8016a41d4d9c500411110c5012001200041016a22083602dc01200141e0016a200141dc016a410410c70120014194026a200141dc016a41046a3602002001200141e0016a41086a36028c022001200141dc016a360290022001200141e0016a36028802200141d0016a20014188026a107e20012802d801220441206a2200417f4c0d030240024020000d004101210c0c010b20001032220c450d050b20014100360290022001200036028c022001200c3602880220014188026a4100411010c80120012802880220012802900222006a220c20012900c001370000200c41086a200141c0016a41086a2900003700002001200041106a22003602900220014188026a2000411010c80120012802880220012802900222006a220c20012900e801370000200c41086a200141e8016a41086a2900003700002001200041106a220c3602900220012802d001210020014188026a200c200410c801200128028802220c20012802900222066a2000200410c9081a2001200620046a220436029002024020012802d401450d002000102c0b200c200420014190016a1089050240200128028c02450d00200c102c0b2003102c20014180026a4200370300200141f8016a4200370300200141e8016a41086a22034200370300200142003703e80120014188026a41c7dcc700410410c501200320014188026a41086a220429000037030020012001290088023703e80120014188026a41f0d8c500410c10c501200241086a200429000037000020022001290088023700002001200836028802200141e8016a412020014188026a410410a7020c010b20014188026a41186a2204200141a0016a41186a29030037030020014188026a41106a220c200141a0016a41106a29030037030020014188026a41086a2208200141a0016a41086a290300370300200120012903a00137038802024020032007470d0020014180016a2003108205200128028001210520012802880121030b200520034105746a2207200129038802370000200741186a2004290300370000200741106a200c290300370000200741086a2008290300370000410121042001200341016a36028801200141c0016a41c7dcc700410410c501200141e8016a41d4d9c500411110c501200120003602e00120014190016a200141e0016a410410c70120014194026a200141e0016a41046a360200200120014190016a41086a36028c022001200141e0016a36029002200120014190016a36028802200141d0016a20014188026a107e20012802d801220341206a2207417f4c0d0202402007450d00200710322204450d040b20014100360290022001200736028c02200120043602880220014188026a4100411010c80120012802880220012802900222076a220420012900c001370000200441086a200141c0016a41086a2900003700002001200741106a22073602900220014188026a2007411010c80120012802880220012802900222076a220420012900e801370000200441086a200141e8016a41086a2900003700002001200741106a22043602900220012802d001210720014188026a2004200310c801200128028802220420012802900222006a2007200310c9081a2001200020036a220336029002024020012802d401450d002007102c0b2004200320014180016a1089050240200128028c02450d002004102c0b20012802840121070b200741ffffff3f71450d002005102c0b20014180026a22074200370300200141f8016a22044200370300200141e8016a41086a22034200370300200142003703e80120014188026a41c7dcc700410410c501200320014188026a41086a220529000037030020012001290088023703e80120014188026a41d4dac500411310c501200241086a220020052900003700002002200129008802370000200141e8016a412010b401200742003703002004420037030020034200370300200142003703e80120014188026a41c7dcc700410410c5012003200529000037030020012001290088023703e80120014188026a4190dbc500410810c501200020052900003700002002200129008802370000200141e8016a412010b401200141a0046a24000f0b103b000b1039000b109d06000b41aecfc300412b41dccfc300103c000ba10204017f017e027f037e0240024020012802082202ad42287e2203422088a70d002003a72204417f4c0d00200128020021014108210502402004450d00200410322205450d020b20002005360200200041086a22054100360200200041046a200441286e36020020004100200210f2042005280200210402402002450d00200241286c21052000280200200441286c6a21020340200141086a2903002103200141106a2903002106200141186a290300210720012903002108200241206a200141206a290300370300200241186a2007370300200241106a2006370300200241086a200337030020022008370300200241286a2102200441016a2104200141286a2101200541586a22050d000b0b200041086a20043602000f0b103b000b1039000b850301047f230041f0006b22012400200141086a41206a200041206a280200360200200141086a41186a200041186a290200370300200141086a41106a200041106a290200370300200141086a41086a2202200041086a29020037030020012000290200370308200141306a41186a22004200370300200141306a41106a22034200370300200141306a41086a420037030020014200370330200141306a41c1dcc700410610c501200141e0006a419ca4c600410610c5012000200141e0006a41086a220429000037030020032001290060370300200141d0006a200141086a1084022004200141d0006a41086a28020036020020012001290350370360200141306a4120200141e0006a10f4020240024002400240024020012d00080e050400010204030b200141146a280200450d03200141106a280200102c0c030b200141146a280200450d02200141106a280200102c0c020b200141146a280200450d01200141106a280200102c0c010b2002280200450d00200128020c102c0b200141f0006a24000bd70201017f20004201370200200041086a22044100360200024002400240024020010e0400010203000b200041004101102f2000280200200428020022006a41003a00002004200041016a3602000f0b200041004101102f2000280200200428020022016a41013a00002004200141016a2201360200200020014104102f2000280200200428020022016a20023600002004200141046a2201360200200020014104102f2000280200200428020022006a20033600002004200041046a3602000f0b200041004101102f2000280200200428020022006a41023a00002004200041016a3602000f0b200041004101102f2000280200200428020022016a41033a00002004200141016a2201360200200020014104102f2000280200200428020022016a20023600002004200141046a2201360200200020014104102f2000280200200428020022006a20033600002004200041046a3602000bde2e05017f027e017f027e1c7f230041f0026b22072400024002400240024002402001200284500d002003200484500d004201210842002109200741f8006a200320012003200156200420025620042002511b220a1b220b20042002200a1b220c20054201200542015620064200522006501b220d1b220520064200200d1b220610c70820022004200a1b210220012003200a1b21042007290378200741f8006a41086a29030084500d01200741e8006a200420022005200610c7082007290368200741e8006a41086a29030084500d0220052108200621090c030b20004100360200200041106a4200370300200041086a42003703000c030b200741c8006a200b200c2005200610c808200741c8006a41086a290300210c2007290348210b0c010b200741d8006a200420022005200610c808200741e0006a29030021024200210942012108200729035821040b200741186a200c42002004420010ce08200741286a20024200200b420010ce08200741386a200b42002004420010ce0802400240024002400240024002400240024002400240200c420052200242005271200729032042005272200729033042005272200741386a41086a2903002201200729031820072903287c7c2203200154724101470d0041101032220a450d092007420437028c022007200a3602880220074188026a4100410410a90820074188016a41086a200728029002220a41046a360200200728028802200a4102746a220a200b3e020c200a200b4220883e0208200a200c3e0204200a200c4220883e020020072007290388023703880120074188016a10aa0841101032220a450d092007420437028c022007200a3602880220074188026a4100410410a90820074198016a41086a200728029002220a41046a360200200728028802200a4102746a220a20043e020c200a20044220883e0208200a20023e0204200a20024220883e020020072007290388023703980120074198016a10aa0841101032220a450d092007420437028c022007200a3602880220074188026a4100410410a908200741a8016a41086a200728029002220a41046a360200200728028802200a4102746a220a2008a7220e36020c200a20084220883e0208200a20093e0204200a20094220883e020020072007290388023703a801200741a8016a10aa08200741f8016a41086a20074198016a41086a28020036020020072007290398013703f80120074188026a41086a20074188016a41086a280200360200200720072903880137038802200741b8016a20074188026a200741f8016a10e206024020072802fc0141ffffffff0371450d0020072802f801102c0b200741b8016a10aa0820072802c001210a20072802bc01210f20072802b801211020072802b001220d0e020602010b200741086a200729033820032008200910c80820004100360200200041106a200741086a41086a290300370300200041086a20072903083703000c0a0b20072802a801220e2802000d010c040b200a4101200a41014b1b221141ffffffff03712011470d012011410274220d417f4c0d0102400240200d0d00410421120c010b200d10372212450d070b200720113602f001200720123602e8012007200d4102763602ec010240200a450d0020122011410274200a4102746b6a210d4100200a6b210a200e4101200e41014b1bad2102420021042010210e0240034020112011200a6a22124d0d01200d2004422086200e3502008422042002803e0200200a417f460d02200e41046a210e200d41046a210d200a41016a210a200420028221040c000b0b2012201141b0aec800103f000b200f41ffffffff0371450d052010102c0c050b200a450d012010280200450d02200a200d4d0d022007200d3602c401200a200d6b221341016a22144101201441014b1b221541ffffffff03712015470d0020154102742216417f4c0d000240024020160d00410421170c010b201610372217450d060b200d4101200d41014b1b221841ffffffff03712018470d0020184102742219417f4c0d0020191037221a450d05410121114102210d024002400240200e28020067221b0e020201000b4102210d201b210e410121110340200d4101200e4101711b20116c2111200e41034b2112200d200d6c210d200e410176210e20120d000b0b200d20116c21110b2007200a360280022007200f3602fc01200720103602f80141041032220a450d05200a2011360200200742818080801037028c022007200a36028802200741c8016a200741f8016a20074188026a10e206200a102c200741f8016a200741a8016a10a80841041032220a450d05200a2011360200200742818080801037028c022007200a36028802200741d8016a200741f8016a20074188026a10e206200a102c0240201420072802c4016a220a20072802d001220d4d0d002007410036028002200742043703f801200741f8016a4100200a200d6b220d10a908200728028002210a0240200d450d0020072802f801200a4102746a4100200d41027410cb081a200a200d6a210a0b2007200a3602800220072802c801210e200741f8016a200a20072802d001220d10a90820072802f801200728028002220a4102746a200e200d41027410c9081a2007200a200d6a220a3602800220074188026a41086a220d200a360200200720072903f80137038802024020072802cc0141ffffffff0371450d0020072802c801102c0b200741c8016a41086a200d28020036020020072007290388023703c8010b2016410276211c2019410276211d200741d8016a10aa080240024002400240024002400240024002400240034020072013221e3602e401024020072802d001220a20072802c401220d201e6a220e417f736a2211200a490d002011200a4188adc800103f000b0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200a200a200e6b220e4d0d0020072802e001220a200a200d6b220d4d0d0120072802d801200d4102746a35020022024200510d02201e201e4100476b211320072802c801220a20114102746a3502002104200a200e4102746a3502002101200741003602e8012007200120044220868422042002803703f0012007200420028237038002200741003602f8012007200741e4016a36029c022007200741c8016a360298022007200741c4016a360294022007200741d8016a360290022007200741f8016a36028c022007200741e8016a3602880220074188026a10ab081a034020072802f801220a41016a41004c0d042007200a3602f801024020072903800242ffffffff0f560d0020074188026a10ab080d010b0b20072903f00121024100210e200741003602a802200742043703a002024020072802c401221620072802e401220d6a220a2016490d00201641016a220e20164f0d004104210f4100210e41002112034020072802d0012211200a417f736a221020114f0d06200d200a4f2111200a200d200a496b210a20072802c80120104102746a28020021100240201220072802a402470d00200741a0026a2012417f41004100417f200a200d6b220f41016a22162016200f491b20111b200a200d491b220f41016a22162016200f491b10a90820072802a002210f0b200f200e6a20103602002007201241016a22123602a802200e41046a210e200a200d49201172450d000c0b0b0b200741a0026a4100200e10a90820072802a8022112200a200d490d0820072802a00220124102746a2111200a200d4d0d05200a417f73210e0340200e20072802d001220f6a2210200e4f0d07201120072802c80120104102746a280200360200200e41016a210e201141046a2111200d200a417f6a220a490d000b201620126a21120c070b200e200a4188adc800103f000b200d200a4188adc800103f000b41d0aec800411941ecaec800103c000b41fcaec8004118200741e0026a4194afc80041a4afc8001040000b201020114188adc800103f000b2016450d010c020b2010200f4188adc800103f000b20072802d001220a200d417f736a220d200a4f0d02201120072802c801200d4102746a280200360200201241016a21120b200720123602a8020b200741d0026a200741d8016a10a80841081032220a450d22200a2002a7221f360204200a20024220883e020020074282808080203702e4022007200a3602e002200741b0026a200741d0026a200741e0026a10e206200a102c201220072802b8022220201220204b1b220f4101200f41014b1b221041ffffffff03712010470d1d20104102742221417f4c0d1d20072802a402212220072802a00221230240024020210d00410421240c010b202110372224450d230b02400240200f450d002010417f6a210d2020417f6a222520204b21142012417f6a222620124b2127202420216a417c6a210e410021114200210420072802b002212803404100210a024020270d004100210a2012202620116b22164d0d004100210a201620264b0d00202320164102746a280200210a0b200aad21024100210a024020140d002020202520116b22164d0d00201620254b0d00202820164102746a280200210a0b024002402002200aad22037d22012002560d00200120047d22062001560d00200642ffffffff0f832102420021044101210a0c010b20024280808080108420047d20037d2102420121044100210a0b2010200d4d0d04200e20023e0200200e417c6a210e200d417f6a210d200f201141016a2211470d000b41012116200a450d010b410021160b0240202241ffffffff0371450d002023102c0b20072802c401220e20072802e401220d6a2214200e490d06200d20144f0d02200d417f73210a034020102010200d6a200a6a22114d0d04200a20072802d00122126a220d200a4f0d0520072802c801200d4102746a202420114102746a280200360200200a417f6a210a20072802e401210d200e417f6a220e0d000c060b0b200d200a4188adc800103f000b200d201041b0aec800103f000b200e450d020c030b200f4101200f41014b1b200d6a200a6a20104188adc800103f000b200d201241b0aec800103f000b200d2014417f73220a6a220d20106a220e200d4f0d0120072802d001220d200a6a220a200d4f0d0220072802c801200a4102746a2024200e4102746a28020036020020072802e401210d0b2015200d417f736a220a20154f0d022017200a4102746a201f3602002016450d0a201520072802e401417f736a220a20154f0d032017200a4102746a220a200a280200417f6a3602004100210e200741003602e802200742043703e002024020072802c401220f20072802e401220d6a220a200f490d00200f41016a220e200f4f0d004104210f410021114100210e034020072802d0012212200a417f736a221020124f0d06200d200a4f2112200a200d200a496b210a20072802c80120104102746a28020021100240200e20072802e402470d00200741e0026a200e417f41004100417f200a200d6b220f41016a22162016200f491b20121b200a200d491b220f41016a22162016200f491b10a90820072802e002210f0b200f20116a20103602002007200e41016a220e3602e802201141046a2111200a200d49201272450d000c0b0b0b200741e0026a4100200e10a90820072802e8022116200a200d490d0820072802e00220164102746a2111200a200d4d0d05200a417f73210e0340200e20072802d00122106a2212200e4f0d07201120072802c80120124102746a280200360200200e41016a210e201141046a2111200d200a417f6a220a490d000b200f20166a21160c070b200e20104188adc800103f000b200a200d41b0aec800103f000b200a201541b0aec800103f000b200a20154188adc800103f000b201020124188adc800103f000b200f450d010c020b201220104188adc800103f000b20072802d001220a200d417f736a220d200a4f0d04201120072802c801200d4102746a280200360200201641016a21160b200720163602e8020b200741c0026a41086a200741e0026a41086a280200360200200720072903e0023703c002200741e0026a200741d8016a10a808200741d0026a200741e0026a200741c0026a10ac08024020072802c401220a20072802e40122106a220d200a490d00024002402010200d4f0d00200d417f73210a20072802d002210f20072802d802210e201021110340200e200e20116a200a6a22114d0d07200a20072802d00122166a2212200a4f0d0820072802c80120124102746a200f20114102746a280200360200200a41016a210a20072802e40121112010200d417f6a220d490d000c020b0b200a0d0120072802d802210e201021110b200e20112010417f73220a6a6a220d200e4f0d0620072802d001220e200a6a220a200e4f0d0720072802c801200a4102746a20072802d002200d4102746a2802003602000b024020072802d40241ffffffff0371450d0020072802d002102c0b20072802c40241ffffffff0371450d0020072802c002102c0b02402021450d002024102c0b024020072802b40241ffffffff0371450d0020072802b002102c0b201e0d000b02400240201b0d004100210a20072802d001211820072802cc01211d20072802c801210e2019450d01201a102c0c010b024020072802c401220a4101460d004100200a6b2110201b411f71210f4100201b6b411f7121162018410274201a6a417c6a210d417f210a0340200a20072802d00122116a220e200a4f0d0a2011200e417f6a22124d0d0b20182018200a6a22114d0d0c200d20072802c801221120124102746a2802002016742011200e4102746a280200200f7672360200200d417c6a210d2010200a417f6a220a470d000b20072802c401210a0b20072802d001220d200d200a6b220e4d0d0620182018200a6b220a4d0d07201a200a4102746a20072802c801200e4102746a280200201b411f71763602004101210a201a210e0b024020072802dc0141ffffffff0371450d0020072802d801102c0b200a450d0d20072802cc0141ffffffff0371450d0d20072802c801102c0c0d0b200d200a4188adc800103f000b2011200e4188adc800103f000b2012201641b0aec800103f000b200d200e4188adc800103f000b200a200e41b0aec800103f000b200e200d4188adc800103f000b200a201841b0aec800103f000b200e20114188adc800103f000b200e417f6a20114188adc800103f000b2011201841b0aec800103f000b103b000b4100410041c0aec800103f000b410021170240200f41ffffffff03710d000c010b2010102c0b41041032220a450d01200a410036020041041032220d450d01200d41003602000240024020170d00410121184101211d410121154101211c0c010b200a102c200d102c200e210d2017210a0b200720153602e8022007201c3602e4022007200a3602e00220072018360280022007201d3602fc012007200d3602f80120074188026a200741f8016a10ad082007280288024101460d02024020074188026a41086a29030020084201882009423f86845620074188026a41106a2903002202200942018822045620022004511b450d00200741e8016a41086a200741e0026a41086a280200360200200720072903e0023703e80141101032220a450d022007420437028c022007200a3602880220074188026a4100410410a90820074180026a200728029002220a41046a360200200728028802200a4102746a220a428080808010370208200a420037020020072007290388023703f801200741f8016a10aa08200741e0026a200741e8016a200741f8016a10ac0820072802fc0141ffffffff0371450d0020072802f801102c0b200741e8016a41086a200741e0026a41086a280200360200200720072903e0023703e8010b200741e8016a10aa08200741f8016a41086a200741e8016a41086a280200360200200720072903e8013703f80120074188026a200741f8016a10ad084101210a024002402007280288024101470d00200041fca5c800360204200041086a41193602000c010b200041106a20074188026a41106a290300370300200041086a20074188026a41086a2903003703004100210a0b2000200a36020020072802ac0141ffffffff0371450d0220072802a801102c0c020b1039000b2007200729028c023703f80141aca5c800412f200741f8016a41dca5c80041eca5c8001040000b200741f0026a24000b11004192b1c800411f41b4b1c800103c000b8c590a077f017e057f017e067f017e097f017e117f037e230041f00c6b22022400200241c00a6a41186a22034200370300200241c00a6a41106a22044200370300200241c00a6a41086a22054200370300200242003703c00a200241d8086a41968dc700410d10c5012005200241d8086a41086a2206290000370300200220022900d8083703c00a200241d0026a418893c700410a10c5012003200241d0026a41086a2207290000370300200420022900d002370300200241d0026a200241c00a6a10ff0420022802d002210820022902d4022109200342003703002004420037030020054200370300200242003703c00a200241d8086a41968dc700410d10c50120052006290000370300200220022900d8083703c00a200241d0026a41bc93c700411310c50120032007290000370300200420022900d002370300200241106a200241c00a6a412010c6012002280214210a2002280210210b200241d0026a41186a22034200370300200241d0026a41106a220c420037030020074200370300200242003703d002200241d8076a41ac95c400410d10c5012007200241d8076a41086a2204290000370300200220022900d8073703d002200241d8086a41c695c400410c10c50120032006290000370300200c20022900d808370300200241c00a6a200241d0026a10f50220022802800b210520022802980b210d20034200370300200c420037030020074200370300200242003703d002200241d8076a41f1ddc700410510c50120072004290000370300200220022900d8073703d002200241d8086a41c4fec000410a10c50120032006290000370300200c20022900d808370300200241c00a6a200241d0026a412010b90302400240024002400240024002400240024041002005200d4102461b20022902c40a420020022802c00a220e1b220f422088a76a22100d00410421114104210341002112410421134100211441002115410121050c010b20104104201041044b1bad42b0027e2216422088a70d052016a722074100480d05200710322203450d04200741b0026e2114200241ac0c6a2104200241e8006a41046a211720024198086a41086a2118200241d0026a41106a2106200241d0026a41186a2119200241e8006a41286a2113200241e8006a41306a211a200241e8006a41386a211b4100211c4104211d200321074100210d03402019420037030020064200370300200241d0026a41086a221e4200370300200242003703d002200241c00a6a41bee8c700410d10c501201e200241c00a6a41086a2205290000370300200220022900c00a3703d002200241c00a6a4188eec700411110c501200641086a2005290000370000200620022900c00a370000200241c00a6a200241d0026a10eb0420022802c00a2211410420111b211f410121150240200d20022902c40a420020111b2216422088a74f0d004101211502400240201f201d6a2211417c6a280200417f6a0e020102000b20112802002105410021150c010b2019420037030020064200370300201e4200370300200242003703d002200241d8076a41f1ddc700410510c501201e200241d8076a41086a290000370300200220022900d8073703d002200241d8086a41c4fec000410a10c501200c41086a200241d8086a41086a290000370000200c20022900d808370000200241c00a6a200241d0026a412010b903200d20022902c40a420020022802c00a22051b2220422088a722114f0d032005410420051b221e201c6a2802002105410021152020a72211450d00201141ffffffff0371450d00201e102c0b02402016a72211450d002011412c6c450d00201f102c0b41002111024020150d00200241d8076a41968dc700410d10c501200241d8086a41a38dc700411310c5012002200536026820024198086a200241e8006a410410c701200220173602dc02200220183602d4022002200241e8006a3602d802200220024198086a3602d002200241b0056a200241d0026a107e20022802b805221141206a2215417f4c0d070240024020150d004101211e0c010b20151032221e450d070b200241003602a0082002201536029c082002201e3602980820024198086a4100411010c80120022802980820022802a00822156a221e20022900d807370000201e41086a200241d8076a41086a2900003700002002201541106a22153602a00820024198086a2015411010c80120022802980820022802a00822156a221e20022900d808370000201e41086a200241d8086a41086a2900003700002002201541106a221e3602a00820022802b005211520024198086a201e201110c801200228029808221e20022802a008221f6a2015201110c9081a2002201f20116a22113602a008024020022802b405450d002015102c0b200241c00a6a201e201110f304200241d0026a200241c00a6a41e80110c9081a200241b0056a41086a2211200441086a290200370300200241b0056a41106a2215200441106a290200370300200241b0056a41186a221f200441186a290200370300200241b0056a41206a2221200441206a290200370300200241b0056a41286a2212200441286a290200370300200241b0056a41306a2222200441306a290200370300200241b0056a41386a2223200441386a280200360200200220042902003703b005024020022802a80c2224450d00200241d8086a200241d0026a41e80110c9081a201b2023280200360200201a202229030037030020132012290300370300200241e8006a41206a2021290300370300200241e8006a41186a201f290300370300200241e8006a41106a2015290300370300200241e8006a41086a2011290300370300200220022903b0053703680b0240200228029c08450d00201e102c0b410121110b20072011360200200741046a2005360200200741086a200241d8086a41e80110c9081a200741f0016a2024360200200741f4016a2002290368370200200741fc016a200241e8006a41086a29030037020020074184026a200241e8006a41106a2903003702002007418c026a200241e8006a41186a29030037020020074194026a200241e8006a41206a2903003702002007419c026a2013290300370200200741a4026a201a290300370200200741ac026a201b280200360200200741b0026a2107201c41046a211c201d412c6a211d2010200d41016a220d470d000b41012115024020104109490d0041024101201041786a22074107711b20074103766a21150b201510322205450d042003201041b0026c6a211120102112200321130b200220153602702002410036026c2002200536026802402012450d00410021070340410021042003280200410146200341f0016a28020041004771210d20074103762106024002402007450d0020064107712204454103742004724108470d0141012104200741c100490d0041024101200641786a22044107711b20044103766a21040b200220053602c00a200220153602c40a200220043602c80a024020042015470d00200241c00a6a2015410110c80120022802c80a210420022802c00a21050b200520046a41003a0000200220022802c00a220536026820022802c40a21150b4101200520074178461b41002007410676200741c000491b6a21044101200641077174210602400240200d0d0020042d00002006417f737121060c010b20042d000020067221060b200741086a2107200420063a0000200341b0026a22032011470d000b200220153602702002200736026c0b200241d0026a41186a22074200370300200241d0026a41106a22034200370300200241d0026a41086a22044200370300200242003703d002200241d8076a41c1dcc700410610c5012004200241d8076a41086a290000370300200220022900d8073703d002200241d8086a41a2a4c600410a10c5012007200241d8086a41086a2205290000370300200320022900d808370300200241c00a6a200241d0026a412010c90120022d00c00a21062007200241d90a6a2900003703002003200241d10a6a2900003703002004200241c90a6a290000370300200220022900c10a3703d0020240024020064101460d00200241d8086a41186a4200370300200241d8086a41106a420037030020054200370300200242003703d8080c010b200241d8086a41186a2007290300370300200241d8086a41106a200329030037030020052004290300370300200220022903d0023703d8080b2009420020081b21162008410120081b2117200e4104200e1b2125200241b0056a41086a2218200241d8086a41086a290300370300200241b0056a41106a2208200241d8086a41106a290300370300200241b0056a41186a220e200241d8086a41186a290300370300200220022903d8083703b005200128020022262001280208222741d0006c6a21242027450d02200a4100200b1b210a2016422088a72122410121072026211f0240034002400240024002400240201f41046a221a2802004103762010470d002007201f410c6a2219280200220420034b72410171450d01200420224f0d03200241d8086a200241e8006a10cb05200241d0026a201f10cb0520022802d808211b20022802d802212320022802d002212120022802dc082206410376221d0d02410021040c040b200241c00a6a410110a505200041013602002000410c6a200241c80a6a280200360200200020022903c00a3702040c070b200241c00a6a410210a505200041013602002000410c6a200241c80a6a280200360200200020022903c00a3702040c060b201b410120061b211e2006410771211c4100210420022802d402210720212105034020074108490d02200241c00a6a2005200710970720022802cc0a210720022802c80a210d201e4100201c20046a220541037620054108491b6a21034101200541077174210502400240024020022802c00a410120022802c40a22111b2d0000201141077176410171450d00200520032d00007141ff01710d010b20032d00002005417f737121110c010b20032d000020057221110b200d410120071b2105200320113a0000201d200441016a2204460d020c000b0b200241c00a6a410310a505200041013602002000410c6a200241c80a6a280200360200200020022903c00a3702040c040b02402023450d002021450d002021102c0b0240201d20044d0d00200241d8086a200410b20620022802dc08210620022802d808211b0b20022802e008211102400240201a280200220720067341074b0d00201f2802002104201b210303404101210520064108490d02200241c00a6a2003200610970720074108490d0220022802cc0a210620022802c80a210320022802c00a410120022802c40a22051b2d0000210d200241c00a6a2004200710970720022802cc0a210720022802c80a2104200d20054107717641017120022802c00a410120022802c40a22051b2d0000200541077176410171460d000b0b410021050b02402011450d00201b450d00201b102c0b024020050d00200241c00a6a410d10a505200041013602002000410c6a200241c80a6a280200360200200020022903c00a3702040c040b2019280200220320224f0d0141002107200241003602e008200242013703d808201f2802002104201a280200410376200241d8086a10770240201a28020022064103762205450d00410121072005410820064107716b22064d0d0041024101200520066b22074107711b20074103766a21070b200241d8086a20022802e0082007102f20022802d80820022802e00822056a2004200710c9081a2002200520076a22053602e008200241003602d802200242013703d002200241d0026a41004104102f20022802d00220022802d80222076a200a3600002002200741046a22043602d802412010322207450d0520034105742106200242203702c40a200220073602c00a200241c00a6a41004120102f20022802c00a220320022802c80a220d6a220720022903b005370000200741086a2018290300370000200741106a2008290300370000200741186a200e2903003700002002200d41206a22073602c80a200241d0026a20042007102f20022802d002220420022802d802220d6a2003200710c9081a2002200d20076a22073602d802024020022802c40a450d002003102c0b201720066a210620022802d402210d200241d8086a2005200710c80120022802d808220320022802e00822056a2004200710c9081a2002200520076a22073602e0080240200d450d002004102c0b201f41106a200320072006102d2107024020022802dc08450d002003102c0b02402007450d002019280200210341002107201f41d0006a221f2024470d010c050b0b200241c00a6a410410a505200041013602002000410c6a200241c80a6a280200360200200020022903c00a3702040c020b20032022419096c700103f000b200d201141b0fcc700103f000b20022802682107200241013602682002410036026c02402015450d002007102c0b02402012450d00201241b0026c21044100210303400240201320036a2207280200450d00200741f0016a22052802002206450d0020054101360200200741f4016a41003602000240200741f8016a280200450d002006102c0b20074180026a4100360200200741fc016a220528020021062005410136020020074184026a280200450d002006102c0b2004200341b0026a2203470d000b0b02402014450d00201441b0026c450d002013102c0b0240200f42ffffffff0383500d002025102c0b02402016a72207450d00200741ffffff3f71450d002017102c0b024020012802082203450d0020012802002207200341d0006c6a21040340200741046a410036020020072802002103200741013602000240200741086a280200450d002003102c0b200741d0006a22072004470d000b0b20012802042207450d04200741d0006c450d042001280200102c0c040b20022802682107200241013602682002410036026c02402015450d002007102c0b200241e8026a4200370300200241d0026a41106a4200370300200241d0026a41086a221a4200370300200242003703d002200241d8076a41c1dcc700410610c501201a200241d8076a41086a290000370300200220022900d8073703d002200241d8086a4196a4c600410610c501200c41086a200241d8086a41086a221b290000370000200c20022900d808370000200241086a200241d0026a412010c6012001280204210c2026210d024002402027450d00200228020c410020022802081b211e201341d07d6a211c200241d8076a41046a211920024198086a41086a21212026210702400340200741d0006a210d20072802002211450d02200728020c211d2007280208211541002104201121052007280204221f21070340201c200441b0026c6a21030240024002400240034020074108490d01200241c00a6a2005200710970720022802cc0a210720022802c80a2105200341b0026a2103200441016a210420022802c00a410120022802c40a22061b2d0000200641077176410171450d000b20122004417f6a4d0d0320032802004101470d06200341f0016a2802002206450d04200341f4016a2802002203410376201d4d0d042006410120031b210620034107712203410048201d20036a2203201d48460d0120034107712122200341037621230c020b2002201e3602bc05200220153602b8052002201f3602b405200220113602b005200241d8086a41968dc700410d10c501200241d0026a418091c700411510c5012002201d3602d80720024198086a200241d8076a410410c701200220193602cc0a200220213602c40a2002200241d8076a3602c80a200220024198086a3602c00a200241e8006a200241c00a6a107e2002280270220741206a2203417f4c0d090240024020030d00410121040c010b200310322204450d090b200241003602a0082002200336029c08200220043602980820024198086a4100411010c80120022802980820022802a00822036a220420022900d808370000200441086a201b2900003700002002200341106a22033602a00820024198086a2003411010c80120022802980820022802a00822036a220420022900d002370000200441086a201a2900003700002002200341106a22043602a0082002280268210320024198086a2004200710c801200228029808220420022802a00822056a2003200710c9081a2002200520076a22053602a0080240200228026c450d002003102c0b200241003602c80a200242013703c00a200241c00a6a200241b0056a10e305200241c00a6a20022802c80a4104102f20022802c00a220720022802c80a22036a201e3600002002200341046a22033602c80a200420052007200310a702024020022802c40a450d002007102c0b0240200228029c08450d002004102c0b200242013703b00502402015450d002011102c0b200d2107200d2024470d040c070b024020034108490d0020034107712122200341037521230c010b41002123200321220b200620236a220320032d00004101202241077174723a00000c010b0b0b2004417f6a201241a096c700103f000b41b096c70041d600418897c700105c000b2024200d460d000340200d41046a4100360200200d2802002107200d41013602000240200d41086a280200450d002007102c0b200d41d0006a220d2024470d000b0b0240200c450d00200c41d0006c450d002026102c0b2016421f88a7417e7122074103702105200741036e2106201041ffffffff03712010470d0120104102742207417f4c0d010240024020070d00410421030c010b200710322203450d010b20024100360220200220033602182002200741027636021c2013201241b0026c22076a2104024020120d00201321030c030b200620056a2128201320076a41d07d6a2129200241c80c6a212a20024198076a41046a212b20024198086a41086a2122200241d0026a41e8016a210e200241c00a6a410472212c200241d0026a4104722108200241ec0c6a41046a212d200241f0046a41086a2105200241c00a6a41f4016a2127200241ac0c6a2101200241c00a6a41e8016a210b200241f0046a41386a2106200241f0046a41306a210d200241f0046a41286a2111200241f0046a41206a2115200241f0046a41186a211d200241f0046a41106a211e20132103034020032107024002400340200741046a280200211220072802002103200241b0056a200741086a41e80110c9081a200741f0016a280200211c2006200741ac026a280200360200200d200741a4026a29020037030020112007419c026a290200370300201520074194026a290200370300201d2007418c026a290200370300201e20074184026a2902003703002005200741fc016a2902003703002002200741f4016a2902003703f00420034102460d01200241d0026a200241b0056a41e80110c9081a200241d8076a41386a22242006280200360200200241d8076a41306a2210200d290300370300200241d8076a41286a221a2011290300370300200241d8076a41206a221b2015290300370300200241d8076a41186a2219201d290300370300200241d8076a41106a2221201e290300370300200241d8076a41086a221f2005290300370300200220022903f0043703d807024020034101470d00200241c00a6a200241d0026a41e80110c9081a20024198086a41386a2203202428020036020020024198086a41306a2223201029030037030020024198086a41286a2210201a29030037030020024198086a41206a221a201b29030037030020024198086a41186a221b201929030037030020024198086a41106a221920212903003703002022201f290300370300200220022903d80737039808201c0d03200241d8086a410041e80110cb081a20024198076a41386a410036020020024198076a41306a420037030020024198076a41286a420037030020024198076a41206a420037030020024198076a41186a420037030020024198076a41106a420037030020024198076a41086a420037030020024200370398070b200741b0026a22072004470d000b200421030c050b200741b0026a21030c040b200241d8086a200241c00a6a41e80110c9081a20024198076a41386a2224200328020036020020024198076a41306a2203202329030037030020024198076a41286a2221201029030037030020024198076a41206a220c201a29030037030020024198076a41186a2218201b29030037030020024198076a41106a222e201929030037030020024198076a41086a222f2022290300370300200220022903980837039807200241e8006a200241d8086a41e80110c9081a200241286a41386a22302024280200360200200241286a41306a22242003290300370300200241286a41286a22032021290300370300200241286a41206a2221200c290300370300200241286a41186a220c2018290300370300200241286a41106a2218202e290300370300200241286a41086a222e202f2903003703002002200229039807370328200241c00a6a200241e8006a41e80110c9081a200141386a2030280200360200200141306a2024290300370200200141286a2003290300370200200141206a2021290300370200200141186a200c290300370200200141106a2018290300370200200141086a202e290300370200200120022903283702002002201c3602a80c02400240024002400240024002400240024020022802ac0c22214103762224450d000240024020244108202141077122036b220c4d0d00410241012024200c6b2218410771220c1b20184103766a212f200c45410374200c7221300c010b200320246a21304101212f0b4101212e02402024410820214107716b220c4d0d00410241012024200c6b22244107711b20244103766a212e0b201c410120211b210c4100211802400240024020030d00203041ff01714108470d00200c2124202e210a4100212e0c010b203041ff017122244108460d0120030d03200c202e417f6a220a6a212e200c2124203021310b4100210c4100212f0c040b200c4180807c71212f200c41807e712118202e417f6a210a200c41016a21244100212e0c020b410021244100212e4100210c410021184100212f0c020b202f4101460d020240202e4101470d00419bf8c600412b41c8f8c600105c000b200c4180807c71212f200c41807e712118200c41016a2224202e417e6a220a6a212e203021310b200321260b410021210240202f20184180fe037172200c41ff0171722203450d00202641ff017141074b0d0020032d00002118410021212026210303402021201841ff01712003410771764101716a2121200341ff0171210c200341016a2103200c4107490d000b0b2024450d03200a0d01410021030c020b024020032024490d0041002121200c21260c040b200c2d000021184100212103402021201841ff01712003410771764101716a2121200341016a220341ff01712024490d000b200c21260c030b41002103200a210c0340200320242d0000696a2103202441016a2124200c417f6a220c0d000b0b200320216a21210b202e450d0002400240203141ff0171220c0d00410021240c010b202e2d00002118410021244100210303402024201841ff01712003410771764101716a2124200341016a220341ff0171200c490d000b0b202420216a21210b02400240202120284f0d00200241d8076a41968dc700410d10c501200241d8086a41a38dc700411310c501200220123602980720024198086a20024198076a410410c7012002202b3602dc02200220223602d402200220024198076a3602d802200220024198086a3602d002200241b0056a200241d0026a107e20022802b805220341206a2224417f4c0d040240024020240d00410121100c010b202410322210450d040b200241003602a0082002202436029c08200220103602980820024198086a4100411010c80120022802980820022802a00822246a221020022900d807370000201041086a201f2900003700002002202441106a221f3602a00820024198086a201f411010c80120022802980820022802a008221f6a222420022900d808370000202441086a200241d8086a41086a2900003700002002201f41106a22243602a00820022802b005211f20024198086a2024200310c801200228029808222420022802a00822106a201f200310c9081a2002201020036a22033602a008024020022802b405450d00201f102c0b200241003602d802200242013703d00220022802c00a211f200241d0026a41004104102f20022802d00220022802d8026a201f360000200220022802d80241046a3602d802200241d0026a202a10e405200241d0026a202c10c804200241d0026a200b10e305200241d0026a202710e30520022802c00c211f200241d0026a20022802d8024104102f20022802d00220022802d8026a201f360000200220022802d80241046a221f3602d80220022802c40c2110200241d0026a201f4104102f20022802d00220022802d8026a2010360000200220022802d80241046a221f3602d8022024200320022802d002201f10a702024020022802d402450d0020022802d002102c0b0240200228029c08450d002024102c0b200242013703a80c024020022802b00c450d00201c102c0b200241003602b80c20022802b40c2103200241013602b40c20022802bc0c450d012003102c0c010b200241d8076a41968dc700410d10c501200241d8086a41a38dc700411310c501200220123602980720024198086a20024198076a410410c7012002202b3602dc02200220223602d402200220024198076a3602d802200220024198086a3602d002200241b0056a200241d0026a107e20022802b805220341206a2224417f4c0d030240024020240d00410121210c010b202410322221450d030b200241003602d802200220243602d402200220213602d002200241d0026a4100411010c80120022802d00220022802d80222246a222120022900d807370000202141086a201f2900003700002002202441106a22243602d802200241d0026a2024411010c80120022802d00220022802d80222216a222420022900d808370000202441086a200241d8086a41086a22242900003700002002202141106a220c3602d80220022802b0052121200241d0026a200c200310c80120022802d002220c20022802d80222186a2021200310c9081a2002201820036a22033602d802024020022802b405450d002021102c0b200c200310b401024020022802d402450d00200c102c0b200241d8076a41968dc700410d10c501200241d8086a41bc92c700411e10c501200220123602ec0c200241f0046a200241ec0c6a410410c7012002202d3602dc02200220053602d4022002200241ec0c6a3602d8022002200241f0046a3602d00220024198076a200241d0026a107e20022802a007220341206a2221417f4c0d030240024020210d00410121120c010b202110322212450d030b200241003602f804200220213602f404200220123602f004200241f0046a4100411010c80120022802f00420022802f80422216a221220022900d807370000201241086a201f2900003700002002202141106a221f3602f804200241f0046a201f411010c80120022802f00420022802f804221f6a222120022900d808370000202141086a20242900003700002002201f41106a221f3602f8042002280298072121200241f0046a201f200310c80120022802f004221f20022802f80422126a2021200310c9081a2002201220036a22123602f8040240200228029c07450d002021102c0b200241d0026a201f201210ee040240024020022802d0022203450d00201f201210b401200241d8086a41306a200841306a2802002221360200200241d8086a41286a200841286a2902002220370300200241d8086a41206a200841206a2902002209370300200241d8086a41186a200841186a2902002232370300200241d8086a41106a200841106a29020022333703002024200841086a2902002234370300200241b0056a41086a2034370300200241b0056a41106a2033370300200241b0056a41186a2032370300200241b0056a41206a2009370300200241b0056a41286a2020370300200241b0056a41306a20213602002002200829020022203703d808200220203703b0050c010b200241d8086a41306a200841306a280200360200200241d8086a41286a200841286a290200370300200241d8086a41206a200841206a290200370300200241d8086a41186a200841186a290200370300200241d8086a41106a200841106a2902003703002024200841086a290200370300200220082902003703d808410021030b024020022802f404450d00201f102c0b02402003450d002023200241b0056a41306a2802003602002010200241b0056a41286a290300370300201a200241b0056a41206a290300370300201b200241b0056a41186a2903003703002019200241b0056a41106a2903003703002022200241b0056a41086a221c290300370300200220022903b0053703980820022802c00c211f200241d0026a202c41e40110c9081a200e200229039808370200200e41086a2022290300370200200e41106a2019290300370200200e41186a201b290300370200200e41206a201a290300370200200e41286a2010290300370200200e41306a2023280200360200200220033602b404201c202741086a280200360200200220272902003703b0052024200b41086a2802003602002002200b2902003703d808201f200241d0026a200241b0056a200241d8086a10840820022802c00a211c024020022802202203200228021c470d00200241186a20034101109502200228022021030b200228021820034102746a201c3602002002200341016a3602200c010b024041002802d8d2484102490d00200241a4013602dc072002419897c7003602d80741002802d4d248210341002802d0d248211c41002802dcd248211f200241e10236029003200242ca8080801037038803200241c4f9c60036028403200242263702fc02200241bc98c7003602f802200242013703f002200242013703e002200241b4b5c8003602dc02200241263602d802200241bc98c7003602d402200241043602dc08200241023602d002200341e0a3c000201f410246221f1b28021021032002200241d8086a3602ec022002200241d8076a3602d808201c41f8a3c000201f1b200241d0026a200311030020022802a80c211c0b200242013703a80c024020022802b00c450d00201c102c0b200241003602b80c20022802b40c2103200241013602b40c20022802bc0c450d002003102c0b200741b0026a210320292007470d000b200421030c020b1039000b103b000b024020042003460d0003402003220741b0026a210302402007280200450d00200741f0016a22052802002206450d00200542013702000240200741f8016a280200450d002006102c0b20074180026a4100360200200741fc016a220528020021062005410136020020074184026a280200450d002006102c0b20042003470d000b0b02402014450d00201441b0026c450d002013102c0b20002002290318370204200041003602002000410c6a200241206a2802003602000240200f42ffffffff0383500d002025102c0b2016a72207450d00200741ffffff3f71450d002017102c0b200241f00c6a24000bae0501057f230041e0046b220524002005200436020c20052003360208024002400240200241074b0d0041002802d8d248450d0120054126360214200541e59ec00036021041002802d4d248210241002802d0d248210341002802dcd2482104200541f8026a41e900360200200541f0026a42df80808010370300200541ec026a419e9fc000360200200541e4026a4213370200200541e0026a418b9fc000360200200541d8026a4201370300200541c8026a4201370300200541c0026a4113360200200541d4026a200541d0006a360200200541b4b5c8003602c4022005418b9fc0003602bc02200541013602b80220054104360254200241e0a3c000200441024622041b28021021022005200541106a360250200341f8a3c00020041b200541b8026a20021103000c010b2002417c714108460d0020012800082102200541b8026a200541086a10f404200541d0006a200541b8026a41e80110c9081a200541106a41086a200541ac046a290200370300200541206a2203200541b4046a290200370300200541286a2204200541bc046a290200370300200541306a2201200541c4046a290200370300200541386a2206200541cc046a290200370300200541c0006a2207200541d4046a290200370300200541c8006a2208200541dc046a280200360200200520052902a404370310024020052802a0042209450d0020002002360200200041046a200541d0006a41e80110c9081a200020093602ec01200020052903103702f001200041f8016a200541186a29030037020020004180026a200329030037020020004188026a200429030037020020004190026a200129030037020020004198026a2006290300370200200041a0026a2007290300370200200041a8026a20082802003602000c020b200041003602ec010c010b200041003602ec010b200541e0046a24000b960101017f410121030240200041b8016a28020020014d0d0020002802b0012001412c6c6a28020022014102460d00024020014101460d004100210320002802bc01200028025022014f0d01410020002802c001220020026b2203200320004b1b20014f0f0b4100210320002802bc01200028024c22014f0d00410020002802c001220020026b2203200320004b1b20014f21030b20030b2c01017f0240200041b4016a2802002201450d0020002802b0012200450d002001412c6c450d002000102c0b0bd60103037f017e017f024002400240200041046a28020020002802082201470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1bad42387e2204422088a722030d022004a722024100480d022003454102742105024002400240024002402000280200410020011b22030d002002450d010c030b200141386c22010d0120020d020b200521010c020b200320012002103522010d010c030b200210322201450d020b20002001360200200041046a200241386e3602000b0f0b2005450d001039000b103b000bf00203027f017e037f230041306b220124000240024020002802002202450d0020002902042103200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41bee8c700410d10c5012005200141206a41086a220629000037030020012001290020370300200141206a41fcefc700410910c5012000200629000037030020042001290020370300200141206a20022003422088a710a7062001412020012802202200200128022810a70202402001280224450d002000102c0b2003a72200450d01200041346c450d012002102c0c010b200141186a22004200370300200141106a22024200370300200141086a2204420037030020014200370300200141206a41bee8c700410d10c5012004200141206a41086a220529000037030020012001290020370300200141206a41fcefc700410910c50120002005290000370300200220012900203703002001412010b4010b200141306a24000bec0301057f230041d0006b22012400200141086a22022000410c6a280200360200200120002902043703000240024020002802002200450d0020012000360210200120012903003702142001200228020036021c200141386a22024200370300200141306a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41bee8c700410d10c5012004200141c0006a41086a220529000037030020012001290040370320200141c0006a41b4edc700410f10c50120022005290000370300200320012900403703002001410036024820014201370340200141c0006a200141106a108f05200128021c2103200141c0006a20012802484104102f20012802402202200128024822046a20033600002001200441046a2203360248200141206a41202002200310a70202402001280244450d002002102c0b20012802142202450d012002412c6c450d012000102c0c010b200141386a22004200370300200141306a22024200370300200141206a41086a2203420037030020014200370320200141c0006a41bee8c700410d10c5012003200141c0006a41086a220429000037030020012001290040370320200141c0006a41b4edc700410f10c5012000200429000037030020022001290040370300200141206a412010b4010b200141d0006a24000bf00203027f017e037f230041306b220124000240024020002802002202450d0020002902042103200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41bee8c700410d10c5012005200141206a41086a220629000037030020012001290020370300200141206a4188eec700411110c5012000200629000037030020042001290020370300200141206a20022003422088a710e4042001412020012802202200200128022810a70202402001280224450d002000102c0b2003a72200450d012000412c6c450d012002102c0c010b200141186a22004200370300200141106a22024200370300200141086a2204420037030020014200370300200141206a41bee8c700410d10c5012004200141206a41086a220529000037030020012001290020370300200141206a4188eec700411110c50120002005290000370300200220012900203703002001412010b4010b200141306a24000bc07a07077f017e067f017e1e7f047e557f230041f00d6b220324000240024002400240200141086a2802002204200241086a28020022054b0d0020050d0120004280808080c000370200200041086a42003702000c020b200341f8036a410510a505200041013602002000410c6a200341f8036a41086a280200360200200020032903f8033702040c010b200341f8036a41186a22064200370300200341f8036a41106a22074200370300200341f8036a41086a22084200370300200342003703f803200341e80a6a41968dc700410d10c5012008200341e80a6a41086a2209290000370300200320032900e80a3703f803200341e80a6a418893c700410a10c50120062009290000370300200720032900e80a370300200341c0086a200341f8036a10ff0420032802c008210620032902c408210a200341d00c6a41186a22084200370300200341d00c6a41106a22094200370300200341d00c6a41086a220b4200370300200342003703d00c200341900d6a41c1dcc700410610c501200b200341900d6a41086a290000370300200320032900900d3703d00c200341b00d6a41a2a4c600410a10c5012008200341b00d6a41086a290000370300200920032900b00d370300200341f8036a200341d00c6a412010c90120032d00f8032108200341f00c6a41186a220920034191046a290000370300200341f00c6a41106a220b20034189046a290000370300200341f00c6a41086a220c20034181046a290000370300200320032900f9033703f00c0240024020084101460d00200341186a41186a4200370300200341186a41106a4200370300200341186a41086a4200370300200342003703180c010b200341186a41186a2009290300370300200341186a41106a200b290300370300200341186a41086a200c290300370300200320032903f00c3703180b200341f00c6a41186a22084200370300200341f00c6a41106a220d4200370300200341f00c6a41086a22094200370300200342003703f00c200341900d6a41c1dcc700410610c5012009200341900d6a41086a220b290000370300200320032900900d3703f00c200341b00d6a4196a4c600410610c5012008200341b00d6a41086a220c290000370300200d20032900b00d370300200341106a200341f00c6a412010c6012003280214210e2003280210210f20084200370300200d420037030020094200370300200342003703f00c200341900d6a41ac95c400410d10c5012009200b290000370300200320032900900d3703f00c200341b00d6a41c695c400410c10c5012008200c290000370300200d20032900b00d370300200341f8036a200341f00c6a10f50220032802d0042109200341c0086a200341f8036a41d80010c9081a200341e80a6a200341f8036a41dc006a41d40010c9081a4100210b200e4100200f1b21080240024020094102470d00200341f8006a4200370300200341f0006a4200370300200341e8006a4200370300200341386a41086a4200370300200341386a41106a4200370300200341386a41186a4200370300200341386a41206a420037030020034200370360200342808080801037039801200342013703880120034281808080103703800120034200370338200341a0016a410041c80010cb081a0c010b200341386a200341c0086a41d80010c9081a200341386a41dc006a200341e80a6a41d40010c9081a2009210b0b2003200b36029001200320083602e80120032008417f6a3602ec01024002400240200441ffffffff00712004470d0020044104742208417f4c0d004104211002402008450d00200810322210450d020b200a420020061b21112006410120061b2112200341c0086a41186a2213200341186a41186a290300370300200341c0086a41106a2214200341186a41106a290300370300200341c0086a41086a2215200341186a41086a290300370300200320032903183703c008200341f8036a41186a22164200370300200341f8036a41106a22174200370300200341f8036a41086a22184200370300200342003703f803200341e80a6a41968dc700410d10c5012018200341e80a6a41086a2219290000370300200320032900e80a3703f803200341e80a6a41bc93c700411310c501200741086a2019290000370000200720032900e80a370000200341086a200341f8036a412010c60120034190026a410c6a2015290300370200200341a4026a2014290300370200200341ac026a2013290300370200200320032903c008370294022003200328020c410020032802081b360290022008410476211a0240024020040d004100211b41002107410021060c010b2001280200221c200441b4026c6a211d201c41cf006a211e2011422088a7211f200341f8036a4101722108200341f8036a41e4016a2120200341f8036a41a4016a2121200341fc046a2122200341f8036a41e4006a2123200341f8036a41c4006a2124200341f8036a41246a2125200341f8036a4104722126200341e0066a41046a2127200341c0086a41206a2128410021294100210741002109024002400240024002400240024003402007212a20032029221b36028008201c2205280200210e200341a0086a201f10b4060240024002400240024002400240200341186a200541046a222b460d00202b200341186a412010cc080d010b20052802002104200341f8036a41206a410041c40010cb08212c2016202b41186a222d2900003703002017202b41106a222e2900003703002018202b41086a222f290000370300200541dc006a290000210a200541d4006a2900002130200541cc006a2900002131202b29000021322005290044213320242005290064370000202441086a2234200541ec006a290000370000202441106a2235200541f4006a290000370000202441186a2236200541fc006a29000037000020252033370000202541086a22372031370000202541106a22382030370000202541186a2239200a370000200320323703f8032003200436029804200541a4016a223a200341f8036a41e400200541246a223b102d450d01200341e0066a200341386a200e20054190026a280200200541fc016a20052802940220052802e40120052802ec0120052802980220052802f00120052802f80110eb0520032802e0064107460d05200341e80a6a41106a200341e0066a41106a280200360200200341e80a6a41086a200341e0066a41086a290300370300410041002802dcd2482204410120041b3602dcd248200320032903e0063703e80a20040e020203040b200341f8036a410c10a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c0b0b200341f8036a411110a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c0a0b41004180a0c0003602d4d248410041c4b5c8003602d0d248410041023602dcd2480c010b034041002802dcd2484101460d000b0b410041053602d8d248024041000d00200341d4086a4122360200200341cc086a4102360200200341023602c4082003200e3602d00d2003200341e80a6a3602d0082003200341d00d6a3602c808200320034180086a3602c00841002802d4d248210441002802d0d248210541002802dcd2482107200341b8046a41ce03360200200341b0046a42ca80808010370300200341ac046a41c4f9c600360200200341a4046a4226370200200341a0046a41bc98c70036020020034198046a420337030020034188046a420337030020034180046a411c360200200341f8036a411c6a200341c0086a360200200341f498c70036028404200341c899c7003602fc03200341043602f803200541f8a3c000200741024622071b200341f8036a200441e0a3c00020071b2802101103000b41172104024002400240024002400240024020032802e80a0e0700010203040506000b410921040c050b410a21040c040b410b21040c030b411421040c020b411521040c010b411621040b200341f8036a200410a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c070b200241086a2802002204202a490d01200541b4026a211c201b41016a2129200541e4006a213c200541c4006a213d200541e4016a213e200441346c202a41346c22046b210f2002280200223f20046a214041002104202a2107024003400240200f2004470d00200341f8036a410510a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c090b204020046a220b28020021060240024002402009450d002006200c4d0d010b200320082900003703c0082003200841076a2800003600c7082006210c0c010b200341f8036a410810a505200320082900003703c0082003200841076a2800003600c70820032d00f80322064104470d020b200441346a210441012109200741016a2107200e200b41046a280200470d000b0240204020046a224141546a2d00004101470d00201e202a414c6c6a203f6b2004460d00204141556a203b412010cc08450d00200341f8036a410710a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c080b200341f8036a200e10b703024020032802f8030d0020004280808080c000370200200041086a42003702000c080b200341c0086a41386a200341f8036a41386a290300370300200341c0086a41306a200341f8036a41306a290300370300200341c0086a41286a200341f8036a41286a2903003703002028202c290300370300201320162903003703002014201729030037030020152018290300370300200320032903f8033703c008200341003602e806200342013703e00620032802c008220b2015280200200341e0066a10bb0120032802cc082104200341e0066a20032802e8064104102f20032802e00620032802e80622066a20043600002003200641046a3602e806200341e0066a201410b805412010322204450d0b200342203702ec0a200320043602e80a200341e80a6a41004120102f20032802e80a220620032802f00a22096a22042028290000370000200441086a202841086a290000370000200441106a202841106a290000370000200441186a202841186a2900003700002003200941206a22043602f00a200341e0066a20032802e8062004102f20032802e00620032802e80622096a2006200410c9081a2003200920046a22043602e806024020032802ec0a450d002006102c0b20032802dc082106200341e0066a20044104102f20032802e006220420032802e80622096a20063600002003200941046a22063602e806200341f00c6a20042006109a012016200341f00c6a41186a22402903003703002017200341f00c6a41106a222c2903003703002018200341f00c6a41086a220f290300370300200320032903f00c3703f803024020032802e406450d002004102c0b024002400240200341f8036a203d460d00200341f8036a203d412010cc080d010b024020032802c408450d00200b102c0b024020032802d4082204450d00200441246c450d0020032802d008102c0b200341900d6a41968dc700410d10c501200341b00d6a41a38dc700411310c5012003200e3602e006200341e80a6a200341e0066a410410c7012003202736028404200320193602fc032003200341e0066a360280042003200341e80a6a3602f803200341c0086a200341f8036a107e20032802c808220441206a2206417f4c0d0c0240024020060d00410121090c010b200610322209450d0e0b200341003602f00a200320063602ec0a200320093602e80a200341e80a6a4100411010c80120032802e80a20032802f00a22066a220920032900900d370000200941086a200341900d6a41086a22092900003700002003200641106a22063602f00a200341e80a6a2006411010c80120032802e80a20032802f00a22066a220b20032900b00d370000200b41086a200341b00d6a41086a220b2900003700002003200641106a222a3602f00a20032802c0082106200341e80a6a202a200410c80120032802e80a222a20032802f00a223f6a2006200410c9081a2003203f20046a22043602f00a024020032802c408450d002006102c0b200341f8036a202a200410f30420032802e005210420032802e805210620032802ec05213f20032802f4052142024020032802ec0a450d00202a102c0b2006204320041b2143203f204420041b21442042204520041b21452004450d0102402043450d002004102c0b2045450d082044450d082044102c0c080b200341e80a6a411210a505200041013602002000410c6a200341f00a6a280200360200200020032903e80a370204024020032802c408450d00200b102c0b20032802d4082204450d08200441246c450d0820032802d008102c0c080b200341900d6a41968dc700410d10c501200341b00d6a41bc92c700411e10c5012003200e3602e006200341e80a6a200341e0066a410410c7012003202736028404200320193602fc032003200341e0066a360280042003200341e80a6a3602f803200341c0086a200341f8036a107e20032802c808220441206a2206417f4c0d0a0240024020060d004101210e0c010b20061032220e450d0c0b200341003602f00a200320063602ec0a2003200e3602e80a200341e80a6a4100411010c80120032802e80a20032802f00a22066a220e20032900900d370000200e41086a20092900003700002003200641106a22063602f00a200341e80a6a2006411010c80120032802e80a20032802f00a22066a220e20032900b00d370000200e41086a200b2900003700002003200641106a220e3602f00a20032802c0082106200341e80a6a200e200410c80120032802e80a220e20032802f00a222a6a2006200410c9081a2003202a20046a22043602f00a024020032802c408450d002006102c0b200341f8036a200e200410ee040240024020032802f80322040d00410021040c010b20032802fc032146200328028004214720032802840421482003280288042149200328028c04214a200328029004214b200328029404214c200328029c04214d20032802a004214e0b024020032802ec0a450d00200e102c0b02402004450d0002402047450d002047410c6c21072004210503400240200541046a280200450d002005280200102c0b2005410c6a2105200741746a22070d000b0b02402046450d002046410c6c450d002004102c0b0240204a450d00204a4104742105204841046a210403400240200441046a280200450d002004280200102c0b200441106a2104200541706a22050d000b0b02402049450d002048450d00204941ffffffff0071450d002048102c0b0240204b450d00204c450d00204b102c0b204e450d07204d450d07204d102c0c070b2041417c6a280200210620404200370300202c4200370300200f4200370300200342003703f00c200341900d6a41bee8c700410d10c501200f2009290000370300200320032900900d3703f00c200341b00d6a41dcecc700410f10c501200d41086a200b290000370000200d20032900b00d370000200341f8036a200341f00c6a10e90420032802f8032204410420041b210e02400240200620032902fc03420020041b220a422088a72204490d004100213f200341003602c0080c010b200e2006410c6c6a223f280208220641ffffffff03712006470d0b2006410274222a417f4c0d0b203f280200214202400240202a0d004104213f0c010b202a1032223f450d0d0b200341003602c8082003203f3602c0082003202a4102763602c408200341c0086a4100200610950220032802c008223f20032802c808224f4102746a2042202a10c9081a2003204f20066a3602c8080b02402004450d002004410c6c2106200e210403400240200441046a28020041ffffffff0371450d002004280200102c0b2004410c6a2104200641746a22060d000b0b0240200aa72204450d002004410c6c450d00200e102c0b203f450d0320032802c408214f20052802ac0241037620032802c808222a470d04200541a4026a2242280200202a4b0d042041414c6a2150202f290000210a202e2900002130202d2900002131202b2900002132200341d00d6a41086a2204203d41086a290000370300200341d00d6a41106a2206203d41106a290000370300200341d00d6a41186a220e203d41186a2900003703002005280200212b20402031370300202c2030370300200f200a370300200341d00c6a41086a222d203b41086a290200370300200341d00c6a41106a222e203b41106a290200370300200341d00c6a41186a222f203b41186a2902003703002003203d2900003703d00d200320323703f00c2003203b2902003703d00c200341b00d6a41186a2241203c41186a290000370300200341b00d6a41106a2251203c41106a290000370300200b203c41086a290000370300200341900d6a41186a22522005419c016a290000370300200341900d6a41106a225320054194016a29000037030020092005418c016a290000370300200341e80a6a41386a2254203a41386a290000370300200341e80a6a41306a2255203a41306a290000370300200341e80a6a41286a2256203a41286a290000370300200341e80a6a41206a2257203a41206a290000370300200341e80a6a41186a223d203a41186a290000370300200341e80a6a41106a223b203a41106a2900003703002019203a41086a2900003703002003203c2900003703b00d20032005290084013703900d2003203a2900003703e80a200341c0086a203e109901202620032903f00c370200202641086a200f290300370200202641106a202c290300370200202641186a2040290300370200202520032903d00c3702002037202d2903003702002038202e2903003702002039202f290300370200202420032903d00d37020020342004290300370200203520062903003702002036200e2903003702002003202b3602f803202341186a2041290300370200202341106a2051290300370200202341086a200b290300370200202320032903b00d370200202241186a2052290300370200202241106a2053290300370200202241086a2009290300370200202220032903900d370200202141386a2054290300370200202141306a2055290300370200202141286a2056290300370200202141206a2057290300370200202141186a203d290300370200202141106a203b290300370200202141086a2019290300370200202120032903e80a370200202041186a2013290300370000202041106a2014290300370000202041086a2015290300370000202020032903c008370000200341e0066a200341f8036a10c704200528029c022240204228020041c1006c6a41c19ff0877c6c204041bfe08ff8036c6a213a203f417c6a212b20052802ac02210420052802a802210b410021064100210f0340202b20064102746a21090240024002400240034020044108490d01200341f8036a200b20041097072003280284042104200328028004210b200941046a2109200641016a210620032802f803410120032802fc03220e1b2d0000200e41077176410171450d000b200f203a470d01203a210f0b200f2042280200460d010c080b202a2006417f6a4b0d01200341c0086a41186a200341f8036a41186a290000370300200341c0086a41106a200341f8036a41106a290000370300200341c0086a41086a200341f8036a41086a290000370300200320032900f8033703c0080c070b0240200f410174202a4b0d00200341f8036a410f10a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c080b20032802a008410120032802a40822041b21402004410771210e2004410376210f20052802ac02210420052802a802210941002105024002400340202b20054102746a2106024002400240024002400240034020044108490d01200341f8036a2009200410970720032802840421042003280280042109200641046a2106200541016a210520032802f803410120032802fc03220b1b2d0000200b41077176410171450d000b202a2005417f6a4d0d052003200628020022063602e0062003200f3602e80a200f20064d0d02200e4100482006200e6a220b200648460d01200b4107712106200b410376213a0c040b2018200341a0086a41086a280200360200200320032903a0083703f80320502802002105201b201a470d07201b4101742204201b41016a2206200420064b1b22044104200441044b1b220441ffffffff00712004470d1441000d14200441047422044100480d14201b4104742058201b1b21580240024020104100201b1b22060d0020040d01410421100c080b024020580d0020040d01410421100c080b20062058200410352210450d160c070b2004103222100d060c150b200b4108490d01200b4107712106200b410375213a0c020b200341cc086a41023602002003418c046a4102360200200342023702fc03200341c4efc4003602f803200341023602c4082003200341c0086a360288042003200341e80a6a3602c8082003200341e0066a3602c008200341f8036a41d4efc4001046000b4100213a200b21060b2040203a6a220b200b2d00004101200641077174723a00000c010b0b419c99c700411a41b899c700105c000b2004410476211a0b2010201b4104746a22042005360200200420032903f8033702042004410c6a20182802003602000240204f450d00203f450d00204f41ffffffff0371450d00203f102c0b201e41b4026a211e41012109201d201c460d0a0c030b0240024020092802002209201f4f0d00201220094105746a2209290000210a200941186a2900002130200941106a29000021312019200941086a290000370300203b2031370300203d20303703002003200a3703c0082003200a3703e80a2013200341e0066a41186a2903003703002014200341e0066a41106a2903003703002015200341e0066a41086a290300370300200320032903e0063703c0080240024020402d00004101470d00200820032903c008370000200841086a2015290300370000200841106a2014290300370000200841186a2013290300370000200341013a00f803200320034190026a36029c04200341d00d6a200341f8036a10fd070c010b200820032903c008370000200841086a2015290300370000200841106a2014290300370000200841186a2013290300370000200341003a00f803200320034190026a36029c04200341d00d6a200341f8036a10fd070b204041016a20032802d00d220920032802d80d200341e80a6a102d0d0120032802d40d450d072009102c0c070b200341c0086a41186a200341f8036a41186a290000370300200341c0086a41106a200341f8036a41106a290000370300200341c0086a41086a200341f8036a41086a290000370300200320032900f8033703c0080c060b024020032802d40d450d002009102c0b204041c1006a2140200f41016a210f0c000b0b0b200020063a0004200020032903c008370005200041013602002000410c6a20032800c7083600000c050b202a2004418c99c7001058000b200341f8036a410e10a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040c030b200341f8036a411010a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040b204f450d01203f450d01204f41ffffffff0371450d01203f102c0c010b200341f8036a410610a505200041013602002000410c6a20034180046a280200360200200020032903f8033702040b200341003602a40820032802a0082104200341013602a00820032802a808450d042004102c0c040b410121060240200241086a28020022052007490d002029211b0c010b2007200541e498c7001058000b024020072005460d00200541346c200741346c22046b2107200228020020046a2104200341f8036a410172220841076a210902400340200428020021050240024002402006450d002005200c4d0d010b200320082900003703c008200320092800003600c7082005210c0c010b200341f8036a410810a505200320082900003703c008200320092800003600c70820032d00f80322054104470d020b200441346a2104410121062007414c6a22070d000c020b0b200020053a0004200020032903c008370005200041013602002000410c6a20032800c7083600000c030b200341003602f801200342043703f001200341f0016a4100201b10950220032802f80121070240201b450d00201b410474210620032802f00120074102746a210420102105034020042005280200360200200741016a2107200441046a2104200541106a2105200641706a22060d000b0b200320073602f8012010201b4104746a21592001280200225a200141086a28020041b4026c6a21372011422088a7215b200341c0086a41186a2158200341a0086a41046a2141200341d00c6a41086a212b200341c0086a41e8016a2138200341c0086a4188026a2118200341c0086a41e4016a2121200341c0086a41a4016a210f200341c0086a4184016a2116200341c0086a41e4006a2117200341c0086a41c4006a2129200341c0086a41246a213d200341c0086a410472212a200341c0086a418c026a211d200341c0086a41ec016a2128200341ec096a2140200341cc096a213b200341ac096a213c2003418c096a211f200341ec086a2120200341c0086a410c6a2122200341f8036a41a4016a210c200341f8036a4184016a2119200341f8036a41e4006a2114200341f8036a41c4006a2115200341f8036a41246a211c200341f8036a4104722113200341f8036a4190026a2146200341c0086a41f4016a215c200341f8036a41e4016a210e2001280204215d20102106205a210703400240024020072037470d0041002105203721070c010b200341c0086a200741e40110c9081a200341d00d6a41086a20074198026a280200360200200320074190026a2902003703d00d200741b0026a280200215e200741ac026a280200215f200741a4026a2802002160200741a0026a28020021612007418c026a280200216220074188026a280200216320074184026a280200216420074180026a2802002165200741fc016a2802002166200741f8016a2802002167200741f4016a2802002168200741f0016a2802002169200741ec016a280200216a200741e8016a280200216b20072802a802216c200728029c02216d20072802e4012105200741b4026a21070b200341f8036a200341c0086a41e40110c9081a200341e0066a41086a2208200341d00d6a41086a223a280200360200200320032903d00d3703e006024002402005450d00200341e80a6a200341f8036a41e40110c9081a200341b00d6a41086a22042008280200360200200320032903e0063703b00d0240024020062059470d00205921060c010b200641106a214a2006280204223e0d02204a21060b0240206a450d00206a410c6c21082005210403400240200441046a280200450d002004280200102c0b2004410c6a2104200841746a22080d000b0b0240206b450d00206b410c6c450d002005102c0b02402067450d0020674104742105206941046a210403400240200441046a280200450d002004280200102c0b200441106a2104200541706a22050d000b0b02402068450d002069450d00206841ffffffff0071450d002069102c0b02402066450d002065450d002066102c0b02402062450d002063450d002063102c0b02402061450d00206d450d00206141c1006c450d00206d102c0b205e450d00206c450d00206c102c0b024020372007460d0003400240200741ec016a2802002205450d0020072802e40121042005410c6c210503400240200441046a280200450d002004280200102c0b2004410c6a2104200541746a22050d000b0b0240200741e8016a2802002204450d002004410c6c450d0020072802e401102c0b0240200741f8016a2802002204450d0020044104742105200741f0016a28020041046a210403400240200441046a280200450d002004280200102c0b200441106a2104200541706a22050d000b0b0240200741f4016a28020041ffffffff0071450d0020072802f001102c0b0240200741fc016a2802002204450d0020074180026a280200450d002004102c0b02402007418c026a280200450d0020074188026a280200102c0b0240200741a0026a2802002204450d00200441c1006c450d00200728029c02102c0b200741b4026a2104200741ac026a410036020020072802a8022105200741013602a8020240200741b0026a280200450d002005102c0b2004210720042037470d000b0b0240205d450d00205d41b4026c450d00205a102c0b024020592006460d002010201b4104746a21070340200641086a4100360200200641046a2204280200210520044101360200200641106a210402402006410c6a280200450d002005102c0b2004210620072004470d000b0b0240201a450d00201a41ffffffff0071450d002010102c0b200020032903f001370204200041003602002000410c6a200341f8016a28020036020002402011a72204450d00200441ffffff3f71450d002012102c0b20022802042204450d06200441346c450d062002280200102c0c060b200641086a290200210a2006280200213920034190026a200341e80a6a41e40110c9081a20034180026a41086a22062004280200360200200320032903b00d37038002200341f8036a20034190026a41e40110c9081a2046200329038002370200204641086a200628020036020020032062360284062003206336028006200320643602fc05200320653602f805200320663602f405200320673602f005200320683602ec05200320693602e8052003206a3602e4052003206b3602e005200320053602dc052003205e3602a8062003205f3602a4062003206c3602a0062003206036029c0620032061360298062003206d3602940620032802f803213f200341b0066a205b10b406200341f00c6a41086a2223201341086a2247290200370300200341f00c6a41106a2226201341106a2248290200370300200341f00c6a41186a2244201341186a224b290200370300202b201c41086a2249290200370300200341d00c6a41106a2245201c41106a224d290200370300200341d00c6a41186a2243201c41186a224e290200370300200320132902003703f00c2003201c2902003703d00c20032802f803214c200341d00d6a41186a221e201541186a2242290200370300200341d00d6a41106a2227201541106a224f290200370300203a201541086a22512902003703002004201441086a2252290200370300200341b00d6a41106a222c201441106a2253290200370300200341b00d6a41186a222d201441186a2254290200370300200341900d6a41086a2206201941086a2255290200370300200341900d6a41106a222e201941106a2256290200370300200341900d6a41186a222f201941186a2257290200370300200320152902003703d00d200320142902003703b00d200320192902003703900d200341e80a6a41386a2234200c41386a2250290200370300200341e80a6a41306a2209200c41306a226e290200370300200341e80a6a41286a220b200c41286a226f290200370300200341e80a6a41206a2201200c41206a2270290200370300200341e80a6a41186a220d200c41186a2271290200370300200341e80a6a41106a2224200c41106a2272290200370300200341e80a6a41086a2225200c41086a22732902003703002003200c2902003703e80a200341c0066a200e109901200341a0086a41186a22742044290300370300200341a0086a41106a22752026290300370300200341a0086a41086a2276202329030037030020034180086a41086a2277202b29030037030020034180086a41106a2278204529030037030020034180086a41186a22792043290300370300200341e0076a41086a227a203a290300370300200341e0076a41106a227b2027290300370300200341e0076a41186a227c201e290300370300200320032903f00c3703a008200320032903d00c37038008200320032903d00d3703e007200341c0076a41186a227d202d290300370300200341c0076a41106a227e202c290300370300200341c0076a41086a227f2004290300370300200341a0076a41086a2280012006290300370300200341a0076a41106a228101202e290300370300200341a0076a41186a228201202f29030037030020082025290300370300200341e0066a41106a22352024290300370300200341e0066a41186a2236200d290300370300200341e0066a41206a2283012001290300370300200341e0066a41286a228401200b290300370300200341e0066a41306a2285012009290300370300200341e0066a41386a2286012034290300370300200320032903b00d3703c007200320032903900d3703a007200320032903e80a3703e0062003280288062205417f4c0d012003280280062187010240024020050d0041012188010c010b20051032228801450d030b200341003602f00a200320053602ec0a20032088013602e80a200341e80a6a4100200510c80120032802e80a20032802f00a2288016a208701200510c9081a200320880120056a3602f00a202220032903a008370200202241086a2076290300370200202241106a2075290300370200202241186a20742903003702002020200329038008370200202041086a2077290300370200202041106a2078290300370200202041186a20792903003702002003204c3602c808200342083703c008201f41186a207c290300370200201f41106a207b290300370200201f41086a207a290300370200201f20032903e007370200203c20032903c007370200203c41086a207f290300370200203c41106a207e290300370200203c41186a207d290300370200203b20032903a007370200203b41086a208001290300370200203b41106a208101290300370200203b41186a208201290300370200204041386a208601290300370200204041306a208501290300370200204041286a208401290300370200204041206a208301290300370200204041186a2036290300370200204041106a2035290300370200204041086a2008290300370200204020032903e006370200202841186a200341c0066a41186a290200370200202841106a200341c0066a41106a290200370200202841086a200341c0066a41086a290200370200202820032902c006370200201d41086a20032802f00a360200201d20032902e80a370200200341c0086a10c80220232047290200370300202620482902003703002044204b290200370300202b20492902003703002045204d2902003703002043204e290200370300200320132902003703f00c2003201c2902003703d00c20032802f8032105201e20422902003703002027204f290200370300203a205129020037030020042052290200370300202c2053290200370300202d205429020037030020062055290200370300202e2056290200370300202f2057290200370300200320152902003703d00d200320142902003703b00d200320192902003703900d203420502902003703002009206e290200370300200b206f29020037030020012070290200370300200d207129020037030020242072290200370300202520732902003703002003200c2902003703e80a200341e0066a200e109901202a20032903f00c370200202a41086a2023290300370200202a41106a2026290300370200202a41186a2044290300370200203d20032903d00c370200203d41086a202b290300370200203d41106a2045290300370200203d41186a2043290300370200202920032903d00d370200202941086a203a290300370200202941106a2027290300370200202941186a201e290300370200200320053602c008201741186a202d290300370200201741106a202c290300370200201741086a2004290300370200201720032903b00d370200201620032903900d370200201641086a2006290300370200201641106a202e290300370200201641186a202f290300370200200f20032903e80a370200200f41086a2025290300370200200f41106a2024290300370200200f41186a200d290300370200200f41206a2001290300370200200f41286a200b290300370200200f41306a2009290300370200200f41386a2034290300370200202141186a2036290300370000202141106a2035290300370000202141086a2008290300370000202120032903e006370000200341e0066a200341c0086a10c7042009200e41306a290200370300200b200e41286a2902003703002001200e41206a290200370300200d200e41186a2902003703002024200e41106a2902003703002025200e41086a2902003703002003200e2902003703e80a200320393602c00820032802ec01213a20032802e8012123201820032903e006370000201841086a2008290300370000201841106a2035290300370000201841186a2036290300370000202a200341f8036a41e40110c9082144203841086a200341b0066a41086a280200360200203820032903b006370200200320233602c40a2003203a3602c00a2003200a3703b80a2003203e3602b40a200341900d6a41968dc700410d10c501200341b00d6a41a38dc700411310c5012003203f3602a008200341d00c6a200341a0086a410410c701200320413602dc0d2003202b3602d40d2003200341a0086a3602d80d2003200341d00c6a3602d00d200341f00c6a200341d00d6a107e20032802f80c220541206a2208417f4c0d010240024020080d00410121260c010b200810322226450d030b200341003602d80c200320083602d40c200320263602d00c200341d00c6a4100411010c80120032802d00c20032802d80c22086a222620032900900d370000202641086a20062900003700002003200841106a22083602d80c200341d00c6a2008411010c80120032802d00c20032802d80c22086a222620032900b00d370000202641086a20042900003700002003200841106a22263602d80c20032802f00c2108200341d00c6a2026200510c80120032802d00c222620032802d80c22456a2008200510c9081a2003204520056a22053602d80c024020032802f40c450d002008102c0b200341003602d80d200342013703d00d200341d00d6a41004104102f20032802d00d20032802d80d6a2039360000200320032802d80d41046a3602d80d200341d00d6a201810e405200341d00d6a204410c804200341d00d6a203810e305200341d00d6a205c10e305200341d00d6a20032802d80d4104102f20032802d00d20032802d80d6a203a360000200320032802d80d41046a22083602d80d200341d00d6a20084104102f20032802d00d20032802d80d6a2023360000200320032802d80d41046a22083602d80d2026200520032802d00d200810a702024020032802d40d450d0020032802d00d102c0b024020032802d40c450d002026102c0b20032802a80a2105200341013602a80a200341003602ac0a024020032802b00a450d002005102c0b200342013702b40a0240200a428080808010540d00203e102c0b200341c0086a41306a2009290300370300200341c0086a41286a200b290300370300200341c0086a41206a20012903003703002058200d290300370300200341c0086a41106a2024290300370300200341c0086a41086a2025290300370300200320032903e80a3703c008200341900d6a41968dc700410d10c501200341b00d6a41bc92c700411e10c5012003203f3602a008200341d00c6a200341a0086a410410c701200320413602dc0d2003202b3602d40d2003200341a0086a3602d80d2003200341d00c6a3602d00d200341f00c6a200341d00d6a107e20032802f80c220541206a2208417f4c0d010240024020080d00410121090c010b200810322209450d030b200341003602d80c200320083602d40c200320093602d00c200341d00c6a4100411010c80120032802d00c20032802d80c22086a220920032900900d370000200941086a20062900003700002003200841106a22063602d80c200341d00c6a2006411010c80120032802d00c20032802d80c22066a220820032900b00d370000200841086a20042900003700002003200641106a22063602d80c20032802f00c2104200341d00c6a2006200510c80120032802d00c223a20032802d80c22066a2004200510c9081a2003200620056a22233602d80c024020032802f40c450d002004102c0b200341003602d80d200342013703d00d20032802c0082125200341d00d6a20032802c8082201108f012001410c6c210502402001450d00202520056a21062025210403402004280200200441086a280200200341d00d6a10bb012004410c6a22042006470d000b0b20032802cc082124200341d00d6a20032802d408220d108f01200d41047421060240200d450d00202420066a210b20242104034020042802002108200341d00d6a20032802d80d4104102f20032802d00d20032802d80d22096a20083600002003200941046a3602d80d200441046a2802002004410c6a280200200341d00d6a10bb01200441106a2204200b470d000b0b200341d00d6a205810b60520032802e408220b20032802ec08200341d00d6a10bb0120032802f0082104200341d00d6a20032802d80d4104102f20032802d00d20032802d80d22086a20043600002003200841046a22043602d80d20032802f4082108200341d00d6a20044104102f20032802d00d220420032802d80d22096a20083600002003200941046a22083602d80d203a20232004200810a702024020032802d40d450d002004102c0b024020032802d40c450d00203a102c0b02402001450d002025210403400240200441046a280200450d002004280200102c0b2004410c6a2104200541746a22050d000b0b024020032802c4082204450d002004410c6c450d002025102c0b0240200d450d00202441046a210403400240200441046a280200450d002004280200102c0b200441106a2104200641706a22060d000b0b024020032802d00841ffffffff0071450d002024102c0b024020032802d8082204450d0020032802dc08450d002004102c0b024020032802e808450d00200b102c0b02402003280298062204450d00200441c1006c450d00200328029406102c0b200341003602a40620032802a0062104200341013602a006024020032802a806450d002004102c0b204a21060c000b0b103b000b1039000b0240201b450d00201b41047421052010410c6a210403402004417c6a4100360200200441786a220728020021062007410136020002402004280200450d002006102c0b200441106a2104200541706a22050d000b0b0240201a450d002010450d00201a41ffffffff0071450d002010102c0b2011a72204450d00200441ffffff3f71450d002012102c0b024020022802042204450d00200441346c450d002002280200102c0b200110c2020b200341f00d6a24000bfb0301037f02400240200241346c41046a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b2000200336020420002004360200200041086a2203410036020020002002108f0102402002450d002001200241346c6a210520032802002102034020012802002104200020024104102f2000280200200328020022026a20043600002003200241046a2202360200200141046a2802002104200020024104102f2000280200200328020022026a20043600002003200241046a220236020002400240200141086a2d00004101460d00200020024101102f2000280200200328020022026a41003a0000200241016a21020c010b200020024101102f2000280200200328020022026a41013a00002003200241016a2202360200200020024120102f2000280200200328020022046a2202200141096a290000370000200241086a200141116a290000370000200241106a200141196a290000370000200241186a200141216a2900003700002003200441206a22023602002001412c6a2802002104200020024104102f2000280200200328020022026a2004360000200241046a21020b20032002360200200141306a2802002104200020024104102f2000280200200328020022026a20043600002003200241046a2202360200200141346a22012005470d000b0b0f0b103b000b1039000bd34907027f017e087f1d7e287f017e017f23002202210320024180126b41607122022400420021040240024002400240024020002802000e050401020300040b200241f00c6a200041086a10e706200241c00a6a200041c0006a10e706200241a00f6a200041f8006a10e70620024198086a200041b0016a10e706420421040c030b200241f00c6a200041086a10e706420121040c020b200241f00c6a200041086a10e706200241c00a6a200041c0006a10e706420221040c010b200241f00c6a200041086a10e706200241c00a6a200041c0006a10e706200241a00f6a200041f8006a10e706420321040b200241c0006a41c0006a20022903c00a370300200241c0006a41106a200241f00c6a41086a290300370300200241c0006a41186a200241f00c6a41106a290300370300200241c0006a41206a200241f00c6a41186a2205290300370300200241c0006a41286a200241f00c6a41206a2206290300370300200241c0006a41306a200241f00c6a41286a2207290300370300200241c0006a41386a200241f00c6a41306a2208290300370300200241c0006a41c8006a200241c00a6a41086a290300370300200241c0006a41d0006a200241c00a6a41106a290300370300200241c0006a41d8006a200241c00a6a41186a290300370300200241c0006a41e0006a200241c00a6a41206a290300370300200241c0006a41e8006a200241c00a6a41286a290300370300200241c0006a41f0006a200241c00a6a41306a29030037030020022004370340200220022903f00c370348200241c0006a41a8016a200241a00f6a41306a290300370300200241c0006a41a0016a200241a00f6a41286a290300370300200241c0006a4198016a200241a00f6a41206a290300370300200241c0006a4190016a200241a00f6a41186a290300370300200241c0006a4188016a200241a00f6a41106a290300370300200241c0006a4180016a200241a00f6a41086a290300370300200241c0006a41f8006a20022903a00f370300200241c0006a41e0016a20024198086a41306a290300370300200241c0006a41d8016a20024198086a41286a290300370300200241c0006a41d0016a20024198086a41206a290300370300200241c0006a41c8016a20024198086a41186a290300370300200241c0006a41c0016a20024198086a41106a290300370300200241c0006a41b8016a20024198086a41086a290300370300200241c0006a41b0016a200229039808370300200241c0006a41e8016a200141f00110c9082109024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00a8020e0702030406050001060b200241c0006a41f0016a2903004201520d0541012105200241b8026a2d00004101470d05200241ac026a2802002101200241cc0a6a200241bc026a280200360200200241013a00c80a200242013703c00a200220013602f40c200241063a00f00c200241f80c6a200241c0006a41e80110c9081a200241c00a6a200241f00c6a10e806410021064101210a4101210b0c1c0b200241ac026a280200210c20024198046a200241c0006a41e80110c9081a200241f00c6a200241c0006a41f0016a41e80110c9081a20022903f00c210d4200210e200242003703f00c200241f00c6a41386a290300210f200829030021102007290300211120062903002112200241f00c6a41d8006a2903002113200241f00c6a41d0006a2903002114200241f00c6a41c8006a2903002115200241f00c6a41c0006a2903002116200241f00c6a41f8006a2903002117200241f00c6a41f0006a2903002118200241f00c6a41e8006a2903002119200241f00c6a41e0006a290300211a200241f00c6a4198016a290300211b200241f00c6a4190016a290300211c200241f00c6a4188016a290300211d200241f00c6a4180016a290300211e200241f00c6a41b8016a290300211f200241f00c6a41b0016a2903002120200241f00c6a41a8016a2903002121200241f00c6a41a0016a2903002122200241f00c6a41d8016a2903002123200241f00c6a41d0016a2903002124200241f00c6a41c8016a2903002125200241f00c6a41c0016a2903002126200241f00c6a41e0016a290300212720022903f80c210420022903800d21282002200529030022293703b80f200220283703b00f200220043703a80f2002200d3703a00f2004a7210141092105024002400240024002400240200da70e050501020300050b2002419a086a20022d00ab0f3a0000200220022f00a90f3b0198084203210e0c030b2002419a086a20022d00ab0f3a0000200220022f00a90f3b0198080c020b2002419a086a20022d00ab0f3a0000200220022f00a90f3b0198084201210e0c010b2002419a086a20022d00ab0f3a0000200220022f00a90f3b0198084202210e0b200121050b200241a00f6a41306a2206200241c00a6a41306a222a290300370300200241a00f6a41286a2207200241c00a6a41286a222b290300370300200241a00f6a41206a2208200241c00a6a41206a222c290300370300200241a00f6a41186a220a200241c00a6a41186a222d290300370300200241a00f6a41106a220b200241c00a6a41106a222e290300370300200241a00f6a41086a222f200241c00a6a41086a223029030037030020024180066a41026a223120024198086a41026a22322d00003a0000200220022f0198083b018006200220022903c00a3703a00f200241f00c6a10a201200241900e6a22332023370300200241880e6a22342024370300200241800e6a22352025370300200241f80d6a22362026370300200241f00d6a2237201f370300200241e80d6a22382020370300200241e00d6a22392021370300200241d80d6a223a2022370300200241d00d6a223b201b370300200241c80d6a223c201c370300200241c00d6a223d201d370300200241b80d6a223e201e370300200241a80d6a223f2018370300200241f00c6a41306a22402019370300200241f00c6a41286a2241201a370300200241f00c6a41206a22422013370300200241f00c6a41186a22432014370300200241f00c6a41106a22442015370300200241980e6a22452027370300200241a00e6a220120022903a00f370300200241a80e6a2246202f290300370300200241b00e6a200b290300370300200241b80e6a2247200a290300370300200241c00e6a22482008290300370300200241c80e6a22492007290300370300200241d00e6a2006290300370300200220163703f80c200220173703b00d2002200e3703f00c200541ff01714109460d172028422088a7214a2004422088a7214b2028a7214c200241a00f6a410972214d200241c00a6a410172214e0340200241d8116a41026a20312d0000224f3a0000200220022f01800622503b01d811200241a00f6a41026a2251204f3a0000200220503b01a00f0240200541ff01710d00410521050c1a0b204e20022f01a00f3b0000202c2011370300202b2010370300204e41026a20512d00003a0000202a200f370300200220123703d80a200220053a00c00a200220293703d00a2002204a3602cc0a2002204c3602c80a2002204b3602c40a024020024198046a200241c00a6a10e906450d00410a21050c1a0b20022903f00c210d4200210e200242003703f00c203f290300210f2040290300211020412903002111203c2903002113203d2903002114203e29030021152038290300211720392903002118203a2903002119203429030021162035290300211b2036290300211c2046290300211f20012903002120204529030021212049290300211d2048290300211e2047290300212320022903900d211220022903b00d212420022903d00d211a20022903f00d212520022903900e212220022903b00e212620022903d00e212720022903f80c210420022903800d21282002204329030022523703b80f200220283703b00f200220043703a80f2002200d3703a00f2028422088a7214f2004422088a721502028a721512004a7215341092105024002400240024002400240200da70e050501020300050b2032204d41026a2d00003a00002002204d2f00003b0198084203210e20522129204f214a2051214c2050214b0c030b2032204d41026a2d00003a00002002204d2f00003b01980820522129204f214a2051214c2050214b0c020b2032204d41026a2d00003a00002002204d2f00003b0198084201210e20522129204f214a2051214c2050214b0c010b2032204d41026a2d00003a00002002204d2f00003b0198084202210e20522129204f214a2051214c2050214b0b205321050b2006202a2903003703002007202b2903003703002008202c290300370300200a202d290300370300200b202e290300370300202f2030290300370300203120322d00003a0000200220022f0198083b018006200220022903c00a3703a00f200241f00c6a10a2012033201d3703002034201e370300203520233703002037201f37030020392021370300203b2016370300203c201b370300203d201c370300203f201837030020402019370300204220133703002043201437030020442015370300200120022903a00f370300200141086a202f290300370300200141106a200b290300370300200141186a200a290300370300200141206a2008290300370300200141286a2007290300370300200141306a2006290300370300200220263703f80d200220203703e80d200220223703d80d200220253703b80d2002201a3703980d200220243703f80c200220273703980e200220173703b00d2002200e3703f00c200541ff01714109470d000c180b0b20024198046a200241c0006a41e80110c9081a200241c0026a2802002107200241bc026a2802002108200241b8026a280200212c200241c0006a41f0016a280200212b200241ac026a280200212a200241b4026a2802002105200241ec116a4100360200200242003703e011200241003602d811202a20054198026c6a210a202a21012005450d14200241d8116a410c6a2134200241c60a6a2131200241f00c6a410272210b20024198086a410472212f202a21010240034020012802002105200241f00c6a200141046a41940210c9081a02402005410c470d0020014198026a21010c170b20024180066a200241f00c6a41940210c9081a2002200536029808202f20024180066a41940210c9081a200241f00c6a20024198086a20024198046a10ea0620022d00f10c210520022d00f00c2106200241c00a6a200b419e0210c9081a20064101460d01200241a00f6a203141980210c9081a200241f00c6a200241a00f6a41980210c9081a200241d8116a200241f00c6a10eb0620024198086a10ec0620014198026a2201200a470d000b200a21010c150b20024198086a10ec0620014198026a2201200a20016b4198026d10c3020240202b450d00202b4198026c450d00202a102c0b200241c00a6a41086a2201200241d8116a41086a280200360200200220022903d8113703c00a200241f00c6a200241c00a6a10ed06200241f00c6a10ee062001203441086a280200360200200220342902003703c00a200241f00c6a200241c00a6a10ef06200241f00c6a10f006202c200710c40202402008450d00202c450d0020084188026c450d00202c102c0b20024198046a10a2014100210b4101210a0c190b200241f00c6a200241c0006a41e80110c9081a200241c0026a2802002107200241bc026a2802002108200241b8026a2802002101200241c0006a41f0016a2802002106200241ac026a2802002105200241b4026a280200220a450d0f2001200710c40202402008450d002001450d0020084188026c450d002001102c0b2005200a10c30202402006450d002005450d0020064198026c450d002005102c0b200241f00c6a10a201410021014101210a410621054101210b4101210641012107410121080c1c0b200241f00c6a200241c0006a41e80110c9081a200241c0026a2802002107200241bc026a2802002108200241b8026a2802002105200241b4026a2802002101200241c0006a41f0016a280200210a200241ac026a2802002106200241003602a80f200242013703a00f2002412436029c082002200241f00c6a360298082002200241a00f6a36028006200241d40a6a4101360200200242013702c40a200241c0cfc4003602c00a200220024198086a3602d00a20024180066a41dcb7c000200241c00a6a103e1a20023502a80f42208620023502a00f841000024020022802a40f450d0020022802a00f102c0b02402001450d002005200710c40202402008450d002005450d0020084188026c450d002005102c0b2006200110c3020240200a450d002006450d00200a4198026c450d002006102c0b200241f00c6a10a201410021084101210a410721054101210b41012106410121070c1b0b4100212f200241003602c80a2002200a3602c40a200220063602c00a200241186a200241c00a6a10f206200241386a2007360200200241346a200836020020022005360230200241f00c6a10a201200241306a21014101210b0c0f0b20024180066a200241c0006a41e80110c9081a200241c0006a41f0016a2802002106200241a9026a2d00002105200241ac026a28020021012002200241b4026a28020036029c042002200136029804200241a00f6a20024198046a10f30620022802a00f4119460d01200241f00c6a41066a200241a00f6a41a80210c9081a200241c00a6a200241f00c6a41ae0210c9081a20024198086a200241c00a6a41066a41a80210c9081a200241c00a6a20024180066a41e80110c9081a200241f00c6a200241c00a6a200510a703024020022802f00c4101470d00200241c00a6a200241f00c6a41086a41e80110c9081a200241c00a6a10a201410c21052002280298080e1803041010100506100708091010100a101010101010100b0c0d0b200241a00f6a410a6a200241fc0c6a290200370100200241a00f6a41126a200241840d6a290200370100200241a00f6a411a6a2002418c0d6a290200370100200241a00f6a41226a200241940d6a290200370100200220022902f40c3701a20f20024198046a41086a200241a00f6a41086a220529010037030020024198046a41106a200241a00f6a41106a220729010037030020024198046a41186a200241a00f6a41186a220829010037030020024198046a41206a200241a00f6a41206a220a29010037030020024198046a41286a200241a00f6a41286a2f01003b0100200220022901a00f37039804200241d8116a41206a220b20024198046a41226a290100370300200241d8116a41186a222f20024198046a411a6a290100370300200241d8116a41106a223120024198046a41126a290100370300200241d8116a41086a222a20024198046a410a6a2901003703002002200229019a043703d811200241f00c6a20024198086a41a80210c9081a200a200b2903003703002008202f290300370300200720312903003703002005202a290300370300200220022903d8113703a00f200241c00a6a200241f00c6a200241a00f6a10bf02410d21050c0f0b200241c0006a10a2014101210a410321054101210b0c150b02402006450d002001450d002001102c0b20024180066a10a201410b21050c0e0b02400240024002400240024020024198086a41086a280200417e6a0e080012010212030405120b200241a8086a280200450d11410c210520024198086a410c6a280200102c0c110b200241a8086a280200450d10410c210520024198086a410c6a280200102c0c100b200241a8086a280200450d0f410c210520024198086a410c6a280200102c0c0f0b410c210520024198086a410c6a10c1020c0e0b410c21050240200241ac086a2802002208450d0020024198086a410c6a28020021072008410c6c210803400240200741046a280200450d002007280200102c0b2007410c6a2107200841746a22080d000b0b200241a8086a2802002207450d0d2007410c6c450d0d20022802a408102c0c0d0b200241a8086a280200450d0c410c210520024198086a410c6a280200102c0c0c0b0240024020024198086a41086a2802000e020d00010b200241c4086a102b200241b4096a102b0240200241b0086a2802002207450d00200241a8086a28020021052007410c6c210703400240200541046a280200450d002005280200102c0b2005410c6a2105200741746a22070d000b0b410c2105200241ac086a2802002207450d0c2007410c6c450d0c20022802a808102c0c0c0b200241c4086a102b200241b4096a102b0240200241b0086a2802002207450d00200241a8086a28020021052007410c6c210703400240200541046a280200450d002005280200102c0b2005410c6a2105200741746a22070d000b0b410c2105200241ac086a2802002207450d0b2007410c6c450d0b20022802a808102c0c0b0b410c2105024020024198086a410c6a2802002207450d00200741f0006c2108200228029c0841046a210703402007102b200741f0006a2107200841907f6a22080d000b0b200241a0086a2802002207450d0a200741f0006c450d0a200228029c08102c0c0a0b0240024002400240024020024198086a41086a2d00000e180e0e0e0e0e0e000e0e0e0e0e0e0e0e010e0e020e0e0e0e03040b200241a8086a28020041ffffff3f71450d0d410c210520024198086a410c6a280200102c0c0d0b200241a8086a28020041ffffff3f71450d0c410c210520024198086a410c6a280200102c0c0c0b200241ac086a28020041ffffffff0371450d0b200241a8086a280200102c0c0b0b0240200241a8086a28020041808080807872418080808078460d00200241a4086a280200102c0b200241b0086a10e9010c0a0b0240200241a8086a28020041808080807872418080808078460d00200241a4086a280200102c0b200241b0086a10e9010c090b200228029c082207450d08200241a0086a280200450d082007102c0c080b0240024020024198086a41086a280200417f6a0e020001090b0240200241b0086a2802002207450d00200241a8086a28020021052007410c6c210703400240200541046a280200450d002005280200102c0b2005410c6a2105200741746a22070d000b0b410c2105200241ac086a2802002207450d082007410c6c450d0820022802a808102c0c080b0240200241b0086a2802002207450d00200241a8086a28020021052007410c6c210703400240200541046a280200450d002005280200102c0b2005410c6a2105200741746a22070d000b0b410c2105200241ac086a2802002207450d072007410c6c450d0720022802a808102c0c070b0240200241a4086a280200450d00200241a0086a280200102c0b0240200241b4086a2802002207450d00200241ac086a28020021052007410c6c210703400240200541046a280200450d002005280200102c0b2005410c6a2105200741746a22070d000b0b410c2105200241b0086a2802002207450d062007410c6c450d0620022802ac08102c0c060b0240200241a4086a2802002207450d00200228029c082205200741d0006c6a21080340200541046a410036020020052802002107200541013602000240200541086a280200450d002007102c0b200541d0006a22052008470d000b0b0240200241a0086a2802002205450d00200541d0006c450d00200228029c08102c0b200241a8086a10c202410c21050c050b200228029c084101470d040240200241a8086a280200450d00200241a4086a280200102c0b200241b4086a280200450d04200241b0086a280200102c0c040b0240024020024198086a41086a280200417f6a0e03000501050b0240200241ac086a280200450d00200241a8086a280200102c0b200241b8086a280200450d04200241b4086a280200102c0c040b200241a8086a10f7020c030b02400240024020024198086a41086a2d00000e0405000105020b410c210520024198086a410c6a22072802001083022007280200102c0c040b410c210520024198086a410c6a22072802001083022007280200102c0c030b200241c4086a22072802001083022007280200102c0c020b4100210b200241003602c80a200220063602c40a200220053602c00a200241186a200241c00a6a10f206200241386a2007360200200241346a200836020020022001360230200241f00c6a10a201200241306a21014101212f0b410121050c030b2006450d002001450d002001102c0b410021074101210a4101210b410121060c070b2001200a20016b4198026d10c3020240202b450d00202b4198026c450d00202a102c0b200241386a2007360200200241346a2008360200200241186a41106a200241d8116a41106a290300370300200241186a41086a200241d8116a41086a290300370300200220022903d8113703182002202c36023020024198046a10a201200241306a2101410021054101210b4101212f0b200241c00a6a41106a200241186a41106a290300370300200241c00a6a41086a200241186a41086a290300370300200220022903183703c00a2001280200210a0240024002400240024002400240024020022d00a8020e0701020306040005060b200241b0026a10a201200241ac026a220128020010c5022001280200102c0c060b2005450d05200241ac026a280200200241b4026a28020010c3020240200241b0026a2802002201450d0020014198026c450d0020022802ac02102c0b200241b8026a280200200241c0026a28020010c402200241bc026a2802002201450d0520014188026c450d0520022802b802102c0c050b200b450d04200241ac026a280200200241b4026a28020010c3020240200241b0026a2802002201450d0020014198026c450d0020022802ac02102c0b200241b8026a280200200241c0026a28020010c402200241bc026a2802002201450d0420014188026c450d0420022802b802102c0c040b202f450d03200241ac026a280200200241b4026a28020010c3020240200241b0026a2802002201450d0020014198026c450d0020022802ac02102c0b200241b8026a280200200241c0026a28020010c402200241bc026a2802002201450d0320014188026c450d0320022802b802102c0c030b200241b0026a280200450d02200241ac026a280200102c0c020b200241b0026a10a201200241ac026a220128020010c5022001280200102c0c010b200910f7020b200a20074188026c6a2106200a210102402007450d00200241c0006a4104722107200a21010240034020012802002105200241c0006a200141046a41840210c9081a024020054107470d0020014188026a21010c030b200241f00c6a200241c0006a41840210c9081a200220053602402007200241f00c6a41840210c9081a200241c00a6a200241c0006a10f406220541ff0171410d470d0120014188026a22012006470d000b200621010c010b20014188026a2201200620016b4188026d10c40202402008450d0020084188026c450d00200a102c0b200241f00c6a41086a2201200241c00a6a41086a280200360200200220022903c00a3703f00c200241c0006a200241f00c6a10ed06200241c0006a10ee062001200241d40a6a280200360200200220022902cc0a3703f00c200241c0006a200241f00c6a10ef06200241c0006a10f0060c090b2001200620016b4188026d10c40202402008450d0020084188026c450d00200a102c0b200241f00c6a41086a2201200241c00a6a41086a280200360200200220022903c00a3703f00c200241c0006a200241f00c6a10ed06200241c0006a10ee062001200241d40a6a280200360200200220022902cc0a3703f00c200241c0006a200241f00c6a10ef06200241c0006a10f006200010a20120032400410d0f0b200241f00c6a10f50620024180066a20024198046a41e80110c9081a200c2d00002101200241c00a6a200c41016a41ef0110c9081a02402001410a460d00200241a00f6a200241c00a6a41ef0110c9081a20024198086a200241a00f6a41ef0110c9081a200220013a00f00c200241f00c6a41017220024198086a41ef0110c9081a20024180066a200241f00c6a10a80641ff017121050c020b20024198086a200241a00f6a41ef0110c9081a20024180066a10a201410221050c010b200241f00c6a10f50620024198046a10a201200c10f7020b200c102c4101210b4100210a0b410121060b410121070b410121080b410121010b024002400240024002400240024020022d00a8020e0700010206030405060b200b450d06200241ac026a280200200241b4026a28020010c3020240200241b0026a2802002201450d0020014198026c450d0020022802ac02102c0b200241b8026a280200200241c0026a28020010c402200241bc026a2802002201450d0620014188026c450d0620022802b802102c0c060b2001450d05200241ac026a280200200241b4026a28020010c3020240200241b0026a2802002201450d0020014198026c450d0020022802ac02102c0b200241b8026a280200200241c0026a28020010c402200241bc026a2802002201450d0520014188026c450d0520022802b802102c0c050b2008450d04200241ac026a280200200241b4026a28020010c3020240200241b0026a2802002201450d0020014198026c450d0020022802ac02102c0b200241b8026a280200200241c0026a28020010c402200241bc026a2802002201450d0420014188026c450d0420022802b802102c0c040b2007450d03200241b0026a280200450d03200241ac026a280200102c0c030b200241b0026a10a2012006450d02200241ac026a220228020010c5022002280200102c0c020b200a450d01200241b0026a10a201200241ac026a220228020010c5022002280200102c0c010b200910f7020b200010a2012003240020050ba90302087f037e230041306b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f01ba024f0d00200421030c010b034002400240200428020022030d00410021030c010b200541016a210520042f01b80221060b2004102c20032104200620032f01ba024f0d000b0b200320064102746a41046a2802002107200241186a41106a22082003200641186c6a220441c0006a290200370300200241186a41086a2209200441386a2902003703002002200441306a290200370318200641016a210402402005450d00200320044102746a41bc026a280200210302402005417f6a2204450d00034020032802bc0221032004417f6a22040d000b0b410021040b200241106a2008290300220a370300200241086a2009290300220b37030020022002290318220c370300200020073602002000200c3702042000410c6a200b370200200041146a200a3702002001200436020820012003360204200141003602000c010b2000410036020c0b200241306a24000f0b41ecd0c800412b4198d1c800103c000b8a0201057f2000410c6a28020021012000280208210202400240024020002802042203200028020022044f0d0020032105200120044f0d0141b4a0c700412341d8a0c700103c000b4100210520012003490d01200321010b024020012004460d002001410c6c2004410c6c22016b2104200220016a210103400240200141046a280200450d002001280200102c0b2001410c6a2101200441746a22040d000b0b02402005450d002005410c6c210103400240200241046a280200450d002002280200102c0b2002410c6a2102200141746a22010d000b0b02402000410c6a2802002202450d0020002802082201450d002002410c6c450d002001102c0b0f0b2003200141e8a0c700104f000b130020004101360204200041c4e0c3003602000b130020004101360204200041b8e1c3003602000b34002000419ee3c30036020420004100360200200041146a4101360200200041106a41b4e3c300360200200041086a42153702000b890301077f41012102024002402001280208220341016a2204200128020422054d0d000c010b0240024002400240200320054f0d002001280200220620036a2d00002107200120043602080240200741037122084103460d0002400240024020080e03000102000b20074102762108410021020c070b0240200341026a220320054d0d000c070b200120033602082004417f460d03200620046a2d0000410874200772220141ffff0371418002490d06200141fcff03714102762108410021020c060b200341046a220320054b0d05200120033602082004417d4f0d03200620046a22012f0000200141026a2d000041107472410874200772220141808004492102200141027621080c050b0240200741034d0d000c050b200341056a220320054b0d04200120033602082004417c4f0d03200620046a28000022084180808080044921020c040b200320054190c0c800103f000b417f20034198bfc8001059000b200420034198bfc8001059000b200420034198bfc8001059000b20002008360204200020023602000bd00101037f200041ffff03200041ffff03491b22032000413e2003413e491b22006b21042003413f20032000461b20016a2103200241086a2100410121010340024002400240200141ff01714102470d00200321050c010b410021052001410171450d00410021010c010b024002402004450d002004418002490d01200441817e6a210441ff012103410221010c020b0f0b2004417f6a210341022101410021040b200220002802004101102f200228020020002802006a20033a00002000200028020041016a360200200521030c000b0bdd0202057f017e230041206b22022400200241086a2001108702024002402002280208450d00200041003602000c010b024020012802042203200228020c220441076a4103762205490d00024002400240024020050d00410121060c010b200510372206450d01200128020421030b0240024020032005490d0020062001280200200510c90821032001280204220620054f0d01200520064194afc0001058000b2006410020051b2201450d032005450d032001102c0c030b2001200620056b3602042001200128020020056a3602002003450d02200241106a200341c4b5c8002005ad22074220862007842207422088a722011b200110b10620022802144103762004490d01200241106a200410b206200041086a200241106a41086a280200360200200020022903103702002007a7450d032003102c0c030b1039000b41e8e8c30041264190e9c300103c000b200041003602000b200241206a24000be20401037f230041e0006b22032400024002400240024002402002417f4c0d000240024020020d00410121040c010b200210322204450d020b200341003602102003200236020c20032004360208200341086a4100200210c80120032802082204200328021022056a2001200210c9081a2003200520026a220236021020032002360218200241818080204f0d0220032002410374220536021c20024180808020460d034100210102400240024020020e020201000b200541786a41037641016a21010c010b410121010b200320013602202003200420016a220136022420012004490d042000200328020c36020820002002410674220236020420002004410120021b360200200341e0006a24000f0b103b000b1039000b200341346a4102360200200341d4006a41023602002003420237024420034198ecc30036024020034194ecc3003602302003410236022c2003200341286a3602502003200341186a360228200341c0006a41a8ecc3001046000b200341346a4102360200200341d4006a410236020020034202370244200341d4dbc400360240200341d0dbc4003602302003410236022c2003200341286a36025020032003411c6a360228200341c0006a41e4dbc4001046000b200341c0006a41146a4125360200200341c0006a410c6a4126360200200341286a41146a4103360200200341286a410c6a41033602002003418cdcc4003602302003410336022c200341f4dbc400360228200341253602442003200436025c2003200341c0006a3602382003200341246a3602502003200341206a3602482003200341dc006a360240200341286a41ecdcc4001046000ba20201027f230041306b220224002002200136020002400240200141ffffffff014b0d000240200041086a280200220341ffffffff01712003470d00200220034103742203360204200320014f0d022002412c6a41023602002002411c6a41023602002002420237020c200241d0eac300360208200241023602242002200241206a3602182002200241046a36022820022002360220200241086a41e0eac3001046000b4185eac300411841a0eac300105c000b2002412c6a41023602002002411c6a41023602002002420237020c200241b0eac300360208200241d0dbc400360228200241023602242002200241206a36021820022002360220200241086a41c0eac3001046000b20002000280204410771200141037472360204200241306a24000be70202067f017e230041206b22022400200241086a200110b003024002402002280208450d00200041003602000c010b0240200128020022032802042204200228020c220541076a4103762206490d00024002400240024020060d00410121070c010b200610372207450d012001280200220328020421040b0240024020042006490d0020072003280200200610c90821012003280204220420064f0d01200620044194afc0001058000b2007410020061b2201450d032006450d032001102c0c030b2003200420066b3602042003200328020020066a3602002001450d02200241106a200141c4b5c8002006ad22084220862008842208422088a722061b200610b10620022802144103762005490d01200241106a200510b206200041086a200241106a41086a280200360200200020022903103702002008a7450d032001102c0c030b1039000b41e8e8c30041264190e9c300103c000b200041003602000b200241206a24000bbe0101027f02400240024020010d0041012102410021030c010b41012103024020014109490d0041024101200141786a22034107711b20034103766a21030b200310322202450d010b2000200336020820002002360200200041046a220341003602002000200110b2060240200328020022034103762201450d00200028020021024101210002402001410820034107716b22034d0d0041024101200120036b22004107711b20004103766a21000b20024100200010cb081a0b0f0b1039000be00f03067f017e027f23004190016b2202240020012802202103200241f0006a22044200370300200241e8006a22054200370300200241d8006a41086a2206420037030020024200370358200241c0006a41ffdcc700410710c5012006200241c0006a41086a220729000037030020022002290040370358200241c0006a418893c700410a10c5012004200729000037030020052002290040370300200241c0006a200241d8006a10e10120022802402204410120041b21060240024002400240024002400240024020032002290244420020041b2208422088a7490d002008a72203450d01200341ffffff3f71450d012006102c0c010b2003200620034105746a10b606210302402008a72204450d00200441ffffff3f71450d002006102c0b20030d010b200241f0006a4200370300200241e8006a4200370300200241d8006a41086a2203420037030020024200370358200241c0006a41ffdcc700410710c5012003200241c0006a41086a220429000037030020022002290040370358200241c0006a41b8b3c300410c10c501200541086a200429000037000020052002290040370000200241086a200241d8006a412010c601200128021c200228020c410020022802081b2204470d01200241106a10ec02200228021822052001280224470d022005200128022022034b0d0320004180083b0001200041013a0000200041036a41003a00000c040b20004180063b0001200041013a0000200041036a41003a00000c040b20004180063b0001200041013a0000200041036a41003a00000c030b200041800e3b0001200041013a0000200041036a410a3a00000c010b200141286a21072002280210220920034105746a2106200241003602602002420137035820012802002105200241d8006a41004104102f2002280258200228026022036a20053600002002200341046a36026020012802042001410c6a280200200241d8006a10bb01200141106a2802002105200241d8006a200141186a2802002203108f0102402003450d0020052003410c6c6a210303402005280200200541086a280200200241d8006a10bb012005410c6a22052003470d000b0b200128021c2105200241d8006a20022802604104102f2002280258200228026022036a20053600002002200341046a220536026020012802202103200241d8006a20054104102f2002280258200228026022056a20033600002002200541046a220536026020012802242101200241d8006a20054104102f20022802582205200228026022036a20013600002002200341046a22013602602007200520012006102d21010240200228025c450d002005102c0b024002402001450d002002418c016a4108360200200241f8006a4200370300200241f0006a4280808080c0003703002002418dddc70036028801200241013a008001200242043703682002427f370360200242ffffffffffffffffff00370358411010322205450d01200242103702342002200536023020022802880121070240024002400240200228028c01220541c000490d00200541808001490d012005418080808004490d02200241306a41004101102f2002280230200228023822016a41033a00002002200141016a2201360238200241306a20014104102f2002280230200228023822016a20053600002002200141046a220a360238200241306a21010c030b200241306a41004101102f2002280230200228023822016a20054102743a00002002200141016a220a360238200241306a21010c020b200241306a41004102102f2002280230200228023822016a20054102744101723b00002002200141026a220a360238200241306a21010c010b200241306a41004104102f2002280230200228023822016a20054102744102723600002002200141046a220a360238200241306a21010b20024181016a21032001200a2005102f20022802302002280238220a6a2007200510c9081a2002200a20056a2205360238200120054104102f2002280230200228023822056a20043600002002200541046a2205360238200120054120102f2002280230200228023822016a22052006290000370000200541186a200641186a290000370000200541106a200641106a290000370000200541086a200641086a2900003700002002200141206a3602380240200228027c22052002280278470d00200241f4006a2005410110ec01200228027c21050b20022802742005410c6c6a22052002290330370200200541086a200241306a41086a280200360200200241c0006a41086a2205200241d8006a41186a2903003703002002200228027c41016a36027c200241c0006a41106a2201200241d8006a41206a29030037030020022002290368370340200220032900003703302002200341076a29000037003720022903582108200241d8006a41106a22032001290300370300200241d8006a41086a22012005290300370300200220022903403703582002200229003737002720022002290330370320200041106a42ac02370300200041086a2008370300200041306a41013a0000200041186a2002290358370300200041206a2001290300370300200041286a2003290300370300200041003a0000200041316a2002280220360000200041346a2002280023360000200228021441ffffff3f71450d032009102c0c030b20004180083b0001200041013a0000200041036a41003a00000c010b1039000b200228021441ffffff3f71450d002002280210102c0b20024190016a24000bf00501047f23004180016b22022400200241e0006a22034200370300200241d8006a22044200370300200241c8006a41086a420037030020024200370348200241c8006a41ffdcc700410710c501200241ec006a41b8b3c300410c10c5012003200241ec006a41086a2900003703002004200229006c370300200241106a200241c8006a412010c601200241c8006a2002280214410020022802101b2204200010eb0220022802482200200228025010ce0221030240200228024c450d002000102c0b4101210002400240024020030d00200241286a418dddc700410810c501200241ec006a41abedc300410e10c5012002200436027c200241186a200241fc006a410410c701200241d4006a200241fc006a41046a3602002002200241186a41086a36024c2002200241fc006a3602502002200241186a360248200241386a200241c8006a107e200241c8006a200110e40220022802402200200228025022036a41206a2204417f4c0d010240024020040d00410121010c010b200410322201450d030b200241003602202002200436021c20022001360218200241186a4100411010c8012002280218200228022022046a22012002290028370000200141086a200241286a41086a2900003700002002200441106a2204360220200241186a2004411010c8012002280218200228022022046a2201200229006c370000200141086a200241ec006a41086a2900003700002002200441106a220136022020022802382104200241186a2001200010c8012002280218200228022022016a2004200010c9081a2002200120006a220136022020022802482100200241186a2001200310c80120022802182201200228022022056a2000200310c9081a2002200520036a22033602200240200228024c450d002000102c0b0240200228023c450d002004102c0b200241086a2001200310c601200228020c2100200228020821030240200228021c450d002001102c0b200341004720004100477121000b20024180016a240020000f0b103b000b1039000bfa0507017f017e097f017e027f017e017f230041206b2201240002400240101a2202422088a722030d004101210441002103410121050c010b2002a72105410021040b2001200336020c2001200536020802402003450d0020052d0000210620012003417f6a36020c2001200541016a360208024002400240024020060e020001040b200141106a200141086a10af0820012802102207450d03200141186a2802002108200128021421092001200141086a10870220012802000d02024002402001280204220a200128020c410c6e22032003200a4b1bad420c7e2202422088a70d002002a72203417f4c0d000240024020030d00410421060c010b200310322206450d020b2003410c6ead210202400240200a450d000340200141106a200141086a10af0802402001280210220b0d0002402002422088a72203450d002003410c6c210a2006210303400240200341046a280200450d002003280200102c0b2003410c6a2103200a41746a220a0d000b0b2002a72203450d082003410c6c450d082006102c0c080b2001290214210c02402002422088a722032002a7470d00200341016a220d2003490d042003410174220e200d200d200e491b220d4104200d41044b1bad420c7e220f422088a7220e0d04200fa7220d4100480d04200e45410274210e2003410c6c201020031b2110024002400240024002402006410020031b22030d00200d450d010c030b20100d01200d0d020b200e21060c020b20032010200d103522060d010c050b200d10322206450d040b200242808080807083200d410c6ead8421020b20062002422088a7410c6c6a2203200c3702042003200b36020020024280808080107c2102200a417f6a220a0d000b0b2006450d0520070d040c060b200e0d010b103b000b1039000b410021070b2000200936020420002007360200200041106a20023702002000410c6a2006360200200041086a2008360200024020040d002005102c0b200141206a24000f0b2009450d002007102c0b41f2b3c800412e200141106a41a0b4c80041b0b4c8001040000bea0904017f017e067f067e230041d0036b22052400200520013602040240200541046a20022004ad4220862003ad84100d2206422088a72203450d0041002102200541086a21070240024002402006a722082d00000e020100030b41002102200541003a00c8022003417f6a2104200841016a210102400240034020042002460d0120054188026a20026a200120026a2d00003a00002005200241016a22033a00c80220032102200341c000460d020c000b0b200241ff0171450d02200541003a00c8020c020b200541d0026a41086a220220054188026a41086a290300370300200541d0026a41106a220420054188026a41106a290300370300200541d0026a41186a220120054188026a41186a290300370300200541d0026a41206a220920054188026a41206a290300370300200541d0026a41286a220a20054188026a41286a290300370300200541d0026a41306a220b20054188026a41306a290300370300200541d0026a41386a220c20054188026a41386a29030037030020052005290388023703d002200341ff0171413f4d0d01200541c8016a41386a2203200c290300370300200541c8016a41306a200b2903002206370300200541c8016a41286a200a290300220d370300200541c8016a41206a2009290300220e370300200541c8016a41186a2001290300220f370300200541c8016a41106a20042903002210370300200541c8016a41086a20022903002211370300200520052903d00222123703c80120054188016a41306a2202200637030020054188016a41286a2204200d37030020054188016a41206a2201200e37030020054188016a41186a2209200f37030020054188016a41106a220a201037030020054188016a41086a220b201137030020054188016a41386a220c20032903003703002005201237038801200541c8006a41386a2203200c290300370300200541c8006a41306a220c2002290300370300200541c8006a41286a22022004290300370300200541c8006a41206a22042001290300370300200541c8006a41186a22012009290300370300200541c8006a41106a2209200a290300370300200541c8006a41086a220a200b2903003703002005200529038801370348200541086a41386a2003290300370300200541086a41306a200c290300370300200541086a41286a2002290300370300200541086a41206a2004290300370300200541086a41186a2001290300370300200541086a41106a2009290300370300200541086a41086a200a29030037030020052005290348370308410121020b200020023a000020002007290000370001200041096a200741086a290000370000200041116a200741106a290000370000200041196a200741186a290000370000200041216a200741206a290000370000200041296a200741286a290000370000200041316a200741306a290000370000200041396a200741386a2900003700002008102c200541d0036a24000f0b200541c8006a41086a20054188016a41086a290300370300200541c8006a41106a20054188016a41106a290300370300200541c8006a41186a20054188016a41186a290300370300200541c8006a41206a20054188016a41206a290300370300200541c8006a41286a20054188016a41286a290300370300200541c8006a41306a20054188016a41306a2903003703000b41f2b3c800412e20054188026a41a0b4c80041b0b4c8001040000b8d0804057f017e047f017e230041b0016b22022400024002402000410c6a2802002203417f4c0d0020002802002104200028020421050240024020030d00410121060c010b200310322206450d020b200241003602a0012002200336029c01200220063602980120024198016a4100200310c80120022802980120022802a00122066a2005200310c9081a2002200620036a3602a001200041186a2802002203ad420c7e2207422088a70d002007a72205417f4c0d00200028021021060240024020050d00410421080c010b200510322208450d020b2002410036029001200220083602880120022005410c6e36028c0120024188016a4100200310ec01200228029001210802402003450d0020062003410c6c6a21092002280288012008410c6c6a21050340200641086a2802002203417f4c0d022006280200210a0240024020030d004101210b0c010b20031032220b450d040b200241003602102002200336020c2002200b360208200241086a4100200310c80120022802082002280210220b6a200a200310c9081a200541086a200b20036a36020020052002290308370200200841016a21082005410c6a21052006410c6a22062009470d000b0b20024198016a41146a2203200836020020022002290388013702a401200241f0006a41086a20024198016a41086a2903002207370300200241f0006a41106a20024198016a41106a290300220c370300200241086a410c6a2007370200200241086a41146a200c37020020022002290398012207370370200220043602082002200737020c200029021c21072002200028022436022c20022007370224200241086a41e0006a200041e0006a290200370300200241086a41d8006a200041d8006a290200370300200241086a41d0006a200041d0006a290200370300200241086a41c8006a200041c8006a290200370300200241086a41c0006a200041c0006a290200370300200241086a41386a200041386a290200370300200241086a41306a200041306a29020037030020022000290228370330200241f0006a410c6a412736020020024104360274200241b8f2c3003602702001411c6a28020021062002200241086a36027820012802182105200341023602002002420237029c01200241c0f2c300360298012002200241f0006a3602a8012005200620024198016a103e21050240200228020c4100200241086a41086a28020022031b2206450d002003450d002006102c0b0240200241206a2802002206450d00200241086a41106a28020021032006410c6c210603400240200341046a280200450d002003280200102c0b2003410c6a2103200641746a22060d000b0b0240200228021841002002411c6a28020022031b2206450d002003410c6c450d002006102c0b200241b0016a240020050f0b103b000b1039000b1d0020004101472002ad4220862001ad842004ad4220862003ad8410190b980201027f230041206b220224002002200128021841c4b5c80041002001411c6a28020028020c1100003a00102002200136020841012101200241013a00112002410036020c200220003602182002200041286a36021c200241086a200241186a41d0f2c30010662002411c6a41e0f2c30010661a20022d0010210002400240200228020c22030d00200021010c010b0240200041ff01710d00024020034101470d0020022d001141ff0171450d00200228020822002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d010b2002280208220128021841c5c7c50041012001411c6a28020028020c11000021010b200220013a00100b200241206a2400200141ff01714100470b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000baf0c01107f230041a0036b2202240002400240024020012802082203200128020c460d0020012802102104200241b4026a2105200241e0026a41206a2106200241c8016a4104722107200241d0006a4104722108200241106a41386a2109200241106a41306a210a200241106a41286a210b03402001200341206a36020820082003290000370000200841086a200341086a290000370000200841106a200341106a290000370000200841186a200341186a29000037000020022004360250024002402004200810b606450d002001200128021041016a22043602100c010b200241c8016a41206a200241d0006a41206a280200360200200241c8016a41186a200241d0006a41186a290300370300200241c8016a41106a200241d0006a41106a290300370300200241c8016a41086a200241d0006a41086a290300370300200220022903503703c801200241f0016a41186a2203200741186a220c290000370300200241f0016a41106a220d200741106a220e290000370300200241f0016a41086a220f200741086a2210290000370300200220072900003703f001200241e0026a41186a2204200c290000370300200241e0026a41106a220c200e290000370300200241e0026a41086a220e2010290000370300200220072900003703e00220024190026a200241e0026a10a304200241c0026a41186a22102003290300370300200241c0026a41106a2211200d290300370300200241c0026a41086a220d200f290300370300200220022903f0013703c0020240024020022802b00222030d00410021030c010b2006200229039002370300200641186a20024190026a41186a290300370300200641106a20024190026a41106a290300370300200641086a20024190026a41086a29030037030020042010290300370300200c2011290300370300200e200d290300370300200241f8006a41086a200541086a280200360200200220022903c0023703e0022002200529020037037820024188016a41386a200241e0026a41386a29030037030020024188016a41306a200241e0026a41306a29030037030020024188016a41286a200241e0026a41286a29030037030020024188016a41206a200629030037030020024188016a41186a200429030037030020024188016a41106a200c29030037030020024188016a41086a200e290300370300200220022903e002370388010b0240024020030d0020094200370300200a4200370300200b4200370300200241106a41206a4200370300200241106a41186a4200370300200241106a41106a4200370300200241106a41086a4200370300200241086a410036020020024200370310200242003703000c010b200920024188016a41386a290300370300200a20024188016a41306a290300370300200b20024188016a41286a290300370300200241106a41206a20024188016a41206a290300370300200241106a41186a20024188016a41186a290300370300200241106a41106a20024188016a41106a290300370300200241106a41086a20024188016a41086a290300370300200241086a200241f8006a41086a2802003602002002200229038801370310200220022903783703000b2001200128021041016a220436021020030d030b20012802082203200128020c470d000b0b200041003602400c010b200241e0026a41386a2201200241106a41386a290300370300200241e0026a41306a2208200241106a41306a290300370300200241e0026a41286a2204200241106a41286a290300370300200241e0026a41206a2207200241106a41206a290300370300200241e0026a41186a2206200241106a41186a290300370300200241e0026a41106a220c200241106a41106a290300370300200241e0026a41086a220e200241106a41086a29030037030020024188016a41086a220d200241086a280200360200200220022903103703e0022002200229030037038801200041386a2001290300370300200041306a2008290300370300200041286a2004290300370300200041206a2007290300370300200041186a2006290300370300200041106a200c290300370300200041086a200e290300370300200020022903e002370300200020033602402000200229038801370244200041cc006a200d2802003602000b200241a0036a24000be00304027f017e057f077e230041306b220224000240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021014108210602402005450d00200510322206450d020b20002006360200200041086a22064100360200200041046a200541d0006e36020020004100200310d6042006280200210502402003450d002001200341d0006c6a21072000280200200541d0006c6a21030340200241106a41086a2206200141086a290300370300200241106a41106a2208200141106a290300370300200241106a41186a2209200141186a29030037030020022001290300370310200141206a2903002104200141286a290300210a200141306a290300210b200141386a290300210c2002200141c0006a10a5022009290300210d2008290300210e2006290300210f20022903102110200341386a200c370300200341306a200b370300200341286a200a370300200341206a2004370300200341086a200f37030020032010370300200341106a200e370300200341186a200d370300200341c0006a2002290300370300200341c8006a200241086a280200360200200341d0006a2103200541016a2105200141d0006a22012007470d000b0b200041086a2005360200200241306a24000f0b103b000b1039000bb20201047f230041106b22022400024002402001280208220341146a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b200241003602082002200436020420022005360200200241004110102f2002280200200228020822046a2205200129000c370000200541086a200141146a2900003700002002200441106a36020820012802002003200210bb01200128021c2101200220022802084120102f2002280200200228020822036a22042001290000370000200441086a200141086a290000370000200441106a200141106a290000370000200441186a200141186a2900003700002002200341206a360208200141206a200210f8032000200228020022012002280208109a0102402002280204450d002001102c0b200241106a24000f0b103b000b1039000b7301027f024020002802042201450d0020002802002202450d002001450d002002102c0b0240200041106a2802002201450d00200028020c2202450d00200141ffffff3f71450d002002102c0b02402000411c6a2802002201450d0020002802182200450d00200141246c450d002000102c0b0b13002000410136020420004198f3c3003602000b34002000418dddc70036020420004100360200200041146a4104360200200041106a41f4f7c300360200200041086a42083702000b130020004102360204200041c484c4003602000bd80101047f024002400240200041046a28020020002802082201470d00200141016a22022001490d02200141017422032002200320024b1b22024104200241044b1b220241ffffffff037122042002470d02200241027422034100480d0220042002464102742104024002400240024002402000280200410020011b22020d002003450d010c030b200141027422010d0120030d020b200421010c020b200220012003103522010d010c030b200310322201450d020b20002001360200200041046a20034102763602000b0f0b2004450d001039000b103b000bdf0101087f0240200028020022020d0041000f0b2000280204210320012d002041ff01712104037f200241346a210020022f01322105410021060240024003400240200520062207470d00200521070c030b02400240024020012000412010cc082206450d00410121082006417f4c0d050c010b2004200041206a2d00002206460d01417f200420064720042006491b21080b200741016a2106200041216a210041012109200841016a0e03030201030b0b410121090b20090f0b024020030d0041000f0b2003417f6a2103200220074102746a41a0036a28020021020c000b0bae0401097f230041a0036b2203240002400240024020012802002204450d00200128020421050c010b41a00310322204450d014100210520044100360200200420032902f002370204200441003b01322004410c6a200341f8026a290200370200200441146a20034180036a2902003702002004411c6a20034188036a290200370200200441246a20034190036a2902003702002004412a6a20034196036a290100370100200441346a200341ec0210c9081a20014100360204200120043602000b20022d002041ff0171210602400340200441346a210720042f013221084100210902400340024020082009220a470d002008210a0c020b02400240024020022007412010cc082209450d004101210b2009417f4c0d040c010b2006200741206a2d00002209460d01417f200620094720062009491b210b0b200a41016a2109200741216a2107200b41016a0e03020001020b0b20002005360204200041106a20013602002000410c6a200a360200200041086a2004360200410121070c020b02402005450d002005417f6a21052004200a4102746a41a0036a28020021040c010b0b4100210720004100360204200041106a20013602002000410c6a200a360200200041086a2004360200200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a290000370000200041346a200241206a2d00003a00000b20002007360200200341a0036a24000f0b1039000bb71a02277f047e230041d0046b22022400200028020821032000280200210420002802042105200241d8006a41206a2206200041306a2d00003a0000200241d8006a41186a2207200041286a290000370300200241e8006a2208200041206a290000370300200241d8006a41086a2209200041186a290000370300200220002900103703580240024002400240024002400240024020052f0132220a410b490d00410521064100210b02400240200341054f0d0041042106200321070c010b41052107024002402003417b6a0e020201000b200341796a21074101210b410621060c010b410021074101210b0b41a0031032220c450d03200c4100360200200c200229028001370204200c41003b0132200c410c6a20024180016a41086a2208290200370200200c41146a20024180016a41106a2209290200370200200c411c6a20024180016a41186a220a290200370200200c41246a20024180016a41206a220d290200370200200c412a6a200241a6016a220e290100370100200c41346a200241b0016a41ec0210c908210f200241306a41086a22102005200641216c6a2203413c6a290000370300200241306a41106a2211200341c4006a290000370300200241306a41186a2212200341cc006a290000370300200241306a41206a2213200341d4006a2d00003a00002002200341346a290000370330200520064102746a221441046a2802002115200f200341d5006a20052f01322006417f736a220341216c10c9081a200c41046a201441086a200341027410c9081a200520063b0132200c20033b0132200c2005200b1b2203200741216c6a220641d5006a200641346a220b20032f013220076b41216c10ca081a200641d4006a200241d8006a41206a22162d00003a0000200641cc006a200241d8006a41186a2217290300370000200641c4006a200241d8006a41106a22182903003700002006413c6a200241d8006a41086a2219290300370000200b2002290358370000200320074102746a220641086a200641046a221a20032f013220076b41027410ca081a201a2001360200200320032f013241016a3b0132200241086a41206a221b20132d00003a0000200241086a41186a221c2012290300370300200241086a41106a221d2011290300370300200241086a41086a221e20102903003703002002200229033037030802400240200528020022030d00410021040c010b410021060340200c211f201521202005210c20032105200c2f013021012016201b2d00003a00002017201c2903003703002018201d2903003703002019201e2903003703002002200229030837035820042006470d0602400240024020052f0132220c410b490d004100212141042107024020014105490d0020012107024002402001417b6a0e020201000b200141796a210141012121410621070c010b4100210141012121410521070b41d0031032220c450d08200441016a210441002103200c4100360200200c200229028001370204200c41003b0132200c410c6a2008290200370200200c41146a2009290200370200200c411c6a200a290200370200200c41246a200d290200370200200c412a6a200e290100370100200c41346a200241b0016a419c0310c9082122200241b0016a41206a220b200541346a2223200741216c6a220641206a2d00003a0000200241b0016a41186a220f200641186a290000370300200241b0016a41106a2214200641106a290000370300200241b0016a41086a2224200641086a290000370300200220062900003703b001200541046a2225200741027422266a28020021152022200641216a20052f013222272007417f736a220641216c10c9082128200c41046a2025202641046a22226a200641027410c9082126200520073b0132200c20063b0132200d200b2d00003a0000200a200f2903003703002009201429030037030020082024290300370300200220022903b00137038001200c41a0036a200520226a41a0036a202720076b41027410c908212202400340200c20034102746a41a0036a280200220720033b01302007200c3602002003200320064922076a220320064b0d0120070d000b0b200b200d2d000022033a0000200f200a290300222937030020142009290300222a37030020242008290300222b3703002002200229038001222c3703b001200d20033a0000200a20293703002009202a3703002008202b3703002002202c370380012021450d012001410274220720226a41086a2022200141016a2203410274220b6a2206200c2f013220016b41027410ca081a2006201f3602002028200141216c6a220641216a2006200c2f013220016b41216c10ca081a200641206a20162d00003a0000200641186a2017290300370000200641106a2018290300370000200641086a2019290300370000200620022903583700002026200b6a202620076a2206200c2f013220016b41027410ca081a20062020360200200c200c2f013241016a22063b01322003200641ffff037122064b0d020340200c20034102746a41a0036a280200220720033b01302007200c360200200320032006496a220720064b0d03200320064f2101200721032001450d000c030b0b20014102742206200541a0036a22076a41086a2007200141016a220341027422086a2207200c20016b2209410274220a10ca081a2007201f3602002005200141216c6a220c41d5006a200c41346a2207200941216c10ca081a200c41d4006a200241f8006a2d00003a0000200c41cc006a200241f0006a290300370000200c41c4006a200241e8006a290300370000200c413c6a200241d8006a41086a29030037000020072002290358370000200541046a220c20086a200c20066a220c200a10ca081a200c2020360200200520052f013241016a220c3b01322001200c41ffff0371220c4f0d050340200520034102746a41a0036a280200220620033b01302006200536020020032003200c496a2206200c4b0d062003200c4f2107200621032007450d000c060b0b20014102742207200541a0036a22066a41086a2006200141016a2203410274220b6a220620052f013220016b41027410ca081a2006201f3602002023200141216c6a220641216a200620052f013220016b41216c10ca081a200641206a20162d00003a0000200641186a2017290300370000200641106a2018290300370000200641086a2019290300370000200620022903583700002025200b6a202520076a220620052f013220016b41027410ca081a20062020360200200520052f013241016a22063b01322003200641ffff037122064b0d000340200520034102746a41a0036a280200220720033b0130200720053602002003200320064922076a220320064b0d0120070d000b0b201b200d2d00003a0000201c200a290300370300201d2009290300370300201e2008290300370300200220022903800137030820042106200528020022030d000b0b2013201b2d000022033a00002012201c29030022293703002011201d290300222a3703002010201e290300222b37030020022002290308222c370330201620033a0000201720293703002018202a3703002019202b3703002002202c370358200028020c2206280200450d0541d00310322203450d03200341003602002003200229028001370204200341003b01322003410c6a20024180016a41086a290200370200200341146a20024180016a41106a2902003702002003411c6a20024180016a41186a290200370200200341246a20024180016a41206a2902003702002003412a6a200241a6016a290100370100200341346a200241b0016a419c0310c9081a2003200628020022073602a0032006200336020020062006280204220541016a360204200741003b013020072003360200200241b0016a41206a200241d8006a41206a2d00003a0000200241b0016a41186a200241d8006a41186a290300370300200241b0016a41106a200241d8006a41106a290300370300200241b0016a41086a200241d8006a41086a290300370300200220022903583703b00120052004470d0620032f01322205410a4b0d072003200541016a22013b01322003200541216c6a220741346a20022903b0013700002007413c6a200241b8016a290300370000200741c4006a200241c0016a290300370000200741cc006a200241c8016a290300370000200741d4006a200241d0016a2d00003a0000200320054102746a41046a2015360200200320014102746a41a0036a200c360200200c2003360200200c20013b01302006200628020841016a3602080c020b2005200341216c6a220c41d5006a200c41346a220d200a20036b41216c10ca081a200c41d4006a20062d00003a0000200c41cc006a2007290300370000200c41c4006a2008290300370000200c413c6a2009290300370000200d2002290358370000200520034102746a220c41086a200c41046a221a20052f013220036b41027410ca081a201a2001360200200520052f013241016a3b01320b200028020c2203200328020841016a3602080b200241d0046a2400201a0f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b5a01017f024020002802002201450d0020012001280200417f6a360200200028020022012802000d002001410c6a10c806200028020041046a22012001280200417f6a3602002000280200220041046a2802000d002000102c0b0bfe08010b7f230041306b22022400200241003602102002420437030820024100360220200242043703180240024002400240200128020041016a220341014d0d0020012003360200200241086a410041011095022002280208200228021022034102746a20013602002002200341016a360210200128020041016a220341014d0d0020012003360200200241186a4100410110950220022802182204200228022022034102746a20013602002002200341016a22053602202001280200220341016a220641014d0d00200120063602002003417d4b0d00200341026a21060340200122072006360200200728020841016a220141004c0d022007200136020802400240200728020c2203450d0020054102742106200341106a210820022802182204210903402006450d020240200928020022012003460d00200128020841016a220a41004c0d072001200a3602082003280208220a41016a220b41004c0d08200941046a21092003200b360208200141106a2008412010cc08210b20012d0030210c2003200a36020820032d0030210a20012001280208417f6a3602082006417c6a2106200b0d01200c41ff0171200a41ff0171470d010b0b20072802002106200728020821010b20072006417f6a220336020020072001417f6a360208024020030d002007410c6a10c806200741046a22012001280200417f6a220136020020010d002007102c0b20002007360200200020022903083702042000410c6a200241106a28020036020002402005450d0020054102742103200421010340200128020022062006280200417f6a3602000240200128020022062802000d002006410c6a10c806200128020041046a22062006280200417f6a3602002001280200220641046a2802000d002006102c0b200141046a21012003417c6a22030d000b0b024020044100200228021c22011b2203450d00200141ffffffff0371450d002003102c0b200241306a24000f0b200728020c220328020041016a220141014d0d0120032001360200024020022802102201200228020c470d00200241086a20014101109502200228021021010b200228020820014102746a20033602002002200141016a360210200728020c220128020041016a220341014d0d012001200336020020072007280200417f6a2203360200024020030d002007410c6a10c806200741046a22032003280200417f6a220336020020030d002007102c0b200128020041016a220341014d0d0120012003360200024020022802202203200228021c470d00200241186a20034101109502200228022021030b2002280218220420034102746a200136020020072007280200417f6a220636020020072007280208417f6a3602082002200341016a2205360220024020060d002007410c6a10c806200741046a22032003280200417f6a220336020020030d002007102c0b200128020041016a220641024f0d000b0b00000b41fcaec8004118200241286a41f8e8c40041d8ebc4001040000b41fcaec8004118200241286a41f8c5c0004198e9c4001040000b41fcaec8004118200241286a41f8c5c00041a8e9c4001040000bab0201057f230041106b22022400410021030240024002402000280208220441016a220541004c0d00200020043602080240200028020c2204450d00200020053602080240024020042001470d00410121030c010b200428020841016a220541004c0d03200420053602082001280208220541016a220341004c0d0420012003360208200441106a200141106a412010cc08210320042d003021062001200536020820012d0030210120042004280208417f6a3602082003452006200146712103200028020821050b20002005417f6a3602080b200241106a240020030f0b41fcaec8004118200241086a41f8e8c4004188e9c4001040000b41fcaec8004118200241086a41f8e8c4004198e9c4001040000b41fcaec8004118200241086a41f8e8c40041a8e9c4001040000bcc0301097f230041306b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f01324f0d00200421030c010b034002400240200428020022030d00410021030c010b200541016a210520042f013021060b2004102c20032104200620032f01324f0d000b0b200241086a41206a22072003200641216c6a220441d4006a2d00003a0000200241086a41186a2208200441cc006a290000370300200241086a41106a2209200441c4006a290000370300200241086a41086a220a2004413c6a2900003703002002200441346a290000370308200641016a2104200320064102746a41046a280200210602402005450d00200320044102746a41a0036a280200210302402005417f6a2204450d00034020032802a00321032004417f6a22040d000b0b410021040b20002002290308370000200041206a20072d00003a0000200041186a2008290300370000200041106a2009290300370000200041086a200a290300370000200120043602082001200336020420014100360200200041246a20063602000c010b200041023a00200b200241306a24000f0b41ecd0c800412b4198d1c800103c000be40b02087f067e230041b0036b2203240020034190036a41186a2204420037030020034190036a41106a2205420037030020034190036a41086a22064200370300200342003703900341062107200341d8016a41c1dcc700410610c5012006200341d8016a41086a2208290000370300200320032900d80137039003200341d8016a41f8ccc600411010c50120042008290000370300200520032900d801370300200341086a20034190036a412010c601410021090240417f200328020c410020032802081b220a20026a22022002200a491b220a418080c002418080f001200141ff017122021b4b0d00200341106a109b012004420037030020054200370300200642003703002003420037039003200341d8016a41c1dcc700410610c50120062008290000370300200320032900d80137039003200341d8016a41c4ccc600410b10c501200541086a2008290000370000200520032900d801370000200341d8016a20034190036a108503200341d8016a41186a290300210b200341d8016a41106a290300210c20032903e001210d20032903d801210e200341d8016a200341106a41b80110c9081a2003200d4200200e42015122061b370390032003200c420020061b3703d0012003200b420020061b3703c801024002400240024020020e03010200010b427f2000200341d8026a22062903007c220b200b2000541b210b0c020b427f200020032903e8017c220b200b2000541b210b200341e8016a21060c010b427f2000200341a0026a22062903007c220b200b2000541b210b0b024002400240024002402006290318220c4201510d0020062903284201520d010b200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008290300220d200b7c220b200d540d022008200b3703000c010b200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008427f2008290300220d200b7c220b200b200d541b3703000b200341c8016a2108024002400240200141ff01710e03000102000b20034190036a21080c010b200341d0016a21080b2008290300210e0240200c4201520d00200e200641206a290300560d010b0240427f427f200329039003220b20032903d001220c7c220d200d200b541b220f20032903c801220d7c22102010200f541b20032903e001580d0020062903284201520d00200e200641306a290300560d010b41002106410021070c010b41062107410121060b20060d00200341d8016a109b010240024002400240200141ff01710e03010200010b200341d8026a21010c020b200341e8016a21010c010b200341a0026a21010b024020012903084201520d0041062107200141106a2903002000540d010b200341a8036a2208420037030020034190036a41106a2207420037030020034190036a41086a220142003703002003420037039003200341d8016a41c1dcc700410610c5012001200341d8016a41086a2206290000370300200320032900d80137039003200341d8016a41f8ccc600411010c501200541086a22042006290000370000200520032900d8013700002003200a3602d80120034190036a4120200341d8016a410410a7022008420037030020074200370300200142003703002003420037039003200341d8016a41c1dcc700410610c50120012006290000370300200320032900d80137039003200341d8016a41c4ccc600410b10c50120042006290000370000200520032900d801370000200341003602e001200342013703d801200341d8016a41004108102f20032802d80120032802e00122056a200b3700002003200541086a22053602e001200341d8016a20054108102f20032802d80120032802e00122056a200c3700002003200541086a22053602e001200341d8016a20054108102f20032802d801220520032802e00122016a200d3700002003200141086a22013602e00120034190036a41202005200110a702024020032802dc01450d002005102c0b410221090b200341b0036a240020074108742009720b9a1508067f027e027f0a7e017f027e027f037e23004180046b2206240002400240024002402002200384500d00200641306a41c1dcc700410610c501200641e8016a41acc8c700410710c50120064180016a200110d502200628028801220741206a2208417f4c0d020240024020080d00410121090c010b200810322209450d040b4100210a200641003602282006200836022420062009360220200641206a4100411010c8012006280220200628022822086a22092006290030370000200941086a200641306a41086a2900003700002006200841106a2208360228200641206a2008411010c8012006280220200628022822086a220920062900e801370000200941086a200641e8016a41086a2900003700002006200841106a22083602282006280280012109200641206a2008200710c801200628022022082006280228220b6a2009200710c9081a2006200b20076a22073602280240200628028401450d002009102c0b200641306a2008200710d6022006290330210c4200210d20064200370330200641fc006a280200210e200641f8006a280200210f02400240200c4201510d004101210b420021104200211142002112420021134200211442002115420021160c010b200641e8006a2903002114200641e0006a2903002113200641d8006a2903002112200641d0006a290300210d200641c8006a290300211020062903402116200629033821154101210a4100210b200629037021110b024002400240024002400240201520027d2217201556201620037d2015200254ad7d221820165620182016511b0d00201720107c221942ffc7afa025562018200d7c2019201754221aad7c221b420052201b501b0d02201520107c221c4280c8afa0255441002016200d7c201c201554ad7c501b0d0220050d02200641e8016a410610d7020c010b200641e8016a410410d7020b20062902ec01211520062802e80121050c010b20064180016a41c1dcc700410610c501200641e8016a41acc8c700410710c501200641d8016a200110d50220062802e001220941206a2205417f4c0d050240024020050d004101211d0c010b20051032221d450d070b200641003602d001200620053602cc012006201d3602c801200641c8016a4100411010c80120062802c80120062802d00122056a221d200629008001370000201d41086a20064180016a41086a2900003700002006200541106a22053602d001200641c8016a2005411010c80120062802c80120062802d00122056a221d20062900e801370000201d41086a200641e8016a41086a2900003700002006200541106a221d3602d00120062802d8012105200641c8016a201d200910c80120062802c801221d20062802d001221e6a2005200910c9081a2006201e20096a22093602d001024020062802dc01450d002005102c0b200641e8016a201d200910d60220062903e801420151210920064198026a290300211520064190026a2903002116200641a8026a290300211f200641a0026a2903002120024020062802cc01450d00201d102c0b2015420020091b211c2016420020091b2121201f420020091b21152020420020091b211602400240024041004102410120044101711b200441ff01714101461b0e03020100020b201c20152021201656201c201556201c2015511b22091b21152021201620091b21160c010b20212116201c21150b2016201756201520185620152018511b450d01200641b8016a410210d70220062d00b80122094104460d0120062902bc01211520062f00b90120062d00bb014110747241087420097221050b20154280807c8321162015420888a721072015a72109410121040c010b200641a8016a22042013370300200641b0016a22052014370300200620103703900120064198016a200d370300200620123703a0012006201737038001200620183703880102400240427f2019201a201b201854201b2018511b22091b22164280c8afa025544100427f201b20091b221b501b0d0020064190016a29030021162005290300210d20042903002110200641a0016a290300211b200629038801211220062903800121134201211520062903980121140c010b0240024020172010842018200d848450450d00420021150c010b42002115200641e8016a41186a22044200370300200641e8016a41106a22054200370300200641e8016a41086a22094200370300200642003703e801200641d8016a41d4dcc700410810c5012009200641d8016a41086a221a290000370300200620062900d8013703e801200641d8016a41bba8c700410d10c5012004201a290000370300200520062900d801370300200641086a200641e8016a412010d301200641086a41106a290300210d200629031021102006280208211d200442003703002005420037030020094200370300200642003703e801200641d8016a41d4dcc700410810c5012009201a290000370300200620062900d8013703e801200641d8016a41bba8c700410d10c5012004201a290000370300200520062900d80137030020064200200d4200201d1b220d201b7d20104200201d1b2210201654ad7d2212201020167d22132010562012200d562012200d511b22041b3703e00120064200201320041b3703d801200641e8016a4120200641d8016a411010a702200641a0026a201b37030020064198026a2016370300200941013a0000200641f9016a200141086a29000037000020064181026a200141106a29000037000020064189026a200141186a290000370000200641023602e801200620012900003700f101200641e8016a10c8020b0b200c4201512109200641d8006a201b370300200641e0006a2010370300200641c0006a2012370300200641e8006a200d370300200641c8006a2016370300200620143703502006201137037020062013370338410021042006200e4100200a1b36027c2006200f4100200a1b360278200620154201512205ad3703300240024020050d002008200710b40142002116410021070c010b20082007200641386a10d80242002116410121070b0b02402006280224450d002008102c0b02400240024020040d000240200741ff01712207450d00200941ff0171450d020b20070d02200941ff0171450d02200641e8016a41086a41043a0000200641f9016a200141086a29000037000020064181026a200141106a29000037000020064189026a200141186a290000370000200641003602e801200620012900003700f101200641e8016a10c8020c020b2000200536020420004101360200200041086a2007ad42ff01834208862009ad42ff0183842016843702000c030b200641e8016a41086a41033a0000200641f9016a200141086a29000037000020064181026a200141106a29000037000020064189026a200141186a290000370000200641003602e801200620012900003700f101200641e8016a10c8020b0240200b450d00200641a0026a201837030020064198026a2017370300200641e8016a41086a41003a0000200641f9016a200141086a29000037000020064181026a200141106a29000037000020064189026a200141186a290000370000200641023602e801200620012900003700f101200641e8016a10c8020b20004100360200200041106a2003370300200041086a20023703000c010b20004100360200200041106a4200370300200041086a42003703000b20064180046a24000f0b103b000b1039000bbc1404077f047e017f057e230041c0036b2203240020012800002104200341106a41186a2001411c6a290000370300200341106a41106a200141146a290000370300200341106a41086a2001410c6a290000370300200320012900043703102002280200210520034190036a41186a2206420037030020034190036a41106a2201420037030020034190036a41086a220742003703002003420037039003200341d0006a41ffdcc700410710c5012007200341d0006a41086a22082900003703002003200329005037039003200341d0006a41b8b3c300410c10c5012006200829000037030020012003290050370300200341086a20034190036a412010c60141002109024002400240024002402005200328020c410020032802081b460d00200341d0006a2005108e07200341c0026a41086a200341d0006a410c6a290200370300200341c0026a41106a200341d0006a41146a290200370300200341c0026a41186a200341d0006a411c6a290200370300200320032902543703c00220032802504101470d0120034190036a41086a2205200341c0026a41086a290300220a37030020034190036a41106a2206200341c0026a41106a290300220b37030020034190036a41186a2207200341c0026a41186a290300220c370300200320032903c002220d37039003200341f4006a2802002101200341a0026a41186a2208200c370300200341a0026a41106a2209200b370300200341a0026a41086a220e200a3703002003200d3703a00220012002280210470d0220072008290300370300200620092903003703002005200e290300370300200320032903a002370390032002410c6a280200210720022802042108200341c0026a108f0702402007450d0020082007410c6c6a21054100280280a240210641002902f8a140210a20082101034020034180026a41086a20063602002003200a37038002200341d0006a200341c0026a20034180026a2001280200200141086a2802001090072001410c6a22012005470d000b0b200341d0006a200341c0026a41d00010c9081a200341b8016a200341a8036a290300370300200341b0016a200341a0036a290300370300200341a8016a20034190036a41086a29030037030020032003290390033703a0012000200341d0006a2004200341106a109107200341d0006a10dd0402402007450d002007410c6c21002008210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d042001410c6c450d042008102c0c040b20084120360200200320043602502003200341106a360254200341c0026a200341d0006a10e602200341d0006a20032802c002220520032802c80210c9012007200341d9006a2900003703002001200341e1006a2900003703002006200341e9006a2900003703002003200329005137039003024020032d00504101470d00200341306a41186a20034190036a41186a290300370300200341306a41106a20034190036a41106a290300370300200341306a41086a20034190036a41086a2903003703002003200329039003370330410121090b024020032802c402450d002005102c0b2002410c6a2802002105200241086a2802002107200228020421060240024020090d002000410036024002402005450d002005410c6c21002006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b2007450d052006450d052007410c6c0d010c050b20022802102104200341c0016a41186a2202200341306a41186a290300220a370300200341c0016a41106a2208200341306a41106a290300220b370300200341c0016a41086a2209200341306a41086a290300220c37030020032003290330220d3703c001200341d0006a41186a200a370300200341d0006a41106a200b370300200341d0006a41086a200c3703002003200d370350200341c0026a200341d0006a10a304200341e0016a41186a220e2002290300370300200341e0016a41106a22022008290300370300200341e0016a41086a2009290300370300200320032903c0013703e001024020032802e00222080d002000410036024002402005450d002005410c6c21002006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b2007450d052006450d052007410c6c0d010c050b20034180026a41186a200e29030037030020034180026a41106a200229030037030020034180026a41086a200341e0016a41086a290300370300200320032903e00137038002200341a0026a41186a200341c0026a41186a290300370300200341a0026a41106a200341c0026a41106a290300370300200341a0026a41086a200341c0026a41086a290300370300200320032903c0023703a002200341e8026a290300210a20032802e402210220034190036a41186a420037030020034190036a41106a420037030020034190036a41086a220942003703002003420037039003200341d0006a41ffdcc700410710c5012009200341d0006a41086a220e2900003703002003200329005037039003200341d0006a418893c700410a10c501200141086a200e29000037000020012003290050370000200341b0036a20034190036a10e1010240024020032802b00322090d00410021010c010b20032902b403220b422088a72101200ba7220e450d00200e41ffffff3f71450d002009102c0b024020042001470d002000200329038002220b370300200041206a20032903a002220c370300200341d0006a41186a20034180026a41186a290300220d370300200341d0006a41106a20034180026a41106a290300220f370300200341d0006a41086a20034180026a41086a2903002210370300200341d0006a41286a200341a0026a41086a2903002211370300200341d0006a41306a200341a0026a41106a2903002212370300200341d0006a41386a200341a0026a41186a2903002213370300200041086a2010370300200041106a200f370300200041186a200d370300200041286a2011370300200041306a2012370300200041386a20133703002003200b3703502003200c370370200041c8006a200a370300200020023602442000200836024002402005450d002005410c6c21002006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b2007450d052006450d052007410c6c0d010c050b2000410036024002402002450d00200241306c450d002008102c0b02402005450d002005410c6c21002006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b2007450d042006450d042007410c6c450d040b2006102c0c030b200041003602400c010b200041003602400b2002280204210502402002410c6a2802002201450d002001410c6c21002005210103400240200141046a280200450d002001280200102c0b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d002001410c6c450d002005102c0b200341c0036a24000ba10304057f027e017f027e230041d0006b2201240002402000290300500d00200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41d4dcc700410810c5012004200141c0006a41086a220529000037030020012001290040370320200141c0006a41bba8c700410d10c5012002200529000037030020032001290040370300200141086a200141206a412010d301200141086a41106a29030021062001290310210720012802082108200041106a29030021092000290308210a20024200370300200342003703002004420037030020014200370320200141c0006a41d4dcc700410810c5012004200529000037030020012001290040370320200141c0006a41bba8c700410d10c5012002200529000037030020032001290040370300200142002006420020081b220620097d2007420020081b2207200a54ad7d22092007200a7d220a200756200920065620092006511b22001b37034820014200200a20001b370340200141206a4120200141c0006a411010a7020b200141d0006a24000bca0803017f037e047f23004190036b22032400200320023703382003200137033042002104024002400240024020012002844200520d00420021020c010b20032000360244200341c8006a2000200341306a200341c4006a10b5040240024020032903484201520d00200341d8006a2903002105200329035021040c010b200341f0006a2903002105200341e8006a290300210420032903504201520d00200341c8006a41106a2903002106200341b0016a200341c8006a41186a290300370300200341a8016a2006370300200341f8006a41086a41003a000020034189016a200041086a29000037000020034191016a200041106a29000037000020034199016a200041186a290000370000200341023602782003200029000037008101200341f8006a10c8020b200520027d2004200154ad7d200220057d2001200454ad7d2004200156200520025620052002511b22001b2102200420017d200120047d20001b210420000d010b20034190016a22004200370300200341f8006a41106a22074200370300200341f8006a41086a2208420037030020034200370378200341c8006a41d4dcc700410810c5012008200341c8006a41086a220929000037030020032003290048370378200341c8006a41bba8c700410d10c50120002009290000370300200720032900483703002003200341f8006a412010d301200341106a2903002101200329030821052003280200210a20004200370300200742003703002008420037030020034200370378200341c8006a41d4dcc700410810c5012008200929000037030020032003290048370378200341c8006a41bba8c700410d10c50120002009290000370300200720032900483703002003420020014200200a1b220120027d20054200200a1b2202200454ad7d2205200220047d2204200256200520015620052001511b22001b37035020034200200420001b370348200341f8006a4120200341c8006a411010a7020c010b20034190016a22004200370300200341f8006a41106a22074200370300200341f8006a41086a2208420037030020034200370378200341c8006a41d4dcc700410810c5012008200341c8006a41086a220929000037030020032003290048370378200341c8006a41bba8c700410d10c5012000200929000037030020072003290048370300200341186a200341f8006a412010d301200341186a41106a2903002101200329032021052003280218210a20004200370300200742003703002008420037030020034200370378200341c8006a41d4dcc700410810c5012008200929000037030020032003290048370378200341c8006a41bba8c700410d10c50120002009290000370300200720032900483703002003427f20014200200a1b220120027c20054200200a1b220220047c22042002542200ad7c22022000200220015420022001511b22001b3703502003427f200420001b370348200341f8006a4120200341c8006a411010a7020b20034190036a24000baa0304017f027e087f027e230041206b22032400200229030021042001290300210520022802102106200141106a200241186a2207280200220810b5082001280210200141186a2209280200220a410c6c6a20062008410c6c10c9081a4100210b200741003602002009200a20086a2208360200200341086a2209200836020020032001290210370300200228021c21072001411c6a200241246a220a280200220810b508200128021c200141246a220c280200220d410c6c6a20072008410c6c10c9081a200a4100360200200c200d20086a2208360200200341106a41086a220a20083602002003200129021c3703102002290308210e2001290308210f024020012d0028450d0020022d0028410047210b0b200020032903003702102000200329031037021c2000200b3a0028200041186a2009280200360200200041246a200a2802003602002000200e200f200f200e561b3703082000427f200520047c220e200e2005541b3703000240200241146a2802002201450d002001410c6c450d002006102c0b0240200241206a2802002201450d002001410c6c450d002007102c0b200341206a24000bee0302037f017e230041d0016b22042400200441206a22054200370300200441086a41106a22064200370300200441086a41086a420037030020044200370308200441086a41c1dcc700410610c501200441c0016a41f8ccc600411010c5012005200441c0016a41086a290000370300200620042900c0013703002004200441086a412010c601024002400240024002400240417f2004280204410020042802001b220520036a220320032005491b418080c002418080f001200241ff017122031b4b0d00200441086a109b01024002400240024020030e03010200010b20044188016a21030c020b200441186a21030c010b200441d0006a21030b024020032903084201520d00200341106a2903002001540d050b42002107200241ff01710e03010203010b200041800c3b0001200041013a0000200041036a41003a00000c040b200121070c010b427f200142ffffffffffffffffbf7f7c220720072001541b21070b200041003a0000200041306a41013a0000200041286a4200370200200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a2007370300200041316a2004280008360000200041346a2004410b6a2800003600000c010b200041800c3b0001200041013a0000200041036a41003a00000b200441d0016a24000b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000b130020004101360204200041c094c4003602000b940d02037f027e200028022821022001200141086a22032802004104102f200128020020032802006a20023600002003200328020041046a2202360200200028022c2104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802302104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802342104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802382104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200028023c2104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802402104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802442104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802482104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200028024c2104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802502104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802542104200120024104102f200128020020032802006a20043600002003200328020041046a3602002001200041d8006a10be0320002802602102200120032802004104102f200128020020032802006a20023600002003200328020041046a220236020020002802642104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802682104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200028026c2104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802702104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802742104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802782104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200028027c2104200120024104102f200128020020032802006a20043600002003200328020041046a22023602002000280280012104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002903002105200120024108102f200128020020032802006a20053700002003200328020041086a22023602002000280284012104200120024104102f200128020020032802006a20043600002003200328020041046a22023602002000280288012104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200028028c012104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200041106a290300210520002903082106200120024110102f200128020020032802006a22022005370008200220063700002003200328020041106a2202360200200041206a290300210520002903182106200120024110102f200128020020032802006a22022005370008200220063700002003200328020041106a22023602002000280290012104200120024104102f200128020020032802006a20043600002003200328020041046a22023602002000280294012104200120024104102f200128020020032802006a20043600002003200328020041046a22023602002000280298012104200120024104102f200128020020032802006a20043600002003200328020041046a2202360200200028029c012104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802a0012104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802a4012104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802a8012104200120024104102f200128020020032802006a20043600002003200328020041046a220236020020002802ac012100200120024104102f200128020020032802006a20003600002003200328020041046a3602000b130020004124360204200041d495c4003602000b3400200041ac95c40036020420004100360200200041146a4102360200200041106a4184b8c400360200200041086a420d3702000bb30101017f230041b0016b22022400200241c0006a4200370300200241386a4200370300200241306a4200370300200241086a4200370300200241106a4200370300200241186a4200370300200241206a42003703002002420037032820024280808080103703602002410036025820024201370350200242818080801037034820024200370300200241e8006a410041c80010cb081a20004100360208200042013702002002200010d506200241b0016a24000b850203037f017e037f230041106b21020240024002400240024002400240200128020422034108490d002001280200220429000021052001200341786a22063602042001200441086a22043602002006450d0320042d000021062001200341776a22073602042001200441016a36020041002108024020060e03030200040b410221080c020b200041023a00090f0b410121080b2007450d0320042d000121062001200341766a3602042001200441026a3602004100210120060e020201030b200041023a00090f0b410121010b200020013a0009200020083a0008200020053703002000200228010a36010a2000410e6a2002410e6a2f01003b01000f0b200041023a00090be30101047f230041c0186b22022400024041c018103222030d001039000b2003200241386a41881810c908220341003b018e182003410036028818200320022903083703901820034198186a200241106a290300370300200341a0186a200241186a290300370300200341a8186a200241206a290300370300200341b0186a200241286a290300370300200341b8186a200241306a29030037030020032001280200220436029018200120033602002001200128020441016a2205360204200441003b018c1820042003360288182000200336020420002005360200200241c0186a24000be30101047f230041b0166b22022400024041b816103222030d001039000b2003200241306a41801610c908220341003b0186162003410036028016200320022903003703881620034190166a200241086a29030037030020034198166a200241106a290300370300200341a0166a200241186a290300370300200341a8166a200241206a290300370300200341b0166a200241286a29030037030020032001280200220436028816200120033602002001200128020441016a2205360204200441003b01841620042003360280162000200336020420002005360200200241b0166a24000b4401027f23004190186b220024000240419018103222010d001039000b2001200041086a41881810c908220141003b018e18200141003602881820004190186a240020010b4101027f23004180166b220024000240418816103222010d001039000b2001200041801610c908220141003b018616200141003602801620004180166a240020010b130020004104360204200041c0bfc4003602000b3400200041afdec70036020420004100360200200041146a4101360200200041106a41d0c9c400360200200041086a42043702000b130020004101360204200041fccdc4003602000b870101027f230041106b2203240002404110103222040d001039000b200342043702042003200436020020034100410410a90820002003290300370200200041086a2003280208220441046a360200200328020020044102746a220420013e020c200420014220883e0208200420023e0204200420024220883e0200200010aa08200341106a24000b9c04030d7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742205417f4c0d0002400240024020050d00410421070c010b200510372207450d010b20002007360200200041086a2006360200200020054102763602042004450d022006417f6a2108200341027420022802006a417c6a2109200641027420076a417c6a210a4100210b200141086a210c2004210d0240034002400240024002400240024002402004200d200b417f736a220e4d0d002001280200200e4102746a220f280200450d06024020030d00410021000c060b420021104100210020092102200a21050340200d200e4d0d022003200320006a2211417f6a4d0d032006200820006a22114d0d0420052002350200200f3502007e20107c20053502007c22103e02002002417c6a21022005417c6a21052010422088211020032000417f6a22006a450d050c000b0b200e20044188adc800103f000b200e200d4188adc800103f000b2011417f6a20034188adc800103f000b201120064188adc800103f000b2010a721000b2006200b20036a417f736a220520064f0d02200720054102746a20003602000b200b41016a220b2004460d04200a417c6a210a2008417f6a2108200c280200210d0c000b0b2005200641b0aec800103f000b1039000b103b000b0240200141046a28020041ffffffff0371450d002001280200102c0b0bd21007037f017e017f017e0c7f027e017f23004180026b22022400200141346a2802002103200141386a2802002104200141086a29030021052001280230210620012903002107200241186a200141d4006a290000370300200241106a200141cc006a290000370300200241086a200141c4006a2900003703002002200129003c37030020022005370328200220073703202006200441d8006c22086a210920062101024002402004450d004100210a20024190016a41086a210b20024190016a41106a210c20024190016a41186a210d024002400340200b2006200a6a2201413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024190016a41206a220e200141d4006a2802003602002002200141346a29020037039001200141306a280200220f450d02200141286a2903002105200141206a2903002107200241d8016a41206a200e280200360200200241d8016a41186a220e200d290300370300200241d8016a41106a2210200c290300370300200241d8016a41086a2211200b29030037030020022002290390013703d80102400240200720052002290320200241206a41086a29030010b30422120d004100210e0c010b200241b8016a41186a200e290300370300200241b8016a41106a2010290300370300200241b8016a41086a2011290300370300200220022903d8013703b8014101210e201221130b200f200f280200417f6a2210360200024020100d00200f41046a22102010280200417f6a221036020020100d00200f102c0b200e0d012008200a41d8006a220a470d000b200921010c020b200241306a41086a220f200241b8016a41086a290300370300200241306a41106a220b200241b8016a41106a290300370300200241306a41186a220c200241b8016a41186a290300370300200220022903b801220537035020022005370330024002400240412410322208450d002008200229033037020020082013360220200841186a200c290300370200200841106a200b290300370200200841086a200f2903003702002002200936023c2002200141d8006a220b36023820022003360234200220063602302002200241206a360240024002400240200441d8006c41a87f6a200a470d0041012103410121040c010b20024190016a41086a210a20024190016a41106a210c20024190016a41186a210d410121034101210403402002200b220141d8006a220b360238200141306a280200210f200141286a2903002105200141206a2903002107200a2001413c6a290200370300200c200141c4006a290200370300200d200141cc006a29020037030020024190016a41206a220e200141d4006a2802003602002002200141346a2902003703900102400240200f450d00200241d8016a41206a200e280200360200200241d8016a41186a2211200d290300370300200241d8016a41106a2212200c290300370300200241d8016a41086a2206200a29030037030020022002290390013703d80102400240200720052002280240220e290300200e41086a29030010b30422100d004100210e0c010b200241b8016a41186a2011290300370300200241b8016a41106a2012290300370300200241b8016a41086a2006290300370300200220022903d8013703b8014101210e201021130b200f200f280200417f6a2210360200024020100d00200f41046a22102010280200417f6a221036020020100d00200f102c0b200e0d012009200b470d020b200141d8006a210b0c020b200241d0006a41086a200241b8016a41086a2903002205370300200241d0006a41106a200241b8016a41106a2903002207370300200241d0006a41186a200241b8016a41186a2903002214370300200220022903b8012215370350201120143703002012200737030020062005370300200220153703d801024020042003470d00200341016a22012003490d062003410174220f2001200f20014b1b22014104200141044b1bad42247e2205422088a7220f0d062005a722014100480d06200f454102742109200341246c201620031b2116024002400240024002402008410020031b220f0d002001450d010c030b20160d0120010d020b200921080c020b200f20162001103522080d010c050b200110322208450d040b200141246e21030b2008200441246c6a220120022903d80137020020122903002105201129030021072006290300211420012013360220200141086a2014370200200141186a2007370200200141106a2005370200200441016a21042002280238220b200228023c2209470d000b0b2009200b6b220141d8006d210f02402001450d00200f41d8006c210f200b41306a210103402001280200220a200a280200417f6a36020002402001280200220a2802000d00200a41046a220a200a280200417f6a3602002001280200220a41046a2802000d00200a102c0b200141d8006a2101200f41a87f6a220f0d000b0b024020022802304100200228023422011b220f450d00200141d8006c450d00200f102c0b20040d02200041003602002003450d062008450d06200341246c450d062008102c0c060b2009450d020b1039000b2000200336020420002008360200200041086a20043602002000410c6a2002290300370000200041146a200241086a2903003700002000411c6a200241106a290300370000200041246a200241186a2903003700000c030b103b000b200141d8006a21010b024020092001460d000340200141306a220f280200220a200a280200417f6a360200200141d8006a21010240200f280200220a2802000d00200a41046a220a200a280200417f6a360200200f280200220f41046a2802000d00200f102c0b20092001470d000b0b02402003450d00200341d8006c450d002006102c0b200041003602000b20024180026a24000b9c1703067f047e137f230041f0046b22022400200241c0016a41186a200141186a290000370300200241c0016a41106a200141106a290000370300200241c0016a41086a200141086a290000370300200220012900003703c001024002400240024002400240024020002802002203450d00200028020421040c010b41e80210322203450d0141002104200341003b010620034100360200200341086a200241e0016a41e00210c9081a20004100360204200020033602000b02400340200341086a210520032f01062106410021010240034020062001460d01200241c0016a2005412010cc082207450d03200541206a2105200141016a21012007417f4a0d000b2001417f6a21060b02402004450d002004417f6a2104200320064102746a41e8026a28020021030c010b0b200241186a200241c0016a41186a2903002208370300200241106a200241c0016a41106a2903002209370300200241086a200241c0016a41086a290300220a370300200220022903c001220b37030020024180016a41186a2205200837030020024180016a41106a2207200937030020024180016a41086a2204200a3703002002200b370380010240024020032f0106220c410b490d00410521074100210d02400240200641054f0d0041042107200621040c010b41052104024002402006417b6a0e020201000b200641796a21044101210d410621070c010b410021044101210d0b41e80210322205450d034100210e200541003b010620054100360200200541086a200241e0016a41e00210c9082106200241c0016a41086a220c200320074105746a220141106a290000370300200241c0016a41106a220f200141186a290000370300200241c0016a41186a2210200141206a2900003703002002200141086a2900003703c0012006200141286a20032f01062007417f736a220141057410c9081a200320073b0106200520013b0106200241a0016a41186a22112010290300370300200241a0016a41106a2212200f290300370300200241a0016a41086a2213200c290300370300200220022903c0013703a00120052003200d1b220720044105746a220141286a200141086a220620072f010620046b41057410ca081a200141206a20024180016a41186a2214290300370000200141186a20024180016a41106a2215290300370000200141106a20024180016a41086a22162903003700002006200229038001370000200720072f010641016a3b0106200241e0006a41186a20112903002208370300200241e0006a41106a20122903002209370300200241e0006a41086a2013290300220a370300200220022903a001220b370360200241c0006a41186a22172008370300200241c0006a41106a22182009370300200241c0006a41086a2219200a3703002002200b370340024020032802002201450d004100210e03402005211a200321052001210320052f01042104201420172903003703002015201829030037030020162019290300370300200220022903403703800141000d0602400240024020032f01062205410b490d004100211b41042106024020044105490d0020042106024002402004417b6a0e020201000b200441796a21044101211b410621060c010b410021044101211b410521060b41980310322205450d08200e41016a210e41002101200541003b010620054100360200200541086a200241e0016a41900310c908211c2010200341086a220d20064105746a220741186a290000370300200f200741106a290000370300200c200741086a290000370300200220072900003703c001201c200d200641016a221d4105746a20032f0106221e2006417f736a220741057410c908211c200320063b0106200520073b0106201120102903003703002012200f2903003703002013200c290300370300200220022903c0013703a001200541e8026a2003201d4102746a41e8026a201e20066b41027410c908211d02400340200520014102746a41e8026a280200220620013b0104200620053602002001200120074922066a220120074b0d0120060d000b0b200241e0016a41186a20112903002208370300200241e0016a41106a20122903002209370300200241e0016a41086a2013290300220a370300200220022903a001220b3703e00120102008370300200f2009370300200c200a3703002002200b3703c001201b450d012004410274201d6a41086a201d200441016a22014102746a220720052f010620046b41027410ca081a2007201a360200201c20014105746a201c20044105746a220720052f010620046b41057410ca081a200741186a2014290300370000200741106a2015290300370000200741086a20162903003700002007200229038001370000200520052f010641016a22073b01062001200741ffff037122074b0d020340200520014102746a41e8026a280200220620013b010420062005360200200120012007496a220620074b0d03200120074f2104200621012004450d000c030b0b2004410274200341e8026a22076a41086a2007200441016a22014102746a2207200520046b220641027410ca081a2007201a360200200341086a220720014105746a200720044105746a2207200641057410ca081a200741186a20024180016a41186a290300370000200741106a20024180016a41106a290300370000200741086a20024180016a41086a29030037000020072002290380013700002003200541016a22073b0106200420054b0d05200741ffff037121050340200320014102746a41e8026a280200220720013b010420072003360200200120012005496a220720054b0d06200120054f2106200721012006450d000c060b0b2004410274200341e8026a22076a41086a2007200441016a22014102746a220720032f010620046b41027410ca081a2007201a360200200d20014105746a200d20044105746a220720032f010620046b41057410ca081a200741186a2014290300370000200741106a2015290300370000200741086a20162903003700002007200229038001370000200320032f010641016a22073b01062001200741ffff037122074b0d000340200320014102746a41e8026a280200220620013b0104200620033602002001200120074922066a220120074b0d0120060d000b0b201720102903003703002018200f2903003703002019200c290300370300200220022903c001370340200328020022010d000b0b200241206a41186a20172903002208370300200241206a41106a20182903002209370300200241206a41086a2019290300220a37030020022002290340220b37032020102008370300200f2009370300200c200a3703002002200b3703c0012000280200450d0541980310322201450d03200141003b010620014100360200200141086a200241e0016a41900310c9081a2001200028020022073602e8022000200136020020002000280204220641016a360204200741003b010420072001360200200241e0016a41186a200241c0016a41186a290300370300200241e0016a41106a200241c0016a41106a290300370300200241e0016a41086a200241c0016a41086a290300370300200220022903c0013703e0012006200e470d0620012f01062206410a4b0d07200120064105746a220741086a20022903e001370000200741106a200241e0016a41086a290300370000200741186a200241e0016a41106a290300370000200741206a200241e0016a41186a2903003700002001200641016a22073b0106200120074102746a41e8026a200536020020052001360200200520073b01042000200028020841016a3602080c020b200320064105746a220141286a200141086a220f200c20066b41057410ca081a200141206a2005290300370000200141186a2007290300370000200141106a2004290300370000200f200229038001370000200320032f010641016a3b01060b2000200028020841016a3602080b200241f0046a24000f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b911303037f017e107f23004190236b2202240020024190026a200141980210c9081a024002400240024002400240024020002802002201450d00200028020421030c010b41901810322201450d01410021032001200241b8066a41881810c908220441003b018e18200441003602881820004100360204200020043602000b200241b8066a2003200120024190026a108e020240024020022802b8064101460d0020024190026a10e60620022d0080044106490d0120024184046a280200410020024188046a28020022011b2203450d012001450d012003102c0c010b20024190026a41086a28020021042002290390022105200241046a20024190026a410c6a418c0210c9081a200241b8066a410c6a2802002101200241b8066a41086a280200210620022802bc062107200241d0206a200241046a418c0210c9081a0240024020062f018e182208410b490d00410521034100210902400240200141054f0d0041042103200121080c010b41052108024002402001417b6a0e020201000b200141796a210841012109410621030c010b41002108410121090b4190181032220a450d03200a200241b8066a41881810c908220b41003b018e18200b410036028818200620034198026c6a2201280204210c2001280200210d20024190026a200141086a41900210c9081a200b20014198026a20062f018e182003417f736a220e4198026c10c9082101200620033b018e182001200e3b018e182001200620091b220320084198026c6a22014198026a200120032f018e1820086b4198026c10ca081a200141086a2004360200200120053703002001410c6a200241d0206a418c0210c9081a200320032f018e1841016a3b018e18200241c01e6a20024190026a41900210c9081a0240024020062802881822010d00410021070c010b41002103200241f0226a210f200241f8226a211020024180236a211120024188236a21120340200d210e200c2113200a2114200621042001210620042f018c18210b200241d0206a200241c01e6a41900210c9081a20072003470d0602400240024020062f018e182203410b490d0041002109410421080240200b4105490d00200b210802400240200b417b6a0e020201000b200b41796a210b41012109410621080c010b4100210b41012109410521080b41c0181032220a450d08200741016a210741002101200a200241b8066a41881810c908220341003b018e182003410036028818200320022903e0223703901820034198186a200241e0226a41086a290300370300200341a0186a200f290300370300200341a8186a2010290300370300200341b0186a2011290300370300200341b8186a2012290300370300200620084198026c6a2204280204210c2004280200210d200241b8066a200441086a41900210c9081a200320044198026a20062f018e1822152008417f736a22044198026c10c9082103200620083b018e18200320043b018e1820024190026a200241b8066a41900210c9081a20034190186a200841027420066a4194186a201520086b41027410c908211502400340200320014102746a4190186a280200220820013b018c1820082003360288182001200120044922086a220120044b0d0120080d000b0b200241b8066a20024190026a41900210c9081a20024190026a200241b8066a41900210c9081a2009450d01200b41027420156a41086a2015200b41016a22014102746a220420032f018e18200b6b41027410ca081a200420143602002003200b4198026c6a22044198026a200420032f018e18200b6b4198026c10ca081a200420133602042004200e360200200441086a200241d0206a41900210c9081a200320032f018e1841016a22043b018e182001200441ffff037122044b0d020340200320014102746a4190186a280200220820013b018c182008200336028818200120012004496a220820044b0d03200120044f210b20082101200b450d000c030b0b200b41027420064190186a22046a41086a2004200b41016a22014102746a22042003200b6b220841027410ca081a200420143602002006200b4198026c6a22034198026a200320084198026c10ca081a200320133602042003200e360200200341086a200241d0206a41900210c9081a200620062f018e1841016a22033b018e18200b200341ffff037122034f0d050340200620014102746a4190186a280200220420013b018c182004200636028818200120012003496a220420034b0d06200120034f2108200421012008450d000c060b0b200b41027420064190186a22036a41086a2003200b41016a22014102746a220320062f018e18200b6b41027410ca081a200320143602002006200b4198026c6a22034198026a200320062f018e18200b6b4198026c10ca081a200320133602042003200e360200200341086a200241d0206a41900210c9081a200620062f018e1841016a22033b018e182001200341ffff037122034b0d000340200620014102746a4190186a280200220420013b018c1820042006360288182001200120034922046a220120034b0d0120040d000b0b200241c01e6a20024190026a41900210c9081a2007210320062802881822010d000b0b200241a8046a200241c01e6a41900210c9081a20024190026a200241a8046a41900210c9081a2000280200450d0541c01810322201450d032001200241b8066a41881810c908220141003b018e182001410036028818200120022903e0223703901820014198186a200241e8226a290300370300200141a0186a200241f0226a290300370300200141a8186a200241f8226a290300370300200141b0186a20024180236a290300370300200141b8186a20024188236a290300370300200120002802002203360290182000200136020020002000280204220441016a360204200341003b018c182003200136028818200241b8066a20024190026a41900210c9081a20042007470d0620012f018e182203410a4b0d072001200341016a22043b018e18200120034198026c6a2203200c3602042003200d360200200341086a200241b8066a41900210c9081a200120044102746a4190186a200a360200200a20043b018c18200a2001360288182000200028020841016a3602080c020b200620014198026c6a22034198026a2003200820016b4198026c10ca081a200341086a2004360200200320053703002003410c6a200241d0206a418c0210c9081a200620062f018e1841016a3b018e180b2000200028020841016a3602080b20024190236a24000f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b921201027f0240024020002802000d00024002400240024020002802080e0405000102030b0240024002400240200041106a2d0000417e6a0e06000102080803080b200041346a2802004101470d072000413c6a2802002201450d07200041386a2802002200450d072001450d072000102c0f0b200041146a2802004101470d062000411c6a2802002201450d06200041186a2802002200450d062001450d062000102c0f0b200041286a2802004101470d05200041306a2802002201450d052000412c6a2802002200450d052001450d052000102c0f0b200041186a2802002201450d04200041146a2802002200450d042001450d042000102c0f0b02400240024002400240200041106a2d0000417e6a0e06000102040403040b200041346a2802004101470d032000413c6a2802002201450d03200041386a2802002202450d032001450d032002102c0c030b200041146a2802004101470d022000411c6a2802002201450d02200041186a2802002202450d022001450d022002102c0c020b200041286a2802004101470d01200041306a2802002201450d012000412c6a2802002202450d012001450d012002102c0c010b200041186a2802002201450d00200041146a2802002202450d002001450d002002102c0b0240024002400240200041c8006a2d0000417e6a0e06000102070703070b200041ec006a2802004101470d06200041f4006a2802002201450d06200041f0006a2802002200450d062001450d062000102c0f0b200041cc006a2802004101470d05200041d4006a2802002201450d05200041d0006a2802002200450d052001450d052000102c0f0b200041e0006a2802004101470d04200041e8006a2802002201450d04200041e4006a2802002200450d042001450d042000102c0f0b200041d0006a2802002201450d03200041cc006a2802002200450d032001450d032000102c0f0b02400240024002400240200041106a2d0000417e6a0e06000102040403040b200041346a2802004101470d032000413c6a2802002201450d03200041386a2802002202450d032001450d032002102c0c030b200041146a2802004101470d022000411c6a2802002201450d02200041186a2802002202450d022001450d022002102c0c020b200041286a2802004101470d01200041306a2802002201450d012000412c6a2802002202450d012001450d012002102c0c010b200041186a2802002201450d00200041146a2802002202450d002001450d002002102c0b02400240024002400240200041c8006a2d0000417e6a0e06000102040403040b200041ec006a2802004101470d03200041f4006a2802002201450d03200041f0006a2802002202450d032001450d032002102c0c030b200041cc006a2802004101470d02200041d4006a2802002201450d02200041d0006a2802002202450d022001450d022002102c0c020b200041e0006a2802004101470d01200041e8006a2802002201450d01200041e4006a2802002202450d012001450d012002102c0c010b200041d0006a2802002201450d00200041cc006a2802002202450d002001450d002002102c0b024002400240024020004180016a2d0000417e6a0e06000102060603060b200041a4016a2802004101470d05200041ac016a2802002201450d05200041a8016a2802002200450d052001450d052000102c0f0b20004184016a2802004101470d042000418c016a2802002201450d0420004188016a2802002200450d042001450d042000102c0f0b20004198016a2802004101470d03200041a0016a2802002201450d032000419c016a2802002200450d032001450d032000102c0f0b20004188016a2802002201450d0220004184016a2802002200450d022001450d022000102c0f0b02400240024002400240200041106a2d0000417e6a0e06000102040403040b200041346a2802004101470d032000413c6a2802002201450d03200041386a2802002202450d032001450d032002102c0c030b200041146a2802004101470d022000411c6a2802002201450d02200041186a2802002202450d022001450d022002102c0c020b200041286a2802004101470d01200041306a2802002201450d012000412c6a2802002202450d012001450d012002102c0c010b200041186a2802002201450d00200041146a2802002202450d002001450d002002102c0b02400240024002400240200041c8006a2d0000417e6a0e06000102040403040b200041ec006a2802004101470d03200041f4006a2802002201450d03200041f0006a2802002202450d032001450d032002102c0c030b200041cc006a2802004101470d02200041d4006a2802002201450d02200041d0006a2802002202450d022001450d022002102c0c020b200041e0006a2802004101470d01200041e8006a2802002201450d01200041e4006a2802002202450d012001450d012002102c0c010b200041d0006a2802002201450d00200041cc006a2802002202450d002001450d002002102c0b0240024002400240024020004180016a2d0000417e6a0e06000102040403040b200041a4016a2802004101470d03200041ac016a2802002201450d03200041a8016a2802002202450d032001450d032002102c0c030b20004184016a2802004101470d022000418c016a2802002201450d0220004188016a2802002202450d022001450d022002102c0c020b20004198016a2802004101470d01200041a0016a2802002201450d012000419c016a2802002202450d012001450d012002102c0c010b20004188016a2802002201450d0020004184016a2802002202450d002001450d002002102c0b0240024002400240200041b8016a2d0000417e6a0e06000102050503050b200041dc016a2802004101470d04200041e4016a2802002201450d04200041e0016a2802002200450d042001450d042000102c0f0b200041bc016a2802004101470d03200041c4016a2802002201450d03200041c0016a2802002200450d032001450d032000102c0f0b200041d0016a2802004101470d02200041d8016a2802002201450d02200041d4016a2802002200450d022001450d022000102c0f0b200041c0016a2802002201450d01200041bc016a2802002200450d012001450d012000102c0f0b20002802082201450d0020002802042200450d002001450d002000102c0b0b8c0801057f230041106b2202240002400240024002400240024002400240024002400240024020012d00000e09010203040506070800010b200041083a00000c080b200041003a00000c070b200041013a0000200041046a200141046a2802003602000c060b410321030240024002400240200141246a2802000e0400010203000b410021030c020b200141306a2802002204417f4c0d08200141286a2802002105410121034101210602402004450d00200410322206450d0a0b20024100360208200220043602042002200636020020024100200410c8012002280200200228020822066a2005200410c9081a2002200620046a3602080c010b410221030b200041023a0000200041246a2003360200200041286a200229020037020020002001290001370001200041306a200241086a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c050b410321030240024002400240200141046a2802000e0400010203000b410021030c020b200141106a2802002204417f4c0d07200141086a2802002105410121034101210602402004450d00200410322206450d090b20024100360208200220043602042002200636020020024100200410c8012002280200200228020822066a2005200410c9081a2002200620046a3602080c010b410221030b200041033a0000200041046a2003360200200041086a2002290200370200200041186a2001290318370300200041106a200241086a2802003602000c040b410321030240024002400240200141186a2802000e0400010203000b410021030c020b200141246a2802002204417f4c0d062001411c6a2802002105410121034101210602402004450d00200410322206450d080b20024100360208200220043602042002200636020020024100200410c8012002280200200228020822066a2005200410c9081a2002200620046a3602080c010b410221030b200041043a0000200041186a20033602002000411c6a200229020037020020002001290001370001200041246a200241086a280200360200200041096a200141096a290000370000200041116a200141116a2800003600000c030b200041053a0000200020012d00013a00010c020b200041063a0000200041106a200141106a290300370300200041086a200141086a2903003703000c010b2001410c6a2802002203417f4c0d01200141046a28020021010240024020030d00410121040c010b200310322204450d030b20024100360208200220033602042002200436020020024100200310c8012002280200200228020822046a2001200310c9081a2000410c6a200420036a360200200041073a0000200041046a20022903003702000b200241106a24000f0b103b000b1039000bc10201017f0240024002400240024002400240024020012d00000e0700010203040506070b200141046a10bd08200141106a220210be08200141146a2802002201450d0620022802002202450d0620014188026c450d062002102c200010a2010f0b200141046a10bd08200141106a220210be08200141146a2802002201450d0520022802002202450d0520014188026c450d052002102c200010a2010f0b200141046a10bd08200141106a220210be08200141146a2802002201450d0420022802002202450d0420014188026c450d042002102c200010a2010f0b200141046a10bd08200010a2010f0b200141086a2802002202450d02200141046a2802002201450d022002450d022001102c200010a2010f0b200141086a10a201200141046a10bf08200010a2010f0b200141086a10a201200141046a10bf080b200010a2010bc31b03017f1c7e337f230041a0026b220224002000290300210320004200370300200041e0016a2903002104200041186a2903002105200041206a2903002106200041286a2903002107200041306a2903002108200041386a2903002109200041c0006a290300210a200041c8006a290300210b200041d0006a290300210c200041d8006a290300210d200041e0006a290300210e200041e8006a290300210f200041f0006a2903002110200041f8006a290300211120004180016a290300211220004188016a290300211320004190016a290300211420004198016a2903002115200041a0016a2903002116200041a8016a2903002117200041b0016a2903002118200041b8016a2903002119200041c0016a290300211a200041c8016a290300211b200041d0016a290300211c2000290308211d2000290310211e200241186a41d8016a221f200041d8016a290300370300200241186a41d0016a2220201c370300200241186a41c8016a2221201b370300200241186a41c0016a201a370300200241186a41b8016a22222019370300200241186a41b0016a22232018370300200241186a41a8016a22242017370300200241186a41a0016a2016370300200241186a4198016a22252015370300200241186a4190016a22262014370300200241186a4188016a22272013370300200241186a4180016a2012370300200241186a41f8006a22282011370300200241186a41f0006a22292010370300200241186a41e8006a222a200f370300200241186a41e0006a200e370300200241186a41d8006a222b200d370300200241186a41d0006a222c200c370300200241186a41c8006a222d200b370300200241186a41c0006a200a370300200241186a41386a222e2009370300200241186a41306a222f2008370300200241186a41286a22302007370300200241186a41206a2006370300200241186a41186a22312005370300200241186a41e0016a20043703002002201e3703282002201d3703202002200337031820024184026a41026a2232200141036a2d00003a0000200220012f00013b018402200141046a2802002133200141086a28020021342001410c6a2802002135200141106a2903002104200141186a28020021362001411c6a2802002137200141206a2802002138200141246a2802002139200141286a280200213a2001412c6a280200213b200141306a290300210920012d0000210102400240024002400240024002402003a7223c0e0400010402030b20024194026a41026a20322d00003a0000200220022f0184023b019402420121032009210b203b213d203a212f2039213e203821302037213f2036212e20042105203521402034214120332142200121310c040b20024194026a41026a200241236a2d00003a000020024190026a41026a20322d00003a0000200220022f00213b019402200220022f0184023b019002202e290300210b200241cc006a280200213d202f280200212f200241186a412c6a280200213e20302802002130200241186a41246a280200213f203129030021052002412c6a2802002140200241186a41106a2802002141200241186a410c6a2802002142420221032002280238212e20022d002021312009210c203b2129203a212a2039212b2038212c2037212d203621432004210d203521282034214420332145200121460c030b20024194026a41026a200241236a2d00003a000020024190026a41026a200241db006a2d00003a0000200220022f00213b019402200220022f00593b019002202e290300210b202d2802002144202c290300210d202b2802002143202a280200212a2029290300210c20282d00002147200228025c2145200228026421282002280274212d200228027c212b20022802840121292002418c026a41026a20024193016a2d00003a000020024188026a41026a20322d00003a0000200220022f0091013b018c02200220022f0184023b0188022006422088a7213f2012422088a72148201d422088a721422007422088a7213e201e422088a721402008422088a7213d2006a7212e200aa72146200ea7212c2012a721202016a7211f201da721312007a72130201ea721412008a7212f20242903002106200241bc016a2802002124200241b4016a280200212320252802002125200241ac016a2802002149202628020021262027290300210720024194016a2802002127420421030c020b2002419c026a41026a2232200241236a2d00003a0000200220022f00213b019c02200241186a410c6a2802002142200241186a41106a28020021412002412c6a280200214020312903002105200241186a41246a280200213f20302802002130200241186a412c6a280200213e202f280200212f200241cc006a280200213d202e290300210b20022d002021312002280238212e20022d0058214620024198026a41026a224a200241db006a2d00003a0000200241106a41026a20024193016a2d00003a0000200220022f00593b019802200220022f0091013b01102029290300210c202a280200212a202b2802002143202c290300210d202d280200214420282d000021472002280284012129200228027c212b2002280278212c2002280274212d20022802642128200228025c21452002410c6a41026a200241cb016a2d00003a0000200220022f00c9013b010c20232d0000213c20242903002106200241bc016a2802002124200241b4016a280200212320252802002125200241ac016a280200214920262802002126202729030021072002419c016a280200214820024194016a2802002127200241f4016a280200214b201f280200214c200241ec016a280200214d2020280200214e200241e4016a280200214f20212802002121200241d4016a280200215020222802002122200241cc016a280200215120022802b801211f200228029801212020022903f801210920022903d8012104200241146a41026a20322d00003a0000200220022f019c023b01142032204a2d00003a0000200220022f0198023b019c024101213202400240024002402001417e6a0e06000102060603060b4101213220394101470d05203a4100203b1b2201450d05203b450d052001102c0c050b4101213220334101470d042034410020351b2201450d042035450d042001102c0c040b4101213220364101470d032037410020381b2201450d032038450d032001102c0c030b2033410020341b2201450d022034450d022001102c0c020b20024194026a41026a200241236a2d00003a000020024190026a41026a200241db006a2d00003a0000200220022f00213b019402200220022f00593b019002200241186a410c6a2802002142200241186a41106a28020021412002412c6a280200214020312903002105200241186a41246a280200213f20302802002130200241186a412c6a280200213e202f280200212f200241cc006a280200213d202e290300210b20022d002021312002280238212e20022d005821462002418c026a41026a20322d00003a0000200220022f0184023b018c022029290300210c202a280200212a202b2802002143202c290300210d202d2802002144420321032002280284012129200228027c212b2002280278212c2002280274212d20022802642128200228025c214520092106203b2124203a211f2039212320382125203721492036212620042107203521482034212020332127200121470b200241146a41026a20024194026a41026a2d00003a00002002419c026a41026a20024190026a41026a2d00003a0000200241106a41026a2002418c026a41026a2d00003a00002002410c6a41026a20024188026a41026a2d00003a0000200220022f0194023b0114200220022f0190023b019c02200220022f018c023b0110200220022f0188023b010c410021320240203c417f6a41024d0d00200241186a10a2010b203b214b203a214c2039214d2038214e2037214f203621212035215020342122203321512001213c0b200010a201200020313a000820002003370300200020463a0040200041386a200b370300200041346a203d360200200041306a202f3602002000412c6a203e360200200041286a2030360200200041246a203f3602002000202e360220200041186a2005370300200041146a2040360200200041106a20413602002000410c6a2042360200200020022f01143b00092000410b6a200241146a41026a2d00003a0000200020022f019c023b0041200041c3006a2002419c026a41026a2d00003a0000200041f8006a20473a0000200041f0006a200c3703002000202936026c200041e8006a202a3602002000202b3602642000202c3602602000202d36025c200041d8006a2043360200200041d0006a200d3703002000202836024c200041c8006a204436020020002045360244200041b0016a203c3a0000200041a8016a2006370300200041a4016a20243602002000201f3602a0012000419c016a202336020020004198016a202536020020004194016a204936020020004190016a202636020020004188016a200737030020004184016a20483602002000202036028001200041fc006a2027360200200020022f01103b0079200041fb006a200241106a41026a2d00003a0000200041b3016a2002410c6a41026a2d00003a0000200020022f010c3b00b101200020093703e001200041dc016a204b360200200041d8016a204c360200200041d4016a204d360200200041d0016a204e360200200041cc016a204f360200200041c8016a2021360200200020043703c001200041bc016a2050360200200041b8016a2022360200200041b4016a2051360200200241a0026a240020320b891806017f037e037f017e017f037e230041d0046b22032400200341206a200110b0010240024002400240024002400240024002400240024002400240024002400240024002402003290320a7450d00200341306a290300210420032903282105200341c0026a200210a80320032d00c0024101470d01200341386a41186a200341d9026a290000370300200341386a41106a200341d1026a290000370300200341386a41086a200341c9026a290000370300200320032900c102370338200341c0026a200341386a200520044102410110cd0620032802c0024101460d0e200341c0026a41106a22022903002106200341c0026a41086a22072903002104200341c0026a41186a220842003703002002420037030020074200370300200342003703c002200341e8006a41d4dcc700410810c5012007200341e8006a41086a2209290000370300200320032900683703c002200341e8006a41bba8c700410d10c5012008200929000037030020022003290068370300200341086a200341c0026a412010d301200341086a41106a29030021052003290310210a2003280208210b200842003703002002420037030020074200370300200342003703c002200341e8006a41d4dcc700410810c50120072009290000370300200320032900683703c002200341e8006a41bba8c700410d10c50120082009290000370300200220032900683703002003420020054200200b1b220520067d200a4200200b1b2206200454ad7d220a200620047d2204200656200a200556200a2005511b22021b37037020034200200420021b370368200341c0026a4120200341e8006a411010a7024100210820012802000e0c0d030405060708090a0b0c020d0b200041013b01000c100b200041013b01000c0f0b200341c0026a200141086a10fd06410021020240024002400240024002400240200141f0016a22072d00000e0706010203040500060b200141fc016a2802002202417f4c0d12200141f4016a28020021010240024020020d00410121070c010b200210322207450d140b200341003602702003200236026c20032007360268200341e8006a4100200210c8012003280268200328027022076a2001200210c9081a200341c3046a200720026a360000200320032903683700bb04410621020c050b200341c7046a20014180026a2903003700002003200141f8016a2903003700bf04410121020c040b200320072800013602b804410221020c030b200320072900013703b804410321020c020b200341b8046a41086a200741096a290000370300200320072900013703b804410421020c010b200341c7046a200741106a290000370000200341b8046a41086a200741096a290000370300200341a8046a41086a20014190026a2d00003a0000200320072900013703b804200320014188026a2902003703a804410521020b200341a0026a41086a200341e8026a290300370300200320032903c0023702b4022003200341e0026a2903003703a002200341d8026a2903002106200341d0026a290300210420032903c802210c200341e8006a200341f0026a41b80110c9081a200341d8006a41086a200341a8046a41086a290300370300200320032903a804370358200c42088820044238868421052004420888210d200341b8046a41086a350200200341c4046a330100200341c6046a3100004210868442208684210e20032903b804210420032900c704210a200ca72107410b21080c0a0b410121080c090b410221080c080b410321080c070b2001410c6a2802002202417f4c0d08200128020421010240024020020d00410121070c010b200210322207450d0a0b200341003602b802200320023602b402200320073602b002200341b0026a4100200210c80120032802b00220032802b80222076a2001200210c9081a2003200720026a3602b802410421080c060b2001410c6a2802002202417f4c0d07200128020421010240024020020d00410121070c010b200210322207450d090b200341003602b802200320023602b402200320073602b002200341b0026a4100200210c80120032802b00220032802b80222076a2001200210c9081a2003200720026a3602b802410521080c050b200341c0026a200141086a10fd06200341a0026a41086a200341e8026a290300370300200320032903c0023702b4022003200341c0026a41206a2903003703a002200341d8026a2903002106200341d0026a290300210420032903c802210a200341e8006a200341f0026a41b80110c9081a200a42088820044238868421052004420888210d200aa72107410621080c040b200341c0026a200141086a10fd06200341a0026a41086a200341e8026a290300370300200320032903c0023702b4022003200341c0026a41206a2903003703a002200341d8026a2903002106200341d0026a290300210420032903c802210a200341e8006a200341f0026a41b80110c9081a200a42088820044238868421052004420888210d200aa72107410721080c030b2001410c6a2802002202417f4c0d04200128020421070240024020020d00410121080c010b200210322208450d060b200341003602b802200320023602b402200320083602b002200341b0026a4100200210c80120032802b00220032802b80222086a2007200210c9081a2003200820026a3602b80220012903102204420888200141186a29030022064238868421052006420888210d2004a72107410821080c020b2001410c6a2802002202417f4c0d03200128020421080240024020020d00410121090c010b200210322209450d050b41002107200341003602c004200320023602bc04200320093602b804200341b8046a4100200210c80120032802b80420032802c00422096a2008200210c9081a2003200920026a3602c0040240024002400240024002400240200141106a22022d00000e0706010203040500060b2001411c6a2802002202417f4c0d09200141146a28020021010240024020020d00410121070c010b200210322207450d0b0b200341003602702003200236026c20032007360268200341e8006a4100200210c8012003280268200328027022076a2001200210c9081a200341cb026a200720026a360000200320032903683700c302410621070c050b200341cf026a200141206a2903003700002003200141186a2903003700c702410121070c040b200320022800013602c002410221070c030b200320022900013703c002410321070c020b200341c8026a200241096a290000370300200320022900013703c002410421070c010b200341cf026a200241106a290000370000200341c0026a41086a200241096a290000370300200341e8006a41086a200141306a2d00003a0000200320022900013703c0022003200141286a290200370368410521070b200341b0026a41086a200341b8046a41086a280200360200200341a0026a41086a200341e8006a41086a290300370300200320032903b8043703b002200320032903683703a002200341c0026a41086a350200200341cc026a330100200341ce026a3100004210868442208684210d20032903c002210520032900cf022106410921080c010b200341c0026a200141086a10fd06200341a0026a41086a200341e8026a290300370300200320032903c0023702b4022003200341c0026a41206a2903003703a002200141f0016a290300210a200141f8016a290300210e200341d8026a2903002106200341d0026a290300210d20032903c802210c200341e8006a200341f0026a41b80110c9081a200a420888200e423886842104200c420888200d423886842105200e420888210e200d420888210d200aa72102200ca72107410a21080b200041086a20083602002000410c6a20032903b002370200200041286a2006370300200041306a20032903a002370300200041146a200341b0026a41086a280200360200200041386a200341a0026a41086a290300370300200041206a200d420886200542388884370300200041186a20054208862007ad42ff018384370300200041c0006a200341e8006a41b80110c9081a20004180026a200e420886200442388884370300200041f8016a20044208862002ad42ff01838437030020004188026a200a370300200041003a000020004190026a200329035837030020004198026a200341d8006a41086a2903003703000c030b200041013b01000c020b103b000b1039000b200341d0046a24000be10d02067f037e230041e01b6b22022400410121034101210441012105410121060240024002400240024002400240024002400240024002400240024002400240024002402001280200220741786a0e0401020003060b200141f8016a2903002108200141f0016a2903002109200241046a200141086a41e80110c9081a200241003602e003200241e0036a410472200241ec0110c9081a0240024020002802002207450d00200028020421030c010b41881610322207450d07410021032007200241e0056a41801610c908220441003b018616200441003602801620004100360204200020043602000b200241d0056a20032007200241e0036a10a3080240024020022802d0054101470d00200241e0036a41086a280200210720022903e003210a200241e0056a200241e0036a410c6a41e40110c9081a200241cc076a200241d0056a410c6a280200360200200220022902d4053702c407200241f0016a200241e0056a41f00110c9081a200241e0056a41086a20073602002002200a3703e005200241e0056a410c6a200241f0016a41f00110c9081a200220003602dc07200241e0056a2009200810c5081a0c010b200241d8056a290300210a200241e0036a10e606200aa7200a422088a74104746a220741d0146a2200427f2000290300220a20097c22092009200a542200200741d8146a2207290300220920087c2000ad7c220820095420082009511b22001b3703002007427f200820001b3703000b4101210441002103410121050c030b200141186a2903002108200141106a2903002109200241e0036a410c6a2001410c6a280200360200200241013602e003200220012902043702e4030240024020002802002207450d00200028020421030c010b41881610322207450d06410021032007200241e0056a41801610c908220441003b018616200441003602801620004100360204200020043602000b200220032007200241e0036a10a3080240024020022802004101470d00200241e0036a41086a280200210720022903e003210a200241e0056a200241e0036a410c6a41e40110c9081a200241cc076a2002410c6a280200360200200220022902043702c407200241f0016a200241e0056a41f00110c9081a200241e0056a41086a20073602002002200a3703e005200241e0056a410c6a200241f0016a41f00110c9081a200220003602dc07200241e0056a2009200810c5081a0c010b200241086a290300210a200241e0036a10e606200aa7200a422088a74104746a220741d0146a2200427f2000290300220a20097c22092009200a542200200741d8146a2207290300220920087c2000ad7c220820095420082009511b22001b3703002007427f200820001b3703000b4100210441012103410121050c020b200241e0056a410c6a2001410c6a280200360200200241d8076a200141186a290300370300200241e0076a200141206a290300370300200241e8076a200141286a290300370300200241f0076a200141306a29030037030041012103200241013602e005200220012902043702e4052002200141106a2903003703d0072000410c6a200241e0056a10a6084100210641012104410121050c020b200241e0036a41046a200141086a41e80110c9081a41002105200241003602e005200241e0056a410472200241e0036a41ec0110c9081a200241e0056a4190026a20014190026a290300370300200241e0056a4188026a20014188026a290300370300200241e0056a4180026a20014180026a290300370300200241e0056a41f8016a200141f8016a2903003703002002200141f0016a2903003703d0072000410c6a200241e0056a10a60841012103410121040b410121060b200128020021070b20070e0c0a0a0a0a0504030209080706010b1039000b200141086a10a201200141f0016a2d00004106490d08200141f8016a2802002207450d08200141f4016a2802002201450d082007450d082001102c0c080b200141086a10a2010c070b200141086a10a2010c060b200141086a2802002207450d0520012802042201450d052007450d052001102c0c050b200141086a2802002207450d0420012802042201450d042007450d042001102c0c040b2005450d03200141086a10a201200141f0016a2d00004106490d03200141f8016a2802002207450d03200141f4016a2802002201450d032007450d032001102c0c030b2003450d02200141086a10a2010c020b2006450d010240200141086a2802002207450d0020012802042200450d002007450d002000102c0b200141106a2d00004106490d01200141186a2802002207450d01200141146a2802002201450d012007450d012001102c0c010b2004450d00200141086a2802002207450d0020012802042201450d002007450d002001102c0b200241e01b6a24000bc10201027f02400240024002400240024002400240024020002802000e0b0808080800010203040506070b200041086a2802002201450d0720002802042200450d072001450d072000102c0f0b200041086a2802002201450d0620002802042200450d062001450d062000102c0f0b200041086a10a2010f0b200041086a10a2010f0b200041086a2802002201450d0320002802042200450d032001450d032000102c0f0b0240200041086a2802002201450d0020002802042202450d002001450d002002102c0b200041106a2d00004106490d02200041186a2802002201450d02200041146a2802002200450d022001450d022000102c0f0b200041086a10a2010c010b200041086a10a201200041f0016a2d00004106490d00200041f8016a2802002201450d00200041f4016a2802002200450d002001450d002000102c0f0b0ba70101047f0240200128020022020d0020004100360204200041106a4100360200200041003602180f0b2001280204210320012802082104200221010240034020022f01861621052003450d012003417f6a2103200220054102746a4188166a280200210220012802881621010c000b0b2000200336020c200041003602082000200136020420002003360200200041146a2005360200200041106a2002360200200020043602180bb00101027f23004180046b220124002001200010f706024020012802004102460d0020014188026a2102034020014180026a200141800210c9081a024002402001280280020d00200210f5060c010b200128028802450d00200128028402102c0b2001200010f70620012802004102470d000b0b024020002802042202450d0020022802801621002002102c2000450d00034020002802801621022000102c2002210020020d000b0b20014180046a24000ba70101047f0240200128020022020d0020004100360204200041106a4100360200200041003602180f0b2001280204210320012802082104200221010240034020022f018e1821052003450d012003417f6a2103200220054102746a4190186a280200210220012802901821010c000b0b2000200336020c200041003602082000200136020420002003360200200041146a2005360200200041106a2002360200200020043602180bcf0101027f230041b0046b220124002001200010f806024020012802004102460d00200141a0026a2102034020014198026a200141980210c9081a024002402001280298020d00200210f5060c010b20012802a002450d00200128029c02102c0b024020012d0088044106490d00200128029004450d00200128028c04102c0b2001200010f80620012802004102470d000b0b024020002802042202450d0020022802881821002002102c2000450d00034020002802881821022000102c2002210020020d000b0b200141b0046a24000bdc0801027f230041106b22022400024002400240024002400240024020002802000e050102030400010b200220012802184181cbc80041022001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041086a36020c20022002410c6a4184cbc800106621012002200041c0006a36020c20012002410c6a4184cbc800106621012002200041f8006a36020c20012002410c6a4184cbc800106621012002200041b0016a36020c20012002410c6a4184cbc80010661a20022d0008210020022802042203450d05200041ff017121014101210020010d04024020034101470d0020022d000941ff0171450d00200228020022012d00004104710d0041012100200128021841fa9dc00041012001411c6a28020028020c1100000d050b2002280200220028021841c5c7c50041012000411c6a28020028020c11000021000c040b20012802184194cbc80041042001411c6a28020028020c11000021000c040b200220012802184198cbc80041022001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041086a36020c20022002410c6a4184cbc80010661a20022d0008210020022802042203450d03200041ff017121014101210020010d02024020034101470d0020022d000941ff0171450d00200228020022012d00004104710d0041012100200128021841fa9dc00041012001411c6a28020028020c1100000d030b2002280200220028021841c5c7c50041012000411c6a28020028020c11000021000c020b20022001280218419acbc80041022001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041086a36020c20022002410c6a4184cbc800106621012002200041c0006a36020c20012002410c6a4184cbc80010661a20022d0008210020022802042203450d02200041ff017121014101210020010d01024020034101470d0020022d000941ff0171450d00200228020022012d00004104710d0041012100200128021841fa9dc00041012001411c6a28020028020c1100000d020b2002280200220028021841c5c7c50041012000411c6a28020028020c11000021000c010b20022001280218419ccbc80041022001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041086a36020c20022002410c6a4184cbc800106621012002200041c0006a36020c20012002410c6a4184cbc800106621012002200041f8006a36020c20012002410c6a4184cbc80010661a20022d0008210020022802042203450d01200041ff017121014101210020010d00024020034101470d0020022d000941ff0171450d00200228020022012d00004104710d0041012100200128021841fa9dc00041012001411c6a28020028020c1100000d010b2002280200220028021841c5c7c50041012000411c6a28020028020c11000021000b200220003a00080b200241106a2400200041ff01714100470b840401067f230041b0046b220224002000420037020820004100360200200041146a410036020020012802002203200128020822044198026c6a21052001280204210620032107024002402004450d0020024198026a41047221042003210103402001280200210720024198026a200141046a41940210c9081a02402007410c470d0020014198026a21070c020b200241046a20024198026a41940210c9081a20022007360298022004200241046a41940210c9081a200020024198026a10eb0620014198026a22012005470d000c020b0b20052007460d000340200722014198026a210702400240024002400240024002400240024020012802000e0b0808080800010203040506070b200141086a280200450d07200141046a280200102c0c070b200141086a280200450d06200141046a280200102c0c060b200141086a10f5060c050b200141086a10f5060c040b200141086a280200450d03200141046a280200102c0c030b0240200141086a280200450d00200141046a280200102c0b200141106a2d00004106490d02200141186a280200450d02200141146a280200102c0c020b200141086a10f5060c010b200141086a10f506200141f0016a2d00004106490d00200141f8016a280200450d00200141f4016a280200102c0b20052007470d000b0b02402006450d0020064198026c450d002003102c0b200241b0046a24000b9ebc0109087f017e027f057e047f037e087f017e017f230041d00f6b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200141046a2104200128020022052d0000210620012003417f6a22073602042001200541016a36020020060e1c01020304051e0607081e090a0b0c1e0d0e0f101112131415161718191e0b200041193602000c300b02402007450d0020052d0001210720012003417e6a22083602042001200541026a360200410a210902400240024002400240024002400240024020070e0a00010203040506070838090b20084104490d082005280002210620012003417a6a3602042001200541066a3602002006418194ebdc034f0d08410121090c370b200241800b6a2001108a0220022802800b2206450d0720022902840b210a410221090c350b20084108490d062005290002210a2001200341766a36020420012005410a6a360200410321090c350b200241800b6a2001108a0220022802800b2206450d0520022902840b210a410421090c330b200241800b6a2001108a0220022802800b2206450d0420022902840b210a410521090c320b200241800b6a200110890220022802800b22064102460d0320022902840b210a410621090c310b200241106a200110870220022802100d0220022802142207200428020041186e2205200520074b1bad42187e220a422088a70d1b200aa72205417f4c0d1b0240024020050d00410421060c010b200510322206450d1d0b41002103200241003602880b200220063602800b2002200541186e3602840b02402007450d000340200241086a20011087020240024020022802080d0020042802002209200228020c2205490d002005417f4c0d1f0240024020050d00410121080c010b200510372208450d21200428020021090b02400240024020092005490d0020082001280200200510c90821092001280204220b20054f0d012005200b4194afc0001058000b2005450d0220050d010c020b2001200b20056b3602042001200128020020056a3602002009450d012005ad220a422086200a84210a20022001108702024020022802000d002004280200220b20022802042205490d002005417f4c0d210240024020050d004101210c0c010b20051037220c450d232004280200210b0b02400240200b2005490d00200c2001280200200510c908210b2001280204220c20054f0d012005200c4194afc0001058000b2005450d012005450d01200c102c0c010b2001200c20056b3602042001200128020020056a360200200b0d030b200aa7450d010b2008102c0b200241800b6a10c1020c050b2005ad220d422086200d84210d0240200320022802840b470d00200241800b6a200310fd0320022802880b210320022802800b21060b2006200341186c6a2205200b36020c2005200a37020420052009360200200541106a200d370200200220022802880b41016a22033602880b2007417f6a22070d000b20022802800b21060b2006450d024107410b20061b210920022902840b210a0c300b200241800b6a200110840520022802800b2206450d0120022902840b210a410821090c2f0b200241800b6a2001108a0220022802800b2206450d0020022902840b210a0240200428020022054104490d0020012802002203280000210b20012005417c6a3602042001200341046a360200410921090c300b200aa7450d002006102c0b200041193602000c2f0b024002402007450d0020052d0001210620012003417e6a3602042001200541026a3602000240024020060e020001020b200241a80d6a200110fe07200241b40d6a280200450d01200241800b6a200241a80d6a41880210c9081a0240200428020022054104490d0020012802002203280000210620012005417c6a3602042001200341046a360200200241a80d6a200110840520022802a80d2203450d0020022902ac0d210a02402004280200220741044f0d000240200a422088a72201450d002001410c6c21052003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b200aa72201450d012001410c6c450d012003102c0c010b20012802002204280000210520012007417c6a3602042001200441046a36020020030d030b2002418c0b6a102b200241fc0b6a102b0c010b200241a80d6a200110fe07200241b40d6a280200450d00200241800b6a200241a80d6a41880210c9081a0240200428020022054104490d0020012802002203280000210620012005417c6a3602042001200341046a360200200241a80d6a200110840520022802a80d2203450d0020022902ac0d210a02402004280200220741044f0d000240200a422088a72201450d002001410c6c21052003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b200aa72201450d012001410c6c450d012003102c0c010b20012802002204280000210520012007417c6a3602042001200441046a36020020030d2d0b2002418c0b6a102b200241fc0b6a102b0b200041193602000c2f0b200241e8046a200241800b6a41880210c9081a410121010c2b0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241186a200110c1042002290318a70d002002290320210a20004102360200200041086a200a370300200041106a200241a80d6a41980210c9081a0c2e0b200041193602000c2d0b2007450d2720052d0001210620012003417e6a22093602042001200541026a3602000240024002400240024002400240024020060e0500010203042f0b20094104490d2e2005280002210b20012003417a6a3602042001200541066a360200410121054100210341002109410021010c060b41002106200241003a00a00b2009411f2009411f491b20056a41036a2108417d21040240034020092006460d01200241800b6a20066a200520066a220741026a2d00003a00002001200320046a3602042001200741036a3602002002200641016a22073a00a00b2004417f6a21042007210620074120470d000b200741ff01714120490d2e200320076b2203417e6a41034d0d2e20022900970b210a2002419f0b6a310000210d2002418f0b6a290000210e20022900870b210f20022800830b210b20022f00810b210620022d00800b21042008280000210920012003417a6a3602042001200520076a41066a3602002002200e3703d8082002200a422888200d42188684a72201ad422886200a42ffffffffff1f83843703e008200141107621032002200f3703d008200f421888a72108200f420888a72107200241df086a290000210d20022900d708210a200fa7210c410221050c050b200641ff0171450d2d200241003a00a00b0c2d0b20094104490d2c2005280002210b20012003417a6a3602042001200541066a360200410321050c020b41002106200241003a00a00b2009411f2009411f491b20056a41036a2108417d2104024002400240034020092006460d01200241800b6a20066a200520066a220741026a2d00003a00002001200320046a3602042001200741036a3602002002200641016a22073a00a00b2004417f6a21042007210620074120470d000b200741ff01714120490d2e200320076b220c417e6a4104490d2e20022900970b210a2002419f0b6a310000210d2002418f0b6a290000210e20022900870b210f20022800830b210b20022f00810b210620022d00800b2104200828000021092001200c417a6a3602042001200520076a220541066a22083602002003417a6a2007460d2e20082d000021032001200c41796a3602042001200541076a3602004100210120030e0202012e0b200641ff0171450d2d200241003a00a00b0c2d0b410121010b200a423888200d42088684a721032002200a422888200d42188684a73b01ec082002200a421888a73b01ea082002200a421088a73a00e9082002200aa73b00e7082002200e3700df082002200f3700d708200f421888a72108200f420888a72107200241e6086a290100210d20022901de08210a200fa7210c410421050c030b20094104490d2a2005280002210b20012003417a6a3602042001200541066a3602004200210a410521054200210d0b0b0b200041003b0126200020013a0025200020073b000d200020063b0006200020043a0005200020053a0004200041033602002000411b6a200d370000200041136a200a370000200041286a2009360200200041236a20033b00002000410f6a20083600002000410c6a200c3a0000200041086a200b3602002000412c6a200241a80d6a41fc0110c9081a0c2c0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e0400010203040b41002106200241003a00a00b2003417d6a21030240034020072006460d01200241800b6a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a00b2003417f6a21032004210620044120470d000b200441ff01714120490d04200241800b6a410f6a290000210a20022900970b210f20022900870b210d20022800830b210b20022f00810b210820022d00800b210c200241d0086a411f6a200241800b6a411f6a31000022103c0000200241d0086a410f6a200a3700002002200f3700e7082002200d3700d7082002200b3600d308200220083b00d1082002200c3a00d008200241286a200110f7032002290328a70d04200241386a29030021112002290330210e200f423888201042ff0183221042088684a72101200f422888201042188684a72112200f421088a72113200f421888a72114200fa72115410121070c2a0b200641ff0171450d03200241003a00a00b0c030b41002106200241003a00a00b2003417d6a21030240034020072006460d01200241800b6a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a00b2003417f6a21032004210620044120470d000b200441ff01714120490d0320022900970b21162002419f0b6a31000021172002418f0b6a290000210a20022900870b210d20022800830b210b20022f00810b210820022d00800b210c200241d8006a200110f7032002290358a70d03200241d8006a41106a29030021112002290360210e200241c0006a200110f7032002290340a70d032016421888a721142016421088a721132016a72115200241c0006a41106a29030021102002290348210f2016422888201742188684a722124110762101410221070c290b200641ff0171450d02200241003a00a00b0c020b41002106200241003a00a00b410220036b21092003417d6a2107024002400340200920066a450d01200241800b6a20066a200520066a220441026a2d00003a0000200120073602042001200441036a3602002002200641016a22043a00a00b2007417f6a21072004210620044120470d000b200441ff01714120490d0320022900970b220f4228882002419f0b6a31000042188684a72112200f42ffffffffff1f83220a421888a72114200a421088a721132002418f0b6a290000210a20022900870b210d20022800830b210b20022f00810b210820022d00800b210c200fa7211541002106200241003a00a00b200520046a2109200420036b41026a21030340200320066a450d02200241800b6a20066a200920066a220541026a2d00003a0000200120073602042001200541036a3602002002200641016a22053a00a00b2007417f6a21072005210620054120470d000b200541ff01714120490d0320022900970b210f2002419f0b6a310000211020022900870b210e20022800830b210320022f00810b210520022d00800b2106200241b0086a410f6a200241800b6a410f6a29000022113700002002200e3700b708200220033600b308200220053b00b108200220063a00b008200241f0006a200110f7032002290370a70d03200241f0006a41106a290300211720022903782116200f422888201042188684a72207ad422886200f42ffffffffff1f832210421888a7ad4218862010421088a7ad42ff018342108684200fa7ad42ffff03838442ffffffffff1f8384210f201241107621012007411876ad2110410321070c290b200641ff0171450d02200241003a00a00b0c020b200641ff0171450d01200241003a00a00b0c010b41002106200241003a00a00b2003417d6a21030240034020072006460d01200241800b6a20066a200520066a220441026a2d00003a0000200120033602042001200441036a3602002002200641016a22043a00a00b2003417f6a21032004210620044120470d000b200441ff01714120490d0120022900970b210f2002419f0b6a31000021102002418f0b6a290000210a20022900870b210d20022800830b210b20022f00810b210820022d00800b210c20024188016a200110f703200229038801a70d01200f421888a72114200f421088a72113200fa7211520024188016a41106a2903002111200229039001210e200f422888201042188684a722124110762101410421070c270b200641ff0171450d00200241003a00a00b0b200041193602000c2b0b2007450d2320052d0001210620012003417e6a3602042001200541026a36020020060d23200241a0016a200110870220022802a0010d2320022802a4012206200428020041f0006e2205200520064b1bad42f0007e220a422088a70d13200aa72203417f4c0d130240024020030d00410421040c010b200310322204450d150b41002105200241003602880920022004360280092002200341f0006e36028409024002402006450d00200241800b6a41086a21090340200241800b6a200110ac0520022802840b210320022802800b2107200241e8046a200941e80010c9081a2003450d02200241e0026a200241e8046a41e80010c9081a02402005200228028409470d0020024180096a2005109905200228028809210520022802800921040b2004200541f0006c6a2205200336020420052007360200200541086a200241e0026a41e80010c9081a200220022802880941016a2205360288092006417f6a22060d000b20022802800921040b2004450d24200229028409210a2000200436020420004105360200200041086a200a370200200041106a200241a80d6a41980210c9081a0c2b0b20022802800921032005450d22200541f0006c2105200341046a21010c210b02402007450d0020052d0001210720012003417e6a22063602042001200541026a3602004107211202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020070e1800010203040538060708090a0b0c0d0e0f10111213141516180b41002107200241003a00a0092003417d6a21030240024002400240034020062007460d0120024180096a20076a200520076a220941026a2d00003a0000200120033602042001200941036a3602002002200741016a22093a00a0092003417f6a21032009210720094120470d000b200941ff01714120490d1b20024180096a411f6a310000210a200229009709210d200229008709210f200228008309210520022f008109210320022d0080092106200241d0086a410f6a20024180096a410f6a290000370000200241d0086a411f6a200a3c00002002200f3700d7082002200d3700e708200220053600d308200220033b00d108200220063a00d008200241d8086a290300210d200241e8086a290300210f20022903d008211820022903e008210a200241a8016a200110f70320022903a801a70d1b20042802002203450d1b200241b8016a290300211620022903b0012110200128020022072d0000210b20012003417f6a2204360204410121122001200741016a36020041002119200b0e043a0102031b0b200741ff0171450d1a200241003a00a0090c1a0b410121190c380b410221190c370b41002105200241003a00a0092003417e6a21030240034020042005460d0120024180096a20056a200720056a220641016a2d00003a0000200120033602042001200641026a3602002002200541016a22063a00a0092003417f6a21032006210520064120470d000b200641ff01714120490d1820022900970922174228882002419f096a31000042188684a7211a2017421888a7211b2017421088a7211c2002418f096a2900002111200229008709210e200228008309210520022f008109210620022d00800921092017a72115410321190c370b200541ff0171450d17200241003a00a0090c170b200241c0016a200110f70320022903c001a70d16200241c0016a41106a290300210d20022903c801210f200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c807200f422088200d42208684210a200d4220882117200fa7210b410221120c360b200241d8016a200110f70320022903d801a70d15200241d8016a41106a290300210d20022903e001210f200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c807200f422088200d42208684210a200d4220882117200fa7210b410321120c350b4104211220064104490d142005280002210920012003417a6a3602042001200541066a360200200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8074200210a420021170c340b200241f0016a200110870220022802f0010d1320022802f4012101200241c0076a41046a200241d0086a41046a2f01003b0100200220022801d0083602c0072002418094ebdc0336028409200220013602800920024180096a2001418094ebdc034b4102746a2802002109200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8074200210a41052112420021170c330b20024180096a200110ca032002280280092209450d12200241c0076a41046a200241d0086a41046a2f01003b0100200220022801d0083602c00720024180096a41086a350200210a200228028409210b200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c80742002117410621120c320b2006450d1120052d0002211420012003417d6a22043602042001200541036a360200410021080240024002400240024020140e0403000102160b410121080c020b410221080c010b41002106200241003a00a0092003417c6a2103034020042006460d0220024180096a20066a200520066a220741036a2d00003a0000200120033602042001200741046a3602002002200641016a22073a00a0092003417f6a21032007210620074120470d000b200741ff01714120490d13200229009709220f4228882002419f096a31000042188684a72106200f421888a72107200f421088a721092002418f096a290000210a200229008709210d200228008309210c20022f008109211220022d0080092113200fa7210b410321080b200241df086a200a370000200241c0076a41046a200241b0086a41046a2f01003b01002002200d3700d7082002200c3600d308200220123b00d108200220133a00d008200220073b01ea08200220093a00e9082002200b3b00e708200220022801b0083602c007200220063601ec08200241ee086a310000210f200241de086a290100210e20022801d208210920022f01d008210c20022901e608210d20022901d6082111200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a29010037030041082112200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8072011422088200e42208684210a20064118762119200e42208821172011a7210b0c320b200641ff0171450d11200241003a00a0090c110b41002107200241003a00a0092003417d6a21030240034020062007460d0120024180096a20076a200520076a220441026a2d00003a0000200120033602042001200441036a3602002002200741016a22043a00a0092003417f6a21032004210720044120470d000b200441ff01714120490d112002419f096a310000210f2002418f096a290000210e200229009709210d2002290087092111200228008309210920022f008109210c20022d0080092108200241c0076a41046a200241d0086a41046a2f00003b0100200220022800d0083602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290000370100200241c8076a41286a200241800b6a41286a290000370300200241c8076a41206a200241800b6a41206a290000370300200241c8076a41186a200241800b6a41186a290000370300200241c8076a41106a200241800b6a41106a290000370300200241c8076a41086a200241800b6a41086a290000370300200220022900800b3703c8072011422088200e42208684210a200e42208821172011a7210b410921120c310b200741ff0171450d10200241003a00a0090c100b200241f8016a200110870220022802f8010d0f20022802fc012109200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8074200210a410a2112420021170c2f0b20024180026a20011087022002280280020d0e2002280284022109200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8074200210a410b2112420021170c2e0b2006450d0d20052d0002210820012003417d6a3602042001200541036a360200200841e4004b0d0d200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8074200210a410c2112420021170c2d0b410d21120c2c0b410e21120c2b0b20024180096a200110ca032002280280092209450d0a200241c0076a41046a200241d0086a41046a2f01003b0100200220022801d0083602c00720024180096a41086a350200210a200228028409210b200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c80742002117410f21120c2a0b41002107200241003a00a0092006411f2006411f491b20056a41036a2112417d21040240034020062007460d0120024180096a20076a200520076a220941026a2d00003a00002001200320046a3602042001200941036a3602002002200741016a220b3a00a0092004417f6a2104200b2107200b4120470d000b200b41ff01714120490d0a2002418f096a290000210e200229009709210d2002290087092111200228008309210920022f008109210c20022d0080092108200241d0086a41186a2002419f096a310000220f3c00002002200d3703e0082002200e3703d808200220113703d0082003200b6b2203417e6a4104490d0a2012280000211d20012003417a6a36020420012005200b6a41066a360200200241c0076a41046a200241b0086a41046a2f01003b0100200220022801b0083602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a29010037030041102112200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8072011422088200e42208684210a200e42208821172011a7210b0c2a0b200741ff0171450d09200241003a00a0090c090b411121120c280b20064104490d072005280002210920012003417a6a3602042001200541066a36020020024188026a20011087022002280288020d0720042802002203200228028c024102742205490d072005417f4c0d1a0240024020050d00410121060c010b200510372206450d1c200428020021030b0240024020032005490d0020062001280200200510c90821032001280204220620054f0d01200520064194afc0001058000b2006410020051b2201450d082005450d082001102c0c080b2001200620056b3602042001200128020020056a3602002003450d0702402005ad220a422086200a84220a422088a722010d00200aa721010c250b024020034103710d0020014103710d00200aa722014103710d0020014102762205450d252003450d08200a4202884280808080f0ffffff3f832005ad84210a2003210b0c260b200aa7450d072003102c0c070b41002107200241003a00a0092006411f2006411f491b20056a41036a2112417d21040240034020062007460d0120024180096a20076a200520076a220941026a2d00003a00002001200320046a3602042001200941036a3602002002200741016a220b3a00a0092004417f6a2104200b2107200b4120470d000b200b41ff01714120490d07200229009709210a2002419f096a310000210d200229008709210e200228008309210920022f008109210c20022d0080092108200241b0086a410f6a20024180096a410f6a290000220f3700002002200e3700b708200220093600b3082002200c3b00b108200220083a00b0082003200b6b2203417e6a4104490d072012280000211d20012003417a6a36020420012005200b6a41066a360200200241c0076a41046a200241d0086a41046a2f01003b0100200220022801d0083602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c807200a422888200d42188684a72201ad422886200a42ffffffffff1f8384210d200e422088200f42208684210a200f42208821172001411876ad210f200ea7210b411321120c270b200741ff0171450d06200241003a00a0090c060b20024190026a200110f703200229039002a70d0520024190026a41106a290300210d200229039802210f200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c807200f422088200d42208684210a200d4220882117200fa7210b411421120c250b200241b0026a200110870220022802b0020d0420022802b4022109200241a8026a200110870220022802a8020d0420022802ac02210b200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c807411521120c240b41002107200241003a00a0092006411f2006411f491b20056a41036a210b417d21090240034020062007460d0120024180096a20076a200520076a220441026a2d00003a00002001200320096a3602042001200441036a3602002002200741016a22043a00a0092009417f6a21092004210720044120470d000b200441ff01714120490d04200320046b2203417e6a41034d0d04200229009709210a2002419f096a310000210d2002418f096a290000210e2002290087092111200228008309210920022f008109210c20022d0080092108200b280000211d20012003417a6a3602042001200520046a41066a360200200241c0076a41046a200241b0086a41046a2f01003b01002002200a423888200d42088684a73b01ee082002200a422888200d42188684a73b01ec082002200a421888a73b01ea082002200a421088a73a00e9082002200aa73b00e708200220093600d3082002200c3b00d108200220083a00d008200220022801b0083602c007200241ef086a310000210f200220113700d7082002200e3700df0820022900e708210d200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c8072011422088200e42208684210a200e42208821172011a7210b411621120c240b200741ff0171450d03200241003a00a0090c030b200241a80d6a200110bd0720022802a80d2209450d02200241b00d6a280200210520022802ac0d210b200241a80d6a200110f9030240024020022802a80d450d00200241800b6a200241a80d6a41c00110c9081a200241a80d6a200110a90420022903a80d4201520d01200241800b6a10e901200b41ffffffff07710d030c040b200b41ffffffff07710d020c030b200241d0086a41286a200241d80d6a290300370300200241d0086a41206a200241a80d6a41286a290300370300200241d0086a41186a200241a80d6a41206a290300370300200241d0086a41106a200241a80d6a41186a290300370300200241d8086a200241a80d6a41106a290300370300200220022903b00d3703d00802400240200428020022034104490d0020012802002206280000211320012003417c6a3602042001200641046a360200200241c0026a200110fa0320022f01c0020d0120022f01c2022114200241b8026a200110870220022802b8020d0120022802bc02211e200241c4076a200241b60b6a2f01003b0100200220022801b20b3602c007200241a10b6a2900002111200241800b6a41106a310000210f200241c00b6a2903002116200241b80b6a2903002110200241ac0b6a2f0100211b200241940b6a280200211d20022900990b210e20022903880b210d20022801ae0b211a20022d00ab0b211c20022f00a90b211520022d00980b211f20022f01920b212020022d00910b211920022903800b210a200241e8046a200241c80b6a41f80010c9081a2002418e096a200241d0086a41086a29030037010020024196096a200241d0086a41106a2903003701002002419e096a200241d0086a41186a290300370100200241a6096a200241d0086a41206a29030037010020024180096a412e6a200241d0086a41286a2903002217370100200241c8076a412e6a2017370100200220022903d00837018609200241c8076a41086a20024180096a41086a290100370300200241c8076a41106a20024180096a41106a290100370300200241c8076a41186a20024180096a41186a290100370300200241c8076a41206a20024180096a41206a290100370300200241c8076a41286a20024180096a41286a29010037030020022002290180093703c807200a4220882117200a4220862005ad84210a411721120c240b200241800b6a10e901200b41ffffffff07710d020c030b200241800b6a10e901200b41ffffffff07710d010c020b200241a80d6a200110bd0720022802a80d2209450d01200241b00d6a280200210520022802ac0d210b200241a80d6a200110f9030240024020022802a80d450d00200241800b6a200241a80d6a41c00110c9081a200241a80d6a200110a90420022903a80d4201520d01200241800b6a10e901200b41ffffffff07710d020c030b200b41ffffffff07710d010c020b200241d0086a41286a200241d80d6a290300370300200241d0086a41206a200241a80d6a41286a290300370300200241d0086a41186a200241a80d6a41206a290300370300200241d0086a41106a200241a80d6a41186a290300370300200241d8086a200241a80d6a41106a290300370300200220022903b00d3703d00802400240200428020022034104490d0020012802002206280000211320012003417c6a3602042001200641046a360200200241d0026a200110fa0320022f01d0020d0120022f01d2022114200241c8026a200110870220022802c8020d0120022802cc02211e200241c4076a200241b60b6a2f01003b0100200220022801b20b3602c007200241a10b6a2900002111200241800b6a41106a310000210f200241c00b6a2903002116200241b80b6a2903002110200241ac0b6a2f0100211b200241940b6a280200211d20022900990b210e20022903880b210d20022801ae0b211a20022d00ab0b211c20022f00a90b211520022d00980b211f20022f01920b212020022d00910b211920022903800b210a200241e8046a200241c80b6a41f80010c9081a2002418e096a200241d0086a41086a29030037010020024196096a200241d0086a41106a290300370100411821122002419e096a200241d0086a41186a290300370100200241a6096a200241d0086a41206a29030037010020024180096a412e6a200241d0086a41286a2903002217370100200241c8076a412e6a2017370100200220022903d00837018609200241c8076a41086a20024180096a41086a290100370300200241c8076a41106a20024180096a41106a290100370300200241c8076a41186a20024180096a41186a290100370300200241c8076a41206a20024180096a41206a290100370300200241c8076a41286a20024180096a41286a29010037030020022002290180093703c807200a4220882117200a4220862005ad84210a0c230b200241800b6a10e901200b41ffffffff07710d010c020b200241800b6a10e901200b41ffffffff0771450d010b2009102c0b200041193602000c290b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c280b02402007450d0020052d0001210620012003417e6a3602042001200541026a360200410021050240024020060e020001020b200241e0026a200110d80420022d00e0024101460d0120024180096a200241e0026a41017241c00110c9081a200241e0026a2001108a0220022802e0022205450d01200220022902e4023703a80d200241b00d6a20024180096a41c00110c9081a200241800b6a200241a80d6a41c80110c9081a0b200241e8046a200241800b6a41c80110c9081a2000200536020420004108360200200041086a200241e8046a41c80110c9081a200041d0016a200241c8076a41d80010c9081a0c280b200041193602000c270b2007450d1620052d0001210620012003417e6a22073602042001200541026a36020002400240024020060e03000102190b200241a80d6a200110ad0320022903b00d4202510d18200241800b6a200241a80d6a41800210c9081a200428020022054104490d1820012802002203280000210720012005417c6a3602042001200341046a360200200241a80d6a200110840520022802a80d2206450d1820022902ac0d210a02402004280200220341044f0d000240200a422088a72201450d002001410c6c21052006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b200aa72201450d192001410c6c450d192006102c0c190b20012802002204280000210520012003417c6a3602042001200441046a36020020060d190c180b200241a80d6a200110ad0320022903b00d4202510d17200241800b6a200241a80d6a41800210c9081a200428020022054104490d1720012802002203280000210720012005417c6a3602042001200341046a360200200241a80d6a200110840520022802a80d2206450d1720022902ac0d210a02402004280200220341044f0d000240200a422088a72201450d002001410c6c21052006210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b200aa72201450d182001410c6c450d182006102c0c180b20012802002204280000210520012003417c6a3602042001200441046a3602002006450d17200241e8046a200241800b6a41800210c9081a410221040c190b20074104490d162005280002210720012003417a6a22063602042001200541066a36020041032104200641034d0d16200528000621062001200341766a36020420012005410a6a360200200241e8046a200241a80d6a41800210c9081a0c180b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020020060d0020074104490d002005280002210820012003417a6a3602042001200541066a360200200241800b6a2001108a0220022802800b2209450d00200241880b6a280200210c20022802840b210b200241d8026a20011087020240024020022802d8020d0020022802dc0222032004280200410c6e2205200520034b1bad420c7e220a422088a70d11200aa72206417f4c0d110240024020060d00410421070c010b200610322207450d130b41002105200241003602f004200220073602e80420022006410c6e22063602ec0402402003450d00410021050340200241800b6a2001108a02024020022802800b22060d0020022802e804210302402005450d002005410c6c21052003210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b20022802ec042201450d032001410c6c450d032003102c0c030b20022902840b210a0240200520022802ec04470d00200241e8046a2005410110ec0120022802f004210520022802e80421070b20072005410c6c6a2205200a37020420052006360200200220022802f00441016a22053602f0042003417f6a22030d000b20022802ec04210620022802e80421070b20070d010b200b450d012009102c0c010b2009450d0002400240024002400240200428020022044104490d0020012802002213280000211520012004417c6a22033602042001201341046a36020020034104490d012013280004211c2001200441786a22033602042001201341086a36020020034104490d022013280008211b2001200441746a221436020420012013410c6a36020041002103200241003a00c00b200441736a2104034020142003460d04200241800b6a20036a201320036a2212410c6a2d00003a00002001200436020420012012410d6a3602002002200341016a22123a00c00b2004417f6a210420122103201241c000470d000b200241e8046a41086a2201200241800b6a41086a290300370300200241e8046a41106a2203200241800b6a41106a290300370300200241e8046a41186a2204200241800b6a41186a290300370300200241e8046a41206a2213200241800b6a41206a290300370300200241e8046a41286a2214200241800b6a41286a290300370300200241e8046a41306a221a200241800b6a41306a290300370300200241e8046a41386a2219200241800b6a41386a290300370300200220022903800b3703e804201241ff0171413f4d0d04200241e0026a41386a22122019290300370300200241e0026a41306a201a290300220a370300200241e0026a41286a2014290300220d370300200241e0026a41206a2013290300220f370300200241e0026a41186a2004290300220e370300200241e0026a41106a20032903002211370300200241e0026a41086a20012903002210370300200220022903e80422163703e00220024180096a41306a200a37030020024180096a41286a200d37030020024180096a41206a200f37030020024180096a41186a200e37030020024180096a41106a201137030020024180096a41086a201037030020024180096a41386a201229030037030020022016370380092009450d05200241c8076a41386a220120024180096a41386a290300370300200241c8076a41306a220320024180096a41306a290300370300200241c8076a41286a220420024180096a41286a290300370300200241c8076a41206a221220024180096a41206a290300370300200241c8076a41186a221320024180096a41186a290300370300200241c8076a41106a221420024180096a41106a290300370300200241c8076a41086a221a20024180096a41086a29030037030020022002290380093703c807200041286a201b360200200041246a201c360200200041206a20153602002000411c6a2005360200200041186a2006360200200041146a2007360200200041106a200c3602002000410c6a200b360200200041086a2009360200200020083602042000410a3602002000412c6a20022903c807370200200041346a201a2903003702002000413c6a2014290300370200200041c4006a2013290300370200200041cc006a2012290300370200200041d4006a2004290300370200200041dc006a2003290300370200200041e4006a2001290300370200200041ec006a200241a80d6a41bc0110c9081a0c2b0b0240200b450d002009102c0b02402005450d002005410c6c21052007210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b2007410020061b2201450d042006410c6c450d042001102c0c040b0240200b450d002009102c0b02402005450d002005410c6c21052007210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b2007410020061b2201450d032006410c6c450d032001102c0c030b0240200b450d002009102c0b02402005450d002005410c6c21052007210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b2007410020061b2201450d022006410c6c450d022001102c0c020b200341ff0171450d00200241003a00c00b0b0240200b450d002009102c0b02402005450d002005410c6c21052007210103400240200141046a280200450d002001280200102c0b2001410c6a2101200541746a22050d000b0b2007410020061b2201450d002006410c6c450d002001102c0b200041193602000c250b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c240b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e24000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223250b20074104490d242005280002210720012003417a6a3602042001200541066a360200410121060c230b20074104490d232005280002210720012003417a6a3602042001200541066a360200410221060c220b20074104490d222005280002210720012003417a6a3602042001200541066a360200410321060c210b4104210620074104490d212005280002210720012003417a6a3602042001200541066a3602000c200b20074104490d202005280002210720012003417a6a3602042001200541066a360200410521060c1f0b20074104490d1f2005280002210720012003417a6a360204410621062001200541066a3602000c1e0b20074104490d1e2005280002210720012003417a6a3602042001200541066a360200410721060c1d0b20074104490d1d2005280002210720012003417a6a3602042001200541066a360200410821060c1c0b20074104490d1c2005280002210720012003417a6a3602042001200541066a360200410921060c1b0b20074104490d1b2005280002210720012003417a6a3602042001200541066a360200410a21060c1a0b20074104490d1a2005280002210720012003417a6a3602042001200541066a360200410b21060c190b20074104490d192005280002210720012003417a6a3602042001200541066a360200410c21060c180b2007450d1820052d0002210620012003417d6a22093602042001200541036a360200410021070240024020060e0201001a0b20094104490d19200528000321042001200341796a3602042001200541076a360200410121070b2004ad210a4200210d410d21060c170b20074104490d172005280002210720012003417a6a3602042001200541066a360200410e21060c160b20074104490d162005280002210720012003417a6a3602042001200541066a360200410f21060c150b20074104490d152005280002210720012003417a6a3602042001200541066a360200411021060c140b20074104490d142005280002210720012003417a6a3602042001200541066a360200411121060c130b20074104490d132005280002210720012003417a6a3602042001200541066a360200411221060c120b20074104490d122005280002210720012003417a6a3602042001200541066a360200411321060c110b20074104490d112005280002210720012003417a6a3602042001200541066a360200411421060c100b20074104490d102005280002210720012003417a6a3602042001200541066a360200411521060c0f0b20074104490d0f2005280002210720012003417a6a3602042001200541066a360200411621060c0e0b20074108490d0e2005290002210a2001200341766a36020420012005410a6a3602004200210d411721060c0d0b20074104490d0d2005280002210720012003417a6a3602042001200541066a360200411821060c0c0b20074104490d0c2005280002210720012003417a6a3602042001200541066a360200411921060c0b0b20074104490d0b2005280002210720012003417a6a3602042001200541066a360200411a21060c0a0b20074110490d0a2005410a6a290000210d2005290002210a20012003416e6a3602042001200541126a360200411b21060c090b20074110490d092005410a6a290000210d2005290002210a20012003416e6a3602042001200541126a360200411c21060c080b20074104490d082005280002210720012003417a6a3602042001200541066a360200411d21060c070b20074104490d072005280002210720012003417a6a3602042001200541066a360200411e21060c060b20074104490d062005280002210720012003417a6a3602042001200541066a360200411f21060c050b20074104490d052005280002210720012003417a6a3602042001200541066a360200412021060c040b20074104490d042005280002210720012003417a6a3602042001200541066a360200412121060c030b20074104490d032005280002210720012003417a6a3602042001200541066a360200412221060c020b20074104490d022005280002210720012003417a6a3602042001200541066a360200412321060c010b20074104490d012005280002210720012003417a6a3602042001200541066a3602004200210a412421064200210d0b2000410c360200200041186a200d370200200041106a200a3702002000410c6a2007360200200041086a2006360200200041206a200241a80d6a41880210c9081a0c240b200041193602000c230b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c220b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241800b6a200110c90520022802800b2204450d00200241800b6a41086a2203280200210520022802840b2109200241800b6a200110ca0520022802800b0d0d02402005450d002004200541d0006c6a2107200421010340200141046a41003602002001280200210620014101360200200141086a2802002205200320051b210302402005450d002003450d002006102c0b200141d0006a22012007470d000b0b2009450d00200941d0006c450d002004102c0b200041193602000c210b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c200b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c1f0b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c1e0b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c1d0b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c1c0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b20074104490d032005280002210620012003417a6a22073602042001200541066a36020020074104490d03200528000621072001200341766a220436020420012005410a6a36020020044104490d03200528000a21042001200341726a36020420012005410e6a360200410121010c020b20074104490d022005280002210620012003417a6a3602042001200541066a360200410221010c010b20074104490d012005280002210620012003417a6a22073602042001200541066a36020020074104490d01200528000621072001200341766a36020420012005410a6a360200410321010b2000200136020420004114360200200041106a20043602002000410c6a2007360200200041086a2006360200200041146a200241a80d6a41940210c9081a0c1c0b200041193602000c1b0b02402007450d0020012003417e6a3602042001200541026a3602000b200041193602000c1a0b2007450d0820052d0001210b20012003417e6a2208360204410221092001200541026a3602000240024002400240200b0e05000b0102030c0b20084104490d0b2005280002210720012003417a6a3602042001200541066a360200200241800b6a2001108a0220022802800b2206450d0b20022902840b210a200241800b6a2001108a0220022802800b22040d08200aa7450d0b2006102c0c0b0b410321090c090b410421090c080b20084104490d082005280002210720012003417a6a3602042001200541066a360200410521090c070b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024020060e0400010203050b20074104490d042005280002210620012003417a6a3602042001200541066a36020020024180096a200110c90320022d0098094102460d04200241880b6a20024194096a2902003703002002200229028c093703800b200228028809210b20022802840921042002280280092107200241900b6a200241a80d6a41d40110c9081a410121090c030b20074104490d032005280002210620012003417a6a3602042001200541066a360200200241800b6a200241a80d6a41e40110c9081a410221090c020b20074104490d022005280002210620012003417a6a3602042001200541066a360200200241a80d6a200110be0420022d00a80d410a460d02200241b00d6a280200210b20022802ac0d210420022802a80d2107200241800b6a200241b40d6a41e40110c9081a410321090c010b20074104490d012005280002210620012003417a6a22073602042001200541066a36020020074104490d01200528000621072001200341766a220436020420012005410a6a360200200441034d0d01200528000a21042001200341726a220b36020420012005410e6a36020041042109200b4104490d01200528000e210b20012003416e6a3602042001200541126a360200200241800b6a200241a80d6a41e40110c9081a0b200241e8046a200241800b6a41e40110c9081a200041186a200b360200200041146a2004360200200041106a20073602002000410c6a2006360200200041086a2009360200200041173602002000411c6a200241e8046a41e40110c9081a200041a0026a20024180036a29030037030020004198026a200241e0026a41186a29030037030020004190026a200241e0026a41106a29030037030020004188026a200241e0026a41086a29030037030020004180026a20022903e0023703000c190b200041193602000c180b02402007450d0020052d0001210620012003417e6a22093602042001200541026a360200024002400240024002400240024020060e0400010203070b200241a80d6a200110f30620022802a80d2101200241800b6a200241a80d6a41047241a40210c9081a20014119460d06200241a80d6a200241800b6a41a40210c9081a41a80210322205450d0820052001360200200541046a200241a80d6a41a40210c9081a20022903b008210d20022903b808210f20022f01c008210720022d00c208210420022f00c308210920022f00c50821084101210b4200210a0c030b200241a80d6a200110f30620022802a80d2103200241800b6a200241a80d6a41047241a40210c9081a20034119460d05200241a80d6a200241800b6a41a40210c9081a41a80210322205450d0720052003360200200541046a200241a80d6a41a40210c9081a200428020022034108490d0420012802002206290000210d2001200341786a3602042001200641086a3602004102210b0c020b41002106200241003a00c80d2003417d6a21030240034020092006460d01200241a80d6a20066a200520066a220741026a2d00003a0000200120033602042001200741036a3602002002200641016a22073a00c80d2003417f6a21032007210620074120470d000b200741ff01714120490d0520022900bf0d220a422888200241c70d6a310000220e42188684a72108200a421888a72109200a421088a72104200241b70d6a290000210f20022900af0d210d20022800ab0d210520022f00a90d210320022d00a80d2106200aa72107200a423888200e42088684a7ad210a4103210b0c020b200641ff0171450d04200241003a00c80d0c040b41002106200241003a00c80d2003417d6a2103034020092006460d02200241a80d6a20066a200520066a220741026a2d00003a0000200120033602042001200741036a3602002002200641016a22073a00c80d2003417f6a21032007210620074120470d000b200741ff01714120490d0320022900bf0d210a200241c70d6a310000210e200241b70d6a290000210f20022900af0d210d20022800ab0d210520022f00a90d210320022d00a80d2106200241a80d6a200110f30620022802a80d210b200241800b6a200241a80d6a41047241a40210c9081a200b4119460d03200241a80d6a200241800b6a41a40210c9081a41a80210322201450d05200a421888a72109200a421088a72104200aa721072001200b3602004104210b200141046a200241a80d6a41a40210c9081a200a422888200e42188684a72208411076ad210a0b200020043a0022200020033b000a200020063a0009200041183602002000412b6a200a4220883c0000200041276a200a3e00002000412c6a2001360200200041256a20083b0000200041236a20093b0000200041206a20073b0100200041186a200f370200200041106a200d3702002000410c6a2005360200200041086a200b3a0000200041306a200241e8046a41f80110c9081a0c1a0b200641ff0171450d01200241003a00c80d0c010b20051083022005102c0b200041193602000c170b103b000b1039000b200241e0026a41086a20032802002201360200200220022903800b220a3703e0022000410c6a2005360200200041086a2009360200200020043602042000410e360200200041106a200a370200200041186a20013602002000411c6a200241a80d6a418c0210c9081a0c140b20022902840b210d410121090c010b200041193602000c120b20002009360204200041163602002000411c6a200d370200200041186a2004360200200041106a200a3702002000410c6a2006360200200041086a2007360200200041246a200241a80d6a41840210c9081a0c110b200041193602000c100b200041193602000c0f0b200241e8046a200241800b6a41800210c9081a410121040b200241e0026a200241e8046a41800210c9081a2000411c6a2005360200200041146a200a370200200041106a20063602002000410c6a2007360200200041086a200436020020004109360200200041206a200241e0026a41800210c9081a0c0d0b4104210b4200210a2001450d002003102c0b200241c0076a41046a20024180096a41046a2f01003b010020022002280180093602c007200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c80742002117411221120c010b2002200a3703c008200241b0086a41186a200f370300200241c0076a41046a200241a2086a41046a2f01003b0100200220183703b0082002200d3703b808200220063b00a908200220093a00a808200220022801a2083602c007200220053600ab08200241bf086a290000211720022801aa08211d20022f01a808212020022900b7082121200241e8046a200241a80d6a41f80010c9081a200241c8076a412e6a200241800b6a412e6a290100370100200241c8076a41286a200241800b6a41286a290100370300200241c8076a41206a200241800b6a41206a290100370300200241c8076a41186a200241800b6a41186a290100370300200241c8076a41106a200241800b6a41106a290100370300200241c8076a41086a200241800b6a41086a290100370300200220022901800b3703c807200a423888200f42088684210d2021422088201742208684210a2005411876211f200f423888210f201742208821172018421888a721092018420888a7210c2018a721082021a7210b0b200241b8076a41046a2201200241c0076a41046a2f01003b0100200220022802c0073602b807200241e0026a200241e8046a41f80010c9081a20024180076a412e6a2205200241c8076a412e6a29010037010020024180076a41286a2203200241c8076a41286a29030037030020024180076a41206a2206200241c8076a41206a29030037030020024180076a41186a2207200241c8076a41186a29030037030020024180076a41106a2204200241c8076a41106a29030037030020024180076a41086a2222200241c8076a41086a290300370300200220022903c80737038007200041396a2011370000200041316a200e370000200041286a200f3c0000200041206a200d370200200041186a2017422086200a42208884370200200041106a200a422086200bad84370200200041c6006a201a360100200041c4006a201b3b01002000201c3a0043200041c1006a20153b0000200041306a201f3a00002000412c6a201d360200200020203b012a200020193a00292000410c6a20093602002000200c3b010a200020083a0009200041086a20123a000020004106360200200041d8006a2016370200200041d0006a2010370200200020022802b80736014a200041ce006a20012f01003b0100200041e0006a200241e0026a41f80010c9081a200041e0016a20143b0100200041dc016a201e360200200041d8016a201336020020002002290380073701e201200041ea016a2022290300370100200041f2016a2004290300370100200041fa016a200729030037010020004182026a20062903003701002000418a026a200329030037010020004190026a200529010037010020004198026a20022903f006370300200041a0026a200241f0066a41086a2903003703000c090b03402001102b200141f0006a2101200541907f6a22050d000b0b2002280284092201450d00200141f0006c450d002003102c0b200041193602000c060b200020053b002a200020063a0029200020133a0022200020083b000a2000200c3a000920004104360200200041d8006a2017370200200041d0006a2016370200200041c8006a2010370200200041c0006a200f370200200041386a2011370200200041306a200e3702002000412c6a2003360000200041276a20013b0000200041256a20123b0000200041236a20143b0000200041206a20153b0000200041186a200a370000200041106a200d3700002000410c6a200b360000200041086a20073a0000200041e0006a200241a80d6a41c80110c9081a0c050b200041193602000c040b200241e8046a200241800b6a41880210c9081a410221010b200241e0026a200241e8046a41880210c9081a2000411c6a2005360200200041146a200a370200200041106a20033602002000410c6a2006360200200041086a200136020020004101360200200041206a200241e0026a41880210c9081a0c020b0b20004100360200200041186a200b360200200041106a200a3702002000410c6a2006360200200041086a2009360200200041206a200241a80d6a41880210c9081a0b200241d00f6a24000bab6909067f017e0a7f017e037f017e0a7f037e037f23004190106b22022400410421034101210441012105024002400240024002400240024002400240024002400240024002400240024020012802002206417f6a0e0600060e0302010e0b2002200141106a41e80110c908220641f80d6a41086a22072001410c6a280200360200200620012902043703f80d200641e8016a2000200641f80d6a10f606200641f80d6a41106a200641e8016a41106a2903003703002007200641e8016a41086a2204290300370300200620062903e80122083703f80d200641e00b6a41086a22032004280200360200200620083703e00b200641a0026a200641e00b6a10ed062003200641f80d6a41146a280200360200200620062902840e3703e00b20064180026a200641e00b6a10ef06200641f0066a410c6a200641a0026a41086a290300370200200641f0066a41146a200641a0026a41106a2903003702002006418c076a200641a0026a41186a28020036020020064194076a22092006290380023702002006419c076a20064180026a41086a290300370200200641a4076a20064180026a41106a290300370200200641ac076a20064180026a41186a280200360200200641013602f006200620062903a0023702f4062006410136029007200641f80d6a41f0016a2104200641f80d6a410472210a20064180056a41046a210b20064180056a410c6a2100200641f80d6a41ec016a210c200641e00b6a41f0016a210d200641e00b6a410472210e200641d8076a41046a210f200641c8096a4104722110200641f0066a4104722111200641c8096a41f8016a211241012105034002400240024020054101460d002006410c3602e00b0c010b200641c8096a201110f7060240024020062802c80922034102460d002012290300210820062903b80b2113200641d8076a201041ec0110c9081a024002402003450d00200a20062902d807370200200641f80d6a41186a200837030041082103200a41086a200641d8076a41086a280200360200200620133703880e0c010b2007200f41e80110c9081a200641f80d6a41f8016a2008370300200620133703e80f410a21030b200620033602f80d200641e00b6a200641f80d6a41980210c9081a0c010b410c21032006410c3602f80d024020062802f006450d00201110ee0620062802f80d21030b201120062902c809370200201141086a200641c8096a41086a290200370200201141106a200641c8096a41106a290200370200201141186a200641c8096a41186a280200360200200641003602f0062006410c3602e00b2003410c460d01200641f80d6a10ec060b20062802e00b2203410c460d0020064180056a200e41ec0110c9081a200641d8046a41206a200d41206a290300370300200641d8046a41186a200d41186a290300370300200641d8046a41106a200d41106a290300370300200641d8046a41086a200d41086a2903003703002006200d2903003703d8040c010b02402006280290074101470d00200641f80d6a200910f8060240024020062802f80d22034102470d00410c21030c010b200641c8096a200a41940210c9081a200641f80d6a200641c8096a41940210c9081a200641d8076a200641c8096a41ec0110c9081a200641b0076a41206a2205200c41206a290200370300200641b0076a41186a2214200c41186a290200370300200641b0076a41106a2215200c41106a290200370300200641b0076a41086a2216200c41086a2902003703002006200c2902003703b00702402003450d00200020062903b00737020020064180056a41086a200641d8076a41086a280200360200200041086a2016290300370200200041106a2015290300370200200041186a2014290300370200200041206a2005290300370200200620062902d80737038005410921030c010b200b200f41e80110c9081a200641d8046a41206a2005290300370300200641d8046a41186a2014290300370300200641d8046a41106a2015290300370300200641d8046a41086a2016290300370300200620062903b0073703d804410b21030b024020062802e00b410c460d00200641e00b6a10ec060b2003410c470d010b024020062802f006450d00201110ee060b0240200628029007450d00200910f0060b200610a201410d21034100210641012104410121054101210c410121140c0d0b200641e8026a20064180056a41ec0110c9081a200641c0026a41206a2205200641d8046a41206a290300370300200641c0026a41186a2214200641d8046a41186a290300370300200641c0026a41106a2215200641d8046a41106a290300370300200641c0026a41086a2216200641d8046a41086a290300370300200620062903d8043703c002200620033602f80d200a200641e8026a41ec0110c9081a200441206a2005290300370300200441186a2014290300370300200441106a2015290300370300200441086a2016290300370300200420062903c002370300200641f80d6a200610f9062103200641f80d6a10ec0620062802f0062105200341ff01712203410d460d000b02402005450d00201110ee060b0240200628029007450d00200910f0060b200610a20141002105410121040c0c0b200141106a290300211720024180056a200141186a41e80110c9081a200141086a28020021182001410c6a28020021192001280204210e200241d8046a41146a4100360200200242003703e004200241003602d8040240024020194198026c2206450d00200e20066a2112200241d8046a410c6a21072000410c6a211a200241e00b6a410c6a211b200241e00b6a4180026a210c200241e00b6a41206a2111200241e00b6a41086a210d200241d8076a411c6a2109200241d8076a41046a2110200241e00b6a410472211c200241f80d6a41046a211d200241e80d6a211e200241d10d6a210b200241f80d6a410372211f200241c8096a4103722120200041146a2121200241e00b6a41f8016a210a200e2115034002400240024002400240024002400240024002400240024002400240201528020022060e0c0d000102030c0b0a090809080d0b02400240200041086a280200450d0020002802002206450d08200241e8026a2000280204200610fa060c010b200241003602f002200241003602e8020b02400240200041146a280200450d00201a2802002206450d07200241f80d6a2000280210200610fb060c010b200241003602800e200241003602f80d0b200241fc026a200241f80d6a41086a280200360200200220022903f80d3702f402200241e00b6a41086a2206200241d8046a41086a280200360200200220022903d8043703e00b200241f80d6a200241e00b6a10ed06200241f80d6a10ee062006200741086a280200360200200220072902003703e00b200241f80d6a200241e00b6a10ef06200241f80d6a10f0060c0f0b02400240200041086a280200450d0020002802002206450d05200241e00b6a2000280204200610fa060c010b200241003602e80b200241003602e00b0b201b2007290200370200201b41086a200741086a280200360200200241c8096a41086a200241d8046a41086a2206280200360200200220022903d8043703c809200241f80d6a200241c8096a10ed06200241f80d6a10ee062006200d290300370300200241d8046a41106a200241e00b6a41106a290300370300200220022903e00b3703d8040c0b0b200d200241d8046a41086a2206280200360200200220022903d8043703e00b024002402021280200450d00201a2802002204450d03200241f80d6a2000280210200410fb060c010b200241003602800e200241003602f80d0b201b20022903f80d370200201b41086a200241f80d6a41086a280200360200200241c8096a41086a200741086a280200360200200220072902003703c809200241f80d6a200241c8096a10ef06200241f80d6a10f0062006200d290300370300200241d8046a41106a200241e00b6a41106a290300370300200220022903e00b3703d8040c0a0b2002200010fc06200241e8026a41186a200241186a2802002206360200200241e8026a41106a200241106a290300370300200241e8026a41086a200241086a290300370300200220022903003703e8022006450d0920022006417f6a36028003200241e8026a410020022802ec021b221428020021030240024020142802082205201428020422042f0186164f0d00200421060c010b0340024020042802801622060d00410021060c020b200341016a210320042f018416210520062104200520062f0186164f0d000b0b200541016a21160240024020030d00200621040c010b200620164102746a4188166a280200210402402003417f6a2203450d00034020042802881621042003417f6a22030d000b0b410021160b2014200436020420144100360200201420163602082006200541f0016c6a2104200620054104746a41d0146a21060340200641086a2903002108200629030021130240024020042802004101470d002004410c6a2802002206417f4c0d1520042802042105410121034101210402402006450d00200610322204450d170b200241003602e007200220063602dc07200220043602d807200241d8076a4100200610c80120022802d807220420022802e00722146a2005200610c9081a2002201420066a3602e0074108210620022902dc07212220132123200821240c010b200241f80d6a200441086a10fd062010200241f80d6a41e80110c9081a200241d8076a41146a290200212420022902e407212320022902dc072122200241e00b6a200941d00110c9081a410a2106410021030b200241c8096a200241e00b6a41d00110c9081a200241b0076a41106a2205200241f0066a41106a290300370300200241b0076a41086a2214200241f0066a41086a290300370300200220022903f0063703b007200241e00b6a41186a2024370300200220233703f00b200220043602e40b200220063602e00b200220223703e80b2011200241c8096a41d00110c9081a200a2008370300200c20022903b007370300200c41086a2014290300370300200c41106a2005290300370300200220133703d00d024002402003450d00201528020c2022422088a72206470d000240201528020422032004460d0020032004200610cc080d010b200241f80d6a200241e00b6a41980210c9081a200241d8046a200241f80d6a10eb060c010b200241e00b6a10ec060b2002280280032206450d0a20022006417f6a36028003200241e8026a410020022802ec021b221428020021030240024020142802082205201428020422042f0186164f0d00200421060c010b0340024020042802801622060d00410021060c020b200341016a210320042f018416210520062104200520062f0186164f0d000b0b200541016a21160240024020030d00200621040c010b200620164102746a4188166a280200210402402003417f6a2203450d00034020042802881621042003417f6a22030d000b0b410021160b2014200436020420144100360200201420163602082006200541f0016c6a2104200620054104746a41d0146a21060c000b0b41ecd0c800412b41bc9ec800103c000b41ecd0c800412b41bc9ec800103c000b41ecd0c800412b41bc9ec800103c000b41ecd0c800412b41bc9ec800103c000b0240024002400240200641776a0e03020001000b41d5a1c80041284198a3c800103c000b200241e00b6a201541086a10fd06201d200241e00b6a41e80110c9081a201541f0016a21034100210441002106024002400240024002400240024020152d00f0010e0706010203040500060b201541fc016a2802002206417f4c0d15201541f4016a28020021030240024020060d00410121050c010b200610322205450d170b200241003602e80b200220063602e40b200220053602e00b200241e00b6a4100200610c80120022802e00b20022802e80b22056a2003200610c9081a202041086a200520066a360000202020022903e00b370000410621060c050b200241c8096a410f6a20154180026a290300370000200220152903f8013700cf09410121060c040b200220032800013602c809410221060c030b200220032900013703c809410321060c020b200241c8096a41086a200341096a290000370300200220032900013703c809410421060c010b200241c8096a410f6a200341106a290000370000200241c8096a41086a200341096a290000370300200241d8076a41086a20154190026a2d00003a0000200220032900013703c80920022015290288023703d807410521060b200241e00b6a200241f80d6a41ec0110c9081a200241e8026a410f6a200241c8096a410f6a290000370000200241e8026a41086a200241c8096a41086a290300370300200241086a200241d8076a41086a290300370300200220022903c8093703e802200220022903d8073703004101210f0c010b2015410c6a2802002206417f4c0d0e201528020421040240024020060d00410121030c010b200610322203450d100b4100210f200241003602e007200220063602dc07200220033602d807200241d8076a4100200610c80120022802d80720022802e00722036a2004200610c9081a2002200320066a3602e007410021060240024002400240024002400240201541106a22042d00000e0706010203040500060b2015411c6a2802002206417f4c0d14201541146a28020021040240024020060d00410121030c010b200610322203450d160b200241003602e80b200220063602e40b200220033602e00b200241e00b6a4100200610c80120022802e00b20022802e80b22036a2004200610c9081a201f41086a200320066a360000201f20022903e00b370000410621060c050b200241f80d6a410f6a201541206a290300370000200220152903183700ff0d410121060c040b200220042800013602f80d410221060c030b200220042900013703f80d410321060c020b200241f80d6a41086a200441096a290000370300200220042900013703f80d410421060c010b200241f80d6a410f6a200441106a290000370000200241f80d6a41086a200441096a290000370300200241c8096a41086a201541306a2d00003a0000200220042900013703f80d200220152902283703c809410521060b200241e00b6a200241d8076a41ec0110c9081a200241e8026a410f6a200241f80d6a410f6a290000370000200241e8026a41086a200241f80d6a41086a290300370300200241086a200241c8096a41086a290300370300200220022903f80d3703e802200220022903c809370300410121040b200241c8096a200241e00b6a41ec0110c9081a200241d8076a41086a2203200241e8026a41086a290300370300200241d8076a410f6a2205200241e8026a410f6a290000370000200241f0066a41086a2214200241086a290300370300200220022903e8023703d807200220022903003703f006200220043602e00b201c200241c8096a41ec0110c9081a200b20022903d807370000200b41086a2003290300370000200b410f6a2005290000370000201e20022903f006370300201e41086a2014290300370300200220063a00d00d0240201a2802002203450d0020002802102116034020032f018e182105410021062003210402400240034020052006460d01200641016a2106200241e00b6a2004108f02211420044198026a21040240201441187441187541016a0e03000301000b0b2006417f6a21050b2016450d022016417f6a2116200320054102746a4190186a28020021030c010b0b200241f80d6a200241e00b6a41980210c9081a2007200241f80d6a10e5060c050b02400240200f450d00200d10a2010c010b20022802e80b2206202520061b212520022802e40b410020061b2206450d002025450d002006102c0b20022d00d00d4106490d0420022802d80d2206202620061b212620022802d40d410020061b2206450d042026450d042006102c0c040b0240024002400240200641786a0e03020001000b41d5a1c80041284188a3c800103c000b200241e00b6a201541086a10fd06201d200241e00b6a41e80110c9081a201541f8016a290300210820152903f0012113200241c8096a200241f80d6a41ec0110c9081a410021040c010b2015410c6a2802002206417f4c0d0d20152802042105410121044101210302402006450d00200610322203450d0f0b200241003602d009200220063602cc09200220033602c809200241c8096a4100200610c80120022802c80920022802d00922036a2005200610c9081a2002200320066a3602d009201541186a2903002108201529031021130b200220043602e00b201c200241c8096a41ec0110c9081a02402000200241e00b6a10fe062206450d00200241f80d6a200241e00b6a41f00110c9081a200241d8046a200241f80d6a20062903002222201320132022562008200641086a29030022225620082022511b22061b2022200820061b10ff060c040b024020022802e00b0d00200d10a2010c040b20022802e80b2206202720061b212720022802e40b410020061b2206450d032027450d032006102c0c030b200241e8026a201a108007200241d8076a41186a200241e8026a41186a280200360200200241d8076a41106a200241e8026a41106a290300370300200241d8076a41086a200241e8026a41086a290300370300200220022903e8023703d807201541086a210f03400240024020022802f0072206450d0020022006417f6a3602f007200241d8076a410020022802dc071b221428020021030240024020142802082205201428020422062f018e184f0d00200621040c010b0340024020062802881822040d00410021040c020b200341016a210320062f018c18210520042106200520042f018e184f0d000b0b200541016a21160240024020030d00200421060c010b200420164102746a4190186a280200210602402003417f6a2203450d00034020062802901821062003417f6a22030d000b0b410021160b201420063602042014410036020020142016360208200241f80d6a200420054198026c6a10810720022802f80d410c460d05200241c8096a200241f80d6a41980210c9081a200241e00b6a200241c8096a41980210c9081a20022802e00b410b470d01200f200d108207450d01200241f80d6a200241e00b6a41980210c9081a200241d8046a200241f80d6a10eb060c020b2002410c3602f80d0c040b200241e00b6a10ec060c000b0b2002200010fc06200241e8026a41186a200241186a2802002206360200200241e8026a41106a200241106a290300370300200241e8026a41086a200241086a290300370300200220022903003703e8022006450d0120022006417f6a36028003200241e8026a410020022802ec021b221428020021030240024020142802082205201428020422042f0186164f0d00200421060c010b0340024020042802801622060d00410021060c020b200341016a210320042f018416210520062104200520062f0186164f0d000b0b200541016a21160240024020030d00200621040c010b200620164102746a4188166a280200210402402003417f6a2203450d00034020042802881621042003417f6a22030d000b0b410021160b201541086a210f2014200436020420144100360200201420163602082006200541f0016c6a2104200620054104746a41d0146a21060340200641086a2903002108200629030021130240024020042802004101470d002004410c6a2802002206417f4c0d0d200428020421050240024020060d00410121030c010b200610322203450d0f0b41002104200241003602e007200220063602dc07200220033602d807200241d8076a4100200610c80120022802d807220320022802e00722146a2005200610c9081a2002201420066a3602e0074108210620022902dc07212220132123200821240c010b200241f80d6a200441086a10fd062010200241f80d6a41e80110c9081a200241d8076a41146a290200212420022902e407212320022902dc072122200241e00b6a200941d00110c9081a410a2106410121040b200241c8096a200241e00b6a41d00110c9081a200241b0076a41106a2205200241f0066a41106a290300370300200241b0076a41086a2214200241f0066a41086a290300370300200220022903f0063703b007200241e00b6a41186a2024370300200220233703f00b200220223703e80b200220033602e40b200220063602e00b2011200241c8096a41d00110c9081a200a2008370300200c20022903b007370300200c41086a2014290300370300200c41106a2005290300370300200220133703d00d024002402004450d00200f200d108207450d00200241f80d6a200241e00b6a41980210c9081a200241d8046a200241f80d6a10eb060c010b200241e00b6a10ec060b2002280280032206450d0220022006417f6a36028003200241e8026a410020022802ec021b221428020021030240024020142802082205201428020422042f0186164f0d00200421060c010b0340024020042802801622060d00410021060c020b200341016a210320042f018416210520062104200520062f0186164f0d000b0b200541016a21160240024020030d00200621040c010b200620164102746a4188166a280200210402402003417f6a2203450d00034020042802881621042003417f6a22030d000b0b410021160b2014200436020420144100360200201420163602082006200541f0016c6a2104200620054104746a41d0146a21060c000b0b200241e8026a201a108007200241d8076a41186a200241e8026a41186a280200360200200241d8076a41106a200241e8026a41106a290300370300200241d8076a41086a200241e8026a41086a290300370300200220022903e8023703d80703400240024020022802f0072206450d0020022006417f6a3602f007200241d8076a410020022802dc071b221428020021030240024020142802082205201428020422062f018e184f0d00200621040c010b0340024020062802881822040d00410021040c020b200341016a210320062f018c18210520042106200520042f018e184f0d000b0b200541016a21160240024020030d00200421060c010b200420164102746a4190186a280200210602402003417f6a2203450d00034020062802901821062003417f6a22030d000b0b410021160b201420063602042014410036020020142016360208200241f80d6a200420054198026c6a10810720022802f80d410c460d03200241c8096a200241f80d6a41980210c9081a200241e00b6a200241c8096a41980210c9081a20022802e00b4109470d01201528020c220620022802ec0b470d0102402015280204220420022802e40b2203460d0020042003200610cc080d020b200241f80d6a200241e00b6a41980210c9081a200241d8046a200241f80d6a10eb060c020b2002410c3602f80d0c020b200241e00b6a10ec060c000b0b20154198026a22152012470d000b0b200241e8026a41106a200241d8046a41106a290300370300200241e8026a41086a200241d8046a41086a290300370300200220022903d8043703e8020b200241f80d6a20024180056a108307200241e8026a200241f80d6a108407200241e00b6a41106a200241e8026a41106a290300370300200241e00b6a41086a200241e8026a41086a2206290300370300200220022903e80222083703e00b200241d8076a41086a22042006280200360200200220083703d807200241c8096a200241d8076a10ed06200241086a2206200241f40b6a2203280200360200200220022902ec0b370300200241d8076a200210ef06200241e00b6a410c6a200241c8096a41086a2903003702002003200241c8096a41106a290300370200200241fc0b6a200241c8096a41186a280200360200200241840c6a20022903d8073702002002418c0c6a2004290300370200200241940c6a200241d8076a41106a2903003702002002419c0c6a200241d8076a41186a28020036020041012104200241013602e00b200220022903c8093702e40b200241013602800c2002200241e00b6a108507200241f80d6a10a201200241e00b6a20024180056a41e80110c9081a200241f80d6a41106a2017370300200241f80d6a410c6a2006280200360200200220022903003702fc0d200241033a00f80d200241e00b6a200241f80d6a10e806200e201910c3024100210c0240200e410020181b2206450d0020184198026c450d002006102c0b410121050c030b200241c8096a200141206a41e80110c9081a200241f0066a41086a2206200141186a2802003602002002200141106a2902003703f006200241f80d6a41086a2001410c6a280200360200200220012902043703f80d200241e8026a2000200241f80d6a10f606200241f80d6a200241c8096a108307200241e8026a200241f80d6a108407200241e00b6a41106a200241e8026a41106a290300370300200241e00b6a41086a200241e8026a41086a2204290300370300200220022903e80222083703e00b20024180056a41086a220320042802003602002002200837038005200241d8076a20024180056a10ed06200241086a2205200241f40b6a2204280200360200200220022902ec0b37030020024180056a200210ef06200241e00b6a410c6a200241d8076a41086a2903003702002004200241d8076a41106a290300370200200241fc0b6a200241d8076a41186a280200360200200241840c6a2002290380053702002002418c0c6a2003290300370200200241940c6a20024180056a41106a2903003702002002419c0c6a20024180056a41186a28020036020041012104200241013602e00b200220022903d8073702e40b200241013602800c2002200241e00b6a108507200241f80d6a10a201200241e00b6a200241c8096a41e80110c9081a200241f80d6a410c6a2005280200360200200241f80d6a41106a20022903f006370300200241f80d6a41186a2006280200360200200220022903003702fc0d200241023a00f80d200241e00b6a200241f80d6a10e806410021050c010b200241c8096a200141206a41e80110c9081a200241f0066a41086a2206200141186a2802003602002002200141106a2902003703f006200241f80d6a41086a2001410c6a280200360200200220012902043703f80d200241e8026a2000200241f80d6a10f606200241f80d6a200241c8096a108307200241e8026a200241f80d6a108407200241e00b6a41106a200241e8026a41106a290300370300200241e00b6a41086a200241e8026a41086a2204290300370300200220022903e80222083703e00b20024180056a41086a220320042802003602002002200837038005200241d8076a20024180056a10ed06200241086a2204200241f40b6a2205280200360200200220022902ec0b37030020024180056a200210ef06200241e00b6a410c6a200241d8076a41086a2903003702002005200241d8076a41106a290300370200200241fc0b6a200241d8076a41186a280200360200200241840c6a2002290380053702002002418c0c6a2003290300370200200241940c6a20024180056a41106a2903003702002002419c0c6a20024180056a41186a28020036020041012105200241013602e00b200220022903d8073702e40b200241013602800c2002200241e00b6a108507200241f80d6a10a201200241e00b6a200241c8096a41e80110c9081a200241f80d6a410c6a2004280200360200200241f80d6a41106a20022903f006370300200241f80d6a41186a2006280200360200200220022903003702fc0d41002104200241003a00f80d200241e00b6a200241f80d6a10e8060b4101210c0b410121140c050b200241e8026a200141206a41e80110c9081a200141186a280200211b200141146a2802002118200141106a2802002119200241f80d6a41086a2001410c6a280200360200200220012902043703f80d200241a0026a2000200241f80d6a10f606200241b0076a200241a0026a10fc06200241d8046a200241a0026a410c6a221c108007200241f0066a410c6a2210200241b0076a41086a290300370200200241f0066a41146a200241b0076a41106a290300370200200241f0066a411c6a200241b0076a41186a28020036020020024194076a220a20022903d8043702002002419c076a2200200241d8046a41086a290300370200200241a4076a200241d8046a41106a290300370200200241ac076a200241d8046a41186a280200360200200241013602f006200220022903b0073702f406200241013602900720024198076a210d200241f80f6a2111200241f80d6a41206a2112200241f80d6a4104722109200241d8076a411c6a210b200241d8076a41046a211a200241f0066a41086a210f200241f0066a410472210e200241f00f6a210741012106034002400240024020064101460d002002410c3602f80d0c010b0240200228028c072206450d0020022006417f6a36028c07200e410020022802f80622061b22142802002103024002402010410820061b22152802002205200f410420061b221628020022042f0186164f0d00200421060c010b0340024020042802801622060d00410021060c020b200341016a210320042f018416210520062104200520062f0186164f0d000b0b200541016a210c0240024020030d00200621040c010b2006200c4102746a4188166a280200210402402003417f6a2203450d00034020042802881621042003417f6a22030d000b0b4100210c0b20162004360200201441003602002015200c360200200620054104746a220441d8146a2903002108200441d0146a2903002113024002402006200541f0016c6a22042802004101470d002004410c6a2802002206417f4c0d06200428020421040240024020060d00410121030c010b200610322203450d080b200241003602e007200220063602dc07200220033602d807200241d8076a4100200610c80120022802d80720022802e00722036a2004200610c9081a4108210420024180026a41086a200320066a2206360200200220063602e007200220022902d807370380020c010b20024180056a200441086a10fd06201a20024180056a41e80110c9081a200220022902dc0737028402200241d8076a41146a290200212420022902e40721172002200b41d00110c9081a410a2104201321222008212320172113202421080b2009200229038002370200200241f80d6a41186a2008370300200941086a20024180026a41086a280200360200200220133703880e200220043602f80d2012200241d00110c9081a20072023370300201120022903c002370300201141086a200241c0026a41086a290300370300201141106a200241c0026a41106a290300370300200220223703e80f200241e00b6a200241f80d6a41980210c9081a0c020b2002410c3602f80d200241003602f0060b02402002280290074101460d002002410c3602e00b0c060b20022802ac072206450d0420022006417f6a3602ac07200a410020022802980722061b22142802002103024002402000410820061b22152802002205200d410420061b221628020022062f018e184f0d00200621040c010b0340024020062802881822040d00410021040c020b200341016a210320062f018c18210520042106200520042f018e184f0d000b0b200541016a210c0240024020030d00200421060c010b2004200c4102746a4190186a280200210602402003417f6a2203450d00034020062802901821062003417f6a22030d000b0b4100210c0b20162006360200201441003602002015200c360200200241e00b6a200420054198026c6a10810720022802f80d410c460d00200241f80d6a10ec060b20022802e00b410c460d04200241c8096a200241e00b6a41980210c9081a200241f80d6a200241c8096a41980210c9081a200241f80d6a200241e8026a10f9062106200241f80d6a10ec060240200641ff01712203410d470d0020022802f00621060c010b0b200241e00b6a41086a2206200241a0026a41086a280200360200200220022903a0023703e00b200241f80d6a200241e00b6a10ed06200241f80d6a10ee062006201c41086a2802003602002002201c2902003703e00b200241f80d6a200241e00b6a10ef06200241f80d6a10f0062019201b10c4024100210402402019410020181b2206450d0020184188026c450d002006102c0b200241e8026a10a201410121050c060b103b000b1039000b2002410c3602e00b0b20024180056a41106a2204200241a0026a41106a29030037030020024180056a41086a2206200241a0026a41086a290300370300200220022903a00237038005200241f80d6a200241e8026a10830720024180056a200241f80d6a108407200241e00b6a41106a2004290300370300200241e00b6a41086a2006290300370300200220022903800522083703e00b200241d8076a41086a22042006280200360200200220083703d807200241c8096a200241d8076a10ed06200241086a2206200241e00b6a41146a2203280200360200200220022902ec0b370300200241d8076a200210ef06200241e00b6a410c6a200241c8096a41086a2903003702002003200241c8096a41106a290300370200200241fc0b6a200241c8096a41186a280200360200200241840c6a20022903d8073702002002418c0c6a2004290300370200200241940c6a200241d8076a41106a2903003702002002419c0c6a200241d8076a41186a28020036020041012104200241013602e00b200220022903c8093702e40b200241013602800c2002200241e00b6a108507200241f80d6a10a201200241e00b6a200241e8026a41e80110c9081a200241f80d6a410c6a2006280200360200200241f80d6a41186a201b360200200241f80d6a41146a2018360200200241f80d6a41106a2019360200200220022903003702fc0d200241013a00f80d200241e00b6a200241f80d6a10e80641002114410121054101210c0b41012106410121030b0240024002400240024002402001280200417f6a0e06000105020304050b2006450d0720012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141106a10a2010c070b2014450d0620012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141206a10a201200141106a280200200141186a28020010c402200141146a2802002206450d0620012802102204450d0620064188026c450d062004102c0c060b2004450d0520012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141206a10a201200141106a280200200141186a28020010c402200141146a2802002206450d0520012802102204450d0520064188026c450d052004102c0c050b2005450d0420012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141206a10a201200141106a280200200141186a28020010c402200141146a2802002206450d0420012802102204450d0420064188026c450d042004102c0c040b200c450d03200141186a10a20120012802042001410c6a28020010c302200141086a2802002206450d0320012802042204450d0320064198026c450d032004102c0c030b20011086070c020b200128020021060b0240024002400240024002402006417f6a0e06000105020304050b2005450d0520012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141106a10a2010c050b2004450d0420012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141206a10a201200141106a280200200141186a28020010c402200141146a2802002206450d0420012802102204450d0420064188026c450d042004102c0c040b20012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141206a10a201200141106a280200200141186a28020010c402200141146a2802002206450d0320012802102204450d0320064188026c450d032004102c0c030b20012802042001410c6a28020010c3020240200141086a2802002206450d0020012802042204450d0020064198026c450d002004102c0b200141206a10a201200141106a280200200141186a28020010c402200141146a2802002206450d0220012802102204450d0220064188026c450d022004102c0c020b200141186a10a20120012802042001410c6a28020010c302200141086a2802002206450d0120012802042204450d0120064198026c450d012004102c0c010b20011086070b20024190106a240020030b961001027f0240024002400240024020002802000e0404000102030b024002400240024020002d0008417e6a0e06000102070703070b200028022c4101470d06200041346a2802002201450d0620002802302200450d062001450d062000102c0f0b200028020c4101470d05200041146a2802002201450d0520002802102200450d052001450d052000102c0f0b200041206a2802004101470d04200041286a2802002201450d0420002802242200450d042001450d042000102c0f0b200041106a2802002201450d03200028020c2200450d032001450d032000102c0f0b0240024002400240024020002d0008417e6a0e06000102040403040b200028022c4101470d03200041346a2802002201450d0320002802302202450d032001450d032002102c0c030b200028020c4101470d02200041146a2802002201450d0220002802102202450d022001450d022002102c0c020b200041206a2802004101470d01200041286a2802002201450d0120002802242202450d012001450d012002102c0c010b200041106a2802002201450d00200028020c2202450d002001450d002002102c0b0240024002400240200041c0006a2d0000417e6a0e06000102060603060b20002802644101470d05200041ec006a2802002201450d0520002802682200450d052001450d052000102c0f0b20002802444101470d04200041cc006a2802002201450d0420002802482200450d042001450d042000102c0f0b200041d8006a2802004101470d03200041e0006a2802002201450d03200028025c2200450d032001450d032000102c0f0b200041c8006a2802002201450d0220002802442200450d022001450d022000102c0f0b0240024002400240024020002d0008417e6a0e06000102040403040b200028022c4101470d03200041346a2802002201450d0320002802302202450d032001450d032002102c0c030b200028020c4101470d02200041146a2802002201450d0220002802102202450d022001450d022002102c0c020b200041206a2802004101470d01200041286a2802002201450d0120002802242202450d012001450d012002102c0c010b200041106a2802002201450d00200028020c2202450d002001450d002002102c0b02400240024002400240200041c0006a2d0000417e6a0e06000102040403040b20002802644101470d03200041ec006a2802002201450d0320002802682202450d032001450d032002102c0c030b20002802444101470d02200041cc006a2802002201450d0220002802482202450d022001450d022002102c0c020b200041d8006a2802004101470d01200041e0006a2802002201450d01200028025c2202450d012001450d012002102c0c010b200041c8006a2802002201450d0020002802442202450d002001450d002002102c0b0240024002400240200041f8006a2d0000417e6a0e06000102050503050b200028029c014101470d04200041a4016a2802002201450d0420002802a0012200450d042001450d042000102c0f0b200028027c4101470d0320004184016a2802002201450d032000280280012200450d032001450d032000102c0c030b20004190016a2802004101470d0220004198016a2802002201450d022000280294012200450d022001450d022000102c0f0b20004180016a2802002201450d01200028027c2200450d012001450d012000102c0f0b0240024002400240024020002d0008417e6a0e06000102040403040b200028022c4101470d03200041346a2802002201450d0320002802302202450d032001450d032002102c0c030b200028020c4101470d02200041146a2802002201450d0220002802102202450d022001450d022002102c0c020b200041206a2802004101470d01200041286a2802002201450d0120002802242202450d012001450d012002102c0c010b200041106a2802002201450d00200028020c2202450d002001450d002002102c0b02400240024002400240200041c0006a2d0000417e6a0e06000102040403040b20002802644101470d03200041ec006a2802002201450d0320002802682202450d032001450d032002102c0c030b20002802444101470d02200041cc006a2802002201450d0220002802482202450d022001450d022002102c0c020b200041d8006a2802004101470d01200041e0006a2802002201450d01200028025c2202450d012001450d012002102c0c010b200041c8006a2802002201450d0020002802442202450d002001450d002002102c0b02400240024002400240200041f8006a2d0000417e6a0e06000102040403040b200028029c014101470d03200041a4016a2802002201450d0320002802a0012202450d032001450d032002102c0c030b200028027c4101470d0220004184016a2802002201450d022000280280012202450d022001450d022002102c0c020b20004190016a2802004101470d0120004198016a2802002201450d012000280294012202450d012001450d012002102c0c010b20004180016a2802002201450d00200028027c2202450d002001450d002002102c0b0240024002400240200041b0016a2d0000417e6a0e06000102040403040b20002802d4014101470d03200041dc016a2802002201450d0320002802d8012200450d032001450d032000102c0f0b20002802b4014101470d02200041bc016a2802002201450d0220002802b8012200450d022001450d022000102c0f0b200041c8016a2802004101470d01200041d0016a2802002201450d0120002802cc012200450d012001450d012000102c0f0b200041b8016a2802002201450d0020002802b4012200450d002001450d002000102c0f0b0be1a20109227f037e0b7f217e0f7f1c7e027f037e057f23002203210420034180156b416071220324002003412c6a4100360200200342003703202003410036021820022802002205200228020822064198026c6a2107200228020421082005210902402006450d00200341186a410c6a210a2001410c6a210b200341e8126a410472210c200341e8126a41f0016a210220034188096a41ec016a210d200341f0066a41ec016a210e20034188096a41e0016a210f20034188096a4104722110200341e00d6a4104722111200341e8126a4180026a2112200341c00b6a4104722113200341e00d6a41086a2114200341c00b6a41086a2115200341e8126a41086a211620034190106a410472211720034190106a41086a2118200341e0046a4104722119200341e0046a41086a211a20034188096a41086a211b200341f0066a41086a211c200341f0066a410472211d20034188096a41046a211e20034188096a41f0016a211f200341f0066a41106a2120200341e8126a41046a2121200341f0066a41f0016a2122200341c8026a4104722123200341e8126a41f8016a212420052109034020092802002106200341e8126a200941046a41940210c9081a20094198026a21092006410c460d01200341346a200341e8126a41940210c9081a200320063602c8022023200341346a41940210c9081a02400240024002400240024002400240024002400240024002400240024002400240024020060e0c07000102030f040e0b090c08070b200129021021252001410036021420012902082126200142003702082001290200212720014100360200200041106a20253702002000202637020820002027370200200341c8026a10ec062009200720096b4198026d10c30202402008450d0020084198026c450d002005102c0b20034188096a41086a2202200341186a41086a2802003602002003200329031837038809200341e8126a20034188096a10ed06200341e8126a10ee062002200a41086a2802003602002003200a29020037038809200341e8126a20034188096a10ef06200341e8126a10f006200424000f0b200128020821282001410036020820012802042106200120293602042001280200212a20014100360200200320283602f012200320063602ec122003202a3602e812200341e00d6a200341e8126a10ed06200341f0066a41186a200341e00d6a41186a2802003602002020200341e00d6a41106a290300370300201c2014290300370300200320032903e00d3703f006200341e8126a200341f0066a10f706024020032802e8124102460d0003402024290300212520032903d814212620034188096a200341e8126a41f00110c9081a200341186a20034188096a2026202510ff06200341e8126a200341f0066a10f70620032802e8124102470d000b0b200341f0066a10ee06200621290c050b20012802142106200141003602142001280210212a2001202b360210200128020c21282001410036020c200320063602f0122003202a3602ec12200320283602e81220034190106a200341e8126a10ef06200341c00b6a41186a20034190106a41186a280200360200200341c00b6a41106a20034190106a41106a2903003703002015201829030037030020032003290390103703c00b200341e8126a200341c00b6a10f80620032802e81222064102460d03200341e00d6a200c41940210c9081a0340200341f0066a200341e00d6a41940210c9081a20034188096a200341e00d6a41940210c9081a200320063602e812200c200341f0066a41ec0110c9082128200241206a200d41206a290200370200200241186a200d41186a290200370200200241106a200d41106a290200370200200241086a200d41086a2902003702002002200d290200370200200a200341e8126a10a608200341e8126a200341c00b6a10f80620032802e81222064102460d04200341e00d6a202841940210c9081a0c000b0b200341e8126a200341c8026a41980210c9081a0c010b200341e8126a200341c8026a41980210c9081a0b024002400240024020032802e812417c6a0e03020001000b41d5a1c80041284180a2c800103c000b2015201641e80110c9081a410021060c010b2013200c290200370200201341086a200c41086a280200360200410121060b200320063602c00b20012802002106200141003602002001280204212c2001202d36020420012802082128200141003602082003410036028812200341003602801220032028360290092003202c36028c092003200636028809200341e0046a20034188096a10ed0620034190106a41186a200341e0046a41186a28020036020020034190106a41106a200341e0046a41106a2903003703002018201a290300370300200320032903e0043703901020034188096a20034190106a10f70602402003280288094102460d00034020034188096a41f8016a290300212520032903f80a2126200341e00d6a20034188096a41f00110c9081a02400240024020032802e00d220620032802c00b470d00024020060d0020142015108207450d010c020b20032802ec0d220620032802cc0b470d0020032802e40d222820032802c40b222a460d012028202a200610cc08450d010b200341f0066a200341e00d6a41f00110c9081a20034180126a200341f0066a2026202510a2080c010b200341f0066a200341e00d6a41f00110c9081a200341186a200341f0066a2026202510ff060b20034188096a20034190106a10f7062003280288094102470d000b0b20034190106a10ee06201c200141086a2206280200360200200320012902003703f00620034188096a200341f0066a10ed0620034188096a10ee06200620034180126a41086a28020036020020012003290380123702000240024020032802c00b0d00201510a2010c010b20032802c80b2206202e20061b212e20032802c40b410020061b2206450d00202e450d002006102c0b0240024020032802e812417c6a0e03010001000b200341e8126a10ec060b202c212d0c0b0b200341c00b6a10f006202a212b0b200341c8026a10ec060c090b200341f0066a200341c8026a41980210c9081a0c010b200341f0066a200341c8026a41980210c9081a0b024002400240024020032802f00641776a0e03020001000b41d5a1c800412841b0a2c800103c000b2021201c41e80110c9081a200341c00b6a41206a202241206a290300370300200341c00b6a41186a202241186a290300370300200341c00b6a41106a202241106a2903003703002015202241086a290300370300200320222903003703c00b20034188096a200341e8126a41ec0110c9081a410021060c010b201b201d41086a2802003602002015202041086a290300370300200341c00b6a41106a202041106a290300370300200341c00b6a41186a202041186a290300370300200341c00b6a41206a202041206a2903003703002003201d29020037038809200320202903003703c00b410121060b200341e00d6a20034188096a41ec0110c9081a20034190106a41206a2228200341c00b6a41206a29030037030020034190106a41186a222a200341c00b6a41186a222f29030037030020034190106a41106a222c200341c00b6a41106a223029030037030020182015290300370300200320032903c00b3703901020032006360288092010200341e00d6a41ec0110c9081a201f41206a2028290300370300201f41186a202a290300370300201f41106a202c290300370300201f41086a2018290300370300201f200329039010370300024002400240200b2802002206450d00200341a8126a2001280210200620034188096a108e0220032802a8124101460d0020032802b012213120032802b41221320240024020032802ac122206450d002006417f6a2128203120324198026c6a212a203120324102746a4190186a28020021060240034020062f018e18212c2028450d012028417f6a21282006202c4102746a4190186a28020021060c000b0b201620064100202c1b2231202c417f6a4100202c1b22324198026c6a22064188026a290300370300200341e8126a41106a222820064190026a290300370300200320064180026a2903003703e812200641206a2903002133200641286a2903002134200641306a2903002135200641386a2903002136200641e0016a2903002137200641e8016a2903002138200641f0016a2903002139200641f8016a290300213a200641c0016a290300213b200641c8016a290300213c200641d0016a290300213d200641d8016a290300213e200641a0016a290300213f200641a8016a2903002140200641b0016a2903002141200641b8016a290300214220064180016a290300214320064188016a290300214420064190016a290300214520064198016a2903002146200641e0006a2903002147200641e8006a2903002148200641f0006a2903002149200641f8006a290300214a200641c0006a290300214b200641c8006a290300214c200641d0006a290300214d200641d8006a290300214e2006290300214f2006290308212520062903102150200641186a2903002127200620064198026a20312f018e182032417f736a4198026c10ca081a203120312f018e18417f6a3b018e1820034180126a41106a2028290300225137030020034180126a41086a20162903002252370300200320032903e812225337038012202a41186a2206290300212620062027370300202a41106a2206290300212720062050370300202a41086a2206290300215020062025370300202a2903002125202a204f3703002028205137030020162052370300202a41d8006a2206290200214f2006204e370200202a41d0006a2206290200214e2006204d370200202a41c8006a2206290200214d2006204c370200202a290240214c202a204b370240202a41f8006a2206290200214b2006204a370200202a41f0006a2206290200214a20062049370200202a41e8006a2206290200214920062048370200202a2902602148202a2047370260202a4198016a2206290200214720062046370200202a4190016a2206290200214620062045370200202a4188016a2206290200214520062044370200202a290280012144202a204337028001202a41b8016a2206290200214320062042370200202a41b0016a2206290200214220062041370200202a41a8016a2206290200214120062040370200202a2902a0012140202a203f3702a001202a41d8016a2206290200213f2006203e370200202a41d0016a2206290200213e2006203d370200202a41c8016a2206290200213d2006203c370200202a2902c001213c202a203b3702c001202a41f8016a2206290200213b2006203a370200202a41f0016a2206290200213a20062039370200202a41e8016a2206290200213920062038370200202a2902e0012138202a20373702e001202a41386a2206290200213720062036370200202a41306a2206290200213620062035370200202a41286a2206290200213520062034370200202a2902202134202a2033370220200320533703e812200341e0046a41106a2206202a4190026a222c290000370300201a202a4188026a22542900003703002003202a290080023703e004202c202829030037000020542016290300370000202a20032903e812370080022016201a2903002233370300200341a00b6a41106a2006290300370300200341a00b6a41086a2033370300200320032903e0043703a00b20312f018e182106410121550c010b2016203120324198026c6a22064188026a290300370300200341e8126a41106a222820064190026a290300370300200320064180026a2903003703e81220062903002125200641f8016a290300213b200641f0016a290300213a200641e8016a2903002139200641e0016a2903002138200641d8016a290300213f200641d0016a290300213e200641c8016a290300213d200641c0016a290300213c200641b8016a2903002143200641b0016a2903002142200641a8016a2903002141200641a0016a290300214020064198016a290300214720064190016a290300214620064188016a290300214520064180016a2903002144200641f8006a290300214b200641f0006a290300214a200641e8006a2903002149200641e0006a2903002148200641d8006a290300214f200641d0006a290300214e200641c8006a290300214d200641c0006a290300214c200641386a2903002137200641306a2903002136200641286a2903002135200641206a2903002134200641186a2903002126200641106a2903002127200641086a2903002150200620064198026a20312f018e182032417f736a4198026c10ca081a200341a00b6a41086a2016290300370300200341a00b6a41106a2028290300370300203120312f018e18417f6a22063b018e18200320032903e8123703a00b410021550b200341b8126a41106a2256200341a00b6a41106a2257290300370300200341b8126a41086a2258200341a00b6a41086a2259290300370300200320032903a00b3703b8124101215a0240200641ffff037141044b0d004100215b4101215a4101215c2031215403402054280288182206450d010240024020542f018c1822280d00410021282006410020062f018e181b21544100215d0c010b2028417f6a21284101215d200621540b0240024002400240024002400240024002400240024002400240024020544190186a222a202841016a22064102746a222c280200225e2f018e18225f202a202841027422606a2261280200222a2f018e1822626a410b490d00205d0d032016205e4188026a290300370300200341e8126a41106a2260205e4190026a2903003703002003205e290380023703e812205e41f8016a2903002133205e41f0016a2903002151205e41e8016a2903002152205e41d8016a2903002153205e41d0016a2903002163205e41c8016a2903002164205e41b8016a2903002165205e41b0016a2903002166205e41a8016a2903002167205e4198016a2903002168205e4190016a2903002169205e4188016a290300216a205e41f8006a290300216b205e41f0006a290300216c205e41e8006a290300216d205e41d8006a290300216e205e41d0006a290300216f205e41c8006a2903002170205e41386a2903002171205e41306a2903002172205e41286a2903002173205e41186a2903002174205e2903e0012175205e2903c0012176205e2903a0012177205e290380012178205e2903602179205e290340217a205e290320217b205e290310217c205e290308217d205e290300217e205e205e4198026a205f4198026c41e87d6a10ca08215e205b0d01410021620c020b205b41016a215b20542f018e18217f200341e8126a205420284198026c6a22800141980210c9081a208001205420064198026c6a207f2028417f736a4198026c10ca081a202a20624198026c6a200341e8126a41980210c9084198026a205e205f4198026c10c9081a202c206141086a20542f018e182006417f736a41027441046a10ca081a0240200620542f018e1822614f0d00206020546a4194186a212803402028280200222c20063b018c18202c205436028818202841046a21282061200641016a2206470d000b20542f018e1821610b206241016a216220542061417f6a3b018e18202a205f202a2f018e186a41016a3b018e18205b41014d0d0c202a20624102746a4190186a205e4190186a205f41027441046a10c9081a2062205f6a2128206221060340202a20064102746a4190186a280200222c20063b018c18202c202a3602881820062006202849222c6a220620284b0d0d202c450d0d0c000b0b205e280290182162205e4190186a2206205e4194186a205e2f018e1841027410ca081a20624100360288180240205f450d004100212a03402006280200222c202a3b018c18202c205e36028818200641046a2106205f202a41016a222a470d000b0b205b417f6a215f0b205e205e2f018e18417f6a3b018e18200341d0126a41086a2016290300228101370300200341d0126a41106a2060290300228201370300200320032903e8122283013703d0122060208201370300201620810137030020032083013703e812205420284198026c6a220641186a222829030021810120282074370300200629031021742006207c3703102006290308217c2006207d3703082006290300217d2006207e370300200641386a2228290200217e20282071370200200641306a2228290200217120282072370200200641286a2228290200217220282073370200200629022021732006207b370220200641d8006a2228290200217b2028206e370200200641d0006a2228290200216e2028206f370200200641c8006a2228290200216f20282070370200200629024021702006207a370240200641f8006a2228290200217a2028206b370200200641f0006a2228290200216b2028206c370200200641e8006a2228290200216c2028206d3702002006290260216d2006207937026020064198016a222829020021792028206837020020064190016a222829020021682028206937020020064188016a222829020021692028206a370200200629028001216a2006207837028001200641b8016a2228290200217820282065370200200641b0016a2228290200216520282066370200200641a8016a222829020021662028206737020020062902a0012167200620773702a001200641d8016a2228290200217720282053370200200641d0016a2228290200215320282063370200200641c8016a222829020021632028206437020020062902c0012164200620763702c001200641f8016a2228290200217620282033370200200641f0016a2228290200213320282051370200200641e8016a222829020021512028205237020020062902e0012152200620753702e001200341e0046a41106a222a20064190026a2228290000370300201a20064188026a222c29000037030020032006290080023703e00420282060290300370000202c2016290300370000200620032903e81237008002200341d0066a41106a2206202a290300370300200341d0066a41086a222c201a290300370300200320032903e00422753703a00b200320753703d006206128020021280240205b450d00202a2006290300370300201a202c290300370300200320032903d0063703e0042062450d03205b417f6a205f470d0420282f018e182206410a4b0d052028200641016a222c3b018e18202820064198026c6a220620523703e001200620643703c001200620673703a0012006206a370380012006206d3703602006207037034020062073370320200620743703102006207c3703082006207d370300200620032903e00437038002200641f8016a2076370300200641f0016a2033370300200641e8016a2051370300200641d8016a2077370300200641d0016a2053370300200641c8016a2063370300200641b8016a2078370300200641b0016a2065370300200641a8016a206637030020064198016a207937030020064190016a206837030020064188016a2069370300200641f8006a207a370300200641f0006a206b370300200641e8006a206c370300200641d8006a207b370300200641d0006a206e370300200641c8006a206f370300200641386a207e370300200641306a2071370300200641286a2072370300200641186a20810137030020064188026a201a29030037030020064190026a202a2903003703002028202c4102746a4190186a20623602002062202c3b018c1820622028360288180c020b20034180126a41106a222a200629030037030020034180126a41086a2254202c290300370300200320032903d0063703801220282f018e182206410b4f0d052028200641016a3b018e18202820064198026c6a220620523703e001200620643703c001200620673703a0012006206a370380012006206d3703602006207037034020062073370320200620743703102006207c3703082006207d370300200620032903801237038002200641f8016a2076370300200641f0016a2033370300200641e8016a2051370300200641d8016a2077370300200641d0016a2053370300200641c8016a2063370300200641b8016a2078370300200641b0016a2065370300200641a8016a206637030020064198016a207937030020064190016a206837030020064188016a2069370300200641f8006a207a370300200641f0006a206b370300200641e8006a206c370300200641d8006a207b370300200641d0006a206e370300200641c8006a206f370300200641386a207e370300200641306a2071370300200641286a2072370300200641186a20810137030020064188026a205429030037030020064190026a202a2903003703000c010b201620624198026c202a6a41e87d6a22064188026a290300370300200341e8126a41106a225f20064190026a29030037030020032006290380023703e81220062903e001213320062903c001215120062903a00121522006290380012153200629036021632006290340216420062903202165200629031021662006290308216720062903002168200641f8016a2903002169200641f0016a290300216a200641e8016a290300216b200641d8016a290300216c200641d0016a290300216d200641c8016a290300216e200641b8016a290300216f200641b0016a2903002170200641a8016a290300217120064198016a290300217220064190016a290300217320064188016a2903002174200641f8006a2903002175200641f0006a2903002176200641e8006a2903002177200641d8006a2903002178200641d0006a2903002179200641c8006a290300217a200641386a290300217b200641306a290300217c200641286a290300217d200641186a290300217e02400240205b0d00410021610c010b202a20624102746a4190186a2802002261410036028818205b417f6a2160202a2f018e1821620b202a2062417f6a3b018e18200341d0066a41086a2016290300228101370300200341d0066a41106a205f290300228201370300200320032903e8122283013703d006200341d0126a41106a225f208201370300200341d0126a41086a225e20810137030020032083013703d012205420284198026c6a220641186a22282903002181012028207e3703002006290310217e2006206637031020062903082166200620673703082006290300216720062068370300200641386a222829020021682028207b370200200641306a2228290200217b2028207c370200200641286a2228290200217c2028207d3702002006290220217d20062065370220200641d8006a2228290200216520282078370200200641d0006a2228290200217820282079370200200641c8006a222829020021792028207a3702002006290240217a20062064370240200641f8006a2228290200216420282075370200200641f0006a2228290200217520282076370200200641e8006a2228290200217620282077370200200629026021772006206337026020064198016a222829020021632028207237020020064190016a222829020021722028207337020020064188016a222829020021732028207437020020062902800121742006205337028001200641b8016a222829020021532028206f370200200641b0016a2228290200216f20282070370200200641a8016a222829020021702028207137020020062902a0012171200620523702a001200641d8016a222829020021522028206c370200200641d0016a2228290200216c2028206d370200200641c8016a2228290200216d2028206e37020020062902c001216e200620513702c001200641f8016a2228290200215120282069370200200641f0016a222829020021692028206a370200200641e8016a2228290200216a2028206b37020020062902e001216b200620333702e001200341e0046a41106a222a20064190026a2228290000370300201a20064188026a225429000037030020032006290080023703e0042028205f2903003700002054205e290300370000200620032903d012370080022057202a2903003703002059201a290300370300200320032903e004223337038012200320333703a00b202c28020021280240205b450d00202a2057290300370300201a2059290300370300200320032903a00b3703e0042061450d06205b417f6a2060470d0720282f018e182206410a4b0d0820284198026a202820064198026c10ca081a202841f0016a2069370300202841e8016a206a3703002028206b3703e001202841d0016a206c370300202841c8016a206d3703002028206e3703c001202841b0016a206f370300202841a8016a2070370300202820713703a00120284190016a207237030020284188016a20733703002028207437038001202841f0006a2075370300202841e8006a207637030020282077370360202841d0006a2078370300202841c8006a20793703002028207a370340202841306a207b370300202841286a207c3703002028207d3703202028207e3703102028206637030820282067370300202841f8016a2051370300202841d8016a2052370300202841b8016a205337030020284198016a2063370300202841f8006a2064370300202841d8006a2065370300202841386a2068370300202841186a208101370300202820032903e0043703800220284188026a201a29030037030020284190026a202a29030037030020284194186a20284190186a20282f018e1841027441046a10ca081a2028206136029018202820282f018e1841016a22063b018e18200641ffff0371212a410021060340202820064102746a4190186a280200222c20063b018c18202c20283602881820062006202a496a222c202a4b0d022006202a4f2154202c21062054450d000c020b0b20284198026a202820282f018e184198026c10ca081a202841f8016a2051370300202841f0016a2069370300202841e8016a206a3703002028206b3703e001202841d8016a2052370300202841d0016a206c370300202841c8016a206d3703002028206e3703c001202841b8016a2053370300202841b0016a206f370300202841a8016a2070370300202820713703a00120284198016a206337030020284190016a207237030020284188016a20733703002028207437038001202841f8006a2064370300202841f0006a2075370300202841e8006a207637030020282077370360202841d8006a2065370300202841d0006a2078370300202841c8006a20793703002028207a370340202841386a2068370300202841306a207b370300202841286a207c3703002028207d370320202841186a2081013703002028207e3703102028206637030820282067370300202820032903a00b3703800220284188026a205929030037030020284190026a2057290300370300202820282f018e1841016a3b018e180b205c205d71450d0a203220312f018e18490d074100212802400340024020312802881822060d00410021060c020b202841016a212820312f018c18212a20062131202a20062f018e184f0d000b202a41016a21320b024020280d00200621310c0b0b200620324102746a4190186a280200213102402028417f6a2206450d00034020312802901821312006417f6a22060d000b0b410021320c0a0b41ecd0c800412b41a4bfc400103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b41e0cec80041204188bec400103c000b41ecd0c800412b41ccbec400103c000b419ecec800413041dcbec400103c000b41ecbec40041274194bfc400103c000b4101215a203241016a21320c020b205e102c02400240205c417f73205d417f73724101710d00205b4101470d01205420606a4190186a280200213120624100205d1b20326a21320b024020542f018e1822060d004100215a0c030b4100215c20064105490d010c020b0b41d5a1c800412841f8bdc400103c000b02402055450d00203220312f018e18490d0041002128024003402031280288182206450d01202841016a212820312f018c18212a20062131202a20062f018e184f0d000b0b2028450d002028417f6a2206450d0003402006417f6a22060d000b0b201a2058290300370300200341e0046a41106a22062056290300370300200320032903b8123703e004200320253703c00b200320503703c80b200320273703d00b200320263703d80b2016201341086a290200370300200341e8126a41106a2228201341106a290200370300200341e8126a41186a222a201341186a280200360200200320132902003703e81220012001280214417f6a3602140240205a0d00200b280200222c450d0220012802102261450d03202c28029018215420012061417f6a3602102001205436020c2054410036028818202c102c0b202f202a280200360200203020282903003703002015201629030037030020034180126a41086a2228201a29030037030020034180126a41106a222a2006290300370300200320032903e8123703c00b200320032903e004370380122025a722064102460d00200c20032903c00b3702002012200329038012370200200341e8126a41e8016a2039370300200341e8126a41c8016a203d370300200341e8126a41a8016a2041370300200341e8126a4188016a2045370300200341e8126a41e8006a2049370300200341e8126a41c8006a204d370300200341e8126a41286a20353703002002203a370300200341e8126a41d0016a203e370300200341e8126a41b0016a2042370300200341e8126a4190016a2046370300200341e8126a41f0006a204a370300200341e8126a41d0006a204e370300200341e8126a41306a2036370300200c41086a2015290300370200200c41106a2030290300370200200c41186a202f280200360200201241086a2028290300370200201241106a202a2903003702002024203b370300200341e8126a41d8016a203f370300200341e8126a41b8016a2043370300200341e8126a4198016a2047370300200341e8126a41f8006a204b370300200341e8126a41d8006a204f370300200341e8126a41386a2037370300200320383703c8142003203c3703a8142003204037038814200320443703e813200320483703c8132003204c3703a8132003203437038813200320063602e812200a200341e8126a10e5060b024002402003280288090d00201b10a2010c010b200328029009220620840120061b218401200328028c09410020061b2206450d00208401450d002006102c0b024020032d00f80a4106490d0020032802800b220620850120061b21850120032802fc0a410020061b2206450d00208501450d002006102c0b024020032802f00641776a0e03090009000b200341f0066a10ec060c080b41ecd0c800412b41ac9ec800103c000b4198bec400412141bcbec400103c000b200341e8126a200341c8026a41980210c9081a0c010b200341e8126a200341c8026a41980210c9081a0b024002400240024020032802e81241786a0e03020001000b41d5a1c800412841a0a2c800103c000b2024290300212520032903d8142126201e201641e80110c9081a200341e00d6a20034188096a41ec0110c9081a410021060c010b2014200c41086a2802003602002003200c2902003703e00d200341e8126a41186a290300212520032903f8122126410121060b200320063602f006201d200341e00d6a41ec0110c9081a02400240024002400240024002402001200341f0066a10fe062206450d0020062903002250202656200641086a290300222720255620272025511b0d0120012802002206450d03200341d0126a20012802042006200341f0066a10a30820032802d0124101460d0320032802d812213120032802dc12215d0240024020032802d4122206450d002006417f6a21282031205d41f0016c6a212c2031205d4104746a41d0146a21542031205d4102746a4188166a28020021060240034020062f018616212a2028450d012028417f6a21282006202a4102746a4188166a28020021060c000b0b201b20064100202a1b2231202a417f6a4100202a1b225d41f0016c6a220641e8016a2903003703002003200641e0016a29030037038809200641206a2903002125200641286a2903002126200641306a2903002135200641386a2903002136200641c0016a2903002137200641c8016a2903002138200641d0016a2903002139200641d8016a290300213a200641a0016a290300213b200641a8016a290300213c200641b0016a290300213d200641b8016a290300213e20064180016a290300213f20064188016a290300214020064190016a290300214120064198016a2903002142200641e0006a2903002143200641e8006a2903002144200641f0006a2903002145200641f8006a2903002146200641c0006a2903002147200641c8006a2903002148200641d0006a2903002149200641d8006a290300214a2006290300214b2006290308214f2006290310214c200641186a290300214d2006200641f0016a20312f018616205d417f7322286a41f0016c10ca081a2031205d4104746a220641d8146a2903002152200641d0146a222a2903002151202a200641e0146a202820312f0186166a41047410ca081a203120312f018616417f6a3b0186162018201b29030022343703002003200329038809223337039010202c41186a2206290300214e2006204d370300202c41106a2206290300214d2006204c370300202c41086a2206290300214c2006204f370300202c290300214f202c204b370300201b2034370300202c41d8006a2206290200214b2006204a370200202c41d0006a2206290200214a20062049370200202c41c8006a2206290200214920062048370200202c2902402148202c2047370240202c41f8006a2206290200214720062046370200202c41f0006a2206290200214620062045370200202c41e8006a2206290200214520062044370200202c2902602144202c2043370260202c4198016a2206290200214320062042370200202c4190016a2206290200214220062041370200202c4188016a2206290200214120062040370200202c290280012140202c203f37028001202c41b8016a2206290200213f2006203e370200202c41b0016a2206290200213e2006203d370200202c41a8016a2206290200213d2006203c370200202c2902a001213c202c203b3702a001202c41d8016a2206290200213b2006203a370200202c41d0016a2206290200213a20062039370200202c41c8016a2206290200213920062038370200202c2902c0012138202c20373702c001202c41386a2206290200213720062036370200202c41306a2206290200213620062035370200202c41286a2206290200213520062026370200202c2902202134202c20253702202003203337038809201a202c41e8016a22062902003703002003202c2902e0013703e0042006201b290300370200202c2003290388093702e0012015201a290300370300200320032903e0043703c00b2054290300213320542051370300205441086a2206290300215120062052370300201a2015290300370300200320032903c00b3703e00420312f0186162106410121550c010b201b2031205d41f0016c6a220641e8016a2903003703002003200641e0016a290300370388092006290300214f200641d8016a290300213b200641d0016a290300213a200641c8016a2903002139200641c0016a2903002138200641b8016a290300213f200641b0016a290300213e200641a8016a290300213d200641a0016a290300213c20064198016a290300214320064190016a290300214220064188016a290300214120064180016a2903002140200641f8006a2903002147200641f0006a2903002146200641e8006a2903002145200641e0006a2903002144200641d8006a290300214b200641d0006a290300214a200641c8006a2903002149200641c0006a2903002148200641386a2903002137200641306a2903002136200641286a2903002135200641206a2903002134200641186a290300214e200641106a290300214d200641086a290300214c2006200641f0016a20312f018616205d417f7322286a41f0016c10ca081a2031205d4104746a220641d8146a2903002151200641d0146a222a2903002133202a200641e0146a202820312f0186166a41047410ca081a201a201b290300370300203120312f018616417f6a22063b01861620032003290388093703e004410021550b200341d0066a41086a225a201a290300370300200320032903e0043703d00641012130200641ffff037141044b0d024100215b410121304101215c2031215403402054280280162206450d030240024020542f01841622280d00410021282006410020062f0186161b2154410021320c010b2028417f6a212841012132200621540b0240024002400240024002400240024002400240024002400240024020544188166a222a202841016a220641027422626a2261280200225e2f018616225f202a202841027422606a227f280200222a2f018616222c6a410b490d0020320d03201b205e41e8016a2903003703002003205e2903e00137038809205e41d8016a2903002125205e41d0016a2903002126205e41c8016a2903002152205e41b8016a2903002153205e41b0016a2903002163205e41a8016a2903002164205e4198016a2903002165205e4190016a2903002166205e4188016a2903002167205e41f8006a2903002168205e41f0006a2903002169205e41e8006a290300216a205e41d8006a290300216b205e41d0006a290300216c205e41c8006a290300216d205e41386a290300216e205e41306a290300216f205e41286a2903002170205e41186a2903002171205e2903c0012172205e2903a0012173205e290380012174205e2903602175205e2903402176205e2903202177205e2903102178205e2903082179205e290300217a205e205e41f0016a205f41f0016c41907e6a10ca08226141d8146a290300217b20612903d014217c206141d0146a206141e0146a20612f01861641047441706a10ca081a205b0d014100215e0c020b205b41016a215b20542f018616216220034188096a2054202841f0016c6a22800141f00110c9081a2080012054200641f0016c6a20622028417f73222f6a41f0016c10ca081a202a202c41f0016c6a20034188096a41f00110c90841f0016a205e205f41f0016c10c9081a205441d0146a226220284104746a22282903002125202841086a29030021262028206220064104746a202f20542f0186166a41047410ca081a202a41d0146a2228202c4104746a22622026370308206220253703002028202c41016a22624104746a205e41d0146a205f41047410c9081a2061207f41086a20542f0186162006417f736a41027441046a10ca081a0240200620542f01861622614f0d00206020546a418c166a212803402028280200222c20063b018416202c205436028016202841046a21282061200641016a2206470d000b20542f01861621610b20542061417f6a3b018616202a205f202a2f0186166a41016a3b018616205b41014d0d0c202a20624102746a4188166a205e4188166a205f41027441046a10c9081a2062205f6a2128206221060340202a20064102746a4188166a280200222c20063b018416202c202a3602801620062006202849222c6a220620284b0d0d202c450d0d0c000b0b206128028816215e20614188166a22062061418c166a20612f01861641027410ca081a205e4100360280160240205f450d004100212a03402006280200222c202a3b018416202c206136028016200641046a2106205f202a41016a222a470d000b0b205b417f6a212c0b206120612f018616417f6a3b018616200341a00b6a41086a201b290300227d3703002003200329038809227e3703a00b201b207d3703002003207e370388092054202841f0016c6a220641186a222a290300217d202a207137030020062903102171200620783703102006290308217820062079370308200629030021792006207a370300200641386a222a290200217a202a206e370200200641306a222a290200216e202a206f370200200641286a222a290200216f202a20703702002006290220217020062077370220200641d8006a222a2902002177202a206b370200200641d0006a222a290200216b202a206c370200200641c8006a222a290200216c202a206d3702002006290240216d20062076370240200641f8006a222a2902002176202a2068370200200641f0006a222a2902002168202a2069370200200641e8006a222a2902002169202a206a3702002006290260216a2006207537026020064198016a222a2902002175202a206537020020064190016a222a2902002165202a206637020020064188016a222a2902002166202a206737020020062902800121672006207437028001200641b8016a222a2902002174202a2053370200200641b0016a222a2902002153202a2063370200200641a8016a222a2902002163202a206437020020062902a0012164200620733702a001200641d8016a222a2902002173202a2025370200200641d0016a222a2902002125202a2026370200200641c8016a222a2902002126202a205237020020062902c0012152200620723702c001201a200641e8016a222a290200370300200320062902e0013703e004202a201b29030037020020062003290388093702e00120034180126a41086a2206201a290300370300200320032903e00437038012205420284104746a222841d0146a222a2903002172202a207c370300202841d8146a2228290300217c2028207b370300205420606a4188166a28020021280240205b450d002015200629030037030020032003290380123703c00b205e450d03205b417f6a202c470d0420282f018616222a410a4b0d052028202a41016a222c3b0186162028202a41f0016c6a220620523703c001200620643703a00120062067370380012006206a3703602006206d37034020062070370320200620713703102006207837030820062079370300200620032903c00b3703e001200641d8016a2073370300200641d0016a2025370300200641c8016a2026370300200641b8016a2074370300200641b0016a2053370300200641a8016a206337030020064198016a207537030020064190016a206537030020064188016a2066370300200641f8006a2076370300200641f0006a2068370300200641e8006a2069370300200641d8006a2077370300200641d0006a206b370300200641c8006a206c370300200641386a207a370300200641306a206e370300200641286a206f370300200641186a207d370300200641e8016a20152903003703002028202a4104746a220641d8146a207c370300200641d0146a20723703002028202c4102746a4188166a205e360200205e202c3b018416205e2028360280160c020b2015200629030037030020032003290380123703c00b20282f018616222a410b4f0d052028202a41016a3b0186162028202a41f0016c6a220620523703c001200620643703a00120062067370380012006206a3703602006206d37034020062070370320200620713703102006207837030820062079370300200620032903c00b3703e001200641d8016a2073370300200641d0016a2025370300200641c8016a2026370300200641b8016a2074370300200641b0016a2053370300200641a8016a206337030020064198016a207537030020064190016a206537030020064188016a2066370300200641f8006a2076370300200641f0006a2068370300200641e8006a2069370300200641d8006a2077370300200641d0006a206b370300200641c8006a206c370300200641386a207a370300200641306a206e370300200641286a206f370300200641186a207d370300200641e8016a20152903003703002028202a4104746a220641d8146a207c370300200641d0146a20723703000c010b201b202a202c417f6a226141f0016c6a220641e8016a290300370300200320062903e0013703880920062903c001212520062903a00121262006290380012152200629036021532006290340216320062903202164200629031021652006290308216620062903002167202a20614104746a226141d8146a2903002168206141d0146a2903002169200641d8016a290300216a200641d0016a290300216b200641c8016a290300216c200641b8016a290300216d200641b0016a290300216e200641a8016a290300216f20064198016a290300217020064190016a290300217120064188016a2903002172200641f8006a2903002173200641f0006a2903002174200641e8006a2903002175200641d8006a2903002176200641d0006a2903002177200641c8006a2903002178200641386a2903002179200641306a290300217a200641286a290300217b200641186a290300217c02400240205b0d00410021610c010b202a202c4102746a4188166a2802002261410036028016205b417f6a215f202a2f018616212c0b202a202c417f6a3b01861620034180126a41086a201b290300227d3703002003200329038809227e37038012200341a00b6a41086a222a207d3703002003207e3703a00b2054202841f0016c6a220641186a222c290300217d202c207c3703002006290310217c2006206537031020062903082165200620663703082006290300216620062067370300200641386a222c2902002167202c2079370200200641306a222c2902002179202c207a370200200641286a222c290200217a202c207b3702002006290220217b20062064370220200641d8006a222c2902002164202c2076370200200641d0006a222c2902002176202c2077370200200641c8006a222c2902002177202c20783702002006290240217820062063370240200641f8006a222c2902002163202c2073370200200641f0006a222c2902002173202c2074370200200641e8006a222c2902002174202c2075370200200629026021752006205337026020064198016a222c2902002153202c207037020020064190016a222c2902002170202c207137020020064188016a222c2902002171202c207237020020062902800121722006205237028001200641b8016a222c2902002152202c206d370200200641b0016a222c290200216d202c206e370200200641a8016a222c290200216e202c206f37020020062902a001216f200620263702a001200641d8016a222c2902002126202c206a370200200641d0016a222c290200216a202c206b370200200641c8016a222c290200216b202c206c37020020062902c001216c200620253702c001201a200641e8016a222c290200370300200320062902e0013703e004202c202a290300370200200620032903a00b3702e0012018201a290300370300200320032903e00437039010205420284104746a220641d0146a2228290300212520282069370300200641d8146a2206290300216920062068370300205420626a4188166a28020021280240205b450d002015201829030037030020032003290390103703c00b2061450d06205b417f6a205f470d0720282f0186162206410a4b0d08202841f0016a2028200641f0016c10ca081a202841d0016a206a370300202841c8016a206b3703002028206c3703c001202841b0016a206d370300202841a8016a206e3703002028206f3703a00120284190016a207037030020284188016a20713703002028207237038001202841f0006a2073370300202841e8006a207437030020282075370360202841d0006a2076370300202841c8006a207737030020282078370340202841306a2079370300202841286a207a3703002028207b3703202028207c3703102028206537030820282066370300202841d8016a2026370300202841b8016a205237030020284198016a2053370300202841f8006a2063370300202841d8006a2064370300202841386a2067370300202841186a207d370300202820032903c00b3703e001202841e8016a2015290300370300202841e0146a202841d0146a20282f01861641047410ca081a202841d8146a2069370300202820253703d0142028418c166a20284188166a20282f01861641027441046a10ca081a2028206136028816202820282f01861641016a22063b018616200641ffff0371212a410021060340202820064102746a4188166a280200222c20063b018416202c20283602801620062006202a496a222c202a4b0d022006202a4f2154202c21062054450d000c020b0b202841f0016a202820282f01861641f0016c10ca081a202841d8016a2026370300202841d0016a206a370300202841c8016a206b3703002028206c3703c001202841b8016a2052370300202841b0016a206d370300202841a8016a206e3703002028206f3703a00120284198016a205337030020284190016a207037030020284188016a20713703002028207237038001202841f8006a2063370300202841f0006a2073370300202841e8006a207437030020282075370360202841d8006a2064370300202841d0006a2076370300202841c8006a207737030020282078370340202841386a2067370300202841306a2079370300202841286a207a3703002028207b370320202841186a207d3703002028207c370310202820653703082028206637030020282003290390103703e001202841e8016a2018290300370300202841e0146a202841d0146a20282f01861641047410ca081a202841d8146a2069370300202820253703d014202820282f01861641016a3b0186160b205c203271450d0c205d20312f018616490d074100212802400340024020312802801622060d00410021060c020b202841016a212820312f018416212a20062131202a20062f0186164f0d000b202a41016a215d0b024020280d00200621310c0d0b2006205d4102746a4188166a280200213102402028417f6a2206450d00034020312802881621312006417f6a22060d000b0b4100215d0c0c0b41ecd0c800412b41a4bfc400103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b41e0cec80041204188bec400103c000b41ecd0c800412b41ccbec400103c000b419ecec800413041dcbec400103c000b41ecbec40041274194bfc400103c000b41012130205d41016a215d0c040b205e102c02400240205c417f732032417f73724101710d00205b4101470d01205420606a4188166a28020021312062410020321b205d6a215d0b024020542f01861622060d00410021300c050b4100215c20064105490d010c040b0b41d5a1c800412841f8bdc400103c000b024020032802f0060d00201c10a2010c040b20032802f806220620860120061b21860120032802f406410020061b2206450d03208601450d032006102c0c030b024002400240024020032802f0064101470d0020032802fc062206417f4c0d0220032802f406212c410121284101212a02402006450d0020061032222a450d040b200341003602e80d200320063602e40d2003202a3602e00d200341e00d6a4100200610c80120032802e00d20032802e80d222a6a202c200610c9081a201041086a202a20066a360200201020032903e00d3702000c010b200341e00d6a201c10fd06201b200341e00d6a41e80110c9081a410021280b2003202836028809200120034188096a205020267d202720257d2050202654ad7d10a20820034188096a200341f0066a41f00110c9081a200341186a20034188096a2026202510ff060c040b103b000b1039000b02402055450d00205d20312f018616490d0041002128024003402031280280162206450d01202841016a212820312f018416212a20062131202a20062f0186164f0d000b0b2028450d002028417f6a2206450d0003402006417f6a22060d000b0b2015205a290300370300200320032903d0063703c00b2003204f3703e00d2003204c3703e80d2003204d3703f00d2003204e3703f80d201b201141086a29020037030020034188096a41106a2206201141106a29020037030020034188096a41186a2228201141186a280200360200200320112902003703880920012001280208417f6a360208024020300d002001280200222a450d0320012802042254450d04202a28028816212c20012054417f6a3602042001202c360200202c410036028016202a102c0b200341e00d6a41186a222a2028280200360200200341e00d6a41106a222820062903003703002014201b2903003703002018201529030037030020032003290388093703e00d200320032903c00b37039010204fa722064102460d00201020032903e00d370200200f20032903901037020020034188096a41c8016a203937030020034188096a41a8016a203d37030020034188096a4188016a204137030020034188096a41e8006a204537030020034188096a41c8006a204937030020034188096a41286a203537030020034188096a41d0016a203a37030020034188096a41b0016a203e37030020034188096a4190016a204237030020034188096a41f0006a204637030020034188096a41d0006a204a37030020034188096a41306a2036370300201041086a2014290300370200201041106a2028290300370200201041186a202a280200360200200f41086a201829030037020020034188096a41d8016a203b37030020034188096a41b8016a203f37030020034188096a4198016a204337030020034188096a41f8006a204737030020034188096a41d8006a204b37030020034188096a41386a2037370300200320383703c80a2003203c3703a80a200320403703880a200320443703e809200320483703c809200320343703a809200320063602880920034188096a41f8016a2051370300200320333703f80a20034188096a10e6060b20034188096a200341f0066a41f00110c9081a200341186a20034188096a2050202710ff060b024020032802e81241786a0e03060006000b200341e8126a10ec060c050b41ecd0c800412b41ac9ec800103c000b4198bec400412141bcbec400103c000b20034188096a200341c8026a41980210c9081a0c010b20034188096a200341c8026a41980210c9081a0b0240024002400240200328028809417b6a0e03020001000b41d5a1c80041284190a2c800103c000b201a201b41e80110c9081a410021060c010b20192010290200370200201941086a201041086a280200360200410121060b200320063602e004200128020c21062001410036020c2001280210215f20012087013602102001280214212820014100360214200341003602d812200341003602d012200320283602f0122003205f3602ec12200320063602e812200341d0066a200341e8126a10ef06200341a00b6a41186a200341d0066a41186a280200360200200341a00b6a41106a200341d0066a41106a290300370300200341a00b6a41086a200341d0066a41086a290300370300200320032903d0063703a00b200341e8126a200341a00b6a10f806024020032802e81222064102460d00200341c00b6a200c41940210c9081a0340200341e00d6a200341c00b6a41940210c9081a200341f0066a200341c00b6a41940210c9081a20032006360290102017200341e00d6a41ec0110c9081a20034180126a41206a2228200e41206a29020037030020034180126a41186a222a200e41186a29020037030020034180126a41106a222c200e41106a29020037030020034180126a41086a2254200e41086a2902003703002003200e2902003703801202400240024020032802e0042006470d00024020064101460d00201a2018108207450d010c020b20032802ec042206200328029c10470d0020032802e40422612003280294102231460d0120612031200610cc08450d010b200341e8126a20034190106a41f00110c9081a200241206a2028290300370300200241186a202a290300370300200241106a202c290300370300200241086a20542903003703002002200329038012370300200341d0126a200341e8126a10e5060c010b200341e8126a20034190106a41f00110c9081a200241206a2028290300370300200241186a202a290300370300200241106a202c290300370300200241086a20542903003703002002200329038012370300200a200341e8126a10a6080b200341e8126a200341a00b6a10f80620032802e81222064102460d01200341c00b6a200c41940210c9081a0c000b0b200341a00b6a10f006201c200b41086a22062802003602002003200b2902003703f006200341e8126a200341f0066a10ef06200341e8126a10f0062006200341d0126a41086a280200360200200b20032903d0123702000240024020032802e0040d00201a10a2010c010b20032802e804220620880120061b21880120032802e404410020061b2206450d00208801450d002006102c0b02400240200328028809417b6a0e03010001000b20034188096a10ec060b205f2187010b20092007470d000b200721090b2009200720096b4198026d10c30202402008450d0020084198026c450d002005102c0b20002003290318370200200041106a200341186a41106a290300370200200041086a200341186a41086a290300370200200424000bf60202057f027e230041f0036b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f0186164f0d00200421030c010b03400240024020042802801622030d00410021030c010b200541016a210520042f01841621060b2004102c20032104200620032f0186164f0d000b0b20024180026a2003200641f0016c6a41f00110c9081a200641016a2104200320064104746a220641d8146a2903002107200641d0146a290300210802402005450d00200320044102746a4188166a280200210302402005417f6a2204450d00034020032802881621032004417f6a22040d000b0b410021040b20002002410c6a41046a20024180026a41f00110c90841f00110c908220641f8016a2007370300200641f0016a20083703002001200436020820012003360204200141003602000c010b200041023602000b200241f0036a24000f0b41ecd0c800412b4198d1c800103c000bbe0201057f230041c0046b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f018e184f0d00200421030c010b03400240024020042802881822030d00410021030c010b200541016a210520042f018c1821060b2004102c20032104200620032f018e184f0d000b0b200241a8026a200320064198026c6a41980210c9081a200641016a210402402005450d00200320044102746a4190186a280200210302402005417f6a2204450d00034020032802901821032004417f6a22040d000b0b410021040b2000200241106a200241a8026a41980210c90841980210c9081a2001200436020820012003360204200141003602000c010b200041023602000b200241c0046a24000f0b41ecd0c800412b4198d1c800103c000bba0605017f037e037f017e017f230041b0036b22022400200241186a200010b0014100210002402002290318a7450d00200241286a29030021032002290320210420024198016a200110a80320022d0098014101470d00200241306a41186a200241b1016a290000370300200241306a41106a200241a9016a290000370300200241306a41086a200241a1016a2900003703002002200229009901370330200220043703502002200337035802400240200420038450450d0042002104420021050c010b2002200241306a360264200241e8006a200241306a200241d0006a200241e4006a10b504024020022903684201520d00200241f8006a2903002105200229037021040c010b20024190016a290300210520024188016a290300210420022903704201520d00200241e8006a41106a2903002103200241d0016a200241e8006a41186a290300370300200241c8016a200337030020024198016a41086a41003a0000200241a9016a200241306a41086a290300370000200241b1016a200241306a41106a290300370000200241b9016a200241306a41186a2903003700002002410236029801200220022903303700a10120024198016a10c8020b20024198016a41186a2201420037030020024198016a41106a2206420037030020024198016a41086a220742003703002002420037039801200241e8006a41d4dcc700410810c5012007200241e8006a41086a22082900003703002002200229006837039801410d2100200241e8006a41bba8c700410d10c5012001200829000037030020062002290068370300200220024198016a412010d301200241106a2903002103200229030821092002280200210a2001420037030020064200370300200742003703002002420037039801200241e8006a41d4dcc700410810c501200720082900003703002002200229006837039801200241e8006a41bba8c700410d10c50120012008290000370300200620022900683703002002427f20034200200a1b220320057c20094200200a1b220520047c22092005542201ad7c22042001200420035420042003511b22011b3703702002427f200920011b37036820024198016a4120200241e8006a411010a7020b200241b0036a240020000bda0503097f027e037f23004190046b220324000240024002400240024002402001450d00200341106a2001417f6a220420022802881610fa06024020032802100d0010dd06210120034100360214200320013602100b200341086a200341106a10db06024020022f018616450d002002418c166a2105200241d0146a2106200328020c220741d0146a21082003280208417f6a21094100210a2002210b0340200341206a200b10a408200641086a290300210c2006290300210d20034190026a2004200528020010fa06200328029802210e200328029402210f2003280290022101200341a0026a200341206a41f00110c9081a024020010d004100210f10dd0621010b2009200f470d0620072f018616220f410a4b0d072007200f41016a22103b0186162007200f41f0016c6a200341a0026a41f00110c9081a2008200f4104746a220f200c370308200f200d370300200720104102746a4188166a2001360200200120103b01841620012007360280162003200e20032802186a41016a360218200541046a2105200b41f0016a210b200641106a2106200a41016a220a20022f018616490d000b0b20002003290310370200200041086a200341106a41086a2802003602000c010b10dd062206450d0141002105024020022f018616450d00200241d0146a2101200641d0146a210b410021052002210f0340200341a0026a200f10a40820062f0186162207410b4f0d04200141086a290300210c2001290300210d2006200741016a3b0186162006200741f0016c6a200341a0026a41f00110c9081a200b20074104746a2207200c3703082007200d370300200f41f0016a210f200141106a2101200541016a220520022f018616490d000b0b2000200536020820004100360204200020063602000b20034190046a24000f0b41ecd0c800412b41cc9ec800103c000b41e0cec80041204188bec400103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000bd00b010f7f230041e0046b220324000240024002400240024002402001450d00200341106a2001417f6a220420022802901810fb06024020032802100d0010dc06210120034100360214200320013602100b200341086a200341106a10da0602400240024020022f018e18450d00200328020c210520024194186a21062003280208417f6a2107200341206a41f4016a2108200341206a41f1016a220941086a210a200941186a210b200941106a210c200221014100210d0340200341206a200110a40802400240024002400240024002400240200141f0016a2d00000e0701020304050600010b200141fc016a280200220e417f4c0d0e200141f4016a280200210f02400240200e0d00410121100c010b200e10322210450d100b200341003602d0022003200e3602cc02200320103602c802200341c8026a4100200e10c80120032802c80220032802d00222106a200f200e10c9081a200841086a2010200e6a360200200820032903c802370200200341063a0090020c060b200341003a0090020c050b200341206a4180026a20014180026a290300370300200341013a0090022003200141f8016a290300370398020c040b200341023a0090022003200141f1016a280000360091020c030b200341033a0090022003200141f1016a290000370091020c020b200a200141f9016a2900003700002009200141f1016a290000370000200341043a0090020c010b200b20014189026a290000370000200c20014181026a290000370000200a200141f9016a2900003700002009200141f1016a290000370000200341053a0090020b200341b8026a2004200628020010fb0620032802c002211120032802bc02210f20032802b802210e200341c8026a200341206a41980210c9081a0240200e0d004100210f10dc06210e0b2007200f470d0220052f018e18220f410a4b0d032005200f41016a22103b018e182005200f4198026c6a200341c8026a41980210c9081a200520104102746a4190186a200e360200200e20103b018c18200e2005360288182003201120032802186a41016a360218200641046a210620014198026a2101200d41016a220d20022f018e18490d000b0b20002003290310370200200041086a200341106a41086a2802003602000c030b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b10dc06220e450d0141002106024020022f018e18450d00200341c8026a41f4016a2110200341c8026a41f1016a220f41086a210d200f41186a2107200f41106a210920022101410021060340200341c8026a200110a40802400240024002400240024002400240200141f0016a2d00000e0701020304050600010b200141fc016a2802002205417f4c0d0b200141f4016a28020021110240024020050d00410121040c010b200510322204450d0d0b200341003602282003200536022420032004360220200341206a4100200510c8012003280220200328022822046a2011200510c9081a201041086a200420056a36020020102003290320370200200341063a00b8040c060b200341003a00b8040c050b200341c8026a4180026a20014180026a290300370300200341013a00b8042003200141f8016a2903003703c0040c040b200341023a00b8042003200141f1016a2800003600b9040c030b200341033a00b8042003200141f1016a2900003700b9040c020b200d200141f9016a290000370000200f200141f1016a290000370000200341043a00b8040c010b200720014189026a290000370000200920014181026a290000370000200d200141f9016a290000370000200f200141f1016a290000370000200341053a00b8040b200e2f018e182205410b4f0d06200e200541016a3b018e18200e20054198026c6a200341c8026a41980210c9081a20014198026a2101200641016a220620022f018e18490d000b0b20002006360208200041003602042000200e3602000b200341e0046a24000f0b41ecd0c800412b41cc9ec800103c000b103b000b1039000b41e0cec80041204188bec400103c000ba30101047f0240200128020022020d0020004100360204200041106a4100360200200041003602180f0b20012802042103200221040240034020022f01861621052003450d012003417f6a2103200220054102746a4188166a280200210220042802881621040c000b0b2000200336020c200041003602082000200436020420002003360200200041146a2005360200200041106a2002360200200020012802083602180b9c0c01017f230041e0016b2202240002400240024002400240024020012802000e050102030400010b2002200141086a10e706200241386a200141c0006a10e706200241f0006a200141f8006a10e706200241a8016a200141b0016a10e706200041386a200241306a290300370300200041306a200241286a290300370300200041286a200241206a290300370300200041206a200241186a290300370300200041186a200241106a290300370300200041106a200241086a29030037030020002002290300370308200041c0006a2002290338370300200041c8006a200241386a41086a290300370300200041d0006a200241386a41106a290300370300200041d8006a200241386a41186a290300370300200041e0006a200241386a41206a290300370300200041e8006a200241386a41286a290300370300200041f0006a200241386a41306a290300370300200041a8016a200241f0006a41306a290300370300200041a0016a200241f0006a41286a29030037030020004198016a200241f0006a41206a29030037030020004190016a200241f0006a41186a29030037030020004188016a200241f0006a41106a29030037030020004180016a200241f0006a41086a290300370300200041f8006a2002290370370300200041e0016a200241a8016a41306a290300370300200041d8016a200241a8016a41286a290300370300200041d0016a200241a8016a41206a290300370300200041c8016a200241a8016a41186a290300370300200041c0016a200241a8016a41106a290300370300200041b8016a200241a8016a41086a290300370300200041b0016a20022903a801370300200042043703000c040b200042003703000c030b200241a8016a200141086a10e70620004201370300200041386a200241a8016a41306a290300370300200041306a200241a8016a41286a290300370300200041286a200241a8016a41206a290300370300200041206a200241a8016a41186a290300370300200041186a200241a8016a41106a290300370300200041106a200241a8016a41086a290300370300200020022903a8013703080c020b200241f0006a200141086a10e706200241a8016a200141c0006a10e706200041386a200241f0006a41306a290300370300200041306a200241f0006a41286a290300370300200041286a200241f0006a41206a290300370300200041206a200241f0006a41186a290300370300200041186a200241f0006a41106a290300370300200041106a200241f0006a41086a29030037030020002002290370370308200041c0006a20022903a801370300200041c8006a200241a8016a41086a290300370300200041d0006a200241a8016a41106a290300370300200041d8006a200241a8016a41186a290300370300200041e0006a200241a8016a41206a290300370300200041e8006a200241a8016a41286a290300370300200041f0006a200241a8016a41306a290300370300200042023703000c010b200241386a200141086a10e706200241f0006a200141c0006a10e706200241a8016a200141f8006a10e706200041386a200241386a41306a290300370300200041306a200241386a41286a290300370300200041286a200241386a41206a290300370300200041206a200241386a41186a290300370300200041186a200241386a41106a290300370300200041106a200241386a41086a29030037030020002002290338370308200041c0006a2002290370370300200041c8006a200241f0006a41086a290300370300200041d0006a200241f0006a41106a290300370300200041d8006a200241f0006a41186a290300370300200041e0006a200241f0006a41206a290300370300200041e8006a200241f0006a41286a290300370300200041f0006a200241f0006a41306a29030037030020004203370300200041a8016a200241a8016a41306a290300370300200041a0016a200241a8016a41286a29030037030020004198016a200241a8016a41206a29030037030020004190016a200241a8016a41186a29030037030020004188016a200241a8016a41106a29030037030020004180016a200241a8016a41086a290300370300200041f8006a20022903a8013703000b200241e0016a24000ba20101067f0240200028020022020d0041000f0b20002802042103034020022f01861621044100210520022100024002400340200420052206460d01200641016a210520012000108b022107200041f0016a21000240200741187441187541016a0e03000301000b0b2005417f6a21040b024020030d0041000f0b2003417f6a2103200220044102746a4188166a28020021020c010b0b200220064104746a41d0146a0baf0302037f017e230041f0196b22042400200441f0016a200141f00110c9081a02400240024020002802002201450d00200028020421050c010b41881610322201450d01410021052001200441f0036a41801610c908220641003b018616200641003602801620004100360204200020063602000b200441e0036a20052001200441f0016a10a3080240024020042802e0034101470d00200441f0016a41086a280200210520042903f0012107200441f0036a200441f0016a410c6a41e40110c9081a200441dc056a200441e0036a410c6a280200360200200420042902e4033702d4052004200441f0036a41f00110c908220141f0036a41086a2005360200200120073703f003200141f0036a410c6a200141f00110c9081a200120003602ec05200141f0036a2002200310c5081a0c010b200441e8036a2903002107200441f0016a10e6062007a72007422088a74104746a220041d0146a2201427f2001290300220720027c220220022007542201200041d8146a2200290300220220037c2001ad7c220320025420032002511b22011b3703002000427f200320011b3703000b200441f0196a24000f0b1039000bad0103037f017e017f02400240200128020022020d004100210241002103410021010c010b20012802042204ad4220862105200221030240034020022f018e1821062004450d0120054280808080707c21052004417f6a2104200220064102746a4190186a280200210220032802901821030c000b0b200128020821010b20002001360218200020053702082000200336020420002004360200200041146a2006360200200041106a20023602000b870a01057f23004180046b22022400024002400240024020012802004101470d002001410c6a2802002203417f4c0d02200128020421040240024020030d00410121050c010b200310322205450d040b410021062002410036020c2002200336020820022005360204200241046a4100200310c8012002280204200228020c22056a2004200310c9081a2002200520036a220336020c200241f0016a41086a22042003360200200220022902043703f001024002400240024002400240024020012d00f0010e0706010203040500060b200141fc016a2802002203417f4c0d08200141f4016a28020021010240024020030d00410121060c010b200310322206450d0a0b20024100360288022002200336028402200220063602800220024180026a4100200310c80120022802800220022802880222066a2001200310c9081a200241a3026a200620036a360000200220022903800237009b02410621060c050b200241a7026a20014180026a2903003700002002200141f8016a29030037009f02410121060c040b2002200141f1016a28000036029802410221060c030b2002200141f1016a29000037039802410321060c020b20024198026a41086a200141f9016a2900003703002002200141f1016a29000037039802410421060c010b200241a7026a20014180026a29000037000020024198026a41086a200141f9016a29000037030020024180026a41086a20014190026a2d00003a00002002200141f1016a29000037039802200220014188026a29000037038002410521060b200020022903f001370204200020022903980237001120004109360200200041106a20063a0000200041286a2002290380023703002000410c6a2004280200360200200041196a20024198026a41086a290300370000200041206a200241a7026a290000370000200041306a20024180026a41086a2903003703000c010b20024198026a200141086a10fd0620024198026a200241086a20024198026a41e80110c90841e80110c9081a41002103024002400240024002400240024020012d00f0010e0706010203040500060b200141fc016a2802002203417f4c0d07200141f4016a28020021010240024020030d00410121060c010b200310322206450d090b200241003602f801200220033602f401200220063602f001200241f0016a4100200310c80120022802f00120022802f80122066a2001200310c9081a2002418b026a200620036a360000200220022903f00137008302410621030c050b2002418f026a20014180026a2903003700002002200141f8016a29030037008702410121030c040b2002200141f1016a28000036028002410221030c030b2002200141f1016a29000037038002410321030c020b20024180026a41086a200141f9016a2900003703002002200141f1016a29000037038002410421030c010b2002418f026a20014180026a29000037000020024180026a41086a200141f9016a290000370300200241f0016a41086a20014190026a2d00003a00002002200141f1016a29000037038002200220014188026a2900003703f001410521030b200041086a20024198026a41e80110c9081a200041f0016a20033a00002000410b36020020002002290380023700f101200041f9016a20024180026a41086a29030037000020004180026a2002418f026a29000037000020004188026a20022903f00137030020004190026a200241f0016a41086a2903003703000b20024180046a24000f0b103b000b1039000bed0101027f0240200028020022022001280200470d0041012103024002400240024002402002417f6a0e0404020100030b200041086a200141086a10a708450d04200041c0006a200141c0006a10a708450d0441002103200041f8006a200141f8006a10a708450d02200041b0016a200141b0016a10a70821030c020b200041086a200141086a10a708450d0341002103200041c0006a200141c0006a10a708450d01200041f8006a200141f8006a10a7080f0b41002103200041086a200141086a10a708450d00200041c0006a200141c0006a10a7080f0b20030f0b200041086a200141086a10a7080f0b41000bb53005037f017e207f1c7e077f23002202210320024180046b416071220224002002420037031802400240024002400240024020012802000e050102030400010b20024198026a200141086a10e706200241d0026a200141c0006a10e70620024188036a200141f8006a10e706200241c0036a200141b0016a10e706200041386a20024198026a41306a290300370300200041306a20024198026a41286a290300370300200041286a20024198026a41206a290300370300200041206a20024198026a41186a290300370300200041186a20024198026a41106a290300370300200041106a20024198026a41086a2903003703002000200229039802370308200041c0006a20022903d002370300200041c8006a200241d0026a41086a290300370300200041d0006a200241d0026a41106a290300370300200041d8006a200241d0026a41186a290300370300200041e0006a200241d0026a41206a290300370300200041e8006a200241d0026a41286a290300370300200041f0006a200241d0026a41306a290300370300200041a8016a20024188036a41306a290300370300200041a0016a20024188036a41286a29030037030020004198016a20024188036a41206a29030037030020004190016a20024188036a41186a29030037030020004188016a20024188036a41106a29030037030020004180016a20024188036a41086a290300370300200041f8006a200229038803370300200041e0016a200241c0036a41306a290300370300200041d8016a200241c0036a41286a290300370300200041d0016a200241c0036a41206a290300370300200041c8016a200241c0036a41186a290300370300200041c0016a200241c0036a41106a290300370300200041b8016a200241c0036a41086a290300370300200041b0016a20022903c003370300200042043703000c040b200042003703000c030b200241c0036a200141086a10e70620004201370300200041386a200241c0036a41306a290300370300200041306a200241c0036a41286a290300370300200041286a200241c0036a41206a290300370300200041206a200241c0036a41186a290300370300200041186a200241c0036a41106a290300370300200041106a200241c0036a41086a290300370300200020022903c0033703080c020b20024188036a200141086a10e706200241c0036a200141c0006a10e706200041386a20024188036a41306a290300370300200041306a20024188036a41286a290300370300200041286a20024188036a41206a290300370300200041206a20024188036a41186a290300370300200041186a20024188036a41106a290300370300200041106a20024188036a41086a2903003703002000200229038803370308200041c0006a20022903c003370300200041c8006a200241c0036a41086a290300370300200041d0006a200241c0036a41106a290300370300200041d8006a200241c0036a41186a290300370300200041e0006a200241c0036a41206a290300370300200041e8006a200241c0036a41286a290300370300200041f0006a200241c0036a41306a290300370300200042023703000c010b200241d0026a200141086a10e70620024188036a200141c0006a10e706200241c0036a200141f8006a10e706200041386a200241d0026a41306a290300370300200041306a200241d0026a41286a290300370300200041286a200241d0026a41206a290300370300200041206a200241d0026a41186a290300370300200041186a200241d0026a41106a290300370300200041106a200241d0026a41086a290300370300200020022903d002370308200041c0006a200229038803370300200041c8006a20024188036a41086a290300370300200041d0006a20024188036a41106a290300370300200041d8006a20024188036a41186a290300370300200041e0006a20024188036a41206a290300370300200041e8006a20024188036a41286a290300370300200041f0006a20024188036a41306a29030037030020004203370300200041a8016a200241c0036a41306a290300370300200041a0016a200241c0036a41286a29030037030020004198016a200241c0036a41206a29030037030020004190016a200241c0036a41186a29030037030020004188016a200241c0036a41106a29030037030020004180016a200241c0036a41086a290300370300200041f8006a20022903c0033703000b410421040240024002400240024020012903002205a722060e050001020304000b410021040c030b410121040c020b410221040c010b410321040b02402004417f6a220720044b0d000240024002400240024002400240024002400240024002400240024020070e040001020c0e0b2006417f6a0e04020304050d0b2006417e6a0e030506070c0b2006417d6a0e0207080b0b200141086a21040c090b200141086a21040c080b200141086a21040c070b200141086a21040c060b200141c0006a21040c050b200141c0006a21040c040b200141c0006a21040c030b200141f8006a21040c020b200141f8006a21040c010b20054204520d01200141b0016a21040b200141086a2108200141c0006a2109200141f8006a210a200141b0016a210b200041086a210c200041c0006a210d200041f8006a210e200041b0016a210f200241186a41b0016a2106200241c0036a410972211041002111200241d0006a2112200241186a41306a2113200241186a41286a2114200241f0006a2115200241e8006a2116200241e0006a211720024188016a211820024180016a2119200241b0016a211a200241a8016a211b200241a0016a211c200241d0016a211d200241c0016a211e200241f0016a211f200241e8016a2120200241e0016a2121200241186a41186a2122200241b8016a212320024198016a2124200241f8006a2125034041002107024020042d00000d002002290318210542002126200242003703182012290300212720132903002128201429030021292015290300212a2016290300212b2017290300212c200241186a41f8006a290300212d2018290300212e2019290300212f201a2903002130201b2903002131201c2903002132201d290300213320062903002134201e2903002135201f29030021362020290300213720212903002138200229033821392002290358213a2002290378213b200229039801213c20022903b801213d20022903d801213e20022903f801213f2002290320214020022903282141200220222903003703d803200220413703d003200220403703c803200220053703c0032040a72104410921070240024002400240024002402005a70e050501020300050b200241d0026a410f6a2010410f6a290000370000200241d0026a41086a201041086a290000370300200220102900003703d002420321260c030b200241d0026a410f6a2010410f6a290000370000200241d0026a41086a201041086a290000370300200220102900003703d0020c020b200241d0026a410f6a2010410f6a290000370000200241d0026a41086a201041086a290000370300200220102900003703d002420121260c010b200241d0026a410f6a2010410f6a290000370000200241d0026a41086a201041086a290000370300200220102900003703d002420221260b200421070b20024188036a41306a2242200241c0036a41306a29030037030020024188036a41286a2243200241c0036a41286a29030037030020024188036a41206a2244200241c0036a41206a29030037030020024188036a41186a2245200241c0036a41186a29030037030020024188036a41106a2246200241c0036a41106a29030037030020024188036a41086a2204200241c0036a41086a29030037030020024198026a41086a2247200241d0026a41086a29030037030020024198026a410f6a2248200241d0026a410f6a290000370000200220022903d00237039802200220022903c00337038803200241186a10a20120232036370300201a2037370300201b203837030020242033370300201820353703002025203037030020152031370300201620323703002012202e3703002013202f370300200241186a41206a202a3703002022202b370300200241186a41106a202c3703002006200229038803370300200641086a2004290300370300200641106a2046290300370300200641186a2045290300370300200641206a2044290300370300200641286a2043290300370300200641306a20422903003703002002203e3703a00120022034370390012002203d370380012002203c3703602002203b3703402002203a3703202002203f3703c0012002202d370358200220263703180240200741ff01714109470d0020024188036a410f6a200241c0036a410f6a2900003700004108210720024188036a41086a200241c0036a41086a290000370300200220022900c003370388030c010b20024188036a410f6a2048290000370000200420472903003703002002200229039802370388030b20024180026a410f6a220420024188036a410f6a29000037000020024180026a41086a224220024188036a41086a2903003703002002200229038803220537038002200241c0036a410f6a22432004290000370000200241c0036a41086a22442042290300370300200220053703c00302400240024002400240024020110e0403000102050b200d21042000280200417e6a41034f0d040c030b200e21042000280200417d6a41024f0d030c020b200f210420002903004204510d010c020b200c21042000280200417f6a41044f0d010b0240024002400240024020042d0000417e6a0e06000102040403040b200441246a2802004101470d032004412c6a2802002242450d03200441286a2802002245450d032042450d032045102c0c030b200441046a2802004101470d022004410c6a2802002242450d02200441086a2802002245450d022042450d022045102c0c020b200441186a2802004101470d01200441206a2802002242450d012004411c6a2802002245450d012042450d012045102c0c010b200441086a2802002242450d00200441046a2802002245450d002042450d002045102c0b200420073a0000200420022903c003370001200441206a2029370000200441186a2039370000200441286a2028370000200441096a2044290300370000200441106a2043290000370000200441306a2027370000410421040240024002400240024020012903002205a722420e050001020304000b410021040c030b410121040c020b410221040c010b410321040b2004201141026a22116b220720044b0d020240024002400240024020070e0400010203070b200821042042417f6a41044f0d060c030b200921042042417e6a41034f0d050c020b200a21042042417d6a41024f0d040c010b200b210420054204520d030b2011417f6a21110c010b0b41a79dc800412f41d89dc800105c000b0240024002400240024020022802180e0404000102030b024002400240024020022d0020417e6a0e06000102070703070b20022802444101470d06200241c8006a2802004100200241cc006a28020022021b2204450d062002450d062004102c200324000f0b20022802244101470d05200241286a28020041002002412c6a28020022021b2204450d052002450d052004102c200324000f0b200241386a2802004101470d04200228023c4100200241c0006a28020022021b2204450d042002450d042004102c200324000f0b20022802244100200241286a28020022021b2204450d032002450d032004102c200324000f0b0240024002400240024020022d0020417e6a0e06000102040403040b20022802444101470d03200241c8006a2802004100200241cc006a28020022041b2200450d032004450d032000102c0c030b20022802244101470d02200241286a28020041002002412c6a28020022041b2200450d022004450d022000102c0c020b200241386a2802004101470d01200228023c4100200241c0006a28020022041b2200450d012004450d012000102c0c010b20022802244100200241286a28020022041b2200450d002004450d002000102c0b0240024002400240200241d8006a2d0000417e6a0e06000102060603060b200228027c4101470d0520024180016a280200410020024184016a28020022021b2204450d052002450d052004102c200324000f0b200228025c4101470d04200241e0006a2802004100200241e4006a28020022021b2204450d042002450d042004102c200324000f0b200241f0006a2802004101470d0320022802744100200241f8006a28020022021b2204450d032002450d032004102c200324000f0b200228025c4100200241e0006a28020022021b2204450d022002450d022004102c200324000f0b0240024002400240024020022d0020417e6a0e06000102040403040b20022802444101470d03200241c8006a2802004100200241cc006a28020022041b2200450d032004450d032000102c0c030b20022802244101470d02200241286a28020041002002412c6a28020022041b2200450d022004450d022000102c0c020b200241386a2802004101470d01200228023c4100200241c0006a28020022041b2200450d012004450d012000102c0c010b20022802244100200241286a28020022041b2200450d002004450d002000102c0b02400240024002400240200241d8006a2d0000417e6a0e06000102040403040b200228027c4101470d0320024180016a280200410020024184016a28020022041b2200450d032004450d032000102c0c030b200228025c4101470d02200241e0006a2802004100200241e4006a28020022041b2200450d022004450d022000102c0c020b200241f0006a2802004101470d0120022802744100200241f8006a28020022041b2200450d012004450d012000102c0c010b200228025c4100200241e0006a28020022041b2200450d002004450d002000102c0b024002400240024020024190016a2d0000417e6a0e06000102050503050b20022802b4014101470d04200241b8016a2802004100200241bc016a28020022021b2204450d042002450d042004102c200324000f0b2002280294014101470d0320024198016a28020041002002419c016a28020022021b2204450d032002450d032004102c200324000f0b200241a8016a2802004101470d0220022802ac014100200241b0016a28020022021b2204450d022002450d022004102c200324000f0b200228029401410020024198016a28020022021b2204450d012002450d012004102c200324000f0b0240024002400240024020022d0020417e6a0e06000102040403040b20022802444101470d03200241c8006a2802004100200241cc006a28020022041b2200450d032004450d032000102c0c030b20022802244101470d02200241286a28020041002002412c6a28020022041b2200450d022004450d022000102c0c020b200241386a2802004101470d01200228023c4100200241c0006a28020022041b2200450d012004450d012000102c0c010b20022802244100200241286a28020022041b2200450d002004450d002000102c0b02400240024002400240200241d8006a2d0000417e6a0e06000102040403040b200228027c4101470d0320024180016a280200410020024184016a28020022041b2200450d032004450d032000102c0c030b200228025c4101470d02200241e0006a2802004100200241e4006a28020022041b2200450d022004450d022000102c0c020b200241f0006a2802004101470d0120022802744100200241f8006a28020022041b2200450d012004450d012000102c0c010b200228025c4100200241e0006a28020022041b2200450d002004450d002000102c0b0240024002400240024020024190016a2d0000417e6a0e06000102040403040b20022802b4014101470d03200241b8016a2802004100200241bc016a28020022041b2200450d032004450d032000102c0c030b2002280294014101470d0220024198016a28020041002002419c016a28020022041b2200450d022004450d022000102c0c020b200241a8016a2802004101470d0120022802ac014100200241b0016a28020022041b2200450d012004450d012000102c0c010b200228029401410020024198016a28020022041b2200450d002004450d002000102c0b0240024002400240200241c8016a2d0000417e6a0e06000102040403040b20022802ec014101470d03200241f0016a2802004100200241f4016a28020022021b2204450d032002450d032004102c200324000f0b20022802cc014101470d02200241d0016a2802004100200241d4016a28020022021b2204450d022002450d022004102c200324000f0b200241e0016a2802004101470d0120022802e4014100200241e8016a28020022021b2204450d012002450d012004102c200324000f0b20022802cc014100200241d0016a28020022021b2204450d002002450d002004102c0b200324000bb30a06027f017e0b7f017e027f017e230041901f6b22022400200028020821032000410036020820002902002104200041003602002002200336024820022004370340200241106a200241c0006a10ed062002410036020820024100360200200241c0166a41186a2205200241106a41186a2206280200360200200241c0166a41106a2207200241106a41106a2208290300370300200241c0166a41086a2209200241106a41086a220a290300370300200220022903103703c016200241881b6a200241c0166a10f7060240024020022802881b4102460d00200241c0006a410c6a210b200241c0006a41e4016a210c200241306a410472210d200241f0186a410c6a210e200241801d6a210f0340200f290300210420022903f81c2110200241c0006a200241881b6a41f00110c9081a200241c0006a200110c208200241a01d6a200241c0006a41f00110c9081a200241f0186a200241a01d6a41f00110c9081a0240024020022802002203450d00200228020421110c010b41881610322203450d03410021112003200241c0006a41801610c908221241003b018616201241003602801620024100360204200220123602000b200241306a20112003200241f0186a10a3080240024020022802304101470d0020022903f018211320022802f8182103200241c0006a200e41e40110c9081a200c41086a200d41086a280200360200200c200d290200370200200241dc166a200241c0006a41f00110c9081a2002200336024820022013370340200b200241dc166a41f00110c9081a200220023602bc02200241c0006a2010200410c5081a0c010b200228023c210320022802382111200241f0186a10e606201120034104746a220341d8146a2004370300200341d0146a20103703000b200241881b6a200241c0166a10f70620022802881b4102470d000b0b200241c0166a10ee06200241881b6a41086a200041086a2203280200360200200220002902003703881b200241c0006a200241881b6a10ed06200241c0006a10ee062003200241086a28020036020020002002290300370200200041146a2203280200211120034100360200200029020c21042000410036020c2002201136024820022004370340200241106a200241c0006a10ef06200241003602382002410036023020052006280200360200200720082903003703002009200a290300370300200220022903103703c0162000410c6a210f200241c0006a200241c0166a10f8060240200228024022124102460d00200241dc166a200241c0006a410472220d41940210c9081a200241c0006a41ec016a2103200241881b6a41f0016a2111200241a01d6a410472210c0340200241f0186a200241dc166a41940210c9081a200241c0006a200241dc166a41940210c9081a200220123602a01d200c200241f0186a41ec0110c9081a200241a01d6a200110c208200241881b6a200241a01d6a41f00110c9081a201141206a200341206a290200370200201141186a200341186a290200370200201141106a200341106a290200370200201141086a200341086a29020037020020112003290200370200200241c0006a200241881b6a41980210c9081a200241306a200241c0006a10a608200241c0006a200241c0166a10f806200228024022124102460d01200241dc166a200d41940210c9081a0c000b0b200241c0166a10f006200241881b6a41086a200f41086a22032802003602002002200f2902003703881b200241c0006a200241881b6a10ef06200241c0006a10f0062003200241306a41086a280200360200200f2002290330370200200241901f6a24000f0b1039000b8e0703027f017e037f230041c0056b22022400200241386a200141386a290200370300200241306a200141306a290200370300200241286a200141286a290200370300200241206a200141206a290200370300200241186a200141186a290200370300200241106a200141106a290200370300200241086a200141086a2902003703002002200129020037030020024190016a200210bf070240024002400240200228029001410c460d00200241a8036a20024190016a41980210c9081a200228022021030240024020022802004101460d00410021012003450d012002413c6a28020021010c010b2002411c6a28020021012003450d00417f20012002413c6a2802006a220320032001491b21010b417f200141016a220320032001491bad4298027e2204422088a70d022004a72201417f4c0d02200110322205450d032005200241a8036a41980210c908210320024101360248200220014198026e220636024420022003360240200241d0006a41386a200241386a290300370300200241d0006a41306a200241306a290300370300200241d0006a41286a200241286a290300370300200241d0006a41206a200241206a290300370300200241d0006a41186a200241186a290300370300200241d0006a41106a200241106a290300370300200241d0006a41086a200241086a2903003703002002200229030037035020024190016a200241d0006a10bf070240200228029001410c460d004198022103410121010340200241a8036a20024190016a41980210c9081a024020012006470d00200228027021070240024020022802504101460d00200228028c01410020071b21050c010b200228026c21052007450d00417f2005200228028c016a220720072005491b21050b200241c0006a2006417f200541016a220720072005491b109305200228024021050b200520036a200241a8036a41980210c9081a2002200141016a220136024820024190016a200241d0006a10bf07200228029001410c460d0120034198026a2103200228024421060c000b0b20024190016a10c00702402002280250450d00200241d0006a41047210ee060b02402002280270450d00200241f4006a10f0060b20002002290340370200200041086a200241c0006a41086a2802003602000c010b200041003602082000420837020002402002280200450d00200241047210ee060b2002280220450d00200241246a10f0060b200241c0056a24000f0b103b000b1039000bf90401027f024002400240024002400240024020002802000e06060001020304050b20002802042000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a10a2010f0b20002802042000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041206a10a201200041106a280200200041186a28020010c402200041146a2802002201450d0420002802102200450d0420014188026c450d042000102c0f0b20002802042000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041106a280200200041186a28020010c302200041146a2802002201450d0320002802102200450d0320014198026c450d032000102c0f0b20002802042000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041206a10a201200041106a280200200041186a28020010c402200041146a2802002201450d0220002802102200450d0220014188026c450d022000102c0f0b20002802042000410c6a28020010c3020240200041086a2802002201450d0020002802042202450d0020014198026c450d002002102c0b200041206a10a201200041106a280200200041186a28020010c402200041146a2802002201450d0120002802102200450d0120014188026c450d012000102c0c010b200041186a10a20120002802042000410c6a28020010c302200041086a2802002201450d0020002802042200450d0020014198026c450d002000102c0f0b0b130020004103360204200041a0d1c4003602000b130020004104360204200041d0d3c4003602000bb40302047f017e23004180016b22012400200141206a22024200370300200141186a22034200370300200141086a41086a420037030020014200370308200141086a41c1dcc700410610c501200141e8006a419ca4c600410610c5012002200141e8006a41086a290000370300200320012900683703002001412036022c2001200141086a360228200141306a200141086a412010b30102400240200128023022030d00410021020c010b200128023421042001200141306a41086a28020036024420012003360240200141e8006a200141c0006a10860202400240200128026822020d004100210220014100360250200142013703482001410f36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141b4bcc3003602682001200141d8006a360278200141e4006a41dcb7c000200141e8006a103e1a200135025042208620013502488410000240200128024c450d002001280248102c0b0c010b200129026c21050b2004450d002003102c0b0240024020020d0020004100360208200042043702000c010b20002005370204200020023602000b20014180016a24000b130020004101360204200041b0e0c4003602000b3400200041dcdcc70036020420004100360200200041146a4103360200200041106a41bce1c400360200200041086a420a3702000b0b0020004104410010fd020b130020004107360204200041a4e5c4003602000bed0401057f23004180016b22022400200241386a41ffdcc700410710c501200241d8006a41ddecc400411210c5012002200136027c200241286a200241fc006a410410c7012002410c6a200241fc006a41046a3602002002200241306a3602042002200241fc006a3602082002200241286a360200200241c8006a2002107e024002402002280250220141206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b200241003602302002200336022c20022004360228200241286a4100411010c8012002280228200228023022036a22042002290038370000200441086a200241386a41086a2900003700002002200341106a2203360230200241286a2003411010c8012002280228200228023022036a22042002290058370000200441086a200241d8006a41086a22052900003700002002200341106a220436023020022802482103200241286a2004200110c80120022802282204200228023022066a2003200110c9081a2002200620016a22013602300240200228024c450d002003102c0b20022004200110dc0420052002410c6a290200370300200241d8006a41106a200241146a290200370300200241f0006a22012002411c6a290200370300200241f8006a2203200241246a280200360200200220022902043703580240024020022802004101460d00200041003602000c010b20004101360200200020022903583702042000410c6a200241e0006a290300370200200041146a200241e8006a2903003702002000411c6a2001290300370200200041246a20032802003602000b0240200228022c450d002004102c0b20024180016a24000f0b103b000b1039000bad0202027f027e230041306b2201240002404101103222020d001039000b200142013702042001200236020020014100410110c8012001280200200128020822026a41003a0000410041003502ccd248200141106aad7c42adfed5e4d485fda8d8007e42218922033e02ccd2482001200241016a360208200141106a41a789c5004101109a01200041186a4200370300200041146a41c08ec100360200200041003602102000200341ccd2c800ad22047c37030820002003200485220320044218898520034210868520034225897c3703002000200129001037002c200041346a200141186a2900003700002000413c6a200141206a290000370000200041c4006a200141106a41186a29000037000020002001290300370220200041286a2001280208360200200141306a24000ba30401047f230041e0006b22052400024002402004417f4c0d000240024020040d00410121060c010b200410322206450d020b41002107200541003602282005200436022420052006360220200541206a4100200410c80120052802202206200528022822086a2003200410c9081a2005200820046a220836022802402008200141286a280200470d000240200128022022072006470d00410121070c010b20062007200810cc084521070b02402005280224450d002006102c0b0240024020070d00200520032004109a01200541206a41186a200541186a2207290000370300200541206a41106a200541106a2206290000370300200541206a41086a200541086a220829000037030020052005290000370320200541c0006a41086a200241086a280200360200200520022902003703400240024020040d00410121020c010b200410322202450d040b200541003602582005200436025420052002360250200541d0006a4100200410c8012005280250200528025822026a2003200410c9081a2005200220046a3602582001200541206a200541c0006a200541d0006a10a107200041186a2007290000370000200041106a2006290000370000200041086a2008290000370000200020052900003700000c010b2000200129002c370000200041186a200141c4006a290000370000200041106a2001413c6a290000370000200041086a200141346a2900003700000b200541e0006a24000f0b103b000b1039000b860e04037f017e057f077e230041b0026b2204240002400240024002400240200141d0006a22052001412c6a412010cc08450d0020044180016a41186a200541186a29000037030020044180016a41106a200541106a29000037030020044180016a41086a200541086a29000037030020042005290000370380010240200120044180016a1092072206450d00200628020c41004a0d010b200441e0006a41086a2201200541086a290000370300200441e0006a41106a2202200541106a290000370300200441e0006a41186a2203200541186a29000037030020042005290000370360413010322205450d01200541003a0000200520042903603700012005200429008001370021200541096a2001290300370000200541116a2002290300370000200541196a2003290300370000200541286a20044187016a29000037000002400240024020052d00000e0402020002010b20052802082201450d0120052802042202450d012001450d012002102c0c010b20052802282201450d0020052802242202450d002001450d002002102c0b2005102c200041003602400c040b2004410036021420042005360210200441f0ecc40036020c20042001360208412410322205450d002004422437021c20042005360218200441186a41004104102f2004280218200428022022056a20023600002004200541046a36022020034120200441186a10ca0420044180016a200441086a2004280218220520042802201093070240200428021c450d002005102c0b0240024002400240024002402004280280014101460d002004280284012205450d010240024020044188016a2903002207422088a741044f0d00410021010c010b20052800002102410121010b02402007a7450d002005102c0b2001450d012004200236021820044180016a200441086a200441186a41041093072004280280014101470d0220042802840122052d00000e0405050305040b02400240024020042802840122052d00000e0402020002010b200541086a2802002201450d01200541046a2802002202450d012001450d012002102c0c010b200541286a2802002201450d00200541246a2802002202450d002001450d002002102c0b2005102c200041003602400c080b200041003602400c070b024020042802840122030d00200041003602400c070b200420044188016a2903002207422088a7220636025c2004200336025841002105200441003a00382006417f6a21010240034020062005460d01200441186a20056a200320056a22022d00003a00002004200241016a3602582004200541016a22023a00382004200136025c2001417f6a21012002210520024120460d060c000b0b0240200541ff0171450d00200441003a00380b410021050c050b200541086a2802002201450d01200541046a2802002202450d012001450d012002102c0c010b200541286a2802002201450d00200541246a2802002202450d002001450d002002102c0b2005102c200041003602400c030b1039000b200441c0016a41086a2205200441186a41086a290300370300200441c0016a41106a2201200441186a41106a290300370300200441c0016a41186a2206200441186a41186a290300370300200420042903183703c0010240200241ff0171411f4b0d00410021050c010b200441e0006a41086a2005290300370300200441e0006a41106a2001290300370300200441e0006a41186a2006290300370300200420042903c001370360200441c0016a200441d8006a10f603024020042802e00122050d00410021050c010b20044180016a41186a2201200441e0006a41186a29030037030020044180016a41106a2202200441e0006a41106a29030037030020044180016a41086a2206200441e0006a41086a29030037030020044180016a41286a2208200441c0016a41086a29030037030020044180016a41306a2209200441c0016a41106a29030037030020044180016a41386a220a200441c0016a41186a290300370300200441f0016a41086a220b200441ec016a2802003602002004200429036037038001200420042903c0013703a0012004200441e4016a2902003703f001200441186a41386a220c200a290300370300200441186a41306a2009290300220d370300200441186a41286a2008290300220e370300200441186a41206a20042903a001220f370300200441186a41186a20012903002210370300200441186a41106a20022903002211370300200441186a41086a2006290300221237030020042004290380012213370318200041306a200d370300200041286a200e370300200041206a200f370300200041186a2010370300200041106a2011370300200041086a201237030020002013370300200041386a200c290300370300200020042903f001370244200041cc006a200b2802003602000b200020053602402007a7450d002003102c0b200441b0026a24000bb70303017f027e097f230041106b220224002002200029030042adfed5e4d485fda8d8007e220342a0cbbf9599b5a19f0a7c2204200129001885200129000020048542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852001290008200342efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852001290010200342bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010ce0820002802102205200041086a2903002203200241086a29030020022903007c85200389a72206712107200641197641818284086c2108200041146a28020021094100210a0340200920076a280000220b2008732200417f73200041fffdfb776a71418081828478712100200a41046a220a20076a200571210c02400340024020000d00200c2107200b200b4101747141808182847871450d034100210d0c020b20012009410020006841037620076a2005716b41306c6a220d41506a2206460d012000417f6a200071210020012006412010cc080d000b0b0b200241106a2400200d41706a4100200d1b0bbf1903037f037e1b7f23004180046b2204240020012802042105200128020021062001280208220141086a2900002107200141106a290000210820012900002109200441186a220a200141186a290000370300200441106a220b2008370300200441086a220c2007370300200420093703002003410174210d2004410772210e200441d3036a210f200441c8016a41186a2110200441c8016a410c6a2111200441c8016a41206a211241002113410021144100211502400240024002400240024002400240024002400240024002400240024002400240034020154101762101024002402015410171450d00200120034b0d03200120034f0d05200441013a00d001200420023602c801200420013602cc012004200220016a2d000041f001713a00d1010c010b200120034b0d03200441003a00d001200420013602cc01200420023602c8010b200441a8036a20062004200441c8016a200528020c11060002400240024020042802a80322160d00200441c8016a41086a2213200441086a290300370300200441c8016a41106a2203200441106a290300370300200441c8016a41186a2217200441186a290300370300200420042903003703c8014130103222010d010c140b20042802ac032118200441c8016a201620042802b00310a00320042d00c8014101460d10201441016a21140c010b200120042903c80137000120012004290020370021200120144100473a0000200141096a2013290300370000200141116a2003290300370000200141196a2017290300370000200141286a200441276a29000037000020004101360200200020013602040c110b034020042802e401211920042802e001211a20042802dc01211b20042802d801211c20042802d401211720042802d001211d20042802cc012101200441206a201241a80110c9081a200428029403211e200428029003211f024002400240024020010e051210000102120b4100210102402017410174201c6b2220200d20136b221e201e20204b1b2221450d000340201320016a221e410176221f20034f0d0a201c20016a2222410176222320174f0d0b2002201f6a2d0000221f410f71201f41f00171410476201e4101711b201d20236a2d0000221e410f71201e41047620224101711b470d012021200141016a2201470d000b202121010b024020012020460d002000420037020020180d140c150b202021010c020b200420193602dc012004201a3602d8012004201b3602d4012004201c3602d001200420173602cc012004201d3602c8012010200441206a41a80110c9081a02400240200d2013460d002013410176220120034f0d0b200441c8016a200220016a2d00002201410f71200141047620134101711b410c6c6a2201280200221b4102470d012000420037020020180d140c150b02400240201f0d00200441003602a8030c010b201e417f4c0d1102400240201e0d00410121130c010b201e10322213450d170b200441b0036a220141003602002004201e3602ac03200420133602a803200441a8036a4100201e10c80120042802a803200128020022136a201f201e10c9081a20012013201e6a3602000b200020042903a803370204200041003602002000410c6a200441b0036a28020036020020180d130c140b2001280204211a200141086a280200211941012120410121010c010b20042802a0032121200428029c0321202004280298032101200420193602d0012004201a3602cc012004201b3602c8012011200441206a41a80110c9081a20042001360284032004201e360280032004201f3602fc024100210102402017410174201c6b2219200d20136b221b201b20194b1b221a450d000340201320016a221e410176221f20034f0d0b201c20016a2222410176222320174f0d0c2002201f6a2d0000221f410f71201f41f00171410476201e4101711b201d20236a2d0000221e410f71201e41047620224101711b470d01201a200141016a2201470d000b201a21010b20012019470d0b02400240201b2019460d00201320196a2201410176221720034f0d0e200441c8016a200220176a2d00002217410f71201741047620014101711b410c6c6a2217280200221b4102470d012000420037020020180d130c140b0240024020200d00200441003602a8030c010b2021417f4c0d100240024020210d00410121130c010b202110322213450d160b200441b0036a22014100360200200420213602ac03200420133602a803200441a8036a4100202110c80120042802a803200128020022136a2020202110c9081a2001201320216a3602000b200020042903a803370204200041003602002000410c6a200441b0036a28020036020020180d120c130b201941016a2120201941016a21012017280204211a201741086a28020021190b200120156a2115201320206a21130240201b450d00200441c8016a201a201910a00320042d00c8014101460d100c010b0b0240024020194120460d00200441c8016a41086a2217200c290300370300200441c8016a41106a221c200b2903003703002010200a290300370300200420042903003703c8012019417f4c0d0e0240024020190d00410121010c010b201910322201450d140b200441003602f803200420193602f403200420013602f003200441f0036a4100201910c80120042802f00320042802f80322016a201a201910c9081a200f41086a200120196a360000200f20042903f003370000413010322201450d13200141043a0000200120042903c801370001200120042900d003370021200141096a2017290300370000200141116a201c290300370000200141196a2010290300370000200141286a200441d0036a41076a290000370000410121170c010b41002117200441c8016a41026a41003a0000200441003b01c801201a2f0000211c200441f0036a41026a201a41026a2d00003a0000201a411f6a2d0000211d201a41176a2900002107201a2800032101201a2900072108200441d0036a41086a221e201a410f6a290000370300200441d0036a41106a221f2007370300200441d0036a41186a2222201d3a00002004201c3b01f003200420083703d003201020222d00003a0000200441c8016a41106a201f290300370300200441c8016a41086a201e290300370300200420042903d0033703c8010b200441cc036a41026a221c200441f0036a41026a2d00003a0000200441a8036a41086a221d200441c8016a41086a290300370300200441a8036a41106a221e200441c8016a41106a290300370300200441a8036a41186a221f2010280200360200200420042f01f0033b01cc03200420042903c8013703a803024020170d00200e20042903a803370000200e41086a201d290300370000200e41106a201e290300370000200e41186a201f2d00003a0000200420042f01cc033b0100200420013600032004201c2d00003a00022018202420181b21242018450d012024450d012016102c0c010b0b20004101360200200020013602042018450d0f0c0e0b2001200341b8c4c800104f000b2001200341c8c4c800104f000b2001200341d8c4c800103f000b201f200341f8c3c800103f000b2023201741f8c3c800103f000b2001200341f8c3c800103f000b201f200341f8c3c800103f000b2023201741f8c3c800103f000b2000420037020020180d050c060b2017200341f8c3c800103f000b410021190240024002402017410174201c6b200d20136b2215470d004100211941002101024002402015450d00410021010340201c20016a221e410176221f20174f0d04201320016a2222410176222320034f0d05201d201f6a2d0000221f410f71201f41f00171410476201e4101711b200220236a2d0000221e410f71201e41047620224101711b470d012015200141016a2201470d000c020b0b20012015470d010b201a417f4c0d0302400240201a0d00410121010c010b201a10322201450d090b200441003602d0012004201a3602cc01200420013602c801200441c8016a4100201a10c80120042802c801221920042802d00122016a201b201a10c9081a20042001201a6a3602d00120042902cc0121070b2000201936020420004100360200200041086a200737020020180d050c060b201f201741f8c3c800103f000b2023200341f8c3c800103f000b103b000b2000420037020020180d010c020b20042d00c9012113200441a8036a41086a2203200441086a290300370300200441a8036a41106a2217200441106a290300370300200441a8036a41186a221c200441186a290300370300200420042903003703a803413010322201450d02200141033a0000200120042903a803370001200120133a0021200120042901d003370122200141096a2003290300370000200141116a2017290300370000200141196a201c290300370000200141286a200441d6036a29010037010020004101360200200020013602042018450d010b2016102c0b20044180046a24000f0b1039000bc02d03157f0c7e047f23002201210220014180056b41607122032400200041146a220128020022042802002105200141c08ec1003602002000280210210620004100360210200041186a42003703002003200036021c2004200641016a22076a2108200441046a21012005417f73418081828478712109200341a0026a410572210a200341a0026a41276a210b200341a0026a41206a210c20042105024002400240024002400240024002400240024002400240024002400240024002400340024002400240024020090d000340024020012008490d004100210d0c040b200541c07d6a210520012802002109200141046a220e21012009418081828478712209418081828478460d000b2009418081828478732209417f6a200971210d200e21010c010b2009417f6a200971210d2005450d010b20034180046a41186a220f200541002009684103766b41d0006c6a221041b07f6a220941186a29020037030020034180046a41106a2211200941106a29020037030020034180046a41086a2212200941086a2902003703002003200929020037038004201041506a280200210e201041546a2d00002110200b200941cc006a280000360000200c200941c5006a290000370300200341a0026a41186a22132009413d6a290000370300200341a0026a41106a2214200941356a290000370300200341a0026a41086a22152009412d6a290000370300200320092900253703a00220104102470d010b0240034002400240200d0d000340200120084f0d04200541c07d6a210520012802002109200141046a220e21012009418081828478712209418081828478460d000b200941808182847873220d417f6a200d712109200e21010c010b2005450d02200d417f6a200d7121090b200d68210e2009210d20054100200e4103766b41d0006c6a220e41506a28020041244d0d00200e41586a280200102c2009210d0c000b0b0240024020060d00410021010c010b200441ff01200641056a10cb081a20062101200641074d0d00200741037641076c21010b200020063602102000411c6a4100360200200041186a2001360200200041146a2004360200200328021c22052d00484101460d0f200541cc006a28020021010240200541386a220e28020022092009417f6a2208200541306a220d28020022092005412c6a220a2802006b716b4101470d00200a109003200e280200417f6a2108200d28020021090b200d2008200941016a71360200200541346a28020020094102746a2001360200200541286a280200220920014d0d032005280220200141fc006c6a22012902102116200120032903b00237021020012902082117200120032903a802370208200341003a00a002200341003602a40220012902002118200120032903a002370200200141186a22092902002119200920032903b802370200200341206a41086a2209200141e8006a290200370300200341206a41106a2208200141f0006a290200370300200341206a41186a220d200141f8006a2802003602002003201637039001200320173703880120032018370380012003200129026037032020032019370398012001290240211a200141c8006a290200211b200141d0006a290200211c200141d8006a290200211d2001290220211e200141286a290200211f200141306a29020021202003200141386a2902002221370378200320203703702003201f3703682003201e3703602003201d3703582003201c3703502003201b3703482003201a3703402018a741ff01714101470d02200341a8016a41176a220e2003290098012218370000200341a8016a41106a220a2003290091012217370300200341a8016a41086a221020032900890122163703002005280244220120032900810122193700002001201ea7220f3a001f200141086a2016370000200141106a2017370000200141176a2018370000200320193703a801200341a0026a41d8006a201d370300200341a0026a41d0006a201c370300200341a0026a41c8006a201b370300200341e0026a201a370300200341dc026a200328027c360200200341d4026a2003290274370200200341cc026a200329026c370200200320032902643702c40220034180036a2003290320370300200341a0026a41e8006a2009290300370300200341a0026a41f0006a2008290300370300200341a0026a41f8006a200d280200360200200341a9026a2010290300370000200341b1026a200a290300370000200341a0026a41186a200e290000370000200320032903a8013700a102200341c0026a200f3a0000200341013a00a002200541206a200341a0026a1099032101200328021c220341003a0048200341cc006a20013602000c0f0b200341b8036a41186a2209200f290300370300200341b8036a41106a22222011290300370300200341b8036a41086a22232012290300370300200341a8016a41086a22242015290300370300200341a8016a41106a22152014290300370300200341a8016a41186a22142013290300370300200341a8016a41206a2213200c290300370300200341a8016a41276a2225200b28000036000020032003290380043703b803200320032903a0023703a801200f20092903003703002011202229030037030020122023290300370300200320032903b80337038004200a20032903a801370000200a41086a2024290300370000200a41106a2015290300370000200a41186a2014290300370000200a41206a2013290300370000200a41276a2025280000360000200320103a00a4022003200e3602a002200328021c220941c0006a2802002110200928023c210902400240200e41244b0d00200a210f0c010b20032802ac02210e20032802a802210f0b200320032f01cc023b01c8042003200e3602c4042003200f3602c004200920034180046a200341c0046a201028021c110700024020032802a00241244d0d0020032802a802102c0b200d21090c000b0b2017a721052017422088a72101200341003602d401200341003a00ac01200341003602a801200341e8016a41106a2003280258360200200341e8016a41086a2003290350370300200320032903483703e801201aa72123024002400240024002402018422088a70e050102030400010b200341c0026a201f370300200341b8026a201e370300200341b0026a2019370300200341a8026a2016370300200341c8026a2020370300200320053602a002200320013602a40202400240200141244b0d00200341a9026a210e0c010b2016422088a7210e2019a721010b2005410176210d0240024020054101710d002001200d490d074101210a410021090c010b2001200d4d0d07200e200d6a2d0000410f7121094100210a200d41016a210d0b200141017420056b220541ffff03200541ffff03491b220541017641036a22101032220f450d072001200d6b2108200e200d6a210d200341003602e001200320103602dc012003200f3602d80102402021422088a72225410020251b220e0d002003200536028404200341013b01800420034180046a200341d8016a10910341002105200a450d0b410021010c0e0b200320053602840420034181023b01800420034180046a200341d8016a10910341002105200a450d0b410021010c0c0b410110322201450d06200342013702dc01200320013602d801200341d8016a4100410110c80120032802d80120032802e0016a41003a0000200320032802e00141016a3602e0010c0e0b200341c0026a201f370300200341b8026a201e370300200341b0026a2019370300200341a8026a2016370300200341c8026a2020370300200320053602a002200320013602a40202400240200141244b0d00200341a9026a21080c010b2016422088a721082019a721010b200541017621090240024020054101710d0020012009490d0820034188046a200120096b360200200341003b0180042003200820096a360284040c010b200120094d0d08200341013a00800420034188046a2001200941016a22056b3602002003200820056a360284042003200820096a2d0000410f713a0081040b200341d8016a20034180046a2021a7220120231092030240200141002021422088a722051b2201450d002005450d002001102c0b20032802a40241244d0d0d200341ac026a280200102c0c0d0b200341c0026a201f370300200341b8026a201e370300200341b0026a2019370300200341a8026a2016370300200341c8026a2020370300200320053602a002200320013602a40202400240200141244b0d00200341a9026a21090c010b2016422088a721092019a721010b200320053602e803200320013602e403200320093602e003200341c0046a200341e0036a109303200341a8016a200341e0036a410020011094032101200328021c2105200341b8036a41086a201a370300200341b8036a41106a20032903e801370300200341d0036a200341e8016a41086a290300370300200341d8036a200341e8016a41106a280200360200200320213703b80320034180046a2005200341b8036a200341a8016a108f03200341a8016a2001109503109603000b109703000b2001200941b4f3c000103f000b200d200141f0c2c8001058000b200d20014180c3c800103f000b1039000b2009200141f0c2c8001058000b200920014180c3c800103f000b410121010c020b410121010b03400240024020010e020001010b200520084f0d03200d20056a2d00002109200541016a2105410121010c010b024020032802e001220120032802dc01470d00200341d8016a2001410110c8010b20032802d80120016a20093a00002003200141016a3602e001410021010c000b0b03400240024020010e020001010b200520084f0d02200d20056a2d00002109200541016a2105410121010c010b024020032802e001220120032802dc01470d00200341d8016a2001410110c8010b20032802d80120016a20093a00002003200141016a3602e001410021010c000b0b20032802e001222221010240202220032802dc01470d00200341d8016a2022410110c80120032802e00121010b2021a7212420032802d80120016a41003a0000200320032802e00141016a22013602e0010240200120032802dc01470d00200341d8016a2001410110c80120032802e00121010b202441c0046a211420032802d80120016a41003a0000200320032802e00141016a3602e0010240200e450d00200e201a422088a7200341d8016a10bb010b024002400240024020142024470d0041002110410021010c010b20034180046a4101722109200341a9026a2106200341c0046a41017221054100210a20242101410021104101210e024002400340200341023a00800420012902002118200329039804211a2003290390042117200329038804211e2001200329038004370200200129020821162001201e3702082001290210211e20012017370210200141186a220829020021172008201a370200200320173703d8042003201e3703d004200320163703c804200320183703c004200141206a280200210b20034180046a41176a220f200541176a29000037000020034180046a41106a2208200541106a29000037030020034180046a41086a220d200541086a290000370300200320052900003703800402402018a7220c41ff017122114103470d0020104180fe037141087621010c050b200341e0036a41176a2212200f290000370000200341e0036a41106a220f2008290300370300200341e0036a41086a200d29030022183703002003200329038004221a3703e003200341c0046a41176a22132012290000370000200341c0046a41106a2212200f290300370300200341c0046a41086a220f20183703002003201a3703c00402400240024020114102470d00200341023a00b8030c010b0240024020032802a402221141244b0d00200621150c010b20032802b002211120032802ac0221150b200320032802a0023602f804200320113602f404200320153602f004200341a8016a200341f0046a4101200a1094032111200328021c2115200920032903c004370000200941086a200f290300370000200941106a2012290300370000200941176a20132900003700002003200c3a0080042003200b3602a004200341b8036a201520034180046a200341a8016a108f03200341a8016a201110950320032d00b8034103460d010b20034180046a41206a200341b8036a41206a29030037030020034180046a41186a200341b8036a41186a2903003703002008200341b8036a41106a290300370300200d200341b8036a41086a290300370300200320032903b8032218370380044100210802400240024002402018a741ff0171417f6a0e020103000b20094120200341d8016a10bb010c010b200341c0046a41186a200941186a2900003703002012200941106a290000370300200f200941086a290000370300200320092900003703c00420032802a404220841214f0d04200341c0046a2008200341d8016a10bb010b200e21080b200a41016a210a200e410174210e20082010722110200141246a22012014460d030c010b0b20104180fe037141087621010c040b2008412041bce7c300104f000b20104180fe037141087621010b200341033a00c00420034197046a20032900d80437000020034190046a20032900d10437030020034188046a20032900c904370300200320032900c104370380040b200341033a00b8030b202241026a21052022417d4b0d0220032802e00122092005490d0320032802d80120226a2001410874201041ff0171723b000002402025450d002023450d002025102c0b2024102c20032802a40241244d0d00200341ac026a280200102c0b200328021c220141c0006a2802002105200128023c210120034180046a41086a4100280280a240360200200341002902f8a14037038004200341a0026a200120034180046a20032802d80120032802e0012005280214110400200328021c2201280244220520032903a002370000200541086a200341a0026a41086a290300370000200541106a200341a0026a41106a290300370000200541186a200341a0026a41186a2903003700002001200128026c41016a36026c2001280244220541186a2900002118200541106a290000211a200541086a2900002117200141c9006a2005290000370000200141013a0048200141d1006a2017370000200141d9006a201a370000200141e1006a2018370000024020032802d801410020032802dc0122011b2205450d002001450d002005102c0b20032802a80141244d0d00200341b0016a280200102c0b0240200041286a2802002203450d0020002802202101200341fc006c210303400240024020012d00000d00200141046a1098030c010b200141246a1098030b200141fc006a2101200341847f6a22030d000b0b0240200041246a2802002201450d0020002802202203450d00200141fc006c450d002003102c0b200041386a280200210102400240200041306a28020022032000412c6a28020022054f0d00200120054f0d0141b4a0c700412341d8a0c700103c000b20012003490d030b02402001450d0020002802342203450d00200141ffffffff0371450d002003102c0b024020002802102205450d00200041146a280200220341046a2101200520036a41016a21092003280200417f73418081828478712105024003400240024020050d000340200120094f0d04200341c07d6a210320012802002105200141046a220821012005418081828478712205418081828478460d000b2005418081828478732205417f6a200571210d200821010c010b2003450d022005417f6a200571210d0b2005682108200d21052003410020084103766b41d0006c6a220841506a28020041244d0d00200841586a280200102c200d21050c000b0b200041146a280200200028021041016aad42d0007ea76b102c0b200224000f0b2022200541cce7c3001059000b2005200941cce7c300104f000b2003200141e8a0c700104f000ba71d03037f037e1c7f23004180046b2205240020012802042106200128020021072001280208220141086a2900002108200141106a29000021092001290000210a200541186a220b200141186a290000370300200541106a220c2009370300200541086a220d20083703002005200a3703002003410174210e2005410772210f200541d3036a2110200541c8016a41186a2111200541c8016a410c6a2112200541c8016a41206a211341002114410021154100211602400240024002400240024002400240024002400240024002400240034020164101762101024002400240024002400240024002400240024002402016410171450d00200120034b0d02200120034f0d04200541013a00d001200520023602c801200520013602cc012005200220016a2d000041f001713a00d1010c010b200120034b0d02200541003a00d001200520013602cc01200520023602c8010b200541a8036a20072005200541c8016a200628020c110600024020052802a80322170d00200541c8016a41086a2214200541086a290300370300200541c8016a41106a2203200541106a290300370300200541c8016a41186a2218200541186a290300370300200520052903003703c801413010322201450d17200120052903c80137000120012005290020370021200120154100473a0000200141096a2014290300370000200141116a2003290300370000200141196a2018290300370000200141286a200541276a29000037000020004101360200200020013602040c160b20052802b003210120052802ac032119200428020c20154b0d062001417f4c0d170240024020010d00410121180c010b200110322218450d170b200541003602282005200136022420052018360220200541206a4100200110c8012005280220200528022822186a2017200110c9081a200541c8016a41086a221a200d290300370300200541c8016a41106a221b200c2903003703002011200b2903003703002005201820016a360228200520052903003703c80120042802082218200441046a221c280200470d05201841016a221d2018490d172018410174221e201d201e201d4b1b221d4104201d41044b1bad42307e2208422088a7221e0d172008a7221d4100480d17201e45410274211e201841306c201f20181b211f0240024002402004280200410020181b22180d00201d450d010c060b201f0d01201d0d050b201e21180c050b2018201f201d103522180d040c070b2001200341b8c4c800104f000b2001200341c8c4c800104f000b2001200341d8c4c800103f000b201d10322218450d030b20042018360200201c201d41306e360200200428020821180b2004280200201841306c6a2218200529032037020420182015360200201820052903c8013702102018410c6a200541206a41086a280200360200201841186a201a290300370200201841206a201b290300370200201841286a20112903003702002004200428020841016a3602080b200541c8016a2017200110a00320052d00c8014101460d0c201541016a21150c010b201e0d0e0c0f0b034020052802e401212020052802e001212120052802dc01212220052802d801211a20052802d401211820052802d001211b20052802cc012101200541206a201341a80110c9081a200528029403211d200528029003211c024002400240024020010e050e0d0001020e0b4100210102402018410174201a6b2223200e20146b221d201d20234b1b2224450d000340201420016a221d410176221c20034f0d07201a20016a221e410176222520184f0d082002201c6a2d0000221c410f71201c41f00171410476201d4101711b201b20256a2d0000221d410f71201d410476201e4101711b470d012024200141016a2201470d000b202421010b024020012023460d002000420037020020190d100c110b202321010c020b200520203602dc01200520213602d801200520223602d4012005201a3602d001200520183602cc012005201b3602c8012011200541206a41a80110c9081a02400240200e2014460d002014410176220120034f0d08200541c8016a200220016a2d00002201410f71200141047620144101711b410c6c6a220128020022224102470d012000420037020020190d100c110b02400240201c0d00200541003602a8030c010b201d417f4c0d1302400240201d0d00410121140c010b201d10322214450d130b200541b0036a220141003602002005201d3602ac03200520143602a803200541a8036a4100201d10c80120052802a803200128020022146a201c201d10c9081a20012014201d6a3602000b200020052903a803370204200041003602002000410c6a200541b0036a28020036020020190d0f0c100b20012802042121200141086a280200212041012123410121010c010b20052802a0032124200528029c0321232005280298032101200520203602d001200520213602cc01200520223602c8012012200541206a41a80110c9081a20052001360284032005201d360280032005201c3602fc024100210102402018410174201a6b2220200e20146b2222202220204b1b2221450d000340201420016a221d410176221c20034f0d08201a20016a221e410176222520184f0d092002201c6a2d0000221c410f71201c41f00171410476201d4101711b201b20256a2d0000221d410f71201d410476201e4101711b470d012021200141016a2201470d000b202121010b20012020470d080240024020222020460d00201420206a2201410176221820034f0d0b200541c8016a200220186a2d00002218410f71201841047620014101711b410c6c6a221828020022224102470d012000420037020020190d0f0c100b0240024020230d00200541003602a8030c010b2024417f4c0d120240024020240d00410121140c010b202410322214450d120b200541b0036a22014100360200200520243602ac03200520143602a803200541a8036a4100202410c80120052802a803200128020022146a2023202410c9081a2001201420246a3602000b200020052903a803370204200041003602002000410c6a200541b0036a28020036020020190d0e0c0f0b202041016a2123202041016a210120182802042121201841086a28020021200b200120166a2116201420236a211402402022450d00200541c8016a2021202010a00320052d00c8014101460d0c0c010b0b0240024020204120460d00200541c8016a41086a2218200d290300370300200541c8016a41106a221a200c2903003703002011200b290300370300200520052903003703c8012020417f4c0d100240024020200d00410121010c010b202010322201450d100b200541003602f803200520203602f403200520013602f003200541f0036a4100202010c80120052802f00320052802f80322016a2021202010c9081a201041086a200120206a360000201020052903f003370000413010322201450d0f200141043a0000200120052903c801370001200120052900d003370021200141096a2018290300370000200141116a201a290300370000200141196a2011290300370000200141286a200541d0036a41076a290000370000410121180c010b41002118200541c8016a41026a41003a0000200541003b01c80120212f0000211a200541f0036a41026a202141026a2d00003a00002021411f6a2d0000211b202141176a29000021082021280003210120212900072109200541d0036a41086a221d2021410f6a290000370300200541d0036a41106a221c2008370300200541d0036a41186a221e201b3a00002005201a3b01f003200520093703d0032011201e2d00003a0000200541c8016a41106a201c290300370300200541c8016a41086a201d290300370300200520052903d0033703c8010b200541cc036a41026a221a200541f0036a41026a2d00003a0000200541a8036a41086a221b200541c8016a41086a290300370300200541a8036a41106a221d200541c8016a41106a290300370300200541a8036a41186a221c2011280200360200200520052f01f0033b01cc03200520052903c8013703a803024020180d00200f20052903a803370000200f41086a201b290300370000200f41106a201d290300370000200f41186a201c2d00003a0000200520052f01cc033b0100200520013600032005201a2d00003a00022019202620191b21262019450d012026450d012017102c0c010b0b20004101360200200020013602042019450d0b0c0a0b201c200341f8c3c800103f000b2025201841f8c3c800103f000b2001200341f8c3c800103f000b201c200341f8c3c800103f000b2025201841f8c3c800103f000b2000420037020020190d040c050b2018200341f8c3c800103f000b410021040240024002402018410174201a6b200e20146b2216470d004100210441002101024002402016450d00410021010340201a20016a221d410176221c20184f0d04201420016a221e410176222520034f0d05201b201c6a2d0000221c410f71201c41f00171410476201d4101711b200220256a2d0000221d410f71201d410476201e4101711b470d012016200141016a2201470d000c020b0b20012016470d010b2021417f4c0d080240024020210d00410121010c010b202110322201450d080b200541003602d001200520213602cc01200520013602c801200541c8016a4100202110c80120052802c801220420052802d00122016a2022202110c9081a2005200120216a3602d00120052902cc0121080b2000200436020420004100360200200041086a200837020020190d040c050b201c201841f8c3c800103f000b2025200341f8c3c800103f000b2000420037020020190d010c020b20052d00c9012114200541a8036a41086a2203200541086a290300370300200541a8036a41106a2218200541106a290300370300200541a8036a41186a221a200541186a290300370300200520052903003703a803413010322201450d02200141033a0000200120052903a803370001200120143a0021200120052901d003370122200141096a2003290300370000200141116a2018290300370000200141196a201a290300370000200141286a200541d6036a29010037010020004101360200200020013602042019450d010b2017102c0b20054180046a24000f0b1039000b103b000ba11106077f017e077f017e017f027e230041c0006b22032400024002400240200128020c220441016a22052004490d00200520012802002206200641016a220741037641076c20064108491b22064101764d0d0102400240024002402005200641016a2206200520064b1b22050d0041c08ec100210841002109410021050c010b0240024020054108490d000240200541ffffffff01712005470d00417f2005410374220541076e417f6a677641016a41012005410d4b1b21050c020b41d5edc400411c41f4edc400103c000b4104410820054104491b21050b2005ad42307e220a422088a70d02200aa72206200541046a22096a22082006490d02200810322208450d01200820066a220841ff01200910cb081a2005417f6a2209200541037641076c20094108491b21050b200841506a210b200520046b210c200141046a280200220d41046a210e200d20076a210f200d280200417f7341808182847871211020022802002111034002400240024020100d000340200e200f4f0d02200d41c07e6a210d200e2802002105200e41046a2206210e2005418081828478712205418081828478460d000b2005418081828478732207417f6a20077121102006210e0c020b200d450d00201021072010417f6a20107121100c010b2001200436020c2001200c360208200041003602002001280200210520012009360200200141046a22062802002107200620083602002005450d062007200541016aad42307ea76b102c0c060b410021052003201129030042adfed5e4d485fda8d8007e220a42a0cbbf9599b5a19f0a7c2212200d41002007684103766b41306c6a41506a221329001885201329000020128542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852013290008200a42efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852013290010200a42bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010ce08201141086a290300220a200341086a29030020032903007c85200a89220aa721060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b200820056a200aa741197622063a00002005417c6a20097120086a41046a20063a0000200b410020056b41306c6a220541286a201341286a290200370200200541206a201341206a290200370200200541186a201341186a290200370200200541106a201341106a290200370200200541086a201341086a290200370200200520132902003702000c000b0b1039000b41d5edc400411c41f4edc400103c000b41d5edc400411c41f4edc400103c000b4100210641002105024003400240024020064101710d00200520074f0d0320052106200541016a21050c010b200541036a220620054922080d0220062007492209450d022007200541046a20081b200720091b21050b200141046a28020020066a220620062802002206410776417f73418182840871200641fffefdfb07726a360200410121060c000b0b200141046a280200210502400240200128020041016a22064104490d00200520066a20052800003600000c010b200541046a2005200610ca081a0b41002105024020012802002204417f460d0020022802002113200141046a210d4100210503400240200d2802002208200522106a2d0000418001470d00410020106b211102400340200341106a201329030042adfed5e4d485fda8d8007e220a42a0cbbf9599b5a19f0a7c22122008201141306c6a41506a220e29001885200e29000020128542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85200e290008200a42efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85200e290010200a42bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010ce082001280200210941002105201341086a290300220a200341106a41086a29030020032903107c85200a89220aa7220f21060340200541046a2205200620097122076a2106200820076a280000418081828478712202450d000b0240200820026841037620076a20097122056a2c00004100480d002008280200418081828478716841037621050b20052009200f7122066b201020066b732009714104490d01200820056a22062d000021072006200aa741197622023a00002005417c6a20097120086a41046a20023a00000240200741ff01460d00200d280200410020056b41306c6a41506a2205290200210a2005200e290200370200200541186a220629020021122006200e41186a2207290200370200200541106a220629020021142006200e41106a2208290200370200200541086a220629020021152006200e41086a2209290200370200200920153702002008201437020020072012370200200e200a370200200541286a2206290200210a2006200e41286a2207290200370200200529022021122005200e290220370220200e20123702202007200a370200200d28020021080c010b0b200d280200220620106a41ff013a0000200620012802002010417c6a716a41046a41ff013a0000200d280200410020056b41306c6a41506a2205200e290200370200200541086a200e41086a290200370200200541106a200e41106a290200370200200541186a200e41186a290200370200200541206a200e41206a290200370200200541286a200e41286a2902003702000c010b200820106a200aa741197622053a000020092010417c6a7120086a41046a20053a00000b201041016a210520102004470d000b20012802002205200541016a41037641076c20054108491b21050b2000410036020020012005200128020c6b3602080b200341c0006a24000b840201037f230041306b220324002003410136020020032002410376220436020402402004450d000240024020024178714108470d002000420137020820002002360204200020013602000c010b20002001410120021b22043602002000200241077122014108723602042000410c6a200141016a2205410771200241786a417871723602002000410020054103762202200141074622011b20042002410020011b6a723602080b200341306a24000f0b2003412c6a41023602002003411c6a41023602002003420237020c200341fcefc400360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a418cf0c4001046000b9517010b7f230041b0046b2202240041002103200241003a00a8032001280204417f6a2104024002400240024003402004417f460d01200241e8026a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a8032004417f6a210420052103200541c000470d000b200241b0036a41086a2201200241e8026a41086a290300370300200241b0036a41106a2203200241e8026a41106a290300370300200241b0036a41186a2206200241e8026a41186a290300370300200241b0036a41206a2207200241e8026a41206a290300370300200241b0036a41286a2208200241e8026a41286a290300370300200241b0036a41306a2209200241e8026a41306a290300370300200241b0036a41386a220a200241e8026a41386a290300370300200220022903e8023703b003410121040240200541ff017141c000490d0020024180016a41386a200a29030037030020024180016a41306a200929030037030020024180016a41286a200829030037030020024180016a41206a200729030037030020024180016a41186a200629030037030020024180016a41106a200329030037030020024180016a41086a2001290300370300200220022903b00337038001410021040b200241c0006a41086a20024180016a41086a290300370300200241c0006a41106a20024180016a41106a290300370300200241c0006a41186a20024180016a41186a290300370300200241c0006a41206a20024180016a41206a290300370300200241c0006a41286a20024180016a41286a290300370300200241c0006a41306a20024180016a41306a290300370300200241c0006a41386a20024180016a41386a29030037030020022002290380013703402004450d010c020b0240200341ff0171450d00200241003a00a8030b200241c0006a41086a20024180016a41086a290300370300200241c0006a41106a20024180016a41106a290300370300200241c0006a41186a20024180016a41186a290300370300200241c0006a41206a20024180016a41206a290300370300200241c0006a41286a20024180016a41286a290300370300200241c0006a41306a20024180016a41306a290300370300200241c0006a41386a20024180016a41386a29030037030020022002290380013703400c010b200241386a2204200241c0006a41386a290300370300200241306a2201200241c0006a41306a290300370300200241286a2203200241c0006a41286a290300370300200241206a2205200241c0006a41206a290300370300200241186a2206200241c0006a41186a290300370300200241106a2207200241c0006a41106a290300370300200241086a2208200241c0006a41086a22092903003703002002200229034037030020024180016a41186a200429030037030020024180016a41106a200129030037030020024180016a41086a20032903003703002002200529030037038001200241b0036a41186a2006290300370300200241b0036a41106a2007290300370300200241b0036a41086a22012008290300370300200220022903003703b003200241e8026a200241b0036a1075410121040240024020022d00e8024101460d00200241c0006a410f6a200241b0036a410f6a29000037000020092001290000370300200220022900b003370340410221050c010b200241e6026a20022d00eb023a00002009200241f5026a290000370300200241cf006a200241fc026a290000370000200241e0026a200241e8026a41206a2d00003a0000200220022f00e9023b01e402200220022900ed02370340200220024184036a2802003602dc024100210420022d00ec0221050b200241d8026a41026a2206200241e4026a41026a2d00003a0000200241c0026a41086a2201200241c0006a41086a290300370300200241c0026a410f6a2203200241c0006a410f6a290000370000200241b8026a41046a2207200241dc026a41046a2d00003a0000200220022f01e4023b01d802200220022903403703c002200220022802dc023602b8020240024020040d00200241b4026a41026a20062d00003a000020024198026a41086a200129030037030020024198026a410f6a200329000037000020024190026a41046a20072d00003a0000200220022f01d8023b01b402200220022903c00237039802200220022802b80236029002200241b0036a41186a20024180016a41186a290300370300200241b0036a41106a20024180016a41106a290300370300200241b0036a41086a20024180016a41086a29030037030020022002290380013703b003200241e8026a200241b0036a1075410121040240024020022d00e8024101460d00200241c0006a410f6a200241b0036a410f6a290000370000200241c0006a41086a200241b0036a41086a290000370300200220022900b003370340410221010c010b200241e6026a20022d00eb023a0000200241c8006a200241f5026a290000370300200241cf006a200241fc026a290000370000200241e0026a20024188036a2d00003a0000200220022f00e9023b01e402200220022900ed02370340200220024184036a2802003602dc024100210420022d00ec0221010b200241d8026a41026a2207200241e4026a41026a22082d00003a0000200241c0026a41086a2203200241c0006a41086a2209290300370300200241c0026a410f6a2206200241c0006a410f6a220a290000370000200241b8026a41046a220b200241dc026a41046a220c2d00003a0000200220022f01e4023b01d802200220022903403703c002200220022802dc023602b80202402004450d00200241e8026a410f6a2006290000370000200241e8026a41086a2003290300370300200220022903c0023703e80241012104200121050c020b2002418c026a41026a20072d00003a000020092003290300370300200a2006290000370000200c200b2d00003a00002008200241b4026a41026a2d00003a0000200220022f01d8023b018c02200220022903c002370340200220022802b8023602dc02200220022f01b4023b01e402200241e8026a410f6a220420024198026a410f6a290000370000200241e8026a41086a220320024198026a41086a29030037030020022002290398023703e802200241c0026a41046a20024190026a41046a2d00003a000020022002280290023602c002200241b0036a410f6a2004290000370000200241b0036a41086a2003290300370300200220022903e8023703b003410021040c010b200241e8026a410f6a2003290000370000200241e8026a41086a2001290300370300200220022903c0023703e802410121040b20024188026a41026a2203200241e4026a41026a2d00003a0000200241f0016a41086a2206200241b0036a41086a290300370300200241f0016a410f6a2207200241b0036a410f6a290000370000200241e8016a41046a2208200241c0026a41046a2d00003a0000200241e4016a41026a22092002418c026a41026a2d00003a0000200220022f01e4023b018802200220022903b0033703f001200220022802c0023602e801200220022f018c023b01e401200241c8016a410f6a220a200241c0006a410f6a290000370000200241c8016a41086a220b200241c0006a41086a290300370300200241c0016a41046a220c200241dc026a41046a2d00003a0000200220022903403703c801200220022802dc023602c001024020040d00200020022f0188023b0001200041046a20053a0000200041056a20022903f0013700002000411c6a20022802e801360000200041216a20022f01e4013b0000200041036a20032d00003a00002000410d6a2006290300370000200041146a2007290000370000200041206a20082d00003a0000200041236a20092d00003a0000200041246a20013a0000200041003a0000200041256a20022903c8013700002000412d6a200b290300370000200041346a200a2900003700002000413c6a20022802c001360000200041c0006a200c2d00003a00000c020b200041013a00000c010b200041013a00000b200241b0046a24000bed0701057f230041106b2204240002400240024002400240024020012802000e03010203000b200341086a28020021010c030b2003200341086a22052802004101102f200328020020052802006a41003a00002005200528020041016a360200412010322206450d032004422037020420042006360200200441004120102f20042802002207200428020822086a2206200141086a290000370000200641086a200141106a290000370000200641106a200141186a290000370000200641186a200141206a2900003700002004200841206a2206360208200320052802002006102f200328020020052802006a2007200610c9081a2005200528020020066a220636020002402004280204450d002007102c200341086a28020021060b20012802042101200320064104102f2003280200200341086a22052802006a20013600002005200528020041046a22013602000c020b2003200341086a22052802004101102f200328020020052802006a41013a00002005200528020041016a360200412010322206450d022004422037020420042006360200200441004120102f20042802002207200428020822086a2206200141086a290000370000200641086a200141106a290000370000200641106a200141186a290000370000200641186a200141206a2900003700002004200841206a2206360208200320052802002006102f200328020020052802006a2007200610c9081a2005200528020020066a220636020002402004280204450d002007102c200341086a28020021060b20012802042101200320064104102f2003280200200341086a22052802006a20013600002005200528020041046a22013602000c010b2003200341086a22052802004101102f200328020020052802006a41023a00002005200528020041016a360200412010322206450d012004422037020420042006360200200441004120102f20042802002207200428020822086a2206200141086a290000370000200641086a200141106a290000370000200641106a200141186a290000370000200641186a200141206a2900003700002004200841206a2206360208200320052802002006102f200328020020052802006a2007200610c9081a2005200528020020066a220636020002402004280204450d002007102c200341086a28020021060b20012802042101200320064104102f2003280200200341086a22052802006a20013600002005200528020041046a22013602000b200320014108102f2003280200200341086a22012802006a20003700002001200128020041086a2205360200200320054108102f200328020020012802006a20023700002001200128020041086a360200200441106a24000f0b1039000b130020004107360204200041d8f2c4003602000b130020004105360204200041d8f7c4003602000b340020004196dec70036020420004100360200200041146a4104360200200041106a41a484c500360200200041086a42093702000bb00101067f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120103222060d001039000b2000422037020420002006360200200041004120102f2000280200200041086a220628020022076a220020022903003700002006200741206a360200200041086a2005290300370000200041106a2004290300370000200041186a2003290300370000200241206a24000b2501017f230041106b22022400200241003602082000200241086a10e504200241106a24000bac0201097f024002400240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a36020020040e020203010b200041053a00000f0b200041053a00000f0b200041043a00000f0b02402005450d0020032d0001210620012002417e6a22073602042001200341026a360200410121044100210841c4b5c8002109024002400240024020060e0402030001040b410221040c020b2007450d0220032d0002210520012002417d6a2204360204410321082001200341036a3602002004450d0220032d0003210a20012002417c6a3602042001200341046a360200410021090b200821040b200020053a0001200020043a0000200041086a4100360000200041046a2009360000200041026a200a3a00000f0b200041053a00000bff0201027f230041206b2204240002400240024002400240024020022001412c6a2205460d0020022005412010cc08450d00200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410920722010d010c040b200141286a2802002202417f4c0d01200128022021050240024020020d00410121010c010b200210322201450d030b2000200236020420002001360200200041086a2201410036020020004100200210c8012000280200200128020022006a2005200210c9081a2001200020026a3602000c040b200128020c4101480d0220012802082202417f4c0d00200128020021050240024020020d00410121010c010b200210322201450d020b2000200236020420002001360200200041086a2201410036020020004100200210c8012000280200200128020022006a2005200210c9081a2001200020026a3602000c030b103b000b1039000b200041003602000b200441206a24000b840401057f23004180016b22042400200328020021050240024002400240024020032802082206200041286a280200470d00200520002802202207460d0120052007200610cc08450d010b200441c0006a41186a2206200141186a290000370300200441c0006a41106a2207200141106a290000370300200441c0006a41086a2208200141086a29000037030020042001290000370340200441086a2000200441c0006a10a20720042802084101470d01200441c0006a41286a200441386a290300370300200441c0006a41206a200441086a41286a2903003703002006200441086a41206a2903003703002007200441086a41186a2903003703002008200441086a41106a29030037030020042004290310370340200441f0006a41086a200341086a2802003602002004410136027c20042003290200370370200441c0006a200441f0006a10a3070c030b2003280204450d020c010b0240200428020c2206417c6a2200280200220141004a0d00200641706a2105200441c0006a41086a2207200341086a280200360200200420032902003703400240200641746a2802002203450d0020052802002206450d002003450d002006102c200028020021010b20052004290340370200200541086a20072802003602002000200141016a3602000c020b2000200141016a3602002003280204450d010b2005102c0b20044180016a24000be50403017f027e0a7f230041106b220324002003200129030042adfed5e4d485fda8d8007e220442a0cbbf9599b5a19f0a7c2205200229001885200229000020058542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852002290008200442efcdddd088a580a21e7c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e852002290010200442bed0fb8bf894dfa4327c8542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e85420042adfed5e4d485fda8d800420010ce0820012802102206200141086a2903002204200341086a29030020032903007c852004892204a72207712108200741197641818284086c2109200141146a280200210a4100210b02400340200a20086a280000220c2009732207417f73200741fffdfb776a71418081828478712107200b41046a220b20086a200671210d0340024020070d00200d2108200c200c4101747141808182847871450d0220004101360200200041106a2001360200200041086a2004370300200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a2900003700000c030b0240200a410020076841037620086a2006716b41306c6a220e41506a220f2002460d002007417f6a2007712107200f2002412010cc080d010b0b0b2000200e360204200041003602002000410c6a41013a0000200041086a20013602002000410d6a2002290000370000200041156a200241086a2900003700002000411d6a200241106a290000370000200041256a200241186a2900003700000b200341106a24000be60403027f017e067f230041d0006b2202240020022000280208220336020c20002903002104200241386a200141086a290200370300200241286a200041246a290200370300200241106a41106a2000411c6a290200370300200241106a41086a200041146a290200370300200220012902003703302002200029020c370310200341106a2105200328021022062004a72207712101200341146a28020021084104210003402001220920006a2006712101200041046a2100200820096a28000041808182847871220a450d000b02402008200a6841037620096a20067122006a2c000022014100480d0020082008280200418081828478716841037622006a2d000021010b200341186a280200210902402001410171220a450d0020090d00200241c0006a20052002410c6a109607200328021022062007712101200341146a28020021084104210003402001220920006a2006712101200041046a2100200820096a280000418081828478712205450d000b0240200820056841037620096a20067122006a2c00004100480d002008280200418081828478716841037621000b200328021821090b20032009200a6b360218200820006a200741197622013a000020062000417c6a7120086a41046a20013a00002008410020006b41306c6a41506a220041286a200241106a41286a290300370200200041206a200241106a41206a290300370200200041186a200241106a41186a290300370200200041106a200241106a41106a290300370200200041086a200241106a41086a290300370200200020022903103702002003411c6a2200200028020041016a360200200241d0006a24000bb70201047f23004180016b22032400024020012000412c6a2204460d0020012004412010cc08450d00200341c0006a41186a2204200141186a290000370300200341c0006a41106a2205200141106a290000370300200341c0006a41086a2206200141086a29000037030020032001290000370340200341086a2000200341c0006a10a207024020032802084101470d00200341c0006a41286a200341386a290300370300200341c0006a41206a200341086a41286a2903003703002004200341086a41206a2903003703002005200341086a41186a2903003703002006200341086a41106a29030037030020032003290310370340200342808080807037037820034201370370200341c0006a200341f0006a10a3070c010b200328020c417c6a22012001280200417f6a3602000b20034180016a24000b8d0101037f230041206b2203240041012104024020012000412c6a2205460d0020012005412010cc08450d00200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310920722010d00410021040c010b200128020c41004a21040b200341206a240020040b1300200041a889c500360204200020013602000b1300200041a889c500360204200020013602000bff0201027f230041206b2204240002400240024002400240024020022001412c6a2205460d0020022005412010cc08450d00200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a290000370300200420022900003703002001200410920722010d010c040b200141286a2802002202417f4c0d01200128022021050240024020020d00410121010c010b200210322201450d030b2000200236020420002001360200200041086a2201410036020020004100200210c8012000280200200128020022006a2005200210c9081a2001200020026a3602000c040b200128020c4101480d0220012802082202417f4c0d00200128020021050240024020020d00410121010c010b200210322201450d020b2000200236020420002001360200200041086a2201410036020020004100200210c8012000280200200128020022006a2005200210c9081a2001200020026a3602000c030b103b000b1039000b200041003602000b200441206a24000b8d0101037f230041206b2203240041012104024020012000412c6a2205460d0020012005412010cc08450d00200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310920722010d00410021040c010b200128020c41004a21040b200341206a240020040bea0201027f2000200041086a22042802004101102f200028020020042802006a21050240200141ff017122014104460d00200541013a00002004200428020041016a2205360200024002400240024020010e0400010203000b200020054101102f2000280200200041086a22002802006a41003a00002000200028020041016a3602000f0b200020054101102f2000280200200041086a22002802006a41013a00002000200028020041016a3602000f0b200020054101102f2000280200200041086a22002802006a41023a00002000200028020041016a3602000f0b200020054101102f2000280200200041086a22042802006a41033a00002004200428020041016a2201360200200020014101102f200028020020042802006a20023a00002004200428020041016a2201360200200020014101102f200028020020042802006a20033a00002004200428020041016a3602000f0b200541003a00002004200428020041016a3602000bb00101037f200128020021022000200041086a22032802004104102f200028020020032802006a20023600002003200328020041046a3602002001280204210220002001410c6a2802002204108f0102402004450d0020022004410c6c6a210403402002280200200241086a280200200010bb012002410c6a22022004470d000b0b20012802102102200020032802004104102f200028020020032802006a20023600002003200328020041046a3602000b6601017f2000200041086a22042802004108102f200028020020042802006a20013700002004200428020041086a360200200020021031200020042802004101102f200028020020042802006a200341ff01714101463a00002004200428020041016a3602000be20201037f2001280200210202400240024002402001280208220141c000490d00200141808001490d012001418080808004490d022000200041086a22032802004101102f200028020020032802006a41033a00002003200328020041016a2204360200200020044104102f200028020020032802006a20013600002003200328020041046a22043602000c030b2000200041086a22032802004101102f200028020020032802006a20014102743a00002003200328020041016a22043602000c020b2000200041086a22032802004102102f200028020020032802006a20014102744101723b00002003200328020041026a22043602000c010b2000200041086a22032802004104102f200028020020032802006a20014102744102723600002003200328020041046a22043602000b2000200420014101742201102f2000280200200041086a22002802006a2002200110c9081a2000200028020020016a3602000baf0201027f024002400240024020012d00000e0400010203000b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41013a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41023a00002001200128020041016a3602000f0b2000200041086a22022802004101102f200028020020022802006a41033a00002002200228020041016a2203360200200020034120102f200028020020022802006a22002001290001370000200041186a200141196a290000370000200041106a200141116a290000370000200041086a200141096a2900003700002002200228020041206a3602000ba60801047f230041106b22022400024002400240024002400240024002400240024020012d00000e09000102030405060708090b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000c080b2000200041086a22032802004101102f200028020020032802006a41013a00002003200328020041016a2204360200024002400240200141046a280200220541c000490d00200541808001490d012005418080808004490d02200020044101102f2000280200200041086a22032802006a41033a00002003200328020041016a220536020020012802042101200020054104102f200028020020032802006a20013600002003200328020041046a3602000c0a0b200020044101102f200028020020032802006a20054102743a00002003200328020041016a3602000c090b200020044102102f2000280200200041086a22002802006a20054102744101723b00002000200028020041026a3602000c080b200020044104102f2000280200200041086a22002802006a20054102744102723600002000200028020041046a3602000c070b2000200041086a22032802004101102f200028020020032802006a41023a00002003200328020041016a3602002000200141246a10b107200020032802004120102f200028020020032802006a22002001290001370000200041186a200141196a290000370000200041106a200141116a290000370000200041086a200141096a2900003700002003200328020041206a3602000c060b2000200041086a22032802004101102f200028020020032802006a41033a00002003200328020041016a3602002000200141046a10b1072000200141186a10a6010c050b2000200041086a22032802004101102f200028020020032802006a41043a00002003200328020041016a3602002000200141186a10b107200020032802004114102f200028020020032802006a22002001290001370000200041106a200141116a280000360000200041086a200141096a2900003700002003200328020041146a3602000c040b2000200041086a22032802004101102f200028020020032802006a41053a00002003200328020041016a220536020020012d00012101200020054101102f200028020020032802006a20013a00002003200328020041016a3602000c030b2000200041086a22032802004101102f200028020020032802006a41063a00002003200328020041016a3602002002200141086a36020c2002410c6a200010e9030c020b2000200041086a22032802004101102f200028020020032802006a41073a00002003200328020041016a360200200141046a2802002001410c6a280200200010bb010c010b2000200041086a22012802004101102f200028020020012802006a41083a00002001200128020041016a3602000b200241106a24000bce0301027f02400240024020012f0104220241c000490d00200241808001490d012000200041086a22032802004104102f200028020020032802006a20024102744102723600002003200328020041046a22023602000c020b2000200041086a22032802004101102f200028020020032802006a20024102743a00002003200328020041016a22023602000c010b2000200041086a22032802004102102f200028020020032802006a20024102744101723b00002003200328020041026a22023602000b0240024002402001280200220141c000490d00200141808001490d012001418080808004490d02200020024101102f2000280200200041086a22022802006a41033a00002002200228020041016a2203360200200020034104102f200028020020022802006a20013600002002200228020041046a3602000f0b200020024101102f2000280200200041086a22002802006a20014102743a00002000200028020041016a3602000f0b200020024102102f2000280200200041086a22002802006a20014102744101723b00002000200028020041026a3602000f0b200020024104102f2000280200200041086a22002802006a20014102744102723600002000200028020041046a3602000be50101017f024002400240024020012802000e0400010203000b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000f0b2000200041086a22022802004101102f200028020020022802006a41013a00002002200228020041016a36020020012802042001410c6a280200200010bb010f0b2000200041086a22012802004101102f200028020020012802006a41023a00002001200128020041016a3602000f0b2000200041086a22012802004101102f200028020020012802006a41033a00002001200128020041016a3602000ba50301047f230041106b220224000240412010322203450d002002422037020420022003360200200241004120102f20022802002204200228020822056a22032001290004370000200341086a2001410c6a290000370000200341106a200141146a290000370000200341186a2001411c6a2900003700002002200541206a22053602082000200041086a22032802002005102f200028020020032802006a2004200510c9081a2003200328020020056a220536020002402002280204450d002004102c200328020021050b20012802002104200020054104102f200028020020032802006a20043600002003200328020041046a22053602002000200541c000102f200028020020032802006a22002001290024370000200041386a200141dc006a290000370000200041306a200141d4006a290000370000200041286a200141cc006a290000370000200041206a200141c4006a290000370000200041186a2001413c6a290000370000200041106a200141346a290000370000200041086a2001412c6a2900003700002003200328020041c0006a360200200241106a24000f0b1039000b930201067f230041106b2202240020012802002103200020012802082201108f01024002402001450d00200141057421040340412010322201450d022002422037020420022001360200200241004120102f20022802002205200228020822066a22012003290000370000200141086a200341086a290000370000200141106a200341106a290000370000200141186a200341186a2900003700002002200641206a22013602082000200041086a22062802002001102f200028020020062802006a2005200110c9081a2006200628020020016a36020020022802042201200720011b210702402001450d002007450d002005102c0b200341206a2103200441606a22040d000b0b200241106a24000f0b1039000bde0302017e037f200129030021022000200041086a22032802004108102f200028020020032802006a20023700002003200328020041086a220436020020012903082102200020044101102f200141106a2104200028020020032802006a2105024020024201510d00200541003a00002003200328020041016a220536020020012903102102200020054108102f200028020020032802006a20023700002003200328020041086a2205360200200020054120102f200028020020032802006a2205200141e0016a290000370000200541186a200141f8016a290000370000200541106a200141f0016a290000370000200541086a200141e8016a2900003700002003200328020041206a3602002000200141186a10b2072000200441ec006a10b2070f0b200541013a00002003200328020041016a220536020020012903102102200020054108102f200028020020032802006a20023700002003200328020041086a2205360200200020054120102f200028020020032802006a2205200141e0016a290000370000200541186a200141f8016a290000370000200541106a200141f0016a290000370000200541086a200141e8016a2900003700002003200328020041206a3602002000200141186a10b2072000200441ec006a10b2070be00601047f230041106b220224000240412010322203450d002002422037020420022003360200200241004120102f20022802002204200228020822056a22032001290010370000200341086a200141186a290000370000200341106a200141206a290000370000200341186a200141286a2900003700002002200541206a22033602082000200041086a22052802002003102f200028020020052802006a2004200310c9081a2005200528020020036a36020002402002280204450d002004102c0b02400240024002402001280200220341c000490d00200341808001490d012003418080808004490d022000200041086a22052802004101102f200028020020052802006a41033a00002005200528020041016a2204360200200020044104102f200028020020052802006a20033600002005200528020041046a3602000c030b2000200041086a22052802004101102f200028020020052802006a20034102743a00002005200528020041016a3602000c020b2000200041086a22052802004102102f200028020020052802006a20034102744101723b00002005200528020041026a3602000c010b2000200041086a22052802004104102f200028020020052802006a20034102744102723600002005200528020041046a3602000b412010322203450d002002422037020420022003360200200241004120102f20022802002204200228020822056a22032001290030370000200341086a200141386a290000370000200341106a200141c0006a290000370000200341186a200141c8006a2900003700002002200541206a22033602082000200041086a22052802002003102f200028020020052802006a2004200310c9081a2005200528020020036a36020002402002280204450d002004102c0b412010322203450d002002422037020420022003360200200241004120102f20022802002204200228020822056a22032001290050370000200341086a200141d8006a290000370000200341106a200141e0006a290000370000200341186a200141e8006a2900003700002002200541206a22033602082000200041086a22052802002003102f200028020020052802006a2004200310c9081a2005200528020020036a36020002402002280204450d002004102c0b2000200141046a10aa05200241106a24000f0b1039000b970501037f230041106b220224000240024002400240024002400240024020012d00000e0700010203040506070b2000200041086a22012802004101102f200028020020012802006a41003a00002001200128020041016a3602000c060b2000200041086a22032802004101102f200028020020032802006a41013a00002003200328020041016a3602002002200141086a36020c2002410c6a200010e9030c050b2000200041086a22032802004101102f200028020020032802006a41023a00002003200328020041016a2204360200200020044104102f200028020020032802006a20012800013600002003200328020041046a3602000c040b2000200041086a22032802004101102f200028020020032802006a41033a00002003200328020041016a2204360200200020044108102f200028020020032802006a20012900013700002003200328020041086a3602000c030b2000200041086a22032802004101102f200028020020032802006a41043a00002003200328020041016a2204360200200020044110102f200028020020032802006a22002001290001370000200041086a200141096a2900003700002003200328020041106a3602000c020b2000200041086a22032802004101102f200028020020032802006a41053a00002003200328020041016a2204360200200020044120102f200028020020032802006a22002001290001370000200041186a200141196a290000370000200041106a200141116a290000370000200041086a200141096a2900003700002003200328020041206a3602000c010b2000200041086a22032802004101102f200028020020032802006a41063a00002003200328020041016a360200200141046a2802002001410c6a280200200010bb010b200241106a24000bdb0101047f02400240200128020822024103744104722203417f4c0d0020012802002101200310322204450d012000200336020420002004360200200041086a2203410036020020002002108f0102402002450d00200120024103746a210520032802002102034020012802002104200020024104102f2000280200200328020022026a20043600002003200241046a2202360200200141046a2802002104200020024104102f2000280200200328020022026a20043600002003200241046a2202360200200141086a22012005470d000b0b0f0b103b000b1039000be90301047f02400240200128020822024103744104722203417f4c0d0020012802002101200310322204450d012000200336020420002004360200200041086a22044100360200024002400240200241c000490d00024002400240200241808001490d002002418080808004490d01200041004101102f2000280200200041086a220428020022036a41033a00002004200341016a2203360200200020034104102f2000280200200428020022036a20023600002004200341046a22033602000c020b200041004102102f2000280200200041086a220428020022036a20024102744101723b00002004200341026a22033602000c010b200041004104102f2000280200200041086a220428020022036a20024102744102723600002004200341046a22033602000b200120024103746a21050c010b200041004101102f2000280200200428020022036a20024102743a00002004200341016a22033602002002450d01200120024103746a21050b034020012802002104200020034104102f2000280200200041086a220228020022036a20043600002002200341046a2203360200200141046a2802002104200020034104102f2000280200200228020022036a20043600002002200341046a2203360200200141086a22012005470d000b0b0f0b103b000b1039000bfd0101037f024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d00200128020021010240024020030d00410121040c010b200310322204450d020b20002004360200200041086a22044100360200200041046a200341057636020020004100200210d6012004280200210302402002450d0020024105742102200028020020034105746a2100034020002001290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a290000370000200341016a2103200041206a2100200141206a2101200241606a22020d000b0b200420033602000f0b103b000b1039000b800603097f017e017f23004180026b220224002002200110b003024002402002280200450d00200041003602000c010b0240024002402002280204220320012802002802044105762204200420034b1b22044105742205417f4c0d004101210602402004450d00200510322206450d020b2001200128020441016a2205360204200241003602102002200436020c2002200636020802400240200520012802084b0d0002402003450d0041002107410021080340200241003a00b801200841016a2108410021040340200128020022052802042209450d0420024198016a20046a2005280200220a2d00003a000020052009417f6a3602042005200a41016a3602002002200441016a22043a00b80120044120470d000b200241f8006a41186a20024198016a41186a290300220b370300200241d8006a41086a220420024198016a41086a290300370300200241d8006a41106a220520024198016a41106a290300370300200241d8006a41186a2209200b3703002002200229039801370358200241386a41186a220a2009290300370300200241386a41106a22092005290300370300200241386a41086a2205200429030037030020022002290358370338200241186a41186a220c200a290300370300200241186a41106a220a2009290300370300200241186a41086a220920052903003703002002200229033837031802402007200228020c470d00200241086a2007410110d60120022802082106200228021021070b200620074105746a22042002290318370000200441186a200c290300370000200441106a200a290300370000200441086a20092903003700002002200741016a220736021020082003470d000b200128020421050b2000200229030837020020012005417f6a360204200041086a200241086a41086a2802003602000c050b200041003602000c030b0240200441ff0171450d00200241003a00b8010b20004100360200200228020c21040c020b103b000b1039000b2006410020041b2205450d00200441ffffff3f71450d002005102c0b20024180026a24000bbc0c04057f027e017f027e230041d0016b2202240002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050e0701020304050608070b200041073a00000c0d0b200041003a00000c0c0b200241086a200110f70302402002290308a70d00200241086a41106a290300210720022903102108200041013a00002000200228009001360001200041086a2008370300200041186a2002290320370300200041106a2007370300200041046a20024193016a280000360000200041206a200241206a41086a2903003703000c0c0b200041073a00000c0b0b20024190016a2001108802024020022d0090014101460d002000200228009101360001200041023a0000200041056a20022900203700002000410d6a200241286a290000370000200041156a200241306a2900003700002000411d6a200241386a290000370000200041246a2002413f6a2800003600000c0b0b200041073a00000c0a0b200241003a0098012006450d0820042d0001210520012003417e6a22093602042001200441026a360200200241013a009801200220053a00900120090d040c070b20024190016a200110cb04024020022d0090014101460d00200241f0006a41086a20024190016a41096a290000220737030020022002290091012208370370200041043a000020002008370001200041096a2007370000200041116a2002290020370000200041196a200241206a41086a290000370000200041206a2002412f6a2900003700000c090b200041073a00000c080b41002105200241003a00402003417e6a21030240034020062005460d01200241206a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00402003417f6a21032009210520094120460d050c000b0b200541ff0171450d04200241003a00400c040b200041073a00000c060b200241f0006a2001108a0202402002280270450d002002419b016a200241f0006a41086a2802003600002002200229037037009301200041063a00002000200229009001370001200041086a20024197016a290000370000200041106a2002290320370300200041186a200241206a41086a290300370300200041206a200241206a41106a2903003703000c060b200041073a00000c050b20042d0002210520012003417d6a22093602042001200441036a360200200241023a009801200220053a0091012009450d0220042d0003210520012003417c6a22093602042001200441046a360200200241033a009801200220053a0092012009450d0220042d0004210520012003417b6a22093602042001200441056a360200200241043a009801200220053a0093012009450d0220042d0005210520012003417a6a22093602042001200441066a360200200241053a009801200220053a0094012009450d0220042d000621052001200341796a22093602042001200441076a360200200241063a009801200220053a0095012009450d0220042d000721052001200341786a22093602042001200441086a360200200241073a009801200220053a0096012009450d0220042d000821052001200341776a3602042001200441096a360200200220053a0097012000200229039001370001200041033a0000200041096a2002290020370000200041116a200241206a41086a290000370000200041196a200241306a290000370000200041206a200241376a2900003700000c040b20024190016a41086a2201200241206a41086a29030037030020024190016a41106a2205200241206a41106a29030037030020024190016a41186a2203200241206a41186a2903003703002002200229032037039001200941ff0171411f4d0d00200241d0006a41086a20012903002207370300200241d0006a41106a20052903002208370300200241d0006a41186a2003290300220a3703002002200229039001220b370350200041053a00002000200b370001200041096a2007370000200041116a2008370000200041196a200a370000200041216a2002280049360000200041246a200241cc006a2800003600000c030b200041073a00000c020b200241003a0098010b200041073a00000b200241d0016a24000b8a1602057f027e230041f0016b220224000240024002400240024002400240024002400240024002400240024002400240024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060e0701020304050608070b200041073a00000c110b200041003a00000c100b2002200110b10302402002290300a70d00200241106a290300210720022903082108200041013a000020002002280070360001200041086a2008370300200041186a2002290318370300200041106a2007370300200041046a200241f3006a280000360000200041206a200241186a41086a2903003703000c100b200041073a00000c0f0b200241003a0074200128020022032802042204450d0d200328020022052d0000210620032004417f6a360204200241013a00742003200541016a360200200220063a00702001280200220328020422040d050c0c0b200241003a0078200128020022032802042204450d0a200328020022052d0000210620032004417f6a3602042003200541016a360200200241013a0078200220063a00702001280200220328020422040d050c090b200241003a008001200128020022032802042204450d07200328020022052d0000210620032004417f6a3602042003200541016a360200200241013a008001200220063a00702001280200220328020422040d050c060b41002103200241003a003802400340200128020022042802042205450d01200241186a20036a200428020022062d00003a000020042005417f6a3602042004200641016a3602002002200341016a22033a003820034120470d000b200241f0006a41186a200241186a41186a2903002207370300200241d0006a41086a2203200241186a41086a290300370300200241d0006a41106a2204200241186a41106a290300370300200241d0006a41186a2201200737030020022002290318370350200041053a000020002002290350370001200041096a2003290300370000200041116a2004290300370000200041196a2001290300370000200041216a2002280040360000200041246a200241c3006a2800003600000c0c0b0240200341ff0171450d00200241003a00380b200041073a00000c0b0b200041073a00000c0a0b200241d0006a200110c60402402002280250450d00200241fb006a200241d0006a41086a28020036000020022002290350370073200041063a000020002002290070370001200041086a200241f7006a290000370000200041106a2002290318370300200041186a200241186a41086a290300370300200041206a200241186a41106a2903003703000c0a0b200041073a00000c090b200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a0074200220063a0071200128020022032802042204450d06200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a0074200220063a0072200128020022032802042204450d06200328020022012d0000210520032004417f6a3602042003200141016a360200200220053a007320002002280270360001200041023a0000200041056a20022900183700002000410d6a200241206a290000370000200041156a200241286a2900003700002000411d6a200241306a290000370000200041246a200241376a2800003600000c080b200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a0078200220063a0071200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a0078200220063a0072200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a360200200241043a0078200220063a0073200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a360200200241053a0078200220063a0074200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a360200200241063a0078200220063a0075200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a360200200241073a0078200220063a0076200128020022032802042204450d03200328020022012d0000210520032004417f6a3602042003200141016a360200200220053a007720002002290370370001200041033a0000200041096a2002290018370000200041116a200241206a290000370000200041196a200241286a290000370000200041206a2002412f6a2900003700000c070b200328020022052d0000210620032004417f6a3602042003200541016a360200200241023a008001200220063a0071200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241033a008001200220063a0072200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241043a008001200220063a0073200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241053a008001200220063a0074200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241063a008001200220063a0075200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241073a008001200220063a0076200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241083a008001200220063a0077200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200200241093a008001200220063a0078200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602002002410a3a008001200220063a0079200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602002002410b3a008001200220063a007a200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602002002410c3a008001200220063a007b200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602002002410d3a008001200220063a007c200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602002002410e3a008001200220063a007d200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602002002410f3a008001200220063a007e200128020022032802042204450d00200328020022012d0000210520032004417f6a3602042003200141016a360200200220053a007f200241c0006a41086a2203200241f0006a41086a29030037030020022002290370370340200041043a000020002002290340370001200041096a2003290300370000200041116a2002290018370000200041196a200241186a41086a290000370000200041206a200241186a410f6a2900003700000c060b200241003a0080010b200041073a00000c040b200241003a00780b200041073a00000c020b200241003a00740b200041073a00000b200241f0016a24000b8a0302057f017e230041106b22022400200241086a2001108702024002402002280208450d00200041003602000c010b024020012802042203200228020c4101742204490d0002400240024002402004417f4c0d000240024020040d00410121050c010b200410372205450d02200128020421030b0240024020032004490d0020052001280200200410c90821032001280204220620044f0d01200420064194afc0001058000b2005410020041b2201450d052004450d052001102c0c050b2001200620046b3602042001200128020020046a3602002003450d0402402004ad22074220862007842207422088a722010d002007a721010c030b024020034101710d0020014101710d002007a722014101710d0020014101762204450d032007422188a721060c040b02402007a7450d002003102c0b200041003602000c050b103b000b1039000b4100210602402001450d002003102c0b41002104410221050b2000200436020420002005360200200041086a20063602000c010b200041003602000b200241106a24000b960101047f2000200041086a2202280200200128020420012802006b10c801200228020021030240200128020022042001280204460d00200028020021052001200441016a36020020042d0000210002400340200520036a20003a0000200128020022002001280204460d01200341016a21032001200041016a36020020002d000021000c000b0b200341016a21030b200220033602000bf20603037f027e027f230041e0086b2202240002400240024020012802004101460d002002410c3602080c010b200241086a200141046a220310f70602400240200228020822044102460d00200241086a41f8016a2903002105200241086a41f0016a2903002106200241b4046a200241086a41047241ec0110c9081a024002402004450d00200241b8066a2005370300200241b0066a200637030041082103200241ac066a200241b4046a41086a280200360200200220022902b4043702a4060c010b200241a8066a200241b8046a41e80110c9081a200241a0066a41f8016a2005370300200241a0066a41f0016a2006370300410a21030b200220033602a006200241086a200241a0066a41980210c9081a0c010b2002410c3602a00602402001280200450d00200310ee060b20014100360200200320022902a002370200200341086a200241a0026a41086a290200370200200341106a200241a0026a41106a290200370200200341186a200241a0026a41186a2802003602002002410c360208200241a0066a10c0070b2002280208410c460d002000200241086a41980210c9081a0c010b0240024020012802204101460d002000410c3602000c010b200241a0066a200141246a10f806024020022802a00622014102470d002000410c3602000c010b200241a0026a200241a0066a41047241940210c9081a200241a0066a200241a0026a41940210c9081a200241b4046a200241a0026a41ec0110c9081a200241b8086a41206a2203200241ac086a290200370300200241b8086a41186a2204200241a4086a290200370300200241b8086a41106a22072002419c086a290200370300200241b8086a41086a220820024194086a2902003703002002200229028c083703b80802402001450d00200020022902b404370204200041106a20022903b8083703002000410c6a200241b4046a41086a280200360200200041186a2008290300370300200041206a2007290300370300200041286a2004290300370300200041306a2003290300370300200041093602000c010b200041086a200241b4046a41046a41e80110c9081a20004190026a200329030037030020004188026a200429030037030020004180026a2007290300370300200041f8016a2008290300370300200041f0016a20022903b8083703002000410b3602000b200241086a10c0070b200241e0086a24000bc30201027f02400240024002400240024002400240024020002802000e0d08080808000102030405060708070b200041086a2802002201450d0720002802042200450d072001450d072000102c0f0b200041086a2802002201450d0620002802042200450d062001450d062000102c0f0b200041086a10a2010f0b200041086a10a2010f0b200041086a2802002201450d0320002802042200450d032001450d032000102c0f0b0240200041086a2802002201450d0020002802042202450d002001450d002002102c0b200041106a2d00004106490d02200041186a2802002201450d02200041146a2802002200450d022001450d022000102c0f0b200041086a10a2010c010b200041086a10a201200041f0016a2d00004106490d00200041f8016a2802002201450d00200041f4016a2802002200450d002001450d002000102c0f0b0b8f05010b7f230041d0016b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f01e6024f0d00200421030c010b03400240024020042802e00222030d00410021030c010b200541016a210520042f01e40221060b2004102c20032104200620032f01e6024f0d000b0b200241d0006a41186a2207200320064105746a22044180036a290000370300200241d0006a41106a2208200441f8026a290000370300200241d0006a41086a2209200441f0026a2900003703002002200441e8026a290000370350200241f0006a41186a220a200441186a290300370300200241f0006a41106a220b200441106a290300370300200241f0006a41086a220c200441086a29030037030020022004290300370370200641016a210402402005450d00200320044102746a41c8056a280200210302402005417f6a2204450d00034020032802c80521032004417f6a22040d000b0b410021040b200241306a22062002290370370200200241c8006a2205200a290300370200200241c0006a220a200b290300370200200241386a220b200c290300370200200241286a220c2007290300370200200241206a22072008290300370200200241186a2208200929030037020020022002290350370210200041386a2005290200370200200041306a200a290200370200200041286a200b290200370200200041206a2006290200370200200041186a200c290200370200200041106a2007290200370200200041086a2008290200370200200020022902103702002001200436020820012003360204200141003602000c010b200041003602300b200241d0016a24000f0b41ecd0c800412b4198d1c800103c000b13002000410f360204200041cc8cc5003602000b864105047f017e0b7f017e127f230041f0026b220224002002200036022420024190016a4187dec700410410c50120024198026a41f19ac500411210c50120022000360228200241e8006a200241286a410410c701200241cc016a200241286a41046a3602002002200241f0006a3602c4012002200241286a3602c8012002200241e8006a3602c001200241c8026a200241c0016a107e0240024020022802d002220041206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b200241003602702002200336026c20022004360268200241e8006a4100411010c8012002280268200228027022036a2204200229009001370000200441086a20024190016a41086a2900003700002002200341106a2203360270200241e8006a2003411010c8012002280268200228027022036a2204200229009802370000200441086a20024198026a41086a2900003700002002200341106a220436027020022802c8022103200241e8006a2004200010c80120022802682204200228027022056a2003200010c9081a2002200520006a2200360270024020022802cc02450d002003102c0b200241c0016a2004200010f70420022902c4012206422088a7410020022802c00122071b220041ffffffff00712000470d0020004104742203417f4c0d004104210402402003450d00200310322204450d020b410021082002410036029801200220043602900120022003410476360294012007410420071b220920004104746a210a02400240024020000d002009210b4100210c0c010b20024198026a41186a210d20024198026a41206a210e200241be026a210f200241e8016a2110410021084100210c2009210b0340200b220041106a210b20002802042211450d01200041086a2902002112024002402000280200220320014d0d0002402002280298012200200228029401470d0020024190016a200010ce0120022802980121000b20022802900120004104746a2204201136020420042003360200200441086a20123702002002200041016a360298010c010b02402012422088a72200450d00201120004102746a2113201121140340201428020021150240200c0d0041341032220c450d0841002116200c4100360200200c200229029802370204200c41003b0132200c410c6a20024198026a41086a290200370200200c41146a20024198026a41106a290200370200200c411c6a200d290200370200200c41246a200e290200370200200c412a6a200f2901003701000b201441046a2114200c21042016211702400340200441046a210320042f013221184100210002400340024020182000470d00201821000c020b20032802002105200341046a2103200041016a21000240417f2005201547200520154b1b41016a0e03000401000b0b2000417f6a21000b02402017450d002017417f6a2117200420004102746a41346a28020021040c010b0b024002400240024002402018410b490d00410021174104210502400240200041054f0d00200021180c010b4105210541052118024002402000417b6a0e020201000b200041796a211841012117410621050c010b41002118410121170b413410322203450d0d41002119200341003602002003200229029802370204200341003b01322003410c6a20024198026a41086a221a290200370200200341146a20024198026a41106a221b2902003702002003411c6a200d290200370200200341246a200e2902003702002003412a6a200f290100370100200420054102746a220041046a280200211c200341046a200041086a20042f01322005417f736a220041027410c9081a200420053b0132200320003b01322003200420171b220020184102746a220541086a200541046a220520002f013220186b41027410ca081a20052015360200200020002f013241016a3b0132024020042802002200450d004100211903402003211d201c211e20042f01302118024002400240200022042f01322203410b490d004100211f41042115024020184105490d0020182115024002402018417b6a0e020201000b201841796a21184101211f410621150c010b410021184101211f410521150b41e40010322203450d12201941016a211941002100200341003602002003200229029802370204200341003b0132200320022902c0013702342003410c6a201a290200370200200341146a201b2902003702002003411c6a200d290200370200200341246a200e2902003702002003412a6a200f2901003701002003413c6a200241c0016a41086a290200370200200341c4006a200241c0016a41106a290200370200200341cc006a200241c0016a41186a290200370200200341d4006a200241c0016a41206a290200370200200341dc006a2010290200370200200441046a2217201541027422056a280200211c200341046a2017200541046a22206a20042f013222212015417f736a220541027410c9082122200420153b0132200320053b0132200341346a200420206a41346a202120156b41027410c908212002400340200320004102746a41346a280200221520003b0130201520033602002000200020054922156a220020054b0d0120150d000b0b201f450d012018410274220520206a41086a2020201841016a220041027422156a221720032f013220186b41027410ca081a2017201d360200202220156a202220056a220520032f013220186b41027410ca081a2005201e360200200320032f013241016a22053b01322000200541ffff037122054b0d020340200320004102746a41346a280200221520003b013020152003360200200020002005496a221520054b0d03200020054f2118201521002018450d000c030b0b20184102742205200441346a22156a41086a2015201841016a220041027422176a2215200320186b410274220310ca081a2015201d360200200441046a221520176a201520056a2205200310ca081a2005201e360200200420042f013241016a22033b01322018200341ffff037122034f0d080340200420004102746a41346a280200220520003b013020052004360200200020002003496a220520034b0d09200020034f2115200521002015450d000c090b0b20184102742205200441346a22156a41086a2015201841016a2200410274221f6a221520042f013220186b41027410ca081a2015201d3602002017201f6a201720056a220520042f013220186b41027410ca081a2005201e360200200420042f013241016a22053b01322000200541ffff037122054b0d000340200420004102746a41346a280200221520003b0130201520043602002000200020054922156a220020054b0d0120150d000b0b200428020022000d000b0b200c450d0141e40010322200450d0d200041003602002000200229029802370204200041003b0132200020022902c0013702342000410c6a201a290200370200200041146a201b2902003702002000411c6a200d290200370200200041246a200e2902003702002000412a6a200f2901003701002000413c6a200241c0016a41086a290200370200200041c4006a200241c0016a41106a290200370200200041cc006a200241c0016a41186a290200370200200041d4006a200241c0016a41206a290200370200200041dc006a20102902003702002000200c360234200c41003b0130200c200036020020162019470d0220002f01322204410a4b0d03201641016a21162000200441016a22053b0132200041046a20044102746a201c360200200020054102746a41346a2003360200200320053b0130200320003602002000210c0c040b200420004102746a220341086a200341046a2203201820006b41027410ca081a20032015360200200420042f013241016a3b01320c030b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b200841016a21080b20142013470d000b0b2012a72200450d00200041ffffffff0371450d002011102c0b200b200a470d000c020b0b200a200b460d000340200b41106a21000240200b41086a28020041ffffffff0371450d00200b41046a280200102c0b2000210b200a2000470d000b0b02402006a7410020071b2200450d00200041ffffffff0071450d002009102c0b2002280270210b200228026821140240024020022802900122130d002014200b10b4010c010b2002290294012212422088a722174104744104722200417f4c0d01200010322203450d02200241003602c801200220003602c401200220033602c001200241c0016a2017108f0102402017450d00201320174104746a211820132115034020152802002100200241c0016a20022802c8014104102f20022802c00120022802c80122036a20003600002002200341046a3602c80120152802042100200241c0016a201528020c2203108f01201541106a211502402003450d002003410274210320022802c8012104034020002802002105200241c0016a20044104102f20022802c00120022802c80122046a20053600002002200441046a22043602c801200041046a21002003417c6a22030d000b0b20152018470d000b0b2014200b20022802c001220020022802c80110a702024020022802c401450d002000102c0b02402017450d0020174104742103201341046a210003400240200041046a28020041ffffffff0371450d002000280200102c0b200041106a2100200341706a22030d000b0b2012a72200450d00200041ffffffff0071450d002013102c0b0240200228026c450d002014102c0b02400240200c0d004100210c41002103410021080c010b200c21030340200c2f013221002016450d012016417f6a2116200c20004102746a41346a280200210c200328023421030c000b0b2002413c6a2000360200200241286a41106a200c36020020022008360240200242003703302002200336022c200241003602282002200241246a360244200241186a200241286a10c40702402002280218450d00200228021c210d200241f4016a2123200241f5016a2116200241d8006a41086a210f03402002280244280200210e20024190016a4187dec700410410c50120024198026a41d09ac500411310c501200241003602d002200242013703c802200241c8026a41004104102f20022802c80220022802d00222006a200d3600002002200041046a22003602d002200241c8026a20004104102f20022802c802220020022802d00222036a200e3600002002200341046a22033602d002200241d8006a2000200310c7012002200020036a3602cc01200220003602c8012002200f3602c4012002200241d8006a3602c001200241e8006a200241c0016a107e024020022802cc02450d002000102c0b2002280270220041206a2203417f4c0d020240024020030d00410121040c010b200310322204450d040b200241003602c801200220033602c401200220043602c001200241c0016a4100411010c80120022802c00120022802c80122036a2204200229009001370000200441086a20024190016a41086a22132900003700002002200341106a22033602c801200241c0016a2003411010c80120022802c00120022802c80122036a2204200229009802370000200441086a20024198026a41086a220b2900003700002002200341106a22043602c80120022802682103200241c0016a2004200010c80120022802c001220420022802c80122056a2003200010c9081a2002200520006a22003602c8010240200228026c450d002003102c0b20024198026a2004200010cd01200229029c022212422088a7410020022802980222001b2103024020022802c401450d002004102c0b200341ffffffff00712003470d0220034104742203417f4c0d020240024020030d00410421140c010b200310322214450d040b4100211520024100360250200220143602482002200341047636024c2000410420001b221d2012420020001b2212422088a722004104746a21042012a7211c02400240024020000d00201d210041002118410021170c010b41002115201d2100410021174100211803400240200041046a28020022030d00200041106a21000c020b200041086a2902002112024002402000280200220520014d0d0002402015200228024c470d00200241c8006a201510ce0120022802502115200228024821140b201420154104746a220c2003360204200c2005360200200c41086a20123702002002201541016a22153602500c010b201741016a211720182012422088a76a21182012a7450d002003102c0b200041106a22002004470d000c020b0b20042000460d000340200041106a21030240200041086a280200450d00200041046a280200102c0b2003210020042003470d000b0b0240201c450d00201c41ffffffff0071450d00201d102c0b0240024020150d0020024190016a4187dec700410410c50120024198026a41d09ac500411310c501200241003602d002200242013703c802200241c8026a41004104102f20022802c80220022802d00222006a200d3600002002200041046a22003602d002200241c8026a20004104102f20022802c802220020022802d00222036a200e3600002002200341046a22033602d002200241d8006a2000200310c7012002200020036a3602cc01200220003602c8012002200f3602c4012002200241d8006a3602c001200241e8006a200241c0016a107e024020022802cc02450d002000102c0b2002280270220041206a2203417f4c0d040240024020030d00410121040c010b200310322204450d060b200241003602c801200220033602c401200220043602c001200241c0016a4100411010c80120022802c00120022802c80122036a2204200229009001370000200441086a20132900003700002002200341106a22033602c801200241c0016a2003411010c80120022802c00120022802c80122036a2204200229009802370000200441086a200b2900003700002002200341106a22043602c80120022802682103200241c0016a2004200010c80120022802c001220420022802c80122056a2003200010c9081a2002200520006a22003602c8010240200228026c450d002003102c0b2004200010b401024020022802c401450d002004102c0b4101210a0c010b200228024c211d2002280248211420024190016a4187dec700410410c50120024198026a41d09ac500411310c501200241003602d002200242013703c802200241c8026a41004104102f20022802c80220022802d00222006a200d3600002002200041046a22003602d002200241c8026a20004104102f20022802c802220020022802d00222036a200e3600002002200341046a22033602d002200241d8006a2000200310c7012002200020036a3602cc01200220003602c8012002200f3602c4012002200241d8006a3602c001200241e8006a200241c0016a107e024020022802cc02450d002000102c0b2002280270220041206a2203417f4c0d030240024020030d00410121040c010b200310322204450d050b200241003602d002200220033602cc02200220043602c802200241c8026a4100411010c80120022802c80220022802d00222036a2204200229009001370000200441086a20132900003700002002200341106a22033602d002200241c8026a2003411010c80120022802c80220022802d00222036a2204200229009802370000200441086a200b2900003700002002200341106a22043602d00220022802682103200241c8026a2004200010c80120022802c802221c20022802d00222046a2003200010c9081a2002200420006a221e3602d0020240200228026c450d002003102c0b201541047422034104722200417f4c0d03200010322204450d04200241003602c801200220003602c401200220043602c001200241c0016a2015108f01201420036a210c20142100034020002802002104200241c0016a20022802c8014104102f20022802c00120022802c80122056a20043600002002200541046a3602c801200041046a2802002000410c6a280200200241c0016a10bb01200041106a2200200c470d000b201c201e20022802c001220020022802c80110a702024020022802c401450d002000102c0b024020022802cc02450d00201c102c0b201441046a210003400240200041046a280200450d002000280200102c0b200041106a2100200341706a22030d000b4100210a201d450d002014450d00201d41ffffffff0071450d002014102c0b20024190016a4187dec700410410c50120024198026a41acb1c500410c10c501200241003602d002200242013703c802200241c8026a41004104102f20022802c80220022802d00222006a200d3600002002200041046a22003602d002200241c8026a20004104102f20022802c802220020022802d00222036a200e3600002002200341046a22033602d002200241d8006a2000200310c7012002200020036a3602cc01200220003602c8012002200f3602c4012002200241d8006a3602c001200241e8006a200241c0016a107e024020022802cc02450d002000102c0b2002280270220041206a2203417f4c0d020240024020030d00410121040c010b200310322204450d040b200241003602602002200336025c20022004360258200241d8006a4100411010c8012002280258200228026022036a2204200229009001370000200441086a20132900003700002002200341106a2203360260200241d8006a2003411010c8012002280258200228026022036a2204200229009802370000200441086a200b2900003700002002200341106a220336026020022802682104200241d8006a2003200010c80120022802582203200228026022056a2004200010c9081a2002200520006a22003602600240200228026c450d002004102c0b200241c0016a2003200010f302200b200241c0016a41086a220529030037030020024198026a41106a2211200241c0016a41106a220e29030037030020024198026a41186a221a200241c0016a41186a220c29030037030020024198026a41206a221b200241c0016a41206a221c29030037030020024198026a41286a2210200241c0016a41286a221d280200360200200241c8026a41086a2208201641086a221e290000370300200241c8026a41106a2207201641106a2220290000370300200241c8026a41186a2209201641186a2221290000370300200241c8026a411f6a22242016411f6a2222280000360000200220022903c00137039802200220162900003703c802410021144100210d024020022d00f40122044102460d0020022802f001211f20022802ec01211920024190016a41286a201028020036020020024190016a41206a201b29030037030020024190016a41186a201a29030037030020024190016a41106a20112903003703002013200b290300370300200241e8006a41086a2008290300370300200241e8006a41106a2007290300370300200241e8006a41186a2009290300370300200241e8006a411f6a2024280000360000200220022903980237039001200220022903c802370368201721142018210d0b201d20024190016a41286a280200360200201c20024190016a41206a290300370300200c20024190016a41186a290300370300200e20024190016a41106a2903003703002005201329030037030020022002290390013703c0012002201f200d6b221f3602f0012002201920146b22193602ec01200220043a00f40120162002290368370000201e200241e8006a41086a2903003700002020200241e8006a41106a2903003700002021200241e8006a41186a2903003700002022200241e8006a411f6a2800003600000240024020044102470d002003200010b4010c010b200241003602a00220024201370398022005290300211220022903c001210620024198026a41004110102f20022802980220022802a00222046a22052012370008200520063700002002200441106a22043602a002200c290300211220022903d001210620024198026a20044110102f20022802980220022802a00222046a22052012370008200520063700002002200441106a22043602a00220022802e001210520024198026a20044104102f20022802980220022802a0026a2005360000200220022802a00241046a22043602a00220022802e401210520024198026a20044104102f20022802980220022802a0026a2005360000200220022802a00241046a22043602a00220022802e801210520024198026a20044104102f20022802980220022802a0026a2005360000200220022802a00241046a22043602a00220024198026a20044104102f20022802980220022802a0026a2019360000200220022802a00241046a22043602a00220024198026a20044104102f20022802980220022802a0026a201f360000200220022802a00241046a3602a00220024198026a20231091052003200020022802980220022802a00210a702200228029c02450d00200228029802102c0b0240200228025c450d002003102c0b0240200a450d002002280248210402402015450d0020154104742103200441046a210003400240200041046a280200450d002000280200102c0b200041106a2100200341706a22030d000b0b200228024c41ffffffff0071450d002004102c0b200241106a200241286a10c4072002280214210d20022802100d000b0b0340200241086a200241286a10c40720022802084101460d000b0240200228022c2203450d00200328020021002003102c2000450d000340200028020021032000102c2003210020030d000b0b20024190016a4187dec700410410c50120024198026a41e39ac500410e10c50120022002280224360228200241e8006a200241286a410410c701200241cc016a200241286a41046a3602002002200241f0006a3602c4012002200241286a3602c8012002200241e8006a3602c001200241c8026a200241c0016a107e20022802d002220041206a2203417f4c0d000240024020030d00410121040c010b200310322204450d020b200241003602c801200220033602c401200220043602c001200241c0016a4100411010c80120022802c00120022802c80122036a2204200229009001370000200441086a20024190016a41086a2900003700002002200341106a22033602c801200241c0016a2003411010c80120022802c00120022802c80122036a2204200229009802370000200441086a20024198026a41086a2900003700002002200341106a22043602c80120022802c8022103200241c0016a2004200010c80120022802c001220420022802c80122056a2003200010c9081a2002200520006a22003602c801024020022802cc02450d002003102c0b20022001360298022004200020024198026a410410a702024020022802c401450d002004102c0b200241f0026a24000f0b103b000b1039000b940201057f024002400240200128021822020d00410021030c010b20012002417f6a36021820012802042204450d0120012802002105024002402001280208220620042f01324f0d00200421020c010b034002400240200428020022020d00410021020c010b200541016a210520042f013021060b2004102c20022104200620022f01324f0d000b0b41012103200641016a2104200220064102746a41046a280200210602402005450d00200220044102746a41346a280200210202402005417f6a2204450d000340200228023421022004417f6a22040d000b0b410021040b2001200436020820012002360204200141003602000b20002006360204200020033602000f0b41ecd0c800412b4198d1c800103c000b130020004103360204200041849bc5003602000b340020004187dec70036020420004100360200200041146a410d360200200041106a41b4a4c500360200200041086a42043702000b2901017f230041106b2202240020024100360208200242043703002000200210b707200241106a24000bcc7307017f017e0f7f017e067f027e087f230041d0016b2203240042002104200341386a22054200370300200341306a22064200370300200341206a41086a220742003703002003420037032041042108200341c0016a4187dec700410410c5012007200341c0016a41086a2209290000370300200320032900c001370320200341c0016a41d893c600410d10c50120052009290000370300200620032900c001370300200341c0016a200341206a412010b903024020032802c0012205450d00200341206a412010b40120032902c4012104200521080b0240024002402004422088a72205450d00200820054102746a210a20034198016a41086a210b20034198016a41046a210c200341a8016a41086a210d2008210e0340200e2802002107200341f8006a4187dec700410410c50120034188016a41ecaec500411b10c5012003200736029801200341a8016a20034198016a410410c7012003200c36022c2003200d360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801220541206a2209417f4c0d030240024020090d004101210f0c010b20091032220f450d030b20034100360228200320093602242003200f360220200341206a4100411010c80120032802202003280228220f6a22092003290078370000200941086a200341f8006a41086a22092900003700002003200f41106a220f360228200341206a200f411010c8012003280220200328022822106a220f200329008801370000200f41086a20034188016a41086a220f2900003700002003201041106a221136022820032802c0012110200341206a2011200510c80120032802202211200328022822126a2010200510c9081a2003201220056a2205360228024020032802c401450d002010102c0b2011200510b40102402003280224450d002011102c0b200341f8006a4187dec700410410c50120034188016a41b0afc500411f10c5012003200736029801200341a8016a20034198016a410410c7012003200c36022c2003200d360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801220541206a2210417f4c0d030240024020100d00410121110c010b201010322211450d030b200341003602282003201036022420032011360220200341206a4100411010c8012003280220200328022822106a22112003290078370000201141086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2211200329008801370000201141086a200f2900003700002003201041106a221136022820032802c0012110200341206a2011200510c80120032802202211200328022822126a2010200510c9081a2003201220056a2205360228024020032802c401450d002010102c0b2011200510b40102402003280224450d002011102c0b200341f8006a4187dec700410410c50120034188016a41ecb1c500411810c5012003200736029801200341a8016a20034198016a410410c7012003200c36022c2003200d360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801220541206a2210417f4c0d030240024020100d00410121110c010b201010322211450d030b200341003602b001200320103602ac01200320113602a801200341a8016a4100411010c80120032802a80120032802b00122106a22112003290078370000201141086a20092900003700002003201041106a22103602b001200341a8016a2010411010c80120032802a80120032802b00122106a2211200329008801370000201141086a200f2900003700002003201041106a22103602b00120032802c0012111200341a8016a2010200510c80120032802a801221020032802b00122126a2011200510c9081a2003201220056a22053602b001024020032802c401450d002011102c0b200341206a2010200510b90302400240200328022022130d0041042113420021140c010b2010200510b401200329022421140b024020032802ac01450d002010102c0b02402014422088a72205450d002005410274211520132111034020112802002112200341f8006a4187dec700410410c50120034188016a41acb1c500410c10c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a20123600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122106a20073600002003201041046a22103602c80120034198016a2005201010c7012003200520106a36022c200320053602282003200b360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2210417f4c0d050240024020100d00410121160c010b201010322216450d050b200341003602282003201036022420032016360220200341206a4100411010c8012003280220200328022822106a22162003290078370000201641086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2216200329008801370000201641086a200f2900003700002003201041106a221636022820032802a8012110200341206a2016200510c80120032802202216200328022822176a2010200510c9081a2003201720056a2205360228024020032802ac01450d002010102c0b2016200510b40102402003280224450d002016102c0b200341f8006a4187dec700410410c50120034188016a41d09ac500411310c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a20123600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122106a20073600002003201041046a22103602c80120034198016a2005201010c7012003200520106a36022c200320053602282003200b360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2210417f4c0d050240024020100d00410121120c010b201010322212450d050b200341003602282003201036022420032012360220200341206a4100411010c8012003280220200328022822106a22122003290078370000201241086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2212200329008801370000201241086a200f2900003700002003201041106a221236022820032802a8012110200341206a2012200510c80120032802202212200328022822166a2010200510c9081a2003201620056a2205360228024020032802ac01450d002010102c0b2012200510b40102402003280224450d002012102c0b201141046a21112015417c6a22150d000b0b02402014a72205450d00200541ffffffff0371450d002013102c0b200341f8006a4187dec700410410c50120034188016a41fcb2c500411710c5012003200736029801200341a8016a20034198016a410410c7012003200c36022c2003200d360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801220541206a2210417f4c0d030240024020100d00410121110c010b201010322211450d030b200341003602b001200320103602ac01200320113602a801200341a8016a4100411010c80120032802a80120032802b00122106a22112003290078370000201141086a20092900003700002003201041106a22103602b001200341a8016a2010411010c80120032802a80120032802b00122106a2211200329008801370000201141086a200f2900003700002003201041106a22103602b00120032802c0012111200341a8016a2010200510c80120032802a801221020032802b00122126a2011200510c9081a2003201220056a22053602b001024020032802c401450d002011102c0b200341206a2010200510b90302400240200328022022130d0041042113420021140c010b2010200510b401200329022421140b024020032802ac01450d002010102c0b02402014422088a72205450d002005410274211520132111034020112802002112200341f8006a4187dec700410410c50120034188016a41acb1c500410c10c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a20073600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122106a20123600002003201041046a22103602c80120034198016a2005201010c7012003200520106a36022c200320053602282003200b360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2210417f4c0d050240024020100d00410121160c010b201010322216450d050b200341003602282003201036022420032016360220200341206a4100411010c8012003280220200328022822106a22162003290078370000201641086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2216200329008801370000201641086a200f2900003700002003201041106a221636022820032802a8012110200341206a2016200510c80120032802202216200328022822176a2010200510c9081a2003201720056a2205360228024020032802ac01450d002010102c0b2016200510b40102402003280224450d002016102c0b200341f8006a4187dec700410410c50120034188016a41d09ac500411310c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a20073600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122106a20123600002003201041046a22103602c80120034198016a2005201010c7012003200520106a36022c200320053602282003200b360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2210417f4c0d050240024020100d00410121120c010b201010322212450d050b200341003602282003201036022420032012360220200341206a4100411010c8012003280220200328022822106a22122003290078370000201241086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2212200329008801370000201241086a200f2900003700002003201041106a221236022820032802a8012110200341206a2012200510c80120032802202212200328022822166a2010200510c9081a2003201620056a2205360228024020032802ac01450d002010102c0b2012200510b40102402003280224450d002012102c0b201141046a21112015417c6a22150d000b0b200e41046a210e02402014a72205450d00200541ffffffff0371450d002013102c0b200e200a470d000b0b02402004a72205450d00200541ffffffff0371450d002008102c0b200341386a4200370300200341306a4200370300200341206a41086a2205420037030020034200370320200341c0016a4187dec700410410c5012005200341c0016a41086a2207290000370300200320032900c001370320200341c0016a41acaec500411b10c501200641086a2007290000370000200620032900c00137000020034188016a200341206a10f0040240200328028801220c450d0002400240200329028c012214428080808010540d00024020144220882204a7220b450d0020034198016a41086a210e20034198016a41046a2111200341a8016a41086a2112200341b8016a41086a2118200341cc006a2119200341206a41186a211a0240034002400240024002400240024002400240024002400240200b417f6a220b2014422088a722134f0d00200c200b4103746a221641046a280200210720162802002105200341f8006a4187dec700410410c50120034188016a41bcadc500411710c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122096a20053600002003200941046a22093602c801200341c0016a20094104102f20032802c001220920032802c801220f6a20073600002003200f41046a220f3602c80120034198016a2009200f10c70120032009200f6a36022c200320093602282003200e360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002009102c0b20032802b001221041206a2209417f4c0d120240024020090d004101210f0c010b20091032220f450d120b200341003602c801200320093602c4012003200f3602c001200341c0016a4100411010c80120032802c00120032802c801220f6a22092003290078370000200941086a200341f8006a41086a22092900003700002003200f41106a220f3602c801200341c0016a200f411010c80120032802c00120032802c80122156a220f200329008801370000200f41086a20034188016a41086a220f2900003700002003201541106a22173602c80120032802a8012115200341c0016a2017201010c80120032802c001221720032802c801220d6a2015201010c9081a2003200d20106a22103602c801024020032802ac01450d002015102c0b200341206a2017201010fe04024020032d004022104102460d00200341206a41086a290300211b2003290320211c200328023021082003280234211d2003280238211e200328023c211f0b024020032802c401450d002017102c0b20104102460d01024002400240024020100d00200841016a2002470d03200341f8006a4187dec700410410c50120034188016a41ecaec500411b10c5012003200536029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d1620150d01410121170c020b200510fb02450d0d200710fb02450d0d20194200370200201a2001370300201941086a41003a0000200320003703302003201c3703202003201d3602482003201f3602442003201e3602402003201b370328200341f8006a4187dec700410410c50120034188016a41acb1c500410c10c501200341003602b001200342013703a801200341a8016a41004104102f20032802a80120032802b00122106a20053600002003201041046a22103602b001200341a8016a20104104102f20032802a801221020032802b00122156a20073600002003201541046a22153602b001200341b8016a2010201510c7012003201020156a3602cc01200320103602c801200320183602c4012003200341b8016a3602c00120034198016a200341c0016a107e024020032802ac01450d002010102c0b20032802a001221041206a2215417f4c0d150240024020150d00410121170c010b201510322217450d150b200341003602c801200320153602c401200320173602c001200341c0016a4100411010c80120032802c00120032802c80122156a22172003290078370000201741086a20092900003700002003201541106a22153602c801200341c0016a2015411010c80120032802c00120032802c80122156a2217200329008801370000201741086a200f2900003700002003201541106a22173602c8012003280298012115200341c0016a2017201010c80120032802c001221720032802c801220d6a2015201010c9081a2003200d20106a22103602c8010240200328029c01450d002015102c0b20172010200341206a109005024020032802c401450d002017102c0b200341f8006a4187dec700410410c50120034188016a41ecb1c500411810c5012003200736029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d150240024020150d00410121170c010b201510322217450d150b200341003602b001200320153602ac01200320173602a801200341a8016a4100411010c80120032802a80120032802b00122156a22172003290078370000201741086a20092900003700002003201541106a22153602b001200341a8016a2015411010c80120032802a80120032802b00122156a2217200329008801370000201741086a200f2900003700002003201541106a22173602b00120032802c0012115200341a8016a2017201010c80120032802a801222020032802b00122176a2015201010c9081a2003201720106a22213602b001024020032802c401450d002015102c0b200341206a2020202110b90302402003280220220a0d0041002110200341003602c801200342043703c00141002115410021220c080b2003200329022422043702c4012003200a3602c0014100211002402004422088a722220e020706000b4100211020222115034020102015410176221720106a220d2005200a200d4102746a280200491b2110201520176b221541014b0d000c060b0b201510322217450d130b200341003602282003201536022420032017360220200341206a4100411010c8012003280220200328022822156a22172003290078370000201741086a20092900003700002003201541106a2215360228200341206a2015411010c8012003280220200328022822156a2217200329008801370000201741086a200f2900003700002003201541106a221536022820032802c0012117200341206a2015201010c801200328022022152003280228220d6a2017201010c9081a2003200d20106a2210360228024020032802c401450d002017102c0b200341086a2015201010c6012003200328020c417f6a417f20032802081b3602c00120152010200341c0016a410410a70202402003280224450d002015102c0b2016200c2013417f6a22104103746a290200370200200341f8006a4187dec700410410c50120034188016a41bcadc500411710c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122166a20053600002003201641046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122166a20073600002003201641046a22073602c80120034198016a2005200710c7012003200520076a36022c200320053602282003200e360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2207417f4c0d130240024020070d00410121160c010b200710322216450d130b2010ad2104200341003602282003200736022420032016360220200341206a4100411010c8012003280220200328022822076a22102003290078370000201041086a20092900003700002003200741106a2207360228200341206a2007411010c8012003280220200328022822076a2209200329008801370000200941086a200f2900003700002003200741106a220936022820032802a8012107200341206a2009200510c801200328022022092003280228220f6a2007200510c9081a2003200f20056a2205360228024020032802ac01450d002007102c0b201442ffffffff0f832114200442208621042009200510b40102402003280224450d002009102c0b201420048421140b200b450d0c0c0b0b200b201341d8c5c500103f000b41e8c5c50041da0041c4c6c500105c000b2005200a20104102746a2802002215460d0320222010200520154b6a2210490d040b20222004a72215470d010b200341c0016a201510d20420032802c001210a0b200a20104102746a221541046a2015202220106b41027410ca081a201520053602002003202241016a3602c80120032802a801212020032802b00121210b200341206a41086a2223200341c0016a41086a2224280200360200200320032903c00122043703202004a722100d012020202110b4010c020b201020221044000b20202021200341206a10d10420032802242215450d00201541ffffffff0371450d002010102c0b024020032802ac01450d002020102c0b200341f8006a4187dec700410410c50120034188016a41fcb2c500411710c5012003200536029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d080240024020150d00410121170c010b201510322217450d080b200341003602b001200320153602ac01200320173602a801200341a8016a4100411010c80120032802a80120032802b00122156a22172003290078370000201741086a20092900003700002003201541106a22153602b001200341a8016a2015411010c80120032802a80120032802b00122156a2217200329008801370000201741086a200f2900003700002003201541106a22173602b00120032802c0012115200341a8016a2017201010c80120032802a801222020032802b00122176a2015201010c9081a2003201720106a22213602b001024020032802c401450d002015102c0b200341206a2020202110b90302400240024002400240024002402003280220220a0d0041002110200341003602c801200342043703c00141002115410021220c010b2003200329022422043702c4012003200a3602c001410021100240024002402004422088a722220e020201000b4100211020222115034020102015410176221720106a220d2007200a200d4102746a280200491b2110201520176b221541014b0d000b0b2007200a20104102746a2802002215460d0320222010200720154b6a2210490d040b20222004a72215470d010b200341c0016a201510d20420032802c001210a0b200a20104102746a221541046a2015202220106b41027410ca081a201520073602002003202241016a3602c80120032802a801212020032802b00121210b20232024280200360200200320032903c00122043703202004a722100d012020202110b4010c020b201020221044000b20202021200341206a10d10420032802242215450d00201541ffffffff0371450d002010102c0b20032802ac01450d002020102c0b200341f8006a4187dec700410410c50120034188016a41ecaec500411b10c5012003200536029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d070240024020150d00410121170c010b201510322217450d070b200341003602282003201536022420032017360220200341206a4100411010c8012003280220200328022822156a22172003290078370000201741086a20092900003700002003201541106a2215360228200341206a2015411010c8012003280220200328022822156a2217200329008801370000201741086a200f2900003700002003201541106a221736022820032802c0012115200341206a2017201010c801200328022022172003280228220d6a2015201010c9081a2003200d20106a2210360228024020032802c401450d002015102c0b200341186a2017201010c601200328021c410020032802181b211002402003280224450d002017102c0b02400240201041014b0d00200341f8006a4187dec700410410c50120034188016a41ecaec500411b10c5012003200536029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d090240024020150d00410121170c010b201510322217450d090b200341003602282003201536022420032017360220200341206a4100411010c8012003280220200328022822156a22172003290078370000201741086a20092900003700002003201541106a2215360228200341206a2015411010c8012003280220200328022822156a2217200329008801370000201741086a200f2900003700002003201541106a221736022820032802c0012115200341206a2017201010c801200328022022172003280228220d6a2015201010c9081a2003200d20106a2210360228024020032802c401450d002015102c0b2017201010b4012003280224450d012017102c0c010b200341f8006a4187dec700410410c50120034188016a41ecaec500411b10c5012003200536029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221541206a2217417f4c0d080240024020170d004101210a0c010b20171032220a450d080b2010417f6a210d20034100360228200320173602242003200a360220200341206a4100411010c8012003280220200328022822106a22172003290078370000201741086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2217200329008801370000201741086a200f2900003700002003201041106a221736022820032802c0012110200341206a2017201510c801200328022022172003280228220a6a2010201510c9081a2003200a20156a2215360228024020032802c401450d002010102c0b2003200d3602c00120172015200341c0016a410410a7022003280224450d002017102c0b200341f8006a4187dec700410410c50120034188016a41b0afc500411f10c5012003200736029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d070240024020150d00410121170c010b201510322217450d070b200341003602282003201536022420032017360220200341206a4100411010c8012003280220200328022822156a22172003290078370000201741086a20092900003700002003201541106a2215360228200341206a2015411010c8012003280220200328022822156a2217200329008801370000201741086a200f2900003700002003201541106a221736022820032802c0012115200341206a2017201010c801200328022022172003280228220d6a2015201010c9081a2003200d20106a2210360228024020032802c401450d002015102c0b200341106a2017201010c6012003280214410020032802101b211002402003280224450d002017102c0b02400240201041014b0d00200341f8006a4187dec700410410c50120034188016a41b0afc500411f10c5012003200736029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221041206a2215417f4c0d090240024020150d00410121170c010b201510322217450d090b200341003602282003201536022420032017360220200341206a4100411010c8012003280220200328022822156a22172003290078370000201741086a20092900003700002003201541106a2215360228200341206a2015411010c8012003280220200328022822156a2217200329008801370000201741086a200f2900003700002003201541106a221736022820032802c0012115200341206a2017201010c801200328022022172003280228220d6a2015201010c9081a2003200d20106a2210360228024020032802c401450d002015102c0b2017201010b4012003280224450d012017102c0c010b200341f8006a4187dec700410410c50120034188016a41b0afc500411f10c5012003200736029801200341a8016a20034198016a410410c7012003201136022c20032012360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801221541206a2217417f4c0d080240024020170d004101210a0c010b20171032220a450d080b2010417f6a210d20034100360228200320173602242003200a360220200341206a4100411010c8012003280220200328022822106a22172003290078370000201741086a20092900003700002003201041106a2210360228200341206a2010411010c8012003280220200328022822106a2217200329008801370000201741086a200f2900003700002003201041106a221736022820032802c0012110200341206a2017201510c801200328022022172003280228220a6a2010201510c9081a2003200a20156a2215360228024020032802c401450d002010102c0b2003200d3602c00120172015200341c0016a410410a7022003280224450d002017102c0b2016200c2013417f6a22104103746a290200370200200341f8006a4187dec700410410c50120034188016a41bcadc500411710c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122166a20053600002003201641046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122166a20073600002003201641046a22073602c80120034198016a2005200710c7012003200520076a36022c200320053602282003200e360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2207417f4c0d070240024020070d00410121160c010b200710322216450d070b2010ad2104200341003602282003200736022420032016360220200341206a4100411010c8012003280220200328022822076a22102003290078370000201041086a20092900003700002003200741106a2207360228200341206a2007411010c8012003280220200328022822076a2209200329008801370000200941086a200f2900003700002003200741106a220936022820032802a8012107200341206a2009200510c801200328022022092003280228220f6a2007200510c9081a2003200f20056a2205360228024020032802ac01450d002007102c0b201442ffffffff0f832114200442208621042009200510b40102402003280224450d002009102c0b20142004842114200b0d000b0b201442208821040b200341386a4200370300200341306a4200370300200341206a41086a2205420037030020034200370320200341c0016a4187dec700410410c5012005200341c0016a41086a2207290000370300200320032900c001370320200341c0016a41acaec500411b10c501200641086a2007290000370000200620032900c0013700002004a722054103744104722207417f4c0d04200710322209450d03200341003602c801200320073602c401200320093602c001200341c0016a2005108f010240024020050d0020032802c001210f20032802c80121070c010b200c20054103746a210b20032802c8012107200c2105034020052802002109200341c0016a20074104102f20032802c00120032802c80122076a20093600002003200741046a22073602c801200541046a2802002109200341c0016a20074104102f20032802c001220f20032802c80122076a20093600002003200741046a22073602c801200541086a2205200b470d000b0b200341206a4120200f200710a702024020032802c401450d00200f102c0b2014a72205450d02200541ffffffff0171450d020c010b2014a72205450d01200541ffffffff0171450d010b200c102c0b42002104200341386a4200370300200341306a4200370300200341206a41086a220542003703002003420037032041042108200341c0016a4187dec700410410c5012005200341c0016a41086a2207290000370300200320032900c001370320200341c0016a41d8b0c500411c10c501200641086a2007290000370000200620032900c001370000200341c0016a200341206a10f004024020032802c0012205450d00200341206a412010b40120032902c4012104200521080b02402004422088a72205450d00200820054103746a210620034198016a41046a210e200341a8016a41086a211320034198016a41086a210d20082115034020152902002114200341f8006a4187dec700410410c50120034188016a41f8afc500411810c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a2014a7220b3600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122076a2014422088a722103600002003200741046a22073602c80120034198016a2005200710c7012003200520076a36022c200320053602282003200d360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2207417f4c0d030240024020070d00410121090c010b200710322209450d030b200341003602282003200736022420032009360220200341206a4100411010c8012003280220200328022822076a22092003290078370000200941086a200341f8006a41086a22122900003700002003200741106a2207360228200341206a2007411010c8012003280220200328022822076a2209200329008801370000200941086a20034188016a41086a22162900003700002003200741106a220936022820032802a8012107200341206a2009200510c801200328022022092003280228220f6a2007200510c9081a2003200f20056a2205360228024020032802ac01450d002007102c0b2009200510b40102402003280224450d002009102c0b200341f8006a4187dec700410410c50120034188016a41acb1c500410c10c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a200b3600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122076a20103600002003200741046a22073602c80120034198016a2005200710c7012003200520076a36022c200320053602282003200d360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2207417f4c0d030240024020070d00410121090c010b200710322209450d030b200341003602282003200736022420032009360220200341206a4100411010c8012003280220200328022822076a22092003290078370000200941086a20122900003700002003200741106a2207360228200341206a2007411010c8012003280220200328022822076a2209200329008801370000200941086a20162900003700002003200741106a220936022820032802a8012107200341206a2009200510c801200328022022092003280228220f6a2007200510c9081a2003200f20056a2205360228024020032802ac01450d002007102c0b2009200510b40102402003280224450d002009102c0b200341f8006a4187dec700410410c50120034188016a41d09ac500411310c501200341003602c801200342013703c001200341c0016a41004104102f20032802c00120032802c80122056a200b3600002003200541046a22053602c801200341c0016a20054104102f20032802c001220520032802c80122076a20103600002003200741046a22073602c80120034198016a2005200710c7012003200520076a36022c200320053602282003200d360224200320034198016a360220200341a8016a200341206a107e024020032802c401450d002005102c0b20032802b001220541206a2207417f4c0d030240024020070d00410121090c010b200710322209450d030b200341003602282003200736022420032009360220200341206a4100411010c8012003280220200328022822076a22092003290078370000200941086a20122900003700002003200741106a2207360228200341206a2007411010c8012003280220200328022822076a2209200329008801370000200941086a20162900003700002003200741106a220936022820032802a8012107200341206a2009200510c801200328022022092003280228220f6a2007200510c9081a2003200f20056a2205360228024020032802ac01450d002007102c0b2009200510b40102402003280224450d002009102c0b200341f8006a4187dec700410410c50120034188016a41fcb2c500411710c5012003200b36029801200341a8016a20034198016a410410c7012003200e36022c20032013360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801220541206a2207417f4c0d030240024020070d00410121090c010b200710322209450d030b200341003602b001200320073602ac01200320093602a801200341a8016a4100411010c80120032802a80120032802b00122076a22092003290078370000200941086a20122900003700002003200741106a22073602b001200341a8016a2007411010c80120032802a80120032802b00122076a2209200329008801370000200941086a20162900003700002003200741106a22093602b00120032802c0012107200341a8016a2009200510c80120032802a801221720032802b00122096a2007200510c9081a2003200920056a220c3602b001024020032802c401450d002007102c0b200341206a2017200c10b90320032802202205410420051b211102400240024002402003290224420020051b2214422088a7220a0e020300010b4100210520112802002010470d020c010b41002105200a2107034020052007410176220920056a220f2011200f4102746a28020020104b1b2105200720096b220741014b0d000b201120054102746a2802002010470d012005200a490d002005200a1047000b201120054102746a2207200741046a2005417f73200a6a41027410ca081a20144280808080707c211420032802a801211720032802b001210c0b20032011360220200320143702242017200c200341206a10d1040240201442ffffffff0383500d002011102c0b024020032802ac01450d002017102c0b200341f8006a4187dec700410410c50120034188016a41ecb1c500411810c5012003201036029801200341a8016a20034198016a410410c7012003200e36022c20032013360224200320034198016a3602282003200341a8016a360220200341c0016a200341206a107e20032802c801220541206a2207417f4c0d030240024020070d00410121090c010b200710322209450d030b200341003602b001200320073602ac01200320093602a801200341a8016a4100411010c80120032802a80120032802b00122076a22092003290078370000200941086a20122900003700002003200741106a22073602b001200341a8016a2007411010c80120032802a80120032802b00122076a2209200329008801370000200941086a20162900003700002003200741106a22093602b00120032802c0012107200341a8016a2009200510c80120032802a801221120032802b00122096a2007200510c9081a2003200920056a22123602b001024020032802c401450d002007102c0b200341206a2011201210b90320032802202205410420051b211002400240024002402003290224420020051b2214422088a722160e020300010b410021052010280200200b470d020c010b4100210520162107034020052007410176220920056a220f2010200f4102746a280200200b4b1b2105200720096b220741014b0d000b201020054102746a280200200b470d0120052016490d00200520161047000b201020054102746a2207200741046a2005417f7320166a41027410ca081a20144280808080707c211420032802a801211120032802b00121120b200320103602202003201437022420112012200341206a10d1040240201442ffffffff0383500d002010102c0b201541086a2115024020032802ac01450d002011102c0b20152006470d000b0b02402004a72205450d00200541ffffffff0171450d002008102c0b200341d0016a24000f0b1039000b103b000b8e0301017f230041c0006b220224000240024002400240200028020022002802000e03010200010b2002200041046a3602242002411c3602142001411c6a28020021002002200241246a360210200128021821012002413c6a41013602002002420237022c200241d4c6c5003602282002200241106a36023820012000200241286a103e21010c020b2002200041046a36020c2002200041086a3602242002411c6a411c3602002002411c3602142001411c6a28020021002002200241246a36021820022002410c6a360210200128021821012002413c6a41023602002002420337022c200241e4c6c5003602282002200241106a36023820012000200241286a103e21010c010b2002200041046a36020c2002200041086a3602242002411c6a411c3602002002411c3602142001411c6a28020021002002200241246a36021820022002410c6a360210200128021821012002413c6a41023602002002420337022c200241fcc6c5003602282002200241106a36023820012000200241286a103e21010b200241c0006a240020010b9c0701017f230041c0006b220224000240024002400240024002400240200028020022002802000e06010203040500010b2002200041046a3602042002200041086a36020820022000410c6a36020c200241106a41146a411e360200200241106a410c6a411e3602002002411e3602142001411c6a280200210020022002410c6a3602202002200241086a3602182002200241046a36021020012802182101200241286a41146a41033602002002420437022c200241d4b3c0003602282002200241106a36023820012000200241286a103e21000c050b2002200041046a3602082002200041086a36020c2002411c6a411e3602002002411e3602142001411c6a280200210020022002410c6a3602182002200241086a360210200128021821012002413c6a41023602002002420337022c200241f4b3c0003602282002200241106a36023820012000200241286a103e21000c040b2002200041046a36020c2002411e3602142001411c6a280200210020022002410c6a360210200128021821012002413c6a41013602002002420237022c2002418cb4c0003602282002200241106a36023820012000200241286a103e21000c030b2002200041046a36020c200241106a41146a4128360200200241106a410c6a412836020020022000410c6a3602202002200041086a3602182002411e3602142001411c6a280200210020022002410c6a36021020012802182101200241286a41146a41033602002002420337022c2002419cb4c0003602282002200241106a36023820012000200241286a103e21000c020b2002200041046a3602042002200041086a36020820022000410c6a36020c200241106a41146a411e360200200241106a410c6a411e3602002002411e3602142001411c6a280200210020022002410c6a3602202002200241086a3602182002200241046a36021020012802182101200241286a41146a41033602002002420437022c200241b4b4c0003602282002200241106a36023820012000200241286a103e21000c010b2002200041046a3602042002200041086a36020820022000410c6a36020c200241106a41146a411e360200200241106a410c6a411e3602002002411e3602142001411c6a280200210020022002410c6a3602202002200241086a3602182002200241046a36021020012802182101200241286a41146a41033602002002420437022c200241d4b4c0003602282002200241106a36023820012000200241286a103e21000b200241c0006a240020000b130020004102360204200041d0c9c5003602000b3400200041c7dcc70036020420004100360200200041146a410c360200200041106a41accdc500360200200041086a42043702000b4901017f02404104103222020d001039000b2000420437020420002002360200200041004101102f2000280200200041086a220028020022026a41003a00002000200241016a3602000bb00101067f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120103222060d001039000b2000422037020420002006360200200041004120102f2000280200200041086a220628020022076a220020022903003700002006200741206a360200200041086a2005290300370000200041106a2004290300370000200041186a2003290300370000200241206a24000b130020004102360204200041e8e8c5003602000b4a01017f02404108103222020d001039000b2000420837020420002002360200200041004108102f2000280200200041086a220028020022026a42f02e3700002000200241086a3602000b4a01017f02404108103222020d001039000b2000420837020420002002360200200041004108102f2000280200200041086a220028020022026a42d8043700002000200241086a3602000bb56603047f237e067f230041d01f6b22022400200241801c6a20011073200241a81c6a200241801c6a106e41002103410121040340200120036a2d0000200241a81c6a20036a2d0000732205410020056b72417f734180017141077610702004712104200341016a22034120470d000b200410702103200241881f6a200241801c6a106e20022d00881f41017110702104024002400240200341ff0171450d00200441ff01714101460d00200241c81c6a200241801c6a41011071200242f0ffffffffffff3f20022903e81c7d220642ffffffffffffff038342f0ffffffffffff3f20022903e01c7d22074233887c3703901d2002200742ffffffffffffff038342f0ffffffffffff3f20022903d81c22077d22084233887c3703881d2002200842ffffffffffffff038342f0ffffffffffff3f20022903d01c22087d22094233887c3703801d2002200942ffffffffffffff038342d1fdffffffffff3f20022903c81c22097d220a4233887c3703f81c2002200642338842137e200a42ffffffffffffff03837c3703f01c200242003703b01d200242003703b81d2002200942017c3703981d200220083703a01d200220073703a81d200220022903e01c3703b01d200220022903b81d20022903e81c7c3703b81d200241c01d6a200241981d6a41011071200241b81e6a200241f01c6a41011071200241f8156a20022903b81e2206420042ca8e9ae5dec6ac02420010ce08200241f8186a20022903c01e220742137e4200428092f58893f9b701420010ce08200241a8186a20022903c81e220842137e220b420042c486ffe299c731420010ce08200241d8176a20022903d01e220a42137e220c420042d6fff8ffd98b8601420010ce0820024188176a20022903d81e220d42137e2209420042c2a2aaa7fcfa9503420010ce0820024188166a2006420042c2a2aaa7fcfa9503420010ce08200241e8186a2007420042ca8e9ae5dec6ac02420010ce0820024198186a200b4200428092f58893f9b701420010ce08200241c8176a200c420042c486ffe299c731420010ce08200241f8166a2009420042d6fff8ffd98b8601420010ce0820024198166a2006420042d6fff8ffd98b8601420010ce08200241d8186a2007420042c2a2aaa7fcfa9503420010ce0820024188186a2008420042ca8e9ae5dec6ac02420010ce08200241b8176a200c4200428092f58893f9b701420010ce08200241e8166a2009420042c486ffe299c731420010ce08200241a8166a2006420042c486ffe299c731420010ce08200241c8186a2007420042d6fff8ffd98b8601420010ce08200241f8176a2008420042c2a2aaa7fcfa9503420010ce08200241a8176a200a420042ca8e9ae5dec6ac02420010ce08200241d8166a20094200428092f58893f9b701420010ce08200241b8166a20064200428092f58893f9b701420010ce08200241b8186a2007420042c486ffe299c731420010ce08200241e8176a2008420042d6fff8ffd98b8601420010ce0820024198176a200a420042c2a2aaa7fcfa9503420010ce08200241c8166a200d420042ca8e9ae5dec6ac02420010ce08200241f8136a20022903c01d2208420020022903b816220e20022903c8167c220620022903b8187c220720022903e8177c22092002290398177c220a20022903d816220f20022903a8177c220c20022903a8167c220b20022903c8187c220d20022903f8177c221020022903b81722112002290388187c221220022903e8167c22132002290398167c221420022903d8187c2215200229039818221620022903e8187c221720022903c8177c221820022903f8167c22192002290388167c221a20022903f818221b20022903f8157c221c20022903a8187c221d20022903d8177c221e2002290388177c221f423388200241f8186a41086a290300200241f8156a41086a2903007c201c201b54ad7c200241a8186a41086a2903007c201d201c54ad7c200241d8176a41086a2903007c201e201d54ad7c20024188176a41086a2903007c201f201e54ad7c420d86847c221c42338820024198186a41086a290300200241e8186a41086a2903007c2017201654ad7c200241c8176a41086a2903007c2018201754ad7c200241f8166a41086a2903007c2019201854ad7c20024188166a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c2218423388200241b8176a41086a29030020024188186a41086a2903007c2012201154ad7c200241e8166a41086a2903007c2013201254ad7c20024198166a41086a2903007c2014201354ad7c200241d8186a41086a2903007c2015201454ad7c2018201554ad7c420d86847c2212423388200241d8166a41086a290300200241a8176a41086a2903007c200c200f54ad7c200241a8166a41086a2903007c200b200c54ad7c200241c8186a41086a2903007c200d200b54ad7c200241f8176a41086a2903007c2010200d54ad7c2012201054ad7c420d86847c220c42ffffffffffffff038320022903e01d220d7d42f0ffffffffffff3f7c220b42338842137e200c423388200241b8166a41086a290300200241c8166a41086a2903007c2006200e54ad7c200241b8186a41086a2903007c2007200654ad7c200241e8176a41086a2903007c2009200754ad7c20024198176a41086a2903007c200a200954ad7c200c200a54ad7c420d868442137e201f42feffffffffffff03837c220742ffffffffffffff038320087d42d0fdffffffffff3f7c221342ffffffffffffff03837c2206420010ce08200241e8156a200b42ffffffffffffff0383201242ffffffffffffff038320022903d81d220c7d42f0ffffffffffff3f7c220a4233887c2217420020022903c81d220942137e420010ce0820024198156a200a42ffffffffffffff0383201842ffffffffffffff038320022903d01d220a7d42f0ffffffffffff3f7c220b4233887c22144200200a42137e2215420010ce08200241c8146a200b42ffffffffffffff03832007423388201c42ffffffffffffff03837c20097d42f0ffffffffffff3f7c22074233887c22124200200c42137e2210420010ce08200241a8136a200742ffffffffffffff038320134233887c22074200200d42137e220b420010ce0820024198136a200742002008420010ce08200241e8136a200642002009420010ce08200241d8156a201742002015420010ce0820024188156a201442002010420010ce08200241b8146a20124200200b420010ce08200241a8146a201242002008420010ce0820024188136a200742002009420010ce08200241d8136a20064200200a420010ce08200241c8156a201742002010420010ce08200241f8146a20144200200b420010ce08200241e8146a201442002008420010ce0820024198146a201242002009420010ce08200241f8126a20074200200a420010ce08200241c8136a20064200200c420010ce08200241b8156a20174200200b420010ce08200241a8156a201742002008420010ce08200241d8146a201442002009420010ce0820024188146a20124200200a420010ce08200241e8126a20074200200c420010ce08200241b8136a20064200200d420010ce08200220022903c815221c20022903d8137c220820022903f8147c220920022903a8147c220a2002290388137c220c20022903d815221d20022903e8137c220b2002290388157c220d20022903b8147c22102002290398137c221320022903e815221e20022903f8137c22152002290398157c221820022903c8147c221920022903a8137c221a423388200241e8156a41086a290300200241f8136a41086a2903007c2015201e54ad7c20024198156a41086a2903007c2018201554ad7c200241c8146a41086a2903007c2019201854ad7c200241a8136a41086a2903007c201a201954ad7c420d86847c2215423388200241d8156a41086a290300200241e8136a41086a2903007c200b201d54ad7c20024188156a41086a2903007c200d200b54ad7c200241b8146a41086a2903007c2010200d54ad7c20024198136a41086a2903007c2013201054ad7c2015201354ad7c420d86847c220b42ffffffffffffff03833703a01e200220022903b815221920022903c8137c220d20022903e8147c22102002290398147c221320022903f8127c2218200b423388200241c8156a41086a290300200241d8136a41086a2903007c2008201c54ad7c200241f8146a41086a2903007c2009200854ad7c200241a8146a41086a2903007c200a200954ad7c20024188136a41086a2903007c200c200a54ad7c200b200c54ad7c420d86847c220842ffffffffffffff03833703a81e200220022903a815221c20022903b8137c220920022903d8147c220a2002290388147c220c20022903e8127c220b2008423388200241b8156a41086a290300200241c8136a41086a2903007c200d201954ad7c200241e8146a41086a2903007c2010200d54ad7c20024198146a41086a2903007c2013201054ad7c200241f8126a41086a2903007c2018201354ad7c2008201854ad7c420d86847c220842ffffffffffffff03833703b01e20022008423388200241a8156a41086a290300200241b8136a41086a2903007c2009201c54ad7c200241d8146a41086a2903007c200a200954ad7c20024188146a41086a2903007c200c200a54ad7c200241e8126a41086a2903007c200b200c54ad7c2008200b54ad7c420d868442137e201a42ffffffffffffff03837c220842ffffffffffffff03833703901e20022008423388201542ffffffffffffff03837c3703981e200241a81f6a41106a4200370300200241a81f6a41186a4200370300200241a81f6a41206a4200370300200242003703b01f200242013703a81f200241b81e6a200241a81f6a200241901e6a107220024198126a20022903981d220d420020022903c01e2208420010ce08200241d80f6a200241e01e6a2903002209420020022903a01d221042137e420010ce08200241b8106a200241b81e6a41206a2203290300220a420020022903a81d221342137e221a420010ce0820024198116a200241b81e6a41186a2204290300220c420020022903b01d221842137e2219420010ce08200241f8116a200241b81e6a41106a2205290300220b420020022903b81d221c42137e2215420010ce08200241d8126a200b4200200d420010ce0820024198106a200842002010420010ce08200241a8106a20094200201a420010ce0820024188116a200a42002019420010ce08200241e8116a200c42002015420010ce08200241c8126a200c4200200d420010ce0820024188106a200b42002010420010ce08200241e8106a200842002013420010ce08200241f8106a200942002019420010ce08200241d8116a200a42002015420010ce08200241b8126a200a4200200d420010ce08200241f80f6a200c42002010420010ce08200241d8106a200b42002013420010ce08200241b8116a200842002018420010ce08200241c8116a200942002015420010ce08200241a8126a20094200200d420010ce08200241e80f6a200a42002010420010ce08200241c8106a200c42002013420010ce08200241a8116a200b42002018420010ce0820024188126a20084200201c420010ce08200241980d6a2006420020022903a81222202002290388127c220d20022903e80f7c221020022903c8107c221320022903a8117c221520022903c811222120022903b8117c221820022903b8127c221920022903f80f7c221a20022903d8107c221c20022903f810222220022903e8107c221d20022903d8117c221e20022903c8127c221f2002290388107c220e20022903a81022232002290398107c220f2002290388117c221120022903e8117c221620022903d8127c221b20022903d80f22242002290398127c222520022903b8107c22262002290398117c222720022903f8117c2228423388200241d80f6a41086a29030020024198126a41086a2903007c2025202454ad7c200241b8106a41086a2903007c2026202554ad7c20024198116a41086a2903007c2027202654ad7c200241f8116a41086a2903007c2028202754ad7c420d86847c2225423388200241a8106a41086a29030020024198106a41086a2903007c200f202354ad7c20024188116a41086a2903007c2011200f54ad7c200241e8116a41086a2903007c2016201154ad7c200241d8126a41086a2903007c201b201654ad7c2025201b54ad7c420d86847c220f423388200241f8106a41086a290300200241e8106a41086a2903007c201d202254ad7c200241d8116a41086a2903007c201e201d54ad7c200241c8126a41086a2903007c201f201e54ad7c20024188106a41086a2903007c200e201f54ad7c200f200e54ad7c420d86847c221d423388200241c8116a41086a290300200241b8116a41086a2903007c2018202154ad7c200241b8126a41086a2903007c2019201854ad7c200241f80f6a41086a2903007c201a201954ad7c200241d8106a41086a2903007c201c201a54ad7c201d201c54ad7c420d86847c2218423388200241a8126a41086a29030020024188126a41086a2903007c200d202054ad7c200241e80f6a41086a2903007c2010200d54ad7c200241c8106a41086a2903007c2013201054ad7c200241a8116a41086a2903007c2015201354ad7c2018201554ad7c420d868442137e202842ffffffffffffff03837c221042ffffffffffffff0383220d420010ce08200241b8096a201842ffffffffffffff038322184200200742137e420010ce08200241c80e6a201d42ffffffffffffff038322154200201242137e221c420010ce08200241f80d6a200f42ffffffffffffff038322134200201442137e221a420010ce08200241e80d6a2010423388202542ffffffffffffff03837c22104200201742137e2219420010ce08200241d80d6a201042002006420010ce08200241880d6a200d42002007420010ce08200241980f6a20184200201c420010ce08200241d80e6a20154200201a420010ce08200241880e6a201342002019420010ce08200241980e6a201342002006420010ce08200241c80d6a201042002007420010ce08200241f80c6a200d42002012420010ce08200241a80f6a20184200201a420010ce08200241e80e6a201542002019420010ce08200241f80e6a201542002006420010ce08200241a80e6a201342002007420010ce08200241b80d6a201042002012420010ce08200241e80c6a200d42002014420010ce08200241b80f6a201842002019420010ce08200241c80f6a201842002006420010ce08200241880f6a201542002007420010ce08200241b80e6a201342002012420010ce08200241a80d6a201042002014420010ce08200241d80c6a200d42002017420010ce08200241e8066a20022903c80f222020022903d80c7c220620022903880f7c220720022903b80e7c221220022903a80d7c221420022903b80f222120022903e80c7c221720022903f80e7c221920022903a80e7c221a20022903b80d7c221c20022903a80f222220022903f80c7c221d20022903e80e7c221e20022903980e7c221f20022903c80d7c220e20022903980f222320022903880d7c220f20022903d80e7c221120022903880e7c221620022903d80d7c221b20022903b809222420022903980d7c222520022903c80e7c222620022903f80d7c222720022903e80d7c2228423388200241b8096a41086a290300200241980d6a41086a2903007c2025202454ad7c200241c80e6a41086a2903007c2026202554ad7c200241f80d6a41086a2903007c2027202654ad7c200241e80d6a41086a2903007c2028202754ad7c420d86847c2225423388200241980f6a41086a290300200241880d6a41086a2903007c200f202354ad7c200241d80e6a41086a2903007c2011200f54ad7c200241880e6a41086a2903007c2016201154ad7c200241d80d6a41086a2903007c201b201654ad7c2025201b54ad7c420d86847c220f423388200241a80f6a41086a290300200241f80c6a41086a2903007c201d202254ad7c200241e80e6a41086a2903007c201e201d54ad7c200241980e6a41086a2903007c201f201e54ad7c200241c80d6a41086a2903007c200e201f54ad7c200f200e54ad7c420d86847c221d423388200241b80f6a41086a290300200241e80c6a41086a2903007c2017202154ad7c200241f80e6a41086a2903007c2019201754ad7c200241a80e6a41086a2903007c201a201954ad7c200241b80d6a41086a2903007c201c201a54ad7c201d201c54ad7c420d86847c2217423388200241c80f6a41086a290300200241d80c6a41086a2903007c2006202054ad7c200241880f6a41086a2903007c2007200654ad7c200241b80e6a41086a2903007c2012200754ad7c200241a80d6a41086a2903007c2014201254ad7c2017201454ad7c420d868442137e202842ffffffffffffff03837c220742ffffffffffffff0383220642002008420010ce08200241b8076a200942002007423388202542ffffffffffffff03837c220742137e420010ce08200241d8076a200a4200200f42ffffffffffffff0383221242137e221c420010ce0820024188086a200c4200201d42ffffffffffffff0383221942137e221a420010ce08200241c8086a200b4200201742ffffffffffffff0383221742137e2214420010ce08200241d8066a200b42002006420010ce08200241a8076a200842002007420010ce08200241c8076a20094200201c420010ce08200241f8076a200a4200201a420010ce08200241b8086a200c42002014420010ce08200241c8066a200c42002006420010ce0820024198076a200b42002007420010ce08200241d8086a200842002012420010ce08200241e8076a20094200201a420010ce08200241a8086a200a42002014420010ce08200241e8056a200a42002006420010ce0820024188076a200c42002007420010ce08200241e8086a200b42002012420010ce0820024188096a200842002019420010ce0820024198086a200942002014420010ce0820024188056a200942002006420010ce08200241f8066a200a42002007420010ce08200241f8086a200c42002012420010ce0820024198096a200b42002019420010ce08200241a8096a200842002017420010ce0820022d00b81e21292003200241801c6a41206a222a2903003703002004200241801c6a41186a222b2903003703002005200241801c6a41106a222c2903002208370300200241b81e6a41086a222d200241801c6a41086a222e2903002207370300200220022903801c22063703b81e2002200620022903801c7c22063703b81e202d2007202e2903007c220737030020052008202c2903007c220837030020042004290300202b2903007c220937030020032003290300202a2903007c220a370300200241880c6a200d42002006420010ce08200241880a6a200a4200201042137e420010ce08200241980a6a20094200201342137e2212420010ce08200241e80a6a20084200201542137e220b420010ce08200241b80b6a20074200201842137e220c420010ce08200241c80b6a20074200200d420010ce08200241980c6a200642002010420010ce08200241f8096a200a42002012420010ce08200241a80a6a20094200200b420010ce08200241f80a6a20084200200c420010ce08200241880b6a20084200200d420010ce08200241d80b6a200742002010420010ce08200241a80c6a200642002013420010ce08200241e8096a200a4200200b420010ce08200241b80a6a20094200200c420010ce08200241c80a6a20094200200d420010ce08200241980b6a200842002010420010ce08200241e80b6a200742002013420010ce08200241b80c6a200642002015420010ce08200241d8096a200a4200200c420010ce08200241c8096a200a4200200d420010ce08200241d80a6a200942002010420010ce08200241a80b6a200842002013420010ce08200241f80b6a200742002015420010ce08200241c80c6a200642002018420010ce08200220022903c809221f20022903c80c7c220620022903d80a7c220720022903a80b7c220820022903f80b7c220920022903d809220e20022903b80c7c220a20022903c80a7c220c20022903980b7c220b20022903e80b7c220d20022903e809220f20022903a80c7c221020022903b80a7c221220022903880b7c221320022903d80b7c221420022903f809221120022903980c7c221520022903a80a7c221720022903f80a7c221820022903c80b7c221920022903880a221620022903880c7c221a20022903980a7c221c20022903e80a7c221d20022903b80b7c221e423388200241880a6a41086a290300200241880c6a41086a2903007c201a201654ad7c200241980a6a41086a2903007c201c201a54ad7c200241e80a6a41086a2903007c201d201c54ad7c200241b80b6a41086a2903007c201e201d54ad7c420d86847c221a423388200241f8096a41086a290300200241980c6a41086a2903007c2015201154ad7c200241a80a6a41086a2903007c2017201554ad7c200241f80a6a41086a2903007c2018201754ad7c200241c80b6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2215423388200241e8096a41086a290300200241a80c6a41086a2903007c2010200f54ad7c200241b80a6a41086a2903007c2012201054ad7c200241880b6a41086a2903007c2013201254ad7c200241d80b6a41086a2903007c2014201354ad7c2015201454ad7c420d86847c2210423388200241d8096a41086a290300200241b80c6a41086a2903007c200a200e54ad7c200241c80a6a41086a2903007c200c200a54ad7c200241980b6a41086a2903007c200b200c54ad7c200241e80b6a41086a2903007c200d200b54ad7c2010200d54ad7c420d86847c220a423388200241c8096a41086a290300200241c80c6a41086a2903007c2006201f54ad7c200241d80a6a41086a2903007c2007200654ad7c200241a80b6a41086a2903007c2008200754ad7c200241f80b6a41086a2903007c2009200854ad7c200a200954ad7c420d868442137e201e42ffffffffffffff03837c220642ffffffffffffff03833703e81d20022006423388201a42ffffffffffffff03837c3703f01d2002200a42ffffffffffffff038322063703881e2002201042ffffffffffffff038322073703801e2002201542ffffffffffffff0383220c3703f81d200241881f6a200241e81d6a106e2002200642f0ffffffffffff3f20067d220942ffffffffffffff038342f0ffffffffffff3f20077d22084233887c85420020022d00881f4101711070ad42ff01837d220a8320068522063703881e20022007200842ffffffffffffff038342f0ffffffffffff3f200c7d220b4233887c85200a8320078522073703801e200220022903e81d2208200942338842137e42d0fdffffffffff3f20087d220d42ffffffffffffff03837c85200a8320088522083703e81d200220022903f01d220942f0ffffffffffff3f20097d221042ffffffffffffff0383200d4233887c85200a8320098522093703f01d2002200c200b42ffffffffffffff038320104233887c85200a83200c85220a3703f81d20024198046a200229038805221b20022903a8097c220c20022903f8067c220b20022903f8087c220d2002290398097c221020022903980822252002290388097c221220022903e8057c22132002290388077c221420022903e8087c221520022903e807222620022903d8087c221720022903a8087c221820022903c8067c22192002290398077c221a20022903c807222720022903a8077c221c20022903f8077c221d20022903b8087c221e20022903d8067c221f20022903b807222820022903e8067c220e20022903d8077c220f2002290388087c221120022903c8087c2216423388200241b8076a41086a290300200241e8066a41086a2903007c200e202854ad7c200241d8076a41086a2903007c200f200e54ad7c20024188086a41086a2903007c2011200f54ad7c200241c8086a41086a2903007c2016201154ad7c420d86847c220e423388200241c8076a41086a290300200241a8076a41086a2903007c201c202754ad7c200241f8076a41086a2903007c201d201c54ad7c200241b8086a41086a2903007c201e201d54ad7c200241d8066a41086a2903007c201f201e54ad7c200e201f54ad7c420d86847c221c423388200241e8076a41086a290300200241d8086a41086a2903007c2017202654ad7c200241a8086a41086a2903007c2018201754ad7c200241c8066a41086a2903007c2019201854ad7c20024198076a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c221742338820024198086a41086a29030020024188096a41086a2903007c2012202554ad7c200241e8056a41086a2903007c2013201254ad7c20024188076a41086a2903007c2014201354ad7c200241e8086a41086a2903007c2015201454ad7c2017201554ad7c420d86847c221842338820024188056a41086a290300200241a8096a41086a2903007c200c201b54ad7c200241f8066a41086a2903007c200b200c54ad7c200241f8086a41086a2903007c200d200b54ad7c20024198096a41086a2903007c2010200d54ad7c2018201054ad7c420d868442137e201642ffffffffffffff03837c221042ffffffffffffff0383220c420020022903f01c220b420010ce08200241e8046a20022903901d220d42002010423388200e42ffffffffffffff03837c221042137e420010ce0820024188066a20022903881d22124200201c42ffffffffffffff0383221542137e221c420010ce08200241b8056a20022903801d22134200201742ffffffffffffff0383221942137e221a420010ce08200241c8036a20022903f81c22144200201842ffffffffffffff0383221842137e2217420010ce0820024188046a20144200200c420010ce08200241d8046a200b42002010420010ce08200241f8056a200d4200201c420010ce08200241a8056a20124200201a420010ce08200241b8036a201342002017420010ce08200241f8036a20134200200c420010ce08200241c8046a201442002010420010ce0820024198066a200b42002015420010ce0820024198056a200d4200201a420010ce08200241a8036a201242002017420010ce08200241e8036a20124200200c420010ce08200241b8046a201342002010420010ce08200241a8066a201442002015420010ce08200241c8056a200b42002019420010ce08200241c8026a200d42002017420010ce08200241d8036a200d4200200c420010ce08200241a8046a201242002010420010ce08200241b8066a201342002015420010ce08200241d8056a201442002019420010ce08200241f8046a200b42002018420010ce082002200229039805221c2002290398067c220c20022903a8037c220b20022903f8037c221020022903c8047c221220022903f805221d20022903d8047c220d20022903a8057c221320022903b8037c22142002290388047c221520022903e804221e2002290398047c22172002290388067c221820022903b8057c221920022903c8037c221a423388200241e8046a41086a29030020024198046a41086a2903007c2017201e54ad7c20024188066a41086a2903007c2018201754ad7c200241b8056a41086a2903007c2019201854ad7c200241c8036a41086a2903007c201a201954ad7c420d86847c2217423388200241f8056a41086a290300200241d8046a41086a2903007c200d201d54ad7c200241a8056a41086a2903007c2013200d54ad7c200241b8036a41086a2903007c2014201354ad7c20024188046a41086a2903007c2015201454ad7c2017201554ad7c420d86847c221342ffffffffffffff0383220d3703a01e200220022903c802221d20022903c8057c221420022903e8037c221520022903b8047c221820022903a8067c2219201342338820024198056a41086a29030020024198066a41086a2903007c200c201c54ad7c200241a8036a41086a2903007c200b200c54ad7c200241f8036a41086a2903007c2010200b54ad7c200241c8046a41086a2903007c2012201054ad7c2013201254ad7c420d86847c220c42ffffffffffffff038322103703a81e200220022903d803221e20022903f8047c220b20022903a8047c221220022903b8067c221320022903d8057c221c200c423388200241c8026a41086a290300200241c8056a41086a2903007c2014201d54ad7c200241e8036a41086a2903007c2015201454ad7c200241b8046a41086a2903007c2018201554ad7c200241a8066a41086a2903007c2019201854ad7c200c201954ad7c420d86847c220c42ffffffffffffff038322143703b01e2002200c423388200241d8036a41086a290300200241f8046a41086a2903007c200b201e54ad7c200241a8046a41086a2903007c2012200b54ad7c200241b8066a41086a2903007c2013201254ad7c200241d8056a41086a2903007c201c201354ad7c200c201c54ad7c420d868442137e201a42ffffffffffffff03837c220b42ffffffffffffff0383220c3703901e2002200b423388201742ffffffffffffff03837c220b3703981e20024188016a200c42002008420010ce08200241d8016a20064200200b42137e420010ce08200241e8026a20074200200d42137e2215420010ce0820024188026a200a4200201042137e2213420010ce08200241386a20094200201442137e2212420010ce08200241f8006a20094200200c420010ce08200241c8016a20084200200b420010ce08200241d8026a200642002015420010ce08200241f8016a200742002013420010ce08200241286a200a42002012420010ce08200241e8006a200a4200200c420010ce08200241b8016a20094200200b420010ce08200241f8026a20084200200d420010ce08200241e8016a200642002013420010ce08200241186a200742002012420010ce08200241d8006a20074200200c420010ce08200241a8016a200a4200200b420010ce0820024188036a20094200200d420010ce0820024198026a200842002010420010ce08200241086a200642002012420010ce08200241c8006a20064200200c420010ce0820024198016a20074200200b420010ce0820024198036a200a4200200d420010ce08200241a8026a200942002010420010ce08200241b8026a200842002014420010ce08200220022903e801221520022903f8027c220620022903187c220720022903687c220820022903b8017c220920022903d802221720022903c8017c220a20022903f8017c220c20022903287c220b20022903787c220d20022903d80122182002290388017c221020022903e8027c22122002290388027c221320022903387c2214423388200241d8016a41086a29030020024188016a41086a2903007c2010201854ad7c200241e8026a41086a2903007c2012201054ad7c20024188026a41086a2903007c2013201254ad7c200241386a41086a2903007c2014201354ad7c420d86847c2210423388200241d8026a41086a290300200241c8016a41086a2903007c200a201754ad7c200241f8016a41086a2903007c200c200a54ad7c200241286a41086a2903007c200b200c54ad7c200241f8006a41086a2903007c200d200b54ad7c2010200d54ad7c420d86847c220a42ffffffffffffff03833703b81f2002200229030822132002290398027c220c20022903587c220b20022903a8017c220d2002290388037c2212200a423388200241e8016a41086a290300200241f8026a41086a2903007c2006201554ad7c200241186a41086a2903007c2007200654ad7c200241e8006a41086a2903007c2008200754ad7c200241b8016a41086a2903007c2009200854ad7c200a200954ad7c420d86847c220642ffffffffffffff03833703c01f20022002290348221520022903b8027c22072002290398017c22082002290398037c220920022903a8027c220a2006423388200241086a41086a29030020024198026a41086a2903007c200c201354ad7c200241d8006a41086a2903007c200b200c54ad7c200241a8016a41086a2903007c200d200b54ad7c20024188036a41086a2903007c2012200d54ad7c2006201254ad7c420d86847c220642ffffffffffffff03833703c81f20022006423388200241c8006a41086a290300200241b8026a41086a2903007c2007201554ad7c20024198016a41086a2903007c2008200754ad7c20024198036a41086a2903007c2009200854ad7c200241a8026a41086a2903007c200a200954ad7c2006200a54ad7c420d868442137e201442ffffffffffffff03837c220642ffffffffffffff03833703a81f20022006423388201042ffffffffffffff03837c3703b01f4200210602402029450d00200241881f6a200241a81f6a106e4200210620022d00881f410171107041ff01714101460d00200241d01e6a4200370300200241c81e6a4200370300200241c01e6a4200370300200242003703b81e200241881f6a200241901e6a106e200241b81e6a4101722129410021054100210341012104024003402005200241881f6a20036a2d0000732205410020056b72417f7341800171410776107020047121042003411f460d01202920036a2d00002105200341016a21030c000b0b420021062004107041ff01714101460d00200241b81e6a41206a200241e81d6a41206a290300370300200241b81e6a41186a200241e81d6a41186a290300370300200241b81e6a41106a200241e81d6a41106a290300370300200241b81e6a41086a200241e81d6a41086a290300370300200241e81e6a200241901e6a41086a290300370300200241f01e6a200241901e6a41106a290300370300200241f81e6a200241901e6a41186a290300370300200241801f6a200241901e6a41206a290300370300200220022903e81d3703b81e200220022903901e3703e01e200241881b6a41206a200241a81f6a41206a290300370300200241881b6a41186a200241a81f6a41186a290300370300200241881b6a41106a200241a81f6a41106a290300370300200241881b6a41086a200241a81f6a41086a290300370300200220022903a81f3703881b200241b01b6a200241b81e6a41d00010c9081a420121060b200241b81e6a210320064200510d01200241b01a6a41036a200241b01b6a41d00010c9081a200241881a6a41206a2203200241881b6a41206a290300370300200241881a6a41186a2204200241881b6a41186a290300370300200241881a6a41106a2205200241881b6a41106a290300370300200241881a6a41086a2229200241881b6a41086a290300370300200220022903881b3703881a200241b5196a200241b01a6a41d30010c9081a20024188196a41206a222a200329030037030020024188196a41186a2203200429030037030020024188196a41106a2204200529030037030020024188196a41086a22052029290300370300200220022903881a37038819200041086a200241b5196a41036a41d00010c9081a200041e0006a4200370300200041d8006a4201370300200041e8006a4200370300200041f0006a4200370300200041f8006a420037030020004180016a20022903881937000020004188016a200529030037000020004190016a200429030037000020004198016a2003290300370000200041a0016a202a290300370000200041a8016a2001290000370000200041b0016a200141086a290000370000200041b8016a200141106a290000370000200041c0016a200141186a290000370000410021030c020b200241b81e6a21030b200241b01a6a410f6a2003410f6a290000370000200241b01a6a41086a200341086a290000370300200220032900003703b01a200241b5196a200241b01a6a41d30010c9081a41012103200041013a0004200020022900b5193700052000410d6a200241b5196a41086a290000370000200041146a200241b5196a410f6a2900003700000b20002003360200200241d01f6a24000ba3990204067f1a7e157f407e230041d0ce006b22042400200441d0c6006a200341d00110c9081a200441d0c6006a41e0eec4004109200241a0016a4120108b0120044180c5006a200441d0c6006a41d00110c9081a200441a0c8006a41386a22024200370300200441a0c8006a41306a22034200370300200441a0c8006a41286a22054200370300200441a0c8006a41206a22064200370300200441a0c8006a41186a22074200370300200441a0c8006a41106a22084200370300200441a0c8006a41086a22094200370300200442003703a04820044180c5006a418aa2c6004107200441a0c8006a41c000108d012008310000210a2009310000210b2007310000210c20043100b248210d20043100b148210e20043100af48210f20043100ad48211020043100ae48211120043100bf48211220043100be48211320043100bd48211420043100bc48211520043100bb48211620043100ba48211720043100ac48211820043100ab48211920043100aa48211a20043100a948211b20043100a748211c20043100b948211d20043100b748211e20043100b648211f20043100b348212020043100b448212120043100b5482122200420043502a04820043100a4484220868420043100a5484228868420043100a64822234230868442ffffffffffffff03833703e04820042020202142088684202242108684201f42188684201e42208684200c42288684201d4230868442018842ffffffffffffff03833703f84820042023201c42088684200b42108684201b42188684201a4220868420194228868420184230868442038842ffffffffffffff03833703e8482004200c201d42088684201742108684201642188684201542208684201442288684201342308684201242388684420c8842ffffffffffffff03833703804920042018201042088684201142108684200f42188684200a42208684200e42288684200d4230868420204238868442068842ffffffffffffff03833703f04820044188c9006a200441e0c8006a1074200441a8ca006a41186a20022903002220370300200441a8ca006a41106a2003290300220a370300200441a8ca006a41086a2005290300220b37030020042006290300220d3703a84a20043100ba4a210e20043100b94a210f20043100b74a211020043100b54a211120043100b64a211220043100c74a211320043100c64a211420043100c54a211520043100c44a211620043100c34a211720043100c24a211920043100b44a210c20043100b34a211a20043100b24a211b20043100b14a211c20043100af4a211e20043100c14a211820043100bf4a211f20043100be4a212120043100bb4a211d20043100bc4a212220043100bd4a21232004200d42ffffffff0f8320043100ac4a4220868420043100ad4a4228868420043100ae4a220d4230868442ffffffffffffff03833703c84a2004201d202242088684202342108684202142188684201f42208684202042ff018322204228868420184230868442018842ffffffffffffff03833703e04a2004200d201e42088684200b42ff018342108684201c42188684201b42208684201a42288684200c4230868442038842ffffffffffffff03833703d04a20042018420886202084201942108684201742188684201642208684201542288684201442308684201342388684420c8842ffffffffffffff03833703e84a2004200c201142088684201242108684201042188684200a42ff018342208684200f42288684200e42308684201d4238868442068842ffffffffffffff03833703d84a200441f0ca006a200441c8ca006a1074200441d0c6006a41106a2203200441f0ca006a41386a290300220b370300200441d0c6006a41086a2224200441f0ca006a41306a290300220d20042903f84a220e7c3703002003200b20042903804b220f7c370300200441d0c6006a41186a2208200441f0ca006a41c0006a290300221020042903884b22117c370300200441d0c6006a41206a2209200441f0ca006a41c8006a290300221220042903904b22137c370300200420042903984b221420042903f04a22157c3703d046200441a8ce006a41206a2202200441f0ca006a41f0006a290300370300200441a8ce006a41186a2205200441f0ca006a41e8006a290300370300200441a8ce006a41106a2206200441f0ca006a41e0006a290300370300200441a8ce006a41086a2207200441f0ca006a41d8006a290300370300200420042903c04b3703a84e200441d0c1006a20042903e84b220c420042d9e2cbb5c2f2a603420010ce08200441a0c2006a200441f0ca006a4198016a29030022184200428ee0b9a98cbfbd1f420010ce08200441f0c2006a200441f0ca006a4190016a290300221d420042968c8a82a4c39824420010ce08200441c0c3006a200441f0ca006a4188016a2903002220420042d587a4ceaceea43d420010ce0820044190c4006a200441f0ca006a4180016a290300220a420042edd39cadab84b215420010ce08200441a0c4006a200a420042d9e2cbb5c2f2a603420010ce08200441e0c1006a200c420042fabaabb1878ad401420010ce08200441b0c2006a2018420042968c8a82a4c39824420010ce0820044180c3006a201d420042d587a4ceaceea43d420010ce08200441d0c3006a2020420042edd39cadab84b215420010ce08200441e0c3006a2020420042d9e2cbb5c2f2a603420010ce08200441b0c4006a200a420042fabaabb1878ad401420010ce08200441f0c1006a200c420042d2808e80cce8f301420010ce08200441c0c2006a2018420042d587a4ceaceea43d420010ce0820044190c3006a201d420042edd39cadab84b215420010ce08200441a0c3006a201d420042d9e2cbb5c2f2a603420010ce08200441f0c3006a2020420042fabaabb1878ad401420010ce08200441c0c4006a200a420042d2808e80cce8f301420010ce0820044180c2006a200c420042f7f281baccf19c03420010ce08200441d0c2006a2018420042edd39cadab84b215420010ce08200441e0c2006a2018420042d9e2cbb5c2f2a603420010ce08200441b0c3006a201d420042fabaabb1878ad401420010ce0820044180c4006a2020420042d2808e80cce8f301420010ce08200441d0c4006a200a420042f7f281baccf19c03420010ce0820044190c2006a200c420042ffdb95eed98d9001420010ce08200441d0c6006a41c8006a2225201220137d42f0ffffffffffff3f7c220c42ffffffffffffff0383201020117d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41c0006a2226201842ffffffffffffff0383200b200f7d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41386a2227201842ffffffffffffff0383200d200e7d42f0ffffffffffff3f7c22184233887c370300200441d0c6006a41306a2228201842ffffffffffffff0383201420157d42d0fdffffffffff3f7c22184233887c3703002004200c42338842137e201842ffffffffffffff03837c3703f846200441d0c6006a41f0006a22292002290300370300200441d0c6006a41e8006a222a2005290300370300200441d0c6006a41e0006a222b2006290300370300200441d0c6006a41d8006a222c2007290300370300200420042903a84e3703a047200441d0c6006a4188016a222d20042903c042221320042903f0417c220c2004290390437c221820042903e0437c221d20042903b0447c222020042903b042221420042903e0417c220a2004290380437c220b20042903d0437c220d20042903a0447c220e20042903a042221520042903d0417c220f20042903f0427c221020042903c0437c22112004290390447c2212423388200441a0c2006a41086a290300200441d0c1006a41086a2903007c200f201554ad7c200441f0c2006a41086a2903007c2010200f54ad7c200441c0c3006a41086a2903007c2011201054ad7c20044190c4006a41086a2903007c2012201154ad7c420d86847c220f423388200441b0c2006a41086a290300200441e0c1006a41086a2903007c200a201454ad7c20044180c3006a41086a2903007c200b200a54ad7c200441d0c3006a41086a2903007c200d200b54ad7c200441a0c4006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383370300200441d0c6006a4190016a222e20042903d04222112004290380427c220b20042903a0437c220d20042903f0437c220e20042903c0447c2210200a423388200441c0c2006a41086a290300200441f0c1006a41086a2903007c200c201354ad7c20044190c3006a41086a2903007c2018200c54ad7c200441e0c3006a41086a2903007c201d201854ad7c200441b0c4006a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff0383370300200441d0c6006a4198016a222f20042903e04222132004290390427c221820042903b0437c221d2004290380447c222020042903d0447c220a200c423388200441d0c2006a41086a29030020044180c2006a41086a2903007c200b201154ad7c200441a0c3006a41086a2903007c200d200b54ad7c200441f0c3006a41086a2903007c200e200d54ad7c200441c0c4006a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff0383370300200441d0c6006a4180016a2230200c423388200441e0c2006a41086a29030020044190c2006a41086a2903007c2018201354ad7c200441b0c3006a41086a2903007c201d201854ad7c20044180c4006a41086a2903007c2020201d54ad7c200441d0c4006a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c423388200f42ffffffffffffff03837c3703002004200c42ffffffffffffff03833703c84720044190cc006a41206a223120044188c9006a41c8006a223229030037030020044190cc006a41186a223320044188c9006a41c0006a2234290300222037030020044190cc006a41106a223520044188c9006a41386a2236290300221d37030020044190cc006a41086a223720044188c9006a41306a22382903002218370300200420042903b049220c3703904c2004200c2004290388497c220c3703904c203720182004290390497c22183703002035201d2004290398497c221d3703002033202020042903a0497c22203703002031203129030020042903a8497c220a370300200441c03e6a20042903d046220b4200200c420010ce08200441c0c1006a200a42002024290300220d42137e420010ce08200441f0c0006a202042002003290300220e42137e2212420010ce08200441a0c0006a201d42002008290300221042137e2211420010ce08200441d03f6a201842002009290300221342137e220f420010ce08200441d03e6a20184200200b420010ce08200441b0c1006a200c4200200d420010ce08200441e0c0006a200a42002012420010ce0820044190c0006a202042002011420010ce08200441c03f6a201d4200200f420010ce08200441e03e6a201d4200200b420010ce08200441a0c1006a20184200200d420010ce08200441d0c0006a200c4200200e420010ce0820044180c0006a200a42002011420010ce08200441b03f6a20204200200f420010ce08200441f03e6a20204200200b420010ce0820044190c1006a201d4200200d420010ce08200441c0c0006a20184200200e420010ce08200441f03f6a200c42002010420010ce08200441a03f6a200a4200200f420010ce08200441803f6a200a4200200b420010ce0820044180c1006a20204200200d420010ce08200441b0c0006a201d4200200e420010ce08200441e03f6a201842002010420010ce08200441903f6a200c42002013420010ce082038290300210b2036290300210a2034290300211d200429039049210d200429039849210e20042903a0492120200441f03b6a20042903f846220c4200203229030020042903a8497d42f0ffffffffffff3f7c220f42338842137e20042903b0492004290388497d42d0fdffffffffff3f7c221242ffffffffffffff03837c2218420010ce08200441f03d6a200f42ffffffffffffff0383201d20207d42f0ffffffffffff3f7c220f4233887c221d42002028290300222042137e420010ce08200441b03d6a200f42ffffffffffffff0383200a200e7d42f0ffffffffffff3f7c220f4233887c220a42002027290300220e42137e2213420010ce08200441f03c6a200f42ffffffffffffff0383200b200d7d42f0ffffffffffff3f7c220d4233887c220b42002026290300221042137e2211420010ce08200441b03c6a200d42ffffffffffffff038320124233887c220d42002025290300221242137e220f420010ce08200441e03b6a200d4200200c420010ce08200441b03e6a201842002020420010ce08200441a03d6a201d42002013420010ce08200441e03c6a200a42002011420010ce08200441a03c6a200b4200200f420010ce08200441d03b6a200b4200200c420010ce08200441a03e6a200d42002020420010ce08200441e03d6a20184200200e420010ce08200441d03c6a201d42002011420010ce08200441903c6a200a4200200f420010ce08200441c03b6a200a4200200c420010ce08200441903e6a200b42002020420010ce08200441d03d6a200d4200200e420010ce08200441903d6a201842002010420010ce08200441803c6a201d4200200f420010ce08200441b03b6a201d4200200c420010ce08200441803e6a200a42002020420010ce08200441c03d6a200b4200200e420010ce08200441803d6a200d42002010420010ce08200441c03c6a201842002012420010ce08200420042903d03c221320042903e03d7c220c20042903903c7c221820042903d03b7c221d20042903a03e7c222020042903a03d221420042903b03e7c220a20042903e03c7c220b20042903a03c7c220d20042903e03b7c220e20042903f03d221520042903f03b7c220f20042903b03d7c221020042903f03c7c221120042903b03c7c2212423388200441f03d6a41086a290300200441f03b6a41086a2903007c200f201554ad7c200441b03d6a41086a2903007c2010200f54ad7c200441f03c6a41086a2903007c2011201054ad7c200441b03c6a41086a2903007c2012201154ad7c420d86847c220f423388200441a03d6a41086a290300200441b03e6a41086a2903007c200a201454ad7c200441e03c6a41086a2903007c200b200a54ad7c200441a03c6a41086a2903007c200d200b54ad7c200441e03b6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703c84c200420042903803c221120042903903d7c220b20042903c03b7c220d20042903903e7c220e20042903d03d7c2210200a423388200441d03c6a41086a290300200441e03d6a41086a2903007c200c201354ad7c200441903c6a41086a2903007c2018200c54ad7c200441d03b6a41086a2903007c201d201854ad7c200441a03e6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff03833703d04c200420042903b03b221320042903c03c7c221820042903803e7c221d20042903c03d7c222020042903803d7c220a200c423388200441803c6a41086a290300200441903d6a41086a2903007c200b201154ad7c200441c03b6a41086a2903007c200d200b54ad7c200441903e6a41086a2903007c200e200d54ad7c200441d03d6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff03833703d84c2004200c423388200441b03b6a41086a290300200441c03c6a41086a2903007c2018201354ad7c200441803e6a41086a2903007c201d201854ad7c200441c03d6a41086a2903007c2020201d54ad7c200441803d6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff03833703b84c2004200c423388200f42ffffffffffffff03837c3703c04c200441e03a6a20042903c847220c420020042903804a2218420010ce08200441d03a6a20044188c9006a4198016a290300221d42002030290300222042137e420010ce08200441803a6a20044188c9006a4190016a290300220a4200202d290300220e42137e2212420010ce08200441b0396a20044188c9006a4188016a290300220b4200202e290300221042137e2211420010ce08200441e0386a20044188c9006a4180016a290300220d4200202f290300221342137e220f420010ce08200441d0386a200d4200200c420010ce08200441a03b6a201842002020420010ce08200441c03a6a201d42002012420010ce08200441f0396a200a42002011420010ce08200441a0396a200b4200200f420010ce0820044190396a200b4200200c420010ce08200441c0386a200d42002020420010ce08200441903b6a20184200200e420010ce08200441b03a6a201d42002011420010ce08200441e0396a200a4200200f420010ce08200441d0396a200a4200200c420010ce0820044180396a200b42002020420010ce08200441b0386a200d4200200e420010ce08200441803b6a201842002010420010ce08200441a03a6a201d4200200f420010ce08200441903a6a201d4200200c420010ce08200441c0396a200a42002020420010ce08200441f0386a200b4200200e420010ce08200441a0386a200d42002010420010ce08200441f03a6a201842002013420010ce08200420042903903a221c20042903f03a7c220c20042903c0397c221820042903f0387c221d20042903a0387c222020042903a03a221e20042903803b7c220a20042903d0397c220b2004290380397c220d20042903b0387c220e20042903b03a221f20042903903b7c220f20042903e0397c22102004290390397c221120042903c0387c221220042903c03a222120042903a03b7c221320042903f0397c221420042903a0397c221520042903d0387c221620042903d03a222220042903e03a7c221720042903803a7c221920042903b0397c221a20042903e0387c221b423388200441d03a6a41086a290300200441e03a6a41086a2903007c2017202254ad7c200441803a6a41086a2903007c2019201754ad7c200441b0396a41086a2903007c201a201954ad7c200441e0386a41086a2903007c201b201a54ad7c420d86847c2217423388200441c03a6a41086a290300200441a03b6a41086a2903007c2013202154ad7c200441f0396a41086a2903007c2014201354ad7c200441a0396a41086a2903007c2015201454ad7c200441d0386a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441b03a6a41086a290300200441903b6a41086a2903007c200f201f54ad7c200441e0396a41086a2903007c2010200f54ad7c20044190396a41086a2903007c2011201054ad7c200441c0386a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03a6a41086a290300200441803b6a41086a2903007c200a201e54ad7c200441d0396a41086a2903007c200b200a54ad7c20044180396a41086a2903007c200d200b54ad7c200441b0386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703804d2004200f42ffffffffffffff03833703f84c2004201342ffffffffffffff03833703f04c2004200a423388200441903a6a41086a290300200441f03a6a41086a2903007c200c201c54ad7c200441c0396a41086a2903007c2018200c54ad7c200441f0386a41086a2903007c201d201854ad7c200441a0386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c3703e84c2004200c42ffffffffffffff03833703e04c20044190356a20042903a047220c420020042903d8492218420010ce08200441a0366a20044188c9006a41f0006a290300221d4200202c290300222042137e420010ce08200441e0366a20044188c9006a41e8006a290300220a4200202b290300220e42137e2212420010ce08200441a0376a20044188c9006a41e0006a290300220b4200202a290300221042137e2211420010ce08200441e0376a20044188c9006a41d8006a290300220d42002029290300221342137e220f420010ce08200441e0356a200d4200200c420010ce08200441a0356a201842002020420010ce08200441b0366a201d42002012420010ce08200441f0366a200a42002011420010ce08200441b0376a200b4200200f420010ce08200441f0356a200b4200200c420010ce08200441f0376a200d42002020420010ce08200441b0356a20184200200e420010ce08200441c0366a201d42002011420010ce0820044180376a200a4200200f420010ce0820044180366a200a4200200c420010ce08200441c0376a200b42002020420010ce0820044180386a200d4200200e420010ce08200441c0356a201842002010420010ce08200441d0366a201d4200200f420010ce0820044190366a201d4200200c420010ce0820044190376a200a42002020420010ce08200441d0376a200b4200200e420010ce0820044190386a200d42002010420010ce08200441d0356a201842002013420010ce082004200429039036221c20042903d0357c220c2004290390377c221820042903d0377c221d2004290390387c222020042903d036221e20042903c0357c220a2004290380367c220b20042903c0377c220d2004290380387c220e20042903c036221f20042903b0357c220f2004290380377c221020042903f0357c221120042903f0377c221220042903b036222120042903a0357c221320042903f0367c221420042903b0377c221520042903e0357c221620042903a03622222004290390357c221720042903e0367c221920042903a0377c221a20042903e0377c221b423388200441a0366a41086a29030020044190356a41086a2903007c2017202254ad7c200441e0366a41086a2903007c2019201754ad7c200441a0376a41086a2903007c201a201954ad7c200441e0376a41086a2903007c201b201a54ad7c420d86847c2217423388200441b0366a41086a290300200441a0356a41086a2903007c2013202154ad7c200441f0366a41086a2903007c2014201354ad7c200441b0376a41086a2903007c2015201454ad7c200441e0356a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441c0366a41086a290300200441b0356a41086a2903007c200f201f54ad7c20044180376a41086a2903007c2010200f54ad7c200441f0356a41086a2903007c2011201054ad7c200441f0376a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441d0366a41086a290300200441c0356a41086a2903007c200a201e54ad7c20044180366a41086a2903007c200b200a54ad7c200441c0376a41086a2903007c200d200b54ad7c20044180386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42338820044190366a41086a290300200441d0356a41086a2903007c200c201c54ad7c20044190376a41086a2903007c2018200c54ad7c200441d0376a41086a2903007c201d201854ad7c20044190386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c221842ffffffffffffff0383220c3703884d20042018423388201742ffffffffffffff03837c22183703904d2004200a42ffffffffffffff0383221d3703a84d2004200f42ffffffffffffff038322203703a04d2004201342ffffffffffffff0383220a3703984d200441b0cd006a41086a2231201820187c370300200441b0cd006a41106a2224200a200a7c370300200441b0cd006a41186a2225202020207c370300200441b0cd006a41206a2226201d201d7c3703002004200c200c7c3703b04d20042903c04c211c20042903c84c211e20042903d04c211f20042903d84c212120042903b84c2122200420042903803f222320042903903f7c220c2004290380417c221820042903b0407c221d20042903e03f7c222020042903a03f223920042903f03f7c220a20042903f03e7c220b2004290390417c220d20042903c0407c220e200429038040223a20042903d0407c220f20042903b03f7c221020042903e03e7c221120042903a0417c221220042903e040223b20042903b0417c22132004290390407c221420042903c03f7c221520042903d03e7c221620042903c041223c20042903c03e7c221720042903f0407c221920042903a0407c221a20042903d03f7c221b423388200441c0c1006a41086a290300200441c03e6a41086a2903007c2017203c54ad7c200441f0c0006a41086a2903007c2019201754ad7c200441a0c0006a41086a2903007c201a201954ad7c200441d03f6a41086a2903007c201b201a54ad7c420d86847c2217423388200441e0c0006a41086a290300200441b0c1006a41086a2903007c2013203b54ad7c20044190c0006a41086a2903007c2014201354ad7c200441c03f6a41086a2903007c2015201454ad7c200441d03e6a41086a2903007c2016201554ad7c2017201654ad7c420d86847c221342338820044180c0006a41086a290300200441d0c0006a41086a2903007c200f203a54ad7c200441b03f6a41086a2903007c2010200f54ad7c200441e03e6a41086a2903007c2011201054ad7c200441a0c1006a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03f6a41086a290300200441f03f6a41086a2903007c200a203954ad7c200441f03e6a41086a2903007c200b200a54ad7c20044190c1006a41086a2903007c200d200b54ad7c200441c0c0006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441803f6a41086a290300200441903f6a41086a2903007c200c202354ad7c20044180c1006a41086a2903007c2018200c54ad7c200441b0c0006a41086a2903007c201d201854ad7c200441e03f6a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c220e3703884e2004200c42ffffffffffffff0383220b3703804e2004200a42ffffffffffffff0383220a3703a04e2004200f42ffffffffffffff0383220d3703984e2004201342ffffffffffffff0383220f3703904e2004200b20042903b84c7c3703804e2004200e20042903c04c7c3703884e2004200f20042903c84c7c3703904e2004200d20042903d04c7c3703984e2004200a20042903d84c7c3703a04e2002202629030037030020052025290300222037030020062024290300221d370300200720312903002218370300200420042903b04d220c3703a84e2004200c20042903e04c7c220c3703a84e2007201820042903e84c7c22183703002006201d20042903f04c7c221d3703002005202020042903f84c7c22123703002002200229030020042903804d7c2215370300200441f0276a202629030020042903804d7d42f0ffffffffffff3f7c221042338842137e20042903b04d20042903e04c7d42d0fdffffffffff3f7c221142ffffffffffffff03837c22204200200a20217d42f0ffffffffffff3f7c221342338842137e200b20227d42d0fdffffffffff3f7c221442ffffffffffffff03837c220a420010ce0820044180356a201342ffffffffffffff0383200d201f7d42f0ffffffffffff3f7c220d4233887c220b4200203129030020042903e84c7d42f0ffffffffffff3f7c221642ffffffffffffff038320114233887c221342137e2223420010ce0820044180346a200d42ffffffffffffff0383200f201e7d42f0ffffffffffff3f7c220f4233887c220d4200202429030020042903f04c7d42f0ffffffffffff3f7c221142ffffffffffffff038320164233887c221942137e221e420010ce0820044180336a200f42ffffffffffffff0383200e201c7d42f0ffffffffffff3f7c220f4233887c220e4200202529030020042903f84c7d42f0ffffffffffff3f7c221642ffffffffffffff038320114233887c221c42137e221b420010ce08200441d0266a200f42ffffffffffffff038320144233887c220f4200201042ffffffffffffff038320164233887c222142137e2216420010ce08200441c0266a200f42002020420010ce08200441e0276a200a42002013420010ce08200441f0336a200b4200201e420010ce08200441f0326a200d4200201b420010ce0820044180326a200e42002016420010ce0820044180316a200e42002020420010ce08200441b0266a200f42002013420010ce08200441d0276a200a42002019420010ce08200441e0326a200b4200201b420010ce08200441f0316a200d42002016420010ce08200441f0306a200d42002020420010ce08200441e0346a200e42002013420010ce0820044180256a200f42002019420010ce08200441c0276a200a4200201c420010ce08200441e0316a200b42002016420010ce08200441e0306a200b42002020420010ce08200441d0346a200d42002013420010ce08200441c0336a200e42002019420010ce08200441d0236a200f4200201c420010ce08200441b0276a200a42002021420010ce08200441902b6a200c420020042903804e2210420010ce08200441802d6a20042903a04e221a4200201842137e420010ce08200441802e6a20042903984e22174200201d42137e2239420010ce08200441802f6a20042903904e22144200201242137e2222420010ce0820044180306a20042903884e22114200201542137e221f420010ce08200441f02f6a20114200200c420010ce08200441a02b6a201042002018420010ce08200441f02c6a201a42002039420010ce08200441f02d6a201742002022420010ce08200441f02e6a20144200201f420010ce08200441e02e6a20144200200c420010ce08200441e02f6a201142002018420010ce08200441b02b6a20104200201d420010ce08200441e02c6a201a42002022420010ce08200441e02d6a20174200201f420010ce08200441d02d6a20174200200c420010ce08200441d02e6a201442002018420010ce08200441d02f6a20114200201d420010ce08200441c02b6a201042002012420010ce08200441d02c6a201a4200201f420010ce08200441c02c6a201a4200200c420010ce08200441c02d6a201742002018420010ce08200441c02e6a20144200201d420010ce08200441c02f6a201142002012420010ce08200441d02b6a201042002015420010ce08200441d0306a20204200200c420010ce08200441f0346a201542002023420010ce08200441e0336a20124200201e420010ce08200441d0326a201d4200201b420010ce08200441d0316a201842002016420010ce08200441c0306a201842002020420010ce08200441c0346a200c42002013420010ce08200441d0336a20154200201e420010ce08200441c0326a20124200201b420010ce08200441c0316a201d42002016420010ce08200441b0306a201d42002020420010ce08200441b0346a201842002013420010ce08200441b0336a200c42002019420010ce08200441b0326a20154200201b420010ce08200441b0316a201242002016420010ce08200441a0306a201242002020420010ce08200441a0346a201d42002013420010ce08200441a0336a201842002019420010ce08200441a0326a200c4200201c420010ce08200441a0316a201542002016420010ce0820044190306a201542002020420010ce0820044190346a201242002013420010ce0820044190336a201d42002019420010ce0820044190326a20184200201c420010ce0820044190316a200c42002021420010ce08200441a0276a20104200200a420010ce08200441902f6a200b4200201142137e420010ce08200441a02e6a200d4200201442137e221d420010ce08200441b02d6a200e4200201742137e2218420010ce0820044190106a200f4200201a42137e220c420010ce0820044180106a200f42002010420010ce0820044190276a200a42002011420010ce08200441902e6a200b4200201d420010ce08200441a02d6a200d42002018420010ce08200441b02c6a200e4200200c420010ce08200441e02b6a200e42002010420010ce08200441f00f6a200f42002011420010ce0820044180276a200a42002014420010ce08200441902d6a200b42002018420010ce08200441a02c6a200d4200200c420010ce08200441f02b6a200d42002010420010ce08200441b02f6a200e42002011420010ce08200441900f6a200f42002014420010ce08200441f0266a200a42002017420010ce08200441902c6a200b4200200c420010ce08200441802c6a200b42002010420010ce08200441a02f6a200d42002011420010ce08200441b02e6a200e42002014420010ce08200441b00e6a200f42002017420010ce08200441e0266a200a4200201a420010ce08200420042903e02c221320042903b02b7c220c20042903e02d7c221820042903e02e7c221d20042903e02f7c222020042903f02c221420042903a02b7c220a20042903f02d7c220b20042903f02e7c220d20042903f02f7c220e20042903802d221520042903902b7c220f20042903802e7c221020042903802f7c22112004290380307c2212423388200441802d6a41086a290300200441902b6a41086a2903007c200f201554ad7c200441802e6a41086a2903007c2010200f54ad7c200441802f6a41086a2903007c2011201054ad7c20044180306a41086a2903007c2012201154ad7c420d86847c220f423388200441f02c6a41086a290300200441a02b6a41086a2903007c200a201454ad7c200441f02d6a41086a2903007c200b200a54ad7c200441f02e6a41086a2903007c200d200b54ad7c200441f02f6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff038322173703c04d200420042903d02c221120042903c02b7c220b20042903d02d7c220d20042903d02e7c220e20042903d02f7c2210200a423388200441e02c6a41086a290300200441b02b6a41086a2903007c200c201354ad7c200441e02d6a41086a2903007c2018200c54ad7c200441e02e6a41086a2903007c201d201854ad7c200441e02f6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff038322213703c84d200420042903c02c221320042903d02b7c221820042903c02d7c221d20042903c02e7c222020042903c02f7c220a200c423388200441d02c6a41086a290300200441c02b6a41086a2903007c200b201154ad7c200441d02d6a41086a2903007c200d200b54ad7c200441d02e6a41086a2903007c200e200d54ad7c200441d02f6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff038322233703d04d2004200c423388200441c02c6a41086a290300200441d02b6a41086a2903007c2018201354ad7c200441c02d6a41086a2903007c201d201854ad7c200441c02e6a41086a2903007c2020201d54ad7c200441c02f6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff038322143703b04d2004200c423388200f42ffffffffffffff03837c22153703b84d20044180286a20042903903022222004290390317c220c2004290390347c22182004290390337c221d2004290390327c222020042903a031223920042903a0327c220a20042903a0307c220b20042903a0347c220d20042903a0337c220e20042903b032223a20042903b0337c220f20042903b0317c221020042903b0307c221120042903b0347c221220042903d033223b20042903c0347c221320042903c0327c221620042903c0317c221920042903c0307c221a20042903f034223c20042903d0307c221b20042903e0337c221c20042903d0327c221e20042903d0317c221f423388200441f0346a41086a290300200441d0306a41086a2903007c201b203c54ad7c200441e0336a41086a2903007c201c201b54ad7c200441d0326a41086a2903007c201e201c54ad7c200441d0316a41086a2903007c201f201e54ad7c420d86847c221b423388200441d0336a41086a290300200441c0346a41086a2903007c2013203b54ad7c200441c0326a41086a2903007c2016201354ad7c200441c0316a41086a2903007c2019201654ad7c200441c0306a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c2213423388200441b0326a41086a290300200441b0336a41086a2903007c200f203a54ad7c200441b0316a41086a2903007c2010200f54ad7c200441b0306a41086a2903007c2011201054ad7c200441b0346a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a0316a41086a290300200441a0326a41086a2903007c200a203954ad7c200441a0306a41086a2903007c200b200a54ad7c200441a0346a41086a2903007c200d200b54ad7c200441a0336a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383223d42f0ffffffffffff3f7c223e20237d221242338842137e200a42338820044190306a41086a29030020044190316a41086a2903007c200c202254ad7c20044190346a41086a2903007c2018200c54ad7c20044190336a41086a2903007c201d201854ad7c20044190326a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201f42ffffffffffffff03837c222042ffffffffffffff0383223f42d0fdffffffffff3f7c224020147d220a42ffffffffffffff03837c220c4200203f20147c2218420010ce08200441c0296a203d20237c221d42002020423388201b42ffffffffffffff03837c224142f0ffffffffffff3f7c224220157d220b42ffffffffffffff0383200a4233887c222042137e420010ce08200441a02a6a200f42ffffffffffffff0383224320217c220a4200201342ffffffffffffff0383224442f0ffffffffffff3f7c224520177d220d42ffffffffffffff0383200b4233887c220e42137e2213420010ce08200441b02a6a204420177c220b4200204342f0ffffffffffff3f7c224620217d220f42ffffffffffffff0383200d4233887c221042137e2211420010ce08200441d0296a204120157c220d4200201242ffffffffffffff0383200f4233887c221242137e220f420010ce0820044180296a200d4200200c420010ce0820044190286a201842002020420010ce08200441902a6a201d42002013420010ce08200441e02a6a200a42002011420010ce08200441c02a6a200b4200200f420010ce08200441f0286a200b4200200c420010ce08200441b0296a200d42002020420010ce08200441a0286a20184200200e420010ce08200441d02a6a201d42002011420010ce08200441f02a6a200a4200200f420010ce08200441e0286a200a4200200c420010ce08200441a0296a200b42002020420010ce08200441e0296a200d4200200e420010ce08200441b0286a201842002010420010ce08200441802b6a201d4200200f420010ce08200441d0286a201d4200200c420010ce0820044190296a200a42002020420010ce08200441802a6a200b4200200e420010ce08200441f0296a200d42002010420010ce08200441c0286a201842002012420010ce0820044180216a2014420020042903e030222220042903b0277c220c20042903d0347c221820042903c0337c221d20042903d0237c222020042903e031223920042903c0277c220a20042903f0307c220b20042903e0347c220d2004290380257c220e20042903e032223a20042903d0277c220f20042903f0317c22102004290380317c221120042903b0267c221220042903f033223b20042903e0277c221320042903f0327c22162004290380327c221920042903c0267c221a200429038035223c20042903f0277c221b2004290380347c221c2004290380337c221e20042903d0267c221f42338820044180356a41086a290300200441f0276a41086a2903007c201b203c54ad7c20044180346a41086a2903007c201c201b54ad7c20044180336a41086a2903007c201e201c54ad7c200441d0266a41086a2903007c201f201e54ad7c420d86847c221b423388200441f0336a41086a290300200441e0276a41086a2903007c2013203b54ad7c200441f0326a41086a2903007c2016201354ad7c20044180326a41086a2903007c2019201654ad7c200441c0266a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c2213423388200441e0326a41086a290300200441d0276a41086a2903007c200f203a54ad7c200441f0316a41086a2903007c2010200f54ad7c20044180316a41086a2903007c2011201054ad7c200441b0266a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441e0316a41086a290300200441c0276a41086a2903007c200a203954ad7c200441f0306a41086a2903007c200b200a54ad7c200441e0346a41086a2903007c200d200b54ad7c20044180256a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441e0306a41086a290300200441b0276a41086a2903007c200c202254ad7c200441d0346a41086a2903007c2018200c54ad7c200441c0336a41086a2903007c201d201854ad7c200441d0236a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201f42ffffffffffffff03837c220c42ffffffffffffff03832218420010ce08200441b0226a200a42ffffffffffffff0383221d4200201542137e420010ce08200441e0236a200f42ffffffffffffff038322204200201742137e220e420010ce0820044190256a201342ffffffffffffff0383220a4200202142137e220d420010ce08200441a0226a200c423388201b42ffffffffffffff03837c220b4200202342137e220c420010ce0820044190226a200b42002014420010ce08200441f0206a201842002015420010ce08200441c0226a201d4200200e420010ce08200441f0236a20204200200d420010ce08200441a0256a200a4200200c420010ce08200441b0256a200a42002014420010ce0820044180226a200b42002015420010ce08200441e0206a201842002017420010ce08200441d0226a201d4200200d420010ce0820044180246a20204200200c420010ce0820044190246a202042002014420010ce08200441c0256a200a42002015420010ce08200441f0216a200b42002017420010ce08200441d0206a201842002021420010ce08200441e0226a201d4200200c420010ce08200441f0226a201d42002014420010ce08200441a0246a202042002015420010ce08200441d0256a200a42002017420010ce08200441e0216a200b42002021420010ce08200441c0206a201842002023420010ce08200420042903d022221c20042903e0207c220c2004290380247c220d20042903b0257c220e2004290380227c220f20042903c022221e20042903f0207c221020042903f0237c221120042903a0257c22122004290390227c221320042903b022221f2004290380217c221620042903e0237c22192004290390257c221a20042903a0227c221b423388200441b0226a41086a29030020044180216a41086a2903007c2016201f54ad7c200441e0236a41086a2903007c2019201654ad7c20044190256a41086a2903007c201a201954ad7c200441a0226a41086a2903007c201b201a54ad7c420d86847c2216423388200441c0226a41086a290300200441f0206a41086a2903007c2010201e54ad7c200441f0236a41086a2903007c2011201054ad7c200441a0256a41086a2903007c2012201154ad7c20044190226a41086a2903007c2013201254ad7c2016201354ad7c420d86847c221042ffffffffffffff03833703904e200420042903e022221a20042903d0207c22112004290390247c221220042903c0257c221320042903f0217c22192010423388200441d0226a41086a290300200441e0206a41086a2903007c200c201c54ad7c20044180246a41086a2903007c200d200c54ad7c200441b0256a41086a2903007c200e200d54ad7c20044180226a41086a2903007c200f200e54ad7c2010200f54ad7c420d86847c220c42ffffffffffffff03833703984e200420042903f022221c20042903c0207c220d20042903a0247c220e20042903d0257c220f20042903e0217c2210200c423388200441e0226a41086a290300200441d0206a41086a2903007c2011201a54ad7c20044190246a41086a2903007c2012201154ad7c200441c0256a41086a2903007c2013201254ad7c200441f0216a41086a2903007c2019201354ad7c200c201954ad7c420d86847c220c42ffffffffffffff03833703a04e2004200c423388200441f0226a41086a290300200441c0206a41086a2903007c200d201c54ad7c200441a0246a41086a2903007c200e200d54ad7c200441d0256a41086a2903007c200f200e54ad7c200441e0216a41086a2903007c2010200f54ad7c200c201054ad7c420d868442137e201b42ffffffffffffff03837c220c42ffffffffffffff03833703804e2004200c423388201642ffffffffffffff03837c3703884e20044190286a41086a2903002147200441902a6a41086a2903002148200429039028213b20042903902a210c200441e02a6a41086a290300214920042903e02a213c200441c02a6a41086a290300214a20042903c02a214b20044180296a41086a290300214c200429038029214d20044180286a41086a290300214e200441c0296a41086a290300214f200429038028215020042903c029210d200441a02a6a41086a290300215120042903a02a2152200441b02a6a41086a290300215320042903b02a2154200441d0296a41086a290300215520042903d029215620042903d02a210f20042903a028211f20042903f02a212220042903f028213920042903b029213a200441d02a6a41086a2903002157200441a0286a41086a2903002158200441f02a6a41086a2903002159200441f0286a41086a290300215a200441b0296a41086a290300215b20042903802b211020042903b028211a20042903e028211b20042903a029211c20042903e029211e200441802b6a41086a290300215c200441b0286a41086a290300215d200441e0286a41086a290300215e200441a0296a41086a290300215f200441e0296a41086a290300216020042903c028211220042903d0282111200429039029211320042903802a211620042903f0292119200441c0286a41086a2903002161200441d0286a41086a290300216220044190296a41086a2903002163200441802a6a41086a2903002164200441f0296a41086a290300216520044188c9006a20044180ce006a41011071200441e01c6a200429038849220e4200201920162013201120127c22127c22137c22167c2219201e201c201b2010201a7c221a7c221b7c221c7c221e203a20392022200f201f7c221f7c22227c22397c223a204d204b203c200c203b7c223b7c223c7c224b7c224d205620542052200d20507c22507c22527c22547c2256423388205520532051204f204e7c2050200d54ad7c7c2052205054ad7c7c2054205254ad7c7c2056205454ad7c420d86847c220d423388204c204a2049204820477c203b200c54ad7c7c203c203b54ad7c7c204b203c54ad7c7c204d204b54ad7c200d204d54ad7c420d86847c223b423388205b205a2059205720587c201f200f54ad7c7c2022201f54ad7c7c2039202254ad7c7c203a203954ad7c203b203a54ad7c420d86847c221f4233882060205f205e205c205d7c201a201054ad7c7c201b201a54ad7c7c201c201b54ad7c7c201e201c54ad7c201f201e54ad7c420d86847c220f423388206520642063206220617c2012201154ad7c7c2013201254ad7c7c2016201354ad7c7c2019201654ad7c200f201954ad7c420d868442137e205642ffffffffffffff03837c221142ffffffffffffff0383220c420010ce08200441e01f6a200f42ffffffffffffff038322194200200429039049220f42137e420010ce08200441901f6a201f42ffffffffffffff038322164200200429039849221042137e221b420010ce08200441c01e6a203b42ffffffffffffff03832213420020042903a049221242137e221a420010ce08200441f01d6a2011423388200d42ffffffffffffff03837c220d420020042903a849221c42137e2211420010ce08200441f01c6a200d4200200e420010ce08200441d01f6a200c4200200f420010ce08200441801f6a20194200201b420010ce08200441b01e6a20164200201a420010ce08200441e01d6a201342002011420010ce08200441801d6a20134200200e420010ce08200441c01f6a200d4200200f420010ce08200441f01e6a200c42002010420010ce08200441a01e6a20194200201a420010ce08200441d01d6a201642002011420010ce08200441901d6a20164200200e420010ce08200441b01f6a20134200200f420010ce08200441e01e6a200d42002010420010ce08200441901e6a200c42002012420010ce08200441c01d6a201942002011420010ce08200441a01d6a20194200200e420010ce08200441a01f6a20164200200f420010ce08200441d01e6a201342002010420010ce08200441801e6a200d42002012420010ce08200441b01d6a200c4200201c420010ce08200420042903a01e223a20042903f01e7c220e20042903d01d7c220f20042903801d7c221020042903c01f7c221120042903801f223b20042903d01f7c221220042903b01e7c221a20042903e01d7c221b20042903f01c7c221c20042903e01f223c20042903e01c7c221e20042903901f7c221f20042903c01e7c222220042903f01d7c2239423388200441e01f6a41086a290300200441e01c6a41086a2903007c201e203c54ad7c200441901f6a41086a2903007c201f201e54ad7c200441c01e6a41086a2903007c2022201f54ad7c200441f01d6a41086a2903007c2039202254ad7c420d86847c221e423388200441801f6a41086a290300200441d01f6a41086a2903007c2012203b54ad7c200441b01e6a41086a2903007c201a201254ad7c200441e01d6a41086a2903007c201b201a54ad7c200441f01c6a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c221242ffffffffffffff03833703b84e200420042903c01d222220042903901e7c221a20042903901d7c221b20042903b01f7c221c20042903e01e7c221f2012423388200441a01e6a41086a290300200441f01e6a41086a2903007c200e203a54ad7c200441d01d6a41086a2903007c200f200e54ad7c200441801d6a41086a2903007c2010200f54ad7c200441c01f6a41086a2903007c2011201054ad7c2012201154ad7c420d86847c220e42ffffffffffffff03833703c04e200420042903a01d223a20042903b01d7c220f20042903a01f7c221020042903d01e7c221120042903801e7c2212200e423388200441c01d6a41086a290300200441901e6a41086a2903007c201a202254ad7c200441901d6a41086a2903007c201b201a54ad7c200441b01f6a41086a2903007c201c201b54ad7c200441e01e6a41086a2903007c201f201c54ad7c200e201f54ad7c420d86847c220e42ffffffffffffff03833703c84e2004200e423388200441a01d6a41086a290300200441b01d6a41086a2903007c200f203a54ad7c200441a01f6a41086a2903007c2010200f54ad7c200441d01e6a41086a2903007c2011201054ad7c200441801e6a41086a2903007c2012201154ad7c200e201254ad7c420d868442137e203942ffffffffffffff03837c220e42ffffffffffffff03833703a84e2004200e423388201e42ffffffffffffff03837c3703b04e200441f0ca006a41106a4200370300200441f0ca006a41186a4200370300200441f0ca006a41206a4200370300200442003703f84a200442013703f04a200441d0c6006a200441f0ca006a200441a8ce006a1072200441c0146a200c420020042903d846220e420010ce08200441e0156a200441d0c6006a41286a290300220f4200200d42137e420010ce0820044180176a200929030022104200201342137e221c420010ce08200441a0186a200829030022114200201642137e221b420010ce08200441c0196a200329030022124200201942137e221a420010ce08200441b0196a20124200200c420010ce08200441b0146a200e4200200d420010ce08200441d0156a200f4200201c420010ce08200441f0166a20104200201b420010ce0820044190186a20114200201a420010ce0820044180186a20114200200c420010ce08200441a0196a20124200200d420010ce08200441a0146a200e42002013420010ce08200441c0156a200f4200201b420010ce08200441e0166a20104200201a420010ce08200441d0166a20104200200c420010ce08200441f0176a20114200200d420010ce0820044190196a201242002013420010ce08200441c0136a200e42002016420010ce08200441b0156a200f4200201a420010ce08200441a0156a200f4200200c420010ce08200441c0166a20104200200d420010ce08200441e0176a201142002013420010ce0820044180196a201242002016420010ce08200441e0126a200e42002019420010ce0820044180126a20042903804e220c4200200e420010ce0820044190156a200f420020042903884e220d42137e420010ce08200441b0166a2010420020042903904e221342137e221b420010ce08200441d0176a2011420020042903984e221942137e221a420010ce08200441f0186a2012420020042903a04e221c42137e2216420010ce08200441e0186a20124200200c420010ce08200441f0116a200e4200200d420010ce0820044180156a200f4200201b420010ce08200441a0166a20104200201a420010ce08200441c0176a201142002016420010ce08200441b0176a20114200200c420010ce08200441d0186a20124200200d420010ce08200441e0116a200e42002013420010ce08200441f0146a200f4200201a420010ce0820044190166a201042002016420010ce0820044180166a20104200200c420010ce08200441a0176a20114200200d420010ce08200441c0186a201242002013420010ce08200441d0116a200e42002019420010ce08200441e0146a200f42002016420010ce08200441d0146a200f4200200c420010ce08200441f0156a20104200200d420010ce0820044190176a201142002013420010ce08200441b0186a201242002019420010ce08200441c0116a200e4200201c420010ce08200441c00d6a20042903802c224b20042903e0267c220c20042903a02f7c220d20042903b02e7c220e20042903b00e7c220f20042903902c224d20042903f0267c221020042903f02b7c221120042903b02f7c221220042903900f7c221320042903902d22502004290380277c221620042903a02c7c221920042903e02b7c221a20042903f00f7c221b20042903902e22522004290390277c221c20042903a02d7c221e20042903b02c7c221f2004290380107c222220042903902f225420042903a0277c223920042903a02e7c223a20042903b02d7c223b2004290390107c223c423388200441902f6a41086a290300200441a0276a41086a2903007c2039205454ad7c200441a02e6a41086a2903007c203a203954ad7c200441b02d6a41086a2903007c203b203a54ad7c20044190106a41086a2903007c203c203b54ad7c420d86847c2239423388200441902e6a41086a29030020044190276a41086a2903007c201c205254ad7c200441a02d6a41086a2903007c201e201c54ad7c200441b02c6a41086a2903007c201f201e54ad7c20044180106a41086a2903007c2022201f54ad7c2039202254ad7c420d86847c221e423388200441902d6a41086a29030020044180276a41086a2903007c2016205054ad7c200441a02c6a41086a2903007c2019201654ad7c200441e02b6a41086a2903007c201a201954ad7c200441f00f6a41086a2903007c201b201a54ad7c201e201b54ad7c420d86847c2216423388200441902c6a41086a290300200441f0266a41086a2903007c2010204d54ad7c200441f02b6a41086a2903007c2011201054ad7c200441b02f6a41086a2903007c2012201154ad7c200441900f6a41086a2903007c2013201254ad7c2016201354ad7c420d86847c2210423388200441802c6a41086a290300200441e0266a41086a2903007c200c204b54ad7c200441a02f6a41086a2903007c200d200c54ad7c200441b02e6a41086a2903007c200e200d54ad7c200441b00e6a41086a2903007c200f200e54ad7c2010200f54ad7c420d868442137e203c42ffffffffffffff03837c225642ffffffffffffff0383220d420020042903d014224720042903c0117c220c20042903f0157c220e2004290390177c220f20042903b0187c221120042903e014224820042903d0117c22122004290380167c221320042903a0177c221920042903c0187c221a20042903f014224920042903e0117c221b2004290390167c221c20042903b0177c221f20042903d0187c2222200429038015224a20042903f0117c223a20042903a0167c223b20042903c0177c223c20042903e0187c224b200429039015224c2004290380127c224d20042903b0167c225020042903d0177c225220042903f0187c225442338820044190156a41086a29030020044180126a41086a2903007c204d204c54ad7c200441b0166a41086a2903007c2050204d54ad7c200441d0176a41086a2903007c2052205054ad7c200441f0186a41086a2903007c2054205254ad7c420d86847c224d42338820044180156a41086a290300200441f0116a41086a2903007c203a204a54ad7c200441a0166a41086a2903007c203b203a54ad7c200441c0176a41086a2903007c203c203b54ad7c200441e0186a41086a2903007c204b203c54ad7c204d204b54ad7c420d86847c223a423388200441f0146a41086a290300200441e0116a41086a2903007c201b204954ad7c20044190166a41086a2903007c201c201b54ad7c200441b0176a41086a2903007c201f201c54ad7c200441d0186a41086a2903007c2022201f54ad7c203a202254ad7c420d86847c221c423388200441e0146a41086a290300200441d0116a41086a2903007c2012204854ad7c20044180166a41086a2903007c2013201254ad7c200441a0176a41086a2903007c2019201354ad7c200441c0186a41086a2903007c201a201954ad7c201c201a54ad7c420d86847c2212423388200441d0146a41086a290300200441c0116a41086a2903007c200c204754ad7c200441f0156a41086a2903007c200e200c54ad7c20044190176a41086a2903007c200f200e54ad7c200441b0186a41086a2903007c2011200f54ad7c2012201154ad7c420d868442137e205442ffffffffffffff03837c220c42ffffffffffffff0383221a420010ce08200441900e6a201242ffffffffffffff0383221b42002056423388203942ffffffffffffff03837c220e42137e420010ce08200441b00f6a201c42ffffffffffffff0383221c4200201e42ffffffffffffff0383221342137e2211420010ce08200441e00e6a203a42ffffffffffffff0383221e4200201642ffffffffffffff0383221642137e220f420010ce08200441f00c6a200c423388204d42ffffffffffffff03837c221f4200201042ffffffffffffff0383221942137e220c420010ce08200441b00d6a201f4200200d420010ce08200441800e6a201a4200200e420010ce08200441a00f6a201b42002011420010ce08200441d00e6a201c4200200f420010ce08200441e00c6a201e4200200c420010ce08200441a00d6a201e4200200d420010ce08200441f00d6a201f4200200e420010ce08200441c00f6a201a42002013420010ce08200441c00e6a201b4200200f420010ce08200441d00c6a201c4200200c420010ce08200441900d6a201c4200200d420010ce08200441e00d6a201e4200200e420010ce08200441d00f6a201f42002013420010ce08200441f00e6a201a42002016420010ce08200441f00b6a201b4200200c420010ce08200441800d6a201b4200200d420010ce08200441d00d6a201c4200200e420010ce08200441e00f6a201e42002013420010ce08200441800f6a201f42002016420010ce08200441a00e6a201a42002019420010ce08200441b00a6a20042903800d224c20042903a00e7c220c20042903d00d7c220f20042903e00f7c221020042903800f7c221120042903f00b224e20042903f00e7c221220042903900d7c222220042903e00d7c223920042903d00f7c223a20042903c00e224f20042903c00f7c223b20042903d00c7c223c20042903a00d7c224b20042903f00d7c224d20042903a00f225120042903800e7c225020042903d00e7c225220042903e00c7c225420042903b00d7c225620042903900e225320042903c00d7c224720042903b00f7c224820042903e00e7c224920042903f00c7c224a423388200441900e6a41086a290300200441c00d6a41086a2903007c2047205354ad7c200441b00f6a41086a2903007c2048204754ad7c200441e00e6a41086a2903007c2049204854ad7c200441f00c6a41086a2903007c204a204954ad7c420d86847c2247423388200441a00f6a41086a290300200441800e6a41086a2903007c2050205154ad7c200441d00e6a41086a2903007c2052205054ad7c200441e00c6a41086a2903007c2054205254ad7c200441b00d6a41086a2903007c2056205454ad7c2047205654ad7c420d86847c2250423388200441c00e6a41086a290300200441c00f6a41086a2903007c203b204f54ad7c200441d00c6a41086a2903007c203c203b54ad7c200441a00d6a41086a2903007c204b203c54ad7c200441f00d6a41086a2903007c204d204b54ad7c2050204d54ad7c420d86847c223b423388200441f00b6a41086a290300200441f00e6a41086a2903007c2012204e54ad7c200441900d6a41086a2903007c2022201254ad7c200441e00d6a41086a2903007c2039202254ad7c200441d00f6a41086a2903007c203a203954ad7c203b203a54ad7c420d86847c223c423388200441800d6a41086a290300200441a00e6a41086a2903007c200c204c54ad7c200441d00d6a41086a2903007c200f200c54ad7c200441e00f6a41086a2903007c2010200f54ad7c200441800f6a41086a2903007c2011201054ad7c203c201154ad7c420d868442137e204a42ffffffffffffff03837c225542ffffffffffffff03832222420020042903a015225720042903e0127c220c20042903c0167c220f20042903e0177c22102004290380197c221120042903b015225820042903c0137c221220042903d0167c223920042903f0177c223a2004290390197c224b20042903c015225920042903a0147c224d20042903e0167c22522004290380187c225420042903a0197c225620042903d015225a20042903b0147c224820042903f0167c22492004290390187c224a20042903b0197c224c20042903e015225b20042903c0147c224e2004290380177c224f20042903a0187c225120042903c0197c2253423388200441e0156a41086a290300200441c0146a41086a2903007c204e205b54ad7c20044180176a41086a2903007c204f204e54ad7c200441a0186a41086a2903007c2051204f54ad7c200441c0196a41086a2903007c2053205154ad7c420d86847c224e423388200441d0156a41086a290300200441b0146a41086a2903007c2048205a54ad7c200441f0166a41086a2903007c2049204854ad7c20044190186a41086a2903007c204a204954ad7c200441b0196a41086a2903007c204c204a54ad7c204e204c54ad7c420d86847c2248423388200441c0156a41086a290300200441a0146a41086a2903007c204d205954ad7c200441e0166a41086a2903007c2052204d54ad7c20044180186a41086a2903007c2054205254ad7c200441a0196a41086a2903007c2056205454ad7c2048205654ad7c420d86847c224d423388200441b0156a41086a290300200441c0136a41086a2903007c2012205854ad7c200441d0166a41086a2903007c2039201254ad7c200441f0176a41086a2903007c203a203954ad7c20044190196a41086a2903007c204b203a54ad7c204d204b54ad7c420d86847c2212423388200441a0156a41086a290300200441e0126a41086a2903007c200c205754ad7c200441c0166a41086a2903007c200f200c54ad7c200441e0176a41086a2903007c2010200f54ad7c20044180196a41086a2903007c2011201054ad7c2012201154ad7c420d868442137e205342ffffffffffffff03837c225242ffffffffffffff0383220c420010ce08200441800b6a201242ffffffffffffff0383220f42002055423388204742ffffffffffffff03837c223942137e420010ce08200441900c6a204d42ffffffffffffff038322104200205042ffffffffffffff0383223a42137e2250420010ce08200441b00b6a204842ffffffffffffff038322114200203b42ffffffffffffff0383224b42137e224d420010ce08200441e0096a2052423388204e42ffffffffffffff03837c22124200203c42ffffffffffffff0383223c42137e223b420010ce08200441a00a6a201242002022420010ce08200441f00a6a200c42002039420010ce08200441800c6a200f42002050420010ce08200441a00b6a20104200204d420010ce08200441d0096a20114200203b420010ce08200441900a6a201142002022420010ce08200441e00a6a201242002039420010ce08200441a00c6a200c4200203a420010ce08200441900b6a200f4200204d420010ce08200441c0096a20104200203b420010ce08200441800a6a201042002022420010ce08200441d00a6a201142002039420010ce08200441b00c6a20124200203a420010ce08200441c00b6a200c4200204b420010ce08200441e0086a200f4200203b420010ce08200441f0096a200f42002022420010ce08200441c00a6a201042002039420010ce08200441c00c6a20114200203a420010ce08200441d00b6a20124200204b420010ce08200441e00b6a200c4200203c420010ce08200441b0206a2018420042b0c1bad0f4e48603420010ce0820044180236a201d420042a7a7fbf49beaf607420010ce08200441b0246a2020420042a0d69f90da80b1cb00420010ce08200441e0256a200a420042badf96dcb5c3bac700420010ce08200441d0216a200b420042a7ecfac2b5f7ea19420010ce08200441c0216a200b420042b0c1bad0f4e48603420010ce08200441a0206a20184200429db1bce4dfb435420010ce0820044190236a201d420042a0d69f90da80b1cb00420010ce08200441c0246a2020420042badf96dcb5c3bac700420010ce08200441f0256a200a420042a7ecfac2b5f7ea19420010ce0820044180266a200a420042b0c1bad0f4e48603420010ce08200441b0216a200b4200429db1bce4dfb435420010ce0820044190206a2018420042e098f4e5e9ebfb03420010ce08200441a0236a201d420042badf96dcb5c3bac700420010ce08200441d0246a2020420042a7ecfac2b5f7ea19420010ce08200441e0246a2020420042b0c1bad0f4e48603420010ce0820044190266a200a4200429db1bce4dfb435420010ce08200441a0216a200b420042e098f4e5e9ebfb03420010ce0820044180206a20184200429e9981b4dab2e103420010ce08200441b0236a201d420042a7ecfac2b5f7ea19420010ce08200441c0236a201d420042b0c1bad0f4e48603420010ce08200441f0246a20204200429db1bce4dfb435420010ce08200441a0266a200a420042e098f4e5e9ebfb03420010ce0820044190216a200b4200429e9981b4dab2e103420010ce08200441f01f6a20184200429df893c0a486ae01420010ce08200441901a6a20042903b04d2222420042b0c1bad0f4e48603420010ce08200441e01a6a20042903d04d2239420042a7a7fbf49beaf607420010ce08200441b01b6a20042903c84d223a420042a0d69f90da80b1cb00420010ce08200441801c6a20042903c04d223b420042badf96dcb5c3bac700420010ce08200441d01c6a20042903b84d223c420042a7ecfac2b5f7ea19420010ce08200441c01c6a203c420042b0c1bad0f4e48603420010ce08200441801a6a20224200429db1bce4dfb435420010ce08200441d01a6a2039420042a0d69f90da80b1cb00420010ce08200441a01b6a203a420042badf96dcb5c3bac700420010ce08200441f01b6a203b420042a7ecfac2b5f7ea19420010ce08200441e01b6a203b420042b0c1bad0f4e48603420010ce08200441b01c6a203c4200429db1bce4dfb435420010ce08200441f0196a2022420042e098f4e5e9ebfb03420010ce08200441c01a6a2039420042badf96dcb5c3bac700420010ce08200441901b6a203a420042a7ecfac2b5f7ea19420010ce08200441801b6a203a420042b0c1bad0f4e48603420010ce08200441d01b6a203b4200429db1bce4dfb435420010ce08200441a01c6a203c420042e098f4e5e9ebfb03420010ce08200441e0196a20224200429e9981b4dab2e103420010ce08200441b01a6a2039420042a7ecfac2b5f7ea19420010ce08200441a01a6a2039420042b0c1bad0f4e48603420010ce08200441f01a6a203a4200429db1bce4dfb435420010ce08200441c01b6a203b420042e098f4e5e9ebfb03420010ce08200441901c6a203c4200429e9981b4dab2e103420010ce08200441d0196a20224200429df893c0a486ae01420010ce08200441e0106a200c420042ea81f582a8b53f420010ce08200441d0126a200f420042bbda9284b7cbdd1b420010ce08200441b0136a201042004288f5a7f5b28623420010ce0820044190146a2011420042edd5d7bc83fb803c420010ce08200441b0116a2012420042edc19ab7ab9cc0c700420010ce08200441a0116a2012420042ea81f582a8b53f420010ce08200441d0106a200c420042b9a6dff282e9ba01420010ce08200441c0126a200f42004288f5a7f5b28623420010ce08200441a0136a2010420042edd5d7bc83fb803c420010ce0820044180146a2011420042edc19ab7ab9cc0c700420010ce08200441f0136a2011420042ea81f582a8b53f420010ce0820044190116a2012420042b9a6dff282e9ba01420010ce08200441c0106a200c420042d8f8d29390ec01420010ce08200441b0126a200f420042edd5d7bc83fb803c420010ce0820044190136a2010420042edc19ab7ab9cc0c700420010ce0820044180136a2010420042ea81f582a8b53f420010ce08200441e0136a2011420042b9a6dff282e9ba01420010ce0820044180116a2012420042d8f8d29390ec01420010ce08200441b0106a200c420042ff91f789b6a19403420010ce08200441a0126a200f420042edc19ab7ab9cc0c700420010ce0820044190126a200f420042ea81f582a8b53f420010ce08200441f0126a2010420042b9a6dff282e9ba01420010ce08200441d0136a2011420042d8f8d29390ec01420010ce08200441f0106a2012420042ff91f789b6a19403420010ce08200441a0106a200c420042fff5f38289d9e103420010ce08200441a0076a20042903f009224c20042903e00b7c220c20042903c00a7c220f20042903c00c7c221020042903d00b7c221120042903e008224e20042903c00b7c221220042903800a7c222220042903d00a7c223920042903b00c7c223a20042903900b224f20042903a00c7c223b20042903c0097c223c20042903900a7c224b20042903e00a7c224d20042903800c225120042903f00a7c225020042903a00b7c225220042903d0097c225420042903a00a7c225620042903800b225320042903b00a7c224720042903900c7c224820042903b00b7c224920042903e0097c224a423388200441800b6a41086a290300200441b00a6a41086a2903007c2047205354ad7c200441900c6a41086a2903007c2048204754ad7c200441b00b6a41086a2903007c2049204854ad7c200441e0096a41086a2903007c204a204954ad7c420d86847c2247423388200441800c6a41086a290300200441f00a6a41086a2903007c2050205154ad7c200441a00b6a41086a2903007c2052205054ad7c200441d0096a41086a2903007c2054205254ad7c200441a00a6a41086a2903007c2056205454ad7c2047205654ad7c420d86847c2250423388200441900b6a41086a290300200441a00c6a41086a2903007c203b204f54ad7c200441c0096a41086a2903007c203c203b54ad7c200441900a6a41086a2903007c204b203c54ad7c200441e00a6a41086a2903007c204d204b54ad7c2050204d54ad7c420d86847c223b423388200441e0086a41086a290300200441c00b6a41086a2903007c2012204e54ad7c200441800a6a41086a2903007c2022201254ad7c200441d00a6a41086a2903007c2039202254ad7c200441b00c6a41086a2903007c203a203954ad7c203b203a54ad7c420d86847c223a423388200441f0096a41086a290300200441e00b6a41086a2903007c200c204c54ad7c200441c00a6a41086a2903007c200f200c54ad7c200441c00c6a41086a2903007c2010200f54ad7c200441d00b6a41086a2903007c2011201054ad7c203a201154ad7c420d868442137e204a42ffffffffffffff03837c220c42ffffffffffffff0383220f4200200d420010ce08200441f0076a20194200200c423388204742ffffffffffffff03837c221042137e225e420010ce0820044180096a20164200205042ffffffffffffff0383221242137e2250420010ce08200441a0086a20134200203b42ffffffffffffff0383223942137e2222420010ce08200441d0066a200e4200203a42ffffffffffffff0383225242137e2211420010ce0820044190076a200e4200200f420010ce08200441e0076a200d42002010420010ce08200441f0086a201942002050420010ce0820044190086a201642002022420010ce08200441c0066a201342002011420010ce0820044180076a20134200200f420010ce08200441d0076a200e42002010420010ce0820044190096a200d42002012420010ce0820044180086a201942002022420010ce08200441b0066a201642002011420010ce08200441f0066a20164200200f420010ce08200441c0076a201342002010420010ce08200441a0096a200e42002012420010ce08200441b0086a200d42002039420010ce08200441a0066a201942002011420010ce08200441e0066a20194200200f420010ce08200441b0076a201642002010420010ce08200441b0096a201342002012420010ce08200441c0086a200e42002039420010ce08200441d0086a200d42002052420010ce082004200429038008224c2004290390097c220c20042903b0067c223a2004290380077c223b20042903d0077c223c20042903f008224e20042903e0077c224b2004290390087c224d20042903c0067c22542004290390077c225620042903f007224f20042903a0077c22472004290380097c224820042903a0087c224920042903d0067c224a423388200441f0076a41086a290300200441a0076a41086a2903007c2047204f54ad7c20044180096a41086a2903007c2048204754ad7c200441a0086a41086a2903007c2049204854ad7c200441d0066a41086a2903007c204a204954ad7c420d86847c2247423388200441f0086a41086a290300200441e0076a41086a2903007c204b204e54ad7c20044190086a41086a2903007c204d204b54ad7c200441c0066a41086a2903007c2054204d54ad7c20044190076a41086a2903007c2056205454ad7c2047205654ad7c420d86847c224b42ffffffffffffff03833703e046200420042903a006224920042903b0087c224d20042903f0067c225420042903c0077c225620042903a0097c2248204b42338820044180086a41086a29030020044190096a41086a2903007c200c204c54ad7c200441b0066a41086a2903007c203a200c54ad7c20044180076a41086a2903007c203b203a54ad7c200441d0076a41086a2903007c203c203b54ad7c204b203c54ad7c420d86847c220c42ffffffffffffff03833703e846200420042903e006224c20042903d0087c223a20042903b0077c223b20042903b0097c223c20042903c0087c224b200c423388200441a0066a41086a290300200441b0086a41086a2903007c204d204954ad7c200441f0066a41086a2903007c2054204d54ad7c200441c0076a41086a2903007c2056205454ad7c200441a0096a41086a2903007c2048205654ad7c200c204854ad7c420d86847c220c42ffffffffffffff03833703f0462004200c423388200441e0066a41086a290300200441d0086a41086a2903007c203a204c54ad7c200441b0076a41086a2903007c203b203a54ad7c200441b0096a41086a2903007c203c203b54ad7c200441c0086a41086a2903007c204b203c54ad7c200c204b54ad7c420d868442137e204a42ffffffffffffff03837c220c42ffffffffffffff03833703d0462004200c423388204742ffffffffffffff03837c3703d84620044190236a41086a290300215f200441a0206a41086a2903002160200429039023210c20042903a0202155200441c0246a41086a290300216120042903c0242157200441f0256a41086a290300216220042903f0252158200441c0216a41086a290300216320042903c021215920044180236a41086a2903002164200441b0206a41086a2903002165200429038023213a20042903b020215a200441b0246a41086a290300216620042903b024215b200441e0256a41086a290300216720042903e025215c200441d0216a41086a290300216820042903d021215d20042903a023213b200429039020214e20042903d024214f200429038026215120042903b0212153200441a0236a41086a290300216920044190206a41086a290300216a200441d0246a41086a290300216b20044180266a41086a290300216c200441b0216a41086a290300216d20042903b023213c200429038020214820042903e0242149200429039026214a20042903a021214c200441b0236a41086a290300216e20044180206a41086a290300216f200441e0246a41086a290300217020044190266a41086a2903002171200441a0216a41086a290300217220042903c023214b20042903f01f214d20042903f024215420042903a02621562004290390212147200441c0236a41086a2903002173200441f01f6a41086a2903002174200441f0246a41086a2903002175200441a0266a41086a290300217620044190216a41086a2903002177200441a8ca006a200441d0c6006a106e20042d00a84a41017110702102200420042903b04d2278204720562054204b204d7c224d7c22547c22567c2247204c204a2049203c20487c22487c22497c224a7c224c20532051204f203b204e7c224e7c224f7c22517c2253205920582057200c20557c22557c22577c22587c2259205d205c205b203a205a7c225a7c225b7c225c7c225d423388206820672066206420657c205a203a54ad7c7c205b205a54ad7c7c205c205b54ad7c7c205d205c54ad7c420d86847c223a423388206320622061205f20607c2055200c54ad7c7c2057205554ad7c7c2058205754ad7c7c2059205854ad7c203a205954ad7c420d86847c2255423388206d206c206b2069206a7c204e203b54ad7c7c204f204e54ad7c7c2051204f54ad7c7c2053205154ad7c2055205354ad7c420d86847c223b423388207220712070206e206f7c2048203c54ad7c7c2049204854ad7c7c204a204954ad7c7c204c204a54ad7c203b204c54ad7c420d86847c223c423388207720762075207320747c204d204b54ad7c7c2054204d54ad7c7c2056205454ad7c7c2047205654ad7c203c204754ad7c420d868442137e205d42ffffffffffffff03837c224b42ffffffffffffff03838542002002ad42ff01837d220c832078853703b04d200420042903b84d224d204b423388203a42ffffffffffffff03837c85200c83204d853703b84d200420042903c04d223a205542ffffffffffffff038385200c83203a853703c04d200420042903c84d223a203b42ffffffffffffff038385200c83203a853703c84d200420042903d04d223a203c42ffffffffffffff038385200c83203a853703d04d20044190066a200f4200201820042903a01a225a20042903d0197c223a20042903f01a7c223b20042903c01b7c223c20042903901c7c224b20042903b01a225b20042903e0197c224d20042903801b7c225420042903d01b7c225620042903a01c7c224720042903c01a225c20042903f0197c224820042903901b7c224920042903e01b7c224a20042903b01c7c224c20042903d01a225d20042903801a7c224e20042903a01b7c224f20042903f01b7c225120042903c01c7c225320042903e01a225f20042903901a7c225520042903b01b7c225720042903801c7c225820042903d01c7c2259423388200441e01a6a41086a290300200441901a6a41086a2903007c2055205f54ad7c200441b01b6a41086a2903007c2057205554ad7c200441801c6a41086a2903007c2058205754ad7c200441d01c6a41086a2903007c2059205854ad7c420d86847c2255423388200441d01a6a41086a290300200441801a6a41086a2903007c204e205d54ad7c200441a01b6a41086a2903007c204f204e54ad7c200441f01b6a41086a2903007c2051204f54ad7c200441c01c6a41086a2903007c2053205154ad7c2055205354ad7c420d86847c224e423388200441c01a6a41086a290300200441f0196a41086a2903007c2048205c54ad7c200441901b6a41086a2903007c2049204854ad7c200441e01b6a41086a2903007c204a204954ad7c200441b01c6a41086a2903007c204c204a54ad7c204e204c54ad7c420d86847c2248423388200441b01a6a41086a290300200441e0196a41086a2903007c204d205b54ad7c200441801b6a41086a2903007c2054204d54ad7c200441d01b6a41086a2903007c2056205454ad7c200441a01c6a41086a2903007c2047205654ad7c2048204754ad7c420d86847c224d423388200441a01a6a41086a290300200441d0196a41086a2903007c203a205a54ad7c200441f01a6a41086a2903007c203b203a54ad7c200441c01b6a41086a2903007c203c203b54ad7c200441901c6a41086a2903007c204b203c54ad7c204d204b54ad7c420d868442137e205942ffffffffffffff03837c225442ffffffffffffff038385200c83201885223a420010ce08200441d0036a201d204d42ffffffffffffff038385200c83201d85223b4200205e420010ce08200441a0046a2020204842ffffffffffffff038385200c83202085223c42002050420010ce08200441f0046a200a204e42ffffffffffffff038385200c83200a85224b42002022420010ce08200441c0056a200b2054423388205542ffffffffffffff03837c85200c83200b85224d42002011420010ce08200441b0056a204d4200200f420010ce0820044180066a203a42002010420010ce08200441c0036a203b42002050420010ce0820044190046a203c42002022420010ce08200441e0046a204b42002011420010ce08200441d0046a204b4200200f420010ce08200441a0056a204d42002010420010ce08200441f0056a203a42002012420010ce08200441b0036a203b42002022420010ce0820044180046a203c42002011420010ce08200441f0036a203c4200200f420010ce08200441c0046a204b42002010420010ce0820044190056a204d42002012420010ce08200441e0056a203a42002039420010ce08200441a0036a203b42002011420010ce0820044190036a203b4200200f420010ce08200441e0036a203c42002010420010ce08200441b0046a204b42002012420010ce0820044180056a204d42002039420010ce08200441d0056a203a42002052420010ce08200420042903b003225220042903f0057c220f2004290380047c221020042903d0047c221120042903a0057c221220042903c00322542004290380067c22222004290390047c223920042903e0047c223a20042903b0057c223b20042903d00322562004290390067c223c20042903a0047c224b20042903f0047c224d20042903c0057c2250423388200441d0036a41086a29030020044190066a41086a2903007c203c205654ad7c200441a0046a41086a2903007c204b203c54ad7c200441f0046a41086a2903007c204d204b54ad7c200441c0056a41086a2903007c2050204d54ad7c420d86847c223c423388200441c0036a41086a29030020044180066a41086a2903007c2022205454ad7c20044190046a41086a2903007c2039202254ad7c200441e0046a41086a2903007c203a203954ad7c200441b0056a41086a2903007c203b203a54ad7c203c203b54ad7c420d86847c222242ffffffffffffff03833703e046200420042903a003224d20042903e0057c223920042903f0037c223a20042903c0047c223b2004290390057c224b2022423388200441b0036a41086a290300200441f0056a41086a2903007c200f205254ad7c20044180046a41086a2903007c2010200f54ad7c200441d0046a41086a2903007c2011201054ad7c200441a0056a41086a2903007c2012201154ad7c2022201254ad7c420d86847c220f42ffffffffffffff03833703e8462004200429039003225220042903d0057c221020042903e0037c221120042903b0047c22122004290380057c2222200f423388200441a0036a41086a290300200441e0056a41086a2903007c2039204d54ad7c200441f0036a41086a2903007c203a203954ad7c200441c0046a41086a2903007c203b203a54ad7c20044190056a41086a2903007c204b203b54ad7c200f204b54ad7c420d86847c220f42ffffffffffffff03833703f0462004200f42338820044190036a41086a290300200441d0056a41086a2903007c2010205254ad7c200441e0036a41086a2903007c2011201054ad7c200441b0046a41086a2903007c2012201154ad7c20044180056a41086a2903007c2022201254ad7c200f202254ad7c420d868442137e205042ffffffffffffff03837c220f42ffffffffffffff03833703d0462004200f423388203c42ffffffffffffff03837c3703d846200441c0126a41086a290300215a200441d0106a41086a290300215b20042903c012211120042903d010214e200441a0136a41086a290300215c20042903a013214f20044180146a41086a290300215d2004290380142151200441a0116a41086a290300215e20042903a0112153200441d0126a41086a290300215f200441e0106a41086a290300216020042903d012211220042903e0102155200441b0136a41086a290300216120042903b013215720044190146a41086a29030021622004290390142158200441b0116a41086a290300216320042903b011215920042903b012212220042903c0102148200429039013214920042903f013214a200429039011214c200441b0126a41086a2903002164200441c0106a41086a290300216520044190136a41086a2903002166200441f0136a41086a290300216720044190116a41086a290300216820042903a012213920042903b0102152200429038013215420042903e01321562004290380112147200441a0126a41086a2903002169200441b0106a41086a290300216a20044180136a41086a290300216b200441e0136a41086a290300216c20044180116a41086a290300216d200429039012213a20042903a010214b20042903f012214d20042903d013215020042903f010216e20044190126a41086a290300216f200441a0106a41086a2903002170200441f0126a41086a2903002171200441d0136a41086a2903002172200441f0106a41086a2903002173200441a8ca006a200441d0c6006a106e20042d00a84a41017110702102200420042903b04d221042f0ffffffffffff3f20042903d04d223b7d223c42338842137e42d0fdffffffffff3f20107d227442ffffffffffffff03837c8542002002ad42ff01837d220f8320108522103703b04d2004203b203b203c42ffffffffffffff038342f0ffffffffffff3f20042903c84d223c7d22754233887c85200f8385223b3703d04d20044180036a203e203b7d223e42338842137e204020107d224042ffffffffffffff03837c22104200201a206e2050204d203a204b7c223b7c224b7c224d7c2250204720562054203920527c22527c22547c22567c2247204c204a2049202220487c22487c22497c224a7c224c20532051204f2011204e7c224e7c224f7c22517c2253205920582057201220557c22557c22577c22587c2259423388206320622061205f20607c2055201254ad7c7c2057205554ad7c7c2058205754ad7c7c2059205854ad7c420d86847c2255423388205e205d205c205a205b7c204e201154ad7c7c204f204e54ad7c7c2051204f54ad7c7c2053205154ad7c2055205354ad7c420d86847c224e423388206820672066206420657c2048202254ad7c7c2049204854ad7c7c204a204954ad7c7c204c204a54ad7c204e204c54ad7c420d86847c2222423388206d206c206b2069206a7c2052203954ad7c7c2054205254ad7c7c2056205454ad7c7c2047205654ad7c2022204754ad7c420d86847c2212423388207320722071206f20707c203b203a54ad7c7c204b203b54ad7c7c204d204b54ad7c7c2050204d54ad7c2012205054ad7c420d868442137e205942ffffffffffffff03837c223a42ffffffffffffff038385200c83201a852211420010ce08200420042903b84d221a42f0ffffffffffff3f201a7d223942ffffffffffffff038320744233887c85200f83201a85221a3703b84d200441c0006a201b201242ffffffffffffff038385200c83201b85221242002042201a7d223b42ffffffffffffff038320404233887c221a42137e420010ce08200420042903c04d221b42f0ffffffffffff3f201b7d224b42ffffffffffffff038320394233887c85200f83201b8522393703c04d20044190016a201c202242ffffffffffffff038385200c83201c85221b4200204520397d222242ffffffffffffff0383203b4233887c221c42137e223b420010ce082004203c203c207542ffffffffffffff0383204b4233887c85200f838522393703c84d200441e0016a201e204e42ffffffffffffff038385200c83201e85220f4200204620397d221e42ffffffffffffff038320224233887c222242137e2239420010ce08200441b0026a201f203a423388205542ffffffffffffff03837c85200c83201f85220c4200203e42ffffffffffffff0383201e4233887c221f42137e221e420010ce08200441a0026a200c42002010420010ce08200441f0026a20114200201a420010ce08200441306a20124200203b420010ce0820044180016a201b42002039420010ce08200441d0016a200f4200201e420010ce08200441c0016a200f42002010420010ce0820044190026a200c4200201a420010ce08200441e0026a20114200201c420010ce08200441206a201242002039420010ce08200441f0006a201b4200201e420010ce08200441e0006a201b42002010420010ce08200441b0016a200f4200201a420010ce0820044180026a200c4200201c420010ce08200441d0026a201142002022420010ce08200441106a20124200201e420010ce082004201242002010420010ce08200441d0006a201b4200201a420010ce08200441a0016a200f4200201c420010ce08200441f0016a200c42002022420010ce08200441c0026a20114200201f420010ce0820042004290300225620042903c0027c220c20042903507c220f20042903a0017c221020042903f0017c22112004290310224720042903d0027c221220042903607c221a20042903b0017c221b2004290380027c221c2004290320224820042903e0027c221e20042903707c221f20042903c0017c22222004290390027c22392004290330224920042903f0027c223a2004290380017c223b20042903d0017c223c20042903a0027c224b2004290340224a2004290380037c224d2004290390017c225020042903e0017c225220042903b0027c2254423388200441c0006a41086a29030020044180036a41086a2903007c204d204a54ad7c20044190016a41086a2903007c2050204d54ad7c200441e0016a41086a2903007c2052205054ad7c200441b0026a41086a2903007c2054205254ad7c420d86847c224d423388200441306a41086a290300200441f0026a41086a2903007c203a204954ad7c20044180016a41086a2903007c203b203a54ad7c200441d0016a41086a2903007c203c203b54ad7c200441a0026a41086a2903007c204b203c54ad7c204d204b54ad7c420d86847c223a423388200441206a41086a290300200441e0026a41086a2903007c201e204854ad7c200441f0006a41086a2903007c201f201e54ad7c200441c0016a41086a2903007c2022201f54ad7c20044190026a41086a2903007c2039202254ad7c203a203954ad7c420d86847c221e423388200441106a41086a290300200441d0026a41086a2903007c2012204754ad7c200441e0006a41086a2903007c201a201254ad7c200441b0016a41086a2903007c201b201a54ad7c20044180026a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c2212423388200441086a290300200441c0026a41086a2903007c200c205654ad7c200441d0006a41086a2903007c200f200c54ad7c200441a0016a41086a2903007c2010200f54ad7c200441f0016a41086a2903007c2011201054ad7c2012201154ad7c420d868442137e205442ffffffffffffff03837c220c42ffffffffffffff0383220f3703d0462004200c423388204d42ffffffffffffff03837c22103703d8462004201242ffffffffffffff038322113703f0462004201e42ffffffffffffff038322123703e8462004203a42ffffffffffffff0383221a3703e046200441a8ca006a200441d0c6006a106e2004201142f0ffffffffffff3f20117d221b42ffffffffffffff038342f0ffffffffffff3f20127d221c4233887c85420020042d00a84a4101711070ad42ff01837d220c832011853703f04620042012201c42ffffffffffffff038342f0ffffffffffff3f201a7d22114233887c85200c832012853703e8462004201a201142ffffffffffffff038342f0ffffffffffff3f20107d22114233887c85200c83201a853703e04620042010201142ffffffffffffff038342d0fdffffffffff3f200f7d22114233887c85200c832010853703d8462004200f201b42338842137e201142ffffffffffffff03837c85200c83200f853703d046200441e0c4006a200441d0c6006a106e41002102034020044180c5006a20026a41003a0000200241016a220241c801470d000b20044188c9006a41186a2203200141186a29000037030020044188c9006a41106a2205200141106a29000037030020044188c9006a41086a2206200141086a2900003703002004200129000037038849200441d0c6006a20044188c9006a10d207200441d0c6006a41086a290300210c200441d0c6006a41106a290300210f200441d0c6006a41186a2903002110200441d0c6006a41206a290300211a200441f8c6006a290300211b20044180c7006a290300211120044188c7006a290300211220044190c7006a290300211c20044198c7006a290300211e200441a0c7006a290300211f20042802d446210120042802d046210220044180c5006a200441a8c7006a41f00010c9081a02400240024020024101460d00200441f0ca006a20044180c5006a41f00010c9081a2004200f200c4233887c22224233882022200f54ad420d8684223a20107c223942ffffffffffffff03833703b048200420394233882039203a54ad420d8684223a201a7c223942ffffffffffffff03833703b848200420394233882039203a54ad420d8684223a201b7c223942ffffffffffffff03833703c048200420394233882039203a54ad420d868442137e200c42ffffffffffffff03837c223942ffffffffffffff03833703a04820042039423388202242ffffffffffffff03837c3703a84820044188c9006a41206a4200370300200342003703002005420037030020064200370300200442003703884920044180c5006a41206a420037030020044180c5006a41186a420037030020044180c5006a41106a420037030020044180c5006a41086a420037030020044200370380452004201220114233887c22224233882022201254ad420d8684223a201c7c22394233882039203a54ad420d8684223b201e7c223a423388203a203b54ad420d8684223c201f7c223b42ffffffffffffff03833703f0462004203a42ffffffffffffff03833703e8462004203942ffffffffffffff03833703e0462004203b423388203b203c54ad420d868442137e201142ffffffffffffff03837c2239423388202242ffffffffffffff03837c3703d8462004203942ffffffffffffff03833703d046200441a0c8006a20044188c9006a106f20044180c5006a200441d0c6006a106f72107041ff01714101460d01200041a0016a201937030020004198016a201637030020004190016a201337030020004188016a200e37030020004180016a200d370300200041f8006a203d370300200041f0006a2043370300200041e8006a2044370300200041e0006a2041370300200041d8006a203f370300200041d0006a2023370300200041c8006a2021370300200041c0006a2017370300200041386a2015370300200041306a2014370300200041286a201d370300200041206a2020370300200041186a200a370300200041106a200b370300200041086a201837030020004190026a201f37030020004188026a201e37030020004180026a201c370300200041f8016a2012370300200041f0016a2011370300200041e8016a201b370300200041e0016a201a370300200041d8016a2010370300200041d0016a200f370300200041c8016a200c370300200041c0016a200441e0c4006a41186a290300370300200041b8016a200441e0c4006a41106a290300370300200041b0016a200441e0c4006a41086a290300370300200041a8016a20042903e04437030020004198026a200441f0ca006a41f00010c9081a200041003602000c020b2000200136020420004101360200200041186a20103e0200200041106a200f370200200041086a200c3702000c010b20004101360200200041013a00040b200441d0ce006a24000b7301027f024020002802042201450d0020002802002202450d002001450d002002102c0b0240200041106a2802002201450d00200028020c2202450d00200141ffffff3f71450d002002102c0b02402000411c6a2802002201450d0020002802182200450d00200141286c450d002000102c0b0b130020004103360204200041b4f3c5003602000b3400200041b4f0c50036020420004100360200200041146a4106360200200041106a41e4fec500360200200041086a420f3702000b4901017f02404108103222020d001039000b2000420837020420002002360200200041004108102f2000280200200041086a220028020022026a42003700002000200241086a3602000b0d002000410020002000109b060b930301067f230041d0006b22022400200241b4f0c500410f10c501200241106a41fc84c600410c10c50120022001370330200241386a200241306a410810c701200241c0006a410c6a200241306a41086a3602002002200241386a41086a3602442002200241306a3602482002200241386a360240200241206a200241c0006a107e024002402002280228220341206a2204417f4c0d000240024020040d00410121050c010b200410322205450d020b2000200436020420002005360200200041086a2204410036020020004100411010c8012000280200200428020022056a220620022900003700002004200541106a2205360200200641086a200241086a29000037000020002005411010c8012000280200200428020022056a220620022900103700002004200541106a2207360200200641086a200241106a41086a2900003700002002280220210520002007200310c8012000280200200428020022006a2005200310c9081a2004200020036a36020002402002280224450d002005102c0b200241d0006a24000f0b103b000b1039000bff0101027f230041d0006b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a360200200241286a200341206a10e5070240024020022d00284101460d00200241206a4200370300200241186a4200370300200241106a4200370300200242003703080c010b200241206a200241c1006a290000370300200241186a200241396a290000370300200241106a200241316a290000370300200220022900293703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241d0006a24000b290020004101360204200041086a200128020420012802006b41e0016e2201360200200020013602000bc90902087f017e230041e0006b22052400200541d8006a22064200370300200541d0006a22074200370300200541c0006a41086a2208420037030020054200370340200541306a41b4f0c500410f10c5012008200541306a41086a220929000037030020052005290030370340200541306a41c3f0c500410d10c5012006200929000037030020072005290030370300024002400240200541c0006a412010ce020d0020064200370300200742003703002008420037030020054200370340200541c0006a41c1dcc700410610c501200541106a4196a4c600410610c5012006200541106a41086a29000037030020072005290010370300200541086a200541c0006a412010c601200528020c410020052802081b2106024020034101470d00200541d8006a220a4200370300200541d0006a220b4200370300200541c0006a41086a2208420037030020054200370340200541306a41b4f0c500410f10c5012008200541306a41086a220929000037030020052005290030370340200541306a41e483c600410a10c501200741086a220c2009290000370000200720052900303700002005200541c0006a412010c60102402005280200450d00200528020420064d0d002000410410a3050c030b200a4200370300200b42003703002008420037030020054200370340200541306a41b4f0c500410f10c5012008200929000037030020052005290030370340200541306a41e483c600410a10c501200c2009290000370000200720052900303700002005200241017420066a360210200541c0006a4120200541106a410410a7020b200541106a41186a2004360200200541106a41106a2208200141086a28020036020020052002360214200520063602102005200336022420052001290200370318200541c0006a41186a4200370300200541c0006a41106a4200370300200541c0006a41086a2201420037030020054200370340200541306a41b4f0c500410f10c5012001200541306a41086a220929000037030020052005290030370340200541306a41c3f0c500410d10c501200741086a2009290000370000200720052900303700002005410036023820054201370330200541306a41004104102f2005280230200528023822076a20063600002005200741046a2207360238200541306a20074104102f2005280230200528023822076a20023600002005200741046a36023820052802182109200541306a20082802002207108f0102402007450d002009200741286c6a210820052802382106200921070340200541306a20064120102f2005280230200528023822016a22062007290000370000200641086a200741086a290000370000200641106a200741106a290000370000200641186a200741186a2900003700002005200141206a2206360238200741206a290300210d200541306a20064108102f2005280230200528023822066a200d3700002005200641086a22063602382008200741286a2207470d000b0b200541306a200541246a10be03200541c0006a412020052802302207200528023810a70202402005280234450d002007102c0b02402005411c6a2802002207450d00200741286c450d002009102c0b200041043a00000c020b2000410310a3050b20012802042207450d00200741286c450d002001280200102c0b200541e0006a24000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e2c289ab0610a902200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e9dabdf30610a902200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41f0c2c98b0610a902200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000b9c0803097f017e057f23004180016b22012400200141286a22024200370300200141206a22034200370300200141106a41086a420037030020014200370310200141106a41f6ddc700410b10c501200141e8006a41e9eec600411610c5012002200141e8006a41086a29000037030020032001290068370300200141203602342001200141106a360230200141386a200141106a412010b30102400240200128023822040d00410021030c010b200128023c21052001200141386a41086a28020036024c20012004360248200141086a200141c8006a1087020240024020012802080d00024002400240200128020c2206200128024c4105762202200220064b1b22074105742202417f4c0d000240024020070d00410421030c010b200210322203450d020b41002102200141003602602001200736025c2001200336025802402006450d000340200128024c22074104490d0420012802482208280000210920012007417c6a36024c2001200841046a360248200141e8006a200141c8006a10800520012802682207450d04200129026c210a200141e8006a200141c8006a108005024002402001280268220b450d00200128026c2108200128024c220c41044f0d0102402008450d00200841ffffff3f71450d00200b102c0b200aa72203450d06200341ffffff3f71450d062007102c0c060b200aa72203450d05200341ffffff3f71450d052007102c0c050b2001280270210d2001280248220e280000210f2001200c417c6a36024c2001200e41046a36024802402002200128025c470d00200141d8006a200210fe0320012802602102200128025821030b200320024105746a22022007360204200220093602002002411c6a200f360200200241186a200d360200200241146a2008360200200241106a200b360200200241086a200a3702002001200128026041016a22023602602006417f6a22060d000b200128025821030b200129025c210a20030d040c030b103b000b1039000b2001280258210602402002450d0020024105742103200641106a210203400240200241786a28020041ffffff3f71450d00200241746a280200102c0b0240200241046a28020041ffffff3f71450d002002280200102c0b200241206a2102200341606a22030d000b0b0240200128025c41ffffff3f71450d002006102c0b0b4100210320014100360260200142013703582001410f3602542001200141306a3602502001200141d8006a360264200141fc006a41013602002001420137026c200141b4bcc3003602682001200141d0006a360278200141e4006a41dcb7c000200141e8006a103e1a20013502604220862001350258841000200128025c450d002001280258102c0b2005450d002004102c0b0240024020030d0020004100360208200042043702000c010b2000200a370204200020033602000b20014180016a24000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e1e69df30610a902200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000bd30302057f017e230041b0016b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e1ea91cb0610a902200228020421042002280200210541002101200241003a00680240024002400240034020042001460d01200241c8006a20016a200520016a2d00003a00002002200141016a22063a00682006210120064120460d020c000b0b200141ff0171450d01200241003a00680c010b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2204200241c8006a41106a290300370300200241f0006a41186a2205200241c8006a41186a29030037030020022002290348370370200641ff0171411f4d0d00200241286a41186a20052903002207370300200241086a41086a2001290300370300200241086a41106a2004290300370300200241086a41186a2007370300200220022903703703080c010b200241106a4200370300200241186a4200370300200241206a4200370300200242003703080b20002003360200200020022903083700042000410c6a200241106a290300370000200041146a200241186a2903003700002000411c6a200241206a2903003700000b200241b0016a24000bc50302087f047e230041c0006b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f01064f0d00200421030c010b034002400240200428020022030d00410021030c010b200541016a210520042f010421060b2004102c20032104200620032f01064f0d000b0b200241206a41186a2207200320064105746a220441206a290000370300200241206a41106a2208200441186a290000370300200241206a41086a2209200441106a2900003703002002200441086a290000370320200641016a210402402005450d00200320044102746a41e8026a280200210302402005417f6a2204450d00034020032802e80221032004417f6a22040d000b0b410021040b200241186a2007290300220a370300200241106a2008290300220b370300200241086a2009290300220c37030020022002290320220d3703002001200436020820012003360204200141003602002000200d370001200041096a200c370000200041116a200b370000200041196a200a370000200041013a00000c010b200041003a00000b200241c0006a24000f0b41ecd0c800412b4198d1c800103c000b5b01027f230041306b220124000340200141086a200010e30720012d00080d000b024020002802042202450d00200228020021002002102c2000450d000340200028020021022000102c2002210020020d000b0b200141306a24000bfd0202047f047e230041b0016b220224002002200141e7e485f30610a902200228020421032002280200210441002101200241003a0068024002400240034020032001460d01200241c8006a20016a200420016a2d00003a00002002200141016a22053a00682005210120054120470d000b200241f0006a41086a2201200241c8006a41086a290300370300200241f0006a41106a2203200241c8006a41106a290300370300200241f0006a41186a2204200241c8006a41186a29030037030020022002290348370370200541ff0171411f4b0d01410021010c020b0240200141ff0171450d00200241003a00680b410021010c010b200241286a41186a20042903002206370300200241086a41086a20012903002207370300200241086a41106a20032903002208370300200241086a41186a2006370300200220022903702209370308200041196a2006370000200041116a2008370000200041096a200737000020002009370001410121010b200020013a0000200241b0016a24000b1300200041073602042000419889c6003602000b7301027f024020002802042201450d0020002802002202450d002001450d002002102c0b0240200041106a2802002201450d00200028020c2202450d00200141ffffff3f71450d002002102c0b02402000411c6a2802002201450d0020002802182200450d00200141306c450d002000102c0b0b340020004184dec70036020420004100360200200041146a4105360200200041106a41a090c600360200200041086a42033702000b6f01027f02404108103222020d001039000b2000420837020420002002360200200041004104102f2000280200200041086a220228020022036a41003600002002200341046a2203360200200020034104102f2000280200200228020022006a41003600002002200041046a3602000b6001027f230041106b22022400024041e00010322203450d002002410c6a41083602002002200336020820024200370300410410322203450d00200042043702042000200336020020004100108f01200210aa06200241106a24000f0b1039000be40401017f230041c0006b2202240002400240024002400240200028020022002802000e0401020300010b200220002802043602202002200041086a280200360224200241146a41023602002002410236020c2001411c6a28020021002002200241246a3602102002200241206a360208200128021821012002413c6a41023602002002420337022c20024184b1c0003602282002200241086a36023820012000200241286a103e21000c030b200220002802043602202002200041086a280200360224200241146a41023602002002410236020c2001411c6a28020021002002200241246a3602102002200241206a360208200128021821012002413c6a41023602002002420337022c2002419cb1c0003602282002200241086a36023820012000200241286a103e21000c020b200220002802043602042002200041086a28020036022020022000410c6a280200360224200241086a41146a4102360200200241086a410c6a41023602002002410236020c2001411c6a28020021002002200241246a3602182002200241206a3602102002200241046a36020820012802182101200241286a41146a41033602002002420437022c200241b4b1c0003602282002200241086a36023820012000200241286a103e21000c010b200220002802043602202002200041086a280200360224200241146a41023602002002410236020c2001411c6a28020021002002200241246a3602102002200241206a360208200128021821012002413c6a41023602002002420337022c200241d4b1c0003602282002200241086a36023820012000200241286a103e21000b200241c0006a240020000bac3402037f027e0240024002400240024002400240024002400240024020002802000e0a000102030405060708090a0b2001200141086a22022802004101102f200128020020022802006a41003a00002002200228020041016a220336020002400240024002400240200041086a22042d00000e0500010203040e0b200120034101102f200128020020022802006a41003a00002002200228020041016a3602002001200041106a290300200041186a2d0000200041196a2d000010ac070f0b200120034101102f200128020020022802006a41013a00002002200228020041016a2204360200024002400240024002402000410c6a2d00000e0400010203000b200120044101102f2001280200200141086a22022802006a41003a00002002200228020041016a3602000c030b200120044101102f2001280200200141086a22022802006a41013a00002002200228020041016a3602000c020b200120044101102f2001280200200141086a22022802006a41023a00002002200228020041016a3602000c010b200120044101102f2001280200200141086a22022802006a41033a00002002200228020041016a220436020020002d000d2103200120044101102f200128020020022802006a20033a00002002200228020041016a220436020020002d000e2103200120044101102f200128020020022802006a20033a00002002200228020041016a3602000b20012000290318200041206a2d0000200041216a2d000010ac070f0b200120034101102f200128020020022802006a41023a00002002200228020041016a3602000f0b200120034101102f200128020020022802006a41033a00002002200228020041016a2200360200200120004120102f200128020020022802006a22012004290001370000200141186a200441196a290000370000200141106a200441116a290000370000200141086a200441096a2900003700002002200228020041206a3602000f0b200120034101102f200128020020022802006a41043a00002002200228020041016a2200360200200120004120102f200128020020022802006a22012004290001370000200141186a200441196a290000370000200141106a200441116a290000370000200141086a200441096a2900003700002002200228020041206a3602000f0b2001200141086a22022802004101102f200128020020022802006a41033a00002002200228020041016a2203360200200041046a210402400240024020002d00040e030001020b0b200120034101102f200128020020022802006a41003a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041286a2802002100200120044104102f200128020020022802006a20003600002002200228020041046a3602000f0b200120034101102f200128020020022802006a41013a00002002200228020041016a2204360200200041086a2802002100200120044104102f200128020020022802006a20003600002002200228020041046a3602000f0b200120034101102f200128020020022802006a41023a00002002200228020041016a2203360200200041286a2802002100200120034104102f200128020020022802006a20003600002002200228020041046a2200360200200120004120102f200128020020022802006a22012004290001370000200141186a200441196a290000370000200141106a200441116a290000370000200141086a200441096a2900003700002002200228020041206a3602000f0b2001200141086a22022802004101102f200128020020022802006a41043a00002002200228020041016a220336020002400240024002400240024002400240200041086a22042d00000e0800010203040506070f0b200120034101102f200128020020022802006a41003a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41013a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41023a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2203360200200120034120102f200128020020022802006a2203200441216a290000370000200341186a200441396a290000370000200341106a200441316a290000370000200341086a200441296a2900003700002002200228020041206a2204360200200041d0006a2903002105200041d8006a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41033a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22042006370008200420053700002002200228020041106a2204360200200041c0006a2903002105200041c8006a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41043a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41053a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41063a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41073a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2203360200200120034120102f200128020020022802006a2203200441216a290000370000200341186a200441396a290000370000200341106a200441316a290000370000200341086a200441296a2900003700002002200228020041206a2204360200200041d0006a2903002105200041d8006a2903002106200120044110102f200128020020022802006a22042006370008200420053700002002200228020041106a220436020020002d00492100200120044101102f200128020020022802006a2102024020004101460d00200241003a0000200141086a2201200128020041016a3602000f0b200241013a0000200141086a2201200128020041016a3602000f0b2001200141086a22022802004101102f200128020020022802006a41073a00002002200228020041016a2203360200024002400240024002400240024002400240200041086a22042d00000e090001020304050607080f0b200120034101102f200128020020022802006a41003a00002002200228020041016a22043602002000410c6a2802002103200120044104102f200128020020022802006a20033600002002200228020041046a2204360200200041106a2903002105200041186a2903002106200120044110102f200128020020022802006a22042006370008200420053700002002200228020041106a2204360200200041206a2903002105200041286a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41013a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41023a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41033a00002002200228020041016a22043602002000410c6a2802002100200120044104102f200128020020022802006a20003600002002200228020041046a3602000f0b200120034101102f200128020020022802006a41043a00002002200228020041016a360200200120042d000110310f0b200120034101102f200128020020022802006a41053a00002002200228020041016a360200200120042d000110310f0b200120034101102f200128020020022802006a41063a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41073a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b200120034101102f200128020020022802006a41083a00002002200228020041016a2203360200200120034120102f200128020020022802006a22032004290001370000200341186a200441196a290000370000200341106a200441116a290000370000200341086a200441096a2900003700002002200228020041206a2204360200200041306a2903002105200041386a2903002106200120044110102f200128020020022802006a22012006370008200120053700002002200228020041106a3602000f0b2001200141086a22022802004101102f200128020020022802006a41083a00002002200228020041016a2204360200200120044101102f200128020020022802006a41003a00002002200228020041016a2204360200200120044110102f200128020020022802006a2204200041106a290000370000200441086a200041186a2900003700002002200228020041106a36020020002802042000410c6a280200200110bb01200041206a2d00002100200120022802004101102f200128020020022802006a20003a00002002200228020041016a3602000f0b2001200141086a22022802004101102f200128020020022802006a410a3a00002002200228020041016a2204360200200120044101102f200128020020022802006a41003a00002002200228020041016a220436020020002802042100200120044104102f200128020020022802006a20003600002002200228020041046a3602000f0b2001200141086a22022802004101102f200128020020022802006a410b3a00002002200228020041016a220436020002400240024020002802040e03000102060b200120044101102f200128020020022802006a41003a00002002200228020041016a360200200041086a28020021022001200041106a2802002200108f012000450d052002200041286c6a2103200141086a220028020021040340200120044120102f200128020020002802006a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002000200028020041206a2204360200200241206a2903002105200120044108102f200128020020002802006a20053700002000200028020041086a22043602002003200241286a2202470d000c060b0b200120044101102f200128020020022802006a41013a00002002200228020041016a3602000f0b200120044101102f200128020020022802006a41023a00002002200228020041016a3602000f0b2001200141086a22022802004101102f200128020020022802006a410c3a00002002200228020041016a220436020002400240024020002d00040e03000102050b200120044101102f200128020020022802006a41003a00002002200228020041016a2204360200200120044120102f200128020020022802006a2201200041046a2200290001370000200141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a2900003700002002200228020041206a3602000f0b200120044101102f200128020020022802006a41013a00002002200228020041016a3602000f0b200120044101102f200128020020022802006a41023a00002002200228020041016a360200200041086a28020021022001200041106a2802002200108f012000450d022002200041d0006c6a210303402001200141086a22002802004120102f200128020020002802006a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002000200028020041206a360200200241206a200110f8032003200241d0006a2202470d000c030b0b2001200141086a22022802004101102f200128020020022802006a41103a00002002200228020041016a220436020002400240024020002802040e03000102040b200120044101102f200128020020022802006a41003a00002002200228020041016a3602002001200041086a10f6052000418c026a28020020004194026a280200200110bb010f0b200120044101102f200128020020022802006a41013a00002002200228020041016a3602002001200041086a10f6052000418c026a28020020004194026a280200200110bb010f0b200120044101102f200128020020022802006a41023a00002002200228020041016a3602002001200041086a10f6052000418c026a28020020004194026a280200200110bb010f0b2001200141086a22022802004101102f200128020020022802006a411b3a00002002200228020041016a220436020002400240024020002d00040e03000102030b200120044101102f200128020020022802006a41003a00002002200228020041016a3602002001200041086a2d0000200041096a2d00002000410a6a2d000010aa070f0b200120044101102f200128020020022802006a41013a00002002200228020041016a2204360200200120044120102f200128020020022802006a2201200041046a2200290001370000200141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a2900003700002002200228020041206a3602000f0b200120044101102f200128020020022802006a41023a00002002200228020041016a3602002001200041086a2d0000200041096a2d00002000410a6a2d000010aa070b0b13002000410a360204200041cca4c6003602000b3400200041c1dcc70036020420004100360200200041146a4110360200200041106a41dcc0c600360200200041086a42063702000b4901017f02404101103222020d001039000b2000420137020420002002360200200041004101102f2000280200200041086a220028020022026a41003a00002000200241016a3602000b2901017f230041106b2202240020024100360208200242043703002000200210b807200241106a24000b4901027f230041106b22022400200241003602082002420437030002404104103222030d001039000b200042043702042000200336020020004100108f012002102b200241106a24000bfd0101087f230041306b2202240020004201370200200241186a22034200370300200241106a22044200370300200241086a22054200370300200041086a22064100360200200242003703000240412010322207450d002002422037022420022007360220200241206a41004120102f20022802202208200228022822096a22072002290300370000200741086a2005290300370000200741106a2004290300370000200741186a20032903003700002002200941206a2207360228200041002007102f2000280200200628020022006a2008200710c9081a2006200020076a36020002402002280224450d002008102c0b200241306a24000f0b1039000b870101027f20004201370200200041086a22024100360200200041004108102f2000280200200228020022036a42003700002002200341086a2203360200200020034108102f2000280200200228020022036a42003700002002200341086a2203360200200020034108102f2000280200200228020022006a42003700002002200041086a3602000b8b0101037f230041d0006b22022400200241086a410041c80010cb081a200041086a2203410036020020004201370200200041004104102f2000280200200328020022046a41003600002003200441046a2204360200200020044104102f2000280200200328020022046a41003600002003200441046a3602002000200241086a108705200241d0006a24000b130020004103360204200041dcdcc6003602000bff0203027f017e017f230041c0016b22022400200241086a109b01200041086a220341003602002000420137020020022903082104200041004108102f2000280200200328020022056a20043700002003200541086a220536020020022903102104200020054108102f2000280200200328020022056a20043700002003200541086a220536020020022903182104200020054108102f2000280200200328020022056a20043700002003200541086a3602002000200241206a109f042000200241306a109f042000200241c0006a109f04200241d0006a2903002104200020032802004108102f2000280200200328020022056a20043700002003200541086a3602002000200241d8006a109f042000200241e8006a109f042000200241f8006a109f0420024188016a2903002104200020032802004108102f2000280200200328020022056a20043700002003200541086a360200200020024190016a109f042000200241a0016a109f042000200241b0016a109f04200241c0016a24000b6701027f20004201370200200041086a22024100360200200041004108102f2000280200200228020022036a42c0f0f50b3700002002200341086a2203360200200020034108102f2000280200200228020022006a4280c2d72f3700002002200041086a3602000b4a01017f02404104103222020d001039000b2000420437020420002002360200200041004104102f2000280200200041086a220028020022026a41e0123600002000200241046a3602000b3c02017e017f0240024010252201422088a72202450d0020002001a73602000c010b20004101360200410021020b20002002360208200020023602040b130020002002ad4220862001ad84101e10fc070b130020004105360204200041ece5c6003602000bd20101057f230041206b22022400024002402001422088a722030d004101210441002103410121050c010b2001a72105410021040b2002200336020c200220053602080240024002402003450d0020052d0000210620022003417f6a36020c2002200541016a360208024020060e020200010b200241106a200241086a10af0820022802102203450d00200229021421010c020b41f2b3c800412e200241106a41a0b4c80041b0b4c8001040000b410021030b2000200137020420002003360200024020040d002005102c0b200241206a24000bb70301067f230041106b2202240020004201370200200041086a22034100360200024002400240024020012d00000e03000102030b200041004101102f2000280200200328020022046a41013a00002003200441016a3602002000200141016a10e4050c020b200041004101102f2000280200200328020022046a41023a00002003200441016a3602002000200141016a10e4050c010b200041004101102f2000280200200328020022046a41033a00002003200441016a3602002000200141016a10e4050b2001280224220128020021042000200041086a22032802004104102f2000280200200328020022056a20043600002003200541046a22063602000240412010322204450d002002422037020420022004360200200241004120102f20022802002205200228020822076a22042001290004370000200441086a2001410c6a290000370000200441106a200141146a290000370000200441186a2001411c6a2900003700002002200741206a2201360208200020062001102f2000280200200328020022006a2005200110c9081a2003200020016a36020002402002280204450d002005102c0b200241106a24000f0b1039000bbb0502067f017e230041c0046b2202240041002103200241003a00b00320012802042104417f21050240024002400240034020042003460d0120024190036a20036a200128020022062d00003a00002001200420056a3602042001200641016a3602002002200341016a22063a00b0032005417f6a21052006210320064120470d000b200241a0026a41086a220320024190036a41086a290300370300200241a0026a41106a220520024190036a41106a290300370300200241a0026a41186a220720024190036a41186a29030037030020022002290390033703a002200641ff0171411f4b0d010c020b200341ff0171450d01200241003a00b0030c010b20024180026a41086a200329030037030020024180026a41106a200529030037030020024180026a41186a2007290300370300200220022903a0023703800202400240200420066b22034108490d002001280200220529000021082001200341786a3602042001200541086a36020020024190036a200110ac05200228029403450d01200241a0026a20024190036a41f00010c9081a20024190036a200110ac050240200228029403450d00200241206a20024190036a41f00010c9081a200241086a220320024180026a41086a290300370300200241106a220120024180026a41106a290300370300200241186a220520024180026a41186a290300370300200220022903800237030020024190016a200241a0026a41f00010c9081a20002008370300200041086a20024190016a41f00010c9081a200041f8006a200241206a41f00010c9081a20004180026a2005290300370300200041f8016a2001290300370300200041f0016a2003290300370300200041e8016a20022903003703000c040b2000410036020c200241a0026a410472102b0c030b2000410036020c0c020b2000410036020c0c010b2000410036020c0b200241c0046a24000ba75108077f017e097f047e077f017e387f057e230022012102200141c0056b41607122012400200141386a22034200370300200141306a22044200370300200141206a41086a220542003703002001420037032020014180056a41bee8c700410d10c501200520014180056a41086a2206290000370300200120012900800537032020014180056a41b4edc700410f10c50120032006290000370300200420012900800537030020014180056a200141206a10f5042001280280052103200520014180056a410c6a28020036020020012001290284053703200240024020030d0020014200370318200142043703100c010b200141106a410c6a200528020036020020012003360210200120012903203702140b200141386a22054200370300200141306a22064200370300200141206a41086a2203420037030020014200370320200141c0046a41f1ddc700410510c5012003200141c0046a41086a290000370300200120012900c00437032020014180056a41c4fec000410a10c501200520014180056a41086a290000370300200620012900800537030020014180046a200141206a412010b9030240024020012802800422050d00410021070c010b2001290284042208422088a721072008a72203450d00200341ffffffff0371450d002005102c0b200041f0016a2802002109200141386a220a4200370300200141306a220b4200370300200141206a41086a2205420037030020014200370320200141c0046a41c1dcc700410610c5012005200141c0046a41086a290000370300200120012900c00437032020014180056a4196a4c600410610c501200641086a20014180056a41086a22032900003700002006200129008005370000200141086a200141206a412010c601200128020c21062001280208210c200a4200370300200b4200370300200542003703002001420037032020014180056a41bee8c700410d10c50120052003290000370300200120012900800537032020014180056a41c4efc700411110c501200441086a220d200329000037000020042001290080053700004100210e200120064100200c1b3602800541042106200141206a412020014180056a410410a702200a4200370300200b4200370300200542003703002001420037032020014180056a41bee8c700410d10c50120052003290000370300200120012900800537032020014180056a4188eec700411110c501200d20032900003700002004200129008005370000200920076a210f200141c0046a200141206a10eb040240024020012802c00422100d00200141003602c803200142043703c003410021110c010b200120012902c40422083702c403200120103602c0032008a7211102402008422088a7220e450d002010200e412c6c6a210c2001419c056a210d200141c0046a410472210620014180046a41086a210b20102105034020014102360220200529020021082001290338211220012903302113200129032821142005200129032037020020052902082115200520143702082005290210211420052013370210200541186a2203290200211320032012370200200120133703d804200120143703d004200120153703c804200120083703c004200b200541286a2802003602002001200541206a2902003703800402402008a70d00200d20012903800437020020014180056a41186a2203200641186a28020036020020014180056a41106a200641106a290200220837030020014180056a41086a200641086a2902002212370300200d41086a200b28020036020020012006290200221337038005200141206a41206a221620014180056a41206a290300370300200141206a41186a22172003290300370300200141206a41106a22182008370300200141206a41086a221920123703002001201337032002402001280218220a2001280214470d00200141106a200a1081042001280218210a0b2001280210200a412c6c6a2203200129032037020020034100360228200341086a2019290300370200200341106a2018290300370200200341186a2017290300370200200341206a20162903003702002001200a41016a3602180b2005412c6a2205200c470d000b0b201021060b02400240200f200e4b0d002001200f3602c803200f210a0c010b200141206a41186a20014180056a41186a290200370300200141206a41106a20014180056a41106a290200370300200141206a41086a20014180056a41086a2902003703002001200129028005370320200141c0036a200e200f200e6b220b10dd0120012802c003220620012802c803220a412c6c6a21050240200b4102490d00200e417f73200920076a6a21030340200541023602002005412c6a21052003417f6a22030d000b200b200a6a417f6a210a0b0240200b450d0020054102360200200541086a2001290320370200200541106a200141206a41086a290300370200200541186a200141206a41106a290300370200200541206a200141206a41186a290300370200200a41016a210a0b2001200a3602c80320012802c40321110b200141386a4200370300200141306a4200370300200141206a41086a220542003703002001420037032020014180056a41bee8c700410d10c501200520014180056a41086a2203290000370300200120012900800537032020014180056a4188eec700411110c501200441086a2003290000370000200420012900800537000020014180056a2006200a10e404200141206a4120200128028005220520012802880510a7020240200128028405450d002005102c0b02402011450d002011412c6c450d002006102c0b0240024002400240024002400240024002400240024002400240024002400240200f450d00200041e8026a2802002206450d0020004184036a290200210820002902fc0221122000418c036a290000211320004194036a290000211441002105200141206a410041800210cb081a200141c8026a221a4200370300200141c0026a2014370300200141b8026a2013370300200141b0026a2008370300200141d0026a4200370300200120123703a802200141c0003602a002200141003602f802200142043703f002200141f0026a4100200610950220012802f00220012802f802220a4102746a2103034020032005360200200341046a21032006200541016a2205470d000b20012006200a6a221b3602f8020240201b4102490d0020012802f002211c201bad211d2001419c056a211e200141ac056a211f200141bc056a21200340201da72205417f6a21212005200567411f7174417f6a212220012802a002210503400240200541c000490d0020012903c0022212422088a7212320012903b8022213422088a7212420012802cc022225ad42208620012802c8022226ad84220842037c2214a72127200842027c2215a72128200842017c2208a721292014422088a7212a2015422088a7212b2008422088a7212c2012a7212d2013a7212e41e5f0c18b06212f41eec8819903213041b2da88cb07213141f4ca81d9062132410a213320012802b8022234213520012802bc022236213720012802c0022238213920012802c402223a213b2034213c2036213d2038213e203a213f20012802b4022205210b20012802b0022203210c20012802ac022206210d20012802a802220a2116200521172003211820062119200a210e200521112003211020062107200a210920012903d0022208422088a7224021412008a7224221432040214420422145204021462042214741f4ca81d906214841b2da88cb07214941eec8819903214a41e5f0c18b06214b41f4ca81d906214c41b2da88cb07214d41eec8819903214e41e5f0c18b06214f41f4ca81d906215041e5f0c18b06215141eec8819903215241b2da88cb0721530340200620306a2230ad422086200a202f6a222fad84202aad4220862027ad84852208422088a74110772227203d6a222aad4220862008a7411077223d203c6a223cad842006ad422086200aad84852208422088a7410c77220620306a220aad4220862008a7410c772230202f6a222fad842027ad422086203dad84852208422088a74108772227202a6a222aad4220862008a74108772254203c6a223cad842006ad4220862030ad84852208a74107772206200520326a2230ad422086200320316a2231ad842040ad4220862042ad84852212422088a74110772240203f6a2242ad4220862012a74110772232203e6a223dad842005ad4220862003ad84852212422088a7410c77220520306a22036a2230ad4220862003ad4220862012a7410c77220320316a2231ad842040ad4220862032ad84852212422088a7410877224020426a223ead4220862012a74108772242203d6a223fad842005ad4220862003ad84852212422088a7410777220520316a2203ad842042ad4220862027ad84852213422088a74110772242202a6a2227ad4220862013a7411077222a203c6a223cad842006ad4220862005ad84852213422088a7410c77220520306a2232ad4220862013a7410c77220620036a2231ad842042ad422086202aad84852213422088a7410877224220276a223dad4220862013a7410877222a203c6a223cad842005ad4220862006ad84852213a741077721052012a74107772203200a6a2206ad4220862008422088a7410777220a202f6a2227ad842054ad4220862040ad84852208422088a74110772240203e6a223ead4220862008a74110772254203f6a2255ad842003ad422086200aad84852208422088a7410c77220320066a2230ad4220862008a7410c77220620276a222fad842040ad4220862054ad84852208422088a74108772227203e6a223fad4220862008a7410877224020556a223ead842003ad4220862006ad84852208a74107772106200d204a6a2203ad4220862016204b6a220aad84202bad4220862028ad84852212422088a7411077222820376a222bad4220862012a7411077223720356a2235ad84200dad4220862016ad84852212422088a7410c77220d20036a2203ad4220862012a7410c772216200a6a220aad842028ad4220862037ad84852212422088a74108772228202b6a222bad4220862012a7410877224a20356a2235ad84200dad4220862016ad84852212a7410777220d200b20486a2216ad422086200c20496a2237ad842041ad4220862043ad84852214422088a74110772241203b6a223bad4220862014a7411077224320396a2239ad84200bad422086200cad84852214422088a7410c77220b20166a220c6a2216ad422086200cad4220862014a7410c77220c20376a2237ad842041ad4220862043ad84852214422088a74108772241203b6a223bad4220862014a7410877224320396a2239ad84200bad422086200cad84852214422088a7410777220b20376a220cad842043ad4220862028ad84852215422088a74110772228202b6a222bad4220862015a7411077223720356a2235ad84200dad422086200bad84852215422088a7410c77220b20166a2248ad4220862015a7410c77220d200c6a2249ad842028ad4220862037ad84852215422088a74108772243202b6a2237ad4220862015a7410877222b20356a2235ad84200bad422086200dad84852215a7410777210b2014a7410777220c20036a2203ad4220862012422088a7410777220d200a6a220aad84204aad4220862041ad84852212422088a74110772216203b6a223bad4220862012a7411077222820396a2239ad84200cad422086200dad84852212422088a7410c77220c20036a224aad4220862012a7410c772203200a6a224bad842016ad4220862028ad84852212422088a74108772228203b6a223bad4220862012a7410877224120396a2239ad84200cad4220862003ad84852212a7410777210d2019204e6a2203ad422086200e204f6a220aad84202cad4220862029ad84852214422088a7411077220c20366a2216ad4220862014a7411077223620346a2234ad842019ad422086200ead84852214422088a7410c77221920036a2203ad4220862014a7410c77220e200a6a220aad84200cad4220862036ad84852214422088a7410877220c20166a2216ad4220862014a7410877222920346a2234ad842019ad422086200ead84852214a741077722192017204c6a220ead4220862018204d6a2236ad842044ad4220862045ad84852256422088a7411077222c203a6a223aad4220862056a7411077224420386a2238ad842017ad4220862018ad84852256422088a7410c772217200e6a22186a220ead4220862018ad4220862056a7410c77221820366a2236ad84202cad4220862044ad84852256422088a74108772244203a6a223aad4220862056a7410877222c20386a2238ad842017ad4220862018ad84852256422088a7410777221720366a2218ad84202cad422086200cad84852257422088a7411077220c20166a2216ad4220862057a7411077223620346a2234ad842019ad4220862017ad84852257422088a7410c772217200e6a224cad4220862057a7410c77221920186a224dad84200cad4220862036ad84852257422088a7410877224520166a2236ad4220862057a7410877222c20346a2234ad842017ad4220862019ad84852257a741077721172056a7410777220c20036a2203ad4220862014422088a74107772216200a6a220aad842029ad4220862044ad84852214422088a74110772218203a6a2219ad4220862014a7411077220e20386a2238ad84200cad4220862016ad84852214422088a7410c77220c20036a224ead4220862014a7410c772203200a6a224fad842018ad422086200ead84852214422088a7410877222920196a223aad4220862014a7410877224420386a2238ad84200cad4220862003ad84852214a74107772119200720526a2203ad422086200920516a220aad842025ad4220862026ad84852256422088a7411077220c20246a2216ad4220862056a74110772218202e6a220ead842007ad4220862009ad84852256422088a7410c77220720036a2203ad4220862056a7410c772209200a6a220aad84200cad4220862018ad84852256422088a7410877220c20166a2216ad4220862056a74108772218200e6a220ead842007ad4220862009ad84852256a74107772207201120506a2209ad422086201020536a2225ad842046ad4220862047ad84852258422088a7411077222620236a2246ad4220862058a74110772247202d6a2250ad842011ad4220862010ad84852258422088a7410c77221120096a22106a2209ad4220862010ad4220862058a7410c77221020256a2225ad842026ad4220862047ad84852258422088a7410877222620466a2246ad4220862058a7410877224720506a2251ad842011ad4220862010ad84852258422088a7410777221120256a2210ad842047ad422086200cad84852259422088a7411077220c20166a2216ad4220862059a74110772225200e6a220ead842007ad4220862011ad84852259422088a7410c77221120096a2250ad4220862059a7410c77220720106a2253ad84200cad4220862025ad84852259422088a7410877224720166a2224ad4220862059a74108772225200e6a222ead84225a2011ad4220862007ad84852259a741077721112058a7410777220c20036a2203ad4220862056422088a74107772216200a6a220aad842018ad4220862026ad84852256422088a7411077221820466a220ead4220862056a7411077221020516a2207ad84200cad4220862016ad84852256422088a7410c77220c20036a2252ad4220862056a7410c772203200a6a2251ad842018ad4220862010ad84852256422088a74108772226200e6a2223ad4220862056a7410877224620076a222dad842258200cad4220862003ad84852256a741077721072013422088a7410777210a2008422088a741077721032015422088a741077721162012422088a7410777210c2057422088a7410777210e2014422088a741077721182059422088a741077721092056422088a741077721102033417f6a22330d000b20012903c802210820012903d0022112200120323602bc03200120313602b803200120303602b4032001202f3602b003200120483602ac03200120493602a8032001204a3602a4032001204b3602a0032001204c36029c032001204d360298032001204e360294032001204f360290032001205036028c03200120533602880320012052360284032001205136028003200120053602fc03200120033602f803200120063602f4032001200a3602f0032001200b3602ec032001200c3602e8032001200d3602e403200120163602e003200120173602dc03200120183602d803200120193602d4032001200e3602d003200120113602cc03200120103602c803200120073602c403200120093602c00320012058370388042001205a370380042001203f3602bc042001203e3602b8042001203d3602b4042001203c3602b0042001203b3602ac04200120393602a804200120373602a404200120353602a0042001203a36029c04200120383602980420012036360294042001203436029004200120403602fc04200120423602f8042001202a3602f404200120273602f004200120413602ec04200120433602e8042001202b3602e404200120283602e004200120443602dc04200120453602d8042001202c3602d404200120293602d004200120463602cc04200120473602c804200120253602c404200120263602c00420012802a802210520012802ac02210320012802b002210620012802b402210a20012802b802210b20012802bc02210c20012802c002210d20012802c402211620014180056a41086a201a41086a2903002213370300200120123703b805200120123703a80520012012370398052001201a2903002212370380052001200842037c22143e02b005200120144220883e02b4052001200842027c22143e02a005200120144220883e02a4052001200842017c22143e029005200120144220883e0294052001200842047c22083e02c802200120084220883e02cc02200128028003211720012802840321182001280288032119200128028c03210e20012802c003211120012802c403211020012802c803210720012802cc032109200128028004214020012802840421422001280288042134200128028c04213620012802c0042138200128028405213a20012802c404212520012802c80421262001200128028c0520012802cc046a36025c200120262013a76a3602582001203a20256a360254200120382012a76a3602502001201620366a36024c2001200d20346a3602482001200c20426a3602442001200b20406a3602402001200a20096a36023c2001200620076a3602382001200320106a3602342001200520116a3602302001200e41f4ca81d9066a36022c2001201941b2da88cb076a3602282001201841eec88199036a3602242001201741e5f0c18b066a360220200128029003211720012802940321182001280298032119200128029c03210e20012802d003211120012802d403211020012802d803210720012802dc032109200128029004214020012802940421422001280298042134200128029c04213620012802d0042138200128029005213a20012802d4042125200128029405212620012802d804212720012802980521282001201e28020020012802dc046a36029c012001202820276a360298012001202620256a360294012001203a20386a360290012001201620366a36028c012001200d20346a360288012001200c20426a360284012001200b20406a360280012001200a20096a36027c2001200620076a3602782001200320106a3602742001200520116a3602702001200e41f4ca81d9066a36026c2001201941b2da88cb076a3602682001201841eec88199036a3602642001201741e5f0c18b066a36026020012802a003211720012802a403211820012802a803211920012802ac03210e20012802e003211120012802e403211020012802e803210720012802ec03210920012802a004214020012802a404214220012802a804213420012802ac04213620012802e004213820012802a005213a20012802e404212520012802a405212620012802e804212720012802a80521282001201f28020020012802ec046a3602dc012001202820276a3602d8012001202620256a3602d4012001203a20386a3602d0012001201620366a3602cc012001200d20346a3602c8012001200c20426a3602c4012001200b20406a3602c0012001200a20096a3602bc012001200620076a3602b8012001200320106a3602b4012001200520116a3602b0012001200e41f4ca81d9066a3602ac012001201941b2da88cb076a3602a8012001201841eec88199036a3602a4012001201741e5f0c18b066a3602a00120012802b003211720012802b403211820012802b803211920012802bc03210e20012802f003211120012802f403211020012802f803210720012802fc03210920012802b004214020012802b404214220012802b804213420012802bc04213620012802f004213820012802b005213a20012802f404212520012802b405212620012802f804212720012802b80521282001202028020020012802fc046a36029c022001202820276a360298022001202620256a360294022001203a20386a360290022001201620366a36028c022001200d20346a360288022001200c20426a360284022001200b20406a360280022001200a20096a3602fc012001200620076a3602f8012001200320106a3602f4012001200520116a3602f0012001200e41f4ca81d9066a3602ec012001201941b2da88cb076a3602e8012001201841eec88199036a3602e4012001201741e5f0c18b066a3602e00141002105200141003602a0020b200141206a20054102746a35020021082001200541016a22053602a0022022201d20087e2208a7490d000b2021201b4f0d08201b2008422088a722054d0d07201c20214102746a220328020021062003201c20054102746a220528020036020020052006360200201d427f7c211d202141014b0d000b0b20004188026a2802004101460d0120012802f80221050c020b2001410036022820014204370320200141206a109b080c020b20012802f80222052000418c026a280200200f6c2203490d00200120033602f802200321050b200141003602c804200142043703c004200141c0046a4100200f10ec012005200f70210d2005200f6e211620012802c8042205200f6a211720012802c0042005410c6c6a210b4100210c0340417f4100200d200c4b1b20166b220320012802f80222056a220620054b0d0220014100360288052001420437038005200120063602f80220012802f002210a20014180056a4100410020034102746b410276109502200a20054102746a2105200a20064102746a210a2001280288052106024002402003450d0020012802800520064102746a2103034020032005417c6a2205280200360200200641016a2106200341046a21032005200a470d000b2001200636028805200a21030c010b200120063602880502400240200a2005470d00200a21030c010b2005200a6b417c6a417c71200a6a41046a21030b2005210a0b200c41016a210c200a20036b2105024003402005450d012005417c6a21050c000b0b200b200129038005370200200b41086a20014180056a41086a280200360200200b410c6a210b200c200f470d000b200120173602c80420014188056a2017360200200120012903c0043703800520014180056a109b0820012802f40241ffffffff0371450d0020012802f002102c0b200141386a4200370300200141306a4200370300200141206a41086a220542003703002001420037032020014180056a41bee8c700410d10c501200520014180056a41086a2203290000370300200120012900800537032020014180056a41f4eec700411410c501200441086a2003290000370000200420012900800537000020014180056a200141206a412010b903200129028405420020012802800522051b21082005410420051b211120002802f001450d032001280218220d450d0820012802102110200d417f6a210720014180036a41046a2119200141c0036a41086a210e4100211641002103034020102003412c6c6a210520002802f40121182003210a024002400240024002400240024002400340200d200a460d012005280200210c02400240200541246a28020020184b0d00200141c0046a41f1ddc700410510c50120014180056a41e8fec000410b10c5012001200c36028003200141c0036a20014180036a410410c7012001201936022c2001200e360224200120014180036a3602282001200141c0036a36022020014180046a200141206a107e200128028804220341206a2206417f4c0d040240024020060d004101210b0c010b20061032220b450d060b200141003602c803200120063602c4032001200b3602c003200141c0036a4100411010c80120012802c00320012802c80322066a220b20012900c004370000200b41086a200141c0046a41086a2900003700002001200641106a22063602c803200141c0036a2006411010c80120012802c00320012802c80322066a220b200129008005370000200b41086a20014180056a41086a2900003700002001200641106a220b3602c8032001280280042106200141c0036a200b200310c80120012802c003220b20012802c80322176a2006200310c9081a2001201720036a22033602c8030240200128028404450d002006102c0b200141206a200b200310b30102400240200128022022060d00410021030c010b410121032001280224450d002006102c0b024020012802c403450d00200b102c0b20030d010b024002402008422088a722170e020a00010b41002105200c2011280200470d090c080b4100210520172103034020052003410176220620056a220b200c2011200b4102746a280200491b2105200320066b220341014b0d000c070b0b02402016450d00200a20166b2203200d4f0d05200141206a41286a22062005201641546c6a220341286a220b280200360200200141206a41206a220c200341206a2217290200370300200141206a41186a2218200341186a2209290200370300200141206a41106a2240200341106a2242290200370300200141206a41086a2234200341086a223629020037030020012003290200370320200541086a22382902002112200541106a223a2902002113200541186a22252902002114200541206a22262902002115200541286a2227280200212820032005290200370200200b202836020020172015370200200920143702002042201337020020362012370200202720062802003602002026200c29030037020020252018290300370200203a204029030037020020382034290300370200200520012903203702000c090b2005412c6a210541002116200d200a41016a220a470d000c0f0b0b200d200d41f48ac500103f000b103b000b1039000b2003200d41e48ac500103f000b200c201120054102746a280200470d0120052017490d00200520171047000b201120054102746a2203200341046a2005417f7320176a41027410ca081a20084280808080707c21080b201641016a21160b200a41016a21032007200a460d050c000b0b2006200541d089c5001059000b2005201b419c86c400103f000b2021201b41e48ac500103f000b024020012802142205450d002005412c6c450d002001280210102c0b2001420037031820014204370310200842ffffffff0f8321080c050b2016450d0020012802182205200d20166b220d4f0d012005210d0c020b2001280218210d0c010b2001200d3602180b200d450d00200d412c6c2106200128021041286a210541002103034020002802f001220a450d0320052003200a703602002005412c6a2105200341016a2103200641546a22060d000b0b20002802f0012205450d022001200d20057036021c0b200120113602c004200120083702c404200141386a4200370300200141306a4200370300200141206a41086a220542003703002001420037032020014180056a41bee8c700410d10c501200520014180056a41086a2203290000370300200120012900800537032020014180056a41f4eec700411410c501200441086a20032900003700002004200129008005370000200141206a4120200141c0046a10d1040240200842ffffffff0383500d002011102c0b2005200141106a41086a29030037030020012001290310370320200141206a10a406200224000f0b41c0fac70041394180fcc700103c000b41c0fac70041394190fcc700103c000be30401047f23004190016b220524002005200436020420052003360200024002400240200241074b0d0041002802d8d248450d0120054126360244200541e59ec00036024041002802d4d248210241002802d0d248210341002802dcd248210420054188016a41e90036020020054180016a42df80808010370300200541fc006a419e9fc000360200200541f4006a4213370200200541f0006a418b9fc000360200200541e8006a4201370300200541d8006a4201370300200541d0006a4113360200200541e4006a200541086a360200200541b4b5c8003602542005418b9fc00036024c200541013602482005410436020c200241e0a3c000200441024622041b28021021022005200541c0006a360208200341f8a3c00020041b200541c8006a20021103000c010b2002417c714108460d0020012800082102200541c8006a200510ef04200541086a41086a200541d4006a290200370300200541086a41106a2203200541dc006a290200370300200541086a41186a2204200541e4006a290200370300200541086a41206a2201200541ec006a290200370300200541086a41286a2206200541f4006a290200370300200541086a41306a2207200541fc006a2802003602002005200529024c370308024020052802482208450d00200020083602042000200236020020002005290308370208200041106a200541106a290300370200200041186a2003290300370200200041206a2004290300370200200041286a2001290300370200200041306a2006290300370200200041386a20072802003602000c020b200041003602040c010b200041003602040b20054190016a24000bc80302017f017e230041e0006b220524002005200436020420052003360200024002400240200241074b0d0041002802d8d248450d012005412636020c200541e59ec00036020841002802d4d248210241002802d0d248210341002802dcd2482104200541d0006a41e900360200200541c8006a42df80808010370300200541c4006a419e9fc0003602002005413c6a4213370200200541386a418b9fc000360200200541306a4201370300200541206a4201370300200541186a41133602002005412c6a200541d8006a360200200541b4b5c80036021c2005418b9fc000360214200541013602102005410436025c200241e0a3c000200441024622041b28021021022005200541086a360258200341f8a3c00020041b200541106a20021103000c010b2002417c714108460d0020012800082103200541106a200510b006024020052802102202450d00200529021421060240200528020422044104490d00200020063702082000200236020420002003360200200041106a2005280200220228000036020020052004417c6a3602042005200241046a3602000c030b2006428080808010540d002002102c0b200041003602040c010b200041003602040b200541e0006a24000b3400200041f6ddc70036020420004100360200200041146a4102360200200041106a4180efc600360200200041086a420b3702000b13002000411736020420004190fac6003602000bf6840103247f057e197f230041d0076b22042400200441a8056a41086a22052001410c6a290000370300200441a8056a41106a2206200141146a290000370300200441a8056a41186a22072001411c6a290000370300200441d8066a41086a22082001412c6a290200370300200441d8066a41106a2209200141346a290200370300200441d8066a41186a220a2001413c6a290200370300200420012900043703a805200420012902243703d8062001280200210b200441c8026a41186a220c200141dc006a290000370300200441c8026a41106a220d200141d4006a290000370300200441c8026a41086a220e200141cc006a29000037030020044180066a41086a220f200141ec006a29000037030020044180066a41106a2210200141f4006a29000037030020044180066a41186a2211200141fc006a29000037030020044198076a41086a22122001418c016a29000037030020044198076a41106a221320014194016a29000037030020044198076a41186a22142001419c016a290000370300200420012900443703c802200420012900643703800620042001290084013703980720044180016a200141dc016a290000370300200441f8006a200141d4016a290000370300200441f0006a200141cc016a290000370300200441e8006a200141c4016a290000370300200441c8006a41186a200141bc016a290000370300200441c8006a41106a200141b4016a290000370300200441c8006a41086a200141ac016a290000370300200420012900a401370348200441286a200141e4016a10990120044188026a41186a200729030037030020044188026a41106a200629030037030020044188026a41086a2005290300370300200441e8016a41086a2008290300370300200441e8016a41106a2009290300370300200441e8016a41186a200a290300370300200441c8016a41086a200e290300370300200441c8016a41106a200d290300370300200441c8016a41186a200c290300370300200420042903a80537038802200420042903d8063703e801200420042903c8023703c801200441a8016a41186a2011290300370300200441a8016a41106a2010290300370300200441a8016a41086a200f29030037030020044188016a41086a201229030037030020044188016a41106a201329030037030020044188016a41186a201429030037030020042004290380063703a80120042004290398073703880120014198026a280200211520014194026a280200211620014190026a28020021172001418c026a280200211820014188026a280200211920014184026a280200211a20014180026a280200211b200141fc016a280200211c200141f8016a280200211d200141f4016a280200211e200141f0016a280200211f200141ec016a2802002120200141e8016a280200212120012802e4012114200742003703002006420037030020054200370300200442003703a805200441a8026a41ac95c400410d10c5012005200441a8026a41086a290000370300200420042900a8023703a805200441b8026a41c695c400410c10c5012007200441b8026a41086a290000370300200620042900b802370300200441c8026a200441a8056a10f50220042802f402212220042802a0032123200228020421092002280200210a2004411436028807200742003703002006420037030020054200370300200442003703a80520044180066a41ffdcc700410710c5012005200f29000037030020042004290080063703a805200441d8066a418893c700410a10c50120072008290000370300200620042900d806370300200441c8026a200441a8056a10e1010240024020042802c80222050d00200441003602c807200442013703c0070c010b200420042902cc023702c407200420053602c0070b200441c0056a4200370300200441a8056a41106a4200370300200441a8056a41086a22054200370300200442003703a805200441a8026a41e6dcc700410710c5012005200441a8026a41086a290000370300200420042900a8023703a805200441b8026a4188bbc200410910c501200641086a200441b8026a41086a290000370000200620042900b802370000200441c8026a200441a8056a10cb03024002400240024020042903c8024202510d00200441c8026a41106a280200210520044180066a41e6dcc700410710c501200441d8066a419b92c100411010c5012004200536029807200441b0066a20044198076a410410c701200441d4026a20044198076a41046a3602002004200441b0066a41086a3602cc02200420044198076a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b200441003602e805200420073602e405200420083602e005200441e0056a4100411010c80120042802e00520042802e80522076a2208200429008006370000200841086a20044180066a41086a2900003700002004200741106a22073602e805200441e0056a2007411010c80120042802e00520042802e80522076a220820042900d806370000200841086a200441d8066a41086a2900003700002004200741106a22083602e80520042802a8052107200441e0056a2008200510c80120042802e005222420042802e80522086a2007200510c9081a2004200820056a22253602e805024020042802ac05450d002007102c0b200441c8026a2024202510cc03200441a8056a41086a200441c8026a410c6a290200370300200420042902cc023703a8050240024020042802c8024101460d00200441b0066a410c6a4100360200200442003703b0060c010b200441b0066a41086a200441a8056a41086a290300370300200420042903a8053703b0060b200441003602a0072004200936029c072004200a36029807200420044188076a3602a8072004200441c0076a3602a407200441c8026a20044198076a20044198076a410c6a2212108508024020042d00c8024101470d00200441c8026a41106a210f200441b0066a4104722113200441c8026a4101722107200441c8056a2126200441ce056a21270340200441a8056a41186a220c200741186a2900002228370300200441a8056a41106a220d200741106a2900002229370300200441a8056a41086a220e200741086a290000222a37030020044180066a41086a2205202a37030020044180066a41106a2209202937030020044180066a41186a220a20283703002004200729000022283703a805200420283703800620042802a8072802002108200441d8066a41186a2210200a290300370300200441d8066a41106a220a2009290300370300200441d8066a41086a2211200529030037030020042004290380063703d8060240024020042802b4062205450d0020042802b80621090c010b41940310322205450d054100210920054100360200200520042902a805370204200541003b01322005410c6a200e290200370200200541146a200d2902003702002005411c6a200c290200370200200541246a20262902003702002005412a6a2027290100370100200541346a200441c8026a41e00210c9081a200441003602b806200420053602b4060b200441c8026a20092005200441d8066a1090020240024020042802c8024101470d00200e20112903002228370300200d200a2903002229370300200c2010290300222a370300200420042903d806222b3703a80520042902cc02212c20042802d4022105200f202b370200200f41086a2028370200200f41106a2029370200200f41186a202a370200200420133602d402200420053602d0022004202c3703c802200441c8026a410010cd0321050c010b20042802d00220042802d4024102746a41046a21050b2005200528020020086a360200200420042802b00620086a3602b006200441c8026a20044198076a201210850820042d00c8024101460d000b0b200441c8026a410c6a200441b0066a41086a290300370200200420042903b0063702cc02200441013602c80220242025200441c8026a41047210ce03200441c8026a41086a10cf0320042802e405450d002024102c0b024020042802c40741ffffff3f71450d0020042802c007102c0b02400240201c0d004100212d0c010b2001280200210f200441a8026a41f1ddc700410510c501200441b8026a4191f6c000411210c5012004200f3602d806200441b0066a200441d8066a410410c701200441d4026a200441d8066a41046a3602002004200441b8066a3602cc022004200441d8066a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b20044100360288062004200736028406200420083602800620044180066a4100411010c80120042802800620042802880622076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a22073602880620044180066a2007411010c80120042802800620042802880622076a220820042900b802370000200841086a200441b8026a41086a2900003700002004200741106a22073602880620042802a805210820044180066a2007200510c801200428028006220720042802880622096a2008200510c9081a2004200920056a220536028806024020042802ac05450d002008102c0b200441206a2007200510c6010240024020042802204101460d002004201a3602e0062004201b3602dc062004201c3602d806200441a8026a41f1ddc700410510c501200441b8026a41d081c100410a10c5012004200f36029807200441b0066a20044198076a410410c701200441d4026a20044198076a41046a3602002004200441b8066a3602cc02200420044198076a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220841206a220f417f4c0d0302400240200f0d00410121090c010b200f10322209450d050b200441003602d0022004200f3602cc02200420093602c802200441c8026a4100411010c80120042802c80220042802d002220f6a220920042900a802370000200941086a200441a8026a41086a2900003700002004200f41106a220f3602d002200441c8026a200f411010c80120042802c80220042802d002220f6a220920042900b802370000200941086a200441b8026a41086a2900003700002004200f41106a22093602d00220042802a805210f200441c8026a2009200810c80120042802c802220920042802d002220a6a200f200810c9081a2004200a20086a22083602d002024020042802ac05450d00200f102c0b2023410246210f20092008200441d8066a108a03024020042802cc02450d002009102c0b41002022200f1b21080240201b450d00201c102c0b200820006a21080c010b20042802242108201b450d00201c102c0b200420083602c80220072005200441c8026a410410a7020240200428028406450d002007102c0b4101212d0b20012802002105200441a8026a4181dec700410310c501200441b8026a41a4bfc000411510c501200420053602d806200441b0066a200441d8066a410410c701200441d4026a200441d8066a41046a3602002004200441b8066a222e3602cc022004200441d8066a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d000240024020070d00410121080c010b200710322208450d020b200441003602e006200420073602dc06200420083602d806200441d8066a4100411010c80120042802d80620042802e00622076a220820042900a802370000200841086a200441a8026a41086a2900003700002004200741106a22073602e006200441d8066a2007411010c80120042802d80620042802e00622076a220820042900b802370000200841086a200441b8026a41086a2900003700002004200741106a22083602e00620042802a8052107200441d8066a2008200510c80120042802d806220920042802e00622086a2007200510c9081a2004200820056a220a3602e006024020042802ac05450d002007102c0b200441c8026a2009200a10cd0120042902cc022228420020042802c80222051b21292005410420051b2108024002402028422088a7410020051b22052016490d00024002402016450d00200520166b220c41ffffffff0071200c470d04200c4104742205417f4c0d044104210f02402005450d0020051032220f450d060b200f200820164104746a200c41047410c9081a202942ffffffff0f832016ad4220868421282005410476210e2008210d0c010b2029a7220e41ffffffff0071200e470d03200e4104742205417f4c0d034104210d02402005450d0020051032220d450d050b2005410476ad21282029422088a7210c2008210f0b02402028422088a72205450d0020054104742107200d41046a210503400240200541046a280200450d002005280200102c0b200541106a2105200741706a22070d000b0b02402028a72205450d00200d450d00200541ffffffff0071450d00200d102c0b200cad422086200ead8421280c010b202942ffffffff0f83212802402029422088a72205450d002005410474210f4100210503400240200820056a220741086a280200450d00200741046a280200102c0b200f200541106a2205470d000b0b2008210f0b2004200f3602c802200420283702cc022009200a200441c8026a10cf0102402028422088a72205450d0020054104742107200f41046a210503400240200541046a280200450d002005280200102c0b200541106a2105200741706a22070d000b0b0240202842ffffffff0083500d00200f102c0b024020042802dc06450d002009102c0b0240024002400240024002402020450d0020012802002113201441086a21052020410c6c220741746a210f410021080340200528020020086a21082005410c6a2105200741746a22070d000b200441a8026a4184dec700410310c501200441b8026a418894c600411310c501200420133602d806200441b0066a200441d8066a410410c701200441c8026a410c6a200441d8066a41046a3602002004202e3602cc02200f410c6e21092004200441d8066a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d064101210f02402007450d0020071032220f450d080b200441003602880620042007360284062004200f3602800620044180066a4100411010c80120042802800620042802880622076a220f20042900a802370000200f41086a200441a8026a41086a2900003700002004200741106a22073602880620044180066a2007411010c80120042802800620042802880622076a220f20042900b802370000200f41086a200441b8026a41086a2900003700002004200741106a220f3602880620042802a805210720044180066a200f200510c801200428028006220f200428028806220a6a2007200510c9081a2004200a20056a220536028806024020042802ac05450d002007102c0b200441c8026a200f20051083050240024020042802d00222100d0041e00010322210450d0941082105200441b4056a4108360200200420103602b005200442003703a8054100210a4100210e0c010b200441b4056a20042802d4022205360200200420103602b005200420042903c80222283703a8052028422088a7210a2028a7210e0b200941016a21262014410c6a210720142020410c6c22096a2111200441b0056a21162014210c024002400340200c210f024002402009450d00200f280200220d0d0120112007460d0003402007410c6a21050240200741046a280200450d002007280200102c0b2005210720112005470d000b0b02402021450d002021410c6c450d002014102c0b200441c8026a41086a200441a8056a41086a2903002228370300200420042903a8053703c802200428028806210d200428028006210c2028a722090d02200c200d10b4010c030b200f410c6a210c200f2902042128024002402005417f6a220f200a200e6b71200f460d00200a210f0c010b2005417f2011200c6b410c6d220f41016a22122012200f491b6a220f2005490d064100417f200f417f6a6776200f4102491b221241016a220f2012490d060240200f20054b0d00200a210f0c010b20162005200f20056b10850520042802b405210a0240024020042802a805220e20042802ac05220f4b0d0020042802b00521100c010b0240200f2005200e6b2212490d00200e410c6c210520042802b0052210200a20126b220e410c6c6a201020056a2012410c6c10c9081a2004200e3602a8050c010b20042802b00522102005410c6c6a2010200f410c6c10c9081a2004200f20056a220f3602ac050b200a21050b20042005417f6a200f41016a71220a3602ac052010200f410c6c6a220f2028370204200f200d360200200941746a21092007410c6a21070c000b0b20042802d402417f6a220a20042802cc02220f20042802c80222056b712210410c6c41046a2207417f4c0d070240024020070d004101210e0c010b20071032220e450d090b200441003602e006200420073602dc062004200e3602d806200441d8066a2010108f010240200f2005460d00034020092005410c6c6a22072802002007280208200441d8066a10bb01200541016a200a712205200f470d000b0b200c200d20042802d806220520042802e00610a702024020042802dc06450d002005102c0b200441c8026a10aa060b0240200428028406450d00200c102c0b200441a8026a4184dec700410310c501200441b8026a41f494c600411610c501200420133602d806200441b0066a200441d8066a410410c701200441d4026a200441d8066a41046a3602002004200441b8066a3602cc022004200441d8066a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d060240024020070d004101210f0c010b20071032220f450d080b200441003602e006200420073602dc062004200f3602d806200441d8066a4100411010c80120042802d80620042802e00622076a220f20042900a802370000200f41086a200441a8026a41086a2900003700002004200741106a22073602e006200441d8066a2007411010c80120042802d80620042802e00622076a220f20042900b802370000200f41086a200441b8026a41086a2900003700002004200741106a22073602e00620042802a805210f200441d8066a2007200510c80120042802d806220720042802e00622096a200f200510c9081a2004200920056a22053602e006024020042802ac05450d00200f102c0b200441c8026a2007200510a004200441c8026a41086a220f280200210920042802cc02210a20042802c802210c200441013602c802200f20094100200c410146220c1b20086a3602002004200a4100200c1b20266a3602cc0220072005200441c8026a41047210a104024020042802dc06450d002007102c0b200441c0056a4200370300200441b8056a4200370300200441a8056a41086a22054200370300200442003703a80520044180066a4184dec700410310c501200520044180066a41086a29000037030020042004290080063703a805200441d8066a41fc95c600410d10c501200641086a200441d8066a41086a290000370000200620042900d806370000200441c8026a200441a8056a412010b903024002400240024020042802c80222090d0041002105200441003602a0072004420437039807410021074100210a0c010b200420042902cc02222837029c072004200936029807410021050240024002402028422088a7220a0e020201000b41002105200a2107034020052007410176220820056a220f20132009200f4102746a280200491b2105200720086b220741014b0d000b0b2013200920054102746a2802002207460d03200a2005201320074b6a2205490d070b200a2028a72207470d010b20044198076a200710d20420042802980721090b200920054102746a220741046a2007200a20056b41027410ca081a200720133602002004200a41016a3602a0070b200441c8026a41086a20044198076a41086a280200360200200420042903980722283703c80202402028a722050d00200441c0056a4200370300200441b8056a4200370300200441a8056a41086a22054200370300200442003703a80520044180066a4184dec700410310c501200520044180066a41086a29000037030020042004290080063703a805200441d8066a41fc95c600410d10c501200641086a200441d8066a41086a290000370000200620042900d806370000200441a8056a412010b4010c020b200441c0056a4200370300200441b8056a4200370300200441a8056a41086a22074200370300200442003703a80520044180066a4184dec700410310c501200720044180066a41086a29000037030020042004290080063703a805200441d8066a41fc95c600410d10c501200641086a200441d8066a41086a290000370000200620042900d806370000200441a8056a4120200441c8026a10d10420042802cc0241ffffffff0371450d012005102c0c010b2021450d002014450d002021410c6c450d002014102c0b2001280200201510c30720012802002121200441a8056a41186a22114200370300200441a8056a41106a22124200370300200441a8056a41086a220e4200370300200442003703a805200441a8026a41c1dcc700410610c501200e200441a8026a41086a2226290000370300200420042900a8023703a805200441b8026a4196a4c600410610c501200641086a200441b8026a41086a2227290000370000200620042900b802370000200441186a200441a8056a412010c601201f201d4104746a210d201f2105201d450d02200428021c410020042802181b212f200d41706a213020044188076a41046a2131200441c0076a41046a2132200441b0066a41086a2133200441c0076a41086a213420044188076a41086a211d2004419d036a2135200441fd026a210a200441b0066a41206a2136200441ec026a2137200441c8026a410472213820044198076a4104722139201f2105034020052109024003400240200941046a28020022100d00200941106a21050c060b2009280200210f200941086a2902002128200441a8026a4187dec700410410c501200441b8026a41acb1c500410c10c501200441003602a007200442013703980720044198076a41004104102f20042802980720042802a00722056a20213600002004200541046a22053602a00720044198076a20054104102f200428029807220520042802a00722076a200f3600002004200741046a22073602a00720044188076a2005200710c7012004200520076a3602b405200420053602b0052004201d3602ac05200420044188076a3602a805200441c0076a200441a8056a107e0240200428029c07450d002005102c0b20042802c807220541206a2207417f4c0d070240024020070d00410121080c010b200710322208450d090b20044100360290072004200736028c07200420083602880720044188076a4100411010c80120042802880720042802900722076a220820042900a802370000200841086a20262900003700002004200741106a22073602900720044188076a2007411010c80120042802880720042802900722076a220820042900b802370000200841086a20272900003700002004200741106a22083602900720042802c007210720044188076a2008200510c8012004280288072208200428029007220c6a2007200510c9081a2004200c20056a220536029007024020042802c407450d002007102c0b200441c8026a2008200510f302200e200441c8026a41086a22152903003703002012200441c8026a41106a22242903003703002011200441c8026a41186a2225290300370300200441a8056a41206a2207200441c8026a41206a221a290300370300200441a8056a41286a220c200441c8026a41286a222228020036020020044198076a41086a2213200a41086a222329000037030020044198076a41106a2214200a41106a223a29000037030020044198076a41186a2216200a41186a223b29000037030020044198076a411f6a2220200a411f6a280000360000200420042903c8023703a8052004200a29000037039807024020042d00fc02223c41024622050d0020042802f802213d20042802f402213e200441d8066a41286a200c280200360200200441d8066a41206a2007290300370300200441d8066a41186a2011290300370300200441d8066a41106a2012290300370300200441d8066a41086a200e29030037030020332013290300370300200441b0066a41106a2014290300370300200441b0066a41186a2016290300370300200441b0066a411f6a2020280000360000200420042903a8053703d80620042004290398073703b0060b0240200428028c07450d002008102c0b0240024020050d0020044180066a41286a2216200441d8066a41286a28020036020020044180066a41206a2220200441d8066a41206a29030037030020044180066a41186a223f200441d8066a41186a220529030037030020044180066a41106a2240200441d8066a41106a220729030037030020044180066a41086a2241200441d8066a41086a2208290300370300200441e0056a41086a220c2033290300370300200441e0056a41106a2213200441b0066a41106a290300370300200441e0056a41186a2214200441b0066a41186a290300370300200420042903d80637038006200420042903b0063703e005200441dc056a41026a2242203641026a2d00003a0000200420362f00003b01dc052004201036029c072004202f36029807203e41016a2143200420283703a007203d2028422088a722446a214502400240203c4101460d00200542003703002007420037030020084200370300200442003703d8060c010b20052014290300370300200720132903003703002008200c290300370300200420042903e0053703d8060b200441a8056a203910ca01203841186a2005290300370200203841106a2007290300370200203841086a2008290300370200203820042903d806370200203720042903a805370000203741086a200e290300370000203741106a2012290300370000203741186a20112903003700002004202f3602c802200441e0056a200441c8026a10cb0120222016280200360200201a20202903003703002025203f2903003703002024204029030037030020152041290300370300200a20042903e0053700002023200c290300370000203a2013290300370000203b201429030037000020042004290380063703c802200441013a00fc02200420453602f802200420433602f402203541026a20422d00003a0000203520042f01dc053b0000200441a8026a4187dec700410410c501200441b8026a41acb1c500410c10c501200441003602b806200442013703b006200441b0066a41004104102f20042802b00620042802b80622056a20213600002004200541046a22053602b806200441b0066a20054104102f20042802b006220520042802b80622076a200f3600002004200741046a22073602b80620044188076a2005200710c7012004200520076a3602b405200420053602b0052004201d3602ac05200420044188076a3602a805200441c0076a200441a8056a107e024020042802b406450d002005102c0b20042802c807220541206a2207417f4c0d090240024020070d00410121080c010b200710322208450d0b0b200441003602b005200420073602ac05200420083602a805200441a8056a4100411010c80120042802a80520042802b00522076a220820042900a802370000200841086a20262900003700002004200741106a22073602b005200441a8056a2007411010c80120042802a80520042802b00522076a220820042900b802370000200841086a20272900003700002004200741106a22083602b00520042802c0072107200441a8056a2008200510c80120042802a805220820042802b005220c6a2007200510c9081a2004200c20056a22053602b005024020042802c407450d002007102c0b20082005200441c8026a109005024020042802ac05450d002008102c0b200441a8026a4187dec700410410c501200441b8026a41d09ac500411310c501200441003602b005200442013703a805200441a8056a41004104102f20042802a80520042802b00522056a20213600002004200541046a22053602b005200441a8056a20054104102f20042802a805220520042802b00522076a200f3600002004200741046a22073602b005200441c0076a2005200710c7012004200520076a3602d402200420053602d002200420343602cc022004200441c0076a3602c802200441b0066a200441c8026a107e024020042802ac05450d002005102c0b20042802b806220541206a2207417f4c0d090240024020070d00410121080c010b200710322208450d0b0b200441003602c807200420073602c407200420083602c007200441c0076a4100411010c80120042802c00720042802c80722076a220820042900a802370000200841086a20262900003700002004200741106a22073602c807200441c0076a2007411010c80120042802c00720042802c80722076a220820042900b802370000200841086a20272900003700002004200741106a22083602c80720042802b0062107200441c0076a2008200510c80120042802c007220820042802c807220c6a2007200510c9081a2004200c20056a22053602c807024020042802b406450d002007102c0b2028a72107200441003602b005200442013703a805200441a8056a41004104102f20042802a80520042802b005220c6a202f3600002004200c41046a3602b00520102044200441a8056a10bb01201520042802b005360200200420042903a8053703c80220082005200441c8026a10f402024020042802c407450d002008102c0b02402007450d002010102c0b200441a8026a4187dec700410410c501200441b8026a41f19ac500411210c5012004200f3602c007200441b0066a200441c0076a410410c701200420323602d402200420333602cc022004200441c0076a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d090240024020070d00410121080c010b200710322208450d0b0b200441003602d002200420073602cc02200420083602c802200441c8026a4100411010c80120042802c80220042802d00222076a220820042900a802370000200841086a20262900003700002004200741106a22073602d002200441c8026a2007411010c80120042802c80220042802d00222076a220820042900b802370000200841086a20272900003700002004200741106a22083602d00220042802a8052107200441c8026a2008200510c80120042802c802220820042802d002220c6a2007200510c9081a2004200c20056a22053602d002024020042802ac05450d002007102c0b200441a8056a2008200510f7040240024020042802a80522050d0041002114200441003602c807200442043703c007410421054100210c0c010b200420042902ac0522283702c407200420053602c0072028422088a721142028a7210c0b024020042802cc02450d002008102c0b2014450d0120052014417f6a4104746a2207280200202f470d012007410c6a2105200741046a210c0240200728020c2208200741086a280200470d00200c200810d2042005280200210820042802c80721140b200c28020020084102746a20213602002005200528020041016a3602000c030b02402028a7450d002010102c0b200941106a2209200d470d010c070b0b410410322207450d072007202136020002402014200c470d00200441c0076a201410ce0120042802c807211420042802c00721050b200520144104746a220520073602042005202f360200200541086a4281808080103702002004201441016a22143602c8070b20042802c407211520042802c0072116200441a8026a4187dec700410410c501200441b8026a41f19ac500411210c5012004200f36028807200441b0066a20044188076a410410c701200420313602d4022004202e3602cc02200420044188076a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220541206a2207417f4c0d050240024020070d00410121080c010b200710322208450d070b200441003602b806200420073602b406200420083602b006200441b0066a4100411010c80120042802b00620042802b80622076a220820042900a802370000200841086a20262900003700002004200741106a22073602b806200441b0066a2007411010c80120042802b00620042802b80622076a220820042900b802370000200841086a20272900003700002004200741106a22083602b80620042802a8052107200441b0066a2008200510c80120042802b006222020042802b80622086a2007200510c9081a2004200820056a22243602b806024020042802ac05450d002007102c0b201441047422104104722205417f4c0d05200510322207450d06200441003602d002200420053602cc02200420073602c802200441c8026a2014108f0102402014450d00201620144104746a21132016210c0340200c2802002105200441c8026a20042802d0024104102f20042802c80220042802d00222076a20053600002004200741046a3602d002200c2802042105200441c8026a200c28020c2207108f01200c41106a210c02402007450d002007410274210720042802d002210803402005280200210f200441c8026a20084104102f20042802c80220042802d00222086a200f3600002004200841046a22083602d002200541046a21052007417c6a22070d000b0b200c2013470d000b0b2020202420042802c802220520042802d00210a702024020042802cc02450d002005102c0b024020042802b406450d002020102c0b02402014450d00201641046a210503400240200541046a28020041ffffffff0371450d002005280200102c0b200541106a2105201041706a22100d000b0b02402015450d002016450d00201541ffffffff0071450d002016102c0b200941106a210520302009470d000c040b0b41e8c4c800411141909fc700105c000b2005200a1044000b200d2005460d000340200541106a21070240200541086a280200450d00200541046a280200102c0b20072105200d2007470d000b0b0240201e450d00201e41ffffffff0071450d00201f102c0b2017417f4c0d000240024020170d00410121050c010b201710322205450d020b200441003602b005200420173602ac05200420053602a805200441a8056a4100201710c80120042802a80520042802b00522056a2019201710c9081a2004200520176a3602b005200441c8026a41086a200b360200200441d4026a2207200429038802370200200441dc026a20044188026a41086a290300370200200441e4026a20044188026a41106a290300370200200441ec026a20044188026a41186a290300370200200441f4026a20042903e801370200200441fc026a200441e8016a41086a29030037020020044184036a200441e8016a41106a2903003702002004418c036a200441e8016a41186a29030037020020044288808080103703c802200441ac036a200441c8016a41186a290300370200200441a4036a200441c8016a41106a2903003702002004419c036a200441c8016a41086a29030037020020044194036a20042903c801370200200441b4036a20042903a801370200200441bc036a200441a8016a41086a290300370200200441c4036a200441a8016a41106a290300370200200441cc036a200441a8016a41186a290300370200200441d4036a200429038801370200200441dc036a20044188016a41086a290300370200200441e4036a20044188016a41106a290300370200200441ec036a20044188016a41186a290300370200200441ac046a20044180016a290300370200200441a4046a200441f8006a2903003702002004419c046a200441f0006a29030037020020044194046a200441c8006a41206a2903003702002004418c046a200441c8006a41186a29030037020020044184046a200441c8006a41106a290300370200200441fc036a200441c8006a41086a290300370200200441f4036a2004290348370200200441cc046a200441286a41186a290200370200200441c4046a200441286a41106a290200370200200441bc046a200441286a41086a290200370200200441b4046a2004290228370200200441dc046a20042802b005360200200441d4046a20042902a805370200200441c8026a10c80220012802002105200420173602e006200420183602dc06200420193602d806200441a8026a41f1ddc700410510c501200441b8026a418cffc000410510c501200420053602980720044180066a20044198076a410410c701200720044198076a41046a360200200420044180066a41086a3602cc02200420044198076a3602d002200420044180066a3602c802200441a8056a200441c8026a107e20042802b005220741206a2208417f4c0d000240024020080d004101210f0c010b20081032220f450d020b200441003602d002200420083602cc022004200f3602c802200441c8026a4100411010c80120042802c80220042802d00222086a220f20042900a802370000200f41086a200441a8026a41086a2900003700002004200841106a22083602d002200441c8026a2008411010c80120042802c80220042802d00222086a220f20042900b802370000200f41086a200441b8026a41086a2900003700002004200841106a220f3602d00220042802a8052108200441c8026a200f200710c80120042802c802220f20042802d00222096a2008200710c9081a2004200920076a22073602d002024020042802ac05450d002008102c0b200f2007200441d8066a108a03024020042802cc02450d00200f102c0b02402018450d002019102c0b200441a8026a41f1ddc700410510c501200441b8026a4191f6c000411210c501200420053602d80620044188076a200441d8066a410410c701200441d4026a200441d8066a41046a360200200420044190076a3602cc022004200441d8066a3602d002200420044188076a3602c802200441a8056a200441c8026a107e20042802b005220741206a2208417f4c0d000240024020080d004101210f0c010b20081032220f450d020b200441003602d002200420083602cc022004200f3602c802200441c8026a4100411010c80120042802c80220042802d00222086a220f20042900a802370000200f41086a200441a8026a41086a2900003700002004200841106a22083602d002200441c8026a2008411010c80120042802c80220042802d00222086a220f20042900b802370000200f41086a200441b8026a41086a2900003700002004200841106a220f3602d00220042802a8052108200441c8026a200f200710c80120042802c802220f20042802d00222096a2008200710c9081a2004200920076a22073602d002024020042802ac05450d002008102c0b200441106a200f200710c6012004280214210820042802102107024020042802cc02450d00200f102c0b024020074101470d00200820004b0d00200441a8026a41f1ddc700410510c501200441b8026a4191f6c000411210c501200420053602d80620044188076a200441d8066a410410c701200441d4026a200441d8066a41046a360200200420044190076a3602cc022004200441d8066a3602d002200420044188076a3602c802200441a8056a200441c8026a107e20042802b005220741206a220f417f4c0d0102400240200f0d00410121090c010b200f10322209450d030b200441003602d0022004200f3602cc02200420093602c802200441c8026a4100411010c80120042802c80220042802d002220f6a220920042900a802370000200941086a200441a8026a41086a2900003700002004200f41106a220f3602d002200441c8026a200f411010c80120042802c80220042802d002220f6a220920042900b802370000200941086a200441b8026a41086a2900003700002004200f41106a22093602d00220042802a805210f200441c8026a2009200710c80120042802c802220920042802d00222016a200f200710c9081a2004200120076a22073602d002024020042802ac05450d00200f102c0b2009200710b401024020042802cc02450d002009102c0b200441a8026a41f1ddc700410510c501200441b8026a41d081c100410a10c501200420053602d806200441c0076a200441d8066a410410c701200441d4026a200441d8066a41046a3602002004200441c8076a3602cc022004200441d8066a3602d0022004200441c0076a3602c802200441a8056a200441c8026a107e20042802b005220741206a220f417f4c0d0102400240200f0d00410121090c010b200f10322209450d030b200441003602e0062004200f3602dc06200420093602d806200441d8066a4100411010c80120042802d80620042802e006220f6a220920042900a802370000200941086a200441a8026a41086a2900003700002004200f41106a220f3602e006200441d8066a200f411010c80120042802d80620042802e006220f6a220920042900b802370000200941086a200441b8026a41086a2900003700002004200f41106a220f3602e00620042802a8052109200441d8066a200f200710c80120042802d806220f20042802e00622016a2009200710c9081a2004200120076a22073602e006024020042802ac05450d002009102c0b200441c8026a200f200710b803024020042802c8022209450d00200f200710b4010b20042902cc022129024020042802dc06450d00200f102c0b200441a8026a41f1ddc700410510c501200441b8026a41acffc000410b10c501200420053602d806200441b0066a200441d8066a410410c701200441d4026a200441d8066a41046a3602002004200441b8066a3602cc022004200441d8066a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220741206a220f417f4c0d01410121010240200f450d00200f10322201450d030b200441003602d0022004200f3602cc02200420013602c802200441c8026a4100411010c80120042802c80220042802d002220f6a220120042900a802370000200141086a200441a8026a41086a2900003700002004200f41106a220f3602d002200441c8026a200f411010c80120042802c80220042802d002220f6a220120042900b802370000200141086a200441b8026a41086a2900003700002004200f41106a22013602d00220042802a805210f200441c8026a2001200710c80120042802c802220120042802d002220a6a200f200710c9081a2004200a20076a22073602d002024020042802ac05450d00200f102c0b200441a8056a2001200710b80320042902ac05212820042802a805210f024020042802cc02450d002001102c0b200441a8026a41f1ddc700410510c501200441b8026a41acffc000410b10c501200420053602d806200441b0066a200441d8066a410410c701200441d4026a200441d8066a41046a3602002004202e3602cc022004200441d8066a3602d0022004200441b0066a3602c802200441a8056a200441c8026a107e20042802b005220741206a2201417f4c0d014101210a02402001450d0020011032220a450d030b2029420020091b2129200441003602e006200420013602dc062004200a3602d806200441d8066a4100411010c80120042802d80620042802e00622016a220a20042900a802370000200a41086a200441a8026a41086a2900003700002004200141106a22013602e006200441d8066a2001411010c80120042802d80620042802e00622016a220a20042900b802370000200a41086a200441b8026a41086a2900003700002004200141106a220a3602e00620042802a8052101200441d8066a200a200710c80120042802d806220a20042802e006220c6a2001200710c9081a2004200c20076a220c3602e006024020042802ac05450d002001102c0b2029422088222aa7220741046a2201417f4c0d0102400240024002400240024020010d00200441003602d002200442013703c8020c010b20011032220d450d07200441003602d002200420013602cc022004200d3602c802200741c000490d01200741808001490d022007418080808004490d030b200441c8026a41004101102f20042802c80220042802d00222016a41033a00002004200141016a22013602d002200441c8026a20014104102f20042802c80220042802d00222016a20073600002004200141046a22013602d002200441c8026a210d0c030b200441c8026a41004101102f20042802c80220042802d00222016a202a4202863c00002004200141016a22013602d002200441c8026a210d0c020b200441c8026a41004102102f20042802c80220042802d00222016a20074102744101723b00002004200141026a22013602d002200441c8026a210d0c010b200441c8026a41004104102f20042802c80220042802d00222016a20074102744102723600002004200141046a22013602d002200441c8026a210d0b2028a7210e2028422088a72110200d20012007102f20042802c802220120042802d002220d6a2009410120091b2211200710c9081a2004200d20076a22073602d002200a200c2001200710a702024020042802cc02450d002001102c0b200e4100200f1b210720104100200f1b2109200f4101200f1b210f024020042802dc06450d00200a102c0b200441c0056a4200370300200441b8056a4200370300200441a8056a41086a22014200370300200442003703a805200441a8026a41c1dcc700410610c5012001200441a8026a41086a290000370300200420042900a8023703a805200441b8026a4196a4c600410610c501200641086a200441b8026a41086a290000370000200620042900b802370000200441086a200441a8056a412010c601200428020c21012004280208210a200420093602d002200420073602cc022004200f3602c8022005200820014100200a1b200441c8026a10ba031a2029a7450d002011102c0b202d201c45720d02201b450d02201c102c0c020b103b000b1039000b20034100360204200328020021052003410136020002402003280208450d002005102c0b20024100360204200228020021052002410136020002402002280208450d002005102c0b200441d0076a24000bf10202097f047e230041c0006b22032400024002400240200128020422044108490d0020012802002105200341386a2106200341306a2107200341206a41086a21080340200341206a200520041097072003280228210520032802204101200328022422091b2d0000210a2001200328022c2204360204200120053602002001280208210b0240200a200941077176410171450d0020022802002209280208200b4b0d03200642003703002007420037030020084200370300200342003703200b2001200b41016a360208200441074b0d000b0b200041003a00000c010b2009280200200b4105746a2204290000210c200441186a290000210d200441106a290000210e200441086a290000210f2001200b41016a360208200341086a200f370300200341106a200e370300200341186a200d3703002003200c370300200041196a200d370000200041116a200e370000200041096a200f3700002000200c370001200041013a00000b200341c0006a24000b3400200041968dc70036020420004100360200200041146a4105360200200041106a41c88dc700360200200041086a420d3702000b2901017f230041106b2202240020024100360208200242013703002000200210db05200241106a24000bf61907077f027e037f097e017f017e027f23004180046b22032400024020024133490d0041002802d8d2484102490d00200341e80036028401200341c8a8c7003602800141002802d4d248210441002802d0d248210541002802dcd2482106200341a8026a41a205360200200341a0026a42df808080103703002003419c026a41dca7c70036020020034194026a420f37020020034190026a41b0a9c70036020020034188026a4201370300200341f8016a4201370300200341f0016a410f36020020034184026a200341306a360200200341b4b5c8003602f401200341b0a9c7003602ec0120034104360234200341023602e801200441e0a3c000200641024622061b2802102104200320034180016a360230200541f8a3c00020061b200341e8016a20041103000b200341306a41c1dcc700410610c501200341e8016a41acc8c700410710c50120034180016a200010d50202400240200328028801220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b41002107200341003602282003200536022420032006360220200341206a4100411010c8012003280220200328022822056a22062003290030370000200641086a200341306a41086a2900003700002003200541106a2205360228200341206a2005411010c8012003280220200328022822056a220620032900e801370000200641086a200341e8016a41086a2900003700002003200541106a22063602282003280280012105200341206a2006200410c80120032802202208200328022822066a2005200410c9081a2003200620046a22093602280240200328028401450d002005102c0b200341306a2008200910d6022003290330210a4200210b20034200370330200341fc006a280200210c200341f8006a280200210d02400240200a4201510d004101210e4200210f4200211042002111420021120c010b200341c8006a2903002111200329034021102003290338210f200341d0006a2903002112410121074100210e0b0240024020020d004200211342002114420021150c010b200241057421054200210b420021134200211442002115200121040340024002400240200441186a2d00002206417f6a41ff017141014b0d002015200441086a290300221620142004290300221756201520165620152016511b22181b21152014201720181b2114200641ff01714102460d010c020b200641ff01710d01200441086a2903002116200429030021170b20132016200b201756201320165620132016511b22061b2113200b201720061b210b0b200441206a2104200541606a22050d000b0b200341b8016a2013370300200341a8016a220520153703002003200f370380012003200b3703b001200320143703a00120032012370398012003201037038801200320113703900102400240427f200f20117c22162016200f542204201020127c2004ad7c221620105420162010511b22041b22154280c8afa025544100427f201620041b2217501b0d0020034190016a2903002115200341b0016a290300211720052903002114200341a0016a290300210b200329038801211120032903800121124201211620032903980121190c010b024002402011200f8420122010848450450d00420021160c010b42002116200341e8016a41186a22054200370300200341e8016a41106a22064200370300200341e8016a41086a22044200370300200342003703e801200341c8016a41d4dcc700410810c5012004200341c8016a41086a221a290000370300200320032900c8013703e801200341d8016a41bba8c700410d10c5012005200341d8016a41086a221b290000370300200620032900d801370300200341086a200341e8016a412010d301200341086a41106a29030021142003290310210b20032802082118200542003703002006420037030020044200370300200342003703e801200341c8016a41d4dcc700410810c5012004201a290000370300200320032900c8013703e801200341d8016a41bba8c700410d10c5012005201b290000370300200620032900d801370300200342002014420020181b221420177d200b420020181b220b201554ad7d2211200b20157d2212200b56201120145620112014511b22051b3703e00120034200201220051b3703d801200341e8016a4120200341d8016a411010a702200341a0026a201737030020034198026a2015370300200441013a0000200341f9016a200041086a29000037000020034181026a200041106a29000037000020034189026a200041186a290000370000200341023602e801200320002900003700f101200341e8016a10c8020b0b200341d8006a200b370300200341d0006a2019370300200341e0006a2014370300200341c0006a2011370300200341e8006a2017370300200341c8006a201537030020032013370370200320123703382003200c410020071b36027c2003200d410020071b360278200320164201512204ad3703300240024020040d002008200910b4010c010b20082009200341386a10d8020b02402003280224450d002008102c0b024002400240200a4201510d0020164201510d010b200a4201520d0120164201510d01200341e8016a41086a41043a0000200341f9016a200041086a29000037000020034181026a200041106a29000037000020034189026a200041186a290000370000200341003602e801200320002900003700f101200341e8016a10c8020c010b200341e8016a41086a41033a0000200341f9016a200041086a29000037000020034181026a200041106a29000037000020034189026a200041186a290000370000200341003602e801200320002900003700f101200341e8016a10c8020b0240200e450d00200341a0026a201037030020034198026a200f370300200341e8016a41086a41003a0000200341f9016a200041086a29000037000020034181026a200041106a29000037000020034189026a200041186a290000370000200341023602e801200320002900003700f101200341e8016a10c8020b200341c8016a41d4dcc700410810c501200341d8016a41bfa9c700410510c501200341e8016a200010d50220032802f001220441206a2205417f4c0d000240024020050d00410121060c010b200510322206450d020b200341003602382003200536023420032006360230200341306a4100411010c8012003280230200328023822056a220620032900c801370000200641086a200341c8016a41086a2900003700002003200541106a2205360238200341306a2005411010c8012003280230200328023822056a220620032900d801370000200641086a200341d8016a41086a2900003700002003200541106a220636023820032802e8012105200341306a2006200410c80120032802302206200328023822186a2005200410c9081a2003201820046a2204360238024020032802ec01450d002005102c0b2006200410ce02211802402003280234450d002006102c0b024002402002450d00200341c8016a41d4dcc700410810c501200341d8016a41bfa9c700410510c501200341e8016a200010d50220032802f001220441206a2205417f4c0d020240024020050d00410121060c010b200510322206450d040b200341003602382003200536023420032006360230200341306a4100411010c8012003280230200328023822056a220620032900c801370000200641086a200341c8016a41086a2900003700002003200541106a2205360238200341306a2005411010c8012003280230200328023822056a220620032900d801370000200641086a200341d8016a41086a2900003700002003200541106a220636023820032802e8012105200341306a2006200410c80120032802302206200328023822086a2005200410c9081a2003200820046a2204360238024020032802ec01450d002005102c0b200341e8016a200120021089082006200420032802e801220520032802f00110a702024020032802ec01450d002005102c0b02402003280234450d002006102c0b20180d01200010e7020c010b200341c8016a41d4dcc700410810c501200341d8016a41bfa9c700410510c501200341e8016a200010d50220032802f001220441206a2205417f4c0d010240024020050d00410121060c010b200510322206450d030b200341003602382003200536023420032006360230200341306a4100411010c8012003280230200328023822056a220620032900c801370000200641086a200341c8016a41086a2900003700002003200541106a2205360238200341306a2005411010c8012003280230200328023822056a220620032900d801370000200641086a200341d8016a41086a2900003700002003200541106a220636023820032802e8012105200341306a2006200410c80120032802302206200328023822026a2005200410c9081a2003200220046a2204360238024020032802ec01450d002005102c0b2006200410b40102402003280234450d002006102c0b2018450d00200010e8020b20034180046a24000f0b103b000b1039000bee0203027f027e017f0240024020024105744104722203417f4c0d00200310322204450d012000200336020420002004360200200041086a2203410036020020002002108f0102402002450d0020024105742104200328020021020340200020024108102f2000280200200328020022026a200141106a2900003700002003200241086a2202360200200141086a290300210520012903002106200020024110102f2000280200200328020022026a22072005370008200720063700002003200241106a220236020002400240024002400240200141186a2d00000e03000102040b200020024101102f2000280200200328020022026a41003a0000200241016a21020c020b200020024101102f2000280200200328020022026a41013a0000200241016a21020c010b200020024101102f2000280200200328020022026a41023a0000200241016a21020b200320023602000b200141206a2101200441606a22040d000b0b0f0b103b000b1039000b130020004104360204200041d0aac7003602000b3400200041d4dcc70036020420004100360200200041146a4104360200200041106a41a8c5c700360200200041086a42083702000b0b002000410841001089080bd10101037f20004201370200200041086a22024100360200200041004110102f2000280200200228020022036a22044200370008200442003700002002200341106a2203360200200020034110102f2000280200200228020022036a22044200370008200442003700002002200341106a2203360200200020034110102f2000280200200228020022036a22044200370008200442003700002002200341106a2203360200200020034110102f2000280200200228020022006a22034200370008200342003700002002200041106a3602000b130020004101360204200041a8ccc7003602000b5601027f02404110103222020d001039000b2000421037020420002002360200200041004110102f2000280200200041086a220028020022026a2203420037000820034280c8afa0253700002000200241106a3602000b130020004108360204200041d8d7c7003602000bda0706017f017e047f037e037f067e230041c0026b2202240042002103420042004280f985d404420010b3042104200241e0016a22054200370300200241d0016a41086a4208370300200241ec016a22064180023b0100200241e8016a2207200436020041012104200241013602b802200241003602d001024002404100450d0042012108420021090c010b0240024002404101450d004200210a0c010b200241c8016a210b4101210c420021080340200241b0016a200842002001420010ce08200241c0016a200142002001420010ce08200820022903b801220184200184420052200b290300220120022903b001220a200a7c7c220a200154720d0220022903c0012101200c410271210d200c4101762204210c200a2108200d450d000b0b0240200441024f0d0020012108200a21090c020b200241a0016a41086a210d20012108200a2109034020024190016a200a42002001420010ce08200241a0016a200142002001420010ce08200a200229039801220184200184420052200d2903002201200229039001220a200a7c7c220a200154720d0120022903a001210102402004410271450d00200241e0006a200942002001420010ce08200241f0006a200a42002008420010ce0820024180016a200842002001420010ce082009420052200a4200527120022903684200527220022903784200527220024180016a41086a2903002208200229036020022903707c7c2209200854720d0220022903800121080b200441034b210c20044101762104200a210a200c0d000c020b0b427f2108427f21090b200241d0006a20082009428094ebdc03420010c708200241306a2005290300220a42002008420010ce08200241206a2009420020022903d8012201420010ce08200241c0006a200142002008420010ce080240024020062d0000450d00420021010c010b2002290338210e2002290328210f2002290320211020022903302111200241c0006a41086a2903002101200728020021042002290350210320022903402112200241106a20082009428094ebdc03420010c80820022002290310200241106a41086a2903002004ad2208420010ce08427f200241086a29030020022903002213200320087e2208428094ebdc0380a7417f2008428080808080c0b2cd3b541b2008428094ebdc03824280cab5ee01566aad7c2208201354ad7c2203427f2001201120107c7c2210200a420052200942005271200e42005272200f4200527220102001547222041b7c2008427f201220041b7c220a2008542204ad7c22012004200120035420012003511b22041b2101427f200a20041b21030b2000200337030020002001370308200241c0026a24000b3400200041dce2c70036020420004100360200200041146a4102360200200041106a41f0e2c700360200200041086a42123702000b5a01027f02404110103222020d001039000b2000421037020420002002360200200041004110102f2000280200200041086a220028020022026a22034200370008200342808090bbbad6adf00d3700002000200241106a3602000b130020004102360204200041f4e4c7003602000bd50402077f027e23004180016b22022400420042004280f985d404420010b3042103200241206a22044200370300200241186a42083703002002412c6a22054180023b0100200241106a41186a22062003360200200241013602782002410036021002400240411810322203450d002002420137020420022003360200200241004101109a05200228020022072002280208220841186c6a2203200429030037030820032002290318370300200320022d002d3a0015200320052d00004100473a0014200320062802003602102002200841016a220436020802402002280278220341044d0d00200341186c450d002002280214102c0b200441186c4104722203417f4c0d01200310322205450d002000200336020420002005360200200041086a2203410036020020002004108f0102402004450d002007200441186c6a210820032802002105200721040340200441086a29030021092004290300210a200020054110102f2000280200200328020022056a220620093700082006200a3700002003200541106a2205360200200441106a2802002106200020054104102f2000280200200328020022056a20063600002003200541046a2205360200200441146a2d00002106200020054101102f2000280200200328020022056a20063a00002003200541016a2205360200200441156a2d00002106200020054101102f2000280200200328020022056a20063a00002003200541016a2205360200200441186a22042008470d000b0b024020022802042200450d00200041186c450d002007102c0b20024180016a24000f0b1039000b103b000b5501027f02404110103222020d001039000b2000421037020420002002360200200041004110102f2000280200200041086a220028020022026a2203420037000820034280c2d72f3700002000200241106a3602000b3400200041bee8c70036020420004100360200200041146a4106360200200041106a41cce8c700360200200041086a420d3702000b0b0020004104410010a7060b0b0020004104410010e4040b6301027f230041106b2202240020004201370200200041086a22034100360200200242003703082002420437030020002002108f05200020032802004104102f2000280200200328020022006a41003600002003200041046a360200200241106a24000bb70403027f017e037f230041306b22012400024002400240024020002802002202450d0020002902042103200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41bee8c700410d10c5012005200141206a41086a220629000037030020012001290020370300200141206a41dcecc700410f10c50120002006290000370300200420012900203703002003422088a72205410c6c41046a2200417f4c0d010240024020000d00410121040c010b200010322204450d030b200141003602282001200036022420012004360220200141206a2005108f0102402005450d0020022005410c6c6a21042002210003402000280200200041086a280200200141206a10d5032000410c6a22002004470d000b0b2001412020012802202200200128022810a70202402001280224450d002000102c0b02402005450d002005410c6c21042002210003400240200041046a28020041ffffffff0371450d002000280200102c0b2000410c6a2100200441746a22040d000b0b2003a72200450d032000410c6c450d032002102c0c030b200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41bee8c700410d10c5012005200141206a41086a220229000037030020012001290020370300200141206a41dcecc700410f10c50120002002290000370300200420012900203703002001412010b4010c020b103b000b1039000b200141306a24000b13002000410536020420004188fec7003602000b3400200041de96c80036020420004100360200200041146a4101360200200041106a41e896c800360200200041086a42073702000b130020004101360204200041a898c8003602000b5701027f02404110103222020d001039000b2000421037020420002002360200200041004110102f2000280200200041086a220028020022026a2203420037000820034280a094a58d1d3700002000200241106a3602000bb20301047f41242103024002402001280200220441244b0d00200421050c010b2001410c6a2802002105200421030b02400240200320056b20024f0d000240200520026a22022005490d004100417f2002417f6a677620024102491b220541016a220320054f0d020b2000200336020420004101360200200041086a41003602000f0b200041003602000f0b4124210202400240200441244b0d00200141056a2106200421050c010b2001410c6a2802002105200141086a2802002106200421020b024002400240200520034b0d000240024020034125490d0020022003470d010c040b024020044125490d00200141003a0004200141056a2006200510c9081a200120053602002006102c0c040b200041003602000f0b0240200441244b0d000240200310322202450d0020022006200510c9081a0c030b2000200336020420004101360200200041086a41013602000f0b200620022003103522020d012000200336020420004101360200200041086a41013602000f0b41e3c5c80041204184c6c800103c000b200141013a0004200120033602002001410c6a2005360200200141086a20023602000b200041003602000bff0204057f017e017f017e230041206b2202240002400240024020012802182203450d0020012003417f6a36021820012802042204450d0220012802002105024002402001280208220620042f018a014f0d00200421030c010b034002400240200428020022030d00410021030c010b200541016a210520042f01880121060b2004102c20032104200620032f018a014f0d000b0b200320064103746a418c016a2900002107200241106a41086a220820032006410c6c6a2204410c6a2802003602002002200441046a290200370310200641016a210402402005450d00200320044102746a41e4016a280200210302402005417f6a2204450d00034020032802e40121032004417f6a22040d000b0b410021040b200241086a200828020022063602002002200229031022093703002000200737020020002009370208200041106a20063602002001200436020820012003360204200141003602000c010b200041003602080b200241206a24000f0b41ecd0c800412b4198d1c800103c000bb01605047f017e087f027e0a7f230041c01f6b22042400200441e8016a200141f00110c9081a024002400240024002400240024020002802002201450d00200028020421050c010b41881610322201450d01410021052001200441c0096a41801610c908220641003b018616200641003602801620004100360204200020063602000b200441c0096a20052001200441e8016a10a3080240024020042802c0094101470d00200441e8016a41086a280200210720042903e8012108200441046a200441e8016a410c6a41e40110c9081a200441c0096a410c6a2802002101200441c0096a41086a280200210920042802c409210a200441a8076a200441046a41e40110c9081a0240024020092f0186162206410b490d00410521054100210b02400240200141054f0d0041042105200121060c010b41052106024002402001417b6a0e020201000b200141796a21064101210b410621050c010b410021064101210b0b4188161032220c450d04200c200441c0096a41801610c908220d41003b018616200d4100360280162009200541f0016c6a2201280204210e2001280200210f200441e8016a200141086a41e80110c9081a200920054104746a221041d8146a2903002111201041d0146a2903002112200d200141f0016a20092f0186162005417f736a220141f0016c10c908220d41d0146a201041e0146a200141047410c9081a200920053b018616200d20013b018616200d2009200b1b2201200641f0016c6a220541f0016a200520012f01861620066b41f0016c10ca081a200541086a2007360200200520083703002005410c6a200441a8076a41e40110c9081a200120064104746a220541e0146a200541d0146a220720012f01861620066b41047410ca081a200541d8146a200337030020072002370300200120012f01861641016a3b018616200441c0056a200441e8016a41e80110c9081a0240024020092802801622010d004100210a0c010b41002105200441a0096a2113200441a8096a2114200441b0096a2115200441b8096a21160340200f2117200e2118200c21192009210620112102201221032001210920062f018416210d200441a8076a200441c0056a41e80110c9081a200a2005470d0702400240024020092f0186162205410b490d004100210b410421070240200d4105490d00200d210702400240200d417b6a0e020201000b200d41796a210d4101210b410621070c010b4100210d4101210b410521070b41b8161032220c450d09200a41016a210a41002101200c200441c0096a41801610c908220541003b018616200541003602801620052004290390093703881620054190166a20044190096a41086a29030037030020054198166a2013290300370300200541a0166a2014290300370300200541a8166a2015290300370300200541b0166a20162903003703002009200741f0016c6a2206280204210e2006280200210f200441c0096a200641086a41e80110c9081a200941d0146a221020074104746a221a41086a2903002111201a29030021122005200641f0016a20092f018616221a2007417f736a220641f0016c10c908220541d0146a2010200741016a221b4104746a200641047410c908211c200920073b018616200520063b018616200441e8016a200441c0096a41e80110c9081a20054188166a2009201b4102746a4188166a201a20076b41027410c908211a02400340200520014102746a4188166a280200220720013b01841620072005360280162001200120064922076a220120064b0d0120070d000b0b200441c0096a200441e8016a41e80110c9081a200441e8016a200441c0096a41e80110c9081a200b450d01200d410274201a6a41086a201a200d41016a22014102746a220620052f018616200d6b41027410ca081a200620193602002005200d41f0016c6a220641f0016a200620052f018616200d6b41f0016c10ca081a2006201836020420062017360200200641086a200441a8076a41e80110c9081a201c20014104746a201c200d4104746a220620052f018616200d6b41047410ca081a2006200237030820062003370300200520052f01861641016a22063b0186162001200641ffff037122064b0d020340200520014102746a4188166a280200220720013b0184162007200536028016200120012006496a220720064b0d03200120064f210d20072101200d450d000c030b0b200d41027420094188166a22066a41086a2006200d41016a22014102746a22062005200d6b220741027410ca081a200620193602002009200d41f0016c6a220541f0016a2005200741f0016c10ca081a2005201836020420052017360200200541086a200441a8076a41e80110c9081a200941d0146a220520014104746a2005200d4104746a220520092f018616200d6b41047410ca081a2005200237030820052003370300200920092f01861641016a22053b018616200d200541ffff037122054f0d050340200920014102746a4188166a280200220620013b0184162006200936028016200120012005496a220620054b0d06200120054f2107200621012007450d000c060b0b200d41027420094188166a22056a41086a2005200d41016a22014102746a220520092f018616200d6b41027410ca081a200520193602002009200d41f0016c6a220541f0016a200520092f018616200d6b41f0016c10ca081a2005201836020420052017360200200541086a200441a8076a41e80110c9081a201020014104746a2010200d4104746a220520092f018616200d6b41047410ca081a2005200237030820052003370300200920092f01861641016a22053b0186162001200541ffff037122054b0d000340200920014102746a4188166a280200220620013b01841620062009360280162001200120054922066a220120054b0d0120060d000b0b200441c0056a200441e8016a41e80110c9081a200a210520092802801622010d000b0b200441d8036a200441c0056a41e80110c9081a200441e8016a200441d8036a41e80110c9081a2000280200450d0641b81610322201450d042001200441c0096a41801610c908220141003b018616200141003602801620012004290390093703881620014190166a20044198096a29030037030020014198166a200441a0096a290300370300200141a0166a200441a8096a290300370300200141a8166a200441b0096a290300370300200141b0166a200441b8096a290300370300200120002802002205360288162000200136020020002000280204220641016a360204200541003b0184162005200136028016200441c0096a200441e8016a41e80110c9081a2006200a470d0720012f0186162205410a4b0d082001200541016a22063b0186162001200541f0016c6a2207200e3602042007200f360200200741086a200441c0096a41e80110c9081a200120054104746a220541d8146a2011370300200541d0146a2012370300200120064102746a4188166a200c360200200c20063b018416200c2001360280162000200028020841016a3602080c030b2009200141f0016c6a220541f0016a2005200620016b41f0016c10ca081a200541086a2007360200200520083703002005410c6a200441a8076a41e40110c9081a200920014104746a220541e0146a200541d0146a220620092f01861620016b41047410ca081a200541d8146a200337030020062002370300200920092f01861641016a3b0186160b2000200028020841016a3602080c010b200441cc096a2802002101200441c8096a2802002105200441e8016a10e606200520014104746a220141d8146a2003370300200141d0146a20023703000b200441c01f6a24000f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000bbd0101047f0240034020022f0186162104410021052002210602400240034020042005460d01200541016a210520032006108b022107200641f0016a21060240200741187441187541016a0e03000301000b0b2005417f6a21040b2001450d022001417f6a2101200220044102746a4188166a28020021020c010b0b20002001360204200041003602002000410c6a2005417f6a360200200041086a20023602000f0b200042013702002000410c6a2004360200200041086a20023602000ba00702037f017e230041e0016b22022400024002400240024020012802004101470d002001410c6a2802002203417f4c0d02200128020421044101210102402003450d00200310322201450d040b200241003602b001200220033602ac01200220013602a801200241a8016a4100200310c80120022802a80120022802b00122016a2004200310c9081a2000410c6a200120036a36020020004101360200200020022903a8013702040c010b4200210502400240024002400240200141086a2802000e050401020300040b200241a8016a200141106a10e706200241f0006a200141c8006a10e706200241386a20014180016a10e7062002200141b8016a10e706420421050c030b200241a8016a200141106a10e706420121050c020b200241a8016a200141106a10e706200241f0006a200141c8006a10e706420221050c010b200241a8016a200141106a10e706200241f0006a200141c8006a10e706200241386a20014180016a10e706420321050b200041086a2005370300200041106a20022903a801370300200041c8006a2002290370370300200041186a200241a8016a41086a290300370300200041206a200241a8016a41106a290300370300200041286a200241a8016a41186a290300370300200041306a200241a8016a41206a290300370300200041386a200241a8016a41286a290300370300200041c0006a200241a8016a41306a290300370300200041d0006a200241f0006a41086a290300370300200041d8006a200241f0006a41106a290300370300200041e0006a200241f0006a41186a290300370300200041e8006a200241f0006a41206a290300370300200041f0006a200241f0006a41286a290300370300200041f8006a200241f0006a41306a290300370300200041b0016a200241386a41306a290300370300200041a8016a200241386a41286a290300370300200041a0016a200241386a41206a29030037030020004198016a200241386a41186a29030037030020004190016a200241386a41106a29030037030020004188016a200241386a41086a29030037030020004180016a2002290338370300200041e8016a200241306a290300370300200041e0016a200241286a290300370300200041d8016a200241206a290300370300200041d0016a200241186a290300370300200041c8016a200241106a290300370300200041c0016a200241086a290300370300200041b8016a2002290300370300200041003602000b200241e0016a24000f0b103b000b1039000ba62903087f107e057f23004190056b22052400200541b0016a41e6dcc700410710c501200541f8026a419099c100410610c501200541f0016a200010e4020240024020052802f801220641206a2207417f4c0d000240024020070d00410121080c010b200710322208450d020b41002109200541003602c802200520073602c402200520083602c002200541c0026a4100411010c80120052802c00220052802c80222076a220820052900b001370000200841086a200541b0016a41086a2900003700002005200741106a22073602c802200541c0026a2007411010c80120052802c00220052802c80222076a220820052900f802370000200841086a200541f8026a41086a2900003700002005200741106a22083602c80220052802f0012107200541c0026a2008200610c80120052802c002220820052802c802220a6a2007200610c9081a2005200a20066a22063602c802024020052802f401450d002007102c0b200541f8026a2008200610c901200541d0016a41086a20054181036a290000370300200541d0016a41106a20054189036a290000370300200541d0016a41186a220620054191036a290000370300200520052900f9023703d001024020052d00f8024101470d00200541386a41186a2006290300370300200541386a41106a200541d0016a41106a290300370300200541386a41086a200541d0016a41086a290300370300200520052903d001370338410121090b024020052802c402450d002008102c0b02402009450d00200541186a41186a200541386a41186a290300370300200541186a41106a200541386a41106a290300370300200541186a41086a200541386a41086a29030037030020052005290338370318200541b0016a41e6dcc700410710c501200541f8026a418a99c100410610c501200541f0016a200541186a10d50220052802f801220641206a2207417f4c0d010240024020070d00410121080c010b200710322208450d030b200541003602c801200520073602c401200520083602c001200541c0016a4100411010c80120052802c00120052802c80122076a220820052900b001370000200841086a200541b0016a41086a2900003700002005200741106a22073602c801200541c0016a2007411010c80120052802c00120052802c80122076a220820052900f802370000200841086a200541f8026a41086a22092900003700002005200741106a22083602c80120052802f0012107200541c0016a2008200610c80120052802c001220820052802c801220a6a2007200610c9081a2005200a20066a22063602c801024020052802f401450d002007102c0b200541f8026a2008200610d803200541d0016a41086a2009290300370300200541d0016a41106a200541f8026a41106a290300370300200541d0016a41186a2207200541f8026a41186a290300370300200541f0016a41086a200541a4036a290200370300200541f0016a41106a200541ac036a290200370300200541f0016a41186a2209200541b4036a290200370300200541f0016a41206a220a200541bc036a290200370300200541f0016a41286a220b200541c4036a290200370300200541f0016a41306a220c200541cc036a280200360200200520052903f8023703d0012005200529029c033703f00102402005280298032206450d0020054190016a41186a200729030037030020054190016a41106a200541d0016a41106a29030037030020054190016a41086a200541d0016a41086a290300370300200541c0026a41086a200541f0016a41086a290300370300200541c0026a41106a200541f0016a41106a290300370300200541c0026a41186a2009290300370300200541c0026a41206a200a290300370300200541c0026a41286a200b290300370300200541c0026a41306a200c280200360200200520052903d00137039001200520052903f0013703c0020b024020052802c401450d002008102c0b2006450d00200541dc006a20052903c002370200200541386a41186a220720054190016a41186a290300370300200541386a41106a220820054190016a41106a290300370300200541386a41086a220920054190016a41086a290300370300200541e4006a200541c0026a41086a290300370200200541ec006a200541c0026a41106a290300370200200541f4006a200541c0026a41186a290300370200200541fc006a200541c0026a41206a29030037020020054184016a200541c0026a41286a2903003702002005418c016a200541f0026a2802003602002005200529039001370338200520063602582009290300210d2005290338210e024002402008290300220f2001200f2001542007290300221020025420102002511b22081b22112010200220081b22128450450d00200e2113200d21140c010b2007201020127d200f201154ad7d22153703002005200f20117d22133703480240024020134280c8afa0255620154200522015501b450d002011210f201221100c010b200541d0006a420037030020054200370348201520027c201320017c2201201354ad7c21020b20054200200d20107d200e200f54ad7d2211200e200f7d2215200e562011200d562011200d511b22071b221437034020054200201520071b2213370338200220107d2001200f54ad7d21022001200f7d21010b02400240200541386a41286a2802002207450d00200741186c2109200741037441786a41037641016a210b410021070240034002402006290300220f20012001200f562002200641086a220a29030022105620022010511b22081b22112010200220081b221284500d002006200f20117d22133703002006201020127d200f201154ad7d22153703080240024020134280c8afa0255620154200522015501b450d00200121152011210f201221100c010b2006420037030820064200370300200220157c200120137c2215200154ad7c21020b200541386a41086a220842002008290300220120107d20052903382211200f54ad7d22122011200f7d2213201156201220015620122001511b22081b221437030020054200201320081b2213370338200220107d2015200f54ad7d21022015200f7d2101200a29030021102006290300210f0b200f2010844200520d01200641186a2106200741016a2107200941686a22090d000b200b21070b0240200528026022082007490d00200528025821060c020b2007200841d089c500104f000b41002108410021070b200520063602800320054184036a2006200741186c6a22093602002005200541386a41206a36028803200520073602f802200541003602602005200820076b22083602fc020240024002402007450d0020052009360280032008450d0220062006200741186c6a200841186c10ca081a200541c0006a2903002114200529033821130c010b20052009360280032008450d010b200520083602600b0240200e201358200d201458200d2014511b0d00200541f0016a41c1dcc700410610c501200541f8026a41acc8c700410710c501200541c0026a200010d50220052802c802220641206a2207417f4c0d020240024020070d004101210a0c010b20071032220a450d040b200e20137d2210200e56200d20147d200e201354ad7d220f200d56200f200d511b210941002108200541003602980120052007360294012005200a3602900120054190016a4100411010c80120052802900120052802980122076a220a20052900f001370000200a41086a200541f0016a41086a2900003700002005200741106a22073602980120054190016a2007411010c80120052802900120052802980122076a220a20052900f802370000200a41086a200541f8026a41086a2900003700002005200741106a22073602980120052802c002210a20054190016a2007200610c8012005280290012207200528029801220b6a200a200610c9081a2005200b20066a220636029801024020052802c402450d00200a102c0b4200200f20091b21024200201020091b2101200541f0016a2007200610d60220052903f001210d42002113200542003703f001200541bc026a2802002109200541b8026a280200210a02400240200d4201510d004101210b420021164200211742002118420021194200210f4200211042002115420021110c010b200541a8026a2903002118200541a0026a290300211720054198026a290300211620054190026a290300211020054188026a290300210f200529038002211120052903f8012115410121084100210b20052903b00221190b2011200220112015200156201120025620112002511b220c1b221a7d201520012015200c1b221254ad7d2111201520127d211502400240200120127d220e2002201a7d2001201254ad7d22148450450d004200211b2001211a2002211c0c010b201420142010200f200e56201020145620102014511b220c1b22137d200e200e200f200c1b221454ad7d211b201020137d200f201454ad7d21102013201a7c201420127c221a201454ad7c211c200e20147d2113200f20147d210f0b200541e8026a221d2017370300200541d8026a2010370300200541f0026a221e2018370300200520163703e0022005200f3703d002200520153703c002200520113703c80202400240427f2015200f7c22122012201554220c201120107c200cad7c221220115420122011511b220c1b22144280c8afa025544100427f2012200c1b2212501b0d00200541d0026a2903002110201e2903002112201d2903002114200541e0026a290300210e20052903c802211620052903c00221174201210f20052903d80221180c010b024002402015200f8420112010848450450d004200210f0c010b4200210f200541d0016a41186a220c4200370300200541d0016a41106a221d4200370300200541d0016a41086a221e4200370300200542003703d001200541b0016a41d4dcc700410810c501201e200541b0016a41086a221f290000370300200520052900b0013703d001200541f8026a41bba8c700410d10c501200c200541f8026a41086a2220290000370300201d20052900f8023703002005200541d0016a412010d301200541106a29030021102005290308210e20052802002121200c4200370300201d4200370300201e4200370300200542003703d001200541b0016a41d4dcc700410810c501201e201f290000370300200520052900b0013703d001200541f8026a41bba8c700410d10c501200c2020290000370300201d20052900f802370300200542002010420020211b221020127d200e420020211b220e201454ad7d2216200e20147d2217200e56201620105620162010511b220c1b37038003200542002017200c1b3703f802200541d0016a4120200541f8026a411010a702200541b0036a2012370300200541a8036a2014370300202041013a000020054189036a200041086a29000037000020054191036a200041106a29000037000020054199036a200041186a290000370000200541023602f8022005200029000037008103200541f8026a10c8020b0b20054198026a200e370300200541a0026a201437030020054180026a2016370300200541a8026a201237030020054188026a20103703002005201837039002200520193703b002200520173703f80120052009410020081b3602bc022005200a410020081b3602b8022005200f4201512208ad3703f0010240024020080d002007200610b4010c010b20072006200541f8016a10d8020b0240200528029401450d002007102c0b024002400240200d4201510d00200f4201510d010b200d4201520d01200f4201510d01200541f8026a41086a41043a000020054189036a200041086a29000037000020054191036a200041106a29000037000020054199036a200041186a290000370000200541003602f8022005200029000037008103200541f8026a10c8020c010b200541f8026a41086a41033a000020054189036a200041086a29000037000020054191036a200041106a29000037000020054199036a200041186a290000370000200541003602f8022005200029000037008103200541f8026a10c8020b0240200b450d00200541b0036a2011370300200541a8036a2015370300200541f8026a41086a41003a000020054189036a200041086a29000037000020054191036a200041106a29000037000020054199036a200041186a290000370000200541023602f8022005200029000037008103200541f8026a10c8020b2004427f2004290300220f201a7c22102010200f542206200441086a2207290300220f201c7c2006ad7c2210200f542010200f511b22061b3703002007427f201020061b37030002402013201b84500d00200342002003290300220f20137d22102010200f56200341086a22062903002210201b7d200f201354ad7d220f201056200f2010511b22071b37030020064200200f20071b3703000b200542f3e885db96cddbb3203703d001200541d0016a200541f0006a2005290338200541386a41086a29030010ab04200541b0016a41e6dcc700410710c501200541f8026a418a99c100410610c501200541f0016a200541186a10d50220052802f801220641206a2207417f4c0d020240024020070d00410121080c010b200710322208450d040b200541003602c802200520073602c402200520083602c002200541c0026a4100411010c80120052802c00220052802c80222076a220820052900b001370000200841086a200541b0016a41086a2900003700002005200741106a22073602c802200541c0026a2007411010c80120052802c00220052802c80222076a220820052900f802370000200841086a200541f8026a41086a2900003700002005200741106a22083602c80220052802f0012107200541c0026a2008200610c80120052802c002220820052802c80222096a2007200610c9081a2005200920066a22063602c802024020052802f401450d002007102c0b20082006200541386a10ac04024020052802c402450d002008102c0b200541b0036a2002370300200541a8036a2001370300200541f8026a41086a41023a000020054189036a200041086a29000037000020054191036a200041106a29000037000020054199036a200041186a290000370000200541033602f8022005200029000037008103200541f8026a10c8020b0240200528025c2206450d00200641186c450d002005280258102c0b200541e8006a28020041ffffffff0371450d002005280264102c0b20054190056a24000f0b103b000b1039000bc81605047f027e077f027e087f23004190236b2202240020024190026a200141980210c9081a024002400240024002400240024020002802002203450d00200028020421040c010b41901810322203450d01410021042003200241b8066a41881810c908220141003b018e18200141003602881820004100360204200020013602000b20024190026a41f1016a210520024190026a4180026a290300210620024188046a290300210720024190026a41fc016a280200210820024190026a41f4016a280200210920022d008004220a417f6a210b0240034020032f018e18210c4100210d024003400240200d2201200c470d00200c21010c020b0240024020024190026a200320014198026c6a220d108b02220e41ff01710d000240200a200d2d00f001220e460d00417f4101200a200e491b210e0c010b024002400240024002400240200b0e06000504030201070b417f2007200d2903f801220f852006200d4180026a290300221085844200522007200f54200620105420062010511b1b210e0c050b02402009200d41f4016a280200200d41fc016a280200220d20082008200d4b1b10cc08220e450d00417f4101200e4100481b210e0c050b417f2008200d472008200d491b210e0c040b2005200d41f1016a412010cc08220d450d04417f4101200d4100481b210e0c030b2005200d41f1016a411010cc08220d450d03417f4101200d4100481b210e0c020b2005200d41f1016a410810cc08220d450d02417f4101200d4100481b210e0c010b2005200d41f1016a410410cc08220d450d01417f4101200d4100481b210e0b200141016a210d200e41187441187541016a0e03020001020b0b20024190026a10e60620022d0080044106490d02200228028404410020022802880422011b220d450d022001450d02200d102c0c020b02402004450d002004417f6a2104200320014102746a4190186a28020021030c010b0b20024190026a41086a280200210e2002290390022106200241046a20024190026a410c6a418c0210c9081a200241d0206a200241046a418c0210c9081a0240024020032f018e18220c410b490d004105210d4100210b02400240200141054f0d004104210d2001210c0c010b4105210c024002402001417b6a0e020201000b200141796a210c4101210b4106210d0c010b4100210c4101210b0b4190181032220a450d0341002105200a200241b8066a41881810c908220441003b018e1820044100360288182003200d4198026c6a220128020421082001280200210920024190026a200141086a41900210c9081a200420014198026a20032f018e18200d417f736a22114198026c10c90821012003200d3b018e18200120113b018e1820012003200b1b220d200c4198026c6a22014198026a2001200d2f018e18200c6b4198026c10ca081a200141086a200e360200200120063703002001410c6a200241d0206a418c0210c9081a200d200d2f018e1841016a3b018e18200241c01e6a20024190026a41900210c9081a02402003280288182201450d00200241f0226a2112200241f8226a211320024180236a211420024188236a21154100210503402009211120082116200a21172003210d20012103200d2f018c182104200241d0206a200241c01e6a41900210c9081a41000d0602400240024020032f018e18220d410b490d004100210b4104210c024020044105490d002004210c024002402004417b6a0e020201000b200441796a21044101210b4106210c0c010b410021044101210b4105210c0b41c0181032220a450d08200541016a210541002101200a200241b8066a41881810c908220d41003b018e18200d410036028818200d20022903e02237039018200d4198186a200241e0226a41086a290300370300200d41a0186a2012290300370300200d41a8186a2013290300370300200d41b0186a2014290300370300200d41b8186a20152903003703002003200c4198026c6a220e2802042108200e2802002109200241b8066a200e41086a41900210c9081a200d200e4198026a20032f018e182218200c417f736a220e4198026c10c908210d2003200c3b018e18200d200e3b018e1820024190026a200241b8066a41900210c9081a200d4190186a200c41027420036a4194186a2018200c6b41027410c908211802400340200d20014102746a4190186a280200220c20013b018c18200c200d3602881820012001200e49220c6a2201200e4b0d01200c0d000b0b200241b8066a20024190026a41900210c9081a20024190026a200241b8066a41900210c9081a200b450d01200441027420186a41086a2018200441016a22014102746a220e200d2f018e1820046b41027410ca081a200e2017360200200d20044198026c6a220e4198026a200e200d2f018e1820046b4198026c10ca081a200e2016360204200e2011360200200e41086a200241d0206a41900210c9081a200d200d2f018e1841016a220e3b018e182001200e41ffff0371220e4b0d020340200d20014102746a4190186a280200220c20013b018c18200c200d3602881820012001200e496a220c200e4b0d032001200e4f2104200c21012004450d000c030b0b200441027420034190186a220e6a41086a200e200441016a22014102746a220e200d20046b220c41027410ca081a200e2017360200200320044198026c6a220d4198026a200d200c4198026c10ca081a200d2016360204200d2011360200200d41086a200241d0206a41900210c9081a200320032f018e1841016a220d3b018e182004200d41ffff0371220d4f0d050340200320014102746a4190186a280200220e20013b018c18200e20033602881820012001200d496a220e200d4b0d062001200d4f210c200e2101200c450d000c060b0b200441027420034190186a220d6a41086a200d200441016a22014102746a220d20032f018e1820046b41027410ca081a200d2017360200200320044198026c6a220d4198026a200d20032f018e1820046b4198026c10ca081a200d2016360204200d2011360200200d41086a200241d0206a41900210c9081a200320032f018e1841016a220d3b018e182001200d41ffff0371220d4b0d000340200320014102746a4190186a280200220e20013b018c18200e20033602881820012001200d49220e6a2201200d4b0d01200e0d000b0b200241c01e6a20024190026a41900210c9081a20032802881822010d000b0b200241a8046a200241c01e6a41900210c9081a20024190026a200241a8046a41900210c9081a2000280200450d0541c01810322201450d032001200241b8066a41881810c908220141003b018e182001410036028818200120022903e0223703901820014198186a200241e8226a290300370300200141a0186a200241f0226a290300370300200141a8186a200241f8226a290300370300200141b0186a20024180236a290300370300200141b8186a20024188236a29030037030020012000280200220d360290182000200136020020002000280204220341016a360204200d41003b018c18200d200136028818200241b8066a20024190026a41900210c9081a20032005470d0620012f018e18220d410a4b0d072001200d41016a22033b018e182001200d4198026c6a220d2008360204200d2009360200200d41086a200241b8066a41900210c9081a200120034102746a4190186a200a360200200a20033b018c18200a2001360288182000200028020841016a3602080c020b200320014198026c6a220d4198026a200d200c20016b4198026c10ca081a200d41086a200e360200200d2006370300200d410c6a200241d0206a418c0210c9081a200320032f018e1841016a3b018e180b2000200028020841016a3602080b20024190236a24000f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000bc70401047f024020002d0000220220012d0000460d0041000f0b41012103024002400240024002400240024002402002417f6a0e0707050403020100060b410021032000410c6a28020022022001410c6a280200470d0541012103200041046a2802002200200141046a2802002201460d0520002001200210cc084521030c050b200041086a290300200141086a29030085200041106a290300200141106a2903008584500f0b20002d000120012d0001460f0b0240200041186a2802002202200141186a280200460d0041000f0b024020024101470d000240200041246a2802002202200141246a280200460d0041000f0b2000411c6a28020022042001411c6a2802002205460d004100210320042005200210cc080d030b4101210320002001460d02200041016a200141016a411410cc08450f0b0240200041046a2802002202200141046a280200460d0041000f0b024020024101470d000240200041106a2802002202200141106a280200460d0041000f0b200041086a2802002204200141086a2802002205460d004100210320042005200210cc080d020b200041186a290300200141186a290300510f0b0240200041246a2802002202200141246a280200460d0041000f0b024020024101470d000240200041306a2802002202200141306a280200460d0041000f0b200041286a2802002204200141286a2802002205460d004100210320042005200210cc080d010b4101210320002001460d00200041016a200141016a412010cc08450f0b20030f0b200041046a280200200141046a280200460b9b0101037f024002402001280208220241ffffffff03712002470d0020024102742203417f4c0d00200128020021040240024020030d00410421010c010b200310322201450d020b20002001360200200041086a220141003602002000200341027636020420004100200210a9082000280200200128020022004102746a2004200241027410c9081a2001200020026a3602000f0b103b000b1039000bd80101027f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d02200341017422012002200120024b1b22014104200141044b1b220141ffffffff037122042001470d02200141027422024100480d0220042001464102742104024002400240024002402000280200410020031b22010d002002450d010c030b200341027422030d0120020d020b200421010c020b200120032002103522010d010c030b200210322201450d020b20002001360200200041046a20024102763602000b0f0b2004450d001039000b103b000bcf0201077f230041106b220124000240024002400240200041086a2802002202450d0020002802002203200241027422046a210541002106200321070240034020072802000d01200741046a2107200641016a21062004417c6a22040d000b2002417f6a21060b2006450d0020022006490d01200220066b220741ffffffff03712007470d0220074102742207417f4c0d024104210402402007450d00200710322204450d040b200141003602082001200436020020012007410276360204200141002005200320064102746a22076b2206410276220410a9082001280200200128020822024102746a2007200610c9081a2001200220046a3602080240200041046a28020041ffffffff0371450d002000280200102c0b20002001290300370200200041086a200141086a2802003602000b200141106a24000f0b2006200241a0aec8001058000b103b000b1039000be30303047f017e057f230041106b22012400024002400240024002400240024020002802002202280200220341016a41004c0d002002200336020020002802042203280200220441016a41004c0d0120022903082105200320043602002000280208220441086a2802002206200028020c220728020022086b41016a220920064f0d024101200028021428020020086a6b22062000280210220841086a28020022006a220a20064f0d0302400240200542ffffffff0f560d00410021002005200428020020094102746a3502007e20032903084220862008280200200a4102746a35020084580d010b20022802000d052002410036020020022002290308427f7c370308200441086a2802002200200020072802006b22024d0d0620032802000d07200428020020024102746a3502002105200341003602002003200520032903087c370308410121000b200141106a240020000f0b41fcaec8004118200141086a4194afc80041b4afc8001040000b41fcaec8004118200141086a4194afc80041c4afc8001040000b200920064188adc800103f000b200a20004188adc800103f000b41d4afc8004110200141086a41e4afc80041f4afc8001040000b200220004188adc800103f000b41d4afc8004110200141086a41e4afc8004184b0c8001040000bd003030a7f017e027f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742206417f4c0d000240024020060d00410421080c010b200610372208450d020b20002008360200200041086a200736020020002006410276360204024020050d00410021000c050b2007417f6a21062004417f6a220920044b210a200741027420086a417c6a210b2002280200210c410021024200210d03404100210002402003417f6a220e20034b0d00410021002003200e20026b220f4d0d0041002100200f200e4b0d002001280200200f4102746a28020021000b4100210e0240200a0d002004200920026b220f4d0d00200f20094b0d00200c200f4102746a280200210e0b200720064d0d03200b200d2000ad7c200ead7c220d3e0200200b417c6a210b2006417f6a2106200d422088210d2005200241016a2202460d040c000b0b103b000b1039000b2006200741b0aec800103f000b200da721000b024020072005417f736a220620074f0d00200820064102746a20003602000240200141046a28020041ffffffff0371450d002001280200102c0b0f0b2006200741b0aec800103f000bba0203027f027e037f230041206b22022400200241106a41086a2203200141086a28020036020020022001290200370310200241106a10aa08024002400240200328020022014105744180014b0d00024020010d0042002104420021050c020b2002280210220341786a21062003200141027422016a417c6a280200210741002103200241086a21084200210442002105034020022007ad4200200341e0007110cd08200829030020057c2002290300220520047c2204200554ad7c210520014104460d02200341206a2103200620016a28020021072001417c6a21010c000b0b20004182aec80036020420004101360200200041086a411d3602000c010b20004100360200200041106a2005370300200041086a20043703000b0240200228021441ffffffff0371450d002002280210102c0b200241206a24000b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000bf20102047f017e230041106b22022400200241086a2001108702024002400240024002402002280208450d00200041003602000c010b024020012802042203200228020c2204490d002004417f4c0d020240024020040d00410121050c010b200410372205450d04200128020421030b024020032004490d0020052001280200200410c9082103200128020422052004490d052001200520046b3602042001200128020020046a3602002003450d0120002004ad2206422086200684370204200020033602000c020b2005102c0b200041003602000b200241106a24000f0b103b000b1039000b200420054194afc0001058000b9a0201057f230041106b22022400024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0141012105410021040c020b103b000b2004103222050d001039000b200241003602082002200436020420022005360200200241004101102f20022802002205200228020822046a21060240024020030d00200641003a0000200441016a21040c010b200641013a00002002200441016a360208200141086a280200220420021077200220022802082004102f20022802002205200228020822016a2003200410c9081a200120046a21040b20002002290300370204200041013602002000410c6a2004360200200041106a2004ad4220862005ad84370300200241106a24000b0600200010140b0600200010150bb10301047f230041c0006b2202240020002802002103410121000240200128021841859cc000410c2001411c6a28020028020c1100000d0002400240200328020822000d0020032802002200200328020428020c11080042f4f99ee6eea3aaf9fe00520d012002200036020c2002412936021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241949cc0003602282002200241106a36023820042005200241286a103e0d020c010b2002200036020c2002410836021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241949cc0003602282002200241106a36023820042005200241286a103e0d010b200328020c2100200241106a41146a4102360200200241106a410c6a410236020020022000410c6a3602202002200041086a360218200241043602142002200036021020012802182100200128021c2101200241286a41146a41033602002002420337022c200241a49cc0003602282002200241106a36023820002001200241286a103e21000b200241c0006a240020000b180020002802002200280200200041046a280200200110690bdb0103027f017e017f024002400240200041046a2802002202200028020822036b20014f0d00200320016a22012003490d02200241017422032001200320014b1b22014104200141044b1bad420c7e2204422088a722030d022004a722014100480d022003454102742105024002400240024002402000280200410020021b22030d002001450d010c030b2002410c6c22020d0120010d020b200521020c020b200320022001103522020d010c030b200110322202450d020b20002002360200200041046a2001410c6e3602000b0f0b2005450d001039000b103b000b1c00200128021841d8bdc800410f2001411c6a28020028020c1100000bc50201057f230041106b22022400024002400240024020002d002c410171450d0002400240200028020041244b0d00200041056a2103200021040c010b2000410c6a2104200041086a28020021030b2003450d0220042802002204450d02200420036a417f6a220320032d00002001723a00000c010b41242104024002402000280200220541244b0d00200041056a2106200021030c010b2000410c6a2103200041086a2802002106200521040b0240200328020022052004470d0020022000410110a008024020022802004101470d00200241086a2802000d0441e8c4c800411141fcc4c800103c000b2000410c6a22032802002105200041086a28020021060b200620056a20014104743a00002003200328020041016a3602000b2000200028022c41016a36022c200241106a24000f0b41a0c0c800413a41dcc0c800105c000b1039000bcf0101027f230041306b22032400024002400240024020024125490d002002417f4c0d02200210322204450d0320042001200210c90821012000410c6a2002360200200041086a2001360200410121010c010b2003410c6a2001200210c9081a200041256a2003412c6a2800003600002000411d6a200341246a290000370000200041156a2003411c6a2900003700002000410d6a200341146a290000370000200041056a200329000c370000410021010b200020013a000420002002360200200341306a24000f0b103b000b1039000bdf0f29027f027e017f017e017f017e017f027e017f017e017f017e017f027e017f017e017f017e017f017e017f017e017f017e017f027e017f017e017f017e017f037e017f027e017f017e017f017e017f037e0d7f230022022103200241c0026b41607122022400200129030021044200210520014200370300200141386a22062903002107200141306a22082903002109200141286a220a290300210b200141206a290300210c20014198016a220d290300210e20014190016a220f290300211020014188016a2211290300211220014180016a2903002113200141d8016a22142903002115200141d0016a22162903002117200141c8016a22182903002119200141c0016a221a290300211b200141e0016a221c290300211d200141a0016a221e290300211f200141a8016a2903002120200141b0016a22212903002122200141b8016a22232903002124200141e0006a22252903002126200141e8006a2903002127200141f0006a2903002128200141f8006a2229290300212a200141c0006a290300212b200141c8006a222c290300212d200141d0006a222e290300212f200141d8006a2230290300213120012903082132200129031021332002200141186a223429030037039801200220333703900120022032370388012002200437038001200220313703182002202f3703102002202d3703082002202b3703002002202a3703b802200220283703b002200220273703a802200220263703a0022002202437039802200220223703900220022020370388022002201f3703800241092135024002400240024002402004a70e050401020300040b200241e8016a41106a200229039801370300200241e8016a41086a200229039001370300200241d0016a41086a20022903a802370300200241d0016a41106a20022903b002370300200241c0016a41086a20022903880237030020022002290388013703e801200220022903a0023703d00120022002290380023703c001200220022800940236007b2002200228009102360278200241c8006a41186a2017370300200241c8006a41106a2019370300200241c8006a41206a20153703002002201b3703502002201d370370200220243703482022a72135420321050c030b200241c8006a41186a200b370300200241d0006a200229039801370300200241c8006a41206a2009370300200241c8006a41286a20073703002002200c3703582002200228008c0136007b200220022800890136027820022002290390013703482032a721350c020b200241e8016a41106a200229039801370300200241e8016a41086a200229039001370300200241c8006a41086a2002290310370300200241c8006a41106a2002290318370300200241c8006a41286a20022903b002370300200241c8006a41206a20022903a80237030020022002290388013703e801200220022800013602782002200228000436007b20022002290308370348200220022903a002370360202ba72135420121050c010b200241e8016a41106a200229039801370300200241e8016a41086a200229039001370300200241d0016a41086a20022903a802370300200241d0016a41106a20022903b002370300200241c8006a41186a200e3703002002201337034820022002290388013703e801200220022903a0023703d001200220022800b902360278200220022800bc0236007b2002201237035020022010370358200241c8006a41286a2002290388023703002002200229038002370368202aa72135420221050b200241a0026a41086a2236200241e8016a41086a290300370300200241a0026a41106a2237200241e8016a41106a29030037030020024180026a41086a2238200241d0016a41086a29030037030020024180026a41106a2239200241d0016a41106a290300370300200220022903e8013703a002200220022903d00137038002200241386a41086a223a200241c0016a41086a290300370300200220022903c001370338200241086a223b20024180016a41086a290300370300200241106a223c20024180016a41106a290300370300200241186a223d20024180016a41186a290300370300200241206a223e20024180016a41206a290300370300200241286a223f20024180016a41286a290300370300200241306a224020024180016a41306a2903003703002002200229038001370300200020353a0000200041046a200228007b36000020002002280278360001200041306a200241c8006a41286a290300370000200041286a200241c8006a41206a290300370000200041206a200241c8006a41186a290300370000200041186a200241c8006a41106a290300370000200041106a200241c8006a41086a290300370000200041086a2002290348370000200110a20120302031370300202e202f370300202c202d3703002001202b3703402006200737030020082009370300200a200b3703002001200c370320200d200e370300200f2010370300201120123703002001201337038001200120053703002029202a370300200120022903a002370308200141106a2036290300370300203420372903003703002025200229038002370300202541086a2038290300370300202541106a2039290300370300201e2002290338370300201e41086a203a290300370300201c20402903003703002014203f2903003703002016203e2903003703002018203d290300370300201a203c2903003703002023203b29030037030020212002290300370300200324000bf50201027f230041106b2202240002400240024002400240200028020022002802000e0401020300010b2001280218419ecbc80041062001411c6a28020028020c11000021010c030b200128021841a4cbc80041032001411c6a28020028020c11000021010c020b2002200128021841a7cbc80041052001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41accbc80010661a20022d0008210120022802042203450d01200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d010b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010b200220013a00080c010b200128021841bccbc80041082001411c6a28020028020c11000021010b200241106a2400200141ff01714100470b900d01027f230041106b220224000240024002400240024002400240024002400240200028020022002d00000e09010203040506070800010b200128021841c4cbc80041092001411c6a28020028020c11000021010c080b200128021841cdcbc80041062001411c6a28020028020c11000021010c070b200128021841d3cbc80041092001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200041046a36020c200241dccbc80041022002410c6a41e0cbc80010601a20022d0004210120022d0005450d06200141ff0171210041012101024020000d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d002002200341f49dc0004102200011000022013a00040c080b200341f69dc0004101200011000021010b200220013a00040c060b200128021841f0cbc800410b2001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200041246a36020c41012101200241fbcbc80041072002410c6a4184ccc800106021032002200041016a36020c200341dccbc80041022002410c6a4194ccc80010601a20022d00042100024020022d00050d00200021010c060b0240200041ff01710d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d002002200341f49dc0004102200011000022013a00040c070b200341f69dc0004101200011000021010b200220013a00040c050b200128021841a4ccc800410e2001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200041046a36020c200241fbcbc80041072002410c6a4184ccc800106021012002200041186a36020c200141b2ccc80041052002410c6a41b8ccc80010601a20022d0004210120022d0005450d04200141ff0171210041012101024020000d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d002002200341f49dc0004102200011000022013a00040c060b200341f69dc0004101200011000021010b200220013a00040c040b200128021841c8ccc800410c2001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200041186a36020c41012101200241fbcbc80041072002410c6a4184ccc800106021032002200041016a36020c200341d4ccc80041032002410c6a41d8ccc80010601a20022d00042100024020022d00050d00200021010c040b0240200041ff01710d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d002002200341f49dc0004102200011000022013a00040c050b200341f69dc0004101200011000021010b200220013a00040c030b200128021841e8ccc800410e2001411c6a28020028020c1100002103200241003a0005200220033a000420022001360200410121012002200041016a36020c200241dccbc80041022002410c6a41f8ccc80010601a20022d00042100024020022d00050d00200021010c030b0240200041ff01710d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d002002200341f49dc0004102200011000022013a00040c040b200341f69dc0004101200011000021010b200220013a00040c020b20012802184188cdc800410c2001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200041086a36020c200241dccbc80041022002410c6a4194cdc80010601a20022d0004210120022d0005450d01200141ff0171210041012101024020000d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d002002200341f49dc0004102200011000022013a00040c030b200341f69dc0004101200011000021010b200220013a00040c010b2002200128021841a4cdc800410a2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41accbc80010661a20022d0008210120022802042203450d00200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841fa9dc00041012000411c6a28020028020c1100000d010b2002280200220128021841c5c7c50041012001411c6a28020028020c11000021010b200220013a00080b200241106a2400200141ff01714100470bc20101047f230041106b220224002000280200220028020821032000280200210041012104200128021841fc9dc00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41b0cdc80010671a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d0020022802002200280218419a92c10041012000411c6a28020028020c11000021040b200241106a240020040bd70201047f024020002802082201450d002000280200210220014198026c2103410021010340024002400240024002400240024002400240200220016a22042802000e0b0808080800010203040506070b200441086a280200450d07200441046a280200102c0c070b200441086a280200450d06200441046a280200102c0c060b200441086a10f5060c050b200441086a10f5060c040b200441086a280200450d03200441046a280200102c0c030b0240200441086a280200450d00200441046a280200102c0b200441106a2d00004106490d02200441186a280200450d02200441146a280200102c0c020b200441086a10f5060c010b200441086a10f506200441f0016a2d00004106490d00200441f8016a280200450d00200441f4016a280200102c0b200320014198026a2201470d000b0b024020002802042201450d0020002802002204450d0020014198026c450d002004102c0b0bbb0201047f024020002802082201450d002000280200210220014188026c21034100210103400240024002400240024002400240200220016a22002802000e06060001020304050b200041046a10bd08200041106a10f5060c050b200041046a10bd08200041206a10f506200041106a220410be08200041146a2802002200450d0420004188026c450d042004280200102c0c040b200041046a10bd08200041106a10bd080c030b200041046a10bd08200041206a10f506200041106a220410be08200041146a2802002200450d0220004188026c450d022004280200102c0c020b200041046a10bd08200041206a10f506200041106a220410be08200041146a2802002200450d0120004188026c450d012004280200102c0c010b200041186a10f506200041046a10bd080b200320014188026a2201470d000b0b0bb00201027f02400240024002400240024002400240200028020022012d00000e0700010203040506070b200141046a10bd08200141106a220210be08200141146a2802002201450d0620022802002202450d0620014188026c450d062002102c0c060b200141046a10bd08200141106a220210be08200141146a2802002201450d0520022802002202450d0520014188026c450d052002102c0c050b200141046a10bd08200141106a220210be08200141146a2802002201450d0420022802002202450d0420014188026c450d042002102c0c040b200141046a10bd080c030b200141086a2802002202450d02200141046a2802002201450d022002450d022001102c0c020b200141086a10f506200141046a10bf080c010b200141086a10f506200141046a10bf080b2000280200102c0b810501037f230041106b220224002000280200210041012103200128021841fc9dc00041012001411c6a28020028020c1100002104200241003a0005200220043a0004200220013602002002200036020c20022002410c6a41b0cdc800106721012002200041016a36020c20012002410c6a41b0cdc800106721012002200041026a36020c20012002410c6a41b0cdc800106721012002200041036a36020c20012002410c6a41b0cdc800106721012002200041046a36020c20012002410c6a41b0cdc800106721012002200041056a36020c20012002410c6a41b0cdc800106721012002200041066a36020c20012002410c6a41b0cdc800106721012002200041076a36020c20012002410c6a41b0cdc800106721012002200041086a36020c20012002410c6a41b0cdc800106721012002200041096a36020c20012002410c6a41b0cdc8001067210120022000410a6a36020c20012002410c6a41b0cdc8001067210120022000410b6a36020c20012002410c6a41b0cdc8001067210120022000410c6a36020c20012002410c6a41b0cdc8001067210120022000410d6a36020c20012002410c6a41b0cdc8001067210120022000410e6a36020c20012002410c6a41b0cdc8001067210120022000410f6a36020c20012002410c6a41b0cdc800106721012002200041106a36020c20012002410c6a41b0cdc800106721012002200041116a36020c20012002410c6a41b0cdc800106721012002200041126a36020c20012002410c6a41b0cdc800106721012002200041136a36020c20012002410c6a41b0cdc80010671a024020022d00040d0020022802002200280218419a92c10041012000411c6a28020028020c11000021030b200241106a240020030bb90701037f230041106b220224002000280200210041012103200128021841fc9dc00041012001411c6a28020028020c1100002104200241003a0005200220043a0004200220013602002002200036020c20022002410c6a41b0cdc800106721012002200041016a36020c20012002410c6a41b0cdc800106721012002200041026a36020c20012002410c6a41b0cdc800106721012002200041036a36020c20012002410c6a41b0cdc800106721012002200041046a36020c20012002410c6a41b0cdc800106721012002200041056a36020c20012002410c6a41b0cdc800106721012002200041066a36020c20012002410c6a41b0cdc800106721012002200041076a36020c20012002410c6a41b0cdc800106721012002200041086a36020c20012002410c6a41b0cdc800106721012002200041096a36020c20012002410c6a41b0cdc8001067210120022000410a6a36020c20012002410c6a41b0cdc8001067210120022000410b6a36020c20012002410c6a41b0cdc8001067210120022000410c6a36020c20012002410c6a41b0cdc8001067210120022000410d6a36020c20012002410c6a41b0cdc8001067210120022000410e6a36020c20012002410c6a41b0cdc8001067210120022000410f6a36020c20012002410c6a41b0cdc800106721012002200041106a36020c20012002410c6a41b0cdc800106721012002200041116a36020c20012002410c6a41b0cdc800106721012002200041126a36020c20012002410c6a41b0cdc800106721012002200041136a36020c20012002410c6a41b0cdc800106721012002200041146a36020c20012002410c6a41b0cdc800106721012002200041156a36020c20012002410c6a41b0cdc800106721012002200041166a36020c20012002410c6a41b0cdc800106721012002200041176a36020c20012002410c6a41b0cdc800106721012002200041186a36020c20012002410c6a41b0cdc800106721012002200041196a36020c20012002410c6a41b0cdc8001067210120022000411a6a36020c20012002410c6a41b0cdc8001067210120022000411b6a36020c20012002410c6a41b0cdc8001067210120022000411c6a36020c20012002410c6a41b0cdc8001067210120022000411d6a36020c20012002410c6a41b0cdc8001067210120022000411e6a36020c20012002410c6a41b0cdc8001067210120022000411f6a36020c20012002410c6a41b0cdc80010671a024020022d00040d0020022802002200280218419a92c10041012000411c6a28020028020c11000021030b200241106a240020030b834a0f027f017e1c7f017e017f067e017f097e027f017e037f077e0c7f057e047f230041f00b6b22022400024020002802000d00200041086a2103420021040240024002400240024020012802000e050401020300040b200241b00b6a200141086a10c308200241c8036a200141c0006a10c308200241b0056a200141f8006a10c308200241d0086a200141b0016a10c30820024190036a41086a200241b00b6a41096a29000037030020024190036a41106a200241b00b6a41116a29000037030020024190036a41186a200241b00b6a41196a29000037030020024190036a41206a200241b00b6a41216a29000037030020024190036a41286a200241b00b6a41296a29000037030020024190036a412f6a200241b00b6a41306a290000370000200241d8026a41086a200241c8036a41096a290000370300200241d8026a41106a200241c8036a41116a290000370300200241d8026a41186a200241c8036a41196a290000370300200241d8026a41206a200241c8036a41216a290000370300200241d8026a41286a200241c8036a41296a290000370300200241d8026a412f6a200241c8036a41306a290000370000200220022900b10b37039003200220022900c9033703d80220022d00b00b210520022d00c8032106200241a0026a41086a200241b0056a41096a290000370300200241a0026a41106a200241b0056a41116a290000370300200241a0026a41186a200241b0056a41196a290000370300200241a0026a41206a200241b0056a41216a290000370300200241a0026a41286a200241b0056a41296a290000370300200241a0026a412f6a200241b0056a41306a290000370000200241e8016a41086a200241d0086a41096a290000370300200241e8016a41106a200241d0086a41116a290000370300200241e8016a41186a200241d0086a41196a290000370300200241e8016a41206a200241d0086a41216a290000370300200241e8016a41286a200241d0086a41296a290000370300200241e8016a412f6a200241d0086a41306a290000370000200220022900b1053703a002200220022900d1083703e80120022d00b005210720022d00d0082108420421040c030b200241d0086a200141086a10c30820024190036a41086a200241d9086a290000370300200241a0036a200241e1086a290000370300200241a8036a200241e9086a290000370300200241b0036a200241f1086a290000370300200241b8036a200241f9086a290000370300200241bf036a20024180096a290000370000200220022900d1083703900320022d00d0082105420121040c020b200241b0056a200141086a10c308200241d0086a200141c0006a10c30820024190036a41086a200241b0056a41096a29000037030020024190036a41106a200241b0056a41116a29000037030020024190036a41186a200241b0056a41196a29000037030020024190036a41206a200241b0056a41216a29000037030020024190036a41286a200241b0056a41296a29000037030020024190036a412f6a200241b0056a41306a290000370000200241d8026a41086a200241d0086a41096a290000370300200241d8026a41106a200241d0086a41116a290000370300200241d8026a41186a200241d0086a41196a290000370300200241d8026a41206a200241d0086a41216a290000370300200241d8026a41286a200241d0086a41296a290000370300200241d8026a412f6a200241d0086a41306a290000370000200220022900b10537039003200220022900d1083703d80220022d00b005210520022d00d0082106420221040c010b200241c8036a200141086a10c308200241b0056a200141c0006a10c308200241d0086a200141f8006a10c30820024190036a41086a200241c8036a41096a29000037030020024190036a41106a200241c8036a41116a29000037030020024190036a41186a200241c8036a41196a29000037030020024190036a41206a200241c8036a41216a29000037030020024190036a41286a200241c8036a41296a29000037030020024190036a412f6a200241c8036a41306a290000370000200241d8026a41086a200241b0056a41096a290000370300200241d8026a41106a200241b0056a41116a290000370300200241d8026a41186a200241b0056a41196a290000370300200241d8026a41206a200241b0056a41216a290000370300200241d8026a41286a200241b0056a41296a290000370300200241d8026a412f6a200241b0056a41306a290000370000200220022900c90337039003200220022900b1053703d80220022d00c803210520022d00b0052106200241a0026a41086a200241d0086a41096a290000370300200241a0026a41106a200241d0086a41116a290000370300200241a0026a41186a200241d0086a41196a290000370300200241a0026a41206a200241d0086a41216a290000370300200241a0026a41286a200241d0086a41296a290000370300200241a0026a412f6a200241d0086a41306a290000370000200220022900d1083703a00220022d00d0082107420321040b4100210941002101024002400240024002402003280200220a417f6a0e0400010203040b200041106a2d00004521010c030b41002101200041106a2d00000d0241014102200041c8006a2d00001b21010c020b41002101200041106a2d00000d0141012101200041c8006a2d00000d014102410320004180016a2d00001b21010c010b41002101200041106a2d00000d0041012101200041c8006a2d00000d004102210120004180016a2d00000d0041034104200041b8016a2d00001b21010b4100210b024002400240024002402004a7220c0e050400010203040b4100417f200541ff01711b21094101210b0c030b4102210b200541ff01710d02417f417e200641ff01711b21090c020b4103210b200541ff01710d01417f2109200641ff01710d01417e417d200741ff01711b21090c010b4104210b200541ff01710d00417f2109200641ff01710d00417e2109200741ff01710d00417d417c200841ff01711b21090b20012009200b6a220d4b210e4104210b4104210902400240024002400240200a0e050001020304000b410021090c030b410121090c020b410221090c010b410321090b200d2001200e1b210102400240024002400240200c0e050001020304000b4100210b0c030b4101210b0c020b4102210b0c010b4103210b0b02400240200920014101746b200b6a41044b0d00200241c8036a41c0006a220f20063a0000200241d9036a20024190036a41086a290300370000200241e1036a20024190036a41106a290300370000200241e9036a20024190036a41186a290300370000200241f1036a20024190036a41206a290300370000200241f9036a20024190036a41286a290300370000200241c8036a41386a20024190036a412f6a290000370000200220053a00d003200220043703c80320022002290390033700d103200241c8036a41f8006a221020073a000020024191046a200241d8026a41086a29030037000020024199046a200241d8026a41106a290300370000200241a1046a200241d8026a41186a290300370000200241a9046a200241d8026a41206a290300370000200241b1046a200241d8026a41286a290300370000200241c8036a41f0006a200241d8026a412f6a290000370000200241c9046a200241a0026a41086a290300370000200241d1046a200241a0026a41106a290300370000200241d9046a200241a0026a41186a290300370000200241e1046a200241a0026a41206a290300370000200241e9046a200241a0026a41286a290300370000200241c8036a41a8016a200241a0026a412f6a290000370000200220022903d80237008904200220022903a0023700c104200241c8036a41b0016a221120083a0000200241c8036a41e0016a200241e8016a412f6a290000370000200241a1056a200241e8016a41286a29030037000020024199056a200241e8016a41206a29030037000020024191056a200241e8016a41186a29030037000020024189056a200241e8016a41106a29030037000020024181056a200241e8016a41086a290300370000200220022903e8013700f904200041b8016a210120004180016a210b200041c8006a2109200241c8036a41086a2112200041306a2113200041e0006a210c200041d8006a210d200041d0006a2114200041a0016a210e20004198016a211520004190016a2116200041c0016a2117200041d8016a2118200041d0016a211920004188016a211a200041e8006a211b03404100210a0240024002400240024020022802c8030e050401020300040b2011210a0c030b2012210a0c020b200f210a0c010b2010210a0b0240200a450d002000290308500d0020002d001041ff01710d00200a2d0000450d00200241d0086a200241c8036a10b908024020022d00d008220a4109460d000240024002400240200a417e6a0e06000102040403040b20022802f4084101470d0320022802fc08220a201c200a1b211c20022802f8084100200a1b220a450d03201c450d03200a102c0c030b20022802d4084101470d0220022802dc08220a201d200a1b211d20022802d8084100200a1b220a450d02201d450d02200a102c0c020b20022802e8084101470d0120022802f008220a201e200a1b211e20022802ec084100200a1b220a450d01201e450d01200a102c0c010b20022802d808220a201f200a1b211f20022802d4084100200a1b220a450d00201f450d00200a102c0b200028020821204200212120004200370308200041386a2222290300212320132903002124200c2903002125200d290300212620142903002127200b2903002128200041f8006a2229290300212a200041f0006a290300212b200e290300212c2015290300212d2016290300212e200041b0016a290300212f200041e0016a29030021302018290300213120192903002132200041186a22332903002204a72134200041106a2903002235a721362004422088a721372035422088a72138200029032821392000290348213a2000290368213b200029038801213c20002903a801213d20002903c801213e20002903e801213f4109210a02400240024002400240024020200e050501020300050b2017290300213520012903002104420321212037214020342141203821420c030b2037214020342141203821420c020b420121212037214020342141203821420c010b420221212037214020342141203821420b2036210a0b200241b0056a41306a2220200241d0086a41306a290300370300200241b0056a41286a2234200241d0086a41286a290300370300200241b0056a41206a2236200241d0086a41206a290300370300200241b0056a41186a2237200241d0086a41186a290300370300200241b0056a41106a2238200241d0086a41106a290300370300200241b0056a41086a2243200241d0086a41086a290300370300200220022903d0083703b005200310a201200041a8016a2030370300200e2031370300201520323703002000203e37039001201a203537030020002004370380012029202f3703002000203d370370201b202c370300200c202d370300200d202e3703002000203c370350200041c0006a202a3703002022202b3703002000203b370330200041286a2025370300200041206a2026370300203320273703002000203a3703102000203f3703b0012000202837034820002021370308200120022903b005370300200141086a2043290300370300200141106a2038290300370300200141186a2037290300370300200141206a2036290300370300200141286a2034290300370300200141306a20202903003703000240024002400240200a41ff0171417e6a0e06000102050503050b202442808080807083428080808010854200520d042023422088a7220a2044200a1b21442023a74100200a1b220a450d042044450d04200a102c0c040b20424101470d032040204520401b21452041410020401b220a450d032045450d03200a102c0c030b2039a74101470d022024a7220a2046200a1b21462039422088a74100200a1b220a450d022046450d02200a102c0c020b2041204720411b21472042410020411b220a450d012047450d01200a102c0c010b0b200241b0056a200241c8036a41e80110c9081a200241d0086a200241b0056a10b9080240024020022d00d00822204109460d00200041116a2122200241d0086a41b0016a210e200241d0086a41096a2148200241d0086a41f8006a210d200241d0086a41086a210a200241d0086a4101722129200241d0086a41c0006a210c200041106a2145200041206a2144200041e0006a210f20004180016a2110200041a0016a2111200041c0016a2112200041e0016a2117200241980a6a211e200241f8096a211d200241d8096a211c200241b8096a214920024198096a214a200241d0086a41286a214b03402002419c076a41026a2215202941026a2d00003a0000200220292f00003b019c0720022802d408211620022802d808211420022802dc08211820022903e008214c20022802e808211b20022802ec08211f20022802f008211920022802f408214720022802f808214620022802fc08211a200229038009214d200029030821042000420037030820452903002128200041186a290300212f20442903002135200041306a290300213d200041386a290300212a200041c0006a2903002121200041d0006a290300213b200041d8006a2903002125200f2903002126200041f0006a2903002127200041f8006a290300212c2010290300212d20004190016a290300212e20004198016a290300213020112903002131200041b0016a2903002132200041b8016a290300213a2012290300213c200041d0016a290300213e200041d8016a290300213f20002903e80121242000290328212b2000290348213920002903682123200029038801214e20002903a801214f20002903c8012150200241d0086a41d8016a2017290300370300200241d0086a41d0016a203f370300201e203e370300200241d0086a41b8016a203c370300200e203a370300201d2032370300200241d0086a4198016a2031370300200241d0086a4190016a2030370300201c202e370300200d202d370300200241d0086a41f0006a202c37030020492027370300200241d0086a41d8006a2026370300200241d0086a41d0006a2025370300204a203b370300200241d0086a41386a2021370300200241d0086a41306a202a370300204b203d370300200241d0086a41186a2035370300200220503703900a2002204f3703f0092002204e3703d009200220233703b00920022039370390092002202b3703f0082002202f3703e008200220283703d808200220043703d008200220243703b00a200241bc0a6a41026a223320152d00003a0000200220022f019c073b01bc0a02400240024002400240024002402004a722340e0404000102030b200241ec0b6a41026a20332d00003a0000200241b00b6a41086a200a41086a290300370300200241b00b6a41106a200a41106a290300370300200241b00b6a41186a200a41186a290300370300200241b00b6a41206a200a41206a290300370300200241b00b6a41286a200a41286a290300370300200241b00b6a41306a200a41306a290300370300200220022f01bc0a3b01ec0b2002200a2903003703b00b420221040c040b200241ec0b6a41026a20332d00003a0000200241b00b6a41086a200a41086a290300370300200241b00b6a41106a200a41106a290300370300200241b00b6a41186a200a41186a290300370300200241b00b6a41206a200a41206a290300370300200241b00b6a41286a200a41286a290300370300200241b00b6a41306a200a41306a290300370300200220022f01bc0a3b01ec0b2002200a2903003703b00b200241f80a6a41306a200c41306a290300370300200241f80a6a41286a200c41286a290300370300200241f80a6a41206a200c41206a290300370300200241f80a6a41186a200c41186a290300370300200241f80a6a41106a200c41106a290300370300200241f80a6a41086a200c41086a2903003703002002200c2903003703f80a420321040c030b200241ec0b6a41026a20332d00003a0000200241b00b6a41086a200a41086a290300370300200241b00b6a41106a200a41106a290300370300200241b00b6a41186a200a41186a290300370300200241b00b6a41206a200a41206a290300370300200241b00b6a41286a200a41286a290300370300200241b00b6a41306a200a41306a290300370300200220022f01bc0a3b01ec0b2002200a2903003703b00b200241f80a6a41306a200c41306a290300370300200241f80a6a41286a200c41286a290300370300200241f80a6a41206a200c41206a290300370300200241f80a6a41186a200c41186a290300370300200241f80a6a41106a200c41106a290300370300200241f80a6a41086a200c41086a290300370300200241c00a6a41306a200d41306a290300370300200241c00a6a41286a200d41286a290300370300200241c00a6a41206a200d41206a290300370300200241c00a6a41186a200d41186a290300370300200241c00a6a41106a200d41106a290300370300200241c00a6a41086a200d41086a2903003703002002200c2903003703f80a2002200d2903003703c00a420421040c020b202aa72133203da72134202fa721362028a72137202a422088a72138203d422088a72143202b422088a72141202f422088a721422028422088a72140202ba72113200241cc086a41026a204841026a2d00003a000020024190086a41086a200c41086a29030037030020024190086a41106a200c41106a29030037030020024190086a41186a200c41186a29030037030020024190086a41206a200c41206a29030037030020024190086a41286a200c41286a29030037030020024190086a41306a200c41306a290300370300200220482f00003b01cc082002200c29030037039008200241d8076a41306a200d41306a290300370300200241d8076a41286a200d41286a290300370300200241d8076a41206a200d41206a290300370300200241d8076a41186a200d41186a290300370300200241d8076a41106a200d41106a290300370300200241d8076a41086a200d41086a290300370300200241a0076a41306a200e41306a290300370300200241a0076a41286a200e41286a290300370300200241a0076a41206a200e41206a290300370300200241a0076a41186a200e41186a290300370300200241a0076a41106a200e41106a290300370300200241a0076a41086a200e41086a2903003703002002200d2903003703d8072002200e2903003703a007410121150240024002400240202041ff0171417e6a0e06000102060603060b4101211520474101470d05201a2051201a1b215120464100201a1b2220450d052051450d052020102c0c050b4101211520164101470d042018205220181b21522014410020181b2220450d042052450d042020102c0c040b41012115201b4101470d032019205320191b2153201f410020191b2220450d032053450d032020102c0c030b2014205420141b21542016410020141b2220450d022054450d022020102c0c020b200241ec0b6a41026a20332d00003a0000200220022f01bc0a3b01ec0b420121040b200241cc086a41026a200241ec0b6a41026a2d00003a000020024190086a41086a200241b00b6a41086a29030037030020024190086a41106a200241b00b6a41106a29030037030020024190086a41186a200241b00b6a41186a29030037030020024190086a41206a200241b00b6a41206a29030037030020024190086a41286a200241b00b6a41286a29030037030020024190086a41306a200241b00b6a41306a290300370300200220022f01ec0b3b01cc08200220022903b00b37039008200241d8076a41306a200241f80a6a41306a290300370300200241d8076a41286a200241f80a6a41286a290300370300200241d8076a41206a200241f80a6a41206a290300370300200241d8076a41186a200241f80a6a41186a290300370300200241d8076a41106a200241f80a6a41106a290300370300200241d8076a41086a200241f80a6a41086a290300370300200241a0076a41086a200241c00a6a41086a290300370300200241a0076a41106a200241c00a6a41106a290300370300200241a0076a41186a200241c00a6a41186a290300370300200241a0076a41206a200241c00a6a41206a290300370300200241a0076a41286a200241c00a6a41286a290300370300200241a0076a41306a200241c00a6a41306a290300370300200220022903f80a3703d807200220022903c00a3703a0074100211502402034417f6a41024d0d00200241d0086a10a2010b20202137201621402014213620182142204c2135201b2113201f2141201921342047214320462133201a2138204d21210b200310a201200020373a001020002004370308200020213703402000203836023c2000203336023820002043360234200020343602302000204136022c20002013360228200020353703202000204236021c2000203636021820002040360214202220022f01cc083b0000202241026a200241cc086a41026a2d00003a00002009200229039008370300200941086a20024190086a41086a290300370300200941106a20024190086a41106a290300370300200941186a20024190086a41186a290300370300200941206a20024190086a41206a290300370300200941286a20024190086a41286a290300370300200941306a20024190086a41306a290300370300200b41306a200241d8076a41306a290300370300200b41286a200241d8076a41286a290300370300200b41206a200241d8076a41206a290300370300200b41186a200241d8076a41186a290300370300200b41106a200241d8076a41106a290300370300200b41086a200241d8076a41086a290300370300200b20022903d807370300200120022903a007370300200141086a200241a0076a41086a290300370300200141106a200241a0076a41106a290300370300200141186a200241a0076a41186a290300370300200141206a200241a0076a41206a290300370300200141286a200241a0076a41286a290300370300200141306a200241a0076a41306a29030037030020150d02200241d0086a200241b0056a10b90820022d00d00822204109470d000b0b200241b0056a10f506420521040c020b41ecc9c8004130200241d0086a419ccac80041accac8001040000b200241b0016a412f6a20024190036a412f6a290000370000200241b0016a41286a20024190036a41286a290300370300200241b0016a41206a20024190036a41206a290300370300200241b0016a41186a20024190036a41186a290300370300200241b0016a41106a20024190036a41106a290300370300200241b0016a41086a20024190036a41086a290300370300200241f8006a41086a200241d8026a41086a290300370300200241f8006a41106a200241d8026a41106a290300370300200241f8006a41186a200241d8026a41186a290300370300200241f8006a41206a200241d8026a41206a290300370300200241f8006a41286a200241d8026a41286a290300370300200241f8006a412f6a200241d8026a412f6a29000037000020022002290390033703b001200220022903d802370378200241c0006a412f6a200241a0026a412f6a290000370000200241c0006a41286a200241a0026a41286a290300370300200241c0006a41206a200241a0026a41206a290300370300200241c0006a41186a200241a0026a41186a290300370300200241c0006a41106a200241a0026a41106a290300370300200241c0006a41086a200241a0026a41086a290300370300200241086a412f6a200241e8016a412f6a290000370000200241086a41286a200241e8016a41286a290300370300200241086a41206a200241e8016a41206a290300370300200241086a41186a200241e8016a41186a290300370300200241086a41106a200241e8016a41106a290300370300200241086a41086a200241e8016a41086a290300370300200220022903a002370340200220022903e8013703080b20044205510d0020024190096a20063a0000200241e1086a200241b0016a41086a290300370000200241e9086a200241b0016a41106a290300370000200241f1086a200241b0016a41186a290300370000200241f9086a200241b0016a41206a29030037000020024181096a200241b0016a41286a29030037000020024188096a200241b0016a412f6a290000370000200220053a00d808200220043703d008200220022903b0013700d908200241c8096a20073a000020024199096a200241f8006a41086a290300370000200241a1096a200241f8006a41106a290300370000200241a9096a200241f8006a41186a290300370000200241b1096a200241f8006a41206a290300370000200241b9096a200241f8006a41286a290300370000200241c0096a200241f8006a412f6a290000370000200241d1096a200241c0006a41086a290300370000200241d9096a200241c0006a41106a290300370000200241e1096a200241c0006a41186a290300370000200241e9096a200241c0006a41206a290300370000200241f1096a200241c0006a41286a290300370000200241f8096a200241c0006a412f6a2900003700002002200229037837009109200220022903403700c909200241800a6a20083a0000200241b00a6a200241086a412f6a290000370000200241a90a6a200241086a41286a290300370000200241a10a6a200241086a41206a290300370000200241990a6a200241086a41186a290300370000200241910a6a200241086a41106a290300370000200241890a6a200241086a41086a290300370000200220022903083700810a200241d0086a10a2010b200241f00b6a24000b840501027f230041106b22022400024002400240024002400240024002400240024020012d00000e09010203040506070800010b200041083a00000c080b200041003a00000c070b200041013a0000200041046a200141046a2802003602000c060b410321030240024002400240200141246a2802000e0400010203000b410021030c020b2002200141286a10c408410121030c010b410221030b200041023a0000200041246a2003360200200041286a200229020037020020002001290001370001200041306a200241086a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c050b410321030240024002400240200141046a2802000e0400010203000b410021030c020b2002200141086a10c408410121030c010b410221030b200041033a0000200041046a2003360200200041086a2002290200370200200041186a2001290318370300200041106a200241086a2802003602000c040b410321030240024002400240200141186a2802000e0400010203000b410021030c020b20022001411c6a10c408410121030c010b410221030b200041043a0000200041186a20033602002000411c6a200229020037020020002001290001370001200041246a200241086a280200360200200041096a200141096a290000370000200041116a200141116a2800003600000c030b200041053a0000200020012d00013a00010c020b200041063a0000200041106a200141106a290300370300200041086a200141086a2903003703000c010b2002200141046a10c408200041073a00002000410c6a200241086a280200360200200041046a20022903003702000b200241106a24000b5f01027f0240024020012802082202417f4c0d00200128020021030240024020020d00410121010c010b200210322201450d020b200020023602042000200136020020012003200210c9081a200041086a20023602000f0b103b000b1039000b8d14030c7f027e0d7f230041f01b6b22032400200041f8016a2802002104200041f4016a280200210520002802f0012106200341e8016a200041f00110c9081a0240024002400240024002400240024020052f0186162207410b490d00410521074100210802400240200441054f0d0041042107200421090c010b41052109024002402004417b6a0e020201000b200441796a210941012108410621070c010b41002109410121080b4188161032220a450d03200a200341f0056a41801610c908220b41003b018616200b4100360280162005200741f0016c6a2204280204210c2004280200210d200341d8036a200441086a41e80110c9081a200520074104746a220e41d8146a290300210f200e41d0146a2903002110200b200441f0016a20052f0186162007417f736a220441f0016c10c908220b41d0146a200e41e0146a200441047410c9081a200520073b018616200b20043b018616200b200520081b2204200941f0016c6a220741f0016a200720042f01861620096b41f0016c10ca081a2007200341e8016a41f00110c9081a200420094104746a220741e0146a200741d0146a221120042f01861620096b41047410ca081a200741d8146a200237030020112001370300200420042f01861641016a3b0186162003200341d8036a41e80110c908210e0240024020052802801622040d00410021060c010b41002107200e41d0056a2112200e41d8056a2113200e41e0056a2114200e41e8056a21150340200d2116200c2117200a211820052109200f2101201021022004210520092f0184162108200e41d8036a200e41e80110c9081a20062007470d0602400240024020052f0186162207410b490d00410021194104210b024020084105490d002008210b024002402008417b6a0e020201000b200841796a2108410121194106210b0c010b41002108410121194105210b0b41b8161032220a450d08200641016a210641002104200a200e41f0056a41801610c908220741003b01861620074100360280162007200e2903c0053703881620074190166a200e41c0056a41086a29030037030020074198166a2012290300370300200741a0166a2013290300370300200741a8166a2014290300370300200741b0166a20152903003703002005200b41f0016c6a2209280204210c2009280200210d200e41f0056a200941086a41e80110c9081a200541d0146a221a200b4104746a221b41086a290300210f201b29030021102007200941f0016a20052f018616221b200b417f736a220941f0016c10c908220741d0146a201a200b41016a221c4104746a200941047410c908211d2005200b3b018616200720093b018616200e41e8016a200e41f0056a41e80110c9081a20074188166a2005201c4102746a4188166a201b200b6b41027410c908211b02400340200720044102746a4188166a280200220b20043b018416200b20073602801620042004200949220b6a220420094b0d01200b0d000b0b200e41f0056a200e41e8016a41e80110c9081a200e41e8016a200e41f0056a41e80110c9081a2019450d012008410274201b6a41086a201b200841016a22044102746a220920072f01861620086b41027410ca081a200920183602002007200841f0016c6a220941f0016a200920072f01861620086b41f0016c10ca081a2009201736020420092016360200200941086a200e41d8036a41e80110c9081a201d20044104746a201d20084104746a220920072f01861620086b41047410ca081a2009200137030820092002370300200720072f01861641016a22093b0186162004200941ffff037122094b0d020340200720044102746a4188166a280200220b20043b018416200b200736028016200420042009496a220b20094b0d03200420094f2108200b21042008450d000c030b0b200841027420054188166a22096a41086a2009200841016a22044102746a2209200720086b220b41027410ca081a200920183602002005200841f0016c6a220741f0016a2007200b41f0016c10ca081a2007201736020420072016360200200741086a200e41d8036a41e80110c9081a200541d0146a220720044104746a200720084104746a220720052f01861620086b41047410ca081a2007200137030820072002370300200520052f01861641016a22073b0186162008200741ffff037122074f0d050340200520044102746a4188166a280200220920043b0184162009200536028016200420042007496a220920074b0d06200420074f210b20092104200b450d000c060b0b200841027420054188166a22076a41086a2007200841016a22044102746a220720052f01861620086b41027410ca081a200720183602002005200841f0016c6a220741f0016a200720052f01861620086b41f0016c10ca081a2007201736020420072016360200200741086a200e41d8036a41e80110c9081a201a20044104746a201a20084104746a220720052f01861620086b41047410ca081a2007200137030820072002370300200520052f01861641016a22073b0186162004200741ffff037122074b0d000340200520044102746a4188166a280200220920043b01841620092005360280162004200420074922096a220420074b0d0120090d000b0b200e200e41e8016a41e80110c9081a2006210720052802801622040d000b0b200e41d8036a200e41e80110c9081a200e41e8016a200e41d8036a41e80110c9081a20002802fc012207280200450d0541b81610322204450d032004200e41f0056a41801610c908220441003b01861620044100360280162004200e2903c0053703881620044190166a200e41c8056a29030037030020044198166a200e41d0056a290300370300200441a0166a200e41d8056a290300370300200441a8166a200e41e0056a290300370300200441b0166a200e41e8056a290300370300200420072802002209360288162007200436020020072007280204220b41016a360204200941003b0184162009200436028016200e41f0056a200e41e8016a41e80110c9081a200b2006470d0620042f0186162209410a4b0d072004200941016a220b3b0186162004200941f0016c6a2205200c3602042005200d360200200541086a200e41f0056a41e80110c9081a200420094104746a220941d8146a200f370300200941d0146a20103703002004200b4102746a4188166a200a360200200a200b3b018416200a2004360280162007200728020841016a3602080c020b2005200441f0016c6a220941f0016a2009200720046b41f0016c10ca081a2009200341e8016a41f00110c9081a200520044104746a220741e0146a200741d0146a221120052f01861620046b41047410ca081a200741d8146a200237030020112001370300200520052f01861641016a3b0186160b20002802fc012204200428020841016a3602080b200341f01b6a240020110f0b1039000b41a5d0c800413541dcd0c800103c000b41ecd0c800412b41bcd2c800103c000b419ecec800413041d0cec800103c000b41e0cec80041204180cfc800103c000b5701017e02400240200341c000710d002003450d0120012003413f71ad2204882002410020036b413f71ad86842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080b4c01017f230041206b22052400200542003703182005420037031020052001200220032004200541106a10cf08200529031021012000200529031837030820002001370300200541206a24000b3e01017f230041106b2205240020052001200220032004410010cf08200529030021012000200541086a29030037030820002001370300200541106a24000b3601017f02402002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b7101017f0240024020012000490d002002450d01200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000c020b0b2002450d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000b0b20000b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030b5701017e02400240200341c000710d002003450d012001410020036b413f71ad8820022003413f71ad220486842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080b7501027e200020034220882205200142208822067e200320027e7c200420017e7c200342ffffffff0f832203200142ffffffff0f8322017e2204422088200320067e7c22034220887c200342ffffffff0f83200520017e7c22034220887c37030820002003422086200442ffffffff0f83843703000bd10502037f057e230041306b2206240002400240024002400240024002400240024002402002500d002003500d012004500d02200479a7200279a76b2207413f4b0d0341ff0020076b2108200741016a21070c080b02402004500d0020050d040c060b024002402005450d0020034200510d0620054200370308200520012003823703000c010b20034200510d050b200120038021010c060b2004500d030240024002402001500d0020047b4201510d01200479a7200279a76b2207413e4b0d0241ff0020076b2108200741016a21070c090b02402005450d0020054200370300200520022004823703080b200220048021010c070b02402005450d002005200137030020052004427f7c2002833703080b200220047a8821010c060b2005450d040c020b024020037b4201510d0041bf7f200379a7200279a76b22076b2108200741c1006a21070c060b02402005450d002005420037030820052003427f7c2001833703000b20034201510d06200641206a2001200220037aa710c608200641286a2903002102200629032021010c060b2005450d020b2005200137030020052002370308420021010c020b00000b420021010b420021020c010b200641106a20012002200741ff007110c608200620012002200841ff007110cd08200641086a2903002102200641106a41086a2903002109200629030021012006290310210a0240024020070d004200210b0c010b4200210c03402009420186200a423f8884220b200b427f8520047c2002423f88200a42018684220a427f85220b20037c200b54ad7c423f87220b2004837d200a200b200383220d54ad7d2109200a200d7d210a20024201862001423f888421022001420186200c842101200b420183220b210c2007417f6a22070d000b0b02402005450d002005200a370300200520093703080b20024201862001423f888421022001420186200b8421010b2000200137030020002002370308200641306a24000b0bfbd2080300418080c0000bccd208100010001c0000001d020000050000006c6962726172792f616c6c6f632f7372632f7261775f7665632e7273c00010004b0000005e010000130000002a00000004000000040000002b0000002c0000002d0000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f72002a00000000000000010000000e000000a800100018000000410200001c0000006c6962726172792f616c6c6f632f7372632f666d742e72732f72757374632f323563386335336464393934616362336634663763303266653662623436303736333933663862302f6c6962726172792f636f72652f7372632f666d742f6d6f642e72736c6962726172792f616c6c6f632f7372632f7665632e7273292073686f756c64206265203c206c656e202869732000000064011000140000007801100017000000c5631100010000000b01100018000000fa0300000d000000696e73657274696f6e20696e6465782028697320292073686f756c64206265203c3d206c656e202869732000b8011000120000002301100016000000c5631100010000000b011000180000002a0400000d00000072656d6f76616c20696e64657820286973200000ec011000200000000c021000120000002a00000000000000010000002e000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e6465782069732030303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839390000f802100010000000080310002200000072616e676520656e6420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468205b2e2e2e5d00900310000b000000d60d100016000000cf03100001000000b40d10000e000000c20d100004000000c60d100010000000cf03100001000000900310000b0000009b03100026000000c103100008000000c903100006000000cf031000010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f662060601304100002000000f80310001b0000006104000024000000f80310001b00000057040000110000006c6962726172792f636f72652f7372632f666d742f6d6f642e72732e2e0000004e0410001b0000005400000014000000307800003c04100012000000080310002200000072616e676520737461727420696e646578206c6962726172792f636f72652f7372632f666d742f6e756d2e727300010305050606030706080809110a1c0b190c140d100e0d0f0410031212130916011705180219031a071c021d011f1620032b032c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff0900d2091000250000000a0000001c000000ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f7475962f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab35280b80e003190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a06213f4c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b32d740c80d61a0c0580ff0580df0cee0d03848d033709815c1480b80880cb2a38030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d00d2091000250000001a000000360000000006010103010402080809020a050b020e041001110212051311140115021702190d1c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f802f902fa02fb010c273b3e4e4f8f9e9e9f060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf79cc6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a561c1417094e041e0f430e19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d1339070a362c041080c03c64530c48090a46451b4808531d398107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2f7811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d8080d030d03740c59070c140c0438080a062808224e81540c15030305070919070709030d072980cb250a84066c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e727300080a1000160000001e0a10000d000000736c69636520696e64657820737461727473206174202062757420656e647320617420000003000083042000910560005d13a0001217a01e0c20e01eef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fea0359effe035fd016136010aa136240d6137ab0ee1382f182139301c6146f31ea14af06a614e4f6fa14e9dbc214f65d1e14f00da215000e0e15130e16153ece2a154d0e8e15420002e55f001bf558c0d100028000000520000003e00000000700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b03770f0120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c0109012801030139030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d031d021e02400201070801020b09012d03770222017603040209010603db0202013a010107010101010208060a020130113f0430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c63a01050001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990bb001360f3803310402024503240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002000101030405080802071e0494030037043208010e011605010f000701110207010201050007000400076d07006080f0000000008c0d1000280000004b000000280000008c0d10002800000057000000160000006c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f662060426f72726f774572726f72426f72726f774d75744572726f7270616e69636b6564206174200000003d0e1000010000003e0e100003000000c41a1200000000003c0e1000010000003c0e1000010000003a27272c2020202020000000680e1000200000003000000021000000680e10002000000031000000120000006c6962726172792f636f72652f7372632f666d742f6275696c646572732e7273980e1000200000005a000000050000006c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e7273207b202c20207b0a2a0000000c000000040000002f00000030000000310000002c0a00002a0000000400000004000000320000003300000034000000207d7d28280a2c0a5b000000f80310001b000000f907000016000000f80310001b000000f20700001e000000306200002a00000004000000040000003500000036000000370000000001025965734e6f706179735f6665653d6d61782d77656967687461637475616c5f7765696768743d496e76616c696420726576657273653a2068617368206c656e67746820746f6f2073686f72746672616d655f737570706f72743a3a686173682f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f737570706f72742f7372632f686173682e72730000002a000000000000000100000038000000390000003a0000002a00000001000000010000001a0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f73797374656d2f7372632f6c696d6974732e72734275696c6465722066696e6973686564207769746820606275696c645f6f725f70616e6963603b205468652070616e69632069732065787065637465642069662072756e74696d65207765696768747320617265206e6f7420636f72726563742810100060000000a201000016000000c41a1200000000000000000000000000010000000000000082800000000000008a8000000000008000800080000000808b800000000000000100008000000000818000800000008009800000000000808a00000000000000880000000000000009800080000000000a000080000000008b800080000000008b0000000000008089800000000000800380000000000080028000000000008080000000000000800a800000000000000a0000800000008081800080000000808080000000000080010000800000000008800080000000802a00000000000000010000003b0000003c0000003a0000002a00000000000000010000003b0000003c0000003a00000001a8010001605354524f424576312e302e3200001c12100058000000680000000d0000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6d65726c696e2d322e302e302f7372632f7374726f62652e72734a131000190000006313100016000000000000002000000004000000020000000000000002000000000000000300000001000000200000000400000002000000000000000200000000000000030000001c12100058000000880000000d0000000c1310003e0000001c1210005800000091000000090000001c121000580000005e000000090000001c121000580000005f00000009000000596f75207573656420746865205420666c61672c207768696368207468697320696d706c656d656e746174696f6e20646f65736e277420737570706f7274596f7520747269656420746f20636f6e74696e7565206f702020627574206368616e67656420666c61677320746f200000001c121000580000007c000000150000001c121000580000007d0000000d00000000000000201410000e000000000000003014100001000000000000000000000038141000010000000000000000000000401410000600000000000000c41a120000000000000000000000000048141000010000000000000000000000501410000700000000000000c41a12000000000000000000000000005814100001000000000000004e6577417574686f7269746965730000e51410000d000000af1410003600000050617573656400008814100027000000526573756d65640060141000280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e205c5b617574686f726974795f7365745c5d417574686f726974794c697374000000000000201510000700000000000000281510000300000000000000000000004015100004000000000000004f6666656e63650016281000040000001a2810000e000000d9071200040000006015100055000000b51510005300000008161000460000004e1610001d00000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e206c61737420656c656d656e7420696e64696361746573206f6620746865206f6666656e636520776173206170706c69656420287472756529206f7220717565756564202866616c736529205c5b6b696e642c2074696d65736c6f742c206170706c6965645c5d2e0000000000981610000a0000000000000054bd1000010000000000000000000000a416100002000000000000004e657753657373696f6e0000b4161000590000000d17100022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e7420697320746865205c5b73657373696f6e5f696e6465785c5d2c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e53746f72656452616e676574696d737461703054696d657374616d7020696e686572656e742064617461206973206e6f742070726f76696465642e496e76616c69642074696d657374616d7020696e686572656e74206461746120656e636f64696e672e00a5d11000630000009f000000120000004572726f7200000000000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f000000f4f311004a0000004f000000210000004a1810001e00000068181000190000001418100036000000444d51206973206e6f7420656d7074792c206275742070726f6365737365645f646f776e776172645f6d65737361676573206973203070726f6365737365645f646f776e776172645f6d65737361676573203d202c2062757420646d715f6c656e677468206973206f6e6c79200000008e19100046000000c263110003000000c5631100010000005f1910002f000000c263110003000000c5631100010000002a191000130000003d19100022000000c263110003000000c563110001000000ec1810003e000000c263110003000000c56311000100000074686520756d7020717565756520776f756c642068617665206d6f7265206974656d73207468616e207065726d697474656420627920636f6e6669672028757077617264206d6573736167652069647820206c6172676572207468616e207065726d697474656420627920636f6e66696720286d6f726520757077617264206d65737361676573207468616e207065726d697474656420627920636f6e666967202874686520756d7020717565756520776f756c6420686176652067726f776e207061737420746865206d61782073697a65207065726d697474656420627920636f6e6669672028741a100022000000a81b100031000000c263110003000000c5631100010000007b1b10002d000000c263110003000000c5631100010000003e1b10003d000000c563110001000000c91a10001a000000191b1000230000003c1b100002000000c91a10001a000000e31a100036000000c263110003000000c563110001000000741a100022000000961a100033000000c263110003000000c56311000100000073656e64696e67207468652048524d50206d65737361676520617420696e6465782020776f756c642065786365656420746865206e656f6769746961746564206368616e6e656c20746f74616c2073697a652020287468652048524d50206d65737361676520617420696e64657820206578636565647320746865206e65676f746961746564206368616e6e656c206d6178696d756d206d6573736167652073697a6520282069732073656e7420746f2061206e6f6e206578697374656e74206368616e6e656c202d3e7468652048524d50206d6573736167657320617265206e6f7420736f727465642028666972737420756e736f7274656420697320617420696e646578206d6f72652048524d50206d65737361676573207468616e207065726d697474656420627920636f6e666967202820776f756c642065786365656420746865206e656f6769746961746564206368616e6e656c2063617061636974792020280000002a000000040000000400000035000000360000003d000000766563746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d61783b207165643cd3110070000000780000000e0000006974657261746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d696e3b2071656400003cd31100700000007c0000000e0000002a00000000000000010000003e0000003cd3110070000000890000002c0000002a00000000000000010000003f0000003cd3110070000000950000002b0000006c656e677468206f6620656c65637465645f65646765732069732067726561746572207468616e206f7220657175616c20323b206c6173745f696e64657820696e64657820697320617420746865206d696e696d756d20656c65637465645f65646765732e6c656e2829202d20313b20696e6465782069732077697468696e2072616e67653b2071656400003cd31100700000009f000000340000003cd3110070000000a2000000110000003cd3110070000000ac0000002c0000003cd3110070000000b80000002c0000003cd31100700000006d000000220000003cd31100700000005500000021000000691e100029000000e21d1000660000001402000033000000481e100021000000f0191200020000006672616d655f737570706f72743a3a73746f726167652f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f737570706f72742f7372632f73746f726167652f6d6f642e7273286b65792c2076616c756529206661696c656420746f206465636f6465206174206e6578745f6b65792072657475726e65642061206b65792077697468206e6f2076616c7565206174204e6f726d616c2065787472696e73696373206861766520776569676874206c696d697420636f6e666967757265642062792064656661756c743b20716564e01e100040000000710000000a0000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f6c69622e72732a00000000000000010000003f00000050d211006f0000005e000000270000003cd31100700000008e0000002f000000601f10004400000056000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f646d702e7273446f776e776172644d65737361676551756575657300000000000000d88911000d000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a1200c42010000000000000000000f889110002000000000000000100000000000000a41f1000150000000105000000000000e8c811000600000000000000d42010002b00000000000000000000000000000000000000c41a1200002110000000000000000000102110000100000000000000010000000000000018211000190000000105000000000000e8c811000600000000000000312110000400000000000000000000000000000000000000c41a1200382110000000000000000000482110000700000000000000010000002a0000000000000001000000400000005665633c496e626f756e64446f776e776172644d6573736167653c543a3a426c6f636b4e756d6265723e3e002a000000000000000100000041000000c222100034000000446f776e776172644d65737361676551756575654865616473486173680000002a0000000000000001000000420000008021100049000000c41a120000000000c921100024000000ed2110001e0000000b2210003a00000045221000480000008d221000350000002041206d617070696e6720746861742073746f7265732074686520646f776e77617264206d657373616765207175657565204d5143206865616420666f72206561636820706172612e2045616368206c696e6b20696e207468697320636861696e20686173206120666f726d3a206028707265765f686561642c20422c2048284d2929602c207768657265202d2060707265765f68656164603a206973207468652070726576696f757320686561642068617368206f72207a65726f206966206e6f6e652e202d206042603a206973207468652072656c61792d636861696e20626c6f636b206e756d62657220696e2077686963682061206d6573736167652077617320617070656e6465642e202d206048284d29603a206973207468652068617368206f6620746865206d657373616765206265696e6720617070656e6465642e2054686520646f776e77617264206d657373616765732061646472657373656420666f722061206365727461696e20706172612e00002a00000000000000010000003f00000046251000160000005c2510001500000071251000150000008625100014000000fc2410001e0000001a2510000c0000002625100020000000a824100005000000ad24100013000000c02410003c000000f09f92b820436f6d7061637420736f6c7574696f6e20646964206e6f7420676574207472696d6d65642064756520746f20626c6f636b20776569676874206c696d6974732e0000002a0000000c000000040000001b000000f12310006c000000a40100004f0000005d2410002b000000882410002000000070616c6c65745f7374616b696e673a3a6f6666636861696e5f656c656374696f6e2f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f7374616b696e672f7372632f6f6666636861696e5f656c656374696f6e2e7273f09f92b82070726570617265642061207365712d70687261676d656e20736f6c7574696f6e2077697468202062616c616e63696e6720697465726174696f6e7320616e642073636f726520f09f92b820206e6f6d696e61746f7273206f7574206f66202068616420746f2062652072656d6f7665642066726f6d20636f6d7061637420736f6c7574696f6e2064756520746f2073697a65206c696d6974732ef09f92b82072656d6f766564206120766f74657220617420696e646578202077697468207374616b65202066726f6d20636f6d7061637420746f20726564756365207468652073697a65f09f92b8204d6178696d756d20776569676874203d20202f2f2063757272656e7420776569676874203d20202f2f206d6178696d756d20766f74657273203d20202f2f2063757272656e7420766f746573203d207061726974792f7374616b696e672d656c656374696f6e2f6661696c656420746f20777269746520746f206f6666636861696e2064622e4469676573744974656d206e6f7420657175616c436865636b47656e6573697344656665727265644f6666656e63657300000000000000642710000700000001050000000000006b2710000d00000000000000782710003400000000000000000000000000000000000000c41a1200ac2710000000000000000000bc27100001000000000000000000000000000000f1251000100000000000000000000000c42710001900000000000000000000000000000000000000000000000000000000000000c41a1200e02710000000000000000000f027100002000000000000000100000000000000002810001600000002050500000000001628100004000000000000001a2810000e00000000000000282810001200000000000000c41a12003c28100000000000000000004c28100001000000000000000100000000000000542810001200000001050000000000001628100004000000000000000d9f11000700000000000000000000000000000000000000c41a1200682810000000000000000000782810000600000000000000010000005265706f7274735265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e2a0000000000000001000000430000007b2a1000520000005665633c44656665727265644f6666656e63654f663c543e3e0000002a000000000000000100000044000000112a1000590000006a2a100011000000436f6e63757272656e745265706f727473496e6465784b696e644f706171756554696d65536c6f745665633c5265706f727449644f663c543e3e00002a000000000000000100000045000000c72910004a0000005265706f72747342794b696e64496e64657800002a000000000000000100000046000000a828100044000000c41a120000000000ec2810002f000000c41a1200000000001b291000520000006d2910005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e204465666572726564207265706f72747320746861742068617665206265656e2072656a656374656420627920746865206f6666656e63652068616e646c657220616e64206e65656420746f206265207375626d69747465642061742061206c617465722074696d652e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e696d2d6f6e6c696e653a6f66666c696e626162653a65717569766f636174696f6772616e6470613a65717569766f6361000000102b10005f00000076000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f6f6666656e6365732f7372632f6c69622e72736772616e62616265696d6f6e706172616173676e61756469002a00000000000000010000004700000048000000490000002a00000000000000010000004700000047000000490000000000000041ee110006000000000000004a000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000000004c0000000000000000000000000000004d0000000000000000000000000000004e0000000000000000000000000000000000000047ee110004000000000000004f0000000000000000000000000000000000000000000000000000000000000050000000000000000000000002000000000000000000000000000000000000005100000000000000000000000000000052000000000000000000000001000000000000004bee11000900000000000000530000000000000000000000000000000000000000000000000000000000000054000000000000000000000002000000000000000000000000000000000000005500000000000000000000000000000052000000000000000000000002000000000000005e0b120007000000000000005600000000000000000000000000000000000000000000000000000000000000570000000000000000000000000000005800000000000000000000000000000059000000000000000000000000000000520000000000000000000000030000000000000054ee110008000000000000005a000000000000000000000000000000000000000000000000000000000000005b0000000000000000000000000000005c0000000000000000000000000000005d0000000000000000000000000000005e000000000000000000000004000000000000005cf1110012000000000000005f0000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000006000000000000000000000000000000052000000000000000000000005000000000000005cee11000a000000000000006100000000000000000000000000000000000000000000000000000000000000620000000000000000000000020000000000000000000000000000000000000052000000000000000000000000000000630000000000000000000000060000000000000066ee11000700000000000000640000000000000000000000000000000000000000000000000000000000000065000000000000000000000000000000660000000000000000000000000000006700000000000000000000000000000068000000000000000000000007000000000000006dee110008000000000000006900000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000006a00000000000000000000000000000052000000000000000000000000000000520000000000000000000000080000000000000075ee11000a00000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000005200000000000000000000000000000052000000000000000000000009000000000000007fee110007000000000000006b000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000000006d000000000000000000000000000000520000000000000000000000000000006e00000000000000000000000a0000000000000086ee110007000000000000006f000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000071000000000000000000000000000000520000000000000000000000000000007200000000000000000000000b000000000000008dee1100080000000000000073000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000075000000000000000000000000000000520000000000000000000000000000007600000000000000000000000c0000000000000095ee1100120000000200000000000000000000000000000000000000000000000000000000000000000000005200000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000005200000000000000000000000d00000000000000a7ee1100100000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000005200000000000000000000000e00000000000000b7ee1100170000000000000077000000000000000000000000000000000000000000000000000000000000007800000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000007900000000000000000000000f00000000000000ceee110009000000000000007a00000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000007b000000000000000000000000000000520000000000000000000000000000007c00000000000000000000001000000000000000d7ee110011000000000000007d000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000007f00000000000000000000001100000000000000e8ee1100090000000000000080000000000000000000000000000000000000000000000000000000000000005200000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000005200000000000000000000001200000000000000f1ee1100050000000000000081000000000000000000000000000000000000000000000000000000000000005200000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000005200000000000000000000001300000000000000f6ee11000b000000000000008200000000000000000000000000000000000000000000000000000000000000520000000000000000000000020000000000000000000000000000000000000052000000000000000000000000000000520000000000000000000000140000000000000001ef110003000000000000008300000000000000000000000000000000000000000000000000000000000000520000000000000000000000020000000000000000000000000000000000000052000000000000000000000000000000520000000000000000000000150000000000000004ef110003000000000000008400000000000000000000000000000000000000000000000000000000000000520000000000000000000000020000000000000000000000000000000000000052000000000000000000000000000000520000000000000000000000160000000000000007ef11000400000000000000850000000000000000000000000000000000000000000000000000000000000086000000000000000000000002000000000000000000000000000000000000005200000000000000000000000000000087000000000000000000000017000000000000000bef11000b000000000000008800000000000000000000000000000000000000000000000000000000000000520000000000000000000000020000000000000000000000000000000000000052000000000000000000000000000000520000000000000000000000180000000000000016ef1100090000000000000089000000000000000000000000000000000000000000000000000000000000008a00000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000008b000000000000000000000019000000000000001fef1100100000000200000000000000000000000000000000000000000000000000000000000000000000008c00000000000000000000000200000000000000000000000000000000000000520000000000000000000000000000008d00000000000000000000001a000000000000002fef110004000000000000008e000000000000000000000000000000000000000000000000000000000000008f00000000000000000000000000000090000000000000000000000000000000520000000000000000000000000000009100000000000000000000001b000000506172656e7420686173682073686f756c642062652076616c69642e20391000600000001e010000090000005472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642e2039100060000000270100000900000020391000600000006d0100003b000000803910003200000020391000600000009601000009000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e0020391000600000009e0100000d00000053746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642e2039100060000000a4010000090000005369676e617475726520766572696669636174696f6e206661696c65642e000020391000600000003c010000110000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f6578656375746976652f7372632f6c69622e72734e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e0000c43910005d000000740100001b0000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e312f7372632f7472696564626d75742e7273000000c43910005d000000670100000d000000496e73657274696f6e206e657665722064656c657465732ec43910005d000000640200000d000000617373657274696f6e206661696c65643a20216578697374696e675f6b65792e69735f656d70747928290000c43910005d0000008003000015000000a83a100046000000fa000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f70617261732e727350617374436f64655072756e696e6750617374436f646550617374436f64654d657461467574757265436f646555706772616465730000000000443f10000a000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a1200503f10000000000000000000603f100001000000000000000100000000000000683f10000b0000000105000000000000e8c8110006000000000000007f2512000200000000000000000000000000000000000000c41a1200743f10000000000000000000843f1000010000000000000000000000000000008c3f1000050000000105000000000000e8c81100060000000000000088cf11000800000000000000000000000000000000000000c41a1200943f10000000000000000000a43f100001000000000000000000000000000000ac3f10000b0000000105000000000000e8c811000600000000000000154211000e00000000000000000000000000000000000000c41a1200b83f10000000000000000000c83f100001000000000000000000000000000000fd3a1000080000000105000000000000d03f10001800000000000000154211000e00000000000000000000000000000000000000c41a1200e83f10000000000000000000f83f100001000000000000000000000000000000053b10000c0000000105000000000000e8c811000600000000000000004010002000000000000000000000000000000000000000c41a12002040100000000000000000003040100003000000000000000100000000000000ee3a10000f0000000000000000000000484010001d00000000000000000000000000000000000000000000000000000000000000c41a12006840100000000000000000007840100006000000000000000100000000000000113b1000120000000105000000000000e8c811000600000000000000d5f711000e00000000000000000000000000000000000000c41a1200a84010000000000000000000b840100003000000000000000000000000000000d04010000a0000000105000000000000e8c811000600000000000000154211000e00000000000000000000000000000000000000c41a1200dc4010000000000000000000ec40100001000000000000000000000000000000f44010000d000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a1200044110000000000000000000144110000200000000000000010000000000000024411000140000000105000000000000e8c811000600000000000000c12d11000f00000000000000000000000000000000000000c41a12003841100000000000000000004841100001000000000000000000000000000000d88911000d000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a12005041100000000000000000006041100001000000000000000100000050617261636861696e7300002a000000000000000100000040000000c34610004b0000005061726174687265616473002a000000000000000100000092000000b24610001100000048656164730000002a0000000000000001000000930000008a4610002800000043757272656e74436f6465002a0000000000000001000000930000006246100028000000285061726149642c20543a3a426c6f636b4e756d626572292a000000000000000100000093000000fe451000640000005061726150617374436f64654d6574613c543a3a426c6f636b4e756d6265723e2a0000000000000001000000940000002d451000520000007f45100052000000d14510002d0000005665633c285061726149642c20543a3a426c6f636b4e756d626572293e0000002a0000000000000001000000450000001f431000680000008743100060000000e74310003b00000022441000640000008644100052000000d8441000550000002a000000000000000100000093000000364210004a0000008042100059000000d942100046000000467574757265436f646500002a00000000000000010000009300000014421000220000005570636f6d696e6750617261730000002a0000000000000001000000400000009041100061000000f1411000230000005570636f6d696e67506172617347656e657369732a00000000000000010000009300000068411000280000002a000000000000000100000040000000409011003b000000205570636f6d696e6720706172617320696e7374616e74696174696f6e20617267756d656e74732e205570636f6d696e672070617261732028636861696e7320616e642074687265616473292e20546865736520617265206f6e6c792075706461746564206f6e2073657373696f6e206368616e67652e20436f72726573706f6e647320746f20616e20656e74727920696e20746865207570636f6d696e672d67656e65736973206d61702e205468652061637475616c2066757475726520636f6465206f66206120706172612e2054686520626c6f636b206e756d6265722061742077686963682074686520706c616e6e656420636f6465206368616e676520697320657870656374656420666f72206120706172612e20546865206368616e67652077696c6c206265206170706c696564206166746572207468652066697273742070617261626c6f636b20666f72207468697320494420696e636c7564656420776869636820657865637574657320696e2074686520636f6e74657874206f6620612072656c617920636861696e20626c6f636b20776974682061206e756d626572203e3d206065787065637465645f6174602e2057686963682070617261732068617665207061737420636f64652074686174206e65656473207072756e696e6720616e64207468652072656c61792d636861696e20626c6f636b2061742077686963682074686520636f646520776173207265706c616365642e204e6f746520746861742074686973206973207468652061637475616c20686569676874206f662074686520696e636c7564656420626c6f636b2c206e6f7420746865206578706563746564206865696768742061742077686963682074686520636f6465207570677261646520776f756c64206265206170706c6965642c20616c74686f7567682074686579206d617920626520657175616c2e205468697320697320746f20656e737572652074686520656e7469726520616363657074616e636520706572696f6420697320636f76657265642c206e6f7420616e206f666673657420616363657074616e636520706572696f64207374617274696e672066726f6d207468652074696d65206174207768696368207468652070617261636861696e20706572636569766573206120636f6465207570677261646520617320686176696e67206f636375727265642e204d756c7469706c6520656e747269657320666f7220612073696e676c65207061726120617265207065726d69747465642e204f72646572656420617363656e64696e6720627920626c6f636b206e756d6265722e205061737420636f6465206f662070617261636861696e732e205468652070617261636861696e73207468656d73656c766573206d6179206e6f74206265207265676973746572656420616e796d6f72652c2062757420776520616c736f206b65657020746865697220636f6465206f6e2d636861696e20666f72207468652073616d6520616d6f756e74206f662074696d65206173206f7574646174656420636f646520746f206b65657020697420617661696c61626c6520666f72207365636f6e6461727920636865636b6572732e2041637475616c207061737420636f64652c20696e646963617465642062792074686520706172612069642061732077656c6c2061732074686520626c6f636b206e756d62657220617420776869636820697420626563616d65206f757464617465642e205468652076616c69646174696f6e20636f6465206f66206576657279206c69766520706172612e2054686520686561642d64617461206f66206576657279207265676973746572656420706172612e20416c6c2070617261746872656164732e20416c6c2070617261636861696e732e204f72646572656420617363656e64696e67206279205061726149642e20506172617468726561647320617265206e6f7420696e636c756465642e0000a83a1000460000009f00000025000000457261456c656374696f6e5374617475734e6f6d696e61746f727300ffff0000ffffffff434810001c0000005f4810000400000063481000020000005f481000040000006548100002000000536e617073686f7456616c696461746f7273536e617073686f744e6f6d696e61746f7273134810001d0000003048100013000000f0471000220000001248100001000000f09f92b820457374696d6174696e67206e6578742073657373696f6e206368616e6765206661696c65642e7374616b696e6770616c6c65745f7374616b696e67f09f92b8204661696c656420746f2063726561746520736e617073686f74206174202ef09f92b820456c656374696f6e2077696e646f77206973204f70656e28292e20536e617073686f742063726561746564f09f92b820536e617073686f742073697a6520746f6f20626967205b203c3e205d5b5d2e00dc4810003e0000001a49100001000000b448100028000000f09f92b8204578656375746564206f6666636861696e20776f726b65722074687265616420776974686f7574206572726f72732ef09f92b8204572726f7220696e20656c656374696f6e206f6666636861696e20776f726b65723a20f09f92b820736b697070696e67206f6666636861696e20776f726b657220696e206f70656e20656c656374696f6e2077696e646f772064756520746f205b5d45726173526577617264506f696e74734e6f6d696e61746f72536c617368496e45726156616c696461746f72536c617368496e457261536c617368696e675370616e735370616e536c617368496e636f7272656374486973746f7279446570746843616c6c4e6f74416c6c6f7765644f6666636861696e456c656374696f6e426f677573456c656374696f6e53697a654f6666636861696e456c656374696f6e426f67757353636f72654f6666636861696e456c656374696f6e426f677573456467654f6666636861696e456c656374696f6e426f67757353656c66566f74654f6666636861696e456c656374696f6e536c61736865644e6f6d696e6174696f6e4f6666636861696e456c656374696f6e426f6775734e6f6d696e6174696f6e4f6666636861696e456c656374696f6e426f6775734e6f6d696e61746f724f6666636861696e456c656374696f6e426f677573436f6d706163744f6666636861696e456c656374696f6e426f67757357696e6e65724f6666636861696e456c656374696f6e426f67757357696e6e6572436f756e74536e617073686f74556e617661696c61626c654f6666636861696e456c656374696f6e5765616b5375626d697373696f6e4f6666636861696e456c656374696f6e4561726c795375626d697373696f6e416c7265616479436c61696d65644e6f74536f72746564416e64556e69717565496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c6572496e636f7272656374536c617368696e675370616e7300002a0000001000000008000000950000009500000096000000674c100023000000244c1000430000001248100001000000f09f92b820436861696e20646f6573206e6f74206861766520656e6f756768207374616b696e672063616e6469646174657320746f206f7065726174652e204572612043616c6c20746f207365712d70687261676d656e206661696c65642064756520746f204c6564676572426f6e646564457261735374616b65727300000000000000c45010000400000000000000c850100003000000000000000000000010511000160000000000000000000000c05110000a00000000000000cc511000010000000000000000000000e45110001500000000000000000000008c521000060000000000000094521000010000000000000000000000ac521000200000000000000000000000ac5310001100000000000000c0531000010000000000000000000000d85310001f0000000000000000000000d05410000800000000000000d8541000010000000000000000000000f05410001100000000000000000000007855100008000000000000008055100001000000000000000000000098551000130000000000000000000000305610000500000000000000c41a120000000000000000000000000038561000110000000000000000000000c05610000900000000000000cc561000010000000000000000000000e4561000100000000000000000000000645710000e00000000000000745710000100000000000000000000008c5710001000000000000000000000000c5810001300000000000000205810000100000000000000000000003858100008000000000000000000000078581000180000000000000090581000010000000000000000000000a8581000070000000000000000000000e05810001500000000000000f858100001000000000000000000000010591000070000000000000000000000485910000d00000000000000c41a120000000000000000000000000058591000090000000000000000000000a05910000d00000000000000c41a1200000000000000000000000000b05910000a0000000000000000000000005a10001100000000000000145a10000100000000000000000000002c5a10000800000000000000000000006c5a10000d000000000000007c5a1000020000000000000000000000ac5a10000a0000000000000000000000fc5a10001400000000000000c41a1200000000000000000000000000105b1000080000000000000000000000505b10001500000000000000685b1000020000000000000000000000985b10000d0000000000000000000000005c10000e00000000000000105c1000020000000000000000000000405c10001c0000000000000000000000205d1000060000000000000094521000010000000000000000000000285d10000e0000000000000000000000985d10001100000000000000ac5d1000020000000000000000000000dc5d1000150000000000000000000000845e10000a000000000000007c5a1000020000000000000000000000905e10000f0000000000000000000000085f10001800000000000000205f1000050000000000000000000000985f1000310000000000000000000000206110002100000000000000205f1000050000000000000000000000446110000900000000000000626f6e6400000000c07d10000a0000000000000011db1100230000000000000038db11000500000000000000948a100015000000000000007d7e10000500000000000000827e10001f000000fe8c100059000000578d100021000000c41a120000000000788d10004c000000c41a120000000000c48d100049000000c41a120000000000658c100010000000c41a120000000000ac0412000b0000000d8e100035000000d122110008000000428e10001a000000c41a1200000000005c8e100054000000b08e100050000000008f100013000000d47b10000d000000476c10000b000000138f10004c0000005f8f1000380000004b0512000c000000626f6e645f6578747261000000000000f08c10000e00000000000000948a100015000000a98a100059000000028b10000d000000c41a1200000000000f8b100054000000638b100059000000bc8b100013000000c41a120000000000cf8b100058000000278c10003e000000c41a120000000000658c100010000000c41a120000000000ac0412000b000000a87c10003a000000d1221100080000000a8a100010000000758c10000d000000476c10000b000000828c100045000000c78c1000290000004b0512000c000000756e626f6e6400000000000038db11000500000000000000948a10001500000025861000550000007a86100040000000ba86100049000000c41a12000000000003871000520000005587100030000000c41a120000000000858710004f000000d48710004f000000238810003f000000c41a120000000000f87d100055000000d37e100043000000c41a1200000000006288100012000000c41a1200000000007488100026000000c41a120000000000ac0412000b0000009a88100050000000e27c100026000000ea88100059000000438910005c0000009f89100054000000f3891000170000000a8a1000100000003a7d10000b000000d47b10000d000000476c10000b0000001a8a100047000000618a1000290000008a8a10000a00000077697468647261775f756e626f6e64656400000000000000ce7910001200000000000000839a110003000000118210004b000000c41a1200000000005c8210004d000000a982100013000000c41a120000000000f87d100055000000d37e100043000000c41a120000000000bc82100013000000c41a120000000000cf8210001b000000c41a120000000000ac0412000b000000ea821000550000003f83100051000000908310003d000000cd8310005e000000087d100032000000b9711000100000002b841000420000006d841000080000007584100049000000be8410002a000000e884100006000000ee841000510000003f851000230000006285100054000000b68510002c000000f16c10001d000000e2851000430000004b0512000c00000076616c696461746500000000fe8110000500000000000000038210000e000000808110003a000000c41a1200000000001c7c100037000000c41a120000000000f87d100055000000d37e100043000000c41a120000000000ac0412000b000000a87c10003a000000e27c100026000000087d100032000000597410000c000000d47b10000d000000476c10000b000000ba81100024000000de811000200000004b0512000c0000006e6f6d696e617465000000005181100007000000000000005881100028000000767f100044000000c41a120000000000ba7f100054000000ff70100023000000c41a120000000000f87d100055000000d37e100043000000c41a120000000000ac0412000b0000000e8010004c0000005a801000400000009a801000360000004d7e10000a000000d08010000d000000dd80100021000000476c10000b000000fe8010003200000030811000210000004b0512000c0000006368696c6c000000a17e100032000000c41a1200000000001c7c100037000000c41a120000000000f87d100055000000d37e100043000000c41a120000000000ac0412000b000000a87c10003a000000167f100015000000087d1000320000002b7f100009000000d47b10000d000000476c10000b000000347f100022000000567f1000200000004b0512000c0000007365745f7061796565000000000000007d7e10000500000000000000827e10001f000000ca7d10002e000000c41a1200000000001c7c100037000000c41a120000000000f87d100055000000c41a120000000000ac0412000b000000a87c10003a000000e27c100026000000087d1000320000004d7e10000a000000807810000f000000310712000d000000577e1000130000006a7e1000130000004b0512000c0000007365745f636f6e74726f6c6c6572000000000000c07d10000a0000000000000011db110023000000f87b100024000000c41a1200000000001c7c100037000000c41a120000000000537c100055000000c41a120000000000ac0412000b000000a87c10003a000000e27c100026000000087d1000320000003a7d10000b000000d47b10000d000000476c10000b000000457d10003d000000827d10003e0000004b0512000c0000007365745f76616c696461746f725f636f756e740000000000bb0712000300000000000000667010000c000000af7b100025000000c41a1200000000005e78100022000000c41a120000000000ac0412000b000000d47b10000d000000e17b1000170000004b0512000c000000696e6372656173655f76616c696461746f725f636f756e7400000000a57b10000a00000000000000667010000c0000007a7b10002b000000c41a1200000000005e78100022000000c41a120000000000ac0412000b0000004c7b1000210000004b0512000c0000007363616c655f76616c696461746f725f636f756e74000000000000006d7b10000600000000000000737b100007000000177b100035000000c41a1200000000005e78100022000000c41a120000000000ac0412000b0000004c7b1000210000004b0512000c000000666f7263655f6e6f5f65726173000000eb7a10002c000000c41a1200000000005e78100022000000c41a120000000000ac0412000b000000ca7a100010000000807810000f0000008f781000120000004b0512000c000000666f7263655f6e65775f6572610000004f7a100053000000a27a100028000000c41a1200000000005e78100022000000c41a120000000000ac0412000b000000ca7a100010000000807810000f000000da7a1000110000004b0512000c0000007365745f696e76756c6e657261626c657300000000000000317a10000d000000000000003e7a100011000000e079100033000000c41a1200000000005e78100022000000c41a120000000000ac0412000b000000137a1000070000001a7a1000170000004b0512000c000000666f7263655f756e7374616b6500000000000000c97910000500000000000000be0712000c00000000000000ce7910001200000000000000839a110003000000a178100043000000c41a1200000000005e78100022000000c41a120000000000ac0412000b000000e47810003b0000001f7910002e0000004d79100061000000ae7910001b0000004b0512000c000000666f7263655f6e65775f6572615f616c776179731d78100041000000c41a1200000000005e78100022000000c41a120000000000ac0412000b000000807810000f0000008f781000120000004b0512000c00000063616e63656c5f64656665727265645f736c61736800000000000000a96a10000300000000000000ac6a10000800000000000000107810000d000000000000005eda100008000000cf76100026000000c41a120000000000f57610002d000000c41a1200000000002277100041000000c41a120000000000ac0412000b0000006377100015000000787710002e000000a677100035000000db7710001a000000f57710001b0000004b0512000c0000007061796f75745f7374616b657273000000000000c07610000f00000000000000be0712000c00000000000000a96a10000300000000000000ac6a1000080000003772100044000000c41a1200000000007b72100053000000ce7210004a000000187310004d000000c41a1200000000006573100056000000bb7310001e000000c41a120000000000d973100040000000c41a120000000000ac0412000b0000001974100040000000d2dc110031000000597410000c0000006574100047000000ac74100008000000b474100022000000d674100031000000476c10000b000000077510004a000000517510004b0000009c75100044000000e075100036000000c41a12000000000016761000540000006a761000560000004b0512000c0000007265626f6e6400007270100038000000c41a120000000000aa70100055000000ff70100023000000c41a120000000000ac0412000b000000227110003500000057711000250000007c7110003d000000b971100010000000310712000d000000c971100040000000097210002e0000004b0512000c0000007365745f686973746f72795f646570746800000000000000327010001100000000000000437010001100000000000000547010001200000000000000667010000c0000000e6d10004c0000005a6d100020000000c41a1200000000007a6d10000c000000866d100044000000ca6d1000520000001c6e1000510000006d6e100051000000be6e100028000000c41a120000000000e66e100015000000c41a120000000000ac0412000b000000fb6e100038000000336f10000f000000310712000d000000426f1000280000006a6f10001c000000866f10004c000000d26f1000600000004b0512000c000000726561705f73746173680000c46a10004e000000126b1000580000006a6b100030000000c41a1200000000009a6b100024000000c41a120000000000be6b100040000000c41a120000000000ac0412000b000000fe6b100049000000476c10000b000000526c100036000000886c100069000000f16c10001d0000004b0512000c0000007375626d69745f656c656374696f6e5f736f6c7574696f6e00000000646a100007000000000000006b6a100013000000000000007e6a10000700000000000000856a10001200000000000000976a100005000000000000009c6a10000d00000000000000a96a10000300000000000000ac6a10000800000000000000b46a10000400000000000000b86a10000c000000a762100039000000c41a120000000000e06210000d000000ed62100045000000c41a1200000000003263100021000000c41a120000000000536310002b000000c41a1200000000007e6310003d000000bb631000540000000f6410000c000000c41a1200000000001b64100048000000c41a120000000000636410002a000000c41a1200000000008d64100032000000c41a120000000000bf641000530000001265100047000000596510004c000000a565100054000000f9651000580000005166100026000000c41a1200000000007766100018000000c41a1200000000008f66100039000000c86610003e000000066710002b00000031671000550000008667100057000000dd67100010000000ed67100043000000306810001b000000c41a1200000000004b68100030000000c41a1200000000007b68100059000000d4681000590000002d691000500000007d69100027000000c41a120000000000ac0412000b000000a469100046000000ea69100029000000136a1000510000004b0512000c0000007375626d69745f656c656374696f6e5f736f6c7574696f6e5f756e7369676e65640000008c61100030000000c41a120000000000bc6110005700000013621000580000006b6210001a000000c41a120000000000ac0412000b00000085621000220000004b0512000c00000020556e7369676e65642076657273696f6e206f6620607375626d69745f656c656374696f6e5f736f6c7574696f6e602e204e6f746520746861742074686973206d757374207061737320746865205b6056616c6964617465556e7369676e6564605d20636865636b207768696368206f6e6c7920616c6c6f7773207472616e73616374696f6e732066726f6d20746865206c6f63616c206e6f646520746f20626520696e636c756465642e20496e206f7468657220776f7264732c206f6e6c792074686520626c6f636b20617574686f722063616e20696e636c7564652061207472616e73616374696f6e20696e2074686520626c6f636b2e20536565205b607375626d69745f656c656374696f6e5f736f6c7574696f6e605d2e205375626d697420616e20656c656374696f6e20726573756c7420746f2074686520636861696e2e2049662074686520736f6c7574696f6e3a20312e2069732076616c69642e20322e206861732061206265747465722073636f7265207468616e206120706f74656e7469616c6c79206578697374696e6720736f6c7574696f6e206f6e20636861696e2e207468656e2c2069742077696c6c206265205f7075745f206f6e20636861696e2e204120736f6c7574696f6e20636f6e7369737473206f662074776f20706965636573206f6620646174613a20312e206077696e6e657273603a206120666c617420766563746f72206f6620616c6c207468652077696e6e657273206f662074686520726f756e642e20322e206061737369676e6d656e7473603a2074686520636f6d706163742076657273696f6e206f6620616e2061737369676e6d656e7420766563746f72207468617420656e636f64657320746865206564676520202020776569676874732e20426f7468206f66207768696368206d617920626520636f6d7075746564207573696e67205f70687261676d656e5f2c206f7220616e79206f7468657220616c676f726974686d2e204164646974696f6e616c6c792c20746865207375626d6974746572206d7573742070726f766964653a202d20546865206073636f7265602074686174207468657920636c61696d20746865697220736f6c7574696f6e206861732e20426f74682076616c696461746f727320616e64206e6f6d696e61746f72732077696c6c20626520726570726573656e74656420627920696e646963657320696e2074686520736f6c7574696f6e2e2054686520696e64696365732073686f756c6420726573706563742074686520636f72726573706f6e64696e6720747970657320285b6056616c696461746f72496e646578605d20616e64205b604e6f6d696e61746f72496e646578605d292e204d6f72656f7665722c20746865792073686f756c642062652076616c6964207768656e207573656420746f20696e64657820696e746f205b60536e617073686f7456616c696461746f7273605d20616e64205b60536e617073686f744e6f6d696e61746f7273605d2e20416e7920696e76616c696420696e6465782077696c6c2063617573652074686520736f6c7574696f6e20746f2062652072656a65637465642e2054686573652074776f2073746f72616765206974656d73206172652073657420647572696e672074686520656c656374696f6e2077696e646f7720616e64206d6179206265207573656420746f2064657465726d696e652074686520696e64696365732e204120736f6c7574696f6e2069732076616c69642069663a20302e204974206973207375626d6974746564207768656e205b60457261456c656374696f6e537461747573605d20697320604f70656e602e20312e2049747320636c61696d65642073636f726520697320657175616c20746f207468652073636f726520636f6d7075746564206f6e2d636861696e2e20322e2050726573656e74732074686520636f7272656374206e756d626572206f662077696e6e6572732e20332e20416c6c20696e6465786573206d7573742062652076616c7565206163636f7264696e6720746f2074686520736e617073686f7420766563746f72732e20416c6c20656467652076616c756573206d75737420202020616c736f20626520636f727265637420616e642073686f756c64206e6f74206f766572666c6f7720746865206772616e756c6172697479206f662074686520726174696f20747970652028692e652e20323536202020206f722062696c6c696f6e292e20342e20466f72206561636820656467652c20616c6c2074617267657473206172652061637475616c6c79206e6f6d696e617465642062792074686520766f7465722e20352e2048617320636f72726563742073656c662d766f7465732e204120736f6c7574696f6e732073636f726520697320636f6e736973746564206f66203320706172616d65746572733a20312e20606d696e207b20737570706f72742e746f74616c207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265206d6178696d697a65642e20322e206073756d207b20737570706f72742e746f74616c207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265206d696e696d697a65642e20332e206073756d207b20737570706f72742e746f74616c5e32207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265202020206d696e696d697a65642028746f20656e73757265206c6573732076617269616e63652920546865207472616e73616374696f6e20697320617373756d656420746f20626520746865206c6f6e6765737420706174682c20612062657474657220736f6c7574696f6e2e2020202d20496e697469616c20736f6c7574696f6e20697320616c6d6f7374207468652073616d652e2020202d20576f72736520736f6c7574696f6e20697320726574726163656420696e207072652d64697370617463682d636865636b73207768696368207365747320697473206f776e207765696768742e77696e6e6572735665633c56616c696461746f72496e6465783e636f6d70616374436f6d7061637441737369676e6d656e747373636f7265456c656374696f6e53636f7265657261457261496e64657873697a65456c656374696f6e53697a652052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e6365206973207a65726f2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c6566742e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e20436f6d706c65786974793a204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e73206f6e20746865206163636f756e742e204442205765696768743a202d2052656164733a205374617368204163636f756e742c20426f6e6465642c20536c617368696e67205370616e732c204c6f636b73202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c205374617368204163636f756e742c204c6f636b73202d2057726974657320456163683a205370616e536c617368202a2053205365742060486973746f72794465707468602076616c75652e20546869732066756e6374696f6e2077696c6c2064656c65746520616e7920686973746f727920696e666f726d6174696f6e207768656e2060486973746f727944657074686020697320726564756365642e20506172616d65746572733a202d20606e65775f686973746f72795f6465707468603a20546865206e657720686973746f727920646570746820796f7520776f756c64206c696b6520746f207365742e202d20606572615f6974656d735f64656c65746564603a20546865206e756d626572206f66206974656d7320746861742077696c6c2062652064656c6574656420627920746869732064697370617463682e20202020546869732073686f756c64207265706f727420616c6c207468652073746f72616765206974656d7320746861742077696c6c2062652064656c6574656420627920636c656172696e67206f6c642020202065726120686973746f72792e204e656564656420746f207265706f727420616e2061636375726174652077656967687420666f72207468652064697370617463682e20547275737465642062792020202060526f6f746020746f207265706f727420616e206163637572617465206e756d6265722e204f726967696e206d75737420626520726f6f742e202d20453a204e756d626572206f6620686973746f7279206465707468732072656d6f7665642c20692e652e203130202d3e2037203d2033202d205765696768743a204f28452920202020202d2052656164733a2043757272656e74204572612c20486973746f727920446570746820202020202d205772697465733a20486973746f727920446570746820202020202d20436c6561722050726566697820456163683a20457261205374616b6572732c204572615374616b657273436c69707065642c204572617356616c696461746f72507265667320202020202d2057726974657320456163683a204572617356616c696461746f725265776172642c2045726173526577617264506f696e74732c2045726173546f74616c5374616b652c2045726173537461727453657373696f6e496e6465786e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e5f6572615f6974656d735f64656c65746564436f6d706163743c7533323e205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e20546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722c20616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73202d20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c204c6f636b732c205b4f726967696e204163636f756e745d20202020202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c656467657220506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e202d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f20202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e202d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e20546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966206974206973206e6f74206f6e65206f6620746865207374616b6572732e20546869732063616e206f6e6c792062652063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e202d2d2d2d2d2d2d2d2d2d2d204e20697320746865204e756d626572206f66207061796f75747320666f72207468652076616c696461746f722028696e636c7564696e67207468652076616c696461746f7229205765696768743a202d205265776172642044657374696e6174696f6e205374616b65643a204f284e29202d205265776172642044657374696e6174696f6e20436f6e74726f6c6c657220284372656174696e67293a204f284e29202d20526561643a20457261456c656374696f6e5374617475732c2043757272656e744572612c20486973746f727944657074682c204572617356616c696461746f725265776172642c202020202020202020457261735374616b657273436c69707065642c2045726173526577617264506f696e74732c204572617356616c696461746f725072656673202838206974656d7329202d205265616420456163683a20426f6e6465642c204c65646765722c2050617965652c204c6f636b732c2053797374656d204163636f756e74202835206974656d7329202d20577269746520456163683a2053797374656d204163636f756e742c204c6f636b732c204c6564676572202833206974656d73292020204e4f54453a20776569676874732061726520617373756d696e672074686174207061796f75747320617265206d61646520746f20616c697665207374617368206163636f756e7420285374616b6564292e202020506179696e67206576656e2061206465616420636f6e74726f6c6c65722069732063686561706572207765696768742d776973652e20576520646f6e277420646f20616e7920726566756e647320686572652e76616c696461746f725f73746173682043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279207468652060543a3a536c61736843616e63656c4f726967696e602e20506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e20436f6d706c65786974793a204f2855202b2053292077697468205520756e6170706c69656420736c6173686573207765696768746564207769746820553d3130303020616e64205320697320746865206e756d626572206f6620736c61736820696e646963657320746f2062652063616e63656c65642e202d20526561643a20556e6170706c69656420536c6173686573202d2057726974653a20556e6170706c69656420536c6173686573736c6173685f696e646963657320466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e20546865206469737061746368206f726967696e206d75737420626520526f6f742e202d205765696768743a204f283129202d2057726974653a20466f72636545726120466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2062652072656d6f7665642052656164733a20426f6e6465642c20536c617368696e67205370616e732c204163636f756e742c204c6f636b73205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c204163636f756e742c204c6f636b732057726974657320456163683a205370616e536c617368202a205373746173686e756d5f736c617368696e675f7370616e7320536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e202d204f285629202d2057726974653a20496e76756c6e657261626c6573696e76756c6e657261626c65735665633c543a3a4163636f756e7449643e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e202d20577269746520466f72636545726120466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e205363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f722e2053616d65206173205b607365745f76616c696461746f725f636f756e74605d2e666163746f7250657263656e7420496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f72732e6164646974696f6e616c20536574732074686520696465616c206e756d626572206f662076616c696461746f72732e205765696768743a204f2831292057726974653a2056616c696461746f7220436f756e74202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e202d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572202d2057726974653a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572636f6e74726f6c6c6572202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e202d2d2d2d2d2d2d2d2d20202020202d20526561643a204c656467657220202020202d2057726974653a205061796565706179656552657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d20436f6e7461696e73206f6e6520726561642e202d2d2d2d2d2d2d2d202d20526561643a20457261456c656374696f6e5374617475732c204c6564676572202d2057726974653a2056616c696461746f72732c204e6f6d696e61746f7273204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546869732063616e206f6e6c792062652063616c6c6564207768656e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e292077686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d495420284d41585f4e4f4d494e4154494f4e53292e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e205765696768743a204f284e29207768657265204e20697320746865206e756d626572206f662074617267657473202d2052656164733a2045726120456c656374696f6e205374617475732c204c65646765722c2043757272656e7420457261202d205772697465733a2056616c696461746f72732c204e6f6d696e61746f7273746172676574735665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e202d20526561643a2045726120456c656374696f6e205374617475732c204c6564676572202d2057726974653a204e6f6d696e61746f72732c2056616c696461746f7273707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e20456d697473206057697468647261776e602e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e20436f6d706c6578697479204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f7665205570646174653a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c204c6f636b732c205b4f726967696e204163636f756e745d202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c6564676572204b696c6c3a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c20426f6e6465642c20536c617368696e67205370616e732c205b4f726967696e2020204163636f756e745d2c204c6f636b732c2042616c616e63654f66207374617368202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c2020205b4f726967696e204163636f756e745d2c204c6f636b732c2042616c616e63654f662073746173682e204e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e20456d6974732060556e626f6e646564602e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e202d204f6e6520444220656e7472792e202d20526561643a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e744572612c204c6f636b732c2042616c616e63654f662053746173682c202d2057726974653a204c6f636b732c204c65646765722c2042616c616e63654f662053746173682c203c2f7765696768743e436f6d706163743c42616c616e63654f663c543e3e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c657220616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e20456d6974732060426f6e646564602e202d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a2045726120456c656374696f6e205374617475732c20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c204c6f636b73202d2057726974653a205b4f726967696e204163636f756e745d2c204c6f636b732c204c65646765726d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c2043757272656e74204572612c20486973746f72792044657074682c204c6f636b73202d2057726974653a20426f6e6465642c2050617965652c205b4f726967696e204163636f756e745d2c204c6f636b732c204c65646765720000000000a09b10000c0000000000000000000000839a11000300000000000000000000000000000000000000000000000000000000000000c41a1200ac9b10000000000000000000bc9b100007000000000000000100000000000000f49b10000e0000000000000000000000839a11000300000000000000000000000000000000000000000000000000000000000000c41a1200049c10000000000000000000149c1000010000000000000001000000000000001c9c1000150000000000000000000000839a11000300000000000000000000000000000000000000000000000000000000000000c41a1200349c10000000000000000000449c1000010000000000000001000000000000004c9c10000d00000000000000000000003e7a10001100000000000000000000000000000000000000000000000000000000000000c41a12005c9c100000000000000000006c9c100003000000000000000100000000000000904c1000060000000105000000000000be0712000c00000000000000be0712000c00000000000000000000000000000000000000c41a1200849c10000000000000000000949c1000010000000000000000000000000000008a4c1000060000000102000000000000be0712000c000000000000009c9c10002900000000000000000000000000000000000000c41a1200c89c10000000000000000000d89c100001000000000000000000000000000000e09c1000050000000105000000000000be0712000c00000000000000827e10001f00000000000000000000000000000000000000c41a1200e89c10000000000000000000f89c10000100000000000000010000000000000088c911000a0000000105000000000000be0712000c00000000000000038210000e00000000000000000000000000000000000000c41a1200009d10000000000000000000109d100001000000000000000100000000000000314710000a0000000105000000000000be0712000c00000000000000189d10001900000000000000000000000000000000000000c41a1200349d10000000000000000000449d1000010000000000000000000000000000004c9d10000a0000000000000000000000ac6a10000800000000000000000000000000000000000000000000000000000000000000c41a1200589d10000000000000000000689d100004000000000000000000000000000000889d1000090000000000000000000000919d10000d00000000000000000000000000000000000000000000000000000000000000c41a1200a09d10000000000000000000b09d100004000000000000000000000000000000d09d1000150000000105000000000000ac6a10000800000000000000cfc911000c00000000000000000000000000000000000000c41a1200e89d10000000000000000000f89d100001000000000000000000000000000000964c10000b0000000205050000000000ac6a10000800000000000000be0712000c00000000000000009e10002400000000000000c41a1200249e10000000000000000000349e100006000000000000000100000000000000649e1000120000000205050000000000ac6a10000800000000000000be0712000c00000000000000009e10002400000000000000c41a1200789e10000000000000000000889e10000b000000000000000100000000000000e09e1000120000000205050000000000ac6a10000800000000000000be0712000c00000000000000038210000e00000000000000c41a1200f49e10000000000000000000049f1000050000000000000001000000000000002c9f1000130000000105000000000000ac6a10000800000000000000670c12000c00000000000000000000000000000000000000c41a1200409f10000000000000000000509f1000030000000000000000000000000000001b491000100000000105000000000000ac6a10000800000000000000689f10001d00000000000000000000000000000000000000c41a1200889f10000000000000000000989f100002000000000000000100000000000000a89f10000e0000000105000000000000ac6a10000800000000000000670c12000c00000000000000000000000000000000000000c41a1200b89f10000000000000000000c89f100002000000000000000100000000000000d89f1000080000000000000000000000e09f10000700000000000000000000000000000000000000000000000000000000000000c41a1200e89f10000000000000000000f89f10000100000000000000010000000000000000a0100013000000000000000000000055a011000700000000000000000000000000000000000000000000000000000000000000c41a120014a01000000000000000000024a01000030000000000000001000000000000003ca01000130000000000000000000000670c12000c00000000000000000000000000000000000000000000000000000000000000c41a120050a01000000000000000000060a010000200000000000000010000000000000070a01000100000000105000000000000ac6a1000080000000000000080a010002f00000000000000000000000000000000000000c41a1200b0a010000000000000000000c0a0100001000000000000000100000000000000c8a010000a0000000000000000000000d2a010001d00000000000000000000000000000000000000000000000000000000000000c41a1200f0a01000000000000000000000a11000040000000000000001000000000000003e491000130000000205050000000000ac6a10000800000000000000be0712000c0000000000000020a110001700000000000000c41a120038a11000000000000000000048a11000020000000000000000000000000000002b491000130000000205050000000000ac6a10000800000000000000be0712000c00000000000000670c12000c00000000000000c41a120058a11000000000000000000068a1100001000000000000000000000000000000514910000d0000000105000000000000be0712000c0000000000000070a110001700000000000000000000000000000000000000c41a120088a11000000000000000000098a11000010000000000000000000000000000005e491000090000000105000000000000a0a110002300000000000000c3a110002200000000000000000000000000000000000000c41a1200e8a110000000000000000000f8a110000200000000000000010000000000000008a21000160000000000000000000000ac6a10000800000000000000000000000000000000000000000000000000000000000000c41a120020a21000000000000000000030a21000010000000000000000000000000000006c4710001200000000000000000000003e7a10001100000000000000000000000000000000000000000000000000000000000000c41a120038a21000000000000000000048a21000020000000000000000000000000000007e4710001200000000000000000000003e7a10001100000000000000000000000000000000000000000000000000000000000000c41a120058a21000000000000000000068a210000200000000000000000000000000000078a210000d000000000000000000000085a210002a00000000000000000000000000000000000000000000000000000000000000c41a1200b0a210000000000000000000c0a2100003000000000000000000000000000000d8a210000b00000000000000000000009c6a10000d00000000000000000000000000000000000000000000000000000000000000c41a1200e4a210000000000000000000f4a210000100000000000000000000000000000020471000110000000000000000000000fca210001e00000000000000000000000000000000000000000000000000000000000000c41a12001ca3100000000000000000002ca31000020000000000000001000000000000003ca31000150000000000000000000000d90712000400000000000000000000000000000000000000000000000000000000000000c41a120054a31000000000000000000064a31000020000000000000001000000000000004cf211000e00000000000000000000005af211000800000000000000000000000000000000000000000000000000000000000000c41a120074a31000000000000000000084a31000040000000000000001000000486973746f727944657074682a000000000000000100000097000000d1b2100023000000c41a120000000000f4b210004e000000c41a12000000000042b31000580000009ab310004e000000e8b310000c00000056616c696461746f72436f756e7400002a000000000000000100000098000000a7b210002a0000004d696e696d756d56616c696461746f72436f756e740000002a00000000000000010000009800000057b2100050000000496e76756c6e657261626c65730000002a00000000000000010000009900000083b1100056000000d9b11000530000002cb210002b0000002a00000000000000010000009300000043b11000400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e0000002a00000000000000010000009a000000f2b010005100000050617965650000002a00000000000000010000009b000000b9b01000390000002a00000000000000010000009c00000068b01000510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e0000002a0000000000000001000000930000000fb010005900000043757272656e7445726100002a0000000000000001000000930000007faf100017000000c41a12000000000096af100059000000efaf100020000000416374697665457261416374697665457261496e666f00002a000000000000000100000093000000d0ae100036000000c41a12000000000006af10002e00000034af10004b00000045726173537461727453657373696f6e496e6465780000002a00000000000000010000009300000084ae10004c0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e2a00000000000000010000009d00000066ae10001e000000c41a12000000000006ac100058000000c41a1200000000005eac10002a00000016ae100050000000457261735374616b657273436c697070656400002a00000000000000010000009d00000088ac100026000000c41a120000000000aeac10005600000004ad1000370000003bad10004700000082ad10003d000000c41a120000000000bfad100057000000c41a1200000000005eac10002a00000016ae1000500000004572617356616c696461746f72507265667300002a00000000000000010000009c000000c2ab100044000000c41a12000000000006ac100058000000c41a1200000000005eac10002a0000004572617356616c696461746f72526577617264002a00000000000000010000009300000038ab100042000000c41a1200000000007aab100048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e0000002a00000000000000010000009e000000c4aa10002b000000efaa10004900000045726173546f74616c5374616b6500002a00000000000000010000009f00000042aa10003b0000007daa100047000000466f726365457261466f7263696e67002a00000000000000010000009b0000002daa100015000000536c6173685265776172644672616374696f6e002a000000000000000100000098000000b6a910003e000000c41a120000000000f4a910003900000043616e63656c6564536c6173685061796f7574002a00000000000000010000009f00000036a91000450000007ba910003b000000556e6170706c696564536c61736865735665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e002a0000000000000001000000a000000005a9100031000000426f6e646564457261735665633c28457261496e6465782c2053657373696f6e496e646578293e002a0000000000000001000000a10000005ba8100049000000c41a120000000000a4a8100032000000d6a810002f0000002850657262696c6c2c2042616c616e63654f663c543e29002a000000000000000100000093000000eea71000510000003fa810001c0000002a00000000000000010000009300000096a7100058000000736c617368696e673a3a536c617368696e675370616e73002a00000000000000010000009300000073a710002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e0000002a0000000000000001000000a2000000f6a610004f00000045a710002e0000004561726c69657374556e6170706c696564536c61736800002a000000000000000100000093000000b7a610003f0000002a0000000000000001000000a30000005ea610005900000018a61000460000002a0000000000000001000000a3000000bfa510005900000018a6100046000000517565756564456c6563746564456c656374696f6e526573756c743c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e002a00000000000000010000009300000001a51000590000005aa5100058000000b2a510000d00000051756575656453636f7265002a000000000000000100000093000000d5a410002c000000456c656374696f6e5374617475733c543a3a426c6f636b4e756d6265723e00002a00000000000000010000009b00000068a4100052000000baa410001b000000497343757272656e7453657373696f6e46696e616c0000002a000000000000000100000093000000ffa310005300000052a41000160000002a0000000000000001000000a4000000a4a3100033000000d8e411001f000000c41a120000000000d7a31000280000002054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e20546869732069732073657420746f2076332e302e3020666f72206e6577206e6574776f726b732e2054727565206966207468652063757272656e74202a2a706c616e6e65642a2a2073657373696f6e2069732066696e616c2e204e6f74652074686174207468697320646f6573206e6f742074616b652065726120666f7263696e6720696e746f206163636f756e742e20466c616720746f20636f6e74726f6c2074686520657865637574696f6e206f6620746865206f6666636861696e20656c656374696f6e2e205768656e20604f70656e285f29602c2077652061636365707420736f6c7574696f6e7320746f206265207375626d69747465642e205468652073636f7265206f66207468652063757272656e74205b60517565756564456c6563746564605d2e20546865206e6578742076616c696461746f72207365742e2041742074686520656e64206f6620616e206572612c206966207468697320697320617661696c61626c652028706f74656e7469616c6c792066726f6d2074686520726573756c74206f6620616e206f6666636861696e20776f726b6572292c20697420697320696d6d6564696174656c7920757365642e204f74686572776973652c20746865206f6e2d636861696e20656c656374696f6e2069732065786563757465642e20536e617073686f74206f66206e6f6d696e61746f72732061742074686520626567696e6e696e67206f66207468652063757272656e7420656c656374696f6e2077696e646f772e20546869732073686f756c64206f6e6c79206861766520612076616c7565207768656e205b60457261456c656374696f6e537461747573605d203d3d2060456c656374696f6e5374617475733a3a4f70656e285f29602e20536e617073686f74206f662076616c696461746f72732061742074686520626567696e6e696e67206f66207468652063757272656e7420656c656374696f6e2077696e646f772e20546869732073686f756c64206f6e6c7920546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e204d6f6465206f662065726120666f7263696e672e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e20284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e20546865206163746976652065726120697320746865206572612063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f206053657373696f6e496e746572666163653a3a76616c696461746f7273602e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e000000007cb510000e00000000000000cfc911000c00000000000000c41a12008cb5100000000000000000009cb51000010000000000000000000000a4b510000f00000000000000ac6a10000800000000000000c41a1200b4b510000000000000000000c4b51000010000000000000000000000ccb510001200000000000000ac6a10000800000000000000c41a1200e0b510000000000000000000f0b5100005000000000000000000000018b610001100000000000000d5f711000e00000000000000c41a12002cb6100000000000000000003cb6100007000000000000000000000074b610000d00000000000000839a11000300000000000000c41a120084b61000000000000000000094b61000030000000000000000000000acb61000140000000000000055a011000700000000000000c41a1200c0b610000000000000000000d0b61000010000000000000000000000d8b610002000000000000000839a11000300000000000000c41a1200f8b61000000000000000000008b71000040000000000000053657373696f6e7350657245726100002a0000000000000001000000a50000002abb10001c000000426f6e64696e674475726174696f6e002a0000000000000001000000a6000000f1ba100039000000536c61736844656665724475726174696f6e00002a0000000000000001000000a700000029ba100040000000c41a12000000000069ba10002f00000098ba10004b000000e3ba10000e000000456c656374696f6e4c6f6f6b61686561640000002a0000000000000001000000a8000000e5b810005c000000c41a12000000000041b910005b0000009cb9100009000000c41a120000000000a5b910005d00000002ba1000270000004d6178497465726174696f6e730000002a0000000000000001000000a900000060b810004a000000c41a120000000000aab810003b0000004d696e536f6c7574696f6e53636f726542756d702a0000000000000001000000aa00000008b81000580000004d61784e6f6d696e61746f72526577617264656450657256616c696461746f722a0000000000000001000000ab00000028b710003e000000c41a12000000000066b710005a000000c0b710004800000020546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e20466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e20636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e20546865207468726573686f6c64206f6620696d70726f76656d656e7420746861742073686f756c642062652070726f766964656420666f722061206e657720736f6c7574696f6e20746f2062652061636365707465642e204d6178696d756d206e756d626572206f662062616c616e63696e6720697465726174696f6e7320746f2072756e20696e20746865206f6666636861696e207375626d697373696f6e2e2049662073657420746f20302c2062616c616e63655f736f6c7574696f6e2077696c6c206e6f7420626520657865637574656420617420616c6c2e20546865206e756d626572206f6620626c6f636b73206265666f72652074686520656e64206f6620746865206572612066726f6d20776869636820656c656374696f6e207375626d697373696f6e732061726520616c6c6f7765642e2053657474696e67207468697320746f207a65726f2077696c6c2064697361626c6520746865206f6666636861696e20636f6d7075746520616e64206f6e6c79206f6e2d636861696e207365712d70687261676d656e2077696c6c20626520757365642e205468697320697320626f756e646564206279206265696e672077697468696e20746865206c6173742073657373696f6e2e2048656e63652c2073657474696e6720697420746f20612076616c7565206d6f7265207468616e20746865206c656e677468206f6620612073657373696f6e2077696c6c20626520706f696e746c6573732e204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e20546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c61736865732073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e000000000000d4bc10000900000000000000e0bc1000030000000000000000000000f8bc100003000000000000000000000010bd1000060000000000000018e8110002000000000000000000000018bd100001000000000000000000000020bd1000050000000000000018e8110002000000000000000000000028bd100002000000000000000000000038bd10001a0000000000000054bd10000100000000000000000000005cbd10000200000000000000000000006cbd10000f000000000000007cbd100001000000000000000000000084bd10000100000000000000000000008cbd10000e000000000000007cbd10000100000000000000000000009cbd1000010000000000000000000000904c1000060000000000000018e81100020000000000000000000000a4bd1000040000000000000000000000c4bd1000080000000000000018e81100020000000000000000000000ccbd1000010000000000000000000000d4bd1000090000000000000018e81100020000000000000000000000e0bd100002000000000000004572615061796f7574000000ac6a100008000000c9e9110007000000c9e911000700000017c11000560000006dc11000310000009ec110002b0000005265776172640000d8c010003f000000536c61736800000079c0100049000000c2c01000160000004f6c64536c617368696e675265706f72744469736361726465640000cfc911000c0000000ec010004700000055c01000240000005374616b696e67456c656374696f6e00ffbf10000f000000c2bf10003d000000536f6c7574696f6e53746f72656400007cbf100046000000aabe100035000000c41a120000000000dfbe10005400000033bf100049000000556e626f6e64656473be10003700000057697468647261776e000000f0bd10005700000047be10002c00000020416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365602066726f6d2074686520756e6c6f636b696e672071756575652e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d204e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c2069742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e2041206e657720736f6c7574696f6e20666f7220746865207570636f6d696e6720656c656374696f6e20686173206265656e2073746f7265642e205c5b636f6d707574655c5d2041206e657720736574206f66207374616b6572732077617320656c656374656420776974682074686520676976656e205c5b636f6d707574655c5d2e456c656374696f6e436f6d7075746520416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e205c5b73657373696f6e5f696e6465785c5d204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e205c5b76616c696461746f722c20616d6f756e745c5d20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d2054686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973207468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e205c5b6572615f696e6465782c2076616c696461746f725f7061796f75742c2072656d61696e6465725c5d4572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f657261f09f92b8206f6e2d636861696e2070687261676d656e206973206661696c696e672064756520746f20612070726f626c656d20696e2074686520726573756c742e2054686973206d7573742062652061206275672e6cc210001f0000008bc2100016000000a1c2100009000000f09f92b8206e65772076616c696461746f7220736574206f662073697a652020686173206265656e20656c6563746564207669612020666f7220657261205761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e0000ace210005e000000c90400000100000000000000cf4b10000d0000000000000050c61000010000000000000000000000c74b1000080000000000000058c61000010000000000000000000000ba4b10000d0000000000000060c61000010000000000000000000000ad4b10000d0000000000000068c61000010000000000000000000000a14b10000c0000000000000070c61000010000000000000000000000934b10000e0000000000000078c61000010000000000000000000000824b1000110000000000000080c61000010000000000000000000000714b1000110000000000000088c61000010000000000000000000000654b10000c0000000000000090c61000010000000000000000000000584b10000d0000000000000098c610000100000000000000000000004c4b10000c00000000000000a0c610000100000000000000000000003a4b10001200000000000000a8c61000010000000000000000000000204b10001a00000000000000b0c610000100000000000000000000000e4b10001200000000000000b8c61000010000000000000000000000004b10000e00000000000000c0c61000010000000000000000000000e14a10001f00000000000000c8c61000010000000000000000000000c34a10001e00000000000000d0c61000010000000000000000000000b04a10001300000000000000d8c61000010000000000000000000000904a10002000000000000000e0c61000010000000000000000000000754a10001b00000000000000e8c61000020000000000000000000000594a10001c00000000000000f8c610000200000000000000000000003b4a10001e0000000000000008c710000100000000000000000000001c4a10001f0000000000000010c71000010000000000000000000000fb491000210000000000000018c71000020000000000000000000000de4910001d0000000000000028c71000010000000000000000000000c5491000190000000000000030c71000010000000000000000000000ab4910001a0000000000000038c710000100000000000000000000008a491000210000000000000040c710000100000000000000000000007c4910000e0000000000000048c7100001000000000000000000000067491000150000000000000050c71000010000000000000000000000dc4b1000160000000000000058c710000100000000000000b9cd10001a000000a4cd1000150000008bcd1000190000006dcd10001e00000054cd10001900000043cd10001100000021cd100022000000eecc100033000000c9cc100025000000a0cc1000290000006dcc10003300000056cc10001700000037cc10001f00000016cc100021000000d3cb1000430000009acb1000390000005acb10004000000026cb100034000000faca10002c00000094ca100058000000ecca10000e00000013ca1000570000006aca10002a000000cec91000450000007bc91000530000000ec910005800000066c9100015000000c5c810004900000074c81000510000002ec810004600000010c810001e000000bec71000520000008dc710003100000060c710002d00000020496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e20496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e205468652063616c6c206973206e6f7420616c6c6f7765642061742074686520676976656e2074696d652064756520746f207265737472696374696f6e73206f6620656c656374696f6e20706572696f642e2054686520656c656374696f6e2073697a6520697320696e76616c69642e2054686520636c61696d65642073636f726520646f6573206e6f74206d61746368207769746820746865206f6e6520636f6d70757465642066726f6d2074686520646174612e20546865207375626d697474656420726573756c742068617320756e6b6e6f776e206564676573207468617420617265206e6f7420616d6f6e67207468652070726573656e7465642077696e6e6572732e20412073656c6620766f7465206d757374206f6e6c79206265206f726967696e617465642066726f6d20612076616c696461746f7220746f204f4e4c59207468656d73656c7665732e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f72732068617320616e2065646765207768696368206973207375626d6974746564206265666f726520746865206c617374206e6f6e2d7a65726f20736c617368206f6620746865207461726765742e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f72732068617320616e206564676520746f20776869636820746865792068617665206e6f7420766f746564206f6e20636861696e2e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f7273206973206e6f7420616e20616374697665206e6f6d696e61746f72206f6e20636861696e2e204572726f72207768696c65206275696c64696e67207468652061737369676e6d656e7420747970652066726f6d2074686520636f6d706163742e20546869732063616e2068617070656e20696620616e20696e64657820697320696e76616c69642c206f72206966207468652077656967687473205f6f766572666c6f775f2e204f6e65206f6620746865207375626d69747465642077696e6e657273206973206e6f7420616e206163746976652063616e646964617465206f6e20636861696e2028696e646578206973206f7574206f662072616e676520696e20736e617073686f74292e20496e636f7272656374206e756d626572206f662077696e6e65727320776572652070726573656e7465642e2054686520736e617073686f742064617461206f66207468652063757272656e742077696e646f77206973206d697373696e672e20546865207375626d697474656420726573756c74206973206e6f7420617320676f6f6420617320746865206f6e652073746f726564206f6e20636861696e2e20546865207375626d697474656420726573756c74206973207265636569766564206f7574206f6620746865206f70656e2077696e646f772e205265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e204974656d7320617265206e6f7420736f7274656420616e6420756e697175652e20496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e72656a656374696e6720756e7369676e6564207472616e73616374696f6e2062656361757365206974206973206e6f74206c6f63616c2f696e2d626c6f636b2e0079ce100040000000124810000100000043ce10003600000012481000010000005374616b696e674f6666636861696ef09f92b82076616c6964617465556e7369676e65642073756363656564656420666f72206120736f6c7574696f6e2061742065726120f09f92b82076616c696461746520756e7369676e65642070726520646973706174636820636865636b73206661696c65642064756520746f206572726f722023416e20756e7369676e656420736f6c7574696f6e2063616e206f6e6c79206265207375626d69747465642062792076616c696461746f72733b20412076616c696461746f722073686f756c6420616c776179732070726f6475636520636f727265637420736f6c7574696f6e732c20656c7365207468697320626c6f636b2073686f756c64206e6f7420626520696d706f727465642c2074687573206566666563746976656c7920646570726976696e67207468652076616c696461746f72732066726f6d20746865697220617574686f72696e67207265776172642e2048656e63652c20746869732070616e69630a0909090969732065787065637465642e0000002a0000002800000008000000ac000000ace210005e0000006b0800000f0000001dd110002a000000f09f92b820646574656374656420616e206572726f7220696e20746865207374616b696e67206c6f636b696e6720616e6420736e617073686f742e65786163746c79206f6e65206f6620606d617962655f76616c696461746f726020616e6420606d617962655f6e6f6d696e6174696f6e2e69735f736f6d656020697320747275652e2069735f76616c696461746f722069732066616c73653b206d617962655f6e6f6d696e6174696f6e20697320736f6d653b20716564ace210005e000000fc09000033000000c4d0100025000000e9d010000b000000f4d0100029000000f09f92b820412062657474657220736f6c7574696f6e20287769746820636f6d707574652020616e642073636f7265202920686173206265656e2076616c69646174656420616e642073746f726564206f6e20636861696e2ef09f92b820756e2d636f6d70616374696e6720736f6c7574696f6e206661696c65642064756520746f20496e686572656e7420776974682073616d65206964656e74696669657220616c726561647920657869737473214e6f206f74686572206572726f72732061726520616363657074656420616674657220616e2068617264206572726f72212f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e352f7372632f636f6465632e72732a00000000000000010000003f000000bfd211006a0000002b010000290000002a00000000000000010000003e000000bfd211006a0000002e01000034000000bfd211006a0000008102000025000000bfd211006a0000008102000036000000bfd211006a000000870200002f000000bfd211006a000000230100002c0000005175657565644b6579734475706c6963617465644b65794e6f4173736f63696174656456616c696461746f724964496e76616c696450726f6f664e6f4b6579730000000020d31000080000000000000028d3100002000000000000000000000058d310000e0000000000000000000000c8d310000a00000000000000c41a1200000000000000000000000000d4d310000c000000000000007365745f6b65797300000000329b1100040000000000000017d7100007000000000000001ed7100005000000000000000d9f110007000000d8d510003a00000012d610004800000067d4100031000000c41a12000000000098d4100035000000c41a120000000000ac0412000b0000005ad6100015000000fad41000560000006fd610003c000000abd6100029000000d4d6100021000000f5d61000220000004b0512000c00000070757267655f6b657973000034d410003300000067d4100031000000c41a12000000000098d4100035000000c41a120000000000ac0412000b000000cdd410002d000000fad410005600000050d510003c0000008cd5100029000000b5d51000230000004b0512000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e20202041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e202d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460202d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460202d20446257726974657320706572206b65792069643a20604b65794f776e646572602053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d20436f6d706c65786974793a20604f28312960202d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360202d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360202d204462526561647320706572206b65792069643a20604b65794f776e657260202d20446257726974657320706572206b65792069643a20604b65794f776e657260543a3a4b65797370726f6f66000000000088c911000a00000000000000000000008cd910001300000000000000000000000000000000000000000000000000000000000000c41a1200a0d910000000000000000000b0d9100001000000000000000100000000000000b8d910000c0000000000000000000000cfc911000c00000000000000000000000000000000000000000000000000000000000000c41a1200c4d910000000000000000000d4d9100001000000000000000100000000000000dcd910000d0000000000000000000000d90712000400000000000000000000000000000000000000000000000000000000000000c41a1200ecd910000000000000000000fcd910000200000000000000010000000000000088d210000a00000000000000000000000cda10001e00000000000000000000000000000000000000000000000000000000000000c41a12002cda100000000000000000003cda1000020000000000000001000000000000004cda10001200000000000000000000005eda10000800000000000000000000000000000000000000000000000000000000000000c41a120068da1000000000000000000078da10000300000000000000010000000000000090da1000080000000105000000000000fcfd10000e0000000000000017d710000700000000000000000000000000000000000000c41a120098da10000000000000000000a8da100001000000000000000000000000000000b0da1000080000000105000000000000b8da10001400000000000000fcfd10000e00000000000000000000000000000000000000c41a1200ccda10000000000000000000dcda10000100000000000000000000005665633c543a3a56616c696461746f7249643e002a000000000000000100000099000000d6dc10001f00000043757272656e74496e6465782a000000000000000100000098000000b8dc10001e0000005175657565644368616e6765640000002a00000000000000010000009300000041dc10004e0000008fdc1000290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e00002a000000000000000100000045000000badb10004f00000009dc10003800000044697361626c656456616c696461746f72735665633c7533323e00002a0000000000000001000000ad0000004ddb100020000000c41a1200000000006ddb10004d0000004e6578744b6579732a00000000000000010000009300000026db1000270000004b65794f776e6572284b65795479706549642c205665633c75383e292a000000000000000100000093000000e4da10004200000020546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e00000000000000b6d210000c0000000000000068dd10000100000000000000000000009fd21000170000000000000070dd100001000000000000000000000092d210000d0000000000000078dd1000010000000000000000000000c2d21000060000000000000080dd10000100000000000000f4dd100019000000ccdd100028000000b2dd10001a00000088dd10002a000000204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e436865636b4d6f7274616c697479536f6d654e6f6e65002a00000004000000040000001c0000003cde10001a0000004552524f523a20436f727275707465642073746174652061742000002a00000000000000010000003f0000000000000000000000617474656d707420746f20646976696465206279207a65726f0000002a0000000800000004000000ae000000831512006d000000f104000001000000bcde10004d0000003a000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f73657373696f6e5f696e666f2e72735061726153657373696f6e496e666f0000000020e0100014000000000000000000000034e010001100000000000000000000000000000000000000000000000000000000000000c41a120048e01000000000000000000058e010000300000000000000010000000000000070e01000150000000000000000000000cfc911000c00000000000000000000000000000000000000000000000000000000000000c41a120088e01000000000000000000098e0100001000000000000000100000000000000a0e01000080000000106000000000000cfc911000c000000000000000bef11000b00000000000000000000000000000000000000c41a1200a8e010000000000000000000b8e0100003000000000000000000000041737369676e6d656e744b657973556e736166655665633c41737369676e6d656e7449643e0000002a000000000000000100000045000000e3e11000290000000ce210005b00000067e210002b0000004561726c6965737453746f72656453657373696f6e0000002a000000000000000100000098000000a3e110004000000053657373696f6e732a0000000000000001000000af000000d0e0100029000000f9e010004d00000046e110005d0000002053657373696f6e20696e666f726d6174696f6e20696e206120726f6c6c696e672077696e646f772e2053686f756c64206861766520616e20656e74727920696e2072616e676520604561726c6965737453746f72656453657373696f6e2e2e3d43757272656e7453657373696f6e496e646578602e20446f6573206e6f74206861766520616e7920656e7472696573206265666f7265207468652073657373696f6e20696e64657820696e207468652066697273742073657373696f6e206368616e6765206e6f74696669636174696f6e2e20546865206561726c696573742073657373696f6e20666f722077686963682070726576696f75732073657373696f6e20696e666f2069732073746f7265642e2041737369676e6d656e74206b65797320666f72207468652063757272656e742073657373696f6e2e204e6f7465207468617420746869732041504920697320707269766174652064756520746f206974206265696e672070726f6e6520746f20276f66662d62792d6f6e65272061742073657373696f6e20626f756e6461726965732e205768656e20696e20646f7562742c20757365206053657373696f6e73602041504920696e73746561642e506f7374496e666f3a20ace210005e00000082040000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f7374616b696e672f7372632f6c69622e72730000b4e3100040000000a7000000010000005468657265206973206f6e6c79206f6e6520666174616c206572726f723b2071656400002a0000000800000004000000b0000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f0000000fe4100007000000f4e310001b000000f019120002000000b4e310004000000070020000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f726f636f636f2f7372632f6c69622e727342616420696e70757420646174612070726f766964656420746f2076657273696f6e000020e410000d000000657865637574655f626c6f636b00000038e4100010000000696e697469616c697a655f626c6f636b50e41000080000006d6574616461746160e410000f0000006170706c795f65787472696e7369630078e410000e00000066696e616c697a655f626c6f636b000090e4100013000000696e686572656e745f65787472696e7369637300ace410000f000000636865636b5f696e686572656e747300c4e410000b00000072616e646f6d5f7365656400d8e410001400000076616c69646174655f7472616e73616374696f6ef4e410000f0000006f6666636861696e5f776f726b6572000ce510000a00000076616c696461746f7273000020e510001000000076616c696461746f725f67726f75707338e5100012000000617661696c6162696c6974795f636f726573000054e510001400000066756c6c5f76616c69646174696f6e5f6461746170e51000190000007065727369737465645f76616c69646174696f6e5f6461746100000094e5100018000000636865636b5f76616c69646174696f6e5f6f757470757473b4e510001700000073657373696f6e5f696e6465785f666f725f6368696c6400064211000f000000dce510001a000000686973746f726963616c5f76616c69646174696f6e5f636f6465000000e610001e00000063616e6469646174655f70656e64696e675f617661696c6162696c697479000028e610001000000063616e6469646174655f6576656e747340e610000c00000073657373696f6e5f696e666f54e610000c000000646d715f636f6e74656e747368e610001e000000696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473000090e61000130000006772616e6470615f617574686f72697469657300ace610002d0000007375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963000000e4e610001c00000067656e65726174655f6b65795f6f776e6572736869705f70726f6f6608e710000d000000636f6e66696775726174696f6e00000020e710001300000063757272656e745f65706f63685f7374617274003ce710000b000000617574686f7269746965730050e710001500000067656e65726174655f73657373696f6e5f6b65797300000070e71000130000006465636f64655f73657373696f6e5f6b657973008ce710000d0000006163636f756e745f6e6f6e6365000000a4e710000a00000071756572795f696e666f54696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b000000ece7100060000000bf0000000d0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f74696d657374616d702f7372632f6c69622e72730000000078e8100003000000000000007ce8100001000000000000000000000094e810000f00000000000000736574000000000031eb1000030000000000000034eb1000120000000ce9100016000000c41a12000000000022e910005600000078e9100036000000c41a120000000000aee9100051000000ffe9100011000000c41a12000000000010ea100036000000c41a120000000000ac0412000b00000046ea10004d00000093ea100068000000fbea1000360000004b0512000c00000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e202d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f2831296029202d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e20606f6e5f66696e616c697a656029202d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e6e6f77436f6d706163743c543a3a4d6f6d656e743e000000000000f8eb1000030000000000000000000000197511000900000000000000000000000000000000000000000000000000000000000000c41a1200fceb100000000000000000000cec10000100000000000000010000000000000014ec1000090000000000000000000000d90712000400000000000000000000000000000000000000000000000000000000000000c41a120020ec1000000000000000000030ec10000100000000000000010000004e6f77002a0000000000000001000000b100000065ec1000240000004469645570646174650000002a00000000000000010000009300000038ec10002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000c4ec10000d00000000000000197511000900000000000000c41a1200d4ec10000000000000000000e4ec100004000000000000004d696e696d756d506572696f640000002a0000000000000001000000b200000004ed10005a0000005eed10005a000000b8ed10005900000011ee10001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e54696d657374616d7020746f6f2066617220696e2066757475726520746f206163636570744765747320616e64206465636f6465732074696d657374616d7020696e686572656e7420646174610000b30000001000000004000000b4000000ece7100060000000eb0000000e00000054696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636bece7100060000000a80000000d00000054696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b730000ece7100060000000aa0000000d000000726563656e746c792065786563757465642e666f726b2e4269746669656c647320616e64206865616473206d75737420626520696e636c7564656420657665727920626c6f636b0094ef1000530000004a000000110000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f696e636c7573696f6e5f696e686572656e742e7273696e636c75736e30696e636c7573696f6e20696e686572656e742064617461206661696c656420746f206465636f6465002a0000000800000004000000b000000094ef100053000000890000000e000000696e636c7573696f6e0000000000000060f0100019000000000000007cf010000100000000000000546f6f4d616e79496e636c7573696f6e496e686572656e747300000084f010003400000020496e636c7573696f6e20696e686572656e742063616c6c6564206d6f7265207468616e206f6e63652070657220626c6f636b2e0000000038f010000900000000000000e4f0100002000000000000000000000014f1100001000000000000000000000045f11000100000000000000055f110001b0000000000000070f11000110000000000000081f110001d0000001cf110002900000020496e636c756465206261636b65642063616e6469646174657320616e64206269746669656c64732e7369676e65645f6269746669656c64735369676e6564417661696c6162696c6974794269746669656c64736261636b65645f63616e646964617465735665633c4261636b656443616e6469646174653c543a3a486173683e3e50617261496e636c7573696f6e496e686572656e7400000000000cf210000800000000000000000000007f2512000200000000000000000000000000000000000000000000000000000000000000c41a120014f21000000000000000000024f21000060000000000000000000000496e636c756465642a00000000000000010000009200000054f210003f000000c41a12000000000093f2100058000000ebf210002f000000c41a1200000000001af310005200000020576865746865722074686520696e636c7573696f6e20696e686572656e742077617320696e636c756465642077697468696e207468697320626c6f636b2e2054686520604f7074696f6e3c28293e60206973206566666563746976656c79206120626f6f6c2c20627574206974206e6576657220686974732073746f7261676520696e2074686520604e6f6e65602076617269616e742064756520746f207468652067756172616e74656573206f66204652414d4527732073746f7261676520415049732e204966207468697320697320604e6f6e65602061742074686520656e64206f662074686520626c6f636b2c2077652070616e696320616e642072656e6465722074686520626c6f636b20696e76616c69642ea81f120067000000700000002e000000a81f1200670000008f00000034000000a81f1200670000006800000034000000a81f120067000000b900000009000000a81f120067000000b200000009000000a81f120067000000d300000011000000a81f120067000000d800000009000000ecf310006a0000002c000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f617574686f726974792d646973636f766572792f7372632f6c69622e7273000098d11100540000009a00000009000000617373657274696f6e206661696c65643a2062697473203c3d20726573756c742e6c656e28290000a0f4100065000000440000000d0000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e352f7372632f6269745f7665632e7273566563746f72206361706163697479206f766572666c6f7700000070f510005a0000004d0000000e000000caf5100013000000f8f510001a00000070f510005a0000004501000009000000caf5100013000000ddf510001b00000070f510005a0000004c010000090000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e31372e342f7372632f7665632f6170692e72734361706163697479206f766572666c6f773a20206f766572666c6f777320616c6c6f636174696f6e2073697a6520206f766572666c6f7773206d6178696d756d206c656e677468200000000000048ef610000e0000009cf610000b00000038f61000560000006d010000090000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e31372e342f7372632f7665632e7273566563746f72206c656e67746820206f766572666c6f7773204b657973417574686f726564426c6f636b732f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e727348656172746265617441667465720060f7100016000000f01912000200000060f710001600000076f7100012000000696d6f6e6c696e6570616c6c65745f696d5f6f6e6c696e65536b697070696e6720686561727462656174206174202e204e6f7420612076616c696461746f722e97f810001c00000069f810002e00000037f810001a00000051f81000180000001bf810000a00000025f810001200000003f8100018000000edf7100016000000d0f710001d0000004661696c656420746f206665746368206e6574776f726b2073746174654661696c656420746f2061637175697265206c6f636b4661696c656420746f207369676e20686561727462656174417574686f726974792020697320616c7265616479206f6e6c696e6548656172746265617420616c72656164792073656e74206174202e2057616974696e6720666f7220696e636c7573696f6e2e546f6f206561726c7920746f2073656e64206865617274626561742c206e657874206578706563746564206174204661696c656420746f207375626d6974207472616e73616374696f6e00b9f610006000000028020000340000007061726974792f696d2d6f6e6c696e652d6865617274626561742f0000f910000800000008f910002000000028f910000b00000033f91000030000005b696e6465783a205d205265706f7274696e6720696d2d6f6e6c696e6520617420626c6f636b3a20202873657373696f6e3a20293a20000070f9100009000000c41a120000000000c41a1200000000002a0000000400000004000000280000002a000000040000000400000028000000686561727462656174496e76616c69644b65794475706c69636174656448656172746265617400000000000070f910000900000000000000c4f91000020000000000000000000000f4f9100009000000000000000000000070f910000900000000000000a2fb10001900000000000000bbfb10000a00000000000000c5fb10002f000000ac0412000b0000003cfa1000500000008cfa100040000000ccfa100023000000effa10002c0000001bfb10004f0000006afb10001700000081fb1000210000004b0512000c000000202d20436f6d706c65786974793a20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e29202020616e642045206973206c656e677468206f6620606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373602020202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b602020202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560202d20446252656164733a2070616c6c65745f73657373696f6e206056616c696461746f7273602c2070616c6c65745f73657373696f6e206043757272656e74496e646578602c20604b657973602c2020206052656365697665644865617274626561747360202d2044625772697465733a2060526563656976656448656172746265617473604865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e61747572650000000019f710000e0000000000000000000000d5f711000e00000000000000000000000000000000000000000000000000000000000000c41a120054fd1000000000000000000064fd100006000000000000000100000000000000a7f6100004000000000000000000000094fd10001300000000000000000000000000000000000000000000000000000000000000c41a1200a8fd10000000000000000000b8fd100001000000000000000100000000000000c0fd1000120000000205050000000000cfc911000c00000000000000d2fd100009000000000000000d9f11000700000000000000c41a1200dcfd10000000000000000000ecfd100002000000000000000000000000000000abf610000e0000000205050000000000cfc911000c00000000000000fcfd10000e00000000000000839a11000300000000000000c41a12000cfe100000000000000000001cfe10000200000000000000010000002a00000000000000010000009800000033ff10004c000000c41a1200000000007fff100044000000c3ff100034000000f7ff100040000000370011004e0000005665633c543a3a417574686f7269747949643e002a000000000000000100000045000000fffe10003400000052656365697665644865617274626561747341757468496e646578002a000000000000000100000093000000a3fe10003c000000dffe100020000000543a3a56616c696461746f72496400002a0000000000000001000000980000002cfe10004500000071fe10003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f662060543a3a56616c696461746f7249646020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e2063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e000000000000000c01110011000000000000002001110001000000000000000000000028011100010000000000000000000000300111000700000000000000c41a120000000000000000000000000038011100010000000000000000000000400111000b000000000000004c0111000100000000000000000000005401110001000000000000004865617274626561745265636569766564000000390211000b000000f801110041000000416c6c476f6f6400c301110035000000536f6d654f66666c696e6500ab011100180000005c0111004f0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265205c5b6f66666c696e655c5d2e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460205c5b617574686f726974795f69645c5d417574686f7269747949640000000079f910000a000000000000007c02110001000000000000000000000083f910001300000000000000840211000100000000000000a2021100190000008c02110016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e00780511006d0000007300000013000000780511006d0000004800000018000000780511006d000000480000002a000000780511006d0000008a00000018000000780511006d000000b600000019000000780511006d000000c40000001c000000101f120087000000220200001f000000780511006d0000000101000042000000780511006d00000015010000420000004475706c696361746520766f74657220286f72206f7468657220636f727275707420696e707574292e000000780511006d0000003601000021000000780511006d0000005901000015000000780511006d0000005e0100001e000000780511006d000000610000001a000000780511006d000000610000002c000000780511006d000000cb010000180000002a00000000000000010000003f000000780511006d000000cb01000021000000780511006d000000cd01000027000000780511006d000000cd01000030000000780511006d000000ce01000024000000780511006d000000ce01000039000000780511006d000000cf01000024000000780511006d000000cf01000039000000780511006d000000f301000023000000780511006d000000f30100002c000000780511006d000000f501000024000000780511006d000000f501000039000000780511006d0000001802000035000000780511006d0000001902000035000000780511006d0000002202000024000000780511006d0000002202000039000000780511006d0000004402000035000000780511006d0000004502000035000000780511006d0000005a0200002b000000780511006d0000005a02000046000000780511006d0000005b02000028000000780511006d0000005b02000047000000780511006d000000650200002b000000780511006d0000006502000047000000780511006d0000006602000028000000780511006d00000066020000480000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f7265647563652e7273000000ef0911004e000000ec000000010000007365745f68726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174657365745f68726d705f6d61785f706172617468726561645f6f7574626f756e645f6368616e6e656c737365745f68726d705f6d61785f70617261636861696e5f6f7574626f756e645f6368616e6e656c737365745f68726d705f6368616e6e656c5f6d61785f6d6573736167655f73697a657365745f68726d705f6d61785f706172617468726561645f696e626f756e645f6368616e6e656c737365745f68726d705f6d61785f70617261636861696e5f696e626f756e645f6368616e6e656c737365745f68726d705f6368616e6e656c5f6d61785f746f74616c5f73697a657365745f68726d705f6368616e6e656c5f6d61785f63617061636974797365745f68726d705f726563697069656e745f6465706f7369747365745f68726d705f73656e6465725f6465706f7369747365745f68726d705f6f70656e5f726571756573745f74746c7365745f6d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174657365745f6d61785f7570776172645f6d6573736167655f73697a657365745f7072656665727265645f646973706174636861626c655f7570776172645f6d657373616765735f737465705f7765696768747365745f6d61785f646f776e776172645f6d6573736167655f73697a657365745f6d61785f7570776172645f71756575655f73697a657365745f6d61785f7570776172645f71756575655f636f756e747365745f72656c61795f7672665f6d6f64756c6f5f73616d706c65737365745f6e65656465645f617070726f76616c737365745f7a65726f74685f64656c61795f7472616e6368655f77696474687365745f6e5f64656c61795f7472616e636865737365745f6e6f5f73686f775f736c6f74737365745f646973707574655f706572696f647365745f6d61785f76616c696461746f72735f7065725f636f72657365745f7363686564756c696e675f6c6f6f6b61686561647365745f7468726561645f617661696c6162696c6974795f706572696f647365745f636861696e5f617661696c6162696c6974795f706572696f647365745f67726f75705f726f746174696f6e5f6672657175656e63797365745f706172617468726561645f726574726965737365745f706172617468726561645f636f7265737365745f6d61785f686561645f646174615f73697a657365745f6d61785f706f765f73697a657365745f6d61785f636f64655f73697a657365745f616363657074616e63655f706572696f647365745f76616c69646174696f6e5f757067726164655f64656c61797365745f76616c69646174696f6e5f757067726164655f6672657175656e63792f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f636f6e66696775726174696f6e2e7273000000000000005c0a11000f000000000000006c0a11000100000000000000496e76616c69644e657756616c756500740a11003800000020546865206e65772076616c756520666f72206120636f6e66696775726174696f6e20706172616d6574657220697320696e76616c69642e436f6e66696775726174696f6e50656e64696e67436f6e666967416374697665436f6e666967000000000000cf0911002000000000000000041111000100000000000000000000001c111100010000000000000000000000b30911001c0000000000000004111100010000000000000000000000241111000100000000000000000000009e0911001500000000000000041111000100000000000000000000002c1111000100000000000000000000008d0911001100000000000000341111000100000000000000000000004c1111000100000000000000000000007d09110010000000000000003411110001000000000000000000000054111100010000000000000000000000670911001600000000000000341111000100000000000000000000005c11110001000000000000000000000053091100140000000000000034111100010000000000000000000000641111000100000000000000000000003d0911001600000000000000341111000100000000000000000000006c111100010000000000000000000000210911001c000000000000000411110001000000000000000000000074111100010000000000000000000000040911001d00000000000000041111000100000000000000000000007c111100010000000000000000000000e60811001e000000000000000411110001000000000000000000000084111100010000000000000000000000ce0811001800000000000000341111000100000000000000000000008c111100010000000000000000000000b30811001b0000000000000094111100010000000000000000000000ac111100010000000000000000000000a10811001200000000000000b4111100010000000000000000000000cc11110001000000000000000000000090081100110000000000000034111100010000000000000000000000d41111000200000000000000000000007c081100140000000000000034111100010000000000000000000000e41111000100000000000000000000005e0811001e0000000000000034111100010000000000000000000000ec1111000100000000000000000000004a081100140000000000000034111100010000000000000000000000f41111000100000000000000000000002e0811001c0000000000000034111100010000000000000000000000fc111100010000000000000000000000140811001a000000000000003411110001000000000000000000000004121100010000000000000000000000fb0711001900000000000000341111000100000000000000000000000c121100010000000000000000000000de0711001d000000000000003411110001000000000000000000000014121100010000000000000000000000a807110036000000000000001c121100010000000000000000000000341211000100000000000000000000008d0711001b00000000000000341111000100000000000000000000003c12110001000000000000000000000065071100280000000000000034111100010000000000000000000000441211000100000000000000000000004c0711001900000000000000341111000100000000000000000000004c121100010000000000000000000000350711001700000000000000541211000100000000000000000000006c1211000100000000000000000000001b0711001a000000000000005412110001000000000000000000000074121100020000000000000000000000fe0611001d000000000000003411110001000000000000000000000084121100010000000000000000000000df0611001f00000000000000341111000100000000000000000000008c121100010000000000000000000000b806110027000000000000003411110001000000000000000000000094121100010000000000000000000000900611002800000000000000341111000100000000000000000000009c1211000100000000000000000000006f061100210000000000000034111100010000000000000000000000a412110001000000000000000000000047061100280000000000000034111100010000000000000000000000ac1211000100000000000000000000001e061100290000000000000034111100010000000000000000000000b4121100010000000000000000000000f8051100260000000000000034111100010000000000000000000000bc121100010000000000000000000000bb0712000300000000000000d5f711000e000000db1b110026000000b91b110022000000841b11003500000000000000bb0712000300000000000000839a1100030000004c1b1100380000001a1b110032000000f41a110026000000c61a11002e0000008f1a1100370000005a1a1100350000002e1a11002c000000011a11002d000000b21911004f00000000000000bb0712000300000000000000a71911000b0000006b1911003c00000000000000bb0712000300000000000000cfc911000c0000002719110044000000d41811003f0000001319110014000000ac1811002800000088181100240000005018110038000000fb17110055000000af1711004c000000551711005a0000002d1711002800000000000000bb0712000300000000000000c824110006000000de1611004f000000921611004c0000005016110042000000021611004e00000000000000bb0712000300000000000000c9e9110007000000ad151100550000004b15110059000000a4151100090000000315110048000000ae141100550000005b141100530000000714110054000000b71311005000000065131100520000001213110053000000c41211004e000000205365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206d657373616765732063616e2062652073656e7420627920612063616e6469646174652e205365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206368616e6e656c732061207061726174687265616420697320616c6c6f77656420746f206f70656e2e205365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206368616e6e656c7320612070617261636861696e20697320616c6c6f77656420746f206f70656e2e205365747320746865206d6178696d756d2073697a65206f662061206d657373616765207468617420636f756c6420657665722062652070757420696e746f20616e2048524d50206368616e6e656c2e205365747320746865206d6178696d756d206e756d626572206f6620696e626f756e642048524d50206368616e6e656c732061207061726174687265616420697320616c6c6f77656420746f206163636570742e205365747320746865206d6178696d756d206e756d626572206f6620696e626f756e642048524d50206368616e6e656c7320612070617261636861696e20697320616c6c6f77656420746f206163636570742e205365747320746865206d6178696d756d20746f74616c2073697a65206f66206d6573736167657320696e20627974657320616c6c6f77656420696e20616e2048524d50206368616e6e656c206174206f6e63652e205365747320746865206d6178696d756d206e756d626572206f66206d6573736167657320616c6c6f77656420696e20616e2048524d50206368616e6e656c206174206f6e63652e20536574732074686520616d6f756e74206f662066756e647320746861742074686520726563697069656e742073686f756c642070726f7669646520666f7220616363657074696e67206f70656e696e6720616e2048524d50206368616e6e656c2e20536574732074686520616d6f756e74206f662066756e64732074686174207468652073656e6465722073686f756c642070726f7669646520666f72206f70656e696e6720616e2048524d50206368616e6e656c2e205365747320746865206e756d626572206f662073657373696f6e7320616674657220776869636820616e2048524d50206f70656e206368616e6e656c207265717565737420657870697265732e205365747320746865206d6178696d756d206e756d626572206f66206d65737361676573207468617420612063616e6469646174652063616e20636f6e7461696e2e205365747320746865206d6178696d756d2073697a65206f6620616e20757077617264206d65737361676520746861742063616e2062652073656e7420627920612063616e6469646174652e20536574732074686520736f6674206c696d697420666f7220746865207068617365206f66206469737061746368696e6720646973706174636861626c6520757077617264206d657373616765732e205365742074686520637269746963616c20646f776e77617264206d6573736167652073697a652e205365747320746865206d6178696d756d20746f74616c2073697a65206f66206974656d7320746861742063616e2070726573656e7420696e206120757077617264206469737061746368207175657565206174206f6e63652e205365747320746865206d6178696d756d206974656d7320746861742063616e2070726573656e7420696e206120757077617264206469737061746368207175657565206174206f6e63652e2053657420746865206e756d626572206f662073616d706c657320746f20646f206f66207468652052656c61795652464d6f64756c6f20617070726f76616c2061737369676e6d656e7420637269746572696f6e2e2053657420746865206e756d626572206f662076616c696461746f7273206e656564656420746f20617070726f7665206120626c6f636b2e2053657420746865207a65726f74682064656c6179207472616e6368652077696474682e205365742074686520746f74616c206e756d626572206f662064656c6179207472616e636865732e2053657420746865206e6f2073686f7720736c6f74732c20696e206e756d626572206f66206e756d626572206f6620636f6e73656e73757320736c6f74732e204d757374206265206174206c6561737420312e2053657420746865206469737075746520706572696f642c20696e206e756d626572206f662073657373696f6e7320746f206b65657020666f722064697370757465732e2053657420746865206d6178696d756d206e756d626572206f662076616c696461746f727320746f2061737369676e20746f20616e7920636f72652e4f7074696f6e3c7533323e2053657420746865207363686564756c696e67206c6f6f6b61686561642c20696e206578706563746564206e756d626572206f6620626c6f636b73206174207065616b207468726f7567687075742e205365742074686520617661696c6162696c69747920706572696f6420666f722070617261746872656164732e205365742074686520617661696c6162696c69747920706572696f6420666f722070617261636861696e732e20536574207468652070617261636861696e2076616c696461746f722d67726f757020726f746174696f6e206672657175656e63792053657420746865206e756d626572206f66207265747269657320666f72206120706172746963756c617220706172617468726561642e2053657420746865206e756d626572206f66207061726174687265616420657865637574696f6e20636f7265732e2053657420746865206d6178206865616420646174612073697a6520666f722070617261732e2053657420746865206d617820504f5620626c6f636b2073697a6520666f7220696e636f6d696e672075706772616465732e2053657420746865206d61782076616c69646174696f6e20636f64652073697a6520666f7220696e636f6d696e672075706772616465732e205365742074686520616363657074616e636520706572696f6420666f7220616e20696e636c756465642063616e6469646174652e20536574207468652076616c69646174696f6e20757067726164652064656c61792e20536574207468652076616c69646174696f6e2075706772616465206672657175656e63792e00000000000000c60a11000c0000000000000000000000b41c11002100000000000000000000000000000000000000000000000000000000000000c41a1200d81c11000000000000000000e81c110001000000000000000100000000000000b90a11000d0000000000000000000000b41c11002100000000000000000000000000000000000000000000000000000000000000c41a1200f01c11000000000000000000001d1100010000000000000000000000486f7374436f6e66696775726174696f6e3c543a3a426c6f636b4e756d6265723e0000002a0000000000000001000000b50000003d1d1100320000002a000000000000000100000093000000081d1100350000002050656e64696e6720636f6e66696775726174696f6e2028696620616e792920666f7220746865206e6578742073657373696f6e2e205468652061637469766520636f6e66696775726174696f6e20666f72207468652063757272656e742073657373696f6e2e50726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b20716564000000e81d1100650000005f01000011000000891e11003d0000004d1e11002d0000007a1e11000c000000861e110003000000e81d11006500000066010000110000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e352f7372632f636f6d706163742e7273617373657274696f6e206661696c65643a2060286c656674203d3d20726967687429600a20206c6566743a2060602c0a2072696768743a2060603a20736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b207165640000e81d1100650000008b0100001100000000000000000000000000000000000000e81d1100650000009201000011000000a828120094000000c40a00002c00000090271200950000005a02000009000000617373657274696f6e206661696c65643a2073656c662e686569676874203e20300000009027120095000000d6000000090000009027120095000000160500005700000090271200950000009302000009000000617373657274696f6e206661696c65643a2073656c662e6c656e2829203c204341504143495459009027120095000000940200000900000090271200950000002705000051000000526571756972655375646f0000000000702011000400000000000000742011000100000000000000000000008c2011000a0000000000000000000000dc2011001500000000000000f4201100020000000000000000000000242111000a00000000000000000000007421110007000000000000007c21110001000000000000000000000094211100090000000000000000000000dc2111000700000000000000e4211100020000000000000000000000142211000b000000000000007375646f000000003c23110004000000000000004023110018000000c62311004e000000c41a120000000000b709120034000000c41a120000000000ac0412000b000000d122110008000000d922110019000000f2221100180000000a231100320000004b0512000c0000007375646f5f756e636865636b65645f776569676874000000000000003c2311000400000000000000402311001800000000000000c12411000700000000000000c824110006000000c62311004e000000142411004c000000602411002d000000c41a120000000000b709120034000000c41a120000000000ac0412000b000000d1221100080000008d241100340000004b0512000c0000007365745f6b65790000000000bb071200030000000000000011db110023000000582311005d000000c41a120000000000b709120034000000c41a120000000000ac0412000b000000d122110008000000d922110019000000b5231100110000004b0512000c0000007375646f5f6173000000000081dd1100030000000000000011db110023000000000000003c231100040000000000000040231100180000006c22110054000000c022110011000000c41a120000000000b709120034000000c41a120000000000ac0412000b000000d122110008000000d922110019000000f2221100180000000a231100320000004b0512000c0000002041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d206120676976656e206163636f756e742e202d204f2831292e202d204c696d697465642073746f726167652072656164732e202d204f6e6520444220777269746520286576656e74292e202d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e63616c6c426f783c3c5420617320436f6e6669673e3a3a43616c6c3e2041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e202d204f6e65204442206368616e67652e2041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e20546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865205375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e202d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e5f776569676874576569676874000000000000789a1100030000000000000000000000be0712000c00000000000000000000000000000000000000000000000000000000000000c41a1200282511000000000000000000382511000100000000000000010000002a0000000000000001000000b600000040251100210000002054686520604163636f756e74496460206f6620746865207375646f206b65792e00000000000000e82511000500000000000000f0251100010000000000000000000000f8251100010000000000000000000000002611000a0000000000000004b211000100000000000000000000000c261100010000000000000000000000142611000a00000000000000f0251100010000000000000000000000f825110001000000000000005375646964000000812611000e0000005e261100230000004b65794368616e67656400001e261100400000005375646f4173446f6e6520546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e2041207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d4469737061746368526573756c7400a02611005b00000074000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f7375646f2f7372632f6c69622e72730000000000b41f11000b0000000000000018271100010000000000000020271100200000002053656e646572206d75737420626520746865205375646f206163636f756e742a00000000000000010000003e00000050d211006f0000007d000000270000002a00000000000000010000003f00000050d211006f0000008c0000003400000050d211006f000000a00000002900000050d211006f000000b40000001f00000050d211006f000000c000000030000000436865636b5370656356657273696f6ec82711000e00000054656c65706f72742066726f6d200000512811004f00000033000000010000007375646f5f65737461626c6973685f68726d705f6368616e6e656c7375646f5f71756575655f646f776e776172645f78636d7375646f5f7363686564756c655f706172615f636c65616e75707375646f5f7363686564756c655f706172615f696e697469616c697a652f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f70617261735f7375646f5f777261707065722e727300000000f42811000f00000000000000042911000100000000000000000000000c291100150000000000000024291100020000000000000000000000ac3a11001100000000000000c03a1100010000000000000050617261446f65736e744578697374009729110039000000457863656564734d61784d65737361676553697a65000000342911005a0000008e29110009000000204120444d50206d65737361676520636f756c646e27742062652073656e742062656361757365206974206578636565647320746865206d6178696d756d2073697a6520616c6c6f77656420666f72206120646f776e77617264206d6573736167652e20546865207370656369666965642070617261636861696e206f722070617261746872656164206973206e6f7420726567697374657265642e00000000342811001d00000000000000802a1100020000000000000000000000b02a11000100000000000000000000001a2811001a00000000000000b82a1100010000000000000000000000d02a1100010000000000000000000000032811001700000000000000d82a1100020000000000000000000000082b1100040000000000000000000000e82711001b00000000000000282b1100040000000000000000000000882b1100040000000000000000000000dc2512000200000000000000e8c811000600000000000000ba2d11000700000000000000c12d11000f000000762d11004400000000000000dc2512000200000000000000e8c8110006000000332d11004300000000000000dc2512000200000000000000e8c811000600000000000000b49011000300000000000000222d1100110000007d2c110027000000c41a120000000000a42c11005a000000fe2c11002400000000000000485011000600000000000000e8c811000600000000000000fa5111000900000000000000e8c811000600000000000000612c11000c00000000000000839a110003000000000000006d2c11001000000000000000839a110003000000a82b110041000000c41a120000000000e92b1100560000003f2c11002200000020466f72636566756c6c792065737461626c6973682061206368616e6e656c2066726f6d207468652073656e64657220746f2074686520726563697069656e742e2054686973206973206571756976616c656e7420746f2073656e64696e6720616e206048726d703a3a68726d705f696e69745f6f70656e5f6368616e6e656c602065787472696e73696320666f6c6c6f776564206279206048726d703a3a68726d705f6163636570745f6f70656e5f6368616e6e656c602e6d61785f63617061636974796d61785f6d6573736167655f73697a652053656e64206120646f776e776172642058434d20746f2074686520676976656e20706172612e2054686520676976656e2070617261636861696e2073686f756c6420657869737420616e6420746865207061796c6f61642073686f756c64206e6f74206578636565642074686520707265636f6e666967757265642073697a652060636f6e6669672e6d61785f646f776e776172645f6d6573736167655f73697a65602e78636d3a3a56657273696f6e656458636d205363686564756c652061207061726120746f20626520636c65616e656420757020617420746865207374617274206f6620746865206e6578742073657373696f6e2e205363686564756c652061207061726120746f20626520696e697469616c697a656420617420746865207374617274206f6620746865206e6578742073657373696f6e2e67656e657369735061726147656e6573697341726773ffffff1f092f1100160000001f2f1100160000007c2e11005a000000b401000009000000d62e11002d000000032f110003000000062f1100030000000000000020000000000000000200000000000000020000000000000003000000010000002000000008000000020000000000000000000000020000000300000002000000200000000000000002000000000000000200000000000000030000007c2e11005a000000bd010000090000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e31372e342f7372632f706f696e7465722e727342697450747220726567696f6e2063616e6e6f7420777261702074686520616464726573732073706163653a20202b20203d204269745074722063616e6e6f7420616464726573732020626974733b20746865206d6178696d756d20697320436865636b576569676874426164206d616e6461746f7279417574686f72556e636c65730000006c2f110061000000a5000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f617574686f72736869702f7372632f6c69622e7273556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e744f6c64556e636c65000000005c3011000a00000000000000683011000100000000000000000000008030110001000000000000007365745f756e636c6573000000000000a13011000a00000000000000ab3011000e00000088301100190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e00000000000000532f1100060000000000000000000000c43111003a00000000000000000000000000000000000000000000000000000000000000c41a120000321100000000000000000010321100010000000000000001000000000000004d2f1100060000000000000000000000be0712000c00000000000000000000000000000000000000000000000000000000000000c41a12001832110000000000000000002832110001000000000000000000000000000000303211000c0000000000000000000000d90712000400000000000000000000000000000000000000000000000000000000000000c41a12003c32110000000000000000004c3211000100000000000000010000005665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e00002a0000000000000001000000b70000009c321100070000002a0000000000000001000000930000008332110019000000446964536574556e636c65732a000000000000000100000093000000543211002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c657300000000001630110012000000000000006833110001000000000000000000000006301100100000000000000070331100010000000000000000000000f92f11000d0000000000000078331100010000000000000000000000ed2f11000c0000000000000080331100010000000000000000000000e12f11000c0000000000000088331100010000000000000000000000cd2f11001400000000000000903311000100000000000000000000002830110008000000000000009833110001000000000000005534110023000000343411002100000023341100110000000d34110016000000ed33110020000000ce3311001f000000a03311002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e2a00000000000000010000003f0000003a3511006b0000006800000010000000b834110082000000370400000f000000b83411008200000037040000220000002f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f63656c6c2e72732f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6e6f64652e72730000002a00000000000000010000003e0000003a3511006b000000700000000d0000003a3511006b000000750000000d0000003a3511006b000000890000003b000000f83511006500000034000000120000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f72756e74696d652f7372632f63757276652e7273486973746f726963616c53657373696f6e7300b80000005000000008000000b9000000ba0000006661696c656420746f20696e7365727420696e746f20747269654661696c656420746f2067656e657261746520686973746f726963616c20616e6365737472792d696e636c7573696f6e2070726f6f662e48617368207461626c65206361706163697479206f766572666c6f77000000043711005c0000004f000000280000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6861736862726f776e2d302e382e302f7372632f7261772f6d6f642e72737672662d6e6d2d706b2f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e31372e342f7372632f736c6963652e7273000000e437110014000000f83711000400000069371100580000003801000009000000496e646578206f7574206f662072616e67653a20203e3d2078381100060000007e381100100000001c3811005c000000a6040000090000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e31372e342f7372632f736c6963652f6170692e7273496e64657820206f7574206f6620626f756e64733a200000093911004c0000005e000000010000007377617064697361626c655f706172617468726561645f726567697374726174696f6e656e61626c655f706172617468726561645f726567697374726174696f6e646572656769737465725f7061726174687265616472656769737465725f706172617468726561642f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f70617261735f7265676973747261722e7273000000000000001c3a11001100000000000000303a1100010000000000000000000000383a11000e00000000000000483a1100010000000000000000000000503a11000f00000000000000603a1100010000000000000000000000683a11000c00000000000000743a110001000000000000000000000090c0110010000000000000007c3a1100010000000000000000000000843a11001f00000000000000a43a1100010000000000000000000000ac3a11001100000000000000c03a1100010000000000000050617261416c72656164794578697374730000009c3b11001a000000496e76616c6964436861696e49640000863b110016000000496e76616c69645468726561644964006f3b110017000000436f6465546f6f4c61726765573b1100180000003a3b11001d0000005061726174687265616473526567697374726174696f6e44697361626c656400143b110026000000446566696e6974656c794e6f745761736d000000c83a11004c000000205468652076616c69646174696f6e20636f64652070726f766964656420646f65736e2774207374617274207769746820746865205761736d2066696c65206d6167696320737472696e672e20506172617468726561647320726567697374726174696f6e2069732064697361626c65642e20496e76616c69642070617261206865616420646174612073697a652e20496e76616c6964207061726120636f64652073697a652e20496e76616c696420706172617468726561642049442e20496e76616c69642070617261636861696e2049442e2050617261636861696e20616c7265616479206578697374732e0061736d01000000446562746f7273000000093911004c0000004b0000000100000000000000f63811001300000000000000b43c1100030000000000000000000000fc3c1100040000000000000000000000e13811001500000000000000c41a12000000000000000000000000001c3d1100070000000000000000000000c33811001e00000000000000c41a1200000000000000000000000000c41a1200000000000000000000000000a43811001f00000000000000c41a1200000000000000000000000000c41a1200000000000000000000000000a03811000400000000000000543d11000100000000000000000000006c3d1100080000000000000000000000dc2512000200000000000000e8c811000600000000000000fa4111000c0000000000000088cf11000800000000000000064211000f00000000000000154211000e0000001941110039000000c41a1200000000005241110055000000a741110053000000de3f110032000000c41a1200000000001040110048000000c41a1200000000005840110056000000ae40110051000000ff4011001a00000000000000d93f11000500000000000000e8c8110006000000ac3d110059000000053e1100590000005e3e110057000000c41a120000000000b53e1100580000000d3f1100500000005d3f110056000000b33f110026000000205377617020612070617261636861696e207769746820616e6f746865722070617261636861696e206f7220706172617468726561642e20546865206f726967696e206d7573742062652061206050617261636861696e602e2054686520737761702077696c6c2068617070656e206f6e6c7920696620746865726520697320616c726561647920616e206f70706f7369746520737761702070656e64696e672e204966207468657265206973206e6f742c2074686520737761702077696c6c2062652073746f72656420696e207468652070656e64696e67207377617073206d61702c20726561647920666f722061206c6174657220636f6e6669726d61746f727920737761702e20546865206050617261496460732072656d61696e206d617070656420746f207468652073616d652068656164206461746120616e6420636f646520736f2065787465726e616c20636f64652063616e2072656c79206f6e20605061726149646020746f2062652061206c6f6e672d7465726d206964656e746966696572206f662061206e6f74696f6e616c202270617261636861696e222e20486f77657665722c207468656972207363686564756c696e6720696e666f2028692e652e2077686574686572207468657927726520612070617261746872656164206f722070617261636861696e292c2061756374696f6e20696e666f726d6174696f6e20616e64207468652061756374696f6e206465706f736974206172652073776974636865642e6f7468657220446572656769737465722061207061726174687265616420616e6420726574726569766520746865206465706f7369742e204d7573742062652073656e742066726f6d2061206050617261636861696e60206f726967696e2077686963682069732063757272656e746c79206120706172617468726561642e20456e737572652074686174206265666f72652063616c6c696e672074686973207468617420616e792066756e647320796f752077616e7420656d70746965642066726f6d2074686520706172617468726561642773206163636f756e74206973206d6f766564206f75743b20616674657220746869732069742077696c6c20626520696d706f737369626c6520746f207265747265697665207468656d2028776974686f757420676f7665726e616e636520696e74657276656e74696f6e292e20526567697374657220612070617261746872656164207769746820676976656e20636f646520666f7220696d6d656469617465207573652e204d7573742062652073656e742066726f6d2061205369676e6564206f726967696e20746861742069732061626c6520746f20686176652060506172617468726561644465706f736974602072657365727665642e206067656e657369735f686561646020616e64206076616c69646174696f6e5f636f64656020617265207573656420746f20696e6974616c697a6520746865207061726174687265616427732073746174652e67656e657369735f6865616476616c69646174696f6e5f636f646556616c69646174696f6e436f64650000000000844311001e0000000000000000000000d90712000400000000000000000000000000000000000000000000000000000000000000c41a1200a44311000000000000000000b443110001000000000000000100000000000000bc4311000b0000000105000000000000e8c811000600000000000000e8c811000600000000000000000000000000000000000000c41a1200c84311000000000000000000d843110001000000000000000000000000000000f1ee1100050000000105000000000000e8c811000600000000000000d90712000400000000000000000000000000000000000000c41a1200e04311000000000000000000f043110001000000000000000000000000000000be3b1100070000000105000000000000e8c811000600000000000000be0712000c00000000000000000000000000000000000000c41a1200f84311000000000000000000084411000100000000000000010000005061726174687265616473526567697374726174696f6e456e61626c656400002a0000000000000001000000930000007f4411002800000050656e64696e6753776170002a0000000000000001000000bb00000066441100190000002a0000000000000001000000930000003c4411002a0000002a0000000000000001000000b6000000104411002c0000002055736572732077686f20686176652070616964206120706172617468726561642773206465706f7369742e204d6170206f6620616c6c20726567697374657265642070617261746872656164732f636861696e732e2050656e64696e672073776170206f7065726174696f6e732e20576865746865722070617261746872656164732061726520656e61626c6564206f72206e6f742e00b80000005000000008000000bc000000bd000000be000000bf000000c0000000c1000000c2000000e04411008200000025050000240000002f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7665632e72730000101f120087000000210200001f000000e0441100820000006504000018000000f4f311004a00000016020000150000002a00000000000000010000003f00000050d211006f000000580000001f0000000446110045000000430100000100000068726d705f636c6f73655f6368616e6e656c68726d705f6163636570745f6f70656e5f6368616e6e656c68726d705f696e69745f6f70656e5f6368616e6e656c2f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f68726d702e727300000000000000f0471100150000000000000008481100010000000000000000000000104811001f0000000000000030481100010000000000000000000000384811001b00000000000000544811000100000000000000000000005c481100230000000000000080481100010000000000000000000000884811001e00000000000000a8481100010000000000000000000000b04811002600000000000000d8481100010000000000000000000000e04811001c00000000000000fc481100010000000000000000000000044911001f00000000000000244911000100000000000000000000002c4911001c0000000000000048491100010000000000000000000000504911001c000000000000006c49110001000000000000000000000074491100210000000000000098491100010000000000000000000000a04911001e00000000000000c0491100010000000000000000000000c84911001c00000000000000e4491100010000000000000000000000ec4911001b00000000000000084a1100010000000000000000000000104a11001f00000000000000304a110001000000000000004f70656e48726d704368616e6e656c546f53656c660000000b4d1100320000004f70656e48726d704368616e6e656c496e76616c6964526563697069656e7400e84c1100230000004f70656e48726d704368616e6e656c5a65726f436170616369747900c84c1100200000004f70656e48726d704368616e6e656c4361706163697479457863656564734c696d697400974c1100310000004f70656e48726d704368616e6e656c5a65726f4d65737361676553697a6500006e4c1100290000004f70656e48726d704368616e6e656c4d65737361676553697a65457863656564734c696d69740000234c11004b0000004f70656e48726d704368616e6e656c416c7265616479457869737473084c11001b0000004f70656e48726d704368616e6e656c416c726561647952657175657374656400d34b1100350000004f70656e48726d704368616e6e656c4c696d697445786365656465648b4b11004800000041636365707448726d704368616e6e656c446f65736e744578697374524b11003900000041636365707448726d704368616e6e656c416c7265616479436f6e6669726d6564000000304b11002200000041636365707448726d704368616e6e656c4c696d697445786365656465640000e64a11004a000000436c6f736548726d704368616e6e656c556e617574686f72697a6564904a110056000000436c6f736548726d704368616e6e656c446f65736e74457869737400684a110028000000436c6f736548726d704368616e6e656c416c7265616479556e64657277617900384a11003000000020546865206368616e6e656c20636c6f7365207265717565737420697320616c7265616479207265717565737465642e20546865206368616e6e656c20746f20626520636c6f73656420646f65736e27742065786973742e20546865206f726967696e20747269657320746f20636c6f73652061206368616e6e656c207768657265206974206973206e656974686572207468652073656e646572206e6f722074686520726563697069656e742e2054686520726563697069656e7420616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616c6c6f77656420696e626f756e64206368616e6e656c732e20546865206368616e6e656c20697320616c726561647920636f6e6669726d65642e20546865206368616e6e656c2066726f6d207468652073656e64657220746f20746865206f726967696e20646f65736e27742065786973742e205468652073656e64657220616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616c6c6f776564206f7574626f756e64206368616e6e656c732e20546865726520697320616c72656164792061207265717565737420746f206f70656e207468652073616d65206368616e6e656c2e20546865206368616e6e656c20616c72656164792065786973747320546865206f70656e20726571756573742072657175657374656420746865206d6573736167652073697a65207468617420657863656564732074686520676c6f62616c206c696d69742e2054686520726571756573746564206d6178696d756d206d6573736167652073697a6520697320302e205468652072657175657374656420636170616369747920657863656564732074686520676c6f62616c206c696d69742e2054686520726571756573746564206361706163697479206973207a65726f2e2054686520726563697069656e74206973206e6f7420612076616c696420706172612e205468652073656e64657220747269656420746f206f70656e2061206368616e6e656c20746f207468656d73656c7665732e0000000446110045000000200100000100000048726d704368616e6e656c436f6e74656e747348726d7057617465726d61726b7348726d704368616e6e656c446967657374730000000000ee4511001600000000000000084e1100030000000000000000000000504e11000a0000000000000000000000d64511001800000000000000a04e1100010000000000000000000000b84e1100030000000000000000000000c44511001200000000000000d04e1100010000000000000000000000e84e1100040000000000000000000000fa5111000900000000000000e8c811000600000000000000035211001500000000000000839a11000300000000000000185211001900000000000000839a1100030000004e50110054000000a25011000c000000c41a120000000000ae501100570000000551110053000000c41a1200000000005851110045000000c41a1200000000009d51110055000000f25111000800000000000000485011000600000000000000e8c8110006000000cd4f11003d000000c41a1200000000000a5011003e00000000000000b64f11000a00000000000000c04f11000d000000084f1100560000005e4f110027000000c41a120000000000854f11003100000020496e69746961746520756e696c61746572616c20636c6f73696e67206f662061206368616e6e656c2e20546865206f726967696e206d75737420626520656974686572207468652073656e646572206f722074686520726563697069656e7420696e20746865206368616e6e656c206265696e6720636c6f7365642e2054686520636c6f737572652063616e206f6e6c792068617070656e206f6e20612073657373696f6e206368616e67652e6368616e6e656c5f696448726d704368616e6e656c49642041636365707420612070656e64696e67206f70656e206368616e6e656c20726571756573742066726f6d2074686520676976656e2073656e6465722e20546865206368616e6e656c2077696c6c206265206f70656e6564206f6e6c79206f6e20746865206e6578742073657373696f6e20626f756e646172792e73656e64657220496e697469617465206f70656e696e672061206368616e6e656c2066726f6d20612070617261636861696e20746f206120676976656e20726563697069656e74207769746820676976656e206368616e6e656c20706172616d65746572732e202d206070726f706f7365645f6d61785f636170616369747960202d2073706563696669657320686f77206d616e79206d657373616765732063616e20626520696e20746865206368616e6e656c206174206f6e63652e202d206070726f706f7365645f6d61785f6d6573736167655f73697a6560202d2073706563696669657320746865206d6178696d756d2073697a65206f6620616e79206f6620746865206d657373616765732e205468657365206e756d62657273206172652061207375626a65637420746f207468652072656c61792d636861696e20636f6e66696775726174696f6e206c696d6974732e20546865206368616e6e656c2063616e206265206f70656e6564206f6e6c792061667465722074686520726563697069656e7420636f6e6669726d7320697420616e64206f6e6c79206f6e20612073657373696f6e206368616e67652e726563697069656e7470726f706f7365645f6d61785f636170616369747970726f706f7365645f6d61785f6d6573736167655f73697a6500000000000000d88911000d000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a1200ac5611000000000000000000f889110002000000000000000100000000000000bc561100170000000105000000000000c04f11000d00000000000000d35611001600000000000000000000000000000000000000c41a1200ec5611000000000000000000fc561100060000000000000000000000000000002c5711001b0000000000000000000000475711001200000000000000000000000000000000000000000000000000000000000000c41a12005c5711000000000000000000c41a1200000000000000000001000000000000006c5711001b0000000105000000000000e8c811000600000000000000839a11000300000000000000000000000000000000000000c41a12008857110000000000000000009857110003000000000000000100000000000000b05711001f0000000105000000000000e8c811000600000000000000839a11000300000000000000000000000000000000000000c41a1200d05711000000000000000000e057110003000000000000000100000000000000f8571100180000000105000000000000c04f11000d000000000000007f2512000200000000000000000000000000000000000000c41a12001058110000000000000000002058110007000000000000000000000000000000585811001c0000000000000000000000475711001200000000000000000000000000000000000000000000000000000000000000c41a1200745811000000000000000000c41a120000000000000000000100000000000000634d11000e0000000105000000000000e8c811000600000000000000d5f711000e00000000000000000000000000000000000000c41a12008458110000000000000000009458110003000000000000000000000000000000ac5811000c0000000105000000000000c04f11000d00000000000000b85811000b00000000000000000000000000000000000000c41a1200c45811000000000000000000d458110003000000000000000000000000000000ec581100180000000105000000000000e8c81100060000000000000088f711000b00000000000000000000000000000000000000c41a1200045911000000000000000000145911000d0000000000000001000000000000007c591100170000000105000000000000e8c81100060000000000000088f711000b00000000000000000000000000000000000000c41a1200945911000000000000000000c41a120000000000000000000100000000000000504d1100130000000105000000000000c04f11000d00000000000000a45911002700000000000000000000000000000000000000c41a1200cc5911000000000000000000dc59110002000000000000000100000000000000714d1100120000000105000000000000e8c811000600000000000000ec5911002200000000000000000000000000000000000000c41a1200105a11000000000000000000205a11000700000000000000010000002a00000000000000010000004000000048726d704f70656e4368616e6e656c526571756573747348726d704f70656e4368616e6e656c526571756573740000002a000000000000000100000093000000a66211002f000000c41a1200000000002a60110030000000c41a120000000000088c11000b0000005a6011004f00000048726d704f70656e4368616e6e656c52657175657374734c6973745665633c48726d704368616e6e656c49643e0000002a0000000000000001000000c300000048726d704f70656e4368616e6e656c52657175657374436f756e74002a000000000000000100000098000000b56111005a0000000f6211005f0000006e6211003800000048726d7041636365707465644368616e6e656c52657175657374436f756e74002a000000000000000100000098000000a96011005c000000056111005b000000606111005500000048726d70436c6f73654368616e6e656c52657175657374732a000000000000000100000092000000865f110064000000ea5f110040000000c41a1200000000002a60110030000000c41a120000000000088c11000b0000005a6011004f00000048726d70436c6f73654368616e6e656c52657175657374734c6973742a0000000000000001000000c30000002a000000000000000100000093000000fa5e11002e000000088c11000b000000285f11005e00000048726d704368616e6e656c7348726d704368616e6e656c002a000000000000000100000093000000705e11002d000000088c11000b0000009d5e11005d00000048726d70496e67726573734368616e6e656c73496e6465782a000000000000000100000040000000435c110056000000995c11000b000000c41a120000000000a45c110048000000ec5c110047000000c41a120000000000df5a11000c000000335d110063000000965d11000f000000a55d110062000000075e11000f000000165e110040000000565e11001a00000048726d704567726573734368616e6e656c73496e646578002a0000000000000001000000400000005665633c496e626f756e6448726d704d6573736167653c543a3a426c6f636b4e756d6265723e3e002a000000000000000100000045000000bf5b11002b000000ea5b1100590000005665633c28543a3a426c6f636b4e756d6265722c205665633c5061726149643e293e00002a000000000000000100000045000000585a11003d000000955a11004a000000df5a11000c000000eb5a11002a000000155b11003a0000004f5b110060000000af5b110010000000204d61696e7461696e732061206d617070696e6720746861742063616e206265207573656420746f20616e7377657220746865207175657374696f6e3a20576861742070617261732073656e742061206d6573736167652061742074686520676976656e20626c6f636b206e756d62657220666f72206120676976656e2072656369657665722e20496e76617269616e74733a202d2054686520696e6e657220605665633c5061726149643e60206973206e6576657220656d7074792e202d2054686520696e6e657220605665633c5061726149643e602063616e6e6f742073746f72652074776f2073616d652060506172614964602e202d20546865206f7574657220766563746f7220697320736f7274656420617363656e64696e6720627920626c6f636b206e756d62657220616e642063616e6e6f742073746f72652074776f206974656d732077697468207468652073616d65202020626c6f636b206e756d6265722e2053746f7261676520666f7220746865206d6573736167657320666f722065616368206368616e6e656c2e20496e76617269616e743a2063616e6e6f74206265206e6f6e2d656d7074792069662074686520636f72726573706f6e64696e67206368616e6e656c20696e206048726d704368616e6e656c736020697320604e6f6e65602e20496e67726573732f65677265737320696e646578657320616c6c6f7720746f2066696e6420616c6c207468652073656e6465727320616e642072656365697665727320676976656e20746865206f70706f7369746520736964652e20492e652e2028612920696e677265737320696e64657820616c6c6f777320746f2066696e6420616c6c207468652073656e6465727320666f72206120676976656e20726563697069656e742e202862292065677265737320696e64657820616c6c6f777320746f2066696e6420616c6c2074686520726563697069656e747320666f72206120676976656e2073656e6465722e202d20666f72206561636820696e677265737320696e64657820656e74727920666f72206050602065616368206974656d2060496020696e2074686520696e6465782073686f756c642070726573656e7420696e206048726d704368616e6e656c73602020206173206028492c205029602e202d20666f7220656163682065677265737320696e64657820656e74727920666f72206050602065616368206974656d2060456020696e2074686520696e6465782073686f756c642070726573656e7420696e206048726d704368616e6e656c73602020206173206028502c204529602e202d2074686572652073686f756c64206265206e6f206f746865722064616e676c696e67206368616e6e656c7320696e206048726d704368616e6e656c73602e202d2074686520766563746f72732061726520736f727465642e2048524d50206368616e6e656c2064617461206173736f6369617465642077697468206561636820706172612e202d2065616368207061727469636970616e7420696e20746865206368616e6e656c2073686f756c642073617469736679206050617261733a3a69735f76616c69645f70617261285029602077697468696e20612073657373696f6e2e205468652048524d502077617465726d61726b206173736f6369617465642077697468206561636820706172612e202d2065616368207061726120605060207573656420686572652061732061206b65792073686f756c642073617469736679206050617261733a3a69735f76616c69645f70617261285029602077697468696e20612073657373696f6e2e204120736574206f662070656e64696e672048524d5020636c6f7365206368616e6e656c20726571756573747320746861742061726520676f696e6720746f20626520636c6f73656420647572696e67207468652073657373696f6e206368616e67652e205573656420666f7220636865636b696e67206966206120676976656e206368616e6e656c206973207265676973746572656420666f7220636c6f737572652e2054686520736574206973206163636f6d70616e6965642062792061206c69737420666f7220697465726174696f6e2e202d20546865726520617265206e6f206368616e6e656c7320746861742065786973747320696e206c69737420627574206e6f7420696e207468652073657420616e6420766963652076657273612e2054686973206d617070696e6720747261636b7320686f77206d616e79206f70656e206368616e6e656c2072657175657374732077657265206163636570746564206279206120676976656e20726563697069656e7420706172612e20496e76617269616e743a206048726d704f70656e4368616e6e656c5265717565737473602073686f756c6420636f6e7461696e207468652073616d65206e756d626572206f66206974656d732060285f2c2058296020776974682060636f6e6669726d6564602073657420746f20747275652c20617320746865206e756d626572206f66206048726d7041636365707465644368616e6e656c52657175657374436f756e746020666f72206058602e2054686973206d617070696e6720747261636b7320686f77206d616e79206f70656e206368616e6e656c2072657175657374732061726520696e6974697461746564206279206120676976656e2073656e64657220706172612e20496e76617269616e743a206048726d704f70656e4368616e6e656c5265717565737473602073686f756c6420636f6e7461696e207468652073616d65206e756d626572206f66206974656d73207468617420686173206028582c205f296020617320746865206e756d626572206f66206048726d704f70656e4368616e6e656c52657175657374436f756e746020666f72206058602e2054686520736574206f662070656e64696e672048524d50206f70656e206368616e6e656c2072657175657374732e0000000446110045000000c80100001e00000063616e277420626520604e6f6e65602064756520746f2074686520696e76617269616e74207468617420746865206c69737420636f6e7461696e73207468652073616d65206974656d7320617320746865207365743b2071656400000446110045000000c90100005a00000009641100140000001d64110030000000c663110043000000c263110003000000c563110001000000946311002e000000c263110003000000c5631100010000007468652048524d502077617465726d61726b206973206168656164207468652072656c61792d706172656e742028203e20297468652048524d502077617465726d61726b206973206e6f7420616476616e6365642072656c617469766520746f20746865206c6173742077617465726d61726b20287468652048524d502077617465726d61726b20282920646f65736e2774206c616e64206f6e206120626c6f636b2077697468206d657373616765732072656365697665644261626545717569766f636174696f6e62616265000000746411005b00000094000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f626162652f7372632f6c69622e72730000000000387a1100130000000000000028651100020000000000000000000000586511000400000000000000000000009c7a11001c000000000000002865110002000000000000000000000078651100080000000000000000000000097f110012000000000000008e6611001c00000000000000457f11000f00000000000000547f110010000000b865110043000000fb651100420000003d66110044000000816611000d000000b865110043000000fb651100420000003d66110044000000816611000d0000002f7e110044000000737e110046000000b97e110046000000ff7e11000a000000205265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e45717569766f636174696f6e50726f6f663c543a3a4865616465723e000000000000cc6a11000a00000000000000000000009c9f11000300000000000000000000000000000000000000000000000000000000000000c41a1200d86a11000000000000000000e86a110001000000000000000100000000000000f06a11000b0000000000000000000000fb6a11002700000000000000000000000000000000000000000000000000000000000000c41a1200246b11000000000000000000346b1100010000000000000001000000000000003c6b11000b00000000000000000000009c9f11000300000000000000000000000000000000000000000000000000000000000000c41a1200486b11000000000000000000586b110002000000000000000100000000000000686b11000b00000000000000000000009c9f11000300000000000000000000000000000000000000000000000000000000000000c41a1200746b11000000000000000000846b1100010000000000000001000000000000008c6b11000a0000000000000000000000966b11001600000000000000000000000000000000000000000000000000000000000000c41a1200ac6b11000000000000000000bc6b11000a0000000000000001000000000000000c6c11000f00000000000000000000001b6c11001400000000000000000000000000000000000000000000000000000000000000c41a1200306c11000000000000000000406c110001000000000000000000000000000000486c11000e0000000000000000000000966b11001600000000000000000000000000000000000000000000000000000000000000c41a1200586c11000000000000000000686c110001000000000000000100000000000000706c11000c0000000000000000000000839a11000300000000000000000000000000000000000000000000000000000000000000c41a12007c6c110000000000000000008c6c110009000000000000000100000000000000d46c1100110000000105000000000000839a11000300000000000000e56c11001b00000000000000000000000000000000000000c41a1200006d11000000000000000000106d110001000000000000000100000000000000186d11000b0000000000000000000000236d11000f00000000000000000000000000000000000000000000000000000000000000c41a1200346d11000000000000000000446d110002000000000000000000000000000000546d1100130000000000000000000000236d11000f00000000000000000000000000000000000000000000000000000000000000c41a1200686d11000000000000000000786d110003000000000000000100000000000000906d1100080000000000000000000000d5f711000e00000000000000000000000000000000000000000000000000000000000000c41a1200986d11000000000000000000a86d110005000000000000000100000045706f6368496e64657800002a0000000000000001000000b10000005274110015000000417574686f7269746965735665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e00002a000000000000000100000045000000377411001b00000047656e65736973536c6f74002a0000000000000001000000b1000000d57311003e000000137411002400000043757272656e74536c6f74002a0000000000000001000000b1000000c07311001500000052616e646f6d6e6573737363686e6f72726b656c3a3a52616e646f6d6e6573732a0000000000000001000000c4000000fa7111002e000000c41a120000000000287211000b000000c41a1200000000003372110041000000747211003e000000b272110045000000f7721100450000003c731100410000007d731100430000004e65787445706f6368436f6e6669674e657874436f6e66696744657363726970746f72002a000000000000000100000093000000d4711100260000004e65787452616e646f6d6e65737300002a0000000000000001000000c4000000bd711100170000005365676d656e74496e6465782a000000000000000100000098000000787011001f000000c41a120000000000977011003d000000d4701100400000001471110025000000c41a120000000000397111003b0000007471110042000000b671110007000000556e646572436f6e737472756374696f6e5665633c7363686e6f72726b656c3a3a52616e646f6d6e6573733e2a0000000000000001000000c50000003370110045000000496e697469616c697a65644d6179626552616e646f6d6e65737300002a000000000000000100000093000000ac6f110040000000ec6f110047000000417574686f7256726652616e646f6d6e657373002a000000000000000100000093000000bb6e110057000000126f110054000000666f1100460000004c6174656e6573732a000000000000000100000098000000d06d110036000000c41a120000000000066e1100450000004b6e1100440000008f6e11002c00000020486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e6564207570206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636b20657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e29207468617420696e636c756465732074686520565246206f75747075742067656e657261746564206174207468697320626c6f636b2e2054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c657373207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f63682072616e646f6d6e6573732e204e6578742065706f636820636f6e66696775726174696f6e2c206966206368616e6765642e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e0000000000d87411000d000000000000009c9f11000300000000000000c41a1200e87411000000000000000000f8741100020000000000000000000000087511001100000000000000197511000900000000000000c41a120024751100000000000000000034751100050000000000000045706f63684475726174696f6e0000002a0000000000000001000000c60000008c76110043000000cf7611003f0000004578706563746564426c6f636b54696d65543a3a4d6f6d656e7400002a0000000000000001000000c70000005c751100410000009d75110044000000e1751100410000002276110042000000647611002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e20546865206e756d626572206f66202a2a736c6f74732a2a207468617420616e2065706f63682074616b65732e20576520636f75706c652073657373696f6e7320746f2065706f6368732c20692e652e2077652073746172742061206e65772073657373696f6e206f6e636520746865206e65772065706f636820626567696e732e65706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b2071656400746411005b000000c40100000e000000746411005b000000cc0100000e00000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074696d657374616d702073657420696e20626c6f636b20646f65736e2774206d6174636820736c6f7420696e207365616c000000746411005b000000e7000000010000004772616e64706146696e616c69747950656e64696e674368616e67653a6772616e6470615f617574686f72697469657353746174654772616e64706145717569766f636174696f6e72656a656374696e6720756e7369676e6564207265706f72742065717569766f636174696f6e207472616e73616374696f6e2062656361757365206974206973206e6f74206c6f63616c2f696e2d626c6f636b2e61666700e47811005e000000be000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f6772616e6470612f7372632f6c69622e7273496e76616c696445717569766f636174696f6e50726f6f66496e76616c69644b65794f776e65727368697050726f6f66546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65644475706c69636174654f6666656e63655265706f72740000000000387a110013000000000000004c7a11000200000000000000000000007c7a11000400000000000000000000009c7a11001c000000000000004c7a1100020000000000000000000000b87a1100090000000000000000000000007b11000c000000000000000c7b11000200000000000000000000003c7b110007000000000000007265706f72745f65717569766f636174696f6e0000000000097f110012000000000000001b7f11002a00000000000000457f11000f00000000000000547f1100100000005d7d110043000000a07d11003e000000de7d11003f0000001d7e1100120000007265706f72745f65717569766f636174696f6e5f756e7369676e65645d7d110043000000a07d11003e000000de7d11003f0000001d7e110012000000c41a1200000000002f7e110044000000737e110046000000b97e110046000000ff7e11000a0000006e6f74655f7374616c6c6564000000003d7d11000500000000000000d5f711000e00000000000000427d11001b00000000000000d5f711000e000000747b110047000000bb7b11004a000000057c1100480000004d7c110045000000927c11004a000000dc7c11004a000000267d110017000000204e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e20546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f20626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e205468652064656c61792073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d6520746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f726765642028652e672e203130303020626c6f636b73292e20546865204752414e44504120766f746572732077696c6c20737461727420746865206e657720617574686f7269747920736574207573696e672074686520676976656e2066696e616c697a656420626c6f636b20617320626173652e204f6e6c792063616c6c61626c6520627920726f6f742e64656c6179626573745f66696e616c697a65645f626c6f636b5f6e756d626572205265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e20546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c7920626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c20617320737563682069662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e207265706f727465722e65717569766f636174696f6e5f70726f6f6645717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e6b65795f6f776e65725f70726f6f66543a3a4b65794f776e657250726f6f660000000064781100050000000000000000000000748111001b00000000000000000000000000000000000000000000000000000000000000c41a1200908111000000000000000000a081110001000000000000000100000000000000437811000d0000000000000000000000a88111002300000000000000000000000000000000000000000000000000000000000000c41a1200cc8111000000000000000000dc81110001000000000000000000000000000000e48111000a0000000000000000000000d5f711000e00000000000000000000000000000000000000000000000000000000000000c41a1200f081110000000000000000000082110001000000000000000000000000000000088211000700000000000000000000000f8211002000000000000000000000000000000000000000000000000000000000000000c41a12003082110000000000000000004082110001000000000000000000000000000000488211000c0000000000000000000000548211000500000000000000000000000000000000000000000000000000000000000000c41a12005c82110000000000000000006c821100020000000000000001000000000000007c8211000c0000000105000000000000548211000500000000000000cfc911000c00000000000000000000000000000000000000c41a12008882110000000000000000009882110004000000000000000000000053746f72656453746174653c543a3a426c6f636b4e756d6265723e002a0000000000000001000000c8000000628411002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e002a00000000000000010000009300000031841100310000004e657874466f7263656400002a000000000000000100000093000000028411002f0000005374616c6c656428543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d62657229002a000000000000000100000093000000de8311002400000043757272656e74536574496453657449640000002a0000000000000001000000b10000005683110057000000ad83110031000000536574496453657373696f6e2a000000000000000100000093000000b8821100560000000e8311001a000000c41a120000000000288311002e0000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e2054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e0000e47811005e000000f30000000100000000000000927911000b000000000000005c851100020000000000000000000000867911000c000000000000006c851100020000000000000000000000797911000d000000000000007c851100010000000000000000000000727911000700000000000000848511000100000000000000000000005a79110018000000000000008c851100010000000000000000000000427911001800000000000000948511000100000000000000000000009d79110016000000000000009c85110001000000000000005d871100420000009f8711002a000000ef861100450000003487110029000000b48611003b0000008486110030000000378611004d000000ea8511004d000000a485110046000000204120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e20416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2041206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e000000dc87110044000000bd000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f756d702e727300000000d88911000d000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a1200e88911000000000000000000f889110002000000000000000100000000000000088a1100130000000105000000000000e8c8110006000000000000001b8a11001700000000000000000000000000000000000000c41a1200348a11000000000000000000448a110006000000000000000100000000000000748a1100160000000105000000000000e8c8110006000000000000008a8a11000a00000000000000000000000000000000000000c41a1200948a11000000000000000000a48a11000b000000000000000100000000000000fc8a11000d000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a12000c8b110000000000000000001c8b110005000000000000000100000000000000448b11001a0000000000000000000000e8c811000600000000000000000000000000000000000000000000000000000000000000c41a1200608b11000000000000000000708b11000500000000000000000000004f7574676f696e6750617261730000002a000000000000000100000040000000409011003b0000007b9011003100000052656c6179446973706174636851756575657356656344657175653c5570776172644d6573736167653e00002a0000000000000001000000c90000003f8f11005c000000c41a1200000000009b8f11005e000000f98f11001d000000c41a120000000000169011002a00000052656c61794469737061746368517565756553697a65287533322c20753332292a0000000000000001000000ca0000001f8d110051000000c41a120000000000708d11003c000000ac8d110038000000c41a120000000000e48d11005d000000418e11005e0000009f8e11004f000000c41a120000000000088c11000b000000ee8e1100510000004e6565647344697370617463680000002a000000000000000100000040000000568c110046000000c41a120000000000088c11000b0000009c8c11004d000000e98c1100360000004e6578744469737061746368526f756e6453746172745769746800002a0000000000000001000000bb000000988b11005f000000f78b110011000000c41a120000000000088c11000b000000138c1100430000002054686973206973207468652070617261207468617420676574732077696c6c20676574206469737061746368656420666972737420647572696e6720746865206e6578742075707761726420646973706174636861626c6520717565756520657865637574696f6e20726f756e642e20496e76617269616e743a202d2049662060536f6d65287061726129602c207468656e20607061726160206d7573742062652070726573656e7420696e20604e656564734469737061746368602e20546865206f726465726564206c697374206f6620605061726149646073207468617420686176652061206052656c6179446973706174636851756575656020656e7472792e202d2054686520736574206f66206974656d732066726f6d207468697320766563746f722073686f756c642062652065786163746c792074686520736574206f6620746865206b65797320696e2020206052656c617944697370617463685175657565736020616e64206052656c61794469737061746368517565756553697a65602e2053697a65206f6620746865206469737061746368207175657565732e204361636865732073697a6573206f66207468652071756575657320696e206052656c617944697370617463685175657565602e204669727374206974656d20696e20746865207475706c652069732074686520636f756e74206f66206d6573736167657320616e64207365636f6e642069732074686520746f74616c206c656e6774682028696e20627974657329206f6620746865206d657373616765207061796c6f6164732e204e6f74652074686174207468697320697320616e20617578696c617279206d617070696e673a206974277320706f737369626c6520746f2074656c6c2074686520627974652073697a6520616e6420746865206e756d626572206f66206d65737361676573206f6e6c79206c6f6f6b696e67206174206052656c61794469737061746368517565756573602e2054686973206d617070696e6720697320736570617261746520746f2061766f69642074686520636f7374206f66206c6f6164696e67207468652077686f6c65206d657373616765207175657565206966206f6e6c792074686520746f74616c2073697a6520616e6420636f756e74206172652072657175697265642e202d2054686520736574206f66206b6579732073686f756c642065786163746c79206d617463682074686520736574206f66206b657973206f66206052656c61794469737061746368517565756573602e20546865206d657373616765732077616974696e6720746f2062652068616e646c6564206279207468652072656c61792d636861696e206f726967696e6174696e672066726f6d2061206365727461696e2070617261636861696e2e204e6f7465207468617420736f6d6520757077617264206d65737361676573206d696768742068617665206265656e20616c72656164792070726f6365737365642062792074686520696e636c7573696f6e206c6f6769632e20452e672e206368616e6e656c206d616e6167656d656e74206d657373616765732e20546865206d65737361676573206172652070726f63657373656420696e204649464f206f726465722e20506172617320746861742061726520746f20626520636c65616e65642075702061742074686520656e64206f66207468652073657373696f6e2e2054686520656e74726965732061726520736f7274656420617363656e64696e672062792074686520706172612069642ed79011003300000078636d706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d704661696c656420746f206465636f64652076657273696f6e65642058434d2066726f6d20757077617264206d6573736167652e56524648617368565246526573756c747672662d696e7672662d6f757400389111005d000000e3010000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f73797374656d2f7372632f6c69622e72734e6f6e44656661756c74436f6d706f736974654661696c6564546f4578747261637452756e74696d6556657273696f6e5370656356657273696f6e4e65656473546f496e637265617365496e76616c6964537065634e616d654e6f6e5a65726f526566436f756e74426c6f636b486173683a65787472696e7369635f696e6465784e756d626572446967657374506172656e744861736845787472696e73696373526f6f744576656e74734576656e74546f706963730000000000049411000a0000000000000010941100010000000000000000000000289411000100000000000000000000003094110006000000000000003894110001000000000000000000000050941100070000000000000000000000889411000e0000000000000098941100010000000000000000000000b0941100080000000000000000000000f09411000800000000000000f8941100010000000000000000000000109511000a0000000000000000000000609511001700000000000000f894110001000000000000000000000078951100080000000000000000000000b89511001700000000000000d0951100010000000000000000000000e89511000a0000000000000000000000389611000b00000000000000449611000100000000000000000000005c9611000800000000000000000000009c9611000c00000000000000a8961100010000000000000000000000c0961100080000000000000000000000009711000b000000000000000c9711000200000000000000000000003c9711000b0000000000000000000000949711000700000000000000c41a12000000000000000000000000009c9711000a0000000000000066696c6c5f626c6f636b0000000000004fa01100060000000000000055a01100070000000da011004200000072656d61726b00000000000006a0110007000000000000000d9f1100070000009f9f11001b000000c41a120000000000ac0412000b0000006998110009000000ba9f110038000000f29f1100140000004b0512000c0000007365745f686561705f7061676573000000000000979f110005000000000000009c9f110003000000149f11003f000000c41a120000000000ac0412000b0000006998110009000000539f110013000000669f1100190000007f9f1100180000004b0512000c0000007365745f636f646500000000099f110004000000000000000d9f110007000000c19d11001a000000c41a120000000000ac0412000b000000db9d11004d000000379d110022000000289e11005e000000599d11000b000000869e11005f000000e59e1100240000004b0512000c0000007365745f636f64655f776974686f75745f636865636b7300cc9c110047000000c41a120000000000ac0412000b000000139d110024000000379d110022000000599d11000b000000649d11005d0000004b0512000c0000007365745f6368616e6765735f747269655f636f6e6669670000000000999c11001300000000000000ac9c110020000000cc9b110028000000c41a120000000000ac0412000b0000006998110009000000f49b11002c000000209c110036000000569c110019000000310712000d0000006f9c11002a0000004b0512000c0000007365745f73746f726167650000000000ba9b11000500000000000000bf9b11000d0000003e9b11001b000000c41a120000000000ac0412000b000000599b1100250000007e9b11001f0000009d9b11001d000000189b11001a0000004b0512000c0000006b696c6c5f73746f7261676500000000329b11000400000000000000369b110008000000869a11001e000000c41a120000000000ac0412000b000000a49a11003f000000e39a110019000000fc9a11001c000000189b11001a0000004b0512000c0000006b696c6c5f7072656669780000000000729a11000600000000000000789a110003000000000000007b9a11000800000000000000839a1100030000000199110045000000c41a120000000000469911004f0000009599110050000000c41a120000000000ac0412000b000000e5991100370000001c9a110019000000359a11001d000000529a1100200000004b0512000c0000007375696369646500ec971100590000004598110024000000c41a120000000000ac0412000b0000006998110009000000729811001f0000009198110015000000a698110017000000bd981100440000004b0512000c000000204b696c6c207468652073656e64696e67206163636f756e742c20617373756d696e6720746865726520617265206e6f207265666572656e636573206f75747374616e64696e6720616e642074686520636f6d706f73697465206461746120697320657175616c20746f206974732064656661756c742076616c75652e202d20604f28312960202d20312073746f72616765207265616420616e642064656c6574696f6e2e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2042617365205765696768743a20382e36323620c2b573204e6f2044422052656164206f72205772697465206f7065726174696f6e7320626563617573652063616c6c657220697320616c726561647920696e206f7665726c6179204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e202a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465722074686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e202d20604f285029602077686572652060506020616d6f756e74206f66206b657973207769746820707265666978206070726566697860202d206050602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a20302e383334202a205020c2b573202d205772697465733a204e756d626572206f66207375626b657973202b20317072656669784b65795f7375626b657973753332204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e202d20604f28494b296020776865726520604960206c656e677468206f6620606b6579736020616e6420604b60206c656e677468206f66206f6e65206b6579202d206049602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a202e333738202a206920c2b573202d205772697465733a204e756d626572206f66206974656d736b6579735665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e202d20604f2849296020776865726520604960206c656e677468206f6620606974656d7360202d206049602073746f72616765207772697465732028604f28312960292e202d2042617365205765696768743a20302e353638202a206920c2b5736974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e202d20312073746f72616765207772697465206f722064656c6574652028636f64656320604f28312960292e202d20312063616c6c20746f20606465706f7369745f6c6f67603a20557365732060617070656e6460204150492c20736f204f283129202d2042617365205765696768743a20372e32313820c2b57320202020202d205772697465733a204368616e67657320547269652c2053797374656d204469676573746368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e202d20604f2843296020776865726520604360206c656e677468206f662060636f646560202d20312073746f726167652077726974652028636f64656320604f28432960292e202d2031206576656e742e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2053657420746865206e65772072756e74696d6520636f64652e202d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f646560202d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e6020776869636820697320657870656e73697665292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c792074686973206973207665727920657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e636f64655665633c75383e2053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e202d20312073746f726167652077726974652e202d2042617365205765696768743a20312e34303520c2b573202d203120777269746520746f20484541505f50414745537061676573753634204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e202d2042617365205765696768743a20302e36363520c2b5732c20696e646570656e64656e74206f662072656d61726b206c656e6774682e202d204e6f204442206f7065726174696f6e732e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f50657262696c6c000000002ce41100070000000102000000000000be0712000c00000000000000dca511002500000000000000000000000000000000000000c41a120004a61100000000000000000014a61100010000000000000001000000000000001ca611000e0000000000000000000000839a11000300000000000000000000000000000000000000000000000000000000000000c41a12002ca6110000000000000000003ca611000100000000000000000000000000000044a611000b00000000000000000000004fa611000e00000000000000000000000000000000000000000000000000000000000000c41a120060a61100000000000000000070a611000100000000000000010000000000000078a61100100000000000000000000000839a11000300000000000000000000000000000000000000000000000000000000000000c41a120088a61100000000000000000098a6110001000000000000000000000000000000fd911100090000000105000000000000d5f711000e00000000000000a0a611000700000000000000000000000000000000000000c41a1200a8a611000000000000000000b8a6110001000000000000000100000000000000c0a611000d0000000105000000000000839a110003000000000000000d9f11000700000000000000000000000000000000000000c41a1200d0a611000000000000000000e0a611000100000000000000010000000000000016921100060000000000000000000000d5f711000e00000000000000000000000000000000000000000000000000000000000000c41a1200e8a611000000000000000000f8a6110001000000000000000100000000000000229211000a0000000000000000000000a0a611000700000000000000000000000000000000000000000000000000000000000000c41a120000a71100000000000000000010a71100010000000000000001000000000000002c9211000e0000000000000000000000a0a611000700000000000000000000000000000000000000000000000000000000000000c41a120018a71100000000000000000028a71100010000000000000001000000000000001c92110006000000000000000000000030a711000b00000000000000000000000000000000000000000000000000000000000000c41a12003ca7110000000000000000004ca71100010000000000000001000000000000003a92110006000000000000000000000054a711002300000000000000000000000000000000000000000000000000000000000000c41a120078a71100000000000000000088a711000100000000000000010000000000000090a711000a00000000000000000000009aa711000a00000000000000000000000000000000000000000000000000000000000000c41a1200a4a711000000000000000000b4a7110001000000000000000100000000000000409211000b0000000102000000000000a0a611000700000000000000bca711002100000000000000000000000000000000000000c41a1200e0a711000000000000000000f0a711000a00000000000000010000000000000040a8110012000000000000000000000052a811001600000000000000000000000000000000000000000000000000000000000000c41a120068a81100000000000000000078a811000100000000000000000000000000000080a81100150000000000000000000000d90712000400000000000000000000000000000000000000000000000000000000000000c41a120098a811000000000000000000a8a8110001000000000000000100000000000000b0a811000e0000000000000000000000bea811000500000000000000000000000000000000000000000000000000000000000000c41a1200c4a811000000000000000000d4a811000100000000000000000000004163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e0000002a0000000000000001000000cb00000022ae11003a00000045787472696e736963436f756e7400002a000000000000000100000093000000f4ad11002e000000426c6f636b576569676874436f6e73756d65645765696768740000002a0000000000000001000000cc000000d2ad110022000000416c6c45787472696e736963734c656e2a00000000000000010000009300000082ad110050000000543a3a48617368002a0000000000000001000000420000005cad11002600000045787472696e736963446174610000002a0000000000000001000000460000000dad11004f0000002a000000000000000100000098000000cbac1100420000002a000000000000000100000042000000afac11001c0000002a0000000000000001000000420000006aac1100450000004469676573744f663c543e002a0000000000000001000000cd0000002eac11003c0000005665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e002a00000000000000010000004500000006ac1100280000004576656e74436f756e744576656e74496e6465782a000000000000000100000098000000d8ab11002e0000005665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e0000002a0000000000000001000000a1000000a6a9110049000000efa9110025000000c41a12000000000014aa11005400000068aa110051000000b9aa110039000000c41a120000000000f2aa11005300000045ab11005300000098ab1100400000004c61737452756e74696d65557067726164654c61737452756e74696d6555706772616465496e666f2a00000000000000010000009300000051a91100550000005570677261646564546f553332526566436f756e740000002a000000000000000100000093000000fea8110053000000457865637574696f6e50686173655068617365002a000000000000000100000093000000dca81100220000002054686520657865637574696f6e207068617365206f662074686520626c6f636b2e2054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e2053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2045787472696e7369637320726f6f74206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e205468652063757272656e742077656967687420666f722074686520626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e0000000004af11000e00000000000000d5f711000e00000000000000c41a120014af1100000000000000000024af11000100000000000000000000002caf1100080000000000000034af11000f00000000000000c41a120044af1100000000000000000054af11000100000000000000000000005caf11000c0000000000000068af11001400000000000000c41a12007caf110000000000000000008caf11000100000000000000426c6f636b48617368436f756e7400002a0000000000000001000000ce0000002eb0110036000000446257656967687452756e74696d654462576569676874002a0000000000000001000000cf000000ecaf110042000000426c6f636b576569676874736c696d6974733a3a426c6f636b576569676874732a0000000000000001000000d000000094af110058000000205468652077656967687420636f6e66696775726174696f6e20286c696d697473202620626173652076616c7565732920666f72206561636820636c617373206f662065787472696e7369637320616e6420626c6f636b2e2054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e20546865206d6178696d756d206e756d626572206f6620626c6f636b7320746f20616c6c6f7720696e206d6f7274616c20657261732e4e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b207165642a00000000000000010000000e000000389111005d0000001b0400000e000000389111005d0000002304000016000000000000009cb111001000000000000000acb11100010000000000000000000000b4b11100010000000000000000000000bcb111000f00000000000000ccb11100020000000000000000000000dcb11100010000000000000000000000e4b111000b00000000000000c41a1200000000000000000000000000f0b11100010000000000000000000000f8b111000a0000000000000004b211000100000000000000000000000cb2110001000000000000000000000014b211000d0000000000000004b2110001000000000000000000000024b21100010000000000000045787472696e73696353756363657373a0b211000c000000acb211002e00000045787472696e7369634661696c656400781c12000d000000a0b211000c0000007bb2110025000000436f6465557064617465640066b21100150000004e65774163636f756e740000fa0d12000900000047b211001f0000004b696c6c65644163636f756e740000002cb211001b00000020416e205c5b6163636f756e745c5d20776173207265617065642e2041206e6577205c5b6163636f756e745c5d2077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e205c5b6572726f722c20696e666f5c5d4469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e205c5b696e666f5c5d0000389111005d000000f70100000100000000000000df9111000f0000000000000078b31100020000000000000000000000c59111001a0000000000000088b31100020000000000000000000000a89111001d0000000000000098b31100030000000000000000000000959111001300000000000000b0b31100010000000000000000000000ee9111000f00000000000000b8b31100010000000000000033b51100450000001eb5110015000000cdb41100510000001eb51100150000004eb411003c000000c41a1200000000008ab41100430000000eb4110040000000c0b311004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e20546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d65496e76616c6964207472616e736c6174653a206661696c20746f206465636f6465206f6c642076616c7565496e76616c6964207472616e736c6174653a206661696c20746f206465636f6465206b65796672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61702f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f737570706f72742f7372632f73746f726167652f67656e657261746f722f6d61702e72733a6865617070616765733a636f64653a6368616e6765735f747269655741524e494e473a205265666572656e636564206163636f756e742064656c657465642e20546869732069732070726f6261626c792061206275672e73797374656d6672616d655f73797374656d3a5f5f50414c4c45545f56455253494f4e5f5f3a2a00000004000000040000000a0000002a000000040000000400000019000000436865636b4e6f6e6365000018b711004c00000072000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f696e697469616c697a65722e72737061726173427566666572656453657373696f6e4368616e676573000000000030b811000e00000000000000000000007f2512000200000000000000000000000000000000000000000000000000000000000000c41a120040b81100000000000000000050b811000800000000000000000000000000000069b7110016000000000000000000000090b811002a00000000000000000000000000000000000000000000000000000000000000c41a1200bcb811000000000000000000ccb81100070000000000000001000000486173496e697469616c697a656400002a00000000000000010000009200000057ba110048000000c41a1200000000009fba110047000000e6ba11005a000000c41a12000000000040bb11005d0000009dbb11005e000000fbbb1100200000005665633c427566666572656453657373696f6e4368616e67653c543a3a426c6f636b4e756d6265723e3e00002a00000000000000010000004500000004b9110056000000c41a1200000000005ab9110059000000b3b911001a000000c41a120000000000cdb911005a00000027ba1100300000002042756666657265642073657373696f6e206368616e67657320616c6f6e6720776974682074686520626c6f636b206e756d62657220617420776869636820746865792073686f756c64206265206170706c6965642e205479706963616c6c7920746869732077696c6c20626520656d707479206f72206f6e6520656c656d656e74206c6f6e672c2077697468207468652073696e676c6520656c656d656e7420686176696e67206120626c6f636b206e756d626572206f6620746865206e65787420626c6f636b2e20486f776576657220746869732069732061206056656360207265676172646c65737320746f2068616e646c6520766172696f757320656467652063617365732074686174206d6179206f636375722061742072756e74696d65207570677261646520626f756e646172696573206f7220696620676f7665726e616e636520696e74657276656e65732e2057686574686572207468652070617261636861696e73206d6f64756c65732068617665206265656e20696e697469616c697a65642077697468696e207468697320626c6f636b2e2053656d616e746963616c6c79206120626f6f6c2c2062757420746869732067756172616e746565732069742073686f756c64206e65766572206869742074686520747269652c206173207468697320697320636c656172656420696e20606f6e5f66696e616c697a656020616e64204672616d65206f7074696d697a657320604e6f6e65602076616c75657320746f20626520656d7074792076616c7565732e204173206120626f6f6c2c20607365742866616c7365296020616e64206072656d6f766528296020626f7468206c65616420746f20746865206e6578742060676574282960206265696e672066616c73652c20627574206f6e65206f66207468656d2077726974657320746f20746865207472696520616e64206f6e6520646f6573206e6f742e205468697320636f6e667573696f6e206d616b657320604f7074696f6e3c28293e60206d6f7265207375697461626c6520666f72207468652073656d616e74696373206f662074686973207661726961626c652e4d616a6f722063616e6e6f74206661696c20746f2073706c697420746865207461696c20656c656d656e74000058bc110059000000fb000000160000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e31372e342f7372632f646f6d61696e2e7273000000c4bc11004a000000d0000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f696e636c7573696f6e2e727300000000000094bf11001100000000000000a8bf1100010000000000000000000000b0bf11001c00000000000000ccbf1100010000000000000000000000d4bf11001900000000000000f0bf1100010000000000000000000000f8bf1100180000000000000010c0110001000000000000000000000018c0110014000000000000002cc0110001000000000000000000000034c01100200000000000000054c011000100000000000000000000005cc011000d000000000000006cc0110001000000000000000000000074c01100130000000000000088c0110001000000000000000000000090c011001000000000000000a0c01100010000000000000000000000a8c011001400000000000000bcc01100010000000000000000000000c4c011000f00000000000000d4c01100010000000000000000000000dcc011001b00000000000000f8c0110001000000000000000000000000c11100170000000000000018c1110001000000000000000000000020c11100110000000000000034c111000100000000000000000000003cc11100130000000000000050c1110001000000000000000000000058c111000e0000000000000068c1110001000000000000000000000070c11100110000000000000084c111000100000000000000000000008cc111001a00000000000000a8c11100010000000000000000000000b0c111000d00000000000000c0c11100010000000000000000000000c8c111002000000000000000e8c11100010000000000000000000000f0c11100150000000000000008c2110001000000000000000000000010c21100180000000000000028c2110001000000000000000000000030c21100130000000000000044c21100010000000000000057726f6e674269746669656c6453697a650000006bc611002b0000004269746669656c644475706c69636174654f72556e6f72646572656417c611005400000056616c696461746f72496e6465784f75744f66426f756e6473000000f8c511001f000000496e76616c69644269746669656c645369676e6174757265e6c5110012000000556e7363686564756c656443616e646964617465bac511002c00000043616e6469646174655363686564756c65644265666f726550617261467265656dc511004d00000057726f6e67436f6c6c61746f7200000041c511002c0000005363686564756c65644f75744f664f726465720023c511001e0000004865616444617461546f6f4c61726765f9c411002a0000005072656d6174757265436f646555706772616465dfc411001a0000004e6577436f6465546f6f4c6172676500c6c411001900000043616e6469646174654e6f74496e506172656e74436f6e7465787400a5c4110021000000556e6f63637570696564426974496e4269746669656c64005cc4110049000000496e76616c696447726f7570496e64657800000034c4110028000000496e73756666696369656e744261636b696e67000fc4110025000000496e76616c69644261636b696e670000d5c311003a0000004e6f74436f6c6c61746f725369676e6564000000bac311001b00000056616c69646174696f6e44617461486173684d69736d61746368000088c3110032000000496e7465726e616c4572726f7200000046c3110042000000496e636f7272656374446f776e776172644d65737361676548616e646c696e670fc3110037000000496e76616c69645570776172644d65737361676573000000c7c211004800000048726d7057617465726d61726b4d697368616e646c696e6782c2110045000000496e76616c69644f7574626f756e6448726d70004cc2110036000000205468652048524d50206d657373616765732073656e74206279207468652063616e646964617465206973206e6f742076616c69642e205468652063616e646964617465206469646e277420666f6c6c6f77207468652072756c6573206f662048524d502077617465726d61726b20616476616e63656d656e742e204174206c65617374206f6e6520757077617264206d6573736167652073656e7420646f6573206e6f7420706173732074686520616363657074616e63652063726974657269612e2054686520646f776e77617264206d657373616765207175657565206973206e6f742070726f63657373656420636f72726563746c792e20496e7465726e616c206572726f72206f6e6c792072657475726e6564207768656e20636f6d70696c6564207769746820646562756720617373657274696f6e732e205468652076616c69646174696f6e2064617461206861736820646f6573206e6f74206d617463682065787065637465642e20436f6c6c61746f7220646964206e6f74207369676e20506f562e20496e76616c69642028626164207369676e61747572652c20756e6b6e6f776e2076616c696461746f722c206574632e29206261636b696e672e20496e73756666696369656e7420286e6f6e2d6d616a6f7269747929206261636b696e672e20496e76616c69642067726f757020696e64657820696e20636f72652061737369676e6d656e742e20546865206269746669656c6420636f6e7461696e732061206269742072656c6174696e6720746f20616e20756e61737369676e656420617661696c6162696c69747920636f72652e2043616e646964617465206e6f7420696e20706172656e7420636f6e746578742e204f757470757420636f646520697320746f6f206c6172676520436f64652075706772616465207072656d61747572656c792e2048656164206461746120657863656564732074686520636f6e66696775726564206d6178696d756d2e205363686564756c656420636f726573206f7574206f66206f726465722e2043616e64696461746520696e636c756465642077697468207468652077726f6e6720636f6c6c61746f722e2043616e646964617465207363686564756c656420646573706974652070656e64696e672063616e64696461746520616c7265616479206578697374696e6720666f722074686520706172612e2043616e646964617465207375626d6974746564206275742070617261206e6f74207363686564756c65642e20496e76616c6964207369676e61747572652056616c696461746f7220696e646578206f7574206f6620626f756e64732e204d756c7469706c65206269746669656c6473207375626d69747465642062792073616d652076616c696461746f72206f722076616c696461746f7273206f7574206f66206f7264657220627920696e6465782e20417661696c6162696c697479206269746669656c642068617320756e65787065637465642073697a652e50617261496e636c7573696f6e50656e64696e67417661696c6162696c6974790000c4bc11004a00000092000000010000000000000080c8110015000000010500000000000095c811000e00000000000000a3c811002a00000000000000000000000000000000000000c41a1200d0c811000000000000000000e0c8110001000000000000000000000000000000a3c61100130000000105000000000000e8c811000600000000000000eec811003500000000000000000000000000000000000000c41a120024c91100000000000000000034c91100010000000000000000000000000000003cc911001e0000000105000000000000e8c8110006000000000000005ac911001400000000000000000000000000000000000000c41a120070c91100000000000000000080c911000100000000000000000000000000000088c911000a000000000000000000000092c911001000000000000000000000000000000000000000000000000000000000000000c41a1200a4c911000000000000000000b4c9110001000000000000000100000000000000bcc91100130000000000000000000000cfc911000c00000000000000000000000000000000000000000000000000000000000000c41a1200dcc911000000000000000000ecc91100010000000000000001000000417661696c6162696c6974794269746669656c647356616c696461746f72496e646578417661696c6162696c6974794269746669656c645265636f72643c543a3a426c6f636b4e756d6265723e0000002a000000000000000100000093000000b4ca11005900000050617261496443616e64696461746550656e64696e67417661696c6162696c6974793c543a3a486173682c20543a3a426c6f636b4e756d6265723e002a00000000000000010000009300000087ca11002d00000050656e64696e67417661696c6162696c697479436f6d6d69746d656e747343616e646964617465436f6d6d69746d656e747300002a00000000000000010000009300000048ca11003f00000056616c696461746f72735665633c56616c696461746f7249643e00002a0000000000000001000000d10000000fca11003900000043757272656e7453657373696f6e496e64657853657373696f6e496e646578002a000000000000000100000098000000f4c911001b000000205468652063757272656e742073657373696f6e20696e6465782e205468652063757272656e742076616c696461746f72732c2062792074686569722070617261636861696e2073657373696f6e206b6579732e2054686520636f6d6d69746d656e7473206f662063616e646964617465732070656e64696e6720617661696c6162696c6974792c206279205061726149642e2043616e646964617465732070656e64696e6720617661696c6162696c6974792062792060506172614964602e20546865206c6174657374206269746669656c6420666f7220656163682076616c696461746f722c20726566657272656420746f20627920746865697220696e64657820696e207468652076616c696461746f72207365742e000000c4bc11004a0000002c01000029000000c4bc11004a0000003c0100003100000076616c696461746f72206269746669656c647320636865636b6564206e6f7420746f20636f6e7461696e206269747320636f72726573706f6e64696e6720746f20756e6f6363757069656420636f7265733b207165640000c4bc11004a0000003e010000160000000a090909090909496e636c7573696f6e3a3a70726f636573735f6269746669656c64733a0a0909090909090950656e64696e67417661696c6162696c69747920616e642050656e64696e67417661696c6162696c697479436f6d6d69746d656e74730a09090909090909617265206f7574206f662073796e632c2064696420736f6d656f6e65206d6573732077697468207468652073746f726167653f0a090909090909706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e0000c4bc11004a000000320200001f000000e4cc11003c00000020cd11001000000030cd11000a000000c4bc11004a000000d8010000280000007468697320717565727920646f6e652061626f76653b207165640000c4bc11004a0000001d0200002600000070617261636861696e735f72756e74696d655f696e636c7573696f6e56616c69646174696f6e206f75747075747320636865636b696e6720647572696e6720696e636c7573696f6e206f6620612063616e6469646174652020666f722070617261636861696e206060206661696c65643a204f7574626f756e6448726d7000002a0000000400000004000000d200000050726f636573736564446f776e776172644d657373616765730000002a0000000400000004000000d30000005570776172644d6573736167657300002a0000000400000004000000d400000048726d7057617465726d61726b0000002a0000000400000004000000d5000000d4cd11002b00000030cd11000a00000056616c69646174696f6e206f75747075747320636865636b696e6720666f722070617261636861696e2060000000000084ce11000f0000000000000094ce1100020000000000000000000000a4ce1100010000000000000000000000acce1100110000000000000094ce1100020000000000000000000000c0ce1100010000000000000000000000c8ce1100110000000000000094ce1100020000000000000000000000dcce1100010000000000000043616e6469646174654261636b65640072cf11001600000088cf11000800000043cf11002f00000043616e646964617465496e636c7564656400000012cf11003100000043616e64696461746554696d65644f7574000000e4ce11002e00000020412063616e6469646174652074696d6564206f75742e205b63616e6469646174652c20686561645f646174615d20412063616e6469646174652077617320696e636c756465642e205b63616e6469646174652c20686561645f646174615d20412063616e64696461746520776173206261636b65642e205b63616e6469646174652c20686561645f646174615d43616e646964617465526563656970743c486173683e4865616444617461a0cf110094000000a00200000e0000002f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652e7273617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e282900101f120087000000bb04000009000000a0cf110094000000b80900000e000000617373657274696f6e206661696c65643a2073656c662e6361702829203d3d206f6c645f636170202a203200a0cf1100940000004b0800000d000000436865636b547856657273696f6e4f6363757069656420636f726520616c77617973206861732070656e64696e6720617661696c6162696c6974793b2071656498d11100540000007b0000001a000000436f756c64206e6f742064657465726d696e65207468652067726f757020726573706f6e7369626c6520666f7220636f7265206578747261637465642066726f6d206c697374206f6620636f72657320666f7220736f6d65207072696f7220626c6f636b20696e2073616d652073657373696f6e98d11100540000005c0000002300000098d11100540000005f0000001a0000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f72756e74696d655f6170695f696d706c2f76312e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a72756e74696d655f6170695f696d706c3a3a76310000002a00000000000000010000003f00000050d211006f000000630000001000000050d211006f000000630000002c0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f70687261676d656e2e72732f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6c69622e72730000003cd3110070000000650000001e0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f62616c616e63696e672e727350d211006f0000009d0000001c00000050d211006f0000009e0000001f000000dcd311005f000000ac010000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f62616c616e6365732f7372632f6c69622e7273546f74616c49737375616e63655761726e696e673a2041207573657220686173206d6f72652063757272656e6379206c6f636b73207468616e2065787065637465642e20412072756e74696d6520636f6e66696775726174696f6e2061646a7573746d656e74206d6179206265206e65656465642e70616c6c65745f62616c616e6365734c6f636b73dcd311005f00000005010000010000004578697374696e6756657374696e675363686564756c654b656570416c6976654578697374656e7469616c4465706f736974496e73756666696369656e7442616c616e63654f766572666c6f774c69717569646974795265737472696374696f6e7356657374696e6742616c616e6365446561644163636f756e74000000000094001200080000000000000000d6110002000000000000000000000030d611001b000000000000000000000008d711000b0000000000000014d711000300000000000000000000005cd71100120000000000000000000000000212000e00000000000000ecd7110003000000000000000000000034d8110006000000000000000000000064d81100130000000000000000d6110002000000000000000000000078d811000b000000000000000000000034db1100040000000000000011db1100230000000000000038db110005000000000000003ddb11001300000098dd110036000000c41a120000000000cedd11004200000010de11004800000058de1100450000009dde11002d000000c41a120000000000cade110046000000c41a120000000000ac0412000b00000010df11004c0000005cdf1100330000008fdf11005a000000c41a120000000000e9df110013000000c41a120000000000fcdf11005400000050e011004b0000009be0110035000000d0e011005800000028e11100520000007ae111003e000000b8e1110022000000dae11100510000002be211003700000062e21100450000004b0512000c0000007365745f62616c616e6365000000000081dd1100030000000000000011db1100230000000000000084dd110008000000000000003ddb110013000000000000008cdd11000c000000000000003ddb11001300000050db110025000000c41a12000000000075db110048000000bddb110042000000ffdb11004600000045dc110040000000c41a12000000000085dc11002d000000c41a120000000000ac0412000b000000b2dc110020000000d2dc11003100000003dd11001600000019dd11000f00000028dd11001a00000042dd1100190000005bdd1100260000004b0512000c000000000000000bdb1100060000000000000011db1100230000000000000034db1100040000000000000011db1100230000000000000038db110005000000000000003ddb11001300000038da1100540000008cda11000b000000ac0412000b00000097da110050000000e7da1100240000004b0512000c0000007472616e736665725f6b6565705f616c69766500d0d811005400000024d9110010000000c41a12000000000034d911002f000000c41a12000000000063d9110031000000ac0412000b00000094d911003a000000ced9110018000000e6d91100470000002dda11000b0000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e4d6f64756c652e68746d6c236d6574686f642e7472616e73666572202d2043686561706572207468616e207472616e736665722062656361757365206163636f756e742063616e6e6f74206265206b696c6c65642e202d2042617365205765696768743a2035312e3420c2b573202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374202873656e64657220697320696e206f7665726c617920616c72656164792920233c2f7765696768743e2045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e202d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e742069732020206e6f7420617373756d656420746f20626520696e20746865206f7665726c61792e736f757263653c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263656465737476616c7565436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a20202020202d204372656174696e673a2032372e353620c2b57320202020202d204b696c6c696e673a2033352e313120c2b573202d204442205765696768743a203120526561642c203120577269746520746f206077686f6077686f6e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a2037332e363420c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e74202d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e00000000003bd411000d000000000000000000000008e411000a00000000000000000000000000000000000000000000000000000000000000c41a120014e41100000000000000000024e41100010000000000000001000000000000002ce41100070000000102000000000000be0712000c0000000000000033e411001700000000000000000000000000000000000000c41a12004ce4110000000000000000005ce4110003000000000000000100000000000000bfd41100050000000102000000000000be0712000c0000000000000074e411001c00000000000000000000000000000000000000c41a120090e411000000000000000000a0e41100020000000000000001000000000000004cf211000e00000000000000000000005af211000800000000000000000000000000000000000000000000000000000000000000c41a1200b0e411000000000000000000c0e41100030000000000000001000000543a3a42616c616e636500002a00000000000000010000009f00000001e61100260000004163636f756e744163636f756e74446174613c543a3a42616c616e63653e00002a0000000000000001000000d600000096e511001b000000c41a120000000000b1e51100500000005665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e2a0000000000000001000000d70000001fe511002e0000004de51100490000002a00000000000000010000009b000000d8e411001f000000c41a120000000000f7e41100280000002053746f726167652076657273696f6e206f66207468652070616c6c65742e20546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e0000000000f4d41100120000000000000008e411000a00000000000000c41a120060e61100000000000000000070e6110001000000000000002a0000000000000001000000d800000078e611003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e0000000000000010e81100070000000000000018e8110002000000000000000000000028e8110001000000000000000000000030e81100080000000000000018e8110002000000000000000000000038e8110002000000000000000000000048e81100080000000000000050e8110003000000000000000000000068e8110001000000000000000000000070e811000a000000000000007ce8110003000000000000000000000094e81100010000000000000000000000600c1200070000000000000018e811000200000000000000000000009ce81100010000000000000000000000a4e81100080000000000000018e81100020000000000000000000000ace81100010000000000000000000000b4e811000a0000000000000018e81100020000000000000000000000c0e81100010000000000000000000000c8e811001200000000000000dce81100040000000000000000000000fce811000300000000000000456e646f77656400fa0d120009000000c9e91100070000008feb110049000000447573744c6f73740beb1100500000005beb1100340000005472616e73666572fa0d120009000000fa0d120009000000c9e9110007000000e3ea11002800000042616c616e63655365740000fa0d120009000000c9e9110007000000c9e9110007000000b0ea11003300000068ea110048000000526573657276656420ea110048000000556e72657365727665640000d6e911004a0000005265736572766552657061747269617465640000fa0d120009000000fa0d120009000000c9e9110007000000d0e911000600000014e911005400000068e91100370000009fe911002a00000020536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742e2046696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e205c5b66726f6d2c20746f2c2062616c616e63652c2064657374696e6174696f6e5f7374617475735c5d42616c616e636553746174757320536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e205c5b77686f2c2076616c75655c5d20536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e205c5b77686f2c2076616c75655c5d20536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e205c5b77686f2c206465706f7369745c5d20412062616c616e6365207761732073657420627920726f6f742e205c5b77686f2c20667265652c2072657365727665645c5d205472616e73666572207375636365656465642e205c5b66726f6d2c20746f2c2076616c75655c5d20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205c5b6163636f756e742c2062616c616e63655c5d20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e205c5b6163636f756e742c20667265655f62616c616e63655c5d0000000036d511000e00000000000000b8ec110001000000000000000000000021d511001500000000000000c0ec110001000000000000000000000019d511000800000000000000c8ec110001000000000000000000000006d511001300000000000000d0ec1100010000000000000000000000f4d411001200000000000000d8ec1100010000000000000000000000ebd411000900000000000000e0ec1100010000000000000000000000d4d411001700000000000000e8ec110001000000000000000000000044d511000b00000000000000f0ec110001000000000000001aee110027000000e8ed110032000000cbed11001d000000aded11001e00000072ed11003b0000004eed1100240000001bed110033000000f8ec1100230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c756520476f7420616e206f766572666c6f7720616674657220616464696e67204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c756553797374656d4261626554696d657374616d7042616c616e636573417574686f72736869705374616b696e674f6666656e636573486973746f726963616c53657373696f6e4772616e647061496d4f6e6c696e65417574686f72697479446973636f7665727950617261636861696e734f726967696e50617261636861696e73436f6e66696775726174696f6e496e636c7573696f6e496e636c7573696f6e496e686572656e745363686564756c65725061726173496e697469616c697a6572446d70556d7048726d7053657373696f6e496e666f52656769737472617250617261735375646f577261707065725375646f000000000074ef11000600000000000000000000007aef11001000000000000000000000000a00000000000000000000008cef11000c0000000000000000000000726f636f636f7061726974792d726f636f636f2d76310000df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1502000000f78b278be53f454c02000000af2c0297a23e6d3d01000000ed99c5acb25eedf502000000cbca25e39f14238702000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8010000000000000040787d010065cd1d00e1f505d85aae1ec0542205b0508f1f38e4750488467020d853e903603c5121d0bf760338323222a8591903402013236039cd02480ef423a82a8f0268f8d42470955c02b8dab525c05a3302d8c4962648bd1102e0b27727a855f601e8a05828e8fedf0180773929c0cacd01586d1a2af8f1be019053fb2a50d8b201d00edc2be0fca80138edbc2c48f2a001e06d9d2d80669a01c80d7e2e500f9501c0575e2f08b6900140323f30e0278d0148202031b0418a0108a3ff3120e8870120bedf32f0fb85013856c03398698401f0fda03478218301b8d87f35d8178201d8c26036183d8101b8223e37508d800188d21c38c8fc7f0168b5f93898877f01a829d139d8297f0120d6ab3ab8db7e0168ae803b389d7e0100ca9a3b68957e014368617267655472616e73616374696f6e5061796d656e745472616e73616374696f6e5061796d656e7400000000000020f2110011000000000000000000000031f211000a00000000000000000000000000000000000000000000000000000000000000c41a12003cf211000000000000000000c41a1200000000000000000001000000000000004cf211000e00000000000000000000005af211000800000000000000000000000000000000000000000000000000000000000000c41a120064f211000000000000000000c41a12000000000000000000010000004e6578744665654d756c7469706c6965724d756c7469706c696572002a0000000000000001000000d900000053746f7261676556657273696f6e52656c656173657300002a00000000000000010000009b00000000000000e4f211001200000000000000670c12000c00000000000000c41a1200f8f21100000000000000000008f3110001000000000000000000000010f311000b000000000000001bf311002900000000000000c41a120044f31100000000000000000054f3110001000000000000005472616e73616374696f6e4279746546656500002a0000000000000001000000da0000009ff3110043000000576569676874546f4665655665633c576569676874546f466565436f656666696369656e743c42616c616e63654f663c543e3e3e2a0000000000000001000000db0000005cf31100430000002054686520706f6c796e6f6d69616c2074686174206973206170706c69656420696e206f7264657220746f20646572697665206665652066726f6d207765696768742e205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e0000f4f311004a000000c4000000010000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f7363686564756c65722e7273506172615363686564756c657200000000005cf611000f00000000000000000000006bf611001800000000000000000000000000000000000000000000000000000000000000c41a120084f61100000000000000000094f6110004000000000000000100000000000000b4f611000f0000000000000000000000c3f611001400000000000000000000000000000000000000000000000000000000000000c41a1200d8f611000000000000000000e8f611000400000000000000010000000000000008f7110011000000000000000000000019f711001900000000000000000000000000000000000000000000000000000000000000c41a120034f71100000000000000000044f711000600000000000000010000000000000074f7110014000000000000000000000088f711000b00000000000000000000000000000000000000000000000000000000000000c41a120094f711000000000000000000a4f7110004000000000000000100000000000000c4f71100110000000000000000000000d5f711000e00000000000000000000000000000000000000000000000000000000000000c41a1200e4f711000000000000000000f4f7110001000000000000000100000000000000fcf7110009000000000000000000000005f811001300000000000000000000000000000000000000000000000000000000000000c41a120018f81100000000000000000028f8110003000000000000000100000056616c696461746f7247726f7570735665633c5665633c56616c696461746f72496e6465783e3e002a0000000000000001000000450000002dfc11002d000000c41a1200000000005afc110060000000bafc11006000000050617261746872656164517565756550617261746872656164436c61696d5175657565002a0000000000000001000000dc0000004dfb110046000000c41a12000000000093fb110045000000d8fb110055000000417661696c6162696c697479436f7265735665633c4f7074696f6e3c436f72654f636375706965643e3e00002a0000000000000001000000dd0000004bfa110067000000b2fa110032000000e4fa11005000000034fb110019000000c41a120000000000adf811005300000050617261746872656164436c61696d496e6465785665633c5061726149643e002a00000000000000010000004000000069f9110056000000bff911002d000000c41a120000000000ecf911005f00000053657373696f6e5374617274426c6f636b543a3a426c6f636b4e756d626572002a00000000000000010000009800000000f91100690000005363686564756c65645665633c436f726541737369676e6d656e743e2a0000000000000001000000de00000040f811006d000000c41a120000000000adf81100530000002043757272656e746c79207363686564756c656420636f726573202d20667265652062757420757020746f206265206f636375706965642e20457068656d6572616c2073746f72616765206974656d20746861742773207769706564206f6e2066696e616c697a6174696f6e2e20426f756e64656420627920746865206e756d626572206f6620636f7265733a206f6e6520666f7220656163682070617261636861696e20616e642070617261746872656164206d756c7469706c657865722e2054686520626c6f636b206e756d626572207768657265207468652073657373696f6e207374617274206f636375727265642e205573656420746f20747261636b20686f77206d616e792067726f757020726f746174696f6e732068617665206f636375727265642e20416e20696e646578207573656420746f20656e737572652074686174206f6e6c79206f6e6520636c61696d206f6e206120706172617468726561642065786973747320696e20746865207175657565206f722069732063757272656e746c79206265696e672068616e646c656420627920616e206f6363757069656420636f72652e20426f756e64656420627920746865206e756d626572206f66207061726174687265616420636f72657320616e64207363686564756c696e67206c6f6f6b61686561642e20526561736f6e61626c792c203130202a203530203d203530302e204f6e6520656e74727920666f72206561636820617661696c6162696c69747920636f72652e20456e74726965732061726520604e6f6e65602069662074686520636f7265206973206e6f742063757272656e746c79206f636375706965642e2043616e2062652074656d706f726172696c792060536f6d6560206966207363686564756c656420627574206e6f74206f636375706965642e2054686520692774682070617261636861696e2062656c6f6e677320746f20746865206927746820636f72652c2077697468207468652072656d61696e696e6720636f72657320616c6c206265696e6720706172617468726561642d6d756c7469706c65786572732e2041207175657565206f66207570636f6d696e6720636c61696d7320616e6420776869636820636f726520746865792073686f756c64206265206d6170706564206f6e746f2e20546865206e756d626572206f662071756575656420636c61696d7320697320626f756e6465642061742074686520607363686564756c696e675f6c6f6f6b616865616460206d756c7469706c69656420627920746865206e756d626572206f662070617261746872656164206d756c7469706c6578657220636f7265732e20526561736f6e61626c792c203130202a203530203d203530302e20416c6c207468652076616c696461746f722067726f7570732e204f6e6520666f72206561636820636f72652e20426f756e643a20546865206e756d626572206f6620636f726573206973207468652073756d206f6620746865206e756d62657273206f662070617261636861696e7320616e642070617261746872656164206d756c7469706c65786572732e20526561736f6e61626c792c203130302d313030302e2054686520646f6d696e616e7420666163746f7220697320746865206e756d626572206f662076616c696461746f72733a207361666520757070657220626f756e642061742031306b2e000000000000617474656d707420746f20646976696465206279207a65726f00000000000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f636f7265206973206e6f74206f7574206f6620626f756e647320616e64207765206172652067756172616e7465656420746f20626520616674657220746865206d6f737420726563656e742073657373696f6e2073746172743b2071656400f4f311004a000000df0100001e000000f4f311004a000000d30100001e0000000000000000000000f4f311004a0000004d0100002a000000f4f311004a0000005101000015000000f0151200870000003702000001000000f4f311004a0000002802000016000000b6fe11002300000058fe11005e0000005a000000010000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f696e64696365732f7372632f6c69622e7273605f5f49676e6f7265602063616e206e6576657220626520636f6e73747275637465644e6f745472616e73666572496e5573654e6f744f776e65724e6f7441737369676e65645065726d616e656e7400000000000000e4ff11000500000000000000ecff1100010000000000000000000000040012001200000000000000000000009400120008000000000000009c001200020000000000000000000000cc0012001400000000000000000000006c0112000400000000000000ecff110001000000000000000000000070011200120000000000000000000000000212000e000000000000001002120003000000000000000000000058021200150000000000000000000000000312000600000000000000ecff1100010000000000000000000000080312001100000000000000636c61696d00000000000000322612000500000000000000ca0712000f000000c20a120027000000c41a120000000000e90a120038000000c41a120000000000b709120034000000c41a120000000000210b12003d000000c41a120000000000ed06120025000000c41a120000000000ac0412000b000000b70412000a000000c1041200270000001709120019000000050512000d000000120512001400000026051200250000004b0512000c0000007472616e7366657200000000bb0712000300000000000000be0712000c00000000000000322612000500000000000000ca0712000f0000003009120058000000880912002f000000c41a120000000000b709120034000000c41a120000000000eb0912004a0000004406120058000000c41a120000000000ed06120025000000c41a120000000000ac0412000b000000b70412000a000000c104120027000000350a12001a000000050512000d0000001205120014000000310712000d0000004f0a120039000000880a12003a0000004b0512000c00000066726565dd07120026000000c41a1200000000000308120058000000c41a1200000000005b08120056000000c41a120000000000b108120044000000c41a120000000000f508120022000000c41a120000000000ac0412000b000000b70412000a000000c1041200270000001709120019000000050512000d000000120512001400000026051200250000004b0512000c000000666f7263655f7472616e73666572000000000000bb0712000300000000000000be0712000c00000000000000322612000500000000000000ca0712000f00000000000000000312000600000000000000d9071200040000005705120056000000ad0512003b000000c41a120000000000e805120032000000c41a1200000000001a0612002a00000044061200580000009c06120051000000c41a120000000000ed06120025000000c41a120000000000ac0412000b000000b70412000a000000c104120027000000120712001f000000050512000d0000001205120014000000310712000d0000003e0712003e0000007c0712003f0000004b0512000c000000667265657a650000900312005a000000c41a120000000000ea03120057000000410412001c000000c41a1200000000005d0412002c000000c41a1200000000008904120023000000c41a120000000000ac0412000b000000b70412000a000000c104120027000000e80412001d000000050512000d000000120512001400000026051200250000004b0512000c00000020467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d75737420686176652061206e6f6e2d66726f7a656e206163636f756e742060696e646578602e202d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e20456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e2023203c7765696768743e202d20604f283129602e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e6520736c617368206f7065726174696f6e2e202d204f6e65206576656e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d204442205765696768743a203120526561642f577269746520284163636f756e7473292023203c2f7765696768743e20466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e202d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e202d204442205765696768743a202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e6572296e6577543a3a4163636f756e744964543a3a4163636f756e74496e646578626f6f6c204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e496e646963657300000000000000c00b1200080000000102000000000000ca0712000f00000000000000c80b12002200000000000000000000000000000000000000c41a1200ec0b12000000000000000000fc0b12000100000000000000000000004163636f756e747328543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20626f6f6c2900002a000000000000000100000093000000040c12002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e000000000000600c12000700000000000000670c12000c00000000000000c41a1200740c12000000000000000000840c120001000000000000004465706f73697442616c616e63654f663c543e002a0000000000000001000000df0000008c0c12002b00000020546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e00000000003c0d12000d000000000000004c0d12000200000000000000000000005c0d1200010000000000000000000000640d12000a00000000000000700d1200010000000000000000000000780d1200010000000000000000000000800d12000b000000000000008c0d12000200000000000000000000009c0d12000100000000000000496e64657841737369676e6564000000fa0d120009000000ee0d12000c0000003d0e12002d000000496e64657846726565640000ee0d12000c000000030e12003a000000496e64657846726f7a656e00ee0d12000c000000fa0d120009000000a40d12004a0000002041206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e205c5b696e6465782c2077686f5c5d4163636f756e74496e6465784163636f756e7449642041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e205c5b696e6465785c5d2041206163636f756e7420696e646578207761732061737369676e65642e205c5b696e6465782c2077686f5c5d0000840e12002300000058fe11005e00000069000000010000005f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e6c6f636174696f6e20616e6420726573756c7420626567696e20657175616c3b2073616d652073697a653b207165640000e80e120041000000340000001f0000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f78636d2f78636d2d6275696c6465722f7372632f6c69622e7273000000a8281200940000008d0a00002a000000a828120094000000d30000002e000000a8281200940000009a0000003b0000005375626d697474656420424142452065717569766f636174696f6e207265706f72742e70616c6c65745f626162653a3a65717569766f636174696f6e2f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f626162652f7372632f65717569766f636174696f6e2e72735375626d6974746564204752414e4450412065717569766f636174696f6e207265706f72742e0000af1012002600000070616c6c65745f6772616e6470613a3a65717569766f636174696f6e2f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f6672616d652f6772616e6470612f7372632f65717569766f636174696f6e2e72734572726f72207375626d697474696e672065717569766f636174696f6e207265706f72743a20696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64650000004011120045000000420100001e0000004011120045000000540100001e0000004011120045000000660100001e0000004011120045000000790100001e0000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f78636d2f78636d2d6578656375746f722f7372632f6173736574732e72730000004011120045000000f70000001e0000004011120045000000010100001e0000001812120084000000ca030000220000001812120084000000e6030000150000001812120084000000f40300001e0000001812120084000000fd030000180000001812120084000000fe030000190000001812120084000000010400001a0000001812120084000000070400000d0000002f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f736c6963652e72731812120084000000210300003600000072656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b20716564002a0000000800000004000000ae00000015131200710000006a00000012000000726573756c742063616e6e6f742066697420696e20753132382f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727373756d206f6620696e7075742063616e6e6f742066697420696e206054606c656e677468206f6620696e7075742069732067726561746572207468616e207a65726f3b206974206d757374206861766520612066697273743b20716564009c14120066000000e90000000e0000009c14120066000000cc0000003000000050726f6f662070726f766964656420696e20746865206d6f64756c6520646f633b207165642e00009c14120066000000ce000000160000009c14120066000000d80000002c0000009c14120066000000da000000120000009c14120066000000ee000000300000009c14120066000000f5000000140000009c14120066000000fd000000210000009c14120066000000ff000000140000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f61726974686d657469632f7372632f6c69622e72730000f015120087000000da010000010000004661696c656420746f20636f6e7665727471202f206365696c28712f246d617829203c20246d61782e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b207165642f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e72732f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f6f70732f61726974682e727300831512006d0000000505000001000000981612006a0000006f000000090000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e727363616e6e6f74206669742061206e756d62657220696e746f207531323800981612006a0000009e0000001b000000981612006a0000008000000009000000981612006a0000009200000009000000617474656d707420746f20646976696465206279207a65726f000000981612006a000000460000000d000000616c7265616479206d757461626c7920626f72726f7765642a00000000000000010000003f000000981612006a0000007a0100001a000000981612006a0000006801000028000000981612006a0000006901000028000000616c726561647920626f72726f7765642a00000000000000010000003e000000981612006a000000710100001b000000981612006a000000720100001b000000981612006a000000d60100001c0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f61726974686d657469632f7372632f66697865645f706f696e742e7273617474656d707420746f206469766964652077697468206f766572666c6f77000000241812006e0000004e0600000100000062616265736c6f74436f756c64206e6f74206465636f64652072657175657374656420696e686572656e742074797065214241424520696e686572656e742064617461206e6f7420666f756e6442616265565246496e4f7574436f6e7465787442414245736c6f74206e756d62657263757272656e742065706f6368636861696e2072616e646f6d6e6573732a00000000000000010000000e000000701912006f000000ce0000002a0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e727300c41a120000000000f0191200020000003a20486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b207165642a00000000000000010000000e000000401a12007100000009010000260000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e7273000000c41a12000000000072756e74696d650052756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e6741726974686d657469634572726f720000002a0000000400000004000000e0000000436f6d706163745374616b654f766572666c6f77436f6d706163745461726765744f766572666c6f77436f6d70616374496e76616c6964496e646578000000000000000000000000617474656d707420746f20646976696465206279207a65726f0000007c1b12006b000000600000002b0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e72732f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f72756e74696d652f7372632f7472616974732e7273000000e71b1200660000004604000013000000426164206f726967696e43616e206e6f74206c6f6f6b757044697370617463684572726f725472616e73616374696f6e206469737061746368206973206d616e6461746f72793b207472616e73616374696f6e73206d6179206e6f742068617665206d616e6461746f727920646973706174636865732e412063616c6c20776173206c6162656c6c6564206173206d616e6461746f72792c2062757420726573756c74656420696e20616e204572726f722e5472616e73616374696f6e20776f756c6420657868617573742074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f723c7761736d3a73747269707065643e48617368206e6f7420657175616c4475706c69636174655265706f72744f6666656e63654572726f722f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e727300a81f120067000000460000001f0000002f686f6d652f6261737469616e2f2e636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f333330663563302f7072696d6974697665732f747269652f7372632f6e6f64655f636f6465632e727300a81f1200670000004f000000140000006c656e20213d20302073696e6365206c656e2025203220213d20303b20696e6e6572206861732061206c61737420656c656d656e743b2071656400006c201200640000003d000000120000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e312f7372632f6e6962626c652f6e6962626c657665632e72736c2012006400000060000000330000006c20120064000000600000000d0000006c201200640000006b0000000f0000006c201200640000006b0000003e0000006c20120064000000690000000f0000006c2012006400000091000000390000006c2012006400000091000000110000006c2012006400000093000000110000006c2012006400000094000000400000006c20120064000000940000004e00000090211200660000009800000017000000902112006600000096000000290000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e312f7372632f6e6962626c652f6e6962626c65736c6963652e727300001c2412005e0000004d0000001c000000902112006600000040000000120000009021120066000000550000003200000090211200660000004f0000002d0000009021120066000000df0000000f0000009021120066000000dd0000000f0000009021120066000000df0000003d0000006361706163697479206f766572666c6f770000008c22120057000000fb000000360000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f736d616c6c7665632d312e352e312f7372632f6c69622e7273617373657274696f6e206661696c65643a206e65775f636170203e3d206c656e008c221200570000002f0300000d000000617373657274696f6e206661696c65643a20696e646578203c3d206c656e00008c221200570000005c050000090000001c2412005e0000008d0000003c0000001c2412005e0000008d000000510000001c2412005e0000008d0000003100000094231200580000004b0000004200000094231200580000004a0000003e0000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e312f7372632f6e6f64652e727394231200580000006b0000002200000094231200580000009a000000320000009423120058000000aa0000003e0000002f686f6d652f6261737469616e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e312f7372632f6e6962626c652f6d6f642e727300001c2412005e00000086000000310000001c2412005e00000086000000420000001c2412005e00000086000000260000001c2412005e000000870000001d0000001c2412005e000000870000000d0000001c2412005e0000008e000000180000001c2412005e0000008e0000000d0000006c656e202b20707265666978206d696e757320322a736b6970706564206973206c657373207468616e20343b207165642a0000000000000001000000230000003c2512004300000076010000200000002f686f6d652f6261737469616e2f70726f6a656374732f7061726974792f706f6c6b61646f742f78636d2f7372632f76302f6d756c74695f6c6f636174696f6e2e727328295834002a0000000400000004000000e10000004e756c6c5831583258334b7573616d61416e794e616d65642a0000000400000004000000e2000000506f6c6b61646f744f6e6c794368696c64506172656e7450617261636861696e696400002a00000004000000040000001c0000004163636f756e74496433326e6574776f726b00002a0000000400000004000000e30000002a0000000400000004000000e40000004163636f756e74496e6465783634696e646578002a00000004000000040000000c0000004163636f756e744b657932306b6579002a0000000400000004000000e500000050616c6c6574496e7374616e636500002a00000004000000040000000a00000047656e6572616c496e6465782a00000004000000040000001900000047656e6572616c4b657900002a00000004000000040000000a00000063616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c756500f42612002a000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a20617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d2031000090271200950000008202000009000000617373657274696f6e206661696c65643a20696478203c204341504143495459902712009500000086020000090000002f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6e6f64652e7273617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d203100009027120095000000ec0300000900000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c756500a828120094000000210600002f0000002f6e69782f73746f72652f306b696a70386d377a677a686b72713771737334366d71793978646d383530372d727573742d312e34392e302d6e696768746c792d323032302d31302d30332d3235633863353364642f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702e7273a828120094000000d70900002e0000000041ccd2c8000b0c4f8167f7c41a1200c81110000041d8d2c8000b08000000000000000000d9a805046e616d6501d0a805d008001d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31011c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31021c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f3103226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f3104206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f3105196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31062a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f3107256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f3108236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f3109286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f310a376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f310b256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f310c286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f310d216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f310e236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f320f276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f3110206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f3111206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31121e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31131d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31141c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31151e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f3116236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f3117346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f3118286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f3119286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f311a246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f311b226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f311c296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f311d1c6578745f73746f726167655f617070656e645f76657273696f6e5f311e226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f311f1b6578745f73746f726167655f636c6561725f76657273696f6e5f3120226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31211c6578745f73746f726167655f6578697374735f76657273696f6e5f3122196578745f73746f726167655f6765745f76657273696f6e5f31231e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31241a6578745f73746f726167655f726561645f76657273696f6e5f31251a6578745f73746f726167655f726f6f745f76657273696f6e5f3126196578745f73746f726167655f7365745f76657273696f6e5f31273e73705f636f6e73656e7375735f626162653a3a636865636b5f65717569766f636174696f6e5f70726f6f663a3a6837303531316666336263336562643432283373705f72756e74696d653a3a7472616974733a3a4865616465723a3a686173683a3a6837353137643533376435323463623161298c0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5072654469676573743e3a3a6465636f64653a3a68323437363534303037303933333731302a4b73705f636f6e73656e7375735f626162653a3a636865636b5f65717569766f636174696f6e5f70726f6f663a3a7b7b636c6f737572657d7d3a3a68666238333632363534663865633562662b2b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68666639643639613761313533356133382c0e5f5f727573745f6465616c6c6f632d4c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7665726966793a3a68333962346639346162326439666262342e3c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68393363303539393433393131356462612f37616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833366365663532636533643631323362303a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6837393037646634316130393535323163313a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6831373165376537323339623261623561320c5f5f727573745f616c6c6f63330a5f5f72675f616c6c6f63340c5f5f72675f6465616c6c6f63350e5f5f727573745f7265616c6c6f63360c5f5f72675f7265616c6c6f6337135f5f727573745f616c6c6f635f7a65726f656438115f5f72675f616c6c6f635f7a65726f65643933616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68663232383265316664303965326130363a08727573745f6f6f6d3b34616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68343964666464653637363465663738643c29636f72653a3a70616e69636b696e673a3a70616e69633a3a68633838366134636234343739623036653d25616c6c6f633a3a666d743a3a666f726d61743a3a68623738366265386637656163646666353e23636f72653a3a666d743a3a77726974653a3a68623339356639343661356365326361623f36636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68633364393631653966356566663265644033636f72653a3a6f7074696f6e3a3a6578706563745f6e6f6e655f6661696c65643a3a6836383738623934383533663765636636413a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6835646333613037656635323064636230423b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6839363431363231306635333935663638433a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6834396363616164353831383833613832443c616c6c6f633a3a7665633a3a5665633c543e3a3a696e736572743a3a6173736572745f6661696c65643a3a6838636333356466316137396664663161454e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a6866373638383862656362646538396234462d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a6836616132613866383434383462356637473c616c6c6f633a3a7665633a3a5665633c543e3a3a72656d6f76653a3a6173736572745f6661696c65643a3a68643934303063383131643864363461654839636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6834643438383131306338613637356333492f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68393366356263313935363232653036314a11727573745f626567696e5f756e77696e644b2b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68303063303861616238303432336238384c313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68313238653233633939663634343661354d35636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68303565653631333331393561353262634e43636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68383164643066386231633964316464334f3f636f72653a3a736c6963653a3a696e6465783a3a736c6963655f656e645f696e6465785f6c656e5f6661696c3a3a6837336139333731313264343266626532502c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a6862303131323737613139303166396637512e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a683236323738623232353966623635383252323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6831613531303636643135626539613533534a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683265343661356330643435653031666554323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68353437326632396333336634633463395547636f72653a3a756e69636f64653a3a756e69636f64655f646174613a3a6772617068656d655f657874656e643a3a6c6f6f6b75703a3a68653363633233613639636133366436615639636f72653a3a756e69636f64653a3a7072696e7461626c653a3a69735f7072696e7461626c653a3a68303466326566626336396133323131385749636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a68653336376438326537626264323166355841636f72653a3a736c6963653a3a696e6465783a3a736c6963655f73746172745f696e6465785f6c656e5f6661696c3a3a6836303764643661326236333338643933593d636f72653a3a736c6963653a3a696e6465783a3a736c6963655f696e6465785f6f726465725f6661696c3a3a68646532663562363836663337666465325a453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68643364633532326531663238336466395b483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68636564336561393464376162633763335c2e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a68616665363433646339396632666233335d303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68663039373061303062343266356261325e323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68616430343635313033333765353764665f533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6834346365386538653631313837373935603a636f72653a3a666d743a3a6275696c646572733a3a44656275675374727563743a3a6669656c643a3a6838623566386235393037613161393562612f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a6830363630343236626135643033376261622e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a6833373831666438633261383261666661633a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6865383363653164623136626466353030643b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6832363730363337623461663237643131653a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68626138393565373565626163336363326639636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68366337643238346261376333326561316737636f72653a3a666d743a3a6275696c646572733a3a44656275675365743a3a656e7472793a3a683464613961633066643434336336323768443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683838613465393139663539653762333669313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68346533376130653466373437663238366a47636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a42696e61727920666f722069383e3a3a666d743a3a68313432343635383830643366373164636b4a636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a557070657248657820666f72206933323e3a3a666d743a3a68326330323432326266653965623539346c4a636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f7220753132383e3a3a666d743a3a68346635613865643439356334666430616d3e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68646264373064336261626566636461636e5a637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a746f5f62797465733a3a68623238393164373933353937313036646f9201637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20737562746c653a3a436f6e7374616e7454696d65457120666f7220637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a63745f65713a3a68323832356462633566303363353935387024737562746c653a3a626c61636b5f626f783a3a68633530363863653264383039656132307157637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a706f77326b3a3a6861373334373435653630303765653265727e637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a737172745f726174696f5f693a3a6838366564323834616633623261316631735c637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a66726f6d5f62797465733a3a6863353066386339313834363338643632745a637572766532353531395f64616c656b3a3a72697374726574746f3a3a52697374726574746f506f696e743a3a656c6c696761746f725f72697374726574746f5f666c61766f723a3a68353530343634626364393939616536627549637572766532353531395f64616c656b3a3a7363616c61723a3a5363616c61723a3a66726f6d5f63616e6f6e6963616c5f62797465733a3a683236363836653362313032323434326376483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837626634623965373131626163633661776c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683863346533613538613030363338633178483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6864653338373866366239373730346437793a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68656639393733643231363235623138377a3a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68303238393033663433333938396234657b3a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68383031646431626432653339366537397c3a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68623531313336343864646664383538617d3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68613132376132633134396534343666317e533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a68363637306364303763373139666632647f4d3c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68666262623133386639333266373338648001493c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68333133373031373435633636383831308101323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683636353636626339643666396161613182014273705f696f3a3a6c6f6767696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f673a3a683338363666316464643335303635386483014c6672616d655f73797374656d3a3a6c696d6974733a3a426c6f636b576569676874734275696c6465723a3a6275696c645f6f725f70616e69633a3a68316536616532323730333338326265638401206b656363616b3a3a66313630303a3a68326537333566663535353537396438638501383c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68323139306334626466323032306430378601343c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68306333333061333939373835303838618701363c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a666c7573683a3a68643361663634623433663137326237668801366d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6e65773a3a68313562343339353365343836363064388901366d65726c696e3a3a7374726f62653a3a5374726f62653132383a3a626567696e5f6f703a3a68633635373035383165663635643031658a01303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68313065323737633536313536616332388b01416d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f6d6573736167653a3a68643833303439626137313064343861648c013d6d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f7536343a3a68383965396332636431663433613961628d01426d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6368616c6c656e67655f62797465733a3a68633935643636393366363865653338358e017f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a68623638616335363362633762323834628f01437061726974795f7363616c655f636f6465633a3a636f6465633a3a636f6d706163745f656e636f64655f6c656e5f746f3a3a68323130396534613130613235343138359001663c70616c6c65745f7374616b696e673a3a6f6666636861696e5f656c656374696f6e3a3a4f6666636861696e456c656374696f6e4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686433663361643735626164623438316191012d616c6c6f633a3a7665633a3a5665633c543e3a3a696e736572743a3a68373934653135613431326232396432629201643c70616c6c65745f7374616b696e673a3a436f6d7061637441737369676e6d656e7473206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a683361386336333664363565616365646193014570616c6c65745f7374616b696e673a3a436f6d7061637441737369676e6d656e74733a3a756e697175655f746172676574733a3a683066356538646330316162346533363794017970616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7374616b696e673a3a56616c696461746f7250726566733e3a3a656e636f64653a3a686363633361396637336262663830313195014d3c70616c6c65745f7374616b696e673a3a456c656374696f6e436f6d7075746520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686665643632363764353164663030373096014470616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a656e645f7370616e3a3a686665306536646230353136656664623097013a70616c6c65745f74696d657374616d703a3a657874726163745f696e686572656e745f646174613a3a68666435653965363135313438373961669801453c737472206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6838333036303130666161383033656566990146706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733a3a686173683a3a68656461306565376262333537653537619a014973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235363a3a68333936303038653932346265656163629b013d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b576569676874733a3a6765743a3a68653763373736356463343062386462379c01323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68306432383138636463346263313761349d015e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a50617261746872656164436c61696d51756575653a3a656e71756575655f656e7472793a3a68303866393733343239643165353635659e018a0178636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3e3a3a6465636f64653a3a68346135353630626230626161303639319f017978636d3a3a76303a3a6a756e6374696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e3e3a3a6465636f64653a3a6862643231356330393038303861396639a0018a0178636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3e3a3a6465636f64653a3a6865333361343235333166356261303436a1017978636d3a3a76303a3a6a756e6374696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e3e3a3a6465636f64653a3a6834623962376339626230303865333165a2012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6832303362393332303038343564323538a301483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6866323036383134366539336137356138a4013a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6864396431343733623262313263306435a5013a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6835656530333939353665323930333464a6013a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6830346438356436306338643265383061a7013a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6864393464346363653062636131373064a801423c73705f7374643a3a57726974657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6837626137636130373063356337663931a9013b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6830313438633530643631366265636334aa013a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6834323534633961626136386135303264ab013873705f6e706f735f656c656374696f6e733a3a62616c616e63696e673a3a62616c616e63653a3a6831316665653266616466653231313730ac0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834373732386535623537643537383136ad012c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6831663461383863666662383437376234ae012e616c6c6f633a3a7665633a3a5665633c543e3a3a726573657276653a3a6832646235663236363832336239623134af014d73705f6e706f735f656c656374696f6e733a3a566f7465723c4163636f756e7449643e3a3a7472795f6e6f726d616c697a655f656c65637465643a3a6861653333653564396637653031626435b001763c78636d5f6578656375746f723a3a7472616974733a3a4973436f6e63726574653c543e2061732078636d5f6578656375746f723a3a7472616974733a3a4d61746368657346756e6769626c653c423e3e3a3a6d6174636865735f66756e6769626c653a3a6830613962326139616537663633356233b1016e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832616165326231313638653134663130b2014773705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6578745f6b65793a3a6838623065633531323034336635336330b3014273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6765743a3a6861653464373531643565666632353838b4014473705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561723a3a6830613761613762336632663631366238b501403c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862306566396133313164333338386537b6016e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835333236316431386534646335376265b7016e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6861313761316364646437396162653636b8016e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6863383938316137383130633363353731b9016e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6865656330646139393663336131656262ba013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6832383038383137373961306165366339bb01483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6830613730653036393466383962343664bc012c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6838316538333638663039653666353030bd012c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6836356130663839646639653763323433be01713c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6834373635613262396361363764323463bf017c3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6839393436623731363832393436663738c0013f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6833386230396430393531373434343065c10150706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838393439323937356139346134396134c2018b013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a5f5f47657442797465537472756374446f776e776172644d6573736167655175657565733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833366532373461323562346538613134c301433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6837616638643635363661643863393630c40156706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a4d6f64756c653c543e3a3a71756575655f646f776e776172645f6d6573736167653a3a6866623961643961633437323439633632c5014773705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f3132383a3a6838386261326336626635333635323733c601386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832633433323931313765653064313035c7014673705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f36343a3a6835316136386134303038393635326534c80137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839383864646562326362316331613234c901386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834663537373730616338376235363330ca013473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a6861373337303639616266306463636262cb013473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a6865306461366666363266343631396437cc01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6833633862393030303463653531616637cd01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832656665653064663832656232366339ce0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6836346539373439613732333862363636cf01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6838666162663131613631633162616263d001303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6863396134366331643264643363306335d1014f70616c6c65745f7374616b696e673a3a6f6666636861696e5f656c656374696f6e3a3a636f6d707574655f6f6666636861696e5f656c656374696f6e3a3a6864323062326664323631353064386631d2014b73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72616e646f6d5f736565643a3a6837633530336465333564303966646664d301386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865356261343334306562333061316432d40139636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6862323463333731313133383232666532d50137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6836363261356365323766323837393038d60137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831343230343837303464306562336538d70139636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6838663763316538613134366262383065d801746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6833316237323633323565383039353261d901453c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861643730306633353330613938316336da013273705f6e706f735f656c656374696f6e733a3a73657475705f696e707574733a3a6837313639343064653364343365363631db014173705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e5f636f72653a3a6865366161623362353835326162636333dc0168636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6838663937633261386338653137303738dd0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832313366383562623437616137646639de012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6834376461346533386161373964313264df014c73705f6e706f735f656c656374696f6e733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a7472795f6e6f726d616c697a653a3a6861393561303138613034316437313737e00137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833643962393639366238613230346535e101386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834616563316464626337613531666265e2014973705f6e706f735f656c656374696f6e733a3a68656c706572733a3a61737369676e6d656e745f726174696f5f746f5f7374616b65643a3a6863393161353762356339336438623237e3013473705f6e706f735f656c656374696f6e733a3a7265647563653a3a7265647563653a3a6839353339616365353662383430396436e4017a3c73705f61726974686d657469633a3a7065725f7468696e67733a3a5065725531362061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c5f617070726f78696d6174696f6e3a3a6830346439346430336537306132623731e50137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838353366313861353235306266333461e6014670616c6c65745f7374616b696e673a3a436f6d7061637441737369676e6d656e74733a3a66726f6d5f61737369676e6d656e743a3a6863326532643365346461376134393865e70147636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207533323e3a3a666d743a3a6861326233636161333065323165643236e80147636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207536343e3a3a666d743a3a6834393737613636346265333932353634e9012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6861396165646530663363656661393431ea01303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833336561666136636535346434633734eb0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6835333164613033396566363433303466ec0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832626537303532653561376231356235ed0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838333234633231356132303465366339ee0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6862393162363039313665623461623562ef0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6861303865663331633566663064616231f00137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865336465353135626461383065336137f10137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839376333663465306461313161623239f20137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832613531386330326534326533313833f30137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864616231653230646465313438303731f40137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834373362303239643336633635313139f50137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864366666643131613165656264653130f60137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6835666437653030656465646163646331f70137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839626463323232623364313830353437f80137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6835343764306132616633623966323636f90137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865353861366437363830646463623064fa014670616c6c65745f7374616b696e673a3a436f6d7061637441737369676e6d656e74733a3a696e746f5f61737369676e6d656e743a3a6863373632633037663236633163333638fb01443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831613363303132326433643232306230fc013773705f6e706f735f656c656374696f6e733a3a6275696c645f737570706f72745f6d61703a3a6837343663366564616364646237646366fd013673705f6e706f735f656c656374696f6e733a3a6576616c756174655f737570706f72743a3a6834313231316137383738363936623637fe017a3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a496e746f4974657261746f723e3a3a696e746f5f697465723a3a6838643466366662346639316539363866ff012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6866383734303631366665306637616262800247636f72653a3a61727261793a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72205b543b204e5d3e3a3a666d743a3a683064336431303933303933366231656281023e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a683937366161616438653766613536306482025273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a6865366139333861643935393532333230830230636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68313462663334303466316636366162382e3834303884026f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a683765643631356232373534666461373685023a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68626263306338366466376139656634318602910173705f72756e74696d653a3a67656e657269633a3a6469676573743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573743c486173683e3e3a3a6465636f64653a3a686364353336616335653738663034393287026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68363832653832396433616662333837628802483c5b543b20345d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68383832386438333330336539333939658902593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68363664333561373031336465643336308a02543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68666361653436353238396232326366648b02493c78636d5f6578656375746f723a3a6173736574733a3a4173736574496420617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a68343962663236633936383538363439348c02473c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e20617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a68346335363132393663633134663863368d0241616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365617263683a3a7365617263685f747265653a3a68333065356533646635623338626237388e0241616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365617263683a3a7365617263685f747265653a3a68373039396163653066656231666134328f0244636f72653a3a7475706c653a3a3c696d706c20636f72653a3a636d703a3a4f726420666f722028412c42293e3a3a636d703a3a6863653361356437343531356532633535900241616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365617263683a3a7365617263685f747265653a3a6837383637666134306331626563636231910241616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365617263683a3a7365617263685f747265653a3a68616362323066333366313962333964329202766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a68346434356430633462393639383030359302960173705f7374616b696e673a3a6f6666656e63653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7374616b696e673a3a6f6666656e63653a3a4f6666656e636544657461696c733c5265706f727465722c4f6666656e6465723e3e3a3a6465636f64653a3a6863623830313731646234363164346666940237616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6861383239363436356434336161626231950237616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831343734613466373834633662653664960237616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a683463306366316431656234643261376297022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68393461613764616131376361303430319802303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683061623063656638363465363464353899023f70616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68343631323636626334656565393566379a02773c70616c6c65745f6f6666656e6365733a3a5f5f476574427974655374727563745265706f72747342794b696e64496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68396562313432393033303261333033389b02433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a68346330396430323130303966393537399c027b3c70616c6c65745f6f6666656e6365733a3a5f5f47657442797465537472756374436f6e63757272656e745265706f727473496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68363235366365333035353765316539339d02753c70616c6c65745f6f6666656e6365733a3a5f5f4765744279746553747275637444656665727265644f6666656e6365733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653437643830636462363665323565399e023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68636532393637646362643461373937339f026c3c70616c6c65745f6f6666656e6365733a3a5f5f476574427974655374727563745265706f7274733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835373462666130636332656338363362a002706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6861666266333461616234643866646164a1024a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6831646434363763613533643966363539a2025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864303238343934313535363466343361a3024670616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a7265706f72745f6f725f73746f72655f6f6666656e63653a3a6866343839383038303837663935656365a402fa013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a436f6e6669673e3a3a56616c696461746f7249642c3c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a436f6e6669673e3a3a46756c6c4964656e74696669636174696f6e292c7536343e3e3a3a6f6e5f6f6666656e63653a3a6866616235626362376539643438663265a502443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834393861323336306338613732313735a602443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6866333565313762346264623832333964a7024273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a6834623134616439333436343531303266a8026b3c70616c6c65745f6f6666656e6365733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6834386261646164393634383562373733a9025b3c726f636f636f5f72756e74696d653a3a53657373696f6e4b6579732061732073705f72756e74696d653a3a7472616974733a3a4f70617175654b6579733e3a3a6765745f7261773a3a6831333436666363323566393162623837aa0248726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6672616d655f73797374656d3a3a6863303837653764616362656532303034ab024a726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696e64696365733a3a6836323638656338353734353861353639ac024b726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f62616c616e6365733a3a6830376434336261386336666235363532ad024a726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7374616b696e673a3a6837643531636665666665633134643130ae024b726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6f6666656e6365733a3a6862333638393463303932623537356338af024a726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f73657373696f6e3a3a6864326565643436323662323736323833b0024a726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6772616e6470613a3a6865656535336239663265646262333361b1024c726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696d5f6f6e6c696e653a3a6861316337656534343265613232363165b20250726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70617261636861696e735f696e636c7573696f6e3a3a6839613631646638633363363831653238b30247726f636f636f5f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7375646f3a3a6830373661623737643562386161343965b40230636f72653a3a6f70733a3a66756e6374696f6e3a3a466e3a3a63616c6c3a3a6833663734636237373931636332393631b50237636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743a3a63616c6c5f6d75743a3a6834613237323662333363396438646238b60248636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a6837336466376238393335613436663063b702673c726f636f636f5f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6833326663363835663932386638363262b802763c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6866666134663063363366643734643930b90282013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6837616333306264393661366661663336ba0282013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6838636434326138633933666233666562bb027e3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6839363432626564326139313462613366bc0284013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65723a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6830633636626366353234613338623839bd027c3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6835346162626535646565653863656265be0285013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6831633636633132336664633438663839bf02573c726f636f636f5f72756e74696d653a3a43616c6c2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6835663734323566316334383936366563c002723c726f636f636f5f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6836336264643163616139383735656561c1022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6863306363643664376131373865636238c2022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6833353361383132336639383137613134c3022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6834316561656666333364613363633138c4022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6834643335376236643230386136656536c50230636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68656536306537663261313862336633392e38343235c6022e6672616d655f73797374656d3a3a656e737572655f7369676e65643a3a6830303862343634393664613030623965c702363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6838373162353166326462633462343764c802416672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6576656e745f696e64657865643a3a6864313335316638666463633361653262c902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6837393064363935393636623261346439ca02733c6672616d655f73797374656d3a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6865323139623530396462623939386130cb024170616c6c65745f626162653a3a4d6f64756c653c543e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a6834346361386562346334343033386531cc022c6672616d655f73797374656d3a3a656e737572655f6e6f6e653a3a6862666566666534363563333563363535cd023770616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a617574686f723a3a6864383333646265656663613933343133ce024573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6578697374733a3a6832386536333235376334303161393064cf02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837613661396262666636663832343363d0025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834303066326637633862393064313665d102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864323362613261613534386264303332d2028f013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a726573657276653a3a6864663162356436346236626261633163d3027b70616c6c65745f696e64696365733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f696e64696365733a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6838353030633133333939346339376139d402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6861613663643564396139306663343165d5024a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6834646232646232636130353037376464d602386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865396436643031356564346637333731d7027f70616c6c65745f62616c616e6365733a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f62616c616e6365733a3a4572726f723c542c493e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6836636333376637646361663236393064d802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6838383333366634346436336230313032d90291013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a756e726573657276653a3a6865323333373038613336613238363264da022c6672616d655f73797374656d3a3a656e737572655f726f6f743a3a6862326536373361643138636438613733db0286013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a7472616e736665723a3a6837373031663664643636646637376237dc02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835363535393730343564623335363537dd02810170616c6c65745f617574686f72736869703a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f617574686f72736869703a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6830616436396530653763363930396537de02766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6864363238316633663932343665353563df0237616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6861346464393664613435303062343662e0023b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6863363461653639383762353530363137e1023f70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a6e6f74655f617574686f72736869703a3a6838376466396638313263613234663365e202753c70616c6c65745f7374616b696e673a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6831303038373334646465373738313634e302bc013c70616c6c65745f7374616b696e673a3a53746173684f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3e3a3a636f6e766572743a3a6832646630633938303939393037323435e4024a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6861376339666264356362663638306462e502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838333065363136393766383833316436e6025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839353634316263646436666131363232e702336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e635f7265663a3a6863323635373664396138646565626261e802336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465635f7265663a3a6834346339303662353338323533346665e9024470616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a6862653766663838346330333732306438ea02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6834633131626663303730326463313836eb02706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6865363161383338333633643864336235ec02766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6837393238613338303937383063656164ed0291013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6838663034663937613465333235613632ee0258706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e5f696e686572656e743a3a4d6f64756c653c543e3a3a696e636c7573696f6e3a3a6836653565353337363666656232646139ef0248706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a6f726967696e3a3a656e737572655f70617261636861696e3a3a6834323964373636303961633764653761f00252706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a696e69745f6f70656e5f6368616e6e656c3a3a6865393263303861313434663066353531f102a101706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6834323766303935323862643136373364f20254706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a6163636570745f6f70656e5f6368616e6e656c3a3a6838646636336136626166623034323937f302386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864356231616434366466643465393332f4024573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a617070656e643a3a6836313263303032616431656535313835f502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838616462633066393361363761643339f6026378636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a58636d3e3a3a656e636f64655f746f3a3a6835653130303162623463326331313265f7022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6833623764313666343539383964656264f8028f013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6834633638333135366431303665636333f90248706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c655f706172615f696e697469616c697a653a3a6836313538623536636233386332383931fa0245706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c655f706172615f636c65616e75703a3a6838656234353839346163363864316138fb024f706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a69735f76616c69645f706172613a3a6866336661646362316234333564623364fc022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6865653630653766326131386233663339fd023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6831616136386138636134383664303631fe0284016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65732c434f6e52756e74696d65557067726164653e3a3a696e697469616c697a655f626c6f636b3a3a6865303166373635663630353838333932ff022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a683539666362616237343738623734316280033a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68313630356435383130623863636634318103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68323461366465623833346430326562338203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68303361666132633139313432343733628303366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e697469616c697a653a3a68383430353437353932336236373565618403753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a68313564343864356338363931386637338503386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68356337633861343832346431376539328603386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68343535383764323366653638313865368703386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a683437353933623562313463663536653288038c016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65732c434f6e52756e74696d65557067726164653e3a3a6170706c795f65787472696e7369635f776974685f6c656e3a3a683737623162316365356339663133616289039f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a68666436383730623638656335633566378a03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68333633306531653538636335623163388b038b013c73705f72756e74696d653a3a67656e657269633a3a636865636b65645f65787472696e7369633a3a436865636b656445787472696e7369633c4163636f756e7449642c43616c6c2c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a4170706c7961626c653e3a3a6170706c793a3a68396132663731376435363639643833318c03563c73705f72756e74696d653a3a44697370617463684572726f722061732073705f72756e74696d653a3a7472616974733a3a5072696e7461626c653e3a3a7072696e743a3a68663535353562333066356664663237328d03aa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a68366461386633643563373336616131618e03363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a68383730353565323537323635313662618f0341747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a636f6d6d69745f6368696c643a3a6862303332626165653039373335313363900343616c6c6f633a3a636f6c6c656374696f6e733a3a7665635f64657175653a3a56656344657175653c543e3a3a67726f773a3a68343563393335653832636638663734619103653c73705f747269653a3a6e6f64655f6865616465723a3a4e6f6465486561646572206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68636636373362323661333462313861639203633c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6c6561665f6e6f64653a3a6839323765623333636361326336336430930360747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a72696768745f697465723a3a6833643161343335393366316330383438940372747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a617070656e645f6f7074696f6e616c5f736c6963655f616e645f6e6962626c653a3a686466366134366638333361393135336195035c747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a64726f705f6c617374733a3a68643331616563303366313035326662319603683c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a657874656e73696f6e5f6e6f64653a3a68643234393235656432633531643631649703653c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6272616e63685f6e6f64653a3a683233663961303161633764386238306598032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a683138386438346639343463643838616199033c747269655f64623a3a7472696564626d75743a3a4e6f646553746f726167653c483e3a3a616c6c6f633a3a68393838373263303462336533663165349a03543c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e20617320747269655f64623a3a547269654d75743c4c3e3e3a3a696e736572743a3a68623034343931383038373930623432639b033e747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f61743a3a68346461656364623062303439643261649c033c747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a66726f6d5f656e636f6465643a3a68666233323234313266373637306262639d0345747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f696e73706563746f723a3a68313339653938346461663932616538319e03363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a68343066653930643965383165646334629f03376861736862726f776e3a3a7365743a3a486173685365743c542c533e3a3a696e736572743a3a6838666636376562363234383166356562a00339747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633a3a6465636f64653a3a6864383638326165653632366532383931a1033e747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a696e6c696e655f6f725f686173683a3a6861613536373432393839656361616138a20365747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a746f5f73746f7265645f72616e67653a3a6837643733383634303062363432363033a30335747269655f64623a3a7472696564626d75743a3a656d7074795f6368696c6472656e3a3a6838376635313930653165336566343362a403773c736d616c6c7665633a3a536d616c6c5665633c413e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a457874656e643c3c4120617320736d616c6c7665633a3a41727261793e3a3a4974656d3e3e3a3a657874656e643a3a6830616665373138333534356236393762a5034d636f72653a3a686173683a3a696d706c733a3a3c696d706c20636f72653a3a686173683a3a4861736820666f722028412c42293e3a3a686173683a3a6834323331636538653064393236646336a6033e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6864366331383562396233316339316630a70388013c285475706c65456c656d656e74302c5475706c65456c656d656e74312c5475706c65456c656d656e74322c5475706c65456c656d656e7433292061732078636d5f6578656375746f723a3a7472616974733a3a436f6e766572744f726967696e3c4f3e3e3a3a636f6e766572745f6f726967696e3a3a6833336534303761326366366337393539a803783c285475706c65456c656d656e74302c5475706c65456c656d656e7431292061732078636d5f6578656375746f723a3a7472616974733a3a4c6f636174696f6e436f6e76657273696f6e3c4163636f756e7449643e3e3a3a66726f6d5f6c6f636174696f6e3a3a6861333162303735666234363232633162a9033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834383635356633663333336330663836aa033a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6830383838626533666564323438333439ab038b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6838383931333663373138303134336437ac03493c5b543b2036345d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834393631613539373863346261643965ad038b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6865616536333732363131373233636130ae03a401706f6c6b61646f745f7072696d6974697665733a3a76303a3a76616c696461746f725f6170703a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76303a3a76616c696461746f725f6170703a3a5369676e61747572653e3a3a6465636f64653a3a6837643535643863346365643334333037af039c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834356235356133633636663133653737b0036b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866623933633439623634383438653064b1036c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835656439643930376138383433356338b2036f726f636f636f5f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220726f636f636f5f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6831656239306462613030386537326532b3032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6831346266333430346631663636616238b40372726f636f636f5f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220726f636f636f5f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a6866393332313739313730653166643864b5038e017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220284c302c4d302c4e302c4f302c50302c51302c5230293e3a3a656e636f64655f746f3a3a6863646536303864376335386131386366b603553c73705f72756e74696d653a3a4d756c74695369676e61747572652061732073705f72756e74696d653a3a7472616974733a3a5665726966793e3a3a7665726966793a3a6837313833663032376262623638626366b70354706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7574696c3a3a6d616b655f7065727369737465645f76616c69646174696f6e5f646174613a3a6834356331633936393963383431363066b803386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837323337353032616261303732333061b903386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862666336633338633763666566363331ba0350706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a6e6f74655f706173745f636f64653a3a6832626166316361373765313561373163bb03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861386362633262353635393562303166bc0337616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833656165623065666135353035366438bd033a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6837336539636664663063396636323961be033a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6833343661346435313538306363623330bf035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863646637356638653963633465653235c003766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6835623836323936616537356531326636c103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836383430303534653836313561653839c20352706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832646635633864396463306235343139c30384013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f5f4765744279746553747275637450617374436f64654d6574613c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837383134656563663934613930303830c40383013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f5f4765744279746553747275637450617261746872656164733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866383030643132663034326434386536c5033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6861613962666665613535343966646666c60382013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f5f4765744279746553747275637450617261636861696e733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835336230663037333037323636623662c703433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6864613662373665376362313531616334c80353706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a6c6173745f636f64655f757067726164653a3a6832333436663166653333666330643030c903a201706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5061726147656e65736973417267733e3a3a6465636f64653a3a6833386631303766346261366361353263ca03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838663432656534393738303531333634cb03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838626634373161313332383963313132cc03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866663239303131343332396339336230cd034b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6836373835346436373534343162613038ce03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6831383162323433366331336661623464cf032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6861346134666335386136626332343966d003706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6834323735366336643339666536643137d103706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6831663266323463333736313332316533d203386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835383936653764643963653566383231d3035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864303564366165383931383532333036d403776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6830623639373136623738346138366636d503483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837323138373663353634386637353662d6033970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6368696c6c5f73746173683a3a6832336639383366353830666565383839d7035270616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f665f666e3a3a7b7b636c6f737572657d7d3a3a6864303830383136383132623330613561d803386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837313634656438663835306161303464d90348636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a6834326330333238623361636133393663da03706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6861313966386539653534626434376262db033c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837303366343066663232333862373939dc033e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862346165373864323435306662383263dd03723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838663036393938373931646139626631de03753c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261456c656374696f6e5374617475733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839333430333634383761356235646339df03763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374536e617073686f744e6f6d696e61746f72733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831366263616265623337643635646637e0033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6838386662613763613238366666666162e1036d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862333935396530633561343031643332e203743c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374556e6170706c696564536c61736865733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834346135306662343466383534313837e3033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6864613033333832396631333965333864e403723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863363762313861366130343237393461e503743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831313036366364313232336232653338e6033a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6830353161323039366563646564383439e703763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866613662643434393262633666613862e803763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861336339383834336631303138643933e903723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6862313461396138373233376338643236ea036a3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744c65646765723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834323538316632303166346665333962eb03713c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374496e76756c6e657261626c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835646561623932633435623933343634ec03433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6837653838633164333731376565353839ed03703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834316532356434646264303434356339ee034770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6834343036666135616238613638663261ef03ac013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866363661313635376538373765613833f003a0013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e536f6c7574696f6e53636f726542756d7044656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835376639396665393238653863613839f10399013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178497465726174696f6e7344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839613733343637336334633630373163f2039d013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a456c656374696f6e4c6f6f6b616865616444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833346463643138343464313061323232f3039e013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a536c61736844656665724475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834613739326134613534323763626239f4039b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837386333613065656538616138383965f5039a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834383135386263373964646462383561f603860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a6837303461636636333262336334623738f7036c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831633864336631383433366331666435f803890170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a656e636f64655f746f3a3a6839613064386437383132643766373036f903643c70616c6c65745f7374616b696e673a3a436f6d7061637441737369676e6d656e7473206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836613638333939653038386232633130fa036b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863303362363666343164613563326563fb0337616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830383230356263613433663839386430fc0337616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6836343561363239333037616633333437fd0337616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830323739323133313039333366646438fe0337616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830663864323630623932363138643265ff0337616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830393064336435666333366462326265800437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838343365336163646335313336336430810437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831363838336630616463386162396138820437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865393833373564396139363861653831830437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838343737303434316637656239323464840437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6835306436316135343831343437313237850437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6866363939313932366462373137343462860437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68366166643337393731376434353362388704643c70616c6c65745f7374616b696e673a3a436f6d7061637441737369676e6d656e7473206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683662393236356231613162343063393388046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68333033323539653763623737346135348904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68323436343130383737633637666336308a04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68653363393365373634623964363934338b044970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a68396438663239313165616236643233398c04753c542061732070616c6c65745f7374616b696e673a3a53657373696f6e496e746572666163653c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a64697361626c655f76616c696461746f723a3a68323137643533376463653039633831308d04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68336365353635623563336162356435318e04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68393937353363663433663631643265348f042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a683164646266356634316264626539343590045e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a68366164613564386664343839656137659104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834363962613836303536616439393961920437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a683738376436626438393964326533363793043570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a686362666533623139373566356464336394044370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a68386662663537373430663862336330339504543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686537363033663566366638376531353896043c73705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e3a3a68353064616337643335323231393237639704533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a683965323762306535393165323436336398044370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6f73655f656c656374696f6e5f77696e646f773a3a68376234373534663934373134346632659904706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68303534343636616535653531633162399a04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68336333306236646435326536326136359b04706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68656131363462636536623938346365329c04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68656334663066343865646431356662309d044b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561725f7072656669783a3a68316233316432636466363861333664319e043770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a68636532633633346338376365643730369f043a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6830356138663363326366333334656261a004386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836376236303463373839366331616638a104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865653532343637376330326166666234a2043870616c6c65745f7374616b696e673a3a736c617368696e673a3a6170706c795f736c6173683a3a6830663439626332363835646434613739a304d7023c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a6835373765636237633534383130646264a404386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831383866363930333966343166666265a5046a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6862333461356338623336333566313038a6045f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831353536383437643232316366383838a7044170616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7072655f64697370617463685f636865636b733a3a6862386230356537643934313931303531a8047b70616c6c65745f7374616b696e673a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f7374616b696e673a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6830386566326266616264616138306538a904483c5b543b20335d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838353134653862616432373966636339aa04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6861356363396236356636646437313063ab048e013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a7365745f6c6f636b3a3a6834643032636633643738643965366264ac04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830346539653134663363343632336663ad0437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6836613734396135643330353230363164ae043870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a6865396533376138303961323237323437af0491013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a72656d6f76655f6c6f636b3a3a6865303861343335323661643561653335b0043a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6833326233336332666234356337626137b104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6866353437303536636132393638353961b2044870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636865636b5f616e645f7265706c6163655f736f6c7574696f6e3a3a6866653635393237643964363066653962b3047b3c73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c2061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c5f617070726f78696d6174696f6e3a3a6836643064363361386635373666353936b4043970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a6835393230393262303032623361376130b504b4013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6833363266336236333430666137623334b60493013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a6465706f7369745f696e746f5f6578697374696e673a3a6837303764666137653065623231313136b7044373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a6839613036326336376635343533353232b804463c73705f6e706f735f656c656374696f6e733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837646339386130323165663334326130b9046b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830346230653435656665343731613965ba044073705f696e686572656e74733a3a436865636b496e686572656e7473526573756c743a3a7075745f6572726f723a3a6861313661353130363330346663373036bb042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837333663303234613263663462626265bc044b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6866366637666663666237363336633636bd044073705f696e686572656e74733a3a436865636b496e686572656e7473526573756c743a3a7075745f6572726f723a3a6863653763336130306265336237616366be046178636d3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a56657273696f6e656458636d3e3a3a6465636f64653a3a6835373663613730353965383733633164bf04543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837386337636261373130303731373335c004543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839323165636565346232343238356332c1046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862663964326632353136333335633661c2046178636d3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a56657273696f6e656458636d3e3a3a6465636f64653a3a6862383330656663653730633938663932c304543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839663931306135633463363934386230c404543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832306234653465333838663532623661c5046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838306266313638353136643530323139c604543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862633662316662333464653363396634c7043473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a6833396439356233353037363364663837c8043a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6835343734616265393263366535313537c9044973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3132383a3a6861626633643839656164323630383763ca04463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6836303937656262306363363536653835cb04493c5b543b2031365d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834613133303930626232313364316435cc0468636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6836656263363365363036303232313936cd0437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834333831663337653238646236323865ce042e616c6c6f633a3a7665633a3a5665633c543e3a3a726573657276653a3a6831663865346431353739363437353038cf0437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838653436333062643662636235396563d00437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6863346332363435343731653437616531d104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6838616561313464323464666238316563d20437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6863316236626164616663363236626163d304753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6863663237643735386239663265656163d4043870616c6c65745f626162653a3a4d6f64756c653c543e3a3a646f5f696e697469616c697a653a3a6863323231316630633439656232303736d50497013c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732070616c6c65745f73657373696f6e3a3a4f6e6553657373696f6e48616e646c65723c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a6f6e5f6265666f72655f73657373696f6e5f656e64696e673a3a6835313936663138356330396238393632d60437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832303761656334623531613764353861d7044973705f696f3a3a6f6666636861696e5f696e6465783a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a6835646231333136633361333233656462d80476726f636f636f5f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220726f636f636f5f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a6864656461346365616636363735333136d90437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832306430303331666539333637633338da04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839626361666532353330613730366331db044b70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a67656e65726174655f666f723a3a6864643764303232636466396263666234dc04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861306638616131323934383837653139dd042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6831373137626539653530303235643764de04a1013c285475706c65456c656d656e74302c5475706c65456c656d656e74312c5475706c65456c656d656e74322c5475706c65456c656d656e74332c5475706c65456c656d656e74342c5475706c65456c656d656e7435292061732070616c6c65745f73657373696f6e3a3a53657373696f6e48616e646c65723c4149643e3e3a3a6f6e5f6e65775f73657373696f6e3a3a6866353834353561396536363737613332df043c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6839663835386337393836663963613632e0043e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6834646132363137313639333662383366e104763c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637444697361626c656456616c696461746f72733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836356364363536656336656366326561e204703c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637443757272656e74496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834393532646634323937653535616532e3045f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835393733653762316266393261353461e4043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834643635313837353732663864333437e5043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6832376230643331313239393432363638e6043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6837373039356664386463386437333362e704593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6865656330363264393838363530613263e804386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835353834356162373436613136633635e904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836303131333832393465346639326132ea04543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866383834613239376665663261366233eb04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836376534626530373739633235626461ec04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836623166653862643138333662373963ed0437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833643436316639663362383836663433ee04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836663362323930626132653165393730ef049401706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733c4e3e3e3a3a6465636f64653a3a6834323665616266356634313236643536f004386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837626536336366656266383539623163f104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838653066366362646566626539386337f20437616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6862636563653039326165383637313866f304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839303030646363333536386431336261f404bc01706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616e64696461746550656e64696e67417661696c6162696c6974793c482c4e3e3e3a3a6465636f64653a3a6830666264346337653961353033333433f504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839306635373734646635623938653035f604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862323261343539333762616436323036f704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862336164323864613132303632363630f804543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861306330393166656464613565653331f904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862376665336665633431346137666165fa04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863343866306635656262346239656530fb04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863663463336433626532313637653637fc04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864306165643538396263616639346637fd04543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866356637346164353836313562333562fe04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864356365383736333263666165663863ff04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68646130303532643239383531353334668005543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68386238316434366630326135346338338105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865373337646166623538356634646431820537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68396638376663383436326533353362318305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68663334323931383132363361363733658405543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683032383662623666333866643032383185053d616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276655f65786163743a3a68316134336363663864313964386530318605386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686663643638653933353262363837333487053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68303863633539346162656364623535338805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68326531386163643537316232633234638905386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68326539323561656561633731656338368a05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68353864613736643161653737393732318b05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68356262343632653932633939633339618c05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68373833623039623935393562353438318d05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68376232333463336334346561313533338e05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68376330323561393066616236636661628f053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68306130306434373530633664386134389005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a683931663232656231633836666332343291053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a68633566316462353630303865666431309205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6861663262616263623263363561666261930537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831316366316162393762323434626431940537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831363234336164336130376535653138950537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832666439613730363930373339383435960537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834353766333939653466303239306631970537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6837663530636363336534626637346161980537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839656131343332336235383639616131990537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68623033366639646339336162333333309a0537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68623135663936373235363531333432379b0537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68626463373734313533623833396165649c0537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68646234663134326563363262386465659d0537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68646433313534363932643762626235629e05746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a68333961303463656432613937623834359f0559706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6834623936646462663437666361303163a00587013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a5f5f4765744279746553747275637453657373696f6e733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833623832663765323861323535363963a1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833396361313564373233633661316438a205776672616d655f73797374656d3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c6672616d655f73797374656d3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6865643766373366303334613865303736a3057b70616c6c65745f6772616e6470613a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f6772616e6470613a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6837313139666334393237336530643562a405af01706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6834333438373165346633383139636164a505ab01706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6831316364666439333737383733353531a6054c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f7665726966793a3a6830303262383161333330383632363335a7056073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a6865313566333137316466383533333563a805593c73705f72756e74696d653a3a44697370617463684572726f7257697468506f7374496e666f3c496e666f3e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861666634383133356265666634383764a9055d3c73705f72756e74696d653a3a44697370617463684572726f7257697468506f7374496e666f3c543e20617320636f72653a3a636f6e766572743a3a46726f6d3c453e3e3a3a66726f6d3a3a6832383339323833336334656162303237aa053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6833636532313639663363666439643765ab05723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834353432316631353634396539643634ac05723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834623831386233376633346165316535ad05303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835326263386630383735356166353864ae05303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835343533393938366561386538346135af05303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835626463393665623932623463353865b005383c2a636f6e7374205420617320636f72653a3a666d743a3a506f696e7465723e3a3a666d743a3a6862353463376232633064356538643465b1058d01706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a5363686564756c6564436f72653e3a3a656e636f64655f746f3a3a6837366666633736386530623331313464b2059401706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733c4e3e3e3a3a6465636f64653a3a6831376138393930633364303033353639b305543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838663535313566646564316163633862b4059301706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e64696461746544657363726970746f723c483e3e3a3a6465636f64653a3a6839373331343962393863343935623733b5059701706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733c4e3e3e3a3a656e636f64655f746f3a3a6864646431643334343334353664303232b6053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6834333462386161646534306430353163b7059a01706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a50657273697374656456616c69646174696f6e446174613c4e3e3e3a3a656e636f64655f746f3a3a6833343961323138313035353538636662b8053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6833353331366339383261353632633434b9050c436f72655f76657273696f6eba0512436f72655f657865637574655f626c6f636bbb05543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836333734663139313463646263383036bc055373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a6838306435363165376265663936353933bd055073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f62617463685f7665726966793a3a6861326534343864643237653730383963be05446672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6e6f74655f66696e69736865645f65787472696e736963733a3a6838623765353266663039613834393364bf05713c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6832393832323565336262653963366264c0055173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a66696e6973685f62617463685f7665726966793a3a6833633233373066336366306664393565c105346672616d655f73797374656d3a3a4d6f64756c653c543e3a3a66696e616c697a653a3a6864373563326561613366646138303261c20515436f72655f696e697469616c697a655f626c6f636bc305114d657461646174615f6d65746164617461c405693c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c616c6c6f633a3a7665633a3a496e746f497465723c543e3e3e3a3a737065635f657874656e643a3a6834623763336636366461616532356161c5051c426c6f636b4275696c6465725f6170706c795f65787472696e736963c6051b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bc70520426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373c8056f3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864653663353835303061643230373665c905543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862646461303161326239313762383433ca05543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831613933376365666532363437663231cb05656269747665633a3a7665633a3a7472616974733a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f72206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a636c6f6e653a3a6833363937636231666330376532376635cc05443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6839383435323966343636653330373737cd05443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864363664386137353632646638613137ce05443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6861303433346666666239646435366432cf051c426c6f636b4275696c6465725f636865636b5f696e686572656e7473d00518426c6f636b4275696c6465725f72616e646f6d5f73656564d1052b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6ed2058e013c73705f72756e74696d653a3a67656e657269633a3a636865636b65645f65787472696e7369633a3a436865636b656445787472696e7369633c4163636f756e7449642c43616c6c2c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a4170706c7961626c653e3a3a76616c69646174653a3a6830626535343065356430343336373434d305214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572d4054c73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a69735f76616c696461746f723a3a6834663964626163643338616331373434d5055173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a6832616263313534663035393036323462d605633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839363137623836326333656365346537d705583c70616c6c65745f696d5f6f6e6c696e653a3a4f6666636861696e4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830626662666232386431363361313835d8055173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f6765743a3a6832373931666665643463346664313230d9055d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365743a3a6865373733373463323436643831356134da051850617261636861696e486f73745f76616c696461746f7273db05433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6861326131386535636230306466316564dc051e50617261636861696e486f73745f76616c696461746f725f67726f757073dd0559706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a67726f75705f726f746174696f6e5f696e666f3a3a6861323961336133343964363030636337de052050617261636861696e486f73745f617661696c6162696c6974795f636f726573df055a706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a6e6578745f75705f6f6e5f617661696c61626c653a3a6838353364323830356266323662646335e00559706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a6e6578745f75705f6f6e5f74696d655f6f75743a3a6865323434323331313261363862633637e1055c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a67726f75705f61737369676e65645f746f5f636f72653a3a6838326265646336653830643162643237e2053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6865346663313938653464633563383665e3053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6833363365366432366666353061386632e4053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6835303562363737303864313237636139e5052250617261636861696e486f73745f66756c6c5f76616c69646174696f6e5f64617461e605633c54206173207061726974795f7363616c655f636f6465633a3a64657074685f6c696d69743a3a4465636f64654c696d69743e3a3a6465636f64655f616c6c5f776974685f64657074685f6c696d69743a3a6832393863323732383162353736336461e70567706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a72756e74696d655f6170695f696d706c3a3a76313a3a66756c6c5f76616c69646174696f6e5f646174613a3a7b7b636c6f737572657d7d3a3a6833383563663466363665633332626534e80551706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a666f7263655f656e6163743a3a6839383635653430393661343565333437e9052750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f64617461ea052650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f757470757473eb056d706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616e646964617465436865636b436f6e746578743c543e3a3a636865636b5f76616c69646174696f6e5f6f7574707574733a3a6838323136303233363166343234393732ec05753c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a416363657074616e6365436865636b4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861313334353737313362643263326262ed052550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c64ee051d50617261636861696e486f73745f76616c69646174696f6e5f636f6465ef052850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f6465f0052c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c697479f1051e50617261636861696e486f73745f63616e6469646174655f6576656e7473f20570726f636f636f5f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220726f636f636f5f72756e74696d653a3a4576656e743e3a3a6465636f64653a3a6862366435613131326264373733393363f3052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6838366636663132623266633133636133f4052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6865396134363963633534333766326162f50568636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6865376563313431613434666437623936f6053a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6865346662663537636234363531666261f7051a50617261636861696e486f73745f73657373696f6e5f696e666ff8052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6865326630326236373039346136646263f9051a50617261636861696e486f73745f646d715f636f6e74656e7473fa052c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473fb05723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6866666635616438346636613535653030fc051e4772616e6470614170695f6772616e6470615f617574686f726974696573fd05543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863373038343966653262396637343439fe0537616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833636665356438656663356234336536ff05384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e7369638006303c282920617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68343666316332393163353061313439388106274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6682064470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a70726f76653a3a6861376466616333373436616238656439830615426162654170695f636f6e66696775726174696f6e84061b426162654170695f63757272656e745f65706f63685f7374617274850624426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66860635426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696387068f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a6835323662373839623339663034366435880621417574686f72697479446973636f766572794170695f617574686f72697469657389064570616c6c65745f617574686f726974795f646973636f766572793a3a4d6f64756c653c543e3a3a617574686f7269746965733a3a68316136326631656333313233663533308a062153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b6579738b064e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f67656e65726174653a3a68666239316432386436636330356461328c064e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f67656e65726174653a3a68303464643632343134386465613537668d061f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b6579738e0638616c6c6f633a3a7665633a3a5665633c543e3a3a657874656e645f66726f6d5f736c6963653a3a68373333623262303566393735656264358f062e616c6c6f633a3a7665633a3a5665633c543e3a3a726573657276653a3a683864343066656639316334396365623090061d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e63659106205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f92064970616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a636f6d707574655f6665655f7261773a3a683165626433656639343562346433623993063e70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a683664306262363631633332323132306394064070616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683330303839343462623430356362396195064970616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a686236323637336431326632646563376296069b013c70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683065306330373866613936396135333197062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68633734333263333937303264656332339806713c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a68346566653832633764373765633964659906443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68636436656231653231373235383832329a06376672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a68393664646332323935326563633063389b063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68616464376665636431306462633232619c064673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a68613666643134643532373365363638349d06653c73705f61726974686d657469633a3a66697865645f706f696e743a3a46697865645531323820617320636f72653a3a6f70733a3a61726974683a3a4469763e3a3a6469763a3a7b7b636c6f737572657d7d3a3a68313938613635666537353138353362309e0657706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a70726f636573735f6269746669656c64733a3a68393732333732626137393038663434389f0639636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6839646537373666356331616136643839a00671706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a617661696c6162696c6974795f74696d656f75745f7072656469636174653a3a7b7b636c6f737572657d7d3a3a6861653663643431373237643431363964a1062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6835613565633431623364393934326332a2062e616c6c6f633a3a7665633a3a5665633c543e3a3a726573657276653a3a6836383136653865356262323464663665a306766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6864613638393436663239326237633962a406766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6863613665613933396536346135663834a506766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6834396338623061646130323762663563a60658706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a70726f636573735f63616e646964617465733a3a6831386438643234343261636663333964a7063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6862333134313735336133356535363631a806623c78636d5f6578656375746f723a3a58636d4578656375746f723c436f6e6669673e2061732078636d3a3a76303a3a7472616974733a3a4578656375746558636d3e3a3a657865637574655f78636d3a3a6830303465666230343863303735633337a906723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6862626236643333363366303032613165aa062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6839613931333239323734316639663333ab0680013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e5f696e686572656e743a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835643334353437323662333930376639ac065d706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e5f696e686572656e743a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863343337643739316436623366636438ad065f706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e5f696e686572656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6861356331313863396466303264326536ae066b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861373338373533633733343332313465af063f73705f747269653a3a6e6f64655f6865616465723a3a656e636f64655f73697a655f616e645f7072656669783a3a6838383832363766306363343432393535b0067d7061726974795f7363616c655f636f6465633a3a6269745f7665633a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a6465636f64653a3a6833623062333331353330343861336562b106376269747665633a3a7665633a3a4269745665633c4f2c543e3a3a66726f6d5f736c6963653a3a6861323237353331653730313339646231b2064d6269747665633a3a7665633a3a6170693a3a3c696d706c206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a7365745f6c656e3a3a6831356164373139616435313935653338b3067d7061726974795f7363616c655f636f6465633a3a6269745f7665633a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a6465636f64653a3a6864373137303931316635613063353435b406336269747665633a3a7665633a3a4269745665633c4f2c543e3a3a7265706561743a3a6835346435303964336662663338333832b5066b3c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6835316639346561636263646365333536b6063d70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e655f6175783a3a6864626432333737643966303266633939b7064d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a6837396631386562626462316163643236b8064a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a6864313464396662376161663463376265b906473c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862643266613730653433353732636233ba065173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f7365743a3a6839666561663063323236356435656134bb06373c285431302c5431312920617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832316362393837383334633635306232bc06303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834666633333230653630336362306462bd06693c636f72653a3a697465723a3a61646170746572733a3a46696c7465724d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832393862353537373636633566336462be06443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6861653962643061653661643530623534bf06437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6865353665656239306335346535323735c0062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6832326337376562383161383637323863c1063e70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6862343066333661633233653833626536c2064070616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836336632323366333065333530613235c306613c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833363766306634326162653166613766c4062e616c6c6f633a3a7665633a3a5665633c543e3a3a726573657276653a3a6834323836323530616237393337613934c5064e616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a636f6e7461696e735f6b65793a3a6861333731663839313835663061626332c60647616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a656e7472793a3a6866306564636463313736393237373762c7064b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6834666439643333663238653832326333c8062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6838623533623733376338363432613632c9063973705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a726f6f743a3a6831666366633130353539633234386632ca064173705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a69735f706172656e745f6f663a3a6831666332646438346432333334386661cb06723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6836303161383030333336396439303664cc065a6672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6838313734343961363165353731326266cd0686013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a77697468647261773a3a6835336563386336396432613239666137ce0695013c70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a4b65794f776e657250726f6f6653797374656d3c2873705f636f72653a3a63727970746f3a3a4b65795479706549642c44293e3e3a3a636865636b5f70726f6f663a3a6861613761333335373637623561623134cf062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837313731653236383033386433333665d006446672616d655f737570706f72743a3a7472616974733a3a43757272656e63793a3a7265736f6c76655f6372656174696e673a3a6835623261336130663666313333396534d1065373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6834633137326336636534346536646537d206566672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f76616c69646174653a3a6836663637613333393264383432353834d306623c73705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a496e76616c69645472616e73616374696f6e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862326432656634666666663237363234d4067b3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833656331393030363638343337396233d506c401706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a486f7374436f6e66696775726174696f6e3c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6839306234626130386538386561643734d60658706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6833363262663366353536653931393032d7065a706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862336263376532313766316238383764d8068c013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a5f5f47657442797465537472756374416374697665436f6e6669673c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839336432316533623739656431636233d90687016672616d655f737570706f72743a3a776569676874733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206672616d655f737570706f72743a3a776569676874733a3a4469737061746368496e666f3e3a3a6465636f64653a3a6863343564346630383132333631323835da0652616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a526f6f743c4b2c563e3a3a707573685f696e7465726e616c5f6c6576656c3a3a6831616665663062616230386165363437db0652616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a526f6f743c4b2c563e3a3a707573685f696e7465726e616c5f6c6576656c3a3a6866316565353833323233633463393831dc0647616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a526f6f743c4b2c563e3a3a6e65775f6c6561663a3a6832383639363662643532666264646233dd0647616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a526f6f743c4b2c563e3a3a6e65775f6c6561663a3a6866633936626166316137666366366666de063970616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6865396139353361646562316364646232df063b70616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838653733346366316537356661303964e0065c3c70616c6c65745f7375646f3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838306433303639326432313663366464e1063d73705f61726974686d657469633a3a68656c706572735f3132386269743a3a746f5f6269675f75696e743a3a6830346165323437333335303736353462e2063773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a6832663665306666613934363063363936e30668636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6835653538666363396166643465303136e40646616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a696e736572743a3a6831376138373635656235666466333834e50646616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a696e736572743a3a6837386533633162633431303931333639e6062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6831363636663439356437666638333763e7064d3c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863366133303765346366376161383635e8063d3c28292061732078636d3a3a76303a3a7472616974733a3a53656e6458636d3e3a3a73656e645f78636d3a3a6837666162383662656634383366653839e9063f78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3a3a707573683a3a6863363064623532323864396164623432ea06a9013c78636d5f6275696c6465723a3a63757272656e63795f616461707465723a3a43757272656e6379416461707465723c43757272656e63792c4d6174636865722c4163636f756e744964436f6e7665727465722c4163636f756e7449643e2061732078636d5f6578656375746f723a3a7472616974733a3a5472616e7361637441737365743e3a3a77697468647261775f61737365743a3a6839323863373836373965373334386134eb064378636d5f6578656375746f723a3a6173736574733a3a4173736574733a3a73617475726174696e675f73756273756d653a3a6836633865313664306331663639353663ec062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6830636630366264303434643266383063ed067a3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a496e746f4974657261746f723e3a3a696e746f5f697465723a3a6861666166346261336134303833356464ee062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6838643465383234336432373361646636ef067a3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a496e746f4974657261746f723e3a3a696e746f5f697465723a3a6835396337663839363431613638653438f0062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6839316462366666346231313162353932f106543c78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833343137646432356132313230616539f20681013c78636d5f6578656375746f723a3a6173736574733a3a41737365747320617320636f72653a3a636f6e766572743a3a46726f6d3c616c6c6f633a3a7665633a3a5665633c78636d3a3a76303a3a6d756c74695f61737365743a3a4d756c746941737365743e3e3e3a3a66726f6d3a3a6838363564343537316231633636626639f3066f726f636f636f5f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220726f636f636f5f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6866336231666262316363613963393932f4064578636d5f6578656375746f723a3a58636d4578656375746f723c436f6e6669673e3a3a657865637574655f656666656374733a3a6862393439316462396136383361383332f50630636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68323033623933323030383435643235382e38343236f6064078636d5f6578656375746f723a3a6173736574733a3a4173736574733a3a73617475726174696e675f74616b653a3a6832626263643438383932643963626330f706723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830616565623465633032353663616461f806723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832326461373437333533336162663037f906a8013c78636d5f6275696c6465723a3a63757272656e63795f616461707465723a3a43757272656e6379416461707465723c43757272656e63792c4d6174636865722c4163636f756e744964436f6e7665727465722c4163636f756e7449643e2061732078636d5f6578656375746f723a3a7472616974733a3a5472616e7361637441737365743e3a3a6465706f7369745f61737365743a3a6833356564323139646234333862643966fa066e3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a636c6f6e655f737562747265653a3a6835393061653965373437343938303134fb066e3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a636c6f6e655f737562747265653a3a6838336137366338363265386339643534fc0646616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a697465723a3a6831646234383639376438333562646134fd06583c78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838643765626664633833376462323961fe0645616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6866333931333934326436363331396263ff064c78636d5f6578656375746f723a3a6173736574733a3a4173736574733a3a73617475726174696e675f73756273756d655f66756e6769626c653a3a6832336633383531343964646165373931800744616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a697465723a3a683534633438623830653266333832383381076a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a68323936396636316463353665353762648207573c78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e20617320636f72653a3a636d703a3a5061727469616c45713e3a3a65713a3a68623630326564383933336663636435348307753c78636d5f6275696c6465723a3a4c6f636174696f6e496e7665727465723c416e6365737472793e2061732078636d5f6578656375746f723a3a7472616974733a3a496e766572744c6f636174696f6e3e3a3a696e766572745f6c6f636174696f6e3a3a686531393137663563373136396438616584073978636d5f6578656375746f723a3a6173736574733a3a4173736574733a3a7265616e63686f723a3a68396631396134313537376630653333308507533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a683032333834656439373236343434333286072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a686366636339356666313433393465396287077c3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7375646f5f777261707065723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6836356238636364343561393139373036880759706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7375646f5f777261707065723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68316364633537376638626130643637318907766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a68306431363134383336396337626466668a073f70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68646239363433366364643165643064338b074170616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68656130306562363639356366356635398c076d3c70616c6c65745f617574686f72736869703a3a5f5f47657442797465537472756374556e636c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68633164343238343737373139653461358d07623c70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68633430363531626561336464373963348e07746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a68333434366534396162323266646635328f07553c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320636f72653a3a64656661756c743a3a44656661756c743e3a3a64656661756c743a3a68336636623533376135373663633235319007523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a696e736572743a3a683836366231623130646233626337366691074470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a71756572793a3a68373531656463623635346361343462369207366861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a6765743a3a6834326461373666643333303930343037930725747269655f64623a3a547269653a3a6765743a3a683738316364363534316636303637356294072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a683932303935623238343637333766336595074d3c747269655f64623a3a7472696564623a3a5472696544423c4c3e20617320747269655f64623a3a547269653c4c3e3e3a3a6765745f776974683a3a683364666363373938653961303531396596073e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a68383130356232663030346162653938309707546269747665633a3a736c6963653a3a6170693a3a3c696d706c206269747665633a3a736c6963653a3a426974536c6963653c4f2c543e3e3a3a73706c69745f61743a3a68396633303965316462636563313836649807683c73705f636f6e73656e7375735f7672663a3a7363686e6f72726b656c3a3a56524650726f6f66206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864333066666637343164336530376463990782017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202850302c51302c5230293e3a3a656e636f64655f746f3a3a68646633643431353461383066346466329a07793c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68333262363236653266356532336137319b0756706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68396133626336303231613864663930379c0758706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68366631623962623233316432653435309d0785013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a5f5f47657442797465537472756374446562746f72733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613639356364393734356635623735389e0789013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a5f5f4765744279746553747275637450656e64696e67537761703c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68343465366265313363386532313964309f075b3c636f72653a3a726573756c743a3a526573756c743c542c453e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864376438616230653264313537323630a0074f3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a6765743a3a6863666264633862303766663838346663a107533c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a656d706c6163653a3a6862393634356335316562343533663566a207386861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a656e7472793a3a6863633138623034343835333662373035a3073d6861736862726f776e3a3a6d61703a3a566163616e74456e7472793c4b2c562c533e3a3a696e736572743a3a6834663464326133313863623561386133a407523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a72656d6f76653a3a6838326339303033333366303262396363a507543c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a636f6e7461696e733a3a6866633531653261376439343961626266a607583c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64623a3a6866656666323961613263306237366462a7075c3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64625f6d75743a3a6836303261616632343163373432393238a807523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a6765743a3a6864353831336266353238303364306133a907573c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a636f6e7461696e733a3a6832636662303664383863333261643338aa073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6830326665386366303134333031316432ab073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6831396161316532623339383538616635ac073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6831623431623662393163336361623734ad073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6833383635383935356232636265353262ae073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6835396430356436323637333065343037af073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6838633266346333326266656331356631b0073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6836643431613031306637356534393632b1073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6866623766373338633162383965363566b2073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6839323238336437396461356166303433b3073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6839363830313834323761633763323962b4073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6861623430653339613238393766323165b5073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6862306665373061373033326134366535b6073a7061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743a3a707573683a3a6864666632643464366632316362383336b707433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6830306235383430313031353961383464b807433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6863353662636263333138646433633563b907443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837363432633564646433313031383135ba07543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835623230356530613131303039353630bb07840178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4173736574496e7374616e63653e3a3a6465636f64653a3a6866343264323038643061373363383033bc07840178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4173736574496e7374616e63653e3a3a6465636f64653a3a6832386333316630663135613866633036bd07543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866396366313730626532343538316261be07533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6866326663623963306134663865646631bf076c3c636f72653a3a697465723a3a61646170746572733a3a636861696e3a3a436861696e3c412c423e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6838356133383831613233386366623230c0072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6863306438376230636438306562356631c107723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839356136373536396231323733373665c207723c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830363562313532303036336265666138c3074b706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a7072756e655f68726d703a3a6837633133303637303836333537363731c407723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6836623735393564336235663031633338c5074f706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864386537353061623061343535343734c60751706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6835346363383666323333363964323930c70792013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a5f5f4765744279746553747275637448726d704f70656e4368616e6e656c52657175657374734c6973743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864373864386332643336623132343430c8075b706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a696e697469616c697a65725f6f6e5f6e65775f73657373696f6e3a3a6864643639653133396563393939666164c907303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836396661623962616138633236363063ca07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6866633165326135666565393762393263cb073970616c6c65745f626162653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836376632623432656262306633376164cc073b70616c6c65745f626162653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832363831393961656335346131393166cd07723c70616c6c65745f626162653a3a5f5f47657442797465537472756374556e646572436f6e737472756374696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835636538636562626664396363633136ce076b3c70616c6c65745f626162653a3a5f5f4765744279746553747275637452616e646f6d6e6573733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861323263656465306562333834623864cf074470616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6838396465376165383531316532643932d0079a013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862643232653939383439333633373064d10796013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835653666643836653533356234333963d207457363686e6f72726b656c3a3a706f696e74733a3a52697374726574746f426f74683a3a66726f6d5f636f6d707265737365643a3a6863626234326232663662386130306330d307407363686e6f72726b656c3a3a7672663a3a5652464f75747075743a3a6174746163685f696e7075745f686173683a3a6839393134663636633963633163316466d4072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6862343866343566306539373339633266d5073c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837346532626662356662326634653665d6073e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866303539343564616335306663643432d707703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833656532366163366134623238383562d807693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862326436643435623861333639396562d9075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865393931616633643364366536616539da07633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839353635383135333137616233666332db07683c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a6831316138386330323261653636613765dc073d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a6862386234376430376164343339316538dd07633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830633563613563666234646166616266de07633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6837303939303434383632336330616132df07633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6862333634393238353862656162633766e007766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6861373334623535616566343338373330e107633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835306239343766326633376130616534e207633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6831643465643331303166633633353936e307723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6866343663633439343462383735393861e4072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837393061626338383332343236386330e5073673705f72756e74696d653a3a7472616974733a3a4f70617175654b6579733a3a6765743a3a6866356132373239363436383563353038e6075f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830613438313633646364373935663964e7072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6833396465326264373336336465333365e80750706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6861333165333736653065323936623137e9078c013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a5f5f4765744279746553747275637452656c61794469737061746368517565756553697a653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862383939316530383966386636636536ea0789013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a5f5f4765744279746553747275637452656c617944697370617463685175657565733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837343161363939346436383466663432eb07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864613538363734646438633835653864ec0773726f636f636f5f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220726f636f636f5f72756e74696d653a3a4576656e743e3a3a656e636f64655f746f3a3a6862343634643465313334356331666661ed073a6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863666231383465383938646266663839ee073c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6833623961393964373362666334313133ef07703c6672616d655f73797374656d3a3a5f5f47657442797465537472756374457865637574696f6e50686173653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833303032373734663230363966633961f0076d3c6672616d655f73797374656d3a3a5f5f476574427974655374727563744576656e74546f706963733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862306633613035376662643735616565f107683c6672616d655f73797374656d3a3a5f5f476574427974655374727563744469676573743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863396533363030643232393738356333f207703c6672616d655f73797374656d3a3a5f5f4765744279746553747275637445787472696e73696373526f6f743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835633232666263653034633239316236f3076d3c6672616d655f73797374656d3a3a5f5f47657442797465537472756374426c6f636b5765696768743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838333464663366393831353564313631f407693c6672616d655f73797374656d3a3a5f5f476574427974655374727563744163636f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830303863356636353363666630316264f507456672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6834373330613234653036646263643061f60796013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b5765696768747344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866303963343961393132306633313063f70792013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446257656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861383563646163326463323362626230f80798013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b48617368436f756e7444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832643931366231343534353032386234f9074373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6f743a3a6838613964653034343836313466623632fa074b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6368616e6765735f726f6f743a3a6830363766663766333165643331613631fb075d3c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837326366363661313333383966336163fc077773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a46726f6d46464956616c756520666f7220543e3a3a66726f6d5f6666695f76616c75653a3a6864653334386638356264653264313666fd073c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6838323037636337376261653431613261fe078f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a6832323962643535616464333835353330ff0760706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a696e697469616c697a65725f6f6e5f6e65775f73657373696f6e3a3a6866663333626135316630616130343333800839636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6838363439323964333536623032656562810839636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6866623464343565626437303864373563820858706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68613038376637346438626633643664318308773c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830616239303736366136623032643632840855706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a656e6163745f63616e6469646174653a3a68386264356632373661623937383333308508673c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a6834613932653836303135376634653463860856706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6831353765383839386630653339636663870886013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a5f5f4765744279746553747275637456616c696461746f72733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686131656261613966306533313338376688083d70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a7570646174655f6c6f636b733a3a683131666465616366353664663261633889083c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68636632393263316362313163353664648a083f70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a68646234336563356133303832666566398b084170616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a68373164643832323063316261613131368c086c3c70616c6c65745f62616c616e6365733a3a5f5f476574427974655374727563744c6f636b733c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68663232383366386438636563313933358d086e3c70616c6c65745f62616c616e6365733a3a5f5f476574427974655374727563744163636f756e743c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68646436656430356539663539313538368e084a70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68353432343862383839336564363362658f08a3013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578697374656e7469616c4465706f73697444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68323133323030663535326639363966359008623c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68633137623131383038646564633462669108466672616d655f737570706f72743a3a776569676874733a3a576569676874546f466565506f6c796e6f6d69616c3a3a63616c633a3a683334306361376234323030353563333992084a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863646461643463323635386562336437930881013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a5f5f476574427974655374727563744e6578744665654d756c7469706c6965723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683638333332363831323237653565323894085370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68643839653161393766393032366339309508a3013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a576569676874546f46656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68363636306431653638316338613838349608aa013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862376438386334323337363731656261970856706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865346234613438623066656435306434980885013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a5f5f476574427974655374727563745363686564756c65643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683231323238356263616632373031353399088d013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a5f5f47657442797465537472756374417661696c6162696c697479436f7265733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68386663386339353438353130356661379a088b013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a5f5f476574427974655374727563745061726174687265616451756575653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68353766326637306536643562396462389b08766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a68346639373239366463663033366164399c083c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68393730356464643961323636666462399d083e70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68393532366162363430363439333265329e084770616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68356430633764666537373138336535309f0893013c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838663332646665366330636231383663a00835736d616c6c7665633a3a536d616c6c5665633c413e3a3a7472795f726573657276653a3a6835306531373464396264656137393264a108723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6836386265623438326161643863316533a20848616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6839333562333961653163306533323661a30841616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365617263683a3a7365617263685f747265653a3a6838646238386163326432633466653264a4084f3c78636d5f6578656375746f723a3a6173736574733a3a4173736574496420617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838356334633033333339623536646666a5083570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a6863656436653036653434386361666361a60846616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a696e736572743a3a6863623064366165303036343637396136a708513c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e20617320636f72653a3a636d703a3a5061727469616c45713e3a3a65713a3a68386539396337373230313731663636372e39333933a808443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6862623266643863323737383965653361a90837616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831383332313038623935373563376331aa083a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a6839336262623839373734316661353139ab084473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a6864646662643765306364303466653731ac083773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a6838343965353162383831633062363564ad083d3c5420617320636f72653a3a636f6e766572743a3a547279496e746f3c553e3e3a3a7472795f696e746f3a3a6864373839326135353534356338663632ae08413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862366135336431626162313734656332af08543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864366432393263616230306439353964b0087773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a496e746f46464956616c756520666f7220543e3a3a696e746f5f6666695f76616c75653a3a6866346430376663336336336465643934b1084573705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a667265653a3a6839346233313734383737643639326335b2084773705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6d616c6c6f633a3a6862373064616365616436626534373935b308323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6834376635313837633934666638636333b408303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838646365623936646633656237373462b5082e616c6c6f633a3a7665633a3a5665633c543e3a3a726573657276653a3a6832343538616435363136376165626130b608573c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e6720617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836613830623235353631633731643331b70856747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a707573683a3a6861633637616663343135323630623839b80834736d616c6c7665633a3a536d616c6c5665633c413e3a3a66726f6d5f736c6963653a3a6834336364363232356266316236373832b9084478636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3a3a74616b655f6c6173743a3a6838333365666138346235303165656666ba08303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832373234326434396432393963326230bb08303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864373131326161633636643965393861bc08303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831306133373066393436303935666339bd082b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6863393464663035333034643235636238be08463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6835633137623839323663633530383538bf082b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6862613533663535383965663761616431c008303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837633037366266666461363832653332c108303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864356335316638333734613264653863c2083a78636d5f6578656375746f723a3a6173736574733a3a417373657449643a3a7265616e63686f723a3a6861653962353633306463353465626231c308533c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68633661333037653463663761613836352e3132303537c408443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835316135386339393730313339366361c5084b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6864376563306164663732303664373838c608095f5f6c736872746933c708095f5f756d6f64746933c808095f5f75646976746933c908066d656d637079ca08076d656d6d6f7665cb08066d656d736574cc080462636d70cd08095f5f6173686c746933ce08085f5f6d756c746933cf083d636f6d70696c65725f6275696c74696e733a3a696e743a3a756469763a3a5f5f756469766d6f647469343a3a686463383935636135313535323938376500550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e34392e302d6e696768746c79202832356338633533646420323032302d31302d303329", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a00d3cb0425699a66772616e804bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5bc812467e867ac7061726180669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x2062475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a040402a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b1602ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a008062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da914076ec446ba6876ba5cb99bdb7129be8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x2818726f636f636f", + "0xcec5070d609dd3497f72bde07fc96ba0ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", + "0x2762c81376aaa894b6f64c67e58cc650878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a31727416d0095b96772616e80e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0x3fba98689ebed1138735e0e7a5a790ab878d434d6125b40443fe11fd292d13a4": "0x0000081b", + "0x5c0d1176a568c1f92944340dbfed9e9c878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3328718e032416872520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a": "0xfcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d38757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee81668bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80df6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f349", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508248d97b4996007070617261806a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e887ec3d30b64e896173676e80481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195043d506aedab0d2ce696d6f6e8048a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xd8bbe27baf3aa64bb483afabc240f68e878d434d6125b40443fe11fd292d13a4": "0x0000081b", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb393c0875f4080dabc8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47": "0x4ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dccda6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa834992156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507d9c46786caf74af6261626580d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bad35ce880ec90d4696d6f6e80c4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3c25dd840975e8979fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00": "0x4bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11ffab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f", + "0x1cb6f36e027abb2091cfb5110ab5087f878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012b62e212b6a7a9c696d6f6e808e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e592f5ef74f560666173676e8068bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80d": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f7aec8a47707294b61756469802c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xe246ba972f494475d003f3da3e57da21878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d560e0b6940e074462475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a": "0x0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfaa076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed3586975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef7430e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477bf49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c", + "0x5f3e4907f716ac89b6347d15ececedca878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da99677d775b618280f5c76d192b43ea38c38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950deeb3985cefbdfa47061726180882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3dc18ebe8d771cfa002ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864": "0xd9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5bc4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff351efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a", + "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x580200002c010000b004000000005000008000000000200300000000000000001400000004000000040000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b483908290ae9b936c519917440306ea62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503eaa3e59477bc9506261626580720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1": "0x02", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4d92e108794d5f65011d80545fd17e2b58671d451c3d4f6de8c16ea0bc61cf714914d6b2ffa2899872620525419327478": "0x08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d0b00407a10f35a0b00407a10f35a0000", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x1008264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606daebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c439349ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81df268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe705c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x8011fb3641f0641f5570ba8787a64a0ff7d9c9999481f333d7207c4abd7e981c", - "0x5f3e4907f716ac89b6347d15ececedcaac0a2cbf8e355f5ea6cb2de8727bfb0c": "0x54000000", - "0x5f3e4907f716ac89b6347d15ececedcae1791577e4efcb083fdc3cb21e85b2e4": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195004564cbf88f48197626162658074bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e": "0xf268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4b807e5088f44d540645b9875a5c73c31caf27345aebc2fefeca85c9a67f4859eab3178d28ef92244714402290f3f415a": "0xaebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c439340b00407a10f35a0b00407a10f35a0000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x0b00407a10f35a0b00407a10f35a00", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000003adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000005c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x0b00407a10f35a0b00407a10f35a00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504e2a9aebc209c0bf706172618072bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001": "0x9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000003adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x0b00407a10f35a0b00407a10f35a00", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x4c17a9bfdd19411f452fa32420fa7acab622e87e57351f4ba3248ae40ce75123", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc46095c93c32e331c00441c72d2b5397df8011fb3641f0641f5570ba8787a64a0ff7d9c9999481f333d7207c4abd7e981c": "0x9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d0b00407a10f35a0b00407a10f35a0000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade984245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e944edfdfb59968570617261807ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a": "0xaebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade985c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb34245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0xfeca0be2c87141f6074b221c919c0161a1c468d9173c5c1be59b68fab9a0ff937ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a", - "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", - "0x3a6772616e6470615f617574686f726974696573": "0x01109fc415cce1d0b2eed702c9e05f476217d23b46a8723fd56f08cddad650be7c2d0100000000000000feca0be2c87141f6074b221c919c0161a1c468d9173c5c1be59b68fab9a0ff930100000000000000959cebf18fecb305b96fd998c95f850145f52cbbb64b3ef937c0575cc7ebd6520100000000000000fc9d33059580a69454179ffa41cbae6de2bc8d2bd2c3f1d018fe5484a5a919560100000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950585cf1f6f8e46326696d6f6e8086975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef743": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195043f25e7a03a30387696d6f6e8092156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950636f684eb09a15046772616e80d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e193783dd6b845ea6173676e80ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477b": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0xcec5070d609dd3497f72bde07fc96ba0878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x3f1467a096bcd71a5b6a0c8155e20810878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d1e1b030b162ca447061726180042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950feca8028a77ba7626772616e804ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90d10cc4959af6a68eba3bc06d5c7bc28520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x63f78c98723ddc9073523ef3beefda0c878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195021e85cbadb3ce9a26772616e806c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c81": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195054435a901133fb946173676e8016c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950149cf457032f53e57061726180d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x20f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3cf6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f3492c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950091b1bd4e8d4c12061756469802496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9afdf816f281ad669fe59fe0f725f72759ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x000000000300407a10f35a000000000000000000000000000000000000000000000000000000407a10f35a0000000000000000000000407a10f35a00000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x1008264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d9fc415cce1d0b2eed702c9e05f476217d23b46a8723fd56f08cddad650be7c2da8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4fa8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4fa8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4fa8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4faebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934feca0be2c87141f6074b221c919c0161a1c468d9173c5c1be59b68fab9a0ff937ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d959cebf18fecb305b96fd998c95f850145f52cbbb64b3ef937c0575cc7ebd65272bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300172bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300172bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300172bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836fc9d33059580a69454179ffa41cbae6de2bc8d2bd2c3f1d018fe5484a5a9195674bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000005c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x0b00407a10f35a0b00407a10f35a00", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe7003adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x8671d451c3d4f6de8c16ea0bc61cf714914d6b2ffa2899872620525419327478", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000004245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x00", - "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x04000000", - "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x10a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f7ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a72bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e300174bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e", - "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x02", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502d9ed59755f843d8706172618074bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e": "0xf268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e1690303adc196911e491e08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169035c69b53821debaa39ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc472e2b7edbdd300480b61e7ad485ddb234c17a9bfdd19411f452fa32420fa7acab622e87e57351f4ba3248ae40ce75123": "0xf268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f58360b00407a10f35a0b00407a10f35a0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f2f72e2480caa5c862616265807ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a": "0xaebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0xfc9d33059580a69454179ffa41cbae6de2bc8d2bd2c3f1d018fe5484a5a9195674bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e74bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e", - "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x10a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f01000000000000007ca58770eb41c1a68ef77e92255e4635fc11f665cb89aee469e920511c48343a010000000000000072bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001010000000000000074bfb70627416e6e6c4785e928ced384c6c06e5c8dd173a094bc3118da7b673e0100000000000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000004245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x0b00407a10f35a0b00407a10f35a00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e7240ce913e160eb6261626580bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x2b06af9719ac64d755623cda8ddd9b94878d434d6125b40443fe11fd292d13a4": "0x02000000", "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98ce6a96a3775ab416f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe704245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0xcaf27345aebc2fefeca85c9a67f4859eab3178d28ef92244714402290f3f415a", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000004245138345ca3fd8aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x0b00407a10f35a0b00407a10f35a00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195072134b407e7eb75c626162658072bae70a1398c0ba52f815cc5dfbc9ec5c013771e541ae28e05d1129243e3001": "0x9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d47edb55da4253996175646980a8ddd0891e14725841cd1b5581d23806a97f41c28a25436db6473c86e15dcd4f": "0x08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d", - "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x109ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81daebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934f268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f583608264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d", - "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00e1f505", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950eb4a0fcc18f0aed36772616e80fc9d33059580a69454179ffa41cbae6de2bc8d2bd2c3f1d018fe5484a5a91956": "0xf268995cc38974ce0686df1364875f26f2c32b246ddc18835512c3f9969f5836", - "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x6648d7f3382690650c681aba1b993cd11e54deb4df21a3a18c3e2177de9f7342", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc637af01a62f70176413143d943b7d30b9aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934": "0x047374616b696e672000407a10f35a0000000000000000000002", - "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000" + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507acca078b878d43a70617261801efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da942cd783ab1dc80a5347fe6c6f20ea02b9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00": "0x0000000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb33bb8d7990ae3975438f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404": "0x36be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe218e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b752496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500a3d203cf823b13d6173676e80821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b75": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0xf5207f03cfdce586301014700e2c2593878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ee41af0530f856db6772616e8036be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501b1525326b5d47776772616e80fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x00000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ef9482dba3e5b0d862616265807c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da995445d4efb6eae1971fb125f6190c49202a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x6a0da05ca59913bc38a8630590f2627c878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a606acaa4558183a2102457959a213a192ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x2086975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef74348a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae86298788e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2cd2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1ac4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca65192156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950776743a4ae520892617564698064d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0xcd710b30bd2eab0352ddcc26417aa194878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503c0791148c7780b8626162658038757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195097e3e605d1b3579b6173676e804c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x26aa394eea5630e07c48ae0c9558cef7878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x2099d7f109d6e535fb000bba623fd440878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x2f85f1e1378cb2d7b83adbaf0b5869c2878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x3a6772616e6470615f617574686f726974696573": "0x01200e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa0100000000000000fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d0100000000000000e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1010000000000000036be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef401000000000000006c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c810100000000000000d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc3301000000000000004bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf1401000000000000004ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc0100000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f8df002813b43b80696d6f6e80560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3df32aff68041374f02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16": "0x6c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c817c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac0116c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531", + "0x31a3a2ce3603138b8b352e8f192ca55a878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507f532159f03d44eb6175646980f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501e69501baac264d4696d6f6e80ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0x3db7a24cfdc9de785974746c14a99df9878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xd57bce545fb382c34570e5dfbf338f5e878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012fefbc5e5cee2846173676e80fab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0x1a736d37504c2e3fb73dad160c55b291878d434d6125b40443fe11fd292d13a4": "0x02000000", + "0x2371e21684d2fae99bcb4d579242f74ad47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedcaac0a2cbf8e355f5ea6cb2de8727bfb0c": "0x54000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195009ab51029a10e53570617261800e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da945315c068df2baa1c677b9b3e81f7439fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00": "0x000000000100000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xa6b4d5720c90ecd39576e0b9b422f799878d434d6125b40443fe11fd292d13a4": "0x00000800", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502d2937d2d9650f057061726180a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xd5c41b52a371aa36c9254ce34324f2a5878d434d6125b40443fe11fd292d13a4": "0x02000000" }, "childrenDefault": {} } diff --git a/runtime/rococo/src/constants.rs b/runtime/rococo/src/constants.rs index 616c28de1e..a18cd34b28 100644 --- a/runtime/rococo/src/constants.rs +++ b/runtime/rococo/src/constants.rs @@ -33,8 +33,7 @@ pub mod time { use primitives::v0::{Moment, BlockNumber}; pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; - // 30 seconds for now - pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = MINUTES / 2; + pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = 1 * HOURS; // These time units are defined in number of blocks. pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index fddf700770..2282256f6d 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -105,7 +105,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 10, + spec_version: 11, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From b1a4c82d18a26be661aed2e4694380f08eedec9a Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 18 Dec 2020 18:53:35 -0500 Subject: [PATCH 135/203] avoid creating duplicate unbacked spans when we see extra statements (#2145) --- node/core/backing/src/lib.rs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index c1bc4e3669..463dbaed98 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -373,7 +373,7 @@ struct BackgroundValidationParams { pov: Option>, validator_index: Option, n_validators: usize, - span: JaegerSpan, + span: Option, make_command: F, } @@ -395,7 +395,7 @@ async fn validate_and_make_available( let pov = match pov { Some(pov) => pov, None => { - let _span = span.child("request-pov"); + let _span = span.as_ref().map(|s| s.child("request-pov")); request_pov_from_distribution( &mut tx_from, relay_parent, @@ -405,7 +405,7 @@ async fn validate_and_make_available( }; let v = { - let _span = span.child("request-validation"); + let _span = span.as_ref().map(|s| s.child("request-validation")); request_candidate_validation(&mut tx_from, candidate.descriptor.clone(), pov.clone()).await? }; @@ -423,7 +423,7 @@ async fn validate_and_make_available( ); Err(candidate) } else { - let _span = span.child("make-available"); + let _span = span.as_ref().map(|s| s.child("make-available")); let erasure_valid = make_pov_available( &mut tx_from, validator_index, @@ -594,8 +594,7 @@ impl CandidateBackingJob { let candidate_hash = candidate.hash(); self.add_unbacked_span(&parent_span, candidate_hash); - let span = self.get_unbacked_validation_child(&candidate_hash) - .expect("just added unbacked span; qed"); + let span = self.get_unbacked_validation_child(&candidate_hash); self.background_validate_and_make_available(BackgroundValidationParams { tx_from: self.tx_from.clone(), @@ -758,7 +757,7 @@ impl CandidateBackingJob { async fn kick_off_validation_work( &mut self, summary: TableSummary, - span: JaegerSpan, + span: Option, ) -> Result<(), Error> { let candidate_hash = summary.candidate; @@ -808,8 +807,7 @@ impl CandidateBackingJob { if let Statement::Seconded(_) = statement.payload() { self.add_unbacked_span(parent_span, summary.candidate); if Some(summary.group_id) == self.assignment { - let span = self.get_unbacked_validation_child(&summary.candidate) - .expect("just created unbacked span; qed"); + let span = self.get_unbacked_validation_child(&summary.candidate); self.kick_off_validation_work(summary, span).await?; } @@ -848,11 +846,14 @@ impl CandidateBackingJob { } fn add_unbacked_span(&mut self, parent_span: &JaegerSpan, hash: CandidateHash) { - self.unbacked_candidates.entry(hash).or_insert_with(|| { - let mut span = parent_span.child("unbacked-candidate"); - span.add_string_tag("candidate-hash", &format!("{:?}", hash.0)); - span - }); + if !self.backed.contains(&hash) { + // only add if we don't consider this backed. + self.unbacked_candidates.entry(hash).or_insert_with(|| { + let mut span = parent_span.child("unbacked-candidate"); + span.add_string_tag("candidate-hash", &format!("{:?}", hash.0)); + span + }); + } } fn get_unbacked_validation_child(&self, hash: &CandidateHash) -> Option { -- GitLab From 3d9ae5e8d681f24722ce0ca37d8c3620bfb0bd43 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sun, 20 Dec 2020 15:30:02 -0500 Subject: [PATCH 136/203] overseer: observe stalled subsystems and shut down (#2148) * overseer: observe stalled subsystems and shut down * notify on send_message failure as well --- node/overseer/src/lib.rs | 73 +++++++++++++++++++++++++-------------- node/subsystem/src/lib.rs | 3 ++ 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index d802ed451d..9e5ff2a754 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -90,7 +90,7 @@ pub use polkadot_subsystem::{ Subsystem, SubsystemContext, OverseerSignal, FromOverseer, SubsystemError, SubsystemResult, SpawnedSubsystem, ActiveLeavesUpdate, DummySubsystem, }; -use polkadot_node_subsystem_util::metrics::{self, prometheus}; +use polkadot_node_subsystem_util::{TimeoutExt, metrics::{self, prometheus}}; use polkadot_node_primitives::SpawnNamed; @@ -289,6 +289,7 @@ impl Debug for ToOverseer { /// [`Subsystem`]: trait.Subsystem.html struct SubsystemInstance { tx: mpsc::Sender>, + name: &'static str, } /// A context type that is given to the [`Subsystem`] upon spawning. @@ -389,22 +390,41 @@ impl OverseenSubsystem { /// /// If the inner `instance` is `None`, nothing is happening. async fn send_message(&mut self, msg: M) -> SubsystemResult<()> { + const MESSAGE_TIMEOUT: Duration = Duration::from_secs(10); + if let Some(ref mut instance) = self.instance { - instance.tx.send(FromOverseer::Communication { msg }).await?; + match instance.tx.send( + FromOverseer::Communication { msg } + ).timeout(MESSAGE_TIMEOUT).await + { + None => { + tracing::error!(target: LOG_TARGET, "Subsystem {} appears unresponsive.", instance.name); + Err(SubsystemError::SubsystemStalled(instance.name)) + } + Some(res) => res.map_err(Into::into), + } + } else { + Ok(()) } - - Ok(()) } /// Send a signal to the wrapped subsystem. /// /// If the inner `instance` is `None`, nothing is happening. async fn send_signal(&mut self, signal: OverseerSignal) -> SubsystemResult<()> { + const SIGNAL_TIMEOUT: Duration = Duration::from_secs(10); + if let Some(ref mut instance) = self.instance { - instance.tx.send(FromOverseer::Signal(signal)).await?; + match instance.tx.send(FromOverseer::Signal(signal)).timeout(SIGNAL_TIMEOUT).await { + None => { + tracing::error!(target: LOG_TARGET, "Subsystem {} appears unresponsive.", instance.name); + Err(SubsystemError::SubsystemStalled(instance.name)) + } + Some(res) => res.map_err(Into::into), + } + } else { + Ok(()) } - - Ok(()) } } @@ -1319,7 +1339,7 @@ where match msg { Event::MsgToSubsystem(msg) => { - self.route_message(msg).await; + self.route_message(msg).await?; } Event::Stop => { self.stop().await; @@ -1344,7 +1364,7 @@ where }; match msg { - ToOverseer::SubsystemMessage(msg) => self.route_message(msg).await, + ToOverseer::SubsystemMessage(msg) => self.route_message(msg).await?, ToOverseer::SpawnJob { name, s } => { self.spawn_job(name, s); } @@ -1445,55 +1465,57 @@ where } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - async fn route_message(&mut self, msg: AllMessages) { + async fn route_message(&mut self, msg: AllMessages) -> SubsystemResult<()> { self.metrics.on_message_relayed(); match msg { AllMessages::CandidateValidation(msg) => { - let _ = self.candidate_validation_subsystem.send_message(msg).await; + self.candidate_validation_subsystem.send_message(msg).await?; }, AllMessages::CandidateBacking(msg) => { - let _ = self.candidate_backing_subsystem.send_message(msg).await; + self.candidate_backing_subsystem.send_message(msg).await?; }, AllMessages::CandidateSelection(msg) => { - let _ = self.candidate_selection_subsystem.send_message(msg).await; + self.candidate_selection_subsystem.send_message(msg).await?; }, AllMessages::StatementDistribution(msg) => { - let _ = self.statement_distribution_subsystem.send_message(msg).await; + self.statement_distribution_subsystem.send_message(msg).await?; }, AllMessages::AvailabilityDistribution(msg) => { - let _ = self.availability_distribution_subsystem.send_message(msg).await; + self.availability_distribution_subsystem.send_message(msg).await?; }, AllMessages::BitfieldDistribution(msg) => { - let _ = self.bitfield_distribution_subsystem.send_message(msg).await; + self.bitfield_distribution_subsystem.send_message(msg).await?; }, AllMessages::BitfieldSigning(msg) => { - let _ = self.bitfield_signing_subsystem.send_message(msg).await; + self.bitfield_signing_subsystem.send_message(msg).await?; }, AllMessages::Provisioner(msg) => { - let _ = self.provisioner_subsystem.send_message(msg).await; + self.provisioner_subsystem.send_message(msg).await?; }, AllMessages::PoVDistribution(msg) => { - let _ = self.pov_distribution_subsystem.send_message(msg).await; + self.pov_distribution_subsystem.send_message(msg).await?; }, AllMessages::RuntimeApi(msg) => { - let _ = self.runtime_api_subsystem.send_message(msg).await; + self.runtime_api_subsystem.send_message(msg).await?; }, AllMessages::AvailabilityStore(msg) => { - let _ = self.availability_store_subsystem.send_message(msg).await; + self.availability_store_subsystem.send_message(msg).await?; }, AllMessages::NetworkBridge(msg) => { - let _ = self.network_bridge_subsystem.send_message(msg).await; + self.network_bridge_subsystem.send_message(msg).await?; }, AllMessages::ChainApi(msg) => { - let _ = self.chain_api_subsystem.send_message(msg).await; + self.chain_api_subsystem.send_message(msg).await?; }, AllMessages::CollationGeneration(msg) => { - let _ = self.collation_generation_subsystem.send_message(msg).await; + self.collation_generation_subsystem.send_message(msg).await?; }, AllMessages::CollatorProtocol(msg) => { - let _ = self.collator_protocol_subsystem.send_message(msg).await; + self.collator_protocol_subsystem.send_message(msg).await?; }, } + + Ok(()) } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] @@ -1577,6 +1599,7 @@ fn spawn( let instance = Some(SubsystemInstance { tx: to_tx, + name, }); Ok(OverseenSubsystem { diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index 8c0fa1fecf..83b72111d4 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -144,6 +144,9 @@ pub enum SubsystemError { #[error("Failed to {0}")] Context(String), + #[error("Subsystem stalled: {0}")] + SubsystemStalled(&'static str), + /// Per origin (or subsystem) annotations to wrap an error. #[error("Error originated in {origin}")] FromOrigin { -- GitLab From 4685d8f401f34cb360dbe2e90b8e873588d93b12 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sun, 20 Dec 2020 18:52:07 -0500 Subject: [PATCH 137/203] Fix statement distribution: forward statements to other peers. (#2146) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add candidate hash statement circulation span * add relay-parent to hash-span * Some typos and misspellings in docs I found, during my studies. (#2144) * Fix stale link to overseer docs * Some typos and mispellings in docs/comments I found during studying how Polkadot works. * Rococo V1 (#2141) * Update to latest master and use 30 minutes sessions * add bootnodes to chainspec * Update Substrate * Update chain-spec * Update Cargo.lock * GENESIS * Change session length to one hour * Bump spec_version to not fuck anything up ;) Co-authored-by: Erin Grasmick * avoid creating duplicate unbacked spans when we see extra statements (#2145) * improve jaeger spans for statement distribution * tweak and add failing test for repropagation * make a change that gets the test passing * guide: clarify * remove semicolon Co-authored-by: Robert Klotzner Co-authored-by: Bastian Köcher Co-authored-by: Erin Grasmick --- .../network/statement-distribution/src/lib.rs | 245 ++++++++++++++++-- node/subsystem/src/jaeger.rs | 6 +- .../node/backing/statement-distribution.md | 2 +- 3 files changed, 228 insertions(+), 25 deletions(-) diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 02ed1cf7bd..951f76d526 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -389,16 +389,23 @@ struct ActiveHeadData { session_index: sp_staking::SessionIndex, /// How many `Seconded` statements we've seen per validator. seconded_counts: HashMap, + /// A Jaeger span for this head, so we can attach data to it. + span: jaeger::JaegerSpan, } impl ActiveHeadData { - fn new(validators: Vec, session_index: sp_staking::SessionIndex) -> Self { + fn new( + validators: Vec, + session_index: sp_staking::SessionIndex, + relay_parent: &Hash, + ) -> Self { ActiveHeadData { candidates: Default::default(), statements: Default::default(), validators, session_index, seconded_counts: Default::default(), + span: jaeger::hash_span(&relay_parent, "statement-dist-active"), } } @@ -532,6 +539,15 @@ async fn circulate_statement_and_dependents( None => return, }; + let _span = { + let mut span = active_head.span.child("circulate-statement"); + span.add_string_tag( + "candidate-hash", + &format!("{:?}", statement.payload().candidate_hash().0), + ); + span + }; + // First circulate the statement directly to all peers needing it. // The borrow of `active_head` needs to encompass only this (Rust) statement. let outputs: Option<(CandidateHash, Vec)> = { @@ -674,7 +690,7 @@ async fn report_peer( // if we were not already aware of it, along with the corresponding relay-parent. // // This function checks the signature and ensures the statement is compatible with our -// view. +// view. It also notifies candidate backing if the statement was previously unknown. #[tracing::instrument(level = "trace", skip(peer_data, ctx, active_heads, metrics), fields(subsystem = LOG_TARGET))] async fn handle_incoming_message<'a>( peer: PeerId, @@ -708,6 +724,16 @@ async fn handle_incoming_message<'a>( } }; + let candidate_hash = statement.payload().candidate_hash(); + let handle_incoming_span = { + let mut span = active_head.span.child("handle-incoming"); + span.add_string_tag( + "candidate-hash", + &format!("{:?}", candidate_hash.0), + ); + span + }; + // check the signature on the statement. if let Err(()) = check_statement_signature(&active_head, relay_parent, &statement) { report_peer(ctx, peer, COST_INVALID_SIGNATURE).await; @@ -733,7 +759,7 @@ async fn handle_incoming_message<'a>( peer_data, ctx, relay_parent, - fingerprint.0.candidate_hash().clone(), + candidate_hash, &*active_head, metrics, ).await; @@ -753,6 +779,16 @@ async fn handle_incoming_message<'a>( } NotedStatement::Fresh(statement) => { report_peer(ctx, peer, BENEFIT_VALID_STATEMENT_FIRST).await; + + let mut _span = handle_incoming_span.child("notify-backing"); + + // When we receive a new message from a peer, we forward it to the + // candidate backing subsystem. + let message = AllMessages::CandidateBacking( + CandidateBackingMessage::Statement(relay_parent, statement.statement.clone()) + ); + ctx.send_message(message).await; + Some((relay_parent, statement)) } } @@ -815,9 +851,9 @@ async fn handle_network_update( peers.remove(&peer); } NetworkBridgeEvent::PeerMessage(peer, message) => { - match peers.get_mut(&peer) { + let handled_incoming = match peers.get_mut(&peer) { Some(data) => { - let new_stored = handle_incoming_message( + handle_incoming_message( peer, data, &*our_view, @@ -826,21 +862,27 @@ async fn handle_network_update( message, metrics, statement_listeners, - ).await; - - if let Some((relay_parent, new)) = new_stored { - let mut _span = jaeger::hash_span(&relay_parent, "sending-statement"); - // When we receive a new message from a peer, we forward it to the - // candidate backing subsystem. - let message = AllMessages::CandidateBacking( - CandidateBackingMessage::Statement(relay_parent, new.statement.clone()) - ); - ctx.send_message(message).await; - } + ).await } - None => (), - } + None => None, + }; + // if we got a fresh message, we need to circulate it to all peers. + if let Some((relay_parent, statement)) = handled_incoming { + // we can ignore the set of peers who this function returns as now expecting + // dependent statements. + // + // we have the invariant in this subsystem that we never store a `Valid` or `Invalid` + // statement before a `Seconded` statement. `Seconded` statements are the only ones + // that require dependents. Thus, if this is a `Seconded` statement for a candidate we + // were not aware of before, we cannot have any dependent statements from the candidate. + let _ = circulate_statement( + peers, + ctx, + relay_parent, + statement, + ).await; + } } NetworkBridgeEvent::PeerViewChange(peer, view) => { match peers.get_mut(&peer) { @@ -935,7 +977,7 @@ impl StatementDistribution { }; active_heads.entry(relay_parent) - .or_insert(ActiveHeadData::new(validators, session_index)); + .or_insert(ActiveHeadData::new(validators, session_index, &relay_parent)); } } FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => { @@ -945,7 +987,6 @@ impl StatementDistribution { FromOverseer::Communication { msg } => match msg { StatementDistributionMessage::Share(relay_parent, statement) => { let _timer = metrics.time_share(); - let mut _span = jaeger::hash_span(&relay_parent, "circulate-statement"); inform_statement_listeners( &statement, @@ -1072,7 +1113,7 @@ mod tests { use futures::executor::{self, block_on}; use sp_keystore::{CryptoStore, SyncCryptoStorePtr, SyncCryptoStore}; use sc_keystore::LocalKeystore; - use polkadot_node_network_protocol::view; + use polkadot_node_network_protocol::{view, ObservedRole}; #[test] fn active_head_accepts_only_2_seconded_per_validator() { @@ -1110,7 +1151,7 @@ mod tests { c }; - let mut head_data = ActiveHeadData::new(validators, session_index); + let mut head_data = ActiveHeadData::new(validators, session_index, &parent_hash); let keystore: SyncCryptoStorePtr = Arc::new(LocalKeystore::in_memory()); let alice_public = SyncCryptoStore::sr25519_generate_new( @@ -1368,7 +1409,7 @@ mod tests { ).unwrap(); let new_head_data = { - let mut data = ActiveHeadData::new(validators, session_index); + let mut data = ActiveHeadData::new(validators, session_index, &hash_c); let noted = data.note_statement(block_on(SignedFullStatement::sign( &keystore, @@ -1586,4 +1627,162 @@ mod tests { ) }); } + + #[test] + fn receiving_from_one_sends_to_another_and_to_candidate_backing() { + let hash_a = Hash::repeat_byte(1); + + let candidate = { + let mut c = CommittedCandidateReceipt::default(); + c.descriptor.relay_parent = hash_a; + c.descriptor.para_id = 1.into(); + c + }; + + let peer_a = PeerId::random(); + let peer_b = PeerId::random(); + + let validators = vec![ + Sr25519Keyring::Alice.public().into(), + Sr25519Keyring::Bob.public().into(), + Sr25519Keyring::Charlie.public().into(), + ]; + + let session_index = 1; + + let pool = sp_core::testing::TaskExecutor::new(); + let (ctx, mut handle) = polkadot_node_subsystem_test_helpers::make_subsystem_context(pool); + + let bg = async move { + let s = StatementDistribution { metrics: Default::default() }; + s.run(ctx).await.unwrap(); + }; + + let test_fut = async move { + // register our active heads. + handle.send(FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: vec![hash_a].into(), + deactivated: vec![].into(), + }))).await; + + assert_matches!( + handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(r, RuntimeApiRequest::Validators(tx)) + ) + if r == hash_a + => { + let _ = tx.send(Ok(validators)); + } + ); + + assert_matches!( + handle.recv().await, + AllMessages::RuntimeApi( + RuntimeApiMessage::Request(r, RuntimeApiRequest::SessionIndexForChild(tx)) + ) + if r == hash_a + => { + let _ = tx.send(Ok(session_index)); + } + ); + + // notify of peers and view + handle.send(FromOverseer::Communication { + msg: StatementDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerConnected(peer_a.clone(), ObservedRole::Full) + ) + }).await; + + handle.send(FromOverseer::Communication { + msg: StatementDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerConnected(peer_b.clone(), ObservedRole::Full) + ) + }).await; + + handle.send(FromOverseer::Communication { + msg: StatementDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange(peer_a.clone(), view![hash_a]) + ) + }).await; + + handle.send(FromOverseer::Communication { + msg: StatementDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerViewChange(peer_b.clone(), view![hash_a]) + ) + }).await; + + handle.send(FromOverseer::Communication { + msg: StatementDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::OurViewChange(view![hash_a]) + ) + }).await; + + // receive a seconded statement from peer A. it should be propagated onwards to peer B and to + // candidate backing. + let statement = { + let signing_context = SigningContext { + parent_hash: hash_a, + session_index, + }; + + let keystore: SyncCryptoStorePtr = Arc::new(LocalKeystore::in_memory()); + let alice_public = CryptoStore::sr25519_generate_new( + &*keystore, ValidatorId::ID, Some(&Sr25519Keyring::Alice.to_seed()) + ).await.unwrap(); + + SignedFullStatement::sign( + &keystore, + Statement::Seconded(candidate), + &signing_context, + 0, + &alice_public.into(), + ).await.expect("should be signed") + }; + + handle.send(FromOverseer::Communication { + msg: StatementDistributionMessage::NetworkBridgeUpdateV1( + NetworkBridgeEvent::PeerMessage( + peer_a.clone(), + protocol_v1::StatementDistributionMessage::Statement(hash_a, statement.clone()), + ) + ) + }).await; + + assert_matches!( + handle.recv().await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::ReportPeer(p, r) + ) if p == peer_a && r == BENEFIT_VALID_STATEMENT_FIRST => {} + ); + + assert_matches!( + handle.recv().await, + AllMessages::CandidateBacking( + CandidateBackingMessage::Statement(r, s) + ) if r == hash_a && s == statement => {} + ); + + assert_matches!( + handle.recv().await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessage( + recipients, + protocol_v1::ValidationProtocol::StatementDistribution( + protocol_v1::StatementDistributionMessage::Statement(r, s) + ), + ) + ) => { + assert_eq!(recipients, vec![peer_b.clone()]); + assert_eq!(r, hash_a); + assert_eq!(s, statement); + } + ); + }; + + futures::pin_mut!(test_fut); + futures::pin_mut!(bg); + + executor::block_on(future::select(test_fut, bg)); + } } diff --git a/node/subsystem/src/jaeger.rs b/node/subsystem/src/jaeger.rs index cbd8e23ac5..35f5325116 100644 --- a/node/subsystem/src/jaeger.rs +++ b/node/subsystem/src/jaeger.rs @@ -159,9 +159,13 @@ pub fn pov_span(pov: &PoV, span_name: impl Into) -> JaegerSpan { /// Creates a `Span` referring to the given hash. All spans created with [`hash_span`] with the /// same hash (even from multiple different nodes) will be visible in the same view on Jaeger. +/// +/// This span automatically has the `relay-parent` tag set. #[inline(always)] pub fn hash_span(hash: &Hash, span_name: impl Into) -> JaegerSpan { - INSTANCE.read_recursive().span(|| { *hash }, span_name).into() + let mut span: JaegerSpan = INSTANCE.read_recursive().span(|| { *hash }, span_name).into(); + span.add_string_tag("relay-parent", &format!("{:?}", hash)); + span } /// Stateful convenience wrapper around [`mick_jaeger`]. diff --git a/roadmap/implementers-guide/src/node/backing/statement-distribution.md b/roadmap/implementers-guide/src/node/backing/statement-distribution.md index f5258b4155..9e15bc35e5 100644 --- a/roadmap/implementers-guide/src/node/backing/statement-distribution.md +++ b/roadmap/implementers-guide/src/node/backing/statement-distribution.md @@ -38,7 +38,7 @@ There is a very simple state machine which governs which messages we are willing A: Initial State. Receive `SignedFullStatement(Statement::Second)`: extract `Statement`, forward to Candidate Backing and PoV Distribution, proceed to B. Receive any other `SignedFullStatement` variant: drop it. -B: Receive any `SignedFullStatement`: check signature, forward to Candidate Backing. Receive `OverseerMessage::StopWork`: proceed to C. +B: Receive any `SignedFullStatement`: check signature and determine whether the statement is new to us. if new, forward to Candidate Backing and circulate to other peers. Receive `OverseerMessage::StopWork`: proceed to C. C: Receive any message for this block: drop it. -- GitLab From e21f5ceca7ac83e88ee3f524724338b7b3e1b756 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Tue, 22 Dec 2020 00:02:22 +0100 Subject: [PATCH 138/203] Do not use rely on the block initialization when calling runtime APIs (#2123) * Don't initialize block when calling runtime APIs * Adapt check_validation_outputs We split the code path for the inclusion and for the commitments checking. * Slap #[skip_initialize_block] on safe runtime APIs That is, those that should not be affected by this attribute * Make `Scheduled` not ephemeral So that it is persisted in the storage and ready to be inspected by the runtime APIs. This is in contrast to what was before, where we would remove the storage entry and then rely on the scheduling performed by `on_initialize` again. * Add a big fat comment * Typos Co-authored-by: Robert Habermeier * Move session change to the end of the current block Previously, it was the beginning of the next block. This allows us to put #[skip_initialize_block] * Update tests * Fix a test in paras registrar Also refactor it a bit so the next time there are more chances this kind of issue is diagnosed quicker. * Add for_runtime_api to inclusion's check_validation_outputs Co-authored-by: Robert Habermeier --- primitives/src/v1.rs | 33 +++++++++- .../src/runtime/scheduler.md | 7 +-- runtime/common/src/paras_registrar.rs | 19 +++--- runtime/parachains/src/inclusion.rs | 35 ++++++++--- runtime/parachains/src/initializer.rs | 60 ++++++++----------- runtime/parachains/src/runtime_api_impl/v1.rs | 10 ++-- runtime/parachains/src/scheduler.rs | 17 +++--- runtime/parachains/src/util.rs | 10 ++-- 8 files changed, 114 insertions(+), 77 deletions(-) diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 1553100b74..a9666fe793 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -719,16 +719,37 @@ pub struct SessionInfo { sp_api::decl_runtime_apis! { /// The API for querying the state of parachains on-chain. pub trait ParachainHost { + // NOTE: Many runtime API are declared with `#[skip_initialize_block]`. This is because without + // this attribute before each runtime call, the `initialize_block` runtime API will be called. + // That in turns will lead to two things: + // + // (a) The frame_system module will be initialized to the next block. + // (b) Initialization sequences for each runtime module (pallet) will be run. + // + // (a) is undesirable because the runtime APIs are querying the state against a specific + // block state. However, due to that initialization the observed block number would be as if + // it was the next block. + // + // We dont want (b) mainly because block initialization can be very heavy. Upgrade enactment, + // storage migration, and whatever other logic exists in `on_initialize` will be executed + // if not explicitly opted out with the `#[skip_initialize_block]` attribute. + // + // Additionally, some runtime APIs may depend on state that is pruned on the `on_initialize`. + // At the moment of writing, this is `candidate_events`. + /// Get the current validators. + #[skip_initialize_block] fn validators() -> Vec; /// Returns the validator groups and rotation info localized based on the block whose state /// this is invoked on. Note that `now` in the `GroupRotationInfo` should be the successor of /// the number of the block. + #[skip_initialize_block] fn validator_groups() -> (Vec>, GroupRotationInfo); /// Yields information on all availability cores. Cores are either free or occupied. Free /// cores can have paras assigned to them. + #[skip_initialize_block] fn availability_cores() -> Vec>; /// Yields the full validation data for the given ParaId along with an assumption that @@ -736,6 +757,7 @@ sp_api::decl_runtime_apis! { /// /// Returns `None` if either the para is not registered or the assumption is `Freed` /// and the para already occupies a core. + #[skip_initialize_block] fn full_validation_data(para_id: Id, assumption: OccupiedCoreAssumption) -> Option>; @@ -744,24 +766,29 @@ sp_api::decl_runtime_apis! { /// /// Returns `None` if either the para is not registered or the assumption is `Freed` /// and the para already occupies a core. + #[skip_initialize_block] fn persisted_validation_data(para_id: Id, assumption: OccupiedCoreAssumption) -> Option>; /// Checks if the given validation outputs pass the acceptance criteria. + #[skip_initialize_block] fn check_validation_outputs(para_id: Id, outputs: CandidateCommitments) -> bool; /// Returns the session index expected at a child of the block. /// /// This can be used to instantiate a `SigningContext`. + #[skip_initialize_block] fn session_index_for_child() -> SessionIndex; /// Get the session info for the given session, if stored. + #[skip_initialize_block] fn session_info(index: SessionIndex) -> Option; /// Fetch the validation code used by a para, making the given `OccupiedCoreAssumption`. /// /// Returns `None` if either the para is not registered or the assumption is `Freed` /// and the para already occupies a core. + #[skip_initialize_block] fn validation_code(para_id: Id, assumption: OccupiedCoreAssumption) -> Option; @@ -770,26 +797,28 @@ sp_api::decl_runtime_apis! { /// /// `context_height` may be no greater than the height of the block in whose /// state the runtime API is executed. + #[skip_initialize_block] fn historical_validation_code(para_id: Id, context_height: N) -> Option; /// Get the receipt of a candidate pending availability. This returns `Some` for any paras /// assigned to occupied cores in `availability_cores` and `None` otherwise. + #[skip_initialize_block] fn candidate_pending_availability(para_id: Id) -> Option>; /// Get a vector of events concerning candidates that occurred within a block. - // NOTE: this needs to skip block initialization as events are wiped within block - // initialization. #[skip_initialize_block] fn candidate_events() -> Vec>; /// Get all the pending inbound messages in the downward message queue for a para. + #[skip_initialize_block] fn dmq_contents( recipient: Id, ) -> Vec>; /// Get the contents of all channels addressed to the given recipient. Channels that have no /// messages in them are also included. + #[skip_initialize_block] fn inbound_hrmp_channels_contents(recipient: Id) -> BTreeMap>>; } } diff --git a/roadmap/implementers-guide/src/runtime/scheduler.md b/roadmap/implementers-guide/src/runtime/scheduler.md index ead981b6d6..e66eceefc0 100644 --- a/roadmap/implementers-guide/src/runtime/scheduler.md +++ b/roadmap/implementers-guide/src/runtime/scheduler.md @@ -162,7 +162,7 @@ AvailabilityCores: Vec>; ParathreadClaimIndex: Vec; /// The block number where the session start occurred. Used to track how many group rotations have occurred. SessionStartBlock: BlockNumber; -/// Currently scheduled cores - free but up to be occupied. Ephemeral storage item that's wiped on finalization. +/// Currently scheduled cores - free but up to be occupied. Scheduled: Vec, // sorted ascending by CoreIndex. ``` @@ -190,13 +190,12 @@ Actions: ## Initialization +1. Free all scheduled cores and return parathread claims to queue, with retries incremented. 1. Schedule free cores using the `schedule(Vec::new())`. ## Finalization -Actions: - -1. Free all scheduled cores and return parathread claims to queue, with retries incremented. +No finalization routine runs for this module. ## Routines diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index 55facc5d3c..d34df19971 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -579,13 +579,9 @@ mod tests { t.into() } - fn init_block() { - println!("Initializing {}", System::block_number()); - System::on_initialize(System::block_number()); - Initializer::on_initialize(System::block_number()); - } - fn run_to_block(n: BlockNumber) { + // NOTE that this function only simulates modules of interest. Depending on new module may + // require adding it here. println!("Running until block {}", n); while System::block_number() < n { let b = System::block_number(); @@ -593,9 +589,11 @@ mod tests { if System::block_number() > 1 { println!("Finalizing {}", System::block_number()); System::on_finalize(System::block_number()); + Initializer::on_finalize(System::block_number()); } // Session change every 3 blocks. if (b + 1) % 3 == 0 { + println!("New session at {}", System::block_number()); Initializer::on_new_session( false, Vec::new().into_iter(), @@ -603,7 +601,9 @@ mod tests { ); } System::set_block_number(b + 1); - init_block(); + println!("Initializing {}", System::block_number()); + System::on_initialize(System::block_number()); + Initializer::on_initialize(System::block_number()); } } @@ -725,8 +725,9 @@ mod tests { WASM_MAGIC.to_vec().into(), ).is_err()); - run_to_block(6); - + // The session will be changed on the 6th block, as part of finalization. The change + // will be observed on the 7th. + run_to_block(7); assert_ok!(Registrar::register_parachain( 1u32.into(), vec![1; 3].into(), diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 3e312a0d45..95481b57a0 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -399,7 +399,12 @@ impl Module { let validators = Validators::get(); let parent_hash = >::parent_hash(); - let check_cx = CandidateCheckContext::::new(); + + // At the moment we assume (and in fact enforce, below) that the relay-parent is always one + // before of the block where we include a candidate (i.e. this code path). + let now = >::block_number(); + let relay_parent_number = now - One::one(); + let check_cx = CandidateCheckContext::::new(now, relay_parent_number); // do all checks before writing storage. let core_indices_and_backers = { @@ -483,7 +488,10 @@ impl Module { { // this should never fail because the para is registered let persisted_validation_data = - match crate::util::make_persisted_validation_data::(para_id) { + match crate::util::make_persisted_validation_data::( + para_id, + relay_parent_number, + ) { Some(l) => l, None => { // We don't want to error out here because it will @@ -592,7 +600,7 @@ impl Module { hash: candidate_hash, descriptor, availability_votes, - relay_parent_number: check_cx.relay_parent_number, + relay_parent_number, backers, backed_in_number: check_cx.now, }); @@ -603,11 +611,17 @@ impl Module { } /// Run the acceptance criteria checks on the given candidate commitments. - pub(crate) fn check_validation_outputs( + pub(crate) fn check_validation_outputs_for_runtime_api( para_id: ParaId, validation_outputs: primitives::v1::CandidateCommitments, ) -> bool { - if let Err(err) = CandidateCheckContext::::new().check_validation_outputs( + // This function is meant to be called from the runtime APIs against the relay-parent, hence + // `relay_parent_number` is equal to `now`. + let now = >::block_number(); + let relay_parent_number = now; + let check_cx = CandidateCheckContext::::new(now, relay_parent_number); + + if let Err(err) = check_cx.check_validation_outputs( para_id, &validation_outputs.head_data, &validation_outputs.new_validation_code, @@ -812,12 +826,11 @@ struct CandidateCheckContext { } impl CandidateCheckContext { - fn new() -> Self { - let now = >::block_number(); + fn new(now: T::BlockNumber, relay_parent_number: T::BlockNumber) -> Self { Self { config: >::config(), now, - relay_parent_number: now - One::one(), + relay_parent_number, } } @@ -1111,8 +1124,12 @@ mod tests { } fn make_vdata_hash(para_id: ParaId) -> Option { + let relay_parent_number = >::block_number() - 1; let persisted_validation_data - = crate::util::make_persisted_validation_data::(para_id)?; + = crate::util::make_persisted_validation_data::( + para_id, + relay_parent_number, + )?; Some(persisted_validation_data.hash()) } diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index 409b52a260..dd19448925 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -25,7 +25,6 @@ use primitives::v1::ValidatorId; use frame_support::{ decl_storage, decl_module, decl_error, traits::Randomness, }; -use sp_runtime::traits::One; use parity_scale_codec::{Encode, Decode}; use crate::{ configuration::{self, HostConfiguration}, @@ -63,8 +62,7 @@ impl> Default for SessionChangeNotification { - apply_at: N, +struct BufferedSessionChange { validators: Vec, queued: Vec, session_index: sp_staking::SessionIndex, @@ -98,12 +96,12 @@ decl_storage! { HasInitialized: Option<()>; /// Buffered session changes along with the block number at which they should be applied. /// - /// Typically this will be empty or one element long, with the single element having a block - /// number of the next block. + /// Typically this will be empty or one element long. Apart from that this item never hits + /// the storage. /// /// However this is a `Vec` regardless to handle various edge cases that may occur at runtime /// upgrade boundaries or if governance intervenes. - BufferedSessionChanges: Vec>; + BufferedSessionChanges: Vec; } } @@ -117,21 +115,6 @@ decl_module! { type Error = Error; fn on_initialize(now: T::BlockNumber) -> Weight { - // Apply buffered session changes before initializing modules, so they - // can be initialized with respect to the current validator set. - >::mutate(|v| { - let drain_up_to = v.iter().take_while(|b| b.apply_at <= now).count(); - - // apply only the last session as all others lasted less than a block (weirdly). - if let Some(buffered) = v.drain(..drain_up_to).last() { - Self::apply_new_session( - buffered.session_index, - buffered.validators, - buffered.queued, - ); - } - }); - // The other modules are initialized in this order: // - Configuration // - Paras @@ -158,7 +141,6 @@ decl_module! { fn on_finalize() { // reverse initialization order. - hrmp::Module::::initializer_finalize(); ump::Module::::initializer_finalize(); dmp::Module::::initializer_finalize(); @@ -167,6 +149,20 @@ decl_module! { scheduler::Module::::initializer_finalize(); paras::Module::::initializer_finalize(); configuration::Module::::initializer_finalize(); + + // Apply buffered session changes as the last thing. This way the runtime APIs and the + // next block will observe the next session. + // + // Note that we only apply the last session as all others lasted less than a block (weirdly). + if let Some(BufferedSessionChange { + session_index, + validators, + queued, + }) = BufferedSessionChanges::take().pop() + { + Self::apply_new_session(session_index, validators, queued); + } + HasInitialized::take(); } } @@ -213,7 +209,7 @@ impl Module { } /// Should be called when a new session occurs. Buffers the session notification to be applied - /// at the next block. If `queued` is `None`, the `validators` are considered queued. + /// at the end of the block. If `queued` is `None`, the `validators` are considered queued. fn on_new_session<'a, I: 'a>( _changed: bool, session_index: sp_staking::SessionIndex, @@ -229,8 +225,7 @@ impl Module { validators.clone() }; - >::mutate(|v| v.push(BufferedSessionChange { - apply_at: >::block_number() + One::one(), + BufferedSessionChanges::mutate(|v| v.push(BufferedSessionChange { validators, queued, session_index, @@ -264,7 +259,7 @@ impl pallet_session::OneSessionHandler>::get(); + let v = ::get(); assert_eq!(v.len(), 1); - - let apply_at = now + 1; - assert_eq!(v[0].apply_at, apply_at); }); } #[test] - fn session_change_applied_on_initialize() { + fn session_change_applied_on_finalize() { new_test_ext(Default::default()).execute_with(|| { Initializer::on_initialize(1); - - let now = System::block_number(); Initializer::on_new_session( false, 1, @@ -302,9 +292,9 @@ mod tests { Some(Vec::new().into_iter()), ); - Initializer::on_initialize(now + 1); + Initializer::on_finalize(1); - assert!(>::get().is_empty()); + assert!(::get().is_empty()); }); } diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index a171f9eb44..d3ef7a1ee3 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -193,12 +193,13 @@ pub fn full_validation_data( ) -> Option> { + let relay_parent_number = >::block_number(); with_assumption::( para_id, assumption, || Some(ValidationData { - persisted: crate::util::make_persisted_validation_data::(para_id)?, - transient: crate::util::make_transient_validation_data::(para_id)?, + persisted: crate::util::make_persisted_validation_data::(para_id, relay_parent_number)?, + transient: crate::util::make_transient_validation_data::(para_id, relay_parent_number)?, }), ) } @@ -208,10 +209,11 @@ pub fn persisted_validation_data( para_id: ParaId, assumption: OccupiedCoreAssumption, ) -> Option> { + let relay_parent_number = >::block_number(); with_assumption::( para_id, assumption, - || crate::util::make_persisted_validation_data::(para_id), + || crate::util::make_persisted_validation_data::(para_id, relay_parent_number), ) } @@ -220,7 +222,7 @@ pub fn check_validation_outputs( para_id: ParaId, outputs: primitives::v1::CandidateCommitments, ) -> bool { - >::check_validation_outputs(para_id, outputs) + >::check_validation_outputs_for_runtime_api(para_id, outputs) } /// Implementation for the `session_index_for_child` function of the runtime API. diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index 7eaf8e6c13..27fa9efdfd 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -182,7 +182,7 @@ decl_storage! { ParathreadClaimIndex: Vec; /// The block number where the session start occurred. Used to track how many group rotations have occurred. SessionStartBlock get(fn session_start_block): T::BlockNumber; - /// Currently scheduled cores - free but up to be occupied. Ephemeral storage item that's wiped on finalization. + /// Currently scheduled cores - free but up to be occupied. /// /// Bounded by the number of cores: one for each parachain and parathread multiplexer. Scheduled get(fn scheduled): Vec; // sorted ascending by CoreIndex. @@ -203,13 +203,6 @@ decl_module! { impl Module { /// Called by the initializer to initialize the scheduler module. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { - Self::schedule(Vec::new()); - - 0 - } - - /// Called by the initializer to finalize the scheduler module. - pub(crate) fn initializer_finalize() { // Free all scheduled cores and return parathread claims to queue, with retries incremented. let config = >::config(); ParathreadQueue::mutate(|queue| { @@ -225,10 +218,16 @@ impl Module { } } } - }) + }); + + Self::schedule(Vec::new()); + 0 } + /// Called by the initializer to finalize the scheduler module. + pub(crate) fn initializer_finalize() {} + /// Called by the initializer to note that a new session has started. pub(crate) fn initializer_on_new_session(notification: &SessionChangeNotification) { let &SessionChangeNotification { diff --git a/runtime/parachains/src/util.rs b/runtime/parachains/src/util.rs index 151222cbec..d0f8913062 100644 --- a/runtime/parachains/src/util.rs +++ b/runtime/parachains/src/util.rs @@ -17,19 +17,19 @@ //! Utilities that don't belong to any particular module but may draw //! on all modules. -use sp_runtime::traits::{One, Saturating}; +use sp_runtime::traits::Saturating; use primitives::v1::{Id as ParaId, PersistedValidationData, TransientValidationData}; use crate::{configuration, paras, dmp, hrmp}; -/// Make the persisted validation data for a particular parachain. +/// Make the persisted validation data for a particular parachain and a specified relay-parent. /// /// This ties together the storage of several modules. pub fn make_persisted_validation_data( para_id: ParaId, + relay_parent_number: T::BlockNumber, ) -> Option> { let config = >::config(); - let relay_parent_number = >::block_number() - One::one(); Some(PersistedValidationData { parent_head: >::para_head(¶_id)?, @@ -40,14 +40,14 @@ pub fn make_persisted_validation_data( }) } -/// Make the transient validation data for a particular parachain. +/// Make the transient validation data for a particular parachain and a specified relay-parent. /// /// This ties together the storage of several modules. pub fn make_transient_validation_data( para_id: ParaId, + relay_parent_number: T::BlockNumber, ) -> Option> { let config = >::config(); - let relay_parent_number = >::block_number() - One::one(); let freq = config.validation_upgrade_frequency; let delay = config.validation_upgrade_delay; -- GitLab From 2c6920c40fb5ffb607cd2d3607dd182a76cee5d3 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 21 Dec 2020 18:40:15 -0500 Subject: [PATCH 139/203] bump rococo spec version --- runtime/rococo/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 2282256f6d..6093286555 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -105,7 +105,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 11, + spec_version: 12, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From 23f6d8499289283426907b8b5b982060df28efdc Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 24 Dec 2020 13:55:34 -0500 Subject: [PATCH 140/203] Alter behavior of `max_validators_per_core` (#2143) * guide: ensure max-per-core leads to creation of extra, semi-useless cores * alter behavior of max_validators_per_core * guide fixes --- .../src/runtime/scheduler.md | 13 ++++---- runtime/parachains/src/scheduler.rs | 33 +++++++++++-------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/roadmap/implementers-guide/src/runtime/scheduler.md b/roadmap/implementers-guide/src/runtime/scheduler.md index e66eceefc0..0587e9ee8e 100644 --- a/roadmap/implementers-guide/src/runtime/scheduler.md +++ b/roadmap/implementers-guide/src/runtime/scheduler.md @@ -175,13 +175,14 @@ Actions: 1. Set `SessionStartBlock` to current block number. 1. Clear all `Some` members of `AvailabilityCores`. Return all parathread claims to queue with retries un-incremented. 1. Set `configuration = Configuration::configuration()` (see [`HostConfiguration`](../types/runtime.md#host-configuration)) -1. Resize `AvailabilityCores` to have length `Paras::parachains().len() + configuration.parathread_cores with all `None` entries. +1. Determine the number of cores & validator groups as `n_cores`. This is the maximum of + 1. `Paras::parachains().len() + configuration.parathread_cores` + 1. `n_validators / max_validators_per_core` if `configuration.max_validators_per_core` is `Some` and non-zero. +1. Resize `AvailabilityCores` to have length `n_cores` with all `None` entries. 1. Compute new validator groups by shuffling using a secure randomness beacon - - We need a total of `N = Paras::parachains().len() + configuration.parathread_cores` validator groups. - - First, we obtain "shuffled validators" `SV` by shuffling the validators using the `SessionChangeNotification`'s random seed. - - Then, we truncate `SV` to have at most `configuration.max_validators_per_core * N` members, if `configuration.max_validators_per_core` is `Some`. - - Note that the total number of validators `V` in `SV` may not be evenly divided by `N`. - - The groups are selected by partitioning `SV`. The first V % N groups will have (V / N) + 1 members, while the remaining groups will have (V / N) members each. + - We obtain "shuffled validators" `SV` by shuffling the validators using the `SessionChangeNotification`'s random seed. + - Note that the total number of validators `V` in `SV` may not be evenly divided by `n_cores`. + - The groups are selected by partitioning `SV`. The first V % N groups will have (V / n_cores) + 1 members, while the remaining groups will have (V / N) members each. 1. Prune the parathread queue to remove all retries beyond `configuration.parathread_retries`. - Also prune all parathread claims corresponding to de-registered parathreads. - all pruned claims should have their entry removed from the parathread index. diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index 27fa9efdfd..e9c92b9bd7 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -173,7 +173,9 @@ decl_storage! { /// The i'th parachain belongs to the i'th core, with the remaining cores all being /// parathread-multiplexers. /// - /// Bounded by the number of cores: one for each parachain and parathread multiplexer. + /// Bounded by the maximum of either of these two values: + /// * The number of parachains and parathread multiplexers + /// * The number of validators divided by `configuration.max_validators_per_core`. AvailabilityCores get(fn availability_cores): Vec>; /// An index used to ensure that only one claim on a parathread exists in the queue or is /// currently being handled by an occupied core. @@ -240,7 +242,13 @@ impl Module { let mut thread_queue = ParathreadQueue::get(); let n_parachains = >::parachains().len() as u32; - let n_cores = n_parachains + config.parathread_cores; + let n_cores = core::cmp::max( + n_parachains + config.parathread_cores, + match config.max_validators_per_core { + Some(x) if x != 0 => { validators.len() as u32 / x }, + _ => 0, + }, + ); >::set(>::block_number()); AvailabilityCores::mutate(|cores| { @@ -272,14 +280,6 @@ impl Module { shuffled_indices.shuffle(&mut rng); - // trim to max per cores. do this after shuffling. - { - if let Some(max_per_core) = config.max_validators_per_core { - let max_total = max_per_core * n_cores; - shuffled_indices.truncate(max_total as usize); - } - } - let group_base_size = shuffled_indices.len() / n_cores as usize; let n_larger_groups = shuffled_indices.len() % n_cores as usize; @@ -1070,6 +1070,7 @@ mod tests { new_test_ext(genesis_config).execute_with(|| { let chain_a = ParaId::from(1); let chain_b = ParaId::from(2); + let chain_c = ParaId::from(3); // ensure that we have 5 groups by registering 2 parachains. Paras::schedule_para_initialize(chain_a, ParaGenesisArgs { @@ -1082,6 +1083,11 @@ mod tests { validation_code: Vec::new().into(), parachain: true, }); + Paras::schedule_para_initialize(chain_c, ParaGenesisArgs { + genesis_head: Vec::new().into(), + validation_code: Vec::new().into(), + parachain: false, + }); run_to_block(1, |number| match number { 1 => Some(SessionChangeNotification { @@ -1102,11 +1108,10 @@ mod tests { }); let groups = ValidatorGroups::get(); - assert_eq!(groups.len(), 2); + assert_eq!(groups.len(), 7); - // Even though there are 7 validators, only 1 validator per group - // due to the max. - for i in 0..2 { + // Every validator gets its own group, even though there are 2 paras. + for i in 0..7 { assert_eq!(groups[i].len(), 1); } }); -- GitLab From 14da83d53cb580c646a2e7a521126d21f2029711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 24 Dec 2020 21:25:15 +0100 Subject: [PATCH 141/203] Support variable session length for Rococo chains at genesis (#2167) This pr adds support to change the session length of a Rococo chain at genesis. This is rather useful because Rococo has a session length of 1 hour, while on rococo-local you will now get 1 minute. This improves the dev experience, because a parachain is only going live at the start of a new session. --- Cargo.lock | 1 + node/service/Cargo.toml | 1 + node/service/src/chain_spec.rs | 38 ++++++++++++++++++++++++++++++--- runtime/rococo/src/constants.rs | 4 +++- runtime/rococo/src/lib.rs | 9 ++++---- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 334202f74a..7da679fe0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5672,6 +5672,7 @@ dependencies = [ "sp-offchain", "sp-runtime", "sp-session", + "sp-state-machine", "sp-storage", "sp-transaction-pool", "sp-trie", diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 0cb3fdc670..67cdbe1beb 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -39,6 +39,7 @@ sp-session = { git = "https://github.com/paritytech/substrate", branch = "master sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } # Substrate Pallets pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 90b690d4bd..67dece91f3 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -66,7 +66,32 @@ pub type KusamaChainSpec = service::GenericChainSpec; /// The `ChainSpec` parametrized for the rococo runtime. -pub type RococoChainSpec = service::GenericChainSpec; +pub type RococoChainSpec = service::GenericChainSpec; + +/// Extension for the Rococo genesis config to support a custom changes to the genesis state. +#[derive(serde::Serialize, serde::Deserialize)] +pub struct RococoGenesisExt { + /// The runtime genesis config. + runtime_genesis_config: rococo::GenesisConfig, + /// The session length in blocks. + /// + /// If `None` is supplied, the default value is used. + session_length_in_blocks: Option, +} + +impl sp_runtime::BuildStorage for RococoGenesisExt { + fn assimilate_storage( + &self, + storage: &mut sp_core::storage::Storage, + ) -> Result<(), String> { + sp_state_machine::BasicExternalities::execute_with_storage(storage, || { + if let Some(length) = self.session_length_in_blocks.as_ref() { + rococo::constants::time::EpochDurationInBlocks::set(length); + } + }); + self.runtime_genesis_config.assimilate_storage(storage) + } +} pub fn polkadot_config() -> Result { PolkadotChainSpec::from_json_bytes(&include_bytes!("../res/polkadot.json")[..]) @@ -925,7 +950,10 @@ pub fn rococo_staging_testnet_config() -> Result { "Rococo Staging Testnet", "rococo_staging_testnet", ChainType::Live, - move || rococo_staging_testnet_config_genesis(wasm_binary), + move || RococoGenesisExt { + runtime_genesis_config: rococo_staging_testnet_config_genesis(wasm_binary), + session_length_in_blocks: None, + }, boot_nodes, Some( TelemetryEndpoints::new(vec![(ROCOCO_STAGING_TELEMETRY_URL.to_string(), 0)]) @@ -1542,7 +1570,11 @@ pub fn rococo_local_testnet_config() -> Result { "Rococo Local Testnet", "rococo_local_testnet", ChainType::Local, - move || rococo_local_testnet_genesis(wasm_binary), + move || RococoGenesisExt { + runtime_genesis_config: rococo_local_testnet_genesis(wasm_binary), + // Use 1 minute session length. + session_length_in_blocks: Some(10), + }, vec![], None, Some(DEFAULT_PROTOCOL_ID), diff --git a/runtime/rococo/src/constants.rs b/runtime/rococo/src/constants.rs index a18cd34b28..d213acb778 100644 --- a/runtime/rococo/src/constants.rs +++ b/runtime/rococo/src/constants.rs @@ -33,7 +33,9 @@ pub mod time { use primitives::v0::{Moment, BlockNumber}; pub const MILLISECS_PER_BLOCK: Moment = 6000; pub const SLOT_DURATION: Moment = MILLISECS_PER_BLOCK; - pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = 1 * HOURS; + frame_support::parameter_types! { + pub storage EpochDurationInBlocks: BlockNumber = 1 * HOURS; + } // These time units are defined in number of blocks. pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 6093286555..89cb3e2e5f 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -328,13 +328,13 @@ parameter_types! { pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; pub const MaxNominatorRewardedPerValidator: u32 = 64; // quarter of the last session will be for election. - pub const ElectionLookahead: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; + pub ElectionLookahead: BlockNumber = EpochDurationInBlocks::get() / 4; pub const MaxIterations: u32 = 10; pub MinSolutionScoreBump: Perbill = Perbill::from_rational_approximation(5u32, 10_000); } parameter_types! { - pub const SessionDuration: BlockNumber = EPOCH_DURATION_IN_BLOCKS as _; + pub SessionDuration: BlockNumber = EpochDurationInBlocks::get() as _; } parameter_types! { @@ -457,12 +457,11 @@ impl pallet_session::Config for Runtime { } parameter_types! { - pub const EpochDuration: u64 = EPOCH_DURATION_IN_BLOCKS as u64; pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; } impl pallet_babe::Config for Runtime { - type EpochDuration = EpochDuration; + type EpochDuration = EpochDurationInBlocks; type ExpectedBlockTime = ExpectedBlockTime; // session module is the trigger @@ -798,7 +797,7 @@ sp_api::impl_runtime_apis! { // babe_primitives::BabeGenesisConfiguration { slot_duration: Babe::slot_duration(), - epoch_length: EpochDuration::get(), + epoch_length: EpochDurationInBlocks::get().into(), c: PRIMARY_PROBABILITY, genesis_authorities: Babe::authorities(), randomness: Babe::randomness(), -- GitLab From 2495a6b0ef91bad4d980cbbb5161d0fb7d5b78d4 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sat, 26 Dec 2020 23:12:37 -0500 Subject: [PATCH 142/203] Companion for #7789 (BabeApi::current_epoch) (#2170) * point to branch * update babe API implementations * build * Revert "point to branch" This reverts commit 669fde1e58cac1eef1847d5e6b39520fa4953f33. * update Cargo.lock * bump --- Cargo.lock | 276 ++++++++++++++++---------------- runtime/kusama/src/lib.rs | 4 + runtime/polkadot/src/lib.rs | 4 + runtime/rococo/src/lib.rs | 4 + runtime/test-runtime/src/lib.rs | 4 + runtime/westend/src/lib.rs | 4 + 6 files changed, 158 insertions(+), 138 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7da679fe0f..de147d4b5a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6724,7 +6724,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "async-trait", "derive_more", @@ -6752,7 +6752,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6775,7 +6775,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6792,7 +6792,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6813,7 +6813,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6824,7 +6824,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "atty", "chrono", @@ -6867,7 +6867,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6878,7 +6878,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "fnv", @@ -6912,7 +6912,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "blake2-rfc", "hash-db", @@ -6942,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6953,7 +6953,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "fork-tree", @@ -6998,7 +6998,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "futures 0.3.8", @@ -7022,7 +7022,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7035,7 +7035,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "sc-client-api", @@ -7075,7 +7075,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "lazy_static", @@ -7104,7 +7104,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "parity-scale-codec", @@ -7120,7 +7120,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "parity-scale-codec", @@ -7135,7 +7135,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "parity-scale-codec", @@ -7153,7 +7153,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "finality-grandpa", @@ -7190,7 +7190,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "finality-grandpa", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7232,7 +7232,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "async-trait", "derive_more", @@ -7252,7 +7252,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "hash-db", "lazy_static", @@ -7271,7 +7271,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "async-std", "async-trait", @@ -7325,7 +7325,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7340,7 +7340,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "bytes 0.5.6", "fnv", @@ -7367,7 +7367,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "libp2p", @@ -7380,7 +7380,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7389,7 +7389,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "hash-db", @@ -7423,7 +7423,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "futures 0.3.8", @@ -7447,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7465,7 +7465,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "directories 3.0.1", "exit-future", @@ -7529,7 +7529,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "parity-scale-codec", @@ -7544,7 +7544,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7564,7 +7564,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7585,7 +7585,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7609,7 +7609,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "futures 0.3.8", @@ -7631,7 +7631,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8097,7 +8097,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "sp-core", @@ -8109,7 +8109,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "hash-db", "parity-scale-codec", @@ -8125,7 +8125,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8137,7 +8137,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "serde", @@ -8149,7 +8149,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8162,7 +8162,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-api", @@ -8174,7 +8174,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8185,7 +8185,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-api", @@ -8197,7 +8197,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "log", @@ -8215,7 +8215,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "serde", "serde_json", @@ -8224,7 +8224,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8250,7 +8250,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "merlin", "parity-scale-codec", @@ -8270,7 +8270,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8279,7 +8279,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8291,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "base58", "blake2-rfc", @@ -8335,7 +8335,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8344,7 +8344,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8354,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "environmental", "parity-scale-codec", @@ -8365,7 +8365,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "finality-grandpa", "log", @@ -8382,7 +8382,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8394,7 +8394,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "hash-db", @@ -8418,7 +8418,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "lazy_static", "sp-core", @@ -8429,7 +8429,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "async-trait", "derive_more", @@ -8446,7 +8446,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "serde", @@ -8458,7 +8458,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8469,7 +8469,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "sp-api", "sp-core", @@ -8479,7 +8479,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "backtrace", ] @@ -8487,7 +8487,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "serde", "sp-core", @@ -8496,7 +8496,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "either", "hash256-std-hasher", @@ -8517,7 +8517,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8534,7 +8534,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "Inflector", "proc-macro-crate", @@ -8546,7 +8546,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "serde", "serde_json", @@ -8555,7 +8555,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-api", @@ -8568,7 +8568,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8578,7 +8578,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "hash-db", "log", @@ -8600,12 +8600,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8618,7 +8618,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "sp-core", @@ -8631,7 +8631,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8645,7 +8645,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "log", "parity-scale-codec", @@ -8658,7 +8658,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "derive_more", "futures 0.3.8", @@ -8674,7 +8674,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "hash-db", "memory-db", @@ -8688,7 +8688,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "futures-core", @@ -8700,7 +8700,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8712,7 +8712,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8854,7 +8854,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "chrono", "console_error_panic_hook", @@ -8880,7 +8880,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "platforms", ] @@ -8888,7 +8888,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8911,7 +8911,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "async-std", "derive_more", @@ -8925,7 +8925,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8952,7 +8952,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8962,7 +8962,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#330f5c0dbfdf4ffbb891251e90880757687a8a72" +source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 29cb5ed9d3..937da9dc90 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1235,6 +1235,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch_start() } + fn current_epoch() -> babe_primitives::Epoch { + Babe::current_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 66b2752027..c08d14ff8b 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -1231,6 +1231,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch_start() } + fn current_epoch() -> babe_primitives::Epoch { + Babe::current_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 89cb3e2e5f..467c31fa03 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -809,6 +809,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch_start() } + fn current_epoch() -> babe_primitives::Epoch { + Babe::current_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 5e3908f14a..d9c367c5d8 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -741,6 +741,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch_start() } + fn current_epoch() -> babe_primitives::Epoch { + Babe::current_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, _authority_id: babe_primitives::AuthorityId, diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 4cf3e26c5f..8dba7586f3 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -955,6 +955,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch_start() } + fn current_epoch() -> babe_primitives::Epoch { + Babe::current_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, -- GitLab From 85ccbd114db7d819ee0c350f1b152d7292405958 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Dec 2020 14:45:25 +0000 Subject: [PATCH 143/203] Bump thiserror from 1.0.22 to 1.0.23 (#2173) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.22 to 1.0.23. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.22...1.0.23) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- cli/Cargo.toml | 2 +- erasure-coding/Cargo.toml | 2 +- node/collation-generation/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/backing/Cargo.toml | 2 +- node/core/bitfield-signing/Cargo.toml | 2 +- node/core/candidate-selection/Cargo.toml | 2 +- node/core/provisioner/Cargo.toml | 2 +- node/network/availability-distribution/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/pov-distribution/Cargo.toml | 2 +- node/service/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- validation/Cargo.toml | 2 +- 17 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index de147d4b5a..a93aface1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9146,18 +9146,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", diff --git a/Cargo.toml b/Cargo.toml index 57708ded62..0c6d23be7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ readme = "README.md" [dependencies] cli = { package = "polkadot-cli", path = "cli" } color-eyre = "0.5.10" -thiserror = "1.0.22" +thiserror = "1.0.23" futures = "0.3.8" service = { package = "polkadot-service", path = "node/service" } parity-util-mem = { version = "*", default-features = false, features = ["jemalloc-global"] } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 579c32eae2..3ae7ea1ae7 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -15,7 +15,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] log = "0.4.11" -thiserror = "1.0.22" +thiserror = "1.0.23" structopt = { version = "0.3.21", optional = true } wasm-bindgen = { version = "0.2.69", optional = true } wasm-bindgen-futures = { version = "0.4.19", optional = true } diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index 46181fe985..311ad873ed 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -10,4 +10,4 @@ reed_solomon = { package = "reed-solomon-erasure", version = "4.0.2" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.22" +thiserror = "1.0.23" diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index fa19ddec4a..f87884b65f 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -14,7 +14,7 @@ polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.22" +thiserror = "1.0.23" [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 21c2601453..ef4daaaf9d 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -9,7 +9,7 @@ futures = "0.3.8" futures-timer = "3.0.2" kvdb = "0.7.0" kvdb-rocksdb = "0.9.1" -thiserror = "1.0.22" +thiserror = "1.0.23" tracing = "0.1.22" tracing-futures = "0.2.4" diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index f56ef9c274..3c8cdebc67 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -16,7 +16,7 @@ statement-table = { package = "polkadot-statement-table", path = "../../../state bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } tracing = "0.1.22" tracing-futures = "0.2.4" -thiserror = "1.0.22" +thiserror = "1.0.23" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index 3abe9680ae..a4af8eeed5 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -13,4 +13,4 @@ polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } wasm-timer = "0.2.5" -thiserror = "1.0.22" +thiserror = "1.0.23" diff --git a/node/core/candidate-selection/Cargo.toml b/node/core/candidate-selection/Cargo.toml index c62cd0b423..200eb0ed4e 100644 --- a/node/core/candidate-selection/Cargo.toml +++ b/node/core/candidate-selection/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" -thiserror = "1.0.22" +thiserror = "1.0.23" sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index 57034696fb..65d3b445a9 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -9,7 +9,7 @@ bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" -thiserror = "1.0.22" +thiserror = "1.0.23" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index b3dc14422c..41d5aacefc 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -16,7 +16,7 @@ polkadot-node-network-protocol = { path = "../../network/protocol" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.22" +thiserror = "1.0.23" [dev-dependencies] polkadot-subsystem-testhelpers = { package = "polkadot-node-subsystem-test-helpers", path = "../../subsystem-test-helpers" } diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 337dc6e1e8..6160c778f2 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" -thiserror = "1.0.22" +thiserror = "1.0.23" polkadot-primitives = { path = "../../../primitives" } diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 2482758a69..3e3230ab85 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.8" -thiserror = "1.0.21" +thiserror = "1.0.23" tracing = "0.1.22" tracing-futures = "0.2.4" diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 67cdbe1beb..dbe56c08cc 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -58,7 +58,7 @@ hex-literal = "0.3.1" tracing = "0.1.22" tracing-futures = "0.2.4" serde = { version = "1.0.118", features = ["derive"] } -thiserror = "1.0.21" +thiserror = "1.0.23" # Polkadot polkadot-node-core-proposer = { path = "../core/proposer" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 19a0238799..6484fa4a91 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -13,7 +13,7 @@ parity-scale-codec = { version = "1.3.5", default-features = false, features = [ parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.2" streamunordered = "0.5.1" -thiserror = "1.0.22" +thiserror = "1.0.23" tracing = "0.1.22" tracing-futures = "0.2.4" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 9ebfe75171..4a59a32816 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -26,7 +26,7 @@ sc-network = { git = "https://github.com/paritytech/substrate", branch = "master smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.22" +thiserror = "1.0.23" log = "0.4.11" [dev-dependencies] diff --git a/validation/Cargo.toml b/validation/Cargo.toml index 69e61ef71e..7800d39d76 100644 --- a/validation/Cargo.toml +++ b/validation/Cargo.toml @@ -25,7 +25,7 @@ block-builder = { package = "sc-block-builder", git = "https://github.com/parity trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master" } prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/paritytech/substrate", branch = "master" } -thiserror = "1.0.22" +thiserror = "1.0.23" [dev-dependencies] sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -- GitLab From 309cc2622f987bbb81c9b573321ad50eb55e58d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 28 Dec 2020 16:26:01 +0100 Subject: [PATCH 144/203] Companion for Substrate#7775 (#2159) * Companion for Substrate#7775 https://github.com/paritytech/substrate/pull/7775 * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 276 ++++++++++++++++++++++----------------------- cli/src/command.rs | 2 +- 2 files changed, 139 insertions(+), 139 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a93aface1c..af1065d798 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6724,7 +6724,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "async-trait", "derive_more", @@ -6752,7 +6752,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6775,7 +6775,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6792,7 +6792,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6813,7 +6813,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6824,7 +6824,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "atty", "chrono", @@ -6867,7 +6867,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6878,7 +6878,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "fnv", @@ -6912,7 +6912,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "blake2-rfc", "hash-db", @@ -6942,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6953,7 +6953,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "fork-tree", @@ -6998,7 +6998,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "futures 0.3.8", @@ -7022,7 +7022,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7035,7 +7035,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "sc-client-api", @@ -7075,7 +7075,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "lazy_static", @@ -7104,7 +7104,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "parity-scale-codec", @@ -7120,7 +7120,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "parity-scale-codec", @@ -7135,7 +7135,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "parity-scale-codec", @@ -7153,7 +7153,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "finality-grandpa", @@ -7190,7 +7190,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "finality-grandpa", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7232,7 +7232,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "async-trait", "derive_more", @@ -7252,7 +7252,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "hash-db", "lazy_static", @@ -7271,7 +7271,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "async-std", "async-trait", @@ -7325,7 +7325,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7340,7 +7340,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "bytes 0.5.6", "fnv", @@ -7367,7 +7367,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "libp2p", @@ -7380,7 +7380,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7389,7 +7389,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "hash-db", @@ -7423,7 +7423,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "futures 0.3.8", @@ -7447,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7465,7 +7465,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "directories 3.0.1", "exit-future", @@ -7529,7 +7529,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "parity-scale-codec", @@ -7544,7 +7544,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7564,7 +7564,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7585,7 +7585,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7609,7 +7609,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "futures 0.3.8", @@ -7631,7 +7631,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8097,7 +8097,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "sp-core", @@ -8109,7 +8109,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "hash-db", "parity-scale-codec", @@ -8125,7 +8125,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8137,7 +8137,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "serde", @@ -8149,7 +8149,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8162,7 +8162,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-api", @@ -8174,7 +8174,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8185,7 +8185,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-api", @@ -8197,7 +8197,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "log", @@ -8215,7 +8215,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "serde", "serde_json", @@ -8224,7 +8224,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8250,7 +8250,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "merlin", "parity-scale-codec", @@ -8270,7 +8270,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8279,7 +8279,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8291,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "base58", "blake2-rfc", @@ -8335,7 +8335,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8344,7 +8344,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8354,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "environmental", "parity-scale-codec", @@ -8365,7 +8365,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "finality-grandpa", "log", @@ -8382,7 +8382,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8394,7 +8394,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "hash-db", @@ -8418,7 +8418,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "lazy_static", "sp-core", @@ -8429,7 +8429,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "async-trait", "derive_more", @@ -8446,7 +8446,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "serde", @@ -8458,7 +8458,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8469,7 +8469,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "sp-api", "sp-core", @@ -8479,7 +8479,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "backtrace", ] @@ -8487,7 +8487,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "serde", "sp-core", @@ -8496,7 +8496,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "either", "hash256-std-hasher", @@ -8517,7 +8517,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8534,7 +8534,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "Inflector", "proc-macro-crate", @@ -8546,7 +8546,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "serde", "serde_json", @@ -8555,7 +8555,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-api", @@ -8568,7 +8568,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8578,7 +8578,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "hash-db", "log", @@ -8600,12 +8600,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8618,7 +8618,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "sp-core", @@ -8631,7 +8631,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8645,7 +8645,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "log", "parity-scale-codec", @@ -8658,7 +8658,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "derive_more", "futures 0.3.8", @@ -8674,7 +8674,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "hash-db", "memory-db", @@ -8688,7 +8688,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "futures-core", @@ -8700,7 +8700,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8712,7 +8712,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8854,7 +8854,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "chrono", "console_error_panic_hook", @@ -8880,7 +8880,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "platforms", ] @@ -8888,7 +8888,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8911,7 +8911,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "async-std", "derive_more", @@ -8925,7 +8925,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8952,7 +8952,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8962,7 +8962,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate?branch=master#281f81c971b720833d01a3c3ab23c0ef21754084" +source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/cli/src/command.rs b/cli/src/command.rs index a81755634a..1c9881de51 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -272,7 +272,7 @@ pub fn run() -> Result<()> { cmd.run::(config) }) }, - Some(Subcommand::Key(cmd)) => cmd.run(), + Some(Subcommand::Key(cmd)) => cmd.run(&cli), }?; Ok(()) } -- GitLab From 6f2f7b16e8fc30cdf3e88876a6bdfeb66ea2410e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Dec 2020 09:52:52 +0100 Subject: [PATCH 145/203] Bump serde_json from 1.0.60 to 1.0.61 (#2178) Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.60 to 1.0.61. - [Release notes](https://github.com/serde-rs/json/releases) - [Commits](https://github.com/serde-rs/json/compare/v1.0.60...v1.0.61) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/test/service/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af1065d798..fb7bb8a24a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7841,9 +7841,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" +checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" dependencies = [ "itoa", "ryu", diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 38a3a49b39..cf13d08c08 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -57,6 +57,6 @@ substrate-test-client = { git = "https://github.com/paritytech/substrate", branc [dev-dependencies] pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -serde_json = "1.0.60" +serde_json = "1.0.61" substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } tokio = { version = "0.2", features = ["macros"] } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 81195872bd..a98bcfac3f 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -51,7 +51,7 @@ pallet-randomness-collective-flip = { git = "https://github.com/paritytech/subst pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } trie-db = "0.22.1" -serde_json = "1.0.60" +serde_json = "1.0.61" libsecp256k1 = "0.3.5" [features] diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 2af5811f6c..f424c3baac 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -82,7 +82,7 @@ tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } separator = "0.4.1" -serde_json = "1.0.60" +serde_json = "1.0.61" [build-dependencies] substrate-wasm-builder = "3.0.0" diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 9899a77986..655da89065 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -52,7 +52,7 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.60" +serde_json = "1.0.61" libsecp256k1 = "0.3.5" sp-version = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master"} diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index f13b4b0069..2f9d889106 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -80,7 +80,7 @@ tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } trie-db = "0.22.1" -serde_json = "1.0.60" +serde_json = "1.0.61" [build-dependencies] substrate-wasm-builder = "3.0.0" diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index f971d66835..c87678e3aa 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -62,7 +62,7 @@ libsecp256k1 = "0.3.5" tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.60" +serde_json = "1.0.61" [build-dependencies] substrate-wasm-builder = "3.0.0" diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index bc2a72e721..da4057f1a0 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -81,7 +81,7 @@ libsecp256k1 = "0.3.5" tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -serde_json = "1.0.60" +serde_json = "1.0.61" [build-dependencies] substrate-wasm-builder = "3.0.0" -- GitLab From e76e543da328df3c4452fa3125d06c72add9f7d3 Mon Sep 17 00:00:00 2001 From: RK Date: Wed, 30 Dec 2020 00:39:03 +0530 Subject: [PATCH 146/203] Allow council to slash treasury tip (#2147) * wk2052 | D1 |Allow council to slash treasury tip | p1 * wk2052 | D1 | Allow council to slash treasury tip | p2 * Update Cargo.lock * "Update Substrate" Co-authored-by: Shawn Tabrizi Co-authored-by: parity-processbot <> --- Cargo.lock | 276 ++++++++++---------- runtime/kusama/src/weights/pallet_tips.rs | 31 ++- runtime/polkadot/src/weights/pallet_tips.rs | 30 ++- 3 files changed, 181 insertions(+), 156 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb7bb8a24a..6fc51c0cae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6724,7 +6724,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "async-trait", "derive_more", @@ -6752,7 +6752,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6775,7 +6775,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6792,7 +6792,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6813,7 +6813,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6824,7 +6824,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "atty", "chrono", @@ -6867,7 +6867,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6878,7 +6878,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "fnv", @@ -6912,7 +6912,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "blake2-rfc", "hash-db", @@ -6942,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6953,7 +6953,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "fork-tree", @@ -6998,7 +6998,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "futures 0.3.8", @@ -7022,7 +7022,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7035,7 +7035,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "sc-client-api", @@ -7075,7 +7075,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "lazy_static", @@ -7104,7 +7104,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "parity-scale-codec", @@ -7120,7 +7120,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "parity-scale-codec", @@ -7135,7 +7135,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "parity-scale-codec", @@ -7153,7 +7153,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "finality-grandpa", @@ -7190,7 +7190,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "finality-grandpa", @@ -7214,7 +7214,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7232,7 +7232,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "async-trait", "derive_more", @@ -7252,7 +7252,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "hash-db", "lazy_static", @@ -7271,7 +7271,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "async-std", "async-trait", @@ -7325,7 +7325,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7340,7 +7340,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "bytes 0.5.6", "fnv", @@ -7367,7 +7367,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "libp2p", @@ -7380,7 +7380,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7389,7 +7389,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "hash-db", @@ -7423,7 +7423,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "futures 0.3.8", @@ -7447,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7465,7 +7465,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "directories 3.0.1", "exit-future", @@ -7529,7 +7529,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "parity-scale-codec", @@ -7544,7 +7544,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7564,7 +7564,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7585,7 +7585,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7609,7 +7609,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "futures 0.3.8", @@ -7631,7 +7631,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8097,7 +8097,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "sp-core", @@ -8109,7 +8109,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "hash-db", "parity-scale-codec", @@ -8125,7 +8125,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8137,7 +8137,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "serde", @@ -8149,7 +8149,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8162,7 +8162,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-api", @@ -8174,7 +8174,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8185,7 +8185,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-api", @@ -8197,7 +8197,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "log", @@ -8215,7 +8215,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "serde", "serde_json", @@ -8224,7 +8224,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8250,7 +8250,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "merlin", "parity-scale-codec", @@ -8270,7 +8270,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8279,7 +8279,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8291,7 +8291,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "base58", "blake2-rfc", @@ -8335,7 +8335,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8344,7 +8344,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8354,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "environmental", "parity-scale-codec", @@ -8365,7 +8365,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "finality-grandpa", "log", @@ -8382,7 +8382,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8394,7 +8394,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "hash-db", @@ -8418,7 +8418,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "lazy_static", "sp-core", @@ -8429,7 +8429,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "async-trait", "derive_more", @@ -8446,7 +8446,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "serde", @@ -8458,7 +8458,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8469,7 +8469,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "sp-api", "sp-core", @@ -8479,7 +8479,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "backtrace", ] @@ -8487,7 +8487,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "serde", "sp-core", @@ -8496,7 +8496,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "either", "hash256-std-hasher", @@ -8517,7 +8517,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8534,7 +8534,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "Inflector", "proc-macro-crate", @@ -8546,7 +8546,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "serde", "serde_json", @@ -8555,7 +8555,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-api", @@ -8568,7 +8568,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8578,7 +8578,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "hash-db", "log", @@ -8600,12 +8600,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8618,7 +8618,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "sp-core", @@ -8631,7 +8631,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8645,7 +8645,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "log", "parity-scale-codec", @@ -8658,7 +8658,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "derive_more", "futures 0.3.8", @@ -8674,7 +8674,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "hash-db", "memory-db", @@ -8688,7 +8688,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "futures-core", @@ -8700,7 +8700,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8712,7 +8712,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8854,7 +8854,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "chrono", "console_error_panic_hook", @@ -8880,7 +8880,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "platforms", ] @@ -8888,7 +8888,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8911,7 +8911,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "async-std", "derive_more", @@ -8925,7 +8925,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8952,7 +8952,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8962,7 +8962,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#54bde60cfd2c544c54e9e8623b6b8725b99557f8" +source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/kusama/src/weights/pallet_tips.rs b/runtime/kusama/src/weights/pallet_tips.rs index 1f1a59faba..7a30ae060b 100644 --- a/runtime/kusama/src/weights/pallet_tips.rs +++ b/runtime/kusama/src/weights/pallet_tips.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for pallet_tips //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-11-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 // Executed Command: @@ -35,6 +35,7 @@ // --output=./frame/tips/src/weights.rs // --template=./.maintain/frame-weight-template.hbs + #![allow(unused_parens)] #![allow(unused_imports)] @@ -45,33 +46,45 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_tips::WeightInfo for WeightInfo { fn report_awesome(r: u32, ) -> Weight { - (70_338_000 as Weight) + (73_795_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn retract_tip() -> Weight { - (59_051_000 as Weight) + (61_753_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip_new(r: u32, t: u32, ) -> Weight { - (41_984_000 as Weight) + (47_731_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((180_000 as Weight).saturating_mul(t as Weight)) + // Standard Error: 0 + .saturating_add((154_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip(t: u32, ) -> Weight { - (33_313_000 as Weight) - .saturating_add((700_000 as Weight).saturating_mul(t as Weight)) + (35_215_000 as Weight) + // Standard Error: 1_000 + .saturating_add((712_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn close_tip(t: u32, ) -> Weight { - (110_781_000 as Weight) - .saturating_add((364_000 as Weight).saturating_mul(t as Weight)) + (117_027_000 as Weight) + // Standard Error: 1_000 + .saturating_add((375_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } + fn slash_tip(t: u32, ) -> Weight { + (37_184_000 as Weight) + // Standard Error: 0 + .saturating_add((11_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } } diff --git a/runtime/polkadot/src/weights/pallet_tips.rs b/runtime/polkadot/src/weights/pallet_tips.rs index d9689abb05..7a30ae060b 100644 --- a/runtime/polkadot/src/weights/pallet_tips.rs +++ b/runtime/polkadot/src/weights/pallet_tips.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for pallet_tips //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 -//! DATE: 2020-11-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2020-12-20, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 // Executed Command: @@ -46,33 +46,45 @@ use sp_std::marker::PhantomData; pub struct WeightInfo(PhantomData); impl pallet_tips::WeightInfo for WeightInfo { fn report_awesome(r: u32, ) -> Weight { - (70_338_000 as Weight) + (73_795_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn retract_tip() -> Weight { - (59_051_000 as Weight) + (61_753_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip_new(r: u32, t: u32, ) -> Weight { - (41_984_000 as Weight) + (47_731_000 as Weight) + // Standard Error: 0 .saturating_add((2_000 as Weight).saturating_mul(r as Weight)) - .saturating_add((180_000 as Weight).saturating_mul(t as Weight)) + // Standard Error: 0 + .saturating_add((154_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn tip(t: u32, ) -> Weight { - (33_313_000 as Weight) - .saturating_add((700_000 as Weight).saturating_mul(t as Weight)) + (35_215_000 as Weight) + // Standard Error: 1_000 + .saturating_add((712_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn close_tip(t: u32, ) -> Weight { - (110_781_000 as Weight) - .saturating_add((364_000 as Weight).saturating_mul(t as Weight)) + (117_027_000 as Weight) + // Standard Error: 1_000 + .saturating_add((375_000 as Weight).saturating_mul(t as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } + fn slash_tip(t: u32, ) -> Weight { + (37_184_000 as Weight) + // Standard Error: 0 + .saturating_add((11_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } } -- GitLab From 58b7eb5607e8524cd75eb0a400862237e01ab7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 30 Dec 2020 00:39:17 +0100 Subject: [PATCH 147/203] Companion for Substrate#7795 (#2180) * Companion for Substrate#7795 https://github.com/paritytech/substrate/pull/7795 * Fix missing test * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 277 +++++++++--------- cli/Cargo.toml | 1 - cli/src/command.rs | 10 +- node/test/service/tests/build-blocks.rs | 10 +- .../adder/collator/tests/integration.rs | 10 +- 5 files changed, 165 insertions(+), 143 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6fc51c0cae..3a3d01c62d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4944,7 +4944,6 @@ dependencies = [ "polkadot-service", "sc-cli", "sc-service", - "sc-tracing", "sp-core", "sp-trie", "structopt", @@ -6724,7 +6723,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "async-trait", "derive_more", @@ -6752,7 +6751,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6775,7 +6774,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6792,7 +6791,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6813,7 +6812,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6824,7 +6823,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "atty", "chrono", @@ -6867,7 +6866,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6878,7 +6877,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "fnv", @@ -6912,7 +6911,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "blake2-rfc", "hash-db", @@ -6942,7 +6941,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6953,7 +6952,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "fork-tree", @@ -6998,7 +6997,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "futures 0.3.8", @@ -7022,7 +7021,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7035,7 +7034,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7061,7 +7060,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "sc-client-api", @@ -7075,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "lazy_static", @@ -7104,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "parity-scale-codec", @@ -7120,7 +7119,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "parity-scale-codec", @@ -7135,7 +7134,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "parity-scale-codec", @@ -7153,7 +7152,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "finality-grandpa", @@ -7190,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "finality-grandpa", @@ -7214,7 +7213,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7232,7 +7231,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "async-trait", "derive_more", @@ -7252,7 +7251,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "hash-db", "lazy_static", @@ -7271,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "async-std", "async-trait", @@ -7325,7 +7324,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7340,7 +7339,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "bytes 0.5.6", "fnv", @@ -7367,7 +7366,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "libp2p", @@ -7380,7 +7379,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7389,7 +7388,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "hash-db", @@ -7423,7 +7422,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "futures 0.3.8", @@ -7447,7 +7446,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7465,7 +7464,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "directories 3.0.1", "exit-future", @@ -7529,7 +7528,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "parity-scale-codec", @@ -7544,7 +7543,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7564,7 +7563,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7585,7 +7584,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7609,7 +7608,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "futures 0.3.8", @@ -7631,7 +7630,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8097,7 +8096,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "sp-core", @@ -8109,7 +8108,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "hash-db", "parity-scale-codec", @@ -8125,7 +8124,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8137,7 +8136,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "serde", @@ -8149,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8162,7 +8161,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-api", @@ -8174,7 +8173,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8185,7 +8184,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-api", @@ -8197,7 +8196,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "log", @@ -8215,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "serde", "serde_json", @@ -8224,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8250,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "merlin", "parity-scale-codec", @@ -8270,7 +8269,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8279,7 +8278,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8291,7 +8290,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "base58", "blake2-rfc", @@ -8335,7 +8334,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8344,7 +8343,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8354,7 +8353,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "environmental", "parity-scale-codec", @@ -8365,7 +8364,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "finality-grandpa", "log", @@ -8382,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8394,7 +8393,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "hash-db", @@ -8418,7 +8417,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "lazy_static", "sp-core", @@ -8429,7 +8428,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "async-trait", "derive_more", @@ -8446,7 +8445,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "serde", @@ -8458,7 +8457,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8469,7 +8468,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "sp-api", "sp-core", @@ -8479,7 +8478,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "backtrace", ] @@ -8487,7 +8486,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "serde", "sp-core", @@ -8496,7 +8495,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "either", "hash256-std-hasher", @@ -8517,7 +8516,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8534,7 +8533,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "Inflector", "proc-macro-crate", @@ -8546,7 +8545,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "serde", "serde_json", @@ -8555,7 +8554,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-api", @@ -8568,7 +8567,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8578,7 +8577,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "hash-db", "log", @@ -8600,12 +8599,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8618,7 +8617,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "sp-core", @@ -8631,7 +8630,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8645,7 +8644,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "log", "parity-scale-codec", @@ -8658,7 +8657,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "derive_more", "futures 0.3.8", @@ -8674,7 +8673,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "hash-db", "memory-db", @@ -8688,7 +8687,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "futures-core", @@ -8700,7 +8699,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8712,7 +8711,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8854,7 +8853,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "chrono", "console_error_panic_hook", @@ -8880,7 +8879,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "platforms", ] @@ -8888,7 +8887,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8911,7 +8910,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "async-std", "derive_more", @@ -8925,7 +8924,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8952,7 +8951,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8962,7 +8961,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#f1d8be84f443b9c6198d8c788118e30ef6e2a646" +source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3ae7ea1ae7..2984e9dadd 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -24,7 +24,6 @@ service = { package = "polkadot-service", path = "../node/service", default-feat polkadot-parachain = { path = "../parachain", optional = true } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } tracing-futures = "0.2.4" frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } diff --git a/cli/src/command.rs b/cli/src/command.rs index 1c9881de51..45e0750c3f 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -252,7 +252,15 @@ pub fn run() -> Result<()> { }) }, Some(Subcommand::ValidationWorker(cmd)) => { - let _ = sc_cli::init_logger("", sc_tracing::TracingReceiver::Log, None, false); + let _ = sc_cli::init_logger( + sc_cli::InitLoggerParams { + pattern: "".into(), + tracing_receiver: Default::default(), + tracing_targets: None, + disable_log_reloading: false, + disable_log_color: true, + }, + ); if cfg!(feature = "browser") || cfg!(target_os = "android") { Err(sc_cli::Error::Input("Cannot run validation worker in browser".into())) diff --git a/node/test/service/tests/build-blocks.rs b/node/test/service/tests/build-blocks.rs index bad22e7f0f..0cf55e3858 100644 --- a/node/test/service/tests/build-blocks.rs +++ b/node/test/service/tests/build-blocks.rs @@ -21,7 +21,15 @@ use sp_keyring::Sr25519Keyring; #[substrate_test_utils::test] async fn ensure_test_service_build_blocks(task_executor: TaskExecutor) { - sc_cli::init_logger("", Default::default(), None, false).expect("Sets up logger"); + sc_cli::init_logger( + sc_cli::InitLoggerParams { + pattern: "".into(), + tracing_receiver: Default::default(), + tracing_targets: None, + disable_log_reloading: false, + disable_log_color: true, + }, + ).expect("Sets up logger"); let mut alice = run_validator_node( task_executor.clone(), diff --git a/parachain/test-parachains/adder/collator/tests/integration.rs b/parachain/test-parachains/adder/collator/tests/integration.rs index 6754c6a437..3be0f906cc 100644 --- a/parachain/test-parachains/adder/collator/tests/integration.rs +++ b/parachain/test-parachains/adder/collator/tests/integration.rs @@ -25,7 +25,15 @@ async fn collating_using_adder_collator(task_executor: sc_service::TaskExecutor) use futures::join; use polkadot_primitives::v1::Id as ParaId; - sc_cli::init_logger("", Default::default(), None, false).expect("Sets up logger"); + sc_cli::init_logger( + sc_cli::InitLoggerParams { + pattern: "".into(), + tracing_receiver: Default::default(), + tracing_targets: None, + disable_log_reloading: false, + disable_log_color: true, + }, + ).expect("Sets up logger"); let para_id = ParaId::from(100); -- GitLab From 4e73c1d3bfb5831c57e2ce27bac178b96622047a Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 30 Dec 2020 08:39:09 -0400 Subject: [PATCH 148/203] Migrate Claims Pallet to WeightInfo (#2171) * migrate claims to weightinfo * fix up * fix benchmark * cargo run --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/ * fix test runtime * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/ * Update runtime/kusama/src/weights/claims.rs * use path for pallet * Update Cargo.lock * cargo run --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/ * Delete runtime_common::claims.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_claims.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_claims.rs * use full automation file * patch import * consolidate benchmark logic * fix * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_common::claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_common_claims.rs * cargo run --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::claims --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_claims.rs * update weight comments Co-authored-by: Parity Benchmarking Bot --- Cargo.lock | 276 +++++++++--------- runtime/common/src/claims.rs | 259 ++++++++-------- runtime/kusama/src/lib.rs | 3 +- runtime/kusama/src/weights/mod.rs | 1 + .../src/weights/runtime_common_claims.rs | 71 +++++ runtime/polkadot/src/lib.rs | 3 +- runtime/polkadot/src/weights/mod.rs | 1 + .../src/weights/runtime_common_claims.rs | 71 +++++ runtime/test-runtime/src/lib.rs | 1 + 9 files changed, 412 insertions(+), 274 deletions(-) create mode 100644 runtime/kusama/src/weights/runtime_common_claims.rs create mode 100644 runtime/polkadot/src/weights/runtime_common_claims.rs diff --git a/Cargo.lock b/Cargo.lock index 3a3d01c62d..01f104c583 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6723,7 +6723,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "async-trait", "derive_more", @@ -6751,7 +6751,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6774,7 +6774,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6791,7 +6791,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6812,7 +6812,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6823,7 +6823,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "atty", "chrono", @@ -6866,7 +6866,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6877,7 +6877,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "fnv", @@ -6911,7 +6911,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "blake2-rfc", "hash-db", @@ -6941,7 +6941,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6952,7 +6952,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "fork-tree", @@ -6997,7 +6997,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7021,7 +7021,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7034,7 +7034,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7060,7 +7060,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "sc-client-api", @@ -7074,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "lazy_static", @@ -7103,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "parity-scale-codec", @@ -7119,7 +7119,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "parity-scale-codec", @@ -7134,7 +7134,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "parity-scale-codec", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "finality-grandpa", @@ -7189,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "finality-grandpa", @@ -7213,7 +7213,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7231,7 +7231,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "async-trait", "derive_more", @@ -7251,7 +7251,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "hash-db", "lazy_static", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "async-std", "async-trait", @@ -7324,7 +7324,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7339,7 +7339,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "bytes 0.5.6", "fnv", @@ -7366,7 +7366,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "libp2p", @@ -7379,7 +7379,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7388,7 +7388,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "hash-db", @@ -7422,7 +7422,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7446,7 +7446,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7464,7 +7464,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "directories 3.0.1", "exit-future", @@ -7528,7 +7528,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "parity-scale-codec", @@ -7543,7 +7543,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7563,7 +7563,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7584,7 +7584,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7608,7 +7608,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7630,7 +7630,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8096,7 +8096,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "sp-core", @@ -8108,7 +8108,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "hash-db", "parity-scale-codec", @@ -8124,7 +8124,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8136,7 +8136,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "serde", @@ -8148,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8161,7 +8161,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8173,7 +8173,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8184,7 +8184,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8196,7 +8196,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "log", @@ -8214,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "serde", "serde_json", @@ -8223,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8249,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "merlin", "parity-scale-codec", @@ -8269,7 +8269,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8278,7 +8278,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8290,7 +8290,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "base58", "blake2-rfc", @@ -8334,7 +8334,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8343,7 +8343,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8353,7 +8353,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "environmental", "parity-scale-codec", @@ -8364,7 +8364,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "finality-grandpa", "log", @@ -8381,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8393,7 +8393,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "hash-db", @@ -8417,7 +8417,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "lazy_static", "sp-core", @@ -8428,7 +8428,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "async-trait", "derive_more", @@ -8445,7 +8445,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "serde", @@ -8457,7 +8457,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8468,7 +8468,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "sp-api", "sp-core", @@ -8478,7 +8478,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "backtrace", ] @@ -8486,7 +8486,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "serde", "sp-core", @@ -8495,7 +8495,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "either", "hash256-std-hasher", @@ -8516,7 +8516,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8533,7 +8533,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "Inflector", "proc-macro-crate", @@ -8545,7 +8545,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "serde", "serde_json", @@ -8554,7 +8554,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8567,7 +8567,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8577,7 +8577,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "hash-db", "log", @@ -8599,12 +8599,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8617,7 +8617,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "sp-core", @@ -8630,7 +8630,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8644,7 +8644,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "log", "parity-scale-codec", @@ -8657,7 +8657,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "derive_more", "futures 0.3.8", @@ -8673,7 +8673,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "hash-db", "memory-db", @@ -8687,7 +8687,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "futures-core", @@ -8699,7 +8699,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8711,7 +8711,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8853,7 +8853,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "chrono", "console_error_panic_hook", @@ -8879,7 +8879,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "platforms", ] @@ -8887,7 +8887,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8910,7 +8910,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "async-std", "derive_more", @@ -8924,7 +8924,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8951,7 +8951,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8961,7 +8961,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#6abbbd639d07f041255fb326491fea27ece8a490" +source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index 1d6f02bfe0..8aebbb2531 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -20,7 +20,9 @@ use sp_std::{prelude::*, fmt::Debug}; use sp_io::{hashing::keccak_256, crypto::secp256k1_ecdsa_recover}; use frame_support::{ decl_event, decl_storage, decl_module, decl_error, ensure, - traits::{Currency, Get, VestingSchedule, EnsureOrigin, IsSubType}, weights::{Pays, DispatchClass} + traits::{Currency, Get, VestingSchedule, EnsureOrigin, IsSubType}, + weights::{Weight, Pays, DispatchClass}, + pallet_prelude::DispatchResultWithPostInfo, }; use frame_system::{ensure_signed, ensure_root, ensure_none}; use parity_scale_codec::{Encode, Decode}; @@ -47,6 +49,24 @@ pub trait Config: frame_system::Config { type VestingSchedule: VestingSchedule; type Prefix: Get<&'static [u8]>; type MoveClaimOrigin: EnsureOrigin; + type WeightInfo: WeightInfo; +} + +pub trait WeightInfo { + fn claim() -> Weight; + fn mint_claim() -> Weight; + fn claim_attest() -> Weight; + fn attest() -> Weight; + fn move_claim() -> Weight; +} + +pub struct TestWeightInfo; +impl WeightInfo for TestWeightInfo { + fn claim() -> Weight { 0 } + fn mint_claim() -> Weight { 0 } + fn claim_attest() -> Weight { 0 } + fn attest() -> Weight { 0 } + fn move_claim() -> Weight { 0 } } /// The kind of a statement an account needs to make for a claim to be valid. @@ -223,25 +243,11 @@ decl_module! { /// /// /// The weight of this call is invariant over the input parameters. - /// - One `eth_recover` operation which involves a keccak hash and a - /// ecdsa recover. - /// - Three storage reads to check if a claim exists for the user, to - /// get the current pot size, to see if there exists a vesting schedule. - /// - Up to one storage write for adding a new vesting schedule. - /// - One `deposit_creating` Currency call. - /// - One storage write to update the total. - /// - Two storage removals for vesting and claims information. - /// - One deposit event. + /// Weight includes logic to validate unsigned `claim` call. /// /// Total Complexity: O(1) - /// ---------------------------- - /// Base Weight: 269.7 µs - /// DB Weight: - /// - Read: Signing, Claims, Total, Claims Vesting, Vesting Vesting, Balance Lock, Account - /// - Write: Vesting Vesting, Account, Balance Lock, Total, Claim, Claims Vesting, Signing - /// Validate Unsigned: +188.7 µs /// - #[weight = T::DbWeight::get().reads_writes(7, 7) + 270_000_000 + 190_000_000] + #[weight = T::WeightInfo::claim()] fn claim(origin, dest: T::AccountId, ethereum_signature: EcdsaSignature) { ensure_none(origin)?; @@ -264,24 +270,11 @@ decl_module! { /// /// /// The weight of this call is invariant over the input parameters. - /// - One storage mutate to increase the total claims available. - /// - One storage write to add a new claim. - /// - Up to one storage write to add a new vesting schedule. + /// We assume worst case that both vesting and statement is being inserted. /// /// Total Complexity: O(1) - /// --------------------- - /// Base Weight: 10.46 µs - /// DB Weight: - /// - Reads: Total - /// - Writes: Total, Claims - /// - Maybe Write: Vesting, Statement /// - #[weight = - T::DbWeight::get().reads_writes(1, 2) - + T::DbWeight::get().writes(vesting_schedule.is_some().into()) - + T::DbWeight::get().writes(statement.is_some().into()) - + 10_000_000 - ] + #[weight = T::WeightInfo::mint_claim()] fn mint_claim(origin, who: EthereumAddress, value: BalanceOf, @@ -322,26 +315,11 @@ decl_module! { /// /// /// The weight of this call is invariant over the input parameters. - /// - One `eth_recover` operation which involves a keccak hash and a - /// ecdsa recover. - /// - Four storage reads to check if a claim exists for the user, to - /// get the current pot size, to see if there exists a vesting schedule, to get the - /// required statement. - /// - Up to one storage write for adding a new vesting schedule. - /// - One `deposit_creating` Currency call. - /// - One storage write to update the total. - /// - Two storage removals for vesting and claims information. - /// - One deposit event. + /// Weight includes logic to validate unsigned `claim_attest` call. /// /// Total Complexity: O(1) - /// ---------------------------- - /// Base Weight: 270.2 µs - /// DB Weight: - /// - Read: Signing, Claims, Total, Claims Vesting, Vesting Vesting, Balance Lock, Account - /// - Write: Vesting Vesting, Account, Balance Lock, Total, Claim, Claims Vesting, Signing - /// Validate Unsigned: +190.1 µs /// - #[weight = T::DbWeight::get().reads_writes(7, 7) + 270_000_000 + 190_000_000] + #[weight = T::WeightInfo::claim_attest()] fn claim_attest(origin, dest: T::AccountId, ethereum_signature: EcdsaSignature, @@ -370,16 +348,13 @@ decl_module! { /// - `statement`: The identity of the statement which is being attested to in the signature. /// /// + /// The weight of this call is invariant over the input parameters. + /// Weight includes logic to do pre-validation on `attest` call. + /// /// Total Complexity: O(1) - /// ---------------------------- - /// Base Weight: 93.3 µs - /// DB Weight: - /// - Read: Preclaims, Signing, Claims, Total, Claims Vesting, Vesting Vesting, Balance Lock, Account - /// - Write: Vesting Vesting, Account, Balance Lock, Total, Claim, Claims Vesting, Signing, Preclaims - /// Validate PreValidateAttests: +8.631 µs /// #[weight = ( - T::DbWeight::get().reads_writes(8, 8) + 90_000_000 + 10_000_000, + T::WeightInfo::attest(), DispatchClass::Normal, Pays::No )] @@ -393,16 +368,12 @@ decl_module! { Preclaims::::remove(&who); } - #[weight = ( - T::DbWeight::get().reads_writes(4, 4) + 100_000_000_000, - DispatchClass::Normal, - Pays::No - )] + #[weight = T::WeightInfo::move_claim()] fn move_claim(origin, old: EthereumAddress, new: EthereumAddress, maybe_preclaim: Option, - ) { + ) -> DispatchResultWithPostInfo { T::MoveClaimOrigin::try_origin(origin).map(|_| ()).or_else(ensure_root)?; Claims::::take(&old).map(|c| Claims::::insert(&new, c)); @@ -411,6 +382,7 @@ decl_module! { maybe_preclaim.map(|preclaim| Preclaims::::mutate(&preclaim, |maybe_o| if maybe_o.as_ref().map_or(false, |o| o == &old) { *maybe_o = Some(new) } )); + Ok(Pays::No.into()) } } } @@ -495,16 +467,14 @@ impl sp_runtime::traits::ValidateUnsigned for Module { let (maybe_signer, maybe_statement) = match call { // - // Base Weight: 188.7 µs (includes the full logic of `validate_unsigned`) - // DB Weight: 2 Read (Claims, Signing) + // The weight of this logic is included in the `claim` dispatchable. // Call::claim(account, ethereum_signature) => { let data = account.using_encoded(to_ascii_hex); (Self::eth_recover(ðereum_signature, &data, &[][..]), None) } // - // Base Weight: 190.1 µs (includes the full logic of `validate_unsigned`) - // DB Weight: 2 Read (Claims, Signing) + // The weight of this logic is included in the `claim_attest` dispatchable. // Call::claim_attest(account, ethereum_signature, statement) => { let data = account.using_encoded(to_ascii_hex); @@ -578,8 +548,7 @@ impl SignedExtension for PrevalidateAttests where } // - // Base Weight: 8.631 µs - // DB Weight: 2 Read (Preclaims, Signing) + // The weight of this logic is included in the `attest` dispatchable. // fn validate( &self, @@ -724,6 +693,7 @@ mod tests { type VestingSchedule = Vesting; type Prefix = Prefix; type MoveClaimOrigin = frame_system::EnsureSignedBy; + type WeightInfo = TestWeightInfo; } type System = frame_system::Module; type Balances = pallet_balances::Module; @@ -1197,33 +1167,44 @@ mod benchmarking { } benchmarks! { - _ { - // Create claims in storage. Two are created at a time! - let c in 0 .. MAX_CLAIMS / 2 => { + _ { } + + // Benchmark `claim` including `validate_unsigned` logic. + claim { + let c = MAX_CLAIMS; + + for i in 0 .. c / 2 { create_claim::(c)?; create_claim_attest::(u32::max_value() - c)?; - }; - } + } - // Benchmark `claim` for different users. - claim { - let u in 0 .. 1000; - let secret_key = secp256k1::SecretKey::parse(&keccak_256(&u.encode())).unwrap(); + let secret_key = secp256k1::SecretKey::parse(&keccak_256(&c.encode())).unwrap(); let eth_address = eth(&secret_key); - let account: T::AccountId = account("user", u, SEED); + let account: T::AccountId = account("user", c, SEED); let vesting = Some((100_000u32.into(), 1_000u32.into(), 100u32.into())); let signature = sig::(&secret_key, &account.encode(), &[][..]); super::Module::::mint_claim(RawOrigin::Root.into(), eth_address, VALUE.into(), vesting, None)?; assert_eq!(Claims::::get(eth_address), Some(VALUE.into())); - }: _(RawOrigin::None, account, signature) + let source = sp_runtime::transaction_validity::TransactionSource::External; + let call = Call::::claim(account.clone(), signature.clone()); + }: { + super::Module::::validate_unsigned(source, &call)?; + super::Module::::claim(RawOrigin::None.into(), account, signature)?; + } verify { assert_eq!(Claims::::get(eth_address), None); } // Benchmark `mint_claim` when there already exists `c` claims in storage. mint_claim { - let c in ...; - let eth_address = account("eth_address", c, SEED); + let c = MAX_CLAIMS; + + for i in 0 .. c / 2 { + create_claim::(c)?; + create_claim_attest::(u32::max_value() - c)?; + } + + let eth_address = account("eth_address", 0, SEED); let vesting = Some((100_000u32.into(), 1_000u32.into(), 100u32.into())); let statement = StatementKind::Regular; }: _(RawOrigin::Root, eth_address, VALUE.into(), vesting, Some(statement)) @@ -1231,75 +1212,55 @@ mod benchmarking { assert_eq!(Claims::::get(eth_address), Some(VALUE.into())); } - // Benchmark `claim_attest` for different users. + // Benchmark `claim_attest` including `validate_unsigned` logic. claim_attest { - let u in 0 .. 1000; - let attest_u = u32::max_value() - u; - let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_u.encode())).unwrap(); + let c = MAX_CLAIMS; + + for i in 0 .. c / 2 { + create_claim::(c)?; + create_claim_attest::(u32::max_value() - c)?; + } + + // Crate signature + let attest_c = u32::max_value() - c; + let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_c.encode())).unwrap(); let eth_address = eth(&secret_key); - let account: T::AccountId = account("user", u, SEED); + let account: T::AccountId = account("user", c, SEED); let vesting = Some((100_000u32.into(), 1_000u32.into(), 100u32.into())); let statement = StatementKind::Regular; let signature = sig::(&secret_key, &account.encode(), statement.to_text()); super::Module::::mint_claim(RawOrigin::Root.into(), eth_address, VALUE.into(), vesting, Some(statement))?; assert_eq!(Claims::::get(eth_address), Some(VALUE.into())); - }: _(RawOrigin::None, account, signature, statement.to_text().to_vec()) + let call = Call::::claim_attest(account.clone(), signature.clone(), StatementKind::Regular.to_text().to_vec()); + let source = sp_runtime::transaction_validity::TransactionSource::External; + }: { + super::Module::::validate_unsigned(source, &call)?; + super::Module::::claim_attest(RawOrigin::None.into(), account, signature, statement.to_text().to_vec())?; + } verify { assert_eq!(Claims::::get(eth_address), None); } - // Benchmark `attest` for different users. + // Benchmark `attest` including prevalidate logic. attest { - let u in 0 .. 1000; - let attest_u = u32::max_value() - u; - let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_u.encode())).unwrap(); + let c = MAX_CLAIMS; + + for i in 0 .. c / 2 { + create_claim::(c)?; + create_claim_attest::(u32::max_value() - c)?; + } + + let attest_c = u32::max_value() - c; + let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_c.encode())).unwrap(); let eth_address = eth(&secret_key); - let account: T::AccountId = account("user", u, SEED); + let account: T::AccountId = account("user", c, SEED); let vesting = Some((100_000u32.into(), 1_000u32.into(), 100u32.into())); let statement = StatementKind::Regular; let signature = sig::(&secret_key, &account.encode(), statement.to_text()); super::Module::::mint_claim(RawOrigin::Root.into(), eth_address, VALUE.into(), vesting, Some(statement))?; Preclaims::::insert(&account, eth_address); assert_eq!(Claims::::get(eth_address), Some(VALUE.into())); - }: _(RawOrigin::Signed(account), statement.to_text().to_vec()) - verify { - assert_eq!(Claims::::get(eth_address), None); - } - // Benchmark the time it takes to execute `validate_unsigned` for `claim` - validate_unsigned_claim { - let c in ...; - // Crate signature - let secret_key = secp256k1::SecretKey::parse(&keccak_256(&c.encode())).unwrap(); - let account: T::AccountId = account("user", c, SEED); - let signature = sig::(&secret_key, &account.encode(), &[][..]); - let call = Call::::claim(account, signature); - let source = sp_runtime::transaction_validity::TransactionSource::External; - }: { - super::Module::::validate_unsigned(source, &call)? - } - - // Benchmark the time it takes to execute `validate_unsigned` for `claim_attest` - validate_unsigned_claim_attest { - let c in ...; - // Crate signature - let attest_c = u32::max_value() - c; - let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_c.encode())).unwrap(); - let account: T::AccountId = account("user", c, SEED); - let signature = sig::(&secret_key, &account.encode(), StatementKind::Regular.to_text()); - let call = Call::::claim_attest(account, signature, StatementKind::Regular.to_text().to_vec()); - let source = sp_runtime::transaction_validity::TransactionSource::External; - }: { - super::Module::::validate_unsigned(source, &call)? - } - - validate_prevalidate_attests { - let c in ...; - let attest_c = u32::max_value() - c; - let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_c.encode())).unwrap(); - let eth_address = eth(&secret_key); - let account: T::AccountId = account("user", c, SEED); - Preclaims::::insert(&account, eth_address); let call = super::Call::attest(StatementKind::Regular.to_text().to_vec()); // We have to copy the validate statement here because of trait issues... :( let validate = |who: &T::AccountId, call: &super::Call| -> DispatchResult { @@ -1312,10 +1273,41 @@ mod benchmarking { Ok(()) }; }: { - validate(&account, &call)? + validate(&account, &call)?; + super::Module::::attest(RawOrigin::Signed(account).into(), statement.to_text().to_vec())?; + } + verify { + assert_eq!(Claims::::get(eth_address), None); + } + + move_claim { + let c = MAX_CLAIMS; + + for i in 0 .. c / 2 { + create_claim::(c)?; + create_claim_attest::(u32::max_value() - c)?; + } + + let attest_c = u32::max_value() - c; + let secret_key = secp256k1::SecretKey::parse(&keccak_256(&attest_c.encode())).unwrap(); + let eth_address = eth(&secret_key); + + let new_secret_key = secp256k1::SecretKey::parse(&keccak_256(&(u32::max_value()/2).encode())).unwrap(); + let new_eth_address = eth(&new_secret_key); + + let account: T::AccountId = account("user", c, SEED); + Preclaims::::insert(&account, eth_address); + + assert!(Claims::::contains_key(eth_address)); + assert!(!Claims::::contains_key(new_eth_address)); + }: _(RawOrigin::Root, eth_address, new_eth_address, Some(account)) + verify { + assert!(!Claims::::contains_key(eth_address)); + assert!(Claims::::contains_key(new_eth_address)); } // Benchmark the time it takes to do `repeat` number of keccak256 hashes + #[extra] keccak256 { let i in 0 .. 10_000; let bytes = (i).encode(); @@ -1326,6 +1318,7 @@ mod benchmarking { } // Benchmark the time it takes to do `repeat` number of `eth_recover` + #[extra] eth_recover { let i in 0 .. 1_000; // Crate signature @@ -1354,9 +1347,7 @@ mod benchmarking { assert_ok!(test_benchmark_mint_claim::()); assert_ok!(test_benchmark_claim_attest::()); assert_ok!(test_benchmark_attest::()); - assert_ok!(test_benchmark_validate_unsigned_claim::()); - assert_ok!(test_benchmark_validate_unsigned_claim_attest::()); - assert_ok!(test_benchmark_validate_prevalidate_attests::()); + assert_ok!(test_benchmark_move_claim::()); assert_ok!(test_benchmark_keccak256::()); assert_ok!(test_benchmark_eth_recover::()); }); diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 937da9dc90..0fd0bdc8aa 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -709,6 +709,7 @@ impl claims::Config for Runtime { type VestingSchedule = Vesting; type Prefix = Prefix; type MoveClaimOrigin = pallet_collective::EnsureProportionMoreThan<_1, _2, AccountId, CouncilCollective>; + type WeightInfo = weights::runtime_common_claims::WeightInfo; } parameter_types! { @@ -1331,7 +1332,7 @@ sp_api::impl_runtime_apis! { let mut batches = Vec::::new(); let params = (&config, &whitelist); // Polkadot - add_benchmark!(params, batches, claims, Claims); + add_benchmark!(params, batches, runtime_common::claims, Claims); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); add_benchmark!(params, batches, pallet_bounties, Bounties); diff --git a/runtime/kusama/src/weights/mod.rs b/runtime/kusama/src/weights/mod.rs index f8c7cb230b..177e167173 100644 --- a/runtime/kusama/src/weights/mod.rs +++ b/runtime/kusama/src/weights/mod.rs @@ -34,3 +34,4 @@ pub mod pallet_tips; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; +pub mod runtime_common_claims; diff --git a/runtime/kusama/src/weights/runtime_common_claims.rs b/runtime/kusama/src/weights/runtime_common_claims.rs new file mode 100644 index 0000000000..16f1bd7eeb --- /dev/null +++ b/runtime/kusama/src/weights/runtime_common_claims.rs @@ -0,0 +1,71 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . +//! Autogenerated weights for runtime_common::claims +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-12-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_common::claims +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/runtime_common_claims.rs + + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for runtime_common::claims. +pub struct WeightInfo(PhantomData); +impl runtime_common::claims::WeightInfo for WeightInfo { + fn claim() -> Weight { + (466_963_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn mint_claim() -> Weight { + (19_167_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn claim_attest() -> Weight { + (471_682_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn attest() -> Weight { + (156_820_000 as Weight) + .saturating_add(T::DbWeight::get().reads(8 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + fn move_claim() -> Weight { + (39_992_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } +} diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index c08d14ff8b..8027abd546 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -761,6 +761,7 @@ impl claims::Config for Runtime { type Prefix = Prefix; /// At least 3/4 of the council must agree to a claim move before it can happen. type MoveClaimOrigin = pallet_collective::EnsureProportionAtLeast<_3, _4, AccountId, CouncilCollective>; + type WeightInfo = weights::runtime_common_claims::WeightInfo; } parameter_types! { @@ -1327,7 +1328,7 @@ sp_api::impl_runtime_apis! { let mut batches = Vec::::new(); let params = (&config, &whitelist); // Polkadot - add_benchmark!(params, batches, claims, Claims); + add_benchmark!(params, batches, runtime_common::claims, Claims); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); add_benchmark!(params, batches, pallet_bounties, Bounties); diff --git a/runtime/polkadot/src/weights/mod.rs b/runtime/polkadot/src/weights/mod.rs index 0411000b1c..cb9ea434b7 100644 --- a/runtime/polkadot/src/weights/mod.rs +++ b/runtime/polkadot/src/weights/mod.rs @@ -34,3 +34,4 @@ pub mod pallet_utility; pub mod pallet_vesting; pub mod pallet_bounties; pub mod pallet_tips; +pub mod runtime_common_claims; diff --git a/runtime/polkadot/src/weights/runtime_common_claims.rs b/runtime/polkadot/src/weights/runtime_common_claims.rs new file mode 100644 index 0000000000..da6996bb2b --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_common_claims.rs @@ -0,0 +1,71 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . +//! Autogenerated weights for runtime_common::claims +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0 +//! DATE: 2020-12-30, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=polkadot-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_common::claims +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/polkadot/src/weights/runtime_common_claims.rs + + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for runtime_common::claims. +pub struct WeightInfo(PhantomData); +impl runtime_common::claims::WeightInfo for WeightInfo { + fn claim() -> Weight { + (466_905_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn mint_claim() -> Weight { + (19_003_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn claim_attest() -> Weight { + (471_915_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn attest() -> Weight { + (156_649_000 as Weight) + .saturating_add(T::DbWeight::get().reads(8 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + fn move_claim() -> Weight { + (39_612_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } +} diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index d9c367c5d8..fadac2343b 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -424,6 +424,7 @@ impl claims::Config for Runtime { type VestingSchedule = Vesting; type Prefix = Prefix; type MoveClaimOrigin = frame_system::EnsureRoot; + type WeightInfo = claims::TestWeightInfo; } parameter_types! { -- GitLab From 2ad8c5cff2fa846ac6c43a1684a2598763c11d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Wed, 30 Dec 2020 23:52:35 +0100 Subject: [PATCH 149/203] Companion for #7810 (Define ss58 prefix inside the runtime) (#2182) * Companion for #7810 * Added missing trait items for tests * Add another missing trait item * fixup * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 276 +++++++++++++------------- parachain/src/wasm_executor/mod.rs | 4 - runtime/common/src/claims.rs | 1 + runtime/common/src/crowdfund.rs | 1 + runtime/common/src/impls.rs | 1 + runtime/common/src/lib.rs | 1 + runtime/common/src/paras_registrar.rs | 1 + runtime/common/src/purchase.rs | 1 + runtime/common/src/slots.rs | 1 + runtime/kusama/src/lib.rs | 2 + runtime/parachains/src/mock.rs | 1 + runtime/polkadot/src/lib.rs | 2 + runtime/rococo/src/lib.rs | 2 + runtime/test-runtime/src/lib.rs | 2 + runtime/westend/src/lib.rs | 2 + 15 files changed, 156 insertions(+), 142 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 01f104c583..2bb7c933b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-api", @@ -3895,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6723,7 +6723,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "async-trait", "derive_more", @@ -6751,7 +6751,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6774,7 +6774,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6791,7 +6791,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6812,7 +6812,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6823,7 +6823,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "atty", "chrono", @@ -6866,7 +6866,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6877,7 +6877,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "fnv", @@ -6911,7 +6911,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "blake2-rfc", "hash-db", @@ -6941,7 +6941,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6952,7 +6952,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "fork-tree", @@ -6997,7 +6997,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "futures 0.3.8", @@ -7021,7 +7021,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7034,7 +7034,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7060,7 +7060,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "sc-client-api", @@ -7074,7 +7074,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "lazy_static", @@ -7103,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "parity-scale-codec", @@ -7119,7 +7119,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "parity-scale-codec", @@ -7134,7 +7134,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "parity-scale-codec", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "finality-grandpa", @@ -7189,7 +7189,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "finality-grandpa", @@ -7213,7 +7213,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7231,7 +7231,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "async-trait", "derive_more", @@ -7251,7 +7251,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "hash-db", "lazy_static", @@ -7270,7 +7270,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "async-std", "async-trait", @@ -7324,7 +7324,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7339,7 +7339,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "bytes 0.5.6", "fnv", @@ -7366,7 +7366,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "libp2p", @@ -7379,7 +7379,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7388,7 +7388,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "hash-db", @@ -7422,7 +7422,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "futures 0.3.8", @@ -7446,7 +7446,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7464,7 +7464,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "directories 3.0.1", "exit-future", @@ -7528,7 +7528,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "parity-scale-codec", @@ -7543,7 +7543,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7563,7 +7563,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7584,7 +7584,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7608,7 +7608,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "futures 0.3.8", @@ -7630,7 +7630,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8096,7 +8096,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "sp-core", @@ -8108,7 +8108,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "hash-db", "parity-scale-codec", @@ -8124,7 +8124,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8136,7 +8136,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "serde", @@ -8148,7 +8148,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8161,7 +8161,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-api", @@ -8173,7 +8173,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8184,7 +8184,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-api", @@ -8196,7 +8196,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "log", @@ -8214,7 +8214,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "serde", "serde_json", @@ -8223,7 +8223,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8249,7 +8249,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "merlin", "parity-scale-codec", @@ -8269,7 +8269,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8278,7 +8278,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8290,7 +8290,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "base58", "blake2-rfc", @@ -8334,7 +8334,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8343,7 +8343,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8353,7 +8353,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "environmental", "parity-scale-codec", @@ -8364,7 +8364,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "finality-grandpa", "log", @@ -8381,7 +8381,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8393,7 +8393,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "hash-db", @@ -8417,7 +8417,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "lazy_static", "sp-core", @@ -8428,7 +8428,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "async-trait", "derive_more", @@ -8445,7 +8445,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "serde", @@ -8457,7 +8457,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8468,7 +8468,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "sp-api", "sp-core", @@ -8478,7 +8478,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "backtrace", ] @@ -8486,7 +8486,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "serde", "sp-core", @@ -8495,7 +8495,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "either", "hash256-std-hasher", @@ -8516,7 +8516,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8533,7 +8533,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "Inflector", "proc-macro-crate", @@ -8545,7 +8545,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "serde", "serde_json", @@ -8554,7 +8554,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-api", @@ -8567,7 +8567,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8577,7 +8577,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "hash-db", "log", @@ -8599,12 +8599,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8617,7 +8617,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "sp-core", @@ -8630,7 +8630,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8644,7 +8644,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "log", "parity-scale-codec", @@ -8657,7 +8657,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "derive_more", "futures 0.3.8", @@ -8673,7 +8673,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "hash-db", "memory-db", @@ -8687,7 +8687,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "futures-core", @@ -8699,7 +8699,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8711,7 +8711,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8853,7 +8853,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "chrono", "console_error_panic_hook", @@ -8879,7 +8879,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "platforms", ] @@ -8887,7 +8887,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8910,7 +8910,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "async-std", "derive_more", @@ -8924,7 +8924,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8951,7 +8951,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8961,7 +8961,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#67c8cadb33313ef317a4266edb334b7fc594629c" +source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/parachain/src/wasm_executor/mod.rs b/parachain/src/wasm_executor/mod.rs index 2ab2e9064c..ba7e516f42 100644 --- a/parachain/src/wasm_executor/mod.rs +++ b/parachain/src/wasm_executor/mod.rs @@ -265,10 +265,6 @@ impl sp_externalities::Externalities for ValidationExternalities { panic!("place_child_storage: unsupported feature for parachain validation") } - fn chain_id(&self) -> u64 { - panic!("chain_id: unsupported feature for parachain validation") - } - fn storage_root(&mut self) -> Vec { panic!("storage_root: unsupported feature for parachain validation") } diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index 8aebbb2531..41a19fd87b 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -653,6 +653,7 @@ mod tests { type OnNewAccount = (); type OnKilledAccount = Balances; type SystemWeightInfo = (); + type SS58Prefix = (); } parameter_types! { diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdfund.rs index 8e856087bd..715f6a9cfb 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdfund.rs @@ -618,6 +618,7 @@ mod tests { type OnNewAccount = (); type OnKilledAccount = Balances; type SystemWeightInfo = (); + type SS58Prefix = (); } parameter_types! { pub const ExistentialDeposit: u64 = 1; diff --git a/runtime/common/src/impls.rs b/runtime/common/src/impls.rs index 185dee74a7..66ebb7cd9e 100644 --- a/runtime/common/src/impls.rs +++ b/runtime/common/src/impls.rs @@ -126,6 +126,7 @@ mod tests { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); + type SS58Prefix = (); } impl pallet_balances::Config for Test { diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index bc1d3df20c..c85e5224e0 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -236,6 +236,7 @@ mod multiplier_tests { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); + type SS58Prefix = (); } type System = frame_system::Module; diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index d34df19971..1d46a43c01 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -331,6 +331,7 @@ mod tests { type OnNewAccount = (); type OnKilledAccount = Balances; type SystemWeightInfo = (); + type SS58Prefix = (); } impl frame_system::offchain::SendTransactionTypes for Test where diff --git a/runtime/common/src/purchase.rs b/runtime/common/src/purchase.rs index 2efb61ae4a..5a73596d85 100644 --- a/runtime/common/src/purchase.rs +++ b/runtime/common/src/purchase.rs @@ -447,6 +447,7 @@ mod tests { type OnNewAccount = (); type OnKilledAccount = Balances; type SystemWeightInfo = (); + type SS58Prefix = (); } parameter_types! { diff --git a/runtime/common/src/slots.rs b/runtime/common/src/slots.rs index 284f1afa52..66d4d9640f 100644 --- a/runtime/common/src/slots.rs +++ b/runtime/common/src/slots.rs @@ -984,6 +984,7 @@ mod tests { type OnNewAccount = (); type OnKilledAccount = Balances; type SystemWeightInfo = (); + type SS58Prefix = (); } parameter_types! { diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 0fd0bdc8aa..5b7f266ade 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -124,6 +124,7 @@ type MoreThanHalfCouncil = EnsureOneOf< parameter_types! { pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 2; } impl frame_system::Config for Runtime { @@ -148,6 +149,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = weights::frame_system::WeightInfo; + type SS58Prefix = SS58Prefix; } parameter_types! { diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index ee9cc2a063..7d5e0c380b 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -90,6 +90,7 @@ impl frame_system::Config for Test { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); + type SS58Prefix = (); } impl crate::initializer::Config for Test { diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 8027abd546..4ac6ff0af2 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -138,6 +138,7 @@ type MoreThanHalfCouncil = EnsureOneOf< parameter_types! { pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 0; } impl frame_system::Config for Runtime { @@ -162,6 +163,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = weights::frame_system::WeightInfo; + type SS58Prefix = SS58Prefix; } parameter_types! { diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 467c31fa03..05b5b92b8d 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -220,6 +220,7 @@ impl Filter for BaseFilter { parameter_types! { pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 42; } impl frame_system::Config for Runtime { @@ -244,6 +245,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); + type SS58Prefix = SS58Prefix; } parameter_types! { diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index fadac2343b..5cd104cf6c 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -121,6 +121,7 @@ sp_api::decl_runtime_apis! { parameter_types! { pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 42; } impl frame_system::Config for Runtime { @@ -145,6 +146,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); + type SS58Prefix = SS58Prefix; } impl frame_system::offchain::SendTransactionTypes for Runtime where diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 8dba7586f3..33a4faa92c 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -115,6 +115,7 @@ impl Filter for BaseFilter { parameter_types! { pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 42; } impl frame_system::Config for Runtime { @@ -139,6 +140,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = weights::frame_system::WeightInfo; + type SS58Prefix = SS58Prefix; } parameter_types! { -- GitLab From 0df0195a2e0c9eff76657cc51058394bca2d44a2 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sat, 2 Jan 2021 16:47:27 -0500 Subject: [PATCH 150/203] differentiate spans for erasure-coding and storage (#2185) --- node/core/backing/src/lib.rs | 42 +++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 463dbaed98..39658e1495 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -288,7 +288,7 @@ async fn store_available_data( // // This will compute the erasure root internally and compare it to the expected erasure root. // This returns `Err()` iff there is an internal error. Otherwise, it returns either `Ok(Ok(()))` or `Ok(Err(_))`. -#[tracing::instrument(level = "trace", skip(tx_from, pov), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(tx_from, pov, span), fields(subsystem = LOG_TARGET))] async fn make_pov_available( tx_from: &mut mpsc::Sender, validator_index: Option, @@ -297,31 +297,39 @@ async fn make_pov_available( candidate_hash: CandidateHash, validation_data: polkadot_primitives::v1::PersistedValidationData, expected_erasure_root: Hash, + span: Option<&JaegerSpan>, ) -> Result, Error> { let available_data = AvailableData { pov, validation_data, }; - let chunks = erasure_coding::obtain_chunks_v1( - n_validators, - &available_data, - )?; + { + let _span = span.as_ref().map(|s| s.child("erasure-coding")); + + let chunks = erasure_coding::obtain_chunks_v1( + n_validators, + &available_data, + )?; - let branches = erasure_coding::branches(chunks.as_ref()); - let erasure_root = branches.root(); + let branches = erasure_coding::branches(chunks.as_ref()); + let erasure_root = branches.root(); - if erasure_root != expected_erasure_root { - return Ok(Err(InvalidErasureRoot)); + if erasure_root != expected_erasure_root { + return Ok(Err(InvalidErasureRoot)); + } } - store_available_data( - tx_from, - validator_index, - n_validators as u32, - candidate_hash, - available_data, - ).await?; + { + let _span = span.as_ref().map(|s| s.child("store-data")); + store_available_data( + tx_from, + validator_index, + n_validators as u32, + candidate_hash, + available_data, + ).await?; + } Ok(Ok(())) } @@ -423,7 +431,6 @@ async fn validate_and_make_available( ); Err(candidate) } else { - let _span = span.as_ref().map(|s| s.child("make-available")); let erasure_valid = make_pov_available( &mut tx_from, validator_index, @@ -432,6 +439,7 @@ async fn validate_and_make_available( candidate.hash(), validation_data, candidate.descriptor.erasure_root, + span.as_ref(), ).await?; match erasure_valid { -- GitLab From d975841c1ab42e1cd4256b15c70bf95eae438443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 4 Jan 2021 14:36:31 +0100 Subject: [PATCH 151/203] Improve jaeger spans for bitfield signing (#2189) --- node/core/bitfield-signing/src/lib.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 3b30736a0a..ce82695997 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -69,16 +69,16 @@ pub enum Error { /// If there is a candidate pending availability, query the Availability Store /// for whether we have the availability chunk for our validator index. -#[tracing::instrument(level = "trace", skip(sender), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(sender, span), fields(subsystem = LOG_TARGET))] async fn get_core_availability( relay_parent: Hash, core: CoreState, validator_idx: ValidatorIndex, sender: &Mutex<&mut mpsc::Sender>, + span: &jaeger::JaegerSpan, ) -> Result { - let span = jaeger::hash_span(&relay_parent, "core-availability"); if let CoreState::Occupied(core) = core { - let _span = span.child("query chunk"); + let _span = span.child("query chunk availability"); let (tx, rx) = oneshot::channel(); sender @@ -103,10 +103,10 @@ async fn get_core_availability( "Candidate availability", ); - return res; + res + } else { + Ok(false) } - - Ok(false) } /// delegates to the v1 runtime API @@ -152,7 +152,8 @@ async fn construct_availability_bitfield( // Handle all cores concurrently // `try_join_all` returns all results in the same order as the input futures. let results = future::try_join_all( - availability_cores.into_iter().map(|core| get_core_availability(relay_parent, core, validator_idx, &sender)), + availability_cores.into_iter() + .map(|core| get_core_availability(relay_parent, core, validator_idx, &sender, span)), ).await?; Ok(AvailabilityBitfield(FromIterator::from_iter(results))) -- GitLab From 85932d15547bd27c339939d8658b5e526a04f974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 4 Jan 2021 16:12:03 +0100 Subject: [PATCH 152/203] Improve unbacked span (#2191) We need to make sure to drop the import-statement child span before the parent span is dropped. --- node/core/backing/src/lib.rs | 56 +++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 39658e1495..841ea69670 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -670,7 +670,7 @@ impl CandidateBackingJob { &mut self, statement: &SignedFullStatement, ) -> Result, Error> { - let _span = { + let import_statement_span = { // create a span only for candidates we're already aware of. let candidate_hash = statement.payload().candidate_hash(); self.get_unbacked_statement_child(&candidate_hash, statement.validator_index()) @@ -680,31 +680,41 @@ impl CandidateBackingJob { let summary = self.table.import_statement(&self.table_context, stmt); - if let Some(ref summary) = summary { - if let Some(attested) = self.table.attested_candidate( - &summary.candidate, - &self.table_context, - ) { - // `HashSet::insert` returns true if the thing wasn't in there already. - // one of the few places the Rust-std folks did a bad job with API - if self.backed.insert(summary.candidate) { - self.remove_unbacked_span(&summary.candidate); - - if let Some(backed) = - table_attested_to_backed(attested, &self.table_context) - { - let message = ProvisionerMessage::ProvisionableData( - self.parent, - ProvisionableData::BackedCandidate(backed.receipt()), - ); - self.send_to_provisioner(message).await?; - } + let unbacked_span = if let Some(attested) = summary.as_ref() + .and_then(|s| self.table.attested_candidate(&s.candidate, &self.table_context)) + { + let candidate_hash = attested.candidate.hash(); + // `HashSet::insert` returns true if the thing wasn't in there already. + if self.backed.insert(candidate_hash) { + let span = self.remove_unbacked_span(&candidate_hash); + + if let Some(backed) = + table_attested_to_backed(attested, &self.table_context) + { + let message = ProvisionerMessage::ProvisionableData( + self.parent, + ProvisionableData::BackedCandidate(backed.receipt()), + ); + self.send_to_provisioner(message).await?; + + span.as_ref().map(|s| s.child("backed")); + span + } else { + None } + } else { + None } - } + } else { + None + }; self.issue_new_misbehaviors().await?; + // It is important that the child span is dropped before its parent span (`unbacked_span`) + drop(import_statement_span); + drop(unbacked_span); + Ok(summary) } @@ -876,8 +886,8 @@ impl CandidateBackingJob { }) } - fn remove_unbacked_span(&mut self, hash: &CandidateHash) { - self.unbacked_candidates.remove(hash); + fn remove_unbacked_span(&mut self, hash: &CandidateHash) -> Option { + self.unbacked_candidates.remove(hash) } async fn send_to_provisioner(&mut self, msg: ProvisionerMessage) -> Result<(), Error> { -- GitLab From 50538aa53fa0f4110f9d358699255db8e85534b4 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Mon, 4 Jan 2021 17:58:20 +0100 Subject: [PATCH 153/203] Add relay storage root to persisted validation data (#2161) * Cont.: Implement the state root obtaining during inclusion During inclusion now we obtain the storage root by passing it through the inclusion_inherent. * Fix tests * Bump rococo spec version * Reorder the parent header into the end of the inclusion inherent. When the parent header is in the beginning, it shifts the other two fields, so that a previous version won't be able to decode that. If we put the parent header in the end, the other two fields will stay at their positions, thus make it possible to decode with the previous version. That allows us to perform upgrade of rococo runtime without needing of simultanuous upgrade of nodes and runtime, or restart of the network. * Squash a stray tab --- node/core/av-store/src/tests.rs | 1 + node/core/backing/src/lib.rs | 1 + node/core/proposer/src/lib.rs | 10 +++- .../availability-distribution/src/tests.rs | 1 + node/test/client/src/block_builder.rs | 11 ++++- primitives/src/v1.rs | 2 + .../src/runtime/inclusion.md | 2 +- .../src/runtime/inclusioninherent.md | 6 ++- .../implementers-guide/src/types/candidate.md | 2 + runtime/parachains/src/inclusion.rs | 20 +++++++- runtime/parachains/src/inclusion_inherent.rs | 46 +++++++++++++++---- runtime/parachains/src/runtime_api_impl/v1.rs | 45 +++++++++++------- runtime/parachains/src/util.rs | 7 ++- runtime/rococo/src/lib.rs | 2 +- 14 files changed, 120 insertions(+), 36 deletions(-) diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 4e83e3d7f7..330e0c529a 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -74,6 +74,7 @@ impl Default for TestState { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), max_pov_size: 1024, + relay_storage_root: Default::default(), }; let pruning_config = PruningConfig { diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 841ea69670..8ac7df309f 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -1250,6 +1250,7 @@ mod tests { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), max_pov_size: 1024, + relay_storage_root: Default::default(), }, transient: TransientValidationData { max_code_size: 1000, diff --git a/node/core/proposer/src/lib.rs b/node/core/proposer/src/lib.rs index 96eb6bb95f..3e1e2919f7 100644 --- a/node/core/proposer/src/lib.rs +++ b/node/core/proposer/src/lib.rs @@ -98,11 +98,13 @@ where // data to be moved into the future let overseer = self.overseer.clone(); let parent_header_hash = parent_header.hash(); + let parent_header = parent_header.clone(); async move { Ok(Proposer { inner: proposer?, overseer, + parent_header, parent_header_hash, }) }.boxed() @@ -116,6 +118,7 @@ where pub struct Proposer, Backend, Client> { inner: sc_basic_authorship::Proposer, overseer: OverseerHandler, + parent_header: Header, parent_header_hash: Hash, } @@ -209,9 +212,14 @@ where drop(_span); + let inclusion_inherent_data = ( + provisioner_data.0, + provisioner_data.1, + self.parent_header, + ); inherent_data.put_data( polkadot_primitives::v1::INCLUSION_INHERENT_IDENTIFIER, - &provisioner_data, + &inclusion_inherent_data, )?; let _span = span.child("authorship-propose"); diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index a34caec7ab..d06a98402d 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -192,6 +192,7 @@ impl Default for TestState { hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), max_pov_size: 1024, + relay_storage_root: Default::default(), }; let pov_block_a = PoV { diff --git a/node/test/client/src/block_builder.rs b/node/test/client/src/block_builder.rs index de49ae4886..f9848a3064 100644 --- a/node/test/client/src/block_builder.rs +++ b/node/test/client/src/block_builder.rs @@ -71,10 +71,19 @@ impl InitPolkadotBlockBuilder for Client { .put_data(sp_timestamp::INHERENT_IDENTIFIER, ×tamp) .expect("Put timestamp inherent data"); + let parent_header = self.header(at) + .expect("Get the parent block header") + .expect("The target block header must exist"); + let provisioner_data = polkadot_node_subsystem::messages::ProvisionerInherentData::default(); + let inclusion_inherent_data = ( + provisioner_data.0, + provisioner_data.1, + parent_header, + ); inherent_data .put_data( polkadot_primitives::v1::INCLUSION_INHERENT_IDENTIFIER, - &polkadot_node_subsystem::messages::ProvisionerInherentData::default(), + &inclusion_inherent_data, ) .expect("Put inclusion inherent data"); diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index a9666fe793..6104d6aae2 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -284,6 +284,8 @@ pub struct PersistedValidationData { pub parent_head: HeadData, /// The relay-chain block number this is in the context of. pub block_number: N, + /// The relay-chain block storage root this is in the context of. + pub relay_storage_root: Hash, /// The list of MQC heads for the inbound channels paired with the sender para ids. This /// vector is sorted ascending by the para id and doesn't contain multiple entries with the same /// sender. diff --git a/roadmap/implementers-guide/src/runtime/inclusion.md b/roadmap/implementers-guide/src/runtime/inclusion.md index 9a6228a8c1..5cabb109dd 100644 --- a/roadmap/implementers-guide/src/runtime/inclusion.md +++ b/roadmap/implementers-guide/src/runtime/inclusion.md @@ -59,7 +59,7 @@ All failed checks should lead to an unrecoverable error making the block invalid 1. For each applied bit of each availability-bitfield, set the bit for the validator in the `CandidatePendingAvailability`'s `availability_votes` bitfield. Track all candidates that now have >2/3 of bits set in their `availability_votes`. These candidates are now available and can be enacted. 1. For all now-available candidates, invoke the `enact_candidate` routine with the candidate and relay-parent number. 1. Return a list of freed cores consisting of the cores where candidates have become available. -* `process_candidates(BackedCandidates, scheduled: Vec, group_validators: Fn(GroupIndex) -> Option>)`: +* `process_candidates(parent_storage_root, BackedCandidates, scheduled: Vec, group_validators: Fn(GroupIndex) -> Option>)`: 1. check that each candidate corresponds to a scheduled core and that they are ordered in the same order the cores appear in assignments in `scheduled`. 1. check that `scheduled` is sorted ascending by `CoreIndex`, without duplicates. 1. check that there is no candidate pending availability for any scheduled `ParaId`. diff --git a/roadmap/implementers-guide/src/runtime/inclusioninherent.md b/roadmap/implementers-guide/src/runtime/inclusioninherent.md index 54ebf3af7b..3f23989642 100644 --- a/roadmap/implementers-guide/src/runtime/inclusioninherent.md +++ b/roadmap/implementers-guide/src/runtime/inclusioninherent.md @@ -16,11 +16,13 @@ Included: Option<()>, ## Entry Points -* `inclusion`: This entry-point accepts two parameters: [`Bitfields`](../types/availability.md#signed-availability-bitfield) and [`BackedCandidates`](../types/backing.md#backed-candidate). +* `inclusion`: This entry-point accepts three parameters: The relay-chain parent block header, [`Bitfields`](../types/availability.md#signed-availability-bitfield) and [`BackedCandidates`](../types/backing.md#backed-candidate). + 1. Hash the parent header and make sure that it corresponds to the block hash of the parent (tracked by the `frame_system` FRAME module), 1. The `Bitfields` are first forwarded to the `Inclusion::process_bitfields` routine, returning a set of freed cores. Provide a `Scheduler::core_para` as a core-lookup to the `process_bitfields` routine. Annotate each of these freed cores with `FreedReason::Concluded`. 1. If `Scheduler::availability_timeout_predicate` is `Some`, invoke `Inclusion::collect_pending` using it, and add timed-out cores to the free cores, annotated with `FreedReason::TimedOut`. 1. Invoke `Scheduler::schedule(freed)` - 1. Invoke the `Inclusion::process_candidates` routine with the parameters `(backed_candidates, Scheduler::scheduled(), Scheduler::group_validators)`. + 1. Extract `parent_storage_root` from the parent header, + 1. Invoke the `Inclusion::process_candidates` routine with the parameters `(parent_storage_root, backed_candidates, Scheduler::scheduled(), Scheduler::group_validators)`. 1. Call `Scheduler::occupied` using the return value of the `Inclusion::process_candidates` call above, first sorting the list of assigned core indices. 1. Call the `Ump::process_pending_upward_messages` routine to execute all messages in upward dispatch queues. 1. If all of the above succeeds, set `Included` to `Some(())`. diff --git a/roadmap/implementers-guide/src/types/candidate.md b/roadmap/implementers-guide/src/types/candidate.md index 86c80153f3..c9da4b683f 100644 --- a/roadmap/implementers-guide/src/types/candidate.md +++ b/roadmap/implementers-guide/src/types/candidate.md @@ -127,6 +127,8 @@ struct PersistedValidationData { parent_head: HeadData, /// The relay-chain block number this is in the context of. This informs the collator. block_number: BlockNumber, + /// The relay-chain block storage root this is in the context of. + relay_storage_root: Hash, /// The MQC head for the DMQ. /// /// The DMQ MQC head will be used by the validation function to authorize the downward messages diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 95481b57a0..4f0466f788 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -25,7 +25,7 @@ use primitives::v1::{ ValidatorId, CandidateCommitments, CandidateDescriptor, ValidatorIndex, Id as ParaId, AvailabilityBitfield as AvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, BackedCandidate, CoreIndex, GroupIndex, CommittedCandidateReceipt, - CandidateReceipt, HeadData, CandidateHash, + CandidateReceipt, HeadData, CandidateHash, Hash, }; use frame_support::{ decl_storage, decl_module, decl_error, decl_event, ensure, debug, @@ -382,11 +382,13 @@ impl Module { Ok(freed_cores) } - /// Process candidates that have been backed. Provide a set of candidates and scheduled cores. + /// Process candidates that have been backed. Provide the relay storage root, a set of candidates + /// and scheduled cores. /// /// Both should be sorted ascending by core index, and the candidates should be a subset of /// scheduled cores. If these conditions are not met, the execution of the function fails. pub(crate) fn process_candidates( + parent_storage_root: Hash, candidates: Vec>, scheduled: Vec, group_validators: impl Fn(GroupIndex) -> Option>, @@ -491,6 +493,7 @@ impl Module { match crate::util::make_persisted_validation_data::( para_id, relay_parent_number, + parent_storage_root, ) { Some(l) => l, None => { @@ -1129,6 +1132,7 @@ mod tests { = crate::util::make_persisted_validation_data::( para_id, relay_parent_number, + Default::default(), )?; Some(persisted_validation_data.hash()) } @@ -1634,6 +1638,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_b_assignment.clone()], &group_validators, @@ -1692,6 +1697,7 @@ mod tests { // out-of-order manifests as unscheduled. assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed_b, backed_a], vec![chain_a_assignment.clone(), chain_b_assignment.clone()], &group_validators, @@ -1726,6 +1732,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_a_assignment.clone()], &group_validators, @@ -1762,6 +1769,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_a_assignment.clone()], &group_validators, @@ -1798,6 +1806,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![ chain_a_assignment.clone(), @@ -1841,6 +1850,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![thread_a_assignment.clone()], &group_validators, @@ -1888,6 +1898,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_a_assignment.clone()], &group_validators, @@ -1929,6 +1940,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_a_assignment.clone()], &group_validators, @@ -1975,6 +1987,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_a_assignment.clone()], &group_validators, @@ -2010,6 +2023,7 @@ mod tests { assert_eq!( Inclusion::process_candidates( + Default::default(), vec![backed], vec![chain_a_assignment.clone()], &group_validators, @@ -2151,6 +2165,7 @@ mod tests { )); let occupied_cores = Inclusion::process_candidates( + Default::default(), vec![backed_a, backed_b, backed_c], vec![ chain_a_assignment.clone(), @@ -2283,6 +2298,7 @@ mod tests { )); let occupied_cores = Inclusion::process_candidates( + Default::default(), vec![backed_a], vec![ chain_a_assignment.clone(), diff --git a/runtime/parachains/src/inclusion_inherent.rs b/runtime/parachains/src/inclusion_inherent.rs index bb25f5c80f..27a319dced 100644 --- a/runtime/parachains/src/inclusion_inherent.rs +++ b/runtime/parachains/src/inclusion_inherent.rs @@ -23,8 +23,9 @@ use sp_std::prelude::*; use primitives::v1::{ - BackedCandidate, SignedAvailabilityBitfields, INCLUSION_INHERENT_IDENTIFIER, + BackedCandidate, SignedAvailabilityBitfields, INCLUSION_INHERENT_IDENTIFIER, Header, }; +use sp_runtime::traits::One; use frame_support::{ decl_error, decl_module, decl_storage, ensure, dispatch::DispatchResult, @@ -57,6 +58,9 @@ decl_error! { pub enum Error for Module { /// Inclusion inherent called more than once per block. TooManyInclusionInherents, + /// The hash of the submitted parent header doesn't correspond to the saved block hash of + /// the parent. + InvalidParentHeader, } } @@ -81,10 +85,19 @@ decl_module! { origin, signed_bitfields: SignedAvailabilityBitfields, backed_candidates: Vec>, + parent_header: Header, ) -> DispatchResult { ensure_none(origin)?; ensure!(!::exists(), Error::::TooManyInclusionInherents); + // Check that the submitted parent header indeed corresponds to the previous block hash. + let now = >::block_number(); + let parent_hash = >::block_hash(now - One::one()); + ensure!( + parent_header.hash().as_ref() == parent_hash.as_ref(), + Error::::InvalidParentHeader, + ); + // Process new availability bitfields, yielding any availability cores whose // work has now concluded. let freed_concluded = >::process_bitfields( @@ -107,7 +120,9 @@ decl_module! { >::schedule(freed); // Process backed candidates according to scheduled cores. + let parent_storage_root = parent_header.state_root; let occupied = >::process_candidates( + parent_storage_root, backed_candidates, >::scheduled(), >::group_validators, @@ -135,14 +150,27 @@ impl ProvideInherent for Module { fn create_inherent(data: &InherentData) -> Option { data.get_data(&Self::INHERENT_IDENTIFIER) .expect("inclusion inherent data failed to decode") - .map(|(signed_bitfields, backed_candidates): (SignedAvailabilityBitfields, Vec>)| { - // Sanity check: session changes can invalidate an inherent, and we _really_ don't want that to happen. - // See github.com/paritytech/polkadot/issues/1327 - if Self::inclusion(frame_system::RawOrigin::None.into(), signed_bitfields.clone(), backed_candidates.clone()).is_ok() { - Call::inclusion(signed_bitfields, backed_candidates) - } else { - Call::inclusion(Vec::new().into(), Vec::new()) + .map( + |(signed_bitfields, backed_candidates, parent_header): ( + SignedAvailabilityBitfields, + Vec>, + Header, + )| { + // Sanity check: session changes can invalidate an inherent, and we _really_ don't want that to happen. + // See github.com/paritytech/polkadot/issues/1327 + if Self::inclusion( + frame_system::RawOrigin::None.into(), + signed_bitfields.clone(), + backed_candidates.clone(), + parent_header.clone(), + ) + .is_ok() + { + Call::inclusion(signed_bitfields, backed_candidates, parent_header) + } else { + Call::inclusion(Vec::new().into(), Vec::new(), parent_header) + } } - }) + ) } } diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index d3ef7a1ee3..46503d2977 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -24,7 +24,7 @@ use primitives::v1::{ Id as ParaId, OccupiedCoreAssumption, SessionIndex, ValidationCode, CommittedCandidateReceipt, ScheduledCore, OccupiedCore, CoreOccupied, CoreIndex, GroupIndex, CandidateEvent, PersistedValidationData, SessionInfo, - InboundDownwardMessage, InboundHrmpMessage, + InboundDownwardMessage, InboundHrmpMessage, Hash, }; use frame_support::debug; use crate::{initializer, inclusion, scheduler, configuration, paras, session_info, dmp, hrmp}; @@ -190,18 +190,24 @@ fn with_assumption( pub fn full_validation_data( para_id: ParaId, assumption: OccupiedCoreAssumption, -) - -> Option> -{ +) -> Option> { + use parity_scale_codec::Decode as _; let relay_parent_number = >::block_number(); - with_assumption::( - para_id, - assumption, - || Some(ValidationData { - persisted: crate::util::make_persisted_validation_data::(para_id, relay_parent_number)?, - transient: crate::util::make_transient_validation_data::(para_id, relay_parent_number)?, - }), - ) + let relay_storage_root = Hash::decode(&mut &sp_io::storage::root()[..]) + .expect("storage root must decode to the Hash type; qed"); + with_assumption::(para_id, assumption, || { + Some(ValidationData { + persisted: crate::util::make_persisted_validation_data::( + para_id, + relay_parent_number, + relay_storage_root, + )?, + transient: crate::util::make_transient_validation_data::( + para_id, + relay_parent_number, + )?, + }) + }) } /// Implementation for the `persisted_validation_data` function of the runtime API. @@ -209,12 +215,17 @@ pub fn persisted_validation_data( para_id: ParaId, assumption: OccupiedCoreAssumption, ) -> Option> { + use parity_scale_codec::Decode as _; let relay_parent_number = >::block_number(); - with_assumption::( - para_id, - assumption, - || crate::util::make_persisted_validation_data::(para_id, relay_parent_number), - ) + let relay_storage_root = Hash::decode(&mut &sp_io::storage::root()[..]) + .expect("storage root must decode to the Hash type; qed"); + with_assumption::(para_id, assumption, || { + crate::util::make_persisted_validation_data::( + para_id, + relay_parent_number, + relay_storage_root, + ) + }) } /// Implementation for the `check_validation_outputs` function of the runtime API. diff --git a/runtime/parachains/src/util.rs b/runtime/parachains/src/util.rs index d0f8913062..ce041981eb 100644 --- a/runtime/parachains/src/util.rs +++ b/runtime/parachains/src/util.rs @@ -18,22 +18,25 @@ //! on all modules. use sp_runtime::traits::Saturating; -use primitives::v1::{Id as ParaId, PersistedValidationData, TransientValidationData}; +use primitives::v1::{Id as ParaId, PersistedValidationData, TransientValidationData, Hash}; use crate::{configuration, paras, dmp, hrmp}; -/// Make the persisted validation data for a particular parachain and a specified relay-parent. +/// Make the persisted validation data for a particular parachain, a specified relay-parent and it's +/// storage root. /// /// This ties together the storage of several modules. pub fn make_persisted_validation_data( para_id: ParaId, relay_parent_number: T::BlockNumber, + relay_storage_root: Hash, ) -> Option> { let config = >::config(); Some(PersistedValidationData { parent_head: >::para_head(¶_id)?, block_number: relay_parent_number, + relay_storage_root, hrmp_mqc_heads: >::hrmp_mqc_heads(para_id), dmq_mqc_head: >::dmq_mqc_head(para_id), max_pov_size: config.max_pov_size, diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 05b5b92b8d..d5dc73a7ce 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -105,7 +105,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 12, + spec_version: 13, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From a891884eaeb4351f39152b2246468562eb68e8b6 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 4 Jan 2021 12:29:53 -0500 Subject: [PATCH 154/203] Improve Network Spans (#2169) * utility functions for erasure-coding threshold * add candidate-hash tag to candidate jaeger spans * debug implementation for jaeger span * add a span to each live candidate in availability dist. * availability span covers only our piece * fix tests * keep span alive slightly longer * remove spammy bitfield-gossip-received log * Revert "remove spammy bitfield-gossip-received log" This reverts commit 831a2db506d66f64ea516af3caf891e8643f5c43. * add claimed validator to bitfield-gossip span * add peer-id to handle-incoming span * add peer-id to availability distribution span * Update node/network/availability-distribution/src/lib.rs Co-authored-by: Bernhard Schuster * Update erasure-coding/src/lib.rs Co-authored-by: Bernhard Schuster * Update node/subsystem/src/jaeger.rs Co-authored-by: Bernhard Schuster Co-authored-by: Bernhard Schuster --- erasure-coding/src/lib.rs | 19 +- .../availability-distribution/src/lib.rs | 332 +++++++++++------- .../availability-distribution/src/tests.rs | 22 +- node/network/bitfield-distribution/src/lib.rs | 12 +- .../network/statement-distribution/src/lib.rs | 4 + node/subsystem/src/jaeger.rs | 13 +- 6 files changed, 274 insertions(+), 128 deletions(-) diff --git a/erasure-coding/src/lib.rs b/erasure-coding/src/lib.rs index 370c228e34..2b335a8168 100644 --- a/erasure-coding/src/lib.rs +++ b/erasure-coding/src/lib.rs @@ -119,12 +119,18 @@ impl CodeParams { .expect("this struct is not created with invalid shard number; qed") } } - -fn code_params(n_validators: usize) -> Result { +/// Returns the maximum number of allowed, faulty chunks +/// which does not prevent recovery given all other pieces +/// are correct. +const fn n_faulty(n_validators: usize) -> Result { if n_validators > MAX_VALIDATORS { return Err(Error::TooManyValidators) } if n_validators <= 1 { return Err(Error::NotEnoughValidators) } - let n_faulty = n_validators.saturating_sub(1) / 3; + Ok(n_validators.saturating_sub(1) / 3) +} + +fn code_params(n_validators: usize) -> Result { + let n_faulty = n_faulty(n_validators)?; let n_good = n_validators - n_faulty; Ok(CodeParams { @@ -133,6 +139,13 @@ fn code_params(n_validators: usize) -> Result { }) } +/// Obtain a threshold of chunks that should be enough to recover the data. +pub fn recovery_threshold(n_validators: usize) -> Result { + let n_faulty = n_faulty(n_validators)?; + + Ok(n_faulty + 1) +} + /// Obtain erasure-coded chunks for v0 `AvailableData`, one for each validator. /// /// Works only up to 65536 validators, and `n_validators` must be non-zero. diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 7ce4afe2ad..bf67965ca0 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -121,7 +121,7 @@ impl From for protocol_v1::AvailabilityDistributionMe /// Data used to track information of peers and relay parents the /// overseer ordered us to work on. -#[derive(Default, Clone, Debug)] +#[derive(Debug, Default)] struct ProtocolState { /// Track all active peers and their views /// to determine what is relevant to them. @@ -142,7 +142,7 @@ struct ProtocolState { per_candidate: HashMap, } -#[derive(Debug, Clone, Default)] +#[derive(Debug)] struct PerCandidate { /// A Candidate and a set of known erasure chunks in form of messages to be gossiped / distributed if the peer view wants that. /// This is _across_ peers and not specific to a particular one. @@ -166,13 +166,30 @@ struct PerCandidate { /// The set of relay chain blocks this appears to be live in. live_in: HashSet, + + /// A Jaeger span relating to this candidate. + span: jaeger::JaegerSpan, } impl PerCandidate { /// Returns `true` iff the given `validator_index` is required by the given `peer`. - fn message_required_by_peer(&self, peer: &PeerId, validator_index: &ValidatorIndex) -> bool { - self.received_messages.get(peer).map(|v| !v.contains(validator_index)).unwrap_or(true) - && self.sent_messages.get(peer).map(|v| !v.contains(validator_index)).unwrap_or(true) + fn message_required_by_peer(&self, peer: &PeerId, validator_index: ValidatorIndex) -> bool { + self.received_messages.get(peer).map(|v| !v.contains(&validator_index)).unwrap_or(true) + && self.sent_messages.get(peer).map(|v| !v.contains(&validator_index)).unwrap_or(true) + } + + /// Add a chunk to the message vault. Overwrites anything that was already present. + fn add_message(&mut self, chunk_index: u32, message: AvailabilityGossipMessage) { + let _ = self.message_vault.insert(chunk_index, message); + } + + /// Clean up the span if we've got our own chunk. + fn drop_span_after_own_availability(&mut self) { + if let Some(validator_index) = self.validator_index { + if self.message_vault.contains_key(&validator_index) { + self.span = jaeger::JaegerSpan::Disabled; + } + } } } @@ -195,12 +212,10 @@ impl ProtocolState { &'a self, relay_parents: impl IntoIterator + 'a, ) -> HashSet { - relay_parents - .into_iter() - .filter_map(|r| self.per_relay_parent.get(r)) - .map(|per_relay_parent| per_relay_parent.live_candidates.iter().cloned()) - .flatten() - .collect() + cached_live_candidates_unioned( + &self.per_relay_parent, + relay_parents + ) } #[tracing::instrument(level = "trace", skip(candidates), fields(subsystem = LOG_TARGET))] @@ -218,16 +233,32 @@ impl ProtocolState { // register the relation of relay_parent to candidate.. for (receipt_hash, fetched) in candidates { - let per_candidate = self.per_candidate.entry(receipt_hash).or_default(); - - // Cached candidates already have entries and thus don't need this - // information to be set. - if let FetchedLiveCandidate::Fresh(descriptor) = fetched { - per_candidate.validator_index = validator_index.clone(); - per_candidate.validators = validators.clone(); - per_candidate.descriptor = descriptor; - } - per_candidate.live_in.insert(relay_parent); + let candidate_entry = match self.per_candidate.entry(receipt_hash) { + Entry::Occupied(e) => e.into_mut(), + Entry::Vacant(e) => { + if let FetchedLiveCandidate::Fresh(descriptor) = fetched { + e.insert(PerCandidate { + message_vault: HashMap::new(), + received_messages: HashMap::new(), + sent_messages: HashMap::new(), + validators: validators.clone(), + validator_index, + descriptor, + live_in: HashSet::new(), + span: if validator_index.is_some() { + jaeger::candidate_hash_span(&receipt_hash, "pending-availability") + } else { + jaeger::JaegerSpan::Disabled + }, + }) + } else { + tracing::warn!(target: LOG_TARGET, "No `per_candidate` but not fresh. logic error"); + continue; + } + } + }; + + candidate_entry.live_in.insert(relay_parent); } } @@ -259,6 +290,18 @@ impl ProtocolState { } } +fn cached_live_candidates_unioned<'a>( + per_relay_parent: &'a HashMap, + relay_parents: impl IntoIterator + 'a, +) -> HashSet { + relay_parents + .into_iter() + .filter_map(|r| per_relay_parent.get(r)) + .map(|per_relay_parent| per_relay_parent.live_candidates.iter().cloned()) + .flatten() + .collect() +} + /// Deal with network bridge updates and track what needs to be tracked /// which depends on the message type received. #[tracing::instrument(level = "trace", skip(ctx, keystore, metrics), fields(subsystem = LOG_TARGET))] @@ -297,8 +340,6 @@ where } }; - let mut _span = jaeger::hash_span(&gossiped_availability.candidate_hash.0, "availability-message-received"); - process_incoming_peer_message(ctx, state, remote, gossiped_availability, metrics) .await?; } @@ -344,9 +385,11 @@ where // handle all candidates for candidate_hash in state.cached_live_candidates_unioned(view.difference(&old_view)) { // If we are not a validator for this candidate, let's skip it. - if state.per_candidate.entry(candidate_hash).or_default().validator_index.is_none() { - continue - } + match state.per_candidate.get(&candidate_hash) { + None => continue, + Some(c) if c.validator_index.is_none() => continue, + Some(_) => {}, + }; // check if the availability is present in the store exists if !query_data_availability(ctx, candidate_hash).await? { @@ -367,12 +410,18 @@ where .map(|(peer, _view)| peer.clone()) .collect(); - let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); + let per_candidate = state.per_candidate.get_mut(&candidate_hash) + .expect("existence checked above; qed"); let validator_count = per_candidate.validators.len(); // distribute all erasure messages to interested peers for chunk_index in 0u32..(validator_count as u32) { + let _span = { + let mut span = per_candidate.span.child("load-and-distribute"); + span.add_string_tag("chunk-index", &format!("{}", chunk_index)); + span + }; let message = if let Some(message) = per_candidate.message_vault.get(&chunk_index) { tracing::trace!( target: LOG_TARGET, @@ -389,10 +438,15 @@ where "Retrieved chunk from availability storage", ); - AvailabilityGossipMessage { + + let msg = AvailabilityGossipMessage { candidate_hash, erasure_chunk, - } + }; + + per_candidate.add_message(chunk_index, msg.clone()); + + msg } else { tracing::error!( target: LOG_TARGET, @@ -407,12 +461,15 @@ where let peers = peers .iter() - .filter(|peer| per_candidate.message_required_by_peer(peer, &chunk_index)) + .filter(|peer| per_candidate.message_required_by_peer(peer, chunk_index)) .cloned() .collect::>(); send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await; } + + // traces are better if we wait until the loop is done to drop. + per_candidate.drop_span_after_own_availability(); } // cleanup the removed relay parents and their states @@ -442,10 +499,6 @@ where .insert(message.erasure_chunk.index); } - per_candidate - .message_vault - .insert(message.erasure_chunk.index, message.clone()); - if !peers.is_empty() { ctx.send_message(NetworkBridgeMessage::SendValidationMessage( peers.clone(), @@ -482,7 +535,10 @@ where // Send all messages we've seen before and the peer is now interested in. for candidate_hash in added_candidates { - let per_candidate = state.per_candidate.entry(candidate_hash).or_default(); + let per_candidate = match state.per_candidate.get_mut(&candidate_hash) { + Some(p) => p, + None => continue, + }; // obtain the relevant chunk indices not sent yet let messages = ((0 as ValidatorIndex)..(per_candidate.validators.len() as ValidatorIndex)) @@ -493,7 +549,7 @@ where per_candidate .message_vault .get(&erasure_chunk_index) - .filter(|_| per_candidate.message_required_by_peer(&origin, &erasure_chunk_index)) + .filter(|_| per_candidate.message_required_by_peer(&origin, erasure_chunk_index)) }) .cloned() .collect::>(); @@ -540,12 +596,10 @@ where let live_candidates = state.cached_live_candidates_unioned(state.view.heads.iter()); // check if the candidate is of interest - let descriptor = if live_candidates.contains(&message.candidate_hash) { + let candidate_entry = if live_candidates.contains(&message.candidate_hash) { state.per_candidate - .get(&message.candidate_hash) + .get_mut(&message.candidate_hash) .expect("All live candidates are contained in per_candidate; qed") - .descriptor - .clone() } else { tracing::trace!( target: LOG_TARGET, @@ -557,105 +611,140 @@ where return Ok(()) }; + // Handle a duplicate before doing expensive checks. + if let Some(existing) = candidate_entry.message_vault.get(&message.erasure_chunk.index) { + let span = candidate_entry.span.child("handle-duplicate"); + // check if this particular erasure chunk was already sent by that peer before + { + let _span = span.child("check-entry"); + let received_set = candidate_entry + .received_messages + .entry(origin.clone()) + .or_default(); + + if !received_set.insert(message.erasure_chunk.index) { + modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; + return Ok(()); + } + } + + // check that the message content matches what we have already before rewarding + // the peer. + { + let _span = span.child("check-accurate"); + if existing == &message { + modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await; + } else { + modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + } + } + + return Ok(()); + } + + let span = { + let mut span = candidate_entry.span.child("process-new-chunk"); + span.add_string_tag("peer-id", &origin.to_base58()); + span + }; + // check the merkle proof against the erasure root in the candidate descriptor. - let anticipated_hash = match branch_hash( - &descriptor.erasure_root, - &message.erasure_chunk.proof, - message.erasure_chunk.index as usize, - ) { - Ok(hash) => hash, - Err(e) => { + let anticipated_hash = { + let _span = span.child("check-merkle-root"); + match branch_hash( + &candidate_entry.descriptor.erasure_root, + &message.erasure_chunk.proof, + message.erasure_chunk.index as usize, + ) { + Ok(hash) => hash, + Err(e) => { + tracing::trace!( + target: LOG_TARGET, + candidate_hash = ?message.candidate_hash, + peer = %origin, + error = ?e, + "Failed to calculate chunk merkle proof", + ); + modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; + return Ok(()); + }, + } + }; + + { + let _span = span.child("check-chunk-hash"); + let erasure_chunk_hash = BlakeTwo256::hash(&message.erasure_chunk.chunk); + if anticipated_hash != erasure_chunk_hash { tracing::trace!( target: LOG_TARGET, candidate_hash = ?message.candidate_hash, peer = %origin, - error = ?e, - "Failed to calculate chunk merkle proof", + "Peer sent chunk with invalid merkle proof", ); modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; return Ok(()); - }, - }; - - let erasure_chunk_hash = BlakeTwo256::hash(&message.erasure_chunk.chunk); - if anticipated_hash != erasure_chunk_hash { - tracing::trace!( - target: LOG_TARGET, - candidate_hash = ?message.candidate_hash, - peer = %origin, - "Peer send chunk with invalid merkle proof", - ); - modify_reputation(ctx, origin, COST_MERKLE_PROOF_INVALID).await; - return Ok(()); + } } - let erasure_chunk_index = &message.erasure_chunk.index; - { - let per_candidate = state.per_candidate.entry(message.candidate_hash).or_default(); + // insert into known messages and change reputation. we've guaranteed + // above that the message vault doesn't contain any message under this + // chunk index already. - // check if this particular erasure chunk was already sent by that peer before - { - let received_set = per_candidate + candidate_entry .received_messages .entry(origin.clone()) - .or_default(); - if !received_set.insert(*erasure_chunk_index) { - modify_reputation(ctx, origin, COST_PEER_DUPLICATE_MESSAGE).await; - return Ok(()); + .or_default() + .insert(message.erasure_chunk.index); + + modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await; + + // save the chunk for our index + if Some(message.erasure_chunk.index) == candidate_entry.validator_index { + let _span = span.child("store-our-chunk"); + if store_chunk( + ctx, + message.candidate_hash, + candidate_entry.descriptor.relay_parent, + message.erasure_chunk.index, + message.erasure_chunk.clone(), + ).await?.is_err() { + tracing::warn!( + target: LOG_TARGET, + "Failed to store erasure chunk to availability store" + ); } } - // insert into known messages and change reputation - if per_candidate - .message_vault - .insert(*erasure_chunk_index, message.clone()) - .is_some() - { - modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE).await; - } else { - modify_reputation(ctx, origin, BENEFIT_VALID_MESSAGE_FIRST).await; - - // save the chunk for our index - if Some(*erasure_chunk_index) == per_candidate.validator_index { - if store_chunk( - ctx, - message.candidate_hash, - descriptor.relay_parent, - message.erasure_chunk.index, - message.erasure_chunk.clone(), - ).await?.is_err() { - tracing::warn!( - target: LOG_TARGET, - "Failed to store erasure chunk to availability store" - ); - } - } - }; + candidate_entry.add_message(message.erasure_chunk.index, message.clone()); + candidate_entry.drop_span_after_own_availability(); } - // condense the peers to the peers with interest on the candidate - let peers = state - .peer_views - .clone() - .into_iter() - .filter(|(_, view)| { - // peers view must contain the candidate hash too - state - .cached_live_candidates_unioned(view.heads.iter()) - .contains(&message.candidate_hash) - }) - .map(|(peer, _)| -> PeerId { peer.clone() }) - .collect::>(); - let per_candidate = state.per_candidate.entry(message.candidate_hash).or_default(); + // condense the peers to the peers with interest on the candidate + let peers = { + let _span = span.child("determine-recipient-peers"); + let per_relay_parent = &state.per_relay_parent; - let peers = peers - .into_iter() - .filter(|peer| per_candidate.message_required_by_peer(peer, erasure_chunk_index)) - .collect::>(); + state + .peer_views + .clone() + .into_iter() + .filter(|(_, view)| { + // peers view must contain the candidate hash too + cached_live_candidates_unioned( + per_relay_parent, + view.heads.iter(), + ).contains(&message.candidate_hash) + }) + .map(|(peer, _)| -> PeerId { peer.clone() }) + .filter(|peer| candidate_entry.message_required_by_peer(peer, message.erasure_chunk.index)) + .collect::>() + }; + drop(span); // gossip that message to interested peers - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await; + send_tracked_gossip_messages_to_peers(ctx, candidate_entry, metrics, peers, iter::once(message)).await; + Ok(()) } @@ -681,7 +770,14 @@ impl AvailabilityDistributionSubsystem { where Context: SubsystemContext, { - let mut state = ProtocolState::default(); + let mut state = ProtocolState { + peer_views: HashMap::new(), + view: Default::default(), + live_under: HashMap::new(), + per_relay_parent: HashMap::new(), + per_candidate: HashMap::new(), + }; + self.run_inner(ctx, &mut state).await } diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index d06a98402d..2479c8ec6c 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -50,6 +50,19 @@ fn chunk_protocol_message( ) } +fn make_per_candidate() -> PerCandidate { + PerCandidate { + live_in: HashSet::new(), + message_vault: HashMap::new(), + received_messages: HashMap::new(), + sent_messages: HashMap::new(), + validators: Vec::new(), + validator_index: None, + descriptor: Default::default(), + span: jaeger::JaegerSpan::Disabled, + } +} + struct TestHarness { virtual_overseer: test_helpers::TestSubsystemContextHandle, } @@ -1024,9 +1037,10 @@ fn remove_relay_parent_only_removes_per_candidate_if_final() { live_candidates: std::iter::once(candidate_hash_a).collect(), }); - state.per_candidate.insert(candidate_hash_a, PerCandidate { - live_in: vec![hash_a, hash_b].into_iter().collect(), - ..Default::default() + state.per_candidate.insert(candidate_hash_a, { + let mut per_candidate = make_per_candidate(); + per_candidate.live_in = vec![hash_a, hash_b].into_iter().collect(); + per_candidate }); state.remove_relay_parent(&hash_a); @@ -1052,6 +1066,8 @@ fn add_relay_parent_includes_all_live_candidates() { let candidate_hash_a = CandidateHash([10u8; 32].into()); let candidate_hash_b = CandidateHash([11u8; 32].into()); + state.per_candidate.insert(candidate_hash_b, make_per_candidate()); + let candidates = vec![ (candidate_hash_a, FetchedLiveCandidate::Fresh(Default::default())), (candidate_hash_b, FetchedLiveCandidate::Cached), diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 966cded33d..39cacf1041 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -495,8 +495,16 @@ where NetworkBridgeEvent::PeerMessage(remote, message) => { match message { protocol_v1::BitfieldDistributionMessage::Bitfield(relay_parent, bitfield) => { - let mut _span = jaeger::hash_span(&relay_parent, "bitfield-gossip-received"); - _span.add_string_tag("peer-id", &remote.to_base58()); + let mut _span = { + let mut span = jaeger::hash_span(&relay_parent, "bitfield-gossip-received"); + span.add_string_tag("peer-id", &remote.to_base58()); + span.add_string_tag( + "claimed-validator", + &format!("{}", bitfield.validator_index()), + ); + span + }; + tracing::trace!(target: LOG_TARGET, peer_id = %remote, "received bitfield gossip from peer"); let gossiped_bitfield = BitfieldGossipMessage { relay_parent, diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 951f76d526..6fee53975c 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -731,6 +731,10 @@ async fn handle_incoming_message<'a>( "candidate-hash", &format!("{:?}", candidate_hash.0), ); + span.add_string_tag( + "peer-id", + &peer.to_base58(), + ); span }; diff --git a/node/subsystem/src/jaeger.rs b/node/subsystem/src/jaeger.rs index 35f5325116..9e2bb577f2 100644 --- a/node/subsystem/src/jaeger.rs +++ b/node/subsystem/src/jaeger.rs @@ -129,6 +129,12 @@ impl JaegerSpan { } } +impl std::fmt::Debug for JaegerSpan { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "") + } +} + impl From> for JaegerSpan { fn from(src: Option) -> Self { if let Some(span) = src { @@ -146,9 +152,12 @@ impl From for JaegerSpan { } /// Shortcut for [`candidate_hash_span`] with the hash of the `Candidate` block. -#[inline(always)] pub fn candidate_hash_span(candidate_hash: &CandidateHash, span_name: impl Into) -> JaegerSpan { - INSTANCE.read_recursive().span(|| { candidate_hash.0 }, span_name).into() + let mut span: JaegerSpan = INSTANCE.read_recursive() + .span(|| { candidate_hash.0 }, span_name).into(); + + span.add_string_tag("candidate-hash", &format!("{:?}", candidate_hash.0)); + span } /// Shortcut for [`hash_span`] with the hash of the `PoV`. -- GitLab From e8cd587dba8b0291cd03c4b7d453dcc674864ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 4 Jan 2021 21:47:56 +0100 Subject: [PATCH 155/203] Use correct ROC currency name (#2195) --- node/service/res/rococo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/service/res/rococo.json b/node/service/res/rococo.json index 5c2de03453..94030229be 100644 --- a/node/service/res/rococo.json +++ b/node/service/res/rococo.json @@ -22,7 +22,7 @@ "properties": { "ss58Format": 42, "tokenDecimals": 12, - "tokenSymbol": "RCO" + "tokenSymbol": "ROC" }, "forkBlocks": null, "badBlocks": null, -- GitLab From 6b688dd5044af4c600e10aa7f8c157f2983de880 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Tue, 5 Jan 2021 14:45:16 +0100 Subject: [PATCH 156/203] Parachains well known keys and abridged primitives (#2194) * Add well_known_keys * Reorder HrmpChannel and HostConfiguration members * abridged versions and well known keys tests * Add some comments * Add a note on generation of the prefixes and other magic values * Recommend accessing the well known values through abridged structs --- Cargo.lock | 2 + primitives/Cargo.toml | 3 + primitives/src/v1.rs | 138 +++++++++++++++++++ runtime/parachains/src/configuration.rs | 175 ++++++++++++++++-------- runtime/parachains/src/hrmp.rs | 76 +++++++++- runtime/parachains/src/ump.rs | 27 ++++ 6 files changed, 359 insertions(+), 62 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2bb7c933b6..2cebe26d7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5382,6 +5382,7 @@ version = "0.8.27" dependencies = [ "bitvec", "frame-system", + "hex-literal", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain", @@ -5393,6 +5394,7 @@ dependencies = [ "sp-authority-discovery", "sp-core", "sp-inherents", + "sp-io", "sp-keystore", "sp-runtime", "sp-serializer", diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index efe65aec09..08fbfd999d 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -14,6 +14,7 @@ sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "maste sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-version = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-staking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -23,6 +24,7 @@ polkadot-core-primitives = { path = "../core-primitives", default-features = fal trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } frame-system = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +hex-literal = "0.3.1" [dev-dependencies] sp-serializer = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -40,6 +42,7 @@ std = [ "sp-authority-discovery/std", "sp-keystore", "sp-std/std", + "sp-io/std", "sp-version/std", "sp-staking/std", "sp-arithmetic/std", diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 6104d6aae2..5a3d25efee 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -55,6 +55,84 @@ pub use crate::v0::{ValidatorPair, CollatorPair}; pub use sp_staking::SessionIndex; pub use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; +/// A declarations of storage keys where an external observer can find some interesting data. +pub mod well_known_keys { + use super::{Id, HrmpChannelId}; + use hex_literal::hex; + use sp_io::hashing::twox_64; + use sp_std::prelude::*; + use parity_scale_codec::Encode as _; + + // A note on generating these magic values below: + // + // The `StorageValue`, such as `ACTIVE_CONFIG` was obtained by calling: + // + // ::ActiveConfig::hashed_key() + // + // The `StorageMap` values require `prefix`, and for example for `hrmp_egress_channel_index`, + // it could be obtained like: + // + // ::HrmpEgressChannelsIndex::prefix_hash(); + // + + /// The currently active host configuration. + /// + /// The storage entry should be accessed as an `AbridgedHostConfiguration` encoded value. + pub const ACTIVE_CONFIG: &[u8] = + &hex!["06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385"]; + + /// The upward message dispatch queue for the given para id. + /// + /// The storage entry stores a tuple of two values: + /// + /// - `count: u32`, the number of messages currently in the queue for given para, + /// - `total_size: u32`, the total size of all messages in the queue. + pub fn relay_dispatch_queue_size(para_id: Id) -> Vec { + let prefix = hex!["f5207f03cfdce586301014700e2c2593fad157e461d71fd4c1f936839a5f1f3e"]; + + para_id.using_encoded(|para_id: &[u8]| { + prefix.as_ref() + .iter() + .chain(twox_64(para_id).iter()) + .chain(para_id.iter()) + .cloned() + .collect() + }) + } + + /// The hrmp channel for the given identifier. + /// + /// The storage entry should be accessed as an `AbridgedHrmpChannel` encoded value. + pub fn hrmp_channels(channel: HrmpChannelId) -> Vec { + let prefix = hex!["6a0da05ca59913bc38a8630590f2627cb6604cff828a6e3f579ca6c59ace013d"]; + + channel.using_encoded(|channel: &[u8]| { + prefix.as_ref() + .iter() + .chain(twox_64(channel).iter()) + .chain(channel.iter()) + .cloned() + .collect() + }) + } + + /// The list of outbound channels for the given para. + /// + /// The storage entry stores a `Vec` + pub fn hrmp_egress_channel_index(para_id: Id) -> Vec { + let prefix = hex!["6a0da05ca59913bc38a8630590f2627cf12b746dcf32e843354583c9702cc020"]; + + para_id.using_encoded(|para_id: &[u8]| { + prefix.as_ref() + .iter() + .chain(twox_64(para_id).iter()) + .chain(para_id.iter()) + .cloned() + .collect() + }) + } +} + /// Unique identifier for the Inclusion Inherent pub const INCLUSION_INHERENT_IDENTIFIER: InherentIdentifier = *b"inclusn0"; @@ -844,6 +922,66 @@ impl From for u8 { } } +/// Abridged version of `HostConfiguration` (from the `Configuration` parachains host runtime module) +/// meant to be used by a parachain or PDK such as cumulus. +#[derive(Clone, Encode, Decode, RuntimeDebug)] +#[cfg_attr(feature = "std", derive(PartialEq))] +pub struct AbridgedHostConfiguration { + /// The maximum validation code size, in bytes. + pub max_code_size: u32, + /// The maximum head-data size, in bytes. + pub max_head_data_size: u32, + /// Total number of individual messages allowed in the parachain -> relay-chain message queue. + pub max_upward_queue_count: u32, + /// Total size of messages allowed in the parachain -> relay-chain message queue before which + /// no further messages may be added to it. If it exceeds this then the queue may contain only + /// a single message. + pub max_upward_queue_size: u32, + /// The maximum size of an upward message that can be sent by a candidate. + /// + /// This parameter affects the size upper bound of the `CandidateCommitments`. + pub max_upward_message_size: u32, + /// The maximum number of messages that a candidate can contain. + /// + /// This parameter affects the size upper bound of the `CandidateCommitments`. + pub max_upward_message_num_per_candidate: u32, + /// The maximum number of outbound HRMP messages can be sent by a candidate. + /// + /// This parameter affects the upper bound of size of `CandidateCommitments`. + pub hrmp_max_message_num_per_candidate: u32, + /// The minimum frequency at which parachains can update their validation code. + pub validation_upgrade_frequency: BlockNumber, + /// The delay, in blocks, before a validation upgrade is applied. + pub validation_upgrade_delay: BlockNumber, +} + +/// Abridged version of `HrmpChannel` (from the `Hrmp` parachains host runtime module) meant to be +/// used by a parachain or PDK such as cumulus. +#[derive(Clone, Encode, Decode, RuntimeDebug)] +#[cfg_attr(feature = "std", derive(PartialEq))] +pub struct AbridgedHrmpChannel { + /// The maximum number of messages that can be pending in the channel at once. + pub max_capacity: u32, + /// The maximum total size of the messages that can be pending in the channel at once. + pub max_total_size: u32, + /// The maximum message size that could be put into the channel. + pub max_message_size: u32, + /// The current number of messages pending in the channel. + /// Invariant: should be less or equal to `max_capacity`.s`. + pub msg_count: u32, + /// The total size in bytes of all message payloads in the channel. + /// Invariant: should be less or equal to `max_total_size`. + pub total_size: u32, + /// A head of the Message Queue Chain for this channel. Each link in this chain has a form: + /// `(prev_head, B, H(M))`, where + /// - `prev_head`: is the previous value of `mqc_head` or zero if none. + /// - `B`: is the [relay-chain] block number in which a message was appended + /// - `H(M)`: is the hash of the message being appended. + /// This value is initialized to a special value that consists of all zeroes which indicates + /// that no messages were previously added. + pub mqc_head: Option, +} + #[cfg(test)] mod tests { use super::*; diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index af693ed676..847a16b11c 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -34,19 +34,92 @@ use sp_runtime::traits::Zero; #[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug)] #[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] pub struct HostConfiguration { + // NOTE: This structure is used by parachains via merkle proofs. Therefore, this struct requires + // special treatment. + // + // A parachain requested this struct can only depend on the subset of this struct. Specifically, + // only a first few fields can be depended upon. These fields cannot be changed without + // corresponding migration of the parachains. + + /** + * The parameters that are required for the parachains. + */ + + /// The maximum validation code size, in bytes. + pub max_code_size: u32, + /// The maximum head-data size, in bytes. + pub max_head_data_size: u32, + /// Total number of individual messages allowed in the parachain -> relay-chain message queue. + pub max_upward_queue_count: u32, + /// Total size of messages allowed in the parachain -> relay-chain message queue before which + /// no further messages may be added to it. If it exceeds this then the queue may contain only + /// a single message. + pub max_upward_queue_size: u32, + /// The maximum size of an upward message that can be sent by a candidate. + /// + /// This parameter affects the size upper bound of the `CandidateCommitments`. + pub max_upward_message_size: u32, + /// The maximum number of messages that a candidate can contain. + /// + /// This parameter affects the size upper bound of the `CandidateCommitments`. + pub max_upward_message_num_per_candidate: u32, + /// The maximum number of outbound HRMP messages can be sent by a candidate. + /// + /// This parameter affects the upper bound of size of `CandidateCommitments`. + pub hrmp_max_message_num_per_candidate: u32, /// The minimum frequency at which parachains can update their validation code. pub validation_upgrade_frequency: BlockNumber, /// The delay, in blocks, before a validation upgrade is applied. pub validation_upgrade_delay: BlockNumber, + + /** + * The parameters that are not essential, but still may be of interest for parachains. + */ + + /// The maximum POV block size, in bytes. + pub max_pov_size: u32, + /// The maximum size of a message that can be put in a downward message queue. + /// + /// Since we require receiving at least one DMP message the obvious upper bound of the size is + /// the PoV size. Of course, there is a lot of other different things that a parachain may + /// decide to do with its PoV so this value in practice will be picked as a fraction of the PoV + /// size. + pub max_downward_message_size: u32, + /// The amount of weight we wish to devote to the processing the dispatchable upward messages + /// stage. + /// + /// NOTE that this is a soft limit and could be exceeded. + pub preferred_dispatchable_upward_messages_step_weight: Weight, + /// The maximum number of outbound HRMP channels a parachain is allowed to open. + pub hrmp_max_parachain_outbound_channels: u32, + /// The maximum number of outbound HRMP channels a parathread is allowed to open. + pub hrmp_max_parathread_outbound_channels: u32, + /// Number of sessions after which an HRMP open channel request expires. + pub hrmp_open_request_ttl: u32, + /// The deposit that the sender should provide for opening an HRMP channel. + pub hrmp_sender_deposit: Balance, + /// The deposit that the recipient should provide for accepting opening an HRMP channel. + pub hrmp_recipient_deposit: Balance, + /// The maximum number of messages allowed in an HRMP channel at once. + pub hrmp_channel_max_capacity: u32, + /// The maximum total size of messages in bytes allowed in an HRMP channel at once. + pub hrmp_channel_max_total_size: u32, + /// The maximum number of inbound HRMP channels a parachain is allowed to accept. + pub hrmp_max_parachain_inbound_channels: u32, + /// The maximum number of inbound HRMP channels a parathread is allowed to accept. + pub hrmp_max_parathread_inbound_channels: u32, + /// The maximum size of a message that could ever be put into an HRMP channel. + /// + /// This parameter affects the upper bound of size of `CandidateCommitments`. + pub hrmp_channel_max_message_size: u32, + + /** + * Parameters that will unlikely be needed by parachains. + */ + /// The acceptance period, in blocks. This is the amount of blocks after availability that validators /// and fishermen have to perform secondary checks or issue reports. pub acceptance_period: BlockNumber, - /// The maximum validation code size, in bytes. - pub max_code_size: u32, - /// The maximum head-data size, in bytes. - pub max_head_data_size: u32, - /// The maximum POV block size, in bytes. - pub max_pov_size: u32, /// The amount of execution cores to dedicate to parathread execution. pub parathread_cores: u32, /// The number of retries that a parathread author has to submit their block. @@ -88,58 +161,6 @@ pub struct HostConfiguration { pub needed_approvals: u32, /// The number of samples to do of the RelayVRFModulo approval assignment criterion. pub relay_vrf_modulo_samples: u32, - /// Total number of individual messages allowed in the parachain -> relay-chain message queue. - pub max_upward_queue_count: u32, - /// Total size of messages allowed in the parachain -> relay-chain message queue before which - /// no further messages may be added to it. If it exceeds this then the queue may contain only - /// a single message. - pub max_upward_queue_size: u32, - /// The maximum size of a message that can be put in a downward message queue. - /// - /// Since we require receiving at least one DMP message the obvious upper bound of the size is - /// the PoV size. Of course, there is a lot of other different things that a parachain may - /// decide to do with its PoV so this value in practice will be picked as a fraction of the PoV - /// size. - pub max_downward_message_size: u32, - /// The amount of weight we wish to devote to the processing the dispatchable upward messages - /// stage. - /// - /// NOTE that this is a soft limit and could be exceeded. - pub preferred_dispatchable_upward_messages_step_weight: Weight, - /// The maximum size of an upward message that can be sent by a candidate. - /// - /// This parameter affects the size upper bound of the `CandidateCommitments`. - pub max_upward_message_size: u32, - /// The maximum number of messages that a candidate can contain. - /// - /// This parameter affects the size upper bound of the `CandidateCommitments`. - pub max_upward_message_num_per_candidate: u32, - /// Number of sessions after which an HRMP open channel request expires. - pub hrmp_open_request_ttl: u32, - /// The deposit that the sender should provide for opening an HRMP channel. - pub hrmp_sender_deposit: Balance, - /// The deposit that the recipient should provide for accepting opening an HRMP channel. - pub hrmp_recipient_deposit: Balance, - /// The maximum number of messages allowed in an HRMP channel at once. - pub hrmp_channel_max_capacity: u32, - /// The maximum total size of messages in bytes allowed in an HRMP channel at once. - pub hrmp_channel_max_total_size: u32, - /// The maximum number of inbound HRMP channels a parachain is allowed to accept. - pub hrmp_max_parachain_inbound_channels: u32, - /// The maximum number of inbound HRMP channels a parathread is allowed to accept. - pub hrmp_max_parathread_inbound_channels: u32, - /// The maximum size of a message that could ever be put into an HRMP channel. - /// - /// This parameter affects the upper bound of size of `CandidateCommitments`. - pub hrmp_channel_max_message_size: u32, - /// The maximum number of outbound HRMP channels a parachain is allowed to open. - pub hrmp_max_parachain_outbound_channels: u32, - /// The maximum number of outbound HRMP channels a parathread is allowed to open. - pub hrmp_max_parathread_outbound_channels: u32, - /// The maximum number of outbound HRMP messages can be sent by a candidate. - /// - /// This parameter affects the upper bound of size of `CandidateCommitments`. - pub hrmp_max_message_num_per_candidate: u32, } impl> Default for HostConfiguration { @@ -857,4 +878,42 @@ mod tests { assert!(::PendingConfig::get().is_none()) }); } + + #[test] + fn verify_externally_accessible() { + // This test verifies that the value can be accessed through the well known keys and the + // host configuration decodes into the abridged version. + + use primitives::v1::{well_known_keys, AbridgedHostConfiguration}; + + new_test_ext(Default::default()).execute_with(|| { + let ground_truth = HostConfiguration::default(); + + // Make sure that the configuration is stored in the storage. + ::ActiveConfig::put(ground_truth.clone()); + + // Extract the active config via the well known key. + let raw_active_config = sp_io::storage::get(well_known_keys::ACTIVE_CONFIG) + .expect("config must be present in storage under ACTIVE_CONFIG"); + let abridged_config = AbridgedHostConfiguration::decode(&mut &raw_active_config[..]) + .expect("HostConfiguration must be decodable into AbridgedHostConfiguration"); + + assert_eq!( + abridged_config, + AbridgedHostConfiguration { + max_code_size: ground_truth.max_code_size, + max_head_data_size: ground_truth.max_head_data_size, + max_upward_queue_count: ground_truth.max_upward_queue_count, + max_upward_queue_size: ground_truth.max_upward_queue_size, + max_upward_message_size: ground_truth.max_upward_message_size, + max_upward_message_num_per_candidate: ground_truth + .max_upward_message_num_per_candidate, + hrmp_max_message_num_per_candidate: ground_truth + .hrmp_max_message_num_per_candidate, + validation_upgrade_frequency: ground_truth.validation_upgrade_frequency, + validation_upgrade_delay: ground_truth.validation_upgrade_delay, + }, + ); + }); + } } diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index 8021ebf2e3..eb0e9aa603 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -56,10 +56,13 @@ pub struct HrmpOpenChannelRequest { #[derive(Encode, Decode)] #[cfg_attr(test, derive(Debug))] pub struct HrmpChannel { - /// The amount that the sender supplied as a deposit when opening this channel. - pub sender_deposit: Balance, - /// The amount that the recipient supplied as a deposit when accepting opening this channel. - pub recipient_deposit: Balance, + // NOTE: This structure is used by parachains via merkle proofs. Therefore, this struct requires + // special treatment. + // + // A parachain requested this struct can only depend on the subset of this struct. Specifically, + // only a first few fields can be depended upon (See `AbridgedHrmpChannel`). These fields cannot + // be changed without corresponding migration of parachains. + /// The maximum number of messages that can be pending in the channel at once. pub max_capacity: u32, /// The maximum total size of the messages that can be pending in the channel at once. @@ -80,6 +83,10 @@ pub struct HrmpChannel { /// This value is initialized to a special value that consists of all zeroes which indicates /// that no messages were previously added. pub mqc_head: Option, + /// The amount that the sender supplied as a deposit when opening this channel. + pub sender_deposit: Balance, + /// The amount that the recipient supplied as a deposit when accepting opening this channel. + pub recipient_deposit: Balance, } /// An error returned by [`check_hrmp_watermark`] that indicates an acceptance criteria check @@ -270,7 +277,10 @@ decl_storage! { /// - there should be no other dangling channels in `HrmpChannels`. /// - the vectors are sorted. HrmpIngressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; + // NOTE that this field is used by parachains via merkle storage proofs, therefore changing + // the format will require migration of parachains. HrmpEgressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; + /// Storage for the messages for each channel. /// Invariant: cannot be non-empty if the corresponding channel in `HrmpChannels` is `None`. HrmpChannelContents: map hasher(twox_64_concat) HrmpChannelId => Vec>; @@ -1554,4 +1564,62 @@ mod tests { assert_storage_consistency_exhaustive(); }); } + + #[test] + fn verify_externally_accessible() { + use primitives::v1::{well_known_keys, AbridgedHrmpChannel}; + + let para_a = 20.into(); + let para_b = 21.into(); + + new_test_ext(GenesisConfigBuilder::default().build()).execute_with(|| { + // Register two parachains, wait until a session change, then initiate channel open + // request and accept that, and finally wait until the next session. + register_parachain(para_a); + register_parachain(para_b); + run_to_block(5, Some(vec![5])); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); + run_to_block(8, Some(vec![8])); + + // Here we have a channel a->b opened. + // + // Try to obtain this channel from the storage and + // decode it into the abridged version. + assert!(channel_exists(para_a, para_b)); + let raw_hrmp_channel = + sp_io::storage::get(&well_known_keys::hrmp_channels(HrmpChannelId { + sender: para_a, + recipient: para_b, + })) + .expect("the channel exists and we must be able to get it through well known keys"); + let abridged_hrmp_channel = AbridgedHrmpChannel::decode(&mut &raw_hrmp_channel[..]) + .expect("HrmpChannel should be decodable as AbridgedHrmpChannel"); + + assert_eq!( + abridged_hrmp_channel, + AbridgedHrmpChannel { + max_capacity: 2, + max_total_size: 16, + max_message_size: 8, + msg_count: 0, + total_size: 0, + mqc_head: None, + }, + ); + + // Now, verify that we can access and decode the egress index. + let raw_egress_index = + sp_io::storage::get( + &well_known_keys::hrmp_egress_channel_index(para_a) + ) + .expect("the egress index must be present for para_a"); + let egress_index = >::decode(&mut &raw_egress_index[..]) + .expect("egress index should be decodable as a list of para ids"); + assert_eq!( + egress_index, + vec![para_b], + ); + }); + } } diff --git a/runtime/parachains/src/ump.rs b/runtime/parachains/src/ump.rs index 8974f9c9ff..35c0188c5b 100644 --- a/runtime/parachains/src/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -170,6 +170,8 @@ decl_storage! { /// /// Invariant: /// - The set of keys should exactly match the set of keys of `RelayDispatchQueues`. + // NOTE that this field is used by parachains via merkle storage proofs, therefore changing + // the format will require migration of parachains. RelayDispatchQueueSize: map hasher(twox_64_concat) ParaId => (u32, u32); /// The ordered list of `ParaId`s that have a `RelayDispatchQueue` entry. /// @@ -907,4 +909,29 @@ mod tests { } }); } + + #[test] + fn verify_relay_dispatch_queue_size_is_externally_accessible() { + // Make sure that the relay dispatch queue size storage entry is accessible via well known + // keys and is decodable into a (u32, u32). + + use primitives::v1::well_known_keys; + use parity_scale_codec::Decode as _; + + let a = ParaId::from(228); + let msg = vec![1, 2, 3]; + + new_test_ext(GenesisConfigBuilder::default().build()).execute_with(|| { + queue_upward_msg(a, msg); + + let raw_queue_size = sp_io::storage::get(&well_known_keys::relay_dispatch_queue_size(a)) + .expect("enqueing a message should create the dispatch queue\ + and it should be accessible via the well known keys"); + let (cnt, size) = <(u32, u32)>::decode(&mut &raw_queue_size[..]) + .expect("the dispatch queue size should be decodable into (u32, u32)"); + + assert_eq!(cnt, 1); + assert_eq!(size, 3); + }); + } } -- GitLab From 173443278ab03a3680d835ce7330c497f9538666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 5 Jan 2021 15:09:25 +0100 Subject: [PATCH 157/203] Add one Jaeger span per relay parent (#2196) * Add one Jaeger span per relay parent This adds one Jaeger span per relay parent, instead of always creating new spans per relay parent. This should improve the UI view, because subsystems are now grouped below one common span. * Fix doc tests * Replace `PerLeaveSpan` to `PerLeafSpan` * More renaming * Moare * Update node/subsystem/src/lib.rs Co-authored-by: Andronik Ordian * Skip the spans * Increase `spec_version` Co-authored-by: Andronik Ordian --- Cargo.lock | 21 ++++- Cargo.toml | 1 + node/collation-generation/src/lib.rs | 31 ++++--- node/core/av-store/Cargo.toml | 1 - node/core/av-store/src/lib.rs | 2 +- node/core/av-store/src/tests.rs | 19 ++-- node/core/backing/src/lib.rs | 12 ++- node/core/bitfield-signing/src/lib.rs | 9 +- node/core/candidate-selection/src/lib.rs | 7 +- node/core/provisioner/src/lib.rs | 16 ++-- node/jaeger/Cargo.toml | 17 ++++ .../src/jaeger.rs => jaeger/src/lib.rs} | 68 ++++++++++++-- .../availability-distribution/src/lib.rs | 26 +++--- .../availability-distribution/src/tests.rs | 20 ++-- node/network/bitfield-distribution/src/lib.rs | 92 ++++++++++--------- node/network/bridge/src/lib.rs | 43 ++++----- node/network/collator-protocol/Cargo.toml | 1 - .../collator-protocol/src/collator_side.rs | 49 +++++----- .../collator-protocol/src/validator_side.rs | 55 ++++++----- node/network/pov-distribution/Cargo.toml | 1 - node/network/pov-distribution/src/lib.rs | 8 +- node/network/pov-distribution/src/tests.rs | 55 +++++++---- node/network/protocol/Cargo.toml | 1 + node/network/protocol/src/lib.rs | 89 ++++++++++++++++-- .../network/statement-distribution/src/lib.rs | 40 +++++--- node/overseer/src/lib.rs | 69 +++++++------- node/subsystem-util/Cargo.toml | 1 + node/subsystem-util/src/lib.rs | 48 +++++----- node/subsystem/Cargo.toml | 1 + node/subsystem/src/errors.rs | 12 --- node/subsystem/src/lib.rs | 40 ++++++-- runtime/rococo/src/lib.rs | 2 +- 32 files changed, 535 insertions(+), 322 deletions(-) create mode 100644 node/jaeger/Cargo.toml rename node/{subsystem/src/jaeger.rs => jaeger/src/lib.rs} (82%) diff --git a/Cargo.lock b/Cargo.lock index 2cebe26d7d..c7b82b3c55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4969,7 +4969,6 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "smallvec 1.5.1", "sp-core", "sp-keyring", "thiserror", @@ -5057,7 +5056,6 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "sc-service", - "smallvec 1.5.1", "sp-core", "thiserror", "tracing", @@ -5208,11 +5206,27 @@ dependencies = [ "tracing-futures", ] +[[package]] +name = "polkadot-node-jaeger" +version = "0.1.0" +dependencies = [ + "async-std", + "lazy_static", + "log", + "mick-jaeger", + "parking_lot 0.11.1", + "polkadot-primitives", + "sc-network", + "sp-core", + "thiserror", +] + [[package]] name = "polkadot-node-network-protocol" version = "0.1.0" dependencies = [ "parity-scale-codec", + "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-primitives", "sc-network", @@ -5247,6 +5261,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.2", + "polkadot-node-jaeger", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem-test-helpers", @@ -5297,6 +5312,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.2", + "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5368,7 +5384,6 @@ dependencies = [ "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", "polkadot-primitives", - "smallvec 1.5.1", "sp-core", "sp-keyring", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index 0c6d23be7d..a3d026e729 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -65,6 +65,7 @@ members = [ "node/subsystem", "node/subsystem-test-helpers", "node/subsystem-util", + "node/jaeger", "node/test/client", "node/test/service", "parachain/test-parachains", diff --git a/node/collation-generation/src/lib.rs b/node/collation-generation/src/lib.rs index 7796a967c1..79c08eed27 100644 --- a/node/collation-generation/src/lib.rs +++ b/node/collation-generation/src/lib.rs @@ -126,12 +126,17 @@ impl CollationGenerationSubsystem { // follow the procedure from the guide if let Some(config) = &self.config { let metrics = self.metrics.clone(); - if let Err(err) = - handle_new_activations(config.clone(), &activated, ctx, metrics, sender).await - { + if let Err(err) = handle_new_activations( + config.clone(), + activated.into_iter().map(|v| v.0), + ctx, + metrics, + sender, + ).await { tracing::warn!(target: LOG_TARGET, err = ?err, "failed to handle new activations"); - }; + } } + false } Ok(Signal(Conclude)) => true, @@ -164,10 +169,10 @@ where Context: SubsystemContext, { fn start(self, ctx: Context) -> SpawnedSubsystem { - let future = Box::pin(async move { + let future = async move { self.run(ctx).await; Ok(()) - }); + }.boxed(); SpawnedSubsystem { name: "collation-generation-subsystem", @@ -176,10 +181,10 @@ where } } -#[tracing::instrument(level = "trace", skip(ctx, metrics, sender), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, metrics, sender, activated), fields(subsystem = LOG_TARGET))] async fn handle_new_activations( config: Arc, - activated: &[Hash], + activated: impl IntoIterator, ctx: &mut Context, metrics: Metrics, sender: &mpsc::Sender, @@ -189,11 +194,9 @@ async fn handle_new_activations( let _overall_timer = metrics.time_new_activations(); - for relay_parent in activated.iter().copied() { + for relay_parent in activated { let _relay_parent_timer = metrics.time_new_activations_relay_parent(); - // double-future magic happens here: the first layer of requests takes a mutable borrow of the context, and - // returns a receiver. The second layer of requests actually polls those receivers to completion. let (availability_cores, validators) = join!( request_availability_cores_ctx(relay_parent, ctx).await?, request_validators_ctx(relay_parent, ctx).await?, @@ -544,7 +547,7 @@ mod tests { subsystem_test_harness(overseer, |mut ctx| async move { handle_new_activations( test_config(123u32), - &subsystem_activated_hashes, + subsystem_activated_hashes, &mut ctx, Metrics(None), &tx, @@ -623,7 +626,7 @@ mod tests { let (tx, _rx) = mpsc::channel(0); subsystem_test_harness(overseer, |mut ctx| async move { - handle_new_activations(test_config(16), &activated_hashes, &mut ctx, Metrics(None), &tx) + handle_new_activations(test_config(16), activated_hashes, &mut ctx, Metrics(None), &tx) .await .unwrap(); }); @@ -700,7 +703,7 @@ mod tests { let sent_messages = Arc::new(Mutex::new(Vec::new())); let subsystem_sent_messages = sent_messages.clone(); subsystem_test_harness(overseer, |mut ctx| async move { - handle_new_activations(subsystem_config, &activated_hashes, &mut ctx, Metrics(None), &tx) + handle_new_activations(subsystem_config, activated_hashes, &mut ctx, Metrics(None), &tx) .await .unwrap(); diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index ef4daaaf9d..607b851d23 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -26,7 +26,6 @@ sc-service = { git = "https://github.com/paritytech/substrate", branch = "master log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" -smallvec = "1.5.1" kvdb-memorydb = "0.7.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 66bec12142..77f5dfb0c5 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -534,7 +534,7 @@ where FromOverseer::Signal(OverseerSignal::ActiveLeaves( ActiveLeavesUpdate { activated, .. }) ) => { - for activated in activated.into_iter() { + for (activated, _span) in activated.into_iter() { process_block_activated(ctx, &subsystem.inner, activated, &subsystem.metrics).await?; } } diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 330e0c529a..1d3bb26d4e 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -23,7 +23,6 @@ use futures::{ executor, Future, }; -use smallvec::smallvec; use polkadot_primitives::v1::{ AvailableData, BlockData, CandidateDescriptor, CandidateReceipt, HeadData, @@ -31,7 +30,7 @@ use polkadot_primitives::v1::{ }; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_subsystem::{ - ActiveLeavesUpdate, errors::RuntimeApiError, + ActiveLeavesUpdate, errors::RuntimeApiError, JaegerSpan, }; use polkadot_node_subsystem_test_helpers as test_helpers; @@ -182,8 +181,8 @@ fn runtime_api_error_does_not_stop_the_subsystem() { overseer_signal( &mut virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![new_leaf.clone()], - deactivated: smallvec![], + activated: vec![(new_leaf, Arc::new(JaegerSpan::Disabled))].into(), + deactivated: vec![].into(), }), ).await; @@ -516,8 +515,8 @@ fn stored_data_kept_until_finalized() { overseer_signal( &mut virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![new_leaf.clone()], - deactivated: smallvec![], + activated: vec![(new_leaf, Arc::new(JaegerSpan::Disabled))].into(), + deactivated: vec![].into(), }), ).await; @@ -620,8 +619,8 @@ fn stored_chunk_kept_until_finalized() { overseer_signal( &mut virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![new_leaf.clone()], - deactivated: smallvec![], + activated: vec![(new_leaf, Arc::new(JaegerSpan::Disabled))].into(), + deactivated: vec![].into(), }), ).await; @@ -758,8 +757,8 @@ fn forkfullness_works() { overseer_signal( &mut virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![new_leaf_1.clone(), new_leaf_2.clone()], - deactivated: smallvec![], + activated: vec![(new_leaf_1, Arc::new(JaegerSpan::Disabled)), (new_leaf_2, Arc::new(JaegerSpan::Disabled))].into(), + deactivated: vec![].into(), }), ).await; diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 8ac7df309f..d4973e48b3 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -37,7 +37,7 @@ use polkadot_node_primitives::{ FromTableMisbehavior, Statement, SignedFullStatement, MisbehaviorReport, ValidationResult, }; use polkadot_subsystem::{ - jaeger::{self, JaegerSpan}, + JaegerSpan, PerLeafSpan, messages::{ AllMessages, AvailabilityStoreMessage, CandidateBackingMessage, CandidateSelectionMessage, CandidateValidationMessage, PoVDistributionMessage, ProvisionableData, @@ -923,9 +923,10 @@ impl util::JobTrait for CandidateBackingJob { const NAME: &'static str = "CandidateBackingJob"; - #[tracing::instrument(skip(keystore, metrics, rx_to, tx_from), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(skip(span, keystore, metrics, rx_to, tx_from), fields(subsystem = LOG_TARGET))] fn run( parent: Hash, + span: Arc, keystore: SyncCryptoStorePtr, metrics: Metrics, rx_to: mpsc::Receiver, @@ -952,7 +953,7 @@ impl util::JobTrait for CandidateBackingJob { } } - let span = jaeger::hash_span(&parent, "run:backing"); + let span = PerLeafSpan::new(span, "backing"); let _span = span.child("runtime-apis"); let (validators, groups, session_index, cores) = futures::try_join!( @@ -1340,7 +1341,10 @@ mod tests { ) { // Start work on some new parent. virtual_overseer.send(FromOverseer::Signal( - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(test_state.relay_parent))) + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work( + test_state.relay_parent, + Arc::new(JaegerSpan::Disabled), + ))) ).await; // Check that subsystem job issues a request for a validator set. diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index ce82695997..8c06f76424 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -23,7 +23,7 @@ use futures::{channel::{mpsc, oneshot}, lock::Mutex, prelude::*, future, Future}; use sp_keystore::{Error as KeystoreError, SyncCryptoStorePtr}; use polkadot_node_subsystem::{ - jaeger, + jaeger, PerLeafSpan, JaegerSpan, messages::{ AllMessages, AvailabilityStoreMessage, BitfieldDistributionMessage, BitfieldSigningMessage, RuntimeApiMessage, RuntimeApiRequest, @@ -34,7 +34,7 @@ use polkadot_node_subsystem_util::{ self as util, JobManager, JobTrait, Validator, FromJobCommand, metrics::{self, prometheus}, }; use polkadot_primitives::v1::{AvailabilityBitfield, CoreState, Hash, ValidatorIndex}; -use std::{pin::Pin, time::Duration, iter::FromIterator}; +use std::{pin::Pin, time::Duration, iter::FromIterator, sync::Arc}; use wasm_timer::{Delay, Instant}; /// Delay between starting a bitfield signing job and its attempting to create a bitfield. @@ -215,9 +215,10 @@ impl JobTrait for BitfieldSigningJob { const NAME: &'static str = "BitfieldSigningJob"; /// Run a job for the parent block indicated - #[tracing::instrument(skip(keystore, metrics, _receiver, sender), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(skip(span, keystore, metrics, _receiver, sender), fields(subsystem = LOG_TARGET))] fn run( relay_parent: Hash, + span: Arc, keystore: Self::RunArgs, metrics: Self::Metrics, _receiver: mpsc::Receiver, @@ -225,7 +226,7 @@ impl JobTrait for BitfieldSigningJob { ) -> Pin> + Send>> { let metrics = metrics.clone(); async move { - let span = jaeger::hash_span(&relay_parent, "run:bitfield-signing"); + let span = PerLeafSpan::new(span, "bitfield-signing"); let _span = span.child("delay"); let wait_until = Instant::now() + JOB_DELAY; diff --git a/node/core/candidate-selection/src/lib.rs b/node/core/candidate-selection/src/lib.rs index de128722af..51eaa80a47 100644 --- a/node/core/candidate-selection/src/lib.rs +++ b/node/core/candidate-selection/src/lib.rs @@ -25,7 +25,7 @@ use futures::{ }; use sp_keystore::SyncCryptoStorePtr; use polkadot_node_subsystem::{ - jaeger, + jaeger, JaegerSpan, PerLeafSpan, errors::ChainApiError, messages::{ AllMessages, CandidateBackingMessage, CandidateSelectionMessage, CollatorProtocolMessage, @@ -39,7 +39,7 @@ use polkadot_node_subsystem_util::{ use polkadot_primitives::v1::{ CandidateReceipt, CollatorId, CoreState, CoreIndex, Hash, Id as ParaId, PoV, }; -use std::pin::Pin; +use std::{pin::Pin, sync::Arc}; use thiserror::Error; const LOG_TARGET: &'static str = "candidate_selection"; @@ -95,12 +95,13 @@ impl JobTrait for CandidateSelectionJob { #[tracing::instrument(skip(keystore, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] fn run( relay_parent: Hash, + span: Arc, keystore: Self::RunArgs, metrics: Self::Metrics, receiver: mpsc::Receiver, mut sender: mpsc::Sender, ) -> Pin> + Send>> { - let span = jaeger::hash_span(&relay_parent, "candidate-selection:run"); + let span = PerLeafSpan::new(span, "candidate-selection"); async move { let _span = span.child("query-runtime"); let (groups, cores) = futures::try_join!( diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index 7eb134fc2a..4cb3475fdd 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -25,8 +25,7 @@ use futures::{ prelude::*, }; use polkadot_node_subsystem::{ - errors::{ChainApiError, RuntimeApiError}, - jaeger, + errors::{ChainApiError, RuntimeApiError}, PerLeafSpan, JaegerSpan, messages::{ AllMessages, CandidateBackingMessage, ChainApiMessage, ProvisionableData, ProvisionerInherentData, ProvisionerMessage, @@ -40,7 +39,7 @@ use polkadot_primitives::v1::{ BackedCandidate, BlockNumber, CandidateReceipt, CoreState, Hash, OccupiedCoreAssumption, SignedAvailabilityBitfield, ValidatorIndex, }; -use std::{pin::Pin, collections::BTreeMap}; +use std::{pin::Pin, collections::BTreeMap, sync::Arc}; use thiserror::Error; use futures_timer::Delay; @@ -140,9 +139,10 @@ impl JobTrait for ProvisioningJob { /// Run a job for the parent block indicated // // this function is in charge of creating and executing the job's main loop - #[tracing::instrument(skip(_run_args, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(skip(span, _run_args, metrics, receiver, sender), fields(subsystem = LOG_TARGET))] fn run( relay_parent: Hash, + span: Arc, _run_args: Self::RunArgs, metrics: Self::Metrics, receiver: mpsc::Receiver, @@ -156,11 +156,7 @@ impl JobTrait for ProvisioningJob { receiver, ); - let span = jaeger::hash_span(&relay_parent, "provisioner"); - - // it isn't necessary to break run_loop into its own function, - // but it's convenient to separate the concerns in this way - job.run_loop(&span).await + job.run_loop(PerLeafSpan::new(span, "provisioner")).await } .boxed() } @@ -186,7 +182,7 @@ impl ProvisioningJob { } } - async fn run_loop(mut self, span: &jaeger::JaegerSpan) -> Result<(), Error> { + async fn run_loop(mut self, span: PerLeafSpan) -> Result<(), Error> { use ProvisionerMessage::{ ProvisionableData, RequestBlockAuthorshipData, RequestInherentData, }; diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml new file mode 100644 index 0000000000..df2528ac97 --- /dev/null +++ b/node/jaeger/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "polkadot-node-jaeger" +version = "0.1.0" +authors = ["Parity Technologies "] +edition = "2018" +description = "Polkadot Jaeger primitives" + +[dependencies] +async-std = "1.8.0" +mick-jaeger = "0.1.2" +lazy_static = "1.4" +parking_lot = "0.11.1" +polkadot-primitives = { path = "../../primitives" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } +thiserror = "1.0.23" +log = "0.4.11" diff --git a/node/subsystem/src/jaeger.rs b/node/jaeger/src/lib.rs similarity index 82% rename from node/subsystem/src/jaeger.rs rename to node/jaeger/src/lib.rs index 9e2bb577f2..c99b498ad0 100644 --- a/node/subsystem/src/jaeger.rs +++ b/node/jaeger/src/lib.rs @@ -14,7 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Jaeger integration. +//! Polkadot Jaeger related primitives +//! +//! Provides primitives used by Polkadot for interfacing with Jaeger. +//! +//! # Integration //! //! See for an introduction. //! @@ -39,15 +43,22 @@ //! -p 9411:9411 \ //! docker.io/jaegertracing/all-in-one:1.21 //! ``` -//! -use polkadot_node_primitives::SpawnNamed; +use sp_core::traits::SpawnNamed; use polkadot_primitives::v1::{Hash, PoV, CandidateHash}; use parking_lot::RwLock; -use std::sync::Arc; -use std::result; -pub use crate::errors::JaegerError; +use std::{sync::Arc, result}; +/// A description of an error causing the chain API request to be unservable. +#[derive(Debug, thiserror::Error)] +#[allow(missing_docs)] +pub enum JaegerError { + #[error("Already launched the collector thread")] + AlreadyLaunched, + + #[error("Missing jaeger configuration")] + MissingConfiguration, +} lazy_static::lazy_static! { static ref INSTANCE: RwLock = RwLock::new(Jaeger::None); @@ -102,6 +113,50 @@ impl JaegerConfigBuilder { } } +/// A special "per leaf span". +/// +/// Essentially this span wraps two spans: +/// +/// 1. The span that is created per leaf in the overseer. +/// 2. Some child span of the per-leaf span. +/// +/// This just works as auxiliary structure to easily store both. +#[derive(Debug)] +pub struct PerLeafSpan { + leaf_span: Arc, + span: JaegerSpan, +} + +impl PerLeafSpan { + /// Creates a new instance. + /// + /// Takes the `leaf_span` that is created by the overseer per leaf and a name for a child span. + /// Both will be stored in this object, while the child span is implicitly accessible by using the + /// [`Deref`](std::ops::Deref) implementation. + pub fn new(leaf_span: Arc, name: impl Into) -> Self { + let span = leaf_span.child(name); + + Self { + span, + leaf_span, + } + } + + /// Returns the leaf span. + pub fn leaf_span(&self) -> &Arc { + &self.leaf_span + } +} + +/// Returns a reference to the child span. +impl std::ops::Deref for PerLeafSpan { + type Target = JaegerSpan; + + fn deref(&self) -> &JaegerSpan { + &self.span + } +} + /// A wrapper type for a span. /// /// Handles running with and without jaeger. @@ -120,6 +175,7 @@ impl JaegerSpan { Self::Disabled => Self::Disabled, } } + /// Add an additional tag to the span. pub fn add_string_tag(&mut self, tag: &str, value: &str) { match self { diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index bf67965ca0..f07e48caab 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -32,7 +32,7 @@ use sp_keystore::{CryptoStore, SyncCryptoStorePtr}; use polkadot_erasure_coding::branch_hash; use polkadot_node_network_protocol::{ - v1 as protocol_v1, NetworkBridgeEvent, PeerId, ReputationChange as Rep, View, + v1 as protocol_v1, NetworkBridgeEvent, PeerId, ReputationChange as Rep, View, OurView, }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_primitives::v1::{ @@ -45,10 +45,8 @@ use polkadot_subsystem::messages::{ NetworkBridgeMessage, RuntimeApiMessage, RuntimeApiRequest, }; use polkadot_subsystem::{ - jaeger, - errors::{ChainApiError, RuntimeApiError}, - ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, - SubsystemContext, SubsystemError, + jaeger, errors::{ChainApiError, RuntimeApiError}, + ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemError, }; use std::collections::{HashMap, HashSet}; use std::collections::hash_map::Entry; @@ -128,7 +126,7 @@ struct ProtocolState { peer_views: HashMap, /// Our own view. - view: View, + view: OurView, /// Caches a mapping of relay parents or ancestor to live candidate hashes. /// Allows fast intersection of live candidates with views and consecutive unioning. @@ -278,8 +276,8 @@ impl ProtocolState { } } - // Removes all entries from live_under which aren't referenced in the ancestry of - // one of our live relay-chain heads. + /// Removes all entries from live_under which aren't referenced in the ancestry of + /// one of our live relay-chain heads. fn clean_up_live_under_cache(&mut self) { let extended_view: HashSet<_> = self.per_relay_parent.iter() .map(|(r_hash, v)| v.ancestors.iter().cloned().chain(iter::once(*r_hash))) @@ -353,7 +351,7 @@ async fn handle_our_view_change( ctx: &mut Context, keystore: &SyncCryptoStorePtr, state: &mut ProtocolState, - view: View, + view: OurView, metrics: &Metrics, ) -> Result<()> where @@ -845,11 +843,11 @@ where } } -// Metadata about a candidate that is part of the live_candidates set. -// -// Those which were not present in a cache are "fresh" and have their candidate descriptor attached. This -// information is propagated to the higher level where it can be used to create data entries. Cached candidates -// already have entries associated with them, and thus don't need this metadata to be fetched. +/// Metadata about a candidate that is part of the live_candidates set. +/// +/// Those which were not present in a cache are "fresh" and have their candidate descriptor attached. This +/// information is propagated to the higher level where it can be used to create data entries. Cached candidates +/// already have entries associated with them, and thus don't need this metadata to be fetched. #[derive(Debug)] enum FetchedLiveCandidate { Cached, diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index 2479c8ec6c..76a8566246 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -17,7 +17,7 @@ use super::*; use assert_matches::assert_matches; use polkadot_erasure_coding::{branches, obtain_chunks_v1 as obtain_chunks}; -use polkadot_node_network_protocol::{view, ObservedRole}; +use polkadot_node_network_protocol::{view, ObservedRole, our_view}; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_primitives::v1::{ AvailableData, BlockData, CandidateCommitments, CandidateDescriptor, GroupIndex, @@ -398,7 +398,7 @@ async fn expect_chunks_network_message( async fn change_our_view( virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, - view: View, + view: OurView, validator_public: &[ValidatorId], ancestors: Vec, session_per_relay_parent: HashMap, @@ -574,7 +574,7 @@ fn check_views() { let genesis = Hash::repeat_byte(0xAA); change_our_view( &mut virtual_overseer, - view![current], + our_view![current], &validator_public, vec![ancestors[0], genesis], hashmap! { current => 1, genesis => 1 }, @@ -641,7 +641,7 @@ fn check_views() { peer_b_2 => view![ancestors[0]], }, ); - assert_eq!(view, view![current]); + assert_eq!(view, our_view![current]); } }; } @@ -676,7 +676,7 @@ fn reputation_verification() { change_our_view( &mut virtual_overseer, - view![current], + our_view![current], &validator_public, vec![ancestors[0]], hashmap! { current => 1 }, @@ -768,7 +768,7 @@ fn not_a_live_candidate_is_detected() { change_our_view( &mut virtual_overseer, - view![current], + our_view![current], &validator_public, vec![ancestors[0]], hashmap! { current => 1 }, @@ -816,7 +816,7 @@ fn peer_change_view_before_us() { change_our_view( &mut virtual_overseer, - view![current], + our_view![current], &validator_public, vec![ancestors[0]], hashmap! { current => 1 }, @@ -863,7 +863,7 @@ fn candidate_chunks_are_put_into_message_vault_when_candidate_is_first_seen() { change_our_view( &mut virtual_overseer, - view![ancestors[0]], + our_view![ancestors[0]], &validator_public, vec![ancestors[1]], hashmap! { ancestors[0] => 1 }, @@ -879,7 +879,7 @@ fn candidate_chunks_are_put_into_message_vault_when_candidate_is_first_seen() { change_our_view( &mut virtual_overseer, - view![current], + our_view![current], &validator_public, vec![ancestors[0]], hashmap! { current => 1 }, @@ -1218,7 +1218,7 @@ fn new_peer_gets_all_chunks_send() { change_our_view( &mut virtual_overseer, - view![current], + our_view![current], &validator_public, vec![ancestors[0]], hashmap! { current => 1 }, diff --git a/node/network/bitfield-distribution/src/lib.rs b/node/network/bitfield-distribution/src/lib.rs index 39cacf1041..a771baf3ec 100644 --- a/node/network/bitfield-distribution/src/lib.rs +++ b/node/network/bitfield-distribution/src/lib.rs @@ -27,12 +27,12 @@ use futures::{channel::oneshot, FutureExt}; use polkadot_subsystem::messages::*; use polkadot_subsystem::{ - jaeger, - ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemResult, + PerLeafSpan, ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, + SubsystemResult, }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_primitives::v1::{Hash, SignedAvailabilityBitfield, SigningContext, ValidatorId}; -use polkadot_node_network_protocol::{v1 as protocol_v1, PeerId, NetworkBridgeEvent, View, ReputationChange}; +use polkadot_node_network_protocol::{v1 as protocol_v1, PeerId, NetworkBridgeEvent, View, ReputationChange, OurView}; use std::collections::{HashMap, HashSet}; const COST_SIGNATURE_INVALID: ReputationChange = @@ -79,21 +79,21 @@ impl BitfieldGossipMessage { /// Data used to track information of peers and relay parents the /// overseer ordered us to work on. -#[derive(Default, Clone, Debug)] +#[derive(Default, Debug)] struct ProtocolState { /// track all active peers and their views /// to determine what is relevant to them. peer_views: HashMap, /// Our current view. - view: View, + view: OurView, /// Additional data particular to a relay parent. per_relay_parent: HashMap, } /// Data for a particular relay parent. -#[derive(Debug, Clone, Default)] +#[derive(Debug)] struct PerRelayParentData { /// Signing context for a particular relay parent. signing_context: SigningContext, @@ -113,9 +113,24 @@ struct PerRelayParentData { /// Track messages that were already received by a peer /// to prevent flooding. message_received_from_peer: HashMap>, + + /// The span for this leaf/relay parent. + span: PerLeafSpan, } impl PerRelayParentData { + /// Create a new instance. + fn new(signing_context: SigningContext, validator_set: Vec, span: PerLeafSpan) -> Self { + Self { + signing_context, + validator_set, + span, + one_per_validator: Default::default(), + message_sent_to_peer: Default::default(), + message_received_from_peer: Default::default(), + } + } + /// Determines if that particular message signed by a validator is needed by the given peer. fn message_from_validator_needed_by_peer( &self, @@ -176,12 +191,13 @@ impl BitfieldDistribution { // a network message was received handle_network_msg(&mut ctx, &mut state, &self.metrics, event).await; } - FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated })) => { + FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, .. })) => { let _timer = self.metrics.time_active_leaves_update(); - for relay_parent in activated { + for (relay_parent, span) in activated { tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "activated"); - let _span = jaeger::hash_span(&relay_parent, "bitfield-dist:active_leaves:basics"); + let span = PerLeafSpan::new(span, "bitfield-distribution"); + let _span = span.child("query-basics"); // query validator set and signing context per relay_parent once only match query_basics(&mut ctx, relay_parent).await { @@ -193,11 +209,7 @@ impl BitfieldDistribution { // us anything to do with this relay-parent anyway. let _ = state.per_relay_parent.insert( relay_parent, - PerRelayParentData { - signing_context, - validator_set, - ..Default::default() - }, + PerRelayParentData::new(signing_context, validator_set, span), ); } Err(e) => { @@ -206,11 +218,6 @@ impl BitfieldDistribution { _ => {}, } } - - for relay_parent in deactivated { - tracing::trace!(target: LOG_TARGET, relay_parent = %relay_parent, "deactivated"); - // defer the cleanup to the view change - } } FromOverseer::Signal(OverseerSignal::BlockFinalized(hash, number)) => { tracing::trace!(target: LOG_TARGET, hash = %hash, number = %number, "block finalized"); @@ -310,7 +317,7 @@ async fn relay_message( where Context: SubsystemContext, { - let span = jaeger::hash_span(&message.relay_parent, "relay-msg"); + let span = job_data.span.child("relay-msg"); let _span = span.child("provisionable"); // notify the overseer about a new and valid signed bitfield @@ -398,6 +405,16 @@ where return; }; + let mut _span = { + let mut span = job_data.span.child("msg-received"); + span.add_string_tag("peer-id", &origin.to_base58()); + span.add_string_tag( + "claimed-validator", + &message.signed_availability.validator_index().to_string(), + ); + span + }; + let validator_set = &job_data.validator_set; if validator_set.is_empty() { tracing::trace!( @@ -495,16 +512,6 @@ where NetworkBridgeEvent::PeerMessage(remote, message) => { match message { protocol_v1::BitfieldDistributionMessage::Bitfield(relay_parent, bitfield) => { - let mut _span = { - let mut span = jaeger::hash_span(&relay_parent, "bitfield-gossip-received"); - span.add_string_tag("peer-id", &remote.to_base58()); - span.add_string_tag( - "claimed-validator", - &format!("{}", bitfield.validator_index()), - ); - span - }; - tracing::trace!(target: LOG_TARGET, peer_id = %remote, "received bitfield gossip from peer"); let gossiped_bitfield = BitfieldGossipMessage { relay_parent, @@ -519,7 +526,7 @@ where /// Handle the changes necassary when our view changes. #[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] -fn handle_our_view_change(state: &mut ProtocolState, view: View) { +fn handle_our_view_change(state: &mut ProtocolState, view: OurView) { let old_view = std::mem::replace(&mut (state.view), view); for added in state.view.difference(&old_view) { @@ -603,7 +610,7 @@ where return; }; - let _span = jaeger::hash_span(&message.relay_parent, "gossip"); + let _span = job_data.span.child("gossip"); job_data.message_sent_to_peer .entry(dest.clone()) @@ -778,7 +785,8 @@ mod test { use std::sync::Arc; use std::time::Duration; use assert_matches::assert_matches; - use polkadot_node_network_protocol::{view, ObservedRole}; + use polkadot_node_network_protocol::{view, ObservedRole, our_view}; + use polkadot_subsystem::JaegerSpan; macro_rules! launch { ($fut:expr) => { @@ -810,18 +818,19 @@ mod test { }, message_received_from_peer: hashmap!{}, message_sent_to_peer: hashmap!{}, + span: PerLeafSpan::new(Arc::new(JaegerSpan::Disabled), "test"), }, }, peer_views: peers .into_iter() .map(|peer| (peer, view!(relay_parent))) .collect(), - view: view!(relay_parent), + view: our_view!(relay_parent), } } fn state_with_view( - view: View, + view: OurView, relay_parent: Hash, ) -> (ProtocolState, SigningContext, SyncCryptoStorePtr, ValidatorId) { let mut state = ProtocolState::default(); @@ -843,6 +852,7 @@ mod test { one_per_validator: hashmap!{}, message_received_from_peer: hashmap!{}, message_sent_to_peer: hashmap!{}, + span: PerLeafSpan::new(Arc::new(JaegerSpan::Disabled), "test"), }) }).collect(); @@ -937,7 +947,7 @@ mod test { assert_ne!(peer_a, peer_b); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = state_with_view(view![hash_a, hash_b], hash_a.clone()); + let (mut state, signing_context, keystore, validator) = state_with_view(our_view![hash_a, hash_b], hash_a.clone()); state.peer_views.insert(peer_b.clone(), view![hash_a]); @@ -995,7 +1005,7 @@ mod test { assert_ne!(peer_a, peer_b); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = state_with_view(view![hash_a, hash_b], hash_a.clone()); + let (mut state, signing_context, keystore, validator) = state_with_view(our_view![hash_a, hash_b], hash_a.clone()); // create a signed message by validator 0 let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); @@ -1110,7 +1120,7 @@ mod test { assert_ne!(peer_a, peer_b); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = state_with_view(view![hash], hash.clone()); + let (mut state, signing_context, keystore, validator) = state_with_view(our_view![hash], hash.clone()); // create a signed message by validator 0 let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); @@ -1206,7 +1216,7 @@ mod test { assert_ne!(peer_a, peer_b); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = state_with_view(view![hash_a, hash_b], hash_a.clone()); + let (mut state, signing_context, keystore, validator) = state_with_view(our_view![hash_a, hash_b], hash_a.clone()); // create a signed message by validator 0 let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); @@ -1323,7 +1333,7 @@ mod test { )); // we are not interested in any peers at all anymore - state.view = view![]; + state.view = our_view![]; // on rx of the same message, since we are not interested, // should give penalty @@ -1365,7 +1375,7 @@ mod test { assert_ne!(peer_a, peer_b); // validator 0 key pair - let (mut state, signing_context, keystore, validator) = state_with_view(view![hash], hash); + let (mut state, signing_context, keystore, validator) = state_with_view(our_view![hash], hash); // create a signed message by validator 0 let payload = AvailabilityBitfield(bitvec![bitvec::order::Lsb0, u8; 1u8; 32]); diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index e294b3dc43..c84d14d9fc 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -30,7 +30,7 @@ use sc_network::Event as NetworkEvent; use polkadot_subsystem::{ ActiveLeavesUpdate, FromOverseer, OverseerSignal, Subsystem, SubsystemContext, SpawnedSubsystem, SubsystemError, - SubsystemResult, + SubsystemResult, JaegerSpan, }; use polkadot_subsystem::messages::{ NetworkBridgeMessage, AllMessages, AvailabilityDistributionMessage, @@ -39,7 +39,7 @@ use polkadot_subsystem::messages::{ }; use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash, BlockNumber}; use polkadot_node_network_protocol::{ - ObservedRole, ReputationChange, PeerId, PeerSet, View, NetworkBridgeEvent, v1 as protocol_v1 + ObservedRole, ReputationChange, PeerId, PeerSet, View, NetworkBridgeEvent, v1 as protocol_v1, OurView, }; use std::collections::{HashMap, hash_map}; @@ -47,7 +47,6 @@ use std::iter::ExactSizeIterator; use std::pin::Pin; use std::sync::Arc; - mod validator_discovery; /// The maximum amount of heads a peer is allowed to have in their view at any time. @@ -349,9 +348,9 @@ fn action_from_network_message(event: Option) -> Action { } } -fn construct_view(live_heads: &[Hash], finalized_number: BlockNumber) -> View { +fn construct_view(live_heads: impl DoubleEndedIterator, finalized_number: BlockNumber) -> View { View { - heads: live_heads.iter().rev().take(MAX_VIEW_HEADS).cloned().collect(), + heads: live_heads.rev().take(MAX_VIEW_HEADS).collect(), finalized_number } } @@ -360,13 +359,13 @@ fn construct_view(live_heads: &[Hash], finalized_number: BlockNumber) -> View { async fn update_our_view( net: &mut impl Network, ctx: &mut impl SubsystemContext, - live_heads: &[Hash], + live_heads: &[(Hash, Arc)], local_view: &mut View, finalized_number: BlockNumber, validation_peers: &HashMap, collation_peers: &HashMap, ) -> SubsystemResult<()> { - let new_view = construct_view(live_heads, finalized_number); + let new_view = construct_view(live_heads.iter().map(|v| v.0), finalized_number); if *local_view == new_view { return Ok(()) } *local_view = new_view.clone(); @@ -380,18 +379,14 @@ async fn update_our_view( send_collation_message( net, collation_peers.keys().cloned(), - WireMessage::ViewUpdate(new_view.clone()), + WireMessage::ViewUpdate(new_view), ).await?; - dispatch_validation_event_to_all( - NetworkBridgeEvent::OurViewChange(new_view.clone()), - ctx, - ).await; + let our_view = OurView::new(live_heads.iter().cloned(), finalized_number); + + dispatch_validation_event_to_all(NetworkBridgeEvent::OurViewChange(our_view.clone()), ctx).await; - dispatch_collation_event_to_all( - NetworkBridgeEvent::OurViewChange(new_view.clone()), - ctx, - ).await; + dispatch_collation_event_to_all(NetworkBridgeEvent::OurViewChange(our_view), ctx).await; Ok(()) } @@ -584,7 +579,7 @@ where let mut event_stream = network_service.event_stream().fuse(); // Most recent heads are at the back. - let mut live_heads: Vec = Vec::with_capacity(MAX_VIEW_HEADS); + let mut live_heads: Vec<(Hash, Arc)> = Vec::with_capacity(MAX_VIEW_HEADS); let mut local_view = View::default(); let mut finalized_number = 0; @@ -642,7 +637,7 @@ where Action::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated }) => { live_heads.extend(activated); - live_heads.retain(|h| !deactivated.contains(h)); + live_heads.retain(|h| !deactivated.contains(&h.0)); update_our_view( &mut network_service, @@ -999,7 +994,9 @@ mod tests { let hash_a = Hash::repeat_byte(1); virtual_overseer.send( - FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(hash_a))) + FromOverseer::Signal(OverseerSignal::ActiveLeaves( + ActiveLeavesUpdate::start_work(hash_a, Arc::new(JaegerSpan::Disabled)), + )) ).await; let actions = network_handle.next_network_actions(2).await; @@ -1187,7 +1184,9 @@ mod tests { let hash_a = Hash::repeat_byte(1); virtual_overseer.send( - FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(hash_a))) + FromOverseer::Signal(OverseerSignal::ActiveLeaves( + ActiveLeavesUpdate::start_work(hash_a, Arc::new(JaegerSpan::Disabled)), + )) ).await; let actions = network_handle.next_network_actions(1).await; @@ -1378,7 +1377,9 @@ mod tests { FromOverseer::Signal(OverseerSignal::BlockFinalized(hash_a, 1)) ).await; virtual_overseer.send( - FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(hash_b))) + FromOverseer::Signal(OverseerSignal::ActiveLeaves( + ActiveLeavesUpdate::start_work(hash_b, Arc::new(JaegerSpan::Disabled)), + )) ).await; let actions = network_handle.next_network_actions(1).await; diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 6160c778f2..618d77cba7 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -20,7 +20,6 @@ polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsys log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" -smallvec = "1.5.1" futures-timer = "3.0.2" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } diff --git a/node/network/collator-protocol/src/collator_side.rs b/node/network/collator-protocol/src/collator_side.rs index ca6b1bfae0..ef061062ae 100644 --- a/node/network/collator-protocol/src/collator_side.rs +++ b/node/network/collator-protocol/src/collator_side.rs @@ -24,16 +24,11 @@ use polkadot_primitives::v1::{ CollatorId, CoreIndex, CoreState, Hash, Id as ParaId, CandidateReceipt, PoV, ValidatorId, }; use polkadot_subsystem::{ - jaeger, + jaeger, PerLeafSpan, FromOverseer, OverseerSignal, SubsystemContext, - messages::{ - AllMessages, CollatorProtocolMessage, - NetworkBridgeMessage, - }, -}; -use polkadot_node_network_protocol::{ - v1 as protocol_v1, View, PeerId, NetworkBridgeEvent, RequestId, + messages::{AllMessages, CollatorProtocolMessage, NetworkBridgeMessage}, }; +use polkadot_node_network_protocol::{v1 as protocol_v1, View, PeerId, NetworkBridgeEvent, RequestId, OurView}; use polkadot_node_subsystem_util::{ validator_discovery, request_validators_ctx, @@ -188,7 +183,10 @@ struct State { peer_views: HashMap, /// Our own view. - view: View, + view: OurView, + + /// Span per relay parent. + span_per_relay_parent: HashMap, /// Possessed collations. /// @@ -431,7 +429,8 @@ async fn process_msg( state.collating_on = Some(id); } DistributeCollation(receipt, pov) => { - let _span1 = jaeger::hash_span(&receipt.descriptor.relay_parent, "distributing-collation"); + let _span1 = state.span_per_relay_parent + .get(&receipt.descriptor.relay_parent).map(|s| s.child("distributing-collation")); let _span2 = jaeger::pov_span(&pov, "distributing-collation"); match state.collating_on { Some(id) if receipt.descriptor.para_id != id => { @@ -542,12 +541,12 @@ async fn handle_incoming_peer_message( ); } RequestCollation(request_id, relay_parent, para_id) => { - let _span = jaeger::hash_span(&relay_parent, "rx-collation-request"); + let _span = state.span_per_relay_parent.get(&relay_parent).map(|s| s.child("request-collation")); match state.collating_on { Some(our_para_id) => { if our_para_id == para_id { if let Some(collation) = state.collations.get(&relay_parent).cloned() { - let _span = _span.child("sending"); + let _span = _span.as_ref().map(|s| s.child("sending")); send_collation(ctx, state, request_id, origin, collation.0, collation.1).await; } } else { @@ -665,12 +664,13 @@ async fn handle_network_msg( #[tracing::instrument(level = "trace", skip(state), fields(subsystem = LOG_TARGET))] async fn handle_our_view_change( state: &mut State, - view: View, + view: OurView, ) -> Result<()> { for removed in state.view.difference(&view) { state.collations.remove(removed); state.our_validators_groups.remove(removed); state.connection_requests.remove(removed); + state.span_per_relay_parent.remove(removed); } state.view = view; @@ -725,11 +725,10 @@ pub(crate) async fn run( mod tests { use super::*; - use std::time::Duration; + use std::{time::Duration, sync::Arc}; use assert_matches::assert_matches; use futures::{executor, future, Future, channel::mpsc}; - use smallvec::smallvec; use sp_core::crypto::Pair; use sp_keyring::Sr25519Keyring; @@ -739,10 +738,10 @@ mod tests { ValidatorIndex, GroupRotationInfo, AuthorityDiscoveryId, SessionIndex, SessionInfo, }; - use polkadot_subsystem::{ActiveLeavesUpdate, messages::{RuntimeApiMessage, RuntimeApiRequest}}; + use polkadot_subsystem::{ActiveLeavesUpdate, messages::{RuntimeApiMessage, RuntimeApiRequest}, JaegerSpan}; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_subsystem_testhelpers as test_helpers; - use polkadot_node_network_protocol::view; + use polkadot_node_network_protocol::{view, our_view}; #[derive(Default)] struct TestCandidateBuilder { @@ -888,17 +887,15 @@ mod tests { self.relay_parent.randomize(); } - let hashes = if merge_views { - vec![old_relay_parent, self.relay_parent] + let our_view = if merge_views { + our_view![old_relay_parent, self.relay_parent] } else { - vec![self.relay_parent] + our_view![self.relay_parent] }; overseer_send( virtual_overseer, - CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(View { heads: hashes, finalized_number: 0 }), - ), + CollatorProtocolMessage::NetworkBridgeUpdateV1(NetworkBridgeEvent::OurViewChange(our_view)), ).await; } } @@ -997,15 +994,15 @@ mod tests { overseer_signal( virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![test_state.relay_parent], - deactivated: smallvec![], + activated: [(test_state.relay_parent, Arc::new(JaegerSpan::Disabled))][..].into(), + deactivated: [][..].into(), }), ).await; overseer_send( virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]), + NetworkBridgeEvent::OurViewChange(our_view![test_state.relay_parent]), ), ).await; } diff --git a/node/network/collator-protocol/src/validator_side.rs b/node/network/collator-protocol/src/validator_side.rs index 562bb9ab60..561dda7d74 100644 --- a/node/network/collator-protocol/src/validator_side.rs +++ b/node/network/collator-protocol/src/validator_side.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use std::collections::{HashMap, HashSet}; -use std::time::Duration; -use std::task::Poll; +use std::{collections::{HashMap, HashSet}, time::Duration, task::Poll, sync::Arc}; use futures::{ StreamExt, @@ -30,20 +28,16 @@ use polkadot_primitives::v1::{ Id as ParaId, CandidateReceipt, CollatorId, Hash, PoV, }; use polkadot_subsystem::{ - jaeger, + jaeger, PerLeafSpan, JaegerSpan, FromOverseer, OverseerSignal, SubsystemContext, messages::{ AllMessages, CandidateSelectionMessage, CollatorProtocolMessage, NetworkBridgeMessage, }, }; use polkadot_node_network_protocol::{ - v1 as protocol_v1, View, PeerId, ReputationChange as Rep, RequestId, - NetworkBridgeEvent, -}; -use polkadot_node_subsystem_util::{ - TimeoutExt as _, - metrics::{self, prometheus}, + v1 as protocol_v1, View, OurView, PeerId, ReputationChange as Rep, RequestId, NetworkBridgeEvent, }; +use polkadot_node_subsystem_util::{TimeoutExt as _, metrics::{self, prometheus}}; use super::{modify_reputation, LOG_TARGET, Result}; @@ -172,7 +166,7 @@ struct PerRequest { #[derive(Default)] struct State { /// Our own view. - view: View, + view: OurView, /// Track all active collators and their views. peer_views: HashMap, @@ -215,6 +209,9 @@ struct State { /// Metrics. metrics: Metrics, + + /// Span per relay parent. + span_per_relay_parent: HashMap, } /// Another subsystem has requested to fetch collations on a particular leaf for some para. @@ -505,7 +502,7 @@ where state.peer_views.entry(origin).or_default(); } AdvertiseCollation(relay_parent, para_id) => { - let _span = jaeger::hash_span(&relay_parent, "advertising-collation"); + let _span = state.span_per_relay_parent.get(&relay_parent).map(|s| s.child("advertise-collation")); state.advertisements.entry(origin.clone()).or_default().insert((para_id, relay_parent)); if let Some(collator) = state.known_collators.get(&origin) { @@ -517,7 +514,8 @@ where modify_reputation(ctx, origin, COST_UNEXPECTED_MESSAGE).await; } Collation(request_id, receipt, pov) => { - let _span1 = jaeger::hash_span(&receipt.descriptor.relay_parent, "received-collation"); + let _span1 = state.span_per_relay_parent.get(&receipt.descriptor.relay_parent) + .map(|s| s.child("received-collation")); let _span2 = jaeger::pov_span(&pov, "received-collation"); received_collation(ctx, state, origin, request_id, receipt, pov).await; } @@ -556,9 +554,19 @@ async fn remove_relay_parent( #[tracing::instrument(level = "trace", skip(state), fields(subsystem = LOG_TARGET))] async fn handle_our_view_change( state: &mut State, - view: View, + view: OurView, ) -> Result<()> { - let old_view = std::mem::replace(&mut (state.view), view); + let old_view = std::mem::replace(&mut state.view, view); + + let added: HashMap> = state.view + .span_per_head() + .iter() + .filter(|v| !old_view.contains(&v.0)) + .map(|v| (v.0.clone(), v.1.clone())) + .collect(); + added.into_iter().for_each(|(h, s)| { + state.span_per_relay_parent.insert(h, PerLeafSpan::new(s, "validator-side")); + }); let removed = old_view .difference(&state.view) @@ -571,6 +579,7 @@ async fn handle_our_view_change( for removed in removed.into_iter() { state.recently_removed_heads.insert(removed.clone()); remove_relay_parent(state, removed).await?; + state.span_per_relay_parent.remove(&removed); } Ok(()) @@ -663,7 +672,7 @@ where ); } FetchCollation(relay_parent, collator_id, para_id, tx) => { - let _span = jaeger::hash_span(&relay_parent, "fetching-collation"); + let _span = state.span_per_relay_parent.get(&relay_parent).map(|s| s.child("fetch-collation")); fetch_collation(ctx, state, relay_parent, collator_id, para_id, tx).await; } ReportCollator(id) => { @@ -760,7 +769,7 @@ mod tests { use polkadot_primitives::v1::{BlockData, CollatorPair}; use polkadot_subsystem_testhelpers as test_helpers; - use polkadot_node_network_protocol::view; + use polkadot_node_network_protocol::our_view; #[derive(Clone)] struct TestState { @@ -873,7 +882,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) + NetworkBridgeEvent::OurViewChange(our_view![test_state.relay_parent]) ) ).await; @@ -931,7 +940,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) + NetworkBridgeEvent::OurViewChange(our_view![test_state.relay_parent]) ) ).await; @@ -1022,7 +1031,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![Hash::repeat_byte(0x42)]) + NetworkBridgeEvent::OurViewChange(our_view![Hash::repeat_byte(0x42)]) ) ).await; @@ -1050,7 +1059,7 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) + NetworkBridgeEvent::OurViewChange(our_view![test_state.relay_parent]) ) ).await; @@ -1134,8 +1143,8 @@ mod tests { overseer_send( &mut virtual_overseer, CollatorProtocolMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![test_state.relay_parent]) - ) + NetworkBridgeEvent::OurViewChange(our_view![test_state.relay_parent]) + ), ).await; let peer_b = PeerId::random(); diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index 3e3230ab85..a78eb21beb 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -19,7 +19,6 @@ polkadot-node-network-protocol = { path = "../../network/protocol" } assert_matches = "1.4.0" env_logger = "0.8.1" log = "0.4.11" -smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/pov-distribution/src/lib.rs b/node/network/pov-distribution/src/lib.rs index 6c882c8c00..5ee1f14063 100644 --- a/node/network/pov-distribution/src/lib.rs +++ b/node/network/pov-distribution/src/lib.rs @@ -40,7 +40,7 @@ use polkadot_node_subsystem_util::{ metrics::{self, prometheus}, }; use polkadot_node_network_protocol::{ - v1 as protocol_v1, ReputationChange as Rep, NetworkBridgeEvent, PeerId, View, + v1 as protocol_v1, ReputationChange as Rep, NetworkBridgeEvent, PeerId, OurView, }; use futures::prelude::*; @@ -96,7 +96,7 @@ struct State { peer_state: HashMap, /// Our own view. - our_view: View, + our_view: OurView, /// Connect to relevant groups of validators at different relay parents. connection_requests: validator_discovery::ConnectionRequests, @@ -152,8 +152,8 @@ async fn handle_signal( OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated }) => { let _timer = state.metrics.time_handle_signal(); - for relay_parent in activated { - match request_validators_ctx(relay_parent.clone(), ctx).await { + for (relay_parent, _span) in activated { + match request_validators_ctx(relay_parent, ctx).await { Ok(vals_rx) => { let n_validators = match vals_rx.await? { Ok(v) => v.len(), diff --git a/node/network/pov-distribution/src/tests.rs b/node/network/pov-distribution/src/tests.rs index f0fec49654..285f479e76 100644 --- a/node/network/pov-distribution/src/tests.rs +++ b/node/network/pov-distribution/src/tests.rs @@ -1,11 +1,26 @@ +// Copyright 2020-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + use super::*; -use std::time::Duration; +use std::{time::Duration, sync::Arc}; use assert_matches::assert_matches; use futures::executor; use tracing::trace; -use smallvec::smallvec; use sp_keyring::Sr25519Keyring; @@ -13,10 +28,10 @@ use polkadot_primitives::v1::{ AuthorityDiscoveryId, BlockData, CoreState, GroupRotationInfo, Id as ParaId, ScheduledCore, ValidatorIndex, SessionIndex, SessionInfo, }; -use polkadot_subsystem::messages::{RuntimeApiMessage, RuntimeApiRequest}; +use polkadot_subsystem::{messages::{RuntimeApiMessage, RuntimeApiRequest}, JaegerSpan}; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt; -use polkadot_node_network_protocol::view; +use polkadot_node_network_protocol::{view, our_view}; fn make_pov(data: Vec) -> PoV { PoV { block_data: BlockData(data) } @@ -261,8 +276,8 @@ fn ask_validators_for_povs() { overseer_signal( &mut virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![test_state.relay_parent.clone()], - deactivated: smallvec![], + activated: [(test_state.relay_parent, Arc::new(JaegerSpan::Disabled))][..].into(), + deactivated: [][..].into(), }), ).await; @@ -429,8 +444,8 @@ fn ask_validators_for_povs() { overseer_signal( &mut virtual_overseer, OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: smallvec![next_leaf.clone()], - deactivated: smallvec![current.clone()], + activated: [(next_leaf, Arc::new(JaegerSpan::Disabled))][..].into(), + deactivated: [current.clone()][..].into(), }) ).await; @@ -583,7 +598,7 @@ fn distributes_to_those_awaiting_and_completes_local() { s }, - our_view: view![hash_a, hash_b], + our_view: our_view![hash_a, hash_b], metrics: Default::default(), connection_requests: Default::default(), }; @@ -666,7 +681,7 @@ fn we_inform_peers_with_same_view_we_are_awaiting() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -840,7 +855,7 @@ fn peer_view_change_leads_to_us_informing() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -913,7 +928,7 @@ fn peer_complete_fetch_and_is_rewarded() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1003,7 +1018,7 @@ fn peer_punished_for_sending_bad_pov() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1068,7 +1083,7 @@ fn peer_punished_for_sending_unexpected_pov() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1131,7 +1146,7 @@ fn peer_punished_for_sending_pov_out_of_our_view() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1191,7 +1206,7 @@ fn peer_reported_for_awaiting_too_much() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1278,7 +1293,7 @@ fn peer_reported_for_awaiting_outside_their_view() { s }, - our_view: view![hash_a, hash_b], + our_view: our_view![hash_a, hash_b], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1342,7 +1357,7 @@ fn peer_reported_for_awaiting_outside_our_view() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1421,7 +1436,7 @@ fn peer_complete_fetch_leads_to_us_completing_others() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; @@ -1505,7 +1520,7 @@ fn peer_completing_request_no_longer_awaiting() { s }, - our_view: view![hash_a], + our_view: our_view![hash_a], metrics: Default::default(), connection_requests: Default::default(), }; diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index 273727d5b7..5829ccdf82 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -8,5 +8,6 @@ description = "Primitives types for the Node-side" [dependencies] polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } +polkadot-node-jaeger = { path = "../../jaeger" } parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/protocol/src/lib.rs b/node/network/protocol/src/lib.rs index fe40e06be2..35dc3b3a17 100644 --- a/node/network/protocol/src/lib.rs +++ b/node/network/protocol/src/lib.rs @@ -21,10 +21,13 @@ use polkadot_primitives::v1::{Hash, BlockNumber}; use parity_scale_codec::{Encode, Decode}; -use std::convert::TryFrom; -use std::fmt; +use std::{convert::TryFrom, fmt, collections::HashMap}; pub use sc_network::{ReputationChange, PeerId}; +#[doc(hidden)] +pub use polkadot_node_jaeger::JaegerSpan; +#[doc(hidden)] +pub use std::sync::Arc; /// A unique identifier of a request. pub type RequestId = u64; @@ -44,7 +47,6 @@ impl fmt::Display for WrongVariant { impl std::error::Error for WrongVariant {} - /// The peer-sets that the network manages. Different subsystems will use different peer-sets. #[derive(Debug, Clone, Copy, PartialEq)] pub enum PeerSet { @@ -103,8 +105,8 @@ pub enum NetworkBridgeEvent { /// Peer's `View` has changed. PeerViewChange(PeerId, View), - /// Our `View` has changed. - OurViewChange(View), + /// Our view has changed. + OurViewChange(OurView), } macro_rules! impl_try_from { @@ -159,6 +161,72 @@ impl NetworkBridgeEvent { } } +/// Specialized wrapper around [`View`]. +/// +/// Besides the access to the view itself, it also gives access to the [`JaegerSpan`] per leave/head. +#[derive(Debug, Clone, Default)] +pub struct OurView { + view: View, + span_per_head: HashMap>, +} + +impl OurView { + /// Creates a new instance. + pub fn new(heads: impl IntoIterator)>, finalized_number: BlockNumber) -> Self { + let state_per_head = heads.into_iter().collect::>(); + + Self { + view: View { + heads: state_per_head.keys().cloned().collect(), + finalized_number, + }, + span_per_head: state_per_head, + } + } + + /// Returns the span per head map. + /// + /// For each head there exists one span in this map. + pub fn span_per_head(&self) -> &HashMap> { + &self.span_per_head + } +} + +impl PartialEq for OurView { + fn eq(&self, other: &Self) -> bool { + self.view == other.view + } +} + +impl std::ops::Deref for OurView { + type Target = View; + + fn deref(&self) -> &View { + &self.view + } +} + +/// Construct a new [`OurView`] with the given chain heads, finalized number 0 and disabled [`JaegerSpan`]'s. +/// +/// NOTE: Use for tests only. +/// +/// # Example +/// +/// ``` +/// # use polkadot_node_network_protocol::our_view; +/// # use polkadot_primitives::v1::Hash; +/// let our_view = our_view![Hash::repeat_byte(1), Hash::repeat_byte(2)]; +/// ``` +#[macro_export] +macro_rules! our_view { + ( $( $hash:expr ),* $(,)? ) => { + $crate::OurView::new( + vec![ $( $hash.clone() ),* ].into_iter().map(|h| (h, $crate::Arc::new($crate::JaegerSpan::Disabled))), + 0, + ) + }; +} + /// A succinct representation of a peer's view. This consists of a bounded amount of chain heads /// and the highest known finalized block number. /// @@ -171,18 +239,21 @@ pub struct View { pub finalized_number: BlockNumber, } - /// Construct a new view with the given chain heads and finalized number 0. +/// /// NOTE: Use for tests only. +/// /// # Example /// -/// ```ignore -/// view![Hash::repeat_byte(1), Hash::repeat_byte(2)] +/// ``` +/// # use polkadot_node_network_protocol::view; +/// # use polkadot_primitives::v1::Hash; +/// let view = view![Hash::repeat_byte(1), Hash::repeat_byte(2)]; /// ``` #[macro_export] macro_rules! view { ( $( $hash:expr ),* $(,)? ) => { - View { heads: vec![ $( $hash.clone() ),* ], finalized_number: 0 } + $crate::View { heads: vec![ $( $hash.clone() ),* ], finalized_number: 0 } }; } diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index 6fee53975c..05ff1753f2 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -23,9 +23,8 @@ #![warn(missing_docs)] use polkadot_subsystem::{ - jaeger, Subsystem, SubsystemResult, SubsystemContext, SpawnedSubsystem, - ActiveLeavesUpdate, FromOverseer, OverseerSignal, + ActiveLeavesUpdate, FromOverseer, OverseerSignal, PerLeafSpan, messages::{ AllMessages, NetworkBridgeMessage, StatementDistributionMessage, CandidateBackingMessage, RuntimeApiMessage, RuntimeApiRequest, @@ -37,7 +36,7 @@ use polkadot_primitives::v1::{ Hash, CompactStatement, ValidatorIndex, ValidatorId, SigningContext, ValidatorSignature, CandidateHash, }; use polkadot_node_network_protocol::{ - v1 as protocol_v1, View, PeerId, ReputationChange as Rep, NetworkBridgeEvent, + v1 as protocol_v1, View, PeerId, ReputationChange as Rep, NetworkBridgeEvent, OurView, }; use futures::prelude::*; @@ -390,14 +389,14 @@ struct ActiveHeadData { /// How many `Seconded` statements we've seen per validator. seconded_counts: HashMap, /// A Jaeger span for this head, so we can attach data to it. - span: jaeger::JaegerSpan, + span: PerLeafSpan, } impl ActiveHeadData { fn new( validators: Vec, session_index: sp_staking::SessionIndex, - relay_parent: &Hash, + span: PerLeafSpan, ) -> Self { ActiveHeadData { candidates: Default::default(), @@ -405,7 +404,7 @@ impl ActiveHeadData { validators, session_index, seconded_counts: Default::default(), - span: jaeger::hash_span(&relay_parent, "statement-dist-active"), + span, } } @@ -839,7 +838,7 @@ async fn handle_network_update( peers: &mut HashMap, active_heads: &mut HashMap, ctx: &mut impl SubsystemContext, - our_view: &mut View, + our_view: &mut OurView, update: NetworkBridgeEvent, metrics: &Metrics, statement_listeners: &mut StatementListeners, @@ -930,7 +929,7 @@ impl StatementDistribution { mut ctx: impl SubsystemContext, ) -> SubsystemResult<()> { let mut peers: HashMap = HashMap::new(); - let mut our_view = View::default(); + let mut our_view = OurView::default(); let mut active_heads: HashMap = HashMap::new(); let mut statement_listeners = StatementListeners::new(); let metrics = self.metrics; @@ -941,7 +940,9 @@ impl StatementDistribution { FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, .. })) => { let _timer = metrics.time_active_leaves_update(); - for relay_parent in activated { + for (relay_parent, span) in activated { + let span = PerLeafSpan::new(span, "statement-distribution"); + let (validators, session_index) = { let (val_tx, val_rx) = oneshot::channel(); let (session_tx, session_rx) = oneshot::channel(); @@ -981,7 +982,7 @@ impl StatementDistribution { }; active_heads.entry(relay_parent) - .or_insert(ActiveHeadData::new(validators, session_index, &relay_parent)); + .or_insert(ActiveHeadData::new(validators, session_index, span)); } } FromOverseer::Signal(OverseerSignal::BlockFinalized(..)) => { @@ -1117,7 +1118,8 @@ mod tests { use futures::executor::{self, block_on}; use sp_keystore::{CryptoStore, SyncCryptoStorePtr, SyncCryptoStore}; use sc_keystore::LocalKeystore; - use polkadot_node_network_protocol::{view, ObservedRole}; + use polkadot_node_network_protocol::{view, ObservedRole, our_view}; + use polkadot_subsystem::JaegerSpan; #[test] fn active_head_accepts_only_2_seconded_per_validator() { @@ -1155,7 +1157,11 @@ mod tests { c }; - let mut head_data = ActiveHeadData::new(validators, session_index, &parent_hash); + let mut head_data = ActiveHeadData::new( + validators, + session_index, + PerLeafSpan::new(Arc::new(JaegerSpan::Disabled), "test"), + ); let keystore: SyncCryptoStorePtr = Arc::new(LocalKeystore::in_memory()); let alice_public = SyncCryptoStore::sr25519_generate_new( @@ -1413,7 +1419,11 @@ mod tests { ).unwrap(); let new_head_data = { - let mut data = ActiveHeadData::new(validators, session_index, &hash_c); + let mut data = ActiveHeadData::new( + validators, + session_index, + PerLeafSpan::new(Arc::new(JaegerSpan::Disabled), "test"), + ); let noted = data.note_statement(block_on(SignedFullStatement::sign( &keystore, @@ -1665,7 +1675,7 @@ mod tests { let test_fut = async move { // register our active heads. handle.send(FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: vec![hash_a].into(), + activated: vec![(hash_a, Arc::new(JaegerSpan::Disabled))].into(), deactivated: vec![].into(), }))).await; @@ -1718,7 +1728,7 @@ mod tests { handle.send(FromOverseer::Communication { msg: StatementDistributionMessage::NetworkBridgeUpdateV1( - NetworkBridgeEvent::OurViewChange(view![hash_a]) + NetworkBridgeEvent::OurViewChange(our_view![hash_a]) ) }).await; diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 9e5ff2a754..687a9ceab2 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -88,12 +88,11 @@ use polkadot_subsystem::messages::{ }; pub use polkadot_subsystem::{ Subsystem, SubsystemContext, OverseerSignal, FromOverseer, SubsystemError, SubsystemResult, - SpawnedSubsystem, ActiveLeavesUpdate, DummySubsystem, + SpawnedSubsystem, ActiveLeavesUpdate, DummySubsystem, JaegerSpan, jaeger, }; use polkadot_node_subsystem_util::{TimeoutExt, metrics::{self, prometheus}}; use polkadot_node_primitives::SpawnNamed; - // A capacity of bounded channels inside the overseer. const CHANNEL_CAPACITY: usize = 1024; // A graceful `Overseer` teardown time delay. @@ -490,6 +489,9 @@ pub struct Overseer { /// External listeners waiting for a hash to be in the active-leave set. activation_external_listeners: HashMap>>>, + /// Stores the [`JaegerSpan`] per active leaf. + span_per_active_leaf: HashMap>, + /// A set of leaves that `Overseer` starts working with. /// /// Drained at the beginning of `run` and never used again. @@ -1277,6 +1279,7 @@ where leaves, active_leaves, metrics, + span_per_active_leaf: Default::default(), }; Ok((this, handler)) @@ -1321,9 +1324,9 @@ where let mut update = ActiveLeavesUpdate::default(); for (hash, number) in std::mem::take(&mut self.leaves) { - update.activated.push(hash); let _ = self.active_leaves.insert(hash, number); - self.on_head_activated(&hash); + let span = self.on_head_activated(&hash); + update.activated.push((hash, span)); } self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; @@ -1390,32 +1393,26 @@ where #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn block_imported(&mut self, block: BlockInfo) -> SubsystemResult<()> { - let mut update = ActiveLeavesUpdate::default(); - - if let Some(number) = self.active_leaves.remove(&block.parent_hash) { - if let Some(expected_parent_number) = block.number.checked_sub(1) { - debug_assert_eq!(expected_parent_number, number); - } - update.deactivated.push(block.parent_hash); - self.on_head_deactivated(&block.parent_hash); - } - match self.active_leaves.entry(block.hash) { - hash_map::Entry::Vacant(entry) => { - update.activated.push(block.hash); - let _ = entry.insert(block.number); - self.on_head_activated(&block.hash); - }, + hash_map::Entry::Vacant(entry) => entry.insert(block.number), hash_map::Entry::Occupied(entry) => { debug_assert_eq!(*entry.get(), block.number); + return Ok(()); } + }; + + let span = self.on_head_activated(&block.hash); + let mut update = ActiveLeavesUpdate::start_work(block.hash, span); + + if let Some(number) = self.active_leaves.remove(&block.parent_hash) { + debug_assert_eq!(block.number.saturating_sub(1), number); + update.deactivated.push(block.parent_hash); + self.on_head_deactivated(&block.parent_hash); } self.clean_up_external_listeners(); - self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; - - Ok(()) + self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] @@ -1519,7 +1516,7 @@ where } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn on_head_activated(&mut self, hash: &Hash) { + fn on_head_activated(&mut self, hash: &Hash) -> Arc { self.metrics.on_head_activated(); if let Some(listeners) = self.activation_external_listeners.remove(hash) { for listener in listeners { @@ -1527,15 +1524,17 @@ where let _ = listener.send(Ok(())); } } + + let span = Arc::new(jaeger::hash_span(hash, "leave activated")); + self.span_per_active_leaf.insert(*hash, span.clone()); + span } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] fn on_head_deactivated(&mut self, hash: &Hash) { self.metrics.on_head_deactivated(); - if let Some(listeners) = self.activation_external_listeners.remove(hash) { - // clean up and signal to listeners the block is deactivated - drop(listeners); - } + self.activation_external_listeners.remove(hash); + self.span_per_active_leaf.remove(hash); } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] @@ -1615,7 +1614,7 @@ mod tests { use futures::{executor, pin_mut, select, channel::mpsc, FutureExt, pending}; use polkadot_primitives::v1::{BlockData, CollatorPair, PoV, CandidateHash}; - use polkadot_subsystem::messages::RuntimeApiRequest; + use polkadot_subsystem::{messages::RuntimeApiRequest, JaegerSpan}; use polkadot_node_primitives::{Collation, CollationGenerationConfig}; use polkadot_node_network_protocol::{PeerId, ReputationChange, NetworkBridgeEvent}; @@ -1980,13 +1979,16 @@ mod tests { handler.block_imported(third_block).await; let expected_heartbeats = vec![ - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(first_block_hash)), + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work( + first_block_hash, + Arc::new(JaegerSpan::Disabled), + )), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: [second_block_hash].as_ref().into(), + activated: [(second_block_hash, Arc::new(JaegerSpan::Disabled))].as_ref().into(), deactivated: [first_block_hash].as_ref().into(), }), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: [third_block_hash].as_ref().into(), + activated: [(third_block_hash, Arc::new(JaegerSpan::Disabled))].as_ref().into(), deactivated: [second_block_hash].as_ref().into(), }), ]; @@ -2074,7 +2076,10 @@ mod tests { let expected_heartbeats = vec![ OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: [first_block_hash, second_block_hash].as_ref().into(), + activated: [ + (first_block_hash, Arc::new(JaegerSpan::Disabled)), + (second_block_hash, Arc::new(JaegerSpan::Disabled)), + ].as_ref().into(), ..Default::default() }), OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 6484fa4a91..b85db71f0e 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -19,6 +19,7 @@ tracing-futures = "0.2.4" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } +polkadot-node-jaeger = { path = "../jaeger" } polkadot-primitives = { path = "../../primitives" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index 0bc69cb3d1..e9fd475f10 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -29,6 +29,7 @@ use polkadot_node_subsystem::{ messages::{AllMessages, RuntimeApiMessage, RuntimeApiRequest, RuntimeApiSender, BoundToRelayParent}, FromOverseer, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemError, SubsystemResult, }; +use polkadot_node_jaeger::JaegerSpan; use futures::{channel::{mpsc, oneshot}, prelude::*, select, stream::Stream}; use futures_timer::Delay; use parity_scale_codec::Encode; @@ -36,27 +37,14 @@ use pin_project::pin_project; use polkadot_primitives::v1::{ CandidateEvent, CommittedCandidateReceipt, CoreState, EncodeAs, PersistedValidationData, GroupRotationInfo, Hash, Id as ParaId, ValidationData, OccupiedCoreAssumption, - SessionIndex, Signed, SigningContext, ValidationCode, ValidatorId, ValidatorIndex, - SessionInfo, -}; -use sp_core::{ - traits::SpawnNamed, - Public + SessionIndex, Signed, SigningContext, ValidationCode, ValidatorId, ValidatorIndex, SessionInfo, }; +use sp_core::{traits::SpawnNamed, Public}; use sp_application_crypto::AppKey; -use sp_keystore::{ - CryptoStore, - SyncCryptoStorePtr, - Error as KeystoreError, -}; +use sp_keystore::{CryptoStore, SyncCryptoStorePtr, Error as KeystoreError}; use std::{ - collections::{HashMap, hash_map::Entry}, - convert::{TryFrom, TryInto}, - marker::Unpin, - pin::Pin, - task::{Poll, Context}, - time::Duration, - fmt, + collections::{HashMap, hash_map::Entry}, convert::{TryFrom, TryInto}, marker::Unpin, pin::Pin, task::{Poll, Context}, + time::Duration, fmt, sync::Arc, }; use streamunordered::{StreamUnordered, StreamYield}; use thiserror::Error; @@ -494,6 +482,7 @@ pub trait JobTrait: Unpin { /// The job should be ended when `receiver` returns `None`. fn run( parent: Hash, + span: Arc, run_args: Self::RunArgs, metrics: Self::Metrics, receiver: mpsc::Receiver, @@ -561,14 +550,20 @@ impl Jobs { } /// Spawn a new job for this `parent_hash`, with whatever args are appropriate. - fn spawn_job(&mut self, parent_hash: Hash, run_args: Job::RunArgs, metrics: Job::Metrics) -> Result<(), Error> { + fn spawn_job( + &mut self, + parent_hash: Hash, + span: Arc, + run_args: Job::RunArgs, + metrics: Job::Metrics, + ) -> Result<(), Error> { let (to_job_tx, to_job_rx) = mpsc::channel(JOB_CHANNEL_CAPACITY); let (from_job_tx, from_job_rx) = mpsc::channel(JOB_CHANNEL_CAPACITY); let err_tx = self.errors.clone(); let (future, abort_handle) = future::abortable(async move { - if let Err(e) = Job::run(parent_hash, run_args, metrics, to_job_rx, from_job_tx).await { + if let Err(e) = Job::run(parent_hash, span, run_args, metrics, to_job_rx, from_job_tx).await { tracing::error!( job = Job::NAME, parent_hash = %parent_hash, @@ -782,9 +777,9 @@ where activated, deactivated, }))) => { - for hash in activated { + for (hash, span) in activated { let metrics = metrics.clone(); - if let Err(e) = jobs.spawn_job(hash, run_args.clone(), metrics) { + if let Err(e) = jobs.spawn_job(hash, span, run_args.clone(), metrics) { tracing::error!( job = Job::NAME, err = ?e, @@ -998,13 +993,13 @@ mod tests { use thiserror::Error; use polkadot_node_subsystem::{ messages::{AllMessages, CandidateSelectionMessage}, ActiveLeavesUpdate, FromOverseer, OverseerSignal, - SpawnedSubsystem, + SpawnedSubsystem, JaegerSpan, }; use assert_matches::assert_matches; use futures::{channel::mpsc, executor, StreamExt, future, Future, FutureExt, SinkExt}; use polkadot_primitives::v1::Hash; use polkadot_node_subsystem_test_helpers::{self as test_helpers, make_subsystem_context}; - use std::{pin::Pin, time::Duration}; + use std::{pin::Pin, time::Duration, sync::Arc}; // basic usage: in a nutshell, when you want to define a subsystem, just focus on what its jobs do; // you can leave the subsystem itself to the job manager. @@ -1040,6 +1035,7 @@ mod tests { // this function is in charge of creating and executing the job's main loop fn run( _: Hash, + _: Arc, run_args: Self::RunArgs, _metrics: Self::Metrics, receiver: mpsc::Receiver, @@ -1123,7 +1119,7 @@ mod tests { test_harness(true, |mut overseer_handle, err_rx| async move { overseer_handle .send(FromOverseer::Signal(OverseerSignal::ActiveLeaves( - ActiveLeavesUpdate::start_work(relay_parent), + ActiveLeavesUpdate::start_work(relay_parent, Arc::new(JaegerSpan::Disabled)), ))) .await; assert_matches!( @@ -1152,7 +1148,7 @@ mod tests { test_harness(true, |mut overseer_handle, err_rx| async move { overseer_handle .send(FromOverseer::Signal(OverseerSignal::ActiveLeaves( - ActiveLeavesUpdate::start_work(relay_parent), + ActiveLeavesUpdate::start_work(relay_parent, Arc::new(JaegerSpan::Disabled)), ))) .await; diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 4a59a32816..d9ea049a57 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -22,6 +22,7 @@ polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } +polkadot-node-jaeger = { path = "../jaeger" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } smallvec = "1.5.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem/src/errors.rs b/node/subsystem/src/errors.rs index 243577c353..5af573c87f 100644 --- a/node/subsystem/src/errors.rs +++ b/node/subsystem/src/errors.rs @@ -59,15 +59,3 @@ impl core::fmt::Display for ChainApiError { } impl std::error::Error for ChainApiError {} - - -/// A description of an error causing the chain API request to be unservable. -#[derive(Debug, thiserror::Error)] -#[allow(missing_docs)] -pub enum JaegerError { - #[error("Already launched the collector thread")] - AlreadyLaunched, - - #[error("Missing jaeger configuration")] - MissingConfiguration, -} diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index 83b72111d4..ad049bf39d 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -22,7 +22,7 @@ #![warn(missing_docs)] -use std::pin::Pin; +use std::{pin::Pin, sync::Arc, fmt}; use futures::prelude::*; use futures::channel::{mpsc, oneshot}; @@ -36,8 +36,9 @@ use crate::messages::AllMessages; pub mod errors; pub mod messages; -pub mod jaeger; -pub use crate::jaeger::*; + +pub use polkadot_node_jaeger as jaeger; +pub use jaeger::*; /// How many slots are stack-reserved for active leaves updates /// @@ -48,18 +49,21 @@ const ACTIVE_LEAVES_SMALLVEC_CAPACITY: usize = 8; /// Changes in the set of active leaves: the parachain heads which we care to work on. /// /// Note that the activated and deactivated fields indicate deltas, not complete sets. -#[derive(Clone, Debug, Default, Eq)] +#[derive(Clone, Default)] pub struct ActiveLeavesUpdate { - /// New relay chain block hashes of interest. - pub activated: SmallVec<[Hash; ACTIVE_LEAVES_SMALLVEC_CAPACITY]>, + /// New relay chain block hashes of interest and their associated [`JaegerSpan`]. + /// + /// NOTE: Each span should only be kept active as long as the leaf is considered active and should be dropped + /// when the leaf is deactivated. + pub activated: SmallVec<[(Hash, Arc); ACTIVE_LEAVES_SMALLVEC_CAPACITY]>, /// Relay chain block hashes no longer of interest. pub deactivated: SmallVec<[Hash; ACTIVE_LEAVES_SMALLVEC_CAPACITY]>, } impl ActiveLeavesUpdate { /// Create a ActiveLeavesUpdate with a single activated hash - pub fn start_work(hash: Hash) -> Self { - Self { activated: [hash][..].into(), ..Default::default() } + pub fn start_work(hash: Hash, span: Arc) -> Self { + Self { activated: [(hash, span)][..].into(), ..Default::default() } } /// Create a ActiveLeavesUpdate with a single deactivated hash @@ -79,11 +83,27 @@ impl PartialEq for ActiveLeavesUpdate { /// Instead, it means equality when `activated` and `deactivated` are considered as sets. fn eq(&self, other: &Self) -> bool { self.activated.len() == other.activated.len() && self.deactivated.len() == other.deactivated.len() - && self.activated.iter().all(|a| other.activated.contains(a)) + && self.activated.iter().all(|a| other.activated.iter().any(|o| a.0 == o.0)) && self.deactivated.iter().all(|a| other.deactivated.contains(a)) } } +impl fmt::Debug for ActiveLeavesUpdate { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + struct Activated<'a>(&'a [(Hash, Arc)]); + impl fmt::Debug for Activated<'_> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_list().entries(self.0.iter().map(|e| e.0)).finish() + } + } + + f.debug_struct("ActiveLeavesUpdate") + .field("activated", &Activated(&self.activated)) + .field("deactivated", &self.deactivated) + .finish() + } +} + /// Signals sent by an overseer to a subsystem. #[derive(PartialEq, Clone, Debug)] pub enum OverseerSignal { @@ -139,7 +159,7 @@ pub enum SubsystemError { Prometheus(#[from] substrate_prometheus_endpoint::PrometheusError), #[error(transparent)] - Jaeger(#[from] errors::JaegerError), + Jaeger(#[from] JaegerError), #[error("Failed to {0}")] Context(String), diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index d5dc73a7ce..e15b8dcf9f 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -105,7 +105,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 13, + spec_version: 14, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From 09c43bb8f29c1930b29c0a0910798b531c1effce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Jan 2021 14:40:44 +0000 Subject: [PATCH 158/203] Bump smallvec from 1.5.1 to 1.6.0 (#2183) Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.5.1 to 1.6.0. - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.5.1...v1.6.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 72 +++++++++++++------------- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 8 files changed, 43 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7b82b3c55..1dc90b8728 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -870,7 +870,7 @@ dependencies = [ "log", "regalloc", "serde", - "smallvec 1.5.1", + "smallvec 1.6.0", "target-lexicon", "thiserror", ] @@ -908,7 +908,7 @@ checksum = "2ef419efb4f94ecc02e5d9fbcc910d2bb7f0040e2de570e63a454f883bc891d6" dependencies = [ "cranelift-codegen", "log", - "smallvec 1.5.1", + "smallvec 1.6.0", "target-lexicon", ] @@ -1586,7 +1586,7 @@ dependencies = [ "parity-scale-codec", "paste", "serde", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-arithmetic", "sp-core", "sp-inherents", @@ -2714,7 +2714,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -2752,7 +2752,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0315ef2f688e33844400b31f11c263f2b3dc21d8b9355c6891c5f185fae43f9a" dependencies = [ "parity-util-mem", - "smallvec 1.5.1", + "smallvec 1.6.0", ] [[package]] @@ -2781,7 +2781,7 @@ dependencies = [ "parking_lot 0.10.2", "regex", "rocksdb", - "smallvec 1.5.1", + "smallvec 1.6.0", ] [[package]] @@ -2875,7 +2875,7 @@ dependencies = [ "parity-multiaddr", "parking_lot 0.11.1", "pin-project 1.0.2", - "smallvec 1.5.1", + "smallvec 1.6.0", "wasm-timer", ] @@ -2907,7 +2907,7 @@ dependencies = [ "ring", "rw-stream-sink", "sha2 0.9.1", - "smallvec 1.5.1", + "smallvec 1.6.0", "thiserror", "unsigned-varint", "void", @@ -2961,7 +2961,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "smallvec 1.5.1", + "smallvec 1.6.0", ] [[package]] @@ -2985,7 +2985,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.1", - "smallvec 1.5.1", + "smallvec 1.6.0", "unsigned-varint", "wasm-timer", ] @@ -3002,7 +3002,7 @@ dependencies = [ "log", "prost", "prost-build", - "smallvec 1.5.1", + "smallvec 1.6.0", "wasm-timer", ] @@ -3025,7 +3025,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.1", - "smallvec 1.5.1", + "smallvec 1.6.0", "uint", "unsigned-varint", "void", @@ -3048,7 +3048,7 @@ dependencies = [ "libp2p-swarm", "log", "rand 0.7.3", - "smallvec 1.5.1", + "smallvec 1.6.0", "socket2", "void", ] @@ -3067,7 +3067,7 @@ dependencies = [ "nohash-hasher", "parking_lot 0.11.1", "rand 0.7.3", - "smallvec 1.5.1", + "smallvec 1.6.0", "unsigned-varint", ] @@ -3154,7 +3154,7 @@ dependencies = [ "lru", "minicbor", "rand 0.7.3", - "smallvec 1.5.1", + "smallvec 1.6.0", "unsigned-varint", "wasm-timer", ] @@ -3170,7 +3170,7 @@ dependencies = [ "libp2p-core", "log", "rand 0.7.3", - "smallvec 1.5.1", + "smallvec 1.6.0", "void", "wasm-timer", ] @@ -3643,7 +3643,7 @@ dependencies = [ "futures 0.3.8", "log", "pin-project 1.0.2", - "smallvec 1.5.1", + "smallvec 1.6.0", "unsigned-varint", ] @@ -4376,7 +4376,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "serde", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-core", "sp-io", "sp-runtime", @@ -4556,7 +4556,7 @@ dependencies = [ "parity-util-mem-derive", "parking_lot 0.10.2", "primitive-types", - "smallvec 1.5.1", + "smallvec 1.6.0", "winapi 0.3.9", ] @@ -4667,7 +4667,7 @@ dependencies = [ "cloudabi 0.0.3", "libc", "redox_syscall", - "smallvec 1.5.1", + "smallvec 1.6.0", "winapi 0.3.9", ] @@ -4682,7 +4682,7 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec 1.5.1", + "smallvec 1.6.0", "winapi 0.3.9", ] @@ -5268,7 +5268,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-core", "substrate-prometheus-endpoint", "thiserror", @@ -5293,7 +5293,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-core", "tracing", "tracing-futures", @@ -5500,7 +5500,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -5794,7 +5794,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -6435,7 +6435,7 @@ version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" dependencies = [ - "smallvec 1.5.1", + "smallvec 1.6.0", ] [[package]] @@ -6466,7 +6466,7 @@ checksum = "b9ba8aaf5fe7cf307c6dbdaeed85478961d29e25e3bee5169e11b92fa9f027a8" dependencies = [ "log", "rustc-hash", - "smallvec 1.5.1", + "smallvec 1.6.0", ] [[package]] @@ -6579,7 +6579,7 @@ dependencies = [ "polkadot-runtime-parachains", "serde", "serde_derive", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -7323,7 +7323,7 @@ dependencies = [ "serde_json", "slog", "slog_derive", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-arithmetic", "sp-blockchain", "sp-consensus", @@ -8060,9 +8060,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae524f056d7d770e174287294f562e95044c68e88dec909a00d2094805db9d75" +checksum = "1a55ca5f3b68e41c979bf8c46a6f1da892ca4db8f94023ce0bd32407573b1ac0" [[package]] name = "snow" @@ -8602,7 +8602,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", "rand 0.7.3", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-core", "sp-externalities", "sp-panic-handler", @@ -9632,7 +9632,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec 1.5.1", + "smallvec 1.6.0", "thread_local", "tracing", "tracing-core", @@ -9656,7 +9656,7 @@ dependencies = [ "hashbrown 0.8.0", "log", "rustc-hex", - "smallvec 1.5.1", + "smallvec 1.6.0", ] [[package]] @@ -10035,7 +10035,7 @@ dependencies = [ "log", "region", "rustc-demangle", - "smallvec 1.5.1", + "smallvec 1.6.0", "target-lexicon", "wasmparser 0.59.0", "wasmtime-environ", @@ -10286,7 +10286,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.5.1", + "smallvec 1.6.0", "sp-api", "sp-authority-discovery", "sp-block-builder", diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 8ccc0d39f8..5384ce08d6 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -20,7 +20,7 @@ polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.5.1" +smallvec = "1.6.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index d9ea049a57..e544df426c 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -24,7 +24,7 @@ polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } polkadot-node-jaeger = { path = "../jaeger" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.5.1" +smallvec = "1.6.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.23" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index f424c3baac..c98c553fab 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.5.1" +smallvec = "1.6.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 2f9d889106..dd3e46be7c 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.5.1" +smallvec = "1.6.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 1854e860ca..d61861ec09 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -9,7 +9,7 @@ build = "build.rs" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.5.1" +smallvec = "1.6.0" frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index c87678e3aa..5184cdcc4d 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.5.1" +smallvec = "1.6.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index da4057f1a0..78370a9d2f 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.5.1" +smallvec = "1.6.0" static_assertions = "1.1.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -- GitLab From 0508b6f2e2ab52bc5d783fc1352c24b6086f5c4f Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Tue, 5 Jan 2021 16:02:06 +0100 Subject: [PATCH 159/203] Reduce the inclusion inherent's actual weight if the block is already heavy (#2060) * don't modify inherent data on heavy block * write up current thinking on block weight detection * extract inherent inclusion check into its own function * put heavy block check into runtime * the `inclusion` inherent call is Operational, not Mandatory This resolves a lot of the trickiness about this issue, because we no longer need to override or supplant any existing proposer logic; the existing logic should exhibit these behaviors: - the `inclusion` inherent is prioritized over standard transactions - but if it's too heavy, i.e. in case of runtime upgrade, it'll be dropped in favor of that. It is my belief that allowing the proposer to just not include this data won't have any adverse effects: it's equivalent to replacing them with empty versions of themselves, which the `ProvideInherent` impl already does. * Revert "the `inclusion` inherent call is Operational, not Mandatory" This reverts commit e58858d109b18b84e7af3ac47981c6900b2d9a3e. * Revert "write up current thinking on block weight detection" This reverts commit fd587b80c46761b2a2b62448193348237863f99f. * Revert "don't modify inherent data on heavy block" This reverts commit 38299d3c23e9efb5a354d8cfa658e62a5c8c7ddf. * add backed candidate block weight assumption to configuration * Limit backed candidates according to a candidate weight heuristic. This approach replaces making the inclusion inherent non-mandatory. It's still not ideal in that we have to configure a heuristic for how much each backed candidate 'weighs', instead of directly measuring it somehow. This approach also never truncates the signed bitfields. The rationale for that depends on some assumptions: - processing the signed bitfields is cheap compared to the backed candidates - it is beneficial to the progress of the relay chain to update the signed bitfields even if not all backed candidates are updated * simplify limit_backed_candidates and weight assumption * don't trust the provisioner to fairly distribute candidates * use saturating subtraction * empty commit to restart ci * use new mechanism for getting max block weight * apply weight refunds to the inclusion inherent This makes some assumptions about fundamental weights, which are encapsulated as constants. From there, it lets Substrate know what the actual computed weight of the inherent is. * use a correct fixed weight for the inclusion inherent Co-authored-by: Guillaume Thiolliere * use dynamic inclusion weight so we reduce calculated weight when excluding candidates * don't double-count this intrinsic's weight in the block weight * add unit tests of fn limit_backed_candidates * add tests that the inclusion inherent's weight correctly updates Co-authored-by: Guillaume Thiolliere --- primitives/src/v1.rs | 1 + runtime/parachains/src/inclusion_inherent.rs | 201 ++++++++++++++++++- runtime/parachains/src/mock.rs | 2 + 3 files changed, 197 insertions(+), 7 deletions(-) diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index 5a3d25efee..fd320dfcb2 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -473,6 +473,7 @@ pub type SignedAvailabilityBitfields = Vec; /// A backed (or backable, depending on context) candidate. #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] +#[cfg_attr(feature = "std", derive(Default))] pub struct BackedCandidate { /// The candidate referred to. pub candidate: CommittedCandidateReceipt, diff --git a/runtime/parachains/src/inclusion_inherent.rs b/runtime/parachains/src/inclusion_inherent.rs index 27a319dced..3747f33fda 100644 --- a/runtime/parachains/src/inclusion_inherent.rs +++ b/runtime/parachains/src/inclusion_inherent.rs @@ -25,10 +25,9 @@ use sp_std::prelude::*; use primitives::v1::{ BackedCandidate, SignedAvailabilityBitfields, INCLUSION_INHERENT_IDENTIFIER, Header, }; -use sp_runtime::traits::One; use frame_support::{ decl_error, decl_module, decl_storage, ensure, - dispatch::DispatchResult, + dispatch::DispatchResultWithPostInfo, weights::{DispatchClass, Weight}, traits::Get, }; @@ -40,6 +39,12 @@ use crate::{ }; use inherents::{InherentIdentifier, InherentData, MakeFatalError, ProvideInherent}; +// In the future, we should benchmark these consts; these are all untested assumptions for now. +const BACKED_CANDIDATE_WEIGHT: Weight = 100_000; +const INCLUSION_INHERENT_CLAIMED_WEIGHT: Weight = 1_000_000_000; +// we assume that 75% of an inclusion inherent's weight is used processing backed candidates +const MINIMAL_INCLUSION_INHERENT_WEIGHT: Weight = INCLUSION_INHERENT_CLAIMED_WEIGHT / 4; + pub trait Config: inclusion::Config + scheduler::Config {} decl_storage! { @@ -80,19 +85,21 @@ decl_module! { } /// Include backed candidates and bitfields. - #[weight = (1_000_000_000, DispatchClass::Mandatory)] + #[weight = ( + MINIMAL_INCLUSION_INHERENT_WEIGHT + backed_candidates.len() as Weight * BACKED_CANDIDATE_WEIGHT, + DispatchClass::Mandatory, + )] pub fn inclusion( origin, signed_bitfields: SignedAvailabilityBitfields, backed_candidates: Vec>, parent_header: Header, - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { ensure_none(origin)?; ensure!(!::exists(), Error::::TooManyInclusionInherents); // Check that the submitted parent header indeed corresponds to the previous block hash. - let now = >::block_number(); - let parent_hash = >::block_hash(now - One::one()); + let parent_hash = >::parent_hash(); ensure!( parent_header.hash().as_ref() == parent_hash.as_ref(), Error::::InvalidParentHeader, @@ -119,6 +126,9 @@ decl_module! { >::schedule(freed); + let backed_candidates = limit_backed_candidates::(backed_candidates); + let backed_candidates_len = backed_candidates.len() as Weight; + // Process backed candidates according to scheduled cores. let parent_storage_root = parent_header.state_root; let occupied = >::process_candidates( @@ -137,11 +147,35 @@ decl_module! { // And track that we've finished processing the inherent for this block. Included::set(Some(())); - Ok(()) + Ok(Some( + MINIMAL_INCLUSION_INHERENT_WEIGHT + + (backed_candidates_len * BACKED_CANDIDATE_WEIGHT) + ).into()) } } } +/// Limit the number of backed candidates processed in order to stay within block weight limits. +/// +/// Use a configured assumption about the weight required to process a backed candidate and the +/// current block weight as of the execution of this function to ensure that we don't overload +/// the block with candidate processing. +/// +/// If the backed candidates exceed the available block weight remaining, then skips all of them. +/// This is somewhat less desirable than attempting to fit some of them, but is more fair in the +/// even that we can't trust the provisioner to provide a fair / random ordering of candidates. +fn limit_backed_candidates( + backed_candidates: Vec>, +) -> Vec> { + // the weight of the inclusion inherent is already included in the current block weight, + // so our operation is simple: if the block is currently overloaded, make this intrinsic smaller + if frame_system::Module::::block_weight().total() > ::BlockWeights::get().max_block { + Vec::new() + } else { + backed_candidates + } +} + impl ProvideInherent for Module { type Call = Call; type Error = MakeFatalError<()>; @@ -174,3 +208,156 @@ impl ProvideInherent for Module { ) } } + +#[cfg(test)] +mod tests { + use super::*; + + use crate::mock::{ + new_test_ext, System, GenesisConfig as MockGenesisConfig, Test + }; + + mod limit_backed_candidates { + use super::*; + + #[test] + fn does_not_truncate_on_empty_block() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let backed_candidates = vec![BackedCandidate::default()]; + System::set_block_consumed_resources(0, 0); + assert_eq!(limit_backed_candidates::(backed_candidates).len(), 1); + }); + } + + #[test] + fn does_not_truncate_on_exactly_full_block() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let backed_candidates = vec![BackedCandidate::default()]; + let max_block_weight = ::BlockWeights::get().max_block; + // if the consumed resources are precisely equal to the max block weight, we do not truncate. + System::set_block_consumed_resources(max_block_weight, 0); + assert_eq!(limit_backed_candidates::(backed_candidates).len(), 1); + }); + } + + #[test] + fn truncates_on_over_full_block() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let backed_candidates = vec![BackedCandidate::default()]; + let max_block_weight = ::BlockWeights::get().max_block; + // if the consumed resources are precisely equal to the max block weight, we do not truncate. + System::set_block_consumed_resources(max_block_weight + 1, 0); + assert_eq!(limit_backed_candidates::(backed_candidates).len(), 0); + }); + } + + #[test] + fn all_backed_candidates_get_truncated() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let backed_candidates = vec![BackedCandidate::default(); 10]; + let max_block_weight = ::BlockWeights::get().max_block; + // if the consumed resources are precisely equal to the max block weight, we do not truncate. + System::set_block_consumed_resources(max_block_weight + 1, 0); + assert_eq!(limit_backed_candidates::(backed_candidates).len(), 0); + }); + } + } + + mod inclusion_inherent_weight { + use super::*; + + use crate::mock::{ + new_test_ext, System, GenesisConfig as MockGenesisConfig, Test + }; + + use frame_support::traits::UnfilteredDispatchable; + + fn default_header() -> Header { + Header { + parent_hash: Default::default(), + number: 0, + state_root: Default::default(), + extrinsics_root: Default::default(), + digest: Default::default(), + } + } + + /// We expect the weight of the inclusion inherent not to change when no truncation occurs: + /// its weight is dynamically computed from the size of the backed candidates list, and is + /// already incorporated into the current block weight when it is selected by the provisioner. + #[test] + fn weight_does_not_change_on_happy_path() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let header = default_header(); + System::set_block_number(1); + System::set_parent_hash(header.hash()); + + // number of bitfields doesn't affect the inclusion inherent weight, so we can mock it with an empty one + let signed_bitfields = Vec::new(); + // backed candidates must not be empty, so we can demonstrate that the weight has not changed + let backed_candidates = vec![BackedCandidate::default(); 10]; + + // the expected weight can always be computed by this formula + let expected_weight = MINIMAL_INCLUSION_INHERENT_WEIGHT + + (backed_candidates.len() as Weight * BACKED_CANDIDATE_WEIGHT); + + // we've used half the block weight; there's plenty of margin + let max_block_weight = ::BlockWeights::get().max_block; + let used_block_weight = max_block_weight / 2; + System::set_block_consumed_resources(used_block_weight, 0); + + // execute the inclusion inherent + let post_info = Call::::inclusion(signed_bitfields, backed_candidates, default_header()) + .dispatch_bypass_filter(None.into()).unwrap_err().post_info; + + // we don't directly check the block's weight post-call. Instead, we check that the + // call has returned the appropriate post-dispatch weight for refund, and trust + // Substrate to do the right thing with that information. + // + // In this case, the weight system can update the actual weight with the same amount, + // or return `None` to indicate that the pre-computed weight should not change. + // Either option is acceptable for our purposes. + if let Some(actual_weight) = post_info.actual_weight { + assert_eq!(actual_weight, expected_weight); + } + }); + } + + /// We expect the weight of the inclusion inherent to change when truncation occurs: its + /// weight was initially dynamically computed from the size of the backed candidates list, + /// but was reduced by truncation. + #[test] + fn weight_changes_when_backed_candidates_are_truncated() { + new_test_ext(MockGenesisConfig::default()).execute_with(|| { + let header = default_header(); + System::set_block_number(1); + System::set_parent_hash(header.hash()); + + // number of bitfields doesn't affect the inclusion inherent weight, so we can mock it with an empty one + let signed_bitfields = Vec::new(); + // backed candidates must not be empty, so we can demonstrate that the weight has not changed + let backed_candidates = vec![BackedCandidate::default(); 10]; + + // the expected weight with no blocks is just the minimum weight + let expected_weight = MINIMAL_INCLUSION_INHERENT_WEIGHT; + + // oops, looks like this mandatory call pushed the block weight over the limit + let max_block_weight = ::BlockWeights::get().max_block; + let used_block_weight = max_block_weight + 1; + System::set_block_consumed_resources(used_block_weight, 0); + + // execute the inclusion inherent + let post_info = Call::::inclusion(signed_bitfields, backed_candidates, header) + .dispatch_bypass_filter(None.into()).unwrap(); + + // we don't directly check the block's weight post-call. Instead, we check that the + // call has returned the appropriate post-dispatch weight for refund, and trust + // Substrate to do the right thing with that information. + assert_eq!( + post_info.actual_weight.unwrap(), + expected_weight, + ); + }); + } + } +} diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 7d5e0c380b..7ae33c01b3 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -120,6 +120,8 @@ impl crate::inclusion::Config for Test { type RewardValidators = TestRewardValidators; } +impl crate::inclusion_inherent::Config for Test { } + impl crate::session_info::Config for Test { } impl crate::session_info::AuthorityDiscoveryConfig for Test { -- GitLab From 4f41fb7412f11dbfdb141ccce7d071cd72c9758c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 5 Jan 2021 22:36:40 +0100 Subject: [PATCH 160/203] Improve the `unbacked-span` (#2206) This ensures that we also record the first `import_statement` that will lead to the creation of the `unbacked-span`. --- node/core/backing/src/lib.rs | 51 ++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index d4973e48b3..e915d75e0e 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -477,14 +477,14 @@ impl CandidateBackingJob { async fn run_loop( mut self, mut rx_to: mpsc::Receiver, - span: &JaegerSpan + span: PerLeafSpan, ) -> Result<(), Error> { loop { futures::select! { validated_command = self.background_validation.next() => { let _span = span.child("process-validation-result"); if let Some(c) = validated_command { - self.handle_validated_candidate_command(c).await?; + self.handle_validated_candidate_command(&span, c).await?; } else { panic!("`self` hasn't dropped and `self` holds a reference to this sender; qed"); } @@ -507,6 +507,7 @@ impl CandidateBackingJob { #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] async fn handle_validated_candidate_command( &mut self, + parent_span: &JaegerSpan, command: ValidatedCandidateCommand, ) -> Result<(), Error> { let candidate_hash = command.candidate_hash(); @@ -526,7 +527,7 @@ impl CandidateBackingJob { descriptor: candidate.descriptor.clone(), commitments, }); - self.sign_import_and_distribute_statement(statement).await?; + self.sign_import_and_distribute_statement(statement, parent_span).await?; self.distribute_pov(candidate.descriptor, pov).await?; } } @@ -545,7 +546,7 @@ impl CandidateBackingJob { }; self.issued_statements.insert(candidate_hash); - self.sign_import_and_distribute_statement(statement).await?; + self.sign_import_and_distribute_statement(statement, &parent_span).await?; } } } @@ -601,8 +602,7 @@ impl CandidateBackingJob { } let candidate_hash = candidate.hash(); - self.add_unbacked_span(&parent_span, candidate_hash); - let span = self.get_unbacked_validation_child(&candidate_hash); + let span = self.get_unbacked_validation_child(parent_span, candidate_hash); self.background_validate_and_make_available(BackgroundValidationParams { tx_from: self.tx_from.clone(), @@ -619,9 +619,13 @@ impl CandidateBackingJob { Ok(()) } - async fn sign_import_and_distribute_statement(&mut self, statement: Statement) -> Result<(), Error> { + async fn sign_import_and_distribute_statement( + &mut self, + statement: Statement, + parent_span: &JaegerSpan, + ) -> Result<(), Error> { if let Some(signed_statement) = self.sign_statement(statement).await { - self.import_statement(&signed_statement).await?; + self.import_statement(&signed_statement, parent_span).await?; self.distribute_signed_statement(signed_statement).await?; } @@ -669,11 +673,12 @@ impl CandidateBackingJob { async fn import_statement( &mut self, statement: &SignedFullStatement, + parent_span: &JaegerSpan, ) -> Result, Error> { let import_statement_span = { // create a span only for candidates we're already aware of. let candidate_hash = statement.payload().candidate_hash(); - self.get_unbacked_statement_child(&candidate_hash, statement.validator_index()) + self.get_unbacked_statement_child(parent_span, candidate_hash, statement.validator_index()) }; let stmt = primitive_statement_to_table(statement); @@ -821,11 +826,10 @@ impl CandidateBackingJob { parent_span: &JaegerSpan, statement: SignedFullStatement, ) -> Result<(), Error> { - if let Some(summary) = self.import_statement(&statement).await? { + if let Some(summary) = self.import_statement(&statement, parent_span).await? { if let Statement::Seconded(_) = statement.payload() { - self.add_unbacked_span(parent_span, summary.candidate); if Some(summary.group_id) == self.assignment { - let span = self.get_unbacked_validation_child(&summary.candidate); + let span = self.get_unbacked_validation_child(parent_span, summary.candidate); self.kick_off_validation_work(summary, span).await?; } @@ -863,23 +867,32 @@ impl CandidateBackingJob { Ok(()) } - fn add_unbacked_span(&mut self, parent_span: &JaegerSpan, hash: CandidateHash) { + /// Insert or get the unbacked-span for the given candidate hash. + fn insert_or_get_unbacked_span(&mut self, parent_span: &JaegerSpan, hash: CandidateHash) -> Option<&JaegerSpan> { if !self.backed.contains(&hash) { // only add if we don't consider this backed. - self.unbacked_candidates.entry(hash).or_insert_with(|| { + let span = self.unbacked_candidates.entry(hash).or_insert_with(|| { let mut span = parent_span.child("unbacked-candidate"); span.add_string_tag("candidate-hash", &format!("{:?}", hash.0)); span }); + Some(span) + } else { + None } } - fn get_unbacked_validation_child(&self, hash: &CandidateHash) -> Option { - self.unbacked_candidates.get(hash).map(|span| span.child("validation")) + fn get_unbacked_validation_child(&mut self, parent_span: &JaegerSpan, hash: CandidateHash) -> Option { + self.insert_or_get_unbacked_span(parent_span, hash).map(|span| span.child("validation")) } - fn get_unbacked_statement_child(&self, hash: &CandidateHash, validator: ValidatorIndex) -> Option { - self.unbacked_candidates.get(hash).map(|span| { + fn get_unbacked_statement_child( + &mut self, + parent_span: &JaegerSpan, + hash: CandidateHash, + validator: ValidatorIndex, + ) -> Option { + self.insert_or_get_unbacked_span(parent_span, hash).map(|span| { let mut span = span.child("import-statement"); span.add_string_tag("validator-index", &format!("{}", validator)); span @@ -1053,7 +1066,7 @@ impl util::JobTrait for CandidateBackingJob { }; drop(_span); - job.run_loop(rx_to, &span).await + job.run_loop(rx_to, span).await }.boxed() } } -- GitLab From dbd9e9ec7a0676d88dfb49031d655a6bf38e610e Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 6 Jan 2021 03:07:56 -0400 Subject: [PATCH 161/203] Companion PR for 7822 (Remove `_{}` from benchmarks) (#2202) * Remove `_{}` from benchmarks macro * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 410 +++++++++++++++++------------------ runtime/common/src/claims.rs | 2 - 2 files changed, 199 insertions(+), 213 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1dc90b8728..7774a4bdb9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ checksum = "f7001367fde4c768a19d1029f0a8be5abd9308e1119846d5bd9ad26297b8faf5" dependencies = [ "aes-soft", "aesni", - "block-cipher 0.7.1", + "block-cipher", ] [[package]] @@ -53,7 +53,7 @@ checksum = "86f5007801316299f922a6198d1d09a0bae95786815d066d5880d13f7c45ead1" dependencies = [ "aead", "aes", - "block-cipher 0.7.1", + "block-cipher", "ghash", "subtle 2.2.3", ] @@ -64,7 +64,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4925647ee64e5056cf231608957ce7c81e12d6d6e316b9ce1404778cc1d35fa7" dependencies = [ - "block-cipher 0.7.1", + "block-cipher", "byteorder", "opaque-debug 0.2.3", ] @@ -75,7 +75,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d050d39b0b7688b3a3254394c3e30a9d66c41dcf9b05b0e2dbdc623f6505d264" dependencies = [ - "block-cipher 0.7.1", + "block-cipher", "opaque-debug 0.2.3", ] @@ -531,15 +531,6 @@ dependencies = [ "generic-array 0.14.4", ] -[[package]] -name = "block-cipher" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f337a3e6da609650eb74e02bc9fac7b735049f7623ab12f2e4c719316fcc7e80" -dependencies = [ - "generic-array 0.14.4", -] - [[package]] name = "block-padding" version = "0.1.5" @@ -688,7 +679,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "086c0f07ac275808b7bf9a39f2fd013aae1498be83632814c8c4e0bd53f2dc58" dependencies = [ - "stream-cipher 0.4.1", + "stream-cipher", "zeroize", ] @@ -701,7 +692,7 @@ dependencies = [ "aead", "chacha20", "poly1305", - "stream-cipher 0.4.1", + "stream-cipher", "zeroize", ] @@ -718,6 +709,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.4", +] + [[package]] name = "clang-sys" version = "0.29.3" @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "bitflags", "frame-metadata", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support-procedural-tools", "proc-macro2 1.0.24", @@ -1611,7 +1611,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1633,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1663,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-api", @@ -2843,9 +2843,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.32.2" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022cdac4ab124be12de581e591796d4dfb7d1f1eef94669d2c1eaa0e98dd2f0e" +checksum = "2e17c636b5fe5ff900ccc2840b643074bfac321551d821243a781d0d46f06588" dependencies = [ "atomic", "bytes 0.5.6", @@ -2881,13 +2881,12 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.25.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c96d3a606a696a3a6c0ad3c3352c57bda2082ec9090930f1bd9daf787039f" +checksum = "e1cb706da14c064dce54d8864ade6836b3486b51689300da74eeb7053aa4551e" dependencies = [ "asn1_der", "bs58", - "bytes 0.5.6", "ed25519-dalek", "either", "fnv", @@ -2926,9 +2925,9 @@ dependencies = [ [[package]] name = "libp2p-deflate" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a579d7dd506d0620ba88ccc1754436b7de35ed6c884234f9a226bbfce382640" +checksum = "e3257a41f376aa23f237231971fee7e350e4d8353cfcf233aef34d6d6b638f0c" dependencies = [ "flate2", "futures 0.3.8", @@ -2937,9 +2936,9 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15dea5933f570844d7b5222b12b58f7bd52e9ca38cd65a1bd4f35341f053f012" +checksum = "2e09bab25af01326b4ed9486d31325911437448edda30bc57681502542d49f20" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -2948,9 +2947,9 @@ dependencies = [ [[package]] name = "libp2p-floodsub" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23070a0838bd9a8adb27e6eba477eeb650c498f9d139383dd0135d20a8170253" +checksum = "6fd8cdd5ef1dd0b7346975477216d752de976b92e43051bc8bd808c372ea6cec" dependencies = [ "cuckoofilter", "fnv", @@ -2966,9 +2965,9 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e8f3aa0906fbad435dac23c177eef3cdfaaf62609791bd7f54f8553edcfdf9" +checksum = "d489531aa9d4ba8726a08b3b74e21c2e10a518ad266ebca98d79040123ab0036" dependencies = [ "base64 0.13.0", "byteorder", @@ -2992,9 +2991,9 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "802fb973a7e0dde3fb9a2113a62bad90338ebe01983b706e1d576d0c2af93cda" +checksum = "c43bc51a9bc3780288c526615ba0f5f8216820ea6dcc02b89e8daee526c5fccb" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3008,9 +3007,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6506b7b7982f7626fc96a91bc61be4b1fe7ae9ac23824f0ecefcce21cb39238c" +checksum = "a226956b49438a10f3206480b8faf5e61fc445c349ea9d9cc37766a83745fa9a" dependencies = [ "arrayvec 0.5.2", "bytes 0.5.6", @@ -3034,9 +3033,9 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b934ee03a361f317df7d75defa4177b285534c58f49d5e6e240278e13ef3f65" +checksum = "8a9e12688e8f14008c950c1efde587cb44dbf316fa805f419cd4e524991236f5" dependencies = [ "async-io", "data-encoding", @@ -3055,9 +3054,9 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae2132b14045009b0f8e577a06e1459592ef0a89dedc58f3d4baf4eac956837b" +checksum = "ce3200fbe6608e623bd9efa459cc8bafa0e4efbb0a2dfcdd0e1387ff4181264b" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -3073,9 +3072,9 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9610a524bef4db383cd96b4ec3ec4722eafa72c7242fa89990b74166760583d" +checksum = "0580e0d18019d254c9c349c03ff7b22e564b6f2ada70c045fc39738e144f2139" dependencies = [ "bytes 0.5.6", "curve25519-dalek 3.0.0", @@ -3095,9 +3094,9 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659adf89356e04f65398bb74ee791b269e63da9e41b37f8dc19eaacd12487bfe" +checksum = "50b2ec86a18cbf09d7df440e7786a2409640c774e476e9a3b4d031382c3d7588" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3110,9 +3109,9 @@ dependencies = [ [[package]] name = "libp2p-plaintext" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96dfe26270c91d4ff095030d1fcadd602f3fd84968ebd592829916d0715798a6" +checksum = "6a7b1bdcbe46a3a2159c231601ed29645282653c0a96ce3a2ad8352c9fbe6800" dependencies = [ "bytes 0.5.6", "futures 0.3.8", @@ -3127,13 +3126,13 @@ dependencies = [ [[package]] name = "libp2p-pnet" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b3c2d5d26a9500e959a0e19743897239a6c4be78dadf99b70414301a70c006" +checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599" dependencies = [ "futures 0.3.8", "log", - "pin-project 0.4.23", + "pin-project 1.0.2", "rand 0.7.3", "salsa20", "sha3", @@ -3141,9 +3140,9 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd96c3580fe59a9379ac7906c2f61c7f5ad3b7515362af0e72153a7cc9a45550" +checksum = "620e2950decbf77554b5aed3824f7d0e2c04923f28c70f9bff1a402c47ef6b1e" dependencies = [ "async-trait", "bytes 0.5.6", @@ -3161,9 +3160,9 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.25.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ecee54e85513a7301eb4681b3a6aac5b6d11f60d43097cf7624fd4450d7dfe" +checksum = "fdf5894ee1ee63a38aa58d58a16e3dcf7ede6b59ea7b22302c00c1a41d7aec41" dependencies = [ "either", "futures 0.3.8", @@ -3177,9 +3176,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.25.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc28c9ad6dc43f4c3950411cf808639d90307a076330e7996e5e94e70279bde0" +checksum = "1d2113a7dab2b502c55fe290910cd7399a2aa04fe70a2f5a415a87a1db600c0e" dependencies = [ "async-std", "futures 0.3.8", @@ -3193,9 +3192,9 @@ dependencies = [ [[package]] name = "libp2p-uds" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d821208d4b9af4b293a56dde470edd9f9fac8bb94a51f4f5327cc29a471b3f3" +checksum = "af05fe92c2a3aa320bc82a308ddb7b33bef3b060154c5a4b9fb0b01f15385fc0" dependencies = [ "async-std", "futures 0.3.8", @@ -3205,9 +3204,9 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6ef400b231ba78e866b860445480ca21ee447e03034138c6d57cf2969d6bf4" +checksum = "37cd44ea05a4523f40183f60ab6e6a80e400a5ddfc98b0df1c55edeb85576cd9" dependencies = [ "futures 0.3.8", "js-sys", @@ -3219,9 +3218,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.26.3" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522a877ce42ededf1f5dd011dbc40ea116f1776818f09dacb3d7a206f3ad6305" +checksum = "270c80528e21089ea25b41dd1ab8fd834bdf093ebee422fed3b68699a857a083" dependencies = [ "async-tls", "either", @@ -3239,9 +3238,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be7ac000fa3e42ac09a6e658e48de34ac8ef9fff64a4e6e6b08dcc8f4b0e5f6" +checksum = "36799de9092c35782f080032eddbc8de870f94a0def87cf9f8883efccd5cacf0" dependencies = [ "futures 0.3.8", "libp2p-core", @@ -3895,7 +3894,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -3911,7 +3910,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -3926,7 +3925,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -3951,7 +3950,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -3965,7 +3964,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -3980,7 +3979,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -3996,7 +3995,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4011,7 +4010,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4026,7 +4025,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4047,7 +4046,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4063,7 +4062,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4083,7 +4082,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4100,7 +4099,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4114,7 +4113,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4130,7 +4129,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4144,7 +4143,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4159,7 +4158,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4180,7 +4179,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4196,7 +4195,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4209,7 +4208,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "enumflags2", "frame-support", @@ -4224,7 +4223,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4239,7 +4238,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4258,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4275,7 +4274,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4289,7 +4288,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4311,7 +4310,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4322,7 +4321,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4336,7 +4335,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4354,7 +4353,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4369,7 +4368,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "frame-system", @@ -4386,7 +4385,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4404,7 +4403,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-support", "parity-scale-codec", @@ -4417,7 +4416,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4433,7 +4432,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-benchmarking", "frame-support", @@ -4449,7 +4448,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6721,11 +6720,11 @@ dependencies = [ [[package]] name = "salsa20" -version = "0.6.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f47b10fa80f6969bbbd9c8e7cc998f082979d402a9e10579e2303a87955395" +checksum = "399f290ffc409596022fce5ea5d4138184be4784f2b28c62c59f0d8389059a15" dependencies = [ - "stream-cipher 0.7.1", + "cipher", ] [[package]] @@ -6740,7 +6739,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "async-trait", "derive_more", @@ -6768,7 +6767,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6791,7 +6790,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6808,7 +6807,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6829,7 +6828,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6840,7 +6839,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "atty", "chrono", @@ -6883,7 +6882,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6894,7 +6893,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "fnv", @@ -6928,7 +6927,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "blake2-rfc", "hash-db", @@ -6958,7 +6957,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6969,7 +6968,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "fork-tree", @@ -7014,7 +7013,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "futures 0.3.8", @@ -7038,7 +7037,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7051,7 +7050,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7077,7 +7076,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "sc-client-api", @@ -7091,7 +7090,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "lazy_static", @@ -7120,7 +7119,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "parity-scale-codec", @@ -7136,7 +7135,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "parity-scale-codec", @@ -7151,7 +7150,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "parity-scale-codec", @@ -7169,7 +7168,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "finality-grandpa", @@ -7206,7 +7205,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "finality-grandpa", @@ -7230,7 +7229,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7248,7 +7247,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "async-trait", "derive_more", @@ -7268,7 +7267,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "hash-db", "lazy_static", @@ -7287,7 +7286,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "async-std", "async-trait", @@ -7308,7 +7307,6 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log", - "lru", "nohash-hasher", "parity-scale-codec", "parking_lot 0.11.1", @@ -7341,7 +7339,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7356,7 +7354,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "bytes 0.5.6", "fnv", @@ -7383,7 +7381,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "libp2p", @@ -7396,7 +7394,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7405,7 +7403,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "hash-db", @@ -7439,7 +7437,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "futures 0.3.8", @@ -7463,7 +7461,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7481,7 +7479,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "directories 3.0.1", "exit-future", @@ -7545,7 +7543,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "parity-scale-codec", @@ -7560,7 +7558,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7580,7 +7578,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7601,7 +7599,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7625,7 +7623,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "futures 0.3.8", @@ -7647,7 +7645,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8113,7 +8111,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "sp-core", @@ -8125,7 +8123,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "hash-db", "parity-scale-codec", @@ -8141,7 +8139,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8153,7 +8151,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "serde", @@ -8165,7 +8163,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8178,7 +8176,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-api", @@ -8190,7 +8188,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8201,7 +8199,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-api", @@ -8213,7 +8211,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "log", @@ -8231,7 +8229,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "serde", "serde_json", @@ -8240,7 +8238,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8266,7 +8264,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "merlin", "parity-scale-codec", @@ -8286,7 +8284,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8295,7 +8293,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8307,7 +8305,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "base58", "blake2-rfc", @@ -8351,7 +8349,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8360,7 +8358,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8370,7 +8368,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "environmental", "parity-scale-codec", @@ -8381,7 +8379,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "finality-grandpa", "log", @@ -8398,7 +8396,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8410,7 +8408,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "hash-db", @@ -8434,7 +8432,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "lazy_static", "sp-core", @@ -8445,7 +8443,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "async-trait", "derive_more", @@ -8462,7 +8460,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "serde", @@ -8474,7 +8472,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8485,7 +8483,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "sp-api", "sp-core", @@ -8495,7 +8493,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "backtrace", ] @@ -8503,7 +8501,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "serde", "sp-core", @@ -8512,7 +8510,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "either", "hash256-std-hasher", @@ -8533,7 +8531,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8550,7 +8548,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "Inflector", "proc-macro-crate", @@ -8562,7 +8560,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "serde", "serde_json", @@ -8571,7 +8569,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-api", @@ -8584,7 +8582,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8594,7 +8592,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "hash-db", "log", @@ -8616,12 +8614,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8634,7 +8632,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "sp-core", @@ -8647,7 +8645,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8661,7 +8659,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "log", "parity-scale-codec", @@ -8674,7 +8672,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "derive_more", "futures 0.3.8", @@ -8690,7 +8688,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "hash-db", "memory-db", @@ -8704,7 +8702,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "futures-core", @@ -8716,7 +8714,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8728,7 +8726,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8772,16 +8770,6 @@ dependencies = [ "generic-array 0.14.4", ] -[[package]] -name = "stream-cipher" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c80e15f898d8d8f25db24c253ea615cc14acf418ff307822995814e7d42cfa89" -dependencies = [ - "block-cipher 0.8.0", - "generic-array 0.14.4", -] - [[package]] name = "streamunordered" version = "0.5.1" @@ -8870,7 +8858,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "chrono", "console_error_panic_hook", @@ -8896,7 +8884,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "platforms", ] @@ -8904,7 +8892,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8927,7 +8915,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "async-std", "derive_more", @@ -8941,7 +8929,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8968,7 +8956,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8978,7 +8966,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#0fc832988bef7ab27f6cf2f3040fcb2d3c9b6568" +source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/common/src/claims.rs b/runtime/common/src/claims.rs index 41a19fd87b..102b34fa86 100644 --- a/runtime/common/src/claims.rs +++ b/runtime/common/src/claims.rs @@ -1168,8 +1168,6 @@ mod benchmarking { } benchmarks! { - _ { } - // Benchmark `claim` including `validate_unsigned` logic. claim { let c = MAX_CLAIMS; -- GitLab From 6b7f1f15a7b7efc7cd5c5cce689b199e8329a41f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jan 2021 11:43:21 +0100 Subject: [PATCH 162/203] Bump pin-project from 1.0.2 to 1.0.3 (#2209) Bumps [pin-project](https://github.com/taiki-e/pin-project) from 1.0.2 to 1.0.3. - [Release notes](https://github.com/taiki-e/pin-project/releases) - [Changelog](https://github.com/taiki-e/pin-project/blob/master/CHANGELOG.md) - [Commits](https://github.com/taiki-e/pin-project/compare/v1.0.2...v1.0.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 28 +++++++++++++------------- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7774a4bdb9..db78f07f33 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1862,7 +1862,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.2", + "pin-project 1.0.3", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -2267,7 +2267,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project 1.0.2", + "pin-project 1.0.3", "socket2", "tokio 0.2.21", "tower-service", @@ -2874,7 +2874,7 @@ dependencies = [ "libp2p-yamux", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.2", + "pin-project 1.0.3", "smallvec 1.6.0", "wasm-timer", ] @@ -2899,7 +2899,7 @@ dependencies = [ "multistream-select", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.2", + "pin-project 1.0.3", "prost", "prost-build", "rand 0.7.3", @@ -3132,7 +3132,7 @@ checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599" dependencies = [ "futures 0.3.8", "log", - "pin-project 1.0.2", + "pin-project 1.0.3", "rand 0.7.3", "salsa20", "sha3", @@ -3641,7 +3641,7 @@ dependencies = [ "bytes 0.5.6", "futures 0.3.8", "log", - "pin-project 1.0.2", + "pin-project 1.0.3", "smallvec 1.6.0", "unsigned-varint", ] @@ -4811,11 +4811,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +checksum = "5a83804639aad6ba65345661744708855f9fbcb71176ea8d28d05aeb11d975e7" dependencies = [ - "pin-project-internal 1.0.2", + "pin-project-internal 1.0.3", ] [[package]] @@ -4831,9 +4831,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -5259,7 +5259,7 @@ dependencies = [ "mick-jaeger", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.2", + "pin-project 1.0.3", "polkadot-node-jaeger", "polkadot-node-network-protocol", "polkadot-node-primitives", @@ -5284,7 +5284,7 @@ dependencies = [ "futures-timer 3.0.2", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.2", + "pin-project 1.0.3", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -5310,7 +5310,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.2", + "pin-project 1.0.3", "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-node-subsystem", diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 5384ce08d6..11d956ba38 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -13,7 +13,7 @@ tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" -pin-project = "1.0.2" +pin-project = "1.0.3" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index b85db71f0e..0be519cf2d 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -11,7 +11,7 @@ futures = "0.3.8" futures-timer = "3.0.2" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } -pin-project = "1.0.2" +pin-project = "1.0.3" streamunordered = "0.5.1" thiserror = "1.0.23" tracing = "0.1.22" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index e544df426c..bb666351b3 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -17,7 +17,7 @@ tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" -pin-project = "1.0.2" +pin-project = "1.0.3" polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } -- GitLab From bf8e07e869d500801d678f1eab36e38cade98720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Wed, 6 Jan 2021 11:52:58 +0000 Subject: [PATCH 163/203] runtime: add Babe::next_epoch runtime api method (#2200) * runtime: add Babe::next_epoch runtime api method * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 277 ++++++++++++++++---------------- runtime/kusama/src/lib.rs | 4 + runtime/polkadot/src/lib.rs | 4 + runtime/rococo/src/lib.rs | 4 + runtime/test-runtime/src/lib.rs | 4 + runtime/westend/src/lib.rs | 4 + 6 files changed, 159 insertions(+), 138 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index db78f07f33..c210927cee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1489,7 +1489,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1525,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1548,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1564,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "serde", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "bitflags", "frame-metadata", @@ -1600,8 +1600,9 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ + "Inflector", "frame-support-procedural-tools", "proc-macro2 1.0.24", "quote 1.0.7", @@ -1611,7 +1612,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1623,7 +1624,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1633,7 +1634,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "impl-trait-for-tuples 0.1.3", @@ -1649,7 +1650,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -1663,7 +1664,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-api", @@ -3894,7 +3895,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -3910,7 +3911,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -3925,7 +3926,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3950,7 +3951,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3964,7 +3965,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3979,7 +3980,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -3995,7 +3996,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4010,7 +4011,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4025,7 +4026,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4046,7 +4047,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4062,7 +4063,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4082,7 +4083,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4099,7 +4100,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4113,7 +4114,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4129,7 +4130,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4143,7 +4144,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4158,7 +4159,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4179,7 +4180,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4195,7 +4196,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4208,7 +4209,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "enumflags2", "frame-support", @@ -4223,7 +4224,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4238,7 +4239,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4258,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4274,7 +4275,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4288,7 +4289,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4310,7 +4311,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4321,7 +4322,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4335,7 +4336,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4353,7 +4354,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4368,7 +4369,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "frame-system", @@ -4385,7 +4386,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4403,7 +4404,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-support", "parity-scale-codec", @@ -4416,7 +4417,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4432,7 +4433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-benchmarking", "frame-support", @@ -4448,7 +4449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6739,7 +6740,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "async-trait", "derive_more", @@ -6767,7 +6768,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6790,7 +6791,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6807,7 +6808,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -6828,7 +6829,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6839,7 +6840,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "atty", "chrono", @@ -6882,7 +6883,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6893,7 +6894,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "fnv", @@ -6927,7 +6928,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "blake2-rfc", "hash-db", @@ -6957,7 +6958,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6968,7 +6969,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "fork-tree", @@ -7013,7 +7014,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7037,7 +7038,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7050,7 +7051,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7076,7 +7077,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "sc-client-api", @@ -7090,7 +7091,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "lazy_static", @@ -7119,7 +7120,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "parity-scale-codec", @@ -7135,7 +7136,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "parity-scale-codec", @@ -7150,7 +7151,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "parity-scale-codec", @@ -7168,7 +7169,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "finality-grandpa", @@ -7205,7 +7206,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "finality-grandpa", @@ -7229,7 +7230,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7247,7 +7248,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "async-trait", "derive_more", @@ -7267,7 +7268,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "hash-db", "lazy_static", @@ -7286,7 +7287,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "async-std", "async-trait", @@ -7339,7 +7340,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7354,7 +7355,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "bytes 0.5.6", "fnv", @@ -7381,7 +7382,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "libp2p", @@ -7394,7 +7395,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7403,7 +7404,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "hash-db", @@ -7437,7 +7438,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7461,7 +7462,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7479,7 +7480,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "directories 3.0.1", "exit-future", @@ -7543,7 +7544,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "parity-scale-codec", @@ -7558,7 +7559,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7578,7 +7579,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7599,7 +7600,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7623,7 +7624,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "futures 0.3.8", @@ -7645,7 +7646,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -8111,7 +8112,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "sp-core", @@ -8123,7 +8124,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "hash-db", "parity-scale-codec", @@ -8139,7 +8140,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8151,7 +8152,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "serde", @@ -8163,7 +8164,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8176,7 +8177,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8188,7 +8189,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8199,7 +8200,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8211,7 +8212,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "log", @@ -8229,7 +8230,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "serde", "serde_json", @@ -8238,7 +8239,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8264,7 +8265,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "merlin", "parity-scale-codec", @@ -8284,7 +8285,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8293,7 +8294,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8305,7 +8306,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "base58", "blake2-rfc", @@ -8349,7 +8350,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -8358,7 +8359,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8368,7 +8369,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "environmental", "parity-scale-codec", @@ -8379,7 +8380,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "finality-grandpa", "log", @@ -8396,7 +8397,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", @@ -8408,7 +8409,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "hash-db", @@ -8432,7 +8433,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "lazy_static", "sp-core", @@ -8443,7 +8444,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "async-trait", "derive_more", @@ -8460,7 +8461,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "serde", @@ -8472,7 +8473,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8483,7 +8484,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "sp-api", "sp-core", @@ -8493,7 +8494,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "backtrace", ] @@ -8501,7 +8502,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "serde", "sp-core", @@ -8510,7 +8511,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "either", "hash256-std-hasher", @@ -8531,7 +8532,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8548,7 +8549,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "Inflector", "proc-macro-crate", @@ -8560,7 +8561,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "serde", "serde_json", @@ -8569,7 +8570,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-api", @@ -8582,7 +8583,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8592,7 +8593,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "hash-db", "log", @@ -8614,12 +8615,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8632,7 +8633,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "sp-core", @@ -8645,7 +8646,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8659,7 +8660,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "log", "parity-scale-codec", @@ -8672,7 +8673,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "derive_more", "futures 0.3.8", @@ -8688,7 +8689,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "hash-db", "memory-db", @@ -8702,7 +8703,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "futures-core", @@ -8714,7 +8715,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8726,7 +8727,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec", @@ -8858,7 +8859,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "chrono", "console_error_panic_hook", @@ -8884,7 +8885,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "platforms", ] @@ -8892,7 +8893,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8915,7 +8916,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "async-std", "derive_more", @@ -8929,7 +8930,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8956,7 +8957,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8966,7 +8967,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#a2ee0b414f29ce558155dac5cbf78b40723bcc73" +source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 5b7f266ade..95bd65253e 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1242,6 +1242,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch() } + fn next_epoch() -> babe_primitives::Epoch { + Babe::next_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 4ac6ff0af2..98c6921e69 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -1238,6 +1238,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch() } + fn next_epoch() -> babe_primitives::Epoch { + Babe::next_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index e15b8dcf9f..b75a29309f 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -815,6 +815,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch() } + fn next_epoch() -> babe_primitives::Epoch { + Babe::next_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 5cd104cf6c..58b0df5dff 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -748,6 +748,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch() } + fn next_epoch() -> babe_primitives::Epoch { + Babe::next_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, _authority_id: babe_primitives::AuthorityId, diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 33a4faa92c..72915cc867 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -961,6 +961,10 @@ sp_api::impl_runtime_apis! { Babe::current_epoch() } + fn next_epoch() -> babe_primitives::Epoch { + Babe::next_epoch() + } + fn generate_key_ownership_proof( _slot_number: babe_primitives::SlotNumber, authority_id: babe_primitives::AuthorityId, -- GitLab From 0253be899c116a3f1f423adb5f592b527ec9b177 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jan 2021 13:51:25 +0100 Subject: [PATCH 164/203] Bump trie-db from 0.22.1 to 0.22.2 (#2208) Bumps [trie-db](https://github.com/paritytech/trie) from 0.22.1 to 0.22.2. - [Release notes](https://github.com/paritytech/trie/releases) - [Commits](https://github.com/paritytech/trie/compare/trie-db-v0.22.1...trie-db-v0.22.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 6 +++--- runtime/common/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c210927cee..e087f1b74c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9637,12 +9637,12 @@ checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" [[package]] name = "trie-db" -version = "0.22.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e55f7ace33d6237e14137e386f4e1672e2a5c6bbc97fef9f438581a143971f0" +checksum = "5cc176c377eb24d652c9c69c832c832019011b6106182bf84276c66b66d5c9a6" dependencies = [ "hash-db", - "hashbrown 0.8.0", + "hashbrown 0.9.1", "log", "rustc-hex", "smallvec 1.6.0", diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index a98bcfac3f..bb2a1270ce 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -50,7 +50,7 @@ sp-application-crypto = { git = "https://github.com/paritytech/substrate", branc pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } -trie-db = "0.22.1" +trie-db = "0.22.2" serde_json = "1.0.61" libsecp256k1 = "0.3.5" diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index dd3e46be7c..05a45075f0 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -79,7 +79,7 @@ libsecp256k1 = "0.3.5" tiny-keccak = "2.0.2" keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substrate", branch = "master" } sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -trie-db = "0.22.1" +trie-db = "0.22.2" serde_json = "1.0.61" [build-dependencies] -- GitLab From 004dc50d88737dd1ebe526019b6c467d7a27154a Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Wed, 6 Jan 2021 14:25:04 +0100 Subject: [PATCH 165/203] Add metrics timing message passing from OverseerSubsystemContext to Overseer::route_message (#2201) * add timing setup to OverseerSubsystemContext * figure out how to initialize the rng * attach a timer to a portion of the messages traveling to the Overseer This timer only exists / logs a fraction of the time (configurable by `MESSAGE_TIMER_METRIC_CAPTURE_RATE`). When it exists, it tracks the span between the `OverSubsystemContext` receiving the message and its receipt in `Overseer::run`. * propagate message timing to the start of route_message This should be more accurate; it ensures that the timer runs at least as long as that function. As `route_message` is async, it may not actually run for some time after it is called (or ever). * fix failing test * rand_chacha apparently implicitly has getrandom feature * change rng initialization The previous impl using `from_entropy` depends on the `getrandom` crate, which uses the system entropy source, and which does not work on `wasm32-unknown-unknown` because it wants to fall back to a JS implementation which we can't assume exists. This impl depends only on `rand::thread_rng`, which has no documentation stating that it's similarly limited. * remove randomness in favor of a simpler 1 of N procedure This deserves a bit of explanation, as the motivating issue explicitly requested randomness. In short, it's hard to get randomness to compile for `wasm32-unknown-unknown` because that is explicitly intended to be as deterministic as practical. Additionally, even though it would never be used for consensus purposes, it still felt offputting to intentionally introduce randomness into a node's operations. Except, it wasn't really random, either: it was a deterministic PRNG varying only in its state, and getting the state to work right for that target would have required initializing from a constant. Given that it was a deterministic sequence anyway, it seemed much simpler and more explicit to simply select one of each N messages instead of attempting any kind of realistic randomness. * reinstate randomness for better statistical properties This partially reverts commit 0ab8594c328b3f9ce1f696fe405556d4000630e9. `oorandom` is much lighter than the previous `rand`-based implementation, which makes this easier to work with. This implementation gives each subsystem and each child RNG a distinct increment, which should ensure they produce distinct streams of values. --- Cargo.lock | 7 ++ node/overseer/Cargo.toml | 15 +-- node/overseer/src/lib.rs | 253 ++++++++++++++++++++++++++++++++++----- 3 files changed, 239 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e087f1b74c..dd1fe284ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3841,6 +3841,12 @@ dependencies = [ "parking_lot 0.11.1", ] +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + [[package]] name = "opaque-debug" version = "0.2.3" @@ -5337,6 +5343,7 @@ dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "kv-log-macro", + "oorandom", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index dd9ca81d3f..41c114f15d 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -5,17 +5,18 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] +async-trait = "0.1.42" +client = { package = "sc-client-api", git = "https://github.com/paritytech/substrate", branch = "master" } futures = "0.3.8" -tracing = "0.1.22" -tracing-futures = "0.2.4" futures-timer = "3.0.2" -streamunordered = "0.5.1" +oorandom = "11.1.3" +polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../primitives" } +polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } -client = { package = "sc-client-api", git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../subsystem" } -polkadot-node-subsystem-util = { path = "../subsystem-util" } -polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../primitives" } -async-trait = "0.1.42" +streamunordered = "0.5.1" +tracing = "0.1.22" +tracing-futures = "0.2.4" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 687a9ceab2..60e0215d51 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -59,7 +59,7 @@ // yielding false positives #![warn(missing_docs)] -use std::fmt::Debug; +use std::fmt::{self, Debug}; use std::pin::Pin; use std::sync::Arc; use std::task::Poll; @@ -74,6 +74,7 @@ use futures::{ Future, FutureExt, SinkExt, StreamExt, }; use futures_timer::Delay; +use oorandom::Rand32; use streamunordered::{StreamYield, StreamUnordered}; use polkadot_primitives::v1::{Block, BlockNumber, Hash}; @@ -99,6 +100,8 @@ const CHANNEL_CAPACITY: usize = 1024; const STOP_DELAY: u64 = 1; // Target for logs. const LOG_TARGET: &'static str = "overseer"; +// Rate at which messages are timed. +const MESSAGE_TIMER_METRIC_CAPTURE_RATE: f64 = 0.005; /// A type of messages that are sent from [`Subsystem`] to [`Overseer`]. /// @@ -291,6 +294,26 @@ struct SubsystemInstance { name: &'static str, } +type MaybeTimer = Option; + +#[derive(Debug)] +struct MaybeTimed { + timer: MaybeTimer, + t: T, +} + +impl MaybeTimed { + fn into_inner(self) -> T { + self.t + } +} + +impl From for MaybeTimed { + fn from(t: T) -> Self { + Self { timer: None, t } + } +} + /// A context type that is given to the [`Subsystem`] upon spawning. /// It can be used by [`Subsystem`] to communicate with other [`Subsystem`]s /// or to spawn it's [`SubsystemJob`]s. @@ -301,7 +324,82 @@ struct SubsystemInstance { #[derive(Debug)] pub struct OverseerSubsystemContext{ rx: mpsc::Receiver>, - tx: mpsc::Sender, + tx: mpsc::Sender>, + metrics: Metrics, + rng: Rand32, + threshold: u32, +} + +impl OverseerSubsystemContext { + /// Create a new `OverseerSubsystemContext`. + /// + /// `increment` determines the initial increment of the internal RNG. + /// The internal RNG is used to determine which messages are timed. + /// + /// `capture_rate` determines what fraction of messages are timed. Its value is clamped + /// to the range `0.0..=1.0`. + fn new( + rx: mpsc::Receiver>, + tx: mpsc::Sender>, + metrics: Metrics, + increment: u64, + mut capture_rate: f64, + ) -> Self { + let rng = Rand32::new_inc(0, increment); + + if capture_rate < 0.0 { + capture_rate = 0.0; + } else if capture_rate > 1.0 { + capture_rate = 1.0; + } + let threshold = (capture_rate * u32::MAX as f64) as u32; + + OverseerSubsystemContext { rx, tx, metrics, rng, threshold } + } + + /// Create a new `OverseserSubsystemContext` with no metering. + /// + /// Intended for tests. + #[allow(unused)] + fn new_unmetered(rx: mpsc::Receiver>, tx: mpsc::Sender>) -> Self { + let metrics = Metrics::default(); + OverseerSubsystemContext::new(rx, tx, metrics, 0, 0.0) + } + + fn maybe_timed(&mut self, t: T) -> MaybeTimed { + let timer = if self.rng.rand_u32() <= self.threshold { + self.metrics.time_message_hold() + } else { + None + }; + + MaybeTimed { timer, t } + } + + /// Make a standalone function which can construct a `MaybeTimed` wrapper around some `T` + /// without borrowing `self`. + /// + /// This is somewhat more expensive than `self.maybe_timed` because it must clone some stuff. + fn make_maybe_timed(&mut self) -> impl FnMut(T) -> MaybeTimed { + // We don't want to simply clone this RNG because we don't want to duplicate its state. + // It's not ever going to be used for cryptographic purposes, but it's still better to + // keep good habits. + let (seed, increment) = self.rng.state(); + let mut rng = Rand32::new_inc(seed, increment + 1); + + let metrics = self.metrics.clone(); + let threshold = self.threshold; + + move |t| { + let timer = if rng.rand_u32() <= threshold { + metrics.time_message_hold() + } else { + None + }; + + MaybeTimed { timer, t } + } + } } #[async_trait::async_trait] @@ -327,7 +425,7 @@ impl SubsystemContext for OverseerSubsystemContext { async fn spawn(&mut self, name: &'static str, s: Pin + Send>>) -> SubsystemResult<()> { - self.tx.send(ToOverseer::SpawnJob { + self.send_timed(ToOverseer::SpawnJob { name, s, }).await.map_err(Into::into) @@ -336,7 +434,7 @@ impl SubsystemContext for OverseerSubsystemContext { async fn spawn_blocking(&mut self, name: &'static str, s: Pin + Send>>) -> SubsystemResult<()> { - self.tx.send(ToOverseer::SpawnBlockingJob { + self.send_timed(ToOverseer::SpawnBlockingJob { name, s, }).await.map_err(Into::into) @@ -349,25 +447,46 @@ impl SubsystemContext for OverseerSubsystemContext { async fn send_messages(&mut self, msgs: T) where T: IntoIterator + Send, T::IntoIter: Send { - let mut msgs = stream::iter(msgs.into_iter().map(ToOverseer::SubsystemMessage).map(Ok)); - if self.tx.send_all(&mut msgs).await.is_err() { + self.send_all_timed_or_log(msgs).await + } +} + +impl OverseerSubsystemContext { + async fn send_and_log_error(&mut self, msg: ToOverseer) { + if self.send_timed(msg).await.is_err() { tracing::debug!( target: LOG_TARGET, msg_type = std::any::type_name::(), - "Failed to send messages to Overseer", + "Failed to send a message to Overseer", ); - } } -} -impl OverseerSubsystemContext { - async fn send_and_log_error(&mut self, msg: ToOverseer) { - if self.tx.send(msg).await.is_err() { + async fn send_timed(&mut self, msg: ToOverseer) -> Result< + (), + > as futures::Sink>>::Error + > + { + let msg = self.maybe_timed(msg); + self.tx.send(msg).await + } + + async fn send_all_timed_or_log(&mut self, msgs: Msgs) + where + Msgs: IntoIterator + Send, + Msgs::IntoIter: Send, + Msg: Into + Send, + { + let mut maybe_timed = self.make_maybe_timed(); + let mut msgs = stream::iter( + msgs.into_iter() + .map(move |msg| Ok(maybe_timed(ToOverseer::SubsystemMessage(msg.into())))) + ); + if self.tx.send_all(&mut msgs).await.is_err() { tracing::debug!( target: LOG_TARGET, msg_type = std::any::type_name::(), - "Failed to send a message to Overseer", + "Failed to send messages to Overseer", ); } } @@ -480,8 +599,8 @@ pub struct Overseer { /// Here we keep handles to spawned subsystems to be notified when they terminate. running_subsystems: FuturesUnordered>>, - /// Gather running subsystms' outbound streams into one. - running_subsystems_rx: StreamUnordered>, + /// Gather running subsystems' outbound streams into one. + running_subsystems_rx: StreamUnordered>>, /// Events that are sent to the overseer from the outside world events_rx: mpsc::Receiver, @@ -966,6 +1085,7 @@ struct MetricsInner { activated_heads_total: prometheus::Counter, deactivated_heads_total: prometheus::Counter, messages_relayed_total: prometheus::Counter, + message_relay_timing: prometheus::Histogram, } #[derive(Default, Clone)] @@ -989,6 +1109,11 @@ impl Metrics { metrics.messages_relayed_total.inc(); } } + + /// Provide a timer for the duration between receiving a message and passing it to `route_message` + fn time_message_hold(&self) -> MaybeTimer { + self.0.as_ref().map(|metrics| metrics.message_relay_timing.start_timer()) + } } impl metrics::Metrics for Metrics { @@ -1015,11 +1140,39 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + message_relay_timing: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts { + common_opts: prometheus::Opts::new( + "overseer_messages_relay_timing", + "Time spent holding a message in the overseer before passing it to `route_message`", + ), + // guessing at the desired resolution, but we know that messages will time + // out after 0.5 seconds, so the bucket set below seems plausible: + // `0.0001 * (1.6 ^ 18) ~= 0.472`. Prometheus auto-generates a final bucket + // for all values between the final value and `+Inf`, so this should work. + // + // The documented legal range for the inputs are: + // + // - `> 0.0` + // - `> 1.0` + // - `! 0` + buckets: prometheus::exponential_buckets(0.0001, 1.6, 18).expect("inputs are within documented range; qed"), + } + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } } +impl fmt::Debug for Metrics { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str("Metrics {{...}}") + } +} + impl Overseer where S: SpawnNamed, @@ -1136,14 +1289,20 @@ where events_tx: events_tx.clone(), }; + let metrics = ::register(prometheus_registry)?; + let mut running_subsystems_rx = StreamUnordered::new(); let mut running_subsystems = FuturesUnordered::new(); + let mut seed = 0x533d; // arbitrary + let candidate_validation_subsystem = spawn( &mut s, &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.candidate_validation, + &metrics, + &mut seed, )?; let candidate_backing_subsystem = spawn( @@ -1151,6 +1310,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.candidate_backing, + &metrics, + &mut seed, )?; let candidate_selection_subsystem = spawn( @@ -1158,6 +1319,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.candidate_selection, + &metrics, + &mut seed, )?; let statement_distribution_subsystem = spawn( @@ -1165,6 +1328,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.statement_distribution, + &metrics, + &mut seed, )?; let availability_distribution_subsystem = spawn( @@ -1172,6 +1337,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.availability_distribution, + &metrics, + &mut seed, )?; let bitfield_signing_subsystem = spawn( @@ -1179,6 +1346,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.bitfield_signing, + &metrics, + &mut seed, )?; let bitfield_distribution_subsystem = spawn( @@ -1186,6 +1355,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.bitfield_distribution, + &metrics, + &mut seed, )?; let provisioner_subsystem = spawn( @@ -1193,6 +1364,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.provisioner, + &metrics, + &mut seed, )?; let pov_distribution_subsystem = spawn( @@ -1200,6 +1373,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.pov_distribution, + &metrics, + &mut seed, )?; let runtime_api_subsystem = spawn( @@ -1207,6 +1382,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.runtime_api, + &metrics, + &mut seed, )?; let availability_store_subsystem = spawn( @@ -1214,6 +1391,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.availability_store, + &metrics, + &mut seed, )?; let network_bridge_subsystem = spawn( @@ -1221,6 +1400,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.network_bridge, + &metrics, + &mut seed, )?; let chain_api_subsystem = spawn( @@ -1228,6 +1409,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.chain_api, + &metrics, + &mut seed, )?; let collation_generation_subsystem = spawn( @@ -1235,6 +1418,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.collation_generation, + &metrics, + &mut seed, )?; @@ -1243,6 +1428,8 @@ where &mut running_subsystems, &mut running_subsystems_rx, all_subsystems.collator_protocol, + &metrics, + &mut seed, )?; let leaves = leaves @@ -1251,8 +1438,6 @@ where .collect(); let active_leaves = HashMap::new(); - - let metrics = ::register(prometheus_registry)?; let activation_external_listeners = HashMap::new(); let this = Self { @@ -1342,7 +1527,7 @@ where match msg { Event::MsgToSubsystem(msg) => { - self.route_message(msg).await?; + self.route_message(msg.into()).await?; } Event::Stop => { self.stop().await; @@ -1360,14 +1545,17 @@ where } }, msg = self.running_subsystems_rx.next().fuse() => { - let msg = if let Some((StreamYield::Item(msg), _)) = msg { + let MaybeTimed { timer, t: msg } = if let Some((StreamYield::Item(msg), _)) = msg { msg } else { continue }; match msg { - ToOverseer::SubsystemMessage(msg) => self.route_message(msg).await?, + ToOverseer::SubsystemMessage(msg) => { + let msg = MaybeTimed { timer, t: msg }; + self.route_message(msg).await? + }, ToOverseer::SpawnJob { name, s } => { self.spawn_job(name, s); } @@ -1462,7 +1650,8 @@ where } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - async fn route_message(&mut self, msg: AllMessages) -> SubsystemResult<()> { + async fn route_message(&mut self, msg: MaybeTimed) -> SubsystemResult<()> { + let msg = msg.into_inner(); self.metrics.on_message_relayed(); match msg { AllMessages::CandidateValidation(msg) => { @@ -1572,14 +1761,19 @@ where fn spawn( spawner: &mut S, futures: &mut FuturesUnordered>>, - streams: &mut StreamUnordered>, + streams: &mut StreamUnordered>>, s: impl Subsystem>, + metrics: &Metrics, + seed: &mut u64, ) -> SubsystemResult> { let (to_tx, to_rx) = mpsc::channel(CHANNEL_CAPACITY); let (from_tx, from_rx) = mpsc::channel(CHANNEL_CAPACITY); - let ctx = OverseerSubsystemContext { rx: to_rx, tx: from_tx }; + let ctx = OverseerSubsystemContext::new(to_rx, from_tx, metrics.clone(), *seed, MESSAGE_TIMER_METRIC_CAPTURE_RATE); let SpawnedSubsystem { future, name } = s.start(ctx); + // increment the seed now that it's been used, so the next context will have its own distinct RNG + *seed += 1; + let (tx, rx) = oneshot::channel(); let fut = Box::pin(async move { @@ -1827,12 +2021,13 @@ mod tests { fn extract_metrics(registry: &prometheus::Registry) -> HashMap<&'static str, u64> { let gather = registry.gather(); - assert_eq!(gather[0].get_name(), "parachain_activated_heads_total"); - assert_eq!(gather[1].get_name(), "parachain_deactivated_heads_total"); - assert_eq!(gather[2].get_name(), "parachain_messages_relayed_total"); - let activated = gather[0].get_metric()[0].get_counter().get_value() as u64; - let deactivated = gather[1].get_metric()[0].get_counter().get_value() as u64; - let relayed = gather[2].get_metric()[0].get_counter().get_value() as u64; + assert_eq!(gather[0].get_name(), "overseer_messages_relay_timing"); + assert_eq!(gather[1].get_name(), "parachain_activated_heads_total"); + assert_eq!(gather[2].get_name(), "parachain_deactivated_heads_total"); + assert_eq!(gather[3].get_name(), "parachain_messages_relayed_total"); + let activated = gather[1].get_metric()[0].get_counter().get_value() as u64; + let deactivated = gather[2].get_metric()[0].get_counter().get_value() as u64; + let relayed = gather[3].get_metric()[0].get_counter().get_value() as u64; let mut result = HashMap::new(); result.insert("activated", activated); result.insert("deactivated", deactivated); -- GitLab From 00c1ef881382721723e0eb453403f1df5d681937 Mon Sep 17 00:00:00 2001 From: felix <32549900+fevo1971@users.noreply.github.com> Date: Wed, 6 Jan 2021 14:30:15 +0100 Subject: [PATCH 166/203] added new bootnode to chain spec's (#2204) * added new bootnode to chain spec's * remove trailing newline --- node/service/res/kusama.json | 4 ++++ node/service/res/polkadot.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/node/service/res/kusama.json b/node/service/res/kusama.json index 34c2180184..5c33700ec0 100644 --- a/node/service/res/kusama.json +++ b/node/service/res/kusama.json @@ -8,6 +8,10 @@ "/dns/p2p.cc3-3.kusama.network/tcp/30100/p2p/12D3KooWEGHw84b4hfvXEfyq4XWEmWCbRGuHMHQMpby4BAtZ4xJf", "/dns/p2p.cc3-4.kusama.network/tcp/30100/p2p/12D3KooWF9KDPRMN8WpeyXhEeURZGP8Dmo7go1tDqi7hTYpxV9uW", "/dns/p2p.cc3-5.kusama.network/tcp/30100/p2p/12D3KooWDiwMeqzvgWNreS9sV1HW3pZv1PA7QGA7HUCo7FzN5gcA", + "/dns/p2p.0.kusama.network/tcp/30333/p2p/12D3KooWJDohybWd7FvRmyeGjgi56yy36mRWLHmgRprFdUadUt6b", + "/dns/p2p.1.kusama.network/tcp/30333/p2p/12D3KooWC7dnTvDY97afoLrvQSBrh7dDFEkWniTwyxAsBjfpaZk6", + "/dns/p2p.2.kusama.network/tcp/30333/p2p/12D3KooWGGK6Mj1pWF1bk4R1HjBQ4E7bgkfSJ5gmEfVRuwRZapT5", + "/dns/p2p.3.kusama.network/tcp/30333/p2p/12D3KooWRp4qgusMiUobJ9Uw1XAwtsokqx9YwgHDv5wQXjxqETji", "/dns/kusama-bootnode-0.paritytech.net/tcp/30333/p2p/12D3KooWSueCPH3puP2PcvqPJdNaDNF3jMZjtJtDiSy35pWrbt5h", "/dns/kusama-bootnode-0.paritytech.net/tcp/30334/ws/p2p/12D3KooWSueCPH3puP2PcvqPJdNaDNF3jMZjtJtDiSy35pWrbt5h", "/dns/kusama-bootnode-1.paritytech.net/tcp/30333/p2p/12D3KooWQKqane1SqWJNWMQkbia9qiMWXkcHtAdfW5eVF8hbwEDw" diff --git a/node/service/res/polkadot.json b/node/service/res/polkadot.json index d26d66badd..7422fa635d 100644 --- a/node/service/res/polkadot.json +++ b/node/service/res/polkadot.json @@ -9,6 +9,10 @@ "/dns/p2p.cc1-3.polkadot.network/tcp/30100/p2p/12D3KooWJ4eyPowiVcPU46pXuE2cDsiAmuBKXnFcFPapm4xKFdMJ", "/dns/p2p.cc1-4.polkadot.network/tcp/30100/p2p/12D3KooWNMUcqwSj38oEq1zHeGnWKmMvrCFnpMftw7JzjAtRj2rU", "/dns/p2p.cc1-5.polkadot.network/tcp/30100/p2p/12D3KooWDs6LnpmWDWgZyGtcLVr3E75CoBxzg1YZUPL5Bb1zz6fM", + "/dns/p2p.0.polkadot.network/tcp/30333/p2p/12D3KooWHsvEicXjWWraktbZ4MQBizuyADQtuEGr3NbDvtm5rFA5", + "/dns/p2p.1.polkadot.network/tcp/30333/p2p/12D3KooWQz2q2UWVCiy9cFX1hHYEmhSKQB2hjEZCccScHLGUPjcc", + "/dns/p2p.2.polkadot.network/tcp/30333/p2p/12D3KooWNHxjYbDLLbDNZ2tq1kXgif5MSiLTUWJKcDdedKu4KaG8", + "/dns/p2p.3.polkadot.network/tcp/30333/p2p/12D3KooWGJQysxrQcSvUWWNw88RkqYvJhH3ZcDpWJ8zrXKhLP5Vr", "/dns/cc1-0.parity.tech/tcp/30333/p2p/12D3KooWSz8r2WyCdsfWHgPyvD8GKQdJ1UAiRmrcrs8sQB3fe2KU", "/dns/cc1-1.parity.tech/tcp/30333/p2p/12D3KooWFN2mhgpkJsDBuNuE5427AcDrsib8EoqGMZmkxWwx3Md4" ], -- GitLab From 107673eb96d8de5eb36f2b61b96fc9c3a831c968 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 6 Jan 2021 18:11:38 +0100 Subject: [PATCH 167/203] Make order consistent (#2215) --- primitives/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 08fbfd999d..3061bb982c 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -14,7 +14,7 @@ sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "maste sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-version = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-staking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -- GitLab From 51d553388319ae9df507e015081abfa52033605f Mon Sep 17 00:00:00 2001 From: Denis Pisarev Date: Wed, 6 Jan 2021 18:51:25 +0100 Subject: [PATCH 168/203] CI: remove squash and fix buildah push (#2212) --- .gitlab-ci.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index db2b6d23d8..0dac0d005f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -244,19 +244,16 @@ publish-docker: ( echo "no docker credentials provided"; exit 1 ) - cd ./artifacts - buildah bud - --squash - --format=docker - --build-arg VCS_REF="${CI_COMMIT_SHA}" - --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" - --tag "$IMAGE_NAME:$VERSION" - --tag "$IMAGE_NAME:$EXTRATAG" . + --format=docker + --build-arg VCS_REF="${CI_COMMIT_SHA}" + --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" + --tag "$IMAGE_NAME:$VERSION" + --tag "$IMAGE_NAME:$EXTRATAG" . - echo "$Docker_Hub_Pass_Parity" | buildah login --username "$Docker_Hub_User_Parity" --password-stdin docker.io - buildah info - - buildah push - --format=v2s2 - "$IMAGE_NAME:$VERSION" - "$IMAGE_NAME:$EXTRATAG" + - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" + - buildah push --format=v2s2 "$IMAGE_NAME:$EXTRATAG" after_script: - buildah logout "$IMAGE_NAME" # only VERSION information is needed for the deployment -- GitLab From e9866d55d650cabfd139f9013ae95023f65c8946 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 6 Jan 2021 20:38:25 +0100 Subject: [PATCH 169/203] upgrade a few dependencies (companion for 7831) (#2205) * upgrade a few dependencies * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 635 ++++++++++++++++------------------ node/core/av-store/Cargo.toml | 6 +- node/test/service/Cargo.toml | 2 +- parachain/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 4 +- 5 files changed, 306 insertions(+), 343 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dd1fe284ad..c5b613bb1a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,12 +79,6 @@ dependencies = [ "opaque-debug 0.2.3", ] -[[package]] -name = "ahash" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" - [[package]] name = "ahash" version = "0.4.6" @@ -346,7 +340,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281" dependencies = [ - "autocfg 1.0.0", + "autocfg", ] [[package]] @@ -366,12 +360,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" - [[package]] name = "autocfg" version = "1.0.0" @@ -964,7 +952,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 1.0.0", + "autocfg", "cfg-if 0.1.10", "crossbeam-utils 0.7.2", "lazy_static", @@ -990,7 +978,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 1.0.0", + "autocfg", "cfg-if 0.1.10", "lazy_static", ] @@ -1001,7 +989,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" dependencies = [ - "autocfg 1.0.0", + "autocfg", "cfg-if 1.0.0", "lazy_static", ] @@ -1451,12 +1439,12 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c" +checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ "byteorder", - "rand 0.7.3", + "rand 0.8.1", "rustc-hex", "static_assertions", ] @@ -1489,7 +1477,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", ] @@ -1507,7 +1495,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -1525,7 +1513,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "Inflector", "chrono", @@ -1548,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -1564,7 +1552,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "serde", @@ -1575,12 +1563,12 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "bitflags", "frame-metadata", "frame-support-procedural", - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "log", "once_cell", "parity-scale-codec", @@ -1600,7 +1588,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1612,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1624,7 +1612,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1634,10 +1622,10 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "serde", "sp-core", @@ -1650,7 +1638,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -1664,7 +1652,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-api", @@ -1937,7 +1925,20 @@ checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" dependencies = [ "cfg-if 0.1.10", "libc", - "wasi", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4060f4657be78b8e766215b02b18a2e862d83745545de804638e2b545e81aee6" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -2065,23 +2066,13 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9b7860757ce258c89fd48d28b68c41713e597a7b09e793f6c6a6e2ea37c827" -dependencies = [ - "ahash 0.3.8", - "autocfg 1.0.0", -] - [[package]] name = "hashbrown" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" dependencies = [ - "ahash 0.4.6", + "ahash", ] [[package]] @@ -2405,8 +2396,8 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" dependencies = [ - "autocfg 1.0.0", - "hashbrown 0.9.1", + "autocfg", + "hashbrown", "serde", ] @@ -2415,6 +2406,11 @@ name = "instant" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" +dependencies = [ + "js-sys", + "wasm-bindgen", + "web-sys", +] [[package]] name = "integer-encoding" @@ -2748,9 +2744,9 @@ dependencies = [ [[package]] name = "kvdb" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0315ef2f688e33844400b31f11c263f2b3dc21d8b9355c6891c5f185fae43f9a" +checksum = "92312348daade49976a6dc59263ad39ed54f840aacb5664874f7c9aa16e5f848" dependencies = [ "parity-util-mem", "smallvec 1.6.0", @@ -2758,20 +2754,20 @@ dependencies = [ [[package]] name = "kvdb-memorydb" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73de822b260a3bdfb889dbbb65bb2d473eee2253973d6fa4a5d149a2a4a7c66e" +checksum = "986052a8d16c692eaebe775391f9a3ac26714f3907132658500b601dec94c8c2" dependencies = [ "kvdb", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", ] [[package]] name = "kvdb-rocksdb" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44947dd392f09475af614d740fe0320b66d01cb5b977f664bbbb5e45a70ea4c1" +checksum = "8d92c36be64baba5ea549116ff0d7ffd445456a7be8aaee21ec05882b980cd11" dependencies = [ "fs-swap", "kvdb", @@ -2779,7 +2775,7 @@ dependencies = [ "num_cpus", "owning_ref", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "regex", "rocksdb", "smallvec 1.6.0", @@ -2787,9 +2783,9 @@ dependencies = [ [[package]] name = "kvdb-web" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2701a1369d6ea4f1b9f606db46e5e2a4a8e47f22530a07823d653f85ab1f6c34" +checksum = "f7bfe11b3202691673766b1224c432996f6b8047db17ceb743675bef3404e714" dependencies = [ "futures 0.3.8", "js-sys", @@ -2797,7 +2793,8 @@ dependencies = [ "kvdb-memorydb", "log", "parity-util-mem", - "send_wrapper 0.3.0", + "parking_lot 0.11.1", + "send_wrapper 0.5.0", "wasm-bindgen", "web-sys", ] @@ -3026,7 +3023,7 @@ dependencies = [ "rand 0.7.3", "sha2 0.9.1", "smallvec 1.6.0", - "uint", + "uint 0.8.3", "unsigned-varint", "void", "wasm-timer", @@ -3361,7 +3358,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be716eb6878ca2263eb5d00a781aa13264a794f519fe6af4fbb2668b2d5441c0" dependencies = [ - "hashbrown 0.9.1", + "hashbrown", ] [[package]] @@ -3437,17 +3434,17 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" dependencies = [ - "autocfg 1.0.0", + "autocfg", ] [[package]] name = "memory-db" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0777fbb396f666701d939e9b3876c18ada6b3581257d88631f2590bc366d8ebe" +checksum = "6cbd2a22f201c03cc1706a727842490abfea17b7b53260358239828208daba3c" dependencies = [ "hash-db", - "hashbrown 0.8.0", + "hashbrown", "parity-util-mem", ] @@ -3749,7 +3746,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 1.0.0", + "autocfg", "num-integer", "num-traits 0.2.12", ] @@ -3760,7 +3757,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ - "autocfg 1.0.0", + "autocfg", "num-traits 0.2.12", ] @@ -3770,7 +3767,7 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ - "autocfg 1.0.0", + "autocfg", "num-traits 0.2.12", ] @@ -3780,7 +3777,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg 1.0.0", + "autocfg", "num-bigint", "num-integer", "num-traits 0.2.12", @@ -3801,7 +3798,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ - "autocfg 1.0.0", + "autocfg", "libm", ] @@ -3901,7 +3898,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -3917,11 +3914,11 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "sp-authorship", "sp-inherents", @@ -3932,7 +3929,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -3957,7 +3954,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -3971,7 +3968,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -3986,7 +3983,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4002,7 +3999,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4017,7 +4014,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4032,7 +4029,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4053,7 +4050,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4069,7 +4066,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4089,7 +4086,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4106,7 +4103,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4120,7 +4117,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4136,7 +4133,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4150,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4165,7 +4162,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4186,7 +4183,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4202,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4215,7 +4212,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "enumflags2", "frame-support", @@ -4230,7 +4227,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4245,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4265,7 +4262,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4281,7 +4278,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4295,7 +4292,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4317,7 +4314,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4328,7 +4325,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4342,12 +4339,12 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "serde", "sp-inherents", @@ -4360,7 +4357,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4375,7 +4372,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "frame-system", @@ -4392,7 +4389,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4410,7 +4407,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-support", "parity-scale-codec", @@ -4423,12 +4420,12 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "pallet-balances", "parity-scale-codec", "serde", @@ -4439,7 +4436,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-benchmarking", "frame-support", @@ -4455,7 +4452,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4551,16 +4548,16 @@ dependencies = [ [[package]] name = "parity-util-mem" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297ff91fa36aec49ce183484b102f6b75b46776822bd81525bfc4cc9b0dd0f5c" +checksum = "8f17f15cb05897127bf36a240085a1f0bbef7bce3024849eccf7f93f6171bc27" dependencies = [ - "cfg-if 0.1.10", - "hashbrown 0.8.0", - "impl-trait-for-tuples 0.1.3", + "cfg-if 1.0.0", + "hashbrown", + "impl-trait-for-tuples 0.2.0", "jemallocator", "parity-util-mem-derive", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "primitive-types", "smallvec 1.6.0", "winapi 0.3.9", @@ -5603,8 +5600,8 @@ dependencies = [ "pallet-vesting", "parity-scale-codec", "polkadot-primitives", - "rand 0.7.3", - "rand_chacha 0.2.2", + "rand 0.8.1", + "rand_chacha 0.3.0", "rustc-hex", "sc-keystore", "serde", @@ -5844,7 +5841,7 @@ dependencies = [ "polkadot-runtime-parachains", "polkadot-service", "polkadot-test-runtime", - "rand 0.7.3", + "rand 0.8.1", "sc-authority-discovery", "sc-chain-spec", "sc-cli", @@ -5982,14 +5979,14 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55c21c64d0eaa4d7ed885d959ef2d62d9e488c27c0e02d9aa5ce6c877b7d5f8" +checksum = "b3824ae2c5e27160113b9e029a10ec9e3f0237bad8029f69c7724393c9fdefd8" dependencies = [ "fixed-hash", "impl-codec", "impl-serde", - "uint", + "uint 0.9.0", ] [[package]] @@ -6201,47 +6198,30 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg 0.1.2", - "rand_xorshift", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.14", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", - "rand_pcg 0.2.1", + "rand_pcg", ] [[package]] -name = "rand_chacha" -version = "0.1.1" +name = "rand" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +checksum = "c24fcd450d3fa2b592732565aa4f17a27a61c65ece4726353e000939b0edee34" dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", + "libc", + "rand_chacha 0.3.0", + "rand_core 0.6.1", + "rand_hc 0.3.0", ] [[package]] @@ -6254,6 +6234,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.1", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -6275,25 +6265,25 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.14", ] [[package]] -name = "rand_distr" -version = "0.2.2" +name = "rand_core" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2" +checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" dependencies = [ - "rand 0.7.3", + "getrandom 0.2.1", ] [[package]] -name = "rand_hc" -version = "0.1.0" +name = "rand_distr" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2" dependencies = [ - "rand_core 0.3.1", + "rand 0.7.3", ] [[package]] @@ -6306,48 +6296,12 @@ dependencies = [ ] [[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.9", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi 0.0.3", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "wasm-bindgen", - "winapi 0.3.9", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" +name = "rand_hc" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", + "rand_core 0.6.1", ] [[package]] @@ -6359,15 +6313,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "raw-cpuid" version = "7.0.3" @@ -6391,7 +6336,7 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" dependencies = [ - "autocfg 1.0.0", + "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -6431,7 +6376,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" dependencies = [ - "getrandom", + "getrandom 0.1.14", "redox_syscall", "rust-argon2", ] @@ -6747,7 +6692,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "async-trait", "derive_more", @@ -6775,7 +6720,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6798,7 +6743,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6815,9 +6760,9 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "sc-chain-spec-derive", "sc-consensus-babe", @@ -6836,7 +6781,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6847,7 +6792,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "atty", "chrono", @@ -6890,7 +6835,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6901,7 +6846,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "fnv", @@ -6911,7 +6856,7 @@ dependencies = [ "lazy_static", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-executor", "sp-api", "sp-blockchain", @@ -6935,7 +6880,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "blake2-rfc", "hash-db", @@ -6947,7 +6892,7 @@ dependencies = [ "parity-db", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-client-api", "sc-executor", "sc-state-db", @@ -6965,7 +6910,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6976,7 +6921,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "fork-tree", @@ -6988,7 +6933,7 @@ dependencies = [ "num-rational", "num-traits 0.2.12", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "pdqselect", "rand 0.7.3", "retain_mut", @@ -7021,7 +6966,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "futures 0.3.8", @@ -7045,11 +6990,11 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "fork-tree", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-client-api", "sp-blockchain", "sp-runtime", @@ -7058,13 +7003,13 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-client-api", "sc-telemetry", "sp-api", @@ -7084,7 +7029,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "sc-client-api", @@ -7098,7 +7043,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "lazy_static", @@ -7106,7 +7051,7 @@ dependencies = [ "log", "parity-scale-codec", "parity-wasm 0.41.0", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-executor-common", "sc-executor-wasmi", "sc-executor-wasmtime", @@ -7127,7 +7072,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "parity-scale-codec", @@ -7143,7 +7088,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "parity-scale-codec", @@ -7158,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "parity-scale-codec", @@ -7176,7 +7121,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "finality-grandpa", @@ -7185,7 +7130,7 @@ dependencies = [ "futures-timer 3.0.2", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "pin-project 0.4.23", "rand 0.7.3", "sc-block-builder", @@ -7213,7 +7158,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "finality-grandpa", @@ -7237,7 +7182,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7255,7 +7200,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "async-trait", "derive_more", @@ -7263,7 +7208,7 @@ dependencies = [ "futures-util", "hex", "merlin", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "rand 0.7.3", "serde_json", "sp-application-crypto", @@ -7275,12 +7220,12 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "hash-db", "lazy_static", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-client-api", "sc-executor", "sp-api", @@ -7294,7 +7239,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "async-std", "async-trait", @@ -7347,7 +7292,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7362,7 +7307,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "bytes 0.5.6", "fnv", @@ -7373,7 +7318,7 @@ dependencies = [ "log", "num_cpus", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "rand 0.7.3", "sc-client-api", "sc-keystore", @@ -7389,7 +7334,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "libp2p", @@ -7402,7 +7347,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7411,7 +7356,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "hash-db", @@ -7419,7 +7364,7 @@ dependencies = [ "jsonrpc-pubsub", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", "sc-executor", @@ -7445,7 +7390,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "futures 0.3.8", @@ -7455,7 +7400,7 @@ dependencies = [ "jsonrpc-pubsub", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "serde", "serde_json", "sp-chain-spec", @@ -7469,7 +7414,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7487,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "directories 3.0.1", "exit-future", @@ -7501,7 +7446,7 @@ dependencies = [ "log", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "pin-project 0.4.23", "rand 0.7.3", "sc-block-builder", @@ -7551,13 +7496,13 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "parity-scale-codec", "parity-util-mem", "parity-util-mem-derive", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-client-api", "sp-core", "thiserror", @@ -7566,7 +7511,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7586,13 +7531,13 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "libp2p", "log", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "pin-project 0.4.23", "rand 0.7.3", "serde", @@ -7607,14 +7552,14 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "ansi_term 0.12.1", "erased-serde", "lazy_static", "log", "once_cell", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "regex", "rustc-hash", "sc-telemetry", @@ -7631,14 +7576,14 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "futures 0.3.8", "linked-hash-map", "log", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "retain_mut", "serde", "sp-blockchain", @@ -7653,7 +7598,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7661,7 +7606,7 @@ dependencies = [ "log", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sc-client-api", "sc-transaction-graph", "sp-api", @@ -7695,7 +7640,7 @@ dependencies = [ "arrayref", "arrayvec 0.5.2", "curve25519-dalek 2.1.0", - "getrandom", + "getrandom 0.1.14", "merlin", "rand 0.7.3", "rand_core 0.5.1", @@ -7825,15 +7770,15 @@ dependencies = [ [[package]] name = "send_wrapper" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686ef91cf020ad8d4aca9a7047641fd6add626b7b89e14546c2b6a76781cf822" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" [[package]] name = "send_wrapper" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" +checksum = "930c0acf610d3fdb5e2ab6213019aaa04e227ebe9547b0649ba599b16d788bd7" [[package]] name = "separator" @@ -8119,7 +8064,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "sp-core", @@ -8131,7 +8076,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "hash-db", "parity-scale-codec", @@ -8147,7 +8092,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8159,7 +8104,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "serde", @@ -8171,7 +8116,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8184,7 +8129,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-api", @@ -8196,7 +8141,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8207,7 +8152,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-api", @@ -8219,13 +8164,13 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "log", "lru", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sp-api", "sp-consensus", "sp-database", @@ -8237,7 +8182,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "serde", "serde_json", @@ -8246,14 +8191,14 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "libp2p", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "serde", "sp-api", "sp-core", @@ -8272,7 +8217,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "merlin", "parity-scale-codec", @@ -8292,7 +8237,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8301,7 +8246,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8313,7 +8258,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "base58", "blake2-rfc", @@ -8332,7 +8277,7 @@ dependencies = [ "num-traits 0.2.12", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "primitive-types", "rand 0.7.3", "regex", @@ -8357,16 +8302,16 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "kvdb", - "parking_lot 0.10.2", + "parking_lot 0.11.1", ] [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8376,7 +8321,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "environmental", "parity-scale-codec", @@ -8387,7 +8332,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "finality-grandpa", "log", @@ -8404,10 +8349,10 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sp-core", "sp-std", "thiserror", @@ -8416,14 +8361,14 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "hash-db", "libsecp256k1", "log", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "sp-core", "sp-externalities", "sp-keystore", @@ -8440,7 +8385,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "lazy_static", "sp-core", @@ -8451,14 +8396,14 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "async-trait", "derive_more", "futures 0.3.8", "merlin", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "schnorrkel", "serde", "sp-core", @@ -8468,7 +8413,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "serde", @@ -8480,7 +8425,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8491,7 +8436,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "sp-api", "sp-core", @@ -8501,7 +8446,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "backtrace", ] @@ -8509,7 +8454,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "serde", "sp-core", @@ -8518,11 +8463,11 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "either", "hash256-std-hasher", - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "log", "parity-scale-codec", "parity-util-mem", @@ -8539,9 +8484,9 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "primitive-types", "sp-externalities", @@ -8556,7 +8501,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "Inflector", "proc-macro-crate", @@ -8568,7 +8513,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "serde", "serde_json", @@ -8577,7 +8522,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-api", @@ -8590,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8600,13 +8545,13 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "hash-db", "log", "num-traits 0.2.12", "parity-scale-codec", - "parking_lot 0.10.2", + "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.6.0", "sp-core", @@ -8622,12 +8567,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8640,7 +8585,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "sp-core", @@ -8653,9 +8598,9 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "sp-api", "sp-inherents", @@ -8667,7 +8612,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "log", "parity-scale-codec", @@ -8680,7 +8625,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "derive_more", "futures 0.3.8", @@ -8696,7 +8641,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "hash-db", "memory-db", @@ -8710,7 +8655,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "futures-core", @@ -8722,7 +8667,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8734,9 +8679,9 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ - "impl-trait-for-tuples 0.1.3", + "impl-trait-for-tuples 0.2.0", "parity-scale-codec", "sp-std", "wasmi", @@ -8866,7 +8811,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "chrono", "console_error_panic_hook", @@ -8874,11 +8819,11 @@ dependencies = [ "futures 0.1.29", "futures 0.3.8", "futures-timer 3.0.2", + "getrandom 0.2.1", "js-sys", "kvdb-web", "libp2p-wasm-ext", "log", - "rand 0.6.5", "rand 0.7.3", "sc-chain-spec", "sc-informant", @@ -8892,7 +8837,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "platforms", ] @@ -8900,7 +8845,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8923,7 +8868,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "async-std", "derive_more", @@ -8937,7 +8882,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8964,7 +8909,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8974,7 +8919,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#89275433863532d797318b75bb5321af098fea7c" +source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -9649,7 +9594,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc176c377eb24d652c9c69c832c832019011b6106182bf84276c66b66d5c9a6" dependencies = [ "hash-db", - "hashbrown 0.9.1", + "hashbrown", "log", "rustc-hex", "smallvec 1.6.0", @@ -9703,6 +9648,18 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "uint" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11fe9a9348741cf134085ad57c249508345fe16411b3d7fb4ff2da2f1d6382e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "unicase" version = "2.6.0" @@ -9888,6 +9845,12 @@ 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 = "wasm-bindgen" version = "0.2.69" @@ -10192,9 +10155,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.41" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863539788676619aac1a23e2df3655e96b32b0e05eb72ca34ba045ad573c625d" +checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 607b851d23..4dee43dc62 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -7,8 +7,8 @@ edition = "2018" [dependencies] futures = "0.3.8" futures-timer = "3.0.2" -kvdb = "0.7.0" -kvdb-rocksdb = "0.9.1" +kvdb = "0.8.0" +kvdb-rocksdb = "0.10.0" thiserror = "1.0.23" tracing = "0.1.22" tracing-futures = "0.2.4" @@ -26,7 +26,7 @@ sc-service = { git = "https://github.com/paritytech/substrate", branch = "master log = "0.4.11" env_logger = "0.8.2" assert_matches = "1.4.0" -kvdb-memorydb = "0.7.0" +kvdb-memorydb = "0.8.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index cf13d08c08..e2cad28022 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -10,7 +10,7 @@ futures01 = { package = "futures", version = "0.1.29" } hex = "0.4.2" tracing = "0.1.22" tracing-futures = "0.2.4" -rand = "0.7.3" +rand = "0.8.1" tempfile = "3.1.0" # Polkadot dependencies diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index 34ef958bd3..837284e945 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -23,7 +23,7 @@ serde = { version = "1.0.117", default-features = false, features = [ "derive" ] sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true } -parking_lot = { version = "0.11.0", optional = true } +parking_lot = { version = "0.11.1", optional = true } log = { version = "0.4.11", optional = true } futures = { version = "0.3.8", optional = true } diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 655da89065..a75413a9bb 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -39,8 +39,8 @@ xcm-executor = { package = "xcm-executor", path = "../../xcm/xcm-executor", defa primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } libsecp256k1 = { version = "0.3.5", default-features = false, optional = true } -rand = { version = "0.7.3", default-features = false } -rand_chacha = { version = "0.2.2", default-features = false } +rand = { version = "0.8.1", default-features = false } +rand_chacha = { version = "0.3.0", default-features = false } [dev-dependencies] futures = "0.3.8" -- GitLab From 6f221717bab7bd73a02c8b38a051ef353e746976 Mon Sep 17 00:00:00 2001 From: felix <32549900+fevo1971@users.noreply.github.com> Date: Thu, 7 Jan 2021 11:59:02 +0100 Subject: [PATCH 170/203] 4 additional bootnodes added (#2213) --- node/service/res/kusama.json | 2 ++ node/service/res/polkadot.json | 2 ++ 2 files changed, 4 insertions(+) diff --git a/node/service/res/kusama.json b/node/service/res/kusama.json index 5c33700ec0..ba13740f72 100644 --- a/node/service/res/kusama.json +++ b/node/service/res/kusama.json @@ -12,6 +12,8 @@ "/dns/p2p.1.kusama.network/tcp/30333/p2p/12D3KooWC7dnTvDY97afoLrvQSBrh7dDFEkWniTwyxAsBjfpaZk6", "/dns/p2p.2.kusama.network/tcp/30333/p2p/12D3KooWGGK6Mj1pWF1bk4R1HjBQ4E7bgkfSJ5gmEfVRuwRZapT5", "/dns/p2p.3.kusama.network/tcp/30333/p2p/12D3KooWRp4qgusMiUobJ9Uw1XAwtsokqx9YwgHDv5wQXjxqETji", + "/dns/p2p.4.kusama.network/tcp/30333/p2p/12D3KooWMVXPbqWR1erNKRSWDVPjcAQ9XtxqLTVzV4ccox9Y8KNL", + "/dns/p2p.5.kusama.network/tcp/30333/p2p/12D3KooWBsJKGJFuv83ixryzMsUS53A8JzEVeTA8PGi4U6T2dnif", "/dns/kusama-bootnode-0.paritytech.net/tcp/30333/p2p/12D3KooWSueCPH3puP2PcvqPJdNaDNF3jMZjtJtDiSy35pWrbt5h", "/dns/kusama-bootnode-0.paritytech.net/tcp/30334/ws/p2p/12D3KooWSueCPH3puP2PcvqPJdNaDNF3jMZjtJtDiSy35pWrbt5h", "/dns/kusama-bootnode-1.paritytech.net/tcp/30333/p2p/12D3KooWQKqane1SqWJNWMQkbia9qiMWXkcHtAdfW5eVF8hbwEDw" diff --git a/node/service/res/polkadot.json b/node/service/res/polkadot.json index 7422fa635d..fd8d989d7a 100644 --- a/node/service/res/polkadot.json +++ b/node/service/res/polkadot.json @@ -13,6 +13,8 @@ "/dns/p2p.1.polkadot.network/tcp/30333/p2p/12D3KooWQz2q2UWVCiy9cFX1hHYEmhSKQB2hjEZCccScHLGUPjcc", "/dns/p2p.2.polkadot.network/tcp/30333/p2p/12D3KooWNHxjYbDLLbDNZ2tq1kXgif5MSiLTUWJKcDdedKu4KaG8", "/dns/p2p.3.polkadot.network/tcp/30333/p2p/12D3KooWGJQysxrQcSvUWWNw88RkqYvJhH3ZcDpWJ8zrXKhLP5Vr", + "/dns/p2p.4.polkadot.network/tcp/30333/p2p/12D3KooWKer8bYqpYjwurVABu13mkELpX2X7mSpEicpjShLeg7D6", + "/dns/p2p.5.polkadot.network/tcp/30333/p2p/12D3KooWSRjL9LcEQd5u2fQTbyLxTEHq1tUFgQ6amXSp8Eu7TfKP", "/dns/cc1-0.parity.tech/tcp/30333/p2p/12D3KooWSz8r2WyCdsfWHgPyvD8GKQdJ1UAiRmrcrs8sQB3fe2KU", "/dns/cc1-1.parity.tech/tcp/30333/p2p/12D3KooWFN2mhgpkJsDBuNuE5427AcDrsib8EoqGMZmkxWwx3Md4" ], -- GitLab From c59408004db39c25f078e3e1961e640159b1bdda Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Thu, 7 Jan 2021 15:25:09 +0100 Subject: [PATCH 171/203] Companion PR for refactoring priority groups (#2095) * Companion PR for refactoring priority groups * Fix non reserved node * Try fix tests * Missing import * Fix warning * Change protocols order * Fix test * Renames * Update syn dependency to make it compile again after merging master * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 370 +++++++++--------- node/network/bridge/src/lib.rs | 37 +- .../network/bridge/src/validator_discovery.rs | 49 ++- node/service/src/lib.rs | 7 +- 4 files changed, 249 insertions(+), 214 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c5b613bb1a..79628c21ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -170,7 +170,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d0864d84b8e07b145449be9a8537db86bf9de5ce03b913214694643b4743502" dependencies = [ "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -331,7 +331,7 @@ checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -1036,7 +1036,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fbaabec2c953050352311293be5c6aba8e141ba19d6811862b232d6fd020484" dependencies = [ "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -1090,7 +1090,7 @@ checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -1190,7 +1190,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -1254,7 +1254,7 @@ checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -1362,7 +1362,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "synstructure", ] @@ -1477,7 +1477,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", ] @@ -1495,7 +1495,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -1513,7 +1513,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "Inflector", "chrono", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -1552,7 +1552,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "serde", @@ -1563,7 +1563,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "bitflags", "frame-metadata", @@ -1588,41 +1588,41 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "Inflector", "frame-support-procedural-tools", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "frame-support-procedural-tools" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "frame-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "impl-trait-for-tuples 0.2.0", @@ -1638,7 +1638,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -1652,7 +1652,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-api", @@ -1803,7 +1803,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -2370,7 +2370,7 @@ checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -2381,7 +2381,7 @@ checksum = "6f65a8ecf74feeacdab8d38cb129e550ca871cccaa7d1921d8636ecd75534903" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -2565,7 +2565,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -2918,7 +2918,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4bc40943156e42138d22ed3c57ff0e1a147237742715937622a99b10fbe0156" dependencies = [ "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -3503,7 +3503,7 @@ checksum = "2e071b3159835ee91df62dbdbfdd7ec366b7ea77c838f43aff4acda6b61bcfb9" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -3620,7 +3620,7 @@ dependencies = [ "proc-macro-error", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "synstructure", ] @@ -3898,7 +3898,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -3914,7 +3914,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -3929,7 +3929,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -3954,7 +3954,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -3968,7 +3968,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -3983,7 +3983,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -3999,7 +3999,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4014,7 +4014,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4029,7 +4029,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4050,7 +4050,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4066,7 +4066,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4086,7 +4086,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4103,7 +4103,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4117,7 +4117,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4133,7 +4133,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4147,7 +4147,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4162,7 +4162,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4183,7 +4183,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4199,7 +4199,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4212,7 +4212,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "enumflags2", "frame-support", @@ -4227,7 +4227,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4262,7 +4262,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4278,7 +4278,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4292,7 +4292,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4314,18 +4314,18 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "pallet-sudo" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4339,7 +4339,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4357,7 +4357,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4372,7 +4372,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "frame-system", @@ -4389,7 +4389,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4407,7 +4407,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-support", "parity-scale-codec", @@ -4420,7 +4420,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4436,7 +4436,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-benchmarking", "frame-support", @@ -4452,7 +4452,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4518,7 +4518,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -4570,7 +4570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ "proc-macro2 1.0.24", - "syn 1.0.48", + "syn 1.0.58", "synstructure", ] @@ -4780,7 +4780,7 @@ dependencies = [ "pest_meta", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -4830,7 +4830,7 @@ checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -4841,7 +4841,7 @@ checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -6007,7 +6007,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "version_check", ] @@ -6104,7 +6104,7 @@ dependencies = [ "itertools 0.8.2", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -6407,7 +6407,7 @@ checksum = "7d21b475ab879ef0e315ad99067fa25778c3b0377f57f1b00207448dac1a3144" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -6692,7 +6692,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "async-trait", "derive_more", @@ -6720,7 +6720,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -6743,7 +6743,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6760,7 +6760,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -6781,18 +6781,18 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "sc-cli" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "atty", "chrono", @@ -6835,18 +6835,18 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "sc-client-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "fnv", @@ -6880,7 +6880,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "blake2-rfc", "hash-db", @@ -6910,7 +6910,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6921,7 +6921,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "fork-tree", @@ -6966,7 +6966,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "futures 0.3.8", @@ -6990,7 +6990,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7003,7 +7003,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7029,7 +7029,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "sc-client-api", @@ -7043,7 +7043,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "lazy_static", @@ -7072,7 +7072,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "parity-scale-codec", @@ -7088,7 +7088,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "parity-scale-codec", @@ -7103,7 +7103,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "parity-scale-codec", @@ -7121,7 +7121,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "finality-grandpa", @@ -7158,7 +7158,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "finality-grandpa", @@ -7182,7 +7182,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "ansi_term 0.12.1", "futures 0.3.8", @@ -7200,7 +7200,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "async-trait", "derive_more", @@ -7220,7 +7220,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "hash-db", "lazy_static", @@ -7239,7 +7239,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "async-std", "async-trait", @@ -7292,7 +7292,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7307,7 +7307,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "bytes 0.5.6", "fnv", @@ -7334,7 +7334,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "libp2p", @@ -7347,7 +7347,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7356,7 +7356,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "hash-db", @@ -7390,7 +7390,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "futures 0.3.8", @@ -7414,7 +7414,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7432,7 +7432,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "directories 3.0.1", "exit-future", @@ -7496,7 +7496,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "parity-scale-codec", @@ -7511,7 +7511,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7531,7 +7531,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -7552,7 +7552,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7576,7 +7576,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "futures 0.3.8", @@ -7598,7 +7598,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-diagnose", @@ -7679,7 +7679,7 @@ checksum = "e367622f934864ffa1c704ba2b82280aab856e3d8213c84c5720257eb34b15b9" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -7803,7 +7803,7 @@ checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -7997,7 +7997,7 @@ checksum = "a945ec7f7ce853e89ffa36be1e27dce9a43e82ff9093bf3461c30d5da74ed11b" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -8064,7 +8064,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "sp-core", @@ -8076,7 +8076,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "hash-db", "parity-scale-codec", @@ -8092,19 +8092,19 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "blake2-rfc", "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "sp-application-crypto" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "serde", @@ -8116,7 +8116,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8129,7 +8129,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-api", @@ -8141,7 +8141,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8152,7 +8152,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-api", @@ -8164,7 +8164,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "log", @@ -8182,7 +8182,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "serde", "serde_json", @@ -8191,7 +8191,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", @@ -8217,7 +8217,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "merlin", "parity-scale-codec", @@ -8237,7 +8237,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8246,7 +8246,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8258,7 +8258,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "base58", "blake2-rfc", @@ -8302,7 +8302,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -8311,17 +8311,17 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "sp-externalities" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "environmental", "parity-scale-codec", @@ -8332,7 +8332,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "finality-grandpa", "log", @@ -8349,7 +8349,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -8361,7 +8361,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "hash-db", @@ -8385,7 +8385,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "lazy_static", "sp-core", @@ -8396,7 +8396,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "async-trait", "derive_more", @@ -8413,7 +8413,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "serde", @@ -8425,18 +8425,18 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "sp-offchain" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "sp-api", "sp-core", @@ -8446,7 +8446,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "backtrace", ] @@ -8454,7 +8454,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "serde", "sp-core", @@ -8463,7 +8463,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "either", "hash256-std-hasher", @@ -8484,7 +8484,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8501,19 +8501,19 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "Inflector", "proc-macro-crate", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] name = "sp-serializer" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "serde", "serde_json", @@ -8522,7 +8522,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-api", @@ -8535,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8545,7 +8545,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "hash-db", "log", @@ -8567,12 +8567,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" [[package]] name = "sp-storage" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8585,7 +8585,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "sp-core", @@ -8598,7 +8598,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8612,7 +8612,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "log", "parity-scale-codec", @@ -8625,7 +8625,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "derive_more", "futures 0.3.8", @@ -8641,7 +8641,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "hash-db", "memory-db", @@ -8655,7 +8655,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "futures-core", @@ -8667,7 +8667,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8679,7 +8679,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8771,7 +8771,7 @@ dependencies = [ "proc-macro-error", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -8792,7 +8792,7 @@ dependencies = [ "heck", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -8811,7 +8811,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "chrono", "console_error_panic_hook", @@ -8837,7 +8837,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "platforms", ] @@ -8845,7 +8845,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.8", @@ -8868,7 +8868,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "async-std", "derive_more", @@ -8882,7 +8882,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.1.29", "futures 0.3.8", @@ -8909,7 +8909,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "futures 0.3.8", "substrate-test-utils-derive", @@ -8919,11 +8919,11 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#e5e7606fa54175dfc424b7ca90d60b07a3c3f026" +source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" dependencies = [ "proc-macro-crate", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -8967,9 +8967,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.48" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8984,7 +8984,7 @@ checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "unicode-xid 0.2.1", ] @@ -9118,7 +9118,7 @@ checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -9314,7 +9314,7 @@ checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -9506,7 +9506,7 @@ checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", ] [[package]] @@ -9874,7 +9874,7 @@ dependencies = [ "log", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "wasm-bindgen-shared", ] @@ -9908,7 +9908,7 @@ checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10419,7 +10419,7 @@ checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.48", + "syn 1.0.58", "synstructure", ] diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index c84d14d9fc..d351c2ac62 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -80,12 +80,28 @@ pub enum WireMessage { ViewUpdate(View), } -/// Information about the notifications protocol. Should be used during network configuration -/// or shortly after startup to register the protocol with the network service. -pub fn notifications_protocol_info() -> Vec> { +/// Information about the extra peers set. Should be used during network configuration +/// to register the protocol with the network service. +pub fn peers_sets_info() -> Vec { vec![ - VALIDATION_PROTOCOL_NAME.into(), - COLLATION_PROTOCOL_NAME.into(), + sc_network::config::NonDefaultSetConfig { + notifications_protocol: VALIDATION_PROTOCOL_NAME.into(), + set_config: sc_network::config::SetConfig { + in_peers: 25, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, + }, + }, + sc_network::config::NonDefaultSetConfig { + notifications_protocol: COLLATION_PROTOCOL_NAME.into(), + set_config: sc_network::config::SetConfig { + in_peers: 25, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, + }, + } ] } @@ -202,7 +218,7 @@ impl NetworkBridge { /// Create a new network bridge subsystem with underlying network service and authority discovery service. /// /// This assumes that the network service has had the notifications protocol for the network - /// bridge already registered. See [`notifications_protocol_info`](notifications_protocol_info). + /// bridge already registered. See [`peers_sets_info`](peers_sets_info). pub fn new(network_service: N, authority_discovery_service: AD) -> Self { NetworkBridge { network_service, @@ -300,7 +316,9 @@ fn action_from_network_message(event: Option) -> Action { tracing::info!(target: LOG_TARGET, "Shutting down Network Bridge: underlying event stream concluded"); Action::Abort } - Some(NetworkEvent::Dht(_)) => Action::Nop, + Some(NetworkEvent::Dht(_)) | + Some(NetworkEvent::SyncConnected { .. }) | + Some(NetworkEvent::SyncDisconnected { .. }) => Action::Nop, Some(NetworkEvent::NotificationStreamOpened { remote, protocol, role }) => { let role = role.into(); match protocol { @@ -755,6 +773,7 @@ mod tests { use futures::channel::mpsc; use futures::executor; + use std::borrow::Cow; use std::sync::Arc; use std::collections::HashSet; use async_trait::async_trait; @@ -829,11 +848,11 @@ mod tests { #[async_trait] impl validator_discovery::Network for TestNetwork { - async fn add_to_priority_group(&mut self, _group_id: String, _multiaddresses: HashSet) -> Result<(), String> { + async fn add_peers_to_reserved_set(&mut self, _protocol: Cow<'static, str>, _: HashSet) -> Result<(), String> { Ok(()) } - async fn remove_from_priority_group(&mut self, _group_id: String, _multiaddresses: HashSet) -> Result<(), String> { + async fn remove_peers_from_reserved_set(&mut self, _protocol: Cow<'static, str>, _: HashSet) -> Result<(), String> { Ok(()) } } diff --git a/node/network/bridge/src/validator_discovery.rs b/node/network/bridge/src/validator_discovery.rs index 71a3d4a566..89e72a7aa9 100644 --- a/node/network/bridge/src/validator_discovery.rs +++ b/node/network/bridge/src/validator_discovery.rs @@ -17,6 +17,7 @@ //! A validator discovery service for the Network Bridge. use core::marker::PhantomData; +use std::borrow::Cow; use std::collections::{HashSet, HashMap, hash_map}; use std::sync::Arc; @@ -28,16 +29,15 @@ use sc_authority_discovery::Service as AuthorityDiscoveryService; use polkadot_node_network_protocol::PeerId; use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash}; -const PRIORITY_GROUP: &'static str = "parachain_validators"; const LOG_TARGET: &str = "validator_discovery"; /// An abstraction over networking for the purposes of validator discovery service. #[async_trait] pub trait Network: Send + 'static { /// Ask the network to connect to these nodes and not disconnect from them until removed from the priority group. - async fn add_to_priority_group(&mut self, group_id: String, multiaddresses: HashSet) -> Result<(), String>; + async fn add_peers_to_reserved_set(&mut self, protocol: Cow<'static, str>, multiaddresses: HashSet) -> Result<(), String>; /// Remove the peers from the priority group. - async fn remove_from_priority_group(&mut self, group_id: String, multiaddresses: HashSet) -> Result<(), String>; + async fn remove_peers_from_reserved_set(&mut self, protocol: Cow<'static, str>, multiaddresses: HashSet) -> Result<(), String>; } /// An abstraction over the authority discovery service. @@ -51,12 +51,12 @@ pub trait AuthorityDiscovery: Send + 'static { #[async_trait] impl Network for Arc> { - async fn add_to_priority_group(&mut self, group_id: String, multiaddresses: HashSet) -> Result<(), String> { - sc_network::NetworkService::add_to_priority_group(&**self, group_id, multiaddresses).await + async fn add_peers_to_reserved_set(&mut self, protocol: Cow<'static, str>, multiaddresses: HashSet) -> Result<(), String> { + sc_network::NetworkService::add_peers_to_reserved_set(&**self, protocol, multiaddresses) } - async fn remove_from_priority_group(&mut self, group_id: String, multiaddresses: HashSet) -> Result<(), String> { - sc_network::NetworkService::remove_from_priority_group(&**self, group_id, multiaddresses).await + async fn remove_peers_from_reserved_set(&mut self, protocol: Cow<'static, str>, multiaddresses: HashSet) -> Result<(), String> { + sc_network::NetworkService::remove_peers_from_reserved_set(&**self, protocol, multiaddresses) } } @@ -274,15 +274,28 @@ impl Service { } // ask the network to connect to these nodes and not disconnect - // from them until removed from the priority group - if let Err(e) = network_service.add_to_priority_group( - PRIORITY_GROUP.to_owned(), + // from them until removed from the set + if let Err(e) = network_service.add_peers_to_reserved_set( + super::COLLATION_PROTOCOL_NAME.into(), + multiaddr_to_add.clone(), + ).await { + tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); + } + if let Err(e) = network_service.add_peers_to_reserved_set( + super::VALIDATION_PROTOCOL_NAME.into(), multiaddr_to_add, ).await { tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); } // the addresses are known to be valid - let _ = network_service.remove_from_priority_group(PRIORITY_GROUP.to_owned(), multiaddr_to_remove).await; + let _ = network_service.remove_peers_from_reserved_set( + super::COLLATION_PROTOCOL_NAME.into(), + multiaddr_to_remove.clone() + ).await; + let _ = network_service.remove_peers_from_reserved_set( + super::VALIDATION_PROTOCOL_NAME.into(), + multiaddr_to_remove + ).await; let pending = validator_ids.iter() .cloned() @@ -339,7 +352,7 @@ mod tests { #[derive(Default)] struct TestNetwork { - priority_group: HashSet, + peers_set: HashSet, } #[derive(Default)] @@ -367,13 +380,13 @@ mod tests { #[async_trait] impl Network for TestNetwork { - async fn add_to_priority_group(&mut self, _group_id: String, multiaddresses: HashSet) -> Result<(), String> { - self.priority_group.extend(multiaddresses.into_iter()); + async fn add_peers_to_reserved_set(&mut self, _protocol: Cow<'static, str>, multiaddresses: HashSet) -> Result<(), String> { + self.peers_set.extend(multiaddresses.into_iter()); Ok(()) } - async fn remove_from_priority_group(&mut self, _group_id: String, multiaddresses: HashSet) -> Result<(), String> { - self.priority_group.retain(|elem| !multiaddresses.contains(elem)); + async fn remove_peers_from_reserved_set(&mut self, _protocol: Cow<'static, str>, multiaddresses: HashSet) -> Result<(), String> { + self.peers_set.retain(|elem| !multiaddresses.contains(elem)); Ok(()) } } @@ -570,7 +583,7 @@ mod tests { let _ = receiver.next().await.unwrap(); assert_eq!(service.non_revoked_discovery_requests.len(), 1); - assert_eq!(ns.priority_group.len(), 2); + assert_eq!(ns.peers_set.len(), 2); // revoke the second request drop(receiver); @@ -586,7 +599,7 @@ mod tests { let _ = receiver.next().await.unwrap(); assert_eq!(service.non_revoked_discovery_requests.len(), 1); - assert_eq!(ns.priority_group.len(), 1); + assert_eq!(ns.peers_set.len(), 1); }); } diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index c62d4d526f..ed86833888 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -562,9 +562,12 @@ pub fn new_full( let shared_voter_state = rpc_setup; + // Note: GrandPa is pushed before the Polkadot-specific protocols. This doesn't change + // anything in terms of behaviour, but makes the logs more consistent with the other + // Substrate nodes. + config.network.extra_sets.push(grandpa::grandpa_peers_set_config()); #[cfg(feature = "real-overseer")] - config.network.notifications_protocols.extend(polkadot_network_bridge::notifications_protocol_info()); - config.network.notifications_protocols.push(grandpa::GRANDPA_PROTOCOL_NAME.into()); + config.network.extra_sets.extend(polkadot_network_bridge::peers_sets_info()); let (network, network_status_sinks, system_rpc_tx, network_starter) = service::build_network(service::BuildNetworkParams { -- GitLab From 39d14fdcaf3d588e7166554efe1012a6ed9d7f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 7 Jan 2021 20:44:20 +0100 Subject: [PATCH 172/203] Switch to latest Jaeger and improve the spans (#2216) * Switch to latest Jaeger and improve the spans * Update node/jaeger/src/lib.rs Co-authored-by: Robert Habermeier * Use better span in bitfield signing * Update node/core/bitfield-signing/src/lib.rs Co-authored-by: Andronik Ordian Co-authored-by: Robert Habermeier Co-authored-by: Andronik Ordian --- Cargo.lock | 4 +-- node/core/bitfield-signing/src/lib.rs | 8 +++--- node/jaeger/Cargo.toml | 2 +- node/jaeger/src/lib.rs | 8 ++++++ .../availability-distribution/src/lib.rs | 28 +++++++++++++------ .../availability-distribution/src/tests.rs | 10 ++++++- node/overseer/src/lib.rs | 14 +++++++--- 7 files changed, 54 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 79628c21ed..8033adade8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3477,9 +3477,9 @@ dependencies = [ [[package]] name = "mick-jaeger" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4247b181b96e62eacb5a1e7a2f1a39a78b945cb0434c0fceaae4ed1882555957" +checksum = "c023c3f16109e7f33aa451f773fd61070e265b4977d0b6e344a51049296dd7df" dependencies = [ "futures 0.3.8", "rand 0.7.3", diff --git a/node/core/bitfield-signing/src/lib.rs b/node/core/bitfield-signing/src/lib.rs index 8c06f76424..1c5721a42d 100644 --- a/node/core/bitfield-signing/src/lib.rs +++ b/node/core/bitfield-signing/src/lib.rs @@ -78,7 +78,7 @@ async fn get_core_availability( span: &jaeger::JaegerSpan, ) -> Result { if let CoreState::Occupied(core) = core { - let _span = span.child("query chunk availability"); + let _span = span.child("query-chunk-availability"); let (tx, rx) = oneshot::channel(); sender @@ -246,12 +246,12 @@ impl JobTrait for BitfieldSigningJob { let _timer = metrics.time_run(); drop(_span); - let _span = span.child("availablity"); + let span_availability = span.child("availability"); let bitfield = match construct_availability_bitfield( relay_parent, - &span, + &span_availability, validator.index(), &mut sender, ).await @@ -265,7 +265,7 @@ impl JobTrait for BitfieldSigningJob { Ok(bitfield) => bitfield, }; - drop(_span); + drop(span_availability); let _span = span.child("signing"); let signed_bitfield = validator diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml index df2528ac97..e106888a14 100644 --- a/node/jaeger/Cargo.toml +++ b/node/jaeger/Cargo.toml @@ -7,7 +7,7 @@ description = "Polkadot Jaeger primitives" [dependencies] async-std = "1.8.0" -mick-jaeger = "0.1.2" +mick-jaeger = "0.1.4" lazy_static = "1.4" parking_lot = "0.11.1" polkadot-primitives = { path = "../../primitives" } diff --git a/node/jaeger/src/lib.rs b/node/jaeger/src/lib.rs index c99b498ad0..73e0fb8c17 100644 --- a/node/jaeger/src/lib.rs +++ b/node/jaeger/src/lib.rs @@ -183,6 +183,14 @@ impl JaegerSpan { Self::Disabled => {}, } } + + /// Adds the `FollowsFrom` relationship to this span with respect to the given one. + pub fn add_follows_from(&mut self, other: &Self) { + match (self, other) { + (Self::Enabled(ref mut inner), Self::Enabled(ref other_inner)) => inner.add_follows_from(&other_inner), + _ => {}, + } + } } impl std::fmt::Debug for JaegerSpan { diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index f07e48caab..c35e2868bc 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -45,7 +45,7 @@ use polkadot_subsystem::messages::{ NetworkBridgeMessage, RuntimeApiMessage, RuntimeApiRequest, }; use polkadot_subsystem::{ - jaeger, errors::{ChainApiError, RuntimeApiError}, + jaeger, errors::{ChainApiError, RuntimeApiError}, PerLeafSpan, ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, Subsystem, SubsystemContext, SubsystemError, }; use std::collections::{HashMap, HashSet}; @@ -191,12 +191,14 @@ impl PerCandidate { } } -#[derive(Debug, Clone, Default)] +#[derive(Debug)] struct PerRelayParent { /// Set of `K` ancestors for this relay parent. ancestors: Vec, /// Live candidates, according to this relay parent. live_candidates: HashSet, + /// The span that belongs to this relay parent. + span: PerLeafSpan, } impl ProtocolState { @@ -216,7 +218,7 @@ impl ProtocolState { ) } - #[tracing::instrument(level = "trace", skip(candidates), fields(subsystem = LOG_TARGET))] + #[tracing::instrument(level = "trace", skip(candidates, span), fields(subsystem = LOG_TARGET))] fn add_relay_parent( &mut self, relay_parent: Hash, @@ -224,10 +226,13 @@ impl ProtocolState { validator_index: Option, candidates: HashMap, ancestors: Vec, + span: PerLeafSpan, ) { - let per_relay_parent = self.per_relay_parent.entry(relay_parent).or_default(); - per_relay_parent.ancestors = ancestors; - per_relay_parent.live_candidates.extend(candidates.keys().cloned()); + let per_relay_parent = self.per_relay_parent.entry(relay_parent).or_insert_with(|| PerRelayParent { + span, + ancestors, + live_candidates: candidates.keys().cloned().collect(), + }); // register the relation of relay_parent to candidate.. for (receipt_hash, fetched) in candidates { @@ -256,6 +261,11 @@ impl ProtocolState { } }; + // Create some span that will make it able to switch between the candidate and relay parent span. + let mut span = per_relay_parent.span.child("live-candidate"); + span.add_string_tag("candidate-hash", &format!("{:?}", receipt_hash)); + + candidate_entry.span.add_follows_from(&span); candidate_entry.live_in.insert(relay_parent); } } @@ -365,7 +375,9 @@ where let view = state.view.clone(); // add all the relay parents and fill the cache - for added in view.difference(&old_view) { + for (added, span) in view.span_per_head().iter().filter(|v| !old_view.contains(&v.0)) { + let span = PerLeafSpan::new(span.clone(), "availability-distribution"); + let validators = query_validators(ctx, *added).await?; let validator_index = obtain_our_validator_index(&validators, keystore.clone()).await; let (candidates, ancestors) @@ -377,6 +389,7 @@ where validator_index, candidates, ancestors, + span, ); } @@ -436,7 +449,6 @@ where "Retrieved chunk from availability storage", ); - let msg = AvailabilityGossipMessage { candidate_hash, erasure_chunk, diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index 76a8566246..524855e713 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -1005,9 +1005,14 @@ fn clean_up_receipts_cache_unions_ancestors_and_view() { state.per_relay_parent.insert(hash_a, PerRelayParent { ancestors: vec![hash_b], live_candidates: HashSet::new(), + span: PerLeafSpan::new(Arc::new(jaeger::JaegerSpan::Disabled), "test"), }); - state.per_relay_parent.insert(hash_c, PerRelayParent::default()); + state.per_relay_parent.insert(hash_c, PerRelayParent { + ancestors: Vec::new(), + live_candidates: HashSet::new(), + span: PerLeafSpan::new(Arc::new(jaeger::JaegerSpan::Disabled), "test"), + }); state.clean_up_live_under_cache(); @@ -1030,11 +1035,13 @@ fn remove_relay_parent_only_removes_per_candidate_if_final() { state.per_relay_parent.insert(hash_a, PerRelayParent { ancestors: vec![], live_candidates: std::iter::once(candidate_hash_a).collect(), + span: PerLeafSpan::new(Arc::new(jaeger::JaegerSpan::Disabled), "test"), }); state.per_relay_parent.insert(hash_b, PerRelayParent { ancestors: vec![], live_candidates: std::iter::once(candidate_hash_a).collect(), + span: PerLeafSpan::new(Arc::new(jaeger::JaegerSpan::Disabled), "test"), }); state.per_candidate.insert(candidate_hash_a, { @@ -1079,6 +1086,7 @@ fn add_relay_parent_includes_all_live_candidates() { None, candidates, vec![ancestor_a], + PerLeafSpan::new(Arc::new(jaeger::JaegerSpan::Disabled), "test"), ); assert!( diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 60e0215d51..05420026e6 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -1510,7 +1510,7 @@ where for (hash, number) in std::mem::take(&mut self.leaves) { let _ = self.active_leaves.insert(hash, number); - let span = self.on_head_activated(&hash); + let span = self.on_head_activated(&hash, None); update.activated.push((hash, span)); } @@ -1589,7 +1589,7 @@ where } }; - let span = self.on_head_activated(&block.hash); + let span = self.on_head_activated(&block.hash, Some(block.parent_hash)); let mut update = ActiveLeavesUpdate::start_work(block.hash, span); if let Some(number) = self.active_leaves.remove(&block.parent_hash) { @@ -1705,7 +1705,7 @@ where } #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn on_head_activated(&mut self, hash: &Hash) -> Arc { + fn on_head_activated(&mut self, hash: &Hash, parent_hash: Option) -> Arc { self.metrics.on_head_activated(); if let Some(listeners) = self.activation_external_listeners.remove(hash) { for listener in listeners { @@ -1714,7 +1714,13 @@ where } } - let span = Arc::new(jaeger::hash_span(hash, "leave activated")); + let mut span = jaeger::hash_span(hash, "leaf-activated"); + + if let Some(parent_span) = parent_hash.and_then(|h| self.span_per_active_leaf.get(&h)) { + span.add_follows_from(&*parent_span); + } + + let span = Arc::new(span); self.span_per_active_leaf.insert(*hash, span.clone()); span } -- GitLab From 9060c1e3b787cb5d99a04db55ae56dc8725c7d0c Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Fri, 8 Jan 2021 00:00:30 +0300 Subject: [PATCH 173/203] Optimizations of av-store (#2223) * Store all chunks and in a single transaction * Adds chunks LRU to store * Add pruning records metrics * Use honest cache instead of LRU * Remove unnecessary optional cache * Fix review nits that are fixable --- Cargo.lock | 4 +- node/core/av-store/src/lib.rs | 185 +++++++++++------- node/core/av-store/src/tests.rs | 3 - .../availability-distribution/src/lib.rs | 1 - node/subsystem/src/messages.rs | 2 - .../src/types/overseer-protocol.md | 4 +- 6 files changed, 122 insertions(+), 77 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8033adade8..9800da4d0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3354,9 +3354,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be716eb6878ca2263eb5d00a781aa13264a794f519fe6af4fbb2668b2d5441c0" +checksum = "3aae342b73d57ad0b8b364bd12584819f2c1fe9114285dfcf8b0722607671635" dependencies = [ "hashbrown", ] diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 77f5dfb0c5..27973921d2 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -94,7 +94,7 @@ impl Error { } /// A wrapper type for delays. -#[derive(Debug, Decode, Encode, Eq)] +#[derive(Clone, Debug, Decode, Encode, Eq)] enum PruningDelay { /// This pruning should be triggered after this `Duration` from UNIX_EPOCH. In(Duration), @@ -315,13 +315,14 @@ impl PartialOrd for ChunkPruningRecord { pub struct AvailabilityStoreSubsystem { pruning_config: PruningConfig, inner: Arc, + chunks_cache: HashMap>, metrics: Metrics, } impl AvailabilityStoreSubsystem { // Perform pruning of PoVs #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn prune_povs(&self) -> Result<(), Error> { + fn prune_povs(&mut self) -> Result<(), Error> { let _timer = self.metrics.time_prune_povs(); let mut tx = DBTransaction::new(); @@ -335,20 +336,22 @@ impl AvailabilityStoreSubsystem { for record in pov_pruning.drain(..outdated_records_count) { tracing::trace!(target: LOG_TARGET, record = ?record, "Removing record"); + + self.chunks_cache.remove(&record.candidate_hash); tx.delete( columns::DATA, available_data_key(&record.candidate_hash).as_slice(), ); } - put_pov_pruning(&self.inner, Some(tx), pov_pruning)?; + put_pov_pruning(&self.inner, Some(tx), pov_pruning, &self.metrics)?; Ok(()) } // Perform pruning of chunks. #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn prune_chunks(&self) -> Result<(), Error> { + fn prune_chunks(&mut self) -> Result<(), Error> { let _timer = self.metrics.time_prune_chunks(); let mut tx = DBTransaction::new(); @@ -362,13 +365,15 @@ impl AvailabilityStoreSubsystem { for record in chunk_pruning.drain(..outdated_records_count) { tracing::trace!(target: LOG_TARGET, record = ?record, "Removing record"); + + self.chunks_cache.remove(&record.candidate_hash); tx.delete( columns::DATA, erasure_chunk_key(&record.candidate_hash, record.chunk_index).as_slice(), ); } - put_chunk_pruning(&self.inner, Some(tx), chunk_pruning)?; + put_chunk_pruning(&self.inner, Some(tx), chunk_pruning, &self.metrics)?; Ok(()) } @@ -468,6 +473,7 @@ impl AvailabilityStoreSubsystem { Ok(Self { pruning_config: PruningConfig::default(), inner: Arc::new(db), + chunks_cache: HashMap::new(), metrics, }) } @@ -477,6 +483,7 @@ impl AvailabilityStoreSubsystem { Self { pruning_config, inner, + chunks_cache: HashMap::new(), metrics: Metrics(None), } } @@ -535,7 +542,7 @@ where ActiveLeavesUpdate { activated, .. }) ) => { for (activated, _span) in activated.into_iter() { - process_block_activated(ctx, &subsystem.inner, activated, &subsystem.metrics).await?; + process_block_activated(ctx, subsystem, activated).await?; } } FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, number)) => { @@ -590,7 +597,7 @@ async fn process_block_finalized( } } - put_pov_pruning(db, None, pov_pruning)?; + put_pov_pruning(db, None, pov_pruning, &subsystem.metrics)?; } if let Some(mut chunk_pruning) = chunk_pruning(db) { @@ -609,23 +616,23 @@ async fn process_block_finalized( } } - put_chunk_pruning(db, None, chunk_pruning)?; + put_chunk_pruning(db, None, chunk_pruning, &subsystem.metrics)?; } Ok(()) } -#[tracing::instrument(level = "trace", skip(ctx, db, metrics), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(ctx, subsystem), fields(subsystem = LOG_TARGET))] async fn process_block_activated( ctx: &mut Context, - db: &Arc, + subsystem: &mut AvailabilityStoreSubsystem, hash: Hash, - metrics: &Metrics, ) -> Result<(), Error> where Context: SubsystemContext { - let _timer = metrics.time_block_activated(); + let _timer = subsystem.metrics.time_block_activated(); + let db = &subsystem.inner; let events = match request_candidate_events(ctx, hash).await { Ok(events) => events, @@ -649,6 +656,10 @@ where } } + for included in &included { + subsystem.chunks_cache.remove(&included); + } + if let Some(mut pov_pruning) = pov_pruning(db) { for record in pov_pruning.iter_mut() { if included.contains(&record.candidate_hash) { @@ -659,7 +670,7 @@ where pov_pruning.sort(); - put_pov_pruning(db, None, pov_pruning)?; + put_pov_pruning(db, None, pov_pruning, &subsystem.metrics)?; } if let Some(mut chunk_pruning) = chunk_pruning(db) { @@ -672,7 +683,7 @@ where chunk_pruning.sort(); - put_chunk_pruning(db, None, chunk_pruning)?; + put_chunk_pruning(db, None, chunk_pruning, &subsystem.metrics)?; } Ok(()) @@ -742,11 +753,11 @@ where tx.send(result?).map_err(|_| oneshot::Canceled)?; } - StoreChunk { candidate_hash, relay_parent, validator_index, chunk, tx } => { + StoreChunk { candidate_hash, relay_parent, chunk, tx } => { let chunk_index = chunk.index; // Current block number is relay_parent block number + 1. let block_number = get_block_number(ctx, relay_parent).await? + 1; - let result = store_chunk(subsystem, &candidate_hash, validator_index, chunk, block_number); + let result = store_chunks(subsystem, &candidate_hash, vec![chunk], block_number); tracing::trace!( target: LOG_TARGET, @@ -802,14 +813,17 @@ fn chunk_pruning(db: &Arc) -> Option> { query_inner(db, columns::META, &CHUNK_PRUNING_KEY) } -#[tracing::instrument(level = "trace", skip(db, tx), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(db, tx, metrics), fields(subsystem = LOG_TARGET))] fn put_pov_pruning( db: &Arc, tx: Option, mut pov_pruning: Vec, + metrics: &Metrics, ) -> Result<(), Error> { let mut tx = tx.unwrap_or_default(); + metrics.block_pruning_records_size(pov_pruning.len()); + pov_pruning.sort(); tx.put_vec( @@ -843,14 +857,17 @@ fn put_pov_pruning( Ok(()) } -#[tracing::instrument(level = "trace", skip(db, tx), fields(subsystem = LOG_TARGET))] +#[tracing::instrument(level = "trace", skip(db, tx, metrics), fields(subsystem = LOG_TARGET))] fn put_chunk_pruning( db: &Arc, tx: Option, mut chunk_pruning: Vec, + metrics: &Metrics, ) -> Result<(), Error> { let mut tx = tx.unwrap_or_default(); + metrics.chunk_pruning_records_size(chunk_pruning.len()); + chunk_pruning.sort(); tx.put_vec( @@ -910,16 +927,13 @@ fn store_available_data( let block_number = available_data.validation_data.block_number; - if let Some(index) = id { - let chunks = get_chunks(&available_data, n_validators as usize, &subsystem.metrics)?; - store_chunk( - subsystem, - candidate_hash, - n_validators, - chunks[index as usize].clone(), - block_number, - )?; - } + let chunks = get_chunks(&available_data, n_validators as usize, &subsystem.metrics)?; + store_chunks( + subsystem, + candidate_hash, + chunks, + block_number, + )?; let stored_data = StoredAvailableData { data: available_data, @@ -966,23 +980,19 @@ fn store_available_data( } #[tracing::instrument(level = "trace", skip(subsystem), fields(subsystem = LOG_TARGET))] -fn store_chunk( +fn store_chunks( subsystem: &mut AvailabilityStoreSubsystem, candidate_hash: &CandidateHash, - _n_validators: u32, - chunk: ErasureChunk, + chunks: Vec, block_number: BlockNumber, ) -> Result<(), Error> { - let _timer = subsystem.metrics.time_store_chunk(); + let _timer = subsystem.metrics.time_store_chunks(); let mut tx = DBTransaction::new(); - - let dbkey = erasure_chunk_key(candidate_hash, chunk.index); - let mut chunk_pruning = chunk_pruning(&subsystem.inner).unwrap_or_default(); - let prune_at = PruningDelay::into_the_future(subsystem.pruning_config.keep_stored_block_for)?; - if let Some(delay) = prune_at.as_duration() { + let prune_at = PruningDelay::into_the_future(subsystem.pruning_config.keep_stored_block_for)?; + if let Some(delay) = prune_at.clone().as_duration() { tx.put_vec( columns::META, &NEXT_CHUNK_PRUNING, @@ -990,23 +1000,29 @@ fn store_chunk( ); } - let pruning_record = ChunkPruningRecord { - candidate_hash: candidate_hash.clone(), - block_number, - candidate_state: CandidateState::Stored, - chunk_index: chunk.index, - prune_at, - }; + for chunk in chunks { + subsystem.chunks_cache.entry(*candidate_hash).or_default().insert(chunk.index, chunk.clone()); - let idx = chunk_pruning.binary_search(&pruning_record).unwrap_or_else(|insert_idx| insert_idx); + let pruning_record = ChunkPruningRecord { + candidate_hash: candidate_hash.clone(), + block_number, + candidate_state: CandidateState::Stored, + chunk_index: chunk.index, + prune_at: prune_at.clone(), + }; - chunk_pruning.insert(idx, pruning_record); + let idx = chunk_pruning.binary_search(&pruning_record).unwrap_or_else(|insert_idx| insert_idx); - tx.put_vec( - columns::DATA, - &dbkey, - chunk.encode(), - ); + chunk_pruning.insert(idx, pruning_record); + + let dbkey = erasure_chunk_key(candidate_hash, chunk.index); + + tx.put_vec( + columns::DATA, + &dbkey, + chunk.encode(), + ); + } tx.put_vec( columns::META, @@ -1027,6 +1043,12 @@ fn get_chunk( ) -> Result, Error> { let _timer = subsystem.metrics.time_get_chunk(); + if let Some(entry) = subsystem.chunks_cache.get(candidate_hash) { + if let Some(chunk) = entry.get(&index) { + return Ok(Some(chunk.clone())); + } + } + if let Some(chunk) = query_inner( &subsystem.inner, columns::DATA, @@ -1036,17 +1058,14 @@ fn get_chunk( } if let Some(data) = available_data(&subsystem.inner, candidate_hash) { - let mut chunks = get_chunks(&data.data, data.n_validators as usize, &subsystem.metrics)?; + let chunks = get_chunks(&data.data, data.n_validators as usize, &subsystem.metrics)?; let desired_chunk = chunks.get(index as usize).cloned(); - for chunk in chunks.drain(..) { - store_chunk( - subsystem, - candidate_hash, - data.n_validators, - chunk, - data.data.validation_data.block_number, - )?; - } + store_chunks( + subsystem, + candidate_hash, + chunks, + data.data.validation_data.block_number, + )?; return Ok(desired_chunk); } @@ -1109,13 +1128,15 @@ fn get_chunks(data: &AvailableData, n_validators: usize, metrics: &Metrics) -> R #[derive(Clone)] struct MetricsInner { received_availability_chunks_total: prometheus::Counter, + chunk_pruning_records_total: prometheus::Gauge, + block_pruning_records_total: prometheus::Gauge, prune_povs: prometheus::Histogram, prune_chunks: prometheus::Histogram, process_block_finalized: prometheus::Histogram, block_activated: prometheus::Histogram, process_message: prometheus::Histogram, store_available_data: prometheus::Histogram, - store_chunk: prometheus::Histogram, + store_chunks: prometheus::Histogram, get_chunk: prometheus::Histogram, } @@ -1133,6 +1154,22 @@ impl Metrics { } } + fn chunk_pruning_records_size(&self, count: usize) { + if let Some(metrics) = &self.0 { + use core::convert::TryFrom as _; + let total = u64::try_from(count).unwrap_or_default(); + metrics.chunk_pruning_records_total.set(total); + } + } + + fn block_pruning_records_size(&self, count: usize) { + if let Some(metrics) = &self.0 { + use core::convert::TryFrom as _; + let total = u64::try_from(count).unwrap_or_default(); + metrics.block_pruning_records_total.set(total); + } + } + /// Provide a timer for `prune_povs` which observes on drop. fn time_prune_povs(&self) -> Option { self.0.as_ref().map(|metrics| metrics.prune_povs.start_timer()) @@ -1164,8 +1201,8 @@ impl Metrics { } /// Provide a timer for `store_chunk` which observes on drop. - fn time_store_chunk(&self) -> Option { - self.0.as_ref().map(|metrics| metrics.store_chunk.start_timer()) + fn time_store_chunks(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.store_chunks.start_timer()) } /// Provide a timer for `get_chunk` which observes on drop. @@ -1184,6 +1221,20 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + chunk_pruning_records_total: prometheus::register( + prometheus::Gauge::new( + "parachain_chunk_pruning_records_total", + "Number of chunk pruning records kept by the storage.", + )?, + registry, + )?, + block_pruning_records_total: prometheus::register( + prometheus::Gauge::new( + "parachain_block_pruning_records_total", + "Number of block pruning records kept by the storage.", + )?, + registry, + )?, prune_povs: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( @@ -1238,11 +1289,11 @@ impl metrics::Metrics for Metrics { )?, registry, )?, - store_chunk: prometheus::register( + store_chunks: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( - "parachain_av_store_store_chunk", - "Time spent within `av_store::store_chunk`", + "parachain_av_store_store_chunks", + "Time spent within `av_store::store_chunks`", ) )?, registry, diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 1d3bb26d4e..1a71981160 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -235,7 +235,6 @@ fn store_chunk_works() { let chunk_msg = AvailabilityStoreMessage::StoreChunk { candidate_hash, relay_parent, - validator_index, chunk: chunk.clone(), tx, }; @@ -385,7 +384,6 @@ fn stored_but_not_included_chunk_is_pruned() { let chunk_msg = AvailabilityStoreMessage::StoreChunk { candidate_hash, relay_parent, - validator_index, chunk: chunk.clone(), tx, }; @@ -589,7 +587,6 @@ fn stored_chunk_kept_until_finalized() { let chunk_msg = AvailabilityStoreMessage::StoreChunk { candidate_hash, relay_parent, - validator_index, chunk: chunk.clone(), tx, }; diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index c35e2868bc..80d60dc75c 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -1036,7 +1036,6 @@ where AvailabilityStoreMessage::StoreChunk { candidate_hash, relay_parent, - validator_index, chunk: erasure_chunk, tx, } diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index bbd2bc37d7..3b2006bea0 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -309,8 +309,6 @@ pub enum AvailabilityStoreMessage { candidate_hash: CandidateHash, /// A relevant relay parent. relay_parent: Hash, - /// The index of the validator this chunk belongs to. - validator_index: ValidatorIndex, /// The chunk itself. chunk: ErasureChunk, /// Sending side of the channel to send result to. diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 3c3456bc71..392927f9eb 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -174,9 +174,9 @@ enum AvailabilityStoreMessage { /// Query a specific availability chunk of the candidate's erasure-coding by validator index. /// Returns the chunk and its inclusion proof against the candidate's erasure-root. QueryChunk(CandidateHash, ValidatorIndex, ResponseChannel>), - /// Store a specific chunk of the candidate's erasure-coding by validator index, with an + /// Store a specific chunk of the candidate's erasure-coding, with an /// accompanying proof. - StoreChunk(CandidateHash, ValidatorIndex, AvailabilityChunkAndProof, ResponseChannel>), + StoreChunk(CandidateHash, AvailabilityChunkAndProof, ResponseChannel>), /// Store `AvailableData`. If `ValidatorIndex` is provided, also store this validator's /// `AvailabilityChunkAndProof`. StoreAvailableData(CandidateHash, Option, u32, AvailableData, ResponseChannel>), -- GitLab From 5ea2527e37c968259bc75e559ec2de89e999d20a Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 7 Jan 2021 16:01:03 -0500 Subject: [PATCH 174/203] Batch messages to network bridge and introduce a timeout to `SubsystemContext::send_message` (#2197) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * guide: batch network messages * bridge: batch * av-dist: batch outgoing messages * time-out message sends in subsystem context * Update node/subsystem/src/messages.rs Co-authored-by: Bastian Köcher * Revert "time-out message sends in subsystem context" This reverts commit d49be62557ec37c8a350b93718acad723df704ef. * Update node/network/availability-distribution/src/lib.rs Co-authored-by: Bastian Köcher --- .../availability-distribution/src/lib.rs | 40 ++++++++---- .../availability-distribution/src/tests.rs | 63 ++++++++++++------- node/network/bridge/src/lib.rs | 44 ++++++++----- node/subsystem/src/messages.rs | 8 +++ .../src/node/utility/network-bridge.md | 4 +- .../src/types/overseer-protocol.md | 6 +- 6 files changed, 111 insertions(+), 54 deletions(-) diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 80d60dc75c..0326e96b7b 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -394,6 +394,7 @@ where } // handle all candidates + let mut messages_out = Vec::new(); for candidate_hash in state.cached_live_candidates_unioned(view.difference(&old_view)) { // If we are not a validator for this candidate, let's skip it. match state.per_candidate.get(&candidate_hash) { @@ -475,13 +476,16 @@ where .cloned() .collect::>(); - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, peers, iter::once(message)).await; + add_tracked_messages_to_batch(&mut messages_out, per_candidate, metrics, peers, iter::once(message)); } // traces are better if we wait until the loop is done to drop. per_candidate.drop_span_after_own_availability(); } + // send all batched messages out. + send_batch_to_network(ctx, messages_out).await; + // cleanup the removed relay parents and their states old_view.difference(&view).for_each(|r| state.remove_relay_parent(r)); state.clean_up_live_under_cache(); @@ -489,17 +493,15 @@ where Ok(()) } -#[tracing::instrument(level = "trace", skip(ctx, metrics, message_iter), fields(subsystem = LOG_TARGET))] -async fn send_tracked_gossip_messages_to_peers( - ctx: &mut Context, +// After this function is invoked, the state reflects the messages as having been sent to a peer. +#[tracing::instrument(level = "trace", skip(batch, metrics, message_iter), fields(subsystem = LOG_TARGET))] +fn add_tracked_messages_to_batch( + batch: &mut Vec<(Vec, protocol_v1::ValidationProtocol)>, per_candidate: &mut PerCandidate, metrics: &Metrics, peers: Vec, message_iter: impl IntoIterator, -) -where - Context: SubsystemContext, -{ +) { for message in message_iter { for peer in peers.iter() { per_candidate @@ -510,16 +512,25 @@ where } if !peers.is_empty() { - ctx.send_message(NetworkBridgeMessage::SendValidationMessage( + batch.push(( peers.clone(), protocol_v1::ValidationProtocol::AvailabilityDistribution(message.into()), - ).into()).await; + )); metrics.on_chunk_distributed(); } } } +async fn send_batch_to_network( + ctx: &mut impl SubsystemContext, + batch: Vec<(Vec, protocol_v1::ValidationProtocol)>, +) { + if !batch.is_empty() { + ctx.send_message(NetworkBridgeMessage::SendValidationMessages(batch).into()).await + } +} + // Send the difference between two views which were not sent // to that particular peer. #[tracing::instrument(level = "trace", skip(ctx, metrics), fields(subsystem = LOG_TARGET))] @@ -544,6 +555,7 @@ where let added_candidates = state.cached_live_candidates_unioned(added.iter()); // Send all messages we've seen before and the peer is now interested in. + let mut batch = Vec::new(); for candidate_hash in added_candidates { let per_candidate = match state.per_candidate.get_mut(&candidate_hash) { Some(p) => p, @@ -564,8 +576,10 @@ where .cloned() .collect::>(); - send_tracked_gossip_messages_to_peers(ctx, per_candidate, metrics, vec![origin.clone()], messages).await; + add_tracked_messages_to_batch(&mut batch, per_candidate, metrics, vec![origin.clone()], messages); } + + send_batch_to_network(ctx, batch).await; } /// Obtain the first key which has a signing key. @@ -753,7 +767,9 @@ where drop(span); // gossip that message to interested peers - send_tracked_gossip_messages_to_peers(ctx, candidate_entry, metrics, peers, iter::once(message)).await; + let mut batch = Vec::new(); + add_tracked_messages_to_batch(&mut batch, candidate_entry, metrics, peers, iter::once(message)); + send_batch_to_network(ctx, batch).await; Ok(()) } diff --git a/node/network/availability-distribution/src/tests.rs b/node/network/availability-distribution/src/tests.rs index 524855e713..f1573dc62d 100644 --- a/node/network/availability-distribution/src/tests.rs +++ b/node/network/availability-distribution/src/tests.rs @@ -372,28 +372,32 @@ fn derive_erasure_chunks_with_proofs( async fn expect_chunks_network_message( virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, - peers: &[PeerId], + peers: &[Vec], candidates: &[CandidateHash], chunks: &[ErasureChunk], ) { - for _ in 0..chunks.len() { - assert_matches!( - overseer_recv(virtual_overseer).await, - AllMessages::NetworkBridge( - NetworkBridgeMessage::SendValidationMessage( - send_peers, + if chunks.is_empty() { return } + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::NetworkBridge( + NetworkBridgeMessage::SendValidationMessages(msgs) + ) => { + assert_eq!(msgs.len(), chunks.len()); + for (send_peers, msg) in msgs { + assert_matches!( + msg, protocol_v1::ValidationProtocol::AvailabilityDistribution( - protocol_v1::AvailabilityDistributionMessage::Chunk(send_candidate, send_chunk), - ), - ) - ) => { - assert!(candidates.contains(&send_candidate), format!("Could not find candidate: {:?}", send_candidate)); - assert!(chunks.iter().any(|c| c == &send_chunk), format!("Could not find chunk: {:?}", send_chunk)); - assert_eq!(peers.len(), send_peers.len()); - assert!(peers.iter().all(|p| send_peers.contains(p))); + protocol_v1::AvailabilityDistributionMessage::Chunk(send_candidate, send_chunk) + ) => { + let i = chunks.iter().position(|c| c == &send_chunk).unwrap(); + assert!(candidates.contains(&send_candidate), format!("Could not find candidate: {:?}", send_candidate)); + assert_eq!(&peers[i], &send_peers); + } + ); } - ); - } + } + ) } async fn change_our_view( @@ -464,6 +468,9 @@ async fn change_our_view( ); } + let mut send_peers = Vec::new(); + let mut send_chunks = Vec::new(); + let mut candidates = Vec::new(); for _ in 0..data_availability.len() { let (available, candidate_hash) = assert_matches!( overseer_recv(virtual_overseer).await, @@ -485,6 +492,7 @@ async fn change_our_view( continue; } + candidates.push(candidate_hash); if let Some((pov, persisted)) = chunk_data_per_candidate.get(&candidate_hash) { let chunks = make_erasure_chunks(persisted.clone(), validator_public.len(), pov.clone()); @@ -506,11 +514,15 @@ async fn change_our_view( ); if let Some(peers) = send_chunks_to.get(&candidate_hash) { - expect_chunks_network_message(virtual_overseer, &peers, &[candidate_hash], &[chunk]).await; + send_peers.push(peers.clone()); + send_chunks.push(chunk); } } + } } + + expect_chunks_network_message(virtual_overseer, &send_peers, &candidates, &send_chunks).await; } async fn setup_peer_with_view( @@ -725,17 +737,19 @@ fn reputation_verification() { // Both peers send us this chunk already chunks.remove(2); - expect_chunks_network_message(&mut virtual_overseer, &[peer_a.clone()], &[candidates[0].hash()], &chunks).await; + let send_peers = chunks.iter().map(|_| vec![peer_a.clone()]).collect::>(); + expect_chunks_network_message(&mut virtual_overseer, &send_peers, &[candidates[0].hash()], &chunks).await; overseer_send(&mut virtual_overseer, NetworkBridgeEvent::PeerViewChange(peer_b.clone(), view![current])).await; - expect_chunks_network_message(&mut virtual_overseer, &[peer_b.clone()], &[candidates[0].hash()], &chunks).await; + let send_peers = chunks.iter().map(|_| vec![peer_b.clone()]).collect::>(); + expect_chunks_network_message(&mut virtual_overseer, &send_peers, &[candidates[0].hash()], &chunks).await; peer_send_message(&mut virtual_overseer, peer_a.clone(), valid.clone(), BENEFIT_VALID_MESSAGE_FIRST).await; expect_chunks_network_message( &mut virtual_overseer, - &[peer_b.clone()], + &[vec![peer_b.clone()]], &[candidates[1].hash()], &[valid.erasure_chunk.clone()], ).await; @@ -901,9 +915,10 @@ fn candidate_chunks_are_put_into_message_vault_when_candidate_is_first_seen() { validator_public.len(), pov_blocks[0].clone(), ); + let send_peers = chunks.iter().map(|_| vec![peer_a.clone()]).collect::>(); expect_chunks_network_message( &mut virtual_overseer, - &[peer_a], + &send_peers, &[candidates[0].hash()], &chunks, ).await; @@ -1253,9 +1268,11 @@ fn new_peer_gets_all_chunks_send() { chunks.push(valid.erasure_chunk); + let send_peers = chunks.iter().map(|_| vec![peer_a.clone()]).collect::>(); + expect_chunks_network_message( &mut virtual_overseer, - &[peer_a], + &send_peers, &[candidates[0].hash(), candidates[1].hash()], &chunks, ).await; diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index d351c2ac62..50fc8e7d87 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -260,8 +260,8 @@ struct PeerData { #[derive(Debug)] enum Action { - SendValidationMessage(Vec, protocol_v1::ValidationProtocol), - SendCollationMessage(Vec, protocol_v1::CollationProtocol), + SendValidationMessages(Vec<(Vec, protocol_v1::ValidationProtocol)>), + SendCollationMessages(Vec<(Vec, protocol_v1::CollationProtocol)>), ConnectToValidators { validator_ids: Vec, connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, @@ -296,9 +296,13 @@ fn action_from_overseer_message( Ok(FromOverseer::Communication { msg }) => match msg { NetworkBridgeMessage::ReportPeer(peer, rep) => Action::ReportPeer(peer, rep), NetworkBridgeMessage::SendValidationMessage(peers, msg) - => Action::SendValidationMessage(peers, msg), + => Action::SendValidationMessages(vec![(peers, msg)]), NetworkBridgeMessage::SendCollationMessage(peers, msg) - => Action::SendCollationMessage(peers, msg), + => Action::SendCollationMessages(vec![(peers, msg)]), + NetworkBridgeMessage::SendValidationMessages(msgs) + => Action::SendValidationMessages(msgs), + NetworkBridgeMessage::SendCollationMessages(msgs) + => Action::SendCollationMessages(msgs), NetworkBridgeMessage::ConnectToValidators { validator_ids, connected } => Action::ConnectToValidators { validator_ids, connected }, }, @@ -623,19 +627,27 @@ where Action::Nop => {} Action::Abort => return Ok(()), - Action::SendValidationMessage(peers, msg) => send_message( - &mut network_service, - peers, - PeerSet::Validation, - WireMessage::ProtocolMessage(msg), - ).await?, + Action::SendValidationMessages(msgs) => { + for (peers, msg) in msgs { + send_message( + &mut network_service, + peers, + PeerSet::Validation, + WireMessage::ProtocolMessage(msg), + ).await? + } + } - Action::SendCollationMessage(peers, msg) => send_message( - &mut network_service, - peers, - PeerSet::Collation, - WireMessage::ProtocolMessage(msg), - ).await?, + Action::SendCollationMessages(msgs) => { + for (peers, msg) in msgs { + send_message( + &mut network_service, + peers, + PeerSet::Collation, + WireMessage::ProtocolMessage(msg), + ).await? + } + } Action::ConnectToValidators { validator_ids, diff --git a/node/subsystem/src/messages.rs b/node/subsystem/src/messages.rs index 3b2006bea0..995256d5d4 100644 --- a/node/subsystem/src/messages.rs +++ b/node/subsystem/src/messages.rs @@ -203,6 +203,12 @@ pub enum NetworkBridgeMessage { /// Send a message to one or more peers on the collation peer-set. SendCollationMessage(Vec, protocol_v1::CollationProtocol), + /// Send a batch of validation messages. + SendValidationMessages(Vec<(Vec, protocol_v1::ValidationProtocol)>), + + /// Send a batch of collation messages. + SendCollationMessages(Vec<(Vec, protocol_v1::CollationProtocol)>), + /// Connect to peers who represent the given `validator_ids`. /// /// Also ask the network to stay connected to these peers at least @@ -225,6 +231,8 @@ impl NetworkBridgeMessage { Self::ReportPeer(_, _) => None, Self::SendValidationMessage(_, _) => None, Self::SendCollationMessage(_, _) => None, + Self::SendValidationMessages(_) => None, + Self::SendCollationMessages(_) => None, Self::ConnectToValidators { .. } => None, } } diff --git a/roadmap/implementers-guide/src/node/utility/network-bridge.md b/roadmap/implementers-guide/src/node/utility/network-bridge.md index 2a47459bd7..9f51094336 100644 --- a/roadmap/implementers-guide/src/node/utility/network-bridge.md +++ b/roadmap/implementers-guide/src/node/utility/network-bridge.md @@ -86,11 +86,11 @@ Map the message onto the corresponding [Event Handler](#event-handlers) based on - Adjust peer reputation according to cost or benefit provided -### SendValidationMessage +### SendValidationMessage / SendValidationMessages - Issue a corresponding `ProtocolMessage` to each listed peer on the validation peer-set. -### SendCollationMessage +### SendCollationMessage / SendCollationMessages - Issue a corresponding `ProtocolMessage` to each listed peer on the collation peer-set. diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 392927f9eb..02219a91f1 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -320,7 +320,11 @@ enum NetworkBridgeMessage { /// Send a message to one or more peers on the validation peerset. SendValidationMessage([PeerId], ValidationProtocolV1), /// Send a message to one or more peers on the collation peerset. - SendCollationMessage([PeerId], ValidationProtocolV1), + SendCollationMessage([PeerId], CollationProtocolV1), + /// Send multiple validation messages. + SendValidationMessages([([PeerId, ValidationProtocolV1])]), + /// Send multiple collation messages. + SendCollationMessages([([PeerId, ValidationProtocolV1])]), /// Connect to peers who represent the given `validator_ids`. /// /// Also ask the network to stay connected to these peers at least -- GitLab From 05b91fb4fc3862e8684b1a29b36fca0c7d9fd983 Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Fri, 8 Jan 2021 01:01:23 +0300 Subject: [PATCH 175/203] Avoid cloning and multiple entry calls (#2226) --- node/core/av-store/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 27973921d2..4905535a21 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -1000,9 +1000,7 @@ fn store_chunks( ); } - for chunk in chunks { - subsystem.chunks_cache.entry(*candidate_hash).or_default().insert(chunk.index, chunk.clone()); - + for chunk in &chunks { let pruning_record = ChunkPruningRecord { candidate_hash: candidate_hash.clone(), block_number, @@ -1024,6 +1022,8 @@ fn store_chunks( ); } + subsystem.chunks_cache.entry(*candidate_hash).or_default().extend(chunks.into_iter().map(|c| (c.index, c))); + tx.put_vec( columns::META, &CHUNK_PRUNING_KEY, -- GitLab From 6cfab385e6022be4e64201e252a98c6782d49224 Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Fri, 8 Jan 2021 14:40:46 +0300 Subject: [PATCH 176/203] Exit from av-store loop on fatal error. (#2232) * Fuse receive stream in Context * Revert "Fuse receive stream in Context" This reverts commit ddd26fa98f0ca1afbc22064e93010e4193a058b2. * Exit on node shutdown from av-store loop * Filter only context error --- node/core/av-store/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index 4905535a21..ca95d777a1 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -507,6 +507,10 @@ where match res { Err(e) => { e.trace(); + + if let Error::Subsystem(SubsystemError::Context(_)) = e { + break; + } } Ok(true) => { tracing::info!(target: LOG_TARGET, "received `Conclude` signal, exiting"); -- GitLab From 23f6d27ff1840a4fb75b71774ad6f4db2d361838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 8 Jan 2021 19:05:19 +0100 Subject: [PATCH 177/203] Do not send empty view updates to peers (#2233) * Do not send empty view updates to peers It happened that we send empty view updates to our peers, because we only updated our finalized block. This could lead to situations where we overwhelmed sub systems with too many messages. On Rococo this lead to constant restarts of our nodes, because some node apparently was finalizing a lot of blocks. To prevent this, the pr is doing the following: 1. If a peer sends us an empty view, we report this peer and decrease it reputation. 2. We ensure that we only send a view update when the `heads` changed and not only the `finalized_number`. 3. We do not send empty `ActiveLeavesUpdates` from the overseer, as this makes no sense to send these empty updates. If some subsystem is relying on the finalized block, it needs to listen for the overseer signal. * Update node/network/bridge/src/lib.rs Co-authored-by: Peter Goodspeed-Niklaus * Don't work if they're are no added heads * Fix test * Ahhh * More fixes Co-authored-by: Peter Goodspeed-Niklaus --- .../availability-distribution/src/lib.rs | 4 + node/network/bridge/src/lib.rs | 140 ++++++++++++------ node/overseer/src/lib.rs | 115 +++++++++++--- 3 files changed, 190 insertions(+), 69 deletions(-) diff --git a/node/network/availability-distribution/src/lib.rs b/node/network/availability-distribution/src/lib.rs index 0326e96b7b..8e3ada4005 100644 --- a/node/network/availability-distribution/src/lib.rs +++ b/node/network/availability-distribution/src/lib.rs @@ -550,6 +550,10 @@ where *current = view; + if added.is_empty() { + return + } + // only contains the intersection of what we are interested and // the union of all relay parent's candidates. let added_candidates = state.cached_live_candidates_unioned(added.iter()); diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 50fc8e7d87..a015947912 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -59,12 +59,10 @@ pub const VALIDATION_PROTOCOL_NAME: &'static str = "/polkadot/validation/1"; /// The protocol name for the collation peer-set. pub const COLLATION_PROTOCOL_NAME: &'static str = "/polkadot/collation/1"; -const MALFORMED_MESSAGE_COST: ReputationChange - = ReputationChange::new(-500, "Malformed Network-bridge message"); -const UNCONNECTED_PEERSET_COST: ReputationChange - = ReputationChange::new(-50, "Message sent to un-connected peer-set"); -const MALFORMED_VIEW_COST: ReputationChange - = ReputationChange::new(-500, "Malformed view"); +const MALFORMED_MESSAGE_COST: ReputationChange = ReputationChange::new(-500, "Malformed Network-bridge message"); +const UNCONNECTED_PEERSET_COST: ReputationChange = ReputationChange::new(-50, "Message sent to un-connected peer-set"); +const MALFORMED_VIEW_COST: ReputationChange = ReputationChange::new(-500, "Malformed view"); +const EMPTY_VIEW_COST: ReputationChange = ReputationChange::new(-500, "Peer sent us an empty view"); // network bridge log target const LOG_TARGET: &'static str = "network_bridge"; @@ -388,7 +386,11 @@ async fn update_our_view( collation_peers: &HashMap, ) -> SubsystemResult<()> { let new_view = construct_view(live_heads.iter().map(|v| v.0), finalized_number); - if *local_view == new_view { return Ok(()) } + + // We only want to send a view update when the heads changed, not when only the finalized block changed. + if local_view.heads == new_view.heads { + return Ok(()) + } *local_view = new_view.clone(); @@ -441,6 +443,13 @@ async fn handle_peer_messages( MALFORMED_VIEW_COST, ).await?; + continue + } else if new_view.heads.is_empty() { + net.report_peer( + peer.clone(), + EMPTY_VIEW_COST, + ).await?; + continue } else if new_view == peer_data.view { continue @@ -923,10 +932,11 @@ mod tests { } } - // network actions are sensitive to ordering of `PeerId`s within a `HashMap`, so - // we need to use this to prevent fragile reliance on peer ordering. - fn network_actions_contains(actions: &[NetworkAction], action: &NetworkAction) -> bool { - actions.iter().find(|&x| x == action).is_some() + /// Assert that the given actions contain the given `action`. + fn assert_network_actions_contains(actions: &[NetworkAction], action: &NetworkAction) { + if !actions.iter().any(|x| x == action) { + panic!("Could not find `{:?}` in `{:?}`", action, actions); + } } struct TestHarness { @@ -1035,23 +1045,85 @@ mod tests { view![hash_a] ).encode(); - assert!(network_actions_contains( + assert_network_actions_contains( + &actions, + &NetworkAction::WriteNotification( + peer_a, + PeerSet::Validation, + wire_message.clone(), + ), + ); + + assert_network_actions_contains( + &actions, + &NetworkAction::WriteNotification( + peer_b, + PeerSet::Validation, + wire_message.clone(), + ), + ); + }); + } + + #[test] + fn do_not_send_view_update_when_only_finalized_block_changed() { + test_harness(|test_harness| async move { + let TestHarness { mut network_handle, mut virtual_overseer } = test_harness; + + let peer_a = PeerId::random(); + let peer_b = PeerId::random(); + + network_handle.connect_peer( + peer_a.clone(), + PeerSet::Validation, + ObservedRole::Full, + ).await; + network_handle.connect_peer( + peer_b.clone(), + PeerSet::Validation, + ObservedRole::Full, + ).await; + + let hash_a = Hash::repeat_byte(1); + + virtual_overseer.send(FromOverseer::Signal(OverseerSignal::BlockFinalized(Hash::random(), 5))).await; + + // Send some empty active leaves update + // + // This should not trigger a view update to our peers. + virtual_overseer.send( + FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::default())) + ).await; + + // This should trigger the view update to our peers. + virtual_overseer.send( + FromOverseer::Signal(OverseerSignal::ActiveLeaves( + ActiveLeavesUpdate::start_work(hash_a, Arc::new(JaegerSpan::Disabled)), + )) + ).await; + + let actions = network_handle.next_network_actions(2).await; + let wire_message = WireMessage::::ViewUpdate( + View { heads: vec![hash_a], finalized_number: 5 } + ).encode(); + + assert_network_actions_contains( &actions, &NetworkAction::WriteNotification( peer_a, PeerSet::Validation, wire_message.clone(), ), - )); + ); - assert!(network_actions_contains( + assert_network_actions_contains( &actions, &NetworkAction::WriteNotification( peer_b, PeerSet::Validation, wire_message.clone(), ), - )); + ); }); } @@ -1225,14 +1297,14 @@ mod tests { view![hash_a] ).encode(); - assert!(network_actions_contains( + assert_network_actions_contains( &actions, &NetworkAction::WriteNotification( peer.clone(), PeerSet::Collation, wire_message.clone(), ), - )); + ); }); } @@ -1292,13 +1364,13 @@ mod tests { ).await; let actions = network_handle.next_network_actions(1).await; - assert!(network_actions_contains( + assert_network_actions_contains( &actions, &NetworkAction::ReputationChange( peer_a.clone(), UNCONNECTED_PEERSET_COST, ), - )); + ); // peer B has the message relayed. @@ -1402,7 +1474,6 @@ mod tests { let hash_a = Hash::repeat_byte(1); let hash_b = Hash::repeat_byte(2); - let hash_c = Hash::repeat_byte(3); virtual_overseer.send( FromOverseer::Signal(OverseerSignal::BlockFinalized(hash_a, 1)) @@ -1421,39 +1492,14 @@ mod tests { } ).encode(); - assert!(network_actions_contains( + assert_network_actions_contains( &actions, &NetworkAction::WriteNotification( peer_a.clone(), PeerSet::Validation, wire_message.clone(), ), - )); - - // view updates are issued even when `ActiveLeavesUpdate` is empty - virtual_overseer.send( - FromOverseer::Signal(OverseerSignal::BlockFinalized(hash_c, 3)) - ).await; - virtual_overseer.send( - FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::default())) - ).await; - - let actions = network_handle.next_network_actions(1).await; - let wire_message = WireMessage::::ViewUpdate( - View { - heads: vec![hash_b], - finalized_number: 3, - } - ).encode(); - - assert!(network_actions_contains( - &actions, - &NetworkAction::WriteNotification( - peer_a, - PeerSet::Validation, - wire_message.clone(), - ), - )); + ); }); } diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 05420026e6..9c4f88a9ef 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -137,7 +137,7 @@ enum ToOverseer { /// This structure exists solely for the purposes of decoupling /// `Overseer` code from the client code and the necessity to call /// `HeaderBackend::block_number_from_id()`. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct BlockInfo { /// hash of the block. pub hash: Hash, @@ -1514,7 +1514,9 @@ where update.activated.push((hash, span)); } - self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; + if !update.is_empty() { + self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; + } loop { select! { @@ -1620,10 +1622,14 @@ where self.on_head_deactivated(deactivated) } - self.broadcast_signal(OverseerSignal::BlockFinalized(block.hash, block.number)).await?; - // broadcast `ActiveLeavesUpdate` even if empty to issue view updates - self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; + + // If there are no leaves being deactivated, we don't need to send an update. + // + // Our peers will be informed about our finalized block the next time we activating/deactivating some leaf. + if !update.is_empty() { + self.broadcast_signal(OverseerSignal::ActiveLeaves(update)).await?; + } Ok(()) } @@ -1898,9 +1904,9 @@ mod tests { } } - struct TestSubsystem4; + struct ReturnOnStart; - impl Subsystem for TestSubsystem4 + impl Subsystem for ReturnOnStart where C: SubsystemContext { fn start(self, mut _ctx: C) -> SpawnedSubsystem { @@ -2043,29 +2049,22 @@ mod tests { // Spawn a subsystem that immediately exits. // - // Should immediately conclude the overseer itself with an error. + // Should immediately conclude the overseer itself. #[test] - fn overseer_panics_on_subsystem_exit() { + fn overseer_ends_on_subsystem_exit() { let spawner = sp_core::testing::TaskExecutor::new(); executor::block_on(async move { - let (s1_tx, _) = mpsc::channel(64); let all_subsystems = AllSubsystems::<()>::dummy() - .replace_candidate_validation(TestSubsystem1(s1_tx)) - .replace_candidate_backing(TestSubsystem4); + .replace_candidate_backing(ReturnOnStart); let (overseer, _handle) = Overseer::new( vec![], all_subsystems, None, spawner, ).unwrap(); - let overseer_fut = overseer.run().fuse(); - pin_mut!(overseer_fut); - select! { - res = overseer_fut => assert!(res.is_err()), - complete => (), - } + overseer.run().await.unwrap(); }) } @@ -2309,9 +2308,8 @@ mod tests { complete => break, } - if ss5_results.len() == expected_heartbeats.len() && - ss6_results.len() == expected_heartbeats.len() { - handler.stop().await; + if ss5_results.len() == expected_heartbeats.len() && ss6_results.len() == expected_heartbeats.len() { + handler.stop().await; } } @@ -2327,6 +2325,79 @@ mod tests { }); } + #[test] + fn do_not_send_empty_leaves_update_on_block_finalization() { + let spawner = sp_core::testing::TaskExecutor::new(); + + executor::block_on(async move { + let imported_block = BlockInfo { + hash: Hash::random(), + parent_hash: Hash::random(), + number: 1, + }; + + let finalized_block = BlockInfo { + hash: Hash::random(), + parent_hash: Hash::random(), + number: 1, + }; + + let (tx_5, mut rx_5) = mpsc::channel(64); + + let all_subsystems = AllSubsystems::<()>::dummy() + .replace_candidate_backing(TestSubsystem6(tx_5)); + + let (overseer, mut handler) = Overseer::new( + Vec::new(), + all_subsystems, + None, + spawner, + ).unwrap(); + + let overseer_fut = overseer.run().fuse(); + pin_mut!(overseer_fut); + + let mut ss5_results = Vec::new(); + + handler.block_finalized(finalized_block.clone()).await; + handler.block_imported(imported_block.clone()).await; + + let expected_heartbeats = vec![ + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: [ + (imported_block.hash, Arc::new(JaegerSpan::Disabled)), + ].as_ref().into(), + ..Default::default() + }), + OverseerSignal::BlockFinalized(finalized_block.hash, 1), + ]; + + loop { + select! { + res = overseer_fut => { + assert!(res.is_ok()); + break; + }, + res = rx_5.next() => { + if let Some(res) = dbg!(res) { + ss5_results.push(res); + } + } + } + + if ss5_results.len() == expected_heartbeats.len() { + handler.stop().await; + } + } + + assert_eq!(ss5_results.len(), expected_heartbeats.len()); + + for expected in expected_heartbeats { + assert!(ss5_results.contains(&expected)); + } + }); + } + #[derive(Clone)] struct CounterSubsystem { stop_signals_received: Arc, @@ -2542,7 +2613,7 @@ mod tests { assert_eq!(stop_signals_received.load(atomic::Ordering::SeqCst), NUM_SUBSYSTEMS); // x2 because of broadcast_signal on startup - assert_eq!(signals_received.load(atomic::Ordering::SeqCst), 2 * NUM_SUBSYSTEMS); + assert_eq!(signals_received.load(atomic::Ordering::SeqCst), NUM_SUBSYSTEMS); // -1 for BitfieldSigning assert_eq!(msgs_received.load(atomic::Ordering::SeqCst), NUM_SUBSYSTEMS - 1); -- GitLab From f621ea2c2548f6d6b87f74c0454940ff84d16759 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Fri, 8 Jan 2021 16:08:59 -0500 Subject: [PATCH 178/203] subsystems have an unbounded channel to the overseer (#2236) * subsystems have an unbounded channel to the overseer * Update node/overseer/src/lib.rs Co-authored-by: Bernhard Schuster * bump Cargo.lock Co-authored-by: Bernhard Schuster --- Cargo.lock | 1 - node/overseer/Cargo.toml | 1 - node/overseer/src/lib.rs | 138 +++++++++++++++------------------------ 3 files changed, 52 insertions(+), 88 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9800da4d0d..1d76f17a99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5348,7 +5348,6 @@ dependencies = [ "polkadot-primitives", "sc-client-api", "sp-core", - "streamunordered", "tracing", "tracing-futures", ] diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index 41c114f15d..0887dd3e3b 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -14,7 +14,6 @@ polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../pr polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../subsystem" } -streamunordered = "0.5.1" tracing = "0.1.22" tracing-futures = "0.2.4" diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 9c4f88a9ef..598f4121c7 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -70,12 +70,11 @@ use futures::channel::{mpsc, oneshot}; use futures::{ poll, select, future::BoxFuture, - stream::{self, FuturesUnordered}, + stream::{FuturesUnordered, Fuse}, Future, FutureExt, SinkExt, StreamExt, }; use futures_timer::Delay; use oorandom::Rand32; -use streamunordered::{StreamYield, StreamUnordered}; use polkadot_primitives::v1::{Block, BlockNumber, Hash}; use client::{BlockImportNotification, BlockchainEvents, FinalityNotification}; @@ -324,7 +323,7 @@ impl From for MaybeTimed { #[derive(Debug)] pub struct OverseerSubsystemContext{ rx: mpsc::Receiver>, - tx: mpsc::Sender>, + tx: mpsc::UnboundedSender>, metrics: Metrics, rng: Rand32, threshold: u32, @@ -340,7 +339,7 @@ impl OverseerSubsystemContext { /// to the range `0.0..=1.0`. fn new( rx: mpsc::Receiver>, - tx: mpsc::Sender>, + tx: mpsc::UnboundedSender>, metrics: Metrics, increment: u64, mut capture_rate: f64, @@ -361,7 +360,10 @@ impl OverseerSubsystemContext { /// /// Intended for tests. #[allow(unused)] - fn new_unmetered(rx: mpsc::Receiver>, tx: mpsc::Sender>) -> Self { + fn new_unmetered( + rx: mpsc::Receiver>, + tx: mpsc::UnboundedSender>, + ) -> Self { let metrics = Metrics::default(); OverseerSubsystemContext::new(rx, tx, metrics, 0, 0.0) } @@ -375,31 +377,6 @@ impl OverseerSubsystemContext { MaybeTimed { timer, t } } - - /// Make a standalone function which can construct a `MaybeTimed` wrapper around some `T` - /// without borrowing `self`. - /// - /// This is somewhat more expensive than `self.maybe_timed` because it must clone some stuff. - fn make_maybe_timed(&mut self) -> impl FnMut(T) -> MaybeTimed { - // We don't want to simply clone this RNG because we don't want to duplicate its state. - // It's not ever going to be used for cryptographic purposes, but it's still better to - // keep good habits. - let (seed, increment) = self.rng.state(); - let mut rng = Rand32::new_inc(seed, increment + 1); - - let metrics = self.metrics.clone(); - let threshold = self.threshold; - - move |t| { - let timer = if rng.rand_u32() <= threshold { - metrics.time_message_hold() - } else { - None - }; - - MaybeTimed { timer, t } - } - } } #[async_trait::async_trait] @@ -428,7 +405,7 @@ impl SubsystemContext for OverseerSubsystemContext { self.send_timed(ToOverseer::SpawnJob { name, s, - }).await.map_err(Into::into) + }).map_err(|s| s.into_send_error().into()) } async fn spawn_blocking(&mut self, name: &'static str, s: Pin + Send>>) @@ -437,23 +414,25 @@ impl SubsystemContext for OverseerSubsystemContext { self.send_timed(ToOverseer::SpawnBlockingJob { name, s, - }).await.map_err(Into::into) + }).map_err(|s| s.into_send_error().into()) } async fn send_message(&mut self, msg: AllMessages) { - self.send_and_log_error(ToOverseer::SubsystemMessage(msg)).await + self.send_and_log_error(ToOverseer::SubsystemMessage(msg)) } async fn send_messages(&mut self, msgs: T) where T: IntoIterator + Send, T::IntoIter: Send { - self.send_all_timed_or_log(msgs).await + for msg in msgs { + self.send_and_log_error(ToOverseer::SubsystemMessage(msg)); + } } } impl OverseerSubsystemContext { - async fn send_and_log_error(&mut self, msg: ToOverseer) { - if self.send_timed(msg).await.is_err() { + fn send_and_log_error(&mut self, msg: ToOverseer) { + if self.send_timed(msg).is_err() { tracing::debug!( target: LOG_TARGET, msg_type = std::any::type_name::(), @@ -462,33 +441,13 @@ impl OverseerSubsystemContext { } } - async fn send_timed(&mut self, msg: ToOverseer) -> Result< + fn send_timed(&mut self, msg: ToOverseer) -> Result< (), - > as futures::Sink>>::Error + mpsc::TrySendError>, > { let msg = self.maybe_timed(msg); - self.tx.send(msg).await - } - - async fn send_all_timed_or_log(&mut self, msgs: Msgs) - where - Msgs: IntoIterator + Send, - Msgs::IntoIter: Send, - Msg: Into + Send, - { - let mut maybe_timed = self.make_maybe_timed(); - let mut msgs = stream::iter( - msgs.into_iter() - .map(move |msg| Ok(maybe_timed(ToOverseer::SubsystemMessage(msg.into())))) - ); - if self.tx.send_all(&mut msgs).await.is_err() { - tracing::debug!( - target: LOG_TARGET, - msg_type = std::any::type_name::(), - "Failed to send messages to Overseer", - ); - } + self.tx.unbounded_send(msg) } } @@ -600,7 +559,7 @@ pub struct Overseer { running_subsystems: FuturesUnordered>>, /// Gather running subsystems' outbound streams into one. - running_subsystems_rx: StreamUnordered>>, + to_overseer_rx: Fuse>>, /// Events that are sent to the overseer from the outside world events_rx: mpsc::Receiver, @@ -1291,7 +1250,7 @@ where let metrics = ::register(prometheus_registry)?; - let mut running_subsystems_rx = StreamUnordered::new(); + let (to_overseer_tx, to_overseer_rx) = mpsc::unbounded(); let mut running_subsystems = FuturesUnordered::new(); let mut seed = 0x533d; // arbitrary @@ -1299,7 +1258,7 @@ where let candidate_validation_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.candidate_validation, &metrics, &mut seed, @@ -1308,7 +1267,7 @@ where let candidate_backing_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.candidate_backing, &metrics, &mut seed, @@ -1317,7 +1276,7 @@ where let candidate_selection_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.candidate_selection, &metrics, &mut seed, @@ -1326,7 +1285,7 @@ where let statement_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.statement_distribution, &metrics, &mut seed, @@ -1335,7 +1294,7 @@ where let availability_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.availability_distribution, &metrics, &mut seed, @@ -1344,7 +1303,7 @@ where let bitfield_signing_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.bitfield_signing, &metrics, &mut seed, @@ -1353,7 +1312,7 @@ where let bitfield_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.bitfield_distribution, &metrics, &mut seed, @@ -1362,7 +1321,7 @@ where let provisioner_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.provisioner, &metrics, &mut seed, @@ -1371,7 +1330,7 @@ where let pov_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.pov_distribution, &metrics, &mut seed, @@ -1380,7 +1339,7 @@ where let runtime_api_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.runtime_api, &metrics, &mut seed, @@ -1389,7 +1348,7 @@ where let availability_store_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.availability_store, &metrics, &mut seed, @@ -1398,7 +1357,7 @@ where let network_bridge_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.network_bridge, &metrics, &mut seed, @@ -1407,7 +1366,7 @@ where let chain_api_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.chain_api, &metrics, &mut seed, @@ -1416,7 +1375,7 @@ where let collation_generation_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.collation_generation, &metrics, &mut seed, @@ -1426,7 +1385,7 @@ where let collator_protocol_subsystem = spawn( &mut s, &mut running_subsystems, - &mut running_subsystems_rx, + to_overseer_tx.clone(), all_subsystems.collator_protocol, &metrics, &mut seed, @@ -1458,7 +1417,7 @@ where collator_protocol_subsystem, s, running_subsystems, - running_subsystems_rx, + to_overseer_rx: to_overseer_rx.fuse(), events_rx, activation_external_listeners, leaves, @@ -1546,11 +1505,14 @@ where } } }, - msg = self.running_subsystems_rx.next().fuse() => { - let MaybeTimed { timer, t: msg } = if let Some((StreamYield::Item(msg), _)) = msg { - msg - } else { - continue + msg = self.to_overseer_rx.next() => { + let MaybeTimed { timer, t: msg } = match msg { + Some(m) => m, + None => { + // This is a fused stream so we will shut down after receiving all + // shutdown notifications. + continue + } }; match msg { @@ -1773,14 +1735,19 @@ where fn spawn( spawner: &mut S, futures: &mut FuturesUnordered>>, - streams: &mut StreamUnordered>>, + to_overseer: mpsc::UnboundedSender>, s: impl Subsystem>, metrics: &Metrics, seed: &mut u64, ) -> SubsystemResult> { let (to_tx, to_rx) = mpsc::channel(CHANNEL_CAPACITY); - let (from_tx, from_rx) = mpsc::channel(CHANNEL_CAPACITY); - let ctx = OverseerSubsystemContext::new(to_rx, from_tx, metrics.clone(), *seed, MESSAGE_TIMER_METRIC_CAPTURE_RATE); + let ctx = OverseerSubsystemContext::new( + to_rx, + to_overseer, + metrics.clone(), + *seed, + MESSAGE_TIMER_METRIC_CAPTURE_RATE, + ); let SpawnedSubsystem { future, name } = s.start(ctx); // increment the seed now that it's been used, so the next context will have its own distinct RNG @@ -1799,7 +1766,6 @@ fn spawn( spawner.spawn(name, fut); - let _ = streams.push(from_rx); futures.push(Box::pin(rx.map(|e| { tracing::warn!(err = ?e, "dropping error"); Ok(()) }))); let instance = Some(SubsystemInstance { -- GitLab From 753075375c03e28868acbf3bcb7ffa7e4bd93da8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jan 2021 10:17:41 +0100 Subject: [PATCH 179/203] Bump smallvec from 1.6.0 to 1.6.1 (#2239) Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.6.0...v1.6.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 72 +++++++++++++------------- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 8 files changed, 43 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d76f17a99..84793ba8b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -858,7 +858,7 @@ dependencies = [ "log", "regalloc", "serde", - "smallvec 1.6.0", + "smallvec 1.6.1", "target-lexicon", "thiserror", ] @@ -896,7 +896,7 @@ checksum = "2ef419efb4f94ecc02e5d9fbcc910d2bb7f0040e2de570e63a454f883bc891d6" dependencies = [ "cranelift-codegen", "log", - "smallvec 1.6.0", + "smallvec 1.6.1", "target-lexicon", ] @@ -1574,7 +1574,7 @@ dependencies = [ "parity-scale-codec", "paste", "serde", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-arithmetic", "sp-core", "sp-inherents", @@ -2711,7 +2711,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -2749,7 +2749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92312348daade49976a6dc59263ad39ed54f840aacb5664874f7c9aa16e5f848" dependencies = [ "parity-util-mem", - "smallvec 1.6.0", + "smallvec 1.6.1", ] [[package]] @@ -2778,7 +2778,7 @@ dependencies = [ "parking_lot 0.11.1", "regex", "rocksdb", - "smallvec 1.6.0", + "smallvec 1.6.1", ] [[package]] @@ -2873,7 +2873,7 @@ dependencies = [ "parity-multiaddr", "parking_lot 0.11.1", "pin-project 1.0.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "wasm-timer", ] @@ -2904,7 +2904,7 @@ dependencies = [ "ring", "rw-stream-sink", "sha2 0.9.1", - "smallvec 1.6.0", + "smallvec 1.6.1", "thiserror", "unsigned-varint", "void", @@ -2958,7 +2958,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "smallvec 1.6.0", + "smallvec 1.6.1", ] [[package]] @@ -2982,7 +2982,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.1", - "smallvec 1.6.0", + "smallvec 1.6.1", "unsigned-varint", "wasm-timer", ] @@ -2999,7 +2999,7 @@ dependencies = [ "log", "prost", "prost-build", - "smallvec 1.6.0", + "smallvec 1.6.1", "wasm-timer", ] @@ -3022,7 +3022,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "sha2 0.9.1", - "smallvec 1.6.0", + "smallvec 1.6.1", "uint 0.8.3", "unsigned-varint", "void", @@ -3045,7 +3045,7 @@ dependencies = [ "libp2p-swarm", "log", "rand 0.7.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "socket2", "void", ] @@ -3064,7 +3064,7 @@ dependencies = [ "nohash-hasher", "parking_lot 0.11.1", "rand 0.7.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "unsigned-varint", ] @@ -3151,7 +3151,7 @@ dependencies = [ "lru", "minicbor", "rand 0.7.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "unsigned-varint", "wasm-timer", ] @@ -3167,7 +3167,7 @@ dependencies = [ "libp2p-core", "log", "rand 0.7.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "void", "wasm-timer", ] @@ -3640,7 +3640,7 @@ dependencies = [ "futures 0.3.8", "log", "pin-project 1.0.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "unsigned-varint", ] @@ -4379,7 +4379,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "serde", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-core", "sp-io", "sp-runtime", @@ -4559,7 +4559,7 @@ dependencies = [ "parity-util-mem-derive", "parking_lot 0.11.1", "primitive-types", - "smallvec 1.6.0", + "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4670,7 +4670,7 @@ dependencies = [ "cloudabi 0.0.3", "libc", "redox_syscall", - "smallvec 1.6.0", + "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4685,7 +4685,7 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec 1.6.0", + "smallvec 1.6.1", "winapi 0.3.9", ] @@ -5271,7 +5271,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-core", "substrate-prometheus-endpoint", "thiserror", @@ -5296,7 +5296,7 @@ dependencies = [ "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-core", "tracing", "tracing-futures", @@ -5503,7 +5503,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -5797,7 +5797,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -6386,7 +6386,7 @@ version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" dependencies = [ - "smallvec 1.6.0", + "smallvec 1.6.1", ] [[package]] @@ -6417,7 +6417,7 @@ checksum = "b9ba8aaf5fe7cf307c6dbdaeed85478961d29e25e3bee5169e11b92fa9f027a8" dependencies = [ "log", "rustc-hash", - "smallvec 1.6.0", + "smallvec 1.6.1", ] [[package]] @@ -6530,7 +6530,7 @@ dependencies = [ "polkadot-runtime-parachains", "serde", "serde_derive", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-api", "sp-authority-discovery", "sp-block-builder", @@ -7273,7 +7273,7 @@ dependencies = [ "serde_json", "slog", "slog_derive", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-arithmetic", "sp-blockchain", "sp-consensus", @@ -8010,9 +8010,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a55ca5f3b68e41c979bf8c46a6f1da892ca4db8f94023ce0bd32407573b1ac0" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "snow" @@ -8552,7 +8552,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", "rand 0.7.3", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-core", "sp-externalities", "sp-panic-handler", @@ -9572,7 +9572,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec 1.6.0", + "smallvec 1.6.1", "thread_local", "tracing", "tracing-core", @@ -9596,7 +9596,7 @@ dependencies = [ "hashbrown", "log", "rustc-hex", - "smallvec 1.6.0", + "smallvec 1.6.1", ] [[package]] @@ -9993,7 +9993,7 @@ dependencies = [ "log", "region", "rustc-demangle", - "smallvec 1.6.0", + "smallvec 1.6.1", "target-lexicon", "wasmparser 0.59.0", "wasmtime-environ", @@ -10244,7 +10244,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "smallvec 1.6.0", + "smallvec 1.6.1", "sp-api", "sp-authority-discovery", "sp-block-builder", diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 11d956ba38..48bb1f0f21 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -20,7 +20,7 @@ polkadot-node-subsystem-util = { path = "../subsystem-util" } polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.6.0" +smallvec = "1.6.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index bb666351b3..e01287d9bb 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -24,7 +24,7 @@ polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } polkadot-node-jaeger = { path = "../jaeger" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -smallvec = "1.6.0" +smallvec = "1.6.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.23" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index c98c553fab..3e66e7fe02 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.6.0" +smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 05a45075f0..00f9cb019f 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -13,7 +13,7 @@ rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -smallvec = "1.6.0" +smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index d61861ec09..cde9101492 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -9,7 +9,7 @@ build = "build.rs" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.6.0" +smallvec = "1.6.1" frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 5184cdcc4d..1ee7c0718d 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.6.0" +smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 78370a9d2f..8db466b03d 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -12,7 +12,7 @@ log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } -smallvec = "1.6.0" +smallvec = "1.6.1" static_assertions = "1.1.0" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -- GitLab From 4a8eeeac1b90f1362950b112a82d66ef4eea077e Mon Sep 17 00:00:00 2001 From: Witt Huo Date: Mon, 11 Jan 2021 19:04:27 +0800 Subject: [PATCH 180/203] repair Dockerfile /data path (#2231) --- docker/Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 0cb7904fd7..ce09433878 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,9 +16,10 @@ ARG PROFILE=release COPY --from=builder /polkadot/target/$PROFILE/polkadot /usr/local/bin RUN useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ - mkdir -p /polkadot/.local/share/polkadot && \ - chown -R polkadot:polkadot /polkadot/.local && \ - ln -s /polkadot/.local/share/polkadot /data && \ + mkdir -p /polkadot/.local/share && \ + mkdir /data && \ + chown -R polkadot:polkadot /data && \ + ln -s /data /polkadot/.local/share/polkadot && \ rm -rf /usr/bin /usr/sbin USER polkadot -- GitLab From ac5e2a08345e99486be46c911889914d99f07286 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jan 2021 14:27:48 +0100 Subject: [PATCH 181/203] Bump pin-project from 1.0.3 to 1.0.4 (#2240) Bumps [pin-project](https://github.com/taiki-e/pin-project) from 1.0.3 to 1.0.4. - [Release notes](https://github.com/taiki-e/pin-project/releases) - [Changelog](https://github.com/taiki-e/pin-project/blob/master/CHANGELOG.md) - [Commits](https://github.com/taiki-e/pin-project/compare/v1.0.3...v1.0.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 28 +++++++++++++------------- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 84793ba8b0..8472139db9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1851,7 +1851,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.3", + "pin-project 1.0.4", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -2259,7 +2259,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project 1.0.3", + "pin-project 1.0.4", "socket2", "tokio 0.2.21", "tower-service", @@ -2872,7 +2872,7 @@ dependencies = [ "libp2p-yamux", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.3", + "pin-project 1.0.4", "smallvec 1.6.1", "wasm-timer", ] @@ -2897,7 +2897,7 @@ dependencies = [ "multistream-select", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.3", + "pin-project 1.0.4", "prost", "prost-build", "rand 0.7.3", @@ -3130,7 +3130,7 @@ checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599" dependencies = [ "futures 0.3.8", "log", - "pin-project 1.0.3", + "pin-project 1.0.4", "rand 0.7.3", "salsa20", "sha3", @@ -3639,7 +3639,7 @@ dependencies = [ "bytes 0.5.6", "futures 0.3.8", "log", - "pin-project 1.0.3", + "pin-project 1.0.4", "smallvec 1.6.1", "unsigned-varint", ] @@ -4815,11 +4815,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a83804639aad6ba65345661744708855f9fbcb71176ea8d28d05aeb11d975e7" +checksum = "95b70b68509f17aa2857863b6fa00bf21fc93674c7a8893de2f469f6aa7ca2f2" dependencies = [ - "pin-project-internal 1.0.3", + "pin-project-internal 1.0.4", ] [[package]] @@ -4835,9 +4835,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a" +checksum = "caa25a6393f22ce819b0f50e0be89287292fda8d425be38ee0ca14c4931d9e71" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -5263,7 +5263,7 @@ dependencies = [ "mick-jaeger", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.3", + "pin-project 1.0.4", "polkadot-node-jaeger", "polkadot-node-network-protocol", "polkadot-node-primitives", @@ -5288,7 +5288,7 @@ dependencies = [ "futures-timer 3.0.2", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.3", + "pin-project 1.0.4", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -5314,7 +5314,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.11.1", - "pin-project 1.0.3", + "pin-project 1.0.4", "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-node-subsystem", diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 48bb1f0f21..3090565d3d 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -13,7 +13,7 @@ tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" -pin-project = "1.0.3" +pin-project = "1.0.4" polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-subsystem-util = { path = "../subsystem-util" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 0be519cf2d..3c2a3f5643 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -11,7 +11,7 @@ futures = "0.3.8" futures-timer = "3.0.2" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } -pin-project = "1.0.3" +pin-project = "1.0.4" streamunordered = "0.5.1" thiserror = "1.0.23" tracing = "0.1.22" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index e01287d9bb..21847ecced 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -17,7 +17,7 @@ tracing = "0.1.22" tracing-futures = "0.2.4" parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } parking_lot = "0.11.1" -pin-project = "1.0.3" +pin-project = "1.0.4" polkadot-node-primitives = { path = "../primitives" } polkadot-node-network-protocol = { path = "../network/protocol" } polkadot-primitives = { path = "../../primitives" } -- GitLab From 078e1605dcea6d9b0d94a2c5df4c1ab606f1624d Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 11 Jan 2021 12:46:09 -0500 Subject: [PATCH 182/203] alternate availability store schema (#2237) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * alternate availability store schema * improvements * tweaks * new DB schema and skeleton * expand skeleton and tweaks * handle backing and inclusion * let finality be handled later * handle finalized blocks * implement query methods * implement chunk storing * StoreAvailableData * fix an off-by-one * implement pruning * reinstate subsystem trait impl * reinstate metrics * fix warnings * remove chunks_cache * oops * actually store the available data * mockable pruning interval * fix tests * spacing * fix code grumbles * guide improvements * make time mockable * implement a mocked clock for testing * return DB errors * Update node/core/av-store/Cargo.toml Co-authored-by: Bastian Köcher * Update roadmap/implementers-guide/src/node/utility/availability-store.md Co-authored-by: Bastian Köcher * Update roadmap/implementers-guide/src/node/utility/availability-store.md Co-authored-by: Bastian Köcher * review grumbles & clarity * fix review grumbles * Add docs Co-authored-by: Andronik Ordian Co-authored-by: Bastian Köcher Co-authored-by: Andronik Ordian --- Cargo.lock | 3 + node/core/av-store/Cargo.toml | 3 + node/core/av-store/src/lib.rs | 1645 ++++++++--------- node/core/av-store/src/tests.rs | 594 +++--- .../src/node/utility/availability-store.md | 186 +- .../src/types/overseer-protocol.md | 6 +- 6 files changed, 1256 insertions(+), 1181 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8472139db9..2ad2e9c915 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5044,6 +5044,7 @@ name = "polkadot-node-core-av-store" version = "0.1.0" dependencies = [ "assert_matches", + "bitvec", "env_logger 0.8.2", "futures 0.3.8", "futures-timer 3.0.2", @@ -5052,6 +5053,7 @@ dependencies = [ "kvdb-rocksdb", "log", "parity-scale-codec", + "parking_lot 0.11.1", "polkadot-erasure-coding", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5060,6 +5062,7 @@ dependencies = [ "polkadot-primitives", "sc-service", "sp-core", + "sp-keyring", "thiserror", "tracing", "tracing-futures", diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 4dee43dc62..3f34a1ee0f 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -12,6 +12,7 @@ kvdb-rocksdb = "0.10.0" thiserror = "1.0.23" tracing = "0.1.22" tracing-futures = "0.2.4" +bitvec = "0.17.4" parity-scale-codec = { version = "1.3.5", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } @@ -31,3 +32,5 @@ kvdb-memorydb = "0.8.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } +parking_lot = "0.11.1" diff --git a/node/core/av-store/src/lib.rs b/node/core/av-store/src/lib.rs index ca95d777a1..a8b498e48b 100644 --- a/node/core/av-store/src/lib.rs +++ b/node/core/av-store/src/lib.rs @@ -19,21 +19,21 @@ #![recursion_limit="256"] #![warn(missing_docs)] -use std::cmp::Ordering; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::io; use std::path::PathBuf; use std::sync::Arc; use std::time::{Duration, SystemTime, SystemTimeError, UNIX_EPOCH}; -use parity_scale_codec::{Encode, Decode}; -use futures::{select, channel::oneshot, future::{self, Either}, Future, FutureExt}; +use parity_scale_codec::{Encode, Decode, Input, Error as CodecError}; +use futures::{select, channel::oneshot, future, FutureExt}; use futures_timer::Delay; use kvdb_rocksdb::{Database, DatabaseConfig}; use kvdb::{KeyValueDB, DBTransaction}; use polkadot_primitives::v1::{ Hash, AvailableData, BlockNumber, CandidateEvent, ErasureChunk, ValidatorIndex, CandidateHash, + CandidateReceipt, }; use polkadot_subsystem::{ FromOverseer, OverseerSignal, SubsystemError, Subsystem, SubsystemContext, SpawnedSubsystem, @@ -42,8 +42,12 @@ use polkadot_subsystem::{ }; use polkadot_node_subsystem_util::metrics::{self, prometheus}; use polkadot_subsystem::messages::{ - AllMessages, AvailabilityStoreMessage, ChainApiMessage, RuntimeApiMessage, RuntimeApiRequest, + AvailabilityStoreMessage, ChainApiMessage, RuntimeApiMessage, RuntimeApiRequest, }; +use bitvec::{vec::BitVec, order::Lsb0 as BitOrderLsb0}; + +#[cfg(test)] +mod tests; const LOG_TARGET: &str = "availability"; @@ -53,374 +57,348 @@ mod columns { pub const NUM_COLUMNS: u32 = 2; } -#[derive(Debug, thiserror::Error)] -#[allow(missing_docs)] -pub enum Error { - #[error(transparent)] - RuntimeApi(#[from] RuntimeApiError), +/// The following constants are used under normal conditions: - #[error(transparent)] - ChainApi(#[from] ChainApiError), +const AVAILABLE_PREFIX: &[u8; 9] = b"available"; +const CHUNK_PREFIX: &[u8; 5] = b"chunk"; +const META_PREFIX: &[u8; 4] = b"meta"; +const UNFINALIZED_PREFIX: &[u8; 11] = b"unfinalized"; +const PRUNE_BY_TIME_PREFIX: &[u8; 13] = b"prune_by_time"; - #[error(transparent)] - Erasure(#[from] erasure::Error), +// We have some keys we want to map to empty values because existence of the key is enough. We use this because +// rocksdb doesn't support empty values. +const TOMBSTONE_VALUE: &[u8] = &*b" "; - #[error(transparent)] - Io(#[from] io::Error), +/// Unavailable blocks are kept for 1 hour. +const KEEP_UNAVAILABLE_FOR: Duration = Duration::from_secs(60 * 60); - #[error(transparent)] - Oneshot(#[from] oneshot::Canceled), +/// Finalized data is kept for 25 hours. +const KEEP_FINALIZED_FOR: Duration = Duration::from_secs(25 * 60 * 60); - #[error(transparent)] - Subsystem(#[from] SubsystemError), +/// The pruning interval. +const PRUNING_INTERVAL: Duration = Duration::from_secs(60 * 5); - #[error(transparent)] - Time(#[from] SystemTimeError), +/// Unix time wrapper with big-endian encoding. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord)] +struct BETimestamp(u64); - #[error("Custom databases are not supported")] - CustomDatabase, -} +impl Encode for BETimestamp { + fn size_hint(&self) -> usize { + std::mem::size_of::() + } -impl Error { - fn trace(&self) { - match self { - // don't spam the log with spurious errors - Self::RuntimeApi(_) | - Self::Oneshot(_) => tracing::debug!(target: LOG_TARGET, err = ?self), - // it's worth reporting otherwise - _ => tracing::warn!(target: LOG_TARGET, err = ?self), - } + fn using_encoded R>(&self, f: F) -> R { + f(&self.0.to_be_bytes()) } } -/// A wrapper type for delays. -#[derive(Clone, Debug, Decode, Encode, Eq)] -enum PruningDelay { - /// This pruning should be triggered after this `Duration` from UNIX_EPOCH. - In(Duration), +impl Decode for BETimestamp { + fn decode(value: &mut I) -> Result { + <[u8; 8]>::decode(value).map(u64::from_be_bytes).map(Self) + } +} - /// Data is in the state where it has no expiration. - Indefinite, +impl From for BETimestamp { + fn from(d: Duration) -> Self { + BETimestamp(d.as_secs()) + } } -impl PruningDelay { - fn now() -> Result { - Ok(SystemTime::now().duration_since(UNIX_EPOCH)?.into()) +impl Into for BETimestamp { + fn into(self) -> Duration { + Duration::from_secs(self.0) } +} - fn into_the_future(duration: Duration) -> Result { - Ok(Self::In(SystemTime::now().duration_since(UNIX_EPOCH)? + duration)) +/// [`BlockNumber`] wrapper with big-endian encoding. +#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord)] +struct BEBlockNumber(BlockNumber); + +impl Encode for BEBlockNumber { + fn size_hint(&self) -> usize { + std::mem::size_of::() } - fn as_duration(&self) -> Option { - match self { - PruningDelay::In(d) => Some(*d), - PruningDelay::Indefinite => None, - } + fn using_encoded R>(&self, f: F) -> R { + f(&self.0.to_be_bytes()) } } -impl From for PruningDelay { - fn from(d: Duration) -> Self { - Self::In(d) +impl Decode for BEBlockNumber { + fn decode(value: &mut I) -> Result { + <[u8; std::mem::size_of::()]>::decode(value).map(BlockNumber::from_be_bytes).map(Self) } } -impl PartialEq for PruningDelay { - fn eq(&self, other: &Self) -> bool { - match (self, other) { - (PruningDelay::In(this), PruningDelay::In(that)) => {this == that}, - (PruningDelay::Indefinite, PruningDelay::Indefinite) => true, - _ => false, - } - } +#[derive(Debug, Encode, Decode)] +enum State { + /// Candidate data was first observed at the given time but is not available in any block. + #[codec(index = "0")] + Unavailable(BETimestamp), + /// The candidate was first observed at the given time and was included in the given list of unfinalized blocks, which may be + /// empty. The timestamp here is not used for pruning. Either one of these blocks will be finalized or the state will regress to + /// `State::Unavailable`, in which case the same timestamp will be reused. Blocks are sorted ascending first by block number and + /// then hash. + #[codec(index = "1")] + Unfinalized(BETimestamp, Vec<(BEBlockNumber, Hash)>), + /// Candidate data has appeared in a finalized block and did so at the given time. + #[codec(index = "2")] + Finalized(BETimestamp) } -impl PartialOrd for PruningDelay { - fn partial_cmp(&self, other: &Self) -> Option { - match (self, other) { - (PruningDelay::In(this), PruningDelay::In(that)) => this.partial_cmp(that), - (PruningDelay::In(_), PruningDelay::Indefinite) => Some(Ordering::Less), - (PruningDelay::Indefinite, PruningDelay::In(_)) => Some(Ordering::Greater), - (PruningDelay::Indefinite, PruningDelay::Indefinite) => Some(Ordering::Equal), - } - } +// Meta information about a candidate. +#[derive(Debug, Encode, Decode)] +struct CandidateMeta { + state: State, + data_available: bool, + chunks_stored: BitVec, } -impl Ord for PruningDelay { - fn cmp(&self, other: &Self) -> Ordering { - match (self, other) { - (PruningDelay::In(this), PruningDelay::In(that)) => this.cmp(that), - (PruningDelay::In(_), PruningDelay::Indefinite) => Ordering::Less, - (PruningDelay::Indefinite, PruningDelay::In(_)) => Ordering::Greater, - (PruningDelay::Indefinite, PruningDelay::Indefinite) => Ordering::Equal, +fn query_inner( + db: &Arc, + column: u32, + key: &[u8], +) -> Result, Error> { + match db.get(column, key) { + Ok(Some(raw)) => { + let res = D::decode(&mut &raw[..])?; + Ok(Some(res)) + } + Ok(None) => Ok(None), + Err(e) => { + tracing::warn!(target: LOG_TARGET, err = ?e, "Error reading from the availability store"); + Err(e.into()) } } } -/// A key for chunk pruning records. -const CHUNK_PRUNING_KEY: [u8; 14] = *b"chunks_pruning"; +fn write_available_data( + tx: &mut DBTransaction, + hash: &CandidateHash, + available_data: &AvailableData, +) { + let key = (AVAILABLE_PREFIX, hash).encode(); -/// A key for PoV pruning records. -const POV_PRUNING_KEY: [u8; 11] = *b"pov_pruning"; + tx.put_vec(columns::DATA, &key[..], available_data.encode()); +} -/// A key for a cached value of next scheduled PoV pruning. -const NEXT_POV_PRUNING: [u8; 16] = *b"next_pov_pruning"; +fn load_available_data( + db: &Arc, + hash: &CandidateHash, +) -> Result, Error> { + let key = (AVAILABLE_PREFIX, hash).encode(); -/// A key for a cached value of next scheduled chunk pruning. -const NEXT_CHUNK_PRUNING: [u8; 18] = *b"next_chunk_pruning"; + query_inner(db, columns::DATA, &key) +} -/// The following constants are used under normal conditions: +fn delete_available_data( + tx: &mut DBTransaction, + hash: &CandidateHash, +) { + let key = (AVAILABLE_PREFIX, hash).encode(); -/// Stored block is kept available for 1 hour. -const KEEP_STORED_BLOCK_FOR: Duration = Duration::from_secs(60 * 60); - -/// Finalized block is kept for 1 day. -const KEEP_FINALIZED_BLOCK_FOR: Duration = Duration::from_secs(24 * 60 * 60); - -/// Keep chunk of the finalized block for 1 day + 1 hour. -const KEEP_FINALIZED_CHUNK_FOR: Duration = Duration::from_secs(25 * 60 * 60); - -/// At which point in time since UNIX_EPOCH we need to wakeup and do next pruning of blocks. -/// Essenially this is the first element in the sorted array of pruning data, -/// we just want to cache it here to avoid lifting the whole array just to look at the head. -/// -/// This record exists under `NEXT_POV_PRUNING` key, if it does not either: -/// a) There are no records and nothing has to be pruned. -/// b) There are records but all of them are in `Included` state and do not have exact time to -/// be pruned. -#[derive(Decode, Encode)] -struct NextPoVPruning(Duration); - -impl NextPoVPruning { - // After which duration from `now` this should fire. - fn should_fire_in(&self) -> Result { - Ok(self.0.checked_sub(SystemTime::now().duration_since(UNIX_EPOCH)?).unwrap_or_default()) - } + tx.delete(columns::DATA, &key[..]) } -/// At which point in time since UNIX_EPOCH we need to wakeup and do next pruning of chunks. -/// Essentially this is the first element in the sorted array of pruning data, -/// we just want to cache it here to avoid lifting the whole array just to look at the head. -/// -/// This record exists under `NEXT_CHUNK_PRUNING` key, if it does not either: -/// a) There are no records and nothing has to be pruned. -/// b) There are records but all of them are in `Included` state and do not have exact time to -/// be pruned. -#[derive(Decode, Encode)] -struct NextChunkPruning(Duration); - -impl NextChunkPruning { - // After which amount of seconds into the future from `now` this should fire. - fn should_fire_in(&self) -> Result { - Ok(self.0.checked_sub(SystemTime::now().duration_since(UNIX_EPOCH)?).unwrap_or_default()) - } -} +fn load_chunk( + db: &Arc, + candidate_hash: &CandidateHash, + chunk_index: ValidatorIndex, +) -> Result, Error> { + let key = (CHUNK_PREFIX, candidate_hash, chunk_index).encode(); -/// Struct holding pruning timing configuration. -/// The only purpose of this structure is to use different timing -/// configurations in production and in testing. -#[derive(Clone)] -struct PruningConfig { - /// How long should a stored block stay available. - keep_stored_block_for: Duration, + query_inner(db, columns::DATA, &key) +} - /// How long should a finalized block stay available. - keep_finalized_block_for: Duration, +fn write_chunk( + tx: &mut DBTransaction, + candidate_hash: &CandidateHash, + chunk_index: ValidatorIndex, + erasure_chunk: &ErasureChunk, +) { + let key = (CHUNK_PREFIX, candidate_hash, chunk_index).encode(); - /// How long should a chunk of a finalized block stay available. - keep_finalized_chunk_for: Duration, + tx.put_vec(columns::DATA, &key, erasure_chunk.encode()); } -impl Default for PruningConfig { - fn default() -> Self { - Self { - keep_stored_block_for: KEEP_STORED_BLOCK_FOR, - keep_finalized_block_for: KEEP_FINALIZED_BLOCK_FOR, - keep_finalized_chunk_for: KEEP_FINALIZED_CHUNK_FOR, - } - } -} +fn delete_chunk( + tx: &mut DBTransaction, + candidate_hash: &CandidateHash, + chunk_index: ValidatorIndex, +) { + let key = (CHUNK_PREFIX, candidate_hash, chunk_index).encode(); -#[derive(Debug, Decode, Encode, Eq, PartialEq)] -enum CandidateState { - Stored, - Included, - Finalized, + tx.delete(columns::DATA, &key[..]); } -#[derive(Debug, Decode, Encode, Eq)] -struct PoVPruningRecord { - candidate_hash: CandidateHash, - block_number: BlockNumber, - candidate_state: CandidateState, - prune_at: PruningDelay, -} +fn load_meta( + db: &Arc, + hash: &CandidateHash, +) -> Result, Error> { + let key = (META_PREFIX, hash).encode(); -impl PartialEq for PoVPruningRecord { - fn eq(&self, other: &Self) -> bool { - self.candidate_hash == other.candidate_hash - } + query_inner(db, columns::META, &key) } -impl Ord for PoVPruningRecord { - fn cmp(&self, other: &Self) -> Ordering { - if self.candidate_hash == other.candidate_hash { - return Ordering::Equal; - } +fn write_meta( + tx: &mut DBTransaction, + hash: &CandidateHash, + meta: &CandidateMeta, +) { + let key = (META_PREFIX, hash).encode(); - self.prune_at.cmp(&other.prune_at) - } + tx.put_vec(columns::META, &key, meta.encode()); } -impl PartialOrd for PoVPruningRecord { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } +fn delete_meta(tx: &mut DBTransaction, hash: &CandidateHash) { + let key = (META_PREFIX, hash).encode(); + tx.delete(columns::META, &key[..]) } -#[derive(Debug, Decode, Encode, Eq)] -struct ChunkPruningRecord { - candidate_hash: CandidateHash, +fn delete_unfinalized_height( + tx: &mut DBTransaction, block_number: BlockNumber, - candidate_state: CandidateState, - chunk_index: u32, - prune_at: PruningDelay, +) { + let prefix = (UNFINALIZED_PREFIX, BEBlockNumber(block_number)).encode(); + tx.delete_prefix(columns::META, &prefix); } -impl PartialEq for ChunkPruningRecord { - fn eq(&self, other: &Self) -> bool { - self.candidate_hash == other.candidate_hash && - self.chunk_index == other.chunk_index - } +fn delete_unfinalized_inclusion( + tx: &mut DBTransaction, + block_number: BlockNumber, + block_hash: &Hash, + candidate_hash: &CandidateHash, +) { + let key = ( + UNFINALIZED_PREFIX, + BEBlockNumber(block_number), + block_hash, + candidate_hash, + ).encode(); + + tx.delete(columns::META, &key[..]); } -impl Ord for ChunkPruningRecord { - fn cmp(&self, other: &Self) -> Ordering { - if self.candidate_hash == other.candidate_hash { - return Ordering::Equal; - } +fn delete_pruning_key(tx: &mut DBTransaction, t: impl Into, h: &CandidateHash) { + let key = (PRUNE_BY_TIME_PREFIX, t.into(), h).encode(); + tx.delete(columns::META, &key); +} - self.prune_at.cmp(&other.prune_at) - } +fn write_pruning_key(tx: &mut DBTransaction, t: impl Into, h: &CandidateHash) { + let t = t.into(); + let key = (PRUNE_BY_TIME_PREFIX, t, h).encode(); + tx.put(columns::META, &key, TOMBSTONE_VALUE); } -impl PartialOrd for ChunkPruningRecord { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } +fn finalized_block_range(finalized: BlockNumber) -> (Vec, Vec) { + // We use big-endian encoding to iterate in ascending order. + let start = UNFINALIZED_PREFIX.encode(); + let end = (UNFINALIZED_PREFIX, BEBlockNumber(finalized + 1)).encode(); + + (start, end) } -/// An implementation of the Availability Store subsystem. -pub struct AvailabilityStoreSubsystem { - pruning_config: PruningConfig, - inner: Arc, - chunks_cache: HashMap>, - metrics: Metrics, +fn write_unfinalized_block_contains( + tx: &mut DBTransaction, + n: BlockNumber, + h: &Hash, + ch: &CandidateHash, +) { + let key = (UNFINALIZED_PREFIX, BEBlockNumber(n), h, ch).encode(); + tx.put(columns::META, &key, TOMBSTONE_VALUE); } -impl AvailabilityStoreSubsystem { - // Perform pruning of PoVs - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn prune_povs(&mut self) -> Result<(), Error> { - let _timer = self.metrics.time_prune_povs(); - - let mut tx = DBTransaction::new(); - let mut pov_pruning = pov_pruning(&self.inner).unwrap_or_default(); - let now = PruningDelay::now()?; - - tracing::trace!(target: LOG_TARGET, "Pruning PoVs"); - let outdated_records_count = pov_pruning.iter() - .take_while(|r| r.prune_at <= now) - .count(); - - for record in pov_pruning.drain(..outdated_records_count) { - tracing::trace!(target: LOG_TARGET, record = ?record, "Removing record"); - - self.chunks_cache.remove(&record.candidate_hash); - tx.delete( - columns::DATA, - available_data_key(&record.candidate_hash).as_slice(), - ); - } +fn pruning_range(now: impl Into) -> (Vec, Vec) { + let start = PRUNE_BY_TIME_PREFIX.encode(); + let end = (PRUNE_BY_TIME_PREFIX, BETimestamp(now.into().0 + 1)).encode(); - put_pov_pruning(&self.inner, Some(tx), pov_pruning, &self.metrics)?; + (start, end) +} - Ok(()) +fn decode_unfinalized_key(s: &[u8]) -> Result<(BlockNumber, Hash, CandidateHash), CodecError> { + if !s.starts_with(UNFINALIZED_PREFIX) { + return Err("missing magic string".into()); } - // Perform pruning of chunks. - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn prune_chunks(&mut self) -> Result<(), Error> { - let _timer = self.metrics.time_prune_chunks(); + <(BEBlockNumber, Hash, CandidateHash)>::decode(&mut &s[UNFINALIZED_PREFIX.len()..]) + .map(|(b, h, ch)| (b.0, h, ch)) +} - let mut tx = DBTransaction::new(); - let mut chunk_pruning = chunk_pruning(&self.inner).unwrap_or_default(); - let now = PruningDelay::now()?; +fn decode_pruning_key(s: &[u8]) -> Result<(Duration, CandidateHash), CodecError> { + if !s.starts_with(PRUNE_BY_TIME_PREFIX) { + return Err("missing magic string".into()); + } - tracing::trace!(target: LOG_TARGET, "Pruning Chunks"); - let outdated_records_count = chunk_pruning.iter() - .take_while(|r| r.prune_at <= now) - .count(); + <(BETimestamp, CandidateHash)>::decode(&mut &s[PRUNE_BY_TIME_PREFIX.len()..]) + .map(|(t, ch)| (t.into(), ch)) +} - for record in chunk_pruning.drain(..outdated_records_count) { - tracing::trace!(target: LOG_TARGET, record = ?record, "Removing record"); +#[derive(Debug, thiserror::Error)] +#[allow(missing_docs)] +pub enum Error { + #[error(transparent)] + RuntimeApi(#[from] RuntimeApiError), - self.chunks_cache.remove(&record.candidate_hash); - tx.delete( - columns::DATA, - erasure_chunk_key(&record.candidate_hash, record.chunk_index).as_slice(), - ); - } + #[error(transparent)] + ChainApi(#[from] ChainApiError), + + #[error(transparent)] + Erasure(#[from] erasure::Error), - put_chunk_pruning(&self.inner, Some(tx), chunk_pruning, &self.metrics)?; + #[error(transparent)] + Io(#[from] io::Error), - Ok(()) - } + #[error(transparent)] + Oneshot(#[from] oneshot::Canceled), - // Return a `Future` that either resolves when another PoV pruning has to happen - // or is indefinitely `pending` in case no pruning has to be done. - // Just a helper to `select` over multiple things at once. - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn maybe_prune_povs(&self) -> Result, Error> { - let future = match get_next_pov_pruning_time(&self.inner) { - Some(pruning) => { - Either::Left(Delay::new(pruning.should_fire_in()?)) - } - None => Either::Right(future::pending::<()>()), - }; + #[error(transparent)] + Subsystem(#[from] SubsystemError), - Ok(future) - } + #[error(transparent)] + Time(#[from] SystemTimeError), - // Return a `Future` that either resolves when another chunk pruning has to happen - // or is indefinitely `pending` in case no pruning has to be done. - // Just a helper to `select` over multiple things at once. - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn maybe_prune_chunks(&self) -> Result, Error> { - let future = match get_next_chunk_pruning_time(&self.inner) { - Some(pruning) => { - Either::Left(Delay::new(pruning.should_fire_in()?)) - } - None => Either::Right(future::pending::<()>()), - }; + #[error(transparent)] + Codec(#[from] CodecError), - Ok(future) - } + #[error("Custom databases are not supported")] + CustomDatabase, } -fn available_data_key(candidate_hash: &CandidateHash) -> Vec { - (candidate_hash, 0i8).encode() +impl Error { + fn trace(&self) { + match self { + // don't spam the log with spurious errors + Self::RuntimeApi(_) | + Self::Oneshot(_) => tracing::debug!(target: LOG_TARGET, err = ?self), + // it's worth reporting otherwise + _ => tracing::warn!(target: LOG_TARGET, err = ?self), + } + } } -fn erasure_chunk_key(candidate_hash: &CandidateHash, index: u32) -> Vec { - (candidate_hash, index, 0i8).encode() +/// Struct holding pruning timing configuration. +/// The only purpose of this structure is to use different timing +/// configurations in production and in testing. +#[derive(Clone)] +struct PruningConfig { + /// How long unavailable data should be kept. + keep_unavailable_for: Duration, + + /// How long finalized data should be kept. + keep_finalized_for: Duration, + + /// How often to perform data pruning. + pruning_interval: Duration, } -#[derive(Encode, Decode)] -struct StoredAvailableData { - data: AvailableData, - n_validators: u32, +impl Default for PruningConfig { + fn default() -> Self { + Self { + keep_unavailable_for: KEEP_UNAVAILABLE_FOR, + keep_finalized_for: KEEP_FINALIZED_FOR, + pruning_interval: PRUNING_INTERVAL, + } + } } /// Configuration for the availability store. @@ -448,6 +426,27 @@ impl std::convert::TryFrom for Config { } } +trait Clock: Send + Sync { + // Returns time since unix epoch. + fn now(&self) -> Result; +} + +struct SystemClock; + +impl Clock for SystemClock { + fn now(&self) -> Result { + SystemTime::now().duration_since(UNIX_EPOCH).map_err(Into::into) + } +} + +/// An implementation of the Availability Store subsystem. +pub struct AvailabilityStoreSubsystem { + pruning_config: PruningConfig, + db: Arc, + metrics: Metrics, + clock: Box, +} + impl AvailabilityStoreSubsystem { /// Create a new `AvailabilityStoreSubsystem` with a given config on disk. pub fn new_on_disk(config: Config, metrics: Metrics) -> io::Result { @@ -472,29 +471,41 @@ impl AvailabilityStoreSubsystem { Ok(Self { pruning_config: PruningConfig::default(), - inner: Arc::new(db), - chunks_cache: HashMap::new(), + db: Arc::new(db), metrics, + clock: Box::new(SystemClock), }) } #[cfg(test)] - fn new_in_memory(inner: Arc, pruning_config: PruningConfig) -> Self { + fn new_in_memory( + db: Arc, + pruning_config: PruningConfig, + clock: Box, + ) -> Self { Self { pruning_config, - inner, - chunks_cache: HashMap::new(), + db, metrics: Metrics(None), + clock, } } } -fn get_next_pov_pruning_time(db: &Arc) -> Option { - query_inner(db, columns::META, &NEXT_POV_PRUNING) -} +impl Subsystem for AvailabilityStoreSubsystem +where + Context: SubsystemContext, +{ + fn start(self, ctx: Context) -> SpawnedSubsystem { + let future = run(self, ctx) + .map(|_| Ok(())) + .boxed(); -fn get_next_chunk_pruning_time(db: &Arc) -> Option { - query_inner(db, columns::META, &NEXT_CHUNK_PRUNING) + SpawnedSubsystem { + name: "availability-store-subsystem", + future, + } + } } #[tracing::instrument(skip(subsystem, ctx), fields(subsystem = LOG_TARGET))] @@ -502,8 +513,10 @@ async fn run(mut subsystem: AvailabilityStoreSubsystem, mut ctx: Contex where Context: SubsystemContext, { + let mut next_pruning = Delay::new(subsystem.pruning_config.pruning_interval).fuse(); + loop { - let res = run_iteration(&mut subsystem, &mut ctx).await; + let res = run_iteration(&mut ctx, &mut subsystem, &mut next_pruning).await; match res { Err(e) => { e.trace(); @@ -522,22 +535,15 @@ where } #[tracing::instrument(level = "trace", skip(subsystem, ctx), fields(subsystem = LOG_TARGET))] -async fn run_iteration(subsystem: &mut AvailabilityStoreSubsystem, ctx: &mut Context) +async fn run_iteration( + ctx: &mut Context, + subsystem: &mut AvailabilityStoreSubsystem, + mut next_pruning: &mut future::Fuse, +) -> Result where Context: SubsystemContext, { - // Every time the following two methods are called a read from DB is performed. - // But given that these are very small values which are essentially a newtype - // wrappers around `Duration` (`NextChunkPruning` and `NextPoVPruning`) and also the - // fact of the frequent reads itself we assume these to end up cached in the memory - // anyway and thus these db reads to be reasonably fast. - let pov_pruning_time = subsystem.maybe_prune_povs()?; - let chunk_pruning_time = subsystem.maybe_prune_chunks()?; - - let mut pov_pruning_time = pov_pruning_time.fuse(); - let mut chunk_pruning_time = chunk_pruning_time.fuse(); - select! { incoming = ctx.recv().fuse() => { match incoming? { @@ -546,601 +552,619 @@ where ActiveLeavesUpdate { activated, .. }) ) => { for (activated, _span) in activated.into_iter() { + let _timer = subsystem.metrics.time_block_activated(); process_block_activated(ctx, subsystem, activated).await?; } } - FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, number)) => { - process_block_finalized(subsystem, &subsystem.inner, number).await?; + FromOverseer::Signal(OverseerSignal::BlockFinalized(hash, number)) => { + let _timer = subsystem.metrics.time_process_block_finalized(); + + process_block_finalized( + ctx, + &subsystem, + hash, + number, + ).await?; } FromOverseer::Communication { msg } => { - process_message(subsystem, ctx, msg).await?; + let _timer = subsystem.metrics.time_process_message(); + process_message(subsystem, msg)?; } } } - _ = pov_pruning_time => { - subsystem.prune_povs()?; - } - _ = chunk_pruning_time => { - subsystem.prune_chunks()?; + _ = next_pruning => { + // It's important to set the delay before calling `prune_all` because an error in `prune_all` + // could lead to the delay not being set again. Then we would never prune anything anymore. + *next_pruning = Delay::new(subsystem.pruning_config.pruning_interval).fuse(); + + let _timer = subsystem.metrics.time_pruning(); + prune_all(&subsystem.db, &*subsystem.clock)?; } - complete => return Ok(true), } Ok(false) } -/// As soon as certain block is finalized its pruning records and records of all -/// blocks that we keep that are `older` than the block in question have to be updated. -/// -/// The state of data has to be changed from -/// `CandidateState::Included` to `CandidateState::Finalized` and their pruning times have -/// to be updated to `now` + keep_finalized_{block, chunk}_for`. -#[tracing::instrument(level = "trace", skip(subsystem, db), fields(subsystem = LOG_TARGET))] -async fn process_block_finalized( - subsystem: &AvailabilityStoreSubsystem, - db: &Arc, - block_number: BlockNumber, +async fn process_block_activated( + ctx: &mut impl SubsystemContext, + subsystem: &mut AvailabilityStoreSubsystem, + activated: Hash, ) -> Result<(), Error> { - let _timer = subsystem.metrics.time_process_block_finalized(); - - if let Some(mut pov_pruning) = pov_pruning(db) { - // Since the records are sorted by time in which they need to be pruned and not by block - // numbers we have to iterate through the whole collection here. - for record in pov_pruning.iter_mut() { - if record.block_number <= block_number { - tracing::trace!( - target: LOG_TARGET, - block_number = %record.block_number, - "Updating pruning record for finalized block", - ); + let now = subsystem.clock.now()?; - record.prune_at = PruningDelay::into_the_future( - subsystem.pruning_config.keep_finalized_block_for - )?; - record.candidate_state = CandidateState::Finalized; - } - } + let candidate_events = { + let (tx, rx) = oneshot::channel(); + ctx.send_message( + RuntimeApiMessage::Request(activated, RuntimeApiRequest::CandidateEvents(tx)).into() + ).await; - put_pov_pruning(db, None, pov_pruning, &subsystem.metrics)?; - } + rx.await?? + }; - if let Some(mut chunk_pruning) = chunk_pruning(db) { - for record in chunk_pruning.iter_mut() { - if record.block_number <= block_number { - tracing::trace!( - target: LOG_TARGET, - block_number = %record.block_number, - "Updating chunk pruning record for finalized block", - ); + let block_number = { + let (tx, rx) = oneshot::channel(); + ctx.send_message( + ChainApiMessage::BlockNumber(activated, tx).into() + ).await; - record.prune_at = PruningDelay::into_the_future( - subsystem.pruning_config.keep_finalized_chunk_for - )?; - record.candidate_state = CandidateState::Finalized; - } + match rx.await?? { + None => return Ok(()), + Some(n) => n, } + }; - put_chunk_pruning(db, None, chunk_pruning, &subsystem.metrics)?; - } + let block_header = { + let (tx, rx) = oneshot::channel(); - Ok(()) -} + ctx.send_message( + ChainApiMessage::BlockHeader(activated, tx).into() + ).await; -#[tracing::instrument(level = "trace", skip(ctx, subsystem), fields(subsystem = LOG_TARGET))] -async fn process_block_activated( - ctx: &mut Context, - subsystem: &mut AvailabilityStoreSubsystem, - hash: Hash, -) -> Result<(), Error> -where - Context: SubsystemContext -{ - let _timer = subsystem.metrics.time_block_activated(); - let db = &subsystem.inner; - - let events = match request_candidate_events(ctx, hash).await { - Ok(events) => events, - Err(err) => { - tracing::debug!(target: LOG_TARGET, err = ?err, "requesting candidate events failed"); - return Ok(()); + match rx.await?? { + None => return Ok(()), + Some(n) => n, } }; - tracing::trace!(target: LOG_TARGET, hash = %hash, "block activated"); - let mut included = HashSet::new(); + // We need to request the number of validators based on the parent state, as that is the number of validators + // used to create this block. + let n_validators = { + let (tx, rx) = oneshot::channel(); + ctx.send_message( + RuntimeApiMessage::Request(block_header.parent_hash, RuntimeApiRequest::Validators(tx)).into() + ).await; - for event in events.into_iter() { - if let CandidateEvent::CandidateIncluded(receipt, _) = event { - tracing::trace!( - target: LOG_TARGET, - hash = %receipt.hash(), - "Candidate {:?} was included", receipt.hash(), - ); - included.insert(receipt.hash()); - } - } + rx.await??.len() + }; - for included in &included { - subsystem.chunks_cache.remove(&included); - } + let mut tx = DBTransaction::new(); - if let Some(mut pov_pruning) = pov_pruning(db) { - for record in pov_pruning.iter_mut() { - if included.contains(&record.candidate_hash) { - record.prune_at = PruningDelay::Indefinite; - record.candidate_state = CandidateState::Included; + for event in candidate_events { + match event { + CandidateEvent::CandidateBacked(receipt, _head) => { + note_block_backed( + &subsystem.db, + &mut tx, + &subsystem.pruning_config, + now, + n_validators, + receipt, + )?; } + CandidateEvent::CandidateIncluded(receipt, _head) => { + note_block_included( + &subsystem.db, + &mut tx, + &subsystem.pruning_config, + (block_number, activated), + receipt, + )?; + } + _ => {} } + } - pov_pruning.sort(); + subsystem.db.write(tx)?; - put_pov_pruning(db, None, pov_pruning, &subsystem.metrics)?; - } + Ok(()) +} - if let Some(mut chunk_pruning) = chunk_pruning(db) { - for record in chunk_pruning.iter_mut() { - if included.contains(&record.candidate_hash) { - record.prune_at = PruningDelay::Indefinite; - record.candidate_state = CandidateState::Included; - } - } +fn note_block_backed( + db: &Arc, + db_transaction: &mut DBTransaction, + pruning_config: &PruningConfig, + now: Duration, + n_validators: usize, + candidate: CandidateReceipt, +) -> Result<(), Error> { + let candidate_hash = candidate.hash(); + + if load_meta(db, &candidate_hash)?.is_none() { + let meta = CandidateMeta { + state: State::Unavailable(now.into()), + data_available: false, + chunks_stored: bitvec::bitvec![BitOrderLsb0, u8; 0; n_validators], + }; - chunk_pruning.sort(); + let prune_at = now + pruning_config.keep_unavailable_for; - put_chunk_pruning(db, None, chunk_pruning, &subsystem.metrics)?; + write_pruning_key(db_transaction, prune_at, &candidate_hash); + write_meta(db_transaction, &candidate_hash, &meta); } Ok(()) } -#[tracing::instrument(level = "trace", skip(ctx), fields(subsystem = LOG_TARGET))] -async fn request_candidate_events( - ctx: &mut Context, - hash: Hash, -) -> Result, Error> -where - Context: SubsystemContext -{ - let (tx, rx) = oneshot::channel(); - - let msg = AllMessages::RuntimeApi(RuntimeApiMessage::Request( - hash, - RuntimeApiRequest::CandidateEvents(tx), - )); +fn note_block_included( + db: &Arc, + db_transaction: &mut DBTransaction, + pruning_config:&PruningConfig, + block: (BlockNumber, Hash), + candidate: CandidateReceipt, +) -> Result<(), Error> { + let candidate_hash = candidate.hash(); - ctx.send_message(msg.into()).await; + match load_meta(db, &candidate_hash)? { + None => { + // This is alarming. We've observed a block being included without ever seeing it backed. + // Warn and ignore. + tracing::warn!( + target: LOG_TARGET, + "Candidate {}, included without being backed?", + candidate_hash, + ); + } + Some(mut meta) => { + let be_block = (BEBlockNumber(block.0), block.1); - Ok(rx.await??) -} + meta.state = match meta.state { + State::Unavailable(at) => { + let at_d: Duration = at.into(); + let prune_at = at_d + pruning_config.keep_unavailable_for; + delete_pruning_key(db_transaction, prune_at, &candidate_hash); -#[tracing::instrument(level = "trace", skip(subsystem, ctx), fields(subsystem = LOG_TARGET))] -async fn process_message( - subsystem: &mut AvailabilityStoreSubsystem, - ctx: &mut Context, - msg: AvailabilityStoreMessage, -) -> Result<(), Error> -where - Context: SubsystemContext -{ - use AvailabilityStoreMessage::*; + State::Unfinalized(at, vec![be_block]) + } + State::Unfinalized(at, mut within) => { + if let Err(i) = within.binary_search(&be_block) { + within.insert(i, be_block); + } - let _timer = subsystem.metrics.time_process_message(); + State::Unfinalized(at, within) + } + State::Finalized(_at) => { + // This should never happen as a candidate would have to be included after + // finality. + return Ok(()) + } + }; - match msg { - QueryAvailableData(hash, tx) => { - tx.send(available_data(&subsystem.inner, &hash).map(|d| d.data)).map_err(|_| oneshot::Canceled)?; + write_unfinalized_block_contains(db_transaction, block.0, &block.1, &candidate_hash); + write_meta(db_transaction, &candidate_hash, &meta); } - QueryDataAvailability(hash, tx) => { - let result = available_data(&subsystem.inner, &hash).is_some(); + } - tracing::trace!( - target: LOG_TARGET, - candidate_hash = ?hash, - availability = ?result, - "Queried data availability", - ); + Ok(()) +} - tx.send(result).map_err(|_| oneshot::Canceled)?; - } - QueryChunk(hash, id, tx) => { - tx.send(get_chunk(subsystem, &hash, id)?).map_err(|_| oneshot::Canceled)?; +macro_rules! peek_num { + ($iter:ident) => { + match $iter.peek() { + Some((k, _)) => decode_unfinalized_key(&k[..]).ok().map(|(b, _, _)| b), + None => None } - QueryChunkAvailability(hash, id, tx) => { - let result = get_chunk(subsystem, &hash, id).map(|r| r.is_some()); + } +} - tracing::trace!( - target: LOG_TARGET, - candidate_hash = ?hash, - availability = ?result, - "Queried chunk availability", - ); +async fn process_block_finalized( + ctx: &mut impl SubsystemContext, + subsystem: &AvailabilityStoreSubsystem, + finalized_hash: Hash, + finalized_number: BlockNumber, +) -> Result<(), Error> { + let now = subsystem.clock.now()?; - tx.send(result?).map_err(|_| oneshot::Canceled)?; - } - StoreChunk { candidate_hash, relay_parent, chunk, tx } => { - let chunk_index = chunk.index; - // Current block number is relay_parent block number + 1. - let block_number = get_block_number(ctx, relay_parent).await? + 1; - let result = store_chunks(subsystem, &candidate_hash, vec![chunk], block_number); + let mut next_possible_batch = 0; + loop { + let mut db_transaction = DBTransaction::new(); + let (start_prefix, end_prefix) = finalized_block_range(finalized_number); + + // We have to do some juggling here of the `iter` to make sure it doesn't cross the `.await` boundary + // as it is not `Send`. That is why we create the iterator once within this loop, drop it, + // do an asynchronous request, and then instantiate the exact same iterator again. + let batch_num = { + let mut iter = subsystem.db.iter_with_prefix(columns::META, &start_prefix) + .take_while(|(k, _)| &k[..] < &end_prefix[..]) + .peekable(); + + match peek_num!(iter) { + None => break, // end of iterator. + Some(n) => n, + } + }; - tracing::trace!( - target: LOG_TARGET, - %chunk_index, - ?candidate_hash, - %block_number, - ?result, - "Stored chunk", - ); + if batch_num < next_possible_batch { continue } // sanity. + next_possible_batch = batch_num + 1; - match result { - Err(e) => { - tx.send(Err(())).map_err(|_| oneshot::Canceled)?; - return Err(e); - } - Ok(()) => { - tx.send(Ok(())).map_err(|_| oneshot::Canceled)?; - } - } - } - StoreAvailableData(hash, id, n_validators, av_data, tx) => { - let result = store_available_data(subsystem, &hash, id, n_validators, av_data); + let batch_finalized_hash = if batch_num == finalized_number { + finalized_hash + } else { + let (tx, rx) = oneshot::channel(); + ctx.send_message(ChainApiMessage::FinalizedBlockHash(batch_num, tx).into()).await; - tracing::trace!(target: LOG_TARGET, candidate_hash = ?hash, ?result, "Stored available data"); + match rx.await?? { + None => { + tracing::warn!(target: LOG_TARGET, + "Availability store was informed that block #{} is finalized, \ + but chain API has no finalized hash.", + batch_num, + ); - match result { - Err(e) => { - tx.send(Err(())).map_err(|_| oneshot::Canceled)?; - return Err(e); - } - Ok(()) => { - tx.send(Ok(())).map_err(|_| oneshot::Canceled)?; + break } + Some(h) => h, } - } + }; + + let iter = subsystem.db.iter_with_prefix(columns::META, &start_prefix) + .take_while(|(k, _)| &k[..] < &end_prefix[..]) + .peekable(); + + let batch = load_all_at_finalized_height(iter, batch_num, batch_finalized_hash); + + // Now that we've iterated over the entire batch at this finalized height, + // update the meta. + + delete_unfinalized_height(&mut db_transaction, batch_num); + + update_blocks_at_finalized_height( + &subsystem, + &mut db_transaction, + batch, + batch_num, + now, + )?; + + // We need to write at the end of the loop so the prefix iterator doesn't pick up the same values again + // in the next iteration. Another unfortunate effect of having to re-initialize the iterator. + subsystem.db.write(db_transaction)?; } Ok(()) } -fn available_data( - db: &Arc, - candidate_hash: &CandidateHash, -) -> Option { - query_inner(db, columns::DATA, &available_data_key(candidate_hash)) -} +// loads all candidates at the finalized height and maps them to `true` if finalized +// and `false` if unfinalized. +fn load_all_at_finalized_height( + mut iter: std::iter::Peekable, Box<[u8]>)>>, + block_number: BlockNumber, + finalized_hash: Hash, +) -> impl IntoIterator { + // maps candidate hashes to true if finalized, false otherwise. + let mut candidates = HashMap::new(); -fn pov_pruning(db: &Arc) -> Option> { - query_inner(db, columns::META, &POV_PRUNING_KEY) -} + // Load all candidates that were included at this height. + loop { + match peek_num!(iter) { + None => break, // end of iterator. + Some(n) if n != block_number => break, // end of batch. + _ => {} + } -fn chunk_pruning(db: &Arc) -> Option> { - query_inner(db, columns::META, &CHUNK_PRUNING_KEY) -} + let (k, _v) = iter.next().expect("`peek` used to check non-empty; qed"); + let (_, block_hash, candidate_hash) = decode_unfinalized_key(&k[..]) + .expect("`peek_num` checks validity of key; qed"); -#[tracing::instrument(level = "trace", skip(db, tx, metrics), fields(subsystem = LOG_TARGET))] -fn put_pov_pruning( - db: &Arc, - tx: Option, - mut pov_pruning: Vec, - metrics: &Metrics, -) -> Result<(), Error> { - let mut tx = tx.unwrap_or_default(); - - metrics.block_pruning_records_size(pov_pruning.len()); - - pov_pruning.sort(); - - tx.put_vec( - columns::META, - &POV_PRUNING_KEY, - pov_pruning.encode(), - ); - - match pov_pruning.get(0) { - // We want to wake up in case we have some records that are not scheduled to be kept - // indefinitely (data is included and waiting to move to the finalized state) and so - // the is at least one value that is not `PruningDelay::Indefinite`. - Some(PoVPruningRecord { prune_at: PruningDelay::In(prune_at), .. }) => { - tx.put_vec( - columns::META, - &NEXT_POV_PRUNING, - NextPoVPruning(*prune_at).encode(), - ); - } - _ => { - // If there is no longer any records, delete the cached pruning time record. - tx.delete( - columns::META, - &NEXT_POV_PRUNING, - ); + if block_hash == finalized_hash { + candidates.insert(candidate_hash, true); + } else { + candidates.entry(candidate_hash).or_insert(false); } } - db.write(tx)?; - - Ok(()) + candidates } -#[tracing::instrument(level = "trace", skip(db, tx, metrics), fields(subsystem = LOG_TARGET))] -fn put_chunk_pruning( - db: &Arc, - tx: Option, - mut chunk_pruning: Vec, - metrics: &Metrics, +fn update_blocks_at_finalized_height( + subsystem: &AvailabilityStoreSubsystem, + db_transaction: &mut DBTransaction, + candidates: impl IntoIterator, + block_number: BlockNumber, + now: Duration, ) -> Result<(), Error> { - let mut tx = tx.unwrap_or_default(); + for (candidate_hash, is_finalized) in candidates { + let mut meta = match load_meta(&subsystem.db, &candidate_hash)? { + None => { + tracing::warn!( + target: LOG_TARGET, + "Dangling candidate metadata for {}", + candidate_hash, + ); - metrics.chunk_pruning_records_size(chunk_pruning.len()); + continue; + } + Some(c) => c, + }; - chunk_pruning.sort(); + if is_finalized { + // Clear everything else related to this block. We're finalized now! + match meta.state { + State::Finalized(_) => continue, // sanity + State::Unavailable(at) => { + // This is also not going to happen; the very fact that we are + // iterating over the candidate here indicates that `State` should + // be `Unfinalized`. + delete_pruning_key(db_transaction, at, &candidate_hash); + } + State::Unfinalized(_, blocks) => { + for (block_num, block_hash) in blocks.iter().cloned() { + // this exact height is all getting cleared out anyway. + if block_num.0 != block_number { + delete_unfinalized_inclusion( + db_transaction, + block_num.0, + &block_hash, + &candidate_hash, + ); + } + } + } + } - tx.put_vec( - columns::META, - &CHUNK_PRUNING_KEY, - chunk_pruning.encode(), - ); + meta.state = State::Finalized(now.into()); - match chunk_pruning.get(0) { - Some(ChunkPruningRecord { prune_at: PruningDelay::In(prune_at), .. }) => { - tx.put_vec( - columns::META, - &NEXT_CHUNK_PRUNING, - NextChunkPruning(*prune_at).encode(), - ); - } - _ => { - tx.delete( - columns::META, - &NEXT_CHUNK_PRUNING, + // Write the meta and a pruning record. + write_meta(db_transaction, &candidate_hash, &meta); + write_pruning_key( + db_transaction, + now + subsystem.pruning_config.keep_finalized_for, + &candidate_hash, ); + } else { + meta.state = match meta.state { + State::Finalized(_) => continue, // sanity. + State::Unavailable(_) => continue, // sanity. + State::Unfinalized(at, mut blocks) => { + // Clear out everything at this height. + blocks.retain(|(n, _)| n.0 != block_number); + + // If empty, we need to go back to being unavailable as we aren't + // aware of any blocks this is included in. + if blocks.is_empty() { + let at_d: Duration = at.into(); + let prune_at = at_d + subsystem.pruning_config.keep_unavailable_for; + write_pruning_key(db_transaction, prune_at, &candidate_hash); + State::Unavailable(at) + } else { + State::Unfinalized(at, blocks) + } + } + }; + + // Update the meta entry. + write_meta(db_transaction, &candidate_hash, &meta) } } - db.write(tx)?; - Ok(()) } -// produces a block number by block's hash. -// in the the event of an invalid `block_hash`, returns `Ok(0)` -async fn get_block_number( - ctx: &mut Context, - block_hash: Hash, -) -> Result -where - Context: SubsystemContext, -{ - let (tx, rx) = oneshot::channel(); - - ctx.send_message(AllMessages::ChainApi(ChainApiMessage::BlockNumber(block_hash, tx))).await; - - Ok(rx.await??.map(|number| number).unwrap_or_default()) -} - -#[tracing::instrument(level = "trace", skip(subsystem, available_data), fields(subsystem = LOG_TARGET))] -fn store_available_data( +fn process_message( subsystem: &mut AvailabilityStoreSubsystem, - candidate_hash: &CandidateHash, - id: Option, - n_validators: u32, - available_data: AvailableData, + msg: AvailabilityStoreMessage, ) -> Result<(), Error> { - let _timer = subsystem.metrics.time_store_available_data(); - - let mut tx = DBTransaction::new(); - - let block_number = available_data.validation_data.block_number; - - let chunks = get_chunks(&available_data, n_validators as usize, &subsystem.metrics)?; - store_chunks( - subsystem, - candidate_hash, - chunks, - block_number, - )?; + match msg { + AvailabilityStoreMessage::QueryAvailableData(candidate, tx) => { + let _ = tx.send(load_available_data(&subsystem.db, &candidate)?); + } + AvailabilityStoreMessage::QueryDataAvailability(candidate, tx) => { + let a = load_meta(&subsystem.db, &candidate)?.map_or(false, |m| m.data_available); + let _ = tx.send(a); + } + AvailabilityStoreMessage::QueryChunk(candidate, validator_index, tx) => { + let _timer = subsystem.metrics.time_get_chunk(); + let _ = tx.send(load_chunk(&subsystem.db, &candidate, validator_index)?); + } + AvailabilityStoreMessage::QueryChunkAvailability(candidate, validator_index, tx) => { + let a = load_meta(&subsystem.db, &candidate)? + .map_or(false, |m| *m.chunks_stored.get(validator_index as usize).unwrap_or(&false)); + let _ = tx.send(a); + } + AvailabilityStoreMessage::StoreChunk { + candidate_hash, + relay_parent: _, + chunk, + tx, + } => { + subsystem.metrics.on_chunks_received(1); + let _timer = subsystem.metrics.time_store_chunk(); + + match store_chunk(&subsystem.db, candidate_hash, chunk) { + Ok(true) => { + let _ = tx.send(Ok(())); + } + Ok(false) => { + let _ = tx.send(Err(())); + } + Err(e) => { + let _ = tx.send(Err(())); + return Err(e) + } + } + } + AvailabilityStoreMessage::StoreAvailableData(candidate, _our_index, n_validators, available_data, tx) => { + subsystem.metrics.on_chunks_received(n_validators as _); - let stored_data = StoredAvailableData { - data: available_data, - n_validators, - }; + let _timer = subsystem.metrics.time_store_available_data(); - let mut pov_pruning = pov_pruning(&subsystem.inner).unwrap_or_default(); - let prune_at = PruningDelay::into_the_future(subsystem.pruning_config.keep_stored_block_for)?; + let res = store_available_data( + &subsystem, + candidate, + n_validators as _, + available_data, + ); - if let Some(next_pruning) = prune_at.as_duration() { - tx.put_vec( - columns::META, - &NEXT_POV_PRUNING, - NextPoVPruning(next_pruning).encode(), - ); + match res { + Ok(()) => { + let _ = tx.send(Ok(())); + } + Err(e) => { + let _ = tx.send(Err(())); + return Err(e) + } + } + } } - let pruning_record = PoVPruningRecord { - candidate_hash: *candidate_hash, - block_number, - candidate_state: CandidateState::Stored, - prune_at, - }; - - let idx = pov_pruning.binary_search(&pruning_record).unwrap_or_else(|insert_idx| insert_idx); + Ok(()) +} - pov_pruning.insert(idx, pruning_record); +// Ok(true) on success, Ok(false) on failure, and Err on internal error. +fn store_chunk( + db: &Arc, + candidate_hash: CandidateHash, + chunk: ErasureChunk, +) -> Result { + let mut tx = DBTransaction::new(); - tx.put_vec( - columns::DATA, - available_data_key(&candidate_hash).as_slice(), - stored_data.encode(), - ); + let mut meta = match load_meta(db, &candidate_hash)? { + Some(m) => m, + None => return Ok(false), // we weren't informed of this candidate by import events. + }; - tx.put_vec( - columns::META, - &POV_PRUNING_KEY, - pov_pruning.encode(), - ); + match meta.chunks_stored.get(chunk.index as usize).map(|b| *b) { + Some(true) => return Ok(true), // already stored. + Some(false) => { + meta.chunks_stored.set(chunk.index as usize, true); - subsystem.inner.write(tx)?; + write_chunk(&mut tx, &candidate_hash, chunk.index, &chunk); + write_meta(&mut tx, &candidate_hash, &meta); + } + None => return Ok(false), // out of bounds. + } - Ok(()) + db.write(tx)?; + Ok(true) } -#[tracing::instrument(level = "trace", skip(subsystem), fields(subsystem = LOG_TARGET))] -fn store_chunks( - subsystem: &mut AvailabilityStoreSubsystem, - candidate_hash: &CandidateHash, - chunks: Vec, - block_number: BlockNumber, +// Ok(true) on success, Ok(false) on failure, and Err on internal error. +fn store_available_data( + subsystem: &AvailabilityStoreSubsystem, + candidate_hash: CandidateHash, + n_validators: usize, + available_data: AvailableData, ) -> Result<(), Error> { - let _timer = subsystem.metrics.time_store_chunks(); - let mut tx = DBTransaction::new(); - let mut chunk_pruning = chunk_pruning(&subsystem.inner).unwrap_or_default(); - - let prune_at = PruningDelay::into_the_future(subsystem.pruning_config.keep_stored_block_for)?; - if let Some(delay) = prune_at.clone().as_duration() { - tx.put_vec( - columns::META, - &NEXT_CHUNK_PRUNING, - NextChunkPruning(delay).encode(), - ); - } - for chunk in &chunks { - let pruning_record = ChunkPruningRecord { - candidate_hash: candidate_hash.clone(), - block_number, - candidate_state: CandidateState::Stored, - chunk_index: chunk.index, - prune_at: prune_at.clone(), - }; + let mut meta = match load_meta(&subsystem.db, &candidate_hash)? { + Some(m) => { + if m.data_available { + return Ok(()); // already stored. + } + + m + }, + None => { + let now = subsystem.clock.now()?; + + // Write a pruning record. + let prune_at = now + subsystem.pruning_config.keep_unavailable_for; + write_pruning_key(&mut tx, prune_at, &candidate_hash); - let idx = chunk_pruning.binary_search(&pruning_record).unwrap_or_else(|insert_idx| insert_idx); + CandidateMeta { + state: State::Unavailable(now.into()), + data_available: false, + chunks_stored: BitVec::new(), + } + } + }; - chunk_pruning.insert(idx, pruning_record); + let chunks = erasure::obtain_chunks_v1(n_validators, &available_data)?; + let branches = erasure::branches(chunks.as_ref()); - let dbkey = erasure_chunk_key(candidate_hash, chunk.index); + let erasure_chunks = chunks.iter() + .zip(branches.map(|(proof, _)| proof)) + .enumerate() + .map(|(index, (chunk, proof))| ErasureChunk { + chunk: chunk.clone(), + proof, + index: index as u32, + }); - tx.put_vec( - columns::DATA, - &dbkey, - chunk.encode(), - ); + for chunk in erasure_chunks { + write_chunk(&mut tx, &candidate_hash, chunk.index, &chunk); } - subsystem.chunks_cache.entry(*candidate_hash).or_default().extend(chunks.into_iter().map(|c| (c.index, c))); + meta.data_available = true; + meta.chunks_stored = bitvec::bitvec![BitOrderLsb0, u8; 1; n_validators]; - tx.put_vec( - columns::META, - &CHUNK_PRUNING_KEY, - chunk_pruning.encode(), - ); - - subsystem.inner.write(tx)?; + write_meta(&mut tx, &candidate_hash, &meta); + write_available_data(&mut tx, &candidate_hash, &available_data); + subsystem.db.write(tx)?; Ok(()) } -#[tracing::instrument(level = "trace", skip(subsystem), fields(subsystem = LOG_TARGET))] -fn get_chunk( - subsystem: &mut AvailabilityStoreSubsystem, - candidate_hash: &CandidateHash, - index: u32, -) -> Result, Error> { - let _timer = subsystem.metrics.time_get_chunk(); +fn prune_all(db: &Arc, clock: &dyn Clock) -> Result<(), Error> { + let now = clock.now()?; + let (range_start, range_end) = pruning_range(now); - if let Some(entry) = subsystem.chunks_cache.get(candidate_hash) { - if let Some(chunk) = entry.get(&index) { - return Ok(Some(chunk.clone())); - } - } + let mut tx = DBTransaction::new(); + let iter = db.iter_with_prefix(columns::META, &range_start[..]) + .take_while(|(k, _)| &k[..] < &range_end[..]); - if let Some(chunk) = query_inner( - &subsystem.inner, - columns::DATA, - &erasure_chunk_key(candidate_hash, index) - ) { - return Ok(Some(chunk)); - } + for (k, _v) in iter { + tx.delete(columns::META, &k[..]); - if let Some(data) = available_data(&subsystem.inner, candidate_hash) { - let chunks = get_chunks(&data.data, data.n_validators as usize, &subsystem.metrics)?; - let desired_chunk = chunks.get(index as usize).cloned(); - store_chunks( - subsystem, - candidate_hash, - chunks, - data.data.validation_data.block_number, - )?; - return Ok(desired_chunk); - } + let (_, candidate_hash) = match decode_pruning_key(&k[..]) { + Ok(m) => m, + Err(_) => continue, // sanity + }; - Ok(None) -} + delete_meta(&mut tx, &candidate_hash); -fn query_inner( - db: &Arc, - column: u32, - key: &[u8], -) -> Option { - match db.get(column, key) { - Ok(Some(raw)) => { - let res = D::decode(&mut &raw[..]).expect("all stored data serialized correctly; qed"); - Some(res) - } - Ok(None) => None, - Err(e) => { - tracing::warn!(target: LOG_TARGET, err = ?e, "Error reading from the availability store"); - None - } - } -} + // Clean up all attached data of the candidate. + if let Some(meta) = load_meta(db, &candidate_hash)? { + // delete available data. + if meta.data_available { + delete_available_data(&mut tx, &candidate_hash) + } -impl Subsystem for AvailabilityStoreSubsystem -where - Context: SubsystemContext, -{ - fn start(self, ctx: Context) -> SpawnedSubsystem { - let future = run(self, ctx) - .map(|_| Ok(())) - .boxed(); + // delete chunks. + for (i, b) in meta.chunks_stored.iter().enumerate() { + if *b { + delete_chunk(&mut tx, &candidate_hash, i as _); + } + } - SpawnedSubsystem { - name: "availability-store-subsystem", - future, + // delete unfinalized block references. Pruning references don't need to be + // manually taken care of as we are deleting them as we go in the outer loop. + if let State::Unfinalized(_, blocks) = meta.state { + for (block_number, block_hash) in blocks { + delete_unfinalized_inclusion( + &mut tx, + block_number.0, + &block_hash, + &candidate_hash, + ); + } + } } } -} -#[tracing::instrument(level = "trace", skip(metrics), fields(subsystem = LOG_TARGET))] -fn get_chunks(data: &AvailableData, n_validators: usize, metrics: &Metrics) -> Result, Error> { - let chunks = erasure::obtain_chunks_v1(n_validators, data)?; - metrics.on_chunks_received(chunks.len()); - let branches = erasure::branches(chunks.as_ref()); - - Ok(chunks - .iter() - .zip(branches.map(|(proof, _)| proof)) - .enumerate() - .map(|(index, (chunk, proof))| ErasureChunk { - chunk: chunk.clone(), - proof, - index: index as u32, - }) - .collect() - ) + db.write(tx)?; + Ok(()) } #[derive(Clone)] struct MetricsInner { received_availability_chunks_total: prometheus::Counter, - chunk_pruning_records_total: prometheus::Gauge, - block_pruning_records_total: prometheus::Gauge, - prune_povs: prometheus::Histogram, - prune_chunks: prometheus::Histogram, + pruning: prometheus::Histogram, process_block_finalized: prometheus::Histogram, block_activated: prometheus::Histogram, process_message: prometheus::Histogram, store_available_data: prometheus::Histogram, - store_chunks: prometheus::Histogram, + store_chunk: prometheus::Histogram, get_chunk: prometheus::Histogram, } @@ -1158,30 +1182,9 @@ impl Metrics { } } - fn chunk_pruning_records_size(&self, count: usize) { - if let Some(metrics) = &self.0 { - use core::convert::TryFrom as _; - let total = u64::try_from(count).unwrap_or_default(); - metrics.chunk_pruning_records_total.set(total); - } - } - - fn block_pruning_records_size(&self, count: usize) { - if let Some(metrics) = &self.0 { - use core::convert::TryFrom as _; - let total = u64::try_from(count).unwrap_or_default(); - metrics.block_pruning_records_total.set(total); - } - } - /// Provide a timer for `prune_povs` which observes on drop. - fn time_prune_povs(&self) -> Option { - self.0.as_ref().map(|metrics| metrics.prune_povs.start_timer()) - } - - /// Provide a timer for `prune_chunks` which observes on drop. - fn time_prune_chunks(&self) -> Option { - self.0.as_ref().map(|metrics| metrics.prune_chunks.start_timer()) + fn time_pruning(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.pruning.start_timer()) } /// Provide a timer for `process_block_finalized` which observes on drop. @@ -1205,8 +1208,8 @@ impl Metrics { } /// Provide a timer for `store_chunk` which observes on drop. - fn time_store_chunks(&self) -> Option { - self.0.as_ref().map(|metrics| metrics.store_chunks.start_timer()) + fn time_store_chunk(&self) -> Option { + self.0.as_ref().map(|metrics| metrics.store_chunk.start_timer()) } /// Provide a timer for `get_chunk` which observes on drop. @@ -1225,34 +1228,11 @@ impl metrics::Metrics for Metrics { )?, registry, )?, - chunk_pruning_records_total: prometheus::register( - prometheus::Gauge::new( - "parachain_chunk_pruning_records_total", - "Number of chunk pruning records kept by the storage.", - )?, - registry, - )?, - block_pruning_records_total: prometheus::register( - prometheus::Gauge::new( - "parachain_block_pruning_records_total", - "Number of block pruning records kept by the storage.", - )?, - registry, - )?, - prune_povs: prometheus::register( + pruning: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( - "parachain_av_store_prune_povs", - "Time spent within `av_store::prune_povs`", - ) - )?, - registry, - )?, - prune_chunks: prometheus::register( - prometheus::Histogram::with_opts( - prometheus::HistogramOpts::new( - "parachain_av_store_prune_chunks", - "Time spent within `av_store::prune_chunks`", + "parachain_av_store_pruning", + "Time spent within `av_store::prune_all`", ) )?, registry, @@ -1261,7 +1241,7 @@ impl metrics::Metrics for Metrics { prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( "parachain_av_store_process_block_finalized", - "Time spent within `av_store::block_finalized`", + "Time spent within `av_store::process_block_finalized`", ) )?, registry, @@ -1270,7 +1250,7 @@ impl metrics::Metrics for Metrics { prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( "parachain_av_store_block_activated", - "Time spent within `av_store::block_activated`", + "Time spent within `av_store::process_block_activated`", ) )?, registry, @@ -1293,11 +1273,11 @@ impl metrics::Metrics for Metrics { )?, registry, )?, - store_chunks: prometheus::register( + store_chunk: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( - "parachain_av_store_store_chunks", - "Time spent within `av_store::store_chunks`", + "parachain_av_store_store_chunk", + "Time spent within `av_store::store_chunk`", ) )?, registry, @@ -1306,7 +1286,7 @@ impl metrics::Metrics for Metrics { prometheus::Histogram::with_opts( prometheus::HistogramOpts::new( "parachain_av_store_get_chunk", - "Time spent within `av_store::get_chunk`", + "Time spent fetching requested chunks.`", ) )?, registry, @@ -1315,6 +1295,3 @@ impl metrics::Metrics for Metrics { Ok(Metrics(Some(metrics))) } } - -#[cfg(test)] -mod tests; diff --git a/node/core/av-store/src/tests.rs b/node/core/av-store/src/tests.rs index 1a71981160..74cbc0cb39 100644 --- a/node/core/av-store/src/tests.rs +++ b/node/core/av-store/src/tests.rs @@ -26,13 +26,15 @@ use futures::{ use polkadot_primitives::v1::{ AvailableData, BlockData, CandidateDescriptor, CandidateReceipt, HeadData, - PersistedValidationData, PoV, Id as ParaId, CandidateHash, + PersistedValidationData, PoV, Id as ParaId, CandidateHash, Header, ValidatorId, }; use polkadot_node_subsystem_util::TimeoutExt; use polkadot_subsystem::{ - ActiveLeavesUpdate, errors::RuntimeApiError, JaegerSpan, + ActiveLeavesUpdate, errors::RuntimeApiError, JaegerSpan, messages::AllMessages, }; use polkadot_node_subsystem_test_helpers as test_helpers; +use sp_keyring::Sr25519Keyring; +use parking_lot::Mutex; struct TestHarness { virtual_overseer: test_helpers::TestSubsystemContextHandle, @@ -60,9 +62,41 @@ impl TestCandidateBuilder { } } +#[derive(Clone)] +struct TestClock { + inner: Arc>, +} + +impl TestClock { + fn now(&self) -> Duration { + self.inner.lock().clone() + } + + fn inc(&self, by: Duration) { + *self.inner.lock() += by; + } +} + +impl Clock for TestClock { + fn now(&self) -> Result { + Ok(TestClock::now(self)) + } +} + + +#[derive(Clone)] struct TestState { persisted_validation_data: PersistedValidationData, pruning_config: PruningConfig, + clock: TestClock, +} + +impl TestState { + // pruning is only polled periodically, so we sometimes need to delay until + // we're sure the subsystem has done pruning. + async fn wait_for_pruning(&self) { + Delay::new(self.pruning_config.pruning_interval * 2).await + } } impl Default for TestState { @@ -77,20 +111,26 @@ impl Default for TestState { }; let pruning_config = PruningConfig { - keep_stored_block_for: Duration::from_secs(1), - keep_finalized_block_for: Duration::from_secs(2), - keep_finalized_chunk_for: Duration::from_secs(2), + keep_unavailable_for: Duration::from_secs(1), + keep_finalized_for: Duration::from_secs(2), + pruning_interval: Duration::from_millis(250), + }; + + let clock = TestClock { + inner: Arc::new(Mutex::new(Duration::from_secs(0))), }; Self { persisted_validation_data, pruning_config, + clock, } } } + fn test_harness>( - pruning_config: PruningConfig, + state: TestState, store: Arc, test: impl FnOnce(TestHarness) -> T, ) { @@ -109,7 +149,12 @@ fn test_harness>( let pool = sp_core::testing::TaskExecutor::new(); let (context, virtual_overseer) = test_helpers::make_subsystem_context(pool.clone()); - let subsystem = AvailabilityStoreSubsystem::new_in_memory(store, pruning_config); + let subsystem = AvailabilityStoreSubsystem::new_in_memory( + store, + state.pruning_config.clone(), + Box::new(state.clock), + ); + let subsystem = run(subsystem, context); let test_fut = test(TestHarness { @@ -170,11 +215,17 @@ async fn overseer_signal( .expect(&format!("{:?} is more than enough for sending signals.", TIMEOUT)); } +fn with_tx(db: &Arc, f: impl FnOnce(&mut DBTransaction)) { + let mut tx = DBTransaction::new(); + f(&mut tx); + db.write(tx).unwrap(); +} + #[test] fn runtime_api_error_does_not_stop_the_subsystem() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); - test_harness(PruningConfig::default(), store, |test_harness| async move { + test_harness(TestState::default(), store, |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let new_leaf = Hash::repeat_byte(0x01); @@ -218,11 +269,12 @@ fn runtime_api_error_does_not_stop_the_subsystem() { #[test] fn store_chunk_works() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); - test_harness(PruningConfig::default(), store.clone(), |test_harness| async move { + test_harness(TestState::default(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let relay_parent = Hash::repeat_byte(32); let candidate_hash = CandidateHash(Hash::repeat_byte(33)); let validator_index = 5; + let n_validators = 10; let chunk = ErasureChunk { chunk: vec![1, 2, 3], @@ -230,6 +282,16 @@ fn store_chunk_works() { proof: vec![vec![3, 4, 5]], }; + // Ensure an entry already exists. In reality this would come from watching + // chain events. + with_tx(&store, |tx| { + super::write_meta(tx, &candidate_hash, &CandidateMeta { + data_available: false, + chunks_stored: bitvec::bitvec![BitOrderLsb0, u8; 0; n_validators], + state: State::Unavailable(BETimestamp(0)), + }); + }); + let (tx, rx) = oneshot::channel(); let chunk_msg = AvailabilityStoreMessage::StoreChunk { @@ -240,19 +302,48 @@ fn store_chunk_works() { }; overseer_send(&mut virtual_overseer, chunk_msg.into()).await; + assert_eq!(rx.await.unwrap(), Ok(())); - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::BlockNumber( - hash, - tx, - )) => { - assert_eq!(hash, relay_parent); - tx.send(Ok(Some(4))).unwrap(); - } + let (tx, rx) = oneshot::channel(); + let query_chunk = AvailabilityStoreMessage::QueryChunk( + candidate_hash, + validator_index, + tx, ); - assert_eq!(rx.await.unwrap(), Ok(())); + overseer_send(&mut virtual_overseer, query_chunk.into()).await; + + assert_eq!(rx.await.unwrap().unwrap(), chunk); + }); +} + + +#[test] +fn store_chunk_does_nothing_if_no_entry_already() { + let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); + test_harness(TestState::default(), store.clone(), |test_harness| async move { + let TestHarness { mut virtual_overseer } = test_harness; + let relay_parent = Hash::repeat_byte(32); + let candidate_hash = CandidateHash(Hash::repeat_byte(33)); + let validator_index = 5; + + let chunk = ErasureChunk { + chunk: vec![1, 2, 3], + index: validator_index, + proof: vec![vec![3, 4, 5]], + }; + + let (tx, rx) = oneshot::channel(); + + let chunk_msg = AvailabilityStoreMessage::StoreChunk { + candidate_hash, + relay_parent, + chunk: chunk.clone(), + tx, + }; + + overseer_send(&mut virtual_overseer, chunk_msg.into()).await; + assert_eq!(rx.await.unwrap(), Err(())); let (tx, rx) = oneshot::channel(); let query_chunk = AvailabilityStoreMessage::QueryChunk( @@ -263,7 +354,52 @@ fn store_chunk_works() { overseer_send(&mut virtual_overseer, query_chunk.into()).await; - assert_eq!(rx.await.unwrap().unwrap(), chunk); + assert!(rx.await.unwrap().is_none()); + }); +} + +#[test] +fn query_chunk_checks_meta() { + let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); + test_harness(TestState::default(), store.clone(), |test_harness| async move { + let TestHarness { mut virtual_overseer } = test_harness; + let candidate_hash = CandidateHash(Hash::repeat_byte(33)); + let validator_index = 5; + let n_validators = 10; + + // Ensure an entry already exists. In reality this would come from watching + // chain events. + with_tx(&store, |tx| { + super::write_meta(tx, &candidate_hash, &CandidateMeta { + data_available: false, + chunks_stored: { + let mut v = bitvec::bitvec![BitOrderLsb0, u8; 0; n_validators]; + v.set(validator_index as usize, true); + v + }, + state: State::Unavailable(BETimestamp(0)), + }); + }); + + let (tx, rx) = oneshot::channel(); + let query_chunk = AvailabilityStoreMessage::QueryChunkAvailability( + candidate_hash, + validator_index, + tx, + ); + + overseer_send(&mut virtual_overseer, query_chunk.into()).await; + assert!(rx.await.unwrap()); + + let (tx, rx) = oneshot::channel(); + let query_chunk = AvailabilityStoreMessage::QueryChunkAvailability( + candidate_hash, + validator_index + 1, + tx, + ); + + overseer_send(&mut virtual_overseer, query_chunk.into()).await; + assert!(!rx.await.unwrap()); }); } @@ -271,7 +407,7 @@ fn store_chunk_works() { fn store_block_works() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); let test_state = TestState::default(); - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { + test_harness(test_state.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let candidate_hash = CandidateHash(Hash::repeat_byte(1)); let validator_index = 5; @@ -283,7 +419,7 @@ fn store_block_works() { let available_data = AvailableData { pov: Arc::new(pov), - validation_data: test_state.persisted_validation_data, + validation_data: test_state.persisted_validation_data.clone(), }; @@ -319,13 +455,12 @@ fn store_block_works() { }); } - #[test] fn store_pov_and_query_chunk_works() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); let test_state = TestState::default(); - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { + test_harness(test_state.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let candidate_hash = CandidateHash(Hash::repeat_byte(1)); let n_validators = 10; @@ -336,11 +471,10 @@ fn store_pov_and_query_chunk_works() { let available_data = AvailableData { pov: Arc::new(pov), - validation_data: test_state.persisted_validation_data, + validation_data: test_state.persisted_validation_data.clone(), }; - let no_metrics = Metrics(None); - let chunks_expected = get_chunks(&available_data, n_validators as usize, &no_metrics).unwrap(); + let chunks_expected = erasure::obtain_chunks_v1(n_validators as _, &available_data).unwrap(); let (tx, rx) = oneshot::channel(); let block_msg = AvailabilityStoreMessage::StoreAvailableData( @@ -358,71 +492,17 @@ fn store_pov_and_query_chunk_works() { for validator_index in 0..n_validators { let chunk = query_chunk(&mut virtual_overseer, candidate_hash, validator_index).await.unwrap(); - assert_eq!(chunk, chunks_expected[validator_index as usize]); + assert_eq!(chunk.chunk, chunks_expected[validator_index as usize]); } }); } -#[test] -fn stored_but_not_included_chunk_is_pruned() { - let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); - let test_state = TestState::default(); - - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { - let TestHarness { mut virtual_overseer } = test_harness; - let candidate_hash = CandidateHash(Hash::repeat_byte(1)); - let relay_parent = Hash::repeat_byte(2); - let validator_index = 5; - - let chunk = ErasureChunk { - chunk: vec![1, 2, 3], - index: validator_index, - proof: vec![vec![3, 4, 5]], - }; - - let (tx, rx) = oneshot::channel(); - let chunk_msg = AvailabilityStoreMessage::StoreChunk { - candidate_hash, - relay_parent, - chunk: chunk.clone(), - tx, - }; - - overseer_send(&mut virtual_overseer, chunk_msg.into()).await; - - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::BlockNumber( - hash, - tx, - )) => { - assert_eq!(hash, relay_parent); - tx.send(Ok(Some(4))).unwrap(); - } - ); - - rx.await.unwrap().unwrap(); - - // At this point data should be in the store. - assert_eq!( - query_chunk(&mut virtual_overseer, candidate_hash, validator_index).await.unwrap(), - chunk, - ); - - // Wait for twice as long as the stored block kept for. - Delay::new(test_state.pruning_config.keep_stored_block_for * 2).await; - - // The block was not included by this point so it should be pruned now. - assert!(query_chunk(&mut virtual_overseer, candidate_hash, validator_index).await.is_none()); - }); -} - #[test] fn stored_but_not_included_data_is_pruned() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); let test_state = TestState::default(); - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { + test_harness(test_state.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let candidate_hash = CandidateHash(Hash::repeat_byte(1)); let n_validators = 10; @@ -433,7 +513,7 @@ fn stored_but_not_included_data_is_pruned() { let available_data = AvailableData { pov: Arc::new(pov), - validation_data: test_state.persisted_validation_data, + validation_data: test_state.persisted_validation_data.clone(), }; let (tx, rx) = oneshot::channel(); @@ -455,8 +535,9 @@ fn stored_but_not_included_data_is_pruned() { available_data, ); - // Wait for twice as long as the stored block kept for. - Delay::new(test_state.pruning_config.keep_stored_block_for * 2).await; + // Wait until pruning. + test_state.clock.inc(test_state.pruning_config.keep_unavailable_for); + test_state.wait_for_pruning().await; // The block was not included by this point so it should be pruned now. assert!(query_available_data(&mut virtual_overseer, candidate_hash).await.is_none()); @@ -468,7 +549,7 @@ fn stored_data_kept_until_finalized() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); let test_state = TestState::default(); - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { + test_harness(test_state.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let n_validators = 10; @@ -487,9 +568,12 @@ fn stored_data_kept_until_finalized() { let available_data = AvailableData { pov: Arc::new(pov), - validation_data: test_state.persisted_validation_data, + validation_data: test_state.persisted_validation_data.clone(), }; + let parent = Hash::repeat_byte(2); + let block_number = 10; + let (tx, rx) = oneshot::channel(); let block_msg = AvailabilityStoreMessage::StoreAvailableData( candidate_hash, @@ -509,43 +593,17 @@ fn stored_data_kept_until_finalized() { available_data, ); - let new_leaf = Hash::repeat_byte(2); - overseer_signal( - &mut virtual_overseer, - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: vec![(new_leaf, Arc::new(JaegerSpan::Disabled))].into(), - deactivated: vec![].into(), - }), - ).await; - - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::CandidateEvents(tx), - )) => { - assert_eq!(relay_parent, new_leaf); - tx.send(Ok(vec![ - CandidateEvent::CandidateIncluded(candidate, HeadData::default()), - ])).unwrap(); - } - ); - - Delay::new(test_state.pruning_config.keep_stored_block_for * 10).await; - - // At this point data should _still_ be in the store. - assert_eq!( - query_available_data(&mut virtual_overseer, candidate_hash).await.unwrap(), - available_data, - ); - - overseer_signal( + let new_leaf = import_leaf( &mut virtual_overseer, - OverseerSignal::BlockFinalized(new_leaf, 10) + parent, + block_number, + vec![CandidateEvent::CandidateIncluded(candidate, HeadData::default())], + (0..n_validators).map(|_| Sr25519Keyring::Alice.public().into()).collect(), ).await; - // Wait for a half of the time finalized data should be available for - Delay::new(test_state.pruning_config.keep_finalized_block_for / 2).await; + // Wait until unavailable data would definitely be pruned. + test_state.clock.inc(test_state.pruning_config.keep_unavailable_for * 10); + test_state.wait_for_pruning().await; // At this point data should _still_ be in the store. assert_eq!( @@ -553,116 +611,41 @@ fn stored_data_kept_until_finalized() { available_data, ); - // Wait until it is should be gone. - Delay::new(test_state.pruning_config.keep_finalized_block_for).await; - - // At this point data should be gone from the store. assert!( - query_available_data(&mut virtual_overseer, candidate_hash).await.is_none(), - ); - }); -} - -#[test] -fn stored_chunk_kept_until_finalized() { - let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); - let test_state = TestState::default(); - - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { - let TestHarness { mut virtual_overseer } = test_harness; - let relay_parent = Hash::repeat_byte(2); - let validator_index = 5; - let candidate = TestCandidateBuilder { - ..Default::default() - }.build(); - let candidate_hash = candidate.hash(); - - let chunk = ErasureChunk { - chunk: vec![1, 2, 3], - index: validator_index, - proof: vec![vec![3, 4, 5]], - }; - - let (tx, rx) = oneshot::channel(); - let chunk_msg = AvailabilityStoreMessage::StoreChunk { - candidate_hash, - relay_parent, - chunk: chunk.clone(), - tx, - }; - - overseer_send(&mut virtual_overseer, chunk_msg.into()).await; - - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::ChainApi(ChainApiMessage::BlockNumber( - hash, - tx, - )) => { - assert_eq!(hash, relay_parent); - tx.send(Ok(Some(4))).unwrap(); - } - ); - - rx.await.unwrap().unwrap(); - - // At this point data should be in the store. - assert_eq!( - query_chunk(&mut virtual_overseer, candidate_hash, validator_index).await.unwrap(), - chunk, + query_all_chunks(&mut virtual_overseer, candidate_hash, n_validators, true).await ); - let new_leaf = Hash::repeat_byte(2); overseer_signal( &mut virtual_overseer, - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: vec![(new_leaf, Arc::new(JaegerSpan::Disabled))].into(), - deactivated: vec![].into(), - }), + OverseerSignal::BlockFinalized(new_leaf, block_number) ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::CandidateEvents(tx), - )) => { - assert_eq!(relay_parent, new_leaf); - tx.send(Ok(vec![ - CandidateEvent::CandidateIncluded(candidate, HeadData::default()), - ])).unwrap(); - } - ); - - Delay::new(test_state.pruning_config.keep_stored_block_for * 10).await; + // Wait until unavailable data would definitely be pruned. + test_state.clock.inc(test_state.pruning_config.keep_finalized_for / 2); + test_state.wait_for_pruning().await; // At this point data should _still_ be in the store. assert_eq!( - query_chunk(&mut virtual_overseer, candidate_hash, validator_index).await.unwrap(), - chunk, + query_available_data(&mut virtual_overseer, candidate_hash).await.unwrap(), + available_data, ); - overseer_signal( - &mut virtual_overseer, - OverseerSignal::BlockFinalized(new_leaf, 10) - ).await; - - // Wait for a half of the time finalized data should be available for - Delay::new(test_state.pruning_config.keep_finalized_block_for / 2).await; - - // At this point data should _still_ be in the store. - assert_eq!( - query_chunk(&mut virtual_overseer, candidate_hash, validator_index).await.unwrap(), - chunk, + assert!( + query_all_chunks(&mut virtual_overseer, candidate_hash, n_validators, true).await ); - // Wait until it is should be gone. - Delay::new(test_state.pruning_config.keep_finalized_chunk_for).await; + // Wait until it definitely should be gone. + test_state.clock.inc(test_state.pruning_config.keep_finalized_for); + test_state.wait_for_pruning().await; // At this point data should be gone from the store. assert!( query_available_data(&mut virtual_overseer, candidate_hash).await.is_none(), ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_hash, n_validators, false).await + ); }); } @@ -671,9 +654,14 @@ fn forkfullness_works() { let store = Arc::new(kvdb_memorydb::create(columns::NUM_COLUMNS)); let test_state = TestState::default(); - test_harness(test_state.pruning_config.clone(), store.clone(), |test_harness| async move { + test_harness(test_state.clone(), store.clone(), |test_harness| async move { let TestHarness { mut virtual_overseer } = test_harness; let n_validators = 10; + let block_number_1 = 5; + let block_number_2 = 5; + let validators: Vec<_> = (0..n_validators).map(|_| Sr25519Keyring::Alice.public().into()).collect(); + let parent_1 = Hash::repeat_byte(3); + let parent_2 = Hash::repeat_byte(4); let pov_1 = PoV { block_data: BlockData(vec![1, 2, 3]), @@ -708,7 +696,7 @@ fn forkfullness_works() { let available_data_2 = AvailableData { pov: Arc::new(pov_2), - validation_data: test_state.persisted_validation_data, + validation_data: test_state.persisted_validation_data.clone(), }; let (tx, rx) = oneshot::channel(); @@ -747,47 +735,25 @@ fn forkfullness_works() { available_data_2, ); - - let new_leaf_1 = Hash::repeat_byte(2); - let new_leaf_2 = Hash::repeat_byte(3); - - overseer_signal( + let new_leaf_1 = import_leaf( &mut virtual_overseer, - OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { - activated: vec![(new_leaf_1, Arc::new(JaegerSpan::Disabled)), (new_leaf_2, Arc::new(JaegerSpan::Disabled))].into(), - deactivated: vec![].into(), - }), + parent_1, + block_number_1, + vec![CandidateEvent::CandidateIncluded(candidate_1, HeadData::default())], + validators.clone(), ).await; - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - leaf, - RuntimeApiRequest::CandidateEvents(tx), - )) => { - assert_eq!(leaf, new_leaf_1); - tx.send(Ok(vec![ - CandidateEvent::CandidateIncluded(candidate_1, HeadData::default()), - ])).unwrap(); - } - ); - - assert_matches!( - overseer_recv(&mut virtual_overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - leaf, - RuntimeApiRequest::CandidateEvents(tx), - )) => { - assert_eq!(leaf, new_leaf_2); - tx.send(Ok(vec![ - CandidateEvent::CandidateIncluded(candidate_2, HeadData::default()), - ])).unwrap(); - } - ); + let _new_leaf_2 = import_leaf( + &mut virtual_overseer, + parent_2, + block_number_2, + vec![CandidateEvent::CandidateIncluded(candidate_2, HeadData::default())], + validators.clone(), + ).await; overseer_signal( &mut virtual_overseer, - OverseerSignal::BlockFinalized(new_leaf_1, 5) + OverseerSignal::BlockFinalized(new_leaf_1, block_number_1) ).await; // Data of both candidates should be still present in the DB. @@ -800,10 +766,41 @@ fn forkfullness_works() { query_available_data(&mut virtual_overseer, candidate_2_hash).await.unwrap(), available_data_2, ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_1_hash, n_validators, true).await, + ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_2_hash, n_validators, true).await, + ); + + // Candidate 2 should now be considered unavailable and will be pruned. + test_state.clock.inc(test_state.pruning_config.keep_unavailable_for); + test_state.wait_for_pruning().await; + + assert_eq!( + query_available_data(&mut virtual_overseer, candidate_1_hash).await.unwrap(), + available_data_1, + ); + + assert!( + query_available_data(&mut virtual_overseer, candidate_2_hash).await.is_none(), + ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_1_hash, n_validators, true).await, + ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_2_hash, n_validators, false).await, + ); + // Wait for longer than finalized blocks should be kept for - Delay::new(test_state.pruning_config.keep_finalized_block_for + Duration::from_secs(1)).await; + test_state.clock.inc(test_state.pruning_config.keep_finalized_for); + test_state.wait_for_pruning().await; - // Data of both candidates should be gone now. + // Everything should be pruned now. assert!( query_available_data(&mut virtual_overseer, candidate_1_hash).await.is_none(), ); @@ -811,6 +808,14 @@ fn forkfullness_works() { assert!( query_available_data(&mut virtual_overseer, candidate_2_hash).await.is_none(), ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_1_hash, n_validators, false).await, + ); + + assert!( + query_all_chunks(&mut virtual_overseer, candidate_2_hash, n_validators, false).await, + ); }); } @@ -838,3 +843,88 @@ async fn query_chunk( rx.await.unwrap() } + +async fn query_all_chunks( + virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, + candidate_hash: CandidateHash, + n_validators: u32, + expect_present: bool, +) -> bool { + for i in 0..n_validators { + if query_chunk(virtual_overseer, candidate_hash, i).await.is_some() != expect_present { + return false + } + } + true +} + +async fn import_leaf( + virtual_overseer: &mut test_helpers::TestSubsystemContextHandle, + parent_hash: Hash, + block_number: BlockNumber, + events: Vec, + validators: Vec, +) -> Hash { + let header = Header { + parent_hash, + number: block_number, + state_root: Hash::zero(), + extrinsics_root: Hash::zero(), + digest: Default::default(), + }; + let new_leaf = header.hash(); + + overseer_signal( + virtual_overseer, + OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { + activated: vec![(new_leaf, Arc::new(JaegerSpan::Disabled))].into(), + deactivated: vec![].into(), + }), + ).await; + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::CandidateEvents(tx), + )) => { + assert_eq!(relay_parent, new_leaf); + tx.send(Ok(events)).unwrap(); + } + ); + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::ChainApi(ChainApiMessage::BlockNumber( + relay_parent, + tx, + )) => { + assert_eq!(relay_parent, new_leaf); + tx.send(Ok(Some(block_number))).unwrap(); + } + ); + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::ChainApi(ChainApiMessage::BlockHeader( + relay_parent, + tx, + )) => { + assert_eq!(relay_parent, new_leaf); + tx.send(Ok(Some(header))).unwrap(); + } + ); + + assert_matches!( + overseer_recv(virtual_overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Validators(tx), + )) => { + assert_eq!(relay_parent, parent_hash); + tx.send(Ok(validators)).unwrap(); + } + ); + + new_leaf +} diff --git a/roadmap/implementers-guide/src/node/utility/availability-store.md b/roadmap/implementers-guide/src/node/utility/availability-store.md index f8d6f1b67a..7d2ec5e7bb 100644 --- a/roadmap/implementers-guide/src/node/utility/availability-store.md +++ b/roadmap/implementers-guide/src/node/utility/availability-store.md @@ -9,25 +9,19 @@ The two data types: For each of these data we have pruning rules that determine how long we need to keep that data available. -PoV hypothetically only need to be kept around until the block where the data was made fully available is finalized. However, disputes can revert finality, so we need to be a bit more conservative. We should keep the PoV until a block that finalized availability of it has been finalized for 1 day. +PoV hypothetically only need to be kept around until the block where the data was made fully available is finalized. However, disputes can revert finality, so we need to be a bit more conservative and we add a delay. We should keep the PoV until a block that finalized availability of it has been finalized for 1 day + 1 hour. -> TODO: arbitrary, but extracting `acceptance_period` is kind of hard here... - -Availability chunks need to be kept available until the dispute period for the corresponding candidate has ended. We can accomplish this by using the same criterion as the above, plus a delay. This gives us a pruning condition of the block finalizing availability of the chunk being final for 1 day + 1 hour. - -> TODO: again, concrete acceptance-period would be nicer here, but complicates things +Availability chunks need to be kept available until the dispute period for the corresponding candidate has ended. We can accomplish this by using the same criterion as the above. This gives us a pruning condition of the block finalizing availability of the chunk being final for 1 day + 1 hour. There is also the case where a validator commits to make a PoV available, but the corresponding candidate is never backed. In this case, we keep the PoV available for 1 hour. -> TODO: ideally would be an upper bound on how far back contextual execution is OK. - -There may be multiple competing blocks all ending the availability phase for a particular candidate. Until (and slightly beyond) finality, it will be unclear which of those is actually the canonical chain, so the pruning records for PoVs and Availability chunks should keep track of all such blocks. +There may be multiple competing blocks all ending the availability phase for a particular candidate. Until finality, it will be unclear which of those is actually the canonical chain, so the pruning records for PoVs and Availability chunks should keep track of all such blocks. -## Lifetime of the PoV in the storage +## Lifetime of the block data and chunks in storage ```dot process digraph { - label = "Block life FSM\n\n\n"; + label = "Block data FSM\n\n\n"; labelloc = "t"; rankdir="LR"; @@ -39,130 +33,138 @@ digraph { st -> inc [label = "Block\nincluded"] st -> prn [label = "Stored block\ntimed out"] inc -> fin [label = "Block\nfinalized"] - fin -> prn [label = "Block keep time\n(1 day) elapsed"] + inc -> st [label = "Competing blocks\nfinalized"] + fin -> prn [label = "Block keep time\n(1 day + 1 hour) elapsed"] } ``` -## Lifetime of the chunk in the storage +## Database Schema -```dot process -digraph { - label = "Chunk life FSM\n\n\n"; - labelloc = "t"; - rankdir="LR"; +We use an underlying Key-Value database where we assume we have the following operations available: + * `write(key, value)` + * `read(key) -> Option` + * `iter_with_prefix(prefix) -> Iterator<(key, value)>` - gives all keys and values in lexicographical order where the key starts with `prefix`. - chst [label = "Chunk\nStored"; shape = circle] - st [label = "Block\nStored"; shape = circle] - inc [label = "Included"; shape = circle] - fin [label = "Finalized"; shape = circle] - prn [label = "Pruned"; shape = circle] +We use this database to encode the following schema: - chst -> inc [label = "Block\nincluded"] - st -> inc [label = "Block\nincluded"] - st -> prn [label = "Stored block\ntimed out"] - inc -> fin [label = "Block\nfinalized"] - fin -> prn [label = "Block keep time\n(1 day + 1 hour) elapsed"] -} ``` +("available", CandidateHash) -> Option +("chunk", CandidateHash, u32) -> Option +("meta", CandidateHash) -> Option -## Protocol - -Input: [`AvailabilityStoreMessage`][ASM] +("unfinalized", BlockNumber, BlockHash, CandidateHash) -> Option<()> +("prune_by_time", Timestamp, CandidateHash) -> Option<()> +``` -Output: -- [`RuntimeApiMessage`][RAM] +Timestamps are the wall-clock seconds since unix epoch. Timestamps and block numbers are both encoded as big-endian so lexicographic order is ascending. -## Functionality +The meta information that we track per-candidate is defined as the `CandidateMeta` struct -On `ActiveLeavesUpdate`: +```rust +struct CandidateMeta { + state: State, + data_available: bool, + chunks_stored: Bitfield, +} -For each head in the `activated` list: - - Note any new candidates backed in the block. Update pruning records for any stored `PoVBlock`s. - - Note any newly-included candidates backed in the block. Update pruning records for any stored availability chunks. +enum State { + /// Candidate data was first observed at the given time but is not available in any block. + Unavailable(Timestamp), + /// The candidate was first observed at the given time and was included in the given list of unfinalized blocks, which may be + /// empty. The timestamp here is not used for pruning. Either one of these blocks will be finalized or the state will regress to + /// `State::Unavailable`, in which case the same timestamp will be reused. + Unfinalized(Timestamp, Vec<(BlockNumber, BlockHash)>), + /// Candidate data has appeared in a finalized block and did so at the given time. + Finalized(Timestamp) +} +``` -On `OverseerSignal::BlockFinalized(_)` events: +We maintain the invariant that if a candidate has a meta entry, its available data exists on disk if `data_available` is true. All chunks mentioned in the meta entry are available. -- Handle all pruning based on the newly-finalized block. +Additionally, there is exactly one `prune_by_time` entry which holds the candidate hash unless the state is `Unfinalized`. There may be zero, one, or many "unfinalized" keys with the given candidate, and this will correspond to the `state` of the meta entry. -On `QueryPoV` message: +## Protocol -- Return the PoV block, if any, for that candidate hash. +Input: [`AvailabilityStoreMessage`][ASM] -On `QueryChunk` message: +Output: +- [`RuntimeApiMessage`][RAM] -- Determine if we have the chunk indicated by the parameters and return it and its inclusion proof via the response channel if so. -On `StoreChunk` message: +## Functionality -- Store the chunk along with its inclusion proof under the candidate hash and validator index. +For each head in the `activated` list: + - Note any new candidates backed in the block. Update the `CandidateMeta` for each. If the `CandidateMeta` does not exist, create it as `Unavailable` with the current timestamp. Register a `"prune_by_time"` entry based on the current timestamp + 1 hour. + - Note any new candidate included in the block. Update the `CandidateMeta` for each, performing a transition from `Unavailable` to `Unfinalized` if necessary. That includes removing the `"prune_by_time"` entry. Add the block hash and number to the state, if unfinalized. Add an `"unfinalized"` entry for the block and candidate. + - The `CandidateEvent` runtime API can be used for this purpose. + - TODO: load all ancestors of the head back to the finalized block so we don't miss anything if import notifications are missed. If a `StoreChunk` message is received for a candidate which has no entry, then we will prematurely lose the data. -On `StorePoV` message: +On `OverseerSignal::BlockFinalized(finalized)` events: + - for each key in `iter_with_prefix("unfinalized")` + - Stop if the key is beyond `("unfinalized, finalized)` + - For each block number f that we encounter, load the finalized hash for that block. + - The state of each `CandidateMeta` we encounter here must be `Unfinalized`, since we loaded the candidate from an `"unfinalized"` key. + - For each candidate that we encounter under `f` and the finalized block hash, + - Update the `CandidateMeta` to have `State::Finalized`. Remove all `"unfinalized"` entries from the old `Unfinalized` state. + - Register a `"prune_by_time"` entry for the candidate based on the current time + 1 day + 1 hour. + - For each candidate that we encounter under `f` which is not under the finalized block hash, + - Remove all entries under `f` in the `Unfinalized` state. + - If the `CandidateMeta` has state `Unfinalized` with an empty list of blocks, downgrade to `Unavailable` and re-schedule pruning under the timestamp + 1 hour. We do not prune here as the candidate still may be included in a descendent of the finalized chain. + - Remove all `"unfinalized"` keys under `f`. + - Update last_finalized = finalized. -- Store the block, if the validator index is provided, store the respective chunk as well. + This is roughly `O(n * m)` where n is the number of blocks finalized since the last update, and `m` is the number of parachains. -On finality event: +On `QueryAvailableData` message: -- For the finalized block and any earlier block (if any) update pruning records of `PoV`s and chunks to keep them for respective periods after finality. + - Query `("available", candidate_hash)` -### Note any backed, included and timedout candidates in the block by `hash`. + This is `O(n)` in the size of the data, which may be large. -- Create a `(sender, receiver)` pair. -- Dispatch a [`RuntimeApiMessage`][RAM]`::Request(hash, RuntimeApiRequest::CandidateEvents(sender)` and listen on the receiver for a response. -- For every event in the response:`CandidateEvent::CandidateIncluded`. - * For every `CandidateEvent::CandidateBacked` do nothing - * For every `CandidateEvent::CandidateIncluded` update pruning records of any blocks that the node stored previously. - * For every `CandidateEvent::CandidateTimedOut` use pruning records to prune the data; delete the info from records. +On `QueryDataAvailability` message: -## Schema + - Query whether `("meta", candidate_hash)` exists and `data_available == true`. -### PoV pruning + This is `O(n)` in the size of the metadata which is small. -We keep a record about every PoV we keep, tracking its state and the time after which this PoV should be pruned. +On `QueryChunk` message: -As the state of the `Candidate` changes, so does the `Prune At` time according to the rules defined earlier. + - Query `("chunk", candidate_hash, index)` -| Record 1 | .. | Record N | -|----------------|----|----------------| -| CandidateHash1 | .. | CandidateHashN | -| Prune At | .. | Prune At | -| CandidateState | .. | CandidateState | + This is `O(n)` in the size of the data, which may be large. -### Chunk pruning +On `QueryChunkAvailability message: -Chunk pruning is organized in a similar schema as PoV pruning. + - Query whether `("meta", candidate_hash)` exists and the bit at `index` is set. -| Record 1 | .. | Record N | -|----------------|----|----------------| -| CandidateHash1 | .. | CandidateHashN | -| Prune At | .. | Prune At | -| CandidateState | .. | CandidateState | + This is `O(n)` in the size of the metadata which is small. -### Included blocks caching +On `StoreChunk` message: -In order to process finality events correctly we need to cache the set of parablocks included into each relay block beginning with the last finalized block and up to the most recent heads. We have to cache this data since we are only able to query this info from the state for the `k` last blocks where `k` is a relatively small number (for more info see `Assumptions`) + - If there is a `CandidateMeta` under the candidate hash, set the bit of the erasure-chunk in the `chunks_stored` bitfield to `1`. If it was not `1` already, write the chunk under `("chunk", candidate_hash, chunk_index)`. -These are used to update Chunk pruning and PoV pruning records upon finality: -When another block finality notification is received: - - For any record older than this block: - - Update pruning - - Remove the record + This is `O(n)` in the size of the chunk. -| Relay Block N | .. | Chain Head 1 | Chain Head 2 | -|---------------|----|--------------|--------------| -| CandidateN_1 Included | .. | Candidate1_1 Included | Candidate2_1 Included | -| CandidateN_2 Included | .. | Candidate1_2 Included | Candidete2_2 Included | -| .. | .. | .. | .. | -| CandidateN_M Included | .. | Candidate1_K Included | Candidate2_L Included | +On `StoreAvailableData` message: -> TODO: It's likely we will have to have a way to go from block hash to `BlockNumber` to make this work. + - If there is no `CandidateMeta` under the candidate hash, create it with `State::Unavailable(now)`. Load the `CandidateMeta` otherwise. + - Store `data` under `("available", candidate_hash)` and set `data_available` to true. + - Store each chunk under `("chunk", candidate_hash, index)` and set every bit in `chunks_stored` to `1`. -### Blocks + This is `O(n)` in the size of the data as the aggregate size of the chunks is proportional to the data. -Blocks are simply stored as `(Hash, AvailableData)` key-value pairs. +Every 5 minutes, run a pruning routine: -### Chunks + - for each key in `iter_with_prefix("prune_by_time")`: + - If the key is beyond ("prune_by_time", now), return. + - Remove the key. + - Extract `candidate_hash` from the key. + - Load and remove the `("meta", candidate_hash)` + - For each erasure chunk bit set, remove `("chunk", candidate_hash, bit_index)`. + - If `data_available`, remove `("available", candidate_hash) -Chunks are stored as `(Hash, Vec)` key-value pairs. + This is O(n * m) in the amount of candidates and average size of the data stored. This is probably the most expensive operation but does not need + to be run very often. ## Basic scenarios to test diff --git a/roadmap/implementers-guide/src/types/overseer-protocol.md b/roadmap/implementers-guide/src/types/overseer-protocol.md index 02219a91f1..44d0d8064d 100644 --- a/roadmap/implementers-guide/src/types/overseer-protocol.md +++ b/roadmap/implementers-guide/src/types/overseer-protocol.md @@ -173,12 +173,12 @@ enum AvailabilityStoreMessage { QueryDataAvailability(CandidateHash, ResponseChannel), /// Query a specific availability chunk of the candidate's erasure-coding by validator index. /// Returns the chunk and its inclusion proof against the candidate's erasure-root. - QueryChunk(CandidateHash, ValidatorIndex, ResponseChannel>), + QueryChunk(CandidateHash, ValidatorIndex, ResponseChannel>), /// Store a specific chunk of the candidate's erasure-coding, with an /// accompanying proof. - StoreChunk(CandidateHash, AvailabilityChunkAndProof, ResponseChannel>), + StoreChunk(CandidateHash, ErasureChunk, ResponseChannel>), /// Store `AvailableData`. If `ValidatorIndex` is provided, also store this validator's - /// `AvailabilityChunkAndProof`. + /// `ErasureChunk`. StoreAvailableData(CandidateHash, Option, u32, AvailableData, ResponseChannel>), } ``` -- GitLab From b2fea426f5317c82fa5431b70482b79c386731af Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Mon, 11 Jan 2021 20:29:04 +0100 Subject: [PATCH 183/203] Pass relay_storage_root into ValidationParams (#2245) Prior this commit, a PVF wasn't able to access this property. --- node/core/candidate-validation/src/lib.rs | 1 + parachain/src/primitives.rs | 2 ++ parachain/test-parachains/adder/collator/src/lib.rs | 1 + parachain/test-parachains/tests/adder/mod.rs | 3 +++ parachain/test-parachains/tests/wasm_executor/mod.rs | 3 +++ 5 files changed, 10 insertions(+) diff --git a/node/core/candidate-validation/src/lib.rs b/node/core/candidate-validation/src/lib.rs index cf47b9d62e..eec666ded1 100644 --- a/node/core/candidate-validation/src/lib.rs +++ b/node/core/candidate-validation/src/lib.rs @@ -439,6 +439,7 @@ fn validate_candidate_exhaustive( parent_head: persisted_validation_data.parent_head.clone(), block_data: pov.block_data.clone(), relay_chain_height: persisted_validation_data.block_number, + relay_storage_root: persisted_validation_data.relay_storage_root, dmq_mqc_head: persisted_validation_data.dmq_mqc_head, hrmp_mqc_heads: persisted_validation_data.hrmp_mqc_heads.clone(), }; diff --git a/parachain/src/primitives.rs b/parachain/src/primitives.rs index e3c97620bf..91250b75f5 100644 --- a/parachain/src/primitives.rs +++ b/parachain/src/primitives.rs @@ -254,6 +254,8 @@ pub struct ValidationParams { pub block_data: BlockData, /// The current relay-chain block number. pub relay_chain_height: RelayChainBlockNumber, + /// The relay-chain block's storage root. + pub relay_storage_root: Hash, /// The MQC head for the DMQ. /// /// The DMQ MQC head will be used by the validation function to authorize the downward messages diff --git a/parachain/test-parachains/adder/collator/src/lib.rs b/parachain/test-parachains/adder/collator/src/lib.rs index ac50a4f693..4c798a04c0 100644 --- a/parachain/test-parachains/adder/collator/src/lib.rs +++ b/parachain/test-parachains/adder/collator/src/lib.rs @@ -234,6 +234,7 @@ mod tests { parent_head: parent_head.encode().into(), block_data: collation.proof_of_validity.block_data, relay_chain_height: 1, + relay_storage_root: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, diff --git a/parachain/test-parachains/tests/adder/mod.rs b/parachain/test-parachains/tests/adder/mod.rs index 8666cf365a..9726d618e8 100644 --- a/parachain/test-parachains/tests/adder/mod.rs +++ b/parachain/test-parachains/tests/adder/mod.rs @@ -68,6 +68,7 @@ fn execute_good_on_parent(isolation_strategy: IsolationStrategy) { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), relay_chain_height: 1, + relay_storage_root: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, @@ -107,6 +108,7 @@ fn execute_good_chain_on_parent() { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), relay_chain_height: number as RelayChainBlockNumber + 1, + relay_storage_root: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, @@ -147,6 +149,7 @@ fn execute_bad_on_parent() { parent_head: GenericHeadData(parent_head.encode()), block_data: GenericBlockData(block_data.encode()), relay_chain_height: 1, + relay_storage_root: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, diff --git a/parachain/test-parachains/tests/wasm_executor/mod.rs b/parachain/test-parachains/tests/wasm_executor/mod.rs index e092adc2f4..ebfe83f3eb 100644 --- a/parachain/test-parachains/tests/wasm_executor/mod.rs +++ b/parachain/test-parachains/tests/wasm_executor/mod.rs @@ -42,6 +42,7 @@ fn terminates_on_timeout() { block_data: BlockData(Vec::new()), parent_head: Default::default(), relay_chain_height: 1, + relay_storage_root: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, @@ -70,6 +71,7 @@ fn parallel_execution() { block_data: BlockData(Vec::new()), parent_head: Default::default(), relay_chain_height: 1, + relay_storage_root: Default::default(), hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), }, @@ -81,6 +83,7 @@ fn parallel_execution() { ValidationParams { block_data: BlockData(Vec::new()), parent_head: Default::default(), + relay_storage_root: Default::default(), relay_chain_height: 1, hrmp_mqc_heads: Vec::new(), dmq_mqc_head: Default::default(), -- GitLab From 9dd75c5c4c43e3d56ccef36ecfa9d01e4b3a30d7 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Mon, 11 Jan 2021 16:19:45 -0400 Subject: [PATCH 184/203] Crowdloan Updates (#2166) * Rename crowdfund -> crowdloan * allow contribution on behalf of another user * starting some benchmarks * optimization: use append api * Use on_initialize instead of on_finalize * More benchmarks * try to implement partial child storage removal * partial dissolve test * onboard benchmark * begin retirement * on_initialize * remove _ { } * Revert "allow contribution on behalf of another user" This reverts commit b7dd7d1ec751495cee3ddb57133a13c390b020e5. * finish undo of "allow contribution on behalf of another user" * Allow any user to trigger withdraw on closed crowdloan * use transfer instead of withdraw/create pattern * unused warning * Update runtime/common/src/crowdloan.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * dont need to assign to empty variable Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> --- .../common/src/{crowdfund.rs => crowdloan.rs} | 799 +++++++++++++----- runtime/common/src/lib.rs | 2 +- runtime/common/src/slots.rs | 4 +- 3 files changed, 576 insertions(+), 229 deletions(-) rename runtime/common/src/{crowdfund.rs => crowdloan.rs} (60%) diff --git a/runtime/common/src/crowdfund.rs b/runtime/common/src/crowdloan.rs similarity index 60% rename from runtime/common/src/crowdfund.rs rename to runtime/common/src/crowdloan.rs index 715f6a9cfb..ad3629e8cf 100644 --- a/runtime/common/src/crowdfund.rs +++ b/runtime/common/src/crowdloan.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! # Parachain Crowdfunding module +//! # Parachain Crowdloaning module //! //! The point of this module is to allow parachain projects to offer the ability to help fund a //! deposit for the parachain. When the parachain is retired, the funds may be returned. @@ -67,14 +67,15 @@ //! funds ultimately end up in module's fund sub-account. use frame_support::{ - decl_module, decl_storage, decl_event, decl_error, storage::child, ensure, + decl_module, decl_storage, decl_event, decl_error, ensure, + storage::child, traits::{ - Currency, Get, OnUnbalanced, WithdrawReasons, ExistenceRequirement::AllowDeath + Currency, Get, OnUnbalanced, ExistenceRequirement::AllowDeath }, }; use frame_system::ensure_signed; -use sp_runtime::{ModuleId, - traits::{AccountIdConversion, Hash, Saturating, Zero, CheckedAdd} +use sp_runtime::{ModuleId, DispatchResult, + traits::{AccountIdConversion, Hash, Saturating, Zero, CheckedAdd, Bounded} }; use crate::slots; use parity_scale_codec::{Encode, Decode}; @@ -90,22 +91,25 @@ pub type NegativeImbalanceOf = pub trait Config: slots::Config { type Event: From> + Into<::Event>; - /// ModuleID for the crowdfund module. An appropriate value could be ```ModuleId(*b"py/cfund")``` + /// ModuleID for the crowdloan module. An appropriate value could be ```ModuleId(*b"py/cfund")``` type ModuleId: Get; - /// The amount to be held on deposit by the owner of a crowdfund. + /// The amount to be held on deposit by the owner of a crowdloan. type SubmissionDeposit: Get>; - /// The minimum amount that may be contributed into a crowdfund. Should almost certainly be at + /// The minimum amount that may be contributed into a crowdloan. Should almost certainly be at /// least ExistentialDeposit. type MinContribution: Get>; - /// The period of time (in blocks) after an unsuccessful crowdfund ending when + /// The period of time (in blocks) after an unsuccessful crowdloan ending when /// contributors are able to withdraw their funds. After this period, their funds are lost. type RetirementPeriod: Get; /// What to do with funds that were not withdrawn. type OrphanedFunds: OnUnbalanced>; + + /// Max number of storage keys to remove per extrinsic call. + type RemoveKeysLimit: Get; } /// Simple index for identifying a fund. @@ -164,7 +168,7 @@ pub struct FundInfo { } decl_storage! { - trait Store for Module as Crowdfund { + trait Store for Module as Crowdloan { /// Info on all of the funds. Funds get(fn funds): map hasher(twox_64_concat) FundIndex @@ -187,7 +191,7 @@ decl_event! { ::AccountId, Balance = BalanceOf, { - /// Create a new crowdfunding campaign. [fund_index] + /// Create a new crowdloaning campaign. [fund_index] Created(FundIndex), /// Contributed to a crowd sale. [who, fund_index, amount] Contributed(AccountId, FundIndex, Balance), @@ -195,12 +199,17 @@ decl_event! { Withdrew(AccountId, FundIndex, Balance), /// Fund is placed into retirement. [fund_index] Retiring(FundIndex), + /// Fund is partially dissolved, i.e. there are some left over child + /// keys that still need to be killed. [fund_index] + PartiallyDissolved(FundIndex), /// Fund is dissolved. [fund_index] Dissolved(FundIndex), /// The deploy data of the funded parachain is setted. [fund_index] DeployDataFixed(FundIndex), /// Onboarding process for a winning parachain fund is completed. [find_index, parachain_id] Onboarded(FundIndex, ParaId), + /// The result of trying to submit a new bid to the Slots pallet. + HandleBidResult(FundIndex, DispatchResult), } } @@ -231,7 +240,7 @@ decl_error! { UnsetDeployData, /// This fund has already been onboarded. AlreadyOnboard, - /// This crowdfund does not correspond to a parachain. + /// This crowdloan does not correspond to a parachain. NotParachain, /// This parachain still has its deposit. Implies that it has already been offboarded. ParaHasDeposit, @@ -239,11 +248,11 @@ decl_error! { FundsNotReturned, /// Fund has not yet retired. FundNotRetired, - /// The crowdfund has not yet ended. + /// The crowdloan has not yet ended. FundNotEnded, - /// There are no contributions stored in this crowdfund. + /// There are no contributions stored in this crowdloan. NoContributions, - /// This crowdfund has an active parachain and cannot be dissolved. + /// This crowdloan has an active parachain and cannot be dissolved. HasActiveParachain, /// The retirement period has not ended. InRetirementPeriod, @@ -258,7 +267,7 @@ decl_module! { fn deposit_event() = default; - /// Create a new crowdfunding campaign for a parachain slot deposit for the current auction. + /// Create a new crowdloaning campaign for a parachain slot deposit for the current auction. #[weight = 100_000_000] fn create(origin, #[compact] cap: BalanceOf, @@ -272,17 +281,12 @@ decl_module! { ensure!(last_slot <= first_slot + 3u32.into(), Error::::LastSlotTooFarInFuture); ensure!(end > >::block_number(), Error::::CannotEndInPast); - let deposit = T::SubmissionDeposit::get(); - let transfer = WithdrawReasons::TRANSFER; - let imb = T::Currency::withdraw(&owner, deposit, transfer, AllowDeath)?; - let index = FundCount::get(); let next_index = index.checked_add(1).ok_or(Error::::Overflow)?; - FundCount::put(next_index); - // No fees are paid here if we need to create this account; that's why we don't just - // use the stock `transfer`. - T::Currency::resolve_creating(&Self::fund_account_id(index), imb); + let deposit = T::SubmissionDeposit::get(); + T::Currency::transfer(&owner, &Self::fund_account_id(index), deposit, AllowDeath)?; + FundCount::put(next_index); >::insert(index, FundInfo { parachain: None, @@ -312,7 +316,7 @@ decl_module! { fund.raised = fund.raised.checked_add(&value).ok_or(Error::::Overflow)?; ensure!(fund.raised <= fund.cap, Error::::CapExceeded); - // Make sure crowdfund has not ended + // Make sure crowdloan has not ended let now = >::block_number(); ensure!(fund.end > now, Error::::ContributionPeriodOver); @@ -329,7 +333,7 @@ decl_module! { // do nothing - already in NewRaise } _ => { - NewRaise::mutate(|v| v.push(index)); + NewRaise::append(index); fund.last_contribution = LastContribution::Ending(now); } } @@ -344,7 +348,7 @@ decl_module! { _ => { // Not in ending period; but an auction has been ending since our previous // bid, or we never had one to begin with. Add bid. - NewRaise::mutate(|v| v.push(index)); + NewRaise::append(index); fund.last_contribution = LastContribution::PreEnding(endings_count); } } @@ -393,7 +397,7 @@ decl_module! { #[compact] index: FundIndex, #[compact] para_id: ParaId ) { - let _ = ensure_signed(origin)?; + ensure_signed(origin)?; let mut fund = Self::funds(index).ok_or(Error::::InvalidFundIndex)?; let DeployData { code_hash, code_size, initial_head_data } @@ -419,7 +423,7 @@ decl_module! { /// Note that a successful fund has lost its parachain slot, and place it into retirement. #[weight = 0] fn begin_retirement(origin, #[compact] index: FundIndex) { - let _ = ensure_signed(origin)?; + ensure_signed(origin)?; let mut fund = Self::funds(index).ok_or(Error::::InvalidFundIndex)?; let parachain_id = fund.parachain.take().ok_or(Error::::NotParachain)?; @@ -440,8 +444,8 @@ decl_module! { /// Withdraw full balance of a contributor to an unsuccessful or off-boarded fund. #[weight = 0] - fn withdraw(origin, #[compact] index: FundIndex) { - let who = ensure_signed(origin)?; + fn withdraw(origin, who: T::AccountId, #[compact] index: FundIndex) { + ensure_signed(origin)?; let mut fund = Self::funds(index).ok_or(Error::::InvalidFundIndex)?; ensure!(fund.parachain.is_none(), Error::::FundNotRetired); @@ -454,10 +458,8 @@ decl_module! { ensure!(balance > Zero::zero(), Error::::NoContributions); // Avoid using transfer to ensure we don't pay any fees. - let fund_account = &Self::fund_account_id(index); - let transfer = WithdrawReasons::TRANSFER; - let imbalance = T::Currency::withdraw(fund_account, balance, transfer, AllowDeath)?; - let _ = T::Currency::resolve_into_existing(&who, imbalance); + let fund_account = Self::fund_account_id(index); + T::Currency::transfer(&fund_account, &who, balance, AllowDeath)?; Self::contribution_kill(index, &who); fund.raised = fund.raised.saturating_sub(balance); @@ -472,7 +474,7 @@ decl_module! { /// withdrawn into the treasury. #[weight = 0] fn dissolve(origin, #[compact] index: FundIndex) { - let _ = ensure_signed(origin)?; + ensure_signed(origin)?; let fund = Self::funds(index).ok_or(Error::::InvalidFundIndex)?; ensure!(fund.parachain.is_none(), Error::::HasActiveParachain); @@ -482,23 +484,27 @@ decl_module! { Error::::InRetirementPeriod ); - let account = Self::fund_account_id(index); - - // Avoid using transfer to ensure we don't pay any fees. - let transfer = WithdrawReasons::TRANSFER; - let imbalance = T::Currency::withdraw(&account, fund.deposit, transfer, AllowDeath)?; - let _ = T::Currency::resolve_into_existing(&fund.owner, imbalance); + // Try killing the crowdloan child trie + match Self::crowdloan_kill(index) { + child::KillOutcome::AllRemoved => { + let account = Self::fund_account_id(index); + T::Currency::transfer(&account, &fund.owner, fund.deposit, AllowDeath)?; - let imbalance = T::Currency::withdraw(&account, fund.raised, transfer, AllowDeath)?; - T::OrphanedFunds::on_unbalanced(imbalance); + // Remove all other balance from the account into orphaned funds. + let (imbalance, _) = T::Currency::slash(&account, BalanceOf::::max_value()); + T::OrphanedFunds::on_unbalanced(imbalance); - Self::crowdfund_kill(index); - >::remove(index); + >::remove(index); - Self::deposit_event(RawEvent::Dissolved(index)); + Self::deposit_event(RawEvent::Dissolved(index)); + }, + child::KillOutcome::SomeRemaining => { + Self::deposit_event(RawEvent::PartiallyDissolved(index)); + } + } } - fn on_finalize(n: T::BlockNumber) { + fn on_initialize(n: T::BlockNumber) -> frame_support::weights::Weight { if let Some(n) = >::is_ending(n) { let auction_index = >::auction_counter(); if n.is_zero() { @@ -513,17 +519,21 @@ decl_module! { sub: index, }); - // Care needs to be taken by the crowdfund creator that this function will succeed given - // the crowdfunding configuration. We do some checks ahead of time in crowdfund `create`. - let _ = >::handle_bid( + // Care needs to be taken by the crowdloan creator that this function will succeed given + // the crowdloaning configuration. We do some checks ahead of time in crowdloan `create`. + let result = >::handle_bid( bidder, auction_index, fund.first_slot, fund.last_slot, fund.raised, ); + + Self::deposit_event(RawEvent::HandleBidResult(index, result)); } } + + 0 } } } @@ -539,7 +549,7 @@ impl Module { pub fn id_from_index(index: FundIndex) -> child::ChildInfo { let mut buf = Vec::new(); - buf.extend_from_slice(b"crowdfund"); + buf.extend_from_slice(b"crowdloan"); buf.extend_from_slice(&index.to_le_bytes()[..]); child::ChildInfo::new_default(T::Hashing::hash(&buf[..]).as_ref()) } @@ -559,8 +569,8 @@ impl Module { who.using_encoded(|b| child::kill(&Self::id_from_index(index), b)); } - pub fn crowdfund_kill(index: FundIndex) { - child::kill_storage(&Self::id_from_index(index), None); + pub fn crowdloan_kill(index: FundIndex) -> child::KillOutcome { + child::kill_storage(&Self::id_from_index(index), Some(T::RemoveKeysLimit::get())) } } @@ -570,7 +580,7 @@ mod tests { use std::{collections::HashMap, cell::RefCell}; use frame_support::{ - impl_outer_origin, assert_ok, assert_noop, parameter_types, + impl_outer_origin, impl_outer_event, assert_ok, assert_noop, parameter_types, traits::{OnInitialize, OnFinalize}, }; use sp_core::H256; @@ -578,7 +588,7 @@ mod tests { // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are requried. use sp_runtime::{ - Permill, testing::Header, DispatchResult, + Permill, testing::Header, traits::{BlakeTwo256, IdentityLookup}, }; use crate::slots::Registrar; @@ -587,6 +597,24 @@ mod tests { pub enum Origin for Test {} } + mod runtime_common_slots { + pub use crate::slots::Event; + } + + mod runtime_common_crowdloan { + pub use crate::crowdloan::Event; + } + + impl_outer_event! { + pub enum Event for Test { + frame_system, + pallet_balances, + pallet_treasury, + runtime_common_slots, + runtime_common_crowdloan, + } + } + // For testing the module, we construct most of a mock runtime. This means // first constructing a configuration type (`Test`) which `impl`s each of the // configuration traits of modules we want to use. @@ -610,7 +638,7 @@ mod tests { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = (); + type Event = Event; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = (); @@ -625,7 +653,7 @@ mod tests { } impl pallet_balances::Config for Test { type Balance = u64; - type Event = (); + type Event = Event; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -644,7 +672,7 @@ mod tests { type Currency = pallet_balances::Module; type ApproveOrigin = frame_system::EnsureRoot; type RejectOrigin = frame_system::EnsureRoot; - type Event = (); + type Event = Event; type OnSlash = (); type ProposalBond = ProposalBond; type ProposalBondMinimum = ProposalBondMinimum; @@ -713,7 +741,7 @@ mod tests { pub const EndingPeriod: u64 = 3; } impl slots::Config for Test { - type Event = (); + type Event = Event; type Currency = Balances; type Parachains = TestParachains; type LeasePeriod = LeasePeriod; @@ -724,29 +752,31 @@ mod tests { pub const SubmissionDeposit: u64 = 1; pub const MinContribution: u64 = 10; pub const RetirementPeriod: u64 = 5; - pub const CrowdfundModuleId: ModuleId = ModuleId(*b"py/cfund"); + pub const CrowdloanModuleId: ModuleId = ModuleId(*b"py/cfund"); + pub const RemoveKeysLimit: u32 = 10; } impl Config for Test { - type Event = (); + type Event = Event; type SubmissionDeposit = SubmissionDeposit; type MinContribution = MinContribution; type RetirementPeriod = RetirementPeriod; type OrphanedFunds = Treasury; - type ModuleId = CrowdfundModuleId; + type ModuleId = CrowdloanModuleId; + type RemoveKeysLimit = RemoveKeysLimit; } type System = frame_system::Module; type Balances = pallet_balances::Module; type Slots = slots::Module; type Treasury = pallet_treasury::Module; - type Crowdfund = Module; + type Crowdloan = Module; type RandomnessCollectiveFlip = pallet_randomness_collective_flip::Module; use pallet_balances::Error as BalancesError; use slots::Error as SlotsError; // This function basically just builds a genesis storage key/value store according to // our desired mockup. - fn new_test_ext() -> sp_io::TestExternalities { + pub fn new_test_ext() -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); pallet_balances::GenesisConfig::{ balances: vec![(1, 1000), (2, 2000), (3, 3000), (4, 4000)], @@ -756,7 +786,7 @@ mod tests { fn run_to_block(n: u64) { while System::block_number() < n { - Crowdfund::on_finalize(System::block_number()); + Crowdloan::on_finalize(System::block_number()); Treasury::on_finalize(System::block_number()); Slots::on_finalize(System::block_number()); Balances::on_finalize(System::block_number()); @@ -766,7 +796,7 @@ mod tests { Balances::on_initialize(System::block_number()); Slots::on_initialize(System::block_number()); Treasury::on_initialize(System::block_number()); - Crowdfund::on_initialize(System::block_number()); + Crowdloan::on_initialize(System::block_number()); } } @@ -774,21 +804,21 @@ mod tests { fn basic_setup_works() { new_test_ext().execute_with(|| { assert_eq!(System::block_number(), 0); - assert_eq!(Crowdfund::fund_count(), 0); - assert_eq!(Crowdfund::funds(0), None); + assert_eq!(Crowdloan::fund_count(), 0); + assert_eq!(Crowdloan::funds(0), None); let empty: Vec = Vec::new(); - assert_eq!(Crowdfund::new_raise(), empty); - assert_eq!(Crowdfund::contribution_get(0, &1), 0); - assert_eq!(Crowdfund::endings_count(), 0); + assert_eq!(Crowdloan::new_raise(), empty); + assert_eq!(Crowdloan::contribution_get(0, &1), 0); + assert_eq!(Crowdloan::endings_count(), 0); }); } #[test] fn create_works() { new_test_ext().execute_with(|| { - // Now try to create a crowdfund campaign - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); - assert_eq!(Crowdfund::fund_count(), 1); + // Now try to create a crowdloan campaign + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_eq!(Crowdloan::fund_count(), 1); // This is what the initial `fund_info` should look like let fund_info = FundInfo { parachain: None, @@ -803,33 +833,33 @@ mod tests { last_slot: 4, deploy_data: None, }; - assert_eq!(Crowdfund::funds(0), Some(fund_info)); + assert_eq!(Crowdloan::funds(0), Some(fund_info)); // User has deposit removed from their free balance assert_eq!(Balances::free_balance(1), 999); - // Deposit is placed in crowdfund free balance - assert_eq!(Balances::free_balance(Crowdfund::fund_account_id(0)), 1); + // Deposit is placed in crowdloan free balance + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 1); // No new raise until first contribution let empty: Vec = Vec::new(); - assert_eq!(Crowdfund::new_raise(), empty); + assert_eq!(Crowdloan::new_raise(), empty); }); } #[test] fn create_handles_basic_errors() { new_test_ext().execute_with(|| { - // Cannot create a crowdfund with bad slots + // Cannot create a crowdloan with bad slots assert_noop!( - Crowdfund::create(Origin::signed(1), 1000, 4, 1, 9), + Crowdloan::create(Origin::signed(1), 1000, 4, 1, 9), Error::::LastSlotBeforeFirstSlot ); assert_noop!( - Crowdfund::create(Origin::signed(1), 1000, 1, 5, 9), + Crowdloan::create(Origin::signed(1), 1000, 1, 5, 9), Error::::LastSlotTooFarInFuture ); - // Cannot create a crowdfund without some deposit funds + // Cannot create a crowdloan without some deposit funds assert_noop!( - Crowdfund::create(Origin::signed(1337), 1000, 1, 3, 9), + Crowdloan::create(Origin::signed(1337), 1000, 1, 3, 9), BalancesError::::InsufficientBalance ); }); @@ -838,26 +868,26 @@ mod tests { #[test] fn contribute_works() { new_test_ext().execute_with(|| { - // Set up a crowdfund - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + // Set up a crowdloan + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); - assert_eq!(Balances::free_balance(Crowdfund::fund_account_id(0)), 1); + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 1); // No contributions yet - assert_eq!(Crowdfund::contribution_get(0, &1), 0); + assert_eq!(Crowdloan::contribution_get(0, &1), 0); - // User 1 contributes to their own crowdfund - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 49)); + // User 1 contributes to their own crowdloan + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 49)); // User 1 has spent some funds to do this, transfer fees **are** taken assert_eq!(Balances::free_balance(1), 950); // Contributions are stored in the trie - assert_eq!(Crowdfund::contribution_get(0, &1), 49); - // Contributions appear in free balance of crowdfund - assert_eq!(Balances::free_balance(Crowdfund::fund_account_id(0)), 50); - // Crowdfund is added to NewRaise - assert_eq!(Crowdfund::new_raise(), vec![0]); + assert_eq!(Crowdloan::contribution_get(0, &1), 49); + // Contributions appear in free balance of crowdloan + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 50); + // Crowdloan is added to NewRaise + assert_eq!(Crowdloan::new_raise(), vec![0]); - let fund = Crowdfund::funds(0).unwrap(); + let fund = Crowdloan::funds(0).unwrap(); // Last contribution time recorded assert_eq!(fund.last_contribution, LastContribution::PreEnding(0)); @@ -869,34 +899,34 @@ mod tests { fn contribute_handles_basic_errors() { new_test_ext().execute_with(|| { // Cannot contribute to non-existing fund - assert_noop!(Crowdfund::contribute(Origin::signed(1), 0, 49), Error::::InvalidFundIndex); + assert_noop!(Crowdloan::contribute(Origin::signed(1), 0, 49), Error::::InvalidFundIndex); // Cannot contribute below minimum contribution - assert_noop!(Crowdfund::contribute(Origin::signed(1), 0, 9), Error::::ContributionTooSmall); + assert_noop!(Crowdloan::contribute(Origin::signed(1), 0, 9), Error::::ContributionTooSmall); - // Set up a crowdfund - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 101)); + // Set up a crowdloan + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 101)); // Cannot contribute past the limit - assert_noop!(Crowdfund::contribute(Origin::signed(2), 0, 900), Error::::CapExceeded); + assert_noop!(Crowdloan::contribute(Origin::signed(2), 0, 900), Error::::CapExceeded); // Move past end date run_to_block(10); // Cannot contribute to ended fund - assert_noop!(Crowdfund::contribute(Origin::signed(1), 0, 49), Error::::ContributionPeriodOver); + assert_noop!(Crowdloan::contribute(Origin::signed(1), 0, 49), Error::::ContributionPeriodOver); }); } #[test] fn fix_deploy_data_works() { new_test_ext().execute_with(|| { - // Set up a crowdfund - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + // Set up a crowdloan + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); // Add deploy data - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -904,7 +934,7 @@ mod tests { vec![0].into() )); - let fund = Crowdfund::funds(0).unwrap(); + let fund = Crowdloan::funds(0).unwrap(); // Confirm deploy data is stored correctly assert_eq!( @@ -921,12 +951,12 @@ mod tests { #[test] fn fix_deploy_data_handles_basic_errors() { new_test_ext().execute_with(|| { - // Set up a crowdfund - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + // Set up a crowdloan + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); // Cannot set deploy data by non-owner - assert_noop!(Crowdfund::fix_deploy_data( + assert_noop!(Crowdloan::fix_deploy_data( Origin::signed(2), 0, ::Hash::default(), @@ -936,7 +966,7 @@ mod tests { ); // Cannot set deploy data to an invalid index - assert_noop!(Crowdfund::fix_deploy_data( + assert_noop!(Crowdloan::fix_deploy_data( Origin::signed(1), 1, ::Hash::default(), @@ -946,7 +976,7 @@ mod tests { ); // Cannot set deploy data after it already has been set - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -954,7 +984,7 @@ mod tests { vec![0].into(), )); - assert_noop!(Crowdfund::fix_deploy_data( + assert_noop!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -968,13 +998,13 @@ mod tests { #[test] fn onboard_works() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); // Add deploy data - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -982,19 +1012,19 @@ mod tests { vec![0].into(), )); - // Fund crowdfund - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 1000)); + // Fund crowdloan + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 1000)); run_to_block(10); // Endings count incremented - assert_eq!(Crowdfund::endings_count(), 1); + assert_eq!(Crowdloan::endings_count(), 1); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); - let fund = Crowdfund::funds(0).unwrap(); - // Crowdfund is now assigned a parachain id + let fund = Crowdloan::funds(0).unwrap(); + // Crowdloan is now assigned a parachain id assert_eq!(fund.parachain, Some(0.into())); // This parachain is managed by Slots assert_eq!(Slots::managed_ids(), vec![0.into()]); @@ -1004,23 +1034,23 @@ mod tests { #[test] fn onboard_handles_basic_errors() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); - // Fund crowdfund - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 1000)); + // Fund crowdloan + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 1000)); run_to_block(10); // Cannot onboard invalid fund index - assert_noop!(Crowdfund::onboard(Origin::signed(1), 1, 0.into()), Error::::InvalidFundIndex); - // Cannot onboard crowdfund without deploy data - assert_noop!(Crowdfund::onboard(Origin::signed(1), 0, 0.into()), Error::::UnsetDeployData); + assert_noop!(Crowdloan::onboard(Origin::signed(1), 1, 0.into()), Error::::InvalidFundIndex); + // Cannot onboard crowdloan without deploy data + assert_noop!(Crowdloan::onboard(Origin::signed(1), 0, 0.into()), Error::::UnsetDeployData); // Add deploy data - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -1029,26 +1059,26 @@ mod tests { )); // Cannot onboard fund with incorrect parachain id - assert_noop!(Crowdfund::onboard(Origin::signed(1), 0, 1.into()), SlotsError::::ParaNotOnboarding); + assert_noop!(Crowdloan::onboard(Origin::signed(1), 0, 1.into()), SlotsError::::ParaNotOnboarding); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); // Cannot onboard fund again - assert_noop!(Crowdfund::onboard(Origin::signed(1), 0, 0.into()), Error::::AlreadyOnboard); + assert_noop!(Crowdloan::onboard(Origin::signed(1), 0, 0.into()), Error::::AlreadyOnboard); }); } #[test] fn begin_retirement_works() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); // Add deploy data - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -1056,27 +1086,27 @@ mod tests { vec![0].into(), )); - // Fund crowdfund - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 1000)); + // Fund crowdloan + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 1000)); run_to_block(10); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); // Fund is assigned a parachain id - let fund = Crowdfund::funds(0).unwrap(); + let fund = Crowdloan::funds(0).unwrap(); assert_eq!(fund.parachain, Some(0.into())); - // Off-boarding is set to the crowdfund account - assert_eq!(Slots::offboarding(ParaId::from(0)), Crowdfund::fund_account_id(0)); + // Off-boarding is set to the crowdloan account + assert_eq!(Slots::offboarding(ParaId::from(0)), Crowdloan::fund_account_id(0)); run_to_block(50); - // Retire crowdfund to remove parachain id - assert_ok!(Crowdfund::begin_retirement(Origin::signed(1), 0)); + // Retire crowdloan to remove parachain id + assert_ok!(Crowdloan::begin_retirement(Origin::signed(1), 0)); // Fund should no longer have parachain id - let fund = Crowdfund::funds(0).unwrap(); + let fund = Crowdloan::funds(0).unwrap(); assert_eq!(fund.parachain, None); }); @@ -1085,13 +1115,13 @@ mod tests { #[test] fn begin_retirement_handles_basic_errors() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); assert_eq!(Balances::free_balance(1), 999); // Add deploy data - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -1099,56 +1129,56 @@ mod tests { vec![0].into(), )); - // Fund crowdfund - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 1000)); + // Fund crowdloan + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 1000)); run_to_block(10); // Cannot retire fund that is not onboarded - assert_noop!(Crowdfund::begin_retirement(Origin::signed(1), 0), Error::::NotParachain); + assert_noop!(Crowdloan::begin_retirement(Origin::signed(1), 0), Error::::NotParachain); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); // Fund is assigned a parachain id - let fund = Crowdfund::funds(0).unwrap(); + let fund = Crowdloan::funds(0).unwrap(); assert_eq!(fund.parachain, Some(0.into())); // Cannot retire fund whose deposit has not been returned - assert_noop!(Crowdfund::begin_retirement(Origin::signed(1), 0), Error::::ParaHasDeposit); + assert_noop!(Crowdloan::begin_retirement(Origin::signed(1), 0), Error::::ParaHasDeposit); run_to_block(50); // Cannot retire invalid fund index - assert_noop!(Crowdfund::begin_retirement(Origin::signed(1), 1), Error::::InvalidFundIndex); + assert_noop!(Crowdloan::begin_retirement(Origin::signed(1), 1), Error::::InvalidFundIndex); // Cannot retire twice - assert_ok!(Crowdfund::begin_retirement(Origin::signed(1), 0)); - assert_noop!(Crowdfund::begin_retirement(Origin::signed(1), 0), Error::::NotParachain); + assert_ok!(Crowdloan::begin_retirement(Origin::signed(1), 0)); + assert_noop!(Crowdloan::begin_retirement(Origin::signed(1), 0), Error::::NotParachain); }); } #[test] fn withdraw_works() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); // Transfer fee is taken here - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 100)); - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 200)); - assert_ok!(Crowdfund::contribute(Origin::signed(3), 0, 300)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 100)); + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 200)); + assert_ok!(Crowdloan::contribute(Origin::signed(3), 0, 300)); // Skip all the way to the end run_to_block(50); - // User can withdraw their full balance without fees - assert_ok!(Crowdfund::withdraw(Origin::signed(1), 0)); + // Anyone can trigger withdraw of a user's balance without fees + assert_ok!(Crowdloan::withdraw(Origin::signed(1337), 1, 0)); assert_eq!(Balances::free_balance(1), 999); - assert_ok!(Crowdfund::withdraw(Origin::signed(2), 0)); + assert_ok!(Crowdloan::withdraw(Origin::signed(1337), 2, 0)); assert_eq!(Balances::free_balance(2), 2000); - assert_ok!(Crowdfund::withdraw(Origin::signed(3), 0)); + assert_ok!(Crowdloan::withdraw(Origin::signed(1337), 3, 0)); assert_eq!(Balances::free_balance(3), 3000); }); } @@ -1156,37 +1186,37 @@ mod tests { #[test] fn withdraw_handles_basic_errors() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); // Transfer fee is taken here - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 49)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 49)); assert_eq!(Balances::free_balance(1), 950); run_to_block(5); // Cannot withdraw before fund ends - assert_noop!(Crowdfund::withdraw(Origin::signed(1), 0), Error::::FundNotEnded); + assert_noop!(Crowdloan::withdraw(Origin::signed(1337), 1, 0), Error::::FundNotEnded); run_to_block(10); // Cannot withdraw if they did not contribute - assert_noop!(Crowdfund::withdraw(Origin::signed(2), 0), Error::::NoContributions); + assert_noop!(Crowdloan::withdraw(Origin::signed(1337), 2, 0), Error::::NoContributions); // Cannot withdraw from a non-existent fund - assert_noop!(Crowdfund::withdraw(Origin::signed(1), 1), Error::::InvalidFundIndex); + assert_noop!(Crowdloan::withdraw(Origin::signed(1337), 2, 1), Error::::InvalidFundIndex); }); } #[test] fn dissolve_works() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); // Transfer fee is taken here - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 100)); - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 200)); - assert_ok!(Crowdfund::contribute(Origin::signed(3), 0, 300)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 100)); + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 200)); + assert_ok!(Crowdloan::contribute(Origin::signed(3), 0, 300)); // Skip all the way to the end run_to_block(50); @@ -1194,75 +1224,140 @@ mod tests { // Check initiator's balance. assert_eq!(Balances::free_balance(1), 899); // Check current funds (contributions + deposit) - assert_eq!(Balances::free_balance(Crowdfund::fund_account_id(0)), 601); + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 601); - // Dissolve the crowdfund - assert_ok!(Crowdfund::dissolve(Origin::signed(1), 0)); + // Dissolve the crowdloan + assert_ok!(Crowdloan::dissolve(Origin::signed(1), 0)); // Fund account is emptied - assert_eq!(Balances::free_balance(Crowdfund::fund_account_id(0)), 0); + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 0); // Deposit is returned assert_eq!(Balances::free_balance(1), 900); // Treasury account is filled assert_eq!(Balances::free_balance(Treasury::account_id()), 600); // Storage trie is removed - assert_eq!(Crowdfund::contribution_get(0,&0), 0); + assert_eq!(Crowdloan::contribution_get(0,&0), 0); // Fund storage is removed - assert_eq!(Crowdfund::funds(0), None); + assert_eq!(Crowdloan::funds(0), None); + + }); + } + + #[test] + fn partial_dissolve_works() { + let mut ext = new_test_ext(); + ext.execute_with(|| { + // Set up a crowdloan + assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); + assert_ok!(Crowdloan::create(Origin::signed(1), 100_000, 1, 4, 9)); + // Add lots of contributors, beyond what we can delete in one go. + for i in 0 .. 30 { + Balances::make_free_balance_be(&i, 300); + assert_ok!(Crowdloan::contribute(Origin::signed(i), 0, 100)); + assert_eq!(Crowdloan::contribution_get(0, &i), 100); + } + + // Skip all the way to the end + run_to_block(50); + + // Check current funds (contributions + deposit) + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 100 * 30 + 1); + }); + + ext.commit_all().unwrap(); + ext.execute_with(|| { + // Partially dissolve the crowdloan + assert_ok!(Crowdloan::dissolve(Origin::signed(1), 0)); + for i in 0 .. 10 { + assert_eq!(Crowdloan::contribution_get(0, &i), 0); + } + for i in 10 .. 30 { + assert_eq!(Crowdloan::contribution_get(0, &i), 100); + } + }); + + ext.commit_all().unwrap(); + ext.execute_with(|| { + // Partially dissolve the crowdloan, again + assert_ok!(Crowdloan::dissolve(Origin::signed(1), 0)); + for i in 0 .. 20 { + assert_eq!(Crowdloan::contribution_get(0, &i), 0); + } + for i in 20 .. 30 { + assert_eq!(Crowdloan::contribution_get(0, &i), 100); + } + }); + + ext.commit_all().unwrap(); + ext.execute_with(|| { + // Fully dissolve the crowdloan + assert_ok!(Crowdloan::dissolve(Origin::signed(1), 0)); + for i in 0 .. 30 { + assert_eq!(Crowdloan::contribution_get(0, &i), 0); + } + + // Fund account is emptied + assert_eq!(Balances::free_balance(Crowdloan::fund_account_id(0)), 0); + // Deposit is returned + assert_eq!(Balances::free_balance(1), 201); + // Treasury account is filled + assert_eq!(Balances::free_balance(Treasury::account_id()), 100 * 30); + // Fund storage is removed + assert_eq!(Crowdloan::funds(0), None); }); } #[test] fn dissolve_handles_basic_errors() { new_test_ext().execute_with(|| { - // Set up a crowdfund + // Set up a crowdloan assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); // Transfer fee is taken here - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 100)); - assert_ok!(Crowdfund::contribute(Origin::signed(2), 0, 200)); - assert_ok!(Crowdfund::contribute(Origin::signed(3), 0, 300)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 100)); + assert_ok!(Crowdloan::contribute(Origin::signed(2), 0, 200)); + assert_ok!(Crowdloan::contribute(Origin::signed(3), 0, 300)); // Cannot dissolve an invalid fund index - assert_noop!(Crowdfund::dissolve(Origin::signed(1), 1), Error::::InvalidFundIndex); + assert_noop!(Crowdloan::dissolve(Origin::signed(1), 1), Error::::InvalidFundIndex); // Cannot dissolve a fund in progress - assert_noop!(Crowdfund::dissolve(Origin::signed(1), 0), Error::::InRetirementPeriod); + assert_noop!(Crowdloan::dissolve(Origin::signed(1), 0), Error::::InRetirementPeriod); run_to_block(10); // Onboard fund - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), 0, vec![0].into(), )); - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); // Cannot dissolve an active fund - assert_noop!(Crowdfund::dissolve(Origin::signed(1), 0), Error::::HasActiveParachain); + assert_noop!(Crowdloan::dissolve(Origin::signed(1), 0), Error::::HasActiveParachain); }); } #[test] fn fund_before_auction_works() { new_test_ext().execute_with(|| { - // Create a crowdfund before an auction is created - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 9)); + // Create a crowdloan before an auction is created + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 9)); // Users can already contribute - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 49)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 49)); // Fund added to NewRaise - assert_eq!(Crowdfund::new_raise(), vec![0]); + assert_eq!(Crowdloan::new_raise(), vec![0]); // Some blocks later... run_to_block(2); // Create an auction assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); // Add deploy data - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), @@ -1273,13 +1368,13 @@ mod tests { run_to_block(12); // Endings count incremented - assert_eq!(Crowdfund::endings_count(), 1); + assert_eq!(Crowdloan::endings_count(), 1); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); - let fund = Crowdfund::funds(0).unwrap(); - // Crowdfund is now assigned a parachain id + let fund = Crowdloan::funds(0).unwrap(); + // Crowdloan is now assigned a parachain id assert_eq!(fund.parachain, Some(0.into())); // This parachain is managed by Slots assert_eq!(Slots::managed_ids(), vec![0.into()]); @@ -1291,24 +1386,24 @@ mod tests { new_test_ext().execute_with(|| { // Create an auction assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); - // Create two competing crowdfunds, with end dates across multiple auctions - // Each crowdfund is competing for the same slots, so only one can win - assert_ok!(Crowdfund::create(Origin::signed(1), 1000, 1, 4, 30)); - assert_ok!(Crowdfund::create(Origin::signed(2), 1000, 1, 4, 30)); + // Create two competing crowdloans, with end dates across multiple auctions + // Each crowdloan is competing for the same slots, so only one can win + assert_ok!(Crowdloan::create(Origin::signed(1), 1000, 1, 4, 30)); + assert_ok!(Crowdloan::create(Origin::signed(2), 1000, 1, 4, 30)); // Contribute to all, but more money to 0, less to 1 - assert_ok!(Crowdfund::contribute(Origin::signed(1), 0, 300)); - assert_ok!(Crowdfund::contribute(Origin::signed(1), 1, 200)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 0, 300)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 1, 200)); // Add deploy data to all - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(1), 0, ::Hash::default(), 0, vec![0].into(), )); - assert_ok!(Crowdfund::fix_deploy_data( + assert_ok!(Crowdloan::fix_deploy_data( Origin::signed(2), 1, ::Hash::default(), @@ -1318,11 +1413,11 @@ mod tests { // End the current auction, fund 0 wins! run_to_block(10); - assert_eq!(Crowdfund::endings_count(), 1); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(1), 0, 0.into())); - let fund = Crowdfund::funds(0).unwrap(); - // Crowdfund is now assigned a parachain id + assert_eq!(Crowdloan::endings_count(), 1); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(1), 0, 0.into())); + let fund = Crowdloan::funds(0).unwrap(); + // Crowdloan is now assigned a parachain id assert_eq!(fund.parachain, Some(0.into())); // This parachain is managed by Slots assert_eq!(Slots::managed_ids(), vec![0.into()]); @@ -1330,18 +1425,270 @@ mod tests { // Create a second auction assert_ok!(Slots::new_auction(Origin::root(), 5, 1)); // Contribute to existing funds add to NewRaise - assert_ok!(Crowdfund::contribute(Origin::signed(1), 1, 10)); + assert_ok!(Crowdloan::contribute(Origin::signed(1), 1, 10)); // End the current auction, fund 1 wins! run_to_block(20); - assert_eq!(Crowdfund::endings_count(), 2); - // Onboard crowdfund - assert_ok!(Crowdfund::onboard(Origin::signed(2), 1, 1.into())); - let fund = Crowdfund::funds(1).unwrap(); - // Crowdfund is now assigned a parachain id + assert_eq!(Crowdloan::endings_count(), 2); + // Onboard crowdloan + assert_ok!(Crowdloan::onboard(Origin::signed(2), 1, 1.into())); + let fund = Crowdloan::funds(1).unwrap(); + // Crowdloan is now assigned a parachain id assert_eq!(fund.parachain, Some(1.into())); // This parachain is managed by Slots assert_eq!(Slots::managed_ids(), vec![0.into(), 1.into()]); }); } } + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking { + use super::{*, Module as Crowdloan}; + use crate::slots::Module as Slots; + use frame_system::RawOrigin; + use frame_support::{ + assert_ok, + traits::OnInitialize, + }; + use sp_runtime::traits::Bounded; + use sp_std::prelude::*; + + use frame_benchmarking::{benchmarks, whitelisted_caller, account, whitelist_account}; + + // TODO: replace with T::Parachains::MAX_CODE_SIZE + const MAX_CODE_SIZE: u32 = 10; + const MAX_HEAD_DATA_SIZE: u32 = 10; + + fn assert_last_event(generic_event: ::Event) { + let events = frame_system::Module::::events(); + let system_event: ::Event = generic_event.into(); + // compare to the last event record + let frame_system::EventRecord { event, .. } = &events[events.len() - 1]; + assert_eq!(event, &system_event); + } + + fn create_fund(end: T::BlockNumber) -> FundIndex { + let cap = BalanceOf::::max_value(); + let lease_period_index = end / T::LeasePeriod::get(); + let first_slot = lease_period_index; + let last_slot = lease_period_index + 3u32.into(); + + let caller = account("fund_creator", 0, 0); + T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); + + assert_ok!(Crowdloan::::create(RawOrigin::Signed(caller).into(), cap, first_slot, last_slot, end)); + FundCount::get() - 1 + } + + fn contribute_fund(who: &T::AccountId, index: FundIndex) { + T::Currency::make_free_balance_be(&who, BalanceOf::::max_value()); + let value = T::MinContribution::get(); + assert_ok!(Crowdloan::::contribute(RawOrigin::Signed(who.clone()).into(), index, value)); + } + + fn worst_validation_code() -> Vec { + // TODO: replace with T::Parachains::MAX_CODE_SIZE + let mut validation_code = vec![0u8; MAX_CODE_SIZE as usize]; + // Replace first bytes of code with "WASM_MAGIC" to pass validation test. + let _ = validation_code.splice( + ..crate::WASM_MAGIC.len(), + crate::WASM_MAGIC.iter().cloned(), + ).collect::>(); + validation_code + } + + fn worst_deploy_data() -> DeployData { + let validation_code = worst_validation_code::(); + let code = primitives::v1::ValidationCode(validation_code); + // TODO: replace with T::Parachains::MAX_HEAD_DATA_SIZE + let head_data = HeadData(vec![0u8; MAX_HEAD_DATA_SIZE as usize]); + + DeployData { + code_hash: T::Hashing::hash(&code.0), + // TODO: replace with T::Parachains::MAX_CODE_SIZE + code_size: MAX_CODE_SIZE, + initial_head_data: head_data, + } + } + + fn setup_onboarding( + fund_index: FundIndex, + para_id: ParaId, + end_block: T::BlockNumber, + ) -> DispatchResult { + // Matches fund creator in `create_fund` + let fund_creator = account("fund_creator", 0, 0); + let DeployData { code_hash, code_size, initial_head_data } = worst_deploy_data::(); + Crowdloan::::fix_deploy_data( + RawOrigin::Signed(fund_creator).into(), + fund_index, + code_hash, + code_size, + initial_head_data + )?; + + let lease_period_index = end_block / T::LeasePeriod::get(); + Slots::::new_auction(RawOrigin::Root.into(), end_block, lease_period_index)?; + let contributor: T::AccountId = account("contributor", 0, 0); + contribute_fund::(&contributor, fund_index); + + // TODO: Probably should use on_initialize + //Slots::::on_initialize(end_block + T::EndingPeriod::get()); + let onboarding_data = (lease_period_index, crate::slots::IncomingParachain::Unset( + crate::slots::NewBidder { + who: Crowdloan::::fund_account_id(fund_index), + sub: Default::default(), + } + )); + crate::slots::Onboarding::::insert(para_id, onboarding_data); + Ok(()) + } + + benchmarks! { + create { + let cap = BalanceOf::::max_value(); + let first_slot = 0u32.into(); + let last_slot = 3u32.into(); + let end = T::BlockNumber::max_value(); + + let caller: T::AccountId = whitelisted_caller(); + + T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); + }: _(RawOrigin::Signed(caller), cap, first_slot, last_slot, end) + verify { + assert_last_event::(RawEvent::Created(FundCount::get() - 1).into()) + } + + // Contribute has two arms: PreEnding and Ending, but both are equal complexity. + contribute { + let fund_index = create_fund::(100u32.into()); + let caller: T::AccountId = whitelisted_caller(); + let contribution = T::MinContribution::get(); + T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); + }: _(RawOrigin::Signed(caller.clone()), fund_index, contribution) + verify { + // NewRaise is appended to, so we don't need to fill it up for worst case scenario. + assert!(!NewRaise::get().is_empty()); + assert_last_event::(RawEvent::Contributed(caller, fund_index, contribution).into()); + } + + fix_deploy_data { + let fund_index = create_fund::(100u32.into()); + // Matches fund creator in `create_fund` + let caller = account("fund_creator", 0, 0); + + let DeployData { code_hash, code_size, initial_head_data } = worst_deploy_data::(); + + whitelist_account!(caller); + }: _(RawOrigin::Signed(caller), fund_index, code_hash, code_size, initial_head_data) + verify { + assert_last_event::(RawEvent::DeployDataFixed(fund_index).into()); + } + + onboard { + let end_block: T::BlockNumber = 100u32.into(); + let fund_index = create_fund::(end_block); + let para_id = Default::default(); + + setup_onboarding::(fund_index, para_id, end_block)?; + + let caller = whitelisted_caller(); + }: _(RawOrigin::Signed(caller), fund_index, para_id) + verify { + assert_last_event::(RawEvent::Onboarded(fund_index, para_id).into()); + } + + begin_retirement { + let end_block: T::BlockNumber = 100u32.into(); + let fund_index = create_fund::(end_block); + let para_id = Default::default(); + + setup_onboarding::(fund_index, para_id, end_block)?; + + let caller: T::AccountId = whitelisted_caller(); + Crowdloan::::onboard(RawOrigin::Signed(caller.clone()).into(), fund_index, para_id)?; + + // Remove deposits to look like it is off-boarded + crate::slots::Deposits::::remove(para_id); + }: _(RawOrigin::Signed(caller), fund_index) + verify { + assert_last_event::(RawEvent::Retiring(fund_index).into()); + } + + withdraw { + let fund_index = create_fund::(100u32.into()); + let caller: T::AccountId = whitelisted_caller(); + let contributor = account("contributor", 0, 0); + contribute_fund::(&contributor, fund_index); + frame_system::Module::::set_block_number(200u32.into()); + }: _(RawOrigin::Signed(caller), contributor.clone(), fund_index) + verify { + assert_last_event::(RawEvent::Withdrew(contributor, fund_index, T::MinContribution::get()).into()); + } + + // Worst case: Dissolve removes `RemoveKeysLimit` keys, and then finishes up the dissolution of the fund. + dissolve { + let fund_index = create_fund::(100u32.into()); + + // Dissolve will remove at most `RemoveKeysLimit` at once. + for i in 0 .. T::RemoveKeysLimit::get() { + contribute_fund::(&account("contributor", i, 0), fund_index); + } + + let caller: T::AccountId = whitelisted_caller(); + frame_system::Module::::set_block_number(T::RetirementPeriod::get().saturating_add(200u32.into())); + }: _(RawOrigin::Signed(caller.clone()), fund_index) + verify { + assert_last_event::(RawEvent::Dissolved(fund_index).into()); + } + + // Worst case scenario: N funds are all in the `NewRaise` list, we are + // in the beginning of the ending period, and each fund outbids the next + // over the same slot. + on_initialize { + // We test the complexity over different number of new raise + let n in 2 .. 100; + let end_block: T::BlockNumber = 100u32.into(); + + for i in 0 .. n { + let fund_index = create_fund::(end_block); + let contributor: T::AccountId = account("contributor", i, 0); + let contribution = T::MinContribution::get() * (i + 1).into(); + T::Currency::make_free_balance_be(&contributor, BalanceOf::::max_value()); + Crowdloan::::contribute(RawOrigin::Signed(contributor).into(), fund_index, contribution)?; + } + + let lease_period_index = end_block / T::LeasePeriod::get(); + Slots::::new_auction(RawOrigin::Root.into(), end_block, lease_period_index)?; + + assert_eq!(>::is_ending(end_block), Some(0u32.into())); + assert_eq!(NewRaise::get().len(), n as usize); + let old_endings_count = EndingsCount::get(); + }: { + Crowdloan::::on_initialize(end_block); + } verify { + assert_eq!(EndingsCount::get(), old_endings_count + 1); + assert_last_event::(RawEvent::HandleBidResult((n - 1).into(), Ok(())).into()); + } + } + + #[cfg(test)] + mod tests { + use super::*; + use crate::crowdloan::tests::{new_test_ext, Test}; + + #[test] + fn test_benchmarks() { + new_test_ext().execute_with(|| { + assert_ok!(test_benchmark_create::()); + assert_ok!(test_benchmark_contribute::()); + assert_ok!(test_benchmark_fix_deploy_data::()); + assert_ok!(test_benchmark_onboard::()); + assert_ok!(test_benchmark_begin_retirement::()); + assert_ok!(test_benchmark_withdraw::()); + assert_ok!(test_benchmark_dissolve::()); + assert_ok!(test_benchmark_on_initialize::()); + }); + } + } +} diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index c85e5224e0..45f1a8856b 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -21,7 +21,7 @@ pub mod claims; pub mod slot_range; pub mod slots; -pub mod crowdfund; +pub mod crowdloan; pub mod purchase; pub mod impls; pub mod paras_sudo_wrapper; diff --git a/runtime/common/src/slots.rs b/runtime/common/src/slots.rs index 66d4d9640f..9813d48581 100644 --- a/runtime/common/src/slots.rs +++ b/runtime/common/src/slots.rs @@ -579,9 +579,9 @@ impl Module { /// ending. An immediately subsequent call with the same argument will always return `None`. fn check_auction_end(now: T::BlockNumber) -> Option<(WinningData, LeasePeriodOf)> { if let Some((lease_period_index, early_end)) = >::get() { - if early_end + T::EndingPeriod::get() == now { + let ending_period = T::EndingPeriod::get(); + if early_end + ending_period == now { // Just ended! - let ending_period = T::EndingPeriod::get(); let offset = T::BlockNumber::decode(&mut T::Randomness::random_seed().as_ref()) .expect("secure hashes always bigger than block numbers; qed") % ending_period; let res = >::get(offset).unwrap_or_default(); -- GitLab From 2709aebc9e7f735868513fc286f93139400d52ab Mon Sep 17 00:00:00 2001 From: Guillaume Thiolliere Date: Mon, 11 Jan 2021 23:00:07 +0100 Subject: [PATCH 185/203] bump codec minor version (#2247) --- Cargo.lock | 4 ++-- core-primitives/Cargo.toml | 2 +- erasure-coding/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/candidate-validation/Cargo.toml | 2 +- node/network/availability-distribution/Cargo.toml | 2 +- node/network/bitfield-distribution/Cargo.toml | 2 +- node/network/bridge/Cargo.toml | 2 +- node/network/protocol/Cargo.toml | 2 +- node/primitives/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- node/test/client/Cargo.toml | 2 +- parachain/Cargo.toml | 2 +- parachain/test-parachains/Cargo.toml | 2 +- parachain/test-parachains/adder/Cargo.toml | 2 +- parachain/test-parachains/adder/collator/Cargo.toml | 2 +- primitives/Cargo.toml | 2 +- rpc/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- statement-table/Cargo.toml | 2 +- validation/Cargo.toml | 2 +- xcm/Cargo.toml | 2 +- xcm/xcm-builder/Cargo.toml | 2 +- xcm/xcm-executor/Cargo.toml | 2 +- 32 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2ad2e9c915..fe66146052 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4498,9 +4498,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "1.3.5" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c740e5fbcb6847058b40ac7e5574766c6388f585e184d769910fe0d3a2ca861" +checksum = "79602888a81ace83e3d1d4b2873286c1f5f906c84db667594e8db8da3506c383" dependencies = [ "arrayvec 0.5.2", "bitvec", diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index 6c45bad3c2..1f4e599f8e 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -parity-scale-codec = { version = "1.3.5", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = [ "derive" ] } [features] default = [ "std" ] diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index 311ad873ed..e2ca0e7317 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] primitives = { package = "polkadot-primitives", path = "../primitives" } reed_solomon = { package = "reed-solomon-erasure", version = "4.0.2" } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.23" diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 3f34a1ee0f..172e081c71 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -14,7 +14,7 @@ tracing = "0.1.22" tracing-futures = "0.2.4" bitvec = "0.17.4" -parity-scale-codec = { version = "1.3.5", features = ["derive"] } +parity-scale-codec = { version = "1.3.6", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 456a8d7f96..7ffc1d7f03 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -10,7 +10,7 @@ tracing = "0.1.22" tracing-futures = "0.2.4" sp-core = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["bit-vec", "derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-parachain = { path = "../../../parachain" } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index 41d5aacefc..5827c8eb75 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" -parity-scale-codec = { version = "1.3.5", features = ["std"] } +parity-scale-codec = { version = "1.3.6", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index 0333926f9d..4337e86352 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 132fdc4b16..2d3d214f02 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -10,7 +10,7 @@ futures = "0.3.8" tracing = "0.1.22" tracing-futures = "0.2.4" polkadot-primitives = { path = "../../../primitives" } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index 5829ccdf82..148cc14efd 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -9,5 +9,5 @@ description = "Primitives types for the Node-side" polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-jaeger = { path = "../../jaeger" } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index 888b13f0d3..9ff2252782 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -9,7 +9,7 @@ description = "Primitives types for the Node-side" futures = "0.3.8" polkadot-primitives = { path = "../../primitives" } polkadot-statement-table = { path = "../../statement-table" } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index 3090565d3d..f5e4a1b08c 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -11,7 +11,7 @@ futures = "0.3.8" futures-timer = "3.0.2" tracing = "0.1.22" tracing-futures = "0.2.4" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } parking_lot = "0.11.1" pin-project = "1.0.4" polkadot-node-primitives = { path = "../primitives" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 3c2a3f5643..2c23600066 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -9,7 +9,7 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.42" futures = "0.3.8" futures-timer = "3.0.2" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } parking_lot = { version = "0.11.1", optional = true } pin-project = "1.0.4" streamunordered = "0.5.1" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 21847ecced..fd70bd9dfd 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -15,7 +15,7 @@ mick-jaeger = "0.1.2" lazy_static = "1.4" tracing = "0.1.22" tracing-futures = "0.2.4" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } parking_lot = "0.11.1" pin-project = "1.0.4" polkadot-node-primitives = { path = "../primitives" } diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index 5d6c45b6c7..f412e48756 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } # Polkadot dependencies polkadot-test-runtime = { path = "../../../runtime/test-runtime" } diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index 837284e945..683828ce03 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" # note: special care is taken to avoid inclusion of `sp-io` externals when compiling # this crate for WASM. This is critical to avoid forcing all parachain WASM into implementing # various unnecessary Substrate-specific endpoints. -parity-scale-codec = { version = "1.3.5", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = [ "derive" ] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/parachain/test-parachains/Cargo.toml b/parachain/test-parachains/Cargo.toml index d8cc77b178..a3d05daa10 100644 --- a/parachain/test-parachains/Cargo.toml +++ b/parachain/test-parachains/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] tiny-keccak = "2.0.2" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } parachain = { package = "polkadot-parachain", path = ".." } adder = { package = "test-parachain-adder", path = "adder" } diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index b2ca852529..780305b2c9 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } tiny-keccak = { version = "2.0.2", features = ["keccak"] } dlmalloc = { version = "0.2.1", features = [ "global" ] } diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 8fdefbffb7..1685a28045 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -10,7 +10,7 @@ name = "adder-collator" path = "src/main.rs" [dependencies] -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } futures = "0.3.8" futures-timer = "3.0.2" log = "0.4.11" diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 3061bb982c..21db9526b8 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] serde = { version = "1.0.118", optional = true, features = ["derive"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["bit-vec", "derive"] } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index bfae25ff34..5f31b3871c 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -26,5 +26,5 @@ sc-sync-state-rpc = { git = "https://github.com/paritytech/substrate", branch = txpool-api = { package = "sp-transaction-pool", git = "https://github.com/paritytech/substrate", branch = "master" } frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "master" } pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "1.3.5", default-features = false } +parity-scale-codec = { version = "1.3.6", default-features = false } sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index bb2a1270ce..0302585205 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 3e66e7fe02..1f826c25a5 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index a75413a9bb..a650ddc712 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } log = "0.4.11" rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", features = [ "derive" ], optional = true } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 00f9cb019f..b86492a2a6 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index cde9101492..b5260bb626 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" build = "build.rs" [dependencies] -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.6.1" diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 1ee7c0718d..ab6b56cfaf 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 8db466b03d..f77bf8525a 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } log = { version = "0.4.11", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index 235f2c905a..6faf13d10b 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -5,6 +5,6 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } primitives = { package = "polkadot-primitives", path = "../primitives" } diff --git a/validation/Cargo.toml b/validation/Cargo.toml index 7800d39d76..dcc2dfe77f 100644 --- a/validation/Cargo.toml +++ b/validation/Cargo.toml @@ -15,7 +15,7 @@ consensus = { package = "sp-consensus", git = "https://github.com/paritytech/sub runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", branch = "master" } futures = "0.3.8" log = "0.4.11" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } grandpa = { package = "sc-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "master" } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master" } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index 27151453a7..6cabe8c159 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -6,7 +6,7 @@ description = "The basic XCM datastructures." edition = "2018" [dependencies] -parity-scale-codec = { version = "1.3.5", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = [ "derive" ] } [features] default = ["std"] diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index ec9fa17ceb..d7dec5d8c2 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -6,7 +6,7 @@ description = "Tools & types for building with XCM and its executor." version = "0.8.22" [dependencies] -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } xcm-executor = { path = "../xcm-executor", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index a3637bb008..33be8c0554 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -7,7 +7,7 @@ version = "0.8.22" [dependencies] impl-trait-for-tuples = "0.2.0" -parity-scale-codec = { version = "1.3.5", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -- GitLab From 8144ded6b294177b77538e03d97eefe44f267022 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Jan 2021 09:28:19 +0100 Subject: [PATCH 186/203] Bump tempfile from 3.1.0 to 3.2.0 (#2251) Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/Stebalien/tempfile/releases) - [Changelog](https://github.com/Stebalien/tempfile/blob/master/NEWS) - [Commits](https://github.com/Stebalien/tempfile/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 29 +++++++++++++++++++---------- Cargo.toml | 2 +- node/test/service/Cargo.toml | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe66146052..dd97497a90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4654,7 +4654,7 @@ dependencies = [ "cfg-if 0.1.10", "cloudabi 0.0.3", "libc", - "redox_syscall", + "redox_syscall 0.1.56", "rustc_version", "smallvec 0.6.13", "winapi 0.3.9", @@ -4669,7 +4669,7 @@ dependencies = [ "cfg-if 0.1.10", "cloudabi 0.0.3", "libc", - "redox_syscall", + "redox_syscall 0.1.56", "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4684,7 +4684,7 @@ dependencies = [ "cloudabi 0.1.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.1.56", "smallvec 1.6.1", "winapi 0.3.9", ] @@ -6372,6 +6372,15 @@ version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +[[package]] +name = "redox_syscall" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.3.4" @@ -6379,7 +6388,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" dependencies = [ "getrandom 0.1.14", - "redox_syscall", + "redox_syscall 0.1.56", "rust-argon2", ] @@ -8043,7 +8052,7 @@ checksum = "2c29947abdee2a218277abeca306f25789c938e500ea5a9d4b12a5a504466902" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.1.56", "winapi 0.3.9", ] @@ -9004,14 +9013,14 @@ checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d" [[package]] name = "tempfile" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "rand 0.7.3", - "redox_syscall", + "rand 0.8.1", + "redox_syscall 0.2.4", "remove_dir_all", "winapi 0.3.9", ] diff --git a/Cargo.toml b/Cargo.toml index a3d026e729..972a07ba58 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ parity-util-mem = { version = "*", default-features = false, features = ["jemall [dev-dependencies] assert_cmd = "1.0.2" nix = "0.19.1" -tempfile = "3.1.0" +tempfile = "3.2.0" [workspace] members = [ diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index e2cad28022..db4d1f6af7 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -11,7 +11,7 @@ hex = "0.4.2" tracing = "0.1.22" tracing-futures = "0.2.4" rand = "0.8.1" -tempfile = "3.1.0" +tempfile = "3.2.0" # Polkadot dependencies polkadot-overseer = { path = "../../overseer" } -- GitLab From 831f65383efd4d0ec0eaa3fe0aa1639bf2496751 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Jan 2021 10:52:02 +0100 Subject: [PATCH 187/203] Bump log from 0.4.11 to 0.4.13 (#2249) Bumps [log](https://github.com/rust-lang/log) from 0.4.11 to 0.4.13. - [Release notes](https://github.com/rust-lang/log/releases) - [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/log/compare/0.4.11...0.4.13) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- cli/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/jaeger/Cargo.toml | 2 +- node/network/bitfield-distribution/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/pov-distribution/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- parachain/test-parachains/adder/collator/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- validation/Cargo.toml | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dd97497a90..e0a9aa1ec0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3332,9 +3332,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2" dependencies = [ "cfg-if 0.1.10", ] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 2984e9dadd..78b45403d2 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -14,7 +14,7 @@ wasm-opt = false crate-type = ["cdylib", "rlib"] [dependencies] -log = "0.4.11" +log = "0.4.13" thiserror = "1.0.23" structopt = { version = "0.3.21", optional = true } wasm-bindgen = { version = "0.2.69", optional = true } diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 172e081c71..55616fa8c8 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -24,7 +24,7 @@ polkadot-primitives = { path = "../../../primitives" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } [dev-dependencies] -log = "0.4.11" +log = "0.4.13" env_logger = "0.8.2" assert_matches = "1.4.0" kvdb-memorydb = "0.8.0" diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml index e106888a14..86b1db3eda 100644 --- a/node/jaeger/Cargo.toml +++ b/node/jaeger/Cargo.toml @@ -14,4 +14,4 @@ polkadot-primitives = { path = "../../primitives" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.23" -log = "0.4.11" +log = "0.4.13" diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index 4337e86352..a515dbcb97 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -21,6 +21,6 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } maplit = "1.0.2" -log = "0.4.11" +log = "0.4.13" env_logger = "0.8.2" assert_matches = "1.4.0" diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 618d77cba7..2a61ef00ae 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -17,7 +17,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } [dev-dependencies] -log = "0.4.11" +log = "0.4.13" env_logger = "0.8.2" assert_matches = "1.4.0" futures-timer = "3.0.2" diff --git a/node/network/pov-distribution/Cargo.toml b/node/network/pov-distribution/Cargo.toml index a78eb21beb..af9f6d29ae 100644 --- a/node/network/pov-distribution/Cargo.toml +++ b/node/network/pov-distribution/Cargo.toml @@ -18,7 +18,7 @@ polkadot-node-network-protocol = { path = "../../network/protocol" } [dev-dependencies] assert_matches = "1.4.0" env_logger = "0.8.1" -log = "0.4.11" +log = "0.4.13" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 2c23600066..57fb5a8b7e 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -33,6 +33,6 @@ assert_matches = "1.4.0" async-trait = "0.1.42" env_logger = "0.8.2" futures = { version = "0.3.8", features = ["thread-pool"] } -log = "0.4.11" +log = "0.4.13" parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index fd70bd9dfd..6f2e4258ab 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -28,7 +28,7 @@ smallvec = "1.6.1" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.23" -log = "0.4.11" +log = "0.4.13" [dev-dependencies] assert_matches = "1.4.0" diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 1685a28045..d42a69094e 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -13,7 +13,7 @@ path = "src/main.rs" parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } futures = "0.3.8" futures-timer = "3.0.2" -log = "0.4.11" +log = "0.4.13" structopt = "0.3.21" test-parachain-adder = { path = ".." } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 0302585205..177e1f483f 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } -log = { version = "0.4.11", optional = true } +log = { version = "0.4.13", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 1f826c25a5..4378419a86 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } -log = { version = "0.4.11", optional = true } +log = { version = "0.4.13", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index a650ddc712..5c4c9a4024 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } -log = "0.4.11" +log = "0.4.13" rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", features = [ "derive" ], optional = true } derive_more = "0.99.11" diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index b86492a2a6..93d442e792 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } -log = { version = "0.4.11", optional = true } +log = { version = "0.4.13", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index ab6b56cfaf..ff23dd7338 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } -log = { version = "0.4.11", optional = true } +log = { version = "0.4.13", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index f77bf8525a..42dce59e54 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.17.4", default-features = false, features = ["alloc"] } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } -log = { version = "0.4.11", optional = true } +log = { version = "0.4.13", optional = true } rustc-hex = { version = "2.1.0", default-features = false } serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/validation/Cargo.toml b/validation/Cargo.toml index dcc2dfe77f..10bd546202 100644 --- a/validation/Cargo.toml +++ b/validation/Cargo.toml @@ -14,7 +14,7 @@ sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } consensus = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "master" } runtime_primitives = { package = "sp-runtime", git = "https://github.com/paritytech/substrate", branch = "master" } futures = "0.3.8" -log = "0.4.11" +log = "0.4.13" parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } grandpa = { package = "sc-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "master" } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master" } -- GitLab From cafe755f0ed30c68131228e1deb9901ccbf696fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 12 Jan 2021 11:25:31 +0100 Subject: [PATCH 188/203] Adds propose parachain pallet (#2243) * Adds propose parachain pallet * Update runtime/rococo/src/propose_parachain.rs Co-authored-by: Shawn Tabrizi * Fix runtime benchmarks * Get rid of staking * Fix benchmarking feature.. * Remove accidentally added crate * Bump Rococo spec_version Co-authored-by: Shawn Tabrizi --- Cargo.lock | 1 + node/service/Cargo.toml | 9 +- node/service/src/chain_spec.rs | 2 - runtime/common/src/lib.rs | 2 +- runtime/parachains/src/paras.rs | 2 +- runtime/rococo/Cargo.toml | 14 + runtime/rococo/src/lib.rs | 141 +++++---- runtime/rococo/src/propose_parachain.rs | 380 ++++++++++++++++++++++++ 8 files changed, 475 insertions(+), 76 deletions(-) create mode 100644 runtime/rococo/src/propose_parachain.rs diff --git a/Cargo.lock b/Cargo.lock index e0a9aa1ec0..8ba8bad1f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6520,6 +6520,7 @@ dependencies = [ "frame-support", "frame-system", "frame-system-rpc-runtime-api", + "hex-literal", "pallet-authority-discovery", "pallet-authorship", "pallet-babe", diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index dbe56c08cc..8ee46f3b9f 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -103,7 +103,14 @@ db = ["service/db"] full-node = [ "polkadot-node-core-av-store", ] -runtime-benchmarks = ["polkadot-runtime/runtime-benchmarks", "kusama-runtime/runtime-benchmarks", "westend-runtime/runtime-benchmarks"] + +runtime-benchmarks = [ + "polkadot-runtime/runtime-benchmarks", + "kusama-runtime/runtime-benchmarks", + "westend-runtime/runtime-benchmarks", + "rococo-runtime/runtime-benchmarks" +] + real-overseer = [ "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 67dece91f3..e8b01ecba3 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -856,7 +856,6 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: pallet_authority_discovery: Some(rococo_runtime::AuthorityDiscoveryConfig { keys: vec![], }), - pallet_staking: Some(Default::default()), pallet_sudo: Some(rococo_runtime::SudoConfig { key: endowed_accounts[0].clone(), }), @@ -1343,7 +1342,6 @@ pub fn rococo_testnet_genesis( pallet_authority_discovery: Some(rococo_runtime::AuthorityDiscoveryConfig { keys: vec![], }), - pallet_staking: Some(Default::default()), pallet_sudo: Some(rococo_runtime::SudoConfig { key: root_key }), parachains_configuration: Some(rococo_runtime::ParachainsConfigurationConfig { config: polkadot_runtime_parachains::configuration::HostConfiguration { diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 45f1a8856b..3b5246b4bf 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -52,7 +52,7 @@ pub type NegativeImbalance = as Currency<; + UpcomingParas get(fn upcoming_paras): Vec; /// Upcoming paras instantiation arguments. UpcomingParasGenesis: map hasher(twox_64_concat) ParaId => Option; /// Paras that are to be cleaned up at the end of the session. diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index b5260bb626..4515fbb481 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -10,6 +10,7 @@ parity-scale-codec = { version = "1.3.6", default-features = false, features = [ serde = { version = "1.0.118", default-features = false } serde_derive = { version = "1.0.117", optional = true } smallvec = "1.6.1" +hex-literal = "0.3.1" frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -113,3 +114,16 @@ std = [ # runtime without clashing with the runtime api exported functions # in WASM. disable-runtime-api = [] +runtime-benchmarks = [ + "runtime-common/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "pallet-babe/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-grandpa/runtime-benchmarks", + "pallet-im-online/runtime-benchmarks", + "pallet-indices/runtime-benchmarks", + "pallet-staking/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", +] diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index b75a29309f..c97aa3ec69 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -32,22 +32,18 @@ use primitives::v1::{ SessionInfo as SessionInfoData, }; use runtime_common::{ - SlowAdjustingFeeUpdate, - impls::ToAuthor, - BlockHashCount, BlockWeights, BlockLength, RocksDbWeight, OffchainSolutionWeightLimit, + SlowAdjustingFeeUpdate, impls::ToAuthor, BlockHashCount, BlockWeights, BlockLength, RocksDbWeight, }; use runtime_parachains::{ self, runtime_api_impl::v1 as runtime_api_impl, }; use frame_support::{ - parameter_types, construct_runtime, debug, - traits::{KeyOwnerProofSystem, Filter}, - weights::Weight, + parameter_types, construct_runtime, debug, traits::{KeyOwnerProofSystem, Filter, EnsureOrigin}, weights::Weight, }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - ApplyExtrinsicResult, KeyTypeId, Perbill, curve::PiecewiseLinear, + ApplyExtrinsicResult, KeyTypeId, Perbill, transaction_validity::{TransactionValidity, TransactionSource, TransactionPriority}, traits::{ BlakeTwo256, Block as BlockT, OpaqueKeys, IdentityLookup, @@ -64,7 +60,7 @@ use pallet_grandpa::{AuthorityId as GrandpaId, fg_primitives}; use sp_core::OpaqueMetadata; use sp_staking::SessionIndex; use pallet_session::historical as session_historical; -use frame_system::EnsureRoot; +use frame_system::{EnsureRoot, EnsureOneOf, EnsureSigned}; use runtime_common::{paras_sudo_wrapper, paras_registrar}; use runtime_parachains::origin as parachains_origin; @@ -78,10 +74,8 @@ use runtime_parachains::dmp as parachains_dmp; use runtime_parachains::ump as parachains_ump; use runtime_parachains::hrmp as parachains_hrmp; use runtime_parachains::scheduler as parachains_scheduler; -use runtime_parachains::reward_points::RewardValidatorsWithEraPoints; pub use pallet_balances::Call as BalancesCall; -pub use pallet_staking::StakerStatus; use polkadot_parachain::primitives::Id as ParaId; use xcm::v0::{MultiLocation, NetworkId}; @@ -91,10 +85,11 @@ use xcm_builder::{ CurrencyAdapter as XcmCurrencyAdapter, ChildParachainAsNative, SignedAccountId32AsNative, ChildSystemParachainAsSuperuser, LocationInverter, }; +use constants::{time::*, currency::*, fee::*}; /// Constant values used within the runtime. pub mod constants; -use constants::{time::*, currency::*, fee::*}; +mod propose_parachain; // Make the WASM binary available. #[cfg(feature = "std")] @@ -105,7 +100,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 14, + spec_version: 15, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, @@ -182,7 +177,6 @@ construct_runtime! { // Consensus support. Authorship: pallet_authorship::{Module, Call, Storage}, - Staking: pallet_staking::{Module, Call, Storage, Config, Event, ValidateUnsigned}, Offences: pallet_offences::{Module, Call, Storage, Event}, Historical: session_historical::{Module}, Session: pallet_session::{Module, Call, Storage, Event, Config}, @@ -208,6 +202,9 @@ construct_runtime! { // Sudo Sudo: pallet_sudo::{Module, Call, Storage, Event, Config}, + + // Propose parachain pallet. + ProposeParachain: propose_parachain::{Module, Call, Storage, Event}, } } @@ -304,35 +301,15 @@ impl frame_system::offchain::SigningTypes for Runtime { type Signature = Signature; } -impl pallet_session::historical::Config for Runtime { - type FullIdentification = pallet_staking::Exposure; - type FullIdentificationOf = pallet_staking::ExposureOf; +/// Special `FullIdentificationOf` implementation that is returning for every input `Some(Default::default())`. +pub struct FullIdentificationOf; +impl sp_runtime::traits::Convert> for FullIdentificationOf { + fn convert(_: AccountId) -> Option<()> { Some(Default::default()) } } -pallet_staking_reward_curve::build! { - const REWARD_CURVE: PiecewiseLinear<'static> = curve!( - min_inflation: 0_025_000, - max_inflation: 0_100_000, - ideal_stake: 0_500_000, - falloff: 0_050_000, - max_piece_count: 40, - test_precision: 0_005_000, - ); -} - -parameter_types! { - // Six sessions in an era (6 hours). - pub const SessionsPerEra: SessionIndex = 6; - // 28 eras for unbonding (7 days). - pub const BondingDuration: pallet_staking::EraIndex = 28; - // 27 eras in which slashes can be cancelled (~7 days). - pub const SlashDeferDuration: pallet_staking::EraIndex = 27; - pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; - pub const MaxNominatorRewardedPerValidator: u32 = 64; - // quarter of the last session will be for election. - pub ElectionLookahead: BlockNumber = EpochDurationInBlocks::get() / 4; - pub const MaxIterations: u32 = 10; - pub MinSolutionScoreBump: Perbill = Perbill::from_rational_approximation(5u32, 10_000); +impl pallet_session::historical::Config for Runtime { + type FullIdentification = (); + type FullIdentificationOf = FullIdentificationOf; } parameter_types! { @@ -353,32 +330,6 @@ impl pallet_im_online::Config for Runtime { type WeightInfo = (); } -impl pallet_staking::Config for Runtime { - type Currency = Balances; - type UnixTime = Timestamp; - type CurrencyToVote = frame_support::traits::U128CurrencyToVote; - type RewardRemainder = (); - type Event = Event; - type Slash = (); - type Reward = (); - type SessionsPerEra = SessionsPerEra; - type BondingDuration = BondingDuration; - type SlashDeferDuration = SlashDeferDuration; - // A majority of the council can cancel the slash. - type SlashCancelOrigin = EnsureRoot; - type SessionInterface = Self; - type RewardCurve = RewardCurve; - type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; - type NextNewSession = Session; - type ElectionLookahead = ElectionLookahead; - type Call = Call; - type UnsignedPriority = StakingUnsignedPriority; - type MaxIterations = MaxIterations; - type OffchainSolutionWeightLimit = OffchainSolutionWeightLimit; - type MinSolutionScoreBump = MinSolutionScoreBump; - type WeightInfo = (); -} - parameter_types! { pub const ExistentialDeposit: Balance = 1 * CENTS; pub const MaxLocks: u32 = 50; @@ -414,7 +365,7 @@ parameter_types! { impl pallet_offences::Config for Runtime { type Event = Event; type IdentificationTuple = pallet_session::historical::IdentificationTuple; - type OnOffenceHandler = Staking; + type OnOffenceHandler = (); type WeightSoftLimit = OffencesWeightSoftLimit; } @@ -445,13 +396,19 @@ parameter_types! { pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); } +/// Special `ValidatorIdOf` implementation that is just returning the input as result. +pub struct ValidatorIdOf; +impl sp_runtime::traits::Convert> for ValidatorIdOf { + fn convert(a: AccountId) -> Option { Some(a) } +} + impl pallet_session::Config for Runtime { type Event = Event; type ValidatorId = AccountId; - type ValidatorIdOf = pallet_staking::StashOf; + type ValidatorIdOf = ValidatorIdOf; type ShouldEndSession = Babe; type NextSessionRotation = Babe; - type SessionManager = pallet_session::historical::NoteHistoricalRoot; + type SessionManager = pallet_session::historical::NoteHistoricalRoot; type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type DisabledValidatorsThreshold = DisabledValidatorsThreshold; @@ -531,16 +488,23 @@ impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; type UncleGenerations = UncleGenerations; type FilterUncle = (); - type EventHandler = (Staking, ImOnline); + type EventHandler = ImOnline; } impl parachains_origin::Config for Runtime {} impl parachains_configuration::Config for Runtime {} +/// Special `RewardValidators` that does nothing ;) +pub struct RewardValidators; +impl runtime_parachains::inclusion::RewardValidators for RewardValidators { + fn reward_backing(_: impl IntoIterator) {} + fn reward_bitfields(_: impl IntoIterator) {} +} + impl parachains_inclusion::Config for Runtime { type Event = Event; - type RewardValidators = RewardValidatorsWithEraPoints; + type RewardValidators = RewardValidators; } impl parachains_paras::Config for Runtime { @@ -621,6 +585,41 @@ impl pallet_sudo::Config for Runtime { type Call = Call; } +/// Priviledged origin used by propose parachain. +pub struct PriviledgedOrigin; + +impl EnsureOrigin for PriviledgedOrigin { + type Success = (); + + fn try_origin(o: Origin) -> Result { + let allowed = [ + hex_literal::hex!("b44c58e50328768ac06ed44b842bfa69d86ea10f60bc36156c9ffc5e00867220"), + hex_literal::hex!("762a6a38ba72b139cba285a39a6766e02046fb023f695f5ecf7f48b037c0dd6b") + ]; + + let origin = o.clone(); + match EnsureSigned::try_origin(o) { + Ok(who) if allowed.iter().any(|a| a == &who.as_ref()) => Ok(()), + _ => Err(origin), + } + } + + #[cfg(feature = "runtime-benchmarks")] + fn successful_origin() -> Origin { Origin::root() } +} + +parameter_types! { + pub const ProposeDeposit: Balance = 1000 * DOLLARS; + pub const MaxNameLength: u32 = 20; +} + +impl propose_parachain::Config for Runtime { + type Event = Event; + type MaxNameLength = MaxNameLength; + type ProposeDeposit = ProposeDeposit; + type PriviledgedOrigin = EnsureOneOf, PriviledgedOrigin>; +} + #[cfg(not(feature = "disable-runtime-api"))] sp_api::impl_runtime_apis! { impl sp_api::Core for Runtime { diff --git a/runtime/rococo/src/propose_parachain.rs b/runtime/rococo/src/propose_parachain.rs new file mode 100644 index 0000000000..3af1d89801 --- /dev/null +++ b/runtime/rococo/src/propose_parachain.rs @@ -0,0 +1,380 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! A pallet for proposing a parachain for Rococo. +//! +//! This pallet works as registration of parachains for Rococo. The idea is to have +//! the registration of community provides parachains being handled by this pallet. +//! People will be able to propose their parachain for registration. This proposal +//! will need to be improved by some priviledged account. After approval the workflow +//! is the following: +//! +//! 1. On start of the next session the pallet announces the new relay chain validators. +//! +//! 2. The session after announcing the new relay chain validators, they will be active. At the +//! switch to this session, the parachain will be registered and is allowed to produce blocks. +//! +//! When deregistering a parachain, we basically reverse the operations. + +use frame_support::{ + decl_event, decl_error, decl_module, traits::{Get, ReservableCurrency, EnsureOrigin, Currency}, + decl_storage, ensure, IterableStorageMap, +}; +use primitives::v1::{Id as ParaId, HeadData, ValidationCode}; +use polkadot_parachain::primitives::AccountIdConversion; +use frame_system::{ensure_signed, EnsureOneOf, EnsureSigned}; +use sp_runtime::Either; +use sp_staking::SessionIndex; +use sp_std::vec::Vec; +use runtime_parachains::paras::ParaGenesisArgs; + +type EnsurePriviledgedOrSigned = EnsureOneOf< + ::AccountId, + ::PriviledgedOrigin, + EnsureSigned<::AccountId> +>; + +type Session = pallet_session::Module; + +type BalanceOf = ::Balance; + +/// Configuration for the parachain proposer. +pub trait Config: pallet_session::Config + + pallet_balances::Config + + pallet_balances::Config + + runtime_parachains::paras::Config + + runtime_parachains::dmp::Config + + runtime_parachains::ump::Config + + runtime_parachains::hrmp::Config +{ + /// The overreaching event type. + type Event: From + Into<::Event>; + + /// The maximum name length of a parachain. + type MaxNameLength: Get; + + /// The amount that should be deposited when creating a proposal. + type ProposeDeposit: Get>; + + /// Priviledged origin that can approve/cancel/deregister parachain and proposals. + type PriviledgedOrigin: EnsureOrigin<::Origin>; +} + +/// A proposal for adding a parachain to the relay chain. +#[derive(parity_scale_codec::Encode, parity_scale_codec::Decode)] +struct Proposal { + /// The account that proposed this parachain. + proposer: AccountId, + /// The validation WASM code of the parachain. + validation_code: ValidationCode, + /// The genesis head state of the parachain. + genesis_head: HeadData, + /// The validators for the relay chain provided by the parachain. + validators: Vec, + /// The name of the parachain. + name: Vec, + /// The balance that the parachain should receive. + balance: Balance, +} + +/// Information about the registered parachain. +#[derive(parity_scale_codec::Encode, parity_scale_codec::Decode)] +struct RegisteredParachainInfo { + /// The validators for the relay chain provided by the parachain. + validators: Vec, + /// The account that proposed the parachain. + proposer: AccountId, +} + +decl_event! { + pub enum Event { + /// A parachain was proposed for registration. + ParachainProposed(Vec, ParaId), + /// A parachain was approved and is scheduled for being activated. + ParachainApproved(ParaId), + /// A parachain was registered and is now running. + ParachainRegistered(ParaId), + } +} + +decl_error! { + pub enum Error for Module { + /// The name of the parachain is too long. + NameTooLong, + /// The requested parachain id is already registered. + ParachainIdAlreadyTaken, + /// The requested parachain id is already proposed for another parachain. + ParachainIdAlreadyProposed, + /// Could not find the parachain proposal. + ProposalNotFound, + /// Not authorized to do a certain operation. + NotAuthorized, + /// A validator is already registered in the active validator set. + ValidatorAlreadyRegistered, + /// No information about the registered parachain found. + ParachainInfoNotFound, + /// Parachain is already approved for registration. + ParachainAlreadyApproved, + /// Parachain is already scheduled for registration. + ParachainAlreadyScheduled, + /// The given WASM blob is definitley not valid. + DefinitelyNotWasm, + /// Registration requires at least one validator. + AtLeastOneValidatorRequired, + } +} + +decl_storage! { + trait Store for Module as ParachainProposer { + /// All the proposals. + Proposals: map hasher(twox_64_concat) ParaId => Option>>; + /// Proposals that are approved. + ApprovedProposals: Vec; + /// Proposals that are scheduled at for a fixed session to be applied. + ScheduledProposals: map hasher(twox_64_concat) SessionIndex => Vec; + /// Information about the registered parachains. + ParachainInfo: map hasher(twox_64_concat) ParaId => Option>; + /// Validators that should be retired, because their Parachain was deregistered. + ValidatorsToRetire: Vec; + } +} + +decl_module! { + pub struct Module for enum Call where origin: ::Origin { + type Error = Error; + + /// The maximum name length of a parachain. + const MaxNameLength: u32 = T::MaxNameLength::get(); + + /// The deposit that will be reserved when proposing a parachain. + const ProposeDeposit: BalanceOf = T::ProposeDeposit::get(); + + fn deposit_event() = default; + + /// Propose a new parachain + /// + /// This requires: + /// - `para_id`: The id of the parachain. + /// - `name`: The name of the parachain. + /// - `validation_function`: The wasm runtime of the parachain. + /// - `initial_head_state`: The genesis state of the parachain. + /// - `validators`: Validators that will validate for the relay chain, needs to be at least one. + /// - `balance`: The initial balance of the parachain on the relay chain. + /// + /// It will reserve a deposit from the sender account over the lifetime of the chain. + #[weight = 1_000_000] + fn propose_parachain( + origin, + para_id: ParaId, + name: Vec, + validation_code: ValidationCode, + genesis_head: HeadData, + validators: Vec, + balance: BalanceOf, + ) { + let who = ensure_signed(origin)?; + + ensure!(name.len() <= T::MaxNameLength::get() as usize, Error::::NameTooLong); + ensure!(validators.len() > 0, Error::::AtLeastOneValidatorRequired); + ensure!(!Proposals::::contains_key(¶_id), Error::::ParachainIdAlreadyProposed); + ensure!( + !runtime_parachains::paras::Module::::parachains().contains(¶_id), + Error::::ParachainIdAlreadyTaken, + ); + ensure!( + !runtime_parachains::paras::Module::::upcoming_paras().contains(¶_id), + Error::::ParachainIdAlreadyTaken, + ); + ensure!(validation_code.0.starts_with(runtime_common::WASM_MAGIC), Error::::DefinitelyNotWasm); + + let active_validators = Session::::validators(); + ensure!( + validators.iter().all(|v| !active_validators.contains(v)), + Error::::ValidatorAlreadyRegistered, + ); + Proposals::::iter().try_for_each(|(_, prop)| + if validators.iter().all(|v| !prop.validators.contains(v)) { + Ok(()) + } else { + Err(Error::::ValidatorAlreadyRegistered) + } + )?; + + pallet_balances::Module::::reserve(&who, T::ProposeDeposit::get())?; + + let proposal = Proposal { + name: name.clone(), + proposer: who, + validators: validators.into(), + genesis_head, + validation_code, + balance, + }; + + Proposals::::insert(para_id, proposal); + + Self::deposit_event(Event::ParachainProposed(name, para_id)); + } + + /// Approve a parachain proposal. + #[weight = 100_000] + fn approve_proposal( + origin, + para_id: ParaId, + ) { + T::PriviledgedOrigin::ensure_origin(origin)?; + + ensure!(Proposals::::contains_key(¶_id), Error::::ProposalNotFound); + + Self::is_approved_or_scheduled(para_id)?; + + ApprovedProposals::append(para_id); + + Self::deposit_event(Event::ParachainApproved(para_id)); + } + + /// Cancel a parachain proposal. + /// + /// This also unreserves the deposit. + #[weight = 100_000] + fn cancel_proposal(origin, para_id: ParaId) { + let who = match EnsurePriviledgedOrSigned::::ensure_origin(origin)? { + Either::Left(_) => None, + Either::Right(who) => Some(who), + }; + + Self::is_approved_or_scheduled(para_id)?; + + let proposal = Proposals::::get(¶_id).ok_or(Error::::ProposalNotFound)?; + + if let Some(who) = who { + ensure!(who == proposal.proposer, Error::::NotAuthorized); + } + + Proposals::::remove(¶_id); + + pallet_balances::Module::::unreserve(&proposal.proposer, T::ProposeDeposit::get()); + } + + /// Deregister a parachain that was already successfully registered in the relay chain. + #[weight = 100_000] + fn deregister_parachain(origin, para_id: ParaId) { + let who = match EnsurePriviledgedOrSigned::::ensure_origin(origin)? { + Either::Left(_) => None, + Either::Right(who) => Some(who), + }; + + let info = ParachainInfo::::get(¶_id).ok_or(Error::::ParachainInfoNotFound)?; + + if let Some(who) = who { + ensure!(who == info.proposer, Error::::NotAuthorized); + } + + ParachainInfo::::remove(¶_id); + info.validators.into_iter().for_each(|v| ValidatorsToRetire::::append(v)); + runtime_parachains::schedule_para_cleanup::(para_id); + + pallet_balances::Module::::unreserve(&info.proposer, T::ProposeDeposit::get()); + } + } +} + +impl Module { + /// Returns wether the given `para_id` approval is approved or already scheduled. + fn is_approved_or_scheduled(para_id: ParaId) -> frame_support::dispatch::DispatchResult { + if ApprovedProposals::get().iter().any(|p| *p == para_id) { + return Err(Error::::ParachainAlreadyApproved.into()) + } + + if ScheduledProposals::get(&Session::::current_index() + 1).iter().any(|p| *p == para_id) { + return Err(Error::::ParachainAlreadyScheduled.into()) + } + + Ok(()) + } +} + +impl pallet_session::SessionManager for Module { + fn new_session(new_index: SessionIndex) -> Option> { + if new_index <= 1 { + return None; + } + + let proposals = ApprovedProposals::take(); + + let mut validators = Session::::validators(); + + ValidatorsToRetire::::take().iter().for_each(|v| { + if let Some(pos) = validators.iter().position(|r| r == v) { + validators.swap_remove(pos); + } + }); + + // Schedule all approved proposals + for (id, proposal) in proposals.iter().filter_map(|id| Proposals::::get(&id).map(|p| (id, p))) { + ScheduledProposals::append(new_index, id); + + let genesis = ParaGenesisArgs { + genesis_head: proposal.genesis_head, + validation_code: proposal.validation_code, + parachain: true, + }; + + runtime_parachains::schedule_para_initialize::(*id, genesis); + + validators.extend(proposal.validators); + } + + Some(validators) + } + + fn end_session(_: SessionIndex) {} + + fn start_session(start_index: SessionIndex) { + let proposals = ScheduledProposals::take(&start_index); + + // Register all parachains that are allowed to start with the new session. + for (id, proposal) in proposals.iter().filter_map(|id| Proposals::::take(&id).map(|p| (id, p))) { + Self::deposit_event(Event::ParachainRegistered(*id)); + + // Add some funds to the Parachain + let _ = pallet_balances::Module::::deposit_creating(&id.into_account(), proposal.balance); + + let info = RegisteredParachainInfo { + proposer: proposal.proposer, + validators: proposal.validators, + }; + ParachainInfo::::insert(id, info); + } + } +} + +impl pallet_session::historical::SessionManager for Module { + fn new_session( + new_index: SessionIndex, + ) -> Option> { + >::new_session(new_index) + .map(|r| r.into_iter().map(|v| (v, Default::default())).collect()) + } + + fn start_session(start_index: SessionIndex) { + >::start_session(start_index) + } + + fn end_session(end_index: SessionIndex) { + >::end_session(end_index) + } +} -- GitLab From c385b486aaf7dba4a4d4daf4eb1144b3e71e38db Mon Sep 17 00:00:00 2001 From: Denis Pisarev Date: Tue, 12 Jan 2021 15:19:59 +0100 Subject: [PATCH 189/203] CI: add rococo build and conteinerization (#2217) * CI: add rococo build and conteinerization * CI: overhaul rules * CI: two new conditional jobs to build rococo, CI overhaul, npm security fix * CI: remove web-wasm publishing --- .gitlab-ci.yml | 239 ++++++++++++++++++++++++++++++------------------- 1 file changed, 145 insertions(+), 94 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0dac0d005f..163ca9a1a6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,6 +4,10 @@ # # pipelines can be triggered manually in the web # setting DEPLOY_TAG will only deploy the tagged image +# +# please do not add new jobs without "rules:" and "*-env". There are &rules-test for everything, +# &rules-pr-only and &rules-build presets. And "kubernetes-env" with "docker-env" to set a runner +# which executes the job. stages: - test @@ -25,6 +29,9 @@ variables: DOCKER_OS: "debian:stretch" ARCH: "x86_64" +default: + cache: {} + .collect-artifacts: &collect-artifacts artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" @@ -36,8 +43,7 @@ variables: .kubernetes-env: &kubernetes-env tags: - kubernetes-parity-build - environment: - name: parity-build + interruptible: true .docker-env: &docker-env retry: @@ -47,30 +53,46 @@ variables: - unknown_failure - api_failure interruptible: true - dependencies: [] tags: - linux-docker -.compiler_info: &compiler_info +.compiler-info: &compiler-info before_script: - rustup show - cargo --version - sccache -s -.build-refs: &build-refs +.rules-build: &rules-build rules: + # Due to https://gitlab.com/gitlab-org/gitlab/-/issues/31264 there's no way to setup a manual + # build job so that publish-docker-rococo would "needs" build-linux-rococo job. This leads + # either to blocked or to forever running pipeline. It was decided to run these jobs from UI + # and on schedule. + # + # $PIPELINE should be passed in https://gitlab.parity.io/parity/polkadot/-/pipeline_schedules + # or other trigger to avoid running these jobs and run just those allowing this variable. + - if: $PIPELINE == "rococo" + when: never - if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 -.test-refs: &test-refs +.rules-test: &rules-test + # these jobs run always* rules: - - if: $CI_PIPELINE_SOURCE == "web" + - if: $PIPELINE == "rococo" + when: never + - when: always + +.pr-only: &rules-pr-only + # these jobs run only on PRs + rules: + - if: $PIPELINE == "rococo" + when: never - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_COMMIT_REF_NAME == "master" + when: never - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 #### stage: test @@ -78,38 +100,36 @@ check-runtime: stage: test image: paritytech/tools:latest <<: *kubernetes-env - rules: - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + <<: *rules-pr-only variables: GITLAB_API: "https://gitlab.parity.io/api/v4" GITHUB_API_PROJECT: "parity%2Finfrastructure%2Fgithub-api" script: - ./scripts/gitlab/check_runtime.sh - interruptible: true allow_failure: true check-line-width: stage: test image: paritytech/tools:latest <<: *kubernetes-env - rules: - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + <<: *rules-pr-only script: - ./scripts/gitlab/check_line_width.sh - interruptible: true allow_failure: true test-deterministic-wasm: stage: test + <<: *rules-test <<: *docker-env + <<: *compiler-info script: - ./scripts/gitlab/test_deterministic_wasm.sh -test-linux-stable: &test +test-linux-stable: stage: test - <<: *test-refs + <<: *rules-test <<: *docker-env - <<: *compiler_info + <<: *compiler-info variables: RUST_TOOLCHAIN: stable # Enable debug assertions since we are running optimized builds for testing @@ -123,72 +143,50 @@ test-linux-stable: &test - ./scripts/gitlab/test_linux_stable.sh - sccache -s -check-web-wasm: &test +check-web-wasm: stage: test - <<: *test-refs + <<: *rules-test <<: *docker-env - <<: *compiler_info + <<: *compiler-info script: - # WASM support is in progress. As more and more crates support WASM, we - # should add entries here. See https://github.com/paritytech/polkadot/issues/625 + # WASM support is in progress. As more and more crates support WASM, we should + # add entries here. See https://github.com/paritytech/polkadot/issues/625 - ./scripts/gitlab/check_web_wasm.sh - sccache -s -check-runtime-benchmarks: &test +check-runtime-benchmarks: stage: test - <<: *test-refs + <<: *rules-test <<: *docker-env - <<: *compiler_info + <<: *compiler-info script: # Check that the node will compile with `runtime-benchmarks` feature flag. - ./scripts/gitlab/check_runtime_benchmarks.sh - sccache -s +#### stage: build + check-transaction-versions: - image: node:15 - stage: build + image: node:15 + stage: build + <<: *rules-test + <<: *docker-env needs: - - job: test-linux-stable + - job: test-linux-stable + artifacts: false before_script: - - npm install -g @polkadot/metadata-cmp + - npm install --ignore-scripts -g @polkadot/metadata-cmp - git fetch origin release - script: "scripts/gitlab/check_extrinsics_ordering.sh" - -build-wasm-release: - stage: build - <<: *collect-artifacts - <<: *docker-env - <<: *compiler_info - # Note: We likely only want to do this for tagged releases, hence the 'rules:' - rules: - - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 script: - - time wasm-pack build --target web --out-dir wasm --release cli -- --no-default-features --features browser - - mkdir -p ./artifacts/wasm - - cd ./cli/wasm/ - - for f in polkadot_cli*; do sha256sum "${f}" > "${f}.sha256"; done - - mv ./polkadot_cli* ../../artifacts/wasm/. + - scripts/gitlab/check_extrinsics_ordering.sh -build-linux-release: &build - stage: build +.build-linux: &build-linux <<: *collect-artifacts <<: *docker-env - <<: *compiler_info - rules: - # .build-refs with manual on PRs - - if: $CI_PIPELINE_SOURCE == "web" - - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_COMMIT_REF_NAME == "master" - - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - when: manual - allow_failure: true - script: - - time cargo build --release --verbose - - mkdir -p ./artifacts + <<: *compiler-info + after_script: - mv ./target/release/polkadot ./artifacts/. - sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256 - - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name - if [ "${CI_COMMIT_TAG}" ]; then EXTRATAG="latest"; else @@ -200,48 +198,60 @@ build-linux-release: &build - echo -n ${VERSION} > ./artifacts/VERSION - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG - cp -r scripts/docker/* ./artifacts + +build-linux-release: + stage: build + <<: *build-linux + rules: + # .rules-test with manual on PRs + - if: $PIPELINE == "rococo" + when: never + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + when: manual + allow_failure: true + - when: always + script: + - mkdir -p ./artifacts + - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name + - time cargo build --release --verbose + - sccache -s + +build-linux-rococo: + stage: build + <<: *build-linux + rules: + - if: $PIPELINE == "rococo" + script: + - mkdir -p ./artifacts + - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name + - time cargo build --release --verbose --features=real-overseer - sccache -s generate-impl-guide: - stage: build + stage: build + <<: *rules-test + <<: *docker-env image: name: michaelfbryan/mdbook-docker-image:latest entrypoint: [""] script: - mdbook build roadmap/implementers-guide -.publish-build: &publish-build - stage: publish - dependencies: - - build-linux-release - - build-wasm-release - cache: {} - <<: *build-refs +#### stage: publish + +.build-push-docker-image: &build-push-docker-image <<: *kubernetes-env - before_script: + <<: *collect-artifacts + image: quay.io/buildah/stable + before_script: &check-versions - test -s ./artifacts/VERSION || exit 1 - test -s ./artifacts/EXTRATAG || exit 1 - VERSION="$(cat ./artifacts/VERSION)" - EXTRATAG="$(cat ./artifacts/EXTRATAG)" - echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})" - -publish-docker: - <<: *publish-build - image: quay.io/buildah/stable - <<: *collect-artifacts - # Don't run on releases - this is handled by the Github Action here: - # .github/workflows/publish-docker-release.yml - rules: - - if: $CI_PIPELINE_SOURCE == "web" - - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_COMMIT_REF_NAME == "master" - variables: - GIT_STRATEGY: none - # DOCKERFILE: scripts/docker/Dockerfile - IMAGE_NAME: docker.io/parity/polkadot script: - test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity" || - ( echo "no docker credentials provided"; exit 1 ) + ( echo "no docker credentials provided"; exit 1 ) - cd ./artifacts - buildah bud --format=docker @@ -249,6 +259,7 @@ publish-docker: --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" --tag "$IMAGE_NAME:$VERSION" --tag "$IMAGE_NAME:$EXTRATAG" . + # The job will success only on the protected branch - echo "$Docker_Hub_Pass_Parity" | buildah login --username "$Docker_Hub_User_Parity" --password-stdin docker.io - buildah info @@ -259,13 +270,52 @@ publish-docker: # only VERSION information is needed for the deployment - find ./artifacts/ -depth -not -name VERSION -not -name artifacts -delete +publish-docker-polkadot: + stage: publish + <<: *build-push-docker-image + # Don't run on releases - this is handled by the Github Action here: + # .github/workflows/publish-docker-release.yml + rules: + - if: $PIPELINE == "rococo" + when: never + - if: $CI_PIPELINE_SOURCE == "schedule" + - if: $CI_PIPELINE_SOURCE == "web" + - if: $CI_COMMIT_REF_NAME == "master" + needs: + - job: build-linux-release + artifacts: true + variables: + GIT_STRATEGY: none + # DOCKERFILE: scripts/docker/Dockerfile + IMAGE_NAME: docker.io/parity/polkadot + +publish-docker-rococo: + stage: publish + <<: *build-push-docker-image + rules: + - if: $PIPELINE == "rococo" + needs: + - job: build-linux-rococo + artifacts: true + variables: + GIT_STRATEGY: none + # DOCKERFILE: scripts/docker/Dockerfile + IMAGE_NAME: docker.io/parity/rococo + publish-s3-release: - <<: *publish-build + stage: publish + <<: *rules-build + needs: + - job: build-linux-release + artifacts: true + <<: *kubernetes-env image: paritytech/awscli:latest variables: GIT_STRATEGY: none BUCKET: "releases.parity.io" PREFIX: "polkadot/${ARCH}-${DOCKER_OS}" + before_script: + - *check-versions script: - echo "uploading objects to https://${BUCKET}/${PREFIX}/${VERSION}" - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/${VERSION}/ @@ -289,22 +339,23 @@ publish-s3-release: - aws s3 ls s3://${BUCKET}/${PREFIX}/${EXTRATAG}/ --recursive --human-readable --summarize +#### stage: deploy + deploy-polkasync-kusama: stage: deploy - <<: *build-refs + <<: *rules-build variables: POLKADOT_CI_COMMIT_NAME: "${CI_COMMIT_REF_NAME}" POLKADOT_CI_COMMIT_REF: "${CI_COMMIT_REF}" allow_failure: true trigger: "parity/infrastructure/parity-testnet" -#### stage: .post +#### stage: .post check-labels: - stage: .post - image: paritytech/tools:latest - <<: *kubernetes-env - rules: - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + stage: .post + image: paritytech/tools:latest + <<: *rules-pr-only + <<: *kubernetes-env script: - ./scripts/gitlab/check_labels.sh -- GitLab From 95fce90cb1eea1b9acfea3fd6b6d2befd3492904 Mon Sep 17 00:00:00 2001 From: Denis Pisarev Date: Tue, 12 Jan 2021 18:17:00 +0100 Subject: [PATCH 190/203] CI: workaraound for variable not passed to after_script (#2256) --- .gitlab-ci.yml | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 163ca9a1a6..0cd51b652c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -180,28 +180,28 @@ check-transaction-versions: script: - scripts/gitlab/check_extrinsics_ordering.sh -.build-linux: &build-linux - <<: *collect-artifacts - <<: *docker-env - <<: *compiler-info - after_script: - - mv ./target/release/polkadot ./artifacts/. - - sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256 - - if [ "${CI_COMMIT_TAG}" ]; then - EXTRATAG="latest"; - else - EXTRATAG="$(./artifacts/polkadot --version | - sed -n -r 's/^polkadot ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p')"; - EXTRATAG="${CI_COMMIT_REF_NAME}-${EXTRATAG}-$(cut -c 1-8 ./artifacts/polkadot.sha256)"; - fi - - echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})" - - echo -n ${VERSION} > ./artifacts/VERSION - - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG - - cp -r scripts/docker/* ./artifacts +.pack-artifacts: &pack-artifacts + - mkdir -p ./artifacts + - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name + - mv ./target/release/polkadot ./artifacts/. + - sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256 + - if [ "${CI_COMMIT_TAG}" ]; then + EXTRATAG="latest"; + else + EXTRATAG="$(./artifacts/polkadot --version | + sed -n -r 's/^polkadot ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p')"; + EXTRATAG="${CI_COMMIT_REF_NAME}-${EXTRATAG}-$(cut -c 1-8 ./artifacts/polkadot.sha256)"; + fi + - echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})" + - echo -n ${VERSION} > ./artifacts/VERSION + - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG + - cp -r scripts/docker/* ./artifacts build-linux-release: stage: build - <<: *build-linux + <<: *collect-artifacts + <<: *docker-env + <<: *compiler-info rules: # .rules-test with manual on PRs - if: $PIPELINE == "rococo" @@ -211,21 +211,21 @@ build-linux-release: allow_failure: true - when: always script: - - mkdir -p ./artifacts - - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name - time cargo build --release --verbose - sccache -s + - *pack-artifacts build-linux-rococo: stage: build - <<: *build-linux + <<: *collect-artifacts + <<: *docker-env + <<: *compiler-info rules: - if: $PIPELINE == "rococo" script: - - mkdir -p ./artifacts - - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name - time cargo build --release --verbose --features=real-overseer - sccache -s + - *pack-artifacts generate-impl-guide: stage: build @@ -261,7 +261,7 @@ generate-impl-guide: --tag "$IMAGE_NAME:$EXTRATAG" . # The job will success only on the protected branch - echo "$Docker_Hub_Pass_Parity" | - buildah login --username "$Docker_Hub_User_Parity" --password-stdin docker.io + buildah login --username "$Docker_Hub_User_Parity" --password-stdin docker.io - buildah info - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" - buildah push --format=v2s2 "$IMAGE_NAME:$EXTRATAG" -- GitLab From 8ee122a7415e7f7e62ba61b9a1ddbb105a7bd58d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 12 Jan 2021 19:52:26 +0100 Subject: [PATCH 191/203] Bump rococo version (#2255) * Add bad block to rococo * Bump rococo spec_version * Revert "Add bad block to rococo" This reverts commit 56664ce36f4fd9ea570b63e7b6978a6d2ff2aace. --- runtime/rococo/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index c97aa3ec69..d03c7bca4d 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -100,7 +100,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 15, + spec_version: 17, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From 05482b5bf2b06021d137a8c5a053fbd0f300317f Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Tue, 12 Jan 2021 22:45:11 +0100 Subject: [PATCH 192/203] Fix run_to_block functions (#2258) --- runtime/parachains/src/dmp.rs | 6 +++--- runtime/parachains/src/hrmp.rs | 12 ++++++------ runtime/parachains/src/inclusion.rs | 10 +++++----- runtime/parachains/src/paras.rs | 10 +++++----- runtime/parachains/src/session_info.rs | 10 +++++----- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/runtime/parachains/src/dmp.rs b/runtime/parachains/src/dmp.rs index 49fb2f8a57..103aeb1e0d 100644 --- a/runtime/parachains/src/dmp.rs +++ b/runtime/parachains/src/dmp.rs @@ -236,14 +236,14 @@ mod tests { while System::block_number() < to { let b = System::block_number(); Dmp::initializer_finalize(); + if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { + Dmp::initializer_on_new_session(&Default::default()); + } System::on_finalize(b); System::on_initialize(b + 1); System::set_block_number(b + 1); - if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { - Dmp::initializer_on_new_session(&Default::default()); - } Dmp::initializer_initialize(b + 1); } } diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index eb0e9aa603..4c9341652a 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -280,7 +280,7 @@ decl_storage! { // NOTE that this field is used by parachains via merkle storage proofs, therefore changing // the format will require migration of parachains. HrmpEgressChannelsIndex: map hasher(twox_64_concat) ParaId => Vec; - + /// Storage for the messages for each channel. /// Invariant: cannot be non-empty if the corresponding channel in `HrmpChannels` is `None`. HrmpChannelContents: map hasher(twox_64_concat) HrmpChannelId => Vec>; @@ -1101,17 +1101,17 @@ mod tests { Hrmp::initializer_finalize(); Paras::initializer_finalize(); - System::on_finalize(b); - - System::on_initialize(b + 1); - System::set_block_number(b + 1); - if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { // NOTE: this is in initialization order. Paras::initializer_on_new_session(&Default::default()); Hrmp::initializer_on_new_session(&Default::default()); } + System::on_finalize(b); + + System::on_initialize(b + 1); + System::set_block_number(b + 1); + // NOTE: this is in initialization order. Paras::initializer_initialize(b + 1); Hrmp::initializer_initialize(b + 1); diff --git a/runtime/parachains/src/inclusion.rs b/runtime/parachains/src/inclusion.rs index 4f0466f788..68a0b6f01f 100644 --- a/runtime/parachains/src/inclusion.rs +++ b/runtime/parachains/src/inclusion.rs @@ -1036,16 +1036,16 @@ mod tests { Inclusion::initializer_finalize(); Paras::initializer_finalize(); - System::on_finalize(b); - - System::on_initialize(b + 1); - System::set_block_number(b + 1); - if let Some(notification) = new_session(b + 1) { Paras::initializer_on_new_session(¬ification); Inclusion::initializer_on_new_session(¬ification); } + System::on_finalize(b); + + System::on_initialize(b + 1); + System::set_block_number(b + 1); + Paras::initializer_initialize(b + 1); Inclusion::initializer_initialize(b + 1); } diff --git a/runtime/parachains/src/paras.rs b/runtime/parachains/src/paras.rs index 8d06ceadf6..a0d5ad7d27 100644 --- a/runtime/parachains/src/paras.rs +++ b/runtime/parachains/src/paras.rs @@ -578,14 +578,14 @@ mod tests { while System::block_number() < to { let b = System::block_number(); Paras::initializer_finalize(); + if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { + Paras::initializer_on_new_session(&Default::default()); + } System::on_finalize(b); System::on_initialize(b + 1); System::set_block_number(b + 1); - if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { - Paras::initializer_on_new_session(&Default::default()); - } Paras::initializer_initialize(b + 1); } } @@ -1059,8 +1059,8 @@ mod tests { assert_eq!(::Heads::get(¶_id), Some(Default::default())); } - // run to block, with a session change at that block. - run_to_block(3, Some(vec![3])); + // run to block №4, with a session change at the end of the block 3. + run_to_block(4, Some(vec![4])); // cleaning up the parachain should place the current parachain code // into the past code buffer & schedule cleanup. diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index 64bf4d76b5..676f84512c 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -183,16 +183,16 @@ mod tests { SessionInfo::initializer_finalize(); Configuration::initializer_finalize(); - System::on_finalize(b); - - System::on_initialize(b + 1); - System::set_block_number(b + 1); - if let Some(notification) = new_session(b + 1) { Configuration::initializer_on_new_session(¬ification.validators, ¬ification.queued); SessionInfo::initializer_on_new_session(¬ification); } + System::on_finalize(b); + + System::on_initialize(b + 1); + System::set_block_number(b + 1); + Configuration::initializer_initialize(b + 1); SessionInfo::initializer_initialize(b + 1); } -- GitLab From d070325880808dbf4c6f85368219ff940c7b518b Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Wed, 13 Jan 2021 10:12:29 +0100 Subject: [PATCH 193/203] Avoid inlining `update_config_member` (#2246) Closes #2241 --- runtime/parachains/src/configuration.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index 847a16b11c..4691c0059d 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -652,6 +652,11 @@ impl Module { } } + // NOTE: Explicitly tell rustc not to inline this because otherwise heuristics note the incoming + // closure making it's attractive to inline. However, in this case, we will end up with lots of + // duplicated code (making this function to show up in the top of heaviest functions) only for + // the sake of essentially avoiding an indirect call. Doesn't worth it. + #[inline(never)] fn update_config_member( updater: impl FnOnce(&mut HostConfiguration) -> bool, ) { -- GitLab From 4489b5282e12b7a60d386f562a1139c5aec77d5b Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Wed, 13 Jan 2021 17:35:32 +0100 Subject: [PATCH 194/203] HRMP channel deposits (#2225) * Drive by fixes The visibility modifiers are remnants of the previous structure where HRMP wasn't a standalone module, by rather a submodule of the router module. * Add Currency assoc type to Config This would allow us to reserve balance for deposits. This commit also integrates the HRMP module in rococo, test-runtime and mocks to use the balances pallet. * Fix a bug that doesn't increment the age In case the request is not confirmed, the age would be incremented but not persisted. * Fix cleaning the indexes Before that change, the cleaning of the channel indexes was wrong, because it naively removed entire rows that was pertaining to the para we delete. This approach is flawed because it doesn't account for the rows that are pertaining to other paras that contain the outgoing one. This clearly violates the invariant imposed on the indexes, that all the index rows must contain alive paras, but apart from that it also lead to the situation where ingress index would contain the a different set of channels that an egress have. * Reserve currency for opening the channels Note the ugly `unique_saturated_into` calls. The reason for them is the currency trait accepts and defines the `Balance` associated type and the deposit values are coming from the `HostConfiguration` where they are defined using the `Balance`. I figured that parameterising `HostConfiguration` would be annoying. On the other hand, I don't expect these `unique_saturated_into` calls to give us problems since it seems to be a reasonable assumption that this module will be instantiated within a runtime where the Currency provided will have a Balance that matches the one used in the configuration. * Tests: Adapt `run_to_block` so that it submits a proper config * Tests: exercise the deposit logic --- parachain/src/primitives.rs | 2 +- runtime/common/src/paras_registrar.rs | 1 + runtime/parachains/src/hrmp.rs | 314 ++++++++++++++++++++++---- runtime/parachains/src/mock.rs | 18 +- runtime/rococo/src/lib.rs | 1 + runtime/test-runtime/src/lib.rs | 1 + 6 files changed, 290 insertions(+), 47 deletions(-) diff --git a/parachain/src/primitives.rs b/parachain/src/primitives.rs index 91250b75f5..a9b8f13c80 100644 --- a/parachain/src/primitives.rs +++ b/parachain/src/primitives.rs @@ -231,7 +231,7 @@ impl AccountIdConversion for Id { /// that we use the first item tuple for the sender and the second for the recipient. Only one channel /// is allowed between two participants in one direction, i.e. there cannot be 2 different channels /// identified by `(A, B)`. -#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)] +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Encode, Decode, RuntimeDebug)] #[cfg_attr(feature = "std", derive(Hash))] pub struct HrmpChannelId { /// The para that acts as the sender in this channel. diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index 1d46a43c01..a14c46bf86 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -435,6 +435,7 @@ mod tests { impl hrmp::Config for Test { type Origin = Origin; + type Currency = pallet_balances::Module; } impl pallet_session::historical::Config for Test { diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index 4c9341652a..b3682345cf 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -21,14 +21,14 @@ use crate::{ }; use parity_scale_codec::{Decode, Encode}; use frame_support::{ - decl_storage, decl_module, decl_error, ensure, traits::Get, weights::Weight, StorageMap, - StorageValue, dispatch::DispatchResult, + decl_storage, decl_module, decl_error, ensure, traits::{Get, ReservableCurrency}, weights::Weight, + StorageMap, StorageValue, dispatch::DispatchResult, }; use primitives::v1::{ Balance, Hash, HrmpChannelId, Id as ParaId, InboundHrmpMessage, OutboundHrmpMessage, SessionIndex, }; -use sp_runtime::traits::{BlakeTwo256, Hash as HashT}; +use sp_runtime::traits::{UniqueSaturatedInto, AccountIdConversion, BlakeTwo256, Hash as HashT}; use sp_std::{ mem, fmt, collections::{btree_map::BTreeMap, btree_set::BTreeSet}, @@ -218,6 +218,13 @@ pub trait Config: frame_system::Config + configuration::Config + paras::Config + type Origin: From + From<::Origin> + Into::Origin>>; + + /// An interface for reserving deposits for opening channels. + /// + /// NOTE that this Currency instance will be charged with the amounts defined in the `Configuration` + /// module. Specifically, that means that the `Balance` of the `Currency` implementation should + /// be the same as `Balance` as used in the `Configuration`. + type Currency: ReservableCurrency; } decl_storage! { @@ -226,7 +233,6 @@ decl_storage! { /// The entries are sorted ascending by the para id. OutgoingParas: Vec; - /// The set of pending HRMP open channel requests. /// /// The set is accompanied by a list for iteration. @@ -423,23 +429,28 @@ impl Module { } /// Remove all storage entries associated with the given para. - pub(super) fn clean_hrmp_after_outgoing(outgoing_para: ParaId) { + fn clean_hrmp_after_outgoing(outgoing_para: ParaId) { ::HrmpOpenChannelRequestCount::remove(&outgoing_para); ::HrmpAcceptedChannelRequestCount::remove(&outgoing_para); - // close all channels where the outgoing para acts as the recipient. - for sender in ::HrmpIngressChannelsIndex::take(&outgoing_para) { - Self::close_hrmp_channel(&HrmpChannelId { + let ingress = ::HrmpIngressChannelsIndex::take(&outgoing_para) + .into_iter() + .map(|sender| HrmpChannelId { sender, recipient: outgoing_para.clone(), }); - } - // close all channels where the outgoing para acts as the sender. - for recipient in ::HrmpEgressChannelsIndex::take(&outgoing_para) { - Self::close_hrmp_channel(&HrmpChannelId { + let egress = ::HrmpEgressChannelsIndex::take(&outgoing_para) + .into_iter() + .map(|recipient| HrmpChannelId { sender: outgoing_para.clone(), recipient, }); + let mut to_close = ingress.chain(egress).collect::>(); + to_close.sort(); + to_close.dedup(); + + for channel in to_close { + Self::close_hrmp_channel(&channel); } } @@ -447,7 +458,7 @@ impl Module { /// /// - prune the stale requests /// - enact the confirmed requests - pub(super) fn process_hrmp_open_channel_requests(config: &HostConfiguration) { + fn process_hrmp_open_channel_requests(config: &HostConfiguration) { let mut open_req_channels = ::HrmpOpenChannelRequestsList::get(); if open_req_channels.is_empty() { return; @@ -528,15 +539,21 @@ impl Module { request.age += 1; if request.age == config.hrmp_open_request_ttl { // got stale - ::HrmpOpenChannelRequestCount::mutate(&channel_id.sender, |v| { *v -= 1; }); - // TODO: return deposit https://github.com/paritytech/polkadot/issues/1907 - let _ = open_req_channels.swap_remove(idx); - ::HrmpOpenChannelRequests::remove(&channel_id); + if let Some(HrmpOpenChannelRequest { sender_deposit, .. }) = + ::HrmpOpenChannelRequests::take(&channel_id) + { + T::Currency::unreserve( + &channel_id.sender.into_account(), + sender_deposit.unique_saturated_into(), + ); + } + } else { + ::HrmpOpenChannelRequests::insert(&channel_id, request); } } } @@ -545,35 +562,49 @@ impl Module { } /// Iterate over all close channel requests unconditionally closing the channels. - pub(super) fn process_hrmp_close_channel_requests() { + fn process_hrmp_close_channel_requests() { let close_reqs = ::HrmpCloseChannelRequestsList::take(); for condemned_ch_id in close_reqs { ::HrmpCloseChannelRequests::remove(&condemned_ch_id); Self::close_hrmp_channel(&condemned_ch_id); - - // clean up the indexes. - ::HrmpEgressChannelsIndex::mutate(&condemned_ch_id.sender, |v| { - if let Ok(i) = v.binary_search(&condemned_ch_id.recipient) { - v.remove(i); - } - }); - ::HrmpIngressChannelsIndex::mutate(&condemned_ch_id.recipient, |v| { - if let Ok(i) = v.binary_search(&condemned_ch_id.sender) { - v.remove(i); - } - }); } } /// Close and remove the designated HRMP channel. /// - /// This includes returning the deposits. However, it doesn't include updating the ingress/egress - /// indicies. - pub(super) fn close_hrmp_channel(channel_id: &HrmpChannelId) { - // TODO: return deposit https://github.com/paritytech/polkadot/issues/1907 + /// This includes returning the deposits. + /// + /// This function is indempotent, meaning that after the first application it should have no + /// effect (i.e. it won't return the deposits twice). + fn close_hrmp_channel(channel_id: &HrmpChannelId) { + if let Some(HrmpChannel { + sender_deposit, + recipient_deposit, + .. + }) = ::HrmpChannels::take(channel_id) + { + T::Currency::unreserve( + &channel_id.sender.into_account(), + sender_deposit.unique_saturated_into(), + ); + T::Currency::unreserve( + &channel_id.recipient.into_account(), + recipient_deposit.unique_saturated_into(), + ); + } - ::HrmpChannels::remove(channel_id); ::HrmpChannelContents::remove(channel_id); + + ::HrmpEgressChannelsIndex::mutate(&channel_id.sender, |v| { + if let Ok(i) = v.binary_search(&channel_id.recipient) { + v.remove(i); + } + }); + ::HrmpIngressChannelsIndex::mutate(&channel_id.recipient, |v| { + if let Ok(i) = v.binary_search(&channel_id.sender) { + v.remove(i); + } + }); } /// Check that the candidate of the given recipient controls the HRMP watermark properly. @@ -845,7 +876,7 @@ impl Module { recipient: ParaId, proposed_max_capacity: u32, proposed_max_message_size: u32, - ) -> Result<(), Error> { + ) -> DispatchResult { ensure!(origin != recipient, Error::::OpenHrmpChannelToSelf); ensure!( >::is_valid_para(recipient), @@ -896,7 +927,10 @@ impl Module { Error::::OpenHrmpChannelLimitExceeded, ); - // TODO: Deposit https://github.com/paritytech/polkadot/issues/1907 + T::Currency::reserve( + &origin.into_account(), + config.hrmp_sender_deposit.unique_saturated_into(), + )?; ::HrmpOpenChannelRequestCount::insert(&origin, open_req_cnt + 1); ::HrmpOpenChannelRequests::insert( @@ -936,9 +970,9 @@ impl Module { /// Accept a pending open channel request from the given sender. /// - /// Basically the same as [`hrmp_accept_open_channel`](Module::hrmp_accept_open_channel) but intendend for calling directly from - /// other pallets rather than dispatched. - pub fn accept_open_channel(origin: ParaId, sender: ParaId) -> Result<(), Error> { + /// Basically the same as [`hrmp_accept_open_channel`](Module::hrmp_accept_open_channel) but + /// intendend for calling directly from other pallets rather than dispatched. + pub fn accept_open_channel(origin: ParaId, sender: ParaId) -> DispatchResult { let channel_id = HrmpChannelId { sender, recipient: origin, @@ -966,7 +1000,10 @@ impl Module { Error::::AcceptHrmpChannelLimitExceeded, ); - // TODO: Deposit https://github.com/paritytech/polkadot/issues/1907 + T::Currency::reserve( + &origin.into_account(), + config.hrmp_recipient_deposit.unique_saturated_into(), + )?; // persist the updated open channel request and then increment the number of accepted // channels. @@ -1086,14 +1123,16 @@ impl Module { mod tests { use super::*; use crate::mock::{ - new_test_ext, Configuration, Paras, Hrmp, System, GenesisConfig as MockGenesisConfig, + new_test_ext, Test, Configuration, Paras, Hrmp, System, GenesisConfig as MockGenesisConfig, }; + use frame_support::{assert_err, traits::Currency as _}; use primitives::v1::BlockNumber; use std::collections::{BTreeMap, HashSet}; fn run_to_block(to: BlockNumber, new_session: Option>) { use frame_support::traits::{OnFinalize as _, OnInitialize as _}; + let config = Configuration::config(); while System::block_number() < to { let b = System::block_number(); @@ -1102,9 +1141,15 @@ mod tests { Paras::initializer_finalize(); if new_session.as_ref().map_or(false, |v| v.contains(&(b + 1))) { + let notification = crate::initializer::SessionChangeNotification { + prev_config: config.clone(), + new_config: config.clone(), + ..Default::default() + }; + // NOTE: this is in initialization order. - Paras::initializer_on_new_session(&Default::default()); - Hrmp::initializer_on_new_session(&Default::default()); + Paras::initializer_on_new_session(¬ification); + Hrmp::initializer_on_new_session(¬ification); } System::on_finalize(b); @@ -1118,6 +1163,7 @@ mod tests { } } + #[derive(Debug)] struct GenesisConfigBuilder { hrmp_channel_max_capacity: u32, hrmp_channel_max_message_size: u32, @@ -1127,6 +1173,9 @@ mod tests { hrmp_max_parachain_inbound_channels: u32, hrmp_max_message_num_per_candidate: u32, hrmp_channel_max_total_size: u32, + hrmp_sender_deposit: Balance, + hrmp_recipient_deposit: Balance, + hrmp_open_request_ttl: u32, } impl Default for GenesisConfigBuilder { @@ -1140,6 +1189,9 @@ mod tests { hrmp_max_parachain_inbound_channels: 2, hrmp_max_message_num_per_candidate: 2, hrmp_channel_max_total_size: 16, + hrmp_sender_deposit: 100, + hrmp_recipient_deposit: 100, + hrmp_open_request_ttl: 3, } } } @@ -1157,6 +1209,9 @@ mod tests { config.hrmp_max_parachain_inbound_channels = self.hrmp_max_parachain_inbound_channels; config.hrmp_max_message_num_per_candidate = self.hrmp_max_message_num_per_candidate; config.hrmp_channel_max_total_size = self.hrmp_channel_max_total_size; + config.hrmp_sender_deposit = self.hrmp_sender_deposit; + config.hrmp_recipient_deposit = self.hrmp_recipient_deposit; + config.hrmp_open_request_ttl = self.hrmp_open_request_ttl; genesis } } @@ -1173,7 +1228,7 @@ mod tests { } } - fn register_parachain(id: ParaId) { + fn register_parachain_with_balance(id: ParaId, balance: Balance) { Paras::schedule_para_initialize( id, crate::paras::ParaGenesisArgs { @@ -1182,10 +1237,16 @@ mod tests { validation_code: vec![1].into(), }, ); + ::Currency::make_free_balance_be(&id.into_account(), balance); + } + + fn register_parachain(id: ParaId) { + register_parachain_with_balance(id, 1000); } fn deregister_parachain(id: ParaId) { Paras::schedule_para_cleanup(id); + Hrmp::schedule_para_cleanup(id); } fn channel_exists(sender: ParaId, recipient: ParaId) -> bool { @@ -1622,4 +1683,167 @@ mod tests { ); }); } + + #[test] + fn charging_deposits() { + let para_a = 32.into(); + let para_b = 64.into(); + + new_test_ext(GenesisConfigBuilder::default().build()).execute_with(|| { + register_parachain_with_balance(para_a, 0); + register_parachain(para_b); + run_to_block(5, Some(vec![5])); + + assert_err!( + Hrmp::init_open_channel(para_a, para_b, 2, 8), + pallet_balances::Error::::InsufficientBalance + ); + }); + + new_test_ext(GenesisConfigBuilder::default().build()).execute_with(|| { + register_parachain(para_a); + register_parachain_with_balance(para_b, 0); + run_to_block(5, Some(vec![5])); + + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + + assert_err!( + Hrmp::accept_open_channel(para_b, para_a), + pallet_balances::Error::::InsufficientBalance + ); + }); + } + + #[test] + fn refund_deposit_on_normal_closure() { + let para_a = 32.into(); + let para_b = 64.into(); + + let mut genesis = GenesisConfigBuilder::default(); + genesis.hrmp_sender_deposit = 20; + genesis.hrmp_recipient_deposit = 15; + new_test_ext(genesis.build()).execute_with(|| { + // Register two parachains funded with different amounts of funds and arrange a channel. + register_parachain_with_balance(para_a, 100); + register_parachain_with_balance(para_b, 110); + run_to_block(5, Some(vec![5])); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 80 + ); + assert_eq!( + ::Currency::free_balance(¶_b.into_account()), + 95 + ); + run_to_block(8, Some(vec![8])); + + // Now, we close the channel and wait until the next session. + Hrmp::close_channel( + para_b, + HrmpChannelId { + sender: para_a, + recipient: para_b, + }, + ) + .unwrap(); + run_to_block(10, Some(vec![10])); + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 100 + ); + assert_eq!( + ::Currency::free_balance(¶_b.into_account()), + 110 + ); + }); + } + + #[test] + fn refund_deposit_on_request_expiry() { + let para_a = 32.into(); + let para_b = 64.into(); + + let mut genesis = GenesisConfigBuilder::default(); + genesis.hrmp_sender_deposit = 20; + genesis.hrmp_recipient_deposit = 15; + genesis.hrmp_open_request_ttl = 2; + new_test_ext(genesis.build()).execute_with(|| { + // Register two parachains funded with different amounts of funds, send an open channel + // request but do not accept it. + register_parachain_with_balance(para_a, 100); + register_parachain_with_balance(para_b, 110); + run_to_block(5, Some(vec![5])); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 80 + ); + assert_eq!( + ::Currency::free_balance(¶_b.into_account()), + 110 + ); + + // Request age is 1 out of 2 + run_to_block(10, Some(vec![10])); + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 80 + ); + + // Request age is 2 out of 2. The request should expire. + run_to_block(20, Some(vec![20])); + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 100 + ); + }); + } + + #[test] + fn refund_deposit_on_offboarding() { + let para_a = 32.into(); + let para_b = 64.into(); + + let mut genesis = GenesisConfigBuilder::default(); + genesis.hrmp_sender_deposit = 20; + genesis.hrmp_recipient_deposit = 15; + new_test_ext(genesis.build()).execute_with(|| { + // Register two parachains and open a channel between them. + register_parachain_with_balance(para_a, 100); + register_parachain_with_balance(para_b, 110); + run_to_block(5, Some(vec![5])); + Hrmp::init_open_channel(para_a, para_b, 2, 8).unwrap(); + Hrmp::accept_open_channel(para_b, para_a).unwrap(); + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 80 + ); + assert_eq!( + ::Currency::free_balance(¶_b.into_account()), + 95 + ); + run_to_block(8, Some(vec![8])); + assert!(channel_exists(para_a, para_b)); + + // Then deregister one parachain. + deregister_parachain(para_a); + run_to_block(10, Some(vec![10])); + + // The channel should be removed. + assert!(!Paras::is_valid_para(para_a)); + assert!(!channel_exists(para_a, para_b)); + assert_storage_consistency_exhaustive(); + + assert_eq!( + ::Currency::free_balance(¶_a.into_account()), + 100 + ); + assert_eq!( + ::Currency::free_balance(¶_b.into_account()), + 110 + ); + }); + } } diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 7ae33c01b3..b219a70a2d 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -21,7 +21,7 @@ use sp_core::H256; use sp_runtime::traits::{ BlakeTwo256, IdentityLookup, }; -use primitives::v1::{AuthorityDiscoveryId, BlockNumber, Header, ValidatorIndex}; +use primitives::v1::{AuthorityDiscoveryId, Balance, BlockNumber, Header, ValidatorIndex}; use frame_support::{ impl_outer_origin, impl_outer_dispatch, impl_outer_event, parameter_types, traits::Randomness as RandomnessT, @@ -50,6 +50,7 @@ impl_outer_dispatch! { impl_outer_event! { pub enum TestEvent for Test { frame_system, + pallet_balances, inclusion, } } @@ -93,6 +94,20 @@ impl frame_system::Config for Test { type SS58Prefix = (); } +parameter_types! { + pub static ExistentialDeposit: u64 = 0; +} + +impl pallet_balances::Config for Test { + type MaxLocks = (); + type Balance = Balance; + type Event = TestEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); +} + impl crate::initializer::Config for Test { type Randomness = TestRandomness; } @@ -111,6 +126,7 @@ impl crate::ump::Config for Test { impl crate::hrmp::Config for Test { type Origin = Origin; + type Currency = pallet_balances::Module; } impl crate::scheduler::Config for Test { } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index d03c7bca4d..6ae369c307 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -562,6 +562,7 @@ impl parachains_dmp::Config for Runtime {} impl parachains_hrmp::Config for Runtime { type Origin = Origin; + type Currency = Balances; } impl parachains_inclusion_inherent::Config for Runtime {} diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 58b0df5dff..30545a3da9 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -473,6 +473,7 @@ impl parachains_ump::Config for Runtime { impl parachains_hrmp::Config for Runtime { type Origin = Origin; + type Currency = Balances; } impl parachains_scheduler::Config for Runtime {} -- GitLab From e3676fdce08c6c41552a2ed0c3095b81693de89a Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Wed, 13 Jan 2021 17:40:27 +0100 Subject: [PATCH 195/203] metered mpsc channels (#2235) --- Cargo.lock | 11 ++ Cargo.toml | 1 + node/metered-channel/Cargo.toml | 14 ++ node/metered-channel/src/bounded.rs | 178 +++++++++++++++++++++++++ node/metered-channel/src/lib.rs | 150 +++++++++++++++++++++ node/metered-channel/src/unbounded.rs | 179 ++++++++++++++++++++++++++ node/network/bridge/Cargo.toml | 1 + node/network/bridge/src/lib.rs | 8 +- node/overseer/src/lib.rs | 157 ++++++++++++++-------- node/subsystem-util/Cargo.toml | 1 + node/subsystem-util/src/lib.rs | 100 +++++++++++++- 11 files changed, 744 insertions(+), 56 deletions(-) create mode 100644 node/metered-channel/Cargo.toml create mode 100644 node/metered-channel/src/bounded.rs create mode 100644 node/metered-channel/src/lib.rs create mode 100644 node/metered-channel/src/unbounded.rs diff --git a/Cargo.lock b/Cargo.lock index 8ba8bad1f6..776ab22e4c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3475,6 +3475,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "metered-channel" +version = "0.1.0" +dependencies = [ + "assert_matches", + "futures 0.3.8", + "futures-timer 3.0.2", +] + [[package]] name = "mick-jaeger" version = "0.1.4" @@ -5013,6 +5022,7 @@ dependencies = [ "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", + "polkadot-node-subsystem-util", "polkadot-primitives", "sc-authority-discovery", "sc-network", @@ -5315,6 +5325,7 @@ dependencies = [ "futures 0.3.8", "futures-timer 3.0.2", "log", + "metered-channel", "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.4", diff --git a/Cargo.toml b/Cargo.toml index 972a07ba58..a69f8afab4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,6 +66,7 @@ members = [ "node/subsystem-test-helpers", "node/subsystem-util", "node/jaeger", + "node/metered-channel", "node/test/client", "node/test/service", "parachain/test-parachains", diff --git a/node/metered-channel/Cargo.toml b/node/metered-channel/Cargo.toml new file mode 100644 index 0000000000..0194c31e07 --- /dev/null +++ b/node/metered-channel/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "metered-channel" +version = "0.1.0" +authors = ["Parity Technologies "] +edition = "2018" +description = "Channels with attached Meters" + +[dependencies] +futures = "0.3.8" +futures-timer = "3.0.2" + +[dev-dependencies] +assert_matches = "1.4.0" +futures = { version = "0.3.8", features = ["thread-pool"] } diff --git a/node/metered-channel/src/bounded.rs b/node/metered-channel/src/bounded.rs new file mode 100644 index 0000000000..82740266a8 --- /dev/null +++ b/node/metered-channel/src/bounded.rs @@ -0,0 +1,178 @@ +// Copyright 2017-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Metered variant of bounded mpsc channels to be able to extract metrics. + +use super::*; + +/// Create a wrapped `mpsc::channel` pair of `MeteredSender` and `MeteredReceiver`. +pub fn channel(capacity: usize, name: &'static str) -> (MeteredSender, MeteredReceiver) { + let (tx, rx) = mpsc::channel(capacity); + let mut shared_meter = Meter::default(); + shared_meter.name = name; + let tx = MeteredSender { meter: shared_meter.clone(), inner: tx }; + let rx = MeteredReceiver { meter: shared_meter, inner: rx }; + (tx, rx) +} + +/// A receiver tracking the messages consumed by itself. +#[derive(Debug)] +pub struct MeteredReceiver { + // count currently contained messages + meter: Meter, + inner: mpsc::Receiver, +} + +impl std::ops::Deref for MeteredReceiver { + type Target = mpsc::Receiver; + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl std::ops::DerefMut for MeteredReceiver { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl Stream for MeteredReceiver { + type Item = T; + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match mpsc::Receiver::poll_next(Pin::new(&mut self.inner), cx) { + Poll::Ready(x) => { + // always use Ordering::SeqCst to avoid underflows + self.meter.fill.fetch_sub(1, Ordering::SeqCst); + Poll::Ready(x) + } + other => other, + } + } + + /// Don't rely on the unreliable size hint. + fn size_hint(&self) -> (usize, Option) { + self.inner.size_hint() + } +} + +impl MeteredReceiver { + /// Get an updated accessor object for all metrics collected. + pub fn meter(&self) -> &Meter { + &self.meter + } + + /// Attempt to receive the next item. + pub fn try_next(&mut self) -> Result, mpsc::TryRecvError> { + match self.inner.try_next()? { + Some(x) => { + self.meter.fill.fetch_sub(1, Ordering::SeqCst); + Ok(Some(x)) + } + None => Ok(None), + } + } +} + +impl futures::stream::FusedStream for MeteredReceiver { + fn is_terminated(&self) -> bool { + self.inner.is_terminated() + } +} + + +/// The sender component, tracking the number of items +/// sent across it. +#[derive(Debug)] +pub struct MeteredSender { + meter: Meter, + inner: mpsc::Sender, +} + +impl Clone for MeteredSender { + fn clone(&self) -> Self { + Self { meter: self.meter.clone(), inner: self.inner.clone() } + } +} + +impl std::ops::Deref for MeteredSender { + type Target = mpsc::Sender; + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl std::ops::DerefMut for MeteredSender { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl MeteredSender { + /// Get an updated accessor object for all metrics collected. + pub fn meter(&self) -> &Meter { + &self.meter + } + + /// Send message, wait until capacity is available. + pub async fn send(&mut self, item: T) -> result::Result<(), mpsc::SendError> + where + Self: Unpin, + { + self.meter.fill.fetch_add(1, Ordering::SeqCst); + let fut = self.inner.send(item); + futures::pin_mut!(fut); + fut.await + } + + /// Attempt to send message or fail immediately. + pub fn try_send(&mut self, msg: T) -> result::Result<(), mpsc::TrySendError> { + self.inner.try_send(msg)?; + self.meter.fill.fetch_add(1, Ordering::SeqCst); + Ok(()) + } +} + +impl futures::sink::Sink for MeteredSender { + type Error = mpsc::SendError; + + fn start_send(mut self: Pin<&mut Self>, item: T) -> Result<(), Self::Error> { + Pin::new(&mut self.inner).start_send(item) + } + + fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.inner).poll_ready(cx) + } + + fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match Pin::new(&mut self.inner).poll_close(cx) { + val @ Poll::Ready(_)=> { + self.meter.fill.store(0, Ordering::SeqCst); + val + } + other => other, + } + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match Pin::new(&mut self.inner).poll_flush(cx) { + val @ Poll::Ready(_)=> { + self.meter.fill.fetch_add(1, Ordering::SeqCst); + val + } + other => other, + } + } +} diff --git a/node/metered-channel/src/lib.rs b/node/metered-channel/src/lib.rs new file mode 100644 index 0000000000..b7188689b0 --- /dev/null +++ b/node/metered-channel/src/lib.rs @@ -0,0 +1,150 @@ +// Copyright 2017-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Metered variant of mpsc channels to be able to extract metrics. + +use std::sync::atomic::{AtomicUsize, Ordering}; + +use futures::{channel::mpsc, task::Poll, task::Context, sink::SinkExt, stream::Stream}; + +use std::result; +use std::sync::Arc; +use std::pin::Pin; + +mod bounded; +mod unbounded; + +pub use self::bounded::*; +pub use self::unbounded::*; + +/// A peek into the inner state of a meter. +#[derive(Debug, Clone, Default)] +pub struct Meter { + /// Name of the receiver and sender pair. + name: &'static str, + // fill state of the channel + fill: Arc, +} + +impl Meter { + /// Count the number of items queued up inside the channel. + pub fn queue_count(&self) -> usize { + // when obtaining we don't care much about off by one + // accuracy + self.fill.load(Ordering::Relaxed) + } + + /// Obtain the name of the channel `Sender` and `Receiver` pair. + pub fn name(&self) -> &'static str { + self.name + } +} + +#[cfg(test)] +mod tests { + use super::*; + use futures::executor::block_on; + use futures::StreamExt; + + #[derive(Clone, Copy, Debug, Default)] + struct Msg { + val: u8, + } + + #[test] + fn try_send_try_next() { + block_on(async move { + let (mut tx, mut rx) = channel::(5, "goofy"); + let msg = Msg::default(); + assert_eq!(rx.meter().queue_count(), 0); + tx.try_send(msg).unwrap(); + assert_eq!(tx.meter().queue_count(), 1); + tx.try_send(msg).unwrap(); + tx.try_send(msg).unwrap(); + tx.try_send(msg).unwrap(); + assert_eq!(tx.meter().queue_count(), 4); + rx.try_next().unwrap(); + assert_eq!(rx.meter().queue_count(), 3); + rx.try_next().unwrap(); + rx.try_next().unwrap(); + assert_eq!(tx.meter().queue_count(), 1); + rx.try_next().unwrap(); + assert_eq!(rx.meter().queue_count(), 0); + assert!(rx.try_next().is_err()); + }); + } + + #[test] + fn with_tasks() { + let (ready, go) = futures::channel::oneshot::channel(); + + let (mut tx, mut rx) = channel::(5, "goofy"); + block_on(async move { + futures::join!( + async move { + let msg = Msg::default(); + assert_eq!(tx.meter().queue_count(), 0); + tx.try_send(msg).unwrap(); + assert_eq!(tx.meter().queue_count(), 1); + tx.try_send(msg).unwrap(); + tx.try_send(msg).unwrap(); + tx.try_send(msg).unwrap(); + ready.send(()).expect("Helper oneshot channel must work. qed"); + }, + async move { + go.await.expect("Helper oneshot channel must work. qed"); + assert_eq!(rx.meter().queue_count(), 4); + rx.try_next().unwrap(); + assert_eq!(rx.meter().queue_count(), 3); + rx.try_next().unwrap(); + rx.try_next().unwrap(); + assert_eq!(rx.meter().queue_count(), 1); + rx.try_next().unwrap(); + assert_eq!(dbg!(rx.meter().queue_count()), 0); + } + ) + }); + } + + use std::time::Duration; + use futures_timer::Delay; + + #[test] + fn stream_and_sink() { + let (mut tx, mut rx) = channel::(5, "goofy"); + + block_on(async move { + futures::join!( + async move { + for i in 0..15 { + println!("Sent #{} with a backlog of {} items", i + 1, tx.meter().queue_count()); + let msg = Msg { val: i as u8 + 1u8 }; + tx.send(msg).await.unwrap(); + assert!(tx.meter().queue_count() > 0usize); + Delay::new(Duration::from_millis(20)).await; + } + () + }, + async move { + while let Some(msg) = rx.next().await { + println!("rx'd one {} with {} backlogged", msg.val, rx.meter().queue_count()); + Delay::new(Duration::from_millis(29)).await; + } + } + ) + }); + } +} diff --git a/node/metered-channel/src/unbounded.rs b/node/metered-channel/src/unbounded.rs new file mode 100644 index 0000000000..1a58ac6f1c --- /dev/null +++ b/node/metered-channel/src/unbounded.rs @@ -0,0 +1,179 @@ +// Copyright 2017-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Metered variant of unbounded mpsc channels to be able to extract metrics. + +use super::*; + +/// Create a wrapped `mpsc::channel` pair of `MeteredSender` and `MeteredReceiver`. +pub fn unbounded(name: &'static str) -> (UnboundedMeteredSender, UnboundedMeteredReceiver) { + let (tx, rx) = mpsc::unbounded(); + let mut shared_meter = Meter::default(); + shared_meter.name = name; + let tx = UnboundedMeteredSender { meter: shared_meter.clone(), inner: tx }; + let rx = UnboundedMeteredReceiver { meter: shared_meter, inner: rx }; + (tx, rx) +} + +/// A receiver tracking the messages consumed by itself. +#[derive(Debug)] +pub struct UnboundedMeteredReceiver { + // count currently contained messages + meter: Meter, + inner: mpsc::UnboundedReceiver, +} + +impl std::ops::Deref for UnboundedMeteredReceiver { + type Target = mpsc::UnboundedReceiver; + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl std::ops::DerefMut for UnboundedMeteredReceiver { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl Stream for UnboundedMeteredReceiver { + type Item = T; + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match mpsc::UnboundedReceiver::poll_next(Pin::new(&mut self.inner), cx) { + Poll::Ready(x) => { + // always use Ordering::SeqCst to avoid underflows + self.meter.fill.fetch_sub(1, Ordering::SeqCst); + Poll::Ready(x) + } + other => other, + } + } + + /// Don't rely on the unreliable size hint. + fn size_hint(&self) -> (usize, Option) { + self.inner.size_hint() + } +} + +impl UnboundedMeteredReceiver { + /// Get an updated accessor object for all metrics collected. + pub fn meter(&self) -> &Meter { + &self.meter + } + + /// Attempt to receive the next item. + pub fn try_next(&mut self) -> Result, mpsc::TryRecvError> { + match self.inner.try_next()? { + Some(x) => { + self.meter.fill.fetch_sub(1, Ordering::SeqCst); + Ok(Some(x)) + } + None => Ok(None), + } + } +} + +impl futures::stream::FusedStream for UnboundedMeteredReceiver { + fn is_terminated(&self) -> bool { + self.inner.is_terminated() + } +} + + +/// The sender component, tracking the number of items +/// sent across it. +#[derive(Debug)] +pub struct UnboundedMeteredSender { + meter: Meter, + inner: mpsc::UnboundedSender, +} + +impl Clone for UnboundedMeteredSender { + fn clone(&self) -> Self { + Self { meter: self.meter.clone(), inner: self.inner.clone() } + } +} + +impl std::ops::Deref for UnboundedMeteredSender { + type Target = mpsc::UnboundedSender; + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl std::ops::DerefMut for UnboundedMeteredSender { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl UnboundedMeteredSender { + /// Get an updated accessor object for all metrics collected. + pub fn meter(&self) -> &Meter { + &self.meter + } + + /// Send message, wait until capacity is available. + pub async fn send(&mut self, item: T) -> result::Result<(), mpsc::SendError> + where + Self: Unpin, + { + self.meter.fill.fetch_add(1, Ordering::SeqCst); + let fut = self.inner.send(item); + futures::pin_mut!(fut); + fut.await + } + + + /// Attempt to send message or fail immediately. + pub fn unbounded_send(&mut self, msg: T) -> result::Result<(), mpsc::TrySendError> { + self.inner.unbounded_send(msg).expect("Unbounded send never fails. qed"); + self.meter.fill.fetch_add(1, Ordering::SeqCst); + Ok(()) + } +} + +impl futures::sink::Sink for UnboundedMeteredSender { + type Error = as futures::sink::Sink>::Error; + + fn start_send(mut self: Pin<&mut Self>, item: T) -> Result<(), Self::Error> { + Pin::new(&mut self.inner).start_send(item) + } + + fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.inner).poll_ready(cx) + } + + fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match Pin::new(&mut self.inner).poll_ready(cx) { + val @ Poll::Ready(_)=> { + self.meter.fill.store(0, Ordering::SeqCst); + val + } + other => other, + } + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + match Pin::new(&mut self.inner).poll_ready(cx) { + val @ Poll::Ready(_)=> { + self.meter.fill.fetch_add(1, Ordering::SeqCst); + val + } + other => other, + } + } +} diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 2d3d214f02..0e6d299420 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -20,5 +20,6 @@ polkadot-node-network-protocol = { path = "../protocol" } assert_matches = "1.4.0" parking_lot = "0.11.1" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } +polkadot-node-subsystem-util = { path = "../../subsystem-util"} sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index a015947912..3512ee48ee 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -791,7 +791,6 @@ where #[cfg(test)] mod tests { use super::*; - use futures::channel::mpsc; use futures::executor; use std::borrow::Cow; @@ -805,6 +804,7 @@ mod tests { use polkadot_node_subsystem_test_helpers::{ SingleItemSink, SingleItemStream, TestSubsystemContextHandle, }; + use polkadot_node_subsystem_util::metered; use polkadot_node_network_protocol::view; use sc_network::Multiaddr; use sp_keyring::Sr25519Keyring; @@ -812,7 +812,7 @@ mod tests { // The subsystem's view of the network - only supports a single call to `event_stream`. struct TestNetwork { net_events: Arc>>>, - action_tx: mpsc::UnboundedSender, + action_tx: metered::UnboundedMeteredSender, } struct TestAuthorityDiscovery; @@ -820,7 +820,7 @@ mod tests { // The test's view of the network. This receives updates from the subsystem in the form // of `NetworkAction`s. struct TestNetworkHandle { - action_rx: mpsc::UnboundedReceiver, + action_rx: metered::UnboundedMeteredReceiver, net_tx: SingleItemSink, } @@ -830,7 +830,7 @@ mod tests { TestAuthorityDiscovery, ) { let (net_tx, net_rx) = polkadot_node_subsystem_test_helpers::single_item_sink(); - let (action_tx, action_rx) = mpsc::unbounded(); + let (action_tx, action_rx) = metered::unbounded("test_action"); ( TestNetwork { diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 598f4121c7..d61b883386 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -66,12 +66,12 @@ use std::task::Poll; use std::time::Duration; use std::collections::{hash_map, HashMap}; -use futures::channel::{mpsc, oneshot}; +use futures::channel::{oneshot, mpsc}; use futures::{ poll, select, future::BoxFuture, stream::{FuturesUnordered, Fuse}, - Future, FutureExt, SinkExt, StreamExt, + Future, FutureExt, StreamExt, }; use futures_timer::Delay; use oorandom::Rand32; @@ -90,7 +90,7 @@ pub use polkadot_subsystem::{ Subsystem, SubsystemContext, OverseerSignal, FromOverseer, SubsystemError, SubsystemResult, SpawnedSubsystem, ActiveLeavesUpdate, DummySubsystem, JaegerSpan, jaeger, }; -use polkadot_node_subsystem_util::{TimeoutExt, metrics::{self, prometheus}}; +use polkadot_node_subsystem_util::{TimeoutExt, metrics::{self, prometheus}, metered, Metronome}; use polkadot_node_primitives::SpawnNamed; // A capacity of bounded channels inside the overseer. @@ -102,6 +102,8 @@ const LOG_TARGET: &'static str = "overseer"; // Rate at which messages are timed. const MESSAGE_TIMER_METRIC_CAPTURE_RATE: f64 = 0.005; + + /// A type of messages that are sent from [`Subsystem`] to [`Overseer`]. /// /// It wraps a system-wide [`AllMessages`] type that represents all possible @@ -188,7 +190,7 @@ enum ExternalRequest { /// [`Overseer`]: struct.Overseer.html #[derive(Clone)] pub struct OverseerHandler { - events_tx: mpsc::Sender, + events_tx: metered::MeteredSender, } impl OverseerHandler { @@ -289,7 +291,7 @@ impl Debug for ToOverseer { /// /// [`Subsystem`]: trait.Subsystem.html struct SubsystemInstance { - tx: mpsc::Sender>, + tx: metered::MeteredSender>, name: &'static str, } @@ -322,8 +324,8 @@ impl From for MaybeTimed { /// [`SubsystemJob`]: trait.SubsystemJob.html #[derive(Debug)] pub struct OverseerSubsystemContext{ - rx: mpsc::Receiver>, - tx: mpsc::UnboundedSender>, + rx: metered::MeteredReceiver>, + tx: metered::UnboundedMeteredSender>, metrics: Metrics, rng: Rand32, threshold: u32, @@ -338,8 +340,8 @@ impl OverseerSubsystemContext { /// `capture_rate` determines what fraction of messages are timed. Its value is clamped /// to the range `0.0..=1.0`. fn new( - rx: mpsc::Receiver>, - tx: mpsc::UnboundedSender>, + rx: metered::MeteredReceiver>, + tx: metered::UnboundedMeteredSender>, metrics: Metrics, increment: u64, mut capture_rate: f64, @@ -361,8 +363,8 @@ impl OverseerSubsystemContext { /// Intended for tests. #[allow(unused)] fn new_unmetered( - rx: mpsc::Receiver>, - tx: mpsc::UnboundedSender>, + rx: metered::MeteredReceiver>, + tx: metered::UnboundedMeteredSender>, ) -> Self { let metrics = Metrics::default(); OverseerSubsystemContext::new(rx, tx, metrics, 0, 0.0) @@ -559,10 +561,10 @@ pub struct Overseer { running_subsystems: FuturesUnordered>>, /// Gather running subsystems' outbound streams into one. - to_overseer_rx: Fuse>>, + to_overseer_rx: Fuse>>, /// Events that are sent to the overseer from the outside world - events_rx: mpsc::Receiver, + events_rx: metered::MeteredReceiver, /// External listeners waiting for a hash to be in the active-leave set. activation_external_listeners: HashMap>>>, @@ -1045,6 +1047,8 @@ struct MetricsInner { deactivated_heads_total: prometheus::Counter, messages_relayed_total: prometheus::Counter, message_relay_timing: prometheus::Histogram, + channel_fill_level_to_overseer: prometheus::Histogram, + channel_fill_level_from_overseer: prometheus::Histogram, } #[derive(Default, Clone)] @@ -1073,6 +1077,11 @@ impl Metrics { fn time_message_hold(&self) -> MaybeTimer { self.0.as_ref().map(|metrics| metrics.message_relay_timing.start_timer()) } + + fn channel_fill_level_snapshot(&self, from_overseer: usize, to_overseer: usize) { + self.0.as_ref().map(|metrics| metrics.channel_fill_level_to_overseer.observe(to_overseer as f64)); + self.0.as_ref().map(|metrics| metrics.channel_fill_level_from_overseer.observe(from_overseer as f64)); + } } impl metrics::Metrics for Metrics { @@ -1121,6 +1130,30 @@ impl metrics::Metrics for Metrics { )?, registry, )?, + channel_fill_level_from_overseer: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts { + common_opts: prometheus::Opts::new( + "overseer_channel_fill_level_from_overseer", + "Number of elements sitting in the channel waiting to be processed.", + ), + buckets: prometheus::exponential_buckets(0.00001_f64, 2_f64, (CHANNEL_CAPACITY as f64).log2().ceil() as usize).expect("inputs are within documented range; qed"), + } + )?, + registry, + )?, + channel_fill_level_to_overseer: prometheus::register( + prometheus::Histogram::with_opts( + prometheus::HistogramOpts { + common_opts: prometheus::Opts::new( + "overseer_channel_fill_level_to_overseer", + "Number of elements sitting in the channel waiting to be processed.", + ), + buckets: prometheus::exponential_buckets(0.00001_f64, 2_f64, (CHANNEL_CAPACITY as f64).log2().ceil() as usize).expect("inputs are within documented range; qed"), + } + )?, + registry, + )?, }; Ok(Metrics(Some(metrics))) } @@ -1242,7 +1275,7 @@ where CG: Subsystem> + Send, CP: Subsystem> + Send, { - let (events_tx, events_rx) = mpsc::channel(CHANNEL_CAPACITY); + let (events_tx, events_rx) = metered::channel(CHANNEL_CAPACITY, "overseer_events"); let handler = OverseerHandler { events_tx: events_tx.clone(), @@ -1250,7 +1283,23 @@ where let metrics = ::register(prometheus_registry)?; - let (to_overseer_tx, to_overseer_rx) = mpsc::unbounded(); + let (to_overseer_tx, to_overseer_rx) = metered::unbounded("to_overseer"); + + { + let meter_from_overseer = events_rx.meter().clone(); + let meter_to_overseer = to_overseer_rx.meter().clone(); + let metronome_metrics = metrics.clone(); + let metronome = Metronome::new(std::time::Duration::from_millis(137)) + .for_each(move |_| { + metronome_metrics.channel_fill_level_snapshot(meter_from_overseer.queue_count(), meter_to_overseer.queue_count()); + + async move { + () + } + }); + s.spawn("metrics_metronome", Box::pin(metronome)); + } + let mut running_subsystems = FuturesUnordered::new(); let mut seed = 0x533d; // arbitrary @@ -1258,7 +1307,7 @@ where let candidate_validation_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.candidate_validation, &metrics, &mut seed, @@ -1267,7 +1316,7 @@ where let candidate_backing_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.candidate_backing, &metrics, &mut seed, @@ -1276,7 +1325,7 @@ where let candidate_selection_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.candidate_selection, &metrics, &mut seed, @@ -1285,7 +1334,7 @@ where let statement_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.statement_distribution, &metrics, &mut seed, @@ -1294,7 +1343,7 @@ where let availability_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.availability_distribution, &metrics, &mut seed, @@ -1303,7 +1352,7 @@ where let bitfield_signing_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.bitfield_signing, &metrics, &mut seed, @@ -1312,7 +1361,7 @@ where let bitfield_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.bitfield_distribution, &metrics, &mut seed, @@ -1321,7 +1370,7 @@ where let provisioner_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.provisioner, &metrics, &mut seed, @@ -1330,7 +1379,7 @@ where let pov_distribution_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.pov_distribution, &metrics, &mut seed, @@ -1339,7 +1388,7 @@ where let runtime_api_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.runtime_api, &metrics, &mut seed, @@ -1348,7 +1397,7 @@ where let availability_store_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.availability_store, &metrics, &mut seed, @@ -1357,7 +1406,7 @@ where let network_bridge_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.network_bridge, &metrics, &mut seed, @@ -1366,7 +1415,7 @@ where let chain_api_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.chain_api, &metrics, &mut seed, @@ -1375,7 +1424,7 @@ where let collation_generation_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.collation_generation, &metrics, &mut seed, @@ -1385,7 +1434,7 @@ where let collator_protocol_subsystem = spawn( &mut s, &mut running_subsystems, - to_overseer_tx.clone(), + metered::UnboundedMeteredSender::<_>::clone(&to_overseer_tx), all_subsystems.collator_protocol, &metrics, &mut seed, @@ -1735,12 +1784,12 @@ where fn spawn( spawner: &mut S, futures: &mut FuturesUnordered>>, - to_overseer: mpsc::UnboundedSender>, + to_overseer: metered::UnboundedMeteredSender>, s: impl Subsystem>, metrics: &Metrics, seed: &mut u64, ) -> SubsystemResult> { - let (to_tx, to_rx) = mpsc::channel(CHANNEL_CAPACITY); + let (to_tx, to_rx) = metered::channel(CHANNEL_CAPACITY, "subsystem_spawn"); let ctx = OverseerSubsystemContext::new( to_rx, to_overseer, @@ -1783,18 +1832,19 @@ fn spawn( mod tests { use std::sync::atomic; use std::collections::HashMap; - use futures::{executor, pin_mut, select, channel::mpsc, FutureExt, pending}; + use futures::{executor, pin_mut, select, FutureExt, pending}; use polkadot_primitives::v1::{BlockData, CollatorPair, PoV, CandidateHash}; use polkadot_subsystem::{messages::RuntimeApiRequest, JaegerSpan}; use polkadot_node_primitives::{Collation, CollationGenerationConfig}; use polkadot_node_network_protocol::{PeerId, ReputationChange, NetworkBridgeEvent}; + use polkadot_node_subsystem_util::metered; use sp_core::crypto::Pair as _; use super::*; - struct TestSubsystem1(mpsc::Sender); + struct TestSubsystem1(metered::MeteredSender); impl Subsystem for TestSubsystem1 where C: SubsystemContext @@ -1822,7 +1872,7 @@ mod tests { } } - struct TestSubsystem2(mpsc::Sender); + struct TestSubsystem2(metered::MeteredSender); impl Subsystem for TestSubsystem2 where C: SubsystemContext @@ -1893,8 +1943,11 @@ mod tests { let spawner = sp_core::testing::TaskExecutor::new(); executor::block_on(async move { - let (s1_tx, mut s1_rx) = mpsc::channel::(64); - let (s2_tx, mut s2_rx) = mpsc::channel::(64); + let (s1_tx, s1_rx) = metered::channel::(64, "overseer_test"); + let (s2_tx, s2_rx) = metered::channel::(64, "overseer_test"); + + let mut s1_rx = s1_rx.fuse(); + let mut s2_rx = s2_rx.fuse(); let all_subsystems = AllSubsystems::<()>::dummy() .replace_candidate_validation(TestSubsystem1(s1_tx)) @@ -1999,13 +2052,15 @@ mod tests { fn extract_metrics(registry: &prometheus::Registry) -> HashMap<&'static str, u64> { let gather = registry.gather(); - assert_eq!(gather[0].get_name(), "overseer_messages_relay_timing"); - assert_eq!(gather[1].get_name(), "parachain_activated_heads_total"); - assert_eq!(gather[2].get_name(), "parachain_deactivated_heads_total"); - assert_eq!(gather[3].get_name(), "parachain_messages_relayed_total"); - let activated = gather[1].get_metric()[0].get_counter().get_value() as u64; - let deactivated = gather[2].get_metric()[0].get_counter().get_value() as u64; - let relayed = gather[3].get_metric()[0].get_counter().get_value() as u64; + assert_eq!(gather[0].get_name(), "overseer_channel_fill_level_from_overseer"); + assert_eq!(gather[1].get_name(), "overseer_channel_fill_level_to_overseer"); + assert_eq!(gather[2].get_name(), "overseer_messages_relay_timing"); + assert_eq!(gather[3].get_name(), "parachain_activated_heads_total"); + assert_eq!(gather[4].get_name(), "parachain_deactivated_heads_total"); + assert_eq!(gather[5].get_name(), "parachain_messages_relayed_total"); + let activated = gather[3].get_metric()[0].get_counter().get_value() as u64; + let deactivated = gather[4].get_metric()[0].get_counter().get_value() as u64; + let relayed = gather[5].get_metric()[0].get_counter().get_value() as u64; let mut result = HashMap::new(); result.insert("activated", activated); result.insert("deactivated", deactivated); @@ -2034,7 +2089,7 @@ mod tests { }) } - struct TestSubsystem5(mpsc::Sender); + struct TestSubsystem5(metered::MeteredSender); impl Subsystem for TestSubsystem5 where C: SubsystemContext @@ -2065,7 +2120,7 @@ mod tests { } } - struct TestSubsystem6(mpsc::Sender); + struct TestSubsystem6(metered::MeteredSender); impl Subsystem for TestSubsystem6 where C: SubsystemContext @@ -2123,8 +2178,8 @@ mod tests { number: 3, }; - let (tx_5, mut rx_5) = mpsc::channel(64); - let (tx_6, mut rx_6) = mpsc::channel(64); + let (tx_5, mut rx_5) = metered::channel(64, "overseer_test"); + let (tx_6, mut rx_6) = metered::channel(64, "overseer_test"); let all_subsystems = AllSubsystems::<()>::dummy() .replace_candidate_validation(TestSubsystem5(tx_5)) .replace_candidate_backing(TestSubsystem6(tx_6)); @@ -2216,8 +2271,8 @@ mod tests { number: 3, }; - let (tx_5, mut rx_5) = mpsc::channel(64); - let (tx_6, mut rx_6) = mpsc::channel(64); + let (tx_5, mut rx_5) = metered::channel(64, "overseer_test"); + let (tx_6, mut rx_6) = metered::channel(64, "overseer_test"); let all_subsystems = AllSubsystems::<()>::dummy() .replace_candidate_validation(TestSubsystem5(tx_5)) @@ -2308,7 +2363,7 @@ mod tests { number: 1, }; - let (tx_5, mut rx_5) = mpsc::channel(64); + let (tx_5, mut rx_5) = metered::channel(64, "overseer_test"); let all_subsystems = AllSubsystems::<()>::dummy() .replace_candidate_backing(TestSubsystem6(tx_5)); diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 57fb5a8b7e..b74c656d98 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -21,6 +21,7 @@ polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } polkadot-node-jaeger = { path = "../jaeger" } polkadot-primitives = { path = "../../primitives" } +metered-channel = { path = "../metered-channel"} sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-util/src/lib.rs b/node/subsystem-util/src/lib.rs index e9fd475f10..9ce1258e8a 100644 --- a/node/subsystem-util/src/lib.rs +++ b/node/subsystem-util/src/lib.rs @@ -50,6 +50,7 @@ use streamunordered::{StreamUnordered, StreamYield}; use thiserror::Error; pub mod validator_discovery; +pub use metered_channel as metered; /// These reexports are required so that external crates can use the `delegated_subsystem` macro properly. pub mod reexports { @@ -987,9 +988,64 @@ impl Future for Timeout { } } + +#[derive(Copy, Clone)] +enum MetronomeState { + Snooze, + SetAlarm, +} + +/// Create a stream of ticks with a defined cycle duration. +pub struct Metronome { + delay: Delay, + period: Duration, + state: MetronomeState, +} + +impl Metronome +{ + /// Create a new metronome source with a defined cycle duration. + pub fn new(cycle: Duration) -> Self { + let period = cycle.into(); + Self { + period, + delay: Delay::new(period), + state: MetronomeState::Snooze, + } + } +} + +impl futures::Stream for Metronome +{ + type Item = (); + fn poll_next( + mut self: Pin<&mut Self>, + cx: &mut Context<'_> + ) -> Poll> { + loop { + match self.state { + MetronomeState::SetAlarm => { + let val = self.period.clone(); + self.delay.reset(val); + self.state = MetronomeState::Snooze; + } + MetronomeState::Snooze => { + if !Pin::new(&mut self.delay).poll(cx).is_ready() { + break + } + self.state = MetronomeState::SetAlarm; + return Poll::Ready(Some(())); + } + } + } + Poll::Pending + } +} + #[cfg(test)] mod tests { use super::*; + use executor::block_on; use thiserror::Error; use polkadot_node_subsystem::{ messages::{AllMessages, CandidateSelectionMessage}, ActiveLeavesUpdate, FromOverseer, OverseerSignal, @@ -999,7 +1055,7 @@ mod tests { use futures::{channel::mpsc, executor, StreamExt, future, Future, FutureExt, SinkExt}; use polkadot_primitives::v1::Hash; use polkadot_node_subsystem_test_helpers::{self as test_helpers, make_subsystem_context}; - use std::{pin::Pin, time::Duration, sync::Arc}; + use std::{pin::Pin, sync::{Arc, atomic::{AtomicUsize, Ordering}}, time::Duration}; // basic usage: in a nutshell, when you want to define a subsystem, just focus on what its jobs do; // you can leave the subsystem itself to the job manager. @@ -1183,4 +1239,46 @@ mod tests { FakeCandidateSelectionSubsystem::new(pool, false, ()).start(context); assert_eq!(name, "FakeCandidateSelection"); } + + + #[test] + fn tick_tack_metronome() { + let n = Arc::new(AtomicUsize::default()); + + let (tick, mut block) = mpsc::unbounded(); + + let metronome = { + let n = n.clone(); + let stream = Metronome::new(Duration::from_millis(137_u64)); + stream.for_each(move |_res| { + let _ = n.fetch_add(1, Ordering::Relaxed); + let mut tick = tick.clone(); + async move { + tick.send(()).await.expect("Test helper channel works. qed"); + } + }).fuse() + }; + + let f2 = async move { + block.next().await; + assert_eq!(n.load(Ordering::Relaxed), 1_usize); + block.next().await; + assert_eq!(n.load(Ordering::Relaxed), 2_usize); + block.next().await; + assert_eq!(n.load(Ordering::Relaxed), 3_usize); + block.next().await; + assert_eq!(n.load(Ordering::Relaxed), 4_usize); + }.fuse(); + + futures::pin_mut!(f2); + futures::pin_mut!(metronome); + + block_on(async move { + // futures::join!(metronome, f2) + futures::select!( + _ = metronome => unreachable!("Metronome never stops. qed"), + _ = f2 => (), + ) + }); + } } -- GitLab From e5ee57485d081b592d4fc1f6f1610469a9f625bc Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 13 Jan 2021 20:02:03 +0100 Subject: [PATCH 196/203] Companion for substrate#7892 (#2262) * session_info: use correct authorities set * bump rococo spec_version to 19 * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 803 +++++++++++++------------ runtime/parachains/src/session_info.rs | 2 +- runtime/rococo/src/lib.rs | 2 +- 3 files changed, 404 insertions(+), 403 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 776ab22e4c..5620441e32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -298,7 +298,7 @@ dependencies = [ "memchr", "num_cpus", "once_cell", - "pin-project-lite 0.2.0", + "pin-project-lite 0.2.4", "pin-utils", "slab", "wasm-bindgen-futures", @@ -1218,7 +1218,7 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.1", + "sha2 0.9.2", "zeroize", ] @@ -1331,7 +1331,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", ] [[package]] @@ -1429,7 +1429,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b" dependencies = [ "either", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 2.0.2", "log", "num-traits 0.2.12", @@ -1476,8 +1476,8 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", ] @@ -1494,8 +1494,8 @@ dependencies = [ [[package]] name = "frame-benchmarking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -1512,8 +1512,8 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "Inflector", "chrono", @@ -1535,8 +1535,8 @@ dependencies = [ [[package]] name = "frame-executive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -1551,8 +1551,8 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "12.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "12.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "serde", @@ -1562,8 +1562,8 @@ dependencies = [ [[package]] name = "frame-support" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "bitflags", "frame-metadata", @@ -1587,8 +1587,8 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1599,8 +1599,8 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1611,8 +1611,8 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1621,8 +1621,8 @@ dependencies = [ [[package]] name = "frame-system" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "impl-trait-for-tuples 0.2.0", @@ -1637,8 +1637,8 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -1651,8 +1651,8 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-api", @@ -1706,9 +1706,9 @@ checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" [[package]] name = "futures" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +checksum = "309f13e3f4be6d5917178c84db67c0b9a09177ac16d4f9a7313a767a68adaa77" dependencies = [ "futures-channel", "futures-core", @@ -1721,9 +1721,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "7a3b03bd32f6ec7885edeb99acd1e47e20e34fd4dfd3c6deed6fcac8a9d28f6a" dependencies = [ "futures-core", "futures-sink", @@ -1731,9 +1731,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "ed8aeae2b6ab243ebabe6f54cd4cf53054d98883d5d326128af7d57a9ca5cd3d" [[package]] name = "futures-cpupool" @@ -1752,7 +1752,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9" dependencies = [ "futures 0.1.29", - "futures 0.3.8", + "futures 0.3.10", "lazy_static", "log", "parking_lot 0.9.0", @@ -1763,9 +1763,9 @@ dependencies = [ [[package]] name = "futures-executor" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +checksum = "3f7836b36b7533d16fd5937311d98ba8965ab81030de8b0024c299dd5d51fb9b" dependencies = [ "futures-core", "futures-task", @@ -1775,9 +1775,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" +checksum = "d41234e71d5e8ca73d01563974ef6f50e516d71e18f1a2f1184742e31f5d469f" [[package]] name = "futures-lite" @@ -1796,9 +1796,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "3520e0eb4e704e88d771b92d51273ee212997f0d8282f17f5d8ff1cb39104e42" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", @@ -1808,15 +1808,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" +checksum = "c72d188479368953c6c8c7140e40d7a4401674ab3b98a41e60e515d6cbdbe5de" [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +checksum = "08944cea9021170d383287169859c0ca8147d9ec285978393109954448f33cc7" dependencies = [ "once_cell", ] @@ -1839,9 +1839,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "d3dd206efbe2ca683b2ce138ccdf61e1b0a63f5816dcedc9d8654c500ba0cea6" dependencies = [ "futures 0.1.29", "futures-channel", @@ -1851,7 +1851,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.4", + "pin-project-lite 0.2.4", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -1865,7 +1865,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b" dependencies = [ "bytes 0.5.6", - "futures 0.3.8", + "futures 0.3.10", "memchr", "pin-project 0.4.23", ] @@ -2335,7 +2335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16d7c5e361e6b05c882b4847dd98992534cebc6fcde7f4bc98225bcf10fd6d0d" dependencies = [ "async-io", - "futures 0.3.8", + "futures 0.3.10", "futures-lite", "if-addrs", "ipnet", @@ -2430,7 +2430,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 2.0.2", ] @@ -2787,7 +2787,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7bfe11b3202691673766b1224c432996f6b8047db17ceb743675bef3404e714" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "js-sys", "kvdb", "kvdb-memorydb", @@ -2847,7 +2847,7 @@ checksum = "2e17c636b5fe5ff900ccc2840b643074bfac321551d821243a781d0d46f06588" dependencies = [ "atomic", "bytes 0.5.6", - "futures 0.3.8", + "futures 0.3.10", "lazy_static", "libp2p-core", "libp2p-core-derive", @@ -2888,7 +2888,7 @@ dependencies = [ "ed25519-dalek", "either", "fnv", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "lazy_static", "libsecp256k1", @@ -2903,7 +2903,7 @@ dependencies = [ "rand 0.7.3", "ring", "rw-stream-sink", - "sha2 0.9.1", + "sha2 0.9.2", "smallvec 1.6.1", "thiserror", "unsigned-varint", @@ -2928,7 +2928,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3257a41f376aa23f237231971fee7e350e4d8353cfcf233aef34d6d6b638f0c" dependencies = [ "flate2", - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", ] @@ -2938,7 +2938,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e09bab25af01326b4ed9486d31325911437448edda30bc57681502542d49f20" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "log", ] @@ -2951,7 +2951,7 @@ checksum = "6fd8cdd5ef1dd0b7346975477216d752de976b92e43051bc8bd808c372ea6cec" dependencies = [ "cuckoofilter", "fnv", - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "libp2p-swarm", "log", @@ -2971,7 +2971,7 @@ dependencies = [ "byteorder", "bytes 0.5.6", "fnv", - "futures 0.3.8", + "futures 0.3.10", "futures_codec", "hex_fmt", "libp2p-core", @@ -2981,7 +2981,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.1", + "sha2 0.9.2", "smallvec 1.6.1", "unsigned-varint", "wasm-timer", @@ -2993,7 +2993,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43bc51a9bc3780288c526615ba0f5f8216820ea6dcc02b89e8daee526c5fccb" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "libp2p-swarm", "log", @@ -3013,7 +3013,7 @@ dependencies = [ "bytes 0.5.6", "either", "fnv", - "futures 0.3.8", + "futures 0.3.10", "futures_codec", "libp2p-core", "libp2p-swarm", @@ -3021,7 +3021,7 @@ dependencies = [ "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.1", + "sha2 0.9.2", "smallvec 1.6.1", "uint 0.8.3", "unsigned-varint", @@ -3038,7 +3038,7 @@ dependencies = [ "async-io", "data-encoding", "dns-parser", - "futures 0.3.8", + "futures 0.3.10", "if-watch", "lazy_static", "libp2p-core", @@ -3057,7 +3057,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce3200fbe6608e623bd9efa459cc8bafa0e4efbb0a2dfcdd0e1387ff4181264b" dependencies = [ "bytes 0.5.6", - "futures 0.3.8", + "futures 0.3.10", "futures_codec", "libp2p-core", "log", @@ -3076,14 +3076,14 @@ checksum = "0580e0d18019d254c9c349c03ff7b22e564b6f2ada70c045fc39738e144f2139" dependencies = [ "bytes 0.5.6", "curve25519-dalek 3.0.0", - "futures 0.3.8", + "futures 0.3.10", "lazy_static", "libp2p-core", "log", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.1", + "sha2 0.9.2", "snow", "static_assertions", "x25519-dalek 1.1.0", @@ -3096,7 +3096,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50b2ec86a18cbf09d7df440e7786a2409640c774e476e9a3b4d031382c3d7588" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "libp2p-swarm", "log", @@ -3112,7 +3112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a7b1bdcbe46a3a2159c231601ed29645282653c0a96ce3a2ad8352c9fbe6800" dependencies = [ "bytes 0.5.6", - "futures 0.3.8", + "futures 0.3.10", "futures_codec", "libp2p-core", "log", @@ -3128,7 +3128,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "log", "pin-project 1.0.4", "rand 0.7.3", @@ -3144,7 +3144,7 @@ checksum = "620e2950decbf77554b5aed3824f7d0e2c04923f28c70f9bff1a402c47ef6b1e" dependencies = [ "async-trait", "bytes 0.5.6", - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "libp2p-swarm", "log", @@ -3163,7 +3163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf5894ee1ee63a38aa58d58a16e3dcf7ede6b59ea7b22302c00c1a41d7aec41" dependencies = [ "either", - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "log", "rand 0.7.3", @@ -3179,7 +3179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d2113a7dab2b502c55fe290910cd7399a2aa04fe70a2f5a415a87a1db600c0e" dependencies = [ "async-std", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "if-addrs", "ipnet", @@ -3195,7 +3195,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af05fe92c2a3aa320bc82a308ddb7b33bef3b060154c5a4b9fb0b01f15385fc0" dependencies = [ "async-std", - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "log", ] @@ -3206,7 +3206,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37cd44ea05a4523f40183f60ab6e6a80e400a5ddfc98b0df1c55edeb85576cd9" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "js-sys", "libp2p-core", "parity-send-wrapper", @@ -3222,7 +3222,7 @@ checksum = "270c80528e21089ea25b41dd1ab8fd834bdf093ebee422fed3b68699a857a083" dependencies = [ "async-tls", "either", - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "log", "quicksink", @@ -3240,7 +3240,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36799de9092c35782f080032eddbc8de870f94a0def87cf9f8883efccd5cacf0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "libp2p-core", "parking_lot 0.11.1", "thiserror", @@ -3480,7 +3480,7 @@ name = "metered-channel" version = "0.1.0" dependencies = [ "assert_matches", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", ] @@ -3490,7 +3490,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c023c3f16109e7f33aa451f773fd61070e265b4977d0b6e344a51049296dd7df" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "rand 0.7.3", "thrift", ] @@ -3615,7 +3615,7 @@ dependencies = [ "digest 0.9.0", "generic-array 0.14.4", "multihash-derive", - "sha2 0.9.1", + "sha2 0.9.2", "unsigned-varint", ] @@ -3646,7 +3646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dda822043bba2d6da31c4e14041f9794f8fb130a5959289038d0b809d8888614" dependencies = [ "bytes 0.5.6", - "futures 0.3.8", + "futures 0.3.10", "log", "pin-project 1.0.4", "smallvec 1.6.1", @@ -3906,8 +3906,8 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -3922,8 +3922,8 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -3937,8 +3937,8 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -3962,8 +3962,8 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -3977,7 +3977,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -3991,8 +3991,8 @@ dependencies = [ [[package]] name = "pallet-collective" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4007,8 +4007,8 @@ dependencies = [ [[package]] name = "pallet-democracy" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4022,8 +4022,8 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4037,8 +4037,8 @@ dependencies = [ [[package]] name = "pallet-grandpa" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4058,8 +4058,8 @@ dependencies = [ [[package]] name = "pallet-identity" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4074,8 +4074,8 @@ dependencies = [ [[package]] name = "pallet-im-online" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4094,8 +4094,8 @@ dependencies = [ [[package]] name = "pallet-indices" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4111,8 +4111,8 @@ dependencies = [ [[package]] name = "pallet-membership" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4125,8 +4125,8 @@ dependencies = [ [[package]] name = "pallet-multisig" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4141,8 +4141,8 @@ dependencies = [ [[package]] name = "pallet-nicks" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4155,8 +4155,8 @@ dependencies = [ [[package]] name = "pallet-offences" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4170,8 +4170,8 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4192,7 +4192,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4207,8 +4207,8 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4220,8 +4220,8 @@ dependencies = [ [[package]] name = "pallet-recovery" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "enumflags2", "frame-support", @@ -4235,8 +4235,8 @@ dependencies = [ [[package]] name = "pallet-scheduler" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4250,8 +4250,8 @@ dependencies = [ [[package]] name = "pallet-session" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4270,8 +4270,8 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4286,8 +4286,8 @@ dependencies = [ [[package]] name = "pallet-society" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4300,8 +4300,8 @@ dependencies = [ [[package]] name = "pallet-staking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4322,8 +4322,8 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4333,8 +4333,8 @@ dependencies = [ [[package]] name = "pallet-sudo" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4347,8 +4347,8 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4366,7 +4366,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4380,8 +4380,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "frame-system", @@ -4397,8 +4397,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4415,8 +4415,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-support", "parity-scale-codec", @@ -4428,8 +4428,8 @@ dependencies = [ [[package]] name = "pallet-treasury" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4444,8 +4444,8 @@ dependencies = [ [[package]] name = "pallet-utility" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4460,8 +4460,8 @@ dependencies = [ [[package]] name = "pallet-vesting" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4861,9 +4861,9 @@ checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715" [[package]] name = "pin-project-lite" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" +checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" [[package]] name = "pin-utils" @@ -4889,7 +4889,7 @@ version = "0.8.27" dependencies = [ "assert_cmd", "color-eyre", - "futures 0.3.8", + "futures 0.3.10", "nix 0.19.1", "parity-util-mem", "polkadot-cli", @@ -4905,7 +4905,7 @@ dependencies = [ "assert_matches", "bitvec", "env_logger 0.8.2", - "futures 0.3.8", + "futures 0.3.10", "log", "maplit", "parity-scale-codec", @@ -4926,7 +4926,7 @@ name = "polkadot-availability-distribution" version = "0.1.0" dependencies = [ "assert_matches", - "futures 0.3.8", + "futures 0.3.10", "maplit", "parity-scale-codec", "polkadot-erasure-coding", @@ -4973,7 +4973,7 @@ version = "0.1.0" dependencies = [ "assert_matches", "env_logger 0.8.2", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "polkadot-node-network-protocol", @@ -5016,7 +5016,7 @@ version = "0.1.0" dependencies = [ "assert_matches", "async-trait", - "futures 0.3.8", + "futures 0.3.10", "parity-scale-codec", "parking_lot 0.11.1", "polkadot-node-network-protocol", @@ -5036,7 +5036,7 @@ dependencies = [ name = "polkadot-node-collation-generation" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5056,7 +5056,7 @@ dependencies = [ "assert_matches", "bitvec", "env_logger 0.8.2", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "kvdb", "kvdb-memorydb", @@ -5084,7 +5084,7 @@ version = "0.1.0" dependencies = [ "assert_matches", "bitvec", - "futures 0.3.8", + "futures 0.3.10", "polkadot-erasure-coding", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5106,7 +5106,7 @@ dependencies = [ name = "polkadot-node-core-bitfield-signing" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", @@ -5121,7 +5121,7 @@ dependencies = [ name = "polkadot-node-core-candidate-selection" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", @@ -5137,7 +5137,7 @@ name = "polkadot-node-core-candidate-validation" version = "0.1.0" dependencies = [ "assert_matches", - "futures 0.3.8", + "futures 0.3.10", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -5155,7 +5155,7 @@ dependencies = [ name = "polkadot-node-core-chain-api" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "maplit", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -5171,7 +5171,7 @@ dependencies = [ name = "polkadot-node-core-proposer" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "polkadot-node-subsystem", "polkadot-overseer", @@ -5195,7 +5195,7 @@ name = "polkadot-node-core-provisioner" version = "0.1.0" dependencies = [ "bitvec", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -5211,7 +5211,7 @@ dependencies = [ name = "polkadot-node-core-runtime-api" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", "polkadot-node-subsystem-util", @@ -5252,7 +5252,7 @@ dependencies = [ name = "polkadot-node-primitives" version = "0.1.0" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "parity-scale-codec", "polkadot-primitives", "polkadot-statement-table", @@ -5269,7 +5269,7 @@ dependencies = [ "async-std", "async-trait", "derive_more", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "lazy_static", "log", @@ -5297,7 +5297,7 @@ name = "polkadot-node-subsystem-test-helpers" version = "0.1.0" dependencies = [ "async-trait", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "parity-scale-codec", "parking_lot 0.11.1", @@ -5322,7 +5322,7 @@ dependencies = [ "assert_matches", "async-trait", "env_logger 0.8.2", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "metered-channel", @@ -5351,7 +5351,7 @@ version = "0.1.0" dependencies = [ "async-trait", "femme", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "kv-log-macro", "oorandom", @@ -5371,7 +5371,7 @@ name = "polkadot-parachain" version = "0.8.27" dependencies = [ "derive_more", - "futures 0.3.8", + "futures 0.3.10", "log", "parity-scale-codec", "parking_lot 0.11.1", @@ -5394,7 +5394,7 @@ version = "0.1.0" dependencies = [ "assert_matches", "env_logger 0.8.2", - "futures 0.3.8", + "futures 0.3.10", "log", "polkadot-node-network-protocol", "polkadot-node-subsystem", @@ -5595,7 +5595,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "futures 0.3.8", + "futures 0.3.10", "hex-literal", "libsecp256k1", "log", @@ -5643,7 +5643,7 @@ dependencies = [ "env_logger 0.8.2", "frame-benchmarking", "frame-system-rpc-runtime-api", - "futures 0.3.8", + "futures 0.3.10", "hex-literal", "kusama-runtime", "pallet-babe", @@ -5722,7 +5722,7 @@ version = "0.1.0" dependencies = [ "arrayvec 0.5.2", "assert_matches", - "futures 0.3.8", + "futures 0.3.10", "indexmap", "polkadot-node-network-protocol", "polkadot-node-primitives", @@ -5839,7 +5839,7 @@ dependencies = [ "frame-benchmarking", "frame-system", "futures 0.1.29", - "futures 0.3.8", + "futures 0.3.10", "hex", "pallet-balances", "pallet-staking", @@ -5890,7 +5890,7 @@ dependencies = [ name = "polkadot-validation" version = "0.8.27" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "log", "parity-scale-codec", "polkadot-parachain", @@ -6494,9 +6494,9 @@ dependencies = [ [[package]] name = "retain_mut" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e005d658ad26eacc2b6c506dfde519f4e277e328d0eb3379ca61647d70a8f531" +checksum = "53552c6c49e1e13f1a203ef0080ab3bbef0beb570a528993e83df057a9d9bba1" [[package]] name = "ring" @@ -6674,7 +6674,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "pin-project 0.4.23", "static_assertions", ] @@ -6714,13 +6714,13 @@ dependencies = [ [[package]] name = "sc-authority-discovery" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "async-trait", "derive_more", "either", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "libp2p", "log", @@ -6742,10 +6742,10 @@ dependencies = [ [[package]] name = "sc-basic-authorship" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "parity-scale-codec", @@ -6765,8 +6765,8 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6782,8 +6782,8 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -6803,8 +6803,8 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6814,13 +6814,13 @@ dependencies = [ [[package]] name = "sc-cli" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "atty", "chrono", "fdlimit", - "futures 0.3.8", + "futures 0.3.10", "hex", "libp2p", "log", @@ -6858,7 +6858,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6868,12 +6868,12 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", "fnv", - "futures 0.3.8", + "futures 0.3.10", "hash-db", "kvdb", "lazy_static", @@ -6902,8 +6902,8 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "blake2-rfc", "hash-db", @@ -6932,8 +6932,8 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6943,12 +6943,12 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", "fork-tree", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "merlin", @@ -6988,11 +6988,11 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", - "futures 0.3.8", + "futures 0.3.10", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", @@ -7012,8 +7012,8 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7025,10 +7025,10 @@ dependencies = [ [[package]] name = "sc-consensus-slots" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "parity-scale-codec", @@ -7051,8 +7051,8 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "sc-client-api", @@ -7065,8 +7065,8 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", "lazy_static", @@ -7094,8 +7094,8 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", "parity-scale-codec", @@ -7110,8 +7110,8 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "parity-scale-codec", @@ -7125,8 +7125,8 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "parity-scale-codec", @@ -7143,13 +7143,13 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", "finality-grandpa", "fork-tree", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "parity-scale-codec", @@ -7180,12 +7180,12 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", "finality-grandpa", - "futures 0.3.8", + "futures 0.3.10", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", @@ -7204,11 +7204,11 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "ansi_term 0.12.1", - "futures 0.3.8", + "futures 0.3.10", "log", "parity-util-mem", "sc-client-api", @@ -7222,12 +7222,12 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "async-trait", "derive_more", - "futures 0.3.8", + "futures 0.3.10", "futures-util", "hex", "merlin", @@ -7242,8 +7242,8 @@ dependencies = [ [[package]] name = "sc-light" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "hash-db", "lazy_static", @@ -7261,8 +7261,8 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "async-std", "async-trait", @@ -7274,7 +7274,7 @@ dependencies = [ "erased-serde", "fnv", "fork-tree", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "futures_codec", "hex", @@ -7314,27 +7314,28 @@ dependencies = [ [[package]] name = "sc-network-gossip" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "libp2p", "log", "lru", "sc-network", "sp-runtime", + "substrate-prometheus-endpoint", "wasm-timer", ] [[package]] name = "sc-offchain" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "bytes 0.5.6", "fnv", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "hyper 0.13.9", "hyper-rustls", @@ -7356,10 +7357,10 @@ dependencies = [ [[package]] name = "sc-peerset" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "libp2p", "log", "serde_json", @@ -7369,8 +7370,8 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7378,10 +7379,10 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "hash-db", "jsonrpc-core", "jsonrpc-pubsub", @@ -7412,11 +7413,11 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", - "futures 0.3.8", + "futures 0.3.10", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", @@ -7436,8 +7437,8 @@ dependencies = [ [[package]] name = "sc-rpc-server" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7454,13 +7455,13 @@ dependencies = [ [[package]] name = "sc-service" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "directories 3.0.1", "exit-future", "futures 0.1.29", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "hash-db", "jsonrpc-core", @@ -7518,8 +7519,8 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "parity-scale-codec", @@ -7534,7 +7535,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7553,10 +7554,10 @@ dependencies = [ [[package]] name = "sc-telemetry" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "libp2p", "log", @@ -7574,8 +7575,8 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7598,11 +7599,11 @@ dependencies = [ [[package]] name = "sc-transaction-graph" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", - "futures 0.3.8", + "futures 0.3.10", "linked-hash-map", "log", "parity-util-mem", @@ -7620,10 +7621,10 @@ dependencies = [ [[package]] name = "sc-transaction-pool" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-diagnose", "intervalier", "log", @@ -7866,12 +7867,12 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1" +checksum = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8" dependencies = [ "block-buffer 0.9.0", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "cpuid-bool", "digest 0.9.0", "opaque-debug 0.3.0", @@ -8051,7 +8052,7 @@ dependencies = [ "rand_core 0.5.1", "ring", "rustc_version", - "sha2 0.9.1", + "sha2 0.9.2", "subtle 2.2.3", "x25519-dalek 0.6.0", ] @@ -8077,7 +8078,7 @@ dependencies = [ "base64 0.12.3", "bytes 0.5.6", "flate2", - "futures 0.3.8", + "futures 0.3.10", "httparse", "log", "rand 0.7.3", @@ -8086,8 +8087,8 @@ dependencies = [ [[package]] name = "sp-allocator" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "sp-core", @@ -8098,8 +8099,8 @@ dependencies = [ [[package]] name = "sp-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "hash-db", "parity-scale-codec", @@ -8114,8 +8115,8 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8126,8 +8127,8 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "serde", @@ -8138,8 +8139,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8151,8 +8152,8 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-api", @@ -8163,8 +8164,8 @@ dependencies = [ [[package]] name = "sp-authorship" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8174,8 +8175,8 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-api", @@ -8186,10 +8187,10 @@ dependencies = [ [[package]] name = "sp-blockchain" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "log", "lru", "parity-scale-codec", @@ -8204,8 +8205,8 @@ dependencies = [ [[package]] name = "sp-chain-spec" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "serde", "serde_json", @@ -8213,10 +8214,10 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "libp2p", "log", @@ -8239,8 +8240,8 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "merlin", "parity-scale-codec", @@ -8259,8 +8260,8 @@ dependencies = [ [[package]] name = "sp-consensus-slots" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8268,8 +8269,8 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8280,15 +8281,15 @@ dependencies = [ [[package]] name = "sp-core" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "base58", "blake2-rfc", "byteorder", "dyn-clonable", "ed25519-dalek", - "futures 0.3.8", + "futures 0.3.10", "hash-db", "hash256-std-hasher", "hex", @@ -8307,7 +8308,7 @@ dependencies = [ "schnorrkel", "secrecy", "serde", - "sha2 0.8.2", + "sha2 0.9.2", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -8324,8 +8325,8 @@ dependencies = [ [[package]] name = "sp-database" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -8333,8 +8334,8 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8343,8 +8344,8 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "environmental", "parity-scale-codec", @@ -8354,8 +8355,8 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "finality-grandpa", "log", @@ -8371,8 +8372,8 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -8383,10 +8384,10 @@ dependencies = [ [[package]] name = "sp-io" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "hash-db", "libsecp256k1", "log", @@ -8407,8 +8408,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "lazy_static", "sp-core", @@ -8419,11 +8420,11 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "async-trait", "derive_more", - "futures 0.3.8", + "futures 0.3.10", "merlin", "parity-scale-codec", "parking_lot 0.11.1", @@ -8435,8 +8436,8 @@ dependencies = [ [[package]] name = "sp-npos-elections" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "serde", @@ -8447,8 +8448,8 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8458,8 +8459,8 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "sp-api", "sp-core", @@ -8468,16 +8469,16 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "backtrace", ] [[package]] name = "sp-rpc" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "serde", "sp-core", @@ -8485,8 +8486,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "either", "hash256-std-hasher", @@ -8506,8 +8507,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8523,8 +8524,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "Inflector", "proc-macro-crate", @@ -8535,8 +8536,8 @@ dependencies = [ [[package]] name = "sp-serializer" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "serde", "serde_json", @@ -8544,8 +8545,8 @@ dependencies = [ [[package]] name = "sp-session" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-api", @@ -8557,8 +8558,8 @@ dependencies = [ [[package]] name = "sp-staking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8567,8 +8568,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "hash-db", "log", @@ -8589,13 +8590,13 @@ dependencies = [ [[package]] name = "sp-std" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" [[package]] name = "sp-storage" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8608,7 +8609,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "sp-core", @@ -8620,8 +8621,8 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8634,8 +8635,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "log", "parity-scale-codec", @@ -8647,11 +8648,11 @@ dependencies = [ [[package]] name = "sp-transaction-pool" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "derive_more", - "futures 0.3.8", + "futures 0.3.10", "log", "parity-scale-codec", "serde", @@ -8663,8 +8664,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "hash-db", "memory-db", @@ -8677,10 +8678,10 @@ dependencies = [ [[package]] name = "sp-utils" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-core", "futures-timer 3.0.2", "lazy_static", @@ -8689,8 +8690,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8701,8 +8702,8 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8833,14 +8834,14 @@ dependencies = [ [[package]] name = "substrate-browser-utils" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "chrono", "console_error_panic_hook", "console_log", "futures 0.1.29", - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "getrandom 0.2.1", "js-sys", @@ -8859,19 +8860,19 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "platforms", ] [[package]] name = "substrate-frame-rpc-system" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "frame-system-rpc-runtime-api", - "futures 0.3.8", + "futures 0.3.10", "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", @@ -8890,8 +8891,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "async-std", "derive_more", @@ -8904,11 +8905,11 @@ dependencies = [ [[package]] name = "substrate-test-client" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "futures 0.1.29", - "futures 0.3.8", + "futures 0.3.10", "hash-db", "hex", "parity-scale-codec", @@ -8931,18 +8932,18 @@ dependencies = [ [[package]] name = "substrate-test-utils" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "2.0.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "substrate-test-utils-derive", "tokio 0.2.21", ] [[package]] name = "substrate-test-utils-derive" -version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c9d93653e567f10867273b0171f3025419795c37" +version = "0.8.1" +source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" dependencies = [ "proc-macro-crate", "quote 1.0.7", @@ -9063,7 +9064,7 @@ dependencies = [ name = "test-parachain-adder-collator" version = "0.7.26" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "futures-timer 3.0.2", "log", "parity-scale-codec", @@ -9197,7 +9198,7 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.1", + "sha2 0.9.2", "thiserror", "unicode-normalization", "zeroize", @@ -9516,7 +9517,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.0", + "pin-project-lite 0.2.4", "tracing-attributes", "tracing-core", ] @@ -9959,7 +9960,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "js-sys", "parking_lot 0.11.1", "pin-utils", @@ -10417,7 +10418,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c" dependencies = [ - "futures 0.3.8", + "futures 0.3.10", "log", "nohash-hasher", "parking_lot 0.11.1", diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index 676f84512c..7a574007a0 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -71,7 +71,7 @@ pub trait AuthorityDiscoveryConfig { impl AuthorityDiscoveryConfig for T { fn authorities() -> Vec { - >::authorities() + >::current_authorities() } } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 6ae369c307..eab2c1bcd7 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -100,7 +100,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("rococo"), impl_name: create_runtime_str!("parity-rococo-v1"), authoring_version: 0, - spec_version: 17, + spec_version: 19, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, -- GitLab From 4fbfe934c101400e980e1cc7cc9d180b3fe731a8 Mon Sep 17 00:00:00 2001 From: Sergei Shulepov Date: Wed, 13 Jan 2021 20:38:58 +0100 Subject: [PATCH 197/203] Copy para host config for rococo-staging (#2260) --- node/service/src/chain_spec.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index e8b01ecba3..4908ff717e 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -871,6 +871,28 @@ fn rococo_staging_testnet_config_genesis(wasm_binary: &[u8]) -> rococo_runtime:: chain_availability_period: 4, thread_availability_period: 4, no_show_slots: 10, + max_upward_queue_count: 8, + max_upward_queue_size: 8 * 1024, + max_downward_message_size: 1024, + // this is approximatelly 4ms. + // + // Same as `4 * frame_support::weights::WEIGHT_PER_MILLIS`. We don't bother with + // an import since that's a made up number and should be replaced with a constant + // obtained by benchmarking anyway. + preferred_dispatchable_upward_messages_step_weight: 4 * 1_000_000_000, + max_upward_message_size: 1024, + max_upward_message_num_per_candidate: 5, + hrmp_open_request_ttl: 5, + hrmp_sender_deposit: 0, + hrmp_recipient_deposit: 0, + hrmp_channel_max_capacity: 8, + hrmp_channel_max_total_size: 8 * 1024, + hrmp_max_parachain_inbound_channels: 4, + hrmp_max_parathread_inbound_channels: 4, + hrmp_channel_max_message_size: 1024, + hrmp_max_parachain_outbound_channels: 4, + hrmp_max_parathread_outbound_channels: 4, + hrmp_max_message_num_per_candidate: 5, ..Default::default() }, }), -- GitLab From 2fd345b8133261cdf448bf84012fb41b8404b2aa Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Wed, 13 Jan 2021 22:14:26 +0100 Subject: [PATCH 198/203] display errors with their sources (#2264) * update futures to 0.3.9 * companion changes for generic error types * improve errors, keep error sources * command compile fix * use the correct Error type, add annotation * avoid async { fut.await.map_err(E::Variant) } with TryFuture * fix cargo lock, bump futures to 0.3.10 futures 0.3.9 got yanked * chore cargo update -p sp-io * minor quirk * make rustc 1.48 happy by bouning the error more tightly * be more explicit * cargo lock futures --- Cargo.lock | 277 +++++++++--------- cli/Cargo.toml | 1 + cli/src/command.rs | 76 +++-- .../adder/collator/src/main.rs | 5 +- 4 files changed, 180 insertions(+), 179 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5620441e32..fb32177f88 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1477,7 +1477,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", ] @@ -1495,7 +1495,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -1513,7 +1513,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "Inflector", "chrono", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -1552,7 +1552,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "serde", @@ -1563,7 +1563,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "bitflags", "frame-metadata", @@ -1588,7 +1588,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1612,7 +1612,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1622,7 +1622,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "impl-trait-for-tuples 0.2.0", @@ -1638,7 +1638,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -1652,7 +1652,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-api", @@ -3907,7 +3907,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -3923,7 +3923,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -3938,7 +3938,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -3963,7 +3963,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -3977,7 +3977,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -3992,7 +3992,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4008,7 +4008,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4023,7 +4023,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4038,7 +4038,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4059,7 +4059,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4075,7 +4075,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4095,7 +4095,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4112,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4126,7 +4126,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4142,7 +4142,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4156,7 +4156,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4171,7 +4171,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4192,7 +4192,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4208,7 +4208,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4221,7 +4221,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "enumflags2", "frame-support", @@ -4236,7 +4236,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4251,7 +4251,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4271,7 +4271,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4287,7 +4287,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4301,7 +4301,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4323,7 +4323,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4334,7 +4334,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4348,7 +4348,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4366,7 +4366,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4381,7 +4381,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "frame-system", @@ -4398,7 +4398,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4416,7 +4416,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-support", "parity-scale-codec", @@ -4429,7 +4429,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4445,7 +4445,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-benchmarking", "frame-support", @@ -4461,7 +4461,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4951,6 +4951,7 @@ name = "polkadot-cli" version = "0.8.27" dependencies = [ "frame-benchmarking-cli", + "futures 0.3.10", "log", "polkadot-parachain", "polkadot-service", @@ -6715,7 +6716,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "async-trait", "derive_more", @@ -6743,7 +6744,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -6766,7 +6767,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6783,7 +6784,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -6804,7 +6805,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6815,7 +6816,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "atty", "chrono", @@ -6858,7 +6859,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6869,7 +6870,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "fnv", @@ -6903,7 +6904,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "blake2-rfc", "hash-db", @@ -6933,7 +6934,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6944,7 +6945,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "fork-tree", @@ -6989,7 +6990,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "futures 0.3.10", @@ -7013,7 +7014,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7026,7 +7027,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -7052,7 +7053,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "sc-client-api", @@ -7066,7 +7067,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "lazy_static", @@ -7095,7 +7096,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "parity-scale-codec", @@ -7111,7 +7112,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "parity-scale-codec", @@ -7126,7 +7127,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "parity-scale-codec", @@ -7144,7 +7145,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "finality-grandpa", @@ -7181,7 +7182,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "finality-grandpa", @@ -7205,7 +7206,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "ansi_term 0.12.1", "futures 0.3.10", @@ -7223,7 +7224,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "async-trait", "derive_more", @@ -7243,7 +7244,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "hash-db", "lazy_static", @@ -7262,7 +7263,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "async-std", "async-trait", @@ -7315,7 +7316,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -7331,7 +7332,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "bytes 0.5.6", "fnv", @@ -7358,7 +7359,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "libp2p", @@ -7371,7 +7372,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7380,7 +7381,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "hash-db", @@ -7414,7 +7415,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "futures 0.3.10", @@ -7438,7 +7439,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7456,7 +7457,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "directories 3.0.1", "exit-future", @@ -7520,7 +7521,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "parity-scale-codec", @@ -7535,7 +7536,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7555,7 +7556,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -7576,7 +7577,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7600,7 +7601,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "futures 0.3.10", @@ -7622,7 +7623,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-diagnose", @@ -8088,7 +8089,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "sp-core", @@ -8100,7 +8101,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "hash-db", "parity-scale-codec", @@ -8116,7 +8117,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8128,7 +8129,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "serde", @@ -8140,7 +8141,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8153,7 +8154,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-api", @@ -8165,7 +8166,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8176,7 +8177,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-api", @@ -8188,7 +8189,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "log", @@ -8206,7 +8207,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "serde", "serde_json", @@ -8215,7 +8216,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -8241,7 +8242,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "merlin", "parity-scale-codec", @@ -8261,7 +8262,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8270,7 +8271,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8282,7 +8283,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "base58", "blake2-rfc", @@ -8326,7 +8327,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -8335,7 +8336,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8345,7 +8346,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "environmental", "parity-scale-codec", @@ -8356,7 +8357,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "finality-grandpa", "log", @@ -8373,7 +8374,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -8385,7 +8386,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "hash-db", @@ -8409,7 +8410,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "lazy_static", "sp-core", @@ -8420,7 +8421,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "async-trait", "derive_more", @@ -8437,7 +8438,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "serde", @@ -8449,7 +8450,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8460,7 +8461,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "sp-api", "sp-core", @@ -8470,7 +8471,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "backtrace", ] @@ -8478,7 +8479,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "serde", "sp-core", @@ -8487,7 +8488,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "either", "hash256-std-hasher", @@ -8508,7 +8509,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8525,7 +8526,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "Inflector", "proc-macro-crate", @@ -8537,7 +8538,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "serde", "serde_json", @@ -8546,7 +8547,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-api", @@ -8559,7 +8560,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8569,7 +8570,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "hash-db", "log", @@ -8591,12 +8592,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" [[package]] name = "sp-storage" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8609,7 +8610,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "sp-core", @@ -8622,7 +8623,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8636,7 +8637,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "log", "parity-scale-codec", @@ -8649,7 +8650,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "derive_more", "futures 0.3.10", @@ -8665,7 +8666,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "hash-db", "memory-db", @@ -8679,7 +8680,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "futures-core", @@ -8691,7 +8692,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8703,7 +8704,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8835,7 +8836,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "chrono", "console_error_panic_hook", @@ -8861,7 +8862,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "platforms", ] @@ -8869,7 +8870,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.10", @@ -8892,7 +8893,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "async-std", "derive_more", @@ -8906,7 +8907,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.1.29", "futures 0.3.10", @@ -8933,7 +8934,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "futures 0.3.10", "substrate-test-utils-derive", @@ -8943,7 +8944,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#1334eb7224185b0c5f4016378842695fef036a13" +source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 78b45403d2..27dc1b21df 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -19,6 +19,7 @@ thiserror = "1.0.23" structopt = { version = "0.3.21", optional = true } wasm-bindgen = { version = "0.2.69", optional = true } wasm-bindgen-futures = { version = "0.4.19", optional = true } +futures = "0.3.10" service = { package = "polkadot-service", path = "../node/service", default-features = false, optional = true } polkadot-parachain = { path = "../parachain", optional = true } diff --git a/cli/src/command.rs b/cli/src/command.rs index 45e0750c3f..a0fc04c471 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -18,6 +18,7 @@ use log::info; use service::{IdentifyVariant, self}; use sc_cli::{SubstrateCli, RuntimeVersion, Role}; use crate::cli::{Cli, Subcommand}; +use futures::future::TryFutureExt; #[derive(thiserror::Error, Debug)] pub enum Error { @@ -143,7 +144,8 @@ pub fn run() -> Result<()> { match &cli.subcommand { None => { - let runner = cli.create_runner(&cli.run.base)?; + let runner = cli.create_runner(&cli.run.base) + .map_err(Error::from)?; let chain_spec = &runner.config().chain_spec; set_default_ss58_version(chain_spec); @@ -164,38 +166,37 @@ pub fn run() -> Result<()> { let jaeger_agent = cli.run.jaeger_agent; - Ok(runner.run_node_until_exit(move |config| async move { + runner.run_node_until_exit(move |config| async move { let role = config.role.clone(); let task_manager = match role { - Role::Light => service::build_light(config).map(|(task_manager, _)| task_manager) - .map_err(|e| sc_service::Error::Other(e.to_string())), + Role::Light => service::build_light(config).map(|(task_manager, _)| task_manager), _ => service::build_full( config, service::IsCollator::No, grandpa_pause, jaeger_agent, ).map(|full| full.task_manager) - .map_err(|e| sc_service::Error::Other(e.to_string()) ) - }; - task_manager - }).map_err(|e| -> sc_cli::Error { e.into() })?) - + }?; + Ok::<_, Error>(task_manager) + }) }, Some(Subcommand::BuildSpec(cmd)) => { let runner = cli.create_runner(cmd)?; - Ok(runner.sync_run(|config| cmd.run(config.chain_spec, config.network))?) + Ok(runner.sync_run(|config| { + cmd.run(config.chain_spec, config.network) + })?) }, Some(Subcommand::CheckBlock(cmd)) => { - let runner = cli.create_runner(cmd)?; + let runner = cli.create_runner(cmd) + .map_err(Error::SubstrateCli)?; let chain_spec = &runner.config().chain_spec; set_default_ss58_version(chain_spec); runner.async_run(|mut config| { - let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config, None) - .map_err(|e| sc_service::Error::Other(e.to_string()))?; - Ok((cmd.run(client, import_queue), task_manager)) + let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config, None)?; + Ok((cmd.run(client, import_queue).map_err(Error::SubstrateCli), task_manager)) }) }, Some(Subcommand::ExportBlocks(cmd)) => { @@ -204,11 +205,11 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); - runner.async_run(|mut config| { + Ok(runner.async_run(|mut config| { let (client, _, _, task_manager) = service::new_chain_ops(&mut config, None) - .map_err(|e| sc_service::Error::Other(e.to_string()))?; - Ok((cmd.run(client, config.database), task_manager)) - }) + .map_err(Error::PolkadotService)?; + Ok((cmd.run(client, config.database).map_err(Error::SubstrateCli), task_manager)) + })?) }, Some(Subcommand::ExportState(cmd)) => { let runner = cli.create_runner(cmd)?; @@ -216,11 +217,10 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); - runner.async_run(|mut config| { - let (client, _, _, task_manager) = service::new_chain_ops(&mut config, None) - .map_err(|e| sc_service::Error::Other(e.to_string()))?; - Ok((cmd.run(client, config.chain_spec), task_manager)) - }) + Ok(runner.async_run(|mut config| { + let (client, _, _, task_manager) = service::new_chain_ops(&mut config, None)?; + Ok((cmd.run(client, config.chain_spec).map_err(Error::SubstrateCli), task_manager)) + })?) }, Some(Subcommand::ImportBlocks(cmd)) => { let runner = cli.create_runner(cmd)?; @@ -228,16 +228,14 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); - runner.async_run(|mut config| { - let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config, None) - .map_err(|e| sc_service::Error::Other(e.to_string()))?; - Ok((cmd.run(client, import_queue), task_manager)) - }) + Ok(runner.async_run(|mut config| { + let (client, _, import_queue, task_manager) = service::new_chain_ops(&mut config, None)?; + Ok((cmd.run(client, import_queue).map_err(Error::SubstrateCli), task_manager)) + })?) }, Some(Subcommand::PurgeChain(cmd)) => { let runner = cli.create_runner(cmd)?; - Ok(runner.sync_run(|config| cmd.run(config.database)) - .map_err(|e| sc_service::Error::Other(e.to_string()))?) + Ok(runner.sync_run(|config| cmd.run(config.database))?) }, Some(Subcommand::Revert(cmd)) => { let runner = cli.create_runner(cmd)?; @@ -245,11 +243,10 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); - runner.async_run(|mut config| { - let (client, backend, _, task_manager) = service::new_chain_ops(&mut config, None) - .map_err(|e| sc_service::Error::Other(e.to_string()))?; - Ok((cmd.run(client, backend), task_manager)) - }) + Ok(runner.async_run(|mut config| { + let (client, backend, _, task_manager) = service::new_chain_ops(&mut config, None)?; + Ok((cmd.run(client, backend).map_err(Error::SubstrateCli),task_manager)) + })?) }, Some(Subcommand::ValidationWorker(cmd)) => { let _ = sc_cli::init_logger( @@ -263,7 +260,7 @@ pub fn run() -> Result<()> { ); if cfg!(feature = "browser") || cfg!(target_os = "android") { - Err(sc_cli::Error::Input("Cannot run validation worker in browser".into())) + Err(sc_cli::Error::Input("Cannot run validation worker in browser".into()).into()) } else { #[cfg(not(any(target_os = "android", feature = "browser")))] polkadot_parachain::wasm_executor::run_worker(&cmd.mem_id)?; @@ -276,11 +273,12 @@ pub fn run() -> Result<()> { set_default_ss58_version(chain_spec); - runner.sync_run(|config| { + Ok(runner.sync_run(|config| { cmd.run::(config) - }) + .map_err(|e| Error::SubstrateCli(e)) + })?) }, - Some(Subcommand::Key(cmd)) => cmd.run(&cli), + Some(Subcommand::Key(cmd)) => Ok(cmd.run(&cli)?), }?; Ok(()) } diff --git a/parachain/test-parachains/adder/collator/src/main.rs b/parachain/test-parachains/adder/collator/src/main.rs index 09998e9bc9..4016e6d7d7 100644 --- a/parachain/test-parachains/adder/collator/src/main.rs +++ b/parachain/test-parachains/adder/collator/src/main.rs @@ -19,7 +19,8 @@ use polkadot_node_primitives::CollationGenerationConfig; use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; use polkadot_primitives::v1::Id as ParaId; -use sc_cli::{Result, Error as SubstrateCliError, Role, SubstrateCli}; +use polkadot_cli::{Error, Result}; +use sc_cli::{Error as SubstrateCliError, Role, SubstrateCli}; use sp_core::hexdisplay::HexDisplay; use test_parachain_adder_collator::Collator; @@ -37,7 +38,7 @@ fn main() -> Result<()> { let collator = Collator::new(); println!("0x{:?}", HexDisplay::from(&collator.genesis_head())); - Ok(()) + Ok::<_, Error>(()) } Some(cli::Subcommand::ExportGenesisWasm(_params)) => { let collator = Collator::new(); -- GitLab From 9115d4278084ffee89badc47faea8b0a2cce5f29 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 13 Jan 2021 17:07:09 -0500 Subject: [PATCH 199/203] scheduler: handle re-scheduling around finalization correctly (#2257) * scheduler: handle re-scheduling around finalization correctly * also make sure parathreads get cleaned * run scheduling in finalization * Remove stray println! * Update the schedule call site in inclusion inherent * Clarify subtlety around SessionStartBlock * Remove double semi-colon * reschedule prior to `availability_cores` and in on-initialize * improve docs * fix line * more doc reformat * remove unneeded call * avoid unnecessary scheduling on initialize * split `clear` and `schedule * Update runtime/parachains/src/scheduler.rs Co-authored-by: Sergei Shulepov Co-authored-by: Sergei Shulepov --- primitives/src/v1.rs | 10 +- .../src/runtime-api/availability-cores.md | 4 +- .../src/runtime-api/validator-groups.md | 4 +- .../src/runtime/inclusioninherent.md | 3 +- .../src/runtime/scheduler.md | 18 +- runtime/parachains/src/inclusion_inherent.rs | 6 +- runtime/parachains/src/runtime_api_impl/v1.rs | 11 +- runtime/parachains/src/scheduler.rs | 275 +++++++++++++++--- 8 files changed, 269 insertions(+), 62 deletions(-) diff --git a/primitives/src/v1.rs b/primitives/src/v1.rs index fd320dfcb2..099e45a336 100644 --- a/primitives/src/v1.rs +++ b/primitives/src/v1.rs @@ -822,14 +822,14 @@ sp_api::decl_runtime_apis! { #[skip_initialize_block] fn validators() -> Vec; - /// Returns the validator groups and rotation info localized based on the block whose state - /// this is invoked on. Note that `now` in the `GroupRotationInfo` should be the successor of - /// the number of the block. + /// Returns the validator groups and rotation info localized based on the hypothetical child + /// of a block whose state this is invoked on. Note that `now` in the `GroupRotationInfo` + /// should be the successor of the number of the block. #[skip_initialize_block] fn validator_groups() -> (Vec>, GroupRotationInfo); - /// Yields information on all availability cores. Cores are either free or occupied. Free - /// cores can have paras assigned to them. + /// Yields information on all availability cores as relevant to the child block. + /// Cores are either free or occupied. Free cores can have paras assigned to them. #[skip_initialize_block] fn availability_cores() -> Vec>; diff --git a/roadmap/implementers-guide/src/runtime-api/availability-cores.md b/roadmap/implementers-guide/src/runtime-api/availability-cores.md index 87b06e2906..b95af2343b 100644 --- a/roadmap/implementers-guide/src/runtime-api/availability-cores.md +++ b/roadmap/implementers-guide/src/runtime-api/availability-cores.md @@ -1,6 +1,6 @@ # Availability Cores -Yields information on all availability cores. Cores are either free or occupied. Free cores can have paras assigned to them. Occupied cores don't, but they can become available part-way through a block due to bitfields and then have something scheduled on them. To allow optimistic validation of candidates, the occupied cores are accompanied by information on what is upcoming. This information can be leveraged when validators perceive that there is a high likelihood of a core becoming available based on bitfields seen, and then optimistically validate something that would become scheduled based on that, although there is no guarantee on what the block producer will actually include in the block. +Yields information on all availability cores. Cores are either free or occupied. Free cores can have paras assigned to them. Occupied cores don't, but they can become available part-way through a block due to bitfields and then have something scheduled on them. To allow optimistic validation of candidates, the occupied cores are accompanied by information on what is upcoming. This information can be leveraged when validators perceive that there is a high likelihood of a core becoming available based on bitfields seen, and then optimistically validate something that would become scheduled based on that, although there is no guarantee on what the block producer will actually include in the block. See also the [Scheduler Module](../runtime/scheduler.md) for a high-level description of what an availability core is and why it exists. @@ -8,7 +8,7 @@ See also the [Scheduler Module](../runtime/scheduler.md) for a high-level descri fn availability_cores(at: Block) -> Vec; ``` -This is all the information that a validator needs about scheduling for the current block. It includes all information on [Scheduler](../runtime/scheduler.md) core-assignments and [Inclusion](../runtime/inclusion.md) state of blocks occupying availability cores. It includes data necessary to determine not only which paras are assigned now, but which cores are likely to become freed after processing bitfields, and exactly which bitfields would be necessary to make them so. +This is all the information that a validator needs about scheduling for the current block. It includes all information on [Scheduler](../runtime/scheduler.md) core-assignments and [Inclusion](../runtime/inclusion.md) state of blocks occupying availability cores. It includes data necessary to determine not only which paras are assigned now, but which cores are likely to become freed after processing bitfields, and exactly which bitfields would be necessary to make them so. The implementation of this runtime API should invoke `Scheduler::clear` and `Scheduler::schedule(Vec::new(), current_block_number + 1)` to ensure that scheduling is accurate. ```rust struct OccupiedCore { diff --git a/roadmap/implementers-guide/src/runtime-api/validator-groups.md b/roadmap/implementers-guide/src/runtime-api/validator-groups.md index 75a94e2349..8815a02174 100644 --- a/roadmap/implementers-guide/src/runtime-api/validator-groups.md +++ b/roadmap/implementers-guide/src/runtime-api/validator-groups.md @@ -1,13 +1,13 @@ # Validator Groups -Yields the validator groups used during the current session. The validators in the groups are referred to by their index into the validator-set. +Yields the validator groups used during the current session. The validators in the groups are referred to by their index into the validator-set and this is assumed to be as-of the child of the block whose state is being queried. ```rust /// A helper data-type for tracking validator-group rotations. struct GroupRotationInfo { session_start_block: BlockNumber, group_rotation_frequency: BlockNumber, - now: BlockNumber, + now: BlockNumber, // The successor of the block in whose state this runtime API is queried. } impl GroupRotationInfo { diff --git a/roadmap/implementers-guide/src/runtime/inclusioninherent.md b/roadmap/implementers-guide/src/runtime/inclusioninherent.md index 3f23989642..42b76c7a47 100644 --- a/roadmap/implementers-guide/src/runtime/inclusioninherent.md +++ b/roadmap/implementers-guide/src/runtime/inclusioninherent.md @@ -20,7 +20,8 @@ Included: Option<()>, 1. Hash the parent header and make sure that it corresponds to the block hash of the parent (tracked by the `frame_system` FRAME module), 1. The `Bitfields` are first forwarded to the `Inclusion::process_bitfields` routine, returning a set of freed cores. Provide a `Scheduler::core_para` as a core-lookup to the `process_bitfields` routine. Annotate each of these freed cores with `FreedReason::Concluded`. 1. If `Scheduler::availability_timeout_predicate` is `Some`, invoke `Inclusion::collect_pending` using it, and add timed-out cores to the free cores, annotated with `FreedReason::TimedOut`. - 1. Invoke `Scheduler::schedule(freed)` + 1. Invoke `Scheduler::clear` + 1. Invoke `Scheduler::schedule(freed, System::current_block())` 1. Extract `parent_storage_root` from the parent header, 1. Invoke the `Inclusion::process_candidates` routine with the parameters `(parent_storage_root, backed_candidates, Scheduler::scheduled(), Scheduler::group_validators)`. 1. Call `Scheduler::occupied` using the return value of the `Inclusion::process_candidates` call above, first sorting the list of assigned core indices. diff --git a/roadmap/implementers-guide/src/runtime/scheduler.md b/roadmap/implementers-guide/src/runtime/scheduler.md index 0587e9ee8e..a49ec978d1 100644 --- a/roadmap/implementers-guide/src/runtime/scheduler.md +++ b/roadmap/implementers-guide/src/runtime/scheduler.md @@ -163,6 +163,9 @@ ParathreadClaimIndex: Vec; /// The block number where the session start occurred. Used to track how many group rotations have occurred. SessionStartBlock: BlockNumber; /// Currently scheduled cores - free but up to be occupied. +/// The value contained here will not be valid after the end of a block. +/// Runtime APIs should be used to determine scheduled cores +/// for the upcoming block. Scheduled: Vec, // sorted ascending by CoreIndex. ``` @@ -172,7 +175,7 @@ Session changes are the only time that configuration can change, and the [Config Actions: -1. Set `SessionStartBlock` to current block number. +1. Set `SessionStartBlock` to current block number + 1, as session changes are applied at the end of the block. 1. Clear all `Some` members of `AvailabilityCores`. Return all parathread claims to queue with retries un-incremented. 1. Set `configuration = Configuration::configuration()` (see [`HostConfiguration`](../types/runtime.md#host-configuration)) 1. Determine the number of cores & validator groups as `n_cores`. This is the maximum of @@ -187,12 +190,11 @@ Actions: - Also prune all parathread claims corresponding to de-registered parathreads. - all pruned claims should have their entry removed from the parathread index. - assign all non-pruned claims to new cores if the number of parathread cores has changed between the `new_config` and `old_config` of the `SessionChangeNotification`. - - Assign claims in equal balance across all cores if rebalancing, and set the `next_core` of the `ParathreadQueue` by incrementing the relative index of the last assigned core and taking it modulo the number of parathread cores. + - Assign claims in equal balance across all cores if rebalancing, and set the `next_core` of the `ParathreadQueue` by incrementing the relative index of the last assigned core and taking it modulo the number of parathread cores. ## Initialization -1. Free all scheduled cores and return parathread claims to queue, with retries incremented. -1. Schedule free cores using the `schedule(Vec::new())`. +No initialization routine runs for this module. ## Finalization @@ -206,12 +208,12 @@ No finalization routine runs for this module. - The core used for the parathread claim is the `next_core` field of the `ParathreadQueue` and adding `Paras::parachains().len()` to it. - `next_core` is then updated by adding 1 and taking it modulo `config.parathread_cores`. - The claim is then added to the claim index. -- `schedule(Vec<(CoreIndex, FreedReason)>)`: schedule new core assignments, with a parameter indicating previously-occupied cores which are to be considered returned and why they are being returned. +- `schedule(Vec<(CoreIndex, FreedReason)>, now: BlockNumber)`: schedule new core assignments, with a parameter indicating previously-occupied cores which are to be considered returned and why they are being returned. - All freed parachain cores should be assigned to their respective parachain - All freed parathread cores whose reason for freeing was `FreedReason::Concluded` should have the claim removed from the claim index. - All freed parathread cores whose reason for freeing was `FreedReason::TimedOut` should have the claim added to the parathread queue again without retries incremented - All freed parathread cores should take the next parathread entry from the queue. - - The i'th validator group will be assigned to the `(i+k)%n`'th core at any point in time, where `k` is the number of rotations that have occurred in the session, and `n` is the total number of cores. This makes upcoming rotations within the same session predictable. + - The i'th validator group will be assigned to the `(i+k)%n`'th core at any point in time, where `k` is the number of rotations that have occurred in the session, and `n` is the total number of cores. This makes upcoming rotations within the same session predictable. Rotations are based off of `now`. - `scheduled() -> Vec`: Get currently scheduled core assignments. - `occupied(Vec)`. Note that the given cores have become occupied. - Behavior undefined if any given cores were not scheduled. @@ -221,6 +223,8 @@ No finalization routine runs for this module. - `core_para(CoreIndex) -> ParaId`: return the currently-scheduled or occupied ParaId for the given core. - `group_validators(GroupIndex) -> Option>`: return all validators in a given group, if the group index is valid for this session. - `availability_timeout_predicate() -> Option bool>`: returns an optional predicate that should be used for timing out occupied cores. if `None`, no timing-out should be done. The predicate accepts the index of the core, and the block number since which it has been occupied. The predicate should be implemented based on the time since the last validator group rotation, and the respective parachain and parathread timeouts, i.e. only within `max(config.chain_availability_period, config.thread_availability_period)` of the last rotation would this return `Some`. -- `group_rotation_info() -> GroupRotationInfo`: Returns a helper for determining group rotation. +- `group_rotation_info(now: BlockNumber) -> GroupRotationInfo`: Returns a helper for determining group rotation. - `next_up_on_available(CoreIndex) -> Option`: Return the next thing that will be scheduled on this core assuming it is currently occupied and the candidate occupying it became available. Returns in `ScheduledCore` format (todo: link to Runtime APIs page; linkcheck doesn't allow this right now). For parachains, this is always the ID of the parachain and no specified collator. For parathreads, this is based on the next item in the `ParathreadQueue` assigned to that core, and is `None` if there isn't one. - `next_up_on_time_out(CoreIndex) -> Option`: Return the next thing that will be scheduled on this core assuming it is currently occupied and the candidate occupying it timed out. Returns in `ScheduledCore` format (todo: link to Runtime APIs page; linkcheck doesn't allow this right now). For parachains, this is always the ID of the parachain and no specified collator. For parathreads, this is based on the next item in the `ParathreadQueue` assigned to that core, or if there isn't one, the claim that is currently occupying the core. Otherwise `None`. +- `clear()`: + - Free all scheduled cores and return parathread claims to queue, with retries incremented. Skip parathreads which no longer exist under paras. diff --git a/runtime/parachains/src/inclusion_inherent.rs b/runtime/parachains/src/inclusion_inherent.rs index 3747f33fda..d71a81a0a2 100644 --- a/runtime/parachains/src/inclusion_inherent.rs +++ b/runtime/parachains/src/inclusion_inherent.rs @@ -124,7 +124,11 @@ decl_module! { let freed = freed_concluded.into_iter().map(|c| (c, FreedReason::Concluded)) .chain(freed_timeout.into_iter().map(|c| (c, FreedReason::TimedOut))); - >::schedule(freed); + >::clear(); + >::schedule( + freed, + >::block_number(), + ); let backed_candidates = limit_backed_candidates::(backed_candidates); let backed_candidates_len = backed_candidates.len() as Weight; diff --git a/runtime/parachains/src/runtime_api_impl/v1.rs b/runtime/parachains/src/runtime_api_impl/v1.rs index 46503d2977..f39e683ce2 100644 --- a/runtime/parachains/src/runtime_api_impl/v1.rs +++ b/runtime/parachains/src/runtime_api_impl/v1.rs @@ -19,6 +19,7 @@ use sp_std::prelude::*; use sp_std::collections::btree_map::BTreeMap; +use sp_runtime::traits::One; use primitives::v1::{ ValidatorId, ValidatorIndex, GroupRotationInfo, CoreState, ValidationData, Id as ParaId, OccupiedCoreAssumption, SessionIndex, ValidationCode, @@ -39,8 +40,10 @@ pub fn validator_groups() -> ( Vec>, GroupRotationInfo, ) { + let now = >::block_number() + One::one(); + let groups = >::validator_groups(); - let rotation_info = >::group_rotation_info(); + let rotation_info = >::group_rotation_info(now); (groups, rotation_info) } @@ -51,7 +54,11 @@ pub fn availability_cores() -> Vec>::parachains(); let config = >::config(); - let rotation_info = >::group_rotation_info(); + let now = >::block_number() + One::one(); + >::clear(); + >::schedule(Vec::new(), now); + + let rotation_info = >::group_rotation_info(now); let time_out_at = |backed_in_number, availability_period| { let time_out_at = backed_in_number + availability_period; diff --git a/runtime/parachains/src/scheduler.rs b/runtime/parachains/src/scheduler.rs index e9c92b9bd7..f21f6646d4 100644 --- a/runtime/parachains/src/scheduler.rs +++ b/runtime/parachains/src/scheduler.rs @@ -46,7 +46,7 @@ use frame_support::{ weights::Weight, }; use parity_scale_codec::{Encode, Decode}; -use sp_runtime::traits::Saturating; +use sp_runtime::traits::{One, Saturating}; use rand::{SeedableRng, seq::SliceRandom}; use rand_chacha::ChaCha20Rng; @@ -183,10 +183,18 @@ decl_storage! { /// Bounded by the number of parathread cores and scheduling lookahead. Reasonably, 10 * 50 = 500. ParathreadClaimIndex: Vec; /// The block number where the session start occurred. Used to track how many group rotations have occurred. + /// + /// Note that in the context of parachains modules the session change is signalled during + /// the block and enacted at the end of the block (at the finalization stage, to be exact). + /// Thus for all intents and purposes the effect of the session change is observed at the + /// block following the session change, block number of which we save in this storage value. SessionStartBlock get(fn session_start_block): T::BlockNumber; /// Currently scheduled cores - free but up to be occupied. /// /// Bounded by the number of cores: one for each parachain and parathread multiplexer. + /// + /// The value contained here will not be valid after the end of a block. Runtime APIs should be used to determine scheduled cores/ + /// for the upcoming block. Scheduled get(fn scheduled): Vec; // sorted ascending by CoreIndex. } } @@ -205,30 +213,11 @@ decl_module! { impl Module { /// Called by the initializer to initialize the scheduler module. pub(crate) fn initializer_initialize(_now: T::BlockNumber) -> Weight { - // Free all scheduled cores and return parathread claims to queue, with retries incremented. - let config = >::config(); - ParathreadQueue::mutate(|queue| { - for core_assignment in Scheduled::take() { - if let AssignmentKind::Parathread(collator, retries) = core_assignment.kind { - let entry = ParathreadEntry { - claim: ParathreadClaim(core_assignment.para_id, collator), - retries: retries + 1, - }; - - if entry.retries <= config.parathread_retries { - queue.enqueue_entry(entry, config.parathread_cores); - } - } - } - }); - - Self::schedule(Vec::new()); - 0 } /// Called by the initializer to finalize the scheduler module. - pub(crate) fn initializer_finalize() {} + pub(crate) fn initializer_finalize() { } /// Called by the initializer to note that a new session has started. pub(crate) fn initializer_on_new_session(notification: &SessionChangeNotification) { @@ -250,7 +239,6 @@ impl Module { }, ); - >::set(>::block_number()); AvailabilityCores::mutate(|cores| { // clear all occupied cores. for maybe_occupied in cores.iter_mut() { @@ -337,6 +325,9 @@ impl Module { } }); ParathreadQueue::set(thread_queue); + + let now = >::block_number() + One::one(); + >::set(now); } /// Add a parathread claim to the queue. If there is a competing claim in the queue or currently @@ -375,7 +366,10 @@ impl Module { /// Schedule all unassigned cores, where possible. Provide a list of cores that should be considered /// newly-freed along with the reason for them being freed. The list is assumed to be sorted in /// ascending order by core index. - pub(crate) fn schedule(just_freed_cores: impl IntoIterator) { + pub(crate) fn schedule( + just_freed_cores: impl IntoIterator, + now: T::BlockNumber, + ) { let mut cores = AvailabilityCores::get(); let config = >::config(); @@ -411,7 +405,6 @@ impl Module { let parachains = >::parachains(); let mut scheduled = Scheduled::get(); let mut parathread_queue = ParathreadQueue::get(); - let now = >::block_number(); if ValidatorGroups::get().is_empty() { return } @@ -638,9 +631,8 @@ impl Module { } /// Returns a helper for determining group rotation. - pub(crate) fn group_rotation_info() -> GroupRotationInfo { + pub(crate) fn group_rotation_info(now: T::BlockNumber) -> GroupRotationInfo { let session_start_block = Self::session_start_block(); - let now = >::block_number(); let group_rotation_frequency = >::config() .group_rotation_frequency; @@ -716,6 +708,27 @@ impl Module { }) } } + + // Free all scheduled cores and return parathread claims to queue, with retries incremented. + pub(crate) fn clear() { + let config = >::config(); + ParathreadQueue::mutate(|queue| { + for core_assignment in Scheduled::take() { + if let AssignmentKind::Parathread(collator, retries) = core_assignment.kind { + if !>::is_parathread(core_assignment.para_id) { continue } + + let entry = ParathreadEntry { + claim: ParathreadClaim(core_assignment.para_id, collator), + retries: retries + 1, + }; + + if entry.retries <= config.parathread_retries { + queue.enqueue_entry(entry, config.parathread_cores); + } + } + } + }); + } } #[cfg(test)] @@ -741,21 +754,42 @@ mod tests { Scheduler::initializer_finalize(); Paras::initializer_finalize(); - System::on_finalize(b); - - System::on_initialize(b + 1); - System::set_block_number(b + 1); - if let Some(notification) = new_session(b + 1) { Paras::initializer_on_new_session(¬ification); Scheduler::initializer_on_new_session(¬ification); } + System::on_finalize(b); + + System::on_initialize(b + 1); + System::set_block_number(b + 1); + Paras::initializer_initialize(b + 1); Scheduler::initializer_initialize(b + 1); + + // In the real runt;me this is expected to be called by the `InclusionInherent` module. + Scheduler::clear(); + Scheduler::schedule(Vec::new(), b + 1); } } + fn run_to_end_of_block( + to: BlockNumber, + new_session: impl Fn(BlockNumber) -> Option>, + ) { + run_to_block(to, &new_session); + + Scheduler::initializer_finalize(); + Paras::initializer_finalize(); + + if let Some(notification) = new_session(to + 1) { + Paras::initializer_on_new_session(¬ification); + Scheduler::initializer_on_new_session(¬ification); + } + + System::on_finalize(to); + } + fn default_config() -> HostConfiguration { HostConfiguration { parathread_cores: 3, @@ -1334,11 +1368,14 @@ mod tests { } // now note that cores 0, 2, and 3 were freed. - Scheduler::schedule(vec![ - (CoreIndex(0), FreedReason::Concluded), - (CoreIndex(2), FreedReason::Concluded), - (CoreIndex(3), FreedReason::TimedOut), // should go back on queue. - ]); + Scheduler::schedule( + vec![ + (CoreIndex(0), FreedReason::Concluded), + (CoreIndex(2), FreedReason::Concluded), + (CoreIndex(3), FreedReason::TimedOut), // should go back on queue. + ], + 3 + ); { let scheduled = Scheduler::scheduled(); @@ -1455,10 +1492,13 @@ mod tests { run_to_block(3, |_| None); // now note that cores 0 and 2 were freed. - Scheduler::schedule(vec![ - (CoreIndex(0), FreedReason::Concluded), - (CoreIndex(2), FreedReason::Concluded), - ]); + Scheduler::schedule( + vec![ + (CoreIndex(0), FreedReason::Concluded), + (CoreIndex(2), FreedReason::Concluded), + ], + 3, + ); { let scheduled = Scheduler::scheduled(); @@ -1557,8 +1597,6 @@ mod tests { // one block before first rotation. run_to_block(rotation_frequency, |_| None); - let rotations_since_session_start = (rotation_frequency - session_start_block) / rotation_frequency; - assert_eq!(rotations_since_session_start, 0); assert_groups_rotated(0); // first rotation. @@ -2038,4 +2076,157 @@ mod tests { } }); } + + #[test] + fn session_change_requires_reschedule_dropping_removed_paras() { + let genesis_config = MockGenesisConfig { + configuration: crate::configuration::GenesisConfig { + config: default_config(), + ..Default::default() + }, + ..Default::default() + }; + + assert_eq!(default_config().parathread_cores, 3); + new_test_ext(genesis_config).execute_with(|| { + let chain_a = ParaId::from(1); + let chain_b = ParaId::from(2); + + // ensure that we have 5 groups by registering 2 parachains. + Paras::schedule_para_initialize(chain_a, ParaGenesisArgs { + genesis_head: Vec::new().into(), + validation_code: Vec::new().into(), + parachain: true, + }); + Paras::schedule_para_initialize(chain_b, ParaGenesisArgs { + genesis_head: Vec::new().into(), + validation_code: Vec::new().into(), + parachain: true, + }); + + run_to_block(1, |number| match number { + 1 => Some(SessionChangeNotification { + new_config: default_config(), + validators: vec![ + ValidatorId::from(Sr25519Keyring::Alice.public()), + ValidatorId::from(Sr25519Keyring::Bob.public()), + ValidatorId::from(Sr25519Keyring::Charlie.public()), + ValidatorId::from(Sr25519Keyring::Dave.public()), + ValidatorId::from(Sr25519Keyring::Eve.public()), + ValidatorId::from(Sr25519Keyring::Ferdie.public()), + ValidatorId::from(Sr25519Keyring::One.public()), + ], + random_seed: [99; 32], + ..Default::default() + }), + _ => None, + }); + + assert_eq!(Scheduler::scheduled().len(), 2); + + let groups = ValidatorGroups::get(); + assert_eq!(groups.len(), 5); + + Paras::schedule_para_cleanup(chain_b); + + run_to_end_of_block(2, |number| match number { + 2 => Some(SessionChangeNotification { + new_config: default_config(), + validators: vec![ + ValidatorId::from(Sr25519Keyring::Alice.public()), + ValidatorId::from(Sr25519Keyring::Bob.public()), + ValidatorId::from(Sr25519Keyring::Charlie.public()), + ValidatorId::from(Sr25519Keyring::Dave.public()), + ValidatorId::from(Sr25519Keyring::Eve.public()), + ValidatorId::from(Sr25519Keyring::Ferdie.public()), + ValidatorId::from(Sr25519Keyring::One.public()), + ], + random_seed: [99; 32], + ..Default::default() + }), + _ => None, + }); + + Scheduler::clear(); + Scheduler::schedule(Vec::new(), 3); + + assert_eq!( + Scheduler::scheduled(), + vec![ + CoreAssignment { + core: CoreIndex(0), + para_id: chain_a, + kind: AssignmentKind::Parachain, + group_idx: GroupIndex(0), + } + ], + ); + }); + } + + #[test] + fn parathread_claims_are_pruned_after_deregistration() { + let genesis_config = MockGenesisConfig { + configuration: crate::configuration::GenesisConfig { + config: default_config(), + ..Default::default() + }, + ..Default::default() + }; + + let thread_a = ParaId::from(1); + let thread_b = ParaId::from(2); + + let collator = CollatorId::from(Sr25519Keyring::Alice.public()); + + let schedule_blank_para = |id, is_chain| Paras::schedule_para_initialize(id, ParaGenesisArgs { + genesis_head: Vec::new().into(), + validation_code: Vec::new().into(), + parachain: is_chain, + }); + + new_test_ext(genesis_config).execute_with(|| { + assert_eq!(default_config().parathread_cores, 3); + + schedule_blank_para(thread_a, false); + schedule_blank_para(thread_b, false); + + // start a new session to activate, 5 validators for 5 cores. + run_to_block(1, |number| match number { + 1 => Some(SessionChangeNotification { + new_config: default_config(), + validators: vec![ + ValidatorId::from(Sr25519Keyring::Alice.public()), + ValidatorId::from(Sr25519Keyring::Eve.public()), + ], + ..Default::default() + }), + _ => None, + }); + + Scheduler::add_parathread_claim(ParathreadClaim(thread_a, collator.clone())); + Scheduler::add_parathread_claim(ParathreadClaim(thread_b, collator.clone())); + + run_to_block(2, |_| None); + assert_eq!(Scheduler::scheduled().len(), 2); + + Paras::schedule_para_cleanup(thread_a); + + // start a new session to activate, 5 validators for 5 cores. + run_to_block(3, |number| match number { + 3 => Some(SessionChangeNotification { + new_config: default_config(), + validators: vec![ + ValidatorId::from(Sr25519Keyring::Alice.public()), + ValidatorId::from(Sr25519Keyring::Eve.public()), + ], + ..Default::default() + }), + _ => None, + }); + + assert_eq!(Scheduler::scheduled().len(), 1); + }); + } + } -- GitLab From 034c08b4e088e4caf3d503a3743262826126b40d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 09:16:32 +0100 Subject: [PATCH 200/203] Bump rand from 0.8.1 to 0.8.2 (#2266) Bumps [rand](https://github.com/rust-random/rand) from 0.8.1 to 0.8.2. - [Release notes](https://github.com/rust-random/rand/releases) - [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-random/rand/compare/0.8.1...0.8.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 12 ++++++------ node/test/service/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb32177f88..f24fff6791 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1444,7 +1444,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ "byteorder", - "rand 0.8.1", + "rand 0.8.2", "rustc-hex", "static_assertions", ] @@ -5614,7 +5614,7 @@ dependencies = [ "pallet-vesting", "parity-scale-codec", "polkadot-primitives", - "rand 0.8.1", + "rand 0.8.2", "rand_chacha 0.3.0", "rustc-hex", "sc-keystore", @@ -5855,7 +5855,7 @@ dependencies = [ "polkadot-runtime-parachains", "polkadot-service", "polkadot-test-runtime", - "rand 0.8.1", + "rand 0.8.2", "sc-authority-discovery", "sc-chain-spec", "sc-cli", @@ -6228,9 +6228,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24fcd450d3fa2b592732565aa4f17a27a61c65ece4726353e000939b0edee34" +checksum = "18519b42a40024d661e1714153e9ad0c3de27cd495760ceb09710920f1098b1e" dependencies = [ "libc", "rand_chacha 0.3.0", @@ -9033,7 +9033,7 @@ checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ "cfg-if 1.0.0", "libc", - "rand 0.8.1", + "rand 0.8.2", "redox_syscall 0.2.4", "remove_dir_all", "winapi 0.3.9", diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index db4d1f6af7..4e9daa7cd8 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -10,7 +10,7 @@ futures01 = { package = "futures", version = "0.1.29" } hex = "0.4.2" tracing = "0.1.22" tracing-futures = "0.2.4" -rand = "0.8.1" +rand = "0.8.2" tempfile = "3.2.0" # Polkadot dependencies diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 5c4c9a4024..65d7960c11 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -39,7 +39,7 @@ xcm-executor = { package = "xcm-executor", path = "../../xcm/xcm-executor", defa primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } libsecp256k1 = { version = "0.3.5", default-features = false, optional = true } -rand = { version = "0.8.1", default-features = false } +rand = { version = "0.8.2", default-features = false } rand_chacha = { version = "0.3.0", default-features = false } [dev-dependencies] -- GitLab From 490cbd72fc341973a34acb56a73da50dcd07ee0f Mon Sep 17 00:00:00 2001 From: Robert Klotzner Date: Thu, 14 Jan 2021 11:29:02 +0100 Subject: [PATCH 201/203] Some refactoring in network-bridge in the course of dealing with #2177 (#2263) * More doc fixes. * Minor refactorings in the process of #2177 By having everything peer set related depend directly on the enum the code becomes more clear and it is also straight forward to add more peersets/protocols as the compiler will complain if you forget to implement parts of it. * Add peer set infos on startup properly For feature real_overseer. + Fixes from review. Thanks @coriolinus and @ordian! * More structure in network-bridge Some changes, which would have helped me in groking the code faster. Entry points/public types more to the top. Factored out implementation in their own files, to clear up the top-level view. * Get rid of local ProtocolName type definition. Does not add much at this level. * Fix tests + import cleanup. * Make spaces tabs. * Clarify what correct parameters to send_message are * Be more less vague in docs of send_message. * Apply suggestions from code review Extend copyright on new files to 2021 as well. Co-authored-by: Andronik Ordian Co-authored-by: Andronik Ordian --- Cargo.lock | 26 +- node/network/bridge/src/action.rs | 184 +++++ node/network/bridge/src/lib.rs | 699 ++++++------------ node/network/bridge/src/network.rs | 183 +++++ .../network/bridge/src/validator_discovery.rs | 9 +- node/network/protocol/Cargo.toml | 1 + node/network/protocol/src/lib.rs | 13 +- node/network/protocol/src/peer_set.rs | 90 +++ node/service/src/lib.rs | 2 +- .../src/node/utility/network-bridge.md | 6 +- 10 files changed, 716 insertions(+), 497 deletions(-) create mode 100644 node/network/bridge/src/action.rs create mode 100644 node/network/bridge/src/network.rs create mode 100644 node/network/protocol/src/peer_set.rs diff --git a/Cargo.lock b/Cargo.lock index f24fff6791..a4343dc085 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5247,6 +5247,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-primitives", "sc-network", + "strum 0.20.0", ] [[package]] @@ -8415,7 +8416,7 @@ dependencies = [ "lazy_static", "sp-core", "sp-runtime", - "strum", + "strum 0.16.0", ] [[package]] @@ -8805,7 +8806,16 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6138f8f88a16d90134763314e3fc76fa3ed6a7db4725d6acf9a3ef95a3188d22" dependencies = [ - "strum_macros", + "strum_macros 0.16.0", +] + +[[package]] +name = "strum" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c" +dependencies = [ + "strum_macros 0.20.1", ] [[package]] @@ -8820,6 +8830,18 @@ dependencies = [ "syn 1.0.58", ] +[[package]] +name = "strum_macros" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149" +dependencies = [ + "heck", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.58", +] + [[package]] name = "substrate-bip39" version = "0.4.2" diff --git a/node/network/bridge/src/action.rs b/node/network/bridge/src/action.rs new file mode 100644 index 0000000000..27cbeefbbd --- /dev/null +++ b/node/network/bridge/src/action.rs @@ -0,0 +1,184 @@ +// Copyright 2020-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . +// + +use futures::channel::mpsc; + +use parity_scale_codec::Decode; +use polkadot_node_network_protocol::{ + peer_set::PeerSet, v1 as protocol_v1, PeerId, ReputationChange, +}; +use polkadot_primitives::v1::{AuthorityDiscoveryId, BlockNumber}; +use polkadot_subsystem::messages::NetworkBridgeMessage; +use polkadot_subsystem::{ActiveLeavesUpdate, FromOverseer, OverseerSignal}; +use sc_network::Event as NetworkEvent; + +use polkadot_node_network_protocol::ObservedRole; + +use super::{WireMessage, LOG_TARGET, MALFORMED_MESSAGE_COST}; + +/// Internal type combining all actions a `NetworkBridge` might perform. +/// +/// Both messages coming from the network (`NetworkEvent`) and messages coming from other +/// subsystems (`FromOverseer`) will be converted to `Action` in `run_network` before being +/// processed. +#[derive(Debug)] +pub(crate) enum Action { + /// Ask network to send a validation message. + SendValidationMessages(Vec<(Vec, protocol_v1::ValidationProtocol)>), + + /// Ask network to send a collation message. + SendCollationMessages(Vec<(Vec, protocol_v1::CollationProtocol)>), + + /// Ask network to connect to validators. + ConnectToValidators { + validator_ids: Vec, + connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, + }, + + /// Report a peer to the network implementation (decreasing/increasing its reputation). + ReportPeer(PeerId, ReputationChange), + + /// A subsystem updates us on the relay chain leaves we consider active. + /// + /// Implementation will send `WireMessage::ViewUpdate` message to peers as appropriate to the + /// change. + ActiveLeaves(ActiveLeavesUpdate), + + /// A subsystem updates our view on the latest finalized block. + /// + /// This information is used for view updates, see also `ActiveLeaves`. + BlockFinalized(BlockNumber), + + /// Network tells us about a new peer. + PeerConnected(PeerSet, PeerId, ObservedRole), + + /// Network tells us about a peer that left. + PeerDisconnected(PeerSet, PeerId), + + /// Messages from the network targeted to other subsystems. + PeerMessages( + PeerId, + Vec>, + Vec>, + ), + + Abort, + Nop, +} + +impl From>> for Action { + #[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] + fn from(res: polkadot_subsystem::SubsystemResult>) -> Self { + match res { + Ok(FromOverseer::Signal(OverseerSignal::ActiveLeaves(active_leaves))) => { + Action::ActiveLeaves(active_leaves) + } + Ok(FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, number))) => { + Action::BlockFinalized(number) + } + Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => Action::Abort, + Ok(FromOverseer::Communication { msg }) => match msg { + NetworkBridgeMessage::ReportPeer(peer, rep) => Action::ReportPeer(peer, rep), + NetworkBridgeMessage::SendValidationMessage(peers, msg) => { + Action::SendValidationMessages(vec![(peers, msg)]) + } + NetworkBridgeMessage::SendCollationMessage(peers, msg) => { + Action::SendCollationMessages(vec![(peers, msg)]) + } + NetworkBridgeMessage::SendValidationMessages(msgs) => { + Action::SendValidationMessages(msgs) + } + NetworkBridgeMessage::SendCollationMessages(msgs) => { + Action::SendCollationMessages(msgs) + } + NetworkBridgeMessage::ConnectToValidators { + validator_ids, + connected, + } => Action::ConnectToValidators { + validator_ids, + connected, + }, + }, + Err(e) => { + tracing::warn!(target: LOG_TARGET, err = ?e, "Shutting down Network Bridge due to error"); + Action::Abort + } + } + } +} + +impl From> for Action { + #[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] + fn from(event: Option) -> Action { + match event { + None => { + tracing::info!( + target: LOG_TARGET, + "Shutting down Network Bridge: underlying event stream concluded" + ); + Action::Abort + } + Some(NetworkEvent::Dht(_)) + | Some(NetworkEvent::SyncConnected { .. }) + | Some(NetworkEvent::SyncDisconnected { .. }) => Action::Nop, + Some(NetworkEvent::NotificationStreamOpened { + remote, + protocol, + role, + }) => { + let role = role.into(); + PeerSet::try_from_protocol_name(&protocol).map_or(Action::Nop, |peer_set| { + Action::PeerConnected(peer_set, remote, role) + }) + } + Some(NetworkEvent::NotificationStreamClosed { remote, protocol }) => { + PeerSet::try_from_protocol_name(&protocol).map_or(Action::Nop, |peer_set| { + Action::PeerDisconnected(peer_set, remote) + }) + } + Some(NetworkEvent::NotificationsReceived { remote, messages }) => { + let v_messages: Result, _> = messages + .iter() + .filter(|(protocol, _)| protocol == &PeerSet::Validation.into_protocol_name()) + .map(|(_, msg_bytes)| WireMessage::decode(&mut msg_bytes.as_ref())) + .collect(); + + let v_messages = match v_messages { + Err(_) => return Action::ReportPeer(remote, MALFORMED_MESSAGE_COST), + Ok(v) => v, + }; + + let c_messages: Result, _> = messages + .iter() + .filter(|(protocol, _)| protocol == &PeerSet::Collation.into_protocol_name()) + .map(|(_, msg_bytes)| WireMessage::decode(&mut msg_bytes.as_ref())) + .collect(); + + match c_messages { + Err(_) => Action::ReportPeer(remote, MALFORMED_MESSAGE_COST), + Ok(c_messages) => { + if v_messages.is_empty() && c_messages.is_empty() { + Action::Nop + } else { + Action::PeerMessages(remote, v_messages, c_messages) + } + } + } + } + } + } +} diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 3512ee48ee..dc0f0903bd 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -22,14 +22,9 @@ use parity_scale_codec::{Encode, Decode}; use futures::prelude::*; -use futures::future::BoxFuture; -use futures::stream::BoxStream; -use futures::channel::mpsc; - -use sc_network::Event as NetworkEvent; use polkadot_subsystem::{ - ActiveLeavesUpdate, FromOverseer, OverseerSignal, Subsystem, SubsystemContext, SpawnedSubsystem, SubsystemError, + ActiveLeavesUpdate, Subsystem, SubsystemContext, SpawnedSubsystem, SubsystemError, SubsystemResult, JaegerSpan, }; use polkadot_subsystem::messages::{ @@ -37,27 +32,41 @@ use polkadot_subsystem::messages::{ BitfieldDistributionMessage, PoVDistributionMessage, StatementDistributionMessage, CollatorProtocolMessage, }; -use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash, BlockNumber}; +use polkadot_primitives::v1::{Hash, BlockNumber}; use polkadot_node_network_protocol::{ - ObservedRole, ReputationChange, PeerId, PeerSet, View, NetworkBridgeEvent, v1 as protocol_v1, OurView, + ReputationChange, PeerId, peer_set::PeerSet, View, NetworkBridgeEvent, v1 as protocol_v1, OurView, }; +/// Peer set infos for network initialization. +/// +/// To be added to [`NetworkConfiguration::extra_sets`]. +pub use polkadot_node_network_protocol::peer_set::peer_sets_info; + use std::collections::{HashMap, hash_map}; use std::iter::ExactSizeIterator; -use std::pin::Pin; use std::sync::Arc; mod validator_discovery; +/// Internally used `Action` type. +/// +/// All requested `NetworkBridgeMessage` user actions and `NetworkEvent` network messages are +/// translated to `Action` before being processed by `run_network`. +mod action; +use action::Action; + +/// Actual interfacing to the network based on the `Network` trait. +/// +/// Defines the `Network` trait with an implementation for an `Arc`. +mod network; +use network::{Network, send_message}; + + /// The maximum amount of heads a peer is allowed to have in their view at any time. /// /// We use the same limit to compute the view sent to peers locally. const MAX_VIEW_HEADS: usize = 5; -/// The protocol name for the validation peer-set. -pub const VALIDATION_PROTOCOL_NAME: &'static str = "/polkadot/validation/1"; -/// The protocol name for the collation peer-set. -pub const COLLATION_PROTOCOL_NAME: &'static str = "/polkadot/collation/1"; const MALFORMED_MESSAGE_COST: ReputationChange = ReputationChange::new(-500, "Malformed Network-bridge message"); const UNCONNECTED_PEERSET_COST: ReputationChange = ReputationChange::new(-50, "Message sent to un-connected peer-set"); @@ -67,7 +76,9 @@ const EMPTY_VIEW_COST: ReputationChange = ReputationChange::new(-500, "Peer sent // network bridge log target const LOG_TARGET: &'static str = "network_bridge"; -/// Messages received on the network. +/// Messages from and to the network. +/// +/// As transmitted to and received from subsystems. #[derive(Debug, Encode, Decode, Clone)] pub enum WireMessage { /// A message from a peer on a specific protocol. @@ -78,136 +89,10 @@ pub enum WireMessage { ViewUpdate(View), } -/// Information about the extra peers set. Should be used during network configuration -/// to register the protocol with the network service. -pub fn peers_sets_info() -> Vec { - vec![ - sc_network::config::NonDefaultSetConfig { - notifications_protocol: VALIDATION_PROTOCOL_NAME.into(), - set_config: sc_network::config::SetConfig { - in_peers: 25, - out_peers: 0, - reserved_nodes: Vec::new(), - non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, - }, - }, - sc_network::config::NonDefaultSetConfig { - notifications_protocol: COLLATION_PROTOCOL_NAME.into(), - set_config: sc_network::config::SetConfig { - in_peers: 25, - out_peers: 0, - reserved_nodes: Vec::new(), - non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, - }, - } - ] -} - -/// An action to be carried out by the network. -#[derive(Debug, PartialEq)] -pub enum NetworkAction { - /// Note a change in reputation for a peer. - ReputationChange(PeerId, ReputationChange), - /// Write a notification to a given peer on the given peer-set. - WriteNotification(PeerId, PeerSet, Vec), -} - -/// An abstraction over networking for the purposes of this subsystem. -pub trait Network: Send + 'static { - /// Get a stream of all events occurring on the network. This may include events unrelated - /// to the Polkadot protocol - the user of this function should filter only for events related - /// to the [`VALIDATION_PROTOCOL_NAME`](VALIDATION_PROTOCOL_NAME) - /// or [`COLLATION_PROTOCOL_NAME`](COLLATION_PROTOCOL_NAME) - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent>; - - /// Get access to an underlying sink for all network actions. - fn action_sink<'a>(&'a mut self) -> Pin< - Box + Send + 'a> - >; - - /// Report a given peer as either beneficial (+) or costly (-) according to the given scalar. - fn report_peer(&mut self, who: PeerId, cost_benefit: ReputationChange) - -> BoxFuture> - { - async move { - self.action_sink().send(NetworkAction::ReputationChange(who, cost_benefit)).await - }.boxed() - } - - /// Write a notification to a peer on the given peer-set's protocol. - fn write_notification(&mut self, who: PeerId, peer_set: PeerSet, message: Vec) - -> BoxFuture> - { - async move { - self.action_sink().send(NetworkAction::WriteNotification(who, peer_set, message)).await - }.boxed() - } -} - -impl Network for Arc> { - fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { - sc_network::NetworkService::event_stream(self, "polkadot-network-bridge").boxed() - } - - #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] - fn action_sink<'a>(&'a mut self) - -> Pin + Send + 'a>> - { - use futures::task::{Poll, Context}; - - // wrapper around a NetworkService to make it act like a sink. - struct ActionSink<'b>(&'b sc_network::NetworkService); - - impl<'b> Sink for ActionSink<'b> { - type Error = SubsystemError; - - fn poll_ready(self: Pin<&mut Self>, _: &mut Context) -> Poll> { - Poll::Ready(Ok(())) - } - - fn start_send(self: Pin<&mut Self>, action: NetworkAction) -> SubsystemResult<()> { - match action { - NetworkAction::ReputationChange(peer, cost_benefit) => { - tracing::debug!(target: LOG_TARGET, "Changing reputation: {:?} for {}", cost_benefit, peer); - self.0.report_peer( - peer, - cost_benefit, - ) - } - NetworkAction::WriteNotification(peer, peer_set, message) => { - match peer_set { - PeerSet::Validation => self.0.write_notification( - peer, - VALIDATION_PROTOCOL_NAME.into(), - message, - ), - PeerSet::Collation => self.0.write_notification( - peer, - COLLATION_PROTOCOL_NAME.into(), - message, - ), - } - } - } - - Ok(()) - } - - fn poll_flush(self: Pin<&mut Self>, _: &mut Context) -> Poll> { - Poll::Ready(Ok(())) - } - - fn poll_close(self: Pin<&mut Self>, _: &mut Context) -> Poll> { - Poll::Ready(Ok(())) - } - } - - Box::pin(ActionSink(&**self)) - } -} /// The network bridge subsystem. pub struct NetworkBridge { + /// `Network` trait implementing type. network_service: N, authority_discovery_service: AD, } @@ -256,114 +141,193 @@ struct PeerData { view: View, } -#[derive(Debug)] -enum Action { - SendValidationMessages(Vec<(Vec, protocol_v1::ValidationProtocol)>), - SendCollationMessages(Vec<(Vec, protocol_v1::CollationProtocol)>), - ConnectToValidators { - validator_ids: Vec, - connected: mpsc::Sender<(AuthorityDiscoveryId, PeerId)>, - }, - ReportPeer(PeerId, ReputationChange), - - ActiveLeaves(ActiveLeavesUpdate), - BlockFinalized(BlockNumber), - - PeerConnected(PeerSet, PeerId, ObservedRole), - PeerDisconnected(PeerSet, PeerId), - PeerMessages( - PeerId, - Vec>, - Vec>, - ), - - Abort, - Nop, -} +/// Main driver, processing network events and messages from other subsystems. +#[tracing::instrument(skip(network_service, authority_discovery_service, ctx), fields(subsystem = LOG_TARGET))] +async fn run_network( + mut network_service: N, + mut authority_discovery_service: AD, + mut ctx: impl SubsystemContext, +) -> SubsystemResult<()> +where + N: Network + validator_discovery::Network, + AD: validator_discovery::AuthorityDiscovery, +{ + let mut event_stream = network_service.event_stream().fuse(); -#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] -fn action_from_overseer_message( - res: polkadot_subsystem::SubsystemResult>, -) -> Action { - match res { - Ok(FromOverseer::Signal(OverseerSignal::ActiveLeaves(active_leaves))) - => Action::ActiveLeaves(active_leaves), - Ok(FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, number))) - => Action::BlockFinalized(number), - Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => Action::Abort, - Ok(FromOverseer::Communication { msg }) => match msg { - NetworkBridgeMessage::ReportPeer(peer, rep) => Action::ReportPeer(peer, rep), - NetworkBridgeMessage::SendValidationMessage(peers, msg) - => Action::SendValidationMessages(vec![(peers, msg)]), - NetworkBridgeMessage::SendCollationMessage(peers, msg) - => Action::SendCollationMessages(vec![(peers, msg)]), - NetworkBridgeMessage::SendValidationMessages(msgs) - => Action::SendValidationMessages(msgs), - NetworkBridgeMessage::SendCollationMessages(msgs) - => Action::SendCollationMessages(msgs), - NetworkBridgeMessage::ConnectToValidators { validator_ids, connected } - => Action::ConnectToValidators { validator_ids, connected }, - }, - Err(e) => { - tracing::warn!(target: LOG_TARGET, err = ?e, "Shutting down Network Bridge due to error"); - Action::Abort - } - } -} + // Most recent heads are at the back. + let mut live_heads: Vec<(Hash, Arc)> = Vec::with_capacity(MAX_VIEW_HEADS); + let mut local_view = View::default(); + let mut finalized_number = 0; -#[tracing::instrument(level = "trace", fields(subsystem = LOG_TARGET))] -fn action_from_network_message(event: Option) -> Action { - match event { - None => { - tracing::info!(target: LOG_TARGET, "Shutting down Network Bridge: underlying event stream concluded"); - Action::Abort - } - Some(NetworkEvent::Dht(_)) | - Some(NetworkEvent::SyncConnected { .. }) | - Some(NetworkEvent::SyncDisconnected { .. }) => Action::Nop, - Some(NetworkEvent::NotificationStreamOpened { remote, protocol, role }) => { - let role = role.into(); - match protocol { - x if x == VALIDATION_PROTOCOL_NAME - => Action::PeerConnected(PeerSet::Validation, remote, role), - x if x == COLLATION_PROTOCOL_NAME - => Action::PeerConnected(PeerSet::Collation, remote, role), - _ => Action::Nop, + let mut validation_peers: HashMap = HashMap::new(); + let mut collation_peers: HashMap = HashMap::new(); + + let mut validator_discovery = validator_discovery::Service::::new(); + + loop { + + let action = { + let subsystem_next = ctx.recv().fuse(); + let mut net_event_next = event_stream.next().fuse(); + futures::pin_mut!(subsystem_next); + + futures::select! { + subsystem_msg = subsystem_next => Action::from(subsystem_msg), + net_event = net_event_next => Action::from(net_event), } - } - Some(NetworkEvent::NotificationStreamClosed { remote, protocol }) => { - match protocol { - x if x == VALIDATION_PROTOCOL_NAME - => Action::PeerDisconnected(PeerSet::Validation, remote), - x if x == COLLATION_PROTOCOL_NAME - => Action::PeerDisconnected(PeerSet::Collation, remote), - _ => Action::Nop, + }; + + match action { + Action::Nop => {} + Action::Abort => return Ok(()), + + Action::SendValidationMessages(msgs) => { + for (peers, msg) in msgs { + send_message( + &mut network_service, + peers, + PeerSet::Validation, + WireMessage::ProtocolMessage(msg), + ).await? + } } - } - Some(NetworkEvent::NotificationsReceived { remote, messages }) => { - let v_messages: Result, _> = messages.iter() - .filter(|(protocol, _)| protocol == &VALIDATION_PROTOCOL_NAME) - .map(|(_, msg_bytes)| WireMessage::decode(&mut msg_bytes.as_ref())) - .collect(); - - let v_messages = match v_messages { - Err(_) => return Action::ReportPeer(remote, MALFORMED_MESSAGE_COST), - Ok(v) => v, - }; - - let c_messages: Result, _> = messages.iter() - .filter(|(protocol, _)| protocol == &COLLATION_PROTOCOL_NAME) - .map(|(_, msg_bytes)| WireMessage::decode(&mut msg_bytes.as_ref())) - .collect(); - - match c_messages { - Err(_) => Action::ReportPeer(remote, MALFORMED_MESSAGE_COST), - Ok(c_messages) => if v_messages.is_empty() && c_messages.is_empty() { - Action::Nop - } else { - Action::PeerMessages(remote, v_messages, c_messages) - }, + + Action::SendCollationMessages(msgs) => { + for (peers, msg) in msgs { + send_message( + &mut network_service, + peers, + PeerSet::Collation, + WireMessage::ProtocolMessage(msg), + ).await? + } + } + + Action::ConnectToValidators { + validator_ids, + connected, + } => { + let (ns, ads) = validator_discovery.on_request( + validator_ids, + connected, + network_service, + authority_discovery_service, + ).await; + network_service = ns; + authority_discovery_service = ads; + }, + + Action::ReportPeer(peer, rep) => network_service.report_peer(peer, rep).await?, + + Action::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated }) => { + live_heads.extend(activated); + live_heads.retain(|h| !deactivated.contains(&h.0)); + + update_our_view( + &mut network_service, + &mut ctx, + &live_heads, + &mut local_view, + finalized_number, + &validation_peers, + &collation_peers, + ).await?; } + + Action::BlockFinalized(number) => { + debug_assert!(finalized_number < number); + + // we don't send the view updates here, but delay them until the next `Action::ActiveLeaves` + // otherwise it might break assumptions of some of the subsystems + // that we never send the same `ActiveLeavesUpdate` + // this is fine, we will get `Action::ActiveLeaves` on block finalization anyway + finalized_number = number; + }, + + Action::PeerConnected(peer_set, peer, role) => { + let peer_map = match peer_set { + PeerSet::Validation => &mut validation_peers, + PeerSet::Collation => &mut collation_peers, + }; + + validator_discovery.on_peer_connected(&peer, &mut authority_discovery_service).await; + + match peer_map.entry(peer.clone()) { + hash_map::Entry::Occupied(_) => continue, + hash_map::Entry::Vacant(vacant) => { + let _ = vacant.insert(PeerData { + view: View::default(), + }); + + match peer_set { + PeerSet::Validation => dispatch_validation_events_to_all( + vec![ + NetworkBridgeEvent::PeerConnected(peer.clone(), role), + NetworkBridgeEvent::PeerViewChange( + peer, + View::default(), + ), + ], + &mut ctx, + ).await, + PeerSet::Collation => dispatch_collation_events_to_all( + vec![ + NetworkBridgeEvent::PeerConnected(peer.clone(), role), + NetworkBridgeEvent::PeerViewChange( + peer, + View::default(), + ), + ], + &mut ctx, + ).await, + } + } + } + } + Action::PeerDisconnected(peer_set, peer) => { + let peer_map = match peer_set { + PeerSet::Validation => &mut validation_peers, + PeerSet::Collation => &mut collation_peers, + }; + + validator_discovery.on_peer_disconnected(&peer); + + if peer_map.remove(&peer).is_some() { + match peer_set { + PeerSet::Validation => dispatch_validation_event_to_all( + NetworkBridgeEvent::PeerDisconnected(peer), + &mut ctx, + ).await, + PeerSet::Collation => dispatch_collation_event_to_all( + NetworkBridgeEvent::PeerDisconnected(peer), + &mut ctx, + ).await, + } + } + }, + Action::PeerMessages(peer, v_messages, c_messages) => { + if !v_messages.is_empty() { + let events = handle_peer_messages( + peer.clone(), + &mut validation_peers, + v_messages, + &mut network_service, + ).await?; + + dispatch_validation_events_to_all(events, &mut ctx).await; + } + + if !c_messages.is_empty() { + let events = handle_peer_messages( + peer.clone(), + &mut collation_peers, + c_messages, + &mut network_service, + ).await?; + + dispatch_collation_events_to_all(events, &mut ctx).await; + } + }, } } } @@ -497,41 +461,6 @@ async fn send_collation_message( send_message(net, peers, PeerSet::Collation, message).await } -async fn send_message( - net: &mut impl Network, - peers: I, - peer_set: PeerSet, - message: WireMessage, -) -> SubsystemResult<()> - where - M: Encode + Clone, - I: IntoIterator, - I::IntoIter: ExactSizeIterator, -{ - let mut message_producer = stream::iter({ - let peers = peers.into_iter(); - let n_peers = peers.len(); - let mut message = Some(message.encode()); - - peers.enumerate().map(move |(i, peer)| { - // optimization: avoid cloning the message for the last peer in the - // list. The message payload can be quite large. If the underlying - // network used `Bytes` this would not be necessary. - let message = if i == n_peers - 1 { - message.take() - .expect("Only taken in last iteration of loop, never afterwards; qed") - } else { - message.as_ref() - .expect("Only taken in last iteration of loop, we are not there yet; qed") - .clone() - }; - - Ok(NetworkAction::WriteNotification(peer, peer_set, message)) - }) - }); - - net.action_sink().send_all(&mut message_producer).await -} async fn dispatch_validation_event_to_all( event: NetworkBridgeEvent, @@ -597,210 +526,27 @@ async fn dispatch_collation_events_to_all( ctx.send_messages(events.into_iter().flat_map(messages_for)).await } -#[tracing::instrument(skip(network_service, authority_discovery_service, ctx), fields(subsystem = LOG_TARGET))] -async fn run_network( - mut network_service: N, - mut authority_discovery_service: AD, - mut ctx: impl SubsystemContext, -) -> SubsystemResult<()> -where - N: Network + validator_discovery::Network, - AD: validator_discovery::AuthorityDiscovery, -{ - let mut event_stream = network_service.event_stream().fuse(); - - // Most recent heads are at the back. - let mut live_heads: Vec<(Hash, Arc)> = Vec::with_capacity(MAX_VIEW_HEADS); - let mut local_view = View::default(); - let mut finalized_number = 0; - - let mut validation_peers: HashMap = HashMap::new(); - let mut collation_peers: HashMap = HashMap::new(); - - let mut validator_discovery = validator_discovery::Service::::new(); - - loop { - - let action = { - let subsystem_next = ctx.recv().fuse(); - let mut net_event_next = event_stream.next().fuse(); - futures::pin_mut!(subsystem_next); - - futures::select! { - subsystem_msg = subsystem_next => action_from_overseer_message(subsystem_msg), - net_event = net_event_next => action_from_network_message(net_event), - } - }; - - match action { - Action::Nop => {} - Action::Abort => return Ok(()), - - Action::SendValidationMessages(msgs) => { - for (peers, msg) in msgs { - send_message( - &mut network_service, - peers, - PeerSet::Validation, - WireMessage::ProtocolMessage(msg), - ).await? - } - } - - Action::SendCollationMessages(msgs) => { - for (peers, msg) in msgs { - send_message( - &mut network_service, - peers, - PeerSet::Collation, - WireMessage::ProtocolMessage(msg), - ).await? - } - } - - Action::ConnectToValidators { - validator_ids, - connected, - } => { - let (ns, ads) = validator_discovery.on_request( - validator_ids, - connected, - network_service, - authority_discovery_service, - ).await; - network_service = ns; - authority_discovery_service = ads; - }, - - Action::ReportPeer(peer, rep) => network_service.report_peer(peer, rep).await?, - - Action::ActiveLeaves(ActiveLeavesUpdate { activated, deactivated }) => { - live_heads.extend(activated); - live_heads.retain(|h| !deactivated.contains(&h.0)); - - update_our_view( - &mut network_service, - &mut ctx, - &live_heads, - &mut local_view, - finalized_number, - &validation_peers, - &collation_peers, - ).await?; - } - - Action::BlockFinalized(number) => { - debug_assert!(finalized_number < number); - - // we don't send the view updates here, but delay them until the next `Action::ActiveLeaves` - // otherwise it might break assumptions of some of the subsystems - // that we never send the same `ActiveLeavesUpdate` - // this is fine, we will get `Action::ActiveLeaves` on block finalization anyway - finalized_number = number; - }, - - Action::PeerConnected(peer_set, peer, role) => { - let peer_map = match peer_set { - PeerSet::Validation => &mut validation_peers, - PeerSet::Collation => &mut collation_peers, - }; - validator_discovery.on_peer_connected(&peer, &mut authority_discovery_service).await; - - match peer_map.entry(peer.clone()) { - hash_map::Entry::Occupied(_) => continue, - hash_map::Entry::Vacant(vacant) => { - let _ = vacant.insert(PeerData { - view: View::default(), - }); - - match peer_set { - PeerSet::Validation => dispatch_validation_events_to_all( - vec![ - NetworkBridgeEvent::PeerConnected(peer.clone(), role), - NetworkBridgeEvent::PeerViewChange( - peer, - View::default(), - ), - ], - &mut ctx, - ).await, - PeerSet::Collation => dispatch_collation_events_to_all( - vec![ - NetworkBridgeEvent::PeerConnected(peer.clone(), role), - NetworkBridgeEvent::PeerViewChange( - peer, - View::default(), - ), - ], - &mut ctx, - ).await, - } - } - } - } - Action::PeerDisconnected(peer_set, peer) => { - let peer_map = match peer_set { - PeerSet::Validation => &mut validation_peers, - PeerSet::Collation => &mut collation_peers, - }; - - validator_discovery.on_peer_disconnected(&peer); - - if peer_map.remove(&peer).is_some() { - match peer_set { - PeerSet::Validation => dispatch_validation_event_to_all( - NetworkBridgeEvent::PeerDisconnected(peer), - &mut ctx, - ).await, - PeerSet::Collation => dispatch_collation_event_to_all( - NetworkBridgeEvent::PeerDisconnected(peer), - &mut ctx, - ).await, - } - } - }, - Action::PeerMessages(peer, v_messages, c_messages) => { - if !v_messages.is_empty() { - let events = handle_peer_messages( - peer.clone(), - &mut validation_peers, - v_messages, - &mut network_service, - ).await?; - - dispatch_validation_events_to_all(events, &mut ctx).await; - } - - if !c_messages.is_empty() { - let events = handle_peer_messages( - peer.clone(), - &mut collation_peers, - c_messages, - &mut network_service, - ).await?; - - dispatch_collation_events_to_all(events, &mut ctx).await; - } - }, - } - } -} #[cfg(test)] mod tests { use super::*; use futures::executor; + use futures::stream::BoxStream; + use std::pin::Pin; + use std::sync::Arc; use std::borrow::Cow; - use std::sync::Arc; use std::collections::HashSet; use async_trait::async_trait; use parking_lot::Mutex; use assert_matches::assert_matches; + use sc_network::Event as NetworkEvent; + use polkadot_subsystem::messages::{StatementDistributionMessage, BitfieldDistributionMessage}; + use polkadot_subsystem::{ActiveLeavesUpdate, FromOverseer, OverseerSignal}; use polkadot_node_subsystem_test_helpers::{ SingleItemSink, SingleItemStream, TestSubsystemContextHandle, }; @@ -808,6 +554,10 @@ mod tests { use polkadot_node_network_protocol::view; use sc_network::Multiaddr; use sp_keyring::Sr25519Keyring; + use polkadot_primitives::v1::AuthorityDiscoveryId; + use polkadot_node_network_protocol::ObservedRole; + + use crate::network::{Network, NetworkAction}; // The subsystem's view of the network - only supports a single call to `event_stream`. struct TestNetwork { @@ -845,13 +595,6 @@ mod tests { ) } - fn peer_set_protocol(peer_set: PeerSet) -> std::borrow::Cow<'static, str> { - match peer_set { - PeerSet::Validation => VALIDATION_PROTOCOL_NAME.into(), - PeerSet::Collation => COLLATION_PROTOCOL_NAME.into(), - } - } - impl Network for TestNetwork { fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { self.net_events.lock() @@ -908,7 +651,7 @@ mod tests { async fn connect_peer(&mut self, peer: PeerId, peer_set: PeerSet, role: ObservedRole) { self.send_network_event(NetworkEvent::NotificationStreamOpened { remote: peer, - protocol: peer_set_protocol(peer_set), + protocol: peer_set.into_protocol_name(), role: role.into(), }).await; } @@ -916,14 +659,14 @@ mod tests { async fn disconnect_peer(&mut self, peer: PeerId, peer_set: PeerSet) { self.send_network_event(NetworkEvent::NotificationStreamClosed { remote: peer, - protocol: peer_set_protocol(peer_set), + protocol: peer_set.into_protocol_name(), }).await; } async fn peer_message(&mut self, peer: PeerId, peer_set: PeerSet, message: Vec) { self.send_network_event(NetworkEvent::NotificationsReceived { remote: peer, - messages: vec![(peer_set_protocol(peer_set), message.into())], + messages: vec![(peer_set.into_protocol_name(), message.into())], }).await; } diff --git a/node/network/bridge/src/network.rs b/node/network/bridge/src/network.rs new file mode 100644 index 0000000000..c6a2bc4bdd --- /dev/null +++ b/node/network/bridge/src/network.rs @@ -0,0 +1,183 @@ +// Copyright 2020-2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use std::pin::Pin; +use std::sync::Arc; + +use futures::future::BoxFuture; +use futures::prelude::*; +use futures::stream::BoxStream; + +use parity_scale_codec::Encode; + +use sc_network::Event as NetworkEvent; + +use super::LOG_TARGET; +use polkadot_node_network_protocol::{peer_set::PeerSet, PeerId, ReputationChange}; +use polkadot_primitives::v1::{Block, Hash}; +use polkadot_subsystem::{SubsystemError, SubsystemResult}; + +/// Send a message to the network. +/// +/// This function is only used internally by the network-bridge, which is responsible to only send +/// messages that are compatible with the passed peer set, as that is currently not enforced by +/// this function. These are messages of type `WireMessage` parameterized on the matching type. +pub(crate) async fn send_message( + net: &mut impl Network, + peers: I, + peer_set: PeerSet, + message: M, +) -> SubsystemResult<()> +where + M: Encode + Clone, + I: IntoIterator, + I::IntoIter: ExactSizeIterator, +{ + let mut message_producer = stream::iter({ + let peers = peers.into_iter(); + let n_peers = peers.len(); + let mut message = Some(message.encode()); + + peers.enumerate().map(move |(i, peer)| { + // optimization: avoid cloning the message for the last peer in the + // list. The message payload can be quite large. If the underlying + // network used `Bytes` this would not be necessary. + let message = if i == n_peers - 1 { + message + .take() + .expect("Only taken in last iteration of loop, never afterwards; qed") + } else { + message + .as_ref() + .expect("Only taken in last iteration of loop, we are not there yet; qed") + .clone() + }; + + Ok(NetworkAction::WriteNotification(peer, peer_set, message)) + }) + }); + + net.action_sink().send_all(&mut message_producer).await +} + +/// An action to be carried out by the network. +/// +/// This type is used for implementing `Sink` in order to cummunicate asynchronously with the +/// underlying network implementation in the `Network` trait. +#[derive(Debug, PartialEq)] +pub enum NetworkAction { + /// Note a change in reputation for a peer. + ReputationChange(PeerId, ReputationChange), + /// Write a notification to a given peer on the given peer-set. + WriteNotification(PeerId, PeerSet, Vec), +} + +/// An abstraction over networking for the purposes of this subsystem. +/// +pub trait Network: Send + 'static { + /// Get a stream of all events occurring on the network. This may include events unrelated + /// to the Polkadot protocol - the user of this function should filter only for events related + /// to the [`VALIDATION_PROTOCOL_NAME`](VALIDATION_PROTOCOL_NAME) + /// or [`COLLATION_PROTOCOL_NAME`](COLLATION_PROTOCOL_NAME) + fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent>; + + /// Get access to an underlying sink for all network actions. + fn action_sink<'a>( + &'a mut self, + ) -> Pin + Send + 'a>>; + + /// Report a given peer as either beneficial (+) or costly (-) according to the given scalar. + fn report_peer( + &mut self, + who: PeerId, + cost_benefit: ReputationChange, + ) -> BoxFuture> { + async move { + self.action_sink() + .send(NetworkAction::ReputationChange(who, cost_benefit)) + .await + } + .boxed() + } + + /// Write a notification to a peer on the given peer-set's protocol. + fn write_notification( + &mut self, + who: PeerId, + peer_set: PeerSet, + message: Vec, + ) -> BoxFuture> { + async move { + self.action_sink() + .send(NetworkAction::WriteNotification(who, peer_set, message)) + .await + } + .boxed() + } +} + +impl Network for Arc> { + fn event_stream(&mut self) -> BoxStream<'static, NetworkEvent> { + sc_network::NetworkService::event_stream(self, "polkadot-network-bridge").boxed() + } + + #[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))] + fn action_sink<'a>( + &'a mut self, + ) -> Pin + Send + 'a>> { + use futures::task::{Context, Poll}; + + // wrapper around a NetworkService to make it act like a sink. + struct ActionSink<'b>(&'b sc_network::NetworkService); + + impl<'b> Sink for ActionSink<'b> { + type Error = SubsystemError; + + fn poll_ready(self: Pin<&mut Self>, _: &mut Context) -> Poll> { + Poll::Ready(Ok(())) + } + + fn start_send(self: Pin<&mut Self>, action: NetworkAction) -> SubsystemResult<()> { + match action { + NetworkAction::ReputationChange(peer, cost_benefit) => { + tracing::debug!( + target: LOG_TARGET, + "Changing reputation: {:?} for {}", + cost_benefit, + peer + ); + self.0.report_peer(peer, cost_benefit) + } + NetworkAction::WriteNotification(peer, peer_set, message) => self + .0 + .write_notification(peer, peer_set.into_protocol_name(), message), + } + + Ok(()) + } + + fn poll_flush(self: Pin<&mut Self>, _: &mut Context) -> Poll> { + Poll::Ready(Ok(())) + } + + fn poll_close(self: Pin<&mut Self>, _: &mut Context) -> Poll> { + Poll::Ready(Ok(())) + } + } + + Box::pin(ActionSink(&**self)) + } +} diff --git a/node/network/bridge/src/validator_discovery.rs b/node/network/bridge/src/validator_discovery.rs index 89e72a7aa9..926aa37066 100644 --- a/node/network/bridge/src/validator_discovery.rs +++ b/node/network/bridge/src/validator_discovery.rs @@ -28,6 +28,7 @@ use sc_network::multiaddr::{Multiaddr, Protocol}; use sc_authority_discovery::Service as AuthorityDiscoveryService; use polkadot_node_network_protocol::PeerId; use polkadot_primitives::v1::{AuthorityDiscoveryId, Block, Hash}; +use polkadot_node_network_protocol::peer_set::PeerSet; const LOG_TARGET: &str = "validator_discovery"; @@ -276,24 +277,24 @@ impl Service { // ask the network to connect to these nodes and not disconnect // from them until removed from the set if let Err(e) = network_service.add_peers_to_reserved_set( - super::COLLATION_PROTOCOL_NAME.into(), + PeerSet::Collation.into_protocol_name(), multiaddr_to_add.clone(), ).await { tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); } if let Err(e) = network_service.add_peers_to_reserved_set( - super::VALIDATION_PROTOCOL_NAME.into(), + PeerSet::Validation.into_protocol_name(), multiaddr_to_add, ).await { tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); } // the addresses are known to be valid let _ = network_service.remove_peers_from_reserved_set( - super::COLLATION_PROTOCOL_NAME.into(), + PeerSet::Collation.into_protocol_name(), multiaddr_to_remove.clone() ).await; let _ = network_service.remove_peers_from_reserved_set( - super::VALIDATION_PROTOCOL_NAME.into(), + PeerSet::Validation.into_protocol_name(), multiaddr_to_remove ).await; diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index 148cc14efd..f06f2ccd4e 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -11,3 +11,4 @@ polkadot-node-primitives = { path = "../../primitives" } polkadot-node-jaeger = { path = "../../jaeger" } parity-scale-codec = { version = "1.3.6", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } +strum = { version = "0.20", features = ["derive"] } diff --git a/node/network/protocol/src/lib.rs b/node/network/protocol/src/lib.rs index 35dc3b3a17..c833ba4b15 100644 --- a/node/network/protocol/src/lib.rs +++ b/node/network/protocol/src/lib.rs @@ -29,6 +29,10 @@ pub use polkadot_node_jaeger::JaegerSpan; #[doc(hidden)] pub use std::sync::Arc; + +/// Peer-sets and protocols used for parachains. +pub mod peer_set; + /// A unique identifier of a request. pub type RequestId = u64; @@ -47,15 +51,6 @@ impl fmt::Display for WrongVariant { impl std::error::Error for WrongVariant {} -/// The peer-sets that the network manages. Different subsystems will use different peer-sets. -#[derive(Debug, Clone, Copy, PartialEq)] -pub enum PeerSet { - /// The validation peer-set is responsible for all messages related to candidate validation and communication among validators. - Validation, - /// The collation peer-set is used for validator<>collator communication. - Collation, -} - /// The advertised role of a node. #[derive(Debug, Clone, Copy, PartialEq)] pub enum ObservedRole { diff --git a/node/network/protocol/src/peer_set.rs b/node/network/protocol/src/peer_set.rs new file mode 100644 index 0000000000..3554aea5c0 --- /dev/null +++ b/node/network/protocol/src/peer_set.rs @@ -0,0 +1,90 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! All peersets and protocols used for parachains. + +use sc_network::config::{NonDefaultSetConfig, SetConfig}; +use std::borrow::Cow; +use strum::{EnumIter, IntoEnumIterator}; + +/// The peer-sets and thus the protocols which are used for the network. +#[derive(Debug, Clone, Copy, PartialEq, EnumIter)] +pub enum PeerSet { + /// The validation peer-set is responsible for all messages related to candidate validation and communication among validators. + Validation, + /// The collation peer-set is used for validator<>collator communication. + Collation, +} + +impl PeerSet { + /// Get `sc_network` peer set configurations for each peerset. + /// + /// Those should be used in the network configuration to register the protocols with the + /// network service. + pub fn get_info(self) -> NonDefaultSetConfig { + let protocol = self.into_protocol_name(); + match self { + PeerSet::Validation => NonDefaultSetConfig { + notifications_protocol: protocol, + set_config: sc_network::config::SetConfig { + in_peers: 25, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, + }, + }, + PeerSet::Collation => NonDefaultSetConfig { + notifications_protocol: protocol, + set_config: SetConfig { + in_peers: 25, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: sc_network::config::NonReservedPeerMode::Accept, + }, + }, + } + } + + /// Get the protocol name associated with each peer set as static str. + pub const fn get_protocol_name_static(self) -> &'static str { + match self { + PeerSet::Validation => "/polkadot/validation/1", + PeerSet::Collation => "/polkadot/collation/1", + } + } + + /// Convert a peer set into a protocol name as understood by Substrate. + pub fn into_protocol_name(self) -> Cow<'static, str> { + self.get_protocol_name_static().into() + } + + /// Try parsing a protocol name into a peer set. + pub fn try_from_protocol_name(name: &Cow<'static, str>) -> Option { + match name { + n if n == &PeerSet::Validation.into_protocol_name() => Some(PeerSet::Validation), + n if n == &PeerSet::Collation.into_protocol_name() => Some(PeerSet::Collation), + _ => None, + } + } +} + +/// Get `NonDefaultSetConfig`s for all available peer sets. +/// +/// Should be used during network configuration (added to [`NetworkConfiguration::extra_sets`]) +/// or shortly after startup to register the protocols with the network service. +pub fn peer_sets_info() -> Vec { + PeerSet::iter().map(PeerSet::get_info).collect() +} diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index ed86833888..0b37e3ae48 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -567,7 +567,7 @@ pub fn new_full( // Substrate nodes. config.network.extra_sets.push(grandpa::grandpa_peers_set_config()); #[cfg(feature = "real-overseer")] - config.network.extra_sets.extend(polkadot_network_bridge::peers_sets_info()); + config.network.extra_sets.extend(polkadot_network_bridge::peer_sets_info()); let (network, network_status_sinks, system_rpc_tx, network_starter) = service::build_network(service::BuildNetworkParams { diff --git a/roadmap/implementers-guide/src/node/utility/network-bridge.md b/roadmap/implementers-guide/src/node/utility/network-bridge.md index 9f51094336..abcff82a16 100644 --- a/roadmap/implementers-guide/src/node/utility/network-bridge.md +++ b/roadmap/implementers-guide/src/node/utility/network-bridge.md @@ -32,7 +32,7 @@ Output: This network bridge sends messages of these types over the network. ```rust -enum ProtocolMessage { +enum WireMessage { ProtocolMessage(M), ViewUpdate(View), } @@ -41,8 +41,8 @@ enum ProtocolMessage { and instantiates this type twice, once using the [`ValidationProtocolV1`][VP1] message type, and once with the [`CollationProtocolV1`][CP1] message type. ```rust -type ValidationV1Message = ProtocolMessage; -type CollationV1Message = ProtocolMessage; +type ValidationV1Message = WireMessage; +type CollationV1Message = WireMessage; ``` ### Startup -- GitLab From a95a2180aeec0aaa115fbf7d059dd241c5701555 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Thu, 14 Jan 2021 11:41:19 +0100 Subject: [PATCH 202/203] small cleanup (#2267) * session_info: fix authorities docstring * overseer: more consistent metrics naming * session_info: mention ordering * use correct bucket sizes Co-authored-by: Peter Goodspeed-Niklaus Co-authored-by: Peter Goodspeed-Niklaus --- node/overseer/src/lib.rs | 54 +++++++++++++++----------- runtime/parachains/src/session_info.rs | 2 +- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index d61b883386..f274f24895 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -1046,9 +1046,9 @@ struct MetricsInner { activated_heads_total: prometheus::Counter, deactivated_heads_total: prometheus::Counter, messages_relayed_total: prometheus::Counter, - message_relay_timing: prometheus::Histogram, - channel_fill_level_to_overseer: prometheus::Histogram, - channel_fill_level_from_overseer: prometheus::Histogram, + message_relay_timings: prometheus::Histogram, + to_overseer_channel_queue_sizes: prometheus::Histogram, + from_overseer_channel_queue_sizes: prometheus::Histogram, } #[derive(Default, Clone)] @@ -1075,12 +1075,12 @@ impl Metrics { /// Provide a timer for the duration between receiving a message and passing it to `route_message` fn time_message_hold(&self) -> MaybeTimer { - self.0.as_ref().map(|metrics| metrics.message_relay_timing.start_timer()) + self.0.as_ref().map(|metrics| metrics.message_relay_timings.start_timer()) } fn channel_fill_level_snapshot(&self, from_overseer: usize, to_overseer: usize) { - self.0.as_ref().map(|metrics| metrics.channel_fill_level_to_overseer.observe(to_overseer as f64)); - self.0.as_ref().map(|metrics| metrics.channel_fill_level_from_overseer.observe(from_overseer as f64)); + self.0.as_ref().map(|metrics| metrics.to_overseer_channel_queue_sizes.observe(to_overseer as f64)); + self.0.as_ref().map(|metrics| metrics.from_overseer_channel_queue_sizes.observe(from_overseer as f64)); } } @@ -1108,11 +1108,11 @@ impl metrics::Metrics for Metrics { )?, registry, )?, - message_relay_timing: prometheus::register( + message_relay_timings: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts { common_opts: prometheus::Opts::new( - "overseer_messages_relay_timing", + "parachain_overseer_messages_relay_timings", "Time spent holding a message in the overseer before passing it to `route_message`", ), // guessing at the desired resolution, but we know that messages will time @@ -1130,26 +1130,34 @@ impl metrics::Metrics for Metrics { )?, registry, )?, - channel_fill_level_from_overseer: prometheus::register( + from_overseer_channel_queue_sizes: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts { common_opts: prometheus::Opts::new( - "overseer_channel_fill_level_from_overseer", + "parachain_from_overseer_channel_queue_sizes", "Number of elements sitting in the channel waiting to be processed.", ), - buckets: prometheus::exponential_buckets(0.00001_f64, 2_f64, (CHANNEL_CAPACITY as f64).log2().ceil() as usize).expect("inputs are within documented range; qed"), + buckets: prometheus::exponential_buckets( + 1_f64, + 2_f64, + (CHANNEL_CAPACITY as f64).log2().ceil() as usize, + ).expect("inputs are within documented range; qed"), } )?, registry, )?, - channel_fill_level_to_overseer: prometheus::register( + to_overseer_channel_queue_sizes: prometheus::register( prometheus::Histogram::with_opts( prometheus::HistogramOpts { common_opts: prometheus::Opts::new( - "overseer_channel_fill_level_to_overseer", + "parachain_to_overseer_channel_queue_sizes", "Number of elements sitting in the channel waiting to be processed.", ), - buckets: prometheus::exponential_buckets(0.00001_f64, 2_f64, (CHANNEL_CAPACITY as f64).log2().ceil() as usize).expect("inputs are within documented range; qed"), + buckets: prometheus::exponential_buckets( + 1_f64, + 2_f64, + (CHANNEL_CAPACITY as f64).log2().ceil() as usize, + ).expect("inputs are within documented range; qed"), } )?, registry, @@ -2052,15 +2060,15 @@ mod tests { fn extract_metrics(registry: &prometheus::Registry) -> HashMap<&'static str, u64> { let gather = registry.gather(); - assert_eq!(gather[0].get_name(), "overseer_channel_fill_level_from_overseer"); - assert_eq!(gather[1].get_name(), "overseer_channel_fill_level_to_overseer"); - assert_eq!(gather[2].get_name(), "overseer_messages_relay_timing"); - assert_eq!(gather[3].get_name(), "parachain_activated_heads_total"); - assert_eq!(gather[4].get_name(), "parachain_deactivated_heads_total"); - assert_eq!(gather[5].get_name(), "parachain_messages_relayed_total"); - let activated = gather[3].get_metric()[0].get_counter().get_value() as u64; - let deactivated = gather[4].get_metric()[0].get_counter().get_value() as u64; - let relayed = gather[5].get_metric()[0].get_counter().get_value() as u64; + assert_eq!(gather[0].get_name(), "parachain_activated_heads_total"); + assert_eq!(gather[1].get_name(), "parachain_deactivated_heads_total"); + assert_eq!(gather[2].get_name(), "parachain_from_overseer_channel_queue_sizes"); + assert_eq!(gather[3].get_name(), "parachain_messages_relayed_total"); + assert_eq!(gather[4].get_name(), "parachain_overseer_messages_relay_timings"); + assert_eq!(gather[5].get_name(), "parachain_to_overseer_channel_queue_sizes"); + let activated = gather[0].get_metric()[0].get_counter().get_value() as u64; + let deactivated = gather[1].get_metric()[0].get_counter().get_value() as u64; + let relayed = gather[3].get_metric()[0].get_counter().get_value() as u64; let mut result = HashMap::new(); result.insert("activated", activated); result.insert("deactivated", deactivated); diff --git a/runtime/parachains/src/session_info.rs b/runtime/parachains/src/session_info.rs index 7a574007a0..bdceb0b8fe 100644 --- a/runtime/parachains/src/session_info.rs +++ b/runtime/parachains/src/session_info.rs @@ -65,7 +65,7 @@ decl_module! { /// An abstraction for the authority discovery pallet /// to help with mock testing. pub trait AuthorityDiscoveryConfig { - /// Retrieve authority identifiers of the current and next authority set. + /// Retrieve authority identifiers of the current authority set in canonical ordering. fn authorities() -> Vec; } -- GitLab From 49207c02772835afaa10426cf13a94ecdae69632 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Thu, 14 Jan 2021 20:07:58 +0800 Subject: [PATCH 203/203] Companion for Substrate#7692 (#2190) * Companion for Substrate#7692 * "Update Substrate" Co-authored-by: parity-processbot <> --- Cargo.lock | 282 ++++++++++++++++---------------- runtime/kusama/src/lib.rs | 5 +- runtime/polkadot/src/lib.rs | 5 +- runtime/rococo/src/lib.rs | 5 +- runtime/test-runtime/src/lib.rs | 5 +- runtime/westend/src/lib.rs | 5 +- 6 files changed, 159 insertions(+), 148 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a4343dc085..514bd051cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1477,7 +1477,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", ] @@ -1495,7 +1495,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -1513,7 +1513,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "Inflector", "chrono", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -1552,7 +1552,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "12.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "serde", @@ -1563,7 +1563,7 @@ dependencies = [ [[package]] name = "frame-support" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "bitflags", "frame-metadata", @@ -1588,7 +1588,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1612,7 +1612,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -1622,7 +1622,7 @@ dependencies = [ [[package]] name = "frame-system" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "impl-trait-for-tuples 0.2.0", @@ -1638,7 +1638,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -1652,7 +1652,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-api", @@ -3907,7 +3907,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -3923,7 +3923,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -3938,7 +3938,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -3963,7 +3963,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -3977,7 +3977,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -3992,7 +3992,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4008,7 +4008,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4023,7 +4023,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4038,7 +4038,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4059,7 +4059,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4075,7 +4075,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4095,7 +4095,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4112,7 +4112,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4126,7 +4126,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4142,7 +4142,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4156,7 +4156,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4171,7 +4171,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4192,7 +4192,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4208,7 +4208,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4221,7 +4221,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "enumflags2", "frame-support", @@ -4236,7 +4236,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4251,7 +4251,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4271,7 +4271,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4287,7 +4287,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4301,7 +4301,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4323,7 +4323,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -4334,7 +4334,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", @@ -4348,7 +4348,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4366,7 +4366,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4381,11 +4381,10 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-support", "frame-system", - "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "serde", "smallvec 1.6.1", @@ -4398,14 +4397,13 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", "jsonrpc-derive", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", - "serde", "sp-api", "sp-blockchain", "sp-core", @@ -4416,20 +4414,18 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ - "frame-support", + "pallet-transaction-payment", "parity-scale-codec", - "serde", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-treasury" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4445,7 +4441,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-benchmarking", "frame-support", @@ -4461,7 +4457,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "enumflags2", "frame-benchmarking", @@ -6717,7 +6713,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "async-trait", "derive_more", @@ -6745,7 +6741,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -6768,7 +6764,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6785,7 +6781,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -6806,7 +6802,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6817,7 +6813,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "atty", "chrono", @@ -6860,7 +6856,7 @@ dependencies = [ [[package]] name = "sc-cli-proc-macro" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -6871,7 +6867,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "fnv", @@ -6905,7 +6901,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "blake2-rfc", "hash-db", @@ -6935,7 +6931,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6946,7 +6942,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "fork-tree", @@ -6991,7 +6987,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "futures 0.3.10", @@ -7015,7 +7011,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7028,7 +7024,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -7054,7 +7050,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "sc-client-api", @@ -7068,7 +7064,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "lazy_static", @@ -7097,7 +7093,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "parity-scale-codec", @@ -7113,7 +7109,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "parity-scale-codec", @@ -7128,7 +7124,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "parity-scale-codec", @@ -7146,7 +7142,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "finality-grandpa", @@ -7183,7 +7179,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "finality-grandpa", @@ -7207,7 +7203,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "ansi_term 0.12.1", "futures 0.3.10", @@ -7225,7 +7221,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "async-trait", "derive_more", @@ -7245,7 +7241,7 @@ dependencies = [ [[package]] name = "sc-light" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "hash-db", "lazy_static", @@ -7264,7 +7260,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "async-std", "async-trait", @@ -7317,7 +7313,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -7333,7 +7329,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "bytes 0.5.6", "fnv", @@ -7360,7 +7356,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "libp2p", @@ -7373,7 +7369,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7382,7 +7378,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "hash-db", @@ -7416,7 +7412,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "futures 0.3.10", @@ -7440,7 +7436,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.1.29", "jsonrpc-core", @@ -7458,7 +7454,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "directories 3.0.1", "exit-future", @@ -7522,7 +7518,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "parity-scale-codec", @@ -7537,7 +7533,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -7557,7 +7553,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -7578,7 +7574,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "ansi_term 0.12.1", "erased-serde", @@ -7602,7 +7598,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "futures 0.3.10", @@ -7624,7 +7620,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-diagnose", @@ -8090,7 +8086,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "sp-core", @@ -8102,7 +8098,7 @@ dependencies = [ [[package]] name = "sp-api" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "hash-db", "parity-scale-codec", @@ -8118,7 +8114,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -8130,7 +8126,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "serde", @@ -8142,7 +8138,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "integer-sqrt", "num-traits 0.2.12", @@ -8155,7 +8151,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-api", @@ -8167,7 +8163,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -8178,7 +8174,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-api", @@ -8190,7 +8186,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "log", @@ -8208,7 +8204,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "serde", "serde_json", @@ -8217,7 +8213,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-timer 3.0.2", @@ -8243,7 +8239,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "merlin", "parity-scale-codec", @@ -8263,7 +8259,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8272,7 +8268,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -8284,7 +8280,7 @@ dependencies = [ [[package]] name = "sp-core" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "base58", "blake2-rfc", @@ -8328,7 +8324,7 @@ dependencies = [ [[package]] name = "sp-database" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -8337,7 +8333,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -8347,7 +8343,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "environmental", "parity-scale-codec", @@ -8358,7 +8354,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "finality-grandpa", "log", @@ -8375,7 +8371,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -8387,7 +8383,7 @@ dependencies = [ [[package]] name = "sp-io" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "hash-db", @@ -8411,7 +8407,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "lazy_static", "sp-core", @@ -8422,7 +8418,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "async-trait", "derive_more", @@ -8439,7 +8435,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "serde", @@ -8451,7 +8447,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-compact" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", @@ -8462,7 +8458,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "sp-api", "sp-core", @@ -8472,7 +8468,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "backtrace", ] @@ -8480,7 +8476,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "serde", "sp-core", @@ -8489,7 +8485,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "either", "hash256-std-hasher", @@ -8510,7 +8506,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8527,7 +8523,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "Inflector", "proc-macro-crate", @@ -8539,7 +8535,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "serde", "serde_json", @@ -8548,7 +8544,7 @@ dependencies = [ [[package]] name = "sp-session" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-api", @@ -8561,7 +8557,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -8571,7 +8567,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "hash-db", "log", @@ -8593,12 +8589,12 @@ dependencies = [ [[package]] name = "sp-std" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" [[package]] name = "sp-storage" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8611,7 +8607,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "sp-core", @@ -8624,7 +8620,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8638,7 +8634,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "log", "parity-scale-codec", @@ -8651,7 +8647,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "derive_more", "futures 0.3.10", @@ -8667,7 +8663,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "hash-db", "memory-db", @@ -8681,7 +8677,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "futures-core", @@ -8693,7 +8689,7 @@ dependencies = [ [[package]] name = "sp-version" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8705,7 +8701,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "impl-trait-for-tuples 0.2.0", "parity-scale-codec", @@ -8858,7 +8854,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "chrono", "console_error_panic_hook", @@ -8884,7 +8880,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "platforms", ] @@ -8892,7 +8888,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.10", @@ -8915,7 +8911,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "async-std", "derive_more", @@ -8929,7 +8925,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.1.29", "futures 0.3.10", @@ -8956,7 +8952,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "futures 0.3.10", "substrate-test-utils-derive", @@ -8966,7 +8962,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.8.1" -source = "git+https://github.com/paritytech/substrate#c2aa42566437dbf0697e6f545c7cc7cb50722b11" +source = "git+https://github.com/paritytech/substrate#f2367f72ddabfb1580af7f9f21d72a0f86d32b07" dependencies = [ "proc-macro-crate", "quote 1.0.7", diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 95bd65253e..b852ba4b2c 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -63,7 +63,7 @@ use frame_support::{ use frame_system::{EnsureRoot, EnsureOneOf}; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; +use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use pallet_session::{historical as session_historical}; use static_assertions::const_assert; @@ -1301,6 +1301,9 @@ sp_api::impl_runtime_apis! { fn query_info(uxt: ::Extrinsic, len: u32) -> RuntimeDispatchInfo { TransactionPayment::query_info(uxt, len) } + fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } } #[cfg(feature = "runtime-benchmarks")] diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 98c6921e69..bc80992296 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -63,7 +63,7 @@ use frame_support::{ use frame_system::{EnsureRoot, EnsureOneOf}; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; +use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use pallet_session::historical as session_historical; use static_assertions::const_assert; @@ -1297,6 +1297,9 @@ sp_api::impl_runtime_apis! { fn query_info(uxt: ::Extrinsic, len: u32) -> RuntimeDispatchInfo { TransactionPayment::query_info(uxt, len) } + fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } } #[cfg(feature = "runtime-benchmarks")] diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index eab2c1bcd7..b852217807 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -55,7 +55,7 @@ use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; #[cfg(any(feature = "std", test))] use sp_version::NativeVersion; use sp_version::RuntimeVersion; -use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; +use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use pallet_grandpa::{AuthorityId as GrandpaId, fg_primitives}; use sp_core::OpaqueMetadata; use sp_staking::SessionIndex; @@ -874,5 +874,8 @@ sp_api::impl_runtime_apis! { fn query_info(uxt: ::Extrinsic, len: u32) -> RuntimeDispatchInfo { TransactionPayment::query_info(uxt, len) } + fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } } } diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 30545a3da9..9a4f7494ac 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -71,7 +71,7 @@ use frame_support::{ weights::Weight, }; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; +use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use pallet_session::historical as session_historical; use polkadot_runtime_parachains::reward_points::RewardValidatorsWithEraPoints; @@ -793,6 +793,9 @@ sp_api::impl_runtime_apis! { fn query_info(uxt: ::Extrinsic, len: u32) -> RuntimeDispatchInfo { TransactionPayment::query_info(uxt, len) } + fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } } impl crate::GetLastTimestamp for Runtime { diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 72915cc867..ad3335ccd5 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -60,7 +60,7 @@ use frame_support::{ }; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; -use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; +use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use pallet_session::historical as session_historical; use frame_system::{EnsureRoot}; @@ -1020,6 +1020,9 @@ sp_api::impl_runtime_apis! { fn query_info(uxt: ::Extrinsic, len: u32) -> RuntimeDispatchInfo { TransactionPayment::query_info(uxt, len) } + fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } } #[cfg(feature = "runtime-benchmarks")] -- GitLab